Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | update libressl to version 2.4.3 |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
0806b8d33b0d6b63cf496dfe607242f5 |
User & Date: | chw 2016-11-07 06:00:17.861 |
Context
2016-11-07
| ||
06:02 | update [undroidwish] win32 build scripts for libressl 2.4.3 check-in: a267606475 user: chw tags: trunk | |
06:00 | update libressl to version 2.4.3 check-in: 0806b8d33b user: chw tags: trunk | |
2016-11-06
| ||
22:17 | turn off ssl3 in tls for [AndroWish] and [undroidwish] check-in: 6b64b4fafa user: chw tags: trunk | |
Changes
Changes to jni/libressl/Android.mk.
︙ | ︙ | |||
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | LOCAL_SHORT_COMMANDS := true LOCAL_MODULE := libcrypto_tls LOCAL_SHARED_LIBRARIES := LOCAL_SRC_FILES := \ crypto/compat/explicit_bzero.c \ crypto/compat/reallocarray.c \ crypto/compat/timingsafe_memcmp.c \ crypto/aes/aes_cbc.c \ crypto/aes/aes_core.c \ crypto/camellia/camellia.c \ crypto/camellia/cmll_cbc.c \ crypto/rc4/rc4_enc.c \ crypto/rc4/rc4_skey.c \ crypto/whrlpool/wp_block.c \ | > > | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | LOCAL_SHORT_COMMANDS := true LOCAL_MODULE := libcrypto_tls LOCAL_SHARED_LIBRARIES := LOCAL_SRC_FILES := \ crypto/compat/arc4random_uniform.c \ crypto/compat/explicit_bzero.c \ crypto/compat/reallocarray.c \ crypto/compat/timingsafe_memcmp.c \ crypto/compat/timegm.c \ crypto/aes/aes_cbc.c \ crypto/aes/aes_core.c \ crypto/camellia/camellia.c \ crypto/camellia/cmll_cbc.c \ crypto/rc4/rc4_enc.c \ crypto/rc4/rc4_skey.c \ crypto/whrlpool/wp_block.c \ |
︙ | ︙ | |||
48 49 50 51 52 53 54 | crypto/asn1/a_bitstr.c \ crypto/asn1/a_bool.c \ crypto/asn1/a_bytes.c \ crypto/asn1/a_d2i_fp.c \ crypto/asn1/a_digest.c \ crypto/asn1/a_dup.c \ crypto/asn1/a_enum.c \ | < | | | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | crypto/asn1/a_bitstr.c \ crypto/asn1/a_bool.c \ crypto/asn1/a_bytes.c \ crypto/asn1/a_d2i_fp.c \ crypto/asn1/a_digest.c \ crypto/asn1/a_dup.c \ crypto/asn1/a_enum.c \ crypto/asn1/a_i2d_fp.c \ crypto/asn1/a_int.c \ crypto/asn1/a_mbstr.c \ crypto/asn1/a_object.c \ crypto/asn1/a_octet.c \ crypto/asn1/a_print.c \ crypto/asn1/a_set.c \ crypto/asn1/a_sign.c \ crypto/asn1/a_strex.c \ crypto/asn1/a_strnid.c \ crypto/asn1/a_time.c \ crypto/asn1/a_time_tm.c \ crypto/asn1/a_type.c \ crypto/asn1/a_utf8.c \ crypto/asn1/a_verify.c \ crypto/asn1/ameth_lib.c \ crypto/asn1/asn1_err.c \ crypto/asn1/asn1_gen.c \ crypto/asn1/asn1_lib.c \ crypto/asn1/asn1_par.c \ |
︙ | ︙ | |||
272 273 274 275 276 277 278 | crypto/ec/ecp_mont.c \ crypto/ec/ecp_nist.c \ crypto/ec/ecp_oct.c \ crypto/ec/ecp_smpl.c \ crypto/ecdh/ech_err.c \ crypto/ecdh/ech_key.c \ crypto/ecdh/ech_lib.c \ | < | 273 274 275 276 277 278 279 280 281 282 283 284 285 286 | crypto/ec/ecp_mont.c \ crypto/ec/ecp_nist.c \ crypto/ec/ecp_oct.c \ crypto/ec/ecp_smpl.c \ crypto/ecdh/ech_err.c \ crypto/ecdh/ech_key.c \ crypto/ecdh/ech_lib.c \ crypto/ecdsa/ecs_asn1.c \ crypto/ecdsa/ecs_err.c \ crypto/ecdsa/ecs_lib.c \ crypto/ecdsa/ecs_ossl.c \ crypto/ecdsa/ecs_sign.c \ crypto/ecdsa/ecs_vrf.c \ crypto/engine/eng_all.c \ |
︙ | ︙ | |||
344 345 346 347 348 349 350 | crypto/evp/m_ecdsa.c \ crypto/evp/m_gost2814789.c \ crypto/evp/m_gostr341194.c \ crypto/evp/m_md4.c \ crypto/evp/m_md5.c \ crypto/evp/m_null.c \ crypto/evp/m_ripemd.c \ | < | 344 345 346 347 348 349 350 351 352 353 354 355 356 357 | crypto/evp/m_ecdsa.c \ crypto/evp/m_gost2814789.c \ crypto/evp/m_gostr341194.c \ crypto/evp/m_md4.c \ crypto/evp/m_md5.c \ crypto/evp/m_null.c \ crypto/evp/m_ripemd.c \ crypto/evp/m_sha1.c \ crypto/evp/m_sigver.c \ crypto/evp/m_streebog.c \ crypto/evp/m_wp.c \ crypto/evp/names.c \ crypto/evp/p5_crpt.c \ crypto/evp/p5_crpt2.c \ |
︙ | ︙ | |||
482 483 484 485 486 487 488 | crypto/rsa/rsa_sign.c \ crypto/rsa/rsa_ssl.c \ crypto/rsa/rsa_x931.c \ crypto/sha/sha1_one.c \ crypto/sha/sha1dgst.c \ crypto/sha/sha256.c \ crypto/sha/sha512.c \ | < < | 481 482 483 484 485 486 487 488 489 490 491 492 493 494 | crypto/rsa/rsa_sign.c \ crypto/rsa/rsa_ssl.c \ crypto/rsa/rsa_x931.c \ crypto/sha/sha1_one.c \ crypto/sha/sha1dgst.c \ crypto/sha/sha256.c \ crypto/sha/sha512.c \ crypto/stack/stack.c \ crypto/ts/ts_asn1.c \ crypto/ts/ts_conf.c \ crypto/ts/ts_err.c \ crypto/ts/ts_lib.c \ crypto/ts/ts_req_print.c \ crypto/ts/ts_req_utils.c \ |
︙ | ︙ | |||
606 607 608 609 610 611 612 | ssl/d1_meth.c \ ssl/d1_pkt.c \ ssl/d1_srtp.c \ ssl/d1_srvr.c \ ssl/pqueue.c \ ssl/s23_clnt.c \ ssl/s23_lib.c \ | < < < | 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 | ssl/d1_meth.c \ ssl/d1_pkt.c \ ssl/d1_srtp.c \ ssl/d1_srvr.c \ ssl/pqueue.c \ ssl/s23_clnt.c \ ssl/s23_lib.c \ ssl/s23_pkt.c \ ssl/s23_srvr.c \ ssl/s3_both.c \ ssl/s3_cbc.c \ ssl/s3_clnt.c \ ssl/s3_lib.c \ ssl/s3_pkt.c \ ssl/s3_srvr.c \ ssl/ssl_algs.c \ ssl/ssl_asn1.c \ ssl/ssl_cert.c \ ssl/ssl_ciph.c \ ssl/ssl_err.c \ |
︙ | ︙ |
Changes to jni/libressl/CMakeLists.txt.
|
| | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | cmake_minimum_required (VERSION 2.8.8) include(CheckFunctionExists) include(CheckLibraryExists) include(CheckIncludeFiles) include(CheckTypeSize) project (LibreSSL C) enable_testing() file(READ ${CMAKE_SOURCE_DIR}/ssl/VERSION SSL_VERSION) string(STRIP ${SSL_VERSION} SSL_VERSION) string(REPLACE ":" "." SSL_VERSION ${SSL_VERSION}) string(REGEX REPLACE "\\..*" "" SSL_MAJOR_VERSION ${SSL_VERSION}) file(READ ${CMAKE_SOURCE_DIR}/crypto/VERSION CRYPTO_VERSION) string(STRIP ${CRYPTO_VERSION} CRYPTO_VERSION) string(REPLACE ":" "." CRYPTO_VERSION ${CRYPTO_VERSION}) string(REGEX REPLACE "\\..*" "" CRYPTO_MAJOR_VERSION ${CRYPTO_VERSION}) file(READ ${CMAKE_SOURCE_DIR}/tls/VERSION TLS_VERSION) string(STRIP ${TLS_VERSION} TLS_VERSION) string(REPLACE ":" "." TLS_VERSION ${TLS_VERSION}) string(REGEX REPLACE "\\..*" "" TLS_MAJOR_VERSION ${TLS_VERSION}) option(ENABLE_ASM "Enable assembly" ON) option(ENABLE_EXTRATESTS "Enable extra tests that may be unreliable on some platforms" OFF) option(ENABLE_NC "Enable installing TLS-enabled nc(1)" OFF) set(OPENSSLDIR ${OPENSSLDIR} CACHE PATH "Set the default openssl directory" FORCE) set(BUILD_NC true) if(CMAKE_SYSTEM_NAME MATCHES "Darwin") add_definitions(-fno-common) endif() if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") add_definitions(-DHAVE_ATTRIBUTE__BOUNDED__) endif() if(CMAKE_SYSTEM_NAME MATCHES "Linux") add_definitions(-D_DEFAULT_SOURCE) add_definitions(-D_BSD_SOURCE) add_definitions(-D_POSIX_SOURCE) add_definitions(-D_GNU_SOURCE) endif() if(CMAKE_SYSTEM_NAME MATCHES "MINGW") set(BUILD_NC false) endif() if(MSVC) set(BUILD_NC false) endif() if(CMAKE_SYSTEM_NAME MATCHES "HP-UX") if(CMAKE_C_COMPILER MATCHES "gcc") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=gnu99 -fno-strict-aliasing") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlp64") else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O2 +DD64 +Otype_safety=off") endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=600 -D__STRICT_ALIGNMENT") endif() if(CMAKE_SYSTEM_NAME MATCHES "SunOS") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=gnu99 -fno-strict-aliasing") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__EXTENSIONS__") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=600") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBSD_COMP") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpic -m64") endif() add_definitions(-DLIBRESSL_INTERNAL) add_definitions(-DOPENSSL_NO_HW_PADLOCK) set(CMAKE_POSITION_INDEPENDENT_CODE true) if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") add_definitions(-Wno-pointer-sign) endif() |
︙ | ︙ | |||
92 93 94 95 96 97 98 | endif() check_function_exists(strlcat HAVE_STRLCAT) if(HAVE_STRLCAT) add_definitions(-DHAVE_STRLCAT) endif() | | | > > > > > > > > > > | 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | endif() check_function_exists(strlcat HAVE_STRLCAT) if(HAVE_STRLCAT) add_definitions(-DHAVE_STRLCAT) endif() check_function_exists(strlcpy HAVE_STRLCPY) if(HAVE_STRLCPY) add_definitions(-DHAVE_STRLCPY) endif() check_function_exists(strndup HAVE_STRNDUP) if(HAVE_STRNDUP) add_definitions(-DHAVE_STRNDUP) endif() if(MSVC) set(HAVE_STRNLEN true) add_definitions(-DHAVE_STRNLEN) else() check_function_exists(strnlen HAVE_STRNLEN) if(HAVE_STRNLEN) add_definitions(-DHAVE_STRNLEN) endif() endif() check_function_exists(strsep HAVE_STRSEP) if(HAVE_STRSEP) add_definitions(-DHAVE_STRSEP) endif() check_function_exists(timegm HAVE_TIMEGM) if(HAVE_TIMEGM) add_definitions(-DHAVE_TIMEGM) endif() check_function_exists(arc4random_buf HAVE_ARC4RANDOM_BUF) if(HAVE_ARC4RANDOM_BUF) add_definitions(-DHAVE_ARC4RANDOM_BUF) endif() check_function_exists(arc4random_uniform HAVE_ARC4RANDOM_UNIFORM) if(HAVE_ARC4RANDOM_UNIFORM) add_definitions(-DHAVE_ARC4RANDOM_UNIFORM) endif() check_function_exists(explicit_bzero HAVE_EXPLICIT_BZERO) if(HAVE_EXPLICIT_BZERO) add_definitions(-DHAVE_EXPLICIT_BZERO) endif() check_function_exists(getauxval HAVE_GETAUXVAL) |
︙ | ︙ | |||
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | add_definitions(-DHAVE_TIMINGSAFE_BCMP) endif() check_function_exists(timingsafe_memcmp HAVE_TIMINGSAFE_MEMCMP) if(HAVE_MEMCMP) add_definitions(-DHAVE_MEMCMP) endif() check_include_files(err.h HAVE_ERR_H) if(HAVE_ERR_H) add_definitions(-DHAVE_ERR_H) endif() set(OPENSSL_LIBS ssl crypto) if(CMAKE_HOST_WIN32) set(OPENSSL_LIBS ${OPENSSL_LIBS} ws2_32) endif() if(CMAKE_SYSTEM_NAME MATCHES "Linux") check_library_exists(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME) if (HAVE_CLOCK_GETTIME) set(OPENSSL_LIBS ${OPENSSL_LIBS} rt) endif() endif() | > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > | 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 | add_definitions(-DHAVE_TIMINGSAFE_BCMP) endif() check_function_exists(timingsafe_memcmp HAVE_TIMINGSAFE_MEMCMP) if(HAVE_MEMCMP) add_definitions(-DHAVE_MEMCMP) endif() check_function_exists(memmem HAVE_MEMMEM) if(HAVE_MEMMEM) add_definitions(-DHAVE_MEMMEM) endif() check_include_files(err.h HAVE_ERR_H) if(HAVE_ERR_H) add_definitions(-DHAVE_ERR_H) endif() if(ENABLE_ASM) if("${CMAKE_C_COMPILER_ABI}" STREQUAL "ELF") if("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "(x86_64|amd64)") set(HOST_ASM_ELF_X86_64 true) elseif(CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i386") set(HOST_ASM_ELF_X86_64 true) endif() elseif(APPLE AND "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") set(HOST_ASM_MACOSX_X86_64 true) endif() endif() set(OPENSSL_LIBS ssl crypto) if(CMAKE_HOST_WIN32) set(OPENSSL_LIBS ${OPENSSL_LIBS} ws2_32) endif() if(CMAKE_SYSTEM_NAME MATCHES "Linux") check_library_exists(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME) if (HAVE_CLOCK_GETTIME) set(OPENSSL_LIBS ${OPENSSL_LIBS} rt) endif() endif() if(CMAKE_SYSTEM_NAME MATCHES "HP-UX") set(OPENSSL_LIBS ${OPENSSL_LIBS} pthread) endif() if(CMAKE_SYSTEM_NAME MATCHES "SunOS") set(OPENSSL_LIBS ${OPENSSL_LIBS} nsl socket) endif() if(NOT (CMAKE_SYSTEM_NAME MATCHES "(Darwin|MINGW|CYGWIN)" OR MSVC)) set(BUILD_SHARED true) endif() check_type_size(time_t SIZEOF_TIME_T) if(SIZEOF_TIME_T STREQUAL "4") set(SMALL_TIME_T true) message(WARNING " ** Warning, this system is unable to represent times past 2038\n" " ** It will behave incorrectly when handling valid RFC5280 dates") endif() add_definitions(-DSIZEOF_TIME_T=${SIZEOF_TIME_T}) add_subdirectory(crypto) add_subdirectory(ssl) add_subdirectory(apps) add_subdirectory(tls) add_subdirectory(include) if(NOT MSVC) add_subdirectory(man) add_subdirectory(tests) endif() configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) |
Changes to jni/libressl/ChangeLog.
︙ | ︙ | |||
24 25 26 27 28 29 30 | The portable bits of the project are largely maintained out-of-tree, and their history is also available from Git. https://github.com/libressl-portable/portable LibreSSL Portable Release Notes: | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > | | > | > > | > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > | > > > > > > > > > > > > | | | > > | > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 | The portable bits of the project are largely maintained out-of-tree, and their history is also available from Git. https://github.com/libressl-portable/portable LibreSSL Portable Release Notes: 2.4.3 - Bug fixes and reliability improvements * Reverted change that cleans up the EVP cipher context in EVP_EncryptFinal() and EVP_DecryptFinal(). Some software relies on the previous behaviour. * Avoid unbounded memory growth in libssl, which can be triggered by a TLS client repeatedly renegotiating and sending OCSP Status Request TLS extensions. * Avoid falling back to a weak digest for (EC)DH when using SNI with libssl. 2.4.2 - Bug fixes and improvements * Fixed loading default certificate locations with openssl s_client. * Ensured OSCP only uses and compares GENERALIZEDTIME values as per RFC6960. Also added fixes for OCSP to work with intermediate certificates provided in responses. * Improved behavior of arc4random on Windows to not appear to leak memory in debug tools, reduced privileges of allocated memory. * Fixed incorrect results from BN_mod_word() when the modulus is too large, thanks to Brian Smith from BoringSSL. * Correctly handle an EOF prior to completing the TLS handshake in libtls. * Improved libtls ceritificate loading and cipher string validation. * Updated libtls cipher group suites into four categories: "secure" (TLSv1.2+AEAD+PFS) "compat" (HIGH:!aNULL) "legacy" (HIGH:MEDIUM:!aNULL) "insecure" (ALL:!aNULL:!eNULL) This allows for flexibility and finer grained control, rather than having two extremes. * Limited support for 'backward compatible' SSLv2 handshake packets to when TLS 1.0 is enabled, providing more restricted compatibility with TLS 1.0 clients. * openssl(1) and other documentation improvements. * Removed flags for disabling constant-time operations. This removes support for DSA_FLAG_NO_EXP_CONSTTIME, DH_FLAG_NO_EXP_CONSTTIME, and RSA_FLAG_NO_CONSTTIME flags, making all of these operations unconditionally constant-time. 2.4.1 - Security fix * Correct a problem that prevents the DSA signing algorithm from running in constant time even if the flag BN_FLG_CONSTTIME is set. This issue was reported by Cesar Pereida (Aalto University), Billy Brumley (Tampere University of Technology), and Yuval Yarom (The University of Adelaide and NICTA). The fix was developed by Cesar Pereida. 2.4.0 - Build improvements, new features * Many improvements to the CMake build infrastructure, including Solaris, mingw-w64, Cygwin, and HP-UX support. Thanks to Kinichiro Inoguchi for this work. * Added missing error handling around bn_wexpand() calls. * Added explicit_bzero calls for freed ASN.1 objects. * Fixed X509_*set_object functions to return 0 on allocation failure. * Implemented the IETF ChaCha20-Poly1305 cipher suites. * Changed default EVP_aead_chacha20_poly1305() implementation to the IETF version, which is now the default. * Fixed password prompts from openssl(1) to properly handle ^C. * Reworked error handling in libtls so that configuration errors are visible. * Deprecated internal use of EVP_[Cipher|Encrypt|Decrypt]_Final. * Manpage fixes and updates 2.3.5 - Reliability fix * Fixed an error in libcrypto when parsing some ASN.1 elements > 16k. 2.3.4 - Security Update * Fix multiple vulnerabilities in libcrypto relating to ASN.1 and encoding. From OpenSSL. * Minor build fixes 2.3.3 - OpenBSD 5.9 release branch tagged * Reworked build scripts to better sync with OpenNTPD-portable * Fixed broken manpage links * Fixed an nginx compatibility issue by adding an 'install_sw' make alias * Fixed HP-UX builds * Changed the default configuration directory to c:\LibreSSL\ssl on Windows binary builds * cert.pem has been reorganized and synced with Mozilla's certificate store 2.3.2 - Compatibility and Reliability fixes * Changed format of LIBRESSL_VERSION_NUMBER to match that of OPENSSL_VERSION_NUMBER, see: https://wiki.openssl.org/index.php/Manual:OPENSSL_VERSION_NUMBER(3) * Added EVP_aead_chacha20_poly1305_ietf() which matches the AEAD construction introduced in RFC 7539, which is different than that already used in TLS with EVP_aead_chacha20_poly1305() * Avoid a potential undefined C99+ behavior due to shift overflow in AES_decrypt, reported by Pascal Cuoq <cuoq at trust-in-soft.com> * More man pages converted from pod to mdoc format * Added COMODO RSA Certification Authority and QuoVadis root certificates to cert.pem * Removed Remove "C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority" (serial 3c:91:31:cb:1f:f6:d0:1b:0e:9a:b8:d0:44:bf:12:be) root certificate from cert.pem * Added support for building nc(1) on Solaris * Fixed GCC 5.x+ preprocessor checks, reported by Ruslan Babayev * Improved console handling with openssl(1) on Windows * Ensure the network stack is enabled on Windows when running tls_init() * Fixed incorrect TLS certificate loading by nc(1) * Added support for Solaris 11.3's getentropy(2) system call * Enabled support for using NetBSD 7.0's arc4random(3) implementation * Deprecated the SSL_OP_SINGLE_DH_USE flag by disabling its effect * Fixes from OpenSSL 1.0.1q - CVE-2015-3194 - NULL pointer dereference in client side certificate validation. - CVE-2015-3195 - Memory leak in PKCS7 - not reachable from TLS/SSL * The following OpenSSL CVEs did not apply to LibreSSL - CVE-2015-3193 - Carry propagating bug in the x86_64 Montgomery squaring procedure. - CVE-2015-3196 - Double free race condition of the identify hint data. See https://marc.info/?l=openbsd-announce&m=144925068504102 2.3.1 - ASN.1 and time handling cleanups * ASN.1 cleanups and RFC5280 compliance fixes. * Time representations switched from 'unsigned long' to 'time_t'. LibreSSL now checks if the host OS supports 64-bit time_t. * Fixed a leak in SSL_new in the error path. * Support always extracting the peer cipher and version with libtls. * Added ability to check certificate validity times with libtls, tls_peer_cert_notbefore and tls_peer_cert_notafter. * Changed tls_connect_servername to use the first address that resolves with getaddrinfo(). * Remove broken conditional EVP_CHECK_DES_KEY code (non-functional since initial commit in 2004). * Fixed a memory leak and out-of-bounds access in OBJ_obj2txt, reported by Qualys Security. * Fixed an up-to 7 byte overflow in RC4 when len is not a multiple of sizeof(RC4_CHUNK), reported by Pascal Cuoq <cuoq at trust-in-soft.com>. * Reject too small bits value in BN_generate_prime_ex(), so that it does not risk becoming negative in probable_prime_dh_safe(), reported by Franck Denis. * Enable nc(1) builds on more platforms. 2.3.0 - SSLv3 removed, libtls API changes, portability improvements * SSLv3 is now permanently removed from the tree. * The libtls API is changed from the 2.2.x series. The read/write functions work correctly with external event libraries. See the tls_init man page for examples of using libtls correctly in asynchronous mode. Client-side verification is now supported, with the client supplying the certificate to the server. Also, when using tls_connect_fds, tls_connect_socket or tls_accept_fds, libtls no longer implicitly closes the passed in sockets. The caller is responsible for closing them in this case. * When loading a DSA key from an raw (without DH parameters) ASN.1 serialization, perform some consistency checks on its `p' and `q' values, and return an error if the checks failed. Thanks for Georgi Guninski (guninski at guninski dot com) for mentioning the possibility of a weak (non prime) q value and providing a test case. See https://cpunks.org/pipermail/cypherpunks/2015-September/009007.html for a longer discussion. * Fixed a bug in ECDH_compute_key that can lead to silent truncation of the result key without error. A coding error could cause software to use much shorter keys than intended. * Removed support for DTLS_BAD_VER. Pre-DTLSv1 implementations are no longer supported. * The engine command and parameters are removed from the openssl(1). Previous releases removed dynamic and builtin engine support already. * SHA-0 is removed, which was withdrawn shortly after publication 20 years ago. * Added Certplus CA root certificate to the default cert.pem file. * New interface OPENSSL_cpu_caps is provided that does not allow software to inadvertently modify cpu capability flags. OPENSSL_ia32cap and OPENSSL_ia32cap_loc are removed. * The out_len argument of AEAD changed from ssize_t to size_t. * Deduplicated DTLS code, sharing bugfixes and improvements with TLS. * Converted 'nc' to use libtls for client and server operations; it is included in the libressl-portable distribution as an example of how to use the library. 2.2.3 - Bug fixes, build enhancements * LibreSSL 2.2.2 incorrectly handles ClientHello messages that do not include TLS extensions, resulting in such handshakes being aborted. This release corrects the handling of such messages. Thanks to Ligushka from github for reporting the issue. |
︙ | ︙ |
Changes to jni/libressl/Makefile.am.
1 2 3 4 5 6 7 | SUBDIRS = crypto ssl tls include apps tests man ACLOCAL_AMFLAGS = -I m4 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libcrypto.pc libssl.pc libtls.pc openssl.pc EXTRA_DIST = README.md README.windows VERSION config scripts | | > > > | 1 2 3 4 5 6 7 8 9 10 11 | SUBDIRS = crypto ssl tls include apps tests man ACLOCAL_AMFLAGS = -I m4 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libcrypto.pc libssl.pc libtls.pc openssl.pc EXTRA_DIST = README.md README.windows VERSION config scripts EXTRA_DIST += CMakeLists.txt cmake_uninstall.cmake.in .PHONY: install_sw install_sw: install |
Changes to jni/libressl/Makefile.in.
︙ | ︙ | |||
190 191 192 193 194 195 196 | ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/libcrypto.pc.in \ $(srcdir)/libssl.pc.in $(srcdir)/libtls.pc.in \ $(srcdir)/openssl.pc.in COPYING ChangeLog compile config.guess \ | | | 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 | ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/libcrypto.pc.in \ $(srcdir)/libssl.pc.in $(srcdir)/libtls.pc.in \ $(srcdir)/openssl.pc.in COPYING ChangeLog compile config.guess \ config.sub install-sh ltmain.sh missing tap-driver.sh DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ |
︙ | ︙ | |||
361 362 363 364 365 366 367 | top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = crypto ssl tls include apps tests man ACLOCAL_AMFLAGS = -I m4 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libcrypto.pc libssl.pc libtls.pc openssl.pc EXTRA_DIST = README.md README.windows VERSION config scripts \ | | | 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 | top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = crypto ssl tls include apps tests man ACLOCAL_AMFLAGS = -I m4 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libcrypto.pc libssl.pc libtls.pc openssl.pc EXTRA_DIST = README.md README.windows VERSION config scripts \ CMakeLists.txt cmake_uninstall.cmake.in all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ |
︙ | ︙ | |||
861 862 863 864 865 866 867 868 869 870 | maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-pkgconfigDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: | > > > | 861 862 863 864 865 866 867 868 869 870 871 872 873 | maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-pkgconfigDATA .PRECIOUS: Makefile .PHONY: install_sw install_sw: install # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: |
Changes to jni/libressl/README.md.
︙ | ︙ | |||
26 27 28 29 30 31 32 | other operating systems, and assists with improving OS-native implementations where possible. At the time of this writing, LibreSSL is know to build and work on: * Linux (kernel 3.17 or later recommended) * FreeBSD (tested with 9.2 and later) | | | 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | other operating systems, and assists with improving OS-native implementations where possible. At the time of this writing, LibreSSL is know to build and work on: * Linux (kernel 3.17 or later recommended) * FreeBSD (tested with 9.2 and later) * NetBSD (7.0 or later recommended) * HP-UX (11i) * Solaris (11 and later preferred) * Mac OS X (tested with 10.8 and later) * AIX (5.3 and later) LibreSSL also supports the following Windows environments: * Microsoft Windows (XP or higher, x86 and x64) |
︙ | ︙ |
Changes to jni/libressl/VERSION.
|
| | | 1 2 | 2.4.3 |
Changes to jni/libressl/apps/CMakeLists.txt.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < | 1 2 | add_subdirectory(openssl) add_subdirectory(nc) |
Changes to jni/libressl/apps/Makefile.am.
1 2 | include $(top_srcdir)/Makefile.am.common | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1 2 3 4 5 | include $(top_srcdir)/Makefile.am.common SUBDIRS = openssl nc EXTRA_DIST = CMakeLists.txt |
Changes to jni/libressl/apps/Makefile.in.
︙ | ︙ | |||
9 10 11 12 13 14 15 | # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ | < < | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ |
︙ | ︙ | |||
85 86 87 88 89 90 91 | PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ | < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | > > > > > > > > > > > > > > > | > | > > > > > > > > > > > > > > > > > > > > > > > > > | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = apps ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/check-hardening-options.m4 \ $(top_srcdir)/m4/check-libc.m4 \ $(top_srcdir)/m4/check-os-options.m4 \ $(top_srcdir)/m4/disable-compiler-warnings.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.common DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ |
︙ | ︙ | |||
340 341 342 343 344 345 346 | sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat -DLIBRESSL_INTERNAL | | < < < < < < < < < < < < < | | < | 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 | sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat -DLIBRESSL_INTERNAL SUBDIRS = openssl nc EXTRA_DIST = CMakeLists.txt all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ |
︙ | ︙ | |||
389 390 391 392 393 394 395 | cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > | | | 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 | cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ |
︙ | ︙ | |||
617 618 619 620 621 622 623 624 | cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am | > > > > > > > > > > > > > > > > > > > > > > > > > | | | | < < | | | | | | 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 | cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ |
︙ | ︙ | |||
654 655 656 657 658 659 660 | distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." | | | | < | < | | | | | | < | | | | | < | | < | | | | | | | | < | | | | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 | distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: |
Deleted jni/libressl/apps/apps.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/apps.h.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/apps_posix.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/apps_win.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/asn1pars.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/ca.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/cert.pem.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/certhash.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/certhash_disabled.c.
|
| < < < < < < < < < < < < < |
Deleted jni/libressl/apps/ciphers.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/cms.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/crl.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/crl2p7.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/dgst.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/dh.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/dhparam.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/dsa.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/dsaparam.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/ec.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/ecparam.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/enc.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/engine.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/errstr.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/gendh.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/gendsa.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/genpkey.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/genrsa.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added jni/libressl/apps/nc/CMakeLists.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | if(BUILD_NC) include_directories( . ./compat ../../include ../../include/compat ) set( NC_SRC atomicio.c netcat.c socks.c compat/socket.c ) check_function_exists(b64_ntop HAVE_B64_NTOP) if(HAVE_B64_NTOP) add_definitions(-DHAVE_B64_NTOP) else() set(NC_SRC ${NC_SRC} compat/base64.c) endif() check_function_exists(accept4 HAVE_ACCEPT4) if(HAVE_ACCEPT4) add_definitions(-DHAVE_ACCEPT4) else() set(NC_SRC ${NC_SRC} compat/accept4.c) endif() check_function_exists(readpassphrase HAVE_READPASSPHRASE) if(HAVE_READPASSPHRASE) add_definitions(-DHAVE_READPASSPHRASE) else() set(NC_SRC ${NC_SRC} compat/readpassphrase.c) endif() check_function_exists(strtonum HAVE_STRTONUM) if(HAVE_STRTONUM) add_definitions(-DHAVE_STRTONUM) else() set(NC_SRC ${NC_SRC} compat/strtonum.c) endif() if(NOT "${OPENSSLDIR}" STREQUAL "") add_definitions(-DDEFAULT_CA_FILE=\"${OPENSSLDIR}/cert.pem\") else() add_definitions(-DDEFAULT_CA_FILE=\"${CMAKE_INSTALL_PREFIX}/etc/ssl/cert.pem\") endif() add_executable(nc ${NC_SRC}) target_link_libraries(nc tls ${OPENSSL_LIBS}) if(ENABLE_NC) install(TARGETS nc DESTINATION bin) install(FILES nc.1 DESTINATION share/man/man1) endif() endif() |
Added jni/libressl/apps/nc/Makefile.am.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | include $(top_srcdir)/Makefile.am.common if BUILD_NC if ENABLE_NC bin_PROGRAMS = nc else noinst_PROGRAMS = nc endif EXTRA_DIST = nc.1 EXTRA_DIST += CMakeLists.txt nc_LDADD = $(PLATFORM_LDADD) $(PROG_LDADD) nc_LDADD += $(abs_top_builddir)/crypto/libcrypto.la nc_LDADD += $(abs_top_builddir)/ssl/libssl.la nc_LDADD += $(abs_top_builddir)/tls/libtls.la AM_CPPFLAGS += -I$(top_srcdir)/apps/nc/compat if OPENSSLDIR_DEFINED AM_CPPFLAGS += -DDEFAULT_CA_FILE=\"@OPENSSLDIR@/cert.pem\" else AM_CPPFLAGS += -DDEFAULT_CA_FILE=\"$(sysconfdir)/ssl/cert.pem\" endif nc_SOURCES = atomicio.c nc_SOURCES += netcat.c nc_SOURCES += socks.c noinst_HEADERS = atomicio.h noinst_HEADERS += compat/sys/socket.h nc_SOURCES += compat/socket.c if !HAVE_B64_NTOP nc_SOURCES += compat/base64.c endif if !HAVE_ACCEPT4 nc_SOURCES += compat/accept4.c endif if !HAVE_READPASSPHRASE nc_SOURCES += compat/readpassphrase.c endif if !HAVE_STRTONUM nc_SOURCES += compat/strtonum.c endif endif |
Added jni/libressl/apps/nc/Makefile.in.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 | # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in 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 program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @BUILD_NC_TRUE@@ENABLE_NC_TRUE@bin_PROGRAMS = nc$(EXEEXT) @BUILD_NC_TRUE@@ENABLE_NC_FALSE@noinst_PROGRAMS = nc$(EXEEXT) @BUILD_NC_TRUE@am__append_1 = -I$(top_srcdir)/apps/nc/compat @BUILD_NC_TRUE@@OPENSSLDIR_DEFINED_TRUE@am__append_2 = -DDEFAULT_CA_FILE=\"@OPENSSLDIR@/cert.pem\" @BUILD_NC_TRUE@@OPENSSLDIR_DEFINED_FALSE@am__append_3 = -DDEFAULT_CA_FILE=\"$(sysconfdir)/ssl/cert.pem\" @BUILD_NC_TRUE@@HAVE_B64_NTOP_FALSE@am__append_4 = compat/base64.c @BUILD_NC_TRUE@@HAVE_ACCEPT4_FALSE@am__append_5 = compat/accept4.c @BUILD_NC_TRUE@@HAVE_READPASSPHRASE_FALSE@am__append_6 = compat/readpassphrase.c @BUILD_NC_TRUE@@HAVE_STRTONUM_FALSE@am__append_7 = compat/strtonum.c subdir = apps/nc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/check-hardening-options.m4 \ $(top_srcdir)/m4/check-libc.m4 \ $(top_srcdir)/m4/check-os-options.m4 \ $(top_srcdir)/m4/disable-compiler-warnings.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__noinst_HEADERS_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am__nc_SOURCES_DIST = atomicio.c netcat.c socks.c compat/socket.c \ compat/base64.c compat/accept4.c compat/readpassphrase.c \ compat/strtonum.c am__dirstamp = $(am__leading_dot)dirstamp @BUILD_NC_TRUE@@HAVE_B64_NTOP_FALSE@am__objects_1 = \ @BUILD_NC_TRUE@@HAVE_B64_NTOP_FALSE@ compat/base64.$(OBJEXT) @BUILD_NC_TRUE@@HAVE_ACCEPT4_FALSE@am__objects_2 = \ @BUILD_NC_TRUE@@HAVE_ACCEPT4_FALSE@ compat/accept4.$(OBJEXT) @BUILD_NC_TRUE@@HAVE_READPASSPHRASE_FALSE@am__objects_3 = compat/readpassphrase.$(OBJEXT) @BUILD_NC_TRUE@@HAVE_STRTONUM_FALSE@am__objects_4 = \ @BUILD_NC_TRUE@@HAVE_STRTONUM_FALSE@ compat/strtonum.$(OBJEXT) @BUILD_NC_TRUE@am_nc_OBJECTS = atomicio.$(OBJEXT) netcat.$(OBJEXT) \ @BUILD_NC_TRUE@ socks.$(OBJEXT) compat/socket.$(OBJEXT) \ @BUILD_NC_TRUE@ $(am__objects_1) $(am__objects_2) \ @BUILD_NC_TRUE@ $(am__objects_3) $(am__objects_4) nc_OBJECTS = $(am_nc_OBJECTS) am__DEPENDENCIES_1 = @BUILD_NC_TRUE@nc_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @BUILD_NC_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_NC_TRUE@ $(abs_top_builddir)/crypto/libcrypto.la \ @BUILD_NC_TRUE@ $(abs_top_builddir)/ssl/libssl.la \ @BUILD_NC_TRUE@ $(abs_top_builddir)/tls/libtls.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(nc_SOURCES) DIST_SOURCES = $(am__nc_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__noinst_HEADERS_DIST = atomicio.h compat/sys/socket.h HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.common $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCRYPTO_VERSION = @LIBCRYPTO_VERSION@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSSL_VERSION = @LIBSSL_VERSION@ LIBTLS_VERSION = @LIBTLS_VERSION@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSLDIR = @OPENSSLDIR@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PLATFORM_LDADD = @PLATFORM_LDADD@ PROG_LDADD = @PROG_LDADD@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat \ -DLIBRESSL_INTERNAL $(am__append_1) $(am__append_2) \ $(am__append_3) @BUILD_NC_TRUE@EXTRA_DIST = nc.1 CMakeLists.txt @BUILD_NC_TRUE@nc_LDADD = $(PLATFORM_LDADD) $(PROG_LDADD) \ @BUILD_NC_TRUE@ $(abs_top_builddir)/crypto/libcrypto.la \ @BUILD_NC_TRUE@ $(abs_top_builddir)/ssl/libssl.la \ @BUILD_NC_TRUE@ $(abs_top_builddir)/tls/libtls.la @BUILD_NC_TRUE@nc_SOURCES = atomicio.c netcat.c socks.c \ @BUILD_NC_TRUE@ compat/socket.c $(am__append_4) $(am__append_5) \ @BUILD_NC_TRUE@ $(am__append_6) $(am__append_7) @BUILD_NC_TRUE@noinst_HEADERS = atomicio.h compat/sys/socket.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign apps/nc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign apps/nc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.common $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list compat/$(am__dirstamp): @$(MKDIR_P) compat @: > compat/$(am__dirstamp) compat/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) compat/$(DEPDIR) @: > compat/$(DEPDIR)/$(am__dirstamp) compat/socket.$(OBJEXT): compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/base64.$(OBJEXT): compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/accept4.$(OBJEXT): compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/readpassphrase.$(OBJEXT): compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/strtonum.$(OBJEXT): compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) nc$(EXEEXT): $(nc_OBJECTS) $(nc_DEPENDENCIES) $(EXTRA_nc_DEPENDENCIES) @rm -f nc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(nc_OBJECTS) $(nc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f compat/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atomicio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netcat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/accept4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/base64.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/readpassphrase.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/socket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/strtonum.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f compat/$(DEPDIR)/$(am__dirstamp) -rm -f compat/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) compat/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) compat/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: |
Added jni/libressl/apps/nc/atomicio.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | /* $OpenBSD: atomicio.c,v 1.10 2011/01/08 00:47:19 jeremy Exp $ */ /* * Copyright (c) 2006 Damien Miller. All rights reserved. * Copyright (c) 2005 Anil Madhavapeddy. All rights reserved. * Copyright (c) 1995,1999 Theo de Raadt. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR 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 <errno.h> #include <poll.h> #include <unistd.h> #include "atomicio.h" /* * ensure all of data on socket comes through. f==read || f==vwrite */ size_t atomicio(ssize_t (*f) (int, void *, size_t), int fd, void *_s, size_t n) { char *s = _s; size_t pos = 0; ssize_t res; struct pollfd pfd; pfd.fd = fd; pfd.events = f == read ? POLLIN : POLLOUT; while (n > pos) { res = (f) (fd, s + pos, n - pos); switch (res) { case -1: if (errno == EINTR) continue; if ((errno == EAGAIN) || (errno == ENOBUFS)) { (void)poll(&pfd, 1, -1); continue; } return 0; case 0: errno = EPIPE; return pos; default: pos += (size_t)res; } } return (pos); } |
Added jni/libressl/apps/nc/atomicio.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | /* $OpenBSD: atomicio.h,v 1.1 2005/05/24 20:13:28 avsm Exp $ */ /* * Copyright (c) 2006 Damien Miller. All rights reserved. * Copyright (c) 1995,1999 Theo de Raadt. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _ATOMICIO_H #define _ATOMICIO_H /* * Ensure all of data on socket comes through. f==read || f==vwrite */ size_t atomicio(ssize_t (*)(int, void *, size_t), int, void *, size_t); #define vwrite (ssize_t (*)(int, void *, size_t))write #endif /* _ATOMICIO_H */ |
Added jni/libressl/apps/nc/compat/accept4.c.
> > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <sys/socket.h> #include <fcntl.h> int accept4(int s, struct sockaddr *addr, socklen_t *addrlen, int flags) { int rets = accept(s, addr, addrlen); if (rets == -1) return s; if (flags & SOCK_CLOEXEC) { flags = fcntl(s, F_GETFD); fcntl(rets, F_SETFD, flags | FD_CLOEXEC); } return rets; } |
Added jni/libressl/apps/nc/compat/base64.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 | /* $OpenBSD: base64.c,v 1.8 2015/01/16 16:48:51 deraadt Exp $ */ /* * Copyright (c) 1996 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. */ /* * Portions Copyright (c) 1995 by International Business Machines, Inc. * * International Business Machines, Inc. (hereinafter called IBM) grants * permission under its copyrights to use, copy, modify, and distribute this * Software with or without fee, provided that the above copyright notice and * all paragraphs of this notice appear in all copies, and that the name of IBM * not be used in connection with the marketing of any product incorporating * the Software or modifications thereof, without specific, written prior * permission. * * To the extent it has a right to do so, IBM grants an immunity from suit * under its patents, if any, for the use, sale or manufacture of products to * the extent that such products are used for performing Domain Name System * dynamic updates in TCP/IP networks by means of the Software. No immunity is * granted for any product per se or for any other function of any product. * * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. */ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <arpa/nameser.h> #include <ctype.h> #include <resolv.h> #include <stdio.h> #include <stdlib.h> #include <string.h> static const char Base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; static const char Pad64 = '='; /* (From RFC1521 and draft-ietf-dnssec-secext-03.txt) The following encoding technique is taken from RFC 1521 by Borenstein and Freed. It is reproduced here in a slightly edited form for convenience. A 65-character subset of US-ASCII is used, enabling 6 bits to be represented per printable character. (The extra 65th character, "=", is used to signify a special processing function.) The encoding process represents 24-bit groups of input bits as output strings of 4 encoded characters. Proceeding from left to right, a 24-bit input group is formed by concatenating 3 8-bit input groups. These 24 bits are then treated as 4 concatenated 6-bit groups, each of which is translated into a single digit in the base64 alphabet. Each 6-bit group is used as an index into an array of 64 printable characters. The character referenced by the index is placed in the output string. Table 1: The Base64 Alphabet Value Encoding Value Encoding Value Encoding Value Encoding 0 A 17 R 34 i 51 z 1 B 18 S 35 j 52 0 2 C 19 T 36 k 53 1 3 D 20 U 37 l 54 2 4 E 21 V 38 m 55 3 5 F 22 W 39 n 56 4 6 G 23 X 40 o 57 5 7 H 24 Y 41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v 14 O 31 f 48 w (pad) = 15 P 32 g 49 x 16 Q 33 h 50 y Special processing is performed if fewer than 24 bits are available at the end of the data being encoded. A full encoding quantum is always completed at the end of a quantity. When fewer than 24 input bits are available in an input group, zero bits are added (on the right) to form an integral number of 6-bit groups. Padding at the end of the data is performed using the '=' character. Since all base64 input is an integral number of octets, only the ------------------------------------------------- following cases can arise: (1) the final quantum of encoding input is an integral multiple of 24 bits; here, the final unit of encoded output will be an integral multiple of 4 characters with no "=" padding, (2) the final quantum of encoding input is exactly 8 bits; here, the final unit of encoded output will be two characters followed by two "=" padding characters, or (3) the final quantum of encoding input is exactly 16 bits; here, the final unit of encoded output will be three characters followed by one "=" padding character. */ int b64_ntop(src, srclength, target, targsize) u_char const *src; size_t srclength; char *target; size_t targsize; { size_t datalength = 0; u_char input[3]; u_char output[4]; int i; while (2 < srclength) { input[0] = *src++; input[1] = *src++; input[2] = *src++; srclength -= 3; output[0] = input[0] >> 2; output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); output[3] = input[2] & 0x3f; if (datalength + 4 > targsize) return (-1); target[datalength++] = Base64[output[0]]; target[datalength++] = Base64[output[1]]; target[datalength++] = Base64[output[2]]; target[datalength++] = Base64[output[3]]; } /* Now we worry about padding. */ if (0 != srclength) { /* Get what's left. */ input[0] = input[1] = input[2] = '\0'; for (i = 0; i < srclength; i++) input[i] = *src++; output[0] = input[0] >> 2; output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); if (datalength + 4 > targsize) return (-1); target[datalength++] = Base64[output[0]]; target[datalength++] = Base64[output[1]]; if (srclength == 1) target[datalength++] = Pad64; else target[datalength++] = Base64[output[2]]; target[datalength++] = Pad64; } if (datalength >= targsize) return (-1); target[datalength] = '\0'; /* Returned value doesn't count \0. */ return (datalength); } /* skips all whitespace anywhere. converts characters, four at a time, starting at (or after) src from base - 64 numbers into three 8 bit bytes in the target area. it returns the number of data bytes stored at the target, or -1 on error. */ int b64_pton(src, target, targsize) char const *src; u_char *target; size_t targsize; { int tarindex, state, ch; u_char nextbyte; char *pos; state = 0; tarindex = 0; while ((ch = (unsigned char)*src++) != '\0') { if (isspace(ch)) /* Skip whitespace anywhere. */ continue; if (ch == Pad64) break; pos = strchr(Base64, ch); if (pos == 0) /* A non-base64 character. */ return (-1); switch (state) { case 0: if (target) { if (tarindex >= targsize) return (-1); target[tarindex] = (pos - Base64) << 2; } state = 1; break; case 1: if (target) { if (tarindex >= targsize) return (-1); target[tarindex] |= (pos - Base64) >> 4; nextbyte = ((pos - Base64) & 0x0f) << 4; if (tarindex + 1 < targsize) target[tarindex+1] = nextbyte; else if (nextbyte) return (-1); } tarindex++; state = 2; break; case 2: if (target) { if (tarindex >= targsize) return (-1); target[tarindex] |= (pos - Base64) >> 2; nextbyte = ((pos - Base64) & 0x03) << 6; if (tarindex + 1 < targsize) target[tarindex+1] = nextbyte; else if (nextbyte) return (-1); } tarindex++; state = 3; break; case 3: if (target) { if (tarindex >= targsize) return (-1); target[tarindex] |= (pos - Base64); } tarindex++; state = 0; break; } } /* * We are done decoding Base-64 chars. Let's see if we ended * on a byte boundary, and/or with erroneous trailing characters. */ if (ch == Pad64) { /* We got a pad char. */ ch = (unsigned char)*src++; /* Skip it, get next. */ switch (state) { case 0: /* Invalid = in first position */ case 1: /* Invalid = in second position */ return (-1); case 2: /* Valid, means one byte of info */ /* Skip any number of spaces. */ for (; ch != '\0'; ch = (unsigned char)*src++) if (!isspace(ch)) break; /* Make sure there is another trailing = sign. */ if (ch != Pad64) return (-1); ch = (unsigned char)*src++; /* Skip the = */ /* Fall through to "single trailing =" case. */ /* FALLTHROUGH */ case 3: /* Valid, means two bytes of info */ /* * We know this char is an =. Is there anything but * whitespace after it? */ for (; ch != '\0'; ch = (unsigned char)*src++) if (!isspace(ch)) return (-1); /* * Now make sure for cases 2 and 3 that the "extra" * bits that slopped past the last full byte were * zeros. If we don't check them, they become a * subliminal channel. */ if (target && tarindex < targsize && target[tarindex] != 0) return (-1); } } else { /* * We ended by seeing the end of the string. Make sure we * have no partial bytes lying around. */ if (state != 0) return (-1); } return (tarindex); } |
Added jni/libressl/apps/nc/compat/readpassphrase.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | /* $OpenBSD: readpassphrase.c,v 1.22 2010/01/13 10:20:54 dtucker Exp $ */ /* * Copyright (c) 2000-2002, 2007 Todd C. Miller <Todd.Miller@courtesan.com> * * 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. * * Sponsored in part by the Defense Advanced Research Projects * Agency (DARPA) and Air Force Research Laboratory, Air Force * Materiel Command, USAF, under agreement number F39502-99-1-0512. */ /* OPENBSD ORIGINAL: lib/libc/gen/readpassphrase.c */ #include <termios.h> #include <signal.h> #include <ctype.h> #include <fcntl.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <readpassphrase.h> #ifndef _PATH_TTY # define _PATH_TTY "/dev/tty" #endif #ifdef TCSASOFT # define _T_FLUSH (TCSAFLUSH|TCSASOFT) #else # define _T_FLUSH (TCSAFLUSH) #endif /* SunOS 4.x which lacks _POSIX_VDISABLE, but has VDISABLE */ #if !defined(_POSIX_VDISABLE) && defined(VDISABLE) # define _POSIX_VDISABLE VDISABLE #endif #ifndef _NSIG # ifdef NSIG # define _NSIG NSIG # else # define _NSIG 128 # endif #endif static volatile sig_atomic_t signo[_NSIG]; static void handler(int); char * readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags) { ssize_t bytes_written = 0; ssize_t nr; int input, output, save_errno, i, need_restart; char ch, *p, *end; struct termios term, oterm; struct sigaction sa, savealrm, saveint, savehup, savequit, saveterm; struct sigaction savetstp, savettin, savettou, savepipe; /* I suppose we could alloc on demand in this case (XXX). */ if (bufsiz == 0) { errno = EINVAL; return(NULL); } restart: for (i = 0; i < _NSIG; i++) signo[i] = 0; nr = -1; save_errno = 0; need_restart = 0; /* * Read and write to /dev/tty if available. If not, read from * stdin and write to stderr unless a tty is required. */ if ((flags & RPP_STDIN) || (input = output = open(_PATH_TTY, O_RDWR)) == -1) { if (flags & RPP_REQUIRE_TTY) { errno = ENOTTY; return(NULL); } input = STDIN_FILENO; output = STDERR_FILENO; } /* * Catch signals that would otherwise cause the user to end * up with echo turned off in the shell. Don't worry about * things like SIGXCPU and SIGVTALRM for now. */ sigemptyset(&sa.sa_mask); sa.sa_flags = 0; /* don't restart system calls */ sa.sa_handler = handler; (void)sigaction(SIGALRM, &sa, &savealrm); (void)sigaction(SIGHUP, &sa, &savehup); (void)sigaction(SIGINT, &sa, &saveint); (void)sigaction(SIGPIPE, &sa, &savepipe); (void)sigaction(SIGQUIT, &sa, &savequit); (void)sigaction(SIGTERM, &sa, &saveterm); (void)sigaction(SIGTSTP, &sa, &savetstp); (void)sigaction(SIGTTIN, &sa, &savettin); (void)sigaction(SIGTTOU, &sa, &savettou); /* Turn off echo if possible. */ if (input != STDIN_FILENO && tcgetattr(input, &oterm) == 0) { memcpy(&term, &oterm, sizeof(term)); if (!(flags & RPP_ECHO_ON)) term.c_lflag &= ~(ECHO | ECHONL); #ifdef VSTATUS if (term.c_cc[VSTATUS] != _POSIX_VDISABLE) term.c_cc[VSTATUS] = _POSIX_VDISABLE; #endif (void)tcsetattr(input, _T_FLUSH, &term); } else { memset(&term, 0, sizeof(term)); term.c_lflag |= ECHO; memset(&oterm, 0, sizeof(oterm)); oterm.c_lflag |= ECHO; } /* No I/O if we are already backgrounded. */ if (signo[SIGTTOU] != 1 && signo[SIGTTIN] != 1) { if (!(flags & RPP_STDIN)) bytes_written = write(output, prompt, strlen(prompt)); end = buf + bufsiz - 1; p = buf; while ((nr = read(input, &ch, 1)) == 1 && ch != '\n' && ch != '\r') { if (p < end) { if ((flags & RPP_SEVENBIT)) ch &= 0x7f; if (isalpha((unsigned char)ch)) { if ((flags & RPP_FORCELOWER)) ch = (char)tolower((unsigned char)ch); if ((flags & RPP_FORCEUPPER)) ch = (char)toupper((unsigned char)ch); } *p++ = ch; } } *p = '\0'; save_errno = errno; if (!(term.c_lflag & ECHO)) bytes_written = write(output, "\n", 1); } (void) bytes_written; /* Restore old terminal settings and signals. */ if (memcmp(&term, &oterm, sizeof(term)) != 0) { while (tcsetattr(input, _T_FLUSH, &oterm) == -1 && errno == EINTR) continue; } (void)sigaction(SIGALRM, &savealrm, NULL); (void)sigaction(SIGHUP, &savehup, NULL); (void)sigaction(SIGINT, &saveint, NULL); (void)sigaction(SIGQUIT, &savequit, NULL); (void)sigaction(SIGPIPE, &savepipe, NULL); (void)sigaction(SIGTERM, &saveterm, NULL); (void)sigaction(SIGTSTP, &savetstp, NULL); (void)sigaction(SIGTTIN, &savettin, NULL); (void)sigaction(SIGTTOU, &savettou, NULL); if (input != STDIN_FILENO) (void)close(input); /* * If we were interrupted by a signal, resend it to ourselves * now that we have restored the signal handlers. */ for (i = 0; i < _NSIG; i++) { if (signo[i]) { kill(getpid(), i); switch (i) { case SIGTSTP: case SIGTTIN: case SIGTTOU: need_restart = 1; } } } if (need_restart) goto restart; if (save_errno) errno = save_errno; return(nr == -1 ? NULL : buf); } static void handler(int s) { signo[s] = 1; } |
Added jni/libressl/apps/nc/compat/socket.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #define SOCKET_FLAGS_PRIV #include <sys/socket.h> #ifdef NEED_SOCKET_FLAGS #include <fcntl.h> int _socket(int domain, int type, int protocol) { int s = socket(domain, type & ~(SOCK_CLOEXEC | SOCK_NONBLOCK), protocol); int flags; if (s == -1) return s; if (type & SOCK_CLOEXEC) { flags = fcntl(s, F_GETFD); fcntl(s, F_SETFD, flags | FD_CLOEXEC); } if (type & SOCK_NONBLOCK) { flags = fcntl(s, F_GETFL); fcntl(s, F_SETFL, flags | O_NONBLOCK); } return s; } #endif |
Added jni/libressl/apps/nc/compat/strtonum.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | /* $OpenBSD: strtonum.c,v 1.7 2013/04/17 18:40:58 tedu Exp $ */ /* * Copyright (c) 2004 Ted Unangst and Todd Miller * All rights reserved. * * 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. */ #include <errno.h> #include <limits.h> #include <stdlib.h> #define INVALID 1 #define TOOSMALL 2 #define TOOLARGE 3 long long strtonum(const char *numstr, long long minval, long long maxval, const char **errstrp) { long long ll = 0; int error = 0; char *ep; struct errval { const char *errstr; int err; } ev[4] = { { NULL, 0 }, { "invalid", EINVAL }, { "too small", ERANGE }, { "too large", ERANGE }, }; ev[0].err = errno; errno = 0; if (minval > maxval) { error = INVALID; } else { ll = strtoll(numstr, &ep, 10); if (numstr == ep || *ep != '\0') error = INVALID; else if ((ll == LLONG_MIN && errno == ERANGE) || ll < minval) error = TOOSMALL; else if ((ll == LLONG_MAX && errno == ERANGE) || ll > maxval) error = TOOLARGE; } if (errstrp != NULL) *errstrp = ev[error].errstr; errno = ev[error].err; if (error) ll = 0; return (ll); } |
Added jni/libressl/apps/nc/compat/sys/socket.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | /* * Public domain * sys/socket.h compatibility shim */ #ifndef _WIN32 #include_next <sys/socket.h> #if !defined(SOCK_NONBLOCK) || !defined(SOCK_CLOEXEC) #define NEED_SOCKET_FLAGS int _socket(int domain, int type, int protocol); #ifndef SOCKET_FLAGS_PRIV #define socket(d, t, p) _socket(d, t, p) #endif #endif #ifndef SOCK_NONBLOCK #define SOCK_NONBLOCK 0x4000 /* set O_NONBLOCK */ #endif #ifndef SOCK_CLOEXEC #define SOCK_CLOEXEC 0x8000 /* set FD_CLOEXEC */ #endif #ifndef HAVE_ACCEPT4 int accept4(int s, struct sockaddr *addr, socklen_t *addrlen, int flags); #endif #else #include <win32netcompat.h> #endif |
Added jni/libressl/apps/nc/nc.1.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 | .\" $OpenBSD: nc.1,v 1.73 2016/06/28 17:35:14 jca Exp $ .\" .\" Copyright (c) 1996 David Sacerdote .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. The name of the author may not be used to endorse or promote products .\" derived from this software without specific prior written permission .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. .\" IN NO EVENT SHALL THE AUTHOR 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. .\" .Dd $Mdocdate: June 28 2016 $ .Dt NC 1 .Os .Sh NAME .Nm nc .Nd arbitrary TCP and UDP connections and listens .Sh SYNOPSIS .Nm nc .Op Fl 46cDdFhklNnrStUuvz .Op Fl C Ar certfile .Op Fl e Ar name .Op Fl H Ar hash .Op Fl I Ar length .Op Fl i Ar interval .Op Fl K Ar keyfile .Op Fl M Ar ttl .Op Fl m Ar minttl .Op Fl O Ar length .Op Fl P Ar proxy_username .Op Fl p Ar source_port .Op Fl R Ar CAfile .Op Fl s Ar source .Op Fl T Ar keyword .Op Fl V Ar rtable .Op Fl w Ar timeout .Op Fl X Ar proxy_protocol .Op Fl x Ar proxy_address Ns Op : Ns Ar port .Op Ar destination .Op Ar port .Sh DESCRIPTION The .Nm (or .Nm netcat ) utility is used for just about anything under the sun involving TCP, UDP, or .Ux Ns -domain sockets. It can open TCP connections, send UDP packets, listen on arbitrary TCP and UDP ports, do port scanning, and deal with both IPv4 and IPv6. Unlike .Xr telnet 1 , .Nm scripts nicely, and separates error messages onto standard error instead of sending them to standard output, as .Xr telnet 1 does with some. .Pp Common uses include: .Pp .Bl -bullet -offset indent -compact .It simple TCP proxies .It shell-script based HTTP clients and servers .It network daemon testing .It a SOCKS or HTTP ProxyCommand for .Xr ssh 1 .It and much, much more .El .Pp The options are as follows: .Bl -tag -width Ds .It Fl 4 Forces .Nm to use IPv4 addresses only. .It Fl 6 Forces .Nm to use IPv6 addresses only. .It Fl C Ar certfile Specifies the filename from which the public key part of the TLS certificate is loaded, in PEM format. May only be used with TLS. .It Fl c If using a TCP socket to connect or listen, use TLS. Illegal if not using TCP sockets. .It Fl D Enable debugging on the socket. .It Fl d Do not attempt to read from stdin. .It Fl e Ar name Specify the name that must be present in the peer certificate when using TLS. Illegal if not using TLS. .It Fl F Pass the first connected socket using .Xr sendmsg 2 to stdout and exit. This is useful in conjunction with .Fl X to have .Nm perform connection setup with a proxy but then leave the rest of the connection to another program (e.g.\& .Xr ssh 1 using the .Xr ssh_config 5 .Cm ProxyUseFdpass option). .It Fl H Ar hash Specifies the required hash string of the peer certificate when using TLS. The string format required is that used by .Xr tls_peer_cert_hash 3 . Illegal if not using TLS, and may not be used with -T noverify. .It Fl h Prints out .Nm help. .It Fl I Ar length Specifies the size of the TCP receive buffer. .It Fl i Ar interval Specifies a delay time interval between lines of text sent and received. Also causes a delay time between connections to multiple ports. .It Fl K Ar keyfile Specifies the filename from which the private key is loaded in PEM format. May only be used with TLS. .It Fl k Forces .Nm to stay listening for another connection after its current connection is completed. It is an error to use this option without the .Fl l option. When used together with the .Fl u option, the server socket is not connected and it can receive UDP datagrams from multiple hosts. .It Fl l Used to specify that .Nm should listen for an incoming connection rather than initiate a connection to a remote host. It is an error to use this option in conjunction with the .Fl p , .Fl s , or .Fl z options. Additionally, any timeouts specified with the .Fl w option are ignored. .It Fl M Ar ttl Set the TTL / hop limit of outgoing packets. .It Fl m Ar minttl Ask the kernel to drop incoming packets whose TTL / hop limit is under .Ar minttl . .It Fl N .Xr shutdown 2 the network socket after EOF on the input. Some servers require this to finish their work. .It Fl n Do not do any DNS or service lookups on any specified addresses, hostnames or ports. .It Fl O Ar length Specifies the size of the TCP send buffer. .It Fl P Ar proxy_username Specifies a username to present to a proxy server that requires authentication. If no username is specified then authentication will not be attempted. Proxy authentication is only supported for HTTP CONNECT proxies at present. .It Fl p Ar source_port Specifies the source port .Nm should use, subject to privilege restrictions and availability. It is an error to use this option in conjunction with the .Fl l option. .It Fl R Ar CAfile Specifies the filename from which the root CA bundle for certificate verification is loaded, in PEM format. Illegal if not using TLS. The default is .Pa /etc/ssl/cert.pem . .It Fl r Specifies that source and/or destination ports should be chosen randomly instead of sequentially within a range or in the order that the system assigns them. .It Fl S Enables the RFC 2385 TCP MD5 signature option. .It Fl s Ar source Specifies the IP of the interface which is used to send the packets. For .Ux Ns -domain datagram sockets, specifies the local temporary socket file to create and use so that datagrams can be received. It is an error to use this option in conjunction with the .Fl l option. .It Fl T Ar keyword Change IPv4 TOS value or TLS options. For TLS options .Ar keyword may be one of .Ar tlslegacy , which allows legacy TLS protocols; .Ar noverify , which disables certificate verification; .Ar noname , which disables certificate name checking; or .Ar clientcert , which requires a client certificate on incoming connections. It is illegal to specify TLS options if not using TLS. .Pp For IPv4 TOS value .Ar keyword may be one of .Ar critical , .Ar inetcontrol , .Ar lowdelay , .Ar netcontrol , .Ar throughput , .Ar reliability , or one of the DiffServ Code Points: .Ar ef , .Ar af11 ... af43 , .Ar cs0 ... cs7 ; or a number in either hex or decimal. .It Fl t Causes .Nm to send RFC 854 DON'T and WON'T responses to RFC 854 DO and WILL requests. This makes it possible to use .Nm to script telnet sessions. .It Fl U Specifies to use .Ux Ns -domain sockets. .It Fl u Use UDP instead of the default option of TCP. For .Ux Ns -domain sockets, use a datagram socket instead of a stream socket. If a .Ux Ns -domain socket is used, a temporary receiving socket is created in .Pa /tmp unless the .Fl s flag is given. .It Fl V Ar rtable Set the routing table to be used. .It Fl v Have .Nm give more verbose output. .It Fl w Ar timeout Connections which cannot be established or are idle timeout after .Ar timeout seconds. The .Fl w flag has no effect on the .Fl l option, i.e.\& .Nm will listen forever for a connection, with or without the .Fl w flag. The default is no timeout. .It Fl X Ar proxy_protocol Requests that .Nm should use the specified protocol when talking to the proxy server. Supported protocols are .Dq 4 (SOCKS v.4), .Dq 5 (SOCKS v.5) and .Dq connect (HTTPS proxy). If the protocol is not specified, SOCKS version 5 is used. .It Fl x Ar proxy_address Ns Op : Ns Ar port Requests that .Nm should connect to .Ar destination using a proxy at .Ar proxy_address and .Ar port . If .Ar port is not specified, the well-known port for the proxy protocol is used (1080 for SOCKS, 3128 for HTTPS). .It Fl z Specifies that .Nm should just scan for listening daemons, without sending any data to them. It is an error to use this option in conjunction with the .Fl l option. .El .Pp .Ar destination can be a numerical IP address or a symbolic hostname (unless the .Fl n option is given). In general, a destination must be specified, unless the .Fl l option is given (in which case the local host is used). For .Ux Ns -domain sockets, a destination is required and is the socket path to connect to (or listen on if the .Fl l option is given). .Pp .Ar port can be a specified as a numeric port number, or as a service name. Ports may be specified in a range of the form nn-mm. In general, a destination port must be specified, unless the .Fl U option is given. .Sh CLIENT/SERVER MODEL It is quite simple to build a very basic client/server model using .Nm . On one console, start .Nm listening on a specific port for a connection. For example: .Pp .Dl $ nc -l 1234 .Pp .Nm is now listening on port 1234 for a connection. On a second console .Pq or a second machine , connect to the machine and port being listened on: .Pp .Dl $ nc 127.0.0.1 1234 .Pp There should now be a connection between the ports. Anything typed at the second console will be concatenated to the first, and vice-versa. After the connection has been set up, .Nm does not really care which side is being used as a .Sq server and which side is being used as a .Sq client . The connection may be terminated using an .Dv EOF .Pq Sq ^D . .Sh DATA TRANSFER The example in the previous section can be expanded to build a basic data transfer model. Any information input into one end of the connection will be output to the other end, and input and output can be easily captured in order to emulate file transfer. .Pp Start by using .Nm to listen on a specific port, with output captured into a file: .Pp .Dl $ nc -l 1234 \*(Gt filename.out .Pp Using a second machine, connect to the listening .Nm process, feeding it the file which is to be transferred: .Pp .Dl $ nc -N host.example.com 1234 \*(Lt filename.in .Pp After the file has been transferred, the connection will close automatically. .Sh TALKING TO SERVERS It is sometimes useful to talk to servers .Dq by hand rather than through a user interface. It can aid in troubleshooting, when it might be necessary to verify what data a server is sending in response to commands issued by the client. For example, to retrieve the home page of a web site: .Bd -literal -offset indent $ printf "GET / HTTP/1.0\er\en\er\en" | nc host.example.com 80 .Ed .Pp Note that this also displays the headers sent by the web server. They can be filtered, using a tool such as .Xr sed 1 , if necessary. .Pp More complicated examples can be built up when the user knows the format of requests required by the server. As another example, an email may be submitted to an SMTP server using: .Bd -literal -offset indent $ nc localhost 25 \*(Lt\*(Lt EOF HELO host.example.com MAIL FROM:\*(Ltuser@host.example.com\*(Gt RCPT TO:\*(Ltuser2@host.example.com\*(Gt DATA Body of email. \&. QUIT EOF .Ed .Sh PORT SCANNING It may be useful to know which ports are open and running services on a target machine. The .Fl z flag can be used to tell .Nm to report open ports, rather than initiate a connection. For example: .Bd -literal -offset indent $ nc -z host.example.com 20-30 Connection to host.example.com 22 port [tcp/ssh] succeeded! Connection to host.example.com 25 port [tcp/smtp] succeeded! .Ed .Pp The port range was specified to limit the search to ports 20 \- 30. .Pp Alternatively, it might be useful to know which server software is running, and which versions. This information is often contained within the greeting banners. In order to retrieve these, it is necessary to first make a connection, and then break the connection when the banner has been retrieved. This can be accomplished by specifying a small timeout with the .Fl w flag, or perhaps by issuing a .Qq Dv QUIT command to the server: .Bd -literal -offset indent $ echo "QUIT" | nc host.example.com 20-30 SSH-1.99-OpenSSH_3.6.1p2 Protocol mismatch. 220 host.example.com IMS SMTP Receiver Version 0.84 Ready .Ed .Sh EXAMPLES Open a TCP connection to port 42 of host.example.com, using port 31337 as the source port, with a timeout of 5 seconds: .Pp .Dl $ nc -p 31337 -w 5 host.example.com 42 .Pp Open a TCP connection to port 443 of www.google.ca, and negotiate TLS. Check for a different name in the certificate for validation. .Pp .Dl $ nc -v -c -e adsf.au.doubleclick.net www.google.ca 443 .Pp Open a UDP connection to port 53 of host.example.com: .Pp .Dl $ nc -u host.example.com 53 .Pp Open a TCP connection to port 42 of host.example.com using 10.1.2.3 as the IP for the local end of the connection: .Pp .Dl $ nc -s 10.1.2.3 host.example.com 42 .Pp Create and listen on a .Ux Ns -domain stream socket: .Pp .Dl $ nc -lU /var/tmp/dsocket .Pp Connect to port 42 of host.example.com via an HTTP proxy at 10.2.3.4, port 8080. This example could also be used by .Xr ssh 1 ; see the .Cm ProxyCommand directive in .Xr ssh_config 5 for more information. .Pp .Dl $ nc -x10.2.3.4:8080 -Xconnect host.example.com 42 .Pp The same example again, this time enabling proxy authentication with username .Dq ruser if the proxy requires it: .Pp .Dl $ nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42 .Sh SEE ALSO .Xr cat 1 , .Xr ssh 1 .Sh AUTHORS Original implementation by *Hobbit* .Aq Mt hobbit@avian.org . .br Rewritten with IPv6 support by .An Eric Jackson Aq Mt ericj@monkey.org . .Sh CAVEATS UDP port scans using the .Fl uz combination of flags will always report success irrespective of the target machine's state. However, in conjunction with a traffic sniffer either on the target machine or an intermediary device, the .Fl uz combination could be useful for communications diagnostics. Note that the amount of UDP traffic generated may be limited either due to hardware resources and/or configuration settings. |
Added jni/libressl/apps/nc/netcat.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 | /* $OpenBSD: netcat.c,v 1.159 2016/07/07 14:09:44 jsing Exp $ */ /* * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> * Copyright (c) 2015 Bob Beck. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR 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. */ /* * Re-written nc(1) for OpenBSD. Original implementation by * *Hobbit* <hobbit@avian.org>. */ #include <sys/types.h> #include <sys/socket.h> #include <sys/uio.h> #include <sys/un.h> #include <netinet/in.h> #include <netinet/tcp.h> #include <netinet/ip.h> #include <arpa/telnet.h> #include <err.h> #include <errno.h> #include <limits.h> #include <netdb.h> #include <poll.h> #include <signal.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <unistd.h> #include <tls.h> #include "atomicio.h" #define PORT_MAX 65535 #define UNIX_DG_TMP_SOCKET_SIZE 19 #define POLL_STDIN 0 #define POLL_NETOUT 1 #define POLL_NETIN 2 #define POLL_STDOUT 3 #define BUFSIZE 16384 #ifndef DEFAULT_CA_FILE #define DEFAULT_CA_FILE "/etc/ssl/cert.pem" #endif #define TLS_LEGACY (1 << 1) #define TLS_NOVERIFY (1 << 2) #define TLS_NONAME (1 << 3) #define TLS_CCERT (1 << 4) /* Command Line Options */ int dflag; /* detached, no stdin */ int Fflag; /* fdpass sock to stdout */ unsigned int iflag; /* Interval Flag */ int kflag; /* More than one connect */ int lflag; /* Bind to local port */ int Nflag; /* shutdown() network socket */ int nflag; /* Don't do name look up */ char *Pflag; /* Proxy username */ char *pflag; /* Localport flag */ int rflag; /* Random ports flag */ char *sflag; /* Source Address */ int tflag; /* Telnet Emulation */ int uflag; /* UDP - Default to TCP */ int vflag; /* Verbosity */ int xflag; /* Socks proxy */ int zflag; /* Port Scan Flag */ int Dflag; /* sodebug */ int Iflag; /* TCP receive buffer size */ int Oflag; /* TCP send buffer size */ #ifdef TCP_MD5SIG int Sflag; /* TCP MD5 signature option */ #endif int Tflag = -1; /* IP Type of Service */ #ifdef SO_RTABLE int rtableid = -1; #endif int usetls; /* use TLS */ char *Cflag; /* Public cert file */ char *Kflag; /* Private key file */ char *Rflag = DEFAULT_CA_FILE; /* Root CA file */ int tls_cachanged; /* Using non-default CA file */ int TLSopt; /* TLS options */ char *tls_expectname; /* required name in peer cert */ char *tls_expecthash; /* required hash of peer cert */ uint8_t *cacert; size_t cacertlen; uint8_t *privkey; size_t privkeylen; uint8_t *pubcert; size_t pubcertlen; int timeout = -1; int family = AF_UNSPEC; char *portlist[PORT_MAX+1]; char *unix_dg_tmp_socket; int ttl = -1; int minttl = -1; void atelnet(int, unsigned char *, unsigned int); void build_ports(char *); void help(void); int local_listen(char *, char *, struct addrinfo); void readwrite(int, struct tls *); void fdpass(int nfd) __attribute__((noreturn)); int remote_connect(const char *, const char *, struct addrinfo); int timeout_connect(int, const struct sockaddr *, socklen_t); int socks_connect(const char *, const char *, struct addrinfo, const char *, const char *, struct addrinfo, int, const char *); int udptest(int); int unix_bind(char *, int); int unix_connect(char *); int unix_listen(char *); void set_common_sockopts(int, int); int map_tos(char *, int *); int map_tls(char *, int *); void report_connect(const struct sockaddr *, socklen_t, char *); void report_tls(struct tls *tls_ctx, char * host, char *tls_expectname); void usage(int); ssize_t drainbuf(int, unsigned char *, size_t *, struct tls *); ssize_t fillbuf(int, unsigned char *, size_t *, struct tls *); void tls_setup_client(struct tls *, int, char *); struct tls *tls_setup_server(struct tls *, int, char *); int main(int argc, char *argv[]) { int ch, s = -1, ret, socksv; char *host, *uport; struct addrinfo hints; struct servent *sv; socklen_t len; struct sockaddr_storage cliaddr; char *proxy = NULL; const char *errstr, *proxyhost = "", *proxyport = NULL; struct addrinfo proxyhints; char unix_dg_tmp_socket_buf[UNIX_DG_TMP_SOCKET_SIZE]; struct tls_config *tls_cfg = NULL; struct tls *tls_ctx = NULL; ret = 1; socksv = 5; host = NULL; uport = NULL; sv = NULL; signal(SIGPIPE, SIG_IGN); while ((ch = getopt(argc, argv, "46C:cDde:FH:hI:i:K:klM:m:NnO:P:p:R:rSs:T:tUuV:vw:X:x:z")) != -1) { switch (ch) { case '4': family = AF_INET; break; case '6': family = AF_INET6; break; case 'U': family = AF_UNIX; break; case 'X': if (strcasecmp(optarg, "connect") == 0) socksv = -1; /* HTTP proxy CONNECT */ else if (strcmp(optarg, "4") == 0) socksv = 4; /* SOCKS v.4 */ else if (strcmp(optarg, "5") == 0) socksv = 5; /* SOCKS v.5 */ else errx(1, "unsupported proxy protocol"); break; case 'C': Cflag = optarg; break; case 'c': usetls = 1; break; case 'd': dflag = 1; break; case 'e': tls_expectname = optarg; break; case 'F': Fflag = 1; break; case 'H': tls_expecthash = optarg; break; case 'h': help(); break; case 'i': iflag = strtonum(optarg, 0, UINT_MAX, &errstr); if (errstr) errx(1, "interval %s: %s", errstr, optarg); break; case 'K': Kflag = optarg; break; case 'k': kflag = 1; break; case 'l': lflag = 1; break; case 'M': ttl = strtonum(optarg, 0, 255, &errstr); if (errstr) errx(1, "ttl is %s", errstr); break; case 'm': minttl = strtonum(optarg, 0, 255, &errstr); if (errstr) errx(1, "minttl is %s", errstr); break; case 'N': Nflag = 1; break; case 'n': nflag = 1; break; case 'P': Pflag = optarg; break; case 'p': pflag = optarg; break; case 'R': tls_cachanged = 1; Rflag = optarg; break; case 'r': rflag = 1; break; case 's': sflag = optarg; break; case 't': tflag = 1; break; case 'u': uflag = 1; break; #ifdef SO_RTABLE case 'V': rtableid = (int)strtonum(optarg, 0, RT_TABLEID_MAX, &errstr); if (errstr) errx(1, "rtable %s: %s", errstr, optarg); break; #endif case 'v': vflag = 1; break; case 'w': timeout = strtonum(optarg, 0, INT_MAX / 1000, &errstr); if (errstr) errx(1, "timeout %s: %s", errstr, optarg); timeout *= 1000; break; case 'x': xflag = 1; if ((proxy = strdup(optarg)) == NULL) err(1, NULL); break; case 'z': zflag = 1; break; case 'D': Dflag = 1; break; case 'I': Iflag = strtonum(optarg, 1, 65536 << 14, &errstr); if (errstr != NULL) errx(1, "TCP receive window %s: %s", errstr, optarg); break; case 'O': Oflag = strtonum(optarg, 1, 65536 << 14, &errstr); if (errstr != NULL) errx(1, "TCP send window %s: %s", errstr, optarg); break; #ifdef TCP_MD5SIG case 'S': Sflag = 1; break; #endif case 'T': errstr = NULL; errno = 0; if (map_tos(optarg, &Tflag)) break; if (map_tls(optarg, &TLSopt)) break; if (strlen(optarg) > 1 && optarg[0] == '0' && optarg[1] == 'x') Tflag = (int)strtol(optarg, NULL, 16); else Tflag = (int)strtonum(optarg, 0, 255, &errstr); if (Tflag < 0 || Tflag > 255 || errstr || errno) errx(1, "illegal tos/tls value %s", optarg); break; default: usage(1); } } argc -= optind; argv += optind; #ifdef SO_RTABLE if (rtableid >= 0) if (setrtable(rtableid) == -1) err(1, "setrtable"); #endif if (family == AF_UNIX) { if (pledge("stdio rpath wpath cpath tmppath unix", NULL) == -1) err(1, "pledge"); } else if (Fflag) { if (Pflag) { if (pledge("stdio inet dns sendfd tty", NULL) == -1) err(1, "pledge"); } else if (pledge("stdio inet dns sendfd", NULL) == -1) err(1, "pledge"); } else if (Pflag) { if (pledge("stdio inet dns tty", NULL) == -1) err(1, "pledge"); } else if (usetls) { if (pledge("stdio rpath inet dns", NULL) == -1) err(1, "pledge"); } else if (pledge("stdio inet dns", NULL) == -1) err(1, "pledge"); /* Cruft to make sure options are clean, and used properly. */ if (argv[0] && !argv[1] && family == AF_UNIX) { host = argv[0]; uport = NULL; } else if (argv[0] && !argv[1]) { if (!lflag) usage(1); uport = argv[0]; host = NULL; } else if (argv[0] && argv[1]) { host = argv[0]; uport = argv[1]; } else usage(1); if (lflag && sflag) errx(1, "cannot use -s and -l"); if (lflag && pflag) errx(1, "cannot use -p and -l"); if (lflag && zflag) errx(1, "cannot use -z and -l"); if (!lflag && kflag) errx(1, "must use -l with -k"); if (uflag && usetls) errx(1, "cannot use -c and -u"); if ((family == AF_UNIX) && usetls) errx(1, "cannot use -c and -U"); if ((family == AF_UNIX) && Fflag) errx(1, "cannot use -F and -U"); if (Fflag && usetls) errx(1, "cannot use -c and -F"); if (TLSopt && !usetls) errx(1, "you must specify -c to use TLS options"); if (Cflag && !usetls) errx(1, "you must specify -c to use -C"); if (Kflag && !usetls) errx(1, "you must specify -c to use -K"); if (tls_cachanged && !usetls) errx(1, "you must specify -c to use -R"); if (tls_expecthash && !usetls) errx(1, "you must specify -c to use -H"); if (tls_expectname && !usetls) errx(1, "you must specify -c to use -e"); /* Get name of temporary socket for unix datagram client */ if ((family == AF_UNIX) && uflag && !lflag) { if (sflag) { unix_dg_tmp_socket = sflag; } else { strlcpy(unix_dg_tmp_socket_buf, "/tmp/nc.XXXXXXXXXX", UNIX_DG_TMP_SOCKET_SIZE); if (mktemp(unix_dg_tmp_socket_buf) == NULL) err(1, "mktemp"); unix_dg_tmp_socket = unix_dg_tmp_socket_buf; } } /* Initialize addrinfo structure. */ if (family != AF_UNIX) { memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = family; hints.ai_socktype = uflag ? SOCK_DGRAM : SOCK_STREAM; hints.ai_protocol = uflag ? IPPROTO_UDP : IPPROTO_TCP; if (nflag) hints.ai_flags |= AI_NUMERICHOST; } if (xflag) { if (uflag) errx(1, "no proxy support for UDP mode"); if (lflag) errx(1, "no proxy support for listen"); if (family == AF_UNIX) errx(1, "no proxy support for unix sockets"); /* XXX IPv6 transport to proxy would probably work */ if (family == AF_INET6) errx(1, "no proxy support for IPv6"); if (sflag) errx(1, "no proxy support for local source address"); proxyhost = strsep(&proxy, ":"); proxyport = proxy; memset(&proxyhints, 0, sizeof(struct addrinfo)); proxyhints.ai_family = family; proxyhints.ai_socktype = SOCK_STREAM; proxyhints.ai_protocol = IPPROTO_TCP; if (nflag) proxyhints.ai_flags |= AI_NUMERICHOST; } if (usetls) { if (Rflag && (cacert = tls_load_file(Rflag, &cacertlen, NULL)) == NULL) errx(1, "unable to load root CA file %s", Rflag); if (Cflag && (pubcert = tls_load_file(Cflag, &pubcertlen, NULL)) == NULL) errx(1, "unable to load TLS certificate file %s", Cflag); if (Kflag && (privkey = tls_load_file(Kflag, &privkeylen, NULL)) == NULL) errx(1, "unable to load TLS key file %s", Kflag); if (Pflag) { if (pledge("stdio inet dns tty", NULL) == -1) err(1, "pledge"); } else if (pledge("stdio inet dns", NULL) == -1) err(1, "pledge"); if (tls_init() == -1) errx(1, "unable to initialize TLS"); if ((tls_cfg = tls_config_new()) == NULL) errx(1, "unable to allocate TLS config"); if (Rflag && tls_config_set_ca_mem(tls_cfg, cacert, cacertlen) == -1) errx(1, "unable to set root CA file %s", Rflag); if (Cflag && tls_config_set_cert_mem(tls_cfg, pubcert, pubcertlen) == -1) errx(1, "unable to set TLS certificate file %s", Cflag); if (Kflag && tls_config_set_key_mem(tls_cfg, privkey, privkeylen) == -1) errx(1, "unable to set TLS key file %s", Kflag); if (TLSopt & TLS_LEGACY) { tls_config_set_protocols(tls_cfg, TLS_PROTOCOLS_ALL); tls_config_set_ciphers(tls_cfg, "all"); } if (!lflag && (TLSopt & TLS_CCERT)) errx(1, "clientcert is only valid with -l"); if (TLSopt & TLS_NONAME) tls_config_insecure_noverifyname(tls_cfg); if (TLSopt & TLS_NOVERIFY) { if (tls_expecthash != NULL) errx(1, "-H and -T noverify may not be used" "together"); tls_config_insecure_noverifycert(tls_cfg); } else { if (Rflag && access(Rflag, R_OK) == -1) errx(1, "unable to find root CA file %s", Rflag); } } if (lflag) { struct tls *tls_cctx = NULL; int connfd; ret = 0; if (family == AF_UNIX) { if (uflag) s = unix_bind(host, 0); else s = unix_listen(host); } if (usetls) { tls_config_verify_client_optional(tls_cfg); if ((tls_ctx = tls_server()) == NULL) errx(1, "tls server creation failed"); if (tls_configure(tls_ctx, tls_cfg) == -1) errx(1, "tls configuration failed (%s)", tls_error(tls_ctx)); } /* Allow only one connection at a time, but stay alive. */ for (;;) { if (family != AF_UNIX) s = local_listen(host, uport, hints); if (s < 0) err(1, NULL); /* * For UDP and -k, don't connect the socket, let it * receive datagrams from multiple socket pairs. */ if (uflag && kflag) readwrite(s, NULL); /* * For UDP and not -k, we will use recvfrom() initially * to wait for a caller, then use the regular functions * to talk to the caller. */ else if (uflag && !kflag) { int rv, plen; char buf[16384]; struct sockaddr_storage z; len = sizeof(z); plen = 2048; rv = recvfrom(s, buf, plen, MSG_PEEK, (struct sockaddr *)&z, &len); if (rv < 0) err(1, "recvfrom"); rv = connect(s, (struct sockaddr *)&z, len); if (rv < 0) err(1, "connect"); if (vflag) report_connect((struct sockaddr *)&z, len, NULL); readwrite(s, NULL); } else { len = sizeof(cliaddr); connfd = accept4(s, (struct sockaddr *)&cliaddr, &len, SOCK_NONBLOCK); if (connfd == -1) { /* For now, all errnos are fatal */ err(1, "accept"); } if (vflag) report_connect((struct sockaddr *)&cliaddr, len, family == AF_UNIX ? host : NULL); if ((usetls) && (tls_cctx = tls_setup_server(tls_ctx, connfd, host))) readwrite(connfd, tls_cctx); if (!usetls) readwrite(connfd, NULL); if (tls_cctx) { int i; do { i = tls_close(tls_cctx); } while (i == TLS_WANT_POLLIN || i == TLS_WANT_POLLOUT); tls_free(tls_cctx); tls_cctx = NULL; } close(connfd); } if (family != AF_UNIX) close(s); else if (uflag) { if (connect(s, NULL, 0) < 0) err(1, "connect"); } if (!kflag) break; } } else if (family == AF_UNIX) { ret = 0; if ((s = unix_connect(host)) > 0 && !zflag) { readwrite(s, NULL); close(s); } else ret = 1; if (uflag) unlink(unix_dg_tmp_socket); exit(ret); } else { int i = 0; /* Construct the portlist[] array. */ build_ports(uport); /* Cycle through portlist, connecting to each port. */ for (s = -1, i = 0; portlist[i] != NULL; i++) { if (s != -1) close(s); if (usetls) { if ((tls_ctx = tls_client()) == NULL) errx(1, "tls client creation failed"); if (tls_configure(tls_ctx, tls_cfg) == -1) errx(1, "tls configuration failed (%s)", tls_error(tls_ctx)); } if (xflag) s = socks_connect(host, portlist[i], hints, proxyhost, proxyport, proxyhints, socksv, Pflag); else s = remote_connect(host, portlist[i], hints); if (s == -1) continue; ret = 0; if (vflag || zflag) { /* For UDP, make sure we are connected. */ if (uflag) { if (udptest(s) == -1) { ret = 1; continue; } } /* Don't look up port if -n. */ if (nflag) sv = NULL; else { sv = getservbyport( ntohs(atoi(portlist[i])), uflag ? "udp" : "tcp"); } fprintf(stderr, "Connection to %s %s port [%s/%s] " "succeeded!\n", host, portlist[i], uflag ? "udp" : "tcp", sv ? sv->s_name : "*"); } if (Fflag) fdpass(s); else { if (usetls) tls_setup_client(tls_ctx, s, host); if (!zflag) readwrite(s, tls_ctx); if (tls_ctx) { int j; do { j = tls_close(tls_ctx); } while (j == TLS_WANT_POLLIN || j == TLS_WANT_POLLOUT); tls_free(tls_ctx); tls_ctx = NULL; } } } } if (s != -1) close(s); tls_config_free(tls_cfg); exit(ret); } /* * unix_bind() * Returns a unix socket bound to the given path */ int unix_bind(char *path, int flags) { struct sockaddr_un s_un; int s, save_errno; /* Create unix domain socket. */ if ((s = socket(AF_UNIX, flags | (uflag ? SOCK_DGRAM : SOCK_STREAM), 0)) < 0) return (-1); memset(&s_un, 0, sizeof(struct sockaddr_un)); s_un.sun_family = AF_UNIX; if (strlcpy(s_un.sun_path, path, sizeof(s_un.sun_path)) >= sizeof(s_un.sun_path)) { close(s); errno = ENAMETOOLONG; return (-1); } if (bind(s, (struct sockaddr *)&s_un, sizeof(s_un)) < 0) { save_errno = errno; close(s); errno = save_errno; return (-1); } return (s); } void tls_setup_client(struct tls *tls_ctx, int s, char *host) { int i; if (tls_connect_socket(tls_ctx, s, tls_expectname ? tls_expectname : host) == -1) { errx(1, "tls connection failed (%s)", tls_error(tls_ctx)); } do { if ((i = tls_handshake(tls_ctx)) == -1) errx(1, "tls handshake failed (%s)", tls_error(tls_ctx)); } while (i == TLS_WANT_POLLIN || i == TLS_WANT_POLLOUT); if (vflag) report_tls(tls_ctx, host, tls_expectname); if (tls_expecthash && tls_peer_cert_hash(tls_ctx) && strcmp(tls_expecthash, tls_peer_cert_hash(tls_ctx)) != 0) errx(1, "peer certificate is not %s", tls_expecthash); } struct tls * tls_setup_server(struct tls *tls_ctx, int connfd, char *host) { struct tls *tls_cctx; if (tls_accept_socket(tls_ctx, &tls_cctx, connfd) == -1) { warnx("tls accept failed (%s)", tls_error(tls_ctx)); tls_cctx = NULL; } else { int i; do { if ((i = tls_handshake(tls_cctx)) == -1) warnx("tls handshake failed (%s)", tls_error(tls_cctx)); } while(i == TLS_WANT_POLLIN || i == TLS_WANT_POLLOUT); } if (tls_cctx) { int gotcert = tls_peer_cert_provided(tls_cctx); if (vflag && gotcert) report_tls(tls_cctx, host, tls_expectname); if ((TLSopt & TLS_CCERT) && !gotcert) warnx("No client certificate provided"); else if (gotcert && tls_peer_cert_hash(tls_ctx) && tls_expecthash && strcmp(tls_expecthash, tls_peer_cert_hash(tls_ctx)) != 0) warnx("peer certificate is not %s", tls_expecthash); else if (gotcert && tls_expectname && (!tls_peer_cert_contains_name(tls_cctx, tls_expectname))) warnx("name (%s) not found in client cert", tls_expectname); else { return tls_cctx; } } return NULL; } /* * unix_connect() * Returns a socket connected to a local unix socket. Returns -1 on failure. */ int unix_connect(char *path) { struct sockaddr_un s_un; int s, save_errno; if (uflag) { if ((s = unix_bind(unix_dg_tmp_socket, SOCK_CLOEXEC)) < 0) return (-1); } else { if ((s = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0)) < 0) return (-1); } memset(&s_un, 0, sizeof(struct sockaddr_un)); s_un.sun_family = AF_UNIX; if (strlcpy(s_un.sun_path, path, sizeof(s_un.sun_path)) >= sizeof(s_un.sun_path)) { close(s); errno = ENAMETOOLONG; return (-1); } if (connect(s, (struct sockaddr *)&s_un, sizeof(s_un)) < 0) { save_errno = errno; close(s); errno = save_errno; return (-1); } return (s); } /* * unix_listen() * Create a unix domain socket, and listen on it. */ int unix_listen(char *path) { int s; if ((s = unix_bind(path, 0)) < 0) return (-1); if (listen(s, 5) < 0) { close(s); return (-1); } return (s); } /* * remote_connect() * Returns a socket connected to a remote host. Properly binds to a local * port or source address if needed. Returns -1 on failure. */ int remote_connect(const char *host, const char *port, struct addrinfo hints) { struct addrinfo *res, *res0; int s, error, save_errno; #ifdef SO_BINDANY int on = 1; #endif if ((error = getaddrinfo(host, port, &hints, &res))) errx(1, "getaddrinfo: %s", gai_strerror(error)); res0 = res; do { if ((s = socket(res0->ai_family, res0->ai_socktype | SOCK_NONBLOCK, res0->ai_protocol)) < 0) continue; /* Bind to a local port or source address if specified. */ if (sflag || pflag) { struct addrinfo ahints, *ares; #ifdef SO_BINDANY /* try SO_BINDANY, but don't insist */ setsockopt(s, SOL_SOCKET, SO_BINDANY, &on, sizeof(on)); #endif memset(&ahints, 0, sizeof(struct addrinfo)); ahints.ai_family = res0->ai_family; ahints.ai_socktype = uflag ? SOCK_DGRAM : SOCK_STREAM; ahints.ai_protocol = uflag ? IPPROTO_UDP : IPPROTO_TCP; ahints.ai_flags = AI_PASSIVE; if ((error = getaddrinfo(sflag, pflag, &ahints, &ares))) errx(1, "getaddrinfo: %s", gai_strerror(error)); if (bind(s, (struct sockaddr *)ares->ai_addr, ares->ai_addrlen) < 0) err(1, "bind failed"); freeaddrinfo(ares); } set_common_sockopts(s, res0->ai_family); if (timeout_connect(s, res0->ai_addr, res0->ai_addrlen) == 0) break; if (vflag) warn("connect to %s port %s (%s) failed", host, port, uflag ? "udp" : "tcp"); save_errno = errno; close(s); errno = save_errno; s = -1; } while ((res0 = res0->ai_next) != NULL); freeaddrinfo(res); return (s); } int timeout_connect(int s, const struct sockaddr *name, socklen_t namelen) { struct pollfd pfd; socklen_t optlen; int optval; int ret; if ((ret = connect(s, name, namelen)) != 0 && errno == EINPROGRESS) { pfd.fd = s; pfd.events = POLLOUT; if ((ret = poll(&pfd, 1, timeout)) == 1) { optlen = sizeof(optval); if ((ret = getsockopt(s, SOL_SOCKET, SO_ERROR, &optval, &optlen)) == 0) { errno = optval; ret = optval == 0 ? 0 : -1; } } else if (ret == 0) { errno = ETIMEDOUT; ret = -1; } else err(1, "poll failed"); } return (ret); } /* * local_listen() * Returns a socket listening on a local port, binds to specified source * address. Returns -1 on failure. */ int local_listen(char *host, char *port, struct addrinfo hints) { struct addrinfo *res, *res0; int s, save_errno; #ifdef SO_REUSEPORT int ret, x = 1; #endif int error; /* Allow nodename to be null. */ hints.ai_flags |= AI_PASSIVE; /* * In the case of binding to a wildcard address * default to binding to an ipv4 address. */ if (host == NULL && hints.ai_family == AF_UNSPEC) hints.ai_family = AF_INET; if ((error = getaddrinfo(host, port, &hints, &res))) errx(1, "getaddrinfo: %s", gai_strerror(error)); res0 = res; do { if ((s = socket(res0->ai_family, res0->ai_socktype, res0->ai_protocol)) < 0) continue; #ifdef SO_REUSEPORT ret = setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof(x)); if (ret == -1) err(1, NULL); #endif set_common_sockopts(s, res0->ai_family); if (bind(s, (struct sockaddr *)res0->ai_addr, res0->ai_addrlen) == 0) break; save_errno = errno; close(s); errno = save_errno; s = -1; } while ((res0 = res0->ai_next) != NULL); if (!uflag && s != -1) { if (listen(s, 1) < 0) err(1, "listen"); } freeaddrinfo(res); return (s); } /* * readwrite() * Loop that polls on the network file descriptor and stdin. */ void readwrite(int net_fd, struct tls *tls_ctx) { struct pollfd pfd[4]; int stdin_fd = STDIN_FILENO; int stdout_fd = STDOUT_FILENO; unsigned char netinbuf[BUFSIZE]; size_t netinbufpos = 0; unsigned char stdinbuf[BUFSIZE]; size_t stdinbufpos = 0; int n, num_fds; ssize_t ret; /* don't read from stdin if requested */ if (dflag) stdin_fd = -1; /* stdin */ pfd[POLL_STDIN].fd = stdin_fd; pfd[POLL_STDIN].events = POLLIN; /* network out */ pfd[POLL_NETOUT].fd = net_fd; pfd[POLL_NETOUT].events = 0; /* network in */ pfd[POLL_NETIN].fd = net_fd; pfd[POLL_NETIN].events = POLLIN; /* stdout */ pfd[POLL_STDOUT].fd = stdout_fd; pfd[POLL_STDOUT].events = 0; while (1) { /* both inputs are gone, buffers are empty, we are done */ if (pfd[POLL_STDIN].fd == -1 && pfd[POLL_NETIN].fd == -1 && stdinbufpos == 0 && netinbufpos == 0) { close(net_fd); return; } /* both outputs are gone, we can't continue */ if (pfd[POLL_NETOUT].fd == -1 && pfd[POLL_STDOUT].fd == -1) { close(net_fd); return; } /* listen and net in gone, queues empty, done */ if (lflag && pfd[POLL_NETIN].fd == -1 && stdinbufpos == 0 && netinbufpos == 0) { close(net_fd); return; } /* help says -i is for "wait between lines sent". We read and * write arbitrary amounts of data, and we don't want to start * scanning for newlines, so this is as good as it gets */ if (iflag) sleep(iflag); /* poll */ num_fds = poll(pfd, 4, timeout); /* treat poll errors */ if (num_fds == -1) { close(net_fd); err(1, "polling error"); } /* timeout happened */ if (num_fds == 0) return; /* treat socket error conditions */ for (n = 0; n < 4; n++) { if (pfd[n].revents & (POLLERR|POLLNVAL)) { pfd[n].fd = -1; } } /* reading is possible after HUP */ if (pfd[POLL_STDIN].events & POLLIN && pfd[POLL_STDIN].revents & POLLHUP && !(pfd[POLL_STDIN].revents & POLLIN)) pfd[POLL_STDIN].fd = -1; if (pfd[POLL_NETIN].events & POLLIN && pfd[POLL_NETIN].revents & POLLHUP && !(pfd[POLL_NETIN].revents & POLLIN)) pfd[POLL_NETIN].fd = -1; if (pfd[POLL_NETOUT].revents & POLLHUP) { if (Nflag) shutdown(pfd[POLL_NETOUT].fd, SHUT_WR); pfd[POLL_NETOUT].fd = -1; } /* if HUP, stop watching stdout */ if (pfd[POLL_STDOUT].revents & POLLHUP) pfd[POLL_STDOUT].fd = -1; /* if no net out, stop watching stdin */ if (pfd[POLL_NETOUT].fd == -1) pfd[POLL_STDIN].fd = -1; /* if no stdout, stop watching net in */ if (pfd[POLL_STDOUT].fd == -1) { if (pfd[POLL_NETIN].fd != -1) shutdown(pfd[POLL_NETIN].fd, SHUT_RD); pfd[POLL_NETIN].fd = -1; } /* try to read from stdin */ if (pfd[POLL_STDIN].revents & POLLIN && stdinbufpos < BUFSIZE) { ret = fillbuf(pfd[POLL_STDIN].fd, stdinbuf, &stdinbufpos, NULL); if (ret == TLS_WANT_POLLIN) pfd[POLL_STDIN].events = POLLIN; else if (ret == TLS_WANT_POLLOUT) pfd[POLL_STDIN].events = POLLOUT; else if (ret == 0 || ret == -1) pfd[POLL_STDIN].fd = -1; /* read something - poll net out */ if (stdinbufpos > 0) pfd[POLL_NETOUT].events = POLLOUT; /* filled buffer - remove self from polling */ if (stdinbufpos == BUFSIZE) pfd[POLL_STDIN].events = 0; } /* try to write to network */ if (pfd[POLL_NETOUT].revents & POLLOUT && stdinbufpos > 0) { ret = drainbuf(pfd[POLL_NETOUT].fd, stdinbuf, &stdinbufpos, tls_ctx); if (ret == TLS_WANT_POLLIN) pfd[POLL_NETOUT].events = POLLIN; else if (ret == TLS_WANT_POLLOUT) pfd[POLL_NETOUT].events = POLLOUT; else if (ret == -1) pfd[POLL_NETOUT].fd = -1; /* buffer empty - remove self from polling */ if (stdinbufpos == 0) pfd[POLL_NETOUT].events = 0; /* buffer no longer full - poll stdin again */ if (stdinbufpos < BUFSIZE) pfd[POLL_STDIN].events = POLLIN; } /* try to read from network */ if (pfd[POLL_NETIN].revents & POLLIN && netinbufpos < BUFSIZE) { ret = fillbuf(pfd[POLL_NETIN].fd, netinbuf, &netinbufpos, tls_ctx); if (ret == TLS_WANT_POLLIN) pfd[POLL_NETIN].events = POLLIN; else if (ret == TLS_WANT_POLLOUT) pfd[POLL_NETIN].events = POLLOUT; else if (ret == -1) pfd[POLL_NETIN].fd = -1; /* eof on net in - remove from pfd */ if (ret == 0) { shutdown(pfd[POLL_NETIN].fd, SHUT_RD); pfd[POLL_NETIN].fd = -1; } /* read something - poll stdout */ if (netinbufpos > 0) pfd[POLL_STDOUT].events = POLLOUT; /* filled buffer - remove self from polling */ if (netinbufpos == BUFSIZE) pfd[POLL_NETIN].events = 0; /* handle telnet */ if (tflag) atelnet(pfd[POLL_NETIN].fd, netinbuf, netinbufpos); } /* try to write to stdout */ if (pfd[POLL_STDOUT].revents & POLLOUT && netinbufpos > 0) { ret = drainbuf(pfd[POLL_STDOUT].fd, netinbuf, &netinbufpos, NULL); if (ret == TLS_WANT_POLLIN) pfd[POLL_STDOUT].events = POLLIN; else if (ret == TLS_WANT_POLLOUT) pfd[POLL_STDOUT].events = POLLOUT; else if (ret == -1) pfd[POLL_STDOUT].fd = -1; /* buffer empty - remove self from polling */ if (netinbufpos == 0) pfd[POLL_STDOUT].events = 0; /* buffer no longer full - poll net in again */ if (netinbufpos < BUFSIZE) pfd[POLL_NETIN].events = POLLIN; } /* stdin gone and queue empty? */ if (pfd[POLL_STDIN].fd == -1 && stdinbufpos == 0) { if (pfd[POLL_NETOUT].fd != -1 && Nflag) shutdown(pfd[POLL_NETOUT].fd, SHUT_WR); pfd[POLL_NETOUT].fd = -1; } /* net in gone and queue empty? */ if (pfd[POLL_NETIN].fd == -1 && netinbufpos == 0) { pfd[POLL_STDOUT].fd = -1; } } } ssize_t drainbuf(int fd, unsigned char *buf, size_t *bufpos, struct tls *tls) { ssize_t n; ssize_t adjust; if (tls) n = tls_write(tls, buf, *bufpos); else { n = write(fd, buf, *bufpos); /* don't treat EAGAIN, EINTR as error */ if (n == -1 && (errno == EAGAIN || errno == EINTR)) n = TLS_WANT_POLLOUT; } if (n <= 0) return n; /* adjust buffer */ adjust = *bufpos - n; if (adjust > 0) memmove(buf, buf + n, adjust); *bufpos -= n; return n; } ssize_t fillbuf(int fd, unsigned char *buf, size_t *bufpos, struct tls *tls) { size_t num = BUFSIZE - *bufpos; ssize_t n; if (tls) n = tls_read(tls, buf + *bufpos, num); else { n = read(fd, buf + *bufpos, num); /* don't treat EAGAIN, EINTR as error */ if (n == -1 && (errno == EAGAIN || errno == EINTR)) n = TLS_WANT_POLLIN; } if (n <= 0) return n; *bufpos += n; return n; } /* * fdpass() * Pass the connected file descriptor to stdout and exit. */ void fdpass(int nfd) { struct msghdr mh; union { struct cmsghdr hdr; char buf[CMSG_SPACE(sizeof(int))]; } cmsgbuf; struct cmsghdr *cmsg; struct iovec iov; char c = '\0'; ssize_t r; struct pollfd pfd; /* Avoid obvious stupidity */ if (isatty(STDOUT_FILENO)) errx(1, "Cannot pass file descriptor to tty"); bzero(&mh, sizeof(mh)); bzero(&cmsgbuf, sizeof(cmsgbuf)); bzero(&iov, sizeof(iov)); mh.msg_control = (caddr_t)&cmsgbuf.buf; mh.msg_controllen = sizeof(cmsgbuf.buf); cmsg = CMSG_FIRSTHDR(&mh); cmsg->cmsg_len = CMSG_LEN(sizeof(int)); cmsg->cmsg_level = SOL_SOCKET; cmsg->cmsg_type = SCM_RIGHTS; *(int *)CMSG_DATA(cmsg) = nfd; iov.iov_base = &c; iov.iov_len = 1; mh.msg_iov = &iov; mh.msg_iovlen = 1; bzero(&pfd, sizeof(pfd)); pfd.fd = STDOUT_FILENO; pfd.events = POLLOUT; for (;;) { r = sendmsg(STDOUT_FILENO, &mh, 0); if (r == -1) { if (errno == EAGAIN || errno == EINTR) { if (poll(&pfd, 1, -1) == -1) err(1, "poll"); continue; } err(1, "sendmsg"); } else if (r != 1) errx(1, "sendmsg: unexpected return value %zd", r); else break; } exit(0); } /* Deal with RFC 854 WILL/WONT DO/DONT negotiation. */ void atelnet(int nfd, unsigned char *buf, unsigned int size) { unsigned char *p, *end; unsigned char obuf[4]; if (size < 3) return; end = buf + size - 2; for (p = buf; p < end; p++) { if (*p != IAC) continue; obuf[0] = IAC; p++; if ((*p == WILL) || (*p == WONT)) obuf[1] = DONT; else if ((*p == DO) || (*p == DONT)) obuf[1] = WONT; else continue; p++; obuf[2] = *p; if (atomicio(vwrite, nfd, obuf, 3) != 3) warn("Write Error!"); } } int strtoport(char *portstr, int udp) { struct servent *entry; const char *errstr; char *proto; int port = -1; proto = udp ? "udp" : "tcp"; port = strtonum(portstr, 1, PORT_MAX, &errstr); if (errstr == NULL) return port; if (errno != EINVAL) errx(1, "port number %s: %s", errstr, portstr); if ((entry = getservbyname(portstr, proto)) == NULL) errx(1, "service \"%s\" unknown", portstr); return ntohs(entry->s_port); } /* * build_ports() * Build an array of ports in portlist[], listing each port * that we should try to connect to. */ void build_ports(char *p) { char *n; int hi, lo, cp; int x = 0; if ((n = strchr(p, '-')) != NULL) { *n = '\0'; n++; /* Make sure the ports are in order: lowest->highest. */ hi = strtoport(n, uflag); lo = strtoport(p, uflag); if (lo > hi) { cp = hi; hi = lo; lo = cp; } /* * Initialize portlist with a random permutation. Based on * Knuth, as in ip_randomid() in sys/netinet/ip_id.c. */ if (rflag) { for (x = 0; x <= hi - lo; x++) { cp = arc4random_uniform(x + 1); portlist[x] = portlist[cp]; if (asprintf(&portlist[cp], "%d", x + lo) < 0) err(1, "asprintf"); } } else { /* Load ports sequentially. */ for (cp = lo; cp <= hi; cp++) { if (asprintf(&portlist[x], "%d", cp) < 0) err(1, "asprintf"); x++; } } } else { char *tmp; hi = strtoport(p, uflag); if (asprintf(&tmp, "%d", hi) != -1) portlist[0] = tmp; else err(1, NULL); } } /* * udptest() * Do a few writes to see if the UDP port is there. * Fails once PF state table is full. */ int udptest(int s) { int i, ret; for (i = 0; i <= 3; i++) { if (write(s, "X", 1) == 1) ret = 1; else ret = -1; } return (ret); } void set_common_sockopts(int s, int af) { int x = 1; #ifdef TCP_MD5SIG if (Sflag) { if (setsockopt(s, IPPROTO_TCP, TCP_MD5SIG, &x, sizeof(x)) == -1) err(1, NULL); } #endif if (Dflag) { if (setsockopt(s, SOL_SOCKET, SO_DEBUG, &x, sizeof(x)) == -1) err(1, NULL); } if (Tflag != -1) { if (af == AF_INET && setsockopt(s, IPPROTO_IP, IP_TOS, &Tflag, sizeof(Tflag)) == -1) err(1, "set IP ToS"); else if (af == AF_INET6 && setsockopt(s, IPPROTO_IPV6, IPV6_TCLASS, &Tflag, sizeof(Tflag)) == -1) err(1, "set IPv6 traffic class"); } if (Iflag) { if (setsockopt(s, SOL_SOCKET, SO_RCVBUF, &Iflag, sizeof(Iflag)) == -1) err(1, "set TCP receive buffer size"); } if (Oflag) { if (setsockopt(s, SOL_SOCKET, SO_SNDBUF, &Oflag, sizeof(Oflag)) == -1) err(1, "set TCP send buffer size"); } if (ttl != -1) { if (af == AF_INET && setsockopt(s, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl))) err(1, "set IP TTL"); else if (af == AF_INET6 && setsockopt(s, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl, sizeof(ttl))) err(1, "set IPv6 unicast hops"); } if (minttl != -1) { #ifdef IP_MINTTL if (af == AF_INET && setsockopt(s, IPPROTO_IP, IP_MINTTL, &minttl, sizeof(minttl))) err(1, "set IP min TTL"); #endif #ifdef IPV6_MINHOPCOUNT if (af == AF_INET6 && setsockopt(s, IPPROTO_IPV6, IPV6_MINHOPCOUNT, &minttl, sizeof(minttl))) err(1, "set IPv6 min hop count"); #endif } } int map_tos(char *s, int *val) { /* DiffServ Codepoints and other TOS mappings */ const struct toskeywords { const char *keyword; int val; } *t, toskeywords[] = { { "af11", IPTOS_DSCP_AF11 }, { "af12", IPTOS_DSCP_AF12 }, { "af13", IPTOS_DSCP_AF13 }, { "af21", IPTOS_DSCP_AF21 }, { "af22", IPTOS_DSCP_AF22 }, { "af23", IPTOS_DSCP_AF23 }, { "af31", IPTOS_DSCP_AF31 }, { "af32", IPTOS_DSCP_AF32 }, { "af33", IPTOS_DSCP_AF33 }, { "af41", IPTOS_DSCP_AF41 }, { "af42", IPTOS_DSCP_AF42 }, { "af43", IPTOS_DSCP_AF43 }, { "critical", IPTOS_PREC_CRITIC_ECP }, { "cs0", IPTOS_DSCP_CS0 }, { "cs1", IPTOS_DSCP_CS1 }, { "cs2", IPTOS_DSCP_CS2 }, { "cs3", IPTOS_DSCP_CS3 }, { "cs4", IPTOS_DSCP_CS4 }, { "cs5", IPTOS_DSCP_CS5 }, { "cs6", IPTOS_DSCP_CS6 }, { "cs7", IPTOS_DSCP_CS7 }, { "ef", IPTOS_DSCP_EF }, { "inetcontrol", IPTOS_PREC_INTERNETCONTROL }, { "lowdelay", IPTOS_LOWDELAY }, { "netcontrol", IPTOS_PREC_NETCONTROL }, { "reliability", IPTOS_RELIABILITY }, { "throughput", IPTOS_THROUGHPUT }, { NULL, -1 }, }; for (t = toskeywords; t->keyword != NULL; t++) { if (strcmp(s, t->keyword) == 0) { *val = t->val; return (1); } } return (0); } int map_tls(char *s, int *val) { const struct tlskeywords { const char *keyword; int val; } *t, tlskeywords[] = { { "tlslegacy", TLS_LEGACY }, { "noverify", TLS_NOVERIFY }, { "noname", TLS_NONAME }, { "clientcert", TLS_CCERT}, { NULL, -1 }, }; for (t = tlskeywords; t->keyword != NULL; t++) { if (strcmp(s, t->keyword) == 0) { *val |= t->val; return (1); } } return (0); } void report_tls(struct tls * tls_ctx, char * host, char *tls_expectname) { time_t t; fprintf(stderr, "TLS handshake negotiated %s/%s with host %s\n", tls_conn_version(tls_ctx), tls_conn_cipher(tls_ctx), host); fprintf(stderr, "Peer name: %s\n", tls_expectname ? tls_expectname : host); if (tls_peer_cert_subject(tls_ctx)) fprintf(stderr, "Subject: %s\n", tls_peer_cert_subject(tls_ctx)); if (tls_peer_cert_issuer(tls_ctx)) fprintf(stderr, "Issuer: %s\n", tls_peer_cert_issuer(tls_ctx)); if ((t = tls_peer_cert_notbefore(tls_ctx)) != -1) fprintf(stderr, "Valid From: %s", ctime(&t)); if ((t = tls_peer_cert_notafter(tls_ctx)) != -1) fprintf(stderr, "Valid Until: %s", ctime(&t)); if (tls_peer_cert_hash(tls_ctx)) fprintf(stderr, "Cert Hash: %s\n", tls_peer_cert_hash(tls_ctx)); } void report_connect(const struct sockaddr *sa, socklen_t salen, char *path) { char remote_host[NI_MAXHOST]; char remote_port[NI_MAXSERV]; int herr; int flags = NI_NUMERICSERV; if (path != NULL) { fprintf(stderr, "Connection on %s received!\n", path); return; } if (nflag) flags |= NI_NUMERICHOST; if ((herr = getnameinfo(sa, salen, remote_host, sizeof(remote_host), remote_port, sizeof(remote_port), flags)) != 0) { if (herr == EAI_SYSTEM) err(1, "getnameinfo"); else errx(1, "getnameinfo: %s", gai_strerror(herr)); } fprintf(stderr, "Connection from %s %s " "received!\n", remote_host, remote_port); } void help(void) { usage(0); fprintf(stderr, "\tCommand Summary:\n\ \t-4 Use IPv4\n\ \t-6 Use IPv6\n\ \t-C certfile Public key file\n\ \t-c Use TLS\n\ \t-D Enable the debug socket option\n\ \t-d Detach from stdin\n\ \t-e name\t Required name in peer certificate\n\ \t-F Pass socket fd\n\ \t-H hash\t Hash string of peer certificate\n\ \t-h This help text\n\ \t-I length TCP receive buffer length\n\ \t-i interval Delay interval for lines sent, ports scanned\n\ \t-K keyfile Private key file\n\ \t-k Keep inbound sockets open for multiple connects\n\ \t-l Listen mode, for inbound connects\n\ \t-M ttl Outgoing TTL / Hop Limit\n\ \t-m minttl Minimum incoming TTL / Hop Limit\n\ \t-N Shutdown the network socket after EOF on stdin\n\ \t-n Suppress name/port resolutions\n\ \t-O length TCP send buffer length\n\ \t-P proxyuser\tUsername for proxy authentication\n\ \t-p port\t Specify local port for remote connects\n\ \t-R CAfile CA bundle\n\ \t-r Randomize remote ports\n" #ifdef TCP_MD5SIG "\ \t-S Enable the TCP MD5 signature option\n" #endif "\ \t-s source Local source address\n\ \t-T keyword TOS value or TLS options\n\ \t-t Answer TELNET negotiation\n\ \t-U Use UNIX domain socket\n\ \t-u UDP mode\n" #ifdef SO_RTABLE "\ \t-V rtable Specify alternate routing table\n" #endif "\ \t-v Verbose\n\ \t-w timeout Timeout for connects and final net reads\n\ \t-X proto Proxy protocol: \"4\", \"5\" (SOCKS) or \"connect\"\n\ \t-x addr[:port]\tSpecify proxy address and port\n\ \t-z Zero-I/O mode [used for scanning]\n\ Port numbers can be individual or ranges: lo-hi [inclusive]\n"); exit(1); } void usage(int ret) { fprintf(stderr, "usage: nc [-46cDdFhklNnrStUuvz] [-C certfile] [-e name] " "[-H hash] [-I length]\n" "\t [-i interval] [-K keyfile] [-M ttl] [-m minttl] [-O length]\n" "\t [-P proxy_username] [-p source_port] [-R CAfile] [-s source]\n" "\t [-T keyword] [-V rtable] [-w timeout] [-X proxy_protocol]\n" "\t [-x proxy_address[:port]] [destination] [port]\n"); if (ret) exit(1); } |
Added jni/libressl/apps/nc/socks.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 | /* $OpenBSD: socks.c,v 1.23 2015/12/10 18:31:52 mmcc Exp $ */ /* * Copyright (c) 1999 Niklas Hallqvist. All rights reserved. * Copyright (c) 2004, 2005 Damien Miller. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR 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 <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <err.h> #include <errno.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <resolv.h> #include <readpassphrase.h> #include "atomicio.h" #define SOCKS_PORT "1080" #define HTTP_PROXY_PORT "3128" #define HTTP_MAXHDRS 64 #define SOCKS_V5 5 #define SOCKS_V4 4 #define SOCKS_NOAUTH 0 #define SOCKS_NOMETHOD 0xff #define SOCKS_CONNECT 1 #define SOCKS_IPV4 1 #define SOCKS_DOMAIN 3 #define SOCKS_IPV6 4 int remote_connect(const char *, const char *, struct addrinfo); int socks_connect(const char *, const char *, struct addrinfo, const char *, const char *, struct addrinfo, int, const char *); static int decode_addrport(const char *h, const char *p, struct sockaddr *addr, socklen_t addrlen, int v4only, int numeric) { int r; struct addrinfo hints, *res; bzero(&hints, sizeof(hints)); hints.ai_family = v4only ? PF_INET : PF_UNSPEC; hints.ai_flags = numeric ? AI_NUMERICHOST : 0; hints.ai_socktype = SOCK_STREAM; r = getaddrinfo(h, p, &hints, &res); /* Don't fatal when attempting to convert a numeric address */ if (r != 0) { if (!numeric) { errx(1, "getaddrinfo(\"%.64s\", \"%.64s\"): %s", h, p, gai_strerror(r)); } return (-1); } if (addrlen < res->ai_addrlen) { freeaddrinfo(res); errx(1, "internal error: addrlen < res->ai_addrlen"); } memcpy(addr, res->ai_addr, res->ai_addrlen); freeaddrinfo(res); return (0); } static int proxy_read_line(int fd, char *buf, size_t bufsz) { size_t off; for(off = 0;;) { if (off >= bufsz) errx(1, "proxy read too long"); if (atomicio(read, fd, buf + off, 1) != 1) err(1, "proxy read"); /* Skip CR */ if (buf[off] == '\r') continue; if (buf[off] == '\n') { buf[off] = '\0'; break; } off++; } return (off); } static const char * getproxypass(const char *proxyuser, const char *proxyhost) { char prompt[512]; static char pw[256]; snprintf(prompt, sizeof(prompt), "Proxy password for %s@%s: ", proxyuser, proxyhost); if (readpassphrase(prompt, pw, sizeof(pw), RPP_REQUIRE_TTY) == NULL) errx(1, "Unable to read proxy passphrase"); return (pw); } /* * Error strings adapted from the generally accepted SOCKSv4 spec: * * http://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4.protocol */ static const char * socks4_strerror(int e) { switch (e) { case 90: return "Succeeded"; case 91: return "Request rejected or failed"; case 92: return "SOCKS server cannot connect to identd on the client"; case 93: return "Client program and identd report different user-ids"; default: return "Unknown error"; } } /* * Error strings taken almost directly from RFC 1928. */ static const char * socks5_strerror(int e) { switch (e) { case 0: return "Succeeded"; case 1: return "General SOCKS server failure"; case 2: return "Connection not allowed by ruleset"; case 3: return "Network unreachable"; case 4: return "Host unreachable"; case 5: return "Connection refused"; case 6: return "TTL expired"; case 7: return "Command not supported"; case 8: return "Address type not supported"; default: return "Unknown error"; } } int socks_connect(const char *host, const char *port, struct addrinfo hints __attribute__ ((__unused__)), const char *proxyhost, const char *proxyport, struct addrinfo proxyhints, int socksv, const char *proxyuser) { int proxyfd, r, authretry = 0; size_t hlen, wlen; unsigned char buf[1024]; size_t cnt; struct sockaddr_storage addr; struct sockaddr_in *in4 = (struct sockaddr_in *)&addr; struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)&addr; in_port_t serverport; const char *proxypass = NULL; if (proxyport == NULL) proxyport = (socksv == -1) ? HTTP_PROXY_PORT : SOCKS_PORT; /* Abuse API to lookup port */ if (decode_addrport("0.0.0.0", port, (struct sockaddr *)&addr, sizeof(addr), 1, 1) == -1) errx(1, "unknown port \"%.64s\"", port); serverport = in4->sin_port; again: if (authretry++ > 3) errx(1, "Too many authentication failures"); proxyfd = remote_connect(proxyhost, proxyport, proxyhints); if (proxyfd < 0) return (-1); if (socksv == 5) { if (decode_addrport(host, port, (struct sockaddr *)&addr, sizeof(addr), 0, 1) == -1) addr.ss_family = 0; /* used in switch below */ /* Version 5, one method: no authentication */ buf[0] = SOCKS_V5; buf[1] = 1; buf[2] = SOCKS_NOAUTH; cnt = atomicio(vwrite, proxyfd, buf, 3); if (cnt != 3) err(1, "write failed (%zu/3)", cnt); cnt = atomicio(read, proxyfd, buf, 2); if (cnt != 2) err(1, "read failed (%zu/3)", cnt); if (buf[1] == SOCKS_NOMETHOD) errx(1, "authentication method negotiation failed"); switch (addr.ss_family) { case 0: /* Version 5, connect: domain name */ /* Max domain name length is 255 bytes */ hlen = strlen(host); if (hlen > 255) errx(1, "host name too long for SOCKS5"); buf[0] = SOCKS_V5; buf[1] = SOCKS_CONNECT; buf[2] = 0; buf[3] = SOCKS_DOMAIN; buf[4] = hlen; memcpy(buf + 5, host, hlen); memcpy(buf + 5 + hlen, &serverport, sizeof serverport); wlen = 7 + hlen; break; case AF_INET: /* Version 5, connect: IPv4 address */ buf[0] = SOCKS_V5; buf[1] = SOCKS_CONNECT; buf[2] = 0; buf[3] = SOCKS_IPV4; memcpy(buf + 4, &in4->sin_addr, sizeof in4->sin_addr); memcpy(buf + 8, &in4->sin_port, sizeof in4->sin_port); wlen = 10; break; case AF_INET6: /* Version 5, connect: IPv6 address */ buf[0] = SOCKS_V5; buf[1] = SOCKS_CONNECT; buf[2] = 0; buf[3] = SOCKS_IPV6; memcpy(buf + 4, &in6->sin6_addr, sizeof in6->sin6_addr); memcpy(buf + 20, &in6->sin6_port, sizeof in6->sin6_port); wlen = 22; break; default: errx(1, "internal error: silly AF"); } cnt = atomicio(vwrite, proxyfd, buf, wlen); if (cnt != wlen) err(1, "write failed (%zu/%zu)", cnt, wlen); cnt = atomicio(read, proxyfd, buf, 4); if (cnt != 4) err(1, "read failed (%zu/4)", cnt); if (buf[1] != 0) { errx(1, "connection failed, SOCKSv5 error: %s", socks5_strerror(buf[1])); } switch (buf[3]) { case SOCKS_IPV4: cnt = atomicio(read, proxyfd, buf + 4, 6); if (cnt != 6) err(1, "read failed (%zu/6)", cnt); break; case SOCKS_IPV6: cnt = atomicio(read, proxyfd, buf + 4, 18); if (cnt != 18) err(1, "read failed (%zu/18)", cnt); break; default: errx(1, "connection failed, unsupported address type"); } } else if (socksv == 4) { /* This will exit on lookup failure */ decode_addrport(host, port, (struct sockaddr *)&addr, sizeof(addr), 1, 0); /* Version 4 */ buf[0] = SOCKS_V4; buf[1] = SOCKS_CONNECT; /* connect */ memcpy(buf + 2, &in4->sin_port, sizeof in4->sin_port); memcpy(buf + 4, &in4->sin_addr, sizeof in4->sin_addr); buf[8] = 0; /* empty username */ wlen = 9; cnt = atomicio(vwrite, proxyfd, buf, wlen); if (cnt != wlen) err(1, "write failed (%zu/%zu)", cnt, wlen); cnt = atomicio(read, proxyfd, buf, 8); if (cnt != 8) err(1, "read failed (%zu/8)", cnt); if (buf[1] != 90) { errx(1, "connection failed, SOCKSv4 error: %s", socks4_strerror(buf[1])); } } else if (socksv == -1) { /* HTTP proxy CONNECT */ /* Disallow bad chars in hostname */ if (strcspn(host, "\r\n\t []:") != strlen(host)) errx(1, "Invalid hostname"); /* Try to be sane about numeric IPv6 addresses */ if (strchr(host, ':') != NULL) { r = snprintf(buf, sizeof(buf), "CONNECT [%s]:%d HTTP/1.0\r\n", host, ntohs(serverport)); } else { r = snprintf(buf, sizeof(buf), "CONNECT %s:%d HTTP/1.0\r\n", host, ntohs(serverport)); } if (r == -1 || (size_t)r >= sizeof(buf)) errx(1, "hostname too long"); r = strlen(buf); cnt = atomicio(vwrite, proxyfd, buf, r); if (cnt != r) err(1, "write failed (%zu/%d)", cnt, r); if (authretry > 1) { char resp[1024]; proxypass = getproxypass(proxyuser, proxyhost); r = snprintf(buf, sizeof(buf), "%s:%s", proxyuser, proxypass); if (r == -1 || (size_t)r >= sizeof(buf) || b64_ntop(buf, strlen(buf), resp, sizeof(resp)) == -1) errx(1, "Proxy username/password too long"); r = snprintf(buf, sizeof(buf), "Proxy-Authorization: " "Basic %s\r\n", resp); if (r == -1 || (size_t)r >= sizeof(buf)) errx(1, "Proxy auth response too long"); r = strlen(buf); if ((cnt = atomicio(vwrite, proxyfd, buf, r)) != r) err(1, "write failed (%zu/%d)", cnt, r); } /* Terminate headers */ if ((cnt = atomicio(vwrite, proxyfd, "\r\n", 2)) != 2) err(1, "write failed (%zu/2)", cnt); /* Read status reply */ proxy_read_line(proxyfd, buf, sizeof(buf)); if (proxyuser != NULL && strncmp(buf, "HTTP/1.0 407 ", 12) == 0) { if (authretry > 1) { fprintf(stderr, "Proxy authentication " "failed\n"); } close(proxyfd); goto again; } else if (strncmp(buf, "HTTP/1.0 200 ", 12) != 0 && strncmp(buf, "HTTP/1.1 200 ", 12) != 0) errx(1, "Proxy error: \"%s\"", buf); /* Headers continue until we hit an empty line */ for (r = 0; r < HTTP_MAXHDRS; r++) { proxy_read_line(proxyfd, buf, sizeof(buf)); if (*buf == '\0') break; } if (*buf != '\0') errx(1, "Too many proxy headers received"); } else errx(1, "Unknown proxy protocol %d", socksv); return (proxyfd); } |
Deleted jni/libressl/apps/nseq.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/ocsp.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/openssl.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/openssl.cnf.
|
| < < < < < < < < < < < < < < < < < < < < < < < < |
Added jni/libressl/apps/openssl/CMakeLists.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | include_directories( . ../../include ../../include/compat ) set( OPENSSL_SRC apps.c asn1pars.c ca.c ciphers.c cms.c crl.c crl2p7.c dgst.c dh.c dhparam.c dsa.c dsaparam.c ec.c ecparam.c enc.c errstr.c gendh.c gendsa.c genpkey.c genrsa.c nseq.c ocsp.c openssl.c passwd.c pkcs12.c pkcs7.c pkcs8.c pkey.c pkeyparam.c pkeyutl.c prime.c rand.c req.c rsa.c rsautl.c s_cb.c s_client.c s_server.c s_socket.c s_time.c sess_id.c smime.c speed.c spkac.c ts.c verify.c version.c x509.c ) if(CMAKE_HOST_UNIX) set(OPENSSL_SRC ${OPENSSL_SRC} apps_posix.c) set(OPENSSL_SRC ${OPENSSL_SRC} certhash.c) endif() if(CMAKE_HOST_WIN32) set(OPENSSL_SRC ${OPENSSL_SRC} apps_win.c) set(OPENSSL_SRC ${OPENSSL_SRC} certhash_win.c) set(OPENSSL_SRC ${OPENSSL_SRC} compat/poll_win.c) endif() check_function_exists(strtonum HAVE_STRTONUM) if(HAVE_STRTONUM) add_definitions(-DHAVE_STRTONUM) else() set(OPENSSL_SRC ${OPENSSL_SRC} compat/strtonum.c) endif() add_executable(openssl ${OPENSSL_SRC}) target_link_libraries(openssl ${OPENSSL_LIBS}) install(TARGETS openssl DESTINATION bin) install(FILES openssl.1 DESTINATION share/man/man1) if(NOT "${OPENSSLDIR}" STREQUAL "") set(CONF_DIR "${OPENSSLDIR}") else() set(CONF_DIR "${CMAKE_INSTALL_PREFIX}/etc/ssl") endif() install(FILES cert.pem openssl.cnf x509v3.cnf DESTINATION ${CONF_DIR}) install(DIRECTORY DESTINATION ${CONF_DIR}/cert) |
Added jni/libressl/apps/openssl/Makefile.am.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | include $(top_srcdir)/Makefile.am.common bin_PROGRAMS = openssl dist_man_MANS = openssl.1 openssl_LDADD = $(PLATFORM_LDADD) $(PROG_LDADD) openssl_LDADD += $(abs_top_builddir)/ssl/libssl.la openssl_LDADD += $(abs_top_builddir)/crypto/libcrypto.la openssl_SOURCES = apps.c openssl_SOURCES += asn1pars.c openssl_SOURCES += ca.c openssl_SOURCES += ciphers.c openssl_SOURCES += cms.c openssl_SOURCES += crl.c openssl_SOURCES += crl2p7.c openssl_SOURCES += dgst.c openssl_SOURCES += dh.c openssl_SOURCES += dhparam.c openssl_SOURCES += dsa.c openssl_SOURCES += dsaparam.c openssl_SOURCES += ec.c openssl_SOURCES += ecparam.c openssl_SOURCES += enc.c openssl_SOURCES += errstr.c openssl_SOURCES += gendh.c openssl_SOURCES += gendsa.c openssl_SOURCES += genpkey.c openssl_SOURCES += genrsa.c openssl_SOURCES += nseq.c openssl_SOURCES += ocsp.c openssl_SOURCES += openssl.c openssl_SOURCES += passwd.c openssl_SOURCES += pkcs12.c openssl_SOURCES += pkcs7.c openssl_SOURCES += pkcs8.c openssl_SOURCES += pkey.c openssl_SOURCES += pkeyparam.c openssl_SOURCES += pkeyutl.c openssl_SOURCES += prime.c openssl_SOURCES += rand.c openssl_SOURCES += req.c openssl_SOURCES += rsa.c openssl_SOURCES += rsautl.c openssl_SOURCES += s_cb.c openssl_SOURCES += s_client.c openssl_SOURCES += s_server.c openssl_SOURCES += s_socket.c openssl_SOURCES += s_time.c openssl_SOURCES += sess_id.c openssl_SOURCES += smime.c openssl_SOURCES += speed.c openssl_SOURCES += spkac.c openssl_SOURCES += ts.c openssl_SOURCES += verify.c openssl_SOURCES += version.c openssl_SOURCES += x509.c if BUILD_CERTHASH openssl_SOURCES += certhash.c else openssl_SOURCES += certhash_win.c endif if HOST_WIN openssl_SOURCES += apps_win.c else openssl_SOURCES += apps_posix.c endif if !HAVE_POLL if HOST_WIN openssl_SOURCES += compat/poll_win.c endif endif if !HAVE_STRTONUM openssl_SOURCES += compat/strtonum.c endif noinst_HEADERS = apps.h noinst_HEADERS += progs.h noinst_HEADERS += s_apps.h noinst_HEADERS += testdsa.h noinst_HEADERS += testrsa.h noinst_HEADERS += timeouts.h EXTRA_DIST = cert.pem EXTRA_DIST += openssl.cnf EXTRA_DIST += x509v3.cnf EXTRA_DIST += CMakeLists.txt install-exec-hook: @if [ "@OPENSSLDIR@x" != "x" ]; then \ OPENSSLDIR="$(DESTDIR)/@OPENSSLDIR@"; \ else \ OPENSSLDIR="$(DESTDIR)/$(sysconfdir)/ssl"; \ fi; \ mkdir -p "$$OPENSSLDIR/certs"; \ for i in cert.pem openssl.cnf x509v3.cnf; do \ if [ ! -f "$$OPENSSLDIR/$i" ]; then \ $(INSTALL) -m 644 "$(srcdir)/$$i" "$$OPENSSLDIR/$$i"; \ else \ echo " $$OPENSSLDIR/$$i already exists, install will not overwrite"; \ fi \ done uninstall-local: @if [ "@OPENSSLDIR@x" != "x" ]; then \ OPENSSLDIR="$(DESTDIR)/@OPENSSLDIR@"; \ else \ OPENSSLDIR="$(DESTDIR)/$(sysconfdir)/ssl"; \ fi; \ for i in cert.pem openssl.cnf x509v3.cnf; do \ if cmp -s "$$OPENSSLDIR/$$i" "$(srcdir)/$$i"; then \ rm -f "$$OPENSSLDIR/$$i"; \ fi \ done |
Added jni/libressl/apps/openssl/Makefile.in.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 | # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in 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 program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = openssl$(EXEEXT) @BUILD_CERTHASH_TRUE@am__append_1 = certhash.c @BUILD_CERTHASH_FALSE@am__append_2 = certhash_win.c @HOST_WIN_TRUE@am__append_3 = apps_win.c @HOST_WIN_FALSE@am__append_4 = apps_posix.c @HAVE_POLL_FALSE@@HOST_WIN_TRUE@am__append_5 = compat/poll_win.c @HAVE_STRTONUM_FALSE@am__append_6 = compat/strtonum.c subdir = apps/openssl ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/check-hardening-options.m4 \ $(top_srcdir)/m4/check-libc.m4 \ $(top_srcdir)/m4/check-os-options.m4 \ $(top_srcdir)/m4/disable-compiler-warnings.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am__openssl_SOURCES_DIST = apps.c asn1pars.c ca.c ciphers.c cms.c \ crl.c crl2p7.c dgst.c dh.c dhparam.c dsa.c dsaparam.c ec.c \ ecparam.c enc.c errstr.c gendh.c gendsa.c genpkey.c genrsa.c \ nseq.c ocsp.c openssl.c passwd.c pkcs12.c pkcs7.c pkcs8.c \ pkey.c pkeyparam.c pkeyutl.c prime.c rand.c req.c rsa.c \ rsautl.c s_cb.c s_client.c s_server.c s_socket.c s_time.c \ sess_id.c smime.c speed.c spkac.c ts.c verify.c version.c \ x509.c certhash.c certhash_win.c apps_win.c apps_posix.c \ compat/poll_win.c compat/strtonum.c @BUILD_CERTHASH_TRUE@am__objects_1 = certhash.$(OBJEXT) @BUILD_CERTHASH_FALSE@am__objects_2 = certhash_win.$(OBJEXT) @HOST_WIN_TRUE@am__objects_3 = apps_win.$(OBJEXT) @HOST_WIN_FALSE@am__objects_4 = apps_posix.$(OBJEXT) am__dirstamp = $(am__leading_dot)dirstamp @HAVE_POLL_FALSE@@HOST_WIN_TRUE@am__objects_5 = \ @HAVE_POLL_FALSE@@HOST_WIN_TRUE@ compat/poll_win.$(OBJEXT) @HAVE_STRTONUM_FALSE@am__objects_6 = compat/strtonum.$(OBJEXT) am_openssl_OBJECTS = apps.$(OBJEXT) asn1pars.$(OBJEXT) ca.$(OBJEXT) \ ciphers.$(OBJEXT) cms.$(OBJEXT) crl.$(OBJEXT) crl2p7.$(OBJEXT) \ dgst.$(OBJEXT) dh.$(OBJEXT) dhparam.$(OBJEXT) dsa.$(OBJEXT) \ dsaparam.$(OBJEXT) ec.$(OBJEXT) ecparam.$(OBJEXT) \ enc.$(OBJEXT) errstr.$(OBJEXT) gendh.$(OBJEXT) \ gendsa.$(OBJEXT) genpkey.$(OBJEXT) genrsa.$(OBJEXT) \ nseq.$(OBJEXT) ocsp.$(OBJEXT) openssl.$(OBJEXT) \ passwd.$(OBJEXT) pkcs12.$(OBJEXT) pkcs7.$(OBJEXT) \ pkcs8.$(OBJEXT) pkey.$(OBJEXT) pkeyparam.$(OBJEXT) \ pkeyutl.$(OBJEXT) prime.$(OBJEXT) rand.$(OBJEXT) req.$(OBJEXT) \ rsa.$(OBJEXT) rsautl.$(OBJEXT) s_cb.$(OBJEXT) \ s_client.$(OBJEXT) s_server.$(OBJEXT) s_socket.$(OBJEXT) \ s_time.$(OBJEXT) sess_id.$(OBJEXT) smime.$(OBJEXT) \ speed.$(OBJEXT) spkac.$(OBJEXT) ts.$(OBJEXT) verify.$(OBJEXT) \ version.$(OBJEXT) x509.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) $(am__objects_3) $(am__objects_4) \ $(am__objects_5) $(am__objects_6) openssl_OBJECTS = $(am_openssl_OBJECTS) am__DEPENDENCIES_1 = openssl_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(openssl_SOURCES) DIST_SOURCES = $(am__openssl_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man_MANS) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.common $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCRYPTO_VERSION = @LIBCRYPTO_VERSION@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSSL_VERSION = @LIBSSL_VERSION@ LIBTLS_VERSION = @LIBTLS_VERSION@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSLDIR = @OPENSSLDIR@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PLATFORM_LDADD = @PLATFORM_LDADD@ PROG_LDADD = @PROG_LDADD@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat -DLIBRESSL_INTERNAL dist_man_MANS = openssl.1 openssl_LDADD = $(PLATFORM_LDADD) $(PROG_LDADD) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la openssl_SOURCES = apps.c asn1pars.c ca.c ciphers.c cms.c crl.c \ crl2p7.c dgst.c dh.c dhparam.c dsa.c dsaparam.c ec.c ecparam.c \ enc.c errstr.c gendh.c gendsa.c genpkey.c genrsa.c nseq.c \ ocsp.c openssl.c passwd.c pkcs12.c pkcs7.c pkcs8.c pkey.c \ pkeyparam.c pkeyutl.c prime.c rand.c req.c rsa.c rsautl.c \ s_cb.c s_client.c s_server.c s_socket.c s_time.c sess_id.c \ smime.c speed.c spkac.c ts.c verify.c version.c x509.c \ $(am__append_1) $(am__append_2) $(am__append_3) \ $(am__append_4) $(am__append_5) $(am__append_6) noinst_HEADERS = apps.h progs.h s_apps.h testdsa.h testrsa.h \ timeouts.h EXTRA_DIST = cert.pem openssl.cnf x509v3.cnf CMakeLists.txt all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign apps/openssl/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign apps/openssl/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.common $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list compat/$(am__dirstamp): @$(MKDIR_P) compat @: > compat/$(am__dirstamp) compat/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) compat/$(DEPDIR) @: > compat/$(DEPDIR)/$(am__dirstamp) compat/poll_win.$(OBJEXT): compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/strtonum.$(OBJEXT): compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) openssl$(EXEEXT): $(openssl_OBJECTS) $(openssl_DEPENDENCIES) $(EXTRA_openssl_DEPENDENCIES) @rm -f openssl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(openssl_OBJECTS) $(openssl_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f compat/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apps.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apps_posix.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apps_win.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1pars.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ca.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/certhash.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/certhash_win.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ciphers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cms.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crl2p7.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dgst.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dh.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dhparam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsa.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsaparam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecparam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errstr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gendh.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gendsa.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genpkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genrsa.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nseq.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ocsp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openssl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/passwd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkcs12.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkcs7.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkcs8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkeyparam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkeyutl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rand.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/req.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsa.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsautl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_cb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_client.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_server.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_socket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sess_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speed.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spkac.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ts.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/verify.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x509.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/poll_win.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/strtonum.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f compat/$(DEPDIR)/$(am__dirstamp) -rm -f compat/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) compat/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) compat/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-local uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-exec-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-exec-hook install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-local \ uninstall-man uninstall-man1 .PRECIOUS: Makefile install-exec-hook: @if [ "@OPENSSLDIR@x" != "x" ]; then \ OPENSSLDIR="$(DESTDIR)/@OPENSSLDIR@"; \ else \ OPENSSLDIR="$(DESTDIR)/$(sysconfdir)/ssl"; \ fi; \ mkdir -p "$$OPENSSLDIR/certs"; \ for i in cert.pem openssl.cnf x509v3.cnf; do \ if [ ! -f "$$OPENSSLDIR/$i" ]; then \ $(INSTALL) -m 644 "$(srcdir)/$$i" "$$OPENSSLDIR/$$i"; \ else \ echo " $$OPENSSLDIR/$$i already exists, install will not overwrite"; \ fi \ done uninstall-local: @if [ "@OPENSSLDIR@x" != "x" ]; then \ OPENSSLDIR="$(DESTDIR)/@OPENSSLDIR@"; \ else \ OPENSSLDIR="$(DESTDIR)/$(sysconfdir)/ssl"; \ fi; \ for i in cert.pem openssl.cnf x509v3.cnf; do \ if cmp -s "$$OPENSSLDIR/$$i" "$(srcdir)/$$i"; then \ rm -f "$$OPENSSLDIR/$$i"; \ fi \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: |
Added jni/libressl/apps/openssl/apps.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 | /* $OpenBSD: apps.c,v 1.36 2015/09/13 12:41:01 bcook Exp $ */ /* * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> * * 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. */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <sys/types.h> #include <sys/stat.h> #include <ctype.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> #include <unistd.h> #include "apps.h" #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/pem.h> #include <openssl/pkcs12.h> #include <openssl/safestack.h> #include <openssl/x509.h> #include <openssl/x509v3.h> #include <openssl/rsa.h> typedef struct { const char *name; unsigned long flag; unsigned long mask; } NAME_EX_TBL; UI_METHOD *ui_method = NULL; static int set_table_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl); static int set_multi_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl); #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA) /* Looks like this stuff is worth moving into separate function */ static EVP_PKEY *load_netscape_key(BIO *err, BIO *key, const char *file, const char *key_descrip, int format); #endif int str2fmt(char *s) { if (s == NULL) return FORMAT_UNDEF; if ((*s == 'D') || (*s == 'd')) return (FORMAT_ASN1); else if ((*s == 'T') || (*s == 't')) return (FORMAT_TEXT); else if ((*s == 'N') || (*s == 'n')) return (FORMAT_NETSCAPE); else if ((*s == 'S') || (*s == 's')) return (FORMAT_SMIME); else if ((*s == 'M') || (*s == 'm')) return (FORMAT_MSBLOB); else if ((*s == '1') || (strcmp(s, "PKCS12") == 0) || (strcmp(s, "pkcs12") == 0) || (strcmp(s, "P12") == 0) || (strcmp(s, "p12") == 0)) return (FORMAT_PKCS12); else if ((*s == 'P') || (*s == 'p')) { if (s[1] == 'V' || s[1] == 'v') return FORMAT_PVK; else return (FORMAT_PEM); } else return (FORMAT_UNDEF); } void program_name(char *in, char *out, int size) { char *p; p = strrchr(in, '/'); if (p != NULL) p++; else p = in; strlcpy(out, p, size); } int chopup_args(ARGS *arg, char *buf, int *argc, char **argv[]) { int num, i; char *p; *argc = 0; *argv = NULL; i = 0; if (arg->count == 0) { arg->count = 20; arg->data = reallocarray(NULL, arg->count, sizeof(char *)); if (arg->data == NULL) return 0; } for (i = 0; i < arg->count; i++) arg->data[i] = NULL; num = 0; p = buf; for (;;) { /* first scan over white space */ if (!*p) break; while (*p && ((*p == ' ') || (*p == '\t') || (*p == '\n'))) p++; if (!*p) break; /* The start of something good :-) */ if (num >= arg->count) { char **tmp_p; int tlen = arg->count + 20; tmp_p = reallocarray(arg->data, tlen, sizeof(char *)); if (tmp_p == NULL) return 0; arg->data = tmp_p; arg->count = tlen; /* initialize newly allocated data */ for (i = num; i < arg->count; i++) arg->data[i] = NULL; } arg->data[num++] = p; /* now look for the end of this */ if ((*p == '\'') || (*p == '\"')) { /* scan for closing * quote */ i = *(p++); arg->data[num - 1]++; /* jump over quote */ while (*p && (*p != i)) p++; *p = '\0'; } else { while (*p && ((*p != ' ') && (*p != '\t') && (*p != '\n'))) p++; if (*p == '\0') p--; else *p = '\0'; } p++; } *argc = num; *argv = arg->data; return (1); } int dump_cert_text(BIO *out, X509 *x) { char *p; p = X509_NAME_oneline(X509_get_subject_name(x), NULL, 0); BIO_puts(out, "subject="); BIO_puts(out, p); free(p); p = X509_NAME_oneline(X509_get_issuer_name(x), NULL, 0); BIO_puts(out, "\nissuer="); BIO_puts(out, p); BIO_puts(out, "\n"); free(p); return 0; } int ui_open(UI *ui) { return UI_method_get_opener(UI_OpenSSL()) (ui); } int ui_read(UI *ui, UI_STRING *uis) { const char *password; int string_type; if (UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD && UI_get0_user_data(ui)) { string_type = UI_get_string_type(uis); if (string_type == UIT_PROMPT || string_type == UIT_VERIFY) { password = ((PW_CB_DATA *)UI_get0_user_data(ui))->password; if (password && password[0] != '\0') { UI_set_result(ui, uis, password); return 1; } } } return UI_method_get_reader(UI_OpenSSL()) (ui, uis); } int ui_write(UI *ui, UI_STRING *uis) { const char *password; int string_type; if (UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD && UI_get0_user_data(ui)) { string_type = UI_get_string_type(uis); if (string_type == UIT_PROMPT || string_type == UIT_VERIFY) { password = ((PW_CB_DATA *)UI_get0_user_data(ui))->password; if (password && password[0] != '\0') return 1; } } return UI_method_get_writer(UI_OpenSSL()) (ui, uis); } int ui_close(UI *ui) { return UI_method_get_closer(UI_OpenSSL()) (ui); } int password_callback(char *buf, int bufsiz, int verify, void *arg) { PW_CB_DATA *cb_tmp = arg; UI *ui = NULL; int res = 0; const char *prompt_info = NULL; const char *password = NULL; PW_CB_DATA *cb_data = (PW_CB_DATA *) cb_tmp; if (cb_data) { if (cb_data->password) password = cb_data->password; if (cb_data->prompt_info) prompt_info = cb_data->prompt_info; } if (password) { res = strlen(password); if (res > bufsiz) res = bufsiz; memcpy(buf, password, res); return res; } ui = UI_new_method(ui_method); if (ui) { int ok = 0; char *buff = NULL; int ui_flags = 0; char *prompt = NULL; prompt = UI_construct_prompt(ui, "pass phrase", prompt_info); ui_flags |= UI_INPUT_FLAG_DEFAULT_PWD; UI_ctrl(ui, UI_CTRL_PRINT_ERRORS, 1, 0, 0); if (ok >= 0) ok = UI_add_input_string(ui, prompt, ui_flags, buf, PW_MIN_LENGTH, bufsiz - 1); if (ok >= 0 && verify) { buff = malloc(bufsiz); ok = UI_add_verify_string(ui, prompt, ui_flags, buff, PW_MIN_LENGTH, bufsiz - 1, buf); } if (ok >= 0) do { ok = UI_process(ui); } while (ok < 0 && UI_ctrl(ui, UI_CTRL_IS_REDOABLE, 0, 0, 0)); if (buff) { explicit_bzero(buff, (unsigned int) bufsiz); free(buff); } if (ok >= 0) res = strlen(buf); if (ok == -1) { BIO_printf(bio_err, "User interface error\n"); ERR_print_errors(bio_err); explicit_bzero(buf, (unsigned int) bufsiz); res = 0; } if (ok == -2) { BIO_printf(bio_err, "aborted!\n"); explicit_bzero(buf, (unsigned int) bufsiz); res = 0; } UI_free(ui); free(prompt); } return res; } static char *app_get_pass(BIO *err, char *arg, int keepbio); int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2) { int same; if (!arg2 || !arg1 || strcmp(arg1, arg2)) same = 0; else same = 1; if (arg1) { *pass1 = app_get_pass(err, arg1, same); if (!*pass1) return 0; } else if (pass1) *pass1 = NULL; if (arg2) { *pass2 = app_get_pass(err, arg2, same ? 2 : 0); if (!*pass2) return 0; } else if (pass2) *pass2 = NULL; return 1; } static char * app_get_pass(BIO *err, char *arg, int keepbio) { char *tmp, tpass[APP_PASS_LEN]; static BIO *pwdbio = NULL; const char *errstr = NULL; int i; if (!strncmp(arg, "pass:", 5)) return strdup(arg + 5); if (!strncmp(arg, "env:", 4)) { tmp = getenv(arg + 4); if (!tmp) { BIO_printf(err, "Can't read environment variable %s\n", arg + 4); return NULL; } return strdup(tmp); } if (!keepbio || !pwdbio) { if (!strncmp(arg, "file:", 5)) { pwdbio = BIO_new_file(arg + 5, "r"); if (!pwdbio) { BIO_printf(err, "Can't open file %s\n", arg + 5); return NULL; } } else if (!strncmp(arg, "fd:", 3)) { BIO *btmp; i = strtonum(arg + 3, 0, INT_MAX, &errstr); if (errstr) { BIO_printf(err, "Invalid file descriptor %s: %s\n", arg, errstr); return NULL; } pwdbio = BIO_new_fd(i, BIO_NOCLOSE); if (!pwdbio) { BIO_printf(err, "Can't access file descriptor %s\n", arg + 3); return NULL; } /* * Can't do BIO_gets on an fd BIO so add a buffering * BIO */ btmp = BIO_new(BIO_f_buffer()); pwdbio = BIO_push(btmp, pwdbio); } else if (!strcmp(arg, "stdin")) { pwdbio = BIO_new_fp(stdin, BIO_NOCLOSE); if (!pwdbio) { BIO_printf(err, "Can't open BIO for stdin\n"); return NULL; } } else { BIO_printf(err, "Invalid password argument \"%s\"\n", arg); return NULL; } } i = BIO_gets(pwdbio, tpass, APP_PASS_LEN); if (keepbio != 1) { BIO_free_all(pwdbio); pwdbio = NULL; } if (i <= 0) { BIO_printf(err, "Error reading password from BIO\n"); return NULL; } tmp = strchr(tpass, '\n'); if (tmp) *tmp = 0; return strdup(tpass); } int add_oid_section(BIO *err, CONF *conf) { char *p; STACK_OF(CONF_VALUE) *sktmp; CONF_VALUE *cnf; int i; if (!(p = NCONF_get_string(conf, NULL, "oid_section"))) { ERR_clear_error(); return 1; } if (!(sktmp = NCONF_get_section(conf, p))) { BIO_printf(err, "problem loading oid section %s\n", p); return 0; } for (i = 0; i < sk_CONF_VALUE_num(sktmp); i++) { cnf = sk_CONF_VALUE_value(sktmp, i); if (OBJ_create(cnf->value, cnf->name, cnf->name) == NID_undef) { BIO_printf(err, "problem creating object %s=%s\n", cnf->name, cnf->value); return 0; } } return 1; } static int load_pkcs12(BIO *err, BIO *in, const char *desc, pem_password_cb *pem_cb, void *cb_data, EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca) { const char *pass; char tpass[PEM_BUFSIZE]; int len, ret = 0; PKCS12 *p12; p12 = d2i_PKCS12_bio(in, NULL); if (p12 == NULL) { BIO_printf(err, "Error loading PKCS12 file for %s\n", desc); goto die; } /* See if an empty password will do */ if (PKCS12_verify_mac(p12, "", 0) || PKCS12_verify_mac(p12, NULL, 0)) pass = ""; else { if (!pem_cb) pem_cb = password_callback; len = pem_cb(tpass, PEM_BUFSIZE, 0, cb_data); if (len < 0) { BIO_printf(err, "Passpharse callback error for %s\n", desc); goto die; } if (len < PEM_BUFSIZE) tpass[len] = 0; if (!PKCS12_verify_mac(p12, tpass, len)) { BIO_printf(err, "Mac verify error (wrong password?) in PKCS12 file for %s\n", desc); goto die; } pass = tpass; } ret = PKCS12_parse(p12, pass, pkey, cert, ca); die: if (p12) PKCS12_free(p12); return ret; } X509 * load_cert(BIO *err, const char *file, int format, const char *pass, const char *cert_descrip) { X509 *x = NULL; BIO *cert; if ((cert = BIO_new(BIO_s_file())) == NULL) { ERR_print_errors(err); goto end; } if (file == NULL) { setvbuf(stdin, NULL, _IONBF, 0); BIO_set_fp(cert, stdin, BIO_NOCLOSE); } else { if (BIO_read_filename(cert, file) <= 0) { BIO_printf(err, "Error opening %s %s\n", cert_descrip, file); ERR_print_errors(err); goto end; } } if (format == FORMAT_ASN1) x = d2i_X509_bio(cert, NULL); else if (format == FORMAT_NETSCAPE) { NETSCAPE_X509 *nx; nx = ASN1_item_d2i_bio(ASN1_ITEM_rptr(NETSCAPE_X509), cert, NULL); if (nx == NULL) goto end; if ((strncmp(NETSCAPE_CERT_HDR, (char *) nx->header->data, nx->header->length) != 0)) { NETSCAPE_X509_free(nx); BIO_printf(err, "Error reading header on certificate\n"); goto end; } x = nx->cert; nx->cert = NULL; NETSCAPE_X509_free(nx); } else if (format == FORMAT_PEM) x = PEM_read_bio_X509_AUX(cert, NULL, password_callback, NULL); else if (format == FORMAT_PKCS12) { if (!load_pkcs12(err, cert, cert_descrip, NULL, NULL, NULL, &x, NULL)) goto end; } else { BIO_printf(err, "bad input format specified for %s\n", cert_descrip); goto end; } end: if (x == NULL) { BIO_printf(err, "unable to load certificate\n"); ERR_print_errors(err); } BIO_free(cert); return (x); } EVP_PKEY * load_key(BIO *err, const char *file, int format, int maybe_stdin, const char *pass, const char *key_descrip) { BIO *key = NULL; EVP_PKEY *pkey = NULL; PW_CB_DATA cb_data; cb_data.password = pass; cb_data.prompt_info = file; if (file == NULL && (!maybe_stdin)) { BIO_printf(err, "no keyfile specified\n"); goto end; } key = BIO_new(BIO_s_file()); if (key == NULL) { ERR_print_errors(err); goto end; } if (file == NULL && maybe_stdin) { setvbuf(stdin, NULL, _IONBF, 0); BIO_set_fp(key, stdin, BIO_NOCLOSE); } else if (BIO_read_filename(key, file) <= 0) { BIO_printf(err, "Error opening %s %s\n", key_descrip, file); ERR_print_errors(err); goto end; } if (format == FORMAT_ASN1) { pkey = d2i_PrivateKey_bio(key, NULL); } else if (format == FORMAT_PEM) { pkey = PEM_read_bio_PrivateKey(key, NULL, password_callback, &cb_data); } #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA) else if (format == FORMAT_NETSCAPE || format == FORMAT_IISSGC) pkey = load_netscape_key(err, key, file, key_descrip, format); #endif else if (format == FORMAT_PKCS12) { if (!load_pkcs12(err, key, key_descrip, password_callback, &cb_data, &pkey, NULL, NULL)) goto end; } #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DSA) && !defined (OPENSSL_NO_RC4) else if (format == FORMAT_MSBLOB) pkey = b2i_PrivateKey_bio(key); else if (format == FORMAT_PVK) pkey = b2i_PVK_bio(key, password_callback, &cb_data); #endif else { BIO_printf(err, "bad input format specified for key file\n"); goto end; } end: BIO_free(key); if (pkey == NULL) { BIO_printf(err, "unable to load %s\n", key_descrip); ERR_print_errors(err); } return (pkey); } EVP_PKEY * load_pubkey(BIO *err, const char *file, int format, int maybe_stdin, const char *pass, const char *key_descrip) { BIO *key = NULL; EVP_PKEY *pkey = NULL; PW_CB_DATA cb_data; cb_data.password = pass; cb_data.prompt_info = file; if (file == NULL && !maybe_stdin) { BIO_printf(err, "no keyfile specified\n"); goto end; } key = BIO_new(BIO_s_file()); if (key == NULL) { ERR_print_errors(err); goto end; } if (file == NULL && maybe_stdin) { setvbuf(stdin, NULL, _IONBF, 0); BIO_set_fp(key, stdin, BIO_NOCLOSE); } else if (BIO_read_filename(key, file) <= 0) { BIO_printf(err, "Error opening %s %s\n", key_descrip, file); ERR_print_errors(err); goto end; } if (format == FORMAT_ASN1) { pkey = d2i_PUBKEY_bio(key, NULL); } else if (format == FORMAT_ASN1RSA) { RSA *rsa; rsa = d2i_RSAPublicKey_bio(key, NULL); if (rsa) { pkey = EVP_PKEY_new(); if (pkey) EVP_PKEY_set1_RSA(pkey, rsa); RSA_free(rsa); } else pkey = NULL; } else if (format == FORMAT_PEMRSA) { RSA *rsa; rsa = PEM_read_bio_RSAPublicKey(key, NULL, password_callback, &cb_data); if (rsa) { pkey = EVP_PKEY_new(); if (pkey) EVP_PKEY_set1_RSA(pkey, rsa); RSA_free(rsa); } else pkey = NULL; } else if (format == FORMAT_PEM) { pkey = PEM_read_bio_PUBKEY(key, NULL, password_callback, &cb_data); } #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA) else if (format == FORMAT_NETSCAPE || format == FORMAT_IISSGC) pkey = load_netscape_key(err, key, file, key_descrip, format); #endif #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DSA) else if (format == FORMAT_MSBLOB) pkey = b2i_PublicKey_bio(key); #endif else { BIO_printf(err, "bad input format specified for key file\n"); goto end; } end: BIO_free(key); if (pkey == NULL) BIO_printf(err, "unable to load %s\n", key_descrip); return (pkey); } #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA) static EVP_PKEY * load_netscape_key(BIO *err, BIO *key, const char *file, const char *key_descrip, int format) { EVP_PKEY *pkey; BUF_MEM *buf; RSA *rsa; const unsigned char *p; int size, i; buf = BUF_MEM_new(); pkey = EVP_PKEY_new(); size = 0; if (buf == NULL || pkey == NULL) goto error; for (;;) { if (!BUF_MEM_grow_clean(buf, size + 1024 * 10)) goto error; i = BIO_read(key, &(buf->data[size]), 1024 * 10); size += i; if (i == 0) break; if (i < 0) { BIO_printf(err, "Error reading %s %s", key_descrip, file); goto error; } } p = (unsigned char *) buf->data; rsa = d2i_RSA_NET(NULL, &p, (long) size, NULL, (format == FORMAT_IISSGC ? 1 : 0)); if (rsa == NULL) goto error; BUF_MEM_free(buf); EVP_PKEY_set1_RSA(pkey, rsa); return pkey; error: BUF_MEM_free(buf); EVP_PKEY_free(pkey); return NULL; } #endif /* ndef OPENSSL_NO_RC4 */ static int load_certs_crls(BIO *err, const char *file, int format, const char *pass, const char *desc, STACK_OF(X509) **pcerts, STACK_OF(X509_CRL) **pcrls) { int i; BIO *bio; STACK_OF(X509_INFO) *xis = NULL; X509_INFO *xi; PW_CB_DATA cb_data; int rv = 0; cb_data.password = pass; cb_data.prompt_info = file; if (format != FORMAT_PEM) { BIO_printf(err, "bad input format specified for %s\n", desc); return 0; } if (file == NULL) bio = BIO_new_fp(stdin, BIO_NOCLOSE); else bio = BIO_new_file(file, "r"); if (bio == NULL) { BIO_printf(err, "Error opening %s %s\n", desc, file ? file : "stdin"); ERR_print_errors(err); return 0; } xis = PEM_X509_INFO_read_bio(bio, NULL, password_callback, &cb_data); BIO_free(bio); if (pcerts) { *pcerts = sk_X509_new_null(); if (!*pcerts) goto end; } if (pcrls) { *pcrls = sk_X509_CRL_new_null(); if (!*pcrls) goto end; } for (i = 0; i < sk_X509_INFO_num(xis); i++) { xi = sk_X509_INFO_value(xis, i); if (xi->x509 && pcerts) { if (!sk_X509_push(*pcerts, xi->x509)) goto end; xi->x509 = NULL; } if (xi->crl && pcrls) { if (!sk_X509_CRL_push(*pcrls, xi->crl)) goto end; xi->crl = NULL; } } if (pcerts && sk_X509_num(*pcerts) > 0) rv = 1; if (pcrls && sk_X509_CRL_num(*pcrls) > 0) rv = 1; end: if (xis) sk_X509_INFO_pop_free(xis, X509_INFO_free); if (rv == 0) { if (pcerts) { sk_X509_pop_free(*pcerts, X509_free); *pcerts = NULL; } if (pcrls) { sk_X509_CRL_pop_free(*pcrls, X509_CRL_free); *pcrls = NULL; } BIO_printf(err, "unable to load %s\n", pcerts ? "certificates" : "CRLs"); ERR_print_errors(err); } return rv; } STACK_OF(X509) * load_certs(BIO *err, const char *file, int format, const char *pass, const char *desc) { STACK_OF(X509) *certs; if (!load_certs_crls(err, file, format, pass, desc, &certs, NULL)) return NULL; return certs; } STACK_OF(X509_CRL) * load_crls(BIO *err, const char *file, int format, const char *pass, const char *desc) { STACK_OF(X509_CRL) *crls; if (!load_certs_crls(err, file, format, pass, desc, NULL, &crls)) return NULL; return crls; } #define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) /* Return error for unknown extensions */ #define X509V3_EXT_DEFAULT 0 /* Print error for unknown extensions */ #define X509V3_EXT_ERROR_UNKNOWN (1L << 16) /* ASN1 parse unknown extensions */ #define X509V3_EXT_PARSE_UNKNOWN (2L << 16) /* BIO_dump unknown extensions */ #define X509V3_EXT_DUMP_UNKNOWN (3L << 16) #define X509_FLAG_CA (X509_FLAG_NO_ISSUER | X509_FLAG_NO_PUBKEY | \ X509_FLAG_NO_HEADER | X509_FLAG_NO_VERSION) int set_cert_ex(unsigned long *flags, const char *arg) { static const NAME_EX_TBL cert_tbl[] = { {"compatible", X509_FLAG_COMPAT, 0xffffffffl}, {"ca_default", X509_FLAG_CA, 0xffffffffl}, {"no_header", X509_FLAG_NO_HEADER, 0}, {"no_version", X509_FLAG_NO_VERSION, 0}, {"no_serial", X509_FLAG_NO_SERIAL, 0}, {"no_signame", X509_FLAG_NO_SIGNAME, 0}, {"no_validity", X509_FLAG_NO_VALIDITY, 0}, {"no_subject", X509_FLAG_NO_SUBJECT, 0}, {"no_issuer", X509_FLAG_NO_ISSUER, 0}, {"no_pubkey", X509_FLAG_NO_PUBKEY, 0}, {"no_extensions", X509_FLAG_NO_EXTENSIONS, 0}, {"no_sigdump", X509_FLAG_NO_SIGDUMP, 0}, {"no_aux", X509_FLAG_NO_AUX, 0}, {"no_attributes", X509_FLAG_NO_ATTRIBUTES, 0}, {"ext_default", X509V3_EXT_DEFAULT, X509V3_EXT_UNKNOWN_MASK}, {"ext_error", X509V3_EXT_ERROR_UNKNOWN, X509V3_EXT_UNKNOWN_MASK}, {"ext_parse", X509V3_EXT_PARSE_UNKNOWN, X509V3_EXT_UNKNOWN_MASK}, {"ext_dump", X509V3_EXT_DUMP_UNKNOWN, X509V3_EXT_UNKNOWN_MASK}, {NULL, 0, 0} }; return set_multi_opts(flags, arg, cert_tbl); } int set_name_ex(unsigned long *flags, const char *arg) { static const NAME_EX_TBL ex_tbl[] = { {"esc_2253", ASN1_STRFLGS_ESC_2253, 0}, {"esc_ctrl", ASN1_STRFLGS_ESC_CTRL, 0}, {"esc_msb", ASN1_STRFLGS_ESC_MSB, 0}, {"use_quote", ASN1_STRFLGS_ESC_QUOTE, 0}, {"utf8", ASN1_STRFLGS_UTF8_CONVERT, 0}, {"ignore_type", ASN1_STRFLGS_IGNORE_TYPE, 0}, {"show_type", ASN1_STRFLGS_SHOW_TYPE, 0}, {"dump_all", ASN1_STRFLGS_DUMP_ALL, 0}, {"dump_nostr", ASN1_STRFLGS_DUMP_UNKNOWN, 0}, {"dump_der", ASN1_STRFLGS_DUMP_DER, 0}, {"compat", XN_FLAG_COMPAT, 0xffffffffL}, {"sep_comma_plus", XN_FLAG_SEP_COMMA_PLUS, XN_FLAG_SEP_MASK}, {"sep_comma_plus_space", XN_FLAG_SEP_CPLUS_SPC, XN_FLAG_SEP_MASK}, {"sep_semi_plus_space", XN_FLAG_SEP_SPLUS_SPC, XN_FLAG_SEP_MASK}, {"sep_multiline", XN_FLAG_SEP_MULTILINE, XN_FLAG_SEP_MASK}, {"dn_rev", XN_FLAG_DN_REV, 0}, {"nofname", XN_FLAG_FN_NONE, XN_FLAG_FN_MASK}, {"sname", XN_FLAG_FN_SN, XN_FLAG_FN_MASK}, {"lname", XN_FLAG_FN_LN, XN_FLAG_FN_MASK}, {"align", XN_FLAG_FN_ALIGN, 0}, {"oid", XN_FLAG_FN_OID, XN_FLAG_FN_MASK}, {"space_eq", XN_FLAG_SPC_EQ, 0}, {"dump_unknown", XN_FLAG_DUMP_UNKNOWN_FIELDS, 0}, {"RFC2253", XN_FLAG_RFC2253, 0xffffffffL}, {"oneline", XN_FLAG_ONELINE, 0xffffffffL}, {"multiline", XN_FLAG_MULTILINE, 0xffffffffL}, {"ca_default", XN_FLAG_MULTILINE, 0xffffffffL}, {NULL, 0, 0} }; return set_multi_opts(flags, arg, ex_tbl); } int set_ext_copy(int *copy_type, const char *arg) { if (!strcasecmp(arg, "none")) *copy_type = EXT_COPY_NONE; else if (!strcasecmp(arg, "copy")) *copy_type = EXT_COPY_ADD; else if (!strcasecmp(arg, "copyall")) *copy_type = EXT_COPY_ALL; else return 0; return 1; } int copy_extensions(X509 *x, X509_REQ *req, int copy_type) { STACK_OF(X509_EXTENSION) *exts = NULL; X509_EXTENSION *ext, *tmpext; ASN1_OBJECT *obj; int i, idx, ret = 0; if (!x || !req || (copy_type == EXT_COPY_NONE)) return 1; exts = X509_REQ_get_extensions(req); for (i = 0; i < sk_X509_EXTENSION_num(exts); i++) { ext = sk_X509_EXTENSION_value(exts, i); obj = X509_EXTENSION_get_object(ext); idx = X509_get_ext_by_OBJ(x, obj, -1); /* Does extension exist? */ if (idx != -1) { /* If normal copy don't override existing extension */ if (copy_type == EXT_COPY_ADD) continue; /* Delete all extensions of same type */ do { tmpext = X509_get_ext(x, idx); X509_delete_ext(x, idx); X509_EXTENSION_free(tmpext); idx = X509_get_ext_by_OBJ(x, obj, -1); } while (idx != -1); } if (!X509_add_ext(x, ext, -1)) goto end; } ret = 1; end: sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free); return ret; } static int set_multi_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl) { STACK_OF(CONF_VALUE) *vals; CONF_VALUE *val; int i, ret = 1; if (!arg) return 0; vals = X509V3_parse_list(arg); for (i = 0; i < sk_CONF_VALUE_num(vals); i++) { val = sk_CONF_VALUE_value(vals, i); if (!set_table_opts(flags, val->name, in_tbl)) ret = 0; } sk_CONF_VALUE_pop_free(vals, X509V3_conf_free); return ret; } static int set_table_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl) { char c; const NAME_EX_TBL *ptbl; c = arg[0]; if (c == '-') { c = 0; arg++; } else if (c == '+') { c = 1; arg++; } else c = 1; for (ptbl = in_tbl; ptbl->name; ptbl++) { if (!strcasecmp(arg, ptbl->name)) { *flags &= ~ptbl->mask; if (c) *flags |= ptbl->flag; else *flags &= ~ptbl->flag; return 1; } } return 0; } void print_name(BIO *out, const char *title, X509_NAME *nm, unsigned long lflags) { char *buf; char mline = 0; int indent = 0; if (title) BIO_puts(out, title); if ((lflags & XN_FLAG_SEP_MASK) == XN_FLAG_SEP_MULTILINE) { mline = 1; indent = 4; } if (lflags == XN_FLAG_COMPAT) { buf = X509_NAME_oneline(nm, 0, 0); BIO_puts(out, buf); BIO_puts(out, "\n"); free(buf); } else { if (mline) BIO_puts(out, "\n"); X509_NAME_print_ex(out, nm, indent, lflags); BIO_puts(out, "\n"); } } X509_STORE * setup_verify(BIO *bp, char *CAfile, char *CApath) { X509_STORE *store; X509_LOOKUP *lookup; if (!(store = X509_STORE_new())) goto end; lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file()); if (lookup == NULL) goto end; if (CAfile) { if (!X509_LOOKUP_load_file(lookup, CAfile, X509_FILETYPE_PEM)) { BIO_printf(bp, "Error loading file %s\n", CAfile); goto end; } } else X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT); lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir()); if (lookup == NULL) goto end; if (CApath) { if (!X509_LOOKUP_add_dir(lookup, CApath, X509_FILETYPE_PEM)) { BIO_printf(bp, "Error loading directory %s\n", CApath); goto end; } } else X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT); ERR_clear_error(); return store; end: X509_STORE_free(store); return NULL; } int load_config(BIO *err, CONF *cnf) { static int load_config_called = 0; if (load_config_called) return 1; load_config_called = 1; if (cnf == NULL) cnf = config; if (cnf == NULL) return 1; OPENSSL_load_builtin_modules(); if (CONF_modules_load(cnf, NULL, 0) <= 0) { BIO_printf(err, "Error configuring OpenSSL\n"); ERR_print_errors(err); return 0; } return 1; } char * make_config_name() { const char *t = X509_get_default_cert_area(); char *p; if (asprintf(&p, "%s/openssl.cnf", t) == -1) return NULL; return p; } static unsigned long index_serial_hash(const OPENSSL_CSTRING *a) { const char *n; n = a[DB_serial]; while (*n == '0') n++; return (lh_strhash(n)); } static int index_serial_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b) { const char *aa, *bb; for (aa = a[DB_serial]; *aa == '0'; aa++) ; for (bb = b[DB_serial]; *bb == '0'; bb++) ; return (strcmp(aa, bb)); } static int index_name_qual(char **a) { return (a[0][0] == 'V'); } static unsigned long index_name_hash(const OPENSSL_CSTRING *a) { return (lh_strhash(a[DB_name])); } int index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b) { return (strcmp(a[DB_name], b[DB_name])); } static IMPLEMENT_LHASH_HASH_FN(index_serial, OPENSSL_CSTRING) static IMPLEMENT_LHASH_COMP_FN(index_serial, OPENSSL_CSTRING) static IMPLEMENT_LHASH_HASH_FN(index_name, OPENSSL_CSTRING) static IMPLEMENT_LHASH_COMP_FN(index_name, OPENSSL_CSTRING) #define BUFLEN 256 BIGNUM * load_serial(char *serialfile, int create, ASN1_INTEGER **retai) { BIO *in = NULL; BIGNUM *ret = NULL; char buf[1024]; ASN1_INTEGER *ai = NULL; ai = ASN1_INTEGER_new(); if (ai == NULL) goto err; if ((in = BIO_new(BIO_s_file())) == NULL) { ERR_print_errors(bio_err); goto err; } if (BIO_read_filename(in, serialfile) <= 0) { if (!create) { perror(serialfile); goto err; } else { ret = BN_new(); if (ret == NULL || !rand_serial(ret, ai)) BIO_printf(bio_err, "Out of memory\n"); } } else { if (!a2i_ASN1_INTEGER(in, ai, buf, 1024)) { BIO_printf(bio_err, "unable to load number from %s\n", serialfile); goto err; } ret = ASN1_INTEGER_to_BN(ai, NULL); if (ret == NULL) { BIO_printf(bio_err, "error converting number from bin to BIGNUM\n"); goto err; } } if (ret && retai) { *retai = ai; ai = NULL; } err: if (in != NULL) BIO_free(in); if (ai != NULL) ASN1_INTEGER_free(ai); return (ret); } int save_serial(char *serialfile, char *suffix, BIGNUM *serial, ASN1_INTEGER **retai) { char buf[1][BUFLEN]; BIO *out = NULL; int ret = 0, n; ASN1_INTEGER *ai = NULL; int j; if (suffix == NULL) j = strlen(serialfile); else j = strlen(serialfile) + strlen(suffix) + 1; if (j >= BUFLEN) { BIO_printf(bio_err, "file name too long\n"); goto err; } if (suffix == NULL) n = strlcpy(buf[0], serialfile, BUFLEN); else n = snprintf(buf[0], sizeof buf[0], "%s.%s", serialfile, suffix); if (n == -1 || n >= sizeof(buf[0])) { BIO_printf(bio_err, "serial too long\n"); goto err; } out = BIO_new(BIO_s_file()); if (out == NULL) { ERR_print_errors(bio_err); goto err; } if (BIO_write_filename(out, buf[0]) <= 0) { perror(serialfile); goto err; } if ((ai = BN_to_ASN1_INTEGER(serial, NULL)) == NULL) { BIO_printf(bio_err, "error converting serial to ASN.1 format\n"); goto err; } i2a_ASN1_INTEGER(out, ai); BIO_puts(out, "\n"); ret = 1; if (retai) { *retai = ai; ai = NULL; } err: if (out != NULL) BIO_free_all(out); if (ai != NULL) ASN1_INTEGER_free(ai); return (ret); } int rotate_serial(char *serialfile, char *new_suffix, char *old_suffix) { char buf[5][BUFLEN]; int i, j; i = strlen(serialfile) + strlen(old_suffix); j = strlen(serialfile) + strlen(new_suffix); if (i > j) j = i; if (j + 1 >= BUFLEN) { BIO_printf(bio_err, "file name too long\n"); goto err; } snprintf(buf[0], sizeof buf[0], "%s.%s", serialfile, new_suffix); snprintf(buf[1], sizeof buf[1], "%s.%s", serialfile, old_suffix); if (rename(serialfile, buf[1]) < 0 && errno != ENOENT && errno != ENOTDIR) { BIO_printf(bio_err, "unable to rename %s to %s\n", serialfile, buf[1]); perror("reason"); goto err; } if (rename(buf[0], serialfile) < 0) { BIO_printf(bio_err, "unable to rename %s to %s\n", buf[0], serialfile); perror("reason"); if (rename(buf[1], serialfile) < 0) { BIO_printf(bio_err, "unable to rename %s to %s\n", buf[1], serialfile); perror("reason"); } goto err; } return 1; err: return 0; } int rand_serial(BIGNUM *b, ASN1_INTEGER *ai) { BIGNUM *btmp; int ret = 0; if (b) btmp = b; else btmp = BN_new(); if (!btmp) return 0; if (!BN_pseudo_rand(btmp, SERIAL_RAND_BITS, 0, 0)) goto error; if (ai && !BN_to_ASN1_INTEGER(btmp, ai)) goto error; ret = 1; error: if (!b) BN_free(btmp); return ret; } CA_DB * load_index(char *dbfile, DB_ATTR *db_attr) { CA_DB *retdb = NULL; TXT_DB *tmpdb = NULL; BIO *in = BIO_new(BIO_s_file()); CONF *dbattr_conf = NULL; char buf[1][BUFLEN]; long errorline = -1; if (in == NULL) { ERR_print_errors(bio_err); goto err; } if (BIO_read_filename(in, dbfile) <= 0) { perror(dbfile); BIO_printf(bio_err, "unable to open '%s'\n", dbfile); goto err; } if ((tmpdb = TXT_DB_read(in, DB_NUMBER)) == NULL) goto err; snprintf(buf[0], sizeof buf[0], "%s.attr", dbfile); dbattr_conf = NCONF_new(NULL); if (NCONF_load(dbattr_conf, buf[0], &errorline) <= 0) { if (errorline > 0) { BIO_printf(bio_err, "error on line %ld of db attribute file '%s'\n", errorline, buf[0]); goto err; } else { NCONF_free(dbattr_conf); dbattr_conf = NULL; } } if ((retdb = malloc(sizeof(CA_DB))) == NULL) { fprintf(stderr, "Out of memory\n"); goto err; } retdb->db = tmpdb; tmpdb = NULL; if (db_attr) retdb->attributes = *db_attr; else { retdb->attributes.unique_subject = 1; } if (dbattr_conf) { char *p = NCONF_get_string(dbattr_conf, NULL, "unique_subject"); if (p) { retdb->attributes.unique_subject = parse_yesno(p, 1); } } err: if (dbattr_conf) NCONF_free(dbattr_conf); if (tmpdb) TXT_DB_free(tmpdb); if (in) BIO_free_all(in); return retdb; } int index_index(CA_DB *db) { if (!TXT_DB_create_index(db->db, DB_serial, NULL, LHASH_HASH_FN(index_serial), LHASH_COMP_FN(index_serial))) { BIO_printf(bio_err, "error creating serial number index:(%ld,%ld,%ld)\n", db->db->error, db->db->arg1, db->db->arg2); return 0; } if (db->attributes.unique_subject && !TXT_DB_create_index(db->db, DB_name, index_name_qual, LHASH_HASH_FN(index_name), LHASH_COMP_FN(index_name))) { BIO_printf(bio_err, "error creating name index:(%ld,%ld,%ld)\n", db->db->error, db->db->arg1, db->db->arg2); return 0; } return 1; } int save_index(const char *dbfile, const char *suffix, CA_DB *db) { char buf[3][BUFLEN]; BIO *out = BIO_new(BIO_s_file()); int j; if (out == NULL) { ERR_print_errors(bio_err); goto err; } j = strlen(dbfile) + strlen(suffix); if (j + 6 >= BUFLEN) { BIO_printf(bio_err, "file name too long\n"); goto err; } snprintf(buf[2], sizeof buf[2], "%s.attr", dbfile); snprintf(buf[1], sizeof buf[1], "%s.attr.%s", dbfile, suffix); snprintf(buf[0], sizeof buf[0], "%s.%s", dbfile, suffix); if (BIO_write_filename(out, buf[0]) <= 0) { perror(dbfile); BIO_printf(bio_err, "unable to open '%s'\n", dbfile); goto err; } j = TXT_DB_write(out, db->db); if (j <= 0) goto err; BIO_free(out); out = BIO_new(BIO_s_file()); if (BIO_write_filename(out, buf[1]) <= 0) { perror(buf[2]); BIO_printf(bio_err, "unable to open '%s'\n", buf[2]); goto err; } BIO_printf(out, "unique_subject = %s\n", db->attributes.unique_subject ? "yes" : "no"); BIO_free(out); return 1; err: return 0; } int rotate_index(const char *dbfile, const char *new_suffix, const char *old_suffix) { char buf[5][BUFLEN]; int i, j; i = strlen(dbfile) + strlen(old_suffix); j = strlen(dbfile) + strlen(new_suffix); if (i > j) j = i; if (j + 6 >= BUFLEN) { BIO_printf(bio_err, "file name too long\n"); goto err; } snprintf(buf[4], sizeof buf[4], "%s.attr", dbfile); snprintf(buf[2], sizeof buf[2], "%s.attr.%s", dbfile, new_suffix); snprintf(buf[0], sizeof buf[0], "%s.%s", dbfile, new_suffix); snprintf(buf[1], sizeof buf[1], "%s.%s", dbfile, old_suffix); snprintf(buf[3], sizeof buf[3], "%s.attr.%s", dbfile, old_suffix); if (rename(dbfile, buf[1]) < 0 && errno != ENOENT && errno != ENOTDIR) { BIO_printf(bio_err, "unable to rename %s to %s\n", dbfile, buf[1]); perror("reason"); goto err; } if (rename(buf[0], dbfile) < 0) { BIO_printf(bio_err, "unable to rename %s to %s\n", buf[0], dbfile); perror("reason"); if (rename(buf[1], dbfile) < 0) { BIO_printf(bio_err, "unable to rename %s to %s\n", buf[1], dbfile); perror("reason"); } goto err; } if (rename(buf[4], buf[3]) < 0 && errno != ENOENT && errno != ENOTDIR) { BIO_printf(bio_err, "unable to rename %s to %s\n", buf[4], buf[3]); perror("reason"); if (rename(dbfile, buf[0]) < 0) { BIO_printf(bio_err, "unable to rename %s to %s\n", dbfile, buf[0]); perror("reason"); } if (rename(buf[1], dbfile) < 0) { BIO_printf(bio_err, "unable to rename %s to %s\n", buf[1], dbfile); perror("reason"); } goto err; } if (rename(buf[2], buf[4]) < 0) { BIO_printf(bio_err, "unable to rename %s to %s\n", buf[2], buf[4]); perror("reason"); if (rename(buf[3], buf[4]) < 0) { BIO_printf(bio_err, "unable to rename %s to %s\n", buf[3], buf[4]); perror("reason"); } if (rename(dbfile, buf[0]) < 0) { BIO_printf(bio_err, "unable to rename %s to %s\n", dbfile, buf[0]); perror("reason"); } if (rename(buf[1], dbfile) < 0) { BIO_printf(bio_err, "unable to rename %s to %s\n", buf[1], dbfile); perror("reason"); } goto err; } return 1; err: return 0; } void free_index(CA_DB *db) { if (db) { if (db->db) TXT_DB_free(db->db); free(db); } } int parse_yesno(const char *str, int def) { int ret = def; if (str) { switch (*str) { case 'f': /* false */ case 'F': /* FALSE */ case 'n': /* no */ case 'N': /* NO */ case '0': /* 0 */ ret = 0; break; case 't': /* true */ case 'T': /* TRUE */ case 'y': /* yes */ case 'Y': /* YES */ case '1': /* 1 */ ret = 1; break; default: ret = def; break; } } return ret; } /* * subject is expected to be in the format /type0=value0/type1=value1/type2=... * where characters may be escaped by \ */ X509_NAME * parse_name(char *subject, long chtype, int multirdn) { X509_NAME *name = NULL; size_t buflen, max_ne; char **ne_types, **ne_values; char *buf, *bp, *sp; int i, nid, ne_num = 0; int *mval; /* * Buffer to copy the types and values into. Due to escaping the * copy can only become shorter. */ buflen = strlen(subject) + 1; buf = malloc(buflen); /* Maximum number of name elements. */ max_ne = buflen / 2 + 1; ne_types = reallocarray(NULL, max_ne, sizeof(char *)); ne_values = reallocarray(NULL, max_ne, sizeof(char *)); mval = reallocarray(NULL, max_ne, sizeof(int)); if (buf == NULL || ne_types == NULL || ne_values == NULL || mval == NULL) { BIO_printf(bio_err, "malloc error\n"); goto error; } bp = buf; sp = subject; if (*subject != '/') { BIO_printf(bio_err, "Subject does not start with '/'.\n"); goto error; } /* Skip leading '/'. */ sp++; /* No multivalued RDN by default. */ mval[ne_num] = 0; while (*sp) { /* Collect type. */ ne_types[ne_num] = bp; while (*sp) { /* is there anything to escape in the type...? */ if (*sp == '\\') { if (*++sp) *bp++ = *sp++; else { BIO_printf(bio_err, "escape character " "at end of string\n"); goto error; } } else if (*sp == '=') { sp++; *bp++ = '\0'; break; } else *bp++ = *sp++; } if (!*sp) { BIO_printf(bio_err, "end of string encountered while " "processing type of subject name element #%d\n", ne_num); goto error; } ne_values[ne_num] = bp; while (*sp) { if (*sp == '\\') { if (*++sp) *bp++ = *sp++; else { BIO_printf(bio_err, "escape character " "at end of string\n"); goto error; } } else if (*sp == '/') { sp++; /* no multivalued RDN by default */ mval[ne_num + 1] = 0; break; } else if (*sp == '+' && multirdn) { /* a not escaped + signals a multivalued RDN */ sp++; mval[ne_num + 1] = -1; break; } else *bp++ = *sp++; } *bp++ = '\0'; ne_num++; } if ((name = X509_NAME_new()) == NULL) goto error; for (i = 0; i < ne_num; i++) { if ((nid = OBJ_txt2nid(ne_types[i])) == NID_undef) { BIO_printf(bio_err, "Subject Attribute %s has no known NID, skipped\n", ne_types[i]); continue; } if (!*ne_values[i]) { BIO_printf(bio_err, "No value provided for Subject " "Attribute %s, skipped\n", ne_types[i]); continue; } if (!X509_NAME_add_entry_by_NID(name, nid, chtype, (unsigned char *) ne_values[i], -1, -1, mval[i])) goto error; } goto done; error: X509_NAME_free(name); name = NULL; done: free(ne_values); free(ne_types); free(mval); free(buf); return name; } int args_verify(char ***pargs, int *pargc, int *badarg, BIO *err, X509_VERIFY_PARAM **pm) { ASN1_OBJECT *otmp = NULL; unsigned long flags = 0; int i; int purpose = 0, depth = -1; char **oldargs = *pargs; char *arg = **pargs, *argn = (*pargs)[1]; time_t at_time = 0; const char *errstr = NULL; if (!strcmp(arg, "-policy")) { if (!argn) *badarg = 1; else { otmp = OBJ_txt2obj(argn, 0); if (!otmp) { BIO_printf(err, "Invalid Policy \"%s\"\n", argn); *badarg = 1; } } (*pargs)++; } else if (strcmp(arg, "-purpose") == 0) { X509_PURPOSE *xptmp; if (!argn) *badarg = 1; else { i = X509_PURPOSE_get_by_sname(argn); if (i < 0) { BIO_printf(err, "unrecognized purpose\n"); *badarg = 1; } else { xptmp = X509_PURPOSE_get0(i); purpose = X509_PURPOSE_get_id(xptmp); } } (*pargs)++; } else if (strcmp(arg, "-verify_depth") == 0) { if (!argn) *badarg = 1; else { depth = strtonum(argn, 1, INT_MAX, &errstr); if (errstr) { BIO_printf(err, "invalid depth %s: %s\n", argn, errstr); *badarg = 1; } } (*pargs)++; } else if (strcmp(arg, "-attime") == 0) { if (!argn) *badarg = 1; else { long long timestamp; /* * interpret the -attime argument as seconds since * Epoch */ if (sscanf(argn, "%lli", ×tamp) != 1) { BIO_printf(bio_err, "Error parsing timestamp %s\n", argn); *badarg = 1; } /* XXX 2038 truncation */ at_time = (time_t) timestamp; } (*pargs)++; } else if (!strcmp(arg, "-ignore_critical")) flags |= X509_V_FLAG_IGNORE_CRITICAL; else if (!strcmp(arg, "-issuer_checks")) flags |= X509_V_FLAG_CB_ISSUER_CHECK; else if (!strcmp(arg, "-crl_check")) flags |= X509_V_FLAG_CRL_CHECK; else if (!strcmp(arg, "-crl_check_all")) flags |= X509_V_FLAG_CRL_CHECK | X509_V_FLAG_CRL_CHECK_ALL; else if (!strcmp(arg, "-policy_check")) flags |= X509_V_FLAG_POLICY_CHECK; else if (!strcmp(arg, "-explicit_policy")) flags |= X509_V_FLAG_EXPLICIT_POLICY; else if (!strcmp(arg, "-inhibit_any")) flags |= X509_V_FLAG_INHIBIT_ANY; else if (!strcmp(arg, "-inhibit_map")) flags |= X509_V_FLAG_INHIBIT_MAP; else if (!strcmp(arg, "-x509_strict")) flags |= X509_V_FLAG_X509_STRICT; else if (!strcmp(arg, "-extended_crl")) flags |= X509_V_FLAG_EXTENDED_CRL_SUPPORT; else if (!strcmp(arg, "-use_deltas")) flags |= X509_V_FLAG_USE_DELTAS; else if (!strcmp(arg, "-policy_print")) flags |= X509_V_FLAG_NOTIFY_POLICY; else if (!strcmp(arg, "-check_ss_sig")) flags |= X509_V_FLAG_CHECK_SS_SIGNATURE; else return 0; if (*badarg) { if (*pm) X509_VERIFY_PARAM_free(*pm); *pm = NULL; goto end; } if (!*pm && !(*pm = X509_VERIFY_PARAM_new())) { *badarg = 1; goto end; } if (otmp) { X509_VERIFY_PARAM_add0_policy(*pm, otmp); otmp = NULL; } if (flags) X509_VERIFY_PARAM_set_flags(*pm, flags); if (purpose) X509_VERIFY_PARAM_set_purpose(*pm, purpose); if (depth >= 0) X509_VERIFY_PARAM_set_depth(*pm, depth); if (at_time) X509_VERIFY_PARAM_set_time(*pm, at_time); end: (*pargs)++; if (pargc) *pargc -= *pargs - oldargs; ASN1_OBJECT_free(otmp); return 1; } /* Read whole contents of a BIO into an allocated memory buffer and * return it. */ int bio_to_mem(unsigned char **out, int maxlen, BIO *in) { BIO *mem; int len, ret; unsigned char tbuf[1024]; mem = BIO_new(BIO_s_mem()); if (!mem) return -1; for (;;) { if ((maxlen != -1) && maxlen < 1024) len = maxlen; else len = 1024; len = BIO_read(in, tbuf, len); if (len <= 0) break; if (BIO_write(mem, tbuf, len) != len) { BIO_free(mem); return -1; } maxlen -= len; if (maxlen == 0) break; } ret = BIO_get_mem_data(mem, (char **) out); BIO_set_flags(mem, BIO_FLAGS_MEM_RDONLY); BIO_free(mem); return ret; } int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value) { int rv; char *stmp, *vtmp = NULL; if (value == NULL) return -1; stmp = strdup(value); if (!stmp) return -1; vtmp = strchr(stmp, ':'); if (vtmp) { *vtmp = 0; vtmp++; } rv = EVP_PKEY_CTX_ctrl_str(ctx, stmp, vtmp); free(stmp); return rv; } static void nodes_print(BIO *out, const char *name, STACK_OF(X509_POLICY_NODE) *nodes) { X509_POLICY_NODE *node; int i; BIO_printf(out, "%s Policies:", name); if (nodes) { BIO_puts(out, "\n"); for (i = 0; i < sk_X509_POLICY_NODE_num(nodes); i++) { node = sk_X509_POLICY_NODE_value(nodes, i); X509_POLICY_NODE_print(out, node, 2); } } else BIO_puts(out, " <empty>\n"); } void policies_print(BIO *out, X509_STORE_CTX *ctx) { X509_POLICY_TREE *tree; int explicit_policy; int free_out = 0; if (out == NULL) { out = BIO_new_fp(stderr, BIO_NOCLOSE); free_out = 1; } tree = X509_STORE_CTX_get0_policy_tree(ctx); explicit_policy = X509_STORE_CTX_get_explicit_policy(ctx); BIO_printf(out, "Require explicit Policy: %s\n", explicit_policy ? "True" : "False"); nodes_print(out, "Authority", X509_policy_tree_get0_policies(tree)); nodes_print(out, "User", X509_policy_tree_get0_user_policies(tree)); if (free_out) BIO_free(out); } /* next_protos_parse parses a comma separated list of strings into a string * in a format suitable for passing to SSL_CTX_set_next_protos_advertised. * outlen: (output) set to the length of the resulting buffer on success. * err: (maybe NULL) on failure, an error message line is written to this BIO. * in: a NUL termianted string like "abc,def,ghi" * * returns: a malloced buffer or NULL on failure. */ unsigned char * next_protos_parse(unsigned short *outlen, const char *in) { size_t len; unsigned char *out; size_t i, start = 0; len = strlen(in); if (len >= 65535) return NULL; out = malloc(strlen(in) + 1); if (!out) return NULL; for (i = 0; i <= len; ++i) { if (i == len || in[i] == ',') { if (i - start > 255) { free(out); return NULL; } out[start] = i - start; start = i + 1; } else out[i + 1] = in[i]; } *outlen = len + 1; return out; } int app_isdir(const char *name) { struct stat st; if (stat(name, &st) == 0) return S_ISDIR(st.st_mode); return -1; } #define OPTION_WIDTH 18 void options_usage(struct option *opts) { const char *p, *q; char optstr[32]; int i; for (i = 0; opts[i].name != NULL; i++) { if (opts[i].desc == NULL) continue; snprintf(optstr, sizeof(optstr), "-%s %s", opts[i].name, (opts[i].argname != NULL) ? opts[i].argname : ""); fprintf(stderr, " %-*s", OPTION_WIDTH, optstr); if (strlen(optstr) > OPTION_WIDTH) fprintf(stderr, "\n %-*s", OPTION_WIDTH, ""); p = opts[i].desc; while ((q = strchr(p, '\n')) != NULL) { fprintf(stderr, " %.*s", (int)(q - p), p); fprintf(stderr, "\n %-*s", OPTION_WIDTH, ""); p = q + 1; } fprintf(stderr, " %s\n", p); } } int options_parse(int argc, char **argv, struct option *opts, char **unnamed, int *argsused) { const char *errstr; struct option *opt; long long val; char *arg, *p; int fmt, used; int ord = 0; int i, j; if (unnamed != NULL) *unnamed = NULL; for (i = 1; i < argc; i++) { p = arg = argv[i]; /* Single unnamed argument (without leading hyphen). */ if (*p++ != '-') { if (argsused != NULL) goto done; if (unnamed == NULL) goto unknown; if (*unnamed != NULL) goto toomany; *unnamed = arg; continue; } /* End of named options (single hyphen). */ if (*p == '\0') { if (++i >= argc) goto done; if (argsused != NULL) goto done; if (unnamed != NULL && i == argc - 1) { if (*unnamed != NULL) goto toomany; *unnamed = argv[i]; continue; } goto unknown; } /* See if there is a matching option... */ for (j = 0; opts[j].name != NULL; j++) { if (strcmp(p, opts[j].name) == 0) break; } opt = &opts[j]; if (opt->name == NULL && opt->type == 0) goto unknown; if (opt->type == OPTION_ARG || opt->type == OPTION_ARG_FORMAT || opt->type == OPTION_ARG_FUNC || opt->type == OPTION_ARG_INT || opt->type == OPTION_ARG_LONG) { if (++i >= argc) { fprintf(stderr, "missing %s argument for -%s\n", opt->argname, opt->name); return (1); } } switch (opt->type) { case OPTION_ARG: *opt->opt.arg = argv[i]; break; case OPTION_ARGV_FUNC: if (opt->opt.argvfunc(argc - i, &argv[i], &used) != 0) return (1); i += used - 1; break; case OPTION_ARG_FORMAT: fmt = str2fmt(argv[i]); if (fmt == FORMAT_UNDEF) { fprintf(stderr, "unknown %s '%s' for -%s\n", opt->argname, argv[i], opt->name); return (1); } *opt->opt.value = fmt; break; case OPTION_ARG_FUNC: if (opt->opt.argfunc(argv[i]) != 0) return (1); break; case OPTION_ARG_INT: val = strtonum(argv[i], 0, INT_MAX, &errstr); if (errstr != NULL) { fprintf(stderr, "%s %s argument for -%s\n", errstr, opt->argname, opt->name); return (1); } *opt->opt.value = (int)val; break; case OPTION_ARG_LONG: val = strtonum(argv[i], 0, LONG_MAX, &errstr); if (errstr != NULL) { fprintf(stderr, "%s %s argument for -%s\n", errstr, opt->argname, opt->name); return (1); } *opt->opt.lvalue = (long)val; break; case OPTION_DISCARD: break; case OPTION_FUNC: if (opt->opt.func() != 0) return (1); break; case OPTION_FLAG: *opt->opt.flag = 1; break; case OPTION_FLAG_ORD: *opt->opt.flag = ++ord; break; case OPTION_VALUE: *opt->opt.value = opt->value; break; case OPTION_VALUE_AND: *opt->opt.value &= opt->value; break; case OPTION_VALUE_OR: *opt->opt.value |= opt->value; break; default: fprintf(stderr, "option %s - unknown type %i\n", opt->name, opt->type); return (1); } } done: if (argsused != NULL) *argsused = i; return (0); toomany: fprintf(stderr, "too many arguments\n"); return (1); unknown: fprintf(stderr, "unknown option '%s'\n", arg); return (1); } |
Added jni/libressl/apps/openssl/apps.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 | /* $OpenBSD: apps.h,v 1.16 2015/09/13 12:41:01 bcook Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_APPS_H #define HEADER_APPS_H #include <openssl/opensslconf.h> #include <openssl/bio.h> #include <openssl/conf.h> #include <openssl/lhash.h> #include <openssl/ossl_typ.h> #include <openssl/txt_db.h> #include <openssl/x509.h> #include <openssl/ui.h> #ifndef OPENSSL_NO_OCSP #include <openssl/ocsp.h> #endif #include <unistd.h> extern int single_execution; extern CONF *config; extern char *default_config_file; extern BIO *bio_err; typedef struct args_st { char **data; int count; } ARGS; #define PW_MIN_LENGTH 4 typedef struct pw_cb_data { const void *password; const char *prompt_info; } PW_CB_DATA; int password_callback(char *buf, int bufsiz, int verify, void *cb_data); int setup_ui(void); void destroy_ui(void); extern UI_METHOD *ui_method; int ui_open(UI *ui); int ui_read(UI *ui, UI_STRING *uis); int ui_write(UI *ui, UI_STRING *uis); int ui_close(UI *ui); int should_retry(int i); int args_from_file(char *file, int *argc, char **argv[]); int str2fmt(char *s); void program_name(char *in, char *out, int size); int chopup_args(ARGS *arg, char *buf, int *argc, char **argv[]); #ifdef HEADER_X509_H int dump_cert_text(BIO *out, X509 *x); void print_name(BIO *out, const char *title, X509_NAME *nm, unsigned long lflags); #endif int set_cert_ex(unsigned long *flags, const char *arg); int set_name_ex(unsigned long *flags, const char *arg); int set_ext_copy(int *copy_type, const char *arg); int copy_extensions(X509 *x, X509_REQ *req, int copy_type); int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2); int add_oid_section(BIO *err, CONF *conf); X509 *load_cert(BIO *err, const char *file, int format, const char *pass, const char *cert_descrip); EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin, const char *pass, const char *key_descrip); EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin, const char *pass, const char *key_descrip); STACK_OF(X509) *load_certs(BIO *err, const char *file, int format, const char *pass, const char *cert_descrip); STACK_OF(X509_CRL) *load_crls(BIO *err, const char *file, int format, const char *pass, const char *cert_descrip); X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath); #ifndef OPENSSL_NO_OCSP OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req, char *host, char *path, char *port, int use_ssl, STACK_OF(CONF_VALUE) *headers, int req_timeout); #endif int load_config(BIO *err, CONF *cnf); char *make_config_name(void); /* Functions defined in ca.c and also used in ocsp.c */ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold, ASN1_GENERALIZEDTIME **pinvtm, const char *str); #define DB_type 0 #define DB_exp_date 1 #define DB_rev_date 2 #define DB_serial 3 /* index - unique */ #define DB_file 4 #define DB_name 5 /* index - unique when active and not disabled */ #define DB_NUMBER 6 #define DB_TYPE_REV 'R' #define DB_TYPE_EXP 'E' #define DB_TYPE_VAL 'V' typedef struct db_attr_st { int unique_subject; } DB_ATTR; typedef struct ca_db_st { DB_ATTR attributes; TXT_DB *db; } CA_DB; BIGNUM *load_serial(char *serialfile, int create, ASN1_INTEGER **retai); int save_serial(char *serialfile, char *suffix, BIGNUM *serial, ASN1_INTEGER **retai); int rotate_serial(char *serialfile, char *new_suffix, char *old_suffix); int rand_serial(BIGNUM *b, ASN1_INTEGER *ai); CA_DB *load_index(char *dbfile, DB_ATTR *dbattr); int index_index(CA_DB *db); int save_index(const char *dbfile, const char *suffix, CA_DB *db); int rotate_index(const char *dbfile, const char *new_suffix, const char *old_suffix); void free_index(CA_DB *db); #define index_name_cmp_noconst(a, b) \ index_name_cmp((const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, a), \ (const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, b)) int index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b); int parse_yesno(const char *str, int def); X509_NAME *parse_name(char *str, long chtype, int multirdn); int args_verify(char ***pargs, int *pargc, int *badarg, BIO *err, X509_VERIFY_PARAM **pm); void policies_print(BIO *out, X509_STORE_CTX *ctx); int bio_to_mem(unsigned char **out, int maxlen, BIO *in); int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value); int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx, const char *algname, int do_param); int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md, STACK_OF(OPENSSL_STRING) *sigopts); int do_X509_REQ_sign(BIO *err, X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md, STACK_OF(OPENSSL_STRING) *sigopts); int do_X509_CRL_sign(BIO *err, X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md, STACK_OF(OPENSSL_STRING) *sigopts); unsigned char *next_protos_parse(unsigned short *outlen, const char *in); #define FORMAT_UNDEF 0 #define FORMAT_ASN1 1 #define FORMAT_TEXT 2 #define FORMAT_PEM 3 #define FORMAT_NETSCAPE 4 #define FORMAT_PKCS12 5 #define FORMAT_SMIME 6 #define FORMAT_IISSGC 8 /* XXX this stupid macro helps us to avoid * adding yet another param to load_*key() */ #define FORMAT_PEMRSA 9 /* PEM RSAPubicKey format */ #define FORMAT_ASN1RSA 10 /* DER RSAPubicKey format */ #define FORMAT_MSBLOB 11 /* MS Key blob format */ #define FORMAT_PVK 12 /* MS PVK file format */ #define EXT_COPY_NONE 0 #define EXT_COPY_ADD 1 #define EXT_COPY_ALL 2 #define NETSCAPE_CERT_HDR "certificate" #define APP_PASS_LEN 1024 #define SERIAL_RAND_BITS 64 int app_isdir(const char *); #define TM_START 0 #define TM_STOP 1 double app_tminterval (int stop, int usertime); #define OPENSSL_NO_SSL_INTERN struct option { const char *name; const char *argname; const char *desc; enum { OPTION_ARG, OPTION_ARGV_FUNC, OPTION_ARG_FORMAT, OPTION_ARG_FUNC, OPTION_ARG_INT, OPTION_ARG_LONG, OPTION_DISCARD, OPTION_FUNC, OPTION_FLAG, OPTION_FLAG_ORD, OPTION_VALUE, OPTION_VALUE_AND, OPTION_VALUE_OR, } type; union { char **arg; int (*argfunc)(char *arg); int (*argvfunc)(int argc, char **argv, int *argsused); int *flag; int (*func)(void); long *lvalue; int *value; } opt; const int value; }; void options_usage(struct option *opts); int options_parse(int argc, char **argv, struct option *opts, char **unnamed, int *argsused); #endif |
Added jni/libressl/apps/openssl/apps_posix.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* * Functions that need to be overridden by non-POSIX operating systems. */ #include <sys/times.h> #include <unistd.h> #include "apps.h" double app_tminterval(int stop, int usertime) { double ret = 0; struct tms rus; clock_t now = times(&rus); static clock_t tmstart; if (usertime) now = rus.tms_utime; if (stop == TM_START) tmstart = now; else { long int tck = sysconf(_SC_CLK_TCK); ret = (now - tmstart) / (double) tck; } return (ret); } int setup_ui(void) { ui_method = UI_create_method("OpenSSL application user interface"); UI_method_set_opener(ui_method, ui_open); UI_method_set_reader(ui_method, ui_read); UI_method_set_writer(ui_method, ui_write); UI_method_set_closer(ui_method, ui_close); return 0; } void destroy_ui(void) { if (ui_method) { UI_destroy_method(ui_method); ui_method = NULL; } } |
Added jni/libressl/apps/openssl/apps_win.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | /* * Public domain * * Dongsheng Song <dongsheng.song@gmail.com> * Brent Cook <bcook@openbsd.org> */ #include <windows.h> #include <io.h> #include <fcntl.h> #include "apps.h" double app_tminterval(int stop, int usertime) { static unsigned __int64 tmstart; union { unsigned __int64 u64; FILETIME ft; } ct, et, kt, ut; GetProcessTimes(GetCurrentProcess(), &ct.ft, &et.ft, &kt.ft, &ut.ft); if (stop == TM_START) { tmstart = ut.u64 + kt.u64; } else { return (ut.u64 + kt.u64 - tmstart) / (double) 10000000; } return 0; } int setup_ui(void) { ui_method = UI_create_method("OpenSSL application user interface"); UI_method_set_opener(ui_method, ui_open); UI_method_set_reader(ui_method, ui_read); UI_method_set_writer(ui_method, ui_write); UI_method_set_closer(ui_method, ui_close); /* * Set STDIO to binary */ _setmode(_fileno(stdin), _O_BINARY); _setmode(_fileno(stdout), _O_BINARY); _setmode(_fileno(stderr), _O_BINARY); return 0; } void destroy_ui(void) { if (ui_method) { UI_destroy_method(ui_method); ui_method = NULL; } } |
Added jni/libressl/apps/openssl/asn1pars.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 | /* $OpenBSD: asn1pars.c,v 1.5 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* A nice addition from Dr Stephen Henson <steve@openssl.org> to * add the -strparse option which parses nested binary structures */ #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> #include "apps.h" #include "progs.h" #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/pem.h> #include <openssl/x509.h> static struct { char *derfile; int dump; char *genconf; char *genstr; int indent; char *infile; int informat; unsigned int length; int noout; int offset; char *oidfile; STACK_OF(OPENSSL_STRING) *osk; } asn1pars_config; static int asn1pars_opt_dlimit(char *arg) { const char *errstr; asn1pars_config.dump = strtonum(arg, 1, INT_MAX, &errstr); if (errstr) { fprintf(stderr, "-dlimit must be from 1 to INT_MAX: %s\n", errstr); return (-1); } return (0); } static int asn1pars_opt_length(char *arg) { const char *errstr; asn1pars_config.length = strtonum(arg, 1, UINT_MAX, &errstr); if (errstr) { fprintf(stderr, "-length must be from 1 to UINT_MAX: %s\n", errstr); return (-1); } return (0); } static int asn1pars_opt_strparse(char *arg) { if (sk_OPENSSL_STRING_push(asn1pars_config.osk, arg) == 0) { fprintf(stderr, "-strparse cannot add argument\n"); return (-1); } return (0); } static struct option asn1pars_options[] = { { .name = "dump", .desc = "Dump unknown data in hex form", .type = OPTION_VALUE, .value = -1, .opt.value = &asn1pars_config.dump, }, { .name = "dlimit", .argname = "num", .desc = "Dump the first num bytes of unknown data in hex form", .type = OPTION_ARG_FUNC, .opt.argfunc = asn1pars_opt_dlimit, }, { .name = "genconf", .argname = "file", .desc = "File to generate ASN.1 structure from", .type = OPTION_ARG, .opt.arg = &asn1pars_config.genconf, }, { .name = "genstr", .argname = "string", .desc = "String to generate ASN.1 structure from", .type = OPTION_ARG, .opt.arg = &asn1pars_config.genstr, }, { .name = "i", .desc = "Indent output according to depth of structures", .type = OPTION_FLAG, .opt.flag = &asn1pars_config.indent, }, { .name = "in", .argname = "file", .desc = "The input file (default stdin)", .type = OPTION_ARG, .opt.arg = &asn1pars_config.infile, }, { .name = "inform", .argname = "fmt", .desc = "Input format (DER, TXT or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &asn1pars_config.informat, }, { .name = "length", .argname = "num", .desc = "Number of bytes to parse (default until EOF)", .type = OPTION_ARG_FUNC, .opt.argfunc = asn1pars_opt_length, }, { .name = "noout", .desc = "Do not produce any output", .type = OPTION_FLAG, .opt.flag = &asn1pars_config.noout, }, { .name = "offset", .argname = "num", .desc = "Offset to begin parsing", .type = OPTION_ARG_INT, .opt.value = &asn1pars_config.offset, }, { .name = "oid", .argname = "file", .desc = "File containing additional object identifiers (OIDs)", .type = OPTION_ARG, .opt.arg = &asn1pars_config.oidfile, }, { .name = "out", .argname = "file", .desc = "Output file in DER format", .type = OPTION_ARG, .opt.arg = &asn1pars_config.derfile, }, { .name = "strparse", .argname = "offset", .desc = "Parse the content octets of ASN.1 object starting at" " offset", .type = OPTION_ARG_FUNC, .opt.argfunc = asn1pars_opt_strparse, }, { NULL }, }; static void asn1pars_usage() { fprintf(stderr, "usage: asn1parse [-i] [-dlimit num] [-dump] [-genconf file] " "[-genstr string]\n" " [-in file] [-inform fmt] [-length num] [-noout] [-offset num] " "[-oid file]\n" " [-out file] [-strparse offset]\n\n"); options_usage(asn1pars_options); } static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf); int asn1parse_main(int argc, char **argv) { int i, j, ret = 1; long num, tmplen; BIO *in = NULL, *out = NULL, *b64 = NULL, *derout = NULL; char *str = NULL; const char *errstr = NULL; unsigned char *tmpbuf; const unsigned char *ctmpbuf; BUF_MEM *buf = NULL; ASN1_TYPE *at = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&asn1pars_config, 0, sizeof(asn1pars_config)); asn1pars_config.informat = FORMAT_PEM; if ((asn1pars_config.osk = sk_OPENSSL_STRING_new_null()) == NULL) { BIO_printf(bio_err, "Memory allocation failure\n"); goto end; } if (options_parse(argc, argv, asn1pars_options, NULL, NULL) != 0) { asn1pars_usage(); return (1); } in = BIO_new(BIO_s_file()); out = BIO_new(BIO_s_file()); if ((in == NULL) || (out == NULL)) { ERR_print_errors(bio_err); goto end; } BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); if (asn1pars_config.oidfile != NULL) { if (BIO_read_filename(in, asn1pars_config.oidfile) <= 0) { BIO_printf(bio_err, "problems opening %s\n", asn1pars_config.oidfile); ERR_print_errors(bio_err); goto end; } OBJ_create_objects(in); } if (asn1pars_config.infile == NULL) BIO_set_fp(in, stdin, BIO_NOCLOSE); else { if (BIO_read_filename(in, asn1pars_config.infile) <= 0) { perror(asn1pars_config.infile); goto end; } } if (asn1pars_config.derfile) { if (!(derout = BIO_new_file(asn1pars_config.derfile, "wb"))) { BIO_printf(bio_err, "problems opening %s\n", asn1pars_config.derfile); ERR_print_errors(bio_err); goto end; } } if ((buf = BUF_MEM_new()) == NULL) goto end; if (!BUF_MEM_grow(buf, BUFSIZ * 8)) goto end; /* Pre-allocate :-) */ if (asn1pars_config.genstr || asn1pars_config.genconf) { num = do_generate(bio_err, asn1pars_config.genstr, asn1pars_config.genconf, buf); if (num < 0) { ERR_print_errors(bio_err); goto end; } } else { if (asn1pars_config.informat == FORMAT_PEM) { BIO *tmp; if ((b64 = BIO_new(BIO_f_base64())) == NULL) goto end; BIO_push(b64, in); tmp = in; in = b64; b64 = tmp; } num = 0; for (;;) { if (!BUF_MEM_grow(buf, (int) num + BUFSIZ)) goto end; i = BIO_read(in, &(buf->data[num]), BUFSIZ); if (i <= 0) break; num += i; } } str = buf->data; /* If any structs to parse go through in sequence */ if (sk_OPENSSL_STRING_num(asn1pars_config.osk)) { tmpbuf = (unsigned char *) str; tmplen = num; for (i = 0; i < sk_OPENSSL_STRING_num(asn1pars_config.osk); i++) { ASN1_TYPE *atmp; int typ; j = strtonum( sk_OPENSSL_STRING_value(asn1pars_config.osk, i), 1, INT_MAX, &errstr); if (errstr) { BIO_printf(bio_err, "'%s' is an invalid number: %s\n", sk_OPENSSL_STRING_value(asn1pars_config.osk, i), errstr); continue; } tmpbuf += j; tmplen -= j; atmp = at; ctmpbuf = tmpbuf; at = d2i_ASN1_TYPE(NULL, &ctmpbuf, tmplen); ASN1_TYPE_free(atmp); if (!at) { BIO_printf(bio_err, "Error parsing structure\n"); ERR_print_errors(bio_err); goto end; } typ = ASN1_TYPE_get(at); if ((typ == V_ASN1_OBJECT) || (typ == V_ASN1_NULL)) { BIO_printf(bio_err, "Can't parse %s type\n", typ == V_ASN1_NULL ? "NULL" : "OBJECT"); ERR_print_errors(bio_err); goto end; } /* hmm... this is a little evil but it works */ tmpbuf = at->value.asn1_string->data; tmplen = at->value.asn1_string->length; } str = (char *) tmpbuf; num = tmplen; } if (asn1pars_config.offset >= num) { BIO_printf(bio_err, "Error: offset too large\n"); goto end; } num -= asn1pars_config.offset; if ((asn1pars_config.length == 0) || ((long)asn1pars_config.length > num)) asn1pars_config.length = (unsigned int) num; if (derout) { if (BIO_write(derout, str + asn1pars_config.offset, asn1pars_config.length) != (int)asn1pars_config.length) { BIO_printf(bio_err, "Error writing output\n"); ERR_print_errors(bio_err); goto end; } } if (!asn1pars_config.noout && !ASN1_parse_dump(out, (unsigned char *)&(str[asn1pars_config.offset]), asn1pars_config.length, asn1pars_config.indent, asn1pars_config.dump)) { ERR_print_errors(bio_err); goto end; } ret = 0; end: BIO_free(derout); BIO_free(in); BIO_free_all(out); BIO_free(b64); if (ret != 0) ERR_print_errors(bio_err); BUF_MEM_free(buf); if (at != NULL) ASN1_TYPE_free(at); sk_OPENSSL_STRING_free(asn1pars_config.osk); OBJ_cleanup(); return (ret); } static int do_generate(BIO * bio, char *genstr, char *genconf, BUF_MEM * buf) { CONF *cnf = NULL; int len; long errline; unsigned char *p; ASN1_TYPE *atyp = NULL; if (genconf) { cnf = NCONF_new(NULL); if (!NCONF_load(cnf, genconf, &errline)) goto conferr; if (!genstr) genstr = NCONF_get_string(cnf, "default", "asn1"); if (!genstr) { BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf); goto err; } } atyp = ASN1_generate_nconf(genstr, cnf); NCONF_free(cnf); cnf = NULL; if (!atyp) return -1; len = i2d_ASN1_TYPE(atyp, NULL); if (len <= 0) goto err; if (!BUF_MEM_grow(buf, len)) goto err; p = (unsigned char *) buf->data; i2d_ASN1_TYPE(atyp, &p); ASN1_TYPE_free(atyp); return len; conferr: if (errline > 0) BIO_printf(bio, "Error on line %ld of config file '%s'\n", errline, genconf); else BIO_printf(bio, "Error loading config file '%s'\n", genconf); err: NCONF_free(cnf); ASN1_TYPE_free(atyp); return -1; } |
Added jni/libressl/apps/openssl/ca.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 | /* $OpenBSD: ca.c,v 1.19 2015/10/17 15:00:11 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* The PPKI stuff has been donated by Jeff Barber <jeffb@issl.atl.hp.com> */ #include <sys/types.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> #include <unistd.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/conf.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/objects.h> #include <openssl/ocsp.h> #include <openssl/pem.h> #include <openssl/txt_db.h> #include <openssl/x509.h> #include <openssl/x509v3.h> #define BASE_SECTION "ca" #define ENV_DEFAULT_CA "default_ca" #define STRING_MASK "string_mask" #define UTF8_IN "utf8" #define ENV_NEW_CERTS_DIR "new_certs_dir" #define ENV_CERTIFICATE "certificate" #define ENV_SERIAL "serial" #define ENV_CRLNUMBER "crlnumber" #define ENV_PRIVATE_KEY "private_key" #define ENV_DEFAULT_DAYS "default_days" #define ENV_DEFAULT_STARTDATE "default_startdate" #define ENV_DEFAULT_ENDDATE "default_enddate" #define ENV_DEFAULT_CRL_DAYS "default_crl_days" #define ENV_DEFAULT_CRL_HOURS "default_crl_hours" #define ENV_DEFAULT_MD "default_md" #define ENV_DEFAULT_EMAIL_DN "email_in_dn" #define ENV_PRESERVE "preserve" #define ENV_POLICY "policy" #define ENV_EXTENSIONS "x509_extensions" #define ENV_CRLEXT "crl_extensions" #define ENV_MSIE_HACK "msie_hack" #define ENV_NAMEOPT "name_opt" #define ENV_CERTOPT "cert_opt" #define ENV_EXTCOPY "copy_extensions" #define ENV_UNIQUE_SUBJECT "unique_subject" #define ENV_DATABASE "database" /* Additional revocation information types */ #define REV_NONE 0 /* No addditional information */ #define REV_CRL_REASON 1 /* Value is CRL reason code */ #define REV_HOLD 2 /* Value is hold instruction */ #define REV_KEY_COMPROMISE 3 /* Value is cert key compromise time */ #define REV_CA_COMPROMISE 4 /* Value is CA key compromise time */ static const char *ca_usage[] = { "usage: ca args\n", "\n", " -verbose - Talk a lot while doing things\n", " -config file - A config file\n", " -name arg - The particular CA definition to use\n", " -gencrl - Generate a new CRL\n", " -crldays days - Days is when the next CRL is due\n", " -crlhours hours - Hours is when the next CRL is due\n", " -startdate YYMMDDHHMMSSZ - certificate validity notBefore\n", " -enddate YYMMDDHHMMSSZ - certificate validity notAfter (overrides -days)\n", " -days arg - number of days to certify the certificate for\n", " -md arg - md to use, one of md5 or sha1\n", " -policy arg - The CA 'policy' to support\n", " -keyfile arg - private key file\n", " -keyform arg - private key file format (PEM)\n", " -key arg - key to decode the private key if it is encrypted\n", " -cert file - The CA certificate\n", " -selfsign - sign a certificate with the key associated with it\n", " -in file - The input PEM encoded certificate request(s)\n", " -out file - Where to put the output file(s)\n", " -outdir dir - Where to put output certificates\n", " -infiles .... - The last argument, requests to process\n", " -spkac file - File contains DN and signed public key and challenge\n", " -ss_cert file - File contains a self signed cert to sign\n", " -preserveDN - Don't re-order the DN\n", " -noemailDN - Don't add the EMAIL field into certificate' subject\n", " -batch - Don't ask questions\n", " -msie_hack - msie modifications to handle all those universal strings\n", " -revoke file - Revoke a certificate (given in file)\n", " -subj arg - Use arg instead of request's subject\n", " -utf8 - input characters are UTF8 (default ASCII)\n", " -multivalue-rdn - enable support for multivalued RDNs\n", " -extensions .. - Extension section (override value in config file)\n", " -extfile file - Configuration file with X509v3 extentions to add\n", " -crlexts .. - CRL extension section (override value in config file)\n", " -status serial - Shows certificate status given the serial number\n", " -updatedb - Updates db for expired certificates\n", NULL }; static void lookup_fail(const char *name, const char *tag); static int certify(X509 ** xret, char *infile, EVP_PKEY * pkey, X509 * x509, const EVP_MD * dgst, STACK_OF(OPENSSL_STRING) * sigopts, STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, unsigned long chtype, int multirdn, int email_dn, char *startdate, char *enddate, long days, int batch, char *ext_sect, CONF * conf, int verbose, unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy, int selfsign); static int certify_cert(X509 ** xret, char *infile, EVP_PKEY * pkey, X509 * x509, const EVP_MD * dgst, STACK_OF(OPENSSL_STRING) * sigopts, STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, unsigned long chtype, int multirdn, int email_dn, char *startdate, char *enddate, long days, int batch, char *ext_sect, CONF * conf, int verbose, unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy); static int certify_spkac(X509 ** xret, char *infile, EVP_PKEY * pkey, X509 * x509, const EVP_MD * dgst, STACK_OF(OPENSSL_STRING) * sigopts, STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, unsigned long chtype, int multirdn, int email_dn, char *startdate, char *enddate, long days, char *ext_sect, CONF * conf, int verbose, unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy); static void write_new_certificate(BIO * bp, X509 * x, int output_der, int notext); static int do_body(X509 ** xret, EVP_PKEY * pkey, X509 * x509, const EVP_MD * dgst, STACK_OF(OPENSSL_STRING) * sigopts, STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, unsigned long chtype, int multirdn, int email_dn, char *startdate, char *enddate, long days, int batch, int verbose, X509_REQ * req, char *ext_sect, CONF * conf, unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy, int selfsign); static int do_revoke(X509 * x509, CA_DB * db, int ext, char *extval); static int get_certificate_status(const char *ser_status, CA_DB * db); static int do_updatedb(CA_DB * db); static int check_time_format(const char *str); static char * bin2hex(unsigned char *, size_t); char *make_revocation_str(int rev_type, char *rev_arg); int make_revoked(X509_REVOKED * rev, const char *str); int old_entry_print(BIO * bp, ASN1_OBJECT * obj, ASN1_STRING * str); static CONF *conf = NULL; static CONF *extconf = NULL; static char *section = NULL; static int preserve = 0; static int msie_hack = 0; int ca_main(int argc, char **argv) { char *key = NULL, *passargin = NULL; int create_ser = 0; int free_key = 0; int total = 0; int total_done = 0; int badops = 0; int ret = 1; int email_dn = 1; int req = 0; int verbose = 0; int gencrl = 0; int dorevoke = 0; int doupdatedb = 0; long crldays = 0; long crlhours = 0; long crlsec = 0; long errorline = -1; char *configfile = NULL; char *md = NULL; char *policy = NULL; char *keyfile = NULL; char *certfile = NULL; int keyform = FORMAT_PEM; char *infile = NULL; char *spkac_file = NULL; char *ss_cert_file = NULL; char *ser_status = NULL; EVP_PKEY *pkey = NULL; int output_der = 0; char *outfile = NULL; char *outdir = NULL; char *serialfile = NULL; char *crlnumberfile = NULL; char *extensions = NULL; char *extfile = NULL; char *subj = NULL; unsigned long chtype = MBSTRING_ASC; int multirdn = 0; char *tmp_email_dn = NULL; char *crl_ext = NULL; int rev_type = REV_NONE; char *rev_arg = NULL; BIGNUM *serial = NULL; BIGNUM *crlnumber = NULL; char *startdate = NULL; char *enddate = NULL; long days = 0; int batch = 0; int notext = 0; unsigned long nameopt = 0, certopt = 0; int default_op = 1; int ext_copy = EXT_COPY_NONE; int selfsign = 0; X509 *x509 = NULL, *x509p = NULL; X509 *x = NULL; BIO *in = NULL, *out = NULL, *Sout = NULL, *Cout = NULL; char *dbfile = NULL; CA_DB *db = NULL; X509_CRL *crl = NULL; X509_REVOKED *r = NULL; ASN1_TIME *tmptm; ASN1_INTEGER *tmpser; char *f; const char *p; char *const * pp; int i, j; const EVP_MD *dgst = NULL; STACK_OF(CONF_VALUE) * attribs = NULL; STACK_OF(X509) * cert_sk = NULL; STACK_OF(OPENSSL_STRING) * sigopts = NULL; #define BUFLEN 256 char buf[3][BUFLEN]; char *tofree = NULL; const char *errstr = NULL; DB_ATTR db_attr; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } conf = NULL; key = NULL; section = NULL; preserve = 0; msie_hack = 0; argc--; argv++; while (argc >= 1) { if (strcmp(*argv, "-verbose") == 0) verbose = 1; else if (strcmp(*argv, "-config") == 0) { if (--argc < 1) goto bad; configfile = *(++argv); } else if (strcmp(*argv, "-name") == 0) { if (--argc < 1) goto bad; section = *(++argv); } else if (strcmp(*argv, "-subj") == 0) { if (--argc < 1) goto bad; subj = *(++argv); /* preserve=1; */ } else if (strcmp(*argv, "-utf8") == 0) chtype = MBSTRING_UTF8; else if (strcmp(*argv, "-create_serial") == 0) create_ser = 1; else if (strcmp(*argv, "-multivalue-rdn") == 0) multirdn = 1; else if (strcmp(*argv, "-startdate") == 0) { if (--argc < 1) goto bad; startdate = *(++argv); } else if (strcmp(*argv, "-enddate") == 0) { if (--argc < 1) goto bad; enddate = *(++argv); } else if (strcmp(*argv, "-days") == 0) { if (--argc < 1) goto bad; days = strtonum(*(++argv), 0, LONG_MAX, &errstr); if (errstr) goto bad; } else if (strcmp(*argv, "-md") == 0) { if (--argc < 1) goto bad; md = *(++argv); } else if (strcmp(*argv, "-policy") == 0) { if (--argc < 1) goto bad; policy = *(++argv); } else if (strcmp(*argv, "-keyfile") == 0) { if (--argc < 1) goto bad; keyfile = *(++argv); } else if (strcmp(*argv, "-keyform") == 0) { if (--argc < 1) goto bad; keyform = str2fmt(*(++argv)); } else if (strcmp(*argv, "-passin") == 0) { if (--argc < 1) goto bad; passargin = *(++argv); } else if (strcmp(*argv, "-key") == 0) { if (--argc < 1) goto bad; key = *(++argv); } else if (strcmp(*argv, "-cert") == 0) { if (--argc < 1) goto bad; certfile = *(++argv); } else if (strcmp(*argv, "-selfsign") == 0) selfsign = 1; else if (strcmp(*argv, "-in") == 0) { if (--argc < 1) goto bad; infile = *(++argv); req = 1; } else if (strcmp(*argv, "-out") == 0) { if (--argc < 1) goto bad; outfile = *(++argv); } else if (strcmp(*argv, "-outdir") == 0) { if (--argc < 1) goto bad; outdir = *(++argv); } else if (strcmp(*argv, "-sigopt") == 0) { if (--argc < 1) goto bad; if (!sigopts) sigopts = sk_OPENSSL_STRING_new_null(); if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv))) goto bad; } else if (strcmp(*argv, "-notext") == 0) notext = 1; else if (strcmp(*argv, "-batch") == 0) batch = 1; else if (strcmp(*argv, "-preserveDN") == 0) preserve = 1; else if (strcmp(*argv, "-noemailDN") == 0) email_dn = 0; else if (strcmp(*argv, "-gencrl") == 0) gencrl = 1; else if (strcmp(*argv, "-msie_hack") == 0) msie_hack = 1; else if (strcmp(*argv, "-crldays") == 0) { if (--argc < 1) goto bad; crldays = strtonum(*(++argv), 0, LONG_MAX, &errstr); if (errstr) goto bad; } else if (strcmp(*argv, "-crlhours") == 0) { if (--argc < 1) goto bad; crlhours = strtonum(*(++argv), 0, LONG_MAX, &errstr); if (errstr) goto bad; } else if (strcmp(*argv, "-crlsec") == 0) { if (--argc < 1) goto bad; crlsec = strtonum(*(++argv), 0, LONG_MAX, &errstr); if (errstr) goto bad; } else if (strcmp(*argv, "-infiles") == 0) { argc--; argv++; req = 1; break; } else if (strcmp(*argv, "-ss_cert") == 0) { if (--argc < 1) goto bad; ss_cert_file = *(++argv); req = 1; } else if (strcmp(*argv, "-spkac") == 0) { if (--argc < 1) goto bad; spkac_file = *(++argv); req = 1; } else if (strcmp(*argv, "-revoke") == 0) { if (--argc < 1) goto bad; infile = *(++argv); dorevoke = 1; } else if (strcmp(*argv, "-extensions") == 0) { if (--argc < 1) goto bad; extensions = *(++argv); } else if (strcmp(*argv, "-extfile") == 0) { if (--argc < 1) goto bad; extfile = *(++argv); } else if (strcmp(*argv, "-status") == 0) { if (--argc < 1) goto bad; ser_status = *(++argv); } else if (strcmp(*argv, "-updatedb") == 0) { doupdatedb = 1; } else if (strcmp(*argv, "-crlexts") == 0) { if (--argc < 1) goto bad; crl_ext = *(++argv); } else if (strcmp(*argv, "-crl_reason") == 0) { if (--argc < 1) goto bad; rev_arg = *(++argv); rev_type = REV_CRL_REASON; } else if (strcmp(*argv, "-crl_hold") == 0) { if (--argc < 1) goto bad; rev_arg = *(++argv); rev_type = REV_HOLD; } else if (strcmp(*argv, "-crl_compromise") == 0) { if (--argc < 1) goto bad; rev_arg = *(++argv); rev_type = REV_KEY_COMPROMISE; } else if (strcmp(*argv, "-crl_CA_compromise") == 0) { if (--argc < 1) goto bad; rev_arg = *(++argv); rev_type = REV_CA_COMPROMISE; } else { bad: if (errstr) BIO_printf(bio_err, "invalid argument %s: %s\n", *argv, errstr); else BIO_printf(bio_err, "unknown option %s\n", *argv); badops = 1; break; } argc--; argv++; } if (badops) { const char **pp2; for (pp2 = ca_usage; (*pp2 != NULL); pp2++) BIO_printf(bio_err, "%s", *pp2); goto err; } /*****************************************************************/ tofree = NULL; if (configfile == NULL) configfile = getenv("OPENSSL_CONF"); if (configfile == NULL) { if ((tofree = make_config_name()) == NULL) { BIO_printf(bio_err, "error making config file name\n"); goto err; } configfile = tofree; } BIO_printf(bio_err, "Using configuration from %s\n", configfile); conf = NCONF_new(NULL); if (NCONF_load(conf, configfile, &errorline) <= 0) { if (errorline <= 0) BIO_printf(bio_err, "error loading the config file '%s'\n", configfile); else BIO_printf(bio_err, "error on line %ld of config file '%s'\n", errorline, configfile); goto err; } free(tofree); tofree = NULL; /* Lets get the config section we are using */ if (section == NULL) { section = NCONF_get_string(conf, BASE_SECTION, ENV_DEFAULT_CA); if (section == NULL) { lookup_fail(BASE_SECTION, ENV_DEFAULT_CA); goto err; } } if (conf != NULL) { p = NCONF_get_string(conf, NULL, "oid_file"); if (p == NULL) ERR_clear_error(); if (p != NULL) { BIO *oid_bio; oid_bio = BIO_new_file(p, "r"); if (oid_bio == NULL) { /* BIO_printf(bio_err, "problems opening %s for extra oid's\n", p); ERR_print_errors(bio_err); */ ERR_clear_error(); } else { OBJ_create_objects(oid_bio); BIO_free(oid_bio); } } if (!add_oid_section(bio_err, conf)) { ERR_print_errors(bio_err); goto err; } } f = NCONF_get_string(conf, section, STRING_MASK); if (!f) ERR_clear_error(); if (f && !ASN1_STRING_set_default_mask_asc(f)) { BIO_printf(bio_err, "Invalid global string mask setting %s\n", f); goto err; } if (chtype != MBSTRING_UTF8) { f = NCONF_get_string(conf, section, UTF8_IN); if (!f) ERR_clear_error(); else if (!strcmp(f, "yes")) chtype = MBSTRING_UTF8; } db_attr.unique_subject = 1; p = NCONF_get_string(conf, section, ENV_UNIQUE_SUBJECT); if (p) { db_attr.unique_subject = parse_yesno(p, 1); } else ERR_clear_error(); in = BIO_new(BIO_s_file()); out = BIO_new(BIO_s_file()); Sout = BIO_new(BIO_s_file()); Cout = BIO_new(BIO_s_file()); if ((in == NULL) || (out == NULL) || (Sout == NULL) || (Cout == NULL)) { ERR_print_errors(bio_err); goto err; } /*****************************************************************/ /* report status of cert with serial number given on command line */ if (ser_status) { if ((dbfile = NCONF_get_string(conf, section, ENV_DATABASE)) == NULL) { lookup_fail(section, ENV_DATABASE); goto err; } db = load_index(dbfile, &db_attr); if (db == NULL) goto err; if (!index_index(db)) goto err; if (get_certificate_status(ser_status, db) != 1) BIO_printf(bio_err, "Error verifying serial %s!\n", ser_status); goto err; } /*****************************************************************/ /* we definitely need a private key, so let's get it */ if ((keyfile == NULL) && ((keyfile = NCONF_get_string(conf, section, ENV_PRIVATE_KEY)) == NULL)) { lookup_fail(section, ENV_PRIVATE_KEY); goto err; } if (!key) { free_key = 1; if (!app_passwd(bio_err, passargin, NULL, &key, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto err; } } pkey = load_key(bio_err, keyfile, keyform, 0, key, "CA private key"); if (key) explicit_bzero(key, strlen(key)); if (pkey == NULL) { /* load_key() has already printed an appropriate message */ goto err; } /*****************************************************************/ /* we need a certificate */ if (!selfsign || spkac_file || ss_cert_file || gencrl) { if ((certfile == NULL) && ((certfile = NCONF_get_string(conf, section, ENV_CERTIFICATE)) == NULL)) { lookup_fail(section, ENV_CERTIFICATE); goto err; } x509 = load_cert(bio_err, certfile, FORMAT_PEM, NULL, "CA certificate"); if (x509 == NULL) goto err; if (!X509_check_private_key(x509, pkey)) { BIO_printf(bio_err, "CA certificate and CA private key do not match\n"); goto err; } } if (!selfsign) x509p = x509; f = NCONF_get_string(conf, BASE_SECTION, ENV_PRESERVE); if (f == NULL) ERR_clear_error(); if ((f != NULL) && ((*f == 'y') || (*f == 'Y'))) preserve = 1; f = NCONF_get_string(conf, BASE_SECTION, ENV_MSIE_HACK); if (f == NULL) ERR_clear_error(); if ((f != NULL) && ((*f == 'y') || (*f == 'Y'))) msie_hack = 1; f = NCONF_get_string(conf, section, ENV_NAMEOPT); if (f) { if (!set_name_ex(&nameopt, f)) { BIO_printf(bio_err, "Invalid name options: \"%s\"\n", f); goto err; } default_op = 0; } else ERR_clear_error(); f = NCONF_get_string(conf, section, ENV_CERTOPT); if (f) { if (!set_cert_ex(&certopt, f)) { BIO_printf(bio_err, "Invalid certificate options: \"%s\"\n", f); goto err; } default_op = 0; } else ERR_clear_error(); f = NCONF_get_string(conf, section, ENV_EXTCOPY); if (f) { if (!set_ext_copy(&ext_copy, f)) { BIO_printf(bio_err, "Invalid extension copy option: \"%s\"\n", f); goto err; } } else ERR_clear_error(); /*****************************************************************/ /* lookup where to write new certificates */ if ((outdir == NULL) && (req)) { if ((outdir = NCONF_get_string(conf, section, ENV_NEW_CERTS_DIR)) == NULL) { BIO_printf(bio_err, "there needs to be defined a directory for new certificate to be placed in\n"); goto err; } /* * outdir is a directory spec, but access() for VMS demands a * filename. In any case, stat(), below, will catch the * problem if outdir is not a directory spec, and the fopen() * or open() will catch an error if there is no write access. * * Presumably, this problem could also be solved by using the * DEC C routines to convert the directory syntax to Unixly, * and give that to access(). However, time's too short to * do that just now. */ if (access(outdir, R_OK | W_OK | X_OK) != 0) { BIO_printf(bio_err, "I am unable to access the %s directory\n", outdir); perror(outdir); goto err; } if (app_isdir(outdir) <= 0) { BIO_printf(bio_err, "%s need to be a directory\n", outdir); perror(outdir); goto err; } } /*****************************************************************/ /* we need to load the database file */ if ((dbfile = NCONF_get_string(conf, section, ENV_DATABASE)) == NULL) { lookup_fail(section, ENV_DATABASE); goto err; } db = load_index(dbfile, &db_attr); if (db == NULL) goto err; /* Lets check some fields */ for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) { pp = sk_OPENSSL_PSTRING_value(db->db->data, i); if ((pp[DB_type][0] != DB_TYPE_REV) && (pp[DB_rev_date][0] != '\0')) { BIO_printf(bio_err, "entry %d: not revoked yet, but has a revocation date\n", i + 1); goto err; } if ((pp[DB_type][0] == DB_TYPE_REV) && !make_revoked(NULL, pp[DB_rev_date])) { BIO_printf(bio_err, " in entry %d\n", i + 1); goto err; } if (!check_time_format((char *) pp[DB_exp_date])) { BIO_printf(bio_err, "entry %d: invalid expiry date\n", i + 1); goto err; } p = pp[DB_serial]; j = strlen(p); if (*p == '-') { p++; j--; } if ((j & 1) || (j < 2)) { BIO_printf(bio_err, "entry %d: bad serial number length (%d)\n", i + 1, j); goto err; } while (*p) { if (!(((*p >= '0') && (*p <= '9')) || ((*p >= 'A') && (*p <= 'F')) || ((*p >= 'a') && (*p <= 'f')))) { BIO_printf(bio_err, "entry %d: bad serial number characters, char pos %ld, char is '%c'\n", i + 1, (long) (p - pp[DB_serial]), *p); goto err; } p++; } } if (verbose) { BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); /* cannot fail */ TXT_DB_write(out, db->db); BIO_printf(bio_err, "%d entries loaded from the database\n", sk_OPENSSL_PSTRING_num(db->db->data)); BIO_printf(bio_err, "generating index\n"); } if (!index_index(db)) goto err; /*****************************************************************/ /* Update the db file for expired certificates */ if (doupdatedb) { if (verbose) BIO_printf(bio_err, "Updating %s ...\n", dbfile); i = do_updatedb(db); if (i == -1) { BIO_printf(bio_err, "Malloc failure\n"); goto err; } else if (i == 0) { if (verbose) BIO_printf(bio_err, "No entries found to mark expired\n"); } else { if (!save_index(dbfile, "new", db)) goto err; if (!rotate_index(dbfile, "new", "old")) goto err; if (verbose) BIO_printf(bio_err, "Done. %d entries marked as expired\n", i); } } /*****************************************************************/ /* Read extentions config file */ if (extfile) { extconf = NCONF_new(NULL); if (NCONF_load(extconf, extfile, &errorline) <= 0) { if (errorline <= 0) BIO_printf(bio_err, "ERROR: loading the config file '%s'\n", extfile); else BIO_printf(bio_err, "ERROR: on line %ld of config file '%s'\n", errorline, extfile); ret = 1; goto err; } if (verbose) BIO_printf(bio_err, "Successfully loaded extensions file %s\n", extfile); /* We can have sections in the ext file */ if (!extensions && !(extensions = NCONF_get_string(extconf, "default", "extensions"))) extensions = "default"; } /*****************************************************************/ if (req || gencrl) { if (outfile != NULL) { if (BIO_write_filename(Sout, outfile) <= 0) { perror(outfile); goto err; } } else { BIO_set_fp(Sout, stdout, BIO_NOCLOSE | BIO_FP_TEXT); } } if ((md == NULL) && ((md = NCONF_get_string(conf, section, ENV_DEFAULT_MD)) == NULL)) { lookup_fail(section, ENV_DEFAULT_MD); goto err; } if (!strcmp(md, "default")) { int def_nid; if (EVP_PKEY_get_default_digest_nid(pkey, &def_nid) <= 0) { BIO_puts(bio_err, "no default digest\n"); goto err; } md = (char *) OBJ_nid2sn(def_nid); } if ((dgst = EVP_get_digestbyname(md)) == NULL) { BIO_printf(bio_err, "%s is an unsupported message digest type\n", md); goto err; } if (req) { if ((email_dn == 1) && ((tmp_email_dn = NCONF_get_string(conf, section, ENV_DEFAULT_EMAIL_DN)) != NULL)) { if (strcmp(tmp_email_dn, "no") == 0) email_dn = 0; } if (verbose) BIO_printf(bio_err, "message digest is %s\n", OBJ_nid2ln(dgst->type)); if ((policy == NULL) && ((policy = NCONF_get_string(conf, section, ENV_POLICY)) == NULL)) { lookup_fail(section, ENV_POLICY); goto err; } if (verbose) BIO_printf(bio_err, "policy is %s\n", policy); if ((serialfile = NCONF_get_string(conf, section, ENV_SERIAL)) == NULL) { lookup_fail(section, ENV_SERIAL); goto err; } if (!extconf) { /* * no '-extfile' option, so we look for extensions in * the main configuration file */ if (!extensions) { extensions = NCONF_get_string(conf, section, ENV_EXTENSIONS); if (!extensions) ERR_clear_error(); } if (extensions) { /* Check syntax of file */ X509V3_CTX ctx; X509V3_set_ctx_test(&ctx); X509V3_set_nconf(&ctx, conf); if (!X509V3_EXT_add_nconf(conf, &ctx, extensions, NULL)) { BIO_printf(bio_err, "Error Loading extension section %s\n", extensions); ret = 1; goto err; } } } if (startdate == NULL) { startdate = NCONF_get_string(conf, section, ENV_DEFAULT_STARTDATE); if (startdate == NULL) ERR_clear_error(); } if (startdate && !ASN1_TIME_set_string(NULL, startdate)) { BIO_printf(bio_err, "start date is invalid, it should be YYMMDDHHMMSSZ or YYYYMMDDHHMMSSZ\n"); goto err; } if (startdate == NULL) startdate = "today"; if (enddate == NULL) { enddate = NCONF_get_string(conf, section, ENV_DEFAULT_ENDDATE); if (enddate == NULL) ERR_clear_error(); } if (enddate && !ASN1_TIME_set_string(NULL, enddate)) { BIO_printf(bio_err, "end date is invalid, it should be YYMMDDHHMMSSZ or YYYYMMDDHHMMSSZ\n"); goto err; } if (days == 0) { if (!NCONF_get_number(conf, section, ENV_DEFAULT_DAYS, &days)) days = 0; } if (!enddate && (days == 0)) { BIO_printf(bio_err, "cannot lookup how many days to certify for\n"); goto err; } if ((serial = load_serial(serialfile, create_ser, NULL)) == NULL) { BIO_printf(bio_err, "error while loading serial number\n"); goto err; } if (verbose) { if (BN_is_zero(serial)) BIO_printf(bio_err, "next serial number is 00\n"); else { if ((f = BN_bn2hex(serial)) == NULL) goto err; BIO_printf(bio_err, "next serial number is %s\n", f); free(f); } } if ((attribs = NCONF_get_section(conf, policy)) == NULL) { BIO_printf(bio_err, "unable to find 'section' for %s\n", policy); goto err; } if ((cert_sk = sk_X509_new_null()) == NULL) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } if (spkac_file != NULL) { total++; j = certify_spkac(&x, spkac_file, pkey, x509, dgst, sigopts, attribs, db, serial, subj, chtype, multirdn, email_dn, startdate, enddate, days, extensions, conf, verbose, certopt, nameopt, default_op, ext_copy); if (j < 0) goto err; if (j > 0) { total_done++; BIO_printf(bio_err, "\n"); if (!BN_add_word(serial, 1)) goto err; if (!sk_X509_push(cert_sk, x)) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } if (outfile) { output_der = 1; batch = 1; } } } if (ss_cert_file != NULL) { total++; j = certify_cert(&x, ss_cert_file, pkey, x509, dgst, sigopts, attribs, db, serial, subj, chtype, multirdn, email_dn, startdate, enddate, days, batch, extensions, conf, verbose, certopt, nameopt, default_op, ext_copy); if (j < 0) goto err; if (j > 0) { total_done++; BIO_printf(bio_err, "\n"); if (!BN_add_word(serial, 1)) goto err; if (!sk_X509_push(cert_sk, x)) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } } } if (infile != NULL) { total++; j = certify(&x, infile, pkey, x509p, dgst, sigopts, attribs, db, serial, subj, chtype, multirdn, email_dn, startdate, enddate, days, batch, extensions, conf, verbose, certopt, nameopt, default_op, ext_copy, selfsign); if (j < 0) goto err; if (j > 0) { total_done++; BIO_printf(bio_err, "\n"); if (!BN_add_word(serial, 1)) goto err; if (!sk_X509_push(cert_sk, x)) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } } } for (i = 0; i < argc; i++) { total++; j = certify(&x, argv[i], pkey, x509p, dgst, sigopts, attribs, db, serial, subj, chtype, multirdn, email_dn, startdate, enddate, days, batch, extensions, conf, verbose, certopt, nameopt, default_op, ext_copy, selfsign); if (j < 0) goto err; if (j > 0) { total_done++; BIO_printf(bio_err, "\n"); if (!BN_add_word(serial, 1)) goto err; if (!sk_X509_push(cert_sk, x)) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } } } /* * we have a stack of newly certified certificates and a data * base and serial number that need updating */ if (sk_X509_num(cert_sk) > 0) { if (!batch) { BIO_printf(bio_err, "\n%d out of %d certificate requests certified, commit? [y/n]", total_done, total); (void) BIO_flush(bio_err); buf[0][0] = '\0'; if (!fgets(buf[0], 10, stdin)) { BIO_printf(bio_err, "CERTIFICATION CANCELED: I/O error\n"); ret = 0; goto err; } if ((buf[0][0] != 'y') && (buf[0][0] != 'Y')) { BIO_printf(bio_err, "CERTIFICATION CANCELED\n"); ret = 0; goto err; } } BIO_printf(bio_err, "Write out database with %d new entries\n", sk_X509_num(cert_sk)); if (!save_serial(serialfile, "new", serial, NULL)) goto err; if (!save_index(dbfile, "new", db)) goto err; } if (verbose) BIO_printf(bio_err, "writing new certificates\n"); for (i = 0; i < sk_X509_num(cert_sk); i++) { int k; char *serialstr; unsigned char *data; x = sk_X509_value(cert_sk, i); j = x->cert_info->serialNumber->length; data = (unsigned char *)x->cert_info->serialNumber->data; if (j > 0) serialstr = bin2hex(data, j); else serialstr = strdup("00"); if (serialstr) { k = snprintf(buf[2], sizeof(buf[2]), "%s/%s.pem", outdir, serialstr); free(serialstr); if (k == -1 || k >= sizeof(buf[2])) { BIO_printf(bio_err, "certificate file name too long\n"); goto err; } } else { BIO_printf(bio_err, "memory allocation failed\n"); goto err; } if (verbose) BIO_printf(bio_err, "writing %s\n", buf[2]); if (BIO_write_filename(Cout, buf[2]) <= 0) { perror(buf[2]); goto err; } write_new_certificate(Cout, x, 0, notext); write_new_certificate(Sout, x, output_der, notext); } if (sk_X509_num(cert_sk)) { /* Rename the database and the serial file */ if (!rotate_serial(serialfile, "new", "old")) goto err; if (!rotate_index(dbfile, "new", "old")) goto err; BIO_printf(bio_err, "Data Base Updated\n"); } } /*****************************************************************/ if (gencrl) { int crl_v2 = 0; if (!crl_ext) { crl_ext = NCONF_get_string(conf, section, ENV_CRLEXT); if (!crl_ext) ERR_clear_error(); } if (crl_ext) { /* Check syntax of file */ X509V3_CTX ctx; X509V3_set_ctx_test(&ctx); X509V3_set_nconf(&ctx, conf); if (!X509V3_EXT_add_nconf(conf, &ctx, crl_ext, NULL)) { BIO_printf(bio_err, "Error Loading CRL extension section %s\n", crl_ext); ret = 1; goto err; } } if ((crlnumberfile = NCONF_get_string(conf, section, ENV_CRLNUMBER)) != NULL) if ((crlnumber = load_serial(crlnumberfile, 0, NULL)) == NULL) { BIO_printf(bio_err, "error while loading CRL number\n"); goto err; } if (!crldays && !crlhours && !crlsec) { if (!NCONF_get_number(conf, section, ENV_DEFAULT_CRL_DAYS, &crldays)) crldays = 0; if (!NCONF_get_number(conf, section, ENV_DEFAULT_CRL_HOURS, &crlhours)) crlhours = 0; ERR_clear_error(); } if ((crldays == 0) && (crlhours == 0) && (crlsec == 0)) { BIO_printf(bio_err, "cannot lookup how long until the next CRL is issued\n"); goto err; } if (verbose) BIO_printf(bio_err, "making CRL\n"); if ((crl = X509_CRL_new()) == NULL) goto err; if (!X509_CRL_set_issuer_name(crl, X509_get_subject_name(x509))) goto err; tmptm = ASN1_TIME_new(); if (!tmptm) goto err; X509_gmtime_adj(tmptm, 0); X509_CRL_set_lastUpdate(crl, tmptm); if (!X509_time_adj_ex(tmptm, crldays, crlhours * 60 * 60 + crlsec, NULL)) { BIO_puts(bio_err, "error setting CRL nextUpdate\n"); goto err; } X509_CRL_set_nextUpdate(crl, tmptm); ASN1_TIME_free(tmptm); for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) { pp = sk_OPENSSL_PSTRING_value(db->db->data, i); if (pp[DB_type][0] == DB_TYPE_REV) { if ((r = X509_REVOKED_new()) == NULL) goto err; j = make_revoked(r, pp[DB_rev_date]); if (!j) goto err; if (j == 2) crl_v2 = 1; if (!BN_hex2bn(&serial, pp[DB_serial])) goto err; tmpser = BN_to_ASN1_INTEGER(serial, NULL); BN_free(serial); serial = NULL; if (!tmpser) goto err; X509_REVOKED_set_serialNumber(r, tmpser); ASN1_INTEGER_free(tmpser); X509_CRL_add0_revoked(crl, r); } } /* * sort the data so it will be written in serial number order */ X509_CRL_sort(crl); /* we now have a CRL */ if (verbose) BIO_printf(bio_err, "signing CRL\n"); /* Add any extensions asked for */ if (crl_ext || crlnumberfile != NULL) { X509V3_CTX crlctx; X509V3_set_ctx(&crlctx, x509, NULL, NULL, crl, 0); X509V3_set_nconf(&crlctx, conf); if (crl_ext) if (!X509V3_EXT_CRL_add_nconf(conf, &crlctx, crl_ext, crl)) goto err; if (crlnumberfile != NULL) { tmpser = BN_to_ASN1_INTEGER(crlnumber, NULL); if (!tmpser) goto err; X509_CRL_add1_ext_i2d(crl, NID_crl_number, tmpser, 0, 0); ASN1_INTEGER_free(tmpser); crl_v2 = 1; if (!BN_add_word(crlnumber, 1)) goto err; } } if (crl_ext || crl_v2) { if (!X509_CRL_set_version(crl, 1)) goto err; /* version 2 CRL */ } if (crlnumberfile != NULL) /* we have a CRL number that * need updating */ if (!save_serial(crlnumberfile, "new", crlnumber, NULL)) goto err; if (crlnumber) { BN_free(crlnumber); crlnumber = NULL; } if (!do_X509_CRL_sign(bio_err, crl, pkey, dgst, sigopts)) goto err; PEM_write_bio_X509_CRL(Sout, crl); if (crlnumberfile != NULL) /* Rename the crlnumber file */ if (!rotate_serial(crlnumberfile, "new", "old")) goto err; } /*****************************************************************/ if (dorevoke) { if (infile == NULL) { BIO_printf(bio_err, "no input files\n"); goto err; } else { X509 *revcert; revcert = load_cert(bio_err, infile, FORMAT_PEM, NULL, infile); if (revcert == NULL) goto err; j = do_revoke(revcert, db, rev_type, rev_arg); if (j <= 0) goto err; X509_free(revcert); if (!save_index(dbfile, "new", db)) goto err; if (!rotate_index(dbfile, "new", "old")) goto err; BIO_printf(bio_err, "Data Base Updated\n"); } } /*****************************************************************/ ret = 0; err: free(tofree); BIO_free_all(Cout); BIO_free_all(Sout); BIO_free_all(out); BIO_free_all(in); if (cert_sk) sk_X509_pop_free(cert_sk, X509_free); if (ret) ERR_print_errors(bio_err); if (free_key && key) free(key); BN_free(serial); BN_free(crlnumber); free_index(db); if (sigopts) sk_OPENSSL_STRING_free(sigopts); EVP_PKEY_free(pkey); if (x509) X509_free(x509); X509_CRL_free(crl); NCONF_free(conf); NCONF_free(extconf); OBJ_cleanup(); return (ret); } static void lookup_fail(const char *name, const char *tag) { BIO_printf(bio_err, "variable lookup failed for %s::%s\n", name, tag); } static int certify(X509 ** xret, char *infile, EVP_PKEY * pkey, X509 * x509, const EVP_MD * dgst, STACK_OF(OPENSSL_STRING) * sigopts, STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, unsigned long chtype, int multirdn, int email_dn, char *startdate, char *enddate, long days, int batch, char *ext_sect, CONF * lconf, int verbose, unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy, int selfsign) { X509_REQ *req = NULL; BIO *in = NULL; EVP_PKEY *pktmp = NULL; int ok = -1, i; in = BIO_new(BIO_s_file()); if (BIO_read_filename(in, infile) <= 0) { perror(infile); goto err; } if ((req = PEM_read_bio_X509_REQ(in, NULL, NULL, NULL)) == NULL) { BIO_printf(bio_err, "Error reading certificate request in %s\n", infile); goto err; } if (verbose) X509_REQ_print(bio_err, req); BIO_printf(bio_err, "Check that the request matches the signature\n"); if (selfsign && !X509_REQ_check_private_key(req, pkey)) { BIO_printf(bio_err, "Certificate request and CA private key do not match\n"); ok = 0; goto err; } if ((pktmp = X509_REQ_get_pubkey(req)) == NULL) { BIO_printf(bio_err, "error unpacking public key\n"); goto err; } i = X509_REQ_verify(req, pktmp); EVP_PKEY_free(pktmp); if (i < 0) { ok = 0; BIO_printf(bio_err, "Signature verification problems....\n"); goto err; } if (i == 0) { ok = 0; BIO_printf(bio_err, "Signature did not match the certificate request\n"); goto err; } else BIO_printf(bio_err, "Signature ok\n"); ok = do_body(xret, pkey, x509, dgst, sigopts, policy, db, serial, subj, chtype, multirdn, email_dn, startdate, enddate, days, batch, verbose, req, ext_sect, lconf, certopt, nameopt, default_op, ext_copy, selfsign); err: if (req != NULL) X509_REQ_free(req); if (in != NULL) BIO_free(in); return (ok); } static int certify_cert(X509 ** xret, char *infile, EVP_PKEY * pkey, X509 * x509, const EVP_MD * dgst, STACK_OF(OPENSSL_STRING) * sigopts, STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, unsigned long chtype, int multirdn, int email_dn, char *startdate, char *enddate, long days, int batch, char *ext_sect, CONF * lconf, int verbose, unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy) { X509 *req = NULL; X509_REQ *rreq = NULL; EVP_PKEY *pktmp = NULL; int ok = -1, i; if ((req = load_cert(bio_err, infile, FORMAT_PEM, NULL, infile)) == NULL) goto err; if (verbose) X509_print(bio_err, req); BIO_printf(bio_err, "Check that the request matches the signature\n"); if ((pktmp = X509_get_pubkey(req)) == NULL) { BIO_printf(bio_err, "error unpacking public key\n"); goto err; } i = X509_verify(req, pktmp); EVP_PKEY_free(pktmp); if (i < 0) { ok = 0; BIO_printf(bio_err, "Signature verification problems....\n"); goto err; } if (i == 0) { ok = 0; BIO_printf(bio_err, "Signature did not match the certificate\n"); goto err; } else BIO_printf(bio_err, "Signature ok\n"); if ((rreq = X509_to_X509_REQ(req, NULL, EVP_md5())) == NULL) goto err; ok = do_body(xret, pkey, x509, dgst, sigopts, policy, db, serial, subj, chtype, multirdn, email_dn, startdate, enddate, days, batch, verbose, rreq, ext_sect, lconf, certopt, nameopt, default_op, ext_copy, 0); err: if (rreq != NULL) X509_REQ_free(rreq); if (req != NULL) X509_free(req); return (ok); } static int do_body(X509 ** xret, EVP_PKEY * pkey, X509 * x509, const EVP_MD * dgst, STACK_OF(OPENSSL_STRING) * sigopts, STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, unsigned long chtype, int multirdn, int email_dn, char *startdate, char *enddate, long days, int batch, int verbose, X509_REQ * req, char *ext_sect, CONF * lconf, unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy, int selfsign) { X509_NAME *name = NULL, *CAname = NULL, *subject = NULL, *dn_subject = NULL; ASN1_UTCTIME *tm, *tmptm; ASN1_STRING *str, *str2; ASN1_OBJECT *obj; X509 *ret = NULL; X509_CINF *ci; X509_NAME_ENTRY *ne; X509_NAME_ENTRY *tne, *push; EVP_PKEY *pktmp; int ok = -1, i, j, last, nid; const char *p; CONF_VALUE *cv; OPENSSL_STRING row[DB_NUMBER]; OPENSSL_STRING *irow = NULL; OPENSSL_STRING *rrow = NULL; char buf[25]; tmptm = ASN1_UTCTIME_new(); if (tmptm == NULL) { BIO_printf(bio_err, "malloc error\n"); return (0); } for (i = 0; i < DB_NUMBER; i++) row[i] = NULL; if (subj) { X509_NAME *n = parse_name(subj, chtype, multirdn); if (!n) { ERR_print_errors(bio_err); goto err; } X509_REQ_set_subject_name(req, n); req->req_info->enc.modified = 1; X509_NAME_free(n); } if (default_op) BIO_printf(bio_err, "The Subject's Distinguished Name is as follows\n"); name = X509_REQ_get_subject_name(req); for (i = 0; i < X509_NAME_entry_count(name); i++) { ne = X509_NAME_get_entry(name, i); str = X509_NAME_ENTRY_get_data(ne); obj = X509_NAME_ENTRY_get_object(ne); if (msie_hack) { /* assume all type should be strings */ nid = OBJ_obj2nid(ne->object); if (str->type == V_ASN1_UNIVERSALSTRING) ASN1_UNIVERSALSTRING_to_string(str); if ((str->type == V_ASN1_IA5STRING) && (nid != NID_pkcs9_emailAddress)) str->type = V_ASN1_T61STRING; if ((nid == NID_pkcs9_emailAddress) && (str->type == V_ASN1_PRINTABLESTRING)) str->type = V_ASN1_IA5STRING; } /* If no EMAIL is wanted in the subject */ if ((OBJ_obj2nid(obj) == NID_pkcs9_emailAddress) && (!email_dn)) continue; /* check some things */ if ((OBJ_obj2nid(obj) == NID_pkcs9_emailAddress) && (str->type != V_ASN1_IA5STRING)) { BIO_printf(bio_err, "\nemailAddress type needs to be of type IA5STRING\n"); goto err; } if ((str->type != V_ASN1_BMPSTRING) && (str->type != V_ASN1_UTF8STRING)) { j = ASN1_PRINTABLE_type(str->data, str->length); if (((j == V_ASN1_T61STRING) && (str->type != V_ASN1_T61STRING)) || ((j == V_ASN1_IA5STRING) && (str->type == V_ASN1_PRINTABLESTRING))) { BIO_printf(bio_err, "\nThe string contains characters that are illegal for the ASN.1 type\n"); goto err; } } if (default_op) old_entry_print(bio_err, obj, str); } /* Ok, now we check the 'policy' stuff. */ if ((subject = X509_NAME_new()) == NULL) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } /* take a copy of the issuer name before we mess with it. */ if (selfsign) CAname = X509_NAME_dup(name); else CAname = X509_NAME_dup(x509->cert_info->subject); if (CAname == NULL) goto err; str = str2 = NULL; for (i = 0; i < sk_CONF_VALUE_num(policy); i++) { cv = sk_CONF_VALUE_value(policy, i); /* get the object id */ if ((j = OBJ_txt2nid(cv->name)) == NID_undef) { BIO_printf(bio_err, "%s:unknown object type in 'policy' configuration\n", cv->name); goto err; } obj = OBJ_nid2obj(j); last = -1; for (;;) { /* lookup the object in the supplied name list */ j = X509_NAME_get_index_by_OBJ(name, obj, last); if (j < 0) { if (last != -1) break; tne = NULL; } else { tne = X509_NAME_get_entry(name, j); } last = j; /* depending on the 'policy', decide what to do. */ push = NULL; if (strcmp(cv->value, "optional") == 0) { if (tne != NULL) push = tne; } else if (strcmp(cv->value, "supplied") == 0) { if (tne == NULL) { BIO_printf(bio_err, "The %s field needed to be supplied and was missing\n", cv->name); goto err; } else push = tne; } else if (strcmp(cv->value, "match") == 0) { int last2; if (tne == NULL) { BIO_printf(bio_err, "The mandatory %s field was missing\n", cv->name); goto err; } last2 = -1; again2: j = X509_NAME_get_index_by_OBJ(CAname, obj, last2); if ((j < 0) && (last2 == -1)) { BIO_printf(bio_err, "The %s field does not exist in the CA certificate,\nthe 'policy' is misconfigured\n", cv->name); goto err; } if (j >= 0) { push = X509_NAME_get_entry(CAname, j); str = X509_NAME_ENTRY_get_data(tne); str2 = X509_NAME_ENTRY_get_data(push); last2 = j; if (ASN1_STRING_cmp(str, str2) != 0) goto again2; } if (j < 0) { BIO_printf(bio_err, "The %s field needed to be the same in the\nCA certificate (%s) and the request (%s)\n", cv->name, ((str2 == NULL) ? "NULL" : (char *) str2->data), ((str == NULL) ? "NULL" : (char *) str->data)); goto err; } } else { BIO_printf(bio_err, "%s:invalid type in 'policy' configuration\n", cv->value); goto err; } if (push != NULL) { if (!X509_NAME_add_entry(subject, push, -1, 0)) { if (push != NULL) X509_NAME_ENTRY_free(push); BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } } if (j < 0) break; } } if (preserve) { X509_NAME_free(subject); /* subject=X509_NAME_dup(X509_REQ_get_subject_name(req)); */ subject = X509_NAME_dup(name); if (subject == NULL) goto err; } if (verbose) BIO_printf(bio_err, "The subject name appears to be ok, checking data base for clashes\n"); /* Build the correct Subject if no email is wanted in the subject */ /* * and add it later on because of the method extensions are added * (altName) */ if (email_dn) dn_subject = subject; else { X509_NAME_ENTRY *tmpne; /* * Its best to dup the subject DN and then delete any email * addresses because this retains its structure. */ if (!(dn_subject = X509_NAME_dup(subject))) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } while ((i = X509_NAME_get_index_by_NID(dn_subject, NID_pkcs9_emailAddress, -1)) >= 0) { tmpne = X509_NAME_get_entry(dn_subject, i); X509_NAME_delete_entry(dn_subject, i); X509_NAME_ENTRY_free(tmpne); } } if (BN_is_zero(serial)) row[DB_serial] = strdup("00"); else row[DB_serial] = BN_bn2hex(serial); if (row[DB_serial] == NULL) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } if (db->attributes.unique_subject) { OPENSSL_STRING *crow = row; rrow = TXT_DB_get_by_index(db->db, DB_name, crow); if (rrow != NULL) { BIO_printf(bio_err, "ERROR:There is already a certificate for %s\n", row[DB_name]); } } if (rrow == NULL) { rrow = TXT_DB_get_by_index(db->db, DB_serial, row); if (rrow != NULL) { BIO_printf(bio_err, "ERROR:Serial number %s has already been issued,\n", row[DB_serial]); BIO_printf(bio_err, " check the database/serial_file for corruption\n"); } } if (rrow != NULL) { BIO_printf(bio_err, "The matching entry has the following details\n"); if (rrow[DB_type][0] == 'E') p = "Expired"; else if (rrow[DB_type][0] == 'R') p = "Revoked"; else if (rrow[DB_type][0] == 'V') p = "Valid"; else p = "\ninvalid type, Data base error\n"; BIO_printf(bio_err, "Type :%s\n", p); if (rrow[DB_type][0] == 'R') { p = rrow[DB_exp_date]; if (p == NULL) p = "undef"; BIO_printf(bio_err, "Was revoked on:%s\n", p); } p = rrow[DB_exp_date]; if (p == NULL) p = "undef"; BIO_printf(bio_err, "Expires on :%s\n", p); p = rrow[DB_serial]; if (p == NULL) p = "undef"; BIO_printf(bio_err, "Serial Number :%s\n", p); p = rrow[DB_file]; if (p == NULL) p = "undef"; BIO_printf(bio_err, "File name :%s\n", p); p = rrow[DB_name]; if (p == NULL) p = "undef"; BIO_printf(bio_err, "Subject Name :%s\n", p); ok = -1; /* This is now a 'bad' error. */ goto err; } /* We are now totally happy, lets make and sign the certificate */ if (verbose) BIO_printf(bio_err, "Everything appears to be ok, creating and signing the certificate\n"); if ((ret = X509_new()) == NULL) goto err; ci = ret->cert_info; #ifdef X509_V3 /* Make it an X509 v3 certificate. */ if (!X509_set_version(ret, 2)) goto err; #endif if (ci->serialNumber == NULL) goto err; if (BN_to_ASN1_INTEGER(serial, ci->serialNumber) == NULL) goto err; if (selfsign) { if (!X509_set_issuer_name(ret, subject)) goto err; } else { if (!X509_set_issuer_name(ret, X509_get_subject_name(x509))) goto err; } if (strcmp(startdate, "today") == 0) X509_gmtime_adj(X509_get_notBefore(ret), 0); else ASN1_TIME_set_string(X509_get_notBefore(ret), startdate); if (enddate == NULL) X509_time_adj_ex(X509_get_notAfter(ret), days, 0, NULL); else ASN1_TIME_set_string(X509_get_notAfter(ret), enddate); if (!X509_set_subject_name(ret, subject)) goto err; pktmp = X509_REQ_get_pubkey(req); i = X509_set_pubkey(ret, pktmp); EVP_PKEY_free(pktmp); if (!i) goto err; /* Lets add the extensions, if there are any */ if (ext_sect) { X509V3_CTX ctx; if (ci->version == NULL) if ((ci->version = ASN1_INTEGER_new()) == NULL) goto err; ASN1_INTEGER_set(ci->version, 2); /* version 3 certificate */ /* * Free the current entries if any, there should not be any I * believe */ if (ci->extensions != NULL) sk_X509_EXTENSION_pop_free(ci->extensions, X509_EXTENSION_free); ci->extensions = NULL; /* Initialize the context structure */ if (selfsign) X509V3_set_ctx(&ctx, ret, ret, req, NULL, 0); else X509V3_set_ctx(&ctx, x509, ret, req, NULL, 0); if (extconf) { if (verbose) BIO_printf(bio_err, "Extra configuration file found\n"); /* Use the extconf configuration db LHASH */ X509V3_set_nconf(&ctx, extconf); /* Test the structure (needed?) */ /* X509V3_set_ctx_test(&ctx); */ /* Adds exts contained in the configuration file */ if (!X509V3_EXT_add_nconf(extconf, &ctx, ext_sect, ret)) { BIO_printf(bio_err, "ERROR: adding extensions in section %s\n", ext_sect); ERR_print_errors(bio_err); goto err; } if (verbose) BIO_printf(bio_err, "Successfully added extensions from file.\n"); } else if (ext_sect) { /* We found extensions to be set from config file */ X509V3_set_nconf(&ctx, lconf); if (!X509V3_EXT_add_nconf(lconf, &ctx, ext_sect, ret)) { BIO_printf(bio_err, "ERROR: adding extensions in section %s\n", ext_sect); ERR_print_errors(bio_err); goto err; } if (verbose) BIO_printf(bio_err, "Successfully added extensions from config\n"); } } /* Copy extensions from request (if any) */ if (!copy_extensions(ret, req, ext_copy)) { BIO_printf(bio_err, "ERROR: adding extensions from request\n"); ERR_print_errors(bio_err); goto err; } /* Set the right value for the noemailDN option */ if (email_dn == 0) { if (!X509_set_subject_name(ret, dn_subject)) goto err; } if (!default_op) { BIO_printf(bio_err, "Certificate Details:\n"); /* * Never print signature details because signature not * present */ certopt |= X509_FLAG_NO_SIGDUMP | X509_FLAG_NO_SIGNAME; X509_print_ex(bio_err, ret, nameopt, certopt); } BIO_printf(bio_err, "Certificate is to be certified until "); ASN1_TIME_print(bio_err, X509_get_notAfter(ret)); if (days) BIO_printf(bio_err, " (%ld days)", days); BIO_printf(bio_err, "\n"); if (!batch) { BIO_printf(bio_err, "Sign the certificate? [y/n]:"); (void) BIO_flush(bio_err); buf[0] = '\0'; if (!fgets(buf, sizeof(buf) - 1, stdin)) { BIO_printf(bio_err, "CERTIFICATE WILL NOT BE CERTIFIED: I/O error\n"); ok = 0; goto err; } if (!((buf[0] == 'y') || (buf[0] == 'Y'))) { BIO_printf(bio_err, "CERTIFICATE WILL NOT BE CERTIFIED\n"); ok = 0; goto err; } } pktmp = X509_get_pubkey(ret); if (EVP_PKEY_missing_parameters(pktmp) && !EVP_PKEY_missing_parameters(pkey)) EVP_PKEY_copy_parameters(pktmp, pkey); EVP_PKEY_free(pktmp); if (!do_X509_sign(bio_err, ret, pkey, dgst, sigopts)) goto err; /* We now just add it to the database */ row[DB_type] = malloc(2); tm = X509_get_notAfter(ret); row[DB_exp_date] = malloc(tm->length + 1); if (row[DB_type] == NULL || row[DB_exp_date] == NULL) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } memcpy(row[DB_exp_date], tm->data, tm->length); row[DB_exp_date][tm->length] = '\0'; row[DB_rev_date] = NULL; /* row[DB_serial] done already */ row[DB_file] = malloc(8); row[DB_name] = X509_NAME_oneline(X509_get_subject_name(ret), NULL, 0); if ((row[DB_type] == NULL) || (row[DB_file] == NULL) || (row[DB_name] == NULL)) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } (void) strlcpy(row[DB_file], "unknown", 8); row[DB_type][0] = 'V'; row[DB_type][1] = '\0'; if ((irow = reallocarray(NULL, DB_NUMBER + 1, sizeof(char *))) == NULL) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } for (i = 0; i < DB_NUMBER; i++) { irow[i] = row[i]; row[i] = NULL; } irow[DB_NUMBER] = NULL; if (!TXT_DB_insert(db->db, irow)) { BIO_printf(bio_err, "failed to update database\n"); BIO_printf(bio_err, "TXT_DB error number %ld\n", db->db->error); goto err; } ok = 1; err: for (i = 0; i < DB_NUMBER; i++) free(row[i]); if (CAname != NULL) X509_NAME_free(CAname); if (subject != NULL) X509_NAME_free(subject); if ((dn_subject != NULL) && !email_dn) X509_NAME_free(dn_subject); if (tmptm != NULL) ASN1_UTCTIME_free(tmptm); if (ok <= 0) { if (ret != NULL) X509_free(ret); ret = NULL; } else *xret = ret; return (ok); } static void write_new_certificate(BIO * bp, X509 * x, int output_der, int notext) { if (output_der) { (void) i2d_X509_bio(bp, x); return; } if (!notext) X509_print(bp, x); PEM_write_bio_X509(bp, x); } static int certify_spkac(X509 ** xret, char *infile, EVP_PKEY * pkey, X509 * x509, const EVP_MD * dgst, STACK_OF(OPENSSL_STRING) * sigopts, STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, unsigned long chtype, int multirdn, int email_dn, char *startdate, char *enddate, long days, char *ext_sect, CONF * lconf, int verbose, unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy) { STACK_OF(CONF_VALUE) * sk = NULL; LHASH_OF(CONF_VALUE) * parms = NULL; X509_REQ *req = NULL; CONF_VALUE *cv = NULL; NETSCAPE_SPKI *spki = NULL; X509_REQ_INFO *ri; char *type, *buf; EVP_PKEY *pktmp = NULL; X509_NAME *n = NULL; int ok = -1, i, j; long errline; int nid; /* * Load input file into a hash table. (This is just an easy * way to read and parse the file, then put it into a convenient * STACK format). */ parms = CONF_load(NULL, infile, &errline); if (parms == NULL) { BIO_printf(bio_err, "error on line %ld of %s\n", errline, infile); ERR_print_errors(bio_err); goto err; } sk = CONF_get_section(parms, "default"); if (sk_CONF_VALUE_num(sk) == 0) { BIO_printf(bio_err, "no name/value pairs found in %s\n", infile); CONF_free(parms); goto err; } /* * Now create a dummy X509 request structure. We don't actually * have an X509 request, but we have many of the components * (a public key, various DN components). The idea is that we * put these components into the right X509 request structure * and we can use the same code as if you had a real X509 request. */ req = X509_REQ_new(); if (req == NULL) { ERR_print_errors(bio_err); goto err; } /* * Build up the subject name set. */ ri = req->req_info; n = ri->subject; for (i = 0;; i++) { if (sk_CONF_VALUE_num(sk) <= i) break; cv = sk_CONF_VALUE_value(sk, i); type = cv->name; /* * Skip past any leading X. X: X, etc to allow for multiple * instances */ for (buf = cv->name; *buf; buf++) { if ((*buf == ':') || (*buf == ',') || (*buf == '.')) { buf++; if (*buf) type = buf; break; } } buf = cv->value; if ((nid = OBJ_txt2nid(type)) == NID_undef) { if (strcmp(type, "SPKAC") == 0) { spki = NETSCAPE_SPKI_b64_decode(cv->value, -1); if (spki == NULL) { BIO_printf(bio_err, "unable to load Netscape SPKAC structure\n"); ERR_print_errors(bio_err); goto err; } } continue; } if (!X509_NAME_add_entry_by_NID(n, nid, chtype, (unsigned char *)buf, -1, -1, 0)) goto err; } if (spki == NULL) { BIO_printf(bio_err, "Netscape SPKAC structure not found in %s\n", infile); goto err; } /* * Now extract the key from the SPKI structure. */ BIO_printf(bio_err, "Check that the SPKAC request matches the signature\n"); if ((pktmp = NETSCAPE_SPKI_get_pubkey(spki)) == NULL) { BIO_printf(bio_err, "error unpacking SPKAC public key\n"); goto err; } j = NETSCAPE_SPKI_verify(spki, pktmp); if (j <= 0) { BIO_printf(bio_err, "signature verification failed on SPKAC public key\n"); goto err; } BIO_printf(bio_err, "Signature ok\n"); X509_REQ_set_pubkey(req, pktmp); EVP_PKEY_free(pktmp); ok = do_body(xret, pkey, x509, dgst, sigopts, policy, db, serial, subj, chtype, multirdn, email_dn, startdate, enddate, days, 1, verbose, req, ext_sect, lconf, certopt, nameopt, default_op, ext_copy, 0); err: if (req != NULL) X509_REQ_free(req); if (parms != NULL) CONF_free(parms); if (spki != NULL) NETSCAPE_SPKI_free(spki); return (ok); } static int check_time_format(const char *str) { return ASN1_TIME_set_string(NULL, str); } static int do_revoke(X509 * x509, CA_DB * db, int type, char *value) { ASN1_UTCTIME *tm = NULL; char *row[DB_NUMBER], **rrow, **irow; char *rev_str = NULL; BIGNUM *bn = NULL; int ok = -1, i; for (i = 0; i < DB_NUMBER; i++) row[i] = NULL; row[DB_name] = X509_NAME_oneline(X509_get_subject_name(x509), NULL, 0); bn = ASN1_INTEGER_to_BN(X509_get_serialNumber(x509), NULL); if (!bn) goto err; if (BN_is_zero(bn)) row[DB_serial] = strdup("00"); else row[DB_serial] = BN_bn2hex(bn); BN_free(bn); if ((row[DB_name] == NULL) || (row[DB_serial] == NULL)) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } /* * We have to lookup by serial number because name lookup skips * revoked certs */ rrow = TXT_DB_get_by_index(db->db, DB_serial, row); if (rrow == NULL) { BIO_printf(bio_err, "Adding Entry with serial number %s to DB for %s\n", row[DB_serial], row[DB_name]); /* We now just add it to the database */ row[DB_type] = malloc(2); tm = X509_get_notAfter(x509); row[DB_exp_date] = malloc(tm->length + 1); if (row[DB_type] == NULL || row[DB_exp_date] == NULL) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } memcpy(row[DB_exp_date], tm->data, tm->length); row[DB_exp_date][tm->length] = '\0'; row[DB_rev_date] = NULL; /* row[DB_serial] done already */ row[DB_file] = malloc(8); /* row[DB_name] done already */ if ((row[DB_type] == NULL) || (row[DB_file] == NULL)) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } (void) strlcpy(row[DB_file], "unknown", 8); row[DB_type][0] = 'V'; row[DB_type][1] = '\0'; if ((irow = reallocarray(NULL, sizeof(char *), (DB_NUMBER + 1))) == NULL) { BIO_printf(bio_err, "Memory allocation failure\n"); goto err; } for (i = 0; i < DB_NUMBER; i++) { irow[i] = row[i]; row[i] = NULL; } irow[DB_NUMBER] = NULL; if (!TXT_DB_insert(db->db, irow)) { BIO_printf(bio_err, "failed to update database\n"); BIO_printf(bio_err, "TXT_DB error number %ld\n", db->db->error); goto err; } /* Revoke Certificate */ ok = do_revoke(x509, db, type, value); goto err; } else if (index_name_cmp_noconst(row, rrow)) { BIO_printf(bio_err, "ERROR:name does not match %s\n", row[DB_name]); goto err; } else if (rrow[DB_type][0] == 'R') { BIO_printf(bio_err, "ERROR:Already revoked, serial number %s\n", row[DB_serial]); goto err; } else { BIO_printf(bio_err, "Revoking Certificate %s.\n", rrow[DB_serial]); rev_str = make_revocation_str(type, value); if (!rev_str) { BIO_printf(bio_err, "Error in revocation arguments\n"); goto err; } rrow[DB_type][0] = 'R'; rrow[DB_type][1] = '\0'; rrow[DB_rev_date] = rev_str; } ok = 1; err: for (i = 0; i < DB_NUMBER; i++) free(row[i]); return (ok); } static int get_certificate_status(const char *serial, CA_DB * db) { char *row[DB_NUMBER], **rrow; int ok = -1, i; /* Free Resources */ for (i = 0; i < DB_NUMBER; i++) row[i] = NULL; /* Malloc needed char spaces */ row[DB_serial] = malloc(strlen(serial) + 2); if (row[DB_serial] == NULL) { BIO_printf(bio_err, "Malloc failure\n"); goto err; } if (strlen(serial) % 2) { /* Set the first char to 0 */ ; row[DB_serial][0] = '0'; /* Copy String from serial to row[DB_serial] */ memcpy(row[DB_serial] + 1, serial, strlen(serial)); row[DB_serial][strlen(serial) + 1] = '\0'; } else { /* Copy String from serial to row[DB_serial] */ memcpy(row[DB_serial], serial, strlen(serial)); row[DB_serial][strlen(serial)] = '\0'; } /* Make it Upper Case */ for (i = 0; row[DB_serial][i] != '\0'; i++) row[DB_serial][i] = toupper((unsigned char) row[DB_serial][i]); ok = 1; /* Search for the certificate */ rrow = TXT_DB_get_by_index(db->db, DB_serial, row); if (rrow == NULL) { BIO_printf(bio_err, "Serial %s not present in db.\n", row[DB_serial]); ok = -1; goto err; } else if (rrow[DB_type][0] == 'V') { BIO_printf(bio_err, "%s=Valid (%c)\n", row[DB_serial], rrow[DB_type][0]); goto err; } else if (rrow[DB_type][0] == 'R') { BIO_printf(bio_err, "%s=Revoked (%c)\n", row[DB_serial], rrow[DB_type][0]); goto err; } else if (rrow[DB_type][0] == 'E') { BIO_printf(bio_err, "%s=Expired (%c)\n", row[DB_serial], rrow[DB_type][0]); goto err; } else if (rrow[DB_type][0] == 'S') { BIO_printf(bio_err, "%s=Suspended (%c)\n", row[DB_serial], rrow[DB_type][0]); goto err; } else { BIO_printf(bio_err, "%s=Unknown (%c).\n", row[DB_serial], rrow[DB_type][0]); ok = -1; } err: for (i = 0; i < DB_NUMBER; i++) free(row[i]); return (ok); } static int do_updatedb(CA_DB * db) { ASN1_UTCTIME *a_tm = NULL; int i, cnt = 0; int db_y2k, a_y2k; /* flags = 1 if y >= 2000 */ char **rrow, *a_tm_s; a_tm = ASN1_UTCTIME_new(); /* get actual time and make a string */ a_tm = X509_gmtime_adj(a_tm, 0); a_tm_s = malloc(a_tm->length + 1); if (a_tm_s == NULL) { cnt = -1; goto err; } memcpy(a_tm_s, a_tm->data, a_tm->length); a_tm_s[a_tm->length] = '\0'; if (strncmp(a_tm_s, "49", 2) <= 0) a_y2k = 1; else a_y2k = 0; for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) { rrow = sk_OPENSSL_PSTRING_value(db->db->data, i); if (rrow[DB_type][0] == 'V') { /* ignore entries that are not valid */ if (strncmp(rrow[DB_exp_date], "49", 2) <= 0) db_y2k = 1; else db_y2k = 0; if (db_y2k == a_y2k) { /* all on the same y2k side */ if (strcmp(rrow[DB_exp_date], a_tm_s) <= 0) { rrow[DB_type][0] = 'E'; rrow[DB_type][1] = '\0'; cnt++; BIO_printf(bio_err, "%s=Expired\n", rrow[DB_serial]); } } else if (db_y2k < a_y2k) { rrow[DB_type][0] = 'E'; rrow[DB_type][1] = '\0'; cnt++; BIO_printf(bio_err, "%s=Expired\n", rrow[DB_serial]); } } } err: ASN1_UTCTIME_free(a_tm); free(a_tm_s); return (cnt); } static const char *crl_reasons[] = { /* CRL reason strings */ "unspecified", "keyCompromise", "CACompromise", "affiliationChanged", "superseded", "cessationOfOperation", "certificateHold", "removeFromCRL", /* Additional pseudo reasons */ "holdInstruction", "keyTime", "CAkeyTime" }; #define NUM_REASONS (sizeof(crl_reasons) / sizeof(char *)) /* Given revocation information convert to a DB string. * The format of the string is: * revtime[,reason,extra]. Where 'revtime' is the * revocation time (the current time). 'reason' is the * optional CRL reason and 'extra' is any additional * argument */ char * make_revocation_str(int rev_type, char *rev_arg) { char *other = NULL, *str; const char *reason = NULL; ASN1_OBJECT *otmp; ASN1_UTCTIME *revtm = NULL; int i; switch (rev_type) { case REV_NONE: break; case REV_CRL_REASON: for (i = 0; i < 8; i++) { if (!strcasecmp(rev_arg, crl_reasons[i])) { reason = crl_reasons[i]; break; } } if (reason == NULL) { BIO_printf(bio_err, "Unknown CRL reason %s\n", rev_arg); return NULL; } break; case REV_HOLD: /* Argument is an OID */ otmp = OBJ_txt2obj(rev_arg, 0); ASN1_OBJECT_free(otmp); if (otmp == NULL) { BIO_printf(bio_err, "Invalid object identifier %s\n", rev_arg); return NULL; } reason = "holdInstruction"; other = rev_arg; break; case REV_KEY_COMPROMISE: case REV_CA_COMPROMISE: /* Argument is the key compromise time */ if (!ASN1_GENERALIZEDTIME_set_string(NULL, rev_arg)) { BIO_printf(bio_err, "Invalid time format %s. Need YYYYMMDDHHMMSSZ\n", rev_arg); return NULL; } other = rev_arg; if (rev_type == REV_KEY_COMPROMISE) reason = "keyTime"; else reason = "CAkeyTime"; break; } revtm = X509_gmtime_adj(NULL, 0); if (asprintf(&str, "%s%s%s%s%s", revtm->data, reason ? "," : "", reason ? reason : "", other ? "," : "", other ? other : "") == -1) str = NULL; ASN1_UTCTIME_free(revtm); return str; } /* Convert revocation field to X509_REVOKED entry * return code: * 0 error * 1 OK * 2 OK and some extensions added (i.e. V2 CRL) */ int make_revoked(X509_REVOKED * rev, const char *str) { char *tmp = NULL; int reason_code = -1; int i, ret = 0; ASN1_OBJECT *hold = NULL; ASN1_GENERALIZEDTIME *comp_time = NULL; ASN1_ENUMERATED *rtmp = NULL; ASN1_TIME *revDate = NULL; i = unpack_revinfo(&revDate, &reason_code, &hold, &comp_time, str); if (i == 0) goto err; if (rev && !X509_REVOKED_set_revocationDate(rev, revDate)) goto err; if (rev && (reason_code != OCSP_REVOKED_STATUS_NOSTATUS)) { rtmp = ASN1_ENUMERATED_new(); if (!rtmp || !ASN1_ENUMERATED_set(rtmp, reason_code)) goto err; if (!X509_REVOKED_add1_ext_i2d(rev, NID_crl_reason, rtmp, 0, 0)) goto err; } if (rev && comp_time) { if (!X509_REVOKED_add1_ext_i2d(rev, NID_invalidity_date, comp_time, 0, 0)) goto err; } if (rev && hold) { if (!X509_REVOKED_add1_ext_i2d(rev, NID_hold_instruction_code, hold, 0, 0)) goto err; } if (reason_code != OCSP_REVOKED_STATUS_NOSTATUS) ret = 2; else ret = 1; err: free(tmp); ASN1_OBJECT_free(hold); ASN1_GENERALIZEDTIME_free(comp_time); ASN1_ENUMERATED_free(rtmp); ASN1_TIME_free(revDate); return ret; } int old_entry_print(BIO * bp, ASN1_OBJECT * obj, ASN1_STRING * str) { char buf[25], *pbuf, *p; int j; j = i2a_ASN1_OBJECT(bp, obj); pbuf = buf; for (j = 22 - j; j > 0; j--) *(pbuf++) = ' '; *(pbuf++) = ':'; *(pbuf++) = '\0'; BIO_puts(bp, buf); if (str->type == V_ASN1_PRINTABLESTRING) BIO_printf(bp, "PRINTABLE:'"); else if (str->type == V_ASN1_T61STRING) BIO_printf(bp, "T61STRING:'"); else if (str->type == V_ASN1_IA5STRING) BIO_printf(bp, "IA5STRING:'"); else if (str->type == V_ASN1_UNIVERSALSTRING) BIO_printf(bp, "UNIVERSALSTRING:'"); else BIO_printf(bp, "ASN.1 %2d:'", str->type); p = (char *) str->data; for (j = str->length; j > 0; j--) { if ((*p >= ' ') && (*p <= '~')) BIO_printf(bp, "%c", *p); else if (*p & 0x80) BIO_printf(bp, "\\0x%02X", *p); else if ((unsigned char) *p == 0xf7) BIO_printf(bp, "^?"); else BIO_printf(bp, "^%c", *p + '@'); p++; } BIO_printf(bp, "'\n"); return 1; } int unpack_revinfo(ASN1_TIME ** prevtm, int *preason, ASN1_OBJECT ** phold, ASN1_GENERALIZEDTIME ** pinvtm, const char *str) { char *tmp = NULL; char *rtime_str, *reason_str = NULL, *arg_str = NULL, *p; int reason_code = -1; int ret = 0; unsigned int i; ASN1_OBJECT *hold = NULL; ASN1_GENERALIZEDTIME *comp_time = NULL; if ((tmp = strdup(str)) == NULL) { BIO_printf(bio_err, "malloc failed\n"); goto err; } p = strchr(tmp, ','); rtime_str = tmp; if (p) { *p = '\0'; p++; reason_str = p; p = strchr(p, ','); if (p) { *p = '\0'; arg_str = p + 1; } } if (prevtm) { *prevtm = ASN1_UTCTIME_new(); if (!ASN1_UTCTIME_set_string(*prevtm, rtime_str)) { BIO_printf(bio_err, "invalid revocation date %s\n", rtime_str); goto err; } } if (reason_str) { for (i = 0; i < NUM_REASONS; i++) { if (!strcasecmp(reason_str, crl_reasons[i])) { reason_code = i; break; } } if (reason_code == OCSP_REVOKED_STATUS_NOSTATUS) { BIO_printf(bio_err, "invalid reason code %s\n", reason_str); goto err; } if (reason_code == 7) reason_code = OCSP_REVOKED_STATUS_REMOVEFROMCRL; else if (reason_code == 8) { /* Hold instruction */ if (!arg_str) { BIO_printf(bio_err, "missing hold instruction\n"); goto err; } reason_code = OCSP_REVOKED_STATUS_CERTIFICATEHOLD; hold = OBJ_txt2obj(arg_str, 0); if (!hold) { BIO_printf(bio_err, "invalid object identifier %s\n", arg_str); goto err; } if (phold) *phold = hold; } else if ((reason_code == 9) || (reason_code == 10)) { if (!arg_str) { BIO_printf(bio_err, "missing compromised time\n"); goto err; } comp_time = ASN1_GENERALIZEDTIME_new(); if (!ASN1_GENERALIZEDTIME_set_string(comp_time, arg_str)) { BIO_printf(bio_err, "invalid compromised time %s\n", arg_str); goto err; } if (reason_code == 9) reason_code = OCSP_REVOKED_STATUS_KEYCOMPROMISE; else reason_code = OCSP_REVOKED_STATUS_CACOMPROMISE; } } if (preason) *preason = reason_code; if (pinvtm) *pinvtm = comp_time; else ASN1_GENERALIZEDTIME_free(comp_time); ret = 1; err: free(tmp); if (!phold) ASN1_OBJECT_free(hold); if (!pinvtm) ASN1_GENERALIZEDTIME_free(comp_time); return ret; } static char * bin2hex(unsigned char * data, size_t len) { char *ret = NULL; char hex[] = "0123456789ABCDEF"; int i; if ((ret = malloc(len * 2 + 1))) { for (i = 0; i < len; i++) { ret[i * 2 + 0] = hex[data[i] >> 4]; ret[i * 2 + 1] = hex[data[i] & 0x0F]; } ret[len * 2] = '\0'; } return ret; } |
Added jni/libressl/apps/openssl/cert.pem.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 | # $OpenBSD: cert.pem,v 1.11 2016/02/17 13:06:54 sthen Exp $ ### AddTrust AB === AddTrust Class 1 CA Root Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: May 30 10:38:31 2000 GMT Not After : May 30 10:38:31 2020 GMT Subject: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Class 1 CA Root X509v3 extensions: X509v3 Subject Key Identifier: 95:B1:B4:F0:94:B6:BD:C7:DA:D1:11:09:21:BE:C1:AF:49:FD:10:7B X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:95:B1:B4:F0:94:B6:BD:C7:DA:D1:11:09:21:BE:C1:AF:49:FD:10:7B DirName:/C=SE/O=AddTrust AB/OU=AddTrust TTP Network/CN=AddTrust Class 1 CA Root serial:01 SHA1 Fingerprint=CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D SHA256 Fingerprint=8C:72:09:27:9A:C0:4E:27:5E:16:D0:7F:D3:B7:75:E8:01:54:B5:96:80:46:E3:1F:52:DD:25:76:63:24:E9:A7 -----BEGIN CERTIFICATE----- MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC +Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X 7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz 43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= -----END CERTIFICATE----- === AddTrust External CA Root Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: May 30 10:48:38 2000 GMT Not After : May 30 10:48:38 2020 GMT Subject: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root X509v3 extensions: X509v3 Subject Key Identifier: AD:BD:98:7A:34:B4:26:F7:FA:C4:26:54:EF:03:BD:E0:24:CB:54:1A X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:AD:BD:98:7A:34:B4:26:F7:FA:C4:26:54:EF:03:BD:E0:24:CB:54:1A DirName:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root serial:01 SHA1 Fingerprint=02:FA:F3:E2:91:43:54:68:60:78:57:69:4D:F5:E4:5B:68:85:18:68 SHA256 Fingerprint=68:7F:A4:51:38:22:78:FF:F0:C8:B1:1F:8D:43:D5:76:67:1C:6E:B2:BC:EA:B4:13:FB:83:D9:65:D0:6D:2F:F2 -----BEGIN CERTIFICATE----- MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= -----END CERTIFICATE----- === AddTrust Public CA Root Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: May 30 10:41:50 2000 GMT Not After : May 30 10:41:50 2020 GMT Subject: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Public CA Root X509v3 extensions: X509v3 Subject Key Identifier: 81:3E:37:D8:92:B0:1F:77:9F:5C:B4:AB:73:AA:E7:F6:34:60:2F:FA X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:81:3E:37:D8:92:B0:1F:77:9F:5C:B4:AB:73:AA:E7:F6:34:60:2F:FA DirName:/C=SE/O=AddTrust AB/OU=AddTrust TTP Network/CN=AddTrust Public CA Root serial:01 SHA1 Fingerprint=2A:B6:28:48:5E:78:FB:F3:AD:9E:79:10:DD:6B:DF:99:72:2C:96:E5 SHA256 Fingerprint=07:91:CA:07:49:B2:07:82:AA:D3:C7:D7:BD:0C:DF:C9:48:58:35:84:3E:B2:D7:99:60:09:CE:43:AB:6C:69:27 -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV 6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH 1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF 62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh 4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= -----END CERTIFICATE----- === AddTrust Qualified CA Root Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: May 30 10:44:50 2000 GMT Not After : May 30 10:44:50 2020 GMT Subject: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Qualified CA Root X509v3 extensions: X509v3 Subject Key Identifier: 39:95:8B:62:8B:5C:C9:D4:80:BA:58:0F:97:3F:15:08:43:CC:98:A7 X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:39:95:8B:62:8B:5C:C9:D4:80:BA:58:0F:97:3F:15:08:43:CC:98:A7 DirName:/C=SE/O=AddTrust AB/OU=AddTrust TTP Network/CN=AddTrust Qualified CA Root serial:01 SHA1 Fingerprint=4D:23:78:EC:91:95:39:B5:00:7F:75:8F:03:3B:21:1E:C5:4D:8B:CF SHA256 Fingerprint=80:95:21:08:05:DB:4B:BC:35:5E:44:28:D8:FD:6E:C2:CD:E3:AB:5F:B9:7A:99:42:98:8E:B8:F4:DC:D0:60:16 -----BEGIN CERTIFICATE----- MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G 87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i 2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no xqE= -----END CERTIFICATE----- ### Baltimore === Baltimore CyberTrust Root Certificate: Data: Version: 3 (0x2) Serial Number: 33554617 (0x20000b9) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: May 12 18:46:00 2000 GMT Not After : May 12 23:59:00 2025 GMT Subject: C=IE, O=Baltimore, OU=CyberTrust, CN=Baltimore CyberTrust Root X509v3 extensions: X509v3 Subject Key Identifier: E5:9D:59:30:82:47:58:CC:AC:FA:08:54:36:86:7B:3A:B5:04:4D:F0 X509v3 Basic Constraints: critical CA:TRUE, pathlen:3 X509v3 Key Usage: critical Certificate Sign, CRL Sign SHA1 Fingerprint=D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74 SHA256 Fingerprint=16:AF:57:A9:F6:76:B0:AB:12:60:95:AA:5E:BA:DE:F2:2A:B3:11:19:D6:44:AC:95:CD:4B:93:DB:F3:F2:6A:EB -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp -----END CERTIFICATE----- ### Certplus === Class 2 Primary CA Certificate: Data: Version: 3 (0x2) Serial Number: 85:bd:4b:f3:d8:da:e3:69:f6:94:d7:5f:c3:a5:44:23 Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Jul 7 17:05:00 1999 GMT Not After : Jul 6 23:59:59 2019 GMT Subject: C=FR, O=Certplus, CN=Class 2 Primary CA X509v3 extensions: X509v3 Basic Constraints: CA:TRUE, pathlen:10 X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Subject Key Identifier: E3:73:2D:DF:CB:0E:28:0C:DE:DD:B3:A4:CA:79:B8:8E:BB:E8:30:89 Netscape Cert Type: SSL CA, S/MIME CA X509v3 CRL Distribution Points: Full Name: URI:http://www.certplus.com/CRL/class2.crl SHA1 Fingerprint=74:20:74:41:72:9C:DD:92:EC:79:31:D8:23:10:8D:C2:81:92:E2:BB SHA256 Fingerprint=0F:99:3C:8A:EF:97:BA:AF:56:87:14:0E:D5:9A:D1:82:1B:B4:AF:AC:F0:AA:9A:58:B5:D5:7A:33:8A:3A:FB:CB -----BEGIN CERTIFICATE----- MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 l7+ijrRU -----END CERTIFICATE----- ### COMODO CA Limited === COMODO Certification Authority Certificate: Data: Version: 3 (0x2) Serial Number: 4e:81:2d:8a:82:65:e0:0b:02:ee:3e:35:02:46:e5:3d Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Dec 1 00:00:00 2006 GMT Not After : Dec 31 23:59:59 2029 GMT Subject: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO Certification Authority X509v3 extensions: X509v3 Subject Key Identifier: 0B:58:E5:8B:C6:4C:15:37:A4:40:A9:30:A9:21:BE:47:36:5A:56:FF X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/COMODOCertificationAuthority.crl SHA1 Fingerprint=66:31:BF:9E:F7:4F:9E:B6:C9:D5:A6:0C:BA:6A:BE:D1:F7:BD:EF:7B SHA256 Fingerprint=0C:2C:D6:3D:F7:80:6F:A3:99:ED:E8:09:11:6B:57:5B:F8:79:89:F0:65:18:F9:80:8C:86:05:03:17:8B:AF:66 -----BEGIN CERTIFICATE----- MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI 2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp +2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW /zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB ZQ== -----END CERTIFICATE----- === COMODO ECC Certification Authority Certificate: Data: Version: 3 (0x2) Serial Number: 1f:47:af:aa:62:00:70:50:54:4c:01:9e:9b:63:99:2a Signature Algorithm: ecdsa-with-SHA384 Validity Not Before: Mar 6 00:00:00 2008 GMT Not After : Jan 18 23:59:59 2038 GMT Subject: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO ECC Certification Authority X509v3 extensions: X509v3 Subject Key Identifier: 75:71:A7:19:48:19:BC:9D:9D:EA:41:47:DF:94:C4:48:77:99:D3:79 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE SHA1 Fingerprint=9F:74:4E:9F:2B:4D:BA:EC:0F:31:2C:50:B6:56:3B:8E:2D:93:C3:11 SHA256 Fingerprint=17:93:92:7A:06:14:54:97:89:AD:CE:2F:8F:34:F7:F0:B6:6D:0F:3A:E3:A3:B8:4D:21:EC:15:DB:BA:4F:AD:C7 -----BEGIN CERTIFICATE----- MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= -----END CERTIFICATE----- === COMODO RSA Certification Authority Certificate: Data: Version: 3 (0x2) Serial Number: 4c:aa:f9:ca:db:63:6f:e0:1f:f7:4e:d8:5b:03:86:9d Signature Algorithm: sha384WithRSAEncryption Validity Not Before: Jan 19 00:00:00 2010 GMT Not After : Jan 18 23:59:59 2038 GMT Subject: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Certification Authority X509v3 extensions: X509v3 Subject Key Identifier: BB:AF:7E:02:3D:FA:A6:F1:3C:84:8E:AD:EE:38:98:EC:D9:32:32:D4 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE SHA1 Fingerprint=AF:E5:D2:44:A8:D1:19:42:30:FF:47:9F:E2:F8:97:BB:CD:7A:8C:B4 SHA256 Fingerprint=52:F0:E1:C4:E5:8E:C6:29:29:1B:60:31:7F:07:46:71:B8:5D:7E:A8:0D:5B:07:27:34:63:53:4B:32:B4:02:34 -----BEGIN CERTIFICATE----- MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR 6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC 9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV /erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z +pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB /wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM 4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV 2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl 0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB NVOFBkpdn627G190 -----END CERTIFICATE----- ### Comodo CA Limited === AAA Certificate Services Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Jan 1 00:00:00 2004 GMT Not After : Dec 31 23:59:59 2028 GMT Subject: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services X509v3 extensions: X509v3 Subject Key Identifier: A0:11:0A:23:3E:96:F1:07:EC:E2:AF:29:EF:82:A5:7F:D0:30:A4:B4 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/AAACertificateServices.crl Full Name: URI:http://crl.comodo.net/AAACertificateServices.crl SHA1 Fingerprint=D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49 SHA256 Fingerprint=D7:A7:A0:FB:5D:7E:27:31:D7:71:E9:48:4E:BC:DE:F7:1D:5F:0C:3E:0A:29:48:78:2B:C8:3E:E0:EA:69:9E:F4 -----BEGIN CERTIFICATE----- MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe 3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== -----END CERTIFICATE----- === Secure Certificate Services Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Jan 1 00:00:00 2004 GMT Not After : Dec 31 23:59:59 2028 GMT Subject: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=Secure Certificate Services X509v3 extensions: X509v3 Subject Key Identifier: 3C:D8:93:88:C2:C0:82:09:CC:01:99:06:93:20:E9:9E:70:09:63:4F X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/SecureCertificateServices.crl Full Name: URI:http://crl.comodo.net/SecureCertificateServices.crl SHA1 Fingerprint=4A:65:D5:F4:1D:EF:39:B8:B8:90:4A:4A:D3:64:81:33:CF:C7:A1:D1 SHA256 Fingerprint=BD:81:CE:3B:4F:65:91:D1:1A:67:B5:FC:7A:47:FD:EF:25:52:1B:F9:AA:4E:18:B9:E3:DF:2E:34:A7:80:3B:E8 -----BEGIN CERTIFICATE----- MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk 3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz 6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= -----END CERTIFICATE----- === Trusted Certificate Services Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Jan 1 00:00:00 2004 GMT Not After : Dec 31 23:59:59 2028 GMT Subject: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=Trusted Certificate Services X509v3 extensions: X509v3 Subject Key Identifier: C5:7B:58:BD:ED:DA:25:69:D2:F7:59:16:A8:B3:32:C0:7B:27:5B:F4 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/TrustedCertificateServices.crl Full Name: URI:http://crl.comodo.net/TrustedCertificateServices.crl SHA1 Fingerprint=E1:9F:E3:0E:8B:84:60:9E:80:9B:17:0D:72:A8:C5:BA:6E:14:09:BD SHA256 Fingerprint=3F:06:E5:56:81:D4:96:F5:BE:16:9E:B5:38:9F:9F:2B:8F:F6:1E:17:08:DF:68:81:72:48:49:CD:5D:27:CB:69 -----BEGIN CERTIFICATE----- MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW 1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi -----END CERTIFICATE----- ### Deutsche Telekom AG === Deutsche Telekom Root CA 2 Certificate: Data: Version: 3 (0x2) Serial Number: 38 (0x26) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Jul 9 12:11:00 1999 GMT Not After : Jul 9 23:59:00 2019 GMT Subject: C=DE, O=Deutsche Telekom AG, OU=T-TeleSec Trust Center, CN=Deutsche Telekom Root CA 2 X509v3 extensions: X509v3 Subject Key Identifier: 31:C3:79:1B:BA:F5:53:D7:17:E0:89:7A:2D:17:6C:0A:B3:2B:9D:33 X509v3 Basic Constraints: CA:TRUE, pathlen:5 X509v3 Key Usage: critical Certificate Sign, CRL Sign SHA1 Fingerprint=85:A4:08:C0:9C:19:3E:5D:51:58:7D:CD:D6:13:30:FD:8C:DE:37:BF SHA256 Fingerprint=B6:19:1A:50:D0:C3:97:7F:7D:A9:9B:CD:AA:C8:6A:22:7D:AE:B9:67:9E:C7:0B:A3:B0:C9:D9:22:71:C1:70:D3 -----BEGIN CERTIFICATE----- MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl 6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU Cm26OWMohpLzGITY+9HPBVZkVw== -----END CERTIFICATE----- ### DigiCert Inc === DigiCert Assured ID Root CA Certificate: Data: Version: 3 (0x2) Serial Number: 0c:e7:e0:e5:17:d8:46:fe:8f:e5:60:fc:1b:f0:30:39 Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Nov 10 00:00:00 2006 GMT Not After : Nov 10 00:00:00 2031 GMT Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Assured ID Root CA X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F X509v3 Authority Key Identifier: keyid:45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F SHA1 Fingerprint=05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43 SHA256 Fingerprint=3E:90:99:B5:01:5E:8F:48:6C:00:BC:EA:9D:11:1E:E7:21:FA:BA:35:5A:89:BC:F1:DF:69:56:1E:3D:C6:32:5C -----BEGIN CERTIFICATE----- MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== -----END CERTIFICATE----- === DigiCert Assured ID Root G2 Certificate: Data: Version: 3 (0x2) Serial Number: 0b:93:1c:3a:d6:39:67:ea:67:23:bf:c3:af:9a:f4:4b Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Aug 1 12:00:00 2013 GMT Not After : Jan 15 12:00:00 2038 GMT Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Assured ID Root G2 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Subject Key Identifier: CE:C3:4A:B9:99:55:F2:B8:DB:60:BF:A9:7E:BD:56:B5:97:36:A7:D6 SHA1 Fingerprint=A1:4B:48:D9:43:EE:0A:0E:40:90:4F:3C:E0:A4:C0:91:93:51:5D:3F SHA256 Fingerprint=7D:05:EB:B6:82:33:9F:8C:94:51:EE:09:4E:EB:FE:FA:79:53:A1:14:ED:B2:F4:49:49:45:2F:AB:7D:2F:C1:85 -----BEGIN CERTIFICATE----- MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I 0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo IhNzbM8m9Yop5w== -----END CERTIFICATE----- === DigiCert Assured ID Root G3 Certificate: Data: Version: 3 (0x2) Serial Number: 0b:a1:5a:fa:1d:df:a0:b5:49:44:af:cd:24:a0:6c:ec Signature Algorithm: ecdsa-with-SHA384 Validity Not Before: Aug 1 12:00:00 2013 GMT Not After : Jan 15 12:00:00 2038 GMT Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Assured ID Root G3 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Subject Key Identifier: CB:D0:BD:A9:E1:98:05:51:A1:4D:37:A2:83:79:CE:8D:1D:2A:E4:84 SHA1 Fingerprint=F5:17:A2:4F:9A:48:C6:C9:F8:A2:00:26:9F:DC:0F:48:2C:AB:30:89 SHA256 Fingerprint=7E:37:CB:8B:4C:47:09:0C:AB:36:55:1B:A6:F4:5D:B8:40:68:0F:BA:16:6A:95:2D:B1:00:71:7F:43:05:3F:C2 -----BEGIN CERTIFICATE----- MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv 6pZjamVFkpUBtA== -----END CERTIFICATE----- === DigiCert Global Root CA Certificate: Data: Version: 3 (0x2) Serial Number: 08:3b:e0:56:90:42:46:b1:a1:75:6a:c9:59:91:c7:4a Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Nov 10 00:00:00 2006 GMT Not After : Nov 10 00:00:00 2031 GMT Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55 X509v3 Authority Key Identifier: keyid:03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55 SHA1 Fingerprint=A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36 SHA256 Fingerprint=43:48:A0:E9:44:4C:78:CB:26:5E:05:8D:5E:89:44:B4:D8:4F:96:62:BD:26:DB:25:7F:89:34:A4:43:C7:01:61 -----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt 43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg 06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE----- === DigiCert Global Root G2 Certificate: Data: Version: 3 (0x2) Serial Number: 03:3a:f1:e6:a7:11:a9:a0:bb:28:64:b1:1d:09:fa:e5 Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Aug 1 12:00:00 2013 GMT Not After : Jan 15 12:00:00 2038 GMT Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root G2 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 4E:22:54:20:18:95:E6:E3:6E:E6:0F:FA:FA:B9:12:ED:06:17:8F:39 SHA1 Fingerprint=DF:3C:24:F9:BF:D6:66:76:1B:26:80:73:FE:06:D1:CC:8D:4F:82:A4 SHA256 Fingerprint=CB:3C:CB:B7:60:31:E5:E0:13:8F:8D:D3:9A:23:F9:DE:47:FF:C3:5E:43:C1:14:4C:EA:27:D4:6A:5A:B1:CB:5F -----BEGIN CERTIFICATE----- MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI 2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx 1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV 5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY 1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl MrY= -----END CERTIFICATE----- === DigiCert Global Root G3 Certificate: Data: Version: 3 (0x2) Serial Number: 05:55:56:bc:f2:5e:a4:35:35:c3:a4:0f:d5:ab:45:72 Signature Algorithm: ecdsa-with-SHA384 Validity Not Before: Aug 1 12:00:00 2013 GMT Not After : Jan 15 12:00:00 2038 GMT Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root G3 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Subject Key Identifier: B3:DB:48:A4:F9:A1:C5:D8:AE:36:41:CC:11:63:69:62:29:BC:4B:C6 SHA1 Fingerprint=7E:04:DE:89:6A:3E:66:6D:00:E6:87:D3:3F:FA:D9:3B:E8:3D:34:9E SHA256 Fingerprint=31:AD:66:48:F8:10:41:38:C7:38:F3:9E:A4:32:01:33:39:3E:3A:18:CC:02:29:6E:F9:7C:2A:C9:EF:67:31:D0 -----BEGIN CERTIFICATE----- MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 sycX -----END CERTIFICATE----- === DigiCert High Assurance EV Root CA Certificate: Data: Version: 3 (0x2) Serial Number: 02:ac:5c:26:6a:0b:40:9b:8f:0b:79:f2:ae:46:25:77 Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Nov 10 00:00:00 2006 GMT Not After : Nov 10 00:00:00 2031 GMT Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: B1:3E:C3:69:03:F8:BF:47:01:D4:98:26:1A:08:02:EF:63:64:2B:C3 X509v3 Authority Key Identifier: keyid:B1:3E:C3:69:03:F8:BF:47:01:D4:98:26:1A:08:02:EF:63:64:2B:C3 SHA1 Fingerprint=5F:B7:EE:06:33:E2:59:DB:AD:0C:4C:9A:E6:D3:8F:1A:61:C7:DC:25 SHA256 Fingerprint=74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm +9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep +OkuE6N36B9K -----END CERTIFICATE----- === DigiCert Trusted Root G4 Certificate: Data: Version: 3 (0x2) Serial Number: 05:9b:1b:57:9e:8e:21:32:e2:39:07:bd:a7:77:75:5c Signature Algorithm: sha384WithRSAEncryption Validity Not Before: Aug 1 12:00:00 2013 GMT Not After : Jan 15 12:00:00 2038 GMT Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Trusted Root G4 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Subject Key Identifier: EC:D7:E3:82:D2:71:5D:64:4C:DF:2E:67:3F:E7:BA:98:AE:1C:0F:4F SHA1 Fingerprint=DD:FB:16:CD:49:31:C9:73:A2:03:7D:3F:C8:3A:4D:7D:77:5D:05:E4 SHA256 Fingerprint=55:2F:7B:DC:F1:A7:AF:9E:6C:E6:72:01:7F:4F:12:AB:F7:72:40:C7:8E:76:1A:C2:03:D1:D9:D2:0A:C8:99:88 -----BEGIN CERTIFICATE----- MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t 9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd +SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N 0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie 4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 /YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ -----END CERTIFICATE----- ### Digital Signature Trust Co. === DST Root CA X3 Certificate: Data: Version: 3 (0x2) Serial Number: 44:af:b0:80:d6:a3:27:ba:89:30:39:86:2e:f8:40:6b Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Sep 30 21:12:19 2000 GMT Not After : Sep 30 14:01:15 2021 GMT Subject: O=Digital Signature Trust Co., CN=DST Root CA X3 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: C4:A7:B1:A4:7B:2C:71:FA:DB:E1:4B:90:75:FF:C4:15:60:85:89:10 SHA1 Fingerprint=DA:C9:02:4F:54:D8:F6:DF:94:93:5F:B1:73:26:38:CA:6A:D7:7C:13 SHA256 Fingerprint=06:87:26:03:31:A7:24:03:D9:09:F1:05:E6:9B:CF:0D:32:E1:BD:24:93:FF:C6:D9:20:6D:11:BC:D6:77:07:39 -----BEGIN CERTIFICATE----- MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw 7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ -----END CERTIFICATE----- ### Entrust, Inc. === Entrust Root Certification Authority Certificate: Data: Version: 3 (0x2) Serial Number: 1164660820 (0x456b5054) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Nov 27 20:23:42 2006 GMT Not After : Nov 27 20:53:42 2026 GMT Subject: C=US, O=Entrust, Inc., OU=www.entrust.net/CPS is incorporated by reference, OU=(c) 2006 Entrust, Inc., CN=Entrust Root Certification Authority X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Private Key Usage Period: Not Before: Nov 27 20:23:42 2006 GMT, Not After: Nov 27 20:53:42 2026 GMT X509v3 Authority Key Identifier: keyid:68:90:E4:67:A4:A6:53:80:C7:86:66:A4:F1:F7:4B:43:FB:84:BD:6D X509v3 Subject Key Identifier: 68:90:E4:67:A4:A6:53:80:C7:86:66:A4:F1:F7:4B:43:FB:84:BD:6D 1.2.840.113533.7.65.0: 0...V7.1:4.0.... SHA1 Fingerprint=B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9 SHA256 Fingerprint=73:C1:76:43:4F:1B:C6:D5:AD:F4:5B:0E:76:E7:27:28:7C:8D:E5:76:16:C1:E6:E6:14:1A:2B:2C:BC:7D:8E:4C -----BEGIN CERTIFICATE----- MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi 94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP 9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m 0vdXcDazv/wor3ElhVsT/h5/WrQ8 -----END CERTIFICATE----- === Entrust Root Certification Authority - EC1 Certificate: Data: Version: 3 (0x2) Serial Number: a6:8b:79:29:00:00:00:00:50:d0:91:f9 Signature Algorithm: ecdsa-with-SHA384 Validity Not Before: Dec 18 15:25:36 2012 GMT Not After : Dec 18 15:55:36 2037 GMT Subject: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2012 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - EC1 X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: B7:63:E7:1A:DD:8D:E9:08:A6:55:83:A4:E0:6A:50:41:65:11:42:49 SHA1 Fingerprint=20:D8:06:40:DF:9B:25:F5:12:25:3A:11:EA:F7:59:8A:EB:14:B5:47 SHA256 Fingerprint=02:ED:0E:B2:8C:14:DA:45:16:5C:56:67:91:70:0D:64:51:D7:FB:56:F0:B2:AB:1D:3B:8E:B0:70:E5:6E:DF:F5 -----BEGIN CERTIFICATE----- MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G -----END CERTIFICATE----- === Entrust Root Certification Authority - G2 Certificate: Data: Version: 3 (0x2) Serial Number: 1246989352 (0x4a538c28) Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Jul 7 17:25:54 2009 GMT Not After : Dec 7 17:55:54 2030 GMT Subject: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2009 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - G2 X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 6A:72:26:7A:D0:1E:EF:7D:E7:3B:69:51:D4:6C:8D:9F:90:12:66:AB SHA1 Fingerprint=8C:F4:27:FD:79:0C:3A:D1:66:06:8D:E8:1E:57:EF:BB:93:22:72:D4 SHA256 Fingerprint=43:DF:57:74:B0:3E:7F:EF:5F:E4:0D:93:1A:7B:ED:F1:BB:2E:6B:42:73:8C:4E:6D:38:41:10:3D:3A:A7:F3:39 -----BEGIN CERTIFICATE----- MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v 1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== -----END CERTIFICATE----- ### Entrust.net === Entrust.net Certification Authority (2048) Certificate: Data: Version: 3 (0x2) Serial Number: 946069240 (0x3863def8) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Dec 24 17:50:51 1999 GMT Not After : Jul 24 14:15:12 2029 GMT Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70 SHA1 Fingerprint=50:30:06:09:1D:97:D4:F5:AE:39:F7:CB:E7:92:7D:7D:65:2D:34:31 SHA256 Fingerprint=6D:C4:71:72:E0:1C:BC:B0:BF:62:58:0D:89:5F:E2:B8:AC:9A:D4:F8:73:80:1E:0C:10:B9:C8:37:D2:1E:B1:77 -----BEGIN CERTIFICATE----- MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH 4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er fF6adulZkMV8gzURZVE= -----END CERTIFICATE----- === Entrust.net Secure Server Certification Authority Certificate: Data: Version: 3 (0x2) Serial Number: 927650371 (0x374ad243) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: May 25 16:09:40 1999 GMT Not After : May 25 16:39:40 2019 GMT Subject: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: Full Name: DirName: C = US, O = Entrust.net, OU = www.entrust.net/CPS incorp. by ref. (limits liab.), OU = (c) 1999 Entrust.net Limited, CN = Entrust.net Secure Server Certification Authority, CN = CRL1 Full Name: URI:http://www.entrust.net/CRL/net1.crl X509v3 Private Key Usage Period: Not Before: May 25 16:09:40 1999 GMT, Not After: May 25 16:09:40 2019 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A X509v3 Subject Key Identifier: F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... SHA1 Fingerprint=99:A6:9B:E6:1A:FE:88:6B:4D:2B:82:00:7C:B8:54:FC:31:7E:15:39 SHA256 Fingerprint=62:F2:40:27:8C:56:4C:4D:D8:BF:7D:9D:4F:6F:36:6E:A8:94:D2:2F:5F:34:D9:89:A9:83:AC:EC:2F:FF:ED:50 -----BEGIN CERTIFICATE----- MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN 95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd 2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= -----END CERTIFICATE----- ### Equifax === Equifax Secure Certificate Authority Certificate: Data: Version: 3 (0x2) Serial Number: 903804111 (0x35def4cf) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Aug 22 16:41:51 1998 GMT Not After : Aug 22 16:41:51 2018 GMT Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority X509v3 extensions: X509v3 CRL Distribution Points: Full Name: DirName: C = US, O = Equifax, OU = Equifax Secure Certificate Authority, CN = CRL1 X509v3 Private Key Usage Period: Not After: Aug 22 16:41:51 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 X509v3 Subject Key Identifier: 48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0...V3.0c.... SHA1 Fingerprint=D2:32:09:AD:23:D3:14:23:21:74:E4:0D:7F:9D:62:13:97:86:63:3A SHA256 Fingerprint=08:29:7A:40:47:DB:A2:36:80:C7:31:DB:6E:31:76:53:CA:78:48:E1:BE:BD:3A:0B:01:79:A7:07:F9:2C:F1:78 -----BEGIN CERTIFICATE----- MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y 7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh 1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 -----END CERTIFICATE----- ### Equifax Secure Inc. === Equifax Secure eBusiness CA-1 Certificate: Data: Version: 3 (0x2) Serial Number: 4 (0x4) Signature Algorithm: md5WithRSAEncryption Validity Not Before: Jun 21 04:00:00 1999 GMT Not After : Jun 21 04:00:00 2020 GMT Subject: C=US, O=Equifax Secure Inc., CN=Equifax Secure eBusiness CA-1 X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:4A:78:32:52:11:DB:59:16:36:5E:DF:C1:14:36:40:6A:47:7C:4C:A1 X509v3 Subject Key Identifier: 4A:78:32:52:11:DB:59:16:36:5E:DF:C1:14:36:40:6A:47:7C:4C:A1 SHA1 Fingerprint=DA:40:18:8B:91:89:A3:ED:EE:AE:DA:97:FE:2F:9D:F5:B7:D1:8A:41 SHA256 Fingerprint=CF:56:FF:46:A4:A1:86:10:9D:D9:65:84:B5:EE:B5:8A:51:0C:42:75:B0:E5:F9:4F:40:BB:AE:86:5E:19:F6:73 -----BEGIN CERTIFICATE----- MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN /Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== -----END CERTIFICATE----- === Equifax Secure Global eBusiness CA-1 Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Validity Not Before: Jun 21 04:00:00 1999 GMT Not After : Jun 21 04:00:00 2020 GMT Subject: C=US, O=Equifax Secure Inc., CN=Equifax Secure Global eBusiness CA-1 X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:BE:A8:A0:74:72:50:6B:44:B7:C9:23:D8:FB:A8:FF:B3:57:6B:68:6C X509v3 Subject Key Identifier: BE:A8:A0:74:72:50:6B:44:B7:C9:23:D8:FB:A8:FF:B3:57:6B:68:6C SHA1 Fingerprint=7E:78:4A:10:1C:82:65:CC:2D:E1:F1:6D:47:B4:40:CA:D9:0A:19:45 SHA256 Fingerprint=5F:0B:62:EA:B5:E3:53:EA:65:21:65:16:58:FB:B6:53:59:F4:43:28:0A:4A:FB:D1:04:D7:7D:10:F9:F0:4C:07 -----BEGIN CERTIFICATE----- MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc 58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv 8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV -----END CERTIFICATE----- ### GeoTrust Inc. === GeoTrust Global CA Certificate: Data: Version: 3 (0x2) Serial Number: 144470 (0x23456) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: May 21 04:00:00 2002 GMT Not After : May 21 04:00:00 2022 GMT Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E X509v3 Authority Key Identifier: keyid:C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E SHA1 Fingerprint=DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12 SHA256 Fingerprint=FF:85:6A:2D:25:1D:CD:88:D3:66:56:F4:50:12:67:98:CF:AB:AA:DE:40:79:9C:72:2D:E4:D2:B5:DB:36:A7:3A -----BEGIN CERTIFICATE----- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU 1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== -----END CERTIFICATE----- === GeoTrust Global CA 2 Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Mar 4 05:00:00 2004 GMT Not After : Mar 4 05:00:00 2019 GMT Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA 2 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 71:38:36:F2:02:31:53:47:2B:6E:BA:65:46:A9:10:15:58:20:05:09 X509v3 Authority Key Identifier: keyid:71:38:36:F2:02:31:53:47:2B:6E:BA:65:46:A9:10:15:58:20:05:09 X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign SHA1 Fingerprint=A9:E9:78:08:14:37:58:88:F2:05:19:B0:6D:2B:0D:2B:60:16:90:7D SHA256 Fingerprint=CA:2D:82:A0:86:77:07:2F:8A:B6:76:4F:F0:35:67:6C:FE:3E:5E:32:5E:01:21:72:DF:3F:92:09:6D:B7:9B:85 -----BEGIN CERTIFICATE----- MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8 Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL 5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7 S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe 2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv /NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0 abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz 4iIprn2DQKi6bA== -----END CERTIFICATE----- === GeoTrust Primary Certification Authority Certificate: Data: Version: 3 (0x2) Serial Number: 18:ac:b5:6a:fd:69:b6:15:3a:63:6c:af:da:fa:c4:a1 Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Nov 27 00:00:00 2006 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 2C:D5:50:41:97:15:8B:F0:8F:36:61:5B:4A:FB:6B:D9:99:C9:33:92 SHA1 Fingerprint=32:3C:11:8E:1B:F7:B8:B6:52:54:E2:E2:10:0D:D6:02:90:37:F0:96 SHA256 Fingerprint=37:D5:10:06:C5:12:EA:AB:62:64:21:F1:EC:8C:92:01:3F:C5:F8:2A:E9:8E:E5:33:EB:46:19:B8:DE:B4:D0:6C -----BEGIN CERTIFICATE----- MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl 4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= -----END CERTIFICATE----- === GeoTrust Primary Certification Authority - G2 Certificate: Data: Version: 3 (0x2) Serial Number: 3c:b2:f4:48:0a:00:e2:fe:eb:24:3b:5e:60:3e:c3:6b Signature Algorithm: ecdsa-with-SHA384 Validity Not Before: Nov 5 00:00:00 2007 GMT Not After : Jan 18 23:59:59 2038 GMT Subject: C=US, O=GeoTrust Inc., OU=(c) 2007 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G2 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 15:5F:35:57:51:55:FB:25:B2:AD:03:69:FC:01:A3:FA:BE:11:55:D5 SHA1 Fingerprint=8D:17:84:D5:37:F3:03:7D:EC:70:FE:57:8B:51:9A:99:E6:10:D7:B0 SHA256 Fingerprint=5E:DB:7A:C4:3B:82:A0:6A:87:61:E8:D7:BE:49:79:EB:F2:61:1F:7D:D7:9B:F9:1C:1C:6B:56:6A:21:9E:D7:66 -----BEGIN CERTIFICATE----- MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz rD6ogRLQy7rQkgu2npaqBA+K -----END CERTIFICATE----- === GeoTrust Primary Certification Authority - G3 Certificate: Data: Version: 3 (0x2) Serial Number: 15:ac:6e:94:19:b2:79:4b:41:f6:27:a9:c3:18:0f:1f Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Apr 2 00:00:00 2008 GMT Not After : Dec 1 23:59:59 2037 GMT Subject: C=US, O=GeoTrust Inc., OU=(c) 2008 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G3 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: C4:79:CA:8E:A1:4E:03:1D:1C:DC:6B:DB:31:5B:94:3E:3F:30:7F:2D SHA1 Fingerprint=03:9E:ED:B8:0B:E7:A0:3C:69:53:89:3B:20:D2:D9:32:3A:4C:2A:FD SHA256 Fingerprint=B4:78:B8:12:25:0D:F8:78:63:5C:2A:A7:EC:7D:15:5E:AA:62:5E:E8:29:16:E2:CD:29:43:61:88:6C:D1:FB:D4 -----BEGIN CERTIFICATE----- MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz +uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn 5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G spki4cErx5z481+oghLrGREt -----END CERTIFICATE----- === GeoTrust Universal CA Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Mar 4 05:00:00 2004 GMT Not After : Mar 4 05:00:00 2029 GMT Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Universal CA X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: DA:BB:2E:AA:B0:0C:B8:88:26:51:74:5C:6D:03:D3:C0:D8:8F:7A:D6 X509v3 Authority Key Identifier: keyid:DA:BB:2E:AA:B0:0C:B8:88:26:51:74:5C:6D:03:D3:C0:D8:8F:7A:D6 X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign SHA1 Fingerprint=E6:21:F3:35:43:79:05:9A:4B:68:30:9D:8A:2F:74:22:15:87:EC:79 SHA256 Fingerprint=A0:45:9B:9F:63:B2:25:59:F5:FA:5D:4C:6D:B3:F9:F7:2F:F1:93:42:03:35:78:F0:73:BF:1D:1B:46:CB:B9:12 -----BEGIN CERTIFICATE----- MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB /wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG 9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= -----END CERTIFICATE----- === GeoTrust Universal CA 2 Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Mar 4 05:00:00 2004 GMT Not After : Mar 4 05:00:00 2029 GMT Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Universal CA 2 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 76:F3:55:E1:FA:A4:36:FB:F0:9F:5C:62:71:ED:3C:F4:47:38:10:2B X509v3 Authority Key Identifier: keyid:76:F3:55:E1:FA:A4:36:FB:F0:9F:5C:62:71:ED:3C:F4:47:38:10:2B X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign SHA1 Fingerprint=37:9A:19:7B:41:85:45:35:0C:A6:03:69:F3:3C:2E:AF:47:4F:20:79 SHA256 Fingerprint=A0:23:4F:3B:C8:52:7C:A5:62:8E:EC:81:AD:5D:69:89:5D:A5:68:0D:C9:1D:1C:B8:47:7F:33:F8:78:B9:5B:0B -----BEGIN CERTIFICATE----- MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m 1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH 6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS -----END CERTIFICATE----- ### GlobalSign === GlobalSign Certificate: Data: Version: 3 (0x2) Serial Number: 04:00:00:00:00:01:21:58:53:08:a2 Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Mar 18 10:00:00 2009 GMT Not After : Mar 18 10:00:00 2029 GMT Subject: OU=GlobalSign Root CA - R3, O=GlobalSign, CN=GlobalSign X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 8F:F0:4B:7F:A8:2E:45:24:AE:4D:50:FA:63:9A:8B:DE:E2:DD:1B:BC SHA1 Fingerprint=D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD SHA256 Fingerprint=CB:B5:22:D7:B7:F1:27:AD:6A:01:13:86:5B:DF:1C:D4:10:2E:7D:07:59:AF:63:5A:7C:F4:72:0D:C9:63:C5:3B -----BEGIN CERTIFICATE----- MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK 6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH WD9f -----END CERTIFICATE----- ### GlobalSign nv-sa === GlobalSign Root CA Certificate: Data: Version: 3 (0x2) Serial Number: 04:00:00:00:00:01:15:4b:5a:c3:94 Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Sep 1 12:00:00 1998 GMT Not After : Jan 28 12:00:00 2028 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B SHA1 Fingerprint=B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C SHA256 Fingerprint=EB:D4:10:40:E4:BB:3E:C7:42:C9:E3:81:D3:1E:F2:A4:1A:48:B6:68:5C:96:E7:CE:F3:C1:DF:6C:D4:33:1C:99 -----BEGIN CERTIFICATE----- MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp 1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE 38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== -----END CERTIFICATE----- ### GoDaddy.com, Inc. === Go Daddy Root Certificate Authority - G2 Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Sep 1 00:00:00 2009 GMT Not After : Dec 31 23:59:59 2037 GMT Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 3A:9A:85:07:10:67:28:B6:EF:F6:BD:05:41:6E:20:C1:94:DA:0F:DE SHA1 Fingerprint=47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B SHA256 Fingerprint=45:14:0B:32:47:EB:9C:C8:C5:B4:F0:D7:B5:30:91:F7:32:92:08:9E:6E:5A:63:E2:74:9D:D3:AC:A9:19:8E:DA -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH /PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu 9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo 2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI 4uJEvlz36hz1 -----END CERTIFICATE----- ### GTE Corporation === GTE CyberTrust Global Root Certificate: Data: Version: 1 (0x0) Serial Number: 421 (0x1a5) Signature Algorithm: md5WithRSAEncryption Validity Not Before: Aug 13 00:29:00 1998 GMT Not After : Aug 13 23:59:00 2018 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root SHA1 Fingerprint=97:81:79:50:D8:1C:96:70:CC:34:D8:09:CF:79:44:31:36:7E:F4:74 SHA256 Fingerprint=A5:31:25:18:8D:21:10:AA:96:4B:02:C7:B7:C6:DA:32:03:17:08:94:E5:FB:71:FF:FB:66:67:D5:E6:81:0A:36 -----BEGIN CERTIFICATE----- MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ -----END CERTIFICATE----- ### NetLock Kft. === NetLock Arany (Class Gold) F\U0151tan\FAs\EDtv\E1ny Certificate: Data: Version: 3 (0x2) Serial Number: 80544274841616 (0x49412ce40010) Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Dec 11 15:08:21 2008 GMT Not After : Dec 6 15:08:21 2028 GMT Subject: C=HU, L=Budapest, O=NetLock Kft., OU=Tan\xC3\xBAs\xC3\xADtv\xC3\xA1nykiad\xC3\xB3k (Certification Services), CN=NetLock Arany (Class Gold) F\xC5\x91tan\xC3\xBAs\xC3\xADtv\xC3\xA1ny X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:4 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: CC:FA:67:93:F0:B6:B8:D0:A5:C0:1E:F3:53:FD:8C:53:DF:83:D7:96 SHA1 Fingerprint=06:08:3F:59:3F:15:A1:04:A0:69:A4:6B:A9:03:D0:06:B7:97:09:91 SHA256 Fingerprint=6C:61:DA:C3:A2:DE:F0:31:50:6B:E0:36:D2:A6:FE:40:19:94:FB:D1:3D:F9:C8:D4:66:59:92:74:C4:46:EC:98 -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C +C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= -----END CERTIFICATE----- ### Network Solutions L.L.C. === Network Solutions Certificate Authority Certificate: Data: Version: 3 (0x2) Serial Number: 57:cb:33:6f:c2:5c:16:e6:47:16:17:e3:90:31:68:e0 Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Dec 1 00:00:00 2006 GMT Not After : Dec 31 23:59:59 2029 GMT Subject: C=US, O=Network Solutions L.L.C., CN=Network Solutions Certificate Authority X509v3 extensions: X509v3 Subject Key Identifier: 21:30:C9:FB:00:D7:4E:98:DA:87:AA:2A:D0:A7:2E:B1:40:31:A7:4C X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 CRL Distribution Points: Full Name: URI:http://crl.netsolssl.com/NetworkSolutionsCertificateAuthority.crl SHA1 Fingerprint=74:F8:A3:C3:EF:E7:B3:90:06:4B:83:90:3C:21:64:60:20:E5:DF:CE SHA256 Fingerprint=15:F0:BA:00:A3:AC:7A:F3:AC:88:4C:07:2B:10:11:A0:77:BD:77:C0:97:F4:01:64:B2:F8:59:8A:BD:83:86:0C -----BEGIN CERTIFICATE----- MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH /nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey -----END CERTIFICATE----- ### QuoVadis Limited === QuoVadis Root CA 1 G3 Certificate: Data: Version: 3 (0x2) Serial Number: 78:58:5f:2e:ad:2c:19:4b:e3:37:07:35:34:13:28:b5:96:d4:65:93 Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Jan 12 17:27:44 2012 GMT Not After : Jan 12 17:27:44 2042 GMT Subject: C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 1 G3 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: A3:97:D6:F3:5E:A2:10:E1:AB:45:9F:3C:17:64:3C:EE:01:70:9C:CC SHA1 Fingerprint=1B:8E:EA:57:96:29:1A:C9:39:EA:B8:0A:81:1A:73:73:C0:93:79:67 SHA256 Fingerprint=8A:86:6F:D1:B2:76:B5:7E:57:8E:92:1C:65:82:8A:2B:ED:58:E9:F2:F2:88:05:41:34:B7:F1:F4:BF:C9:CC:74 -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh 4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc 3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD -----END CERTIFICATE----- === QuoVadis Root CA 2 Certificate: Data: Version: 3 (0x2) Serial Number: 1289 (0x509) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Nov 24 18:27:00 2006 GMT Not After : Nov 24 18:23:33 2031 GMT Subject: C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 2 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 1A:84:62:BC:48:4C:33:25:04:D4:EE:D0:F6:03:C4:19:46:D1:94:6B X509v3 Authority Key Identifier: keyid:1A:84:62:BC:48:4C:33:25:04:D4:EE:D0:F6:03:C4:19:46:D1:94:6B DirName:/C=BM/O=QuoVadis Limited/CN=QuoVadis Root CA 2 serial:05:09 SHA1 Fingerprint=CA:3A:FB:CF:12:40:36:4B:44:B2:16:20:88:80:48:39:19:93:7C:F7 SHA256 Fingerprint=85:A0:DD:7D:D7:20:AD:B7:FF:05:F8:3D:54:2B:20:9D:C7:FF:45:28:F7:D6:77:B1:83:89:FE:A5:E5:C4:9E:86 -----BEGIN CERTIFICATE----- MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp +ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og /zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y 4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza 8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u -----END CERTIFICATE----- === QuoVadis Root CA 2 G3 Certificate: Data: Version: 3 (0x2) Serial Number: 44:57:34:24:5b:81:89:9b:35:f2:ce:b8:2b:3b:5b:a7:26:f0:75:28 Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Jan 12 18:59:32 2012 GMT Not After : Jan 12 18:59:32 2042 GMT Subject: C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 2 G3 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: ED:E7:6F:76:5A:BF:60:EC:49:5B:C6:A5:77:BB:72:16:71:9B:C4:3D SHA1 Fingerprint=09:3C:61:F3:8B:8B:DC:7D:55:DF:75:38:02:05:00:E1:25:F5:C8:36 SHA256 Fingerprint=8F:E4:FB:0A:F9:3A:4D:0D:67:DB:0B:EB:B2:3E:37:C7:1B:F3:25:DC:BC:DD:24:0E:A0:4D:AF:58:B4:7E:18:40 -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz 8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l 7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE +V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M -----END CERTIFICATE----- === QuoVadis Root CA 3 Certificate: Data: Version: 3 (0x2) Serial Number: 1478 (0x5c6) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Nov 24 19:11:23 2006 GMT Not After : Nov 24 19:06:44 2031 GMT Subject: C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 3 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.8024.0.3 User Notice: Explicit Text: Any use of this Certificate constitutes acceptance of the QuoVadis Root CA 3 Certificate Policy / Certification Practice Statement. CPS: http://www.quovadisglobal.com/cps X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Subject Key Identifier: F2:C0:13:E0:82:43:3E:FB:EE:2F:67:32:96:35:5C:DB:B8:CB:02:D0 X509v3 Authority Key Identifier: keyid:F2:C0:13:E0:82:43:3E:FB:EE:2F:67:32:96:35:5C:DB:B8:CB:02:D0 DirName:/C=BM/O=QuoVadis Limited/CN=QuoVadis Root CA 3 serial:05:C6 SHA1 Fingerprint=1F:49:14:F7:D8:74:95:1D:DD:AE:02:C0:BE:FD:3A:2D:82:75:51:85 SHA256 Fingerprint=18:F1:FC:7F:20:5D:F8:AD:DD:EB:7F:E0:07:DD:57:E3:AF:37:5A:9C:4D:8D:73:54:6B:F4:F1:FE:D1:E1:8D:35 -----BEGIN CERTIFICATE----- MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB 4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd 8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A 4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd +LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B 4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK 4SVhM7JZG+Ju1zdXtg2pEto= -----END CERTIFICATE----- === QuoVadis Root CA 3 G3 Certificate: Data: Version: 3 (0x2) Serial Number: 2e:f5:9b:02:28:a7:db:7a:ff:d5:a3:a9:ee:bd:03:a0:cf:12:6a:1d Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Jan 12 20:26:32 2012 GMT Not After : Jan 12 20:26:32 2042 GMT Subject: C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 3 G3 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: C6:17:D0:BC:A8:EA:02:43:F2:1B:06:99:5D:2B:90:20:B9:D7:9C:E4 SHA1 Fingerprint=48:12:BD:92:3C:A8:C4:39:06:E7:30:6D:27:96:E6:A4:CF:22:2E:7D SHA256 Fingerprint=88:EF:81:DE:20:2E:B0:18:45:2E:43:F8:64:72:5C:EA:5F:BD:1F:C2:D9:D2:05:73:07:09:C5:D8:B8:69:0F:46 -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR /xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP 0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf 3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl 8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 -----END CERTIFICATE----- === QuoVadis Root Certification Authority Certificate: Data: Version: 3 (0x2) Serial Number: 985026699 (0x3ab6508b) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Mar 19 18:33:33 2001 GMT Not After : Mar 17 18:33:33 2021 GMT Subject: C=BM, O=QuoVadis Limited, OU=Root Certification Authority, CN=QuoVadis Root Certification Authority X509v3 extensions: Authority Information Access: OCSP - URI:https://ocsp.quovadisoffshore.com X509v3 Basic Constraints: critical CA:TRUE X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.8024.0.1 User Notice: Explicit Text: Reliance on the QuoVadis Root Certificate by any party assumes acceptance of the then applicable standard terms and conditions of use, certification practices, and the QuoVadis Certificate Policy. CPS: http://www.quovadis.bm X509v3 Subject Key Identifier: 8B:4B:6D:ED:D3:29:B9:06:19:EC:39:39:A9:F0:97:84:6A:CB:EF:DF X509v3 Authority Key Identifier: keyid:8B:4B:6D:ED:D3:29:B9:06:19:EC:39:39:A9:F0:97:84:6A:CB:EF:DF DirName:/C=BM/O=QuoVadis Limited/OU=Root Certification Authority/CN=QuoVadis Root Certification Authority serial:3A:B6:50:8B X509v3 Key Usage: critical Certificate Sign, CRL Sign SHA1 Fingerprint=DE:3F:40:BD:50:93:D3:9B:6C:60:F6:DA:BC:07:62:01:00:89:76:C9 SHA256 Fingerprint=A4:5E:DE:3B:BB:F0:9C:8A:E1:5C:72:EF:C0:72:68:D6:93:A2:1C:99:6F:D5:1E:67:CA:07:94:60:FD:6D:88:73 -----BEGIN CERTIFICATE----- MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK SnQ2+Q== -----END CERTIFICATE----- ### Starfield Technologies, Inc. === Starfield Class 2 Certification Authority Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Jun 29 17:39:16 2004 GMT Not After : Jun 29 17:39:16 2034 GMT Subject: C=US, O=Starfield Technologies, Inc., OU=Starfield Class 2 Certification Authority X509v3 extensions: X509v3 Subject Key Identifier: BF:5F:B7:D1:CE:DD:1F:86:F4:5B:55:AC:DC:D7:10:C2:0E:A9:88:E7 X509v3 Authority Key Identifier: keyid:BF:5F:B7:D1:CE:DD:1F:86:F4:5B:55:AC:DC:D7:10:C2:0E:A9:88:E7 DirName:/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority serial:00 X509v3 Basic Constraints: CA:TRUE SHA1 Fingerprint=AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A SHA256 Fingerprint=14:65:FA:20:53:97:B8:76:FA:A6:F0:A9:95:8E:55:90:E4:0F:CC:7F:AA:4F:B7:C2:C8:67:75:21:FB:5F:B6:58 -----BEGIN CERTIFICATE----- MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf 8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN +lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA 1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= -----END CERTIFICATE----- === Starfield Root Certificate Authority - G2 Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Sep 1 00:00:00 2009 GMT Not After : Dec 31 23:59:59 2037 GMT Subject: C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Root Certificate Authority - G2 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 7C:0C:32:1F:A7:D9:30:7F:C4:7D:68:A3:62:A8:A1:CE:AB:07:5B:27 SHA1 Fingerprint=B5:1C:06:7C:EE:2B:0C:3D:F8:55:AB:2D:92:F4:FE:39:D4:E7:0F:0E SHA256 Fingerprint=2C:E1:CB:0B:F9:D2:F9:E1:02:99:3F:BE:21:51:52:C3:B2:DD:0C:AB:DE:1C:68:E5:31:9B:83:91:54:DB:B7:F5 -----BEGIN CERTIFICATE----- MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg 8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 -----END CERTIFICATE----- === Starfield Services Root Certificate Authority - G2 Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Sep 1 00:00:00 2009 GMT Not After : Dec 31 23:59:59 2037 GMT Subject: C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Services Root Certificate Authority - G2 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 9C:5F:00:DF:AA:01:D7:30:2B:38:88:A2:B8:6D:4A:9C:F2:11:91:83 SHA1 Fingerprint=92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F SHA256 Fingerprint=56:8D:69:05:A2:C8:87:08:A4:B3:02:51:90:ED:CF:ED:B1:97:4A:60:6A:13:C6:E5:29:0F:CB:2A:E6:3E:DA:B5 -----BEGIN CERTIFICATE----- MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk 6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn 0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN sSi6 -----END CERTIFICATE----- ### StartCom Ltd. === StartCom Certification Authority Certificate: Data: Version: 3 (0x2) Serial Number: 45 (0x2d) Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Sep 17 19:46:37 2006 GMT Not After : Sep 17 19:46:36 2036 GMT Subject: C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Certification Authority X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 4E:0B:EF:1A:A4:40:5B:A5:17:69:87:30:CA:34:68:43:D0:41:AE:F2 X509v3 Authority Key Identifier: keyid:4E:0B:EF:1A:A4:40:5B:A5:17:69:87:30:CA:34:68:43:D0:41:AE:F2 X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.23223.1.1.1 CPS: http://www.startssl.com/policy.pdf CPS: http://www.startssl.com/intermediate.pdf User Notice: Organization: Start Commercial (StartCom) Ltd. Number: 1 Explicit Text: Limited Liability, read the section *Legal Limitations* of the StartCom Certification Authority Policy available at http://www.startssl.com/policy.pdf Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Netscape Comment: StartCom Free SSL Certification Authority SHA1 Fingerprint=A3:F1:33:3F:E2:42:BF:CF:C5:D1:4E:8F:39:42:98:40:68:10:D1:A0 SHA256 Fingerprint=E1:78:90:EE:09:A3:FB:F4:F4:8B:9C:41:4A:17:D6:37:B7:A5:06:47:E9:BC:75:23:22:72:7F:CC:17:42:A9:11 -----BEGIN CERTIFICATE----- MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9 MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w +2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B 26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0 YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0 aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93 d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1 dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst 0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK 1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ 8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm fyWl8kgAwKQB2j8= -----END CERTIFICATE----- === StartCom Certification Authority G2 Certificate: Data: Version: 3 (0x2) Serial Number: 59 (0x3b) Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Jan 1 01:00:01 2010 GMT Not After : Dec 31 23:59:01 2039 GMT Subject: C=IL, O=StartCom Ltd., CN=StartCom Certification Authority G2 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 4B:C5:B4:40:6B:AD:1C:B3:A5:1C:65:6E:46:36:89:87:05:0C:0E:B6 SHA1 Fingerprint=31:F1:FD:68:22:63:20:EE:C6:3B:3F:9D:EA:4A:3E:53:7C:7C:39:17 SHA256 Fingerprint=C7:BA:65:67:DE:93:A7:98:AE:1F:AA:79:1E:71:2D:37:8F:AE:1F:93:C4:39:7F:EA:44:1B:B7:CB:E6:FD:59:95 -----BEGIN CERTIFICATE----- MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1 OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/ Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM 0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9 Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K 2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl 6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK 9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI -----END CERTIFICATE----- ### SwissSign AG === SwissSign Gold CA - G2 Certificate: Data: Version: 3 (0x2) Serial Number: 13492815561806991280 (0xbb401c43f55e4fb0) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Oct 25 08:30:35 2006 GMT Not After : Oct 25 08:30:35 2036 GMT Subject: C=CH, O=SwissSign AG, CN=SwissSign Gold CA - G2 X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 5B:25:7B:96:A4:65:51:7E:B8:39:F3:C0:78:66:5E:E8:3A:E7:F0:EE X509v3 Authority Key Identifier: keyid:5B:25:7B:96:A4:65:51:7E:B8:39:F3:C0:78:66:5E:E8:3A:E7:F0:EE X509v3 Certificate Policies: Policy: 2.16.756.1.89.1.2.1.1 CPS: http://repository.swisssign.com/ SHA1 Fingerprint=D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61 SHA256 Fingerprint=62:DD:0B:E9:B9:F5:0A:16:3E:A0:F8:E7:5C:05:3B:1E:CA:57:EA:55:C8:68:8F:64:7C:68:81:F2:C8:35:7B:95 -----BEGIN CERTIFICATE----- MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c 6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn 8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a 77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ -----END CERTIFICATE----- === SwissSign Platinum CA - G2 Certificate: Data: Version: 3 (0x2) Serial Number: 5670595323396054351 (0x4eb200670c035d4f) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Oct 25 08:36:00 2006 GMT Not After : Oct 25 08:36:00 2036 GMT Subject: C=CH, O=SwissSign AG, CN=SwissSign Platinum CA - G2 X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 50:AF:CC:07:87:15:47:6F:38:C5:B4:65:D1:DE:95:AA:E9:DF:9C:CC X509v3 Authority Key Identifier: keyid:50:AF:CC:07:87:15:47:6F:38:C5:B4:65:D1:DE:95:AA:E9:DF:9C:CC X509v3 Certificate Policies: Policy: 2.16.756.1.89.1.1.1.1 CPS: http://repository.swisssign.com/ SHA1 Fingerprint=56:E0:FA:C0:3B:8F:18:23:55:18:E5:D3:11:CA:E8:C2:43:31:AB:66 SHA256 Fingerprint=3B:22:2E:56:67:11:E9:92:30:0D:C0:B1:5A:B9:47:3D:AF:DE:F8:C8:4D:0C:EF:7D:33:17:B4:C1:82:1D:14:36 -----BEGIN CERTIFICATE----- MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+ 6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl +zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0 ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0 uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+ FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7 jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/ u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1 puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== -----END CERTIFICATE----- === SwissSign Silver CA - G2 Certificate: Data: Version: 3 (0x2) Serial Number: 5700383053117599563 (0x4f1bd42f54bb2f4b) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Oct 25 08:32:46 2006 GMT Not After : Oct 25 08:32:46 2036 GMT Subject: C=CH, O=SwissSign AG, CN=SwissSign Silver CA - G2 X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 17:A0:CD:C1:E4:41:B6:3A:5B:3B:CB:45:9D:BD:1C:C2:98:FA:86:58 X509v3 Authority Key Identifier: keyid:17:A0:CD:C1:E4:41:B6:3A:5B:3B:CB:45:9D:BD:1C:C2:98:FA:86:58 X509v3 Certificate Policies: Policy: 2.16.756.1.89.1.3.1.1 CPS: http://repository.swisssign.com/ SHA1 Fingerprint=9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB SHA256 Fingerprint=BE:6C:4D:A2:BB:B9:BA:59:B6:F3:93:97:68:37:42:46:C3:C0:05:99:3F:A9:8F:02:0D:1D:ED:BE:D4:8A:81:D5 -----BEGIN CERTIFICATE----- MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH 6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ 2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u -----END CERTIFICATE----- ### T-Systems Enterprise Services GmbH === T-TeleSec GlobalRoot Class 2 Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Oct 1 10:40:14 2008 GMT Not After : Oct 1 23:59:59 2033 GMT Subject: C=DE, O=T-Systems Enterprise Services GmbH, OU=T-Systems Trust Center, CN=T-TeleSec GlobalRoot Class 2 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: BF:59:20:36:00:79:A0:A0:22:6B:8C:D5:F2:61:D2:B8:2C:CB:82:4A SHA1 Fingerprint=59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9 SHA256 Fingerprint=91:E2:F5:78:8D:58:10:EB:A7:BA:58:73:7D:E1:54:8A:8E:CA:CD:01:45:98:BC:0B:14:3E:04:1B:17:05:25:52 -----BEGIN CERTIFICATE----- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi 1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN 9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP BSeOE6Fuwg== -----END CERTIFICATE----- === T-TeleSec GlobalRoot Class 3 Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Oct 1 10:29:56 2008 GMT Not After : Oct 1 23:59:59 2033 GMT Subject: C=DE, O=T-Systems Enterprise Services GmbH, OU=T-Systems Trust Center, CN=T-TeleSec GlobalRoot Class 3 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: B5:03:F7:76:3B:61:82:6A:12:AA:18:53:EB:03:21:94:BF:FE:CE:CA SHA1 Fingerprint=55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1 SHA256 Fingerprint=FD:73:DA:D3:1C:64:4F:F1:B4:3B:EF:0C:CD:DA:96:71:0B:9C:D9:87:5E:CA:7E:31:70:7A:F3:E9:6D:52:2B:BD -----BEGIN CERTIFICATE----- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN 8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ 1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT 91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p TpPDpFQUWw== -----END CERTIFICATE----- ### Thawte Consulting cc === Thawte Premium Server CA Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Validity Not Before: Aug 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE SHA1 Fingerprint=62:7F:8D:78:27:65:63:99:D2:7D:7F:90:44:C9:FE:B3:F3:3E:FA:9A SHA256 Fingerprint=AB:70:36:36:5C:71:54:AA:29:C2:C2:9F:5D:41:91:16:3B:16:2A:22:25:01:13:57:D5:6D:07:FF:A7:BC:1F:72 -----BEGIN CERTIFICATE----- MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG 9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== -----END CERTIFICATE----- === Thawte Server CA Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Validity Not Before: Aug 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/emailAddress=server-certs@thawte.com X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE SHA1 Fingerprint=23:E5:94:94:51:95:F2:41:48:03:B4:D5:64:D2:A3:A3:F5:D8:8B:8C SHA256 Fingerprint=B4:41:0B:73:E2:E6:EA:CA:47:FB:C4:2F:8F:A4:01:8A:F4:38:1D:C5:4C:FA:A8:44:50:46:1E:ED:09:45:4D:E9 -----BEGIN CERTIFICATE----- MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG 7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ qdq5snUb9kLy78fyGPmJvKP/iiMucEc= -----END CERTIFICATE----- ### thawte, Inc. === thawte Primary Root CA Certificate: Data: Version: 3 (0x2) Serial Number: 34:4e:d5:57:20:d5:ed:ec:49:f4:2f:ce:37:db:2b:6d Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Nov 17 00:00:00 2006 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2006 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 7B:5B:45:CF:AF:CE:CB:7A:FD:31:92:1A:6A:B6:F3:46:EB:57:48:50 SHA1 Fingerprint=91:C6:D6:EE:3E:8A:C8:63:84:E5:48:C2:99:29:5C:75:6C:81:7B:81 SHA256 Fingerprint=8D:72:2F:81:A9:C1:13:C0:79:1D:F1:36:A2:96:6D:B2:6C:95:0A:97:1D:B4:6B:41:99:F4:EA:54:B7:8B:FB:9F -----BEGIN CERTIFICATE----- MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta 3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk 6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 /qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 jVaMaA== -----END CERTIFICATE----- === thawte Primary Root CA - G2 Certificate: Data: Version: 3 (0x2) Serial Number: 35:fc:26:5c:d9:84:4f:c9:3d:26:3d:57:9b:ae:d7:56 Signature Algorithm: ecdsa-with-SHA384 Validity Not Before: Nov 5 00:00:00 2007 GMT Not After : Jan 18 23:59:59 2038 GMT Subject: C=US, O=thawte, Inc., OU=(c) 2007 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G2 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 9A:D8:00:30:00:E7:6B:7F:85:18:EE:8B:B6:CE:8A:0C:F8:11:E1:BB SHA1 Fingerprint=AA:DB:BC:22:23:8F:C4:01:A1:27:BB:38:DD:F4:1D:DB:08:9E:F0:12 SHA256 Fingerprint=A4:31:0D:50:AF:18:A6:44:71:90:37:2A:86:AF:AF:8B:95:1F:FB:43:1D:83:7F:1E:56:88:B4:59:71:ED:15:57 -----BEGIN CERTIFICATE----- MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== -----END CERTIFICATE----- === thawte Primary Root CA - G3 Certificate: Data: Version: 3 (0x2) Serial Number: 60:01:97:b7:46:a7:ea:b4:b4:9a:d6:4b:2f:f7:90:fb Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Apr 2 00:00:00 2008 GMT Not After : Dec 1 23:59:59 2037 GMT Subject: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2008 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G3 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: AD:6C:AA:94:60:9C:ED:E4:FF:FA:3E:0A:74:2B:63:03:F7:B6:59:BF SHA1 Fingerprint=F1:8B:53:8D:1B:E9:03:B6:A6:F0:56:43:5B:17:15:89:CA:F3:6B:F2 SHA256 Fingerprint=4B:03:F4:58:07:AD:70:F2:1B:FC:2C:AE:71:C9:FD:E4:60:4C:06:4C:F5:FF:B6:86:BA:E5:DB:AA:D7:FD:D3:4C -----BEGIN CERTIFICATE----- MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA 2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu MdRAGmI0Nj81Aa6sY6A= -----END CERTIFICATE----- ### The Go Daddy Group, Inc. === Go Daddy Class 2 Certification Authority Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Jun 29 17:06:20 2004 GMT Not After : Jun 29 17:06:20 2034 GMT Subject: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority X509v3 extensions: X509v3 Subject Key Identifier: D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3 X509v3 Authority Key Identifier: keyid:D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3 DirName:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority serial:00 X509v3 Basic Constraints: CA:TRUE SHA1 Fingerprint=27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4 SHA256 Fingerprint=C3:84:6B:F2:4B:9E:93:CA:64:27:4C:0E:C6:7C:1E:CC:5E:02:4F:FC:AC:D2:D7:40:19:35:0E:81:FE:54:6A:E4 -----BEGIN CERTIFICATE----- MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h /t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf ReYNnyicsbkqWletNw+vHX/bvZ8= -----END CERTIFICATE----- ### The USERTRUST Network === USERTrust ECC Certification Authority Certificate: Data: Version: 3 (0x2) Serial Number: 5c:8b:99:c5:5a:94:c5:d2:71:56:de:cd:89:80:cc:26 Signature Algorithm: ecdsa-with-SHA384 Validity Not Before: Feb 1 00:00:00 2010 GMT Not After : Jan 18 23:59:59 2038 GMT Subject: C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust ECC Certification Authority X509v3 extensions: X509v3 Subject Key Identifier: 3A:E1:09:86:D4:CF:19:C2:96:76:74:49:76:DC:E0:35:C6:63:63:9A X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE SHA1 Fingerprint=D1:CB:CA:5D:B2:D5:2A:7F:69:3B:67:4D:E5:F0:5A:1D:0C:95:7D:F0 SHA256 Fingerprint=4F:F4:60:D5:4B:9C:86:DA:BF:BC:FC:57:12:E0:40:0D:2B:ED:3F:BC:4D:4F:BD:AA:86:E0:6A:DC:D2:A9:AD:7A -----BEGIN CERTIFICATE----- MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= -----END CERTIFICATE----- === USERTrust RSA Certification Authority Certificate: Data: Version: 3 (0x2) Serial Number: 01:fd:6d:30:fc:a3:ca:51:a8:1b:bc:64:0e:35:03:2d Signature Algorithm: sha384WithRSAEncryption Validity Not Before: Feb 1 00:00:00 2010 GMT Not After : Jan 18 23:59:59 2038 GMT Subject: C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority X509v3 extensions: X509v3 Subject Key Identifier: 53:79:BF:5A:AA:2B:4A:CF:54:80:E1:D8:9B:C0:9D:F2:B2:03:66:CB X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE SHA1 Fingerprint=2B:8F:1B:57:33:0D:BB:A2:D0:7A:6C:51:F7:0E:E9:0D:DA:B9:AD:8E SHA256 Fingerprint=E7:93:C9:B0:2F:D8:AA:13:E2:1C:31:22:8A:CC:B0:81:19:64:3B:74:9C:89:89:64:B1:74:6D:46:C3:D4:CB:D2 -----BEGIN CERTIFICATE----- MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B 3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT 79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs 8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG jjxDah2nGN59PRbxYvnKkKj9 -----END CERTIFICATE----- === UTN-USERFirst-Hardware Certificate: Data: Version: 3 (0x2) Serial Number: 44:be:0c:8b:50:00:24:b4:11:d3:36:2a:fe:65:0a:fd Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Jul 9 18:10:42 1999 GMT Not After : Jul 9 18:19:22 2019 GMT Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware X509v3 extensions: X509v3 Key Usage: Digital Signature, Non Repudiation, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45 X509v3 CRL Distribution Points: Full Name: URI:http://crl.usertrust.com/UTN-USERFirst-Hardware.crl X509v3 Extended Key Usage: TLS Web Server Authentication, IPSec End System, IPSec Tunnel, IPSec User SHA1 Fingerprint=04:83:ED:33:99:AC:36:08:05:87:22:ED:BC:5E:46:00:E3:BE:F9:D7 SHA256 Fingerprint=6E:A5:47:41:D0:04:66:7E:ED:1B:48:16:63:4A:A3:A7:9E:6E:4B:96:95:0F:82:79:DA:FC:8D:9B:D8:81:21:37 -----BEGIN CERTIFICATE----- MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn 0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t 3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== -----END CERTIFICATE----- ### Unizeto Sp. z o.o. === Certum CA Certificate: Data: Version: 3 (0x2) Serial Number: 65568 (0x10020) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Jun 11 10:46:39 2002 GMT Not After : Jun 11 10:46:39 2027 GMT Subject: C=PL, O=Unizeto Sp. z o.o., CN=Certum CA X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE SHA1 Fingerprint=62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18 SHA256 Fingerprint=D8:E0:FE:BC:1D:B2:E3:8D:00:94:0F:37:D2:7D:41:34:4D:99:3E:73:4B:99:D5:65:6D:97:78:D4:D8:14:36:24 -----BEGIN CERTIFICATE----- MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7 HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs 6GAqm4VKQPNriiTsBhYscw== -----END CERTIFICATE----- ### ValiCert, Inc. === http://www.valicert.com/ Certificate: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Jun 26 00:19:54 1999 GMT Not After : Jun 26 00:19:54 2019 GMT Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com SHA1 Fingerprint=31:7A:2A:D0:7F:2B:33:5E:F5:A1:C3:4E:4B:57:E8:B7:D8:F1:FC:A6 SHA256 Fingerprint=58:D0:17:27:9C:D4:DC:63:AB:DD:B1:96:A6:C9:90:6C:30:C4:E0:87:83:EA:E8:C1:60:99:54:D6:93:55:59:6B -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd -----END CERTIFICATE----- ### VeriSign, Inc. === VeriSign Class 3 Public Primary Certification Authority - G3 Certificate: Data: Version: 1 (0x0) Serial Number: 9b:7e:06:49:a3:3e:62:b9:d5:ee:90:48:71:29:ef:57 Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3 SHA1 Fingerprint=13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6 SHA256 Fingerprint=EB:04:CF:5E:B1:F3:9A:FA:76:2F:2B:B1:20:F2:96:CB:A5:20:C1:B9:7D:B1:58:95:65:B8:1C:B9:A1:7B:72:44 -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te 2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== -----END CERTIFICATE----- === VeriSign Class 3 Public Primary Certification Authority - G4 Certificate: Data: Version: 3 (0x2) Serial Number: 2f:80:fe:23:8c:0e:22:0f:48:67:12:28:91:87:ac:b3 Signature Algorithm: ecdsa-with-SHA384 Validity Not Before: Nov 5 00:00:00 2007 GMT Not After : Jan 18 23:59:59 2038 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2007 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G4 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign 1.3.6.1.5.5.7.1.12: 0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif X509v3 Subject Key Identifier: B3:16:91:FD:EE:A6:6E:E4:B5:2E:49:8F:87:78:81:80:EC:E5:B1:B5 SHA1 Fingerprint=22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A SHA256 Fingerprint=69:DD:D7:EA:90:BB:57:C9:3E:13:5D:C8:5E:A6:FC:D5:48:0B:60:32:39:BD:C4:54:FC:75:8B:2A:26:CF:7F:79 -----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----- === VeriSign Class 3 Public Primary Certification Authority - G5 Certificate: Data: Version: 3 (0x2) Serial Number: 18:da:d1:9e:26:7d:e8:bb:4a:21:58:cd:cc:6b:3b:4a Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Nov 8 00:00:00 2006 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign 1.3.6.1.5.5.7.1.12: 0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif X509v3 Subject Key Identifier: 7F:D3:65:A7:C2:DD:EC:BB:F0:30:09:F3:43:39:FA:02:AF:33:31:33 SHA1 Fingerprint=4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5 SHA256 Fingerprint=9A:CF:AB:7E:43:C8:D8:80:D0:6B:26:2A:94:DE:EE:E4:B4:65:99:89:C3:D0:CA:F1:9B:AF:64:05:E4:1A:B7:DF -----BEGIN CERTIFICATE----- MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y 5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ 4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq -----END CERTIFICATE----- === VeriSign Class 4 Public Primary Certification Authority - G3 Certificate: Data: Version: 1 (0x0) Serial Number: ec:a0:a7:8b:6e:75:6a:01:cf:c4:7c:cc:2f:94:5e:d7 Signature Algorithm: sha1WithRSAEncryption Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3 SHA1 Fingerprint=C8:EC:8C:87:92:69:CB:4B:AB:39:E9:8D:7E:57:67:F3:14:95:73:9D SHA256 Fingerprint=E3:89:36:0D:0F:DB:AE:B3:D2:50:58:4B:47:30:31:4E:22:2F:39:C1:56:A0:20:14:4E:8D:96:05:61:79:15:06 -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ +mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c 2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== -----END CERTIFICATE----- === VeriSign Trust Network Certificate: Data: Version: 1 (0x0) Serial Number: 7d:d9:fe:07:cf:a8:1e:b7:10:79:67:fb:a7:89:34:c6 Signature Algorithm: sha1WithRSAEncryption Validity Not Before: May 18 00:00:00 1998 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network SHA1 Fingerprint=85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F SHA256 Fingerprint=83:CE:3C:12:29:68:8A:59:3D:48:5F:81:97:3C:0F:91:95:43:1E:DA:37:CC:5E:36:43:0E:79:C7:A8:88:63:8B -----BEGIN CERTIFICATE----- MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY oJ2daZH9 -----END CERTIFICATE----- === VeriSign Universal Root Certification Authority Certificate: Data: Version: 3 (0x2) Serial Number: 40:1a:c4:64:21:b3:13:21:03:0e:bb:e4:12:1a:c5:1d Signature Algorithm: sha256WithRSAEncryption Validity Not Before: Apr 2 00:00:00 2008 GMT Not After : Dec 1 23:59:59 2037 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2008 VeriSign, Inc. - For authorized use only, CN=VeriSign Universal Root Certification Authority X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign 1.3.6.1.5.5.7.1.12: 0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif X509v3 Subject Key Identifier: B6:77:FA:69:48:47:9F:53:12:D5:C2:EA:07:32:76:07:D1:97:07:19 SHA1 Fingerprint=36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54 SHA256 Fingerprint=23:99:56:11:27:A5:71:25:DE:8C:EF:EA:61:0D:DF:2F:A0:78:B5:C8:06:7F:4E:82:82:90:BF:B8:60:E8:4B:3C -----BEGIN CERTIFICATE----- MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF 9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN /BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz 4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 7M2CYfE45k+XmCpajQ== -----END CERTIFICATE----- |
Added jni/libressl/apps/openssl/certhash.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 | /* * Copyright (c) 2014, 2015 Joel Sing <jsing@openbsd.org> * * 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. */ #include <sys/types.h> #include <sys/stat.h> #include <errno.h> #include <dirent.h> #include <fcntl.h> #include <limits.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <openssl/bio.h> #include <openssl/evp.h> #include <openssl/pem.h> #include <openssl/x509.h> #include "apps.h" static struct { int dryrun; int verbose; } certhash_config; struct option certhash_options[] = { { .name = "n", .desc = "Perform a dry-run - do not make any changes", .type = OPTION_FLAG, .opt.flag = &certhash_config.dryrun, }, { .name = "v", .desc = "Verbose", .type = OPTION_FLAG, .opt.flag = &certhash_config.verbose, }, { NULL }, }; struct hashinfo { char *filename; char *target; unsigned long hash; unsigned int index; unsigned char fingerprint[EVP_MAX_MD_SIZE]; int is_crl; int is_dup; int exists; int changed; struct hashinfo *reference; struct hashinfo *next; }; static struct hashinfo * hashinfo(const char *filename, unsigned long hash, unsigned char *fingerprint) { struct hashinfo *hi; if ((hi = calloc(1, sizeof(*hi))) == NULL) return (NULL); if (filename != NULL) { if ((hi->filename = strdup(filename)) == NULL) { free(hi); return (NULL); } } hi->hash = hash; if (fingerprint != NULL) memcpy(hi->fingerprint, fingerprint, sizeof(hi->fingerprint)); return (hi); } static void hashinfo_free(struct hashinfo *hi) { if (hi == NULL) return; free(hi->filename); free(hi->target); free(hi); } #ifdef DEBUG static void hashinfo_print(struct hashinfo *hi) { int i; printf("hashinfo %s %08lx %u %i\n", hi->filename, hi->hash, hi->index, hi->is_crl); for (i = 0; i < (int)EVP_MAX_MD_SIZE; i++) { printf("%02X%c", hi->fingerprint[i], (i + 1 == (int)EVP_MAX_MD_SIZE) ? '\n' : ':'); } } #endif static int hashinfo_compare(const void *a, const void *b) { struct hashinfo *hia = *(struct hashinfo **)a; struct hashinfo *hib = *(struct hashinfo **)b; int rv; rv = hia->hash < hib->hash ? -1 : hia->hash > hib->hash; if (rv != 0) return (rv); rv = memcmp(hia->fingerprint, hib->fingerprint, sizeof(hia->fingerprint)); if (rv != 0) return (rv); return strcmp(hia->filename, hib->filename); } static struct hashinfo * hashinfo_chain(struct hashinfo *head, struct hashinfo *entry) { struct hashinfo *hi = head; if (hi == NULL) return (entry); while (hi->next != NULL) hi = hi->next; hi->next = entry; return (head); } static void hashinfo_chain_free(struct hashinfo *hi) { struct hashinfo *next; while (hi != NULL) { next = hi->next; hashinfo_free(hi); hi = next; } } static size_t hashinfo_chain_length(struct hashinfo *hi) { int len = 0; while (hi != NULL) { len++; hi = hi->next; } return (len); } static int hashinfo_chain_sort(struct hashinfo **head) { struct hashinfo **list, *entry; size_t len; int i; if (*head == NULL) return (0); len = hashinfo_chain_length(*head); if ((list = reallocarray(NULL, len, sizeof(struct hashinfo *))) == NULL) return (-1); for (entry = *head, i = 0; entry != NULL; entry = entry->next, i++) list[i] = entry; qsort(list, len, sizeof(struct hashinfo *), hashinfo_compare); *head = entry = list[0]; for (i = 1; i < len; i++) { entry->next = list[i]; entry = list[i]; } entry->next = NULL; free(list); return (0); } static char * hashinfo_linkname(struct hashinfo *hi) { char *filename; if (asprintf(&filename, "%08lx.%s%u", hi->hash, (hi->is_crl ? "r" : ""), hi->index) == -1) return (NULL); return (filename); } static int filename_is_hash(const char *filename) { const char *p = filename; while ((*p >= '0' && *p <= '9') || (*p >= 'a' && *p <= 'f')) p++; if (*p++ != '.') return (0); if (*p == 'r') /* CRL format. */ p++; while (*p >= '0' && *p <= '9') p++; if (*p != '\0') return (0); return (1); } static int filename_is_pem(const char *filename) { const char *q, *p = filename; if ((q = strchr(p, '\0')) == NULL) return (0); if ((q - p) < 4) return (0); if (strncmp((q - 4), ".pem", 4) != 0) return (0); return (1); } static struct hashinfo * hashinfo_from_linkname(const char *linkname, const char *target) { struct hashinfo *hi = NULL; const char *errstr; char *l, *p, *ep; long long val; if ((l = strdup(linkname)) == NULL) goto err; if ((p = strchr(l, '.')) == NULL) goto err; *p++ = '\0'; if ((hi = hashinfo(linkname, 0, NULL)) == NULL) goto err; if ((hi->target = strdup(target)) == NULL) goto err; errno = 0; val = strtoll(l, &ep, 16); if (l[0] == '\0' || *ep != '\0') goto err; if (errno == ERANGE && (val == LLONG_MAX || val == LLONG_MIN)) goto err; if (val < 0 || val > ULONG_MAX) goto err; hi->hash = (unsigned long)val; if (*p == 'r') { hi->is_crl = 1; p++; } val = strtonum(p, 0, 0xffffffff, &errstr); if (errstr != NULL) goto err; hi->index = (unsigned int)val; goto done; err: hashinfo_free(hi); hi = NULL; done: free(l); return (hi); } static struct hashinfo * certhash_cert(BIO *bio, const char *filename) { unsigned char fingerprint[EVP_MAX_MD_SIZE]; struct hashinfo *hi = NULL; const EVP_MD *digest; X509 *cert = NULL; unsigned long hash; unsigned int len; if ((cert = PEM_read_bio_X509(bio, NULL, NULL, NULL)) == NULL) goto err; hash = X509_subject_name_hash(cert); digest = EVP_sha256(); if (X509_digest(cert, digest, fingerprint, &len) != 1) { fprintf(stderr, "out of memory\n"); goto err; } hi = hashinfo(filename, hash, fingerprint); err: X509_free(cert); return (hi); } static struct hashinfo * certhash_crl(BIO *bio, const char *filename) { unsigned char fingerprint[EVP_MAX_MD_SIZE]; struct hashinfo *hi = NULL; const EVP_MD *digest; X509_CRL *crl = NULL; unsigned long hash; unsigned int len; if ((crl = PEM_read_bio_X509_CRL(bio, NULL, NULL, NULL)) == NULL) return (NULL); hash = X509_NAME_hash(X509_CRL_get_issuer(crl)); digest = EVP_sha256(); if (X509_CRL_digest(crl, digest, fingerprint, &len) != 1) { fprintf(stderr, "out of memory\n"); goto err; } hi = hashinfo(filename, hash, fingerprint); err: X509_CRL_free(crl); return (hi); } static int certhash_addlink(struct hashinfo **links, struct hashinfo *hi) { struct hashinfo *link = NULL; if ((link = hashinfo(NULL, hi->hash, hi->fingerprint)) == NULL) goto err; if ((link->filename = hashinfo_linkname(hi)) == NULL) goto err; link->reference = hi; link->changed = 1; *links = hashinfo_chain(*links, link); hi->reference = link; return (0); err: hashinfo_free(link); return (-1); } static void certhash_findlink(struct hashinfo *links, struct hashinfo *hi) { struct hashinfo *link; for (link = links; link != NULL; link = link->next) { if (link->is_crl == hi->is_crl && link->hash == hi->hash && link->index == hi->index && link->reference == NULL) { link->reference = hi; if (link->target == NULL || strcmp(link->target, hi->filename) != 0) link->changed = 1; hi->reference = link; break; } } } static void certhash_index(struct hashinfo *head, const char *name) { struct hashinfo *last, *entry; int index = 0; last = NULL; for (entry = head; entry != NULL; entry = entry->next) { if (last != NULL) { if (entry->hash == last->hash) { if (memcmp(entry->fingerprint, last->fingerprint, sizeof(entry->fingerprint)) == 0) { fprintf(stderr, "WARNING: duplicate %s " "in %s (using %s), ignoring...\n", name, entry->filename, last->filename); entry->is_dup = 1; continue; } index++; } else { index = 0; } } entry->index = index; last = entry; } } static int certhash_merge(struct hashinfo **links, struct hashinfo **certs, struct hashinfo **crls) { struct hashinfo *cert, *crl; /* Pass 1 - sort and index entries. */ if (hashinfo_chain_sort(certs) == -1) return (-1); if (hashinfo_chain_sort(crls) == -1) return (-1); certhash_index(*certs, "certificate"); certhash_index(*crls, "CRL"); /* Pass 2 - map to existing links. */ for (cert = *certs; cert != NULL; cert = cert->next) { if (cert->is_dup == 1) continue; certhash_findlink(*links, cert); } for (crl = *crls; crl != NULL; crl = crl->next) { if (crl->is_dup == 1) continue; certhash_findlink(*links, crl); } /* Pass 3 - determine missing links. */ for (cert = *certs; cert != NULL; cert = cert->next) { if (cert->is_dup == 1 || cert->reference != NULL) continue; if (certhash_addlink(links, cert) == -1) return (-1); } for (crl = *crls; crl != NULL; crl = crl->next) { if (crl->is_dup == 1 || crl->reference != NULL) continue; if (certhash_addlink(links, crl) == -1) return (-1); } return (0); } static int certhash_link(struct dirent *dep, struct hashinfo **links) { struct hashinfo *hi = NULL; char target[PATH_MAX]; struct stat sb; int n; if (lstat(dep->d_name, &sb) == -1) { fprintf(stderr, "failed to stat %s\n", dep->d_name); return (-1); } if (!S_ISLNK(sb.st_mode)) return (0); n = readlink(dep->d_name, target, sizeof(target) - 1); if (n == -1) { fprintf(stderr, "failed to readlink %s\n", dep->d_name); return (-1); } target[n] = '\0'; hi = hashinfo_from_linkname(dep->d_name, target); if (hi == NULL) { fprintf(stderr, "failed to get hash info %s\n", dep->d_name); return (-1); } hi->exists = 1; *links = hashinfo_chain(*links, hi); return (0); } static int certhash_file(struct dirent *dep, struct hashinfo **certs, struct hashinfo **crls) { struct hashinfo *hi = NULL; int has_cert, has_crl; int ret = -1; BIO *bio = NULL; FILE *f; has_cert = has_crl = 0; if ((f = fopen(dep->d_name, "r")) == NULL) { fprintf(stderr, "failed to fopen %s\n", dep->d_name); goto err; } if ((bio = BIO_new_fp(f, BIO_CLOSE)) == NULL) { fprintf(stderr, "failed to create bio\n"); fclose(f); goto err; } if ((hi = certhash_cert(bio, dep->d_name)) != NULL) { has_cert = 1; *certs = hashinfo_chain(*certs, hi); } if (BIO_reset(bio) != 0) { fprintf(stderr, "BIO_reset failed\n"); goto err; } if ((hi = certhash_crl(bio, dep->d_name)) != NULL) { has_crl = hi->is_crl = 1; *crls = hashinfo_chain(*crls, hi); } if (!has_cert && !has_crl) fprintf(stderr, "PEM file %s does not contain a certificate " "or CRL, ignoring...\n", dep->d_name); ret = 0; err: BIO_free(bio); return (ret); } static int certhash_directory(const char *path) { struct hashinfo *links = NULL, *certs = NULL, *crls = NULL, *link; int ret = 0; struct dirent *dep; DIR *dip = NULL; if ((dip = opendir(".")) == NULL) { fprintf(stderr, "failed to open directory %s\n", path); goto err; } if (certhash_config.verbose) fprintf(stdout, "scanning directory %s\n", path); /* Create lists of existing hash links, certs and CRLs. */ while ((dep = readdir(dip)) != NULL) { if (filename_is_hash(dep->d_name)) { if (certhash_link(dep, &links) == -1) goto err; } if (filename_is_pem(dep->d_name)) { if (certhash_file(dep, &certs, &crls) == -1) goto err; } } if (certhash_merge(&links, &certs, &crls) == -1) { fprintf(stderr, "certhash merge failed\n"); goto err; } /* Remove spurious links. */ for (link = links; link != NULL; link = link->next) { if (link->exists == 0 || (link->reference != NULL && link->changed == 0)) continue; if (certhash_config.verbose) fprintf(stdout, "%s link %s -> %s\n", (certhash_config.dryrun ? "would remove" : "removing"), link->filename, link->target); if (certhash_config.dryrun) continue; if (unlink(link->filename) == -1) { fprintf(stderr, "failed to remove link %s\n", link->filename); goto err; } } /* Create missing links. */ for (link = links; link != NULL; link = link->next) { if (link->exists == 1 && link->changed == 0) continue; if (certhash_config.verbose) fprintf(stdout, "%s link %s -> %s\n", (certhash_config.dryrun ? "would create" : "creating"), link->filename, link->reference->filename); if (certhash_config.dryrun) continue; if (symlink(link->reference->filename, link->filename) == -1) { fprintf(stderr, "failed to create link %s -> %s\n", link->filename, link->reference->filename); goto err; } } goto done; err: ret = 1; done: hashinfo_chain_free(certs); hashinfo_chain_free(crls); hashinfo_chain_free(links); if (dip != NULL) closedir(dip); return (ret); } static void certhash_usage(void) { fprintf(stderr, "usage: certhash [-nv] dir ...\n"); options_usage(certhash_options); } int certhash_main(int argc, char **argv) { int argsused; int i, cwdfd, ret = 0; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&certhash_config, 0, sizeof(certhash_config)); if (options_parse(argc, argv, certhash_options, NULL, &argsused) != 0) { certhash_usage(); return (1); } if ((cwdfd = open(".", O_RDONLY)) == -1) { perror("failed to open current directory"); return (1); } for (i = argsused; i < argc; i++) { if (chdir(argv[i]) == -1) { fprintf(stderr, "failed to change to directory %s: %s\n", argv[i], strerror(errno)); ret = 1; continue; } ret |= certhash_directory(argv[i]); if (fchdir(cwdfd) == -1) { perror("failed to restore current directory"); ret = 1; break; /* can't continue safely */ } } close(cwdfd); return (ret); } |
Added jni/libressl/apps/openssl/certhash_win.c.
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * Public domain * certhash dummy implementation for platforms without symlinks */ #include "apps.h" int certhash_main(int argc, char **argv) { fprintf(stderr, "certhash is not enabled on this platform\n"); return (1); } |
Added jni/libressl/apps/openssl/ciphers.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | /* $OpenBSD: ciphers.c,v 1.7 2015/10/10 22:28:51 doug Exp $ */ /* * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> * * 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. */ #include <stdio.h> #include <stdlib.h> #include <openssl/err.h> #include <openssl/ssl.h> #include "apps.h" #include "progs.h" struct { int usage; int verbose; } ciphers_config; struct option ciphers_options[] = { { .name = "h", .type = OPTION_FLAG, .opt.flag = &ciphers_config.usage, }, { .name = "?", .type = OPTION_FLAG, .opt.flag = &ciphers_config.usage, }, { .name = "tls1", .desc = "This option is deprecated since it is the default", .type = OPTION_DISCARD, }, { .name = "v", .desc = "Provide cipher listing", .type = OPTION_VALUE, .opt.value = &ciphers_config.verbose, .value = 1, }, { .name = "V", .desc = "Provide cipher listing with cipher suite values", .type = OPTION_VALUE, .opt.value = &ciphers_config.verbose, .value = 2, }, { NULL }, }; static void ciphers_usage(void) { fprintf(stderr, "usage: ciphers [-hVv] [-tls1] [cipherlist]\n"); options_usage(ciphers_options); } int ciphers_main(int argc, char **argv) { char *cipherlist = NULL; STACK_OF(SSL_CIPHER) *ciphers; const SSL_CIPHER *cipher; SSL_CTX *ssl_ctx = NULL; SSL *ssl = NULL; uint16_t value; int i, rv = 0; char *desc; if (single_execution) { if (pledge("stdio rpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&ciphers_config, 0, sizeof(ciphers_config)); if (options_parse(argc, argv, ciphers_options, &cipherlist, NULL) != 0) { ciphers_usage(); return (1); } if (ciphers_config.usage) { ciphers_usage(); return (1); } if ((ssl_ctx = SSL_CTX_new(TLSv1_client_method())) == NULL) goto err; if (cipherlist != NULL) { if (SSL_CTX_set_cipher_list(ssl_ctx, cipherlist) == 0) goto err; } if ((ssl = SSL_new(ssl_ctx)) == NULL) goto err; if ((ciphers = SSL_get_ciphers(ssl)) == NULL) goto err; for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) { cipher = sk_SSL_CIPHER_value(ciphers, i); if (ciphers_config.verbose == 0) { fprintf(stdout, "%s%s", (i ? ":" : ""), SSL_CIPHER_get_name(cipher)); continue; } if (ciphers_config.verbose > 1) { value = SSL_CIPHER_get_value(cipher); fprintf(stdout, "%-*s0x%02X,0x%02X - ", 10, "", ((value >> 8) & 0xff), (value & 0xff)); } desc = SSL_CIPHER_description(cipher, NULL, 0); if (strcmp(desc, "OPENSSL_malloc Error") == 0) { fprintf(stderr, "out of memory\n"); goto err; } fprintf(stdout, "%s", desc); free(desc); } if (ciphers_config.verbose == 0) fprintf(stdout, "\n"); goto done; err: ERR_print_errors_fp(stderr); rv = 1; done: SSL_CTX_free(ssl_ctx); SSL_free(ssl); return (rv); } |
Added jni/libressl/apps/openssl/cms.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 | /* $OpenBSD: cms.c,v 1.5 2015/10/17 07:51:10 semarie Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project. */ /* ==================================================================== * Copyright (c) 2008 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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. * ==================================================================== */ /* CMS utility function */ #include <stdio.h> #include <string.h> #include "apps.h" #ifndef OPENSSL_NO_CMS #include <openssl/cms.h> #include <openssl/crypto.h> #include <openssl/err.h> #include <openssl/pem.h> #include <openssl/x509_vfy.h> #include <openssl/x509v3.h> static int save_certs(char *signerfile, STACK_OF(X509) * signers); static int cms_cb(int ok, X509_STORE_CTX * ctx); static void receipt_request_print(BIO * out, CMS_ContentInfo * cms); static CMS_ReceiptRequest * make_receipt_request( STACK_OF(OPENSSL_STRING) * rr_to, int rr_allorfirst, STACK_OF(OPENSSL_STRING) * rr_from); #define SMIME_OP 0x10 #define SMIME_IP 0x20 #define SMIME_SIGNERS 0x40 #define SMIME_ENCRYPT (1 | SMIME_OP) #define SMIME_DECRYPT (2 | SMIME_IP) #define SMIME_SIGN (3 | SMIME_OP | SMIME_SIGNERS) #define SMIME_VERIFY (4 | SMIME_IP) #define SMIME_CMSOUT (5 | SMIME_IP | SMIME_OP) #define SMIME_RESIGN (6 | SMIME_IP | SMIME_OP | SMIME_SIGNERS) #define SMIME_DATAOUT (7 | SMIME_IP) #define SMIME_DATA_CREATE (8 | SMIME_OP) #define SMIME_DIGEST_VERIFY (9 | SMIME_IP) #define SMIME_DIGEST_CREATE (10 | SMIME_OP) #define SMIME_UNCOMPRESS (11 | SMIME_IP) #define SMIME_COMPRESS (12 | SMIME_OP) #define SMIME_ENCRYPTED_DECRYPT (13 | SMIME_IP) #define SMIME_ENCRYPTED_ENCRYPT (14 | SMIME_OP) #define SMIME_SIGN_RECEIPT (15 | SMIME_IP | SMIME_OP) #define SMIME_VERIFY_RECEIPT (16 | SMIME_IP) int verify_err = 0; int cms_main(int argc, char **argv) { int operation = 0; int ret = 0; char **args; const char *inmode = "r", *outmode = "w"; char *infile = NULL, *outfile = NULL, *rctfile = NULL; char *signerfile = NULL, *recipfile = NULL; STACK_OF(OPENSSL_STRING) * sksigners = NULL, *skkeys = NULL; char *certfile = NULL, *keyfile = NULL, *contfile = NULL; char *certsoutfile = NULL; const EVP_CIPHER *cipher = NULL; CMS_ContentInfo *cms = NULL, *rcms = NULL; X509_STORE *store = NULL; X509 *cert = NULL, *recip = NULL, *signer = NULL; EVP_PKEY *key = NULL; STACK_OF(X509) * encerts = NULL, *other = NULL; BIO *in = NULL, *out = NULL, *indata = NULL, *rctin = NULL; int badarg = 0; int flags = CMS_DETACHED, noout = 0, print = 0; int verify_retcode = 0; int rr_print = 0, rr_allorfirst = -1; STACK_OF(OPENSSL_STRING) * rr_to = NULL, *rr_from = NULL; CMS_ReceiptRequest *rr = NULL; char *to = NULL, *from = NULL, *subject = NULL; char *CAfile = NULL, *CApath = NULL; char *passargin = NULL, *passin = NULL; const EVP_MD *sign_md = NULL; int informat = FORMAT_SMIME, outformat = FORMAT_SMIME; int rctformat = FORMAT_SMIME, keyform = FORMAT_PEM; unsigned char *secret_key = NULL, *secret_keyid = NULL; unsigned char *pwri_pass = NULL, *pwri_tmp = NULL; size_t secret_keylen = 0, secret_keyidlen = 0; ASN1_OBJECT *econtent_type = NULL; X509_VERIFY_PARAM *vpm = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } args = argv + 1; ret = 1; while (!badarg && *args && *args[0] == '-') { if (!strcmp(*args, "-encrypt")) operation = SMIME_ENCRYPT; else if (!strcmp(*args, "-decrypt")) operation = SMIME_DECRYPT; else if (!strcmp(*args, "-sign")) operation = SMIME_SIGN; else if (!strcmp(*args, "-sign_receipt")) operation = SMIME_SIGN_RECEIPT; else if (!strcmp(*args, "-resign")) operation = SMIME_RESIGN; else if (!strcmp(*args, "-verify")) operation = SMIME_VERIFY; else if (!strcmp(*args, "-verify_retcode")) verify_retcode = 1; else if (!strcmp(*args, "-verify_receipt")) { operation = SMIME_VERIFY_RECEIPT; if (!args[1]) goto argerr; args++; rctfile = *args; } else if (!strcmp(*args, "-cmsout")) operation = SMIME_CMSOUT; else if (!strcmp(*args, "-data_out")) operation = SMIME_DATAOUT; else if (!strcmp(*args, "-data_create")) operation = SMIME_DATA_CREATE; else if (!strcmp(*args, "-digest_verify")) operation = SMIME_DIGEST_VERIFY; else if (!strcmp(*args, "-digest_create")) operation = SMIME_DIGEST_CREATE; else if (!strcmp(*args, "-compress")) operation = SMIME_COMPRESS; else if (!strcmp(*args, "-uncompress")) operation = SMIME_UNCOMPRESS; else if (!strcmp(*args, "-EncryptedData_decrypt")) operation = SMIME_ENCRYPTED_DECRYPT; else if (!strcmp(*args, "-EncryptedData_encrypt")) operation = SMIME_ENCRYPTED_ENCRYPT; #ifndef OPENSSL_NO_DES else if (!strcmp(*args, "-des3")) cipher = EVP_des_ede3_cbc(); else if (!strcmp(*args, "-des")) cipher = EVP_des_cbc(); #endif #ifndef OPENSSL_NO_RC2 else if (!strcmp(*args, "-rc2-40")) cipher = EVP_rc2_40_cbc(); else if (!strcmp(*args, "-rc2-128")) cipher = EVP_rc2_cbc(); else if (!strcmp(*args, "-rc2-64")) cipher = EVP_rc2_64_cbc(); #endif #ifndef OPENSSL_NO_AES else if (!strcmp(*args, "-aes128")) cipher = EVP_aes_128_cbc(); else if (!strcmp(*args, "-aes192")) cipher = EVP_aes_192_cbc(); else if (!strcmp(*args, "-aes256")) cipher = EVP_aes_256_cbc(); #endif #ifndef OPENSSL_NO_CAMELLIA else if (!strcmp(*args, "-camellia128")) cipher = EVP_camellia_128_cbc(); else if (!strcmp(*args, "-camellia192")) cipher = EVP_camellia_192_cbc(); else if (!strcmp(*args, "-camellia256")) cipher = EVP_camellia_256_cbc(); #endif else if (!strcmp(*args, "-debug_decrypt")) flags |= CMS_DEBUG_DECRYPT; else if (!strcmp(*args, "-text")) flags |= CMS_TEXT; else if (!strcmp(*args, "-nointern")) flags |= CMS_NOINTERN; else if (!strcmp(*args, "-noverify") || !strcmp(*args, "-no_signer_cert_verify")) flags |= CMS_NO_SIGNER_CERT_VERIFY; else if (!strcmp(*args, "-nocerts")) flags |= CMS_NOCERTS; else if (!strcmp(*args, "-noattr")) flags |= CMS_NOATTR; else if (!strcmp(*args, "-nodetach")) flags &= ~CMS_DETACHED; else if (!strcmp(*args, "-nosmimecap")) flags |= CMS_NOSMIMECAP; else if (!strcmp(*args, "-binary")) flags |= CMS_BINARY; else if (!strcmp(*args, "-keyid")) flags |= CMS_USE_KEYID; else if (!strcmp(*args, "-nosigs")) flags |= CMS_NOSIGS; else if (!strcmp(*args, "-no_content_verify")) flags |= CMS_NO_CONTENT_VERIFY; else if (!strcmp(*args, "-no_attr_verify")) flags |= CMS_NO_ATTR_VERIFY; else if (!strcmp(*args, "-stream")) flags |= CMS_STREAM; else if (!strcmp(*args, "-indef")) flags |= CMS_STREAM; else if (!strcmp(*args, "-noindef")) flags &= ~CMS_STREAM; else if (!strcmp(*args, "-nooldmime")) flags |= CMS_NOOLDMIMETYPE; else if (!strcmp(*args, "-crlfeol")) flags |= CMS_CRLFEOL; else if (!strcmp(*args, "-noout")) noout = 1; else if (!strcmp(*args, "-receipt_request_print")) rr_print = 1; else if (!strcmp(*args, "-receipt_request_all")) rr_allorfirst = 0; else if (!strcmp(*args, "-receipt_request_first")) rr_allorfirst = 1; else if (!strcmp(*args, "-receipt_request_from")) { if (!args[1]) goto argerr; args++; if (!rr_from) rr_from = sk_OPENSSL_STRING_new_null(); sk_OPENSSL_STRING_push(rr_from, *args); } else if (!strcmp(*args, "-receipt_request_to")) { if (!args[1]) goto argerr; args++; if (!rr_to) rr_to = sk_OPENSSL_STRING_new_null(); sk_OPENSSL_STRING_push(rr_to, *args); } else if (!strcmp(*args, "-print")) { noout = 1; print = 1; } else if (!strcmp(*args, "-secretkey")) { long ltmp; if (!args[1]) goto argerr; args++; secret_key = string_to_hex(*args, <mp); if (!secret_key) { BIO_printf(bio_err, "Invalid key %s\n", *args); goto argerr; } secret_keylen = (size_t) ltmp; } else if (!strcmp(*args, "-secretkeyid")) { long ltmp; if (!args[1]) goto argerr; args++; secret_keyid = string_to_hex(*args, <mp); if (!secret_keyid) { BIO_printf(bio_err, "Invalid id %s\n", *args); goto argerr; } secret_keyidlen = (size_t) ltmp; } else if (!strcmp(*args, "-pwri_password")) { if (!args[1]) goto argerr; args++; pwri_pass = (unsigned char *) *args; } else if (!strcmp(*args, "-econtent_type")) { if (!args[1]) goto argerr; args++; econtent_type = OBJ_txt2obj(*args, 0); if (!econtent_type) { BIO_printf(bio_err, "Invalid OID %s\n", *args); goto argerr; } } else if (!strcmp(*args, "-passin")) { if (!args[1]) goto argerr; passargin = *++args; } else if (!strcmp(*args, "-to")) { if (!args[1]) goto argerr; to = *++args; } else if (!strcmp(*args, "-from")) { if (!args[1]) goto argerr; from = *++args; } else if (!strcmp(*args, "-subject")) { if (!args[1]) goto argerr; subject = *++args; } else if (!strcmp(*args, "-signer")) { if (!args[1]) goto argerr; /* If previous -signer argument add signer to list */ if (signerfile) { if (!sksigners) sksigners = sk_OPENSSL_STRING_new_null(); sk_OPENSSL_STRING_push(sksigners, signerfile); if (!keyfile) keyfile = signerfile; if (!skkeys) skkeys = sk_OPENSSL_STRING_new_null(); sk_OPENSSL_STRING_push(skkeys, keyfile); keyfile = NULL; } signerfile = *++args; } else if (!strcmp(*args, "-recip")) { if (!args[1]) goto argerr; recipfile = *++args; } else if (!strcmp(*args, "-certsout")) { if (!args[1]) goto argerr; certsoutfile = *++args; } else if (!strcmp(*args, "-md")) { if (!args[1]) goto argerr; sign_md = EVP_get_digestbyname(*++args); if (sign_md == NULL) { BIO_printf(bio_err, "Unknown digest %s\n", *args); goto argerr; } } else if (!strcmp(*args, "-inkey")) { if (!args[1]) goto argerr; /* If previous -inkey arument add signer to list */ if (keyfile) { if (!signerfile) { BIO_puts(bio_err, "Illegal -inkey without -signer\n"); goto argerr; } if (!sksigners) sksigners = sk_OPENSSL_STRING_new_null(); sk_OPENSSL_STRING_push(sksigners, signerfile); signerfile = NULL; if (!skkeys) skkeys = sk_OPENSSL_STRING_new_null(); sk_OPENSSL_STRING_push(skkeys, keyfile); } keyfile = *++args; } else if (!strcmp(*args, "-keyform")) { if (!args[1]) goto argerr; keyform = str2fmt(*++args); } else if (!strcmp(*args, "-rctform")) { if (!args[1]) goto argerr; rctformat = str2fmt(*++args); } else if (!strcmp(*args, "-certfile")) { if (!args[1]) goto argerr; certfile = *++args; } else if (!strcmp(*args, "-CAfile")) { if (!args[1]) goto argerr; CAfile = *++args; } else if (!strcmp(*args, "-CApath")) { if (!args[1]) goto argerr; CApath = *++args; } else if (!strcmp(*args, "-in")) { if (!args[1]) goto argerr; infile = *++args; } else if (!strcmp(*args, "-inform")) { if (!args[1]) goto argerr; informat = str2fmt(*++args); } else if (!strcmp(*args, "-outform")) { if (!args[1]) goto argerr; outformat = str2fmt(*++args); } else if (!strcmp(*args, "-out")) { if (!args[1]) goto argerr; outfile = *++args; } else if (!strcmp(*args, "-content")) { if (!args[1]) goto argerr; contfile = *++args; } else if (args_verify(&args, NULL, &badarg, bio_err, &vpm)) continue; else if ((cipher = EVP_get_cipherbyname(*args + 1)) == NULL) badarg = 1; args++; } if (((rr_allorfirst != -1) || rr_from) && !rr_to) { BIO_puts(bio_err, "No Signed Receipts Recipients\n"); goto argerr; } if (!(operation & SMIME_SIGNERS) && (rr_to || rr_from)) { BIO_puts(bio_err, "Signed receipts only allowed with -sign\n"); goto argerr; } if (!(operation & SMIME_SIGNERS) && (skkeys || sksigners)) { BIO_puts(bio_err, "Multiple signers or keys not allowed\n"); goto argerr; } if (operation & SMIME_SIGNERS) { if (keyfile && !signerfile) { BIO_puts(bio_err, "Illegal -inkey without -signer\n"); goto argerr; } /* Check to see if any final signer needs to be appended */ if (signerfile) { if (!sksigners) sksigners = sk_OPENSSL_STRING_new_null(); sk_OPENSSL_STRING_push(sksigners, signerfile); if (!skkeys) skkeys = sk_OPENSSL_STRING_new_null(); if (!keyfile) keyfile = signerfile; sk_OPENSSL_STRING_push(skkeys, keyfile); } if (!sksigners) { BIO_printf(bio_err, "No signer certificate specified\n"); badarg = 1; } signerfile = NULL; keyfile = NULL; } else if (operation == SMIME_DECRYPT) { if (!recipfile && !keyfile && !secret_key && !pwri_pass) { BIO_printf(bio_err, "No recipient certificate or key specified\n"); badarg = 1; } } else if (operation == SMIME_ENCRYPT) { if (!*args && !secret_key && !pwri_pass) { BIO_printf(bio_err, "No recipient(s) certificate(s) specified\n"); badarg = 1; } } else if (!operation) badarg = 1; if (badarg) { argerr: BIO_printf(bio_err, "Usage cms [options] cert.pem ...\n"); BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err, "-encrypt encrypt message\n"); BIO_printf(bio_err, "-decrypt decrypt encrypted message\n"); BIO_printf(bio_err, "-sign sign message\n"); BIO_printf(bio_err, "-verify verify signed message\n"); BIO_printf(bio_err, "-cmsout output CMS structure\n"); #ifndef OPENSSL_NO_DES BIO_printf(bio_err, "-des3 encrypt with triple DES\n"); BIO_printf(bio_err, "-des encrypt with DES\n"); #endif #ifndef OPENSSL_NO_RC2 BIO_printf(bio_err, "-rc2-40 encrypt with RC2-40 (default)\n"); BIO_printf(bio_err, "-rc2-64 encrypt with RC2-64\n"); BIO_printf(bio_err, "-rc2-128 encrypt with RC2-128\n"); #endif #ifndef OPENSSL_NO_AES BIO_printf(bio_err, "-aes128, -aes192, -aes256\n"); BIO_printf(bio_err, " encrypt PEM output with cbc aes\n"); #endif #ifndef OPENSSL_NO_CAMELLIA BIO_printf(bio_err, "-camellia128, -camellia192, -camellia256\n"); BIO_printf(bio_err, " encrypt PEM output with cbc camellia\n"); #endif BIO_printf(bio_err, "-nointern don't search certificates in message for signer\n"); BIO_printf(bio_err, "-nosigs don't verify message signature\n"); BIO_printf(bio_err, "-noverify don't verify signers certificate\n"); BIO_printf(bio_err, "-nocerts don't include signers certificate when signing\n"); BIO_printf(bio_err, "-nodetach use opaque signing\n"); BIO_printf(bio_err, "-noattr don't include any signed attributes\n"); BIO_printf(bio_err, "-binary don't translate message to text\n"); BIO_printf(bio_err, "-certfile file other certificates file\n"); BIO_printf(bio_err, "-certsout file certificate output file\n"); BIO_printf(bio_err, "-signer file signer certificate file\n"); BIO_printf(bio_err, "-recip file recipient certificate file for decryption\n"); BIO_printf(bio_err, "-keyid use subject key identifier\n"); BIO_printf(bio_err, "-in file input file\n"); BIO_printf(bio_err, "-inform arg input format SMIME (default), PEM or DER\n"); BIO_printf(bio_err, "-inkey file input private key (if not signer or recipient)\n"); BIO_printf(bio_err, "-keyform arg input private key format (PEM)\n"); BIO_printf(bio_err, "-out file output file\n"); BIO_printf(bio_err, "-outform arg output format SMIME (default), PEM or DER\n"); BIO_printf(bio_err, "-content file supply or override content for detached signature\n"); BIO_printf(bio_err, "-to addr to address\n"); BIO_printf(bio_err, "-from ad from address\n"); BIO_printf(bio_err, "-subject s subject\n"); BIO_printf(bio_err, "-text include or delete text MIME headers\n"); BIO_printf(bio_err, "-CApath dir trusted certificates directory\n"); BIO_printf(bio_err, "-CAfile file trusted certificates file\n"); BIO_printf(bio_err, "-crl_check check revocation status of signer's certificate using CRLs\n"); BIO_printf(bio_err, "-crl_check_all check revocation status of signer's certificate chain using CRLs\n"); BIO_printf(bio_err, "-passin arg input file pass phrase source\n"); BIO_printf(bio_err, "cert.pem recipient certificate(s) for encryption\n"); goto end; } if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto end; } ret = 2; if (!(operation & SMIME_SIGNERS)) flags &= ~CMS_DETACHED; if (operation & SMIME_OP) { if (outformat == FORMAT_ASN1) outmode = "wb"; } else { if (flags & CMS_BINARY) outmode = "wb"; } if (operation & SMIME_IP) { if (informat == FORMAT_ASN1) inmode = "rb"; } else { if (flags & CMS_BINARY) inmode = "rb"; } if (operation == SMIME_ENCRYPT) { if (!cipher) { #ifndef OPENSSL_NO_DES cipher = EVP_des_ede3_cbc(); #else BIO_printf(bio_err, "No cipher selected\n"); goto end; #endif } if (secret_key && !secret_keyid) { BIO_printf(bio_err, "No secret key id\n"); goto end; } if (*args) encerts = sk_X509_new_null(); while (*args) { if (!(cert = load_cert(bio_err, *args, FORMAT_PEM, NULL, e, "recipient certificate file"))) goto end; sk_X509_push(encerts, cert); cert = NULL; args++; } } if (certfile) { if (!(other = load_certs(bio_err, certfile, FORMAT_PEM, NULL, e, "certificate file"))) { ERR_print_errors(bio_err); goto end; } } if (recipfile && (operation == SMIME_DECRYPT)) { if (!(recip = load_cert(bio_err, recipfile, FORMAT_PEM, NULL, e, "recipient certificate file"))) { ERR_print_errors(bio_err); goto end; } } if (operation == SMIME_SIGN_RECEIPT) { if (!(signer = load_cert(bio_err, signerfile, FORMAT_PEM, NULL, e, "receipt signer certificate file"))) { ERR_print_errors(bio_err); goto end; } } if (operation == SMIME_DECRYPT) { if (!keyfile) keyfile = recipfile; } else if ((operation == SMIME_SIGN) || (operation == SMIME_SIGN_RECEIPT)) { if (!keyfile) keyfile = signerfile; } else keyfile = NULL; if (keyfile) { key = load_key(bio_err, keyfile, keyform, 0, passin, e, "signing key file"); if (!key) goto end; } if (infile) { if (!(in = BIO_new_file(infile, inmode))) { BIO_printf(bio_err, "Can't open input file %s\n", infile); goto end; } } else in = BIO_new_fp(stdin, BIO_NOCLOSE); if (operation & SMIME_IP) { if (informat == FORMAT_SMIME) cms = SMIME_read_CMS(in, &indata); else if (informat == FORMAT_PEM) cms = PEM_read_bio_CMS(in, NULL, NULL, NULL); else if (informat == FORMAT_ASN1) cms = d2i_CMS_bio(in, NULL); else { BIO_printf(bio_err, "Bad input format for CMS file\n"); goto end; } if (!cms) { BIO_printf(bio_err, "Error reading S/MIME message\n"); goto end; } if (contfile) { BIO_free(indata); if (!(indata = BIO_new_file(contfile, "rb"))) { BIO_printf(bio_err, "Can't read content file %s\n", contfile); goto end; } } if (certsoutfile) { STACK_OF(X509) * allcerts; allcerts = CMS_get1_certs(cms); if (!save_certs(certsoutfile, allcerts)) { BIO_printf(bio_err, "Error writing certs to %s\n", certsoutfile); ret = 5; goto end; } sk_X509_pop_free(allcerts, X509_free); } } if (rctfile) { char *rctmode = (rctformat == FORMAT_ASN1) ? "rb" : "r"; if (!(rctin = BIO_new_file(rctfile, rctmode))) { BIO_printf(bio_err, "Can't open receipt file %s\n", rctfile); goto end; } if (rctformat == FORMAT_SMIME) rcms = SMIME_read_CMS(rctin, NULL); else if (rctformat == FORMAT_PEM) rcms = PEM_read_bio_CMS(rctin, NULL, NULL, NULL); else if (rctformat == FORMAT_ASN1) rcms = d2i_CMS_bio(rctin, NULL); else { BIO_printf(bio_err, "Bad input format for receipt\n"); goto end; } if (!rcms) { BIO_printf(bio_err, "Error reading receipt\n"); goto end; } } if (outfile) { if (!(out = BIO_new_file(outfile, outmode))) { BIO_printf(bio_err, "Can't open output file %s\n", outfile); goto end; } } else { out = BIO_new_fp(stdout, BIO_NOCLOSE); } if ((operation == SMIME_VERIFY) || (operation == SMIME_VERIFY_RECEIPT)) { if (!(store = setup_verify(bio_err, CAfile, CApath))) goto end; X509_STORE_set_verify_cb(store, cms_cb); if (vpm) X509_STORE_set1_param(store, vpm); } ret = 3; if (operation == SMIME_DATA_CREATE) { cms = CMS_data_create(in, flags); } else if (operation == SMIME_DIGEST_CREATE) { cms = CMS_digest_create(in, sign_md, flags); } else if (operation == SMIME_COMPRESS) { cms = CMS_compress(in, -1, flags); } else if (operation == SMIME_ENCRYPT) { flags |= CMS_PARTIAL; cms = CMS_encrypt(encerts, in, cipher, flags); if (!cms) goto end; if (secret_key) { if (!CMS_add0_recipient_key(cms, NID_undef, secret_key, secret_keylen, secret_keyid, secret_keyidlen, NULL, NULL, NULL)) goto end; /* NULL these because call absorbs them */ secret_key = NULL; secret_keyid = NULL; } if (pwri_pass) { pwri_tmp = strdup(pwri_pass); if (!pwri_tmp) goto end; if (!CMS_add0_recipient_password(cms, -1, NID_undef, NID_undef, pwri_tmp, -1, NULL)) goto end; pwri_tmp = NULL; } if (!(flags & CMS_STREAM)) { if (!CMS_final(cms, in, NULL, flags)) goto end; } } else if (operation == SMIME_ENCRYPTED_ENCRYPT) { cms = CMS_EncryptedData_encrypt(in, cipher, secret_key, secret_keylen, flags); } else if (operation == SMIME_SIGN_RECEIPT) { CMS_ContentInfo *srcms = NULL; STACK_OF(CMS_SignerInfo) * sis; CMS_SignerInfo *si; sis = CMS_get0_SignerInfos(cms); if (!sis) goto end; si = sk_CMS_SignerInfo_value(sis, 0); srcms = CMS_sign_receipt(si, signer, key, other, flags); if (!srcms) goto end; CMS_ContentInfo_free(cms); cms = srcms; } else if (operation & SMIME_SIGNERS) { int i; /* * If detached data content we enable streaming if S/MIME * output format. */ if (operation == SMIME_SIGN) { if (flags & CMS_DETACHED) { if (outformat == FORMAT_SMIME) flags |= CMS_STREAM; } flags |= CMS_PARTIAL; cms = CMS_sign(NULL, NULL, other, in, flags); if (!cms) goto end; if (econtent_type) CMS_set1_eContentType(cms, econtent_type); if (rr_to) { rr = make_receipt_request(rr_to, rr_allorfirst, rr_from); if (!rr) { BIO_puts(bio_err, "Signed Receipt Request Creation Error\n"); goto end; } } } else flags |= CMS_REUSE_DIGEST; for (i = 0; i < sk_OPENSSL_STRING_num(sksigners); i++) { CMS_SignerInfo *si; signerfile = sk_OPENSSL_STRING_value(sksigners, i); keyfile = sk_OPENSSL_STRING_value(skkeys, i); signer = load_cert(bio_err, signerfile, FORMAT_PEM, NULL, e, "signer certificate"); if (!signer) goto end; key = load_key(bio_err, keyfile, keyform, 0, passin, e, "signing key file"); if (!key) goto end; si = CMS_add1_signer(cms, signer, key, sign_md, flags); if (!si) goto end; if (rr && !CMS_add1_ReceiptRequest(si, rr)) goto end; X509_free(signer); signer = NULL; EVP_PKEY_free(key); key = NULL; } /* If not streaming or resigning finalize structure */ if ((operation == SMIME_SIGN) && !(flags & CMS_STREAM)) { if (!CMS_final(cms, in, NULL, flags)) goto end; } } if (!cms) { BIO_printf(bio_err, "Error creating CMS structure\n"); goto end; } ret = 4; if (operation == SMIME_DECRYPT) { if (flags & CMS_DEBUG_DECRYPT) CMS_decrypt(cms, NULL, NULL, NULL, NULL, flags); if (secret_key) { if (!CMS_decrypt_set1_key(cms, secret_key, secret_keylen, secret_keyid, secret_keyidlen)) { BIO_puts(bio_err, "Error decrypting CMS using secret key\n"); goto end; } } if (key) { if (!CMS_decrypt_set1_pkey(cms, key, recip)) { BIO_puts(bio_err, "Error decrypting CMS using private key\n"); goto end; } } if (pwri_pass) { if (!CMS_decrypt_set1_password(cms, pwri_pass, -1)) { BIO_puts(bio_err, "Error decrypting CMS using password\n"); goto end; } } if (!CMS_decrypt(cms, NULL, NULL, indata, out, flags)) { BIO_printf(bio_err, "Error decrypting CMS structure\n"); goto end; } } else if (operation == SMIME_DATAOUT) { if (!CMS_data(cms, out, flags)) goto end; } else if (operation == SMIME_UNCOMPRESS) { if (!CMS_uncompress(cms, indata, out, flags)) goto end; } else if (operation == SMIME_DIGEST_VERIFY) { if (CMS_digest_verify(cms, indata, out, flags) > 0) BIO_printf(bio_err, "Verification successful\n"); else { BIO_printf(bio_err, "Verification failure\n"); goto end; } } else if (operation == SMIME_ENCRYPTED_DECRYPT) { if (!CMS_EncryptedData_decrypt(cms, secret_key, secret_keylen, indata, out, flags)) goto end; } else if (operation == SMIME_VERIFY) { if (CMS_verify(cms, other, store, indata, out, flags) > 0) BIO_printf(bio_err, "Verification successful\n"); else { BIO_printf(bio_err, "Verification failure\n"); if (verify_retcode) ret = verify_err + 32; goto end; } if (signerfile) { STACK_OF(X509) * signers; signers = CMS_get0_signers(cms); if (!save_certs(signerfile, signers)) { BIO_printf(bio_err, "Error writing signers to %s\n", signerfile); ret = 5; goto end; } sk_X509_free(signers); } if (rr_print) receipt_request_print(bio_err, cms); } else if (operation == SMIME_VERIFY_RECEIPT) { if (CMS_verify_receipt(rcms, cms, other, store, flags) > 0) BIO_printf(bio_err, "Verification successful\n"); else { BIO_printf(bio_err, "Verification failure\n"); goto end; } } else { if (noout) { if (print) CMS_ContentInfo_print_ctx(out, cms, 0, NULL); } else if (outformat == FORMAT_SMIME) { if (to) BIO_printf(out, "To: %s\n", to); if (from) BIO_printf(out, "From: %s\n", from); if (subject) BIO_printf(out, "Subject: %s\n", subject); if (operation == SMIME_RESIGN) ret = SMIME_write_CMS(out, cms, indata, flags); else ret = SMIME_write_CMS(out, cms, in, flags); } else if (outformat == FORMAT_PEM) ret = PEM_write_bio_CMS_stream(out, cms, in, flags); else if (outformat == FORMAT_ASN1) ret = i2d_CMS_bio_stream(out, cms, in, flags); else { BIO_printf(bio_err, "Bad output format for CMS file\n"); goto end; } if (ret <= 0) { ret = 6; goto end; } } ret = 0; end: if (ret) ERR_print_errors(bio_err); sk_X509_pop_free(encerts, X509_free); sk_X509_pop_free(other, X509_free); if (vpm) X509_VERIFY_PARAM_free(vpm); if (sksigners) sk_OPENSSL_STRING_free(sksigners); if (skkeys) sk_OPENSSL_STRING_free(skkeys); free(secret_key); free(secret_keyid); free(pwri_tmp); if (econtent_type) ASN1_OBJECT_free(econtent_type); if (rr) CMS_ReceiptRequest_free(rr); if (rr_to) sk_OPENSSL_STRING_free(rr_to); if (rr_from) sk_OPENSSL_STRING_free(rr_from); X509_STORE_free(store); X509_free(cert); X509_free(recip); X509_free(signer); EVP_PKEY_free(key); CMS_ContentInfo_free(cms); CMS_ContentInfo_free(rcms); BIO_free(rctin); BIO_free(in); BIO_free(indata); BIO_free_all(out); free(passin); return (ret); } static int save_certs(char *signerfile, STACK_OF(X509) * signers) { int i; BIO *tmp; if (!signerfile) return 1; tmp = BIO_new_file(signerfile, "w"); if (!tmp) return 0; for (i = 0; i < sk_X509_num(signers); i++) PEM_write_bio_X509(tmp, sk_X509_value(signers, i)); BIO_free(tmp); return 1; } /* Minimal callback just to output policy info (if any) */ static int cms_cb(int ok, X509_STORE_CTX * ctx) { int error; error = X509_STORE_CTX_get_error(ctx); verify_err = error; if ((error != X509_V_ERR_NO_EXPLICIT_POLICY) && ((error != X509_V_OK) || (ok != 2))) return ok; policies_print(NULL, ctx); return ok; } static void gnames_stack_print(BIO * out, STACK_OF(GENERAL_NAMES) * gns) { STACK_OF(GENERAL_NAME) * gens; GENERAL_NAME *gen; int i, j; for (i = 0; i < sk_GENERAL_NAMES_num(gns); i++) { gens = sk_GENERAL_NAMES_value(gns, i); for (j = 0; j < sk_GENERAL_NAME_num(gens); j++) { gen = sk_GENERAL_NAME_value(gens, j); BIO_puts(out, " "); GENERAL_NAME_print(out, gen); BIO_puts(out, "\n"); } } return; } static void receipt_request_print(BIO * out, CMS_ContentInfo * cms) { STACK_OF(CMS_SignerInfo) * sis; CMS_SignerInfo *si; CMS_ReceiptRequest *rr; int allorfirst; STACK_OF(GENERAL_NAMES) * rto, *rlist; ASN1_STRING *scid; int i, rv; sis = CMS_get0_SignerInfos(cms); for (i = 0; i < sk_CMS_SignerInfo_num(sis); i++) { si = sk_CMS_SignerInfo_value(sis, i); rv = CMS_get1_ReceiptRequest(si, &rr); BIO_printf(bio_err, "Signer %d:\n", i + 1); if (rv == 0) BIO_puts(bio_err, " No Receipt Request\n"); else if (rv < 0) { BIO_puts(bio_err, " Receipt Request Parse Error\n"); ERR_print_errors(bio_err); } else { char *id; int idlen; CMS_ReceiptRequest_get0_values(rr, &scid, &allorfirst, &rlist, &rto); BIO_puts(out, " Signed Content ID:\n"); idlen = ASN1_STRING_length(scid); id = (char *) ASN1_STRING_data(scid); BIO_dump_indent(out, id, idlen, 4); BIO_puts(out, " Receipts From"); if (rlist) { BIO_puts(out, " List:\n"); gnames_stack_print(out, rlist); } else if (allorfirst == 1) BIO_puts(out, ": First Tier\n"); else if (allorfirst == 0) BIO_puts(out, ": All\n"); else BIO_printf(out, " Unknown (%d)\n", allorfirst); BIO_puts(out, " Receipts To:\n"); gnames_stack_print(out, rto); } if (rr) CMS_ReceiptRequest_free(rr); } } static STACK_OF(GENERAL_NAMES) * make_names_stack(STACK_OF(OPENSSL_STRING) * ns) { int i; STACK_OF(GENERAL_NAMES) * ret; GENERAL_NAMES *gens = NULL; GENERAL_NAME *gen = NULL; ret = sk_GENERAL_NAMES_new_null(); if (!ret) goto err; for (i = 0; i < sk_OPENSSL_STRING_num(ns); i++) { char *str = sk_OPENSSL_STRING_value(ns, i); gen = a2i_GENERAL_NAME(NULL, NULL, NULL, GEN_EMAIL, str, 0); if (!gen) goto err; gens = GENERAL_NAMES_new(); if (!gens) goto err; if (!sk_GENERAL_NAME_push(gens, gen)) goto err; gen = NULL; if (!sk_GENERAL_NAMES_push(ret, gens)) goto err; gens = NULL; } return ret; err: if (ret) sk_GENERAL_NAMES_pop_free(ret, GENERAL_NAMES_free); if (gens) GENERAL_NAMES_free(gens); if (gen) GENERAL_NAME_free(gen); return NULL; } static CMS_ReceiptRequest * make_receipt_request(STACK_OF(OPENSSL_STRING) * rr_to, int rr_allorfirst, STACK_OF(OPENSSL_STRING) * rr_from) { STACK_OF(GENERAL_NAMES) * rct_to, *rct_from; CMS_ReceiptRequest *rr; rct_to = make_names_stack(rr_to); if (!rct_to) goto err; if (rr_from) { rct_from = make_names_stack(rr_from); if (!rct_from) goto err; } else rct_from = NULL; rr = CMS_ReceiptRequest_create0(NULL, -1, rr_allorfirst, rct_from, rct_to); return rr; err: return NULL; } #endif |
Added jni/libressl/apps/openssl/compat/poll_win.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 | /* * Public domain * * poll(2) emulation for Windows * * This emulates just-enough poll functionality on Windows to work in the * context of the openssl(1) program. This is not a replacement for * POSIX.1-2001 poll(2), though it may come closer than I care to admit. * * Dongsheng Song <dongsheng.song@gmail.com> * Brent Cook <bcook@openbsd.org> */ #include <conio.h> #include <errno.h> #include <io.h> #include <poll.h> #include <ws2tcpip.h> static int conn_is_closed(int fd) { char buf[1]; int ret = recv(fd, buf, 1, MSG_PEEK); if (ret == -1) { switch (WSAGetLastError()) { case WSAECONNABORTED: case WSAECONNRESET: case WSAENETRESET: case WSAESHUTDOWN: return 1; } } return 0; } static int conn_has_oob_data(int fd) { char buf[1]; return (recv(fd, buf, 1, MSG_PEEK | MSG_OOB) == 1); } static int is_socket(int fd) { if (fd < 3) return 0; WSANETWORKEVENTS events; return (WSAEnumNetworkEvents((SOCKET)fd, NULL, &events) == 0); } static int compute_select_revents(int fd, short events, fd_set *rfds, fd_set *wfds, fd_set *efds) { int rc = 0; if ((events & (POLLIN | POLLRDNORM | POLLRDBAND)) && FD_ISSET(fd, rfds)) { if (conn_is_closed(fd)) rc |= POLLHUP; else rc |= POLLIN | POLLRDNORM; } if ((events & (POLLOUT | POLLWRNORM | POLLWRBAND)) && FD_ISSET(fd, wfds)) rc |= POLLOUT; if (FD_ISSET(fd, efds)) { if (conn_is_closed(fd)) rc |= POLLHUP; else if (conn_has_oob_data(fd)) rc |= POLLRDBAND | POLLPRI; } return rc; } static int compute_wait_revents(HANDLE h, short events, int object, int wait_rc) { int rc = 0; INPUT_RECORD record; DWORD num_read; /* * Assume we can always write to file handles (probably a bad * assumption but works for now, at least it doesn't block). */ if (events & (POLLOUT | POLLWRNORM)) rc |= POLLOUT; /* * Check if this handle was signaled by WaitForMultipleObjects */ if (wait_rc >= WAIT_OBJECT_0 && (object == (wait_rc - WAIT_OBJECT_0)) && (events & (POLLIN | POLLRDNORM))) { /* * Check if this file is stdin, and if so, if it is a console. */ if (h == GetStdHandle(STD_INPUT_HANDLE) && PeekConsoleInput(h, &record, 1, &num_read) == 1) { /* * Handle the input console buffer differently, * since it can signal on other events like * window and mouse, but read can still block. */ if (record.EventType == KEY_EVENT && record.Event.KeyEvent.bKeyDown) { rc |= POLLIN; } else { /* * Flush non-character events from the * console buffer. */ ReadConsoleInput(h, &record, 1, &num_read); } } else { rc |= POLLIN; } } return rc; } static int wsa_select_errno(int err) { switch (err) { case WSAEINTR: case WSAEINPROGRESS: errno = EINTR; break; case WSAEFAULT: /* * Windows uses WSAEFAULT for both resource allocation failures * and arguments not being contained in the user's address * space. So, we have to choose EFAULT or ENOMEM. */ errno = EFAULT; break; case WSAEINVAL: errno = EINVAL; break; case WSANOTINITIALISED: errno = EPERM; break; case WSAENETDOWN: errno = ENOMEM; break; } return -1; } int poll(struct pollfd *pfds, nfds_t nfds, int timeout_ms) { nfds_t i; int timespent_ms, looptime_ms; /* * select machinery */ fd_set rfds, wfds, efds; int rc; int num_sockets; /* * wait machinery */ DWORD wait_rc; HANDLE handles[FD_SETSIZE]; int num_handles; if (pfds == NULL) { errno = EINVAL; return -1; } if (nfds <= 0) { return 0; } FD_ZERO(&rfds); FD_ZERO(&wfds); FD_ZERO(&efds); num_sockets = 0; num_handles = 0; for (i = 0; i < nfds; i++) { if ((int)pfds[i].fd < 0) continue; if (is_socket(pfds[i].fd)) { if (num_sockets >= FD_SETSIZE) { errno = EINVAL; return -1; } FD_SET(pfds[i].fd, &efds); if (pfds[i].events & (POLLIN | POLLRDNORM | POLLRDBAND)) { FD_SET(pfds[i].fd, &rfds); } if (pfds[i].events & (POLLOUT | POLLWRNORM | POLLWRBAND)) { FD_SET(pfds[i].fd, &wfds); } num_sockets++; } else { if (num_handles >= FD_SETSIZE) { errno = EINVAL; return -1; } handles[num_handles++] = (HANDLE)_get_osfhandle(pfds[i].fd); } } /* * Determine if the files, pipes, sockets, consoles, etc. have signaled. * * Do this by alternating a loop between WaitForMultipleObjects for * non-sockets and and select for sockets. * * I tried to implement this all in terms of WaitForMultipleObjects * with a select-based 'poll' of the sockets at the end to get extra * specific socket status. * * However, the cost of setting up an event handle for each socket and * cleaning them up reliably was pretty high. Since the event handle * associated with a socket is also global, creating a new one here * cancels one that may exist externally to this function. * * At any rate, even if global socket event handles were not an issue, * the 'FD_WRITE' status of a socket event handle does not behave in an * expected fashion, being triggered by an edge on a write buffer rather * than simply triggering if there is space available. */ timespent_ms = 0; wait_rc = WAIT_FAILED; if (timeout_ms < 0) timeout_ms = INFINITE; looptime_ms = timeout_ms > 100 ? 100 : timeout_ms; do { struct timeval tv = {0, looptime_ms * 1000}; int handle_signaled = 0; /* * Check if any file handles have signaled */ if (num_handles) { wait_rc = WaitForMultipleObjects(num_handles, handles, FALSE, 0); if (wait_rc == WAIT_FAILED) { /* * The documentation for WaitForMultipleObjects * does not specify what values GetLastError * may return here. Rather than enumerate * badness like for wsa_select_errno, assume a * general errno value. */ errno = ENOMEM; return 0; } } /* * If we signaled on a file handle, don't wait on the sockets. */ if (wait_rc >= WAIT_OBJECT_0 && (wait_rc <= WAIT_OBJECT_0 + num_handles - 1)) { tv.tv_usec = 0; handle_signaled = 1; } /* * Check if any sockets have signaled */ rc = select(0, &rfds, &wfds, &efds, &tv); if (!handle_signaled && rc == SOCKET_ERROR) return wsa_select_errno(WSAGetLastError()); if (handle_signaled || (num_sockets && rc > 0)) break; timespent_ms += looptime_ms; } while (timespent_ms < timeout_ms); rc = 0; num_handles = 0; for (i = 0; i < nfds; i++) { pfds[i].revents = 0; if ((int)pfds[i].fd < 0) continue; if (is_socket(pfds[i].fd)) { pfds[i].revents = compute_select_revents(pfds[i].fd, pfds[i].events, &rfds, &wfds, &efds); } else { pfds[i].revents = compute_wait_revents( handles[num_handles], pfds[i].events, num_handles, wait_rc); num_handles++; } if (pfds[i].revents) rc++; } return rc; } |
Added jni/libressl/apps/openssl/compat/strtonum.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | /* $OpenBSD: strtonum.c,v 1.7 2013/04/17 18:40:58 tedu Exp $ */ /* * Copyright (c) 2004 Ted Unangst and Todd Miller * All rights reserved. * * 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. */ #include <errno.h> #include <limits.h> #include <stdlib.h> #define INVALID 1 #define TOOSMALL 2 #define TOOLARGE 3 long long strtonum(const char *numstr, long long minval, long long maxval, const char **errstrp) { long long ll = 0; int error = 0; char *ep; struct errval { const char *errstr; int err; } ev[4] = { { NULL, 0 }, { "invalid", EINVAL }, { "too small", ERANGE }, { "too large", ERANGE }, }; ev[0].err = errno; errno = 0; if (minval > maxval) { error = INVALID; } else { ll = strtoll(numstr, &ep, 10); if (numstr == ep || *ep != '\0') error = INVALID; else if ((ll == LLONG_MIN && errno == ERANGE) || ll < minval) error = TOOSMALL; else if ((ll == LLONG_MAX && errno == ERANGE) || ll > maxval) error = TOOLARGE; } if (errstrp != NULL) *errstrp = ev[error].errstr; errno = ev[error].err; if (error) ll = 0; return (ll); } |
Added jni/libressl/apps/openssl/crl.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 | /* $OpenBSD: crl.c,v 1.8 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/err.h> #include <openssl/pem.h> #include <openssl/x509.h> #include <openssl/x509v3.h> static struct { char *cafile; char *capath; int crlnumber; int fingerprint; int hash; int hash_old; char *infile; int informat; int issuer; int lastupdate; char *nameopt; int nextupdate; int noout; char *outfile; int outformat; int text; int verify; } crl_config; static struct option crl_options[] = { { .name = "CAfile", .argname = "file", .desc = "Verify the CRL using certificates in the given file", .type = OPTION_ARG, .opt.arg = &crl_config.cafile, }, { .name = "CApath", .argname = "path", .desc = "Verify the CRL using certificates in the given path", .type = OPTION_ARG, .opt.arg = &crl_config.capath, }, { .name = "crlnumber", .desc = "Print the CRL number", .type = OPTION_FLAG_ORD, .opt.flag = &crl_config.crlnumber, }, { .name = "fingerprint", .desc = "Print the CRL fingerprint", .type = OPTION_FLAG_ORD, .opt.flag = &crl_config.fingerprint, }, { .name = "hash", .desc = "Print the hash of the issuer name", .type = OPTION_FLAG_ORD, .opt.flag = &crl_config.hash, }, { .name = "hash_old", .desc = "Print an old-style (MD5) hash of the issuer name", .type = OPTION_FLAG_ORD, .opt.flag = &crl_config.hash_old, }, { .name = "in", .argname = "file", .desc = "Input file to read from (stdin if unspecified)", .type = OPTION_ARG, .opt.arg = &crl_config.infile, }, { .name = "inform", .argname = "format", .desc = "Input format (DER or PEM)", .type = OPTION_ARG_FORMAT, .opt.value = &crl_config.informat, }, { .name = "issuer", .desc = "Print the issuer name", .type = OPTION_FLAG_ORD, .opt.flag = &crl_config.issuer, }, { .name = "lastupdate", .desc = "Print the lastUpdate field", .type = OPTION_FLAG_ORD, .opt.flag = &crl_config.lastupdate, }, { .name = "nameopt", .argname = "options", .desc = "Specify certificate name options", .type = OPTION_ARG, .opt.arg = &crl_config.nameopt, }, { .name = "nextupdate", .desc = "Print the nextUpdate field", .type = OPTION_FLAG_ORD, .opt.flag = &crl_config.nextupdate, }, { .name = "noout", .desc = "Do not output the encoded version of the CRL", .type = OPTION_FLAG, .opt.flag = &crl_config.noout, }, { .name = "out", .argname = "file", .desc = "Output file to write to (stdout if unspecified)", .type = OPTION_ARG, .opt.arg = &crl_config.outfile, }, { .name = "outform", .argname = "format", .desc = "Output format (DER or PEM)", .type = OPTION_ARG_FORMAT, .opt.value = &crl_config.outformat, }, { .name = "text", .desc = "Print out the CRL in text form", .type = OPTION_FLAG, .opt.flag = &crl_config.text, }, { .name = "verify", .desc = "Verify the signature on the CRL", .type = OPTION_FLAG, .opt.flag = &crl_config.verify, }, {NULL}, }; static void crl_usage(void) { fprintf(stderr, "usage: crl [-CAfile file] [-CApath dir] [-fingerprint] [-hash]\n" " [-in file] [-inform DER | PEM] [-issuer] [-lastupdate]\n" " [-nextupdate] [-noout] [-out file] [-outform DER | PEM]\n" " [-text]\n\n"); options_usage(crl_options); } static X509_CRL *load_crl(char *file, int format); static BIO *bio_out = NULL; int crl_main(int argc, char **argv) { unsigned long nmflag = 0; X509_CRL *x = NULL; int ret = 1, i; BIO *out = NULL; X509_STORE *store = NULL; X509_STORE_CTX ctx; X509_LOOKUP *lookup = NULL; X509_OBJECT xobj; EVP_PKEY *pkey; const EVP_MD *digest; char *digest_name = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } if (bio_out == NULL) { if ((bio_out = BIO_new(BIO_s_file())) != NULL) { BIO_set_fp(bio_out, stdout, BIO_NOCLOSE); } } digest = EVP_sha1(); memset(&crl_config, 0, sizeof(crl_config)); crl_config.informat = FORMAT_PEM; crl_config.outformat = FORMAT_PEM; if (options_parse(argc, argv, crl_options, &digest_name, NULL) != 0) { crl_usage(); goto end; } if (crl_config.cafile != NULL || crl_config.capath != NULL) crl_config.verify = 1; if (crl_config.nameopt != NULL) { if (set_name_ex(&nmflag, crl_config.nameopt) != 1) { fprintf(stderr, "Invalid -nameopt argument '%s'\n", crl_config.nameopt); goto end; } } if (digest_name != NULL) { if ((digest = EVP_get_digestbyname(digest_name)) == NULL) { fprintf(stderr, "Unknown message digest algorithm '%s'\n", digest_name); goto end; } } x = load_crl(crl_config.infile, crl_config.informat); if (x == NULL) goto end; if (crl_config.verify) { store = X509_STORE_new(); lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file()); if (lookup == NULL) goto end; if (!X509_LOOKUP_load_file(lookup, crl_config.cafile, X509_FILETYPE_PEM)) X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT); lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir()); if (lookup == NULL) goto end; if (!X509_LOOKUP_add_dir(lookup, crl_config.capath, X509_FILETYPE_PEM)) X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT); ERR_clear_error(); if (!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) { BIO_printf(bio_err, "Error initialising X509 store\n"); goto end; } i = X509_STORE_get_by_subject(&ctx, X509_LU_X509, X509_CRL_get_issuer(x), &xobj); if (i <= 0) { BIO_printf(bio_err, "Error getting CRL issuer certificate\n"); goto end; } pkey = X509_get_pubkey(xobj.data.x509); X509_OBJECT_free_contents(&xobj); if (!pkey) { BIO_printf(bio_err, "Error getting CRL issuer public key\n"); goto end; } i = X509_CRL_verify(x, pkey); EVP_PKEY_free(pkey); if (i < 0) goto end; if (i == 0) BIO_printf(bio_err, "verify failure\n"); else BIO_printf(bio_err, "verify OK\n"); } /* Print requested information the order that the flags were given. */ for (i = 1; i <= argc; i++) { if (crl_config.issuer == i) { print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), nmflag); } if (crl_config.crlnumber == i) { ASN1_INTEGER *crlnum; crlnum = X509_CRL_get_ext_d2i(x, NID_crl_number, NULL, NULL); BIO_printf(bio_out, "crlNumber="); if (crlnum) { i2a_ASN1_INTEGER(bio_out, crlnum); ASN1_INTEGER_free(crlnum); } else BIO_puts(bio_out, "<NONE>"); BIO_printf(bio_out, "\n"); } if (crl_config.hash == i) { BIO_printf(bio_out, "%08lx\n", X509_NAME_hash(X509_CRL_get_issuer(x))); } #ifndef OPENSSL_NO_MD5 if (crl_config.hash_old == i) { BIO_printf(bio_out, "%08lx\n", X509_NAME_hash_old(X509_CRL_get_issuer(x))); } #endif if (crl_config.lastupdate == i) { BIO_printf(bio_out, "lastUpdate="); ASN1_TIME_print(bio_out, X509_CRL_get_lastUpdate(x)); BIO_printf(bio_out, "\n"); } if (crl_config.nextupdate == i) { BIO_printf(bio_out, "nextUpdate="); if (X509_CRL_get_nextUpdate(x)) ASN1_TIME_print(bio_out, X509_CRL_get_nextUpdate(x)); else BIO_printf(bio_out, "NONE"); BIO_printf(bio_out, "\n"); } if (crl_config.fingerprint == i) { int j; unsigned int n; unsigned char md[EVP_MAX_MD_SIZE]; if (!X509_CRL_digest(x, digest, md, &n)) { BIO_printf(bio_err, "out of memory\n"); goto end; } BIO_printf(bio_out, "%s Fingerprint=", OBJ_nid2sn(EVP_MD_type(digest))); for (j = 0; j < (int) n; j++) { BIO_printf(bio_out, "%02X%c", md[j], (j + 1 == (int)n) ? '\n' : ':'); } } } out = BIO_new(BIO_s_file()); if (out == NULL) { ERR_print_errors(bio_err); goto end; } if (crl_config.outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, crl_config.outfile) <= 0) { perror(crl_config.outfile); goto end; } } if (crl_config.text) X509_CRL_print(out, x); if (crl_config.noout) { ret = 0; goto end; } if (crl_config.outformat == FORMAT_ASN1) i = (int) i2d_X509_CRL_bio(out, x); else if (crl_config.outformat == FORMAT_PEM) i = PEM_write_bio_X509_CRL(out, x); else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } if (!i) { BIO_printf(bio_err, "unable to write CRL\n"); goto end; } ret = 0; end: BIO_free_all(out); BIO_free_all(bio_out); bio_out = NULL; X509_CRL_free(x); if (store) { X509_STORE_CTX_cleanup(&ctx); X509_STORE_free(store); } return (ret); } static X509_CRL * load_crl(char *infile, int format) { X509_CRL *x = NULL; BIO *in = NULL; in = BIO_new(BIO_s_file()); if (in == NULL) { ERR_print_errors(bio_err); goto end; } if (infile == NULL) BIO_set_fp(in, stdin, BIO_NOCLOSE); else { if (BIO_read_filename(in, infile) <= 0) { perror(infile); goto end; } } if (format == FORMAT_ASN1) x = d2i_X509_CRL_bio(in, NULL); else if (format == FORMAT_PEM) x = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL); else { BIO_printf(bio_err, "bad input format specified for input crl\n"); goto end; } if (x == NULL) { BIO_printf(bio_err, "unable to load CRL\n"); ERR_print_errors(bio_err); goto end; } end: BIO_free(in); return (x); } |
Added jni/libressl/apps/openssl/crl2p7.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 | /* $OpenBSD: crl2p7.c,v 1.5 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* This was written by Gordon Chaffee <chaffee@plateau.cs.berkeley.edu> * and donated 'to the cause' along with lots and lots of other fixes to * the library. */ #include <sys/types.h> #include <stdio.h> #include <string.h> #include "apps.h" #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/objects.h> #include <openssl/pem.h> #include <openssl/pkcs7.h> #include <openssl/x509.h> static int add_certs_from_file(STACK_OF(X509) * stack, char *certfile); static struct { STACK_OF(OPENSSL_STRING) *certflst; char *infile; int informat; int nocrl; char *outfile; int outformat; } crl2p7_config; static int crl2p7_opt_certfile(char *arg) { if (crl2p7_config.certflst == NULL) crl2p7_config.certflst = sk_OPENSSL_STRING_new_null(); if (crl2p7_config.certflst == NULL) { fprintf(stderr, "out of memory\n"); return (1); } if (!sk_OPENSSL_STRING_push(crl2p7_config.certflst, arg)) { fprintf(stderr, "out of memory\n"); return (1); } return (0); } static struct option crl2p7_options[] = { { .name = "certfile", .argname = "file", .desc = "Chain of PEM certificates to a trusted CA", .type = OPTION_ARG_FUNC, .opt.argfunc = crl2p7_opt_certfile, }, { .name = "in", .argname = "file", .desc = "Input file (default stdin)", .type = OPTION_ARG, .opt.arg = &crl2p7_config.infile, }, { .name = "inform", .argname = "format", .desc = "Input format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &crl2p7_config.informat, }, { .name = "nocrl", .desc = "Do not read CRL from input or include CRL in output", .type = OPTION_FLAG, .opt.flag = &crl2p7_config.nocrl, }, { .name = "out", .argname = "file", .desc = "Output file (default stdout)", .type = OPTION_ARG, .opt.arg = &crl2p7_config.outfile, }, { .name = "outform", .argname = "format", .desc = "Output format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &crl2p7_config.outformat, }, { NULL }, }; static void crl2p7_usage(void) { fprintf(stderr, "usage: crl2p7 [-certfile file] [-in file] [-inform DER | PEM]\n" " [-nocrl] [-out file] [-outform DER | PEM]\n\n"); options_usage(crl2p7_options); } int crl2pkcs7_main(int argc, char **argv) { int i; BIO *in = NULL, *out = NULL; char *certfile; PKCS7 *p7 = NULL; PKCS7_SIGNED *p7s = NULL; X509_CRL *crl = NULL; STACK_OF(X509_CRL) *crl_stack = NULL; STACK_OF(X509) *cert_stack = NULL; int ret = 1; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&crl2p7_config, 0, sizeof(crl2p7_config)); crl2p7_config.informat = FORMAT_PEM; crl2p7_config.outformat = FORMAT_PEM; if (options_parse(argc, argv, crl2p7_options, NULL, NULL) != 0) { crl2p7_usage(); goto end; } in = BIO_new(BIO_s_file()); out = BIO_new(BIO_s_file()); if (in == NULL || out == NULL) { ERR_print_errors(bio_err); goto end; } if (!crl2p7_config.nocrl) { if (crl2p7_config.infile == NULL) BIO_set_fp(in, stdin, BIO_NOCLOSE); else { if (BIO_read_filename(in, crl2p7_config.infile) <= 0) { perror(crl2p7_config.infile); goto end; } } if (crl2p7_config.informat == FORMAT_ASN1) crl = d2i_X509_CRL_bio(in, NULL); else if (crl2p7_config.informat == FORMAT_PEM) crl = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL); else { BIO_printf(bio_err, "bad input format specified for input crl\n"); goto end; } if (crl == NULL) { BIO_printf(bio_err, "unable to load CRL\n"); ERR_print_errors(bio_err); goto end; } } if ((p7 = PKCS7_new()) == NULL) goto end; if ((p7s = PKCS7_SIGNED_new()) == NULL) goto end; p7->type = OBJ_nid2obj(NID_pkcs7_signed); p7->d.sign = p7s; p7s->contents->type = OBJ_nid2obj(NID_pkcs7_data); if (!ASN1_INTEGER_set(p7s->version, 1)) goto end; if ((crl_stack = sk_X509_CRL_new_null()) == NULL) goto end; p7s->crl = crl_stack; if (crl != NULL) { sk_X509_CRL_push(crl_stack, crl); crl = NULL; /* now part of p7 for freeing */ } if ((cert_stack = sk_X509_new_null()) == NULL) goto end; p7s->cert = cert_stack; if (crl2p7_config.certflst) { for (i = 0; i < sk_OPENSSL_STRING_num(crl2p7_config.certflst); i++) { certfile = sk_OPENSSL_STRING_value(crl2p7_config.certflst, i); if (add_certs_from_file(cert_stack, certfile) < 0) { BIO_printf(bio_err, "error loading certificates\n"); ERR_print_errors(bio_err); goto end; } } } sk_OPENSSL_STRING_free(crl2p7_config.certflst); if (crl2p7_config.outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, crl2p7_config.outfile) <= 0) { perror(crl2p7_config.outfile); goto end; } } if (crl2p7_config.outformat == FORMAT_ASN1) i = i2d_PKCS7_bio(out, p7); else if (crl2p7_config.outformat == FORMAT_PEM) i = PEM_write_bio_PKCS7(out, p7); else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } if (!i) { BIO_printf(bio_err, "unable to write pkcs7 object\n"); ERR_print_errors(bio_err); goto end; } ret = 0; end: if (in != NULL) BIO_free(in); if (out != NULL) BIO_free_all(out); if (p7 != NULL) PKCS7_free(p7); if (crl != NULL) X509_CRL_free(crl); return (ret); } static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile) { BIO *in = NULL; int count = 0; int ret = -1; STACK_OF(X509_INFO) *sk = NULL; X509_INFO *xi; in = BIO_new(BIO_s_file()); if (in == NULL || BIO_read_filename(in, certfile) <= 0) { BIO_printf(bio_err, "error opening the file, %s\n", certfile); goto end; } /* This loads from a file, a stack of x509/crl/pkey sets */ sk = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL); if (sk == NULL) { BIO_printf(bio_err, "error reading the file, %s\n", certfile); goto end; } /* scan over it and pull out the CRL's */ while (sk_X509_INFO_num(sk)) { xi = sk_X509_INFO_shift(sk); if (xi->x509 != NULL) { sk_X509_push(stack, xi->x509); xi->x509 = NULL; count++; } X509_INFO_free(xi); } ret = count; end: /* never need to free x */ if (in != NULL) BIO_free(in); if (sk != NULL) sk_X509_INFO_free(sk); return (ret); } |
Added jni/libressl/apps/openssl/dgst.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 | /* $OpenBSD: dgst.c,v 1.8 2015/10/17 07:51:10 semarie Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/hmac.h> #include <openssl/objects.h> #include <openssl/pem.h> #include <openssl/x509.h> #define BUFSIZE 1024*8 int do_fp(BIO * out, unsigned char *buf, BIO * bp, int sep, int binout, EVP_PKEY * key, unsigned char *sigin, int siglen, const char *sig_name, const char *md_name, const char *file, BIO * bmd); static void list_md_fn(const EVP_MD * m, const char *from, const char *to, void *arg) { const char *mname; /* Skip aliases */ if (!m) return; mname = OBJ_nid2ln(EVP_MD_type(m)); /* Skip shortnames */ if (strcmp(from, mname)) return; /* Skip clones */ if (EVP_MD_flags(m) & EVP_MD_FLAG_PKEY_DIGEST) return; if (strchr(mname, ' ')) mname = EVP_MD_name(m); BIO_printf(arg, "-%-14s to use the %s message digest algorithm\n", mname, mname); } int dgst_main(int argc, char **argv) { unsigned char *buf = NULL; int i, err = 1; const EVP_MD *md = NULL, *m; BIO *in = NULL, *inp; BIO *bmd = NULL; BIO *out = NULL; #define PROG_NAME_SIZE 39 char pname[PROG_NAME_SIZE + 1]; int separator = 0; int debug = 0; int keyform = FORMAT_PEM; const char *outfile = NULL, *keyfile = NULL; const char *sigfile = NULL; int out_bin = -1, want_pub = 0, do_verify = 0; EVP_PKEY *sigkey = NULL; unsigned char *sigbuf = NULL; int siglen = 0; char *passargin = NULL, *passin = NULL; char *hmac_key = NULL; char *mac_name = NULL; STACK_OF(OPENSSL_STRING) * sigopts = NULL, *macopts = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } if ((buf = malloc(BUFSIZE)) == NULL) { BIO_printf(bio_err, "out of memory\n"); goto end; } /* first check the program name */ program_name(argv[0], pname, sizeof pname); md = EVP_get_digestbyname(pname); argc--; argv++; while (argc > 0) { if ((*argv)[0] != '-') break; if (strcmp(*argv, "-c") == 0) separator = 1; else if (strcmp(*argv, "-r") == 0) separator = 2; else if (strcmp(*argv, "-out") == 0) { if (--argc < 1) break; outfile = *(++argv); } else if (strcmp(*argv, "-sign") == 0) { if (--argc < 1) break; keyfile = *(++argv); } else if (!strcmp(*argv, "-passin")) { if (--argc < 1) break; passargin = *++argv; } else if (strcmp(*argv, "-verify") == 0) { if (--argc < 1) break; keyfile = *(++argv); want_pub = 1; do_verify = 1; } else if (strcmp(*argv, "-prverify") == 0) { if (--argc < 1) break; keyfile = *(++argv); do_verify = 1; } else if (strcmp(*argv, "-signature") == 0) { if (--argc < 1) break; sigfile = *(++argv); } else if (strcmp(*argv, "-keyform") == 0) { if (--argc < 1) break; keyform = str2fmt(*(++argv)); } else if (strcmp(*argv, "-hex") == 0) out_bin = 0; else if (strcmp(*argv, "-binary") == 0) out_bin = 1; else if (strcmp(*argv, "-d") == 0) debug = 1; else if (!strcmp(*argv, "-hmac")) { if (--argc < 1) break; hmac_key = *++argv; } else if (!strcmp(*argv, "-mac")) { if (--argc < 1) break; mac_name = *++argv; } else if (strcmp(*argv, "-sigopt") == 0) { if (--argc < 1) break; if (!sigopts) sigopts = sk_OPENSSL_STRING_new_null(); if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv))) break; } else if (strcmp(*argv, "-macopt") == 0) { if (--argc < 1) break; if (!macopts) macopts = sk_OPENSSL_STRING_new_null(); if (!macopts || !sk_OPENSSL_STRING_push(macopts, *(++argv))) break; } else if ((m = EVP_get_digestbyname(&((*argv)[1]))) != NULL) md = m; else break; argc--; argv++; } if (do_verify && !sigfile) { BIO_printf(bio_err, "No signature to verify: use the -signature option\n"); goto end; } if ((argc > 0) && (argv[0][0] == '-')) { /* bad option */ BIO_printf(bio_err, "unknown option '%s'\n", *argv); BIO_printf(bio_err, "options are\n"); BIO_printf(bio_err, "-c to output the digest with separating colons\n"); BIO_printf(bio_err, "-r to output the digest in coreutils format\n"); BIO_printf(bio_err, "-d to output debug info\n"); BIO_printf(bio_err, "-hex output as hex dump\n"); BIO_printf(bio_err, "-binary output in binary form\n"); BIO_printf(bio_err, "-sign file sign digest using private key in file\n"); BIO_printf(bio_err, "-verify file verify a signature using public key in file\n"); BIO_printf(bio_err, "-prverify file verify a signature using private key in file\n"); BIO_printf(bio_err, "-keyform arg key file format (PEM)\n"); BIO_printf(bio_err, "-out filename output to filename rather than stdout\n"); BIO_printf(bio_err, "-signature file signature to verify\n"); BIO_printf(bio_err, "-sigopt nm:v signature parameter\n"); BIO_printf(bio_err, "-hmac key create hashed MAC with key\n"); BIO_printf(bio_err, "-mac algorithm create MAC (not neccessarily HMAC)\n"); BIO_printf(bio_err, "-macopt nm:v MAC algorithm parameters or key\n"); EVP_MD_do_all_sorted(list_md_fn, bio_err); goto end; } in = BIO_new(BIO_s_file()); bmd = BIO_new(BIO_f_md()); if (in == NULL || bmd == NULL) { ERR_print_errors(bio_err); goto end; } if (debug) { BIO_set_callback(in, BIO_debug_callback); /* needed for windows 3.1 */ BIO_set_callback_arg(in, (char *) bio_err); } if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto end; } if (out_bin == -1) { if (keyfile) out_bin = 1; else out_bin = 0; } if (outfile) { if (out_bin) out = BIO_new_file(outfile, "wb"); else out = BIO_new_file(outfile, "w"); } else { out = BIO_new_fp(stdout, BIO_NOCLOSE); } if (!out) { BIO_printf(bio_err, "Error opening output file %s\n", outfile ? outfile : "(stdout)"); ERR_print_errors(bio_err); goto end; } if ((!!mac_name + !!keyfile + !!hmac_key) > 1) { BIO_printf(bio_err, "MAC and Signing key cannot both be specified\n"); goto end; } if (keyfile) { if (want_pub) sigkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL, "key file"); else sigkey = load_key(bio_err, keyfile, keyform, 0, passin, "key file"); if (!sigkey) { /* * load_[pub]key() has already printed an appropriate * message */ goto end; } } if (mac_name) { EVP_PKEY_CTX *mac_ctx = NULL; int r = 0; if (!init_gen_str(bio_err, &mac_ctx, mac_name, 0)) goto mac_end; if (macopts) { char *macopt; for (i = 0; i < sk_OPENSSL_STRING_num(macopts); i++) { macopt = sk_OPENSSL_STRING_value(macopts, i); if (pkey_ctrl_string(mac_ctx, macopt) <= 0) { BIO_printf(bio_err, "MAC parameter error \"%s\"\n", macopt); ERR_print_errors(bio_err); goto mac_end; } } } if (EVP_PKEY_keygen(mac_ctx, &sigkey) <= 0) { BIO_puts(bio_err, "Error generating key\n"); ERR_print_errors(bio_err); goto mac_end; } r = 1; mac_end: if (mac_ctx) EVP_PKEY_CTX_free(mac_ctx); if (r == 0) goto end; } if (hmac_key) { sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, (unsigned char *) hmac_key, -1); if (!sigkey) goto end; } if (sigkey) { EVP_MD_CTX *mctx = NULL; EVP_PKEY_CTX *pctx = NULL; int r; if (!BIO_get_md_ctx(bmd, &mctx)) { BIO_printf(bio_err, "Error getting context\n"); ERR_print_errors(bio_err); goto end; } if (do_verify) r = EVP_DigestVerifyInit(mctx, &pctx, md, NULL, sigkey); else r = EVP_DigestSignInit(mctx, &pctx, md, NULL, sigkey); if (!r) { BIO_printf(bio_err, "Error setting context\n"); ERR_print_errors(bio_err); goto end; } if (sigopts) { char *sigopt; for (i = 0; i < sk_OPENSSL_STRING_num(sigopts); i++) { sigopt = sk_OPENSSL_STRING_value(sigopts, i); if (pkey_ctrl_string(pctx, sigopt) <= 0) { BIO_printf(bio_err, "parameter error \"%s\"\n", sigopt); ERR_print_errors(bio_err); goto end; } } } } /* we use md as a filter, reading from 'in' */ else { if (md == NULL) md = EVP_md5(); if (!BIO_set_md(bmd, md)) { BIO_printf(bio_err, "Error setting digest %s\n", pname); ERR_print_errors(bio_err); goto end; } } if (sigfile && sigkey) { BIO *sigbio; siglen = EVP_PKEY_size(sigkey); sigbuf = malloc(siglen); if (sigbuf == NULL) { BIO_printf(bio_err, "out of memory\n"); ERR_print_errors(bio_err); goto end; } sigbio = BIO_new_file(sigfile, "rb"); if (!sigbio) { BIO_printf(bio_err, "Error opening signature file %s\n", sigfile); ERR_print_errors(bio_err); goto end; } siglen = BIO_read(sigbio, sigbuf, siglen); BIO_free(sigbio); if (siglen <= 0) { BIO_printf(bio_err, "Error reading signature file %s\n", sigfile); ERR_print_errors(bio_err); goto end; } } inp = BIO_push(bmd, in); if (md == NULL) { EVP_MD_CTX *tctx; BIO_get_md_ctx(bmd, &tctx); md = EVP_MD_CTX_md(tctx); } if (argc == 0) { BIO_set_fp(in, stdin, BIO_NOCLOSE); err = do_fp(out, buf, inp, separator, out_bin, sigkey, sigbuf, siglen, NULL, NULL, "stdin", bmd); } else { const char *md_name = NULL, *sig_name = NULL; if (!out_bin) { if (sigkey) { const EVP_PKEY_ASN1_METHOD *ameth; ameth = EVP_PKEY_get0_asn1(sigkey); if (ameth) EVP_PKEY_asn1_get0_info(NULL, NULL, NULL, NULL, &sig_name, ameth); } md_name = EVP_MD_name(md); } err = 0; for (i = 0; i < argc; i++) { int r; if (BIO_read_filename(in, argv[i]) <= 0) { perror(argv[i]); err++; continue; } else { r = do_fp(out, buf, inp, separator, out_bin, sigkey, sigbuf, siglen, sig_name, md_name, argv[i], bmd); } if (r) err = r; (void) BIO_reset(bmd); } } end: if (buf != NULL) { explicit_bzero(buf, BUFSIZE); free(buf); } if (in != NULL) BIO_free(in); free(passin); BIO_free_all(out); EVP_PKEY_free(sigkey); if (sigopts) sk_OPENSSL_STRING_free(sigopts); if (macopts) sk_OPENSSL_STRING_free(macopts); free(sigbuf); if (bmd != NULL) BIO_free(bmd); return (err); } int do_fp(BIO * out, unsigned char *buf, BIO * bp, int sep, int binout, EVP_PKEY * key, unsigned char *sigin, int siglen, const char *sig_name, const char *md_name, const char *file, BIO * bmd) { size_t len; int i; for (;;) { i = BIO_read(bp, (char *) buf, BUFSIZE); if (i < 0) { BIO_printf(bio_err, "Read Error in %s\n", file); ERR_print_errors(bio_err); return 1; } if (i == 0) break; } if (sigin) { EVP_MD_CTX *ctx; BIO_get_md_ctx(bp, &ctx); i = EVP_DigestVerifyFinal(ctx, sigin, (unsigned int) siglen); if (i > 0) BIO_printf(out, "Verified OK\n"); else if (i == 0) { BIO_printf(out, "Verification Failure\n"); return 1; } else { BIO_printf(bio_err, "Error Verifying Data\n"); ERR_print_errors(bio_err); return 1; } return 0; } if (key) { EVP_MD_CTX *ctx; BIO_get_md_ctx(bp, &ctx); len = BUFSIZE; if (!EVP_DigestSignFinal(ctx, buf, &len)) { BIO_printf(bio_err, "Error Signing Data\n"); ERR_print_errors(bio_err); return 1; } } else { len = BIO_gets(bp, (char *) buf, BUFSIZE); if ((int) len < 0) { ERR_print_errors(bio_err); return 1; } } if (binout) BIO_write(out, buf, len); else if (sep == 2) { for (i = 0; i < (int) len; i++) BIO_printf(out, "%02x", buf[i]); BIO_printf(out, " *%s\n", file); } else { if (sig_name) BIO_printf(out, "%s-%s(%s)= ", sig_name, md_name, file); else if (md_name) BIO_printf(out, "%s(%s)= ", md_name, file); else BIO_printf(out, "(%s)= ", file); for (i = 0; i < (int) len; i++) { if (sep && (i != 0)) BIO_printf(out, ":"); BIO_printf(out, "%02x", buf[i]); } BIO_printf(out, "\n"); } return 0; } |
Added jni/libressl/apps/openssl/dh.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 | /* $OpenBSD: dh.c,v 1.7 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */ #ifndef OPENSSL_NO_DH #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/dh.h> #include <openssl/pem.h> #include <openssl/x509.h> static struct { int C; int check; char *infile; int informat; int noout; char *outfile; int outformat; int text; } dh_config; static struct option dh_options[] = { { .name = "C", .desc = "Convert DH parameters into C code", .type = OPTION_FLAG, .opt.flag = &dh_config.C, }, { .name = "check", .desc = "Check the DH parameters", .type = OPTION_FLAG, .opt.flag = &dh_config.check, }, { .name = "in", .argname = "file", .desc = "Input file (default stdin)", .type = OPTION_ARG, .opt.arg = &dh_config.infile, }, { .name = "inform", .argname = "format", .desc = "Input format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &dh_config.informat, }, { .name = "noout", .desc = "No output", .type = OPTION_FLAG, .opt.flag = &dh_config.noout, }, { .name = "out", .argname = "file", .desc = "Output file (default stdout)", .type = OPTION_ARG, .opt.arg = &dh_config.outfile, }, { .name = "outform", .argname = "format", .desc = "Output format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &dh_config.outformat, }, { .name = "text", .desc = "Print a text form of the DH parameters", .type = OPTION_FLAG, .opt.flag = &dh_config.text, }, { NULL }, }; static void dh_usage(void) { fprintf(stderr, "usage: dh [-C] [-check] [-in file] [-inform format]\n" " [-noout] [-out file] [-outform format] [-text]\n\n"); options_usage(dh_options); } int dh_main(int argc, char **argv) { DH *dh = NULL; int i; BIO *in = NULL, *out = NULL; int ret = 1; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&dh_config, 0, sizeof(dh_config)); dh_config.informat = FORMAT_PEM; dh_config.outformat = FORMAT_PEM; if (options_parse(argc, argv, dh_options, NULL, NULL) != 0) { dh_usage(); goto end; } in = BIO_new(BIO_s_file()); out = BIO_new(BIO_s_file()); if (in == NULL || out == NULL) { ERR_print_errors(bio_err); goto end; } if (dh_config.infile == NULL) BIO_set_fp(in, stdin, BIO_NOCLOSE); else { if (BIO_read_filename(in, dh_config.infile) <= 0) { perror(dh_config.infile); goto end; } } if (dh_config.outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, dh_config.outfile) <= 0) { perror(dh_config.outfile); goto end; } } if (dh_config.informat == FORMAT_ASN1) dh = d2i_DHparams_bio(in, NULL); else if (dh_config.informat == FORMAT_PEM) dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); else { BIO_printf(bio_err, "bad input format specified\n"); goto end; } if (dh == NULL) { BIO_printf(bio_err, "unable to load DH parameters\n"); ERR_print_errors(bio_err); goto end; } if (dh_config.text) { DHparams_print(out, dh); } if (dh_config.check) { if (!DH_check(dh, &i)) { ERR_print_errors(bio_err); goto end; } if (i & DH_CHECK_P_NOT_PRIME) printf("p value is not prime\n"); if (i & DH_CHECK_P_NOT_SAFE_PRIME) printf("p value is not a safe prime\n"); if (i & DH_UNABLE_TO_CHECK_GENERATOR) printf("unable to check the generator value\n"); if (i & DH_NOT_SUITABLE_GENERATOR) printf("the g value is not a generator\n"); if (i == 0) printf("DH parameters appear to be ok.\n"); } if (dh_config.C) { unsigned char *data; int len, l, bits; len = BN_num_bytes(dh->p); bits = BN_num_bits(dh->p); data = malloc(len); if (data == NULL) { perror("malloc"); goto end; } l = BN_bn2bin(dh->p, data); printf("static unsigned char dh%d_p[] = {", bits); for (i = 0; i < l; i++) { if ((i % 12) == 0) printf("\n\t"); printf("0x%02X, ", data[i]); } printf("\n\t};\n"); l = BN_bn2bin(dh->g, data); printf("static unsigned char dh%d_g[] = {", bits); for (i = 0; i < l; i++) { if ((i % 12) == 0) printf("\n\t"); printf("0x%02X, ", data[i]); } printf("\n\t};\n\n"); printf("DH *get_dh%d()\n\t{\n", bits); printf("\tDH *dh;\n\n"); printf("\tif ((dh = DH_new()) == NULL) return(NULL);\n"); printf("\tdh->p = BN_bin2bn(dh%d_p, sizeof(dh%d_p), NULL);\n", bits, bits); printf("\tdh->g = BN_bin2bn(dh%d_g, sizeof(dh%d_g), NULL);\n", bits, bits); printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n"); printf("\t\treturn(NULL);\n"); printf("\treturn(dh);\n\t}\n"); free(data); } if (!dh_config.noout) { if (dh_config.outformat == FORMAT_ASN1) i = i2d_DHparams_bio(out, dh); else if (dh_config.outformat == FORMAT_PEM) i = PEM_write_bio_DHparams(out, dh); else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } if (!i) { BIO_printf(bio_err, "unable to write DH parameters\n"); ERR_print_errors(bio_err); goto end; } } ret = 0; end: BIO_free(in); if (out != NULL) BIO_free_all(out); if (dh != NULL) DH_free(dh); return (ret); } #endif |
Added jni/libressl/apps/openssl/dhparam.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 | /* $OpenBSD: dhparam.c,v 1.7 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */ #ifndef OPENSSL_NO_DH #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/dh.h> #include <openssl/pem.h> #include <openssl/x509.h> #include <openssl/dsa.h> #define DEFBITS 2048 struct { int C; int check; int dsaparam; int g; char *infile; int informat; int noout; char *outfile; int outformat; int text; } dhparam_config; struct option dhparam_options[] = { { .name = "2", .desc = "Generate DH parameters with a generator value of 2 " "(default)", .type = OPTION_VALUE, .opt.value = &dhparam_config.g, .value = 2, }, { .name = "5", .desc = "Generate DH parameters with a generator value of 5", .type = OPTION_VALUE, .opt.value = &dhparam_config.g, .value = 5, }, { .name = "C", .desc = "Convert DH parameters into C code", .type = OPTION_FLAG, .opt.flag = &dhparam_config.C, }, { .name = "check", .desc = "Check the DH parameters", .type = OPTION_FLAG, .opt.flag = &dhparam_config.check, }, { .name = "dsaparam", .desc = "Read or generate DSA parameters and convert to DH", .type = OPTION_FLAG, .opt.flag = &dhparam_config.dsaparam, }, { .name = "in", .argname = "file", .desc = "Input file (default stdin)", .type = OPTION_ARG, .opt.arg = &dhparam_config.infile, }, { .name = "inform", .argname = "format", .desc = "Input format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &dhparam_config.informat, }, { .name = "noout", .desc = "Do not output encoded version of DH parameters", .type = OPTION_FLAG, .opt.flag = &dhparam_config.noout, }, { .name = "out", .argname = "file", .desc = "Output file (default stdout)", .type = OPTION_ARG, .opt.arg = &dhparam_config.outfile, }, { .name = "outform", .argname = "format", .desc = "Output format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &dhparam_config.outformat, }, { .name = "text", .desc = "Print DH parameters in plain text", .type = OPTION_FLAG, .opt.flag = &dhparam_config.text, }, { NULL }, }; static void dhparam_usage() { fprintf(stderr, "usage: dhparam [-2 | -5] [-C] [-check] [-dsaparam]\n" " [-in file] [-inform DER | PEM] [-noout] [-out file]\n" " [-outform DER | PEM] [-text] [numbits]\n\n"); options_usage(dhparam_options); } static int dh_cb(int p, int n, BN_GENCB * cb); int dhparam_main(int argc, char **argv) { BIO *in = NULL, *out = NULL; char *num_bits = NULL; DH *dh = NULL; int num = 0; int ret = 1; int i; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&dhparam_config, 0, sizeof(dhparam_config)); dhparam_config.informat = FORMAT_PEM; dhparam_config.outformat = FORMAT_PEM; if (options_parse(argc, argv, dhparam_options, &num_bits, NULL) != 0) { dhparam_usage(); return (1); } if (num_bits != NULL) { if(sscanf(num_bits, "%d", &num) == 0 || num <= 0) { BIO_printf(bio_err, "invalid number of bits: %s\n", num_bits); return (1); } } if (dhparam_config.g && !num) num = DEFBITS; if (dhparam_config.dsaparam) { if (dhparam_config.g) { BIO_printf(bio_err, "generator may not be chosen for DSA parameters\n"); goto end; } } else { /* DH parameters */ if (num && !dhparam_config.g) dhparam_config.g = 2; } if (num) { BN_GENCB cb; BN_GENCB_set(&cb, dh_cb, bio_err); if (dhparam_config.dsaparam) { DSA *dsa = DSA_new(); BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n", num); if (!dsa || !DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL, &cb)) { if (dsa) DSA_free(dsa); ERR_print_errors(bio_err); goto end; } dh = DSA_dup_DH(dsa); DSA_free(dsa); if (dh == NULL) { ERR_print_errors(bio_err); goto end; } } else { dh = DH_new(); BIO_printf(bio_err, "Generating DH parameters, %d bit long safe prime, generator %d\n", num, dhparam_config.g); BIO_printf(bio_err, "This is going to take a long time\n"); if (!dh || !DH_generate_parameters_ex(dh, num, dhparam_config.g, &cb)) { ERR_print_errors(bio_err); goto end; } } } else { in = BIO_new(BIO_s_file()); if (in == NULL) { ERR_print_errors(bio_err); goto end; } if (dhparam_config.infile == NULL) BIO_set_fp(in, stdin, BIO_NOCLOSE); else { if (BIO_read_filename(in, dhparam_config.infile) <= 0) { perror(dhparam_config.infile); goto end; } } if (dhparam_config.informat != FORMAT_ASN1 && dhparam_config.informat != FORMAT_PEM) { BIO_printf(bio_err, "bad input format specified\n"); goto end; } if (dhparam_config.dsaparam) { DSA *dsa; if (dhparam_config.informat == FORMAT_ASN1) dsa = d2i_DSAparams_bio(in, NULL); else /* informat == FORMAT_PEM */ dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL); if (dsa == NULL) { BIO_printf(bio_err, "unable to load DSA parameters\n"); ERR_print_errors(bio_err); goto end; } dh = DSA_dup_DH(dsa); DSA_free(dsa); if (dh == NULL) { ERR_print_errors(bio_err); goto end; } } else { if (dhparam_config.informat == FORMAT_ASN1) dh = d2i_DHparams_bio(in, NULL); else /* informat == FORMAT_PEM */ dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); if (dh == NULL) { BIO_printf(bio_err, "unable to load DH parameters\n"); ERR_print_errors(bio_err); goto end; } } /* dh != NULL */ } out = BIO_new(BIO_s_file()); if (out == NULL) { ERR_print_errors(bio_err); goto end; } if (dhparam_config.outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, dhparam_config.outfile) <= 0) { perror(dhparam_config.outfile); goto end; } } if (dhparam_config.text) { DHparams_print(out, dh); } if (dhparam_config.check) { if (!DH_check(dh, &i)) { ERR_print_errors(bio_err); goto end; } if (i & DH_CHECK_P_NOT_PRIME) printf("p value is not prime\n"); if (i & DH_CHECK_P_NOT_SAFE_PRIME) printf("p value is not a safe prime\n"); if (i & DH_UNABLE_TO_CHECK_GENERATOR) printf("unable to check the generator value\n"); if (i & DH_NOT_SUITABLE_GENERATOR) printf("the g value is not a generator\n"); if (i == 0) printf("DH parameters appear to be ok.\n"); } if (dhparam_config.C) { unsigned char *data; int len, l, bits; len = BN_num_bytes(dh->p); bits = BN_num_bits(dh->p); data = malloc(len); if (data == NULL) { perror("malloc"); goto end; } printf("#ifndef HEADER_DH_H\n" "#include <openssl/dh.h>\n" "#endif\n"); printf("DH *get_dh%d()\n\t{\n", bits); l = BN_bn2bin(dh->p, data); printf("\tstatic unsigned char dh%d_p[] = {", bits); for (i = 0; i < l; i++) { if ((i % 12) == 0) printf("\n\t\t"); printf("0x%02X, ", data[i]); } printf("\n\t\t};\n"); l = BN_bn2bin(dh->g, data); printf("\tstatic unsigned char dh%d_g[] = {", bits); for (i = 0; i < l; i++) { if ((i % 12) == 0) printf("\n\t\t"); printf("0x%02X, ", data[i]); } printf("\n\t\t};\n"); printf("\tDH *dh;\n\n"); printf("\tif ((dh = DH_new()) == NULL) return(NULL);\n"); printf("\tdh->p = BN_bin2bn(dh%d_p, sizeof(dh%d_p), NULL);\n", bits, bits); printf("\tdh->g = BN_bin2bn(dh%d_g, sizeof(dh%d_g), NULL);\n", bits, bits); printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n"); printf("\t\t{ DH_free(dh); return(NULL); }\n"); if (dh->length) printf("\tdh->length = %ld;\n", dh->length); printf("\treturn(dh);\n\t}\n"); free(data); } if (!dhparam_config.noout) { if (dhparam_config.outformat == FORMAT_ASN1) i = i2d_DHparams_bio(out, dh); else if (dhparam_config.outformat == FORMAT_PEM) i = PEM_write_bio_DHparams(out, dh); else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } if (!i) { BIO_printf(bio_err, "unable to write DH parameters\n"); ERR_print_errors(bio_err); goto end; } } ret = 0; end: BIO_free(in); if (out != NULL) BIO_free_all(out); if (dh != NULL) DH_free(dh); return (ret); } /* dh_cb is identical to dsa_cb in apps/dsaparam.c */ static int dh_cb(int p, int n, BN_GENCB * cb) { char c = '*'; if (p == 0) c = '.'; if (p == 1) c = '+'; if (p == 2) c = '*'; if (p == 3) c = '\n'; BIO_write(cb->arg, &c, 1); (void) BIO_flush(cb->arg); return 1; } #endif |
Added jni/libressl/apps/openssl/dsa.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 | /* $OpenBSD: dsa.c,v 1.7 2015/10/17 07:51:10 semarie Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */ #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/dsa.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/pem.h> #include <openssl/x509.h> static struct { const EVP_CIPHER *enc; char *infile; int informat; int modulus; int noout; char *outfile; int outformat; char *passargin; char *passargout; int pubin; int pubout; int pvk_encr; int text; } dsa_config; static int dsa_opt_enc(int argc, char **argv, int *argsused) { char *name = argv[0]; if (*name++ != '-') return (1); if ((dsa_config.enc = EVP_get_cipherbyname(name)) != NULL) { *argsused = 1; return (0); } return (1); } static struct option dsa_options[] = { { .name = "in", .argname = "file", .desc = "Input file (default stdin)", .type = OPTION_ARG, .opt.arg = &dsa_config.infile, }, { .name = "inform", .argname = "format", .desc = "Input format (PEM (default) or any other supported" " format)", .type = OPTION_ARG_FORMAT, .opt.value = &dsa_config.informat, }, { .name = "noout", .desc = "No output", .type = OPTION_FLAG, .opt.flag = &dsa_config.noout, }, { .name = "out", .argname = "file", .desc = "Output file (default stdout)", .type = OPTION_ARG, .opt.arg = &dsa_config.outfile, }, { .name = "outform", .argname = "format", .desc = "Output format (DER, MSBLOB, PEM (default) or PVK)", .type = OPTION_ARG_FORMAT, .opt.value = &dsa_config.outformat, }, { .name = "passin", .argname = "source", .desc = "Input file passphrase source", .type = OPTION_ARG, .opt.arg = &dsa_config.passargin, }, { .name = "passout", .argname = "source", .desc = "Output file passphrase source", .type = OPTION_ARG, .opt.arg = &dsa_config.passargout, }, { .name = "pubin", .desc = "Read a public key from the input file instead of" " private key", .type = OPTION_FLAG, .opt.flag = &dsa_config.pubin, }, { .name = "pubout", .desc = "Output a public key instead of private key", .type = OPTION_FLAG, .opt.flag = &dsa_config.pubout, }, { .name = "pvk-none", .desc = "PVK encryption level", .type = OPTION_VALUE, .value = 0, .opt.value = &dsa_config.pvk_encr, }, { .name = "pvk-strong", .desc = "PVK encryption level (default)", .type = OPTION_VALUE, .value = 2, .opt.value = &dsa_config.pvk_encr, }, { .name = "pvk-weak", .desc = "PVK encryption level", .type = OPTION_VALUE, .value = 1, .opt.value = &dsa_config.pvk_encr, }, { .name = "text", .desc = "Print the key in text form", .type = OPTION_FLAG, .opt.flag = &dsa_config.text, }, { .name = NULL, .type = OPTION_ARGV_FUNC, .opt.argvfunc = dsa_opt_enc, }, { NULL }, }; static void show_ciphers(const OBJ_NAME *name, void *arg) { static int n; if (!islower((unsigned char)*name->name)) return; fprintf(stderr, " -%-24s%s", name->name, (++n % 3 ? "" : "\n")); } static void dsa_usage(void) { fprintf(stderr, "usage: dsa [-in file] [-inform format] [-noout]\n" " [-out file] [-outform format] [-passin src] [-passout src]\n" " [-pubin] [-pubout] [-pvk-none | -pvk-strong | -pvk-weak]\n" " [-text] [-ciphername]\n\n"); options_usage(dsa_options); fprintf(stderr, "\n"); fprintf(stderr, "Valid ciphername values:\n\n"); OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, show_ciphers, NULL); fprintf(stderr, "\n"); } int dsa_main(int argc, char **argv) { int ret = 1; DSA *dsa = NULL; int i; BIO *in = NULL, *out = NULL; char *passin = NULL, *passout = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } memset(&dsa_config, 0, sizeof(dsa_config)); dsa_config.pvk_encr = 2; dsa_config.informat = FORMAT_PEM; dsa_config.outformat = FORMAT_PEM; if (options_parse(argc, argv, dsa_options, NULL, NULL) != 0) { dsa_usage(); goto end; } if (!app_passwd(bio_err, dsa_config.passargin, dsa_config.passargout, &passin, &passout)) { BIO_printf(bio_err, "Error getting passwords\n"); goto end; } in = BIO_new(BIO_s_file()); out = BIO_new(BIO_s_file()); if (in == NULL || out == NULL) { ERR_print_errors(bio_err); goto end; } if (dsa_config.infile == NULL) BIO_set_fp(in, stdin, BIO_NOCLOSE); else { if (BIO_read_filename(in, dsa_config.infile) <= 0) { perror(dsa_config.infile); goto end; } } BIO_printf(bio_err, "read DSA key\n"); { EVP_PKEY *pkey; if (dsa_config.pubin) pkey = load_pubkey(bio_err, dsa_config.infile, dsa_config.informat, 1, passin, "Public Key"); else pkey = load_key(bio_err, dsa_config.infile, dsa_config.informat, 1, passin, "Private Key"); if (pkey) { dsa = EVP_PKEY_get1_DSA(pkey); EVP_PKEY_free(pkey); } } if (dsa == NULL) { BIO_printf(bio_err, "unable to load Key\n"); ERR_print_errors(bio_err); goto end; } if (dsa_config.outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, dsa_config.outfile) <= 0) { perror(dsa_config.outfile); goto end; } } if (dsa_config.text) { if (!DSA_print(out, dsa, 0)) { perror(dsa_config.outfile); ERR_print_errors(bio_err); goto end; } } if (dsa_config.modulus) { fprintf(stdout, "Public Key="); BN_print(out, dsa->pub_key); fprintf(stdout, "\n"); } if (dsa_config.noout) goto end; BIO_printf(bio_err, "writing DSA key\n"); if (dsa_config.outformat == FORMAT_ASN1) { if (dsa_config.pubin || dsa_config.pubout) i = i2d_DSA_PUBKEY_bio(out, dsa); else i = i2d_DSAPrivateKey_bio(out, dsa); } else if (dsa_config.outformat == FORMAT_PEM) { if (dsa_config.pubin || dsa_config.pubout) i = PEM_write_bio_DSA_PUBKEY(out, dsa); else i = PEM_write_bio_DSAPrivateKey(out, dsa, dsa_config.enc, NULL, 0, NULL, passout); #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_RC4) } else if (dsa_config.outformat == FORMAT_MSBLOB || dsa_config.outformat == FORMAT_PVK) { EVP_PKEY *pk; pk = EVP_PKEY_new(); EVP_PKEY_set1_DSA(pk, dsa); if (dsa_config.outformat == FORMAT_PVK) i = i2b_PVK_bio(out, pk, dsa_config.pvk_encr, 0, passout); else if (dsa_config.pubin || dsa_config.pubout) i = i2b_PublicKey_bio(out, pk); else i = i2b_PrivateKey_bio(out, pk); EVP_PKEY_free(pk); #endif } else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } if (i <= 0) { BIO_printf(bio_err, "unable to write private key\n"); ERR_print_errors(bio_err); } else ret = 0; end: BIO_free(in); if (out != NULL) BIO_free_all(out); if (dsa != NULL) DSA_free(dsa); free(passin); free(passout); return (ret); } |
Added jni/libressl/apps/openssl/dsaparam.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 | /* $OpenBSD: dsaparam.c,v 1.6 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */ /* Until the key-gen callbacks are modified to use newer prototypes, we allow * deprecated functions for openssl-internal code */ #ifdef OPENSSL_NO_DEPRECATED #undef OPENSSL_NO_DEPRECATED #endif #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/dsa.h> #include <openssl/pem.h> #include <openssl/x509.h> static struct { int C; int genkey; char *infile; int informat; int noout; char *outfile; int outformat; int text; } dsaparam_config; static struct option dsaparam_options[] = { { .name = "C", .desc = "Convert DSA parameters into C code", .type = OPTION_FLAG, .opt.flag = &dsaparam_config.C, }, { .name = "genkey", .desc = "Generate a DSA key", .type = OPTION_FLAG, .opt.flag = &dsaparam_config.genkey, }, { .name = "in", .argname = "file", .desc = "Input file (default stdin)", .type = OPTION_ARG, .opt.arg = &dsaparam_config.infile, }, { .name = "inform", .argname = "format", .desc = "Input format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &dsaparam_config.informat, }, { .name = "noout", .desc = "No output", .type = OPTION_FLAG, .opt.flag = &dsaparam_config.noout, }, { .name = "out", .argname = "file", .desc = "Output file (default stdout)", .type = OPTION_ARG, .opt.arg = &dsaparam_config.outfile, }, { .name = "outform", .argname = "format", .desc = "Output format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &dsaparam_config.outformat, }, { .name = "text", .desc = "Print as text", .type = OPTION_FLAG, .opt.flag = &dsaparam_config.text, }, { NULL }, }; static void dsaparam_usage(void) { fprintf(stderr, "usage: dsaparam [-C] [-genkey] [-in file]\n" " [-inform format] [-noout] [-out file] [-outform format]\n" " [-text] [numbits]\n\n"); options_usage(dsaparam_options); } static int dsa_cb(int p, int n, BN_GENCB * cb); int dsaparam_main(int argc, char **argv) { DSA *dsa = NULL; int i; BIO *in = NULL, *out = NULL; int ret = 1; int numbits = -1; char *strbits = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&dsaparam_config, 0, sizeof(dsaparam_config)); dsaparam_config.informat = FORMAT_PEM; dsaparam_config.outformat = FORMAT_PEM; if (options_parse(argc, argv, dsaparam_options, &strbits, NULL) != 0) { dsaparam_usage(); goto end; } if (strbits != NULL) { const char *errstr; numbits = strtonum(strbits, 0, INT_MAX, &errstr); if (errstr) { fprintf(stderr, "Invalid number of bits: %s", errstr); goto end; } } in = BIO_new(BIO_s_file()); out = BIO_new(BIO_s_file()); if (in == NULL || out == NULL) { ERR_print_errors(bio_err); goto end; } if (dsaparam_config.infile == NULL) BIO_set_fp(in, stdin, BIO_NOCLOSE); else { if (BIO_read_filename(in, dsaparam_config.infile) <= 0) { perror(dsaparam_config.infile); goto end; } } if (dsaparam_config.outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, dsaparam_config.outfile) <= 0) { perror(dsaparam_config.outfile); goto end; } } if (numbits > 0) { BN_GENCB cb; BN_GENCB_set(&cb, dsa_cb, bio_err); dsa = DSA_new(); if (!dsa) { BIO_printf(bio_err, "Error allocating DSA object\n"); goto end; } BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n", numbits); BIO_printf(bio_err, "This could take some time\n"); if (!DSA_generate_parameters_ex(dsa, numbits, NULL, 0, NULL, NULL, &cb)) { ERR_print_errors(bio_err); BIO_printf(bio_err, "Error, DSA key generation failed\n"); goto end; } } else if (dsaparam_config.informat == FORMAT_ASN1) dsa = d2i_DSAparams_bio(in, NULL); else if (dsaparam_config.informat == FORMAT_PEM) dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL); else { BIO_printf(bio_err, "bad input format specified\n"); goto end; } if (dsa == NULL) { BIO_printf(bio_err, "unable to load DSA parameters\n"); ERR_print_errors(bio_err); goto end; } if (dsaparam_config.text) { DSAparams_print(out, dsa); } if (dsaparam_config.C) { unsigned char *data; int l, len, bits_p; len = BN_num_bytes(dsa->p); bits_p = BN_num_bits(dsa->p); data = malloc(len + 20); if (data == NULL) { perror("malloc"); goto end; } l = BN_bn2bin(dsa->p, data); printf("static unsigned char dsa%d_p[] = {", bits_p); for (i = 0; i < l; i++) { if ((i % 12) == 0) printf("\n\t"); printf("0x%02X, ", data[i]); } printf("\n\t};\n"); l = BN_bn2bin(dsa->q, data); printf("static unsigned char dsa%d_q[] = {", bits_p); for (i = 0; i < l; i++) { if ((i % 12) == 0) printf("\n\t"); printf("0x%02X, ", data[i]); } printf("\n\t};\n"); l = BN_bn2bin(dsa->g, data); printf("static unsigned char dsa%d_g[] = {", bits_p); for (i = 0; i < l; i++) { if ((i % 12) == 0) printf("\n\t"); printf("0x%02X, ", data[i]); } free(data); printf("\n\t};\n\n"); printf("DSA *get_dsa%d()\n\t{\n", bits_p); printf("\tDSA *dsa;\n\n"); printf("\tif ((dsa = DSA_new()) == NULL) return(NULL);\n"); printf("\tdsa->p = BN_bin2bn(dsa%d_p, sizeof(dsa%d_p), NULL);\n", bits_p, bits_p); printf("\tdsa->q = BN_bin2bn(dsa%d_q, sizeof(dsa%d_q), NULL);\n", bits_p, bits_p); printf("\tdsa->g = BN_bin2bn(dsa%d_g, sizeof(dsa%d_g), NULL);\n", bits_p, bits_p); printf("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n"); printf("\t\t{ DSA_free(dsa); return(NULL); }\n"); printf("\treturn(dsa);\n\t}\n"); } if (!dsaparam_config.noout) { if (dsaparam_config.outformat == FORMAT_ASN1) i = i2d_DSAparams_bio(out, dsa); else if (dsaparam_config.outformat == FORMAT_PEM) i = PEM_write_bio_DSAparams(out, dsa); else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } if (!i) { BIO_printf(bio_err, "unable to write DSA parameters\n"); ERR_print_errors(bio_err); goto end; } } if (dsaparam_config.genkey) { DSA *dsakey; if ((dsakey = DSAparams_dup(dsa)) == NULL) goto end; if (!DSA_generate_key(dsakey)) { ERR_print_errors(bio_err); DSA_free(dsakey); goto end; } if (dsaparam_config.outformat == FORMAT_ASN1) i = i2d_DSAPrivateKey_bio(out, dsakey); else if (dsaparam_config.outformat == FORMAT_PEM) i = PEM_write_bio_DSAPrivateKey(out, dsakey, NULL, NULL, 0, NULL, NULL); else { BIO_printf(bio_err, "bad output format specified for outfile\n"); DSA_free(dsakey); goto end; } DSA_free(dsakey); } ret = 0; end: BIO_free(in); if (out != NULL) BIO_free_all(out); if (dsa != NULL) DSA_free(dsa); return (ret); } static int dsa_cb(int p, int n, BN_GENCB * cb) { char c = '*'; if (p == 0) c = '.'; if (p == 1) c = '+'; if (p == 2) c = '*'; if (p == 3) c = '\n'; BIO_write(cb->arg, &c, 1); (void) BIO_flush(cb->arg); #ifdef GENCB_TEST if (stop_keygen_flag) return 0; #endif return 1; } |
Added jni/libressl/apps/openssl/ec.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 | /* $OpenBSD: ec.c,v 1.7 2015/10/17 07:51:10 semarie Exp $ */ /* * Written by Nils Larsch for the OpenSSL project. */ /* ==================================================================== * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <openssl/opensslconf.h> #ifndef OPENSSL_NO_EC #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/pem.h> static struct { int asn1_flag; const EVP_CIPHER *enc; point_conversion_form_t form; char *infile; int informat; char *outfile; int outformat; int new_asn1_flag; int new_form; int noout; int param_out; char *passargin; char *passargout; int pubin; int pubout; int text; } ec_config; static int ec_opt_enc(int argc, char **argv, int *argsused) { char *name = argv[0]; if (*name++ != '-') return (1); if ((ec_config.enc = EVP_get_cipherbyname(name)) != NULL) { *argsused = 1; return (0); } return (1); } static int ec_opt_form(char *arg) { if (strcmp(arg, "compressed") == 0) ec_config.form = POINT_CONVERSION_COMPRESSED; else if (strcmp(arg, "uncompressed") == 0) ec_config.form = POINT_CONVERSION_UNCOMPRESSED; else if (strcmp(arg, "hybrid") == 0) ec_config.form = POINT_CONVERSION_HYBRID; else { fprintf(stderr, "Invalid point conversion: %s\n", arg); return (1); } ec_config.new_form = 1; return (0); } static int ec_opt_named(char *arg) { if (strcmp(arg, "named_curve") == 0) ec_config.asn1_flag = OPENSSL_EC_NAMED_CURVE; else if (strcmp(arg, "explicit") == 0) ec_config.asn1_flag = 0; else { fprintf(stderr, "Invalid curve type: %s\n", arg); return (1); } ec_config.new_asn1_flag = 1; return (0); } static struct option ec_options[] = { { .name = "conv_form", .argname = "form", .desc = "Specify the point conversion form (default" " \"named_curve\")", .type = OPTION_ARG_FUNC, .opt.argfunc = ec_opt_form, }, { .name = "in", .argname = "file", .desc = "Input file (default stdin)", .type = OPTION_ARG, .opt.arg = &ec_config.infile, }, { .name = "inform", .argname = "format", .desc = "Input format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &ec_config.informat, }, { .name = "noout", .desc = "No output", .type = OPTION_FLAG, .opt.flag = &ec_config.noout, }, { .name = "out", .argname = "file", .desc = "Output file (default stdout)", .type = OPTION_ARG, .opt.arg = &ec_config.outfile, }, { .name = "outform", .argname = "format", .desc = "Output format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &ec_config.outformat, }, { .name = "param_enc", .argname = "type", .desc = "Specify the way the ec parameters are encoded" " (default \"uncompressed\")", .type = OPTION_ARG_FUNC, .opt.argfunc = ec_opt_named, }, { .name = "param_out", .desc = "Print the elliptic curve parameters", .type = OPTION_FLAG, .opt.flag = &ec_config.param_out, }, { .name = "passin", .argname = "source", .desc = "Input file passphrase source", .type = OPTION_ARG, .opt.arg = &ec_config.passargin, }, { .name = "passout", .argname = "source", .desc = "Output file passphrase source", .type = OPTION_ARG, .opt.arg = &ec_config.passargout, }, { .name = "pubin", .desc = "Read public key instead of private key from input", .type = OPTION_FLAG, .opt.flag = &ec_config.pubin, }, { .name = "pubout", .desc = "Output public key instead of private key in output", .type = OPTION_FLAG, .opt.flag = &ec_config.pubout, }, { .name = "text", .desc = "Print the public/private key components and parameters", .type = OPTION_FLAG, .opt.flag = &ec_config.text, }, { .name = NULL, .desc = "Cipher to encrypt the output if using PEM format", .type = OPTION_ARGV_FUNC, .opt.argvfunc = ec_opt_enc, }, { NULL }, }; static void show_ciphers(const OBJ_NAME *name, void *arg) { static int n; if (!islower((unsigned char)*name->name)) return; fprintf(stderr, " -%-24s%s", name->name, (++n % 3 ? "" : "\n")); } static void ec_usage(void) { fprintf(stderr, "usage: ec [-conv_form form] [-in file]\n" " [-inform format] [-noout] [-out file] [-outform format]\n" " [-param_enc type] [-param_out] [-passin file]\n" " [-passout file] [-pubin] [-pubout] [-text] [-ciphername]\n\n"); options_usage(ec_options); fprintf(stderr, "\n"); fprintf(stderr, "Valid ciphername values:\n\n"); OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, show_ciphers, NULL); fprintf(stderr, "\n"); } int ec_main(int argc, char **argv) { int ret = 1; EC_KEY *eckey = NULL; const EC_GROUP *group; int i; BIO *in = NULL, *out = NULL; char *passin = NULL, *passout = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } memset(&ec_config, 0, sizeof(ec_config)); ec_config.asn1_flag = OPENSSL_EC_NAMED_CURVE; ec_config.form = POINT_CONVERSION_UNCOMPRESSED; ec_config.informat = FORMAT_PEM; ec_config.outformat = FORMAT_PEM; if (options_parse(argc, argv, ec_options, NULL, NULL) != 0) { ec_usage(); goto end; } if (!app_passwd(bio_err, ec_config.passargin, ec_config.passargout, &passin, &passout)) { BIO_printf(bio_err, "Error getting passwords\n"); goto end; } in = BIO_new(BIO_s_file()); out = BIO_new(BIO_s_file()); if (in == NULL || out == NULL) { ERR_print_errors(bio_err); goto end; } if (ec_config.infile == NULL) BIO_set_fp(in, stdin, BIO_NOCLOSE); else { if (BIO_read_filename(in, ec_config.infile) <= 0) { perror(ec_config.infile); goto end; } } BIO_printf(bio_err, "read EC key\n"); if (ec_config.informat == FORMAT_ASN1) { if (ec_config.pubin) eckey = d2i_EC_PUBKEY_bio(in, NULL); else eckey = d2i_ECPrivateKey_bio(in, NULL); } else if (ec_config.informat == FORMAT_PEM) { if (ec_config.pubin) eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, NULL); else eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL, passin); } else { BIO_printf(bio_err, "bad input format specified for key\n"); goto end; } if (eckey == NULL) { BIO_printf(bio_err, "unable to load Key\n"); ERR_print_errors(bio_err); goto end; } if (ec_config.outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, ec_config.outfile) <= 0) { perror(ec_config.outfile); goto end; } } group = EC_KEY_get0_group(eckey); if (ec_config.new_form) EC_KEY_set_conv_form(eckey, ec_config.form); if (ec_config.new_asn1_flag) EC_KEY_set_asn1_flag(eckey, ec_config.asn1_flag); if (ec_config.text) if (!EC_KEY_print(out, eckey, 0)) { perror(ec_config.outfile); ERR_print_errors(bio_err); goto end; } if (ec_config.noout) { ret = 0; goto end; } BIO_printf(bio_err, "writing EC key\n"); if (ec_config.outformat == FORMAT_ASN1) { if (ec_config.param_out) i = i2d_ECPKParameters_bio(out, group); else if (ec_config.pubin || ec_config.pubout) i = i2d_EC_PUBKEY_bio(out, eckey); else i = i2d_ECPrivateKey_bio(out, eckey); } else if (ec_config.outformat == FORMAT_PEM) { if (ec_config.param_out) i = PEM_write_bio_ECPKParameters(out, group); else if (ec_config.pubin || ec_config.pubout) i = PEM_write_bio_EC_PUBKEY(out, eckey); else i = PEM_write_bio_ECPrivateKey(out, eckey, ec_config.enc, NULL, 0, NULL, passout); } else { BIO_printf(bio_err, "bad output format specified for " "outfile\n"); goto end; } if (!i) { BIO_printf(bio_err, "unable to write private key\n"); ERR_print_errors(bio_err); } else ret = 0; end: BIO_free(in); if (out) BIO_free_all(out); if (eckey) EC_KEY_free(eckey); free(passin); free(passout); return (ret); } #endif |
Added jni/libressl/apps/openssl/ecparam.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 | /* $OpenBSD: ecparam.c,v 1.14 2015/10/10 22:28:51 doug Exp $ */ /* * Written by Nils Larsch for the OpenSSL project. */ /* ==================================================================== * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * * Portions of the attached software ("Contribution") are developed by * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. * * The Contribution is licensed pursuant to the OpenSSL open source * license provided above. * * The elliptic curve binary polynomial software is originally written by * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. * */ #include <openssl/opensslconf.h> #ifndef OPENSSL_NO_EC #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/ec.h> #include <openssl/err.h> #include <openssl/pem.h> #include <openssl/x509.h> static int ecparam_print_var(BIO *, BIGNUM *, const char *, int, unsigned char *); static struct { int C; int asn1_flag; int check; char *curve_name; point_conversion_form_t form; int genkey; char *infile; int informat; int list_curves; int new_asn1_flag; int new_form; int no_seed; int noout; char *outfile; int outformat; int text; } ecparam_config; static int ecparam_opt_form(char *arg) { if (strcmp(arg, "compressed") == 0) ecparam_config.form = POINT_CONVERSION_COMPRESSED; else if (strcmp(arg, "uncompressed") == 0) ecparam_config.form = POINT_CONVERSION_UNCOMPRESSED; else if (strcmp(arg, "hybrid") == 0) ecparam_config.form = POINT_CONVERSION_HYBRID; else return (1); ecparam_config.new_form = 1; return (0); } static int ecparam_opt_enctype(char *arg) { if (strcmp(arg, "explicit") == 0) ecparam_config.asn1_flag = 0; else if (strcmp(arg, "named_curve") == 0) ecparam_config.asn1_flag = OPENSSL_EC_NAMED_CURVE; else return (1); ecparam_config.new_asn1_flag = 1; return (0); } struct option ecparam_options[] = { { .name = "C", .desc = "Convert the EC parameters into C code", .type = OPTION_FLAG, .opt.flag = &ecparam_config.C, }, { .name = "check", .desc = "Validate the elliptic curve parameters", .type = OPTION_FLAG, .opt.flag = &ecparam_config.check, }, { .name = "conv_form", .argname = "form", .desc = "Specify point conversion form:\n" " compressed, uncompressed (default), hybrid", .type = OPTION_ARG_FUNC, .opt.argfunc = ecparam_opt_form, }, { .name = "genkey", .desc = "Generate an EC private key using the specified " "parameters", .type = OPTION_FLAG, .opt.flag = &ecparam_config.genkey, }, { .name = "in", .argname = "file", .desc = "Input file to read parameters from (default stdin)", .type = OPTION_ARG, .opt.arg = &ecparam_config.infile, }, { .name = "inform", .argname = "format", .desc = "Input format (DER or PEM)", .type = OPTION_ARG_FORMAT, .opt.value = &ecparam_config.informat, }, { .name = "list_curves", .desc = "Print list of all currently implemented EC " "parameter names", .type = OPTION_FLAG, .opt.flag = &ecparam_config.list_curves, }, { .name = "name", .argname = "curve", .desc = "Use the EC parameters with the specified name", .type = OPTION_ARG, .opt.arg = &ecparam_config.curve_name, }, { .name = "no_seed", .desc = "Do not output seed with explicit parameter encoding", .type = OPTION_FLAG, .opt.flag = &ecparam_config.no_seed, }, { .name = "noout", .desc = "Do not output encoded version of EC parameters", .type = OPTION_FLAG, .opt.flag = &ecparam_config.noout, }, { .name = "out", .argname = "file", .desc = "Output file to write parameters to (default stdout)", .type = OPTION_ARG, .opt.arg = &ecparam_config.outfile, }, { .name = "outform", .argname = "format", .desc = "Output format (DER or PEM)", .type = OPTION_ARG_FORMAT, .opt.value = &ecparam_config.outformat, }, { .name = "param_enc", .argname = "type", .desc = "Specify EC parameter ASN.1 encoding type:\n" " explicit, named_curve (default)", .type = OPTION_ARG_FUNC, .opt.argfunc = ecparam_opt_enctype, }, { .name = "text", .desc = "Print out the EC parameters in human readable form", .type = OPTION_FLAG, .opt.flag = &ecparam_config.text, }, {NULL}, }; static void ecparam_usage(void) { fprintf(stderr, "usage: ecparam [-C] [-check] [-conv_form arg] " " [-genkey]\n" " [-in file] [-inform DER | PEM] [-list_curves] [-name arg]\n" " [-no_seed] [-noout] [-out file] [-outform DER | PEM]\n" " [-param_enc arg] [-text]\n\n"); options_usage(ecparam_options); } int ecparam_main(int argc, char **argv) { BIGNUM *ec_p = NULL, *ec_a = NULL, *ec_b = NULL, *ec_gen = NULL; BIGNUM *ec_order = NULL, *ec_cofactor = NULL; EC_GROUP *group = NULL; unsigned char *buffer = NULL; BIO *in = NULL, *out = NULL; int i, ret = 1; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&ecparam_config, 0, sizeof(ecparam_config)); ecparam_config.asn1_flag = OPENSSL_EC_NAMED_CURVE; ecparam_config.form = POINT_CONVERSION_UNCOMPRESSED; ecparam_config.informat = FORMAT_PEM; ecparam_config.outformat = FORMAT_PEM; if (options_parse(argc, argv, ecparam_options, NULL, NULL) != 0) { ecparam_usage(); goto end; } in = BIO_new(BIO_s_file()); out = BIO_new(BIO_s_file()); if ((in == NULL) || (out == NULL)) { ERR_print_errors(bio_err); goto end; } if (ecparam_config.infile == NULL) BIO_set_fp(in, stdin, BIO_NOCLOSE); else { if (BIO_read_filename(in, ecparam_config.infile) <= 0) { perror(ecparam_config.infile); goto end; } } if (ecparam_config.outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, ecparam_config.outfile) <= 0) { perror(ecparam_config.outfile); goto end; } } if (ecparam_config.list_curves) { EC_builtin_curve *curves = NULL; size_t crv_len = 0; size_t n = 0; crv_len = EC_get_builtin_curves(NULL, 0); curves = reallocarray(NULL, crv_len, sizeof(EC_builtin_curve)); if (curves == NULL) goto end; if (!EC_get_builtin_curves(curves, crv_len)) { free(curves); goto end; } for (n = 0; n < crv_len; n++) { const char *comment; const char *sname; comment = curves[n].comment; sname = OBJ_nid2sn(curves[n].nid); if (comment == NULL) comment = "CURVE DESCRIPTION NOT AVAILABLE"; if (sname == NULL) sname = ""; BIO_printf(out, " %-10s: ", sname); BIO_printf(out, "%s\n", comment); } free(curves); ret = 0; goto end; } if (ecparam_config.curve_name != NULL) { int nid; /* * workaround for the SECG curve names secp192r1 and * secp256r1 (which are the same as the curves prime192v1 and * prime256v1 defined in X9.62) */ if (!strcmp(ecparam_config.curve_name, "secp192r1")) { BIO_printf(bio_err, "using curve name prime192v1 " "instead of secp192r1\n"); nid = NID_X9_62_prime192v1; } else if (!strcmp(ecparam_config.curve_name, "secp256r1")) { BIO_printf(bio_err, "using curve name prime256v1 " "instead of secp256r1\n"); nid = NID_X9_62_prime256v1; } else nid = OBJ_sn2nid(ecparam_config.curve_name); if (nid == 0) nid = EC_curve_nist2nid(ecparam_config.curve_name); if (nid == 0) { BIO_printf(bio_err, "unknown curve name (%s)\n", ecparam_config.curve_name); goto end; } group = EC_GROUP_new_by_curve_name(nid); if (group == NULL) { BIO_printf(bio_err, "unable to create curve (%s)\n", ecparam_config.curve_name); goto end; } EC_GROUP_set_asn1_flag(group, ecparam_config.asn1_flag); EC_GROUP_set_point_conversion_form(group, ecparam_config.form); } else if (ecparam_config.informat == FORMAT_ASN1) { group = d2i_ECPKParameters_bio(in, NULL); } else if (ecparam_config.informat == FORMAT_PEM) { group = PEM_read_bio_ECPKParameters(in, NULL, NULL, NULL); } else { BIO_printf(bio_err, "bad input format specified\n"); goto end; } if (group == NULL) { BIO_printf(bio_err, "unable to load elliptic curve parameters\n"); ERR_print_errors(bio_err); goto end; } if (ecparam_config.new_form) EC_GROUP_set_point_conversion_form(group, ecparam_config.form); if (ecparam_config.new_asn1_flag) EC_GROUP_set_asn1_flag(group, ecparam_config.asn1_flag); if (ecparam_config.no_seed) EC_GROUP_set_seed(group, NULL, 0); if (ecparam_config.text) { if (!ECPKParameters_print(out, group, 0)) goto end; } if (ecparam_config.check) { BIO_printf(bio_err, "checking elliptic curve parameters: "); if (!EC_GROUP_check(group, NULL)) { BIO_printf(bio_err, "failed\n"); ERR_print_errors(bio_err); } else BIO_printf(bio_err, "ok\n"); } if (ecparam_config.C) { size_t buf_len = 0, tmp_len = 0; const EC_POINT *point; int is_prime, len = 0; const EC_METHOD *meth = EC_GROUP_method_of(group); if ((ec_p = BN_new()) == NULL || (ec_a = BN_new()) == NULL || (ec_b = BN_new()) == NULL || (ec_gen = BN_new()) == NULL || (ec_order = BN_new()) == NULL || (ec_cofactor = BN_new()) == NULL) { perror("malloc"); goto end; } is_prime = (EC_METHOD_get_field_type(meth) == NID_X9_62_prime_field); if (is_prime) { if (!EC_GROUP_get_curve_GFp(group, ec_p, ec_a, ec_b, NULL)) goto end; } else { if (!EC_GROUP_get_curve_GF2m(group, ec_p, ec_a, ec_b, NULL)) goto end; } if ((point = EC_GROUP_get0_generator(group)) == NULL) goto end; if (!EC_POINT_point2bn(group, point, EC_GROUP_get_point_conversion_form(group), ec_gen, NULL)) goto end; if (!EC_GROUP_get_order(group, ec_order, NULL)) goto end; if (!EC_GROUP_get_cofactor(group, ec_cofactor, NULL)) goto end; len = BN_num_bits(ec_order); if ((tmp_len = (size_t) BN_num_bytes(ec_p)) > buf_len) buf_len = tmp_len; if ((tmp_len = (size_t) BN_num_bytes(ec_a)) > buf_len) buf_len = tmp_len; if ((tmp_len = (size_t) BN_num_bytes(ec_b)) > buf_len) buf_len = tmp_len; if ((tmp_len = (size_t) BN_num_bytes(ec_gen)) > buf_len) buf_len = tmp_len; if ((tmp_len = (size_t) BN_num_bytes(ec_order)) > buf_len) buf_len = tmp_len; if ((tmp_len = (size_t) BN_num_bytes(ec_cofactor)) > buf_len) buf_len = tmp_len; buffer = malloc(buf_len); if (buffer == NULL) { perror("malloc"); goto end; } ecparam_print_var(out, ec_p, "ec_p", len, buffer); ecparam_print_var(out, ec_a, "ec_a", len, buffer); ecparam_print_var(out, ec_b, "ec_b", len, buffer); ecparam_print_var(out, ec_gen, "ec_gen", len, buffer); ecparam_print_var(out, ec_order, "ec_order", len, buffer); ecparam_print_var(out, ec_cofactor, "ec_cofactor", len, buffer); BIO_printf(out, "\n\n"); BIO_printf(out, "EC_GROUP *get_ec_group_%d(void)\n\t{\n", len); BIO_printf(out, "\tint ok=0;\n"); BIO_printf(out, "\tEC_GROUP *group = NULL;\n"); BIO_printf(out, "\tEC_POINT *point = NULL;\n"); BIO_printf(out, "\tBIGNUM *tmp_1 = NULL, *tmp_2 = NULL, " "*tmp_3 = NULL;\n\n"); BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_p_%d, " "sizeof(ec_p_%d), NULL)) == NULL)\n\t\t" "goto err;\n", len, len); BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_a_%d, " "sizeof(ec_a_%d), NULL)) == NULL)\n\t\t" "goto err;\n", len, len); BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_b_%d, " "sizeof(ec_b_%d), NULL)) == NULL)\n\t\t" "goto err;\n", len, len); if (is_prime) { BIO_printf(out, "\tif ((group = EC_GROUP_new_curve_" "GFp(tmp_1, tmp_2, tmp_3, NULL)) == NULL)" "\n\t\tgoto err;\n\n"); } else { BIO_printf(out, "\tif ((group = EC_GROUP_new_curve_" "GF2m(tmp_1, tmp_2, tmp_3, NULL)) == NULL)" "\n\t\tgoto err;\n\n"); } BIO_printf(out, "\t/* build generator */\n"); BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_gen_%d, " "sizeof(ec_gen_%d), tmp_1)) == NULL)" "\n\t\tgoto err;\n", len, len); BIO_printf(out, "\tpoint = EC_POINT_bn2point(group, tmp_1, " "NULL, NULL);\n"); BIO_printf(out, "\tif (point == NULL)\n\t\tgoto err;\n"); BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_order_%d, " "sizeof(ec_order_%d), tmp_2)) == NULL)" "\n\t\tgoto err;\n", len, len); BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_cofactor_%d, " "sizeof(ec_cofactor_%d), tmp_3)) == NULL)" "\n\t\tgoto err;\n", len, len); BIO_printf(out, "\tif (!EC_GROUP_set_generator(group, point," " tmp_2, tmp_3))\n\t\tgoto err;\n"); BIO_printf(out, "\n\tok=1;\n"); BIO_printf(out, "err:\n"); BIO_printf(out, "\tif (tmp_1)\n\t\tBN_free(tmp_1);\n"); BIO_printf(out, "\tif (tmp_2)\n\t\tBN_free(tmp_2);\n"); BIO_printf(out, "\tif (tmp_3)\n\t\tBN_free(tmp_3);\n"); BIO_printf(out, "\tif (point)\n\t\tEC_POINT_free(point);\n"); BIO_printf(out, "\tif (!ok)\n"); BIO_printf(out, "\t\t{\n"); BIO_printf(out, "\t\tEC_GROUP_free(group);\n"); BIO_printf(out, "\t\tgroup = NULL;\n"); BIO_printf(out, "\t\t}\n"); BIO_printf(out, "\treturn(group);\n\t}\n"); } if (!ecparam_config.noout) { if (ecparam_config.outformat == FORMAT_ASN1) i = i2d_ECPKParameters_bio(out, group); else if (ecparam_config.outformat == FORMAT_PEM) i = PEM_write_bio_ECPKParameters(out, group); else { BIO_printf(bio_err, "bad output format specified for" " outfile\n"); goto end; } if (!i) { BIO_printf(bio_err, "unable to write elliptic " "curve parameters\n"); ERR_print_errors(bio_err); goto end; } } if (ecparam_config.genkey) { EC_KEY *eckey = EC_KEY_new(); if (eckey == NULL) goto end; if (EC_KEY_set_group(eckey, group) == 0) { EC_KEY_free(eckey); goto end; } if (!EC_KEY_generate_key(eckey)) { EC_KEY_free(eckey); goto end; } if (ecparam_config.outformat == FORMAT_ASN1) i = i2d_ECPrivateKey_bio(out, eckey); else if (ecparam_config.outformat == FORMAT_PEM) i = PEM_write_bio_ECPrivateKey(out, eckey, NULL, NULL, 0, NULL, NULL); else { BIO_printf(bio_err, "bad output format specified " "for outfile\n"); EC_KEY_free(eckey); goto end; } EC_KEY_free(eckey); } ret = 0; end: BN_free(ec_p); BN_free(ec_a); BN_free(ec_b); BN_free(ec_gen); BN_free(ec_order); BN_free(ec_cofactor); free(buffer); BIO_free(in); BIO_free_all(out); EC_GROUP_free(group); return (ret); } static int ecparam_print_var(BIO * out, BIGNUM * in, const char *var, int len, unsigned char *buffer) { BIO_printf(out, "static unsigned char %s_%d[] = {", var, len); if (BN_is_zero(in)) BIO_printf(out, "\n\t0x00"); else { int i, l; l = BN_bn2bin(in, buffer); for (i = 0; i < l - 1; i++) { if ((i % 12) == 0) BIO_printf(out, "\n\t"); BIO_printf(out, "0x%02X,", buffer[i]); } if ((i % 12) == 0) BIO_printf(out, "\n\t"); BIO_printf(out, "0x%02X", buffer[i]); } BIO_printf(out, "\n\t};\n\n"); return 1; } #endif |
Added jni/libressl/apps/openssl/enc.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 | /* $OpenBSD: enc.c,v 1.10 2015/10/17 15:00:11 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/comp.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/objects.h> #include <openssl/pem.h> #include <openssl/x509.h> int set_hex(char *in, unsigned char *out, int size); #define SIZE (512) #define BSIZE (8*1024) static struct { int base64; char *bufsize; const EVP_CIPHER *cipher; int debug; #ifdef ZLIB int do_zlib; #endif int enc; char *hiv; char *hkey; char *hsalt; char *inf; char *keyfile; char *keystr; char *md; int nopad; int nosalt; int olb64; char *outf; char *passarg; int printkey; int verbose; } enc_config; static int enc_opt_cipher(int argc, char **argv, int *argsused) { char *name = argv[0]; if (*name++ != '-') return (1); if (strcmp(name, "none") == 0) { enc_config.cipher = NULL; *argsused = 1; return (0); } if ((enc_config.cipher = EVP_get_cipherbyname(name)) != NULL) { *argsused = 1; return (0); } return (1); } static struct option enc_options[] = { { .name = "A", .desc = "Process base64 data on one line (requires -a)", .type = OPTION_FLAG, .opt.flag = &enc_config.olb64, }, { .name = "a", .desc = "Perform base64 encoding/decoding (alias -base64)", .type = OPTION_FLAG, .opt.flag = &enc_config.base64, }, { .name = "base64", .type = OPTION_FLAG, .opt.flag = &enc_config.base64, }, { .name = "bufsize", .argname = "size", .desc = "Specify the buffer size to use for I/O", .type = OPTION_ARG, .opt.arg = &enc_config.bufsize, }, { .name = "d", .desc = "Decrypt the input data", .type = OPTION_VALUE, .opt.value = &enc_config.enc, .value = 0, }, { .name = "debug", .desc = "Print debugging information", .type = OPTION_FLAG, .opt.flag = &enc_config.debug, }, { .name = "e", .desc = "Encrypt the input data (default)", .type = OPTION_VALUE, .opt.value = &enc_config.enc, .value = 1, }, { .name = "in", .argname = "file", .desc = "Input file to read from (default stdin)", .type = OPTION_ARG, .opt.arg = &enc_config.inf, }, { .name = "iv", .argname = "IV", .desc = "IV to use, specified as a hexadecimal string", .type = OPTION_ARG, .opt.arg = &enc_config.hiv, }, { .name = "K", .argname = "key", .desc = "Key to use, specified as a hexadecimal string", .type = OPTION_ARG, .opt.arg = &enc_config.hkey, }, { .name = "k", /* Superseded by -pass. */ .type = OPTION_ARG, .opt.arg = &enc_config.keystr, }, { .name = "kfile", /* Superseded by -pass. */ .type = OPTION_ARG, .opt.arg = &enc_config.keyfile, }, { .name = "md", .argname = "digest", .desc = "Digest to use to create a key from the passphrase", .type = OPTION_ARG, .opt.arg = &enc_config.md, }, { .name = "none", .desc = "Use NULL cipher (no encryption or decryption)", .type = OPTION_ARGV_FUNC, .opt.argvfunc = enc_opt_cipher, }, { .name = "nopad", .desc = "Disable standard block padding", .type = OPTION_FLAG, .opt.flag = &enc_config.nopad, }, { .name = "nosalt", .type = OPTION_VALUE, .opt.value = &enc_config.nosalt, .value = 1, }, { .name = "out", .argname = "file", .desc = "Output file to write to (default stdout)", .type = OPTION_ARG, .opt.arg = &enc_config.outf, }, { .name = "P", .desc = "Print out the salt, key and IV used, then exit\n" " (no encryption or decryption is performed)", .type = OPTION_VALUE, .opt.value = &enc_config.printkey, .value = 2, }, { .name = "p", .desc = "Print out the salt, key and IV used", .type = OPTION_VALUE, .opt.value = &enc_config.printkey, .value = 1, }, { .name = "pass", .argname = "source", .desc = "Password source", .type = OPTION_ARG, .opt.arg = &enc_config.passarg, }, { .name = "S", .argname = "salt", .desc = "Salt to use, specified as a hexadecimal string", .type = OPTION_ARG, .opt.arg = &enc_config.hsalt, }, { .name = "salt", .desc = "Use a salt in the key derivation routines (default)", .type = OPTION_VALUE, .opt.value = &enc_config.nosalt, .value = 0, }, { .name = "v", .desc = "Verbose", .type = OPTION_FLAG, .opt.flag = &enc_config.verbose, }, #ifdef ZLIB { .name = "z", .desc = "Perform zlib compression/decompression", .type = OPTION_FLAG, .opt.flag = &enc_config.do_zlib, }, #endif { .name = NULL, .type = OPTION_ARGV_FUNC, .opt.argvfunc = enc_opt_cipher, }, { NULL }, }; static void show_ciphers(const OBJ_NAME *name, void *arg) { static int n; if (!islower((unsigned char)*name->name)) return; fprintf(stderr, " -%-24s%s", name->name, (++n % 3 ? "" : "\n")); } static void enc_usage(void) { fprintf(stderr, "usage: enc -ciphername [-AadePp] [-base64] " "[-bufsize number] [-debug]\n" " [-in file] [-iv IV] [-K key] [-k password]\n" " [-kfile file] [-md digest] [-none] [-nopad] [-nosalt]\n" " [-out file] [-pass arg] [-S salt] [-salt]\n\n"); options_usage(enc_options); fprintf(stderr, "\n"); fprintf(stderr, "Valid ciphername values:\n\n"); OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, show_ciphers, NULL); fprintf(stderr, "\n"); } int enc_main(int argc, char **argv) { static const char magic[] = "Salted__"; char mbuf[sizeof magic - 1]; char *strbuf = NULL, *pass = NULL; unsigned char *buff = NULL; int bsize = BSIZE; int ret = 1, inl; unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH]; unsigned char salt[PKCS5_SALT_LEN]; #ifdef ZLIB BIO *bzl = NULL; #endif EVP_CIPHER_CTX *ctx = NULL; const EVP_MD *dgst = NULL; BIO *in = NULL, *out = NULL, *b64 = NULL, *benc = NULL; BIO *rbio = NULL, *wbio = NULL; #define PROG_NAME_SIZE 39 char pname[PROG_NAME_SIZE + 1]; int i; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } memset(&enc_config, 0, sizeof(enc_config)); enc_config.enc = 1; /* first check the program name */ program_name(argv[0], pname, sizeof(pname)); if (strcmp(pname, "base64") == 0) enc_config.base64 = 1; #ifdef ZLIB if (strcmp(pname, "zlib") == 0) enc_config.do_zlib = 1; #endif enc_config.cipher = EVP_get_cipherbyname(pname); #ifdef ZLIB if (!enc_config.do_zlib && !enc_config.base64 && enc_config.cipher == NULL && strcmp(pname, "enc") != 0) #else if (!enc_config.base64 && enc_config.cipher == NULL && strcmp(pname, "enc") != 0) #endif { BIO_printf(bio_err, "%s is an unknown cipher\n", pname); goto end; } if (options_parse(argc, argv, enc_options, NULL, NULL) != 0) { enc_usage(); goto end; } if (enc_config.keyfile != NULL) { static char buf[128]; FILE *infile; infile = fopen(enc_config.keyfile, "r"); if (infile == NULL) { BIO_printf(bio_err, "unable to read key from '%s'\n", enc_config.keyfile); goto end; } buf[0] = '\0'; if (!fgets(buf, sizeof buf, infile)) { BIO_printf(bio_err, "unable to read key from '%s'\n", enc_config.keyfile); fclose(infile); goto end; } fclose(infile); i = strlen(buf); if ((i > 0) && ((buf[i - 1] == '\n') || (buf[i - 1] == '\r'))) buf[--i] = '\0'; if ((i > 0) && ((buf[i - 1] == '\n') || (buf[i - 1] == '\r'))) buf[--i] = '\0'; if (i < 1) { BIO_printf(bio_err, "zero length password\n"); goto end; } enc_config.keystr = buf; } if (enc_config.md != NULL && (dgst = EVP_get_digestbyname(enc_config.md)) == NULL) { BIO_printf(bio_err, "%s is an unsupported message digest type\n", enc_config.md); goto end; } if (dgst == NULL) { dgst = EVP_md5(); /* XXX */ } if (enc_config.bufsize != NULL) { char *p = enc_config.bufsize; unsigned long n; /* XXX - provide an OPTION_ARG_DISKUNIT. */ for (n = 0; *p != '\0'; p++) { i = *p; if ((i <= '9') && (i >= '0')) n = n * 10 + i - '0'; else if (i == 'k') { n *= 1024; p++; break; } } if (*p != '\0') { BIO_printf(bio_err, "invalid 'bufsize' specified.\n"); goto end; } /* It must be large enough for a base64 encoded line. */ if (enc_config.base64 && n < 80) n = 80; bsize = (int)n; if (enc_config.verbose) BIO_printf(bio_err, "bufsize=%d\n", bsize); } strbuf = malloc(SIZE); buff = malloc(EVP_ENCODE_LENGTH(bsize)); if ((buff == NULL) || (strbuf == NULL)) { BIO_printf(bio_err, "malloc failure %ld\n", (long) EVP_ENCODE_LENGTH(bsize)); goto end; } in = BIO_new(BIO_s_file()); out = BIO_new(BIO_s_file()); if ((in == NULL) || (out == NULL)) { ERR_print_errors(bio_err); goto end; } if (enc_config.debug) { BIO_set_callback(in, BIO_debug_callback); BIO_set_callback(out, BIO_debug_callback); BIO_set_callback_arg(in, (char *) bio_err); BIO_set_callback_arg(out, (char *) bio_err); } if (enc_config.inf == NULL) { if (enc_config.bufsize != NULL) setvbuf(stdin, (char *) NULL, _IONBF, 0); BIO_set_fp(in, stdin, BIO_NOCLOSE); } else { if (BIO_read_filename(in, enc_config.inf) <= 0) { perror(enc_config.inf); goto end; } } if (!enc_config.keystr && enc_config.passarg) { if (!app_passwd(bio_err, enc_config.passarg, NULL, &pass, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto end; } enc_config.keystr = pass; } if (enc_config.keystr == NULL && enc_config.cipher != NULL && enc_config.hkey == NULL) { for (;;) { char buf[200]; int retval; retval = snprintf(buf, sizeof buf, "enter %s %s password:", OBJ_nid2ln(EVP_CIPHER_nid(enc_config.cipher)), enc_config.enc ? "encryption" : "decryption"); if ((size_t)retval >= sizeof buf) { BIO_printf(bio_err, "Password prompt too long\n"); goto end; } strbuf[0] = '\0'; i = EVP_read_pw_string((char *)strbuf, SIZE, buf, enc_config.enc); if (i == 0) { if (strbuf[0] == '\0') { ret = 1; goto end; } enc_config.keystr = strbuf; break; } if (i < 0) { BIO_printf(bio_err, "bad password read\n"); goto end; } } } if (enc_config.outf == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); if (enc_config.bufsize != NULL) setvbuf(stdout, (char *)NULL, _IONBF, 0); } else { if (BIO_write_filename(out, enc_config.outf) <= 0) { perror(enc_config.outf); goto end; } } rbio = in; wbio = out; #ifdef ZLIB if (do_zlib) { if ((bzl = BIO_new(BIO_f_zlib())) == NULL) goto end; if (enc) wbio = BIO_push(bzl, wbio); else rbio = BIO_push(bzl, rbio); } #endif if (enc_config.base64) { if ((b64 = BIO_new(BIO_f_base64())) == NULL) goto end; if (enc_config.debug) { BIO_set_callback(b64, BIO_debug_callback); BIO_set_callback_arg(b64, (char *) bio_err); } if (enc_config.olb64) BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); if (enc_config.enc) wbio = BIO_push(b64, wbio); else rbio = BIO_push(b64, rbio); } if (enc_config.cipher != NULL) { /* * Note that keystr is NULL if a key was passed on the command * line, so we get no salt in that case. Is this a bug? */ if (enc_config.keystr != NULL) { /* * Salt handling: if encrypting generate a salt and * write to output BIO. If decrypting read salt from * input BIO. */ unsigned char *sptr; if (enc_config.nosalt) sptr = NULL; else { if (enc_config.enc) { if (enc_config.hsalt) { if (!set_hex(enc_config.hsalt, salt, sizeof salt)) { BIO_printf(bio_err, "invalid hex salt value\n"); goto end; } } else arc4random_buf(salt, sizeof(salt)); /* * If -P option then don't bother * writing */ if ((enc_config.printkey != 2) && (BIO_write(wbio, magic, sizeof magic - 1) != sizeof magic - 1 || BIO_write(wbio, (char *) salt, sizeof salt) != sizeof salt)) { BIO_printf(bio_err, "error writing output file\n"); goto end; } } else if (BIO_read(rbio, mbuf, sizeof mbuf) != sizeof mbuf || BIO_read(rbio, (unsigned char *) salt, sizeof salt) != sizeof salt) { BIO_printf(bio_err, "error reading input file\n"); goto end; } else if (memcmp(mbuf, magic, sizeof magic - 1)) { BIO_printf(bio_err, "bad magic number\n"); goto end; } sptr = salt; } EVP_BytesToKey(enc_config.cipher, dgst, sptr, (unsigned char *)enc_config.keystr, strlen(enc_config.keystr), 1, key, iv); /* * zero the complete buffer or the string passed from * the command line bug picked up by Larry J. Hughes * Jr. <hughes@indiana.edu> */ if (enc_config.keystr == strbuf) explicit_bzero(enc_config.keystr, SIZE); else explicit_bzero(enc_config.keystr, strlen(enc_config.keystr)); } if (enc_config.hiv != NULL && !set_hex(enc_config.hiv, iv, sizeof iv)) { BIO_printf(bio_err, "invalid hex iv value\n"); goto end; } if (enc_config.hiv == NULL && enc_config.keystr == NULL && EVP_CIPHER_iv_length(enc_config.cipher) != 0) { /* * No IV was explicitly set and no IV was generated * during EVP_BytesToKey. Hence the IV is undefined, * making correct decryption impossible. */ BIO_printf(bio_err, "iv undefined\n"); goto end; } if (enc_config.hkey != NULL && !set_hex(enc_config.hkey, key, sizeof key)) { BIO_printf(bio_err, "invalid hex key value\n"); goto end; } if ((benc = BIO_new(BIO_f_cipher())) == NULL) goto end; /* * Since we may be changing parameters work on the encryption * context rather than calling BIO_set_cipher(). */ BIO_get_cipher_ctx(benc, &ctx); if (!EVP_CipherInit_ex(ctx, enc_config.cipher, NULL, NULL, NULL, enc_config.enc)) { BIO_printf(bio_err, "Error setting cipher %s\n", EVP_CIPHER_name(enc_config.cipher)); ERR_print_errors(bio_err); goto end; } if (enc_config.nopad) EVP_CIPHER_CTX_set_padding(ctx, 0); if (!EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, enc_config.enc)) { BIO_printf(bio_err, "Error setting cipher %s\n", EVP_CIPHER_name(enc_config.cipher)); ERR_print_errors(bio_err); goto end; } if (enc_config.debug) { BIO_set_callback(benc, BIO_debug_callback); BIO_set_callback_arg(benc, (char *) bio_err); } if (enc_config.printkey) { if (!enc_config.nosalt) { printf("salt="); for (i = 0; i < (int) sizeof(salt); i++) printf("%02X", salt[i]); printf("\n"); } if (enc_config.cipher->key_len > 0) { printf("key="); for (i = 0; i < enc_config.cipher->key_len; i++) printf("%02X", key[i]); printf("\n"); } if (enc_config.cipher->iv_len > 0) { printf("iv ="); for (i = 0; i < enc_config.cipher->iv_len; i++) printf("%02X", iv[i]); printf("\n"); } if (enc_config.printkey == 2) { ret = 0; goto end; } } } /* Only encrypt/decrypt as we write the file */ if (benc != NULL) wbio = BIO_push(benc, wbio); for (;;) { inl = BIO_read(rbio, (char *) buff, bsize); if (inl <= 0) break; if (BIO_write(wbio, (char *) buff, inl) != inl) { BIO_printf(bio_err, "error writing output file\n"); goto end; } } if (!BIO_flush(wbio)) { BIO_printf(bio_err, "bad decrypt\n"); goto end; } ret = 0; if (enc_config.verbose) { BIO_printf(bio_err, "bytes read :%8ld\n", BIO_number_read(in)); BIO_printf(bio_err, "bytes written:%8ld\n", BIO_number_written(out)); } end: ERR_print_errors(bio_err); free(strbuf); free(buff); BIO_free(in); if (out != NULL) BIO_free_all(out); BIO_free(benc); BIO_free(b64); #ifdef ZLIB BIO_free(bzl); #endif free(pass); return (ret); } int set_hex(char *in, unsigned char *out, int size) { int i, n; unsigned char j; n = strlen(in); if (n > (size * 2)) { BIO_printf(bio_err, "hex string is too long\n"); return (0); } memset(out, 0, size); for (i = 0; i < n; i++) { j = (unsigned char) *in; *(in++) = '\0'; if (j == 0) break; if ((j >= '0') && (j <= '9')) j -= '0'; else if ((j >= 'A') && (j <= 'F')) j = j - 'A' + 10; else if ((j >= 'a') && (j <= 'f')) j = j - 'a' + 10; else { BIO_printf(bio_err, "non-hex digit\n"); return (0); } if (i & 1) out[i / 2] |= j; else out[i / 2] = (j << 4); } return (1); } |
Added jni/libressl/apps/openssl/errstr.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | /* $OpenBSD: errstr.c,v 1.5 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/err.h> #include <openssl/lhash.h> #include <openssl/ssl.h> struct { int stats; } errstr_config; struct option errstr_options[] = { { .name = "stats", .desc = "Print debugging statistics for the hash table", .type = OPTION_FLAG, .opt.flag = &errstr_config.stats, }, { NULL }, }; static void errstr_usage() { fprintf(stderr, "usage: errstr [-stats] errno ...\n"); options_usage(errstr_options); } int errstr_main(int argc, char **argv) { unsigned long ulval; char *ularg, *ep; int argsused, i; char buf[256]; int ret = 0; if (single_execution) { if (pledge("stdio rpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&errstr_config, 0, sizeof(errstr_config)); if (options_parse(argc, argv, errstr_options, NULL, &argsused) != 0) { errstr_usage(); return (1); } if (errstr_config.stats) { BIO *out; if ((out = BIO_new_fp(stdout, BIO_NOCLOSE)) == NULL) { fprintf(stderr, "Out of memory"); return (1); } lh_ERR_STRING_DATA_node_stats_bio(ERR_get_string_table(), out); lh_ERR_STRING_DATA_stats_bio(ERR_get_string_table(), out); lh_ERR_STRING_DATA_node_usage_stats_bio( ERR_get_string_table(), out); BIO_free_all(out); } for (i = argsused; i < argc; i++) { errno = 0; ularg = argv[i]; ulval = strtoul(ularg, &ep, 16); if (strchr(ularg, '-') != NULL || (ularg[0] == '\0' || *ep != '\0') || (errno == ERANGE && ulval == ULONG_MAX)) { printf("%s: bad error code\n", ularg); ret++; continue; } ERR_error_string_n(ulval, buf, sizeof(buf)); printf("%s\n", buf); } return (ret); } |
Added jni/libressl/apps/openssl/gendh.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | /* $OpenBSD: gendh.c,v 1.6 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <openssl/opensslconf.h> /* Until the key-gen callbacks are modified to use newer prototypes, we allow * deprecated functions for openssl-internal code */ #ifdef OPENSSL_NO_DEPRECATED #undef OPENSSL_NO_DEPRECATED #endif #ifndef OPENSSL_NO_DH #include <sys/types.h> #include <sys/stat.h> #include <limits.h> #include <stdio.h> #include <string.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/dh.h> #include <openssl/err.h> #include <openssl/pem.h> #include <openssl/x509.h> #define DEFBITS 512 static int dh_cb(int p, int n, BN_GENCB * cb); static struct { int g; char *outfile; } gendh_config; static struct option gendh_options[] = { { .name = "2", .desc = "Generate DH parameters with a generator value of 2 " "(default)", .type = OPTION_VALUE, .value = 2, .opt.value = &gendh_config.g, }, { .name = "5", .desc = "Generate DH parameters with a generator value of 5", .type = OPTION_VALUE, .value = 5, .opt.value = &gendh_config.g, }, { .name = "out", .argname = "file", .desc = "Output file (default stdout)", .type = OPTION_ARG, .opt.arg = &gendh_config.outfile, }, { NULL }, }; static void gendh_usage(void) { fprintf(stderr, "usage: gendh [-2 | -5] [-out file] [numbits]\n\n"); options_usage(gendh_options); } int gendh_main(int argc, char **argv) { BN_GENCB cb; DH *dh = NULL; int ret = 1, numbits = DEFBITS; BIO *out = NULL; char *strbits = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } BN_GENCB_set(&cb, dh_cb, bio_err); memset(&gendh_config, 0, sizeof(gendh_config)); gendh_config.g = 2; if (options_parse(argc, argv, gendh_options, &strbits, NULL) != 0) { gendh_usage(); goto end; } if (strbits != NULL) { const char *errstr; numbits = strtonum(strbits, 0, INT_MAX, &errstr); if (errstr) { fprintf(stderr, "Invalid number of bits: %s\n", errstr); goto end; } } out = BIO_new(BIO_s_file()); if (out == NULL) { ERR_print_errors(bio_err); goto end; } if (gendh_config.outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, gendh_config.outfile) <= 0) { perror(gendh_config.outfile); goto end; } } BIO_printf(bio_err, "Generating DH parameters, %d bit long safe prime," " generator %d\n", numbits, gendh_config.g); BIO_printf(bio_err, "This is going to take a long time\n"); if (((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, numbits, gendh_config.g, &cb)) goto end; if (!PEM_write_bio_DHparams(out, dh)) goto end; ret = 0; end: if (ret != 0) ERR_print_errors(bio_err); if (out != NULL) BIO_free_all(out); if (dh != NULL) DH_free(dh); return (ret); } static int dh_cb(int p, int n, BN_GENCB * cb) { char c = '*'; if (p == 0) c = '.'; if (p == 1) c = '+'; if (p == 2) c = '*'; if (p == 3) c = '\n'; BIO_write(cb->arg, &c, 1); (void) BIO_flush(cb->arg); return 1; } #endif |
Added jni/libressl/apps/openssl/gendsa.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 | /* $OpenBSD: gendsa.c,v 1.6 2015/10/17 07:51:10 semarie Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */ #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <string.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/dsa.h> #include <openssl/err.h> #include <openssl/pem.h> #include <openssl/x509.h> int gendsa_main(int argc, char **argv) { DSA *dsa = NULL; int ret = 1; char *outfile = NULL; char *dsaparams = NULL; char *passargout = NULL, *passout = NULL; BIO *out = NULL, *in = NULL; const EVP_CIPHER *enc = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } argv++; argc--; for (;;) { if (argc <= 0) break; if (strcmp(*argv, "-out") == 0) { if (--argc < 1) goto bad; outfile = *(++argv); } else if (strcmp(*argv, "-passout") == 0) { if (--argc < 1) goto bad; passargout = *(++argv); } else if (strcmp(*argv, "-") == 0) goto bad; #ifndef OPENSSL_NO_DES else if (strcmp(*argv, "-des") == 0) enc = EVP_des_cbc(); else if (strcmp(*argv, "-des3") == 0) enc = EVP_des_ede3_cbc(); #endif #ifndef OPENSSL_NO_IDEA else if (strcmp(*argv, "-idea") == 0) enc = EVP_idea_cbc(); #endif #ifndef OPENSSL_NO_AES else if (strcmp(*argv, "-aes128") == 0) enc = EVP_aes_128_cbc(); else if (strcmp(*argv, "-aes192") == 0) enc = EVP_aes_192_cbc(); else if (strcmp(*argv, "-aes256") == 0) enc = EVP_aes_256_cbc(); #endif #ifndef OPENSSL_NO_CAMELLIA else if (strcmp(*argv, "-camellia128") == 0) enc = EVP_camellia_128_cbc(); else if (strcmp(*argv, "-camellia192") == 0) enc = EVP_camellia_192_cbc(); else if (strcmp(*argv, "-camellia256") == 0) enc = EVP_camellia_256_cbc(); #endif else if (**argv != '-' && dsaparams == NULL) { dsaparams = *argv; } else goto bad; argv++; argc--; } if (dsaparams == NULL) { bad: BIO_printf(bio_err, "usage: gendsa [args] dsaparam-file\n"); BIO_printf(bio_err, " -out file - output the key to 'file'\n"); #ifndef OPENSSL_NO_DES BIO_printf(bio_err, " -des - encrypt the generated key with DES in cbc mode\n"); BIO_printf(bio_err, " -des3 - encrypt the generated key with DES in ede cbc mode (168 bit key)\n"); #endif #ifndef OPENSSL_NO_IDEA BIO_printf(bio_err, " -idea - encrypt the generated key with IDEA in cbc mode\n"); #endif #ifndef OPENSSL_NO_AES BIO_printf(bio_err, " -aes128, -aes192, -aes256\n"); BIO_printf(bio_err, " encrypt PEM output with cbc aes\n"); #endif #ifndef OPENSSL_NO_CAMELLIA BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n"); BIO_printf(bio_err, " encrypt PEM output with cbc camellia\n"); #endif BIO_printf(bio_err, " dsaparam-file\n"); BIO_printf(bio_err, " - a DSA parameter file as generated by the dsaparam command\n"); goto end; } if (!app_passwd(bio_err, NULL, passargout, NULL, &passout)) { BIO_printf(bio_err, "Error getting password\n"); goto end; } in = BIO_new(BIO_s_file()); if (!(BIO_read_filename(in, dsaparams))) { perror(dsaparams); goto end; } if ((dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL)) == NULL) { BIO_printf(bio_err, "unable to load DSA parameter file\n"); goto end; } BIO_free(in); in = NULL; out = BIO_new(BIO_s_file()); if (out == NULL) goto end; if (outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, outfile) <= 0) { perror(outfile); goto end; } } BIO_printf(bio_err, "Generating DSA key, %d bits\n", BN_num_bits(dsa->p)); if (!DSA_generate_key(dsa)) goto end; if (!PEM_write_bio_DSAPrivateKey(out, dsa, enc, NULL, 0, NULL, passout)) goto end; ret = 0; end: if (ret != 0) ERR_print_errors(bio_err); BIO_free(in); if (out != NULL) BIO_free_all(out); if (dsa != NULL) DSA_free(dsa); free(passout); return (ret); } |
Added jni/libressl/apps/openssl/genpkey.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 | /* $OpenBSD: genpkey.c,v 1.7 2015/10/17 07:51:10 semarie Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2006 */ /* ==================================================================== * Copyright (c) 2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <string.h> #include "apps.h" #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/pem.h> static int init_keygen_file(BIO * err, EVP_PKEY_CTX ** pctx, const char *file); static int genpkey_cb(EVP_PKEY_CTX * ctx); int genpkey_main(int argc, char **argv) { char **args, *outfile = NULL; char *passarg = NULL; BIO *in = NULL, *out = NULL; const EVP_CIPHER *cipher = NULL; int outformat; int text = 0; EVP_PKEY *pkey = NULL; EVP_PKEY_CTX *ctx = NULL; char *pass = NULL; int badarg = 0; int ret = 1, rv; int do_param = 0; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } outformat = FORMAT_PEM; args = argv + 1; while (!badarg && *args && *args[0] == '-') { if (!strcmp(*args, "-outform")) { if (args[1]) { args++; outformat = str2fmt(*args); } else badarg = 1; } else if (!strcmp(*args, "-pass")) { if (!args[1]) goto bad; passarg = *(++args); } else if (!strcmp(*args, "-paramfile")) { if (!args[1]) goto bad; args++; if (do_param == 1) goto bad; if (!init_keygen_file(bio_err, &ctx, *args)) goto end; } else if (!strcmp(*args, "-out")) { if (args[1]) { args++; outfile = *args; } else badarg = 1; } else if (strcmp(*args, "-algorithm") == 0) { if (!args[1]) goto bad; if (!init_gen_str(bio_err, &ctx, *(++args), do_param)) goto end; } else if (strcmp(*args, "-pkeyopt") == 0) { if (!args[1]) goto bad; if (!ctx) { BIO_puts(bio_err, "No keytype specified\n"); goto bad; } else if (pkey_ctrl_string(ctx, *(++args)) <= 0) { BIO_puts(bio_err, "parameter setting error\n"); ERR_print_errors(bio_err); goto end; } } else if (strcmp(*args, "-genparam") == 0) { if (ctx) goto bad; do_param = 1; } else if (strcmp(*args, "-text") == 0) text = 1; else { cipher = EVP_get_cipherbyname(*args + 1); if (!cipher) { BIO_printf(bio_err, "Unknown cipher %s\n", *args + 1); badarg = 1; } if (do_param == 1) badarg = 1; } args++; } if (!ctx) badarg = 1; if (badarg) { bad: BIO_printf(bio_err, "Usage: genpkey [options]\n"); BIO_printf(bio_err, "where options may be\n"); BIO_printf(bio_err, "-out file output file\n"); BIO_printf(bio_err, "-outform X output format (DER or PEM)\n"); BIO_printf(bio_err, "-pass arg output file pass phrase source\n"); BIO_printf(bio_err, "-<cipher> use cipher <cipher> to encrypt the key\n"); BIO_printf(bio_err, "-paramfile file parameters file\n"); BIO_printf(bio_err, "-algorithm alg the public key algorithm\n"); BIO_printf(bio_err, "-pkeyopt opt:value set the public key algorithm option <opt>\n" " to value <value>\n"); BIO_printf(bio_err, "-genparam generate parameters, not key\n"); BIO_printf(bio_err, "-text print the in text\n"); BIO_printf(bio_err, "NB: options order may be important! See the manual page.\n"); goto end; } if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) { BIO_puts(bio_err, "Error getting password\n"); goto end; } if (outfile) { if (!(out = BIO_new_file(outfile, "wb"))) { BIO_printf(bio_err, "Can't open output file %s\n", outfile); goto end; } } else { out = BIO_new_fp(stdout, BIO_NOCLOSE); } EVP_PKEY_CTX_set_cb(ctx, genpkey_cb); EVP_PKEY_CTX_set_app_data(ctx, bio_err); if (do_param) { if (EVP_PKEY_paramgen(ctx, &pkey) <= 0) { BIO_puts(bio_err, "Error generating parameters\n"); ERR_print_errors(bio_err); goto end; } } else { if (EVP_PKEY_keygen(ctx, &pkey) <= 0) { BIO_puts(bio_err, "Error generating key\n"); ERR_print_errors(bio_err); goto end; } } if (do_param) rv = PEM_write_bio_Parameters(out, pkey); else if (outformat == FORMAT_PEM) rv = PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0, NULL, pass); else if (outformat == FORMAT_ASN1) rv = i2d_PrivateKey_bio(out, pkey); else { BIO_printf(bio_err, "Bad format specified for key\n"); goto end; } if (rv <= 0) { BIO_puts(bio_err, "Error writing key\n"); ERR_print_errors(bio_err); } if (text) { if (do_param) rv = EVP_PKEY_print_params(out, pkey, 0, NULL); else rv = EVP_PKEY_print_private(out, pkey, 0, NULL); if (rv <= 0) { BIO_puts(bio_err, "Error printing key\n"); ERR_print_errors(bio_err); } } ret = 0; end: if (pkey) EVP_PKEY_free(pkey); if (ctx) EVP_PKEY_CTX_free(ctx); if (out) BIO_free_all(out); BIO_free(in); free(pass); return ret; } static int init_keygen_file(BIO * err, EVP_PKEY_CTX ** pctx, const char *file) { BIO *pbio; EVP_PKEY *pkey = NULL; EVP_PKEY_CTX *ctx = NULL; if (*pctx) { BIO_puts(err, "Parameters already set!\n"); return 0; } pbio = BIO_new_file(file, "r"); if (!pbio) { BIO_printf(err, "Can't open parameter file %s\n", file); return 0; } pkey = PEM_read_bio_Parameters(pbio, NULL); BIO_free(pbio); if (!pkey) { BIO_printf(bio_err, "Error reading parameter file %s\n", file); return 0; } ctx = EVP_PKEY_CTX_new(pkey, NULL); if (!ctx) goto err; if (EVP_PKEY_keygen_init(ctx) <= 0) goto err; EVP_PKEY_free(pkey); *pctx = ctx; return 1; err: BIO_puts(err, "Error initializing context\n"); ERR_print_errors(err); if (ctx) EVP_PKEY_CTX_free(ctx); if (pkey) EVP_PKEY_free(pkey); return 0; } int init_gen_str(BIO * err, EVP_PKEY_CTX ** pctx, const char *algname, int do_param) { EVP_PKEY_CTX *ctx = NULL; const EVP_PKEY_ASN1_METHOD *ameth; int pkey_id; if (*pctx) { BIO_puts(err, "Algorithm already set!\n"); return 0; } ameth = EVP_PKEY_asn1_find_str(NULL, algname, -1); if (!ameth) { BIO_printf(bio_err, "Algorithm %s not found\n", algname); return 0; } ERR_clear_error(); EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); ctx = EVP_PKEY_CTX_new_id(pkey_id, NULL); if (!ctx) goto err; if (do_param) { if (EVP_PKEY_paramgen_init(ctx) <= 0) goto err; } else { if (EVP_PKEY_keygen_init(ctx) <= 0) goto err; } *pctx = ctx; return 1; err: BIO_printf(err, "Error initializing %s context\n", algname); ERR_print_errors(err); if (ctx) EVP_PKEY_CTX_free(ctx); return 0; } static int genpkey_cb(EVP_PKEY_CTX * ctx) { char c = '*'; BIO *b = EVP_PKEY_CTX_get_app_data(ctx); int p; p = EVP_PKEY_CTX_get_keygen_info(ctx, 0); if (p == 0) c = '.'; if (p == 1) c = '+'; if (p == 2) c = '*'; if (p == 3) c = '\n'; BIO_write(b, &c, 1); (void) BIO_flush(b); return 1; } |
Added jni/libressl/apps/openssl/genrsa.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 | /* $OpenBSD: genrsa.c,v 1.7 2015/10/17 07:51:10 semarie Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <openssl/opensslconf.h> /* Until the key-gen callbacks are modified to use newer prototypes, we allow * deprecated functions for openssl-internal code */ #ifdef OPENSSL_NO_DEPRECATED #undef OPENSSL_NO_DEPRECATED #endif #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <string.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/pem.h> #include <openssl/rsa.h> #include <openssl/x509.h> #define DEFBITS 2048 static int genrsa_cb(int p, int n, BN_GENCB * cb); int genrsa_main(int argc, char **argv) { BN_GENCB cb; int ret = 1; int i, num = DEFBITS; long l; const EVP_CIPHER *enc = NULL; unsigned long f4 = RSA_F4; char *outfile = NULL; char *passargout = NULL, *passout = NULL; BIO *out = NULL; BIGNUM *bn = BN_new(); RSA *rsa = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } if (!bn) goto err; BN_GENCB_set(&cb, genrsa_cb, bio_err); if ((out = BIO_new(BIO_s_file())) == NULL) { BIO_printf(bio_err, "unable to create BIO for output\n"); goto err; } argv++; argc--; for (;;) { if (argc <= 0) break; if (strcmp(*argv, "-out") == 0) { if (--argc < 1) goto bad; outfile = *(++argv); } else if (strcmp(*argv, "-3") == 0) f4 = 3; else if (strcmp(*argv, "-F4") == 0 || strcmp(*argv, "-f4") == 0) f4 = RSA_F4; #ifndef OPENSSL_NO_DES else if (strcmp(*argv, "-des") == 0) enc = EVP_des_cbc(); else if (strcmp(*argv, "-des3") == 0) enc = EVP_des_ede3_cbc(); #endif #ifndef OPENSSL_NO_IDEA else if (strcmp(*argv, "-idea") == 0) enc = EVP_idea_cbc(); #endif #ifndef OPENSSL_NO_AES else if (strcmp(*argv, "-aes128") == 0) enc = EVP_aes_128_cbc(); else if (strcmp(*argv, "-aes192") == 0) enc = EVP_aes_192_cbc(); else if (strcmp(*argv, "-aes256") == 0) enc = EVP_aes_256_cbc(); #endif #ifndef OPENSSL_NO_CAMELLIA else if (strcmp(*argv, "-camellia128") == 0) enc = EVP_camellia_128_cbc(); else if (strcmp(*argv, "-camellia192") == 0) enc = EVP_camellia_192_cbc(); else if (strcmp(*argv, "-camellia256") == 0) enc = EVP_camellia_256_cbc(); #endif else if (strcmp(*argv, "-passout") == 0) { if (--argc < 1) goto bad; passargout = *(++argv); } else break; argv++; argc--; } if ((argc >= 1) && ((sscanf(*argv, "%d", &num) == 0) || (num < 0))) { bad: BIO_printf(bio_err, "usage: genrsa [args] [numbits]\n"); BIO_printf(bio_err, " -des encrypt the generated key with DES in cbc mode\n"); BIO_printf(bio_err, " -des3 encrypt the generated key with DES in ede cbc mode (168 bit key)\n"); #ifndef OPENSSL_NO_IDEA BIO_printf(bio_err, " -idea encrypt the generated key with IDEA in cbc mode\n"); #endif #ifndef OPENSSL_NO_AES BIO_printf(bio_err, " -aes128, -aes192, -aes256\n"); BIO_printf(bio_err, " encrypt PEM output with cbc aes\n"); #endif #ifndef OPENSSL_NO_CAMELLIA BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n"); BIO_printf(bio_err, " encrypt PEM output with cbc camellia\n"); #endif BIO_printf(bio_err, " -out file output the key to 'file\n"); BIO_printf(bio_err, " -passout arg output file pass phrase source\n"); BIO_printf(bio_err, " -f4 use F4 (0x10001) for the E value\n"); BIO_printf(bio_err, " -3 use 3 for the E value\n"); goto err; } if (!app_passwd(bio_err, NULL, passargout, NULL, &passout)) { BIO_printf(bio_err, "Error getting password\n"); goto err; } if (outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, outfile) <= 0) { perror(outfile); goto err; } } BIO_printf(bio_err, "Generating RSA private key, %d bit long modulus\n", num); rsa = RSA_new(); if (!rsa) goto err; if (!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb)) goto err; /* * We need to do the following for when the base number size is < * long, esp windows 3.1 :-(. */ l = 0L; for (i = 0; i < rsa->e->top; i++) { #ifndef _LP64 l <<= BN_BITS4; l <<= BN_BITS4; #endif l += rsa->e->d[i]; } BIO_printf(bio_err, "e is %ld (0x%lX)\n", l, l); { PW_CB_DATA cb_data; cb_data.password = passout; cb_data.prompt_info = outfile; if (!PEM_write_bio_RSAPrivateKey(out, rsa, enc, NULL, 0, password_callback, &cb_data)) goto err; } ret = 0; err: if (bn) BN_free(bn); if (rsa) RSA_free(rsa); if (out) BIO_free_all(out); free(passout); if (ret != 0) ERR_print_errors(bio_err); return (ret); } static int genrsa_cb(int p, int n, BN_GENCB * cb) { char c = '*'; if (p == 0) c = '.'; if (p == 1) c = '+'; if (p == 2) c = '*'; if (p == 3) c = '\n'; BIO_write(cb->arg, &c, 1); (void) BIO_flush(cb->arg); return 1; } |
Added jni/libressl/apps/openssl/nseq.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | /* $OpenBSD: nseq.c,v 1.5 2015/10/10 22:28:51 doug Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <string.h> #include "apps.h" #include <openssl/err.h> #include <openssl/pem.h> static struct { char *infile; char *outfile; int toseq; } nseq_config; static struct option nseq_options[] = { { .name = "in", .argname = "file", .desc = "Input file to read from (default stdin)", .type = OPTION_ARG, .opt.arg = &nseq_config.infile, }, { .name = "out", .argname = "file", .desc = "Output file to write to (default stdout)", .type = OPTION_ARG, .opt.arg = &nseq_config.outfile, }, { .name = "toseq", .desc = "Convert certificates to Netscape certificate sequence", .type = OPTION_FLAG, .opt.flag = &nseq_config.toseq, }, { NULL }, }; static void nseq_usage() { fprintf(stderr, "usage: nseq [-in file] [-out file] [-toseq]\n"); options_usage(nseq_options); } int nseq_main(int argc, char **argv) { BIO *in = NULL, *out = NULL; X509 *x509 = NULL; NETSCAPE_CERT_SEQUENCE *seq = NULL; int i, ret = 1; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&nseq_config, 0, sizeof(nseq_config)); if (options_parse(argc, argv, nseq_options, NULL, NULL) != 0) { nseq_usage(); return (1); } if (nseq_config.infile) { if (!(in = BIO_new_file(nseq_config.infile, "r"))) { BIO_printf(bio_err, "Can't open input file %s\n", nseq_config.infile); goto end; } } else in = BIO_new_fp(stdin, BIO_NOCLOSE); if (nseq_config.outfile) { if (!(out = BIO_new_file(nseq_config.outfile, "w"))) { BIO_printf(bio_err, "Can't open output file %s\n", nseq_config.outfile); goto end; } } else { out = BIO_new_fp(stdout, BIO_NOCLOSE); } if (nseq_config.toseq) { seq = NETSCAPE_CERT_SEQUENCE_new(); seq->certs = sk_X509_new_null(); while ((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL))) sk_X509_push(seq->certs, x509); if (!sk_X509_num(seq->certs)) { BIO_printf(bio_err, "Error reading certs file %s\n", nseq_config.infile); ERR_print_errors(bio_err); goto end; } PEM_write_bio_NETSCAPE_CERT_SEQUENCE(out, seq); ret = 0; goto end; } if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) { BIO_printf(bio_err, "Error reading sequence file %s\n", nseq_config.infile); ERR_print_errors(bio_err); goto end; } for (i = 0; i < sk_X509_num(seq->certs); i++) { x509 = sk_X509_value(seq->certs, i); dump_cert_text(out, x509); PEM_write_bio_X509(out, x509); } ret = 0; end: BIO_free(in); BIO_free_all(out); NETSCAPE_CERT_SEQUENCE_free(seq); return (ret); } |
Added jni/libressl/apps/openssl/ocsp.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 | /* $OpenBSD: ocsp.c,v 1.7 2015/10/17 15:00:11 doug Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2000. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef OPENSSL_NO_OCSP #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> #include <poll.h> #include <time.h> /* Needs to be included before the openssl headers! */ #include "apps.h" #include <openssl/bn.h> #include <openssl/crypto.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/ssl.h> #include <openssl/x509v3.h> /* Maximum leeway in validity period: default 5 minutes */ #define MAX_VALIDITY_PERIOD (5 * 60) static int add_ocsp_cert(OCSP_REQUEST ** req, X509 * cert, const EVP_MD * cert_id_md, X509 * issuer, STACK_OF(OCSP_CERTID) * ids); static int add_ocsp_serial(OCSP_REQUEST ** req, char *serial, const EVP_MD * cert_id_md, X509 * issuer, STACK_OF(OCSP_CERTID) * ids); static int print_ocsp_summary(BIO * out, OCSP_BASICRESP * bs, OCSP_REQUEST * req, STACK_OF(OPENSSL_STRING) * names, STACK_OF(OCSP_CERTID) * ids, long nsec, long maxage); static int make_ocsp_response(OCSP_RESPONSE ** resp, OCSP_REQUEST * req, CA_DB * db, X509 * ca, X509 * rcert, EVP_PKEY * rkey, STACK_OF(X509) * rother, unsigned long flags, int nmin, int ndays); static char **lookup_serial(CA_DB * db, ASN1_INTEGER * ser); static BIO *init_responder(char *port); static int do_responder(OCSP_REQUEST ** preq, BIO ** pcbio, BIO * acbio, char *port); static int send_ocsp_response(BIO * cbio, OCSP_RESPONSE * resp); static OCSP_RESPONSE *query_responder(BIO * err, BIO * cbio, char *path, STACK_OF(CONF_VALUE) * headers, OCSP_REQUEST * req, int req_timeout); int ocsp_main(int argc, char **argv) { char **args; char *host = NULL, *port = NULL, *path = "/"; char *reqin = NULL, *respin = NULL; char *reqout = NULL, *respout = NULL; char *signfile = NULL, *keyfile = NULL; char *rsignfile = NULL, *rkeyfile = NULL; char *outfile = NULL; int add_nonce = 1, noverify = 0, use_ssl = -1; STACK_OF(CONF_VALUE) * headers = NULL; OCSP_REQUEST *req = NULL; OCSP_RESPONSE *resp = NULL; OCSP_BASICRESP *bs = NULL; X509 *issuer = NULL, *cert = NULL; X509 *signer = NULL, *rsigner = NULL; EVP_PKEY *key = NULL, *rkey = NULL; BIO *acbio = NULL, *cbio = NULL; BIO *derbio = NULL; BIO *out = NULL; int req_timeout = -1; int req_text = 0, resp_text = 0; long nsec = MAX_VALIDITY_PERIOD, maxage = -1; char *CAfile = NULL, *CApath = NULL; X509_STORE *store = NULL; STACK_OF(X509) * sign_other = NULL, *verify_other = NULL, *rother = NULL; char *sign_certfile = NULL, *verify_certfile = NULL, *rcertfile = NULL; unsigned long sign_flags = 0, verify_flags = 0, rflags = 0; int ret = 1; int accept_count = -1; int badarg = 0; int i; int ignore_err = 0; STACK_OF(OPENSSL_STRING) * reqnames = NULL; STACK_OF(OCSP_CERTID) * ids = NULL; X509 *rca_cert = NULL; char *ridx_filename = NULL; char *rca_filename = NULL; CA_DB *rdb = NULL; int nmin = 0, ndays = -1; const EVP_MD *cert_id_md = NULL; const char *errstr = NULL; if (single_execution) { if (pledge("stdio inet dns rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } args = argv + 1; reqnames = sk_OPENSSL_STRING_new_null(); ids = sk_OCSP_CERTID_new_null(); while (!badarg && *args && *args[0] == '-') { if (!strcmp(*args, "-out")) { if (args[1]) { args++; outfile = *args; } else badarg = 1; } else if (!strcmp(*args, "-timeout")) { if (args[1]) { args++; req_timeout = strtonum(*args, 0, INT_MAX, &errstr); if (errstr) { BIO_printf(bio_err, "Illegal timeout value %s: %s\n", *args, errstr); badarg = 1; } } else badarg = 1; } else if (!strcmp(*args, "-url")) { if (args[1]) { args++; if (!OCSP_parse_url(*args, &host, &port, &path, &use_ssl)) { BIO_printf(bio_err, "Error parsing URL\n"); badarg = 1; } } else badarg = 1; } else if (!strcmp(*args, "-host")) { if (args[1]) { args++; host = *args; } else badarg = 1; } else if (!strcmp(*args, "-port")) { if (args[1]) { args++; port = *args; } else badarg = 1; } else if (!strcmp(*args, "-header")) { if (args[1] && args[2]) { if (!X509V3_add_value(args[1], args[2], &headers)) goto end; args += 2; } else badarg = 1; } else if (!strcmp(*args, "-ignore_err")) ignore_err = 1; else if (!strcmp(*args, "-noverify")) noverify = 1; else if (!strcmp(*args, "-nonce")) add_nonce = 2; else if (!strcmp(*args, "-no_nonce")) add_nonce = 0; else if (!strcmp(*args, "-resp_no_certs")) rflags |= OCSP_NOCERTS; else if (!strcmp(*args, "-resp_key_id")) rflags |= OCSP_RESPID_KEY; else if (!strcmp(*args, "-no_certs")) sign_flags |= OCSP_NOCERTS; else if (!strcmp(*args, "-no_signature_verify")) verify_flags |= OCSP_NOSIGS; else if (!strcmp(*args, "-no_cert_verify")) verify_flags |= OCSP_NOVERIFY; else if (!strcmp(*args, "-no_chain")) verify_flags |= OCSP_NOCHAIN; else if (!strcmp(*args, "-no_cert_checks")) verify_flags |= OCSP_NOCHECKS; else if (!strcmp(*args, "-no_explicit")) verify_flags |= OCSP_NOEXPLICIT; else if (!strcmp(*args, "-trust_other")) verify_flags |= OCSP_TRUSTOTHER; else if (!strcmp(*args, "-no_intern")) verify_flags |= OCSP_NOINTERN; else if (!strcmp(*args, "-text")) { req_text = 1; resp_text = 1; } else if (!strcmp(*args, "-req_text")) req_text = 1; else if (!strcmp(*args, "-resp_text")) resp_text = 1; else if (!strcmp(*args, "-reqin")) { if (args[1]) { args++; reqin = *args; } else badarg = 1; } else if (!strcmp(*args, "-respin")) { if (args[1]) { args++; respin = *args; } else badarg = 1; } else if (!strcmp(*args, "-signer")) { if (args[1]) { args++; signfile = *args; } else badarg = 1; } else if (!strcmp(*args, "-VAfile")) { if (args[1]) { args++; verify_certfile = *args; verify_flags |= OCSP_TRUSTOTHER; } else badarg = 1; } else if (!strcmp(*args, "-sign_other")) { if (args[1]) { args++; sign_certfile = *args; } else badarg = 1; } else if (!strcmp(*args, "-verify_other")) { if (args[1]) { args++; verify_certfile = *args; } else badarg = 1; } else if (!strcmp(*args, "-CAfile")) { if (args[1]) { args++; CAfile = *args; } else badarg = 1; } else if (!strcmp(*args, "-CApath")) { if (args[1]) { args++; CApath = *args; } else badarg = 1; } else if (!strcmp(*args, "-validity_period")) { if (args[1]) { args++; nsec = strtonum(*args, 0, LONG_MAX, &errstr); if (errstr) { BIO_printf(bio_err, "Illegal validity period %s: %s\n", *args, errstr); badarg = 1; } } else badarg = 1; } else if (!strcmp(*args, "-status_age")) { if (args[1]) { args++; maxage = strtonum(*args, 0, LONG_MAX, &errstr); if (errstr) { BIO_printf(bio_err, "Illegal validity age %s: %s\n", *args, errstr); badarg = 1; } } else badarg = 1; } else if (!strcmp(*args, "-signkey")) { if (args[1]) { args++; keyfile = *args; } else badarg = 1; } else if (!strcmp(*args, "-reqout")) { if (args[1]) { args++; reqout = *args; } else badarg = 1; } else if (!strcmp(*args, "-respout")) { if (args[1]) { args++; respout = *args; } else badarg = 1; } else if (!strcmp(*args, "-path")) { if (args[1]) { args++; path = *args; } else badarg = 1; } else if (!strcmp(*args, "-issuer")) { if (args[1]) { args++; X509_free(issuer); issuer = load_cert(bio_err, *args, FORMAT_PEM, NULL, "issuer certificate"); if (!issuer) goto end; } else badarg = 1; } else if (!strcmp(*args, "-cert")) { if (args[1]) { args++; X509_free(cert); cert = load_cert(bio_err, *args, FORMAT_PEM, NULL, "certificate"); if (!cert) goto end; if (!cert_id_md) cert_id_md = EVP_sha1(); if (!add_ocsp_cert(&req, cert, cert_id_md, issuer, ids)) goto end; if (!sk_OPENSSL_STRING_push(reqnames, *args)) goto end; } else badarg = 1; } else if (!strcmp(*args, "-serial")) { if (args[1]) { args++; if (!cert_id_md) cert_id_md = EVP_sha1(); if (!add_ocsp_serial(&req, *args, cert_id_md, issuer, ids)) goto end; if (!sk_OPENSSL_STRING_push(reqnames, *args)) goto end; } else badarg = 1; } else if (!strcmp(*args, "-index")) { if (args[1]) { args++; ridx_filename = *args; } else badarg = 1; } else if (!strcmp(*args, "-CA")) { if (args[1]) { args++; rca_filename = *args; } else badarg = 1; } else if (!strcmp(*args, "-nmin")) { if (args[1]) { args++; nmin = strtonum(*args, 0, INT_MAX, &errstr); if (errstr) { BIO_printf(bio_err, "Illegal update period %s: %s\n", *args, errstr); badarg = 1; } } if (ndays == -1) ndays = 0; else badarg = 1; } else if (!strcmp(*args, "-nrequest")) { if (args[1]) { args++; accept_count = strtonum(*args, 0, INT_MAX, &errstr); if (errstr) { BIO_printf(bio_err, "Illegal accept count %s: %s\n", *args, errstr); badarg = 1; } } else badarg = 1; } else if (!strcmp(*args, "-ndays")) { if (args[1]) { args++; ndays = strtonum(*args, 0, INT_MAX, &errstr); if (errstr) { BIO_printf(bio_err, "Illegal update period %s: %s\n", *args, errstr); badarg = 1; } } else badarg = 1; } else if (!strcmp(*args, "-rsigner")) { if (args[1]) { args++; rsignfile = *args; } else badarg = 1; } else if (!strcmp(*args, "-rkey")) { if (args[1]) { args++; rkeyfile = *args; } else badarg = 1; } else if (!strcmp(*args, "-rother")) { if (args[1]) { args++; rcertfile = *args; } else badarg = 1; } else if ((cert_id_md = EVP_get_digestbyname((*args) + 1)) == NULL) { badarg = 1; } args++; } /* Have we anything to do? */ if (!req && !reqin && !respin && !(port && ridx_filename)) badarg = 1; if (badarg) { BIO_printf(bio_err, "OCSP utility\n"); BIO_printf(bio_err, "Usage ocsp [options]\n"); BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err, "-out file output filename\n"); BIO_printf(bio_err, "-issuer file issuer certificate\n"); BIO_printf(bio_err, "-cert file certificate to check\n"); BIO_printf(bio_err, "-serial n serial number to check\n"); BIO_printf(bio_err, "-signer file certificate to sign OCSP request with\n"); BIO_printf(bio_err, "-signkey file private key to sign OCSP request with\n"); BIO_printf(bio_err, "-sign_other file additional certificates to include in signed request\n"); BIO_printf(bio_err, "-no_certs don't include any certificates in signed request\n"); BIO_printf(bio_err, "-req_text print text form of request\n"); BIO_printf(bio_err, "-resp_text print text form of response\n"); BIO_printf(bio_err, "-text print text form of request and response\n"); BIO_printf(bio_err, "-reqout file write DER encoded OCSP request to \"file\"\n"); BIO_printf(bio_err, "-respout file write DER encoded OCSP reponse to \"file\"\n"); BIO_printf(bio_err, "-reqin file read DER encoded OCSP request from \"file\"\n"); BIO_printf(bio_err, "-respin file read DER encoded OCSP reponse from \"file\"\n"); BIO_printf(bio_err, "-nonce add OCSP nonce to request\n"); BIO_printf(bio_err, "-no_nonce don't add OCSP nonce to request\n"); BIO_printf(bio_err, "-url URL OCSP responder URL\n"); BIO_printf(bio_err, "-host host:n send OCSP request to host on port n\n"); BIO_printf(bio_err, "-path path to use in OCSP request\n"); BIO_printf(bio_err, "-CApath dir trusted certificates directory\n"); BIO_printf(bio_err, "-CAfile file trusted certificates file\n"); BIO_printf(bio_err, "-VAfile file validator certificates file\n"); BIO_printf(bio_err, "-validity_period n maximum validity discrepancy in seconds\n"); BIO_printf(bio_err, "-status_age n maximum status age in seconds\n"); BIO_printf(bio_err, "-noverify don't verify response at all\n"); BIO_printf(bio_err, "-verify_other file additional certificates to search for signer\n"); BIO_printf(bio_err, "-trust_other don't verify additional certificates\n"); BIO_printf(bio_err, "-no_intern don't search certificates contained in response for signer\n"); BIO_printf(bio_err, "-no_signature_verify don't check signature on response\n"); BIO_printf(bio_err, "-no_cert_verify don't check signing certificate\n"); BIO_printf(bio_err, "-no_chain don't chain verify response\n"); BIO_printf(bio_err, "-no_cert_checks don't do additional checks on signing certificate\n"); BIO_printf(bio_err, "-port num port to run responder on\n"); BIO_printf(bio_err, "-index file certificate status index file\n"); BIO_printf(bio_err, "-CA file CA certificate\n"); BIO_printf(bio_err, "-rsigner file responder certificate to sign responses with\n"); BIO_printf(bio_err, "-rkey file responder key to sign responses with\n"); BIO_printf(bio_err, "-rother file other certificates to include in response\n"); BIO_printf(bio_err, "-resp_no_certs don't include any certificates in response\n"); BIO_printf(bio_err, "-nmin n number of minutes before next update\n"); BIO_printf(bio_err, "-ndays n number of days before next update\n"); BIO_printf(bio_err, "-resp_key_id identify reponse by signing certificate key ID\n"); BIO_printf(bio_err, "-nrequest n number of requests to accept (default unlimited)\n"); BIO_printf(bio_err, "-<dgst alg> use specified digest in the request\n"); goto end; } if (outfile) out = BIO_new_file(outfile, "w"); else out = BIO_new_fp(stdout, BIO_NOCLOSE); if (!out) { BIO_printf(bio_err, "Error opening output file\n"); goto end; } if (!req && (add_nonce != 2)) add_nonce = 0; if (!req && reqin) { derbio = BIO_new_file(reqin, "rb"); if (!derbio) { BIO_printf(bio_err, "Error Opening OCSP request file\n"); goto end; } req = d2i_OCSP_REQUEST_bio(derbio, NULL); BIO_free(derbio); if (!req) { BIO_printf(bio_err, "Error reading OCSP request\n"); goto end; } } if (!req && port) { acbio = init_responder(port); if (!acbio) goto end; } if (rsignfile && !rdb) { if (!rkeyfile) rkeyfile = rsignfile; rsigner = load_cert(bio_err, rsignfile, FORMAT_PEM, NULL, "responder certificate"); if (!rsigner) { BIO_printf(bio_err, "Error loading responder certificate\n"); goto end; } rca_cert = load_cert(bio_err, rca_filename, FORMAT_PEM, NULL, "CA certificate"); if (rcertfile) { rother = load_certs(bio_err, rcertfile, FORMAT_PEM, NULL, "responder other certificates"); if (!rother) goto end; } rkey = load_key(bio_err, rkeyfile, FORMAT_PEM, 0, NULL, "responder private key"); if (!rkey) goto end; } if (acbio) BIO_printf(bio_err, "Waiting for OCSP client connections...\n"); redo_accept: if (acbio) { if (!do_responder(&req, &cbio, acbio, port)) goto end; if (!req) { resp = OCSP_response_create(OCSP_RESPONSE_STATUS_MALFORMEDREQUEST, NULL); send_ocsp_response(cbio, resp); goto done_resp; } } if (!req && (signfile || reqout || host || add_nonce || ridx_filename)) { BIO_printf(bio_err, "Need an OCSP request for this operation!\n"); goto end; } if (req && add_nonce) OCSP_request_add1_nonce(req, NULL, -1); if (signfile) { if (!keyfile) keyfile = signfile; signer = load_cert(bio_err, signfile, FORMAT_PEM, NULL, "signer certificate"); if (!signer) { BIO_printf(bio_err, "Error loading signer certificate\n"); goto end; } if (sign_certfile) { sign_other = load_certs(bio_err, sign_certfile, FORMAT_PEM, NULL, "signer certificates"); if (!sign_other) goto end; } key = load_key(bio_err, keyfile, FORMAT_PEM, 0, NULL, "signer private key"); if (!key) goto end; if (!OCSP_request_sign(req, signer, key, NULL, sign_other, sign_flags)) { BIO_printf(bio_err, "Error signing OCSP request\n"); goto end; } } if (req_text && req) OCSP_REQUEST_print(out, req, 0); if (reqout) { derbio = BIO_new_file(reqout, "wb"); if (!derbio) { BIO_printf(bio_err, "Error opening file %s\n", reqout); goto end; } i2d_OCSP_REQUEST_bio(derbio, req); BIO_free(derbio); } if (ridx_filename && (!rkey || !rsigner || !rca_cert)) { BIO_printf(bio_err, "Need a responder certificate, key and CA for this operation!\n"); goto end; } if (ridx_filename && !rdb) { rdb = load_index(ridx_filename, NULL); if (!rdb) goto end; if (!index_index(rdb)) goto end; } if (rdb) { i = make_ocsp_response(&resp, req, rdb, rca_cert, rsigner, rkey, rother, rflags, nmin, ndays); if (cbio) send_ocsp_response(cbio, resp); } else if (host) { resp = process_responder(bio_err, req, host, path, port, use_ssl, headers, req_timeout); if (!resp) goto end; } else if (respin) { derbio = BIO_new_file(respin, "rb"); if (!derbio) { BIO_printf(bio_err, "Error Opening OCSP response file\n"); goto end; } resp = d2i_OCSP_RESPONSE_bio(derbio, NULL); BIO_free(derbio); if (!resp) { BIO_printf(bio_err, "Error reading OCSP response\n"); goto end; } } else { ret = 0; goto end; } done_resp: if (respout) { derbio = BIO_new_file(respout, "wb"); if (!derbio) { BIO_printf(bio_err, "Error opening file %s\n", respout); goto end; } i2d_OCSP_RESPONSE_bio(derbio, resp); BIO_free(derbio); } i = OCSP_response_status(resp); if (i != OCSP_RESPONSE_STATUS_SUCCESSFUL) { BIO_printf(out, "Responder Error: %s (%d)\n", OCSP_response_status_str(i), i); if (ignore_err) goto redo_accept; ret = 0; goto end; } if (resp_text) OCSP_RESPONSE_print(out, resp, 0); /* If running as responder don't verify our own response */ if (cbio) { if (accept_count > 0) accept_count--; /* Redo if more connections needed */ if (accept_count) { BIO_free_all(cbio); cbio = NULL; OCSP_REQUEST_free(req); req = NULL; OCSP_RESPONSE_free(resp); resp = NULL; goto redo_accept; } goto end; } if (!store) store = setup_verify(bio_err, CAfile, CApath); if (!store) goto end; if (verify_certfile) { verify_other = load_certs(bio_err, verify_certfile, FORMAT_PEM, NULL, "validator certificate"); if (!verify_other) goto end; } bs = OCSP_response_get1_basic(resp); if (!bs) { BIO_printf(bio_err, "Error parsing response\n"); goto end; } if (!noverify) { if (req && ((i = OCSP_check_nonce(req, bs)) <= 0)) { if (i == -1) BIO_printf(bio_err, "WARNING: no nonce in response\n"); else { BIO_printf(bio_err, "Nonce Verify error\n"); goto end; } } i = OCSP_basic_verify(bs, verify_other, store, verify_flags); if (i < 0) i = OCSP_basic_verify(bs, NULL, store, 0); if (i <= 0) { BIO_printf(bio_err, "Response Verify Failure\n"); ERR_print_errors(bio_err); } else BIO_printf(bio_err, "Response verify OK\n"); } if (!print_ocsp_summary(out, bs, req, reqnames, ids, nsec, maxage)) goto end; ret = 0; end: ERR_print_errors(bio_err); X509_free(signer); X509_STORE_free(store); EVP_PKEY_free(key); EVP_PKEY_free(rkey); X509_free(issuer); X509_free(cert); X509_free(rsigner); X509_free(rca_cert); free_index(rdb); BIO_free_all(cbio); BIO_free_all(acbio); BIO_free(out); OCSP_REQUEST_free(req); OCSP_RESPONSE_free(resp); OCSP_BASICRESP_free(bs); sk_OPENSSL_STRING_free(reqnames); sk_OCSP_CERTID_free(ids); sk_X509_pop_free(sign_other, X509_free); sk_X509_pop_free(verify_other, X509_free); sk_CONF_VALUE_pop_free(headers, X509V3_conf_free); if (use_ssl != -1) { free(host); free(port); free(path); } return (ret); } static int add_ocsp_cert(OCSP_REQUEST ** req, X509 * cert, const EVP_MD * cert_id_md, X509 * issuer, STACK_OF(OCSP_CERTID) * ids) { OCSP_CERTID *id; if (!issuer) { BIO_printf(bio_err, "No issuer certificate specified\n"); return 0; } if (!*req) *req = OCSP_REQUEST_new(); if (!*req) goto err; id = OCSP_cert_to_id(cert_id_md, cert, issuer); if (!id || !sk_OCSP_CERTID_push(ids, id)) goto err; if (!OCSP_request_add0_id(*req, id)) goto err; return 1; err: BIO_printf(bio_err, "Error Creating OCSP request\n"); return 0; } static int add_ocsp_serial(OCSP_REQUEST ** req, char *serial, const EVP_MD * cert_id_md, X509 * issuer, STACK_OF(OCSP_CERTID) * ids) { OCSP_CERTID *id; X509_NAME *iname; ASN1_BIT_STRING *ikey; ASN1_INTEGER *sno; if (!issuer) { BIO_printf(bio_err, "No issuer certificate specified\n"); return 0; } if (!*req) *req = OCSP_REQUEST_new(); if (!*req) goto err; iname = X509_get_subject_name(issuer); ikey = X509_get0_pubkey_bitstr(issuer); sno = s2i_ASN1_INTEGER(NULL, serial); if (!sno) { BIO_printf(bio_err, "Error converting serial number %s\n", serial); return 0; } id = OCSP_cert_id_new(cert_id_md, iname, ikey, sno); ASN1_INTEGER_free(sno); if (!id || !sk_OCSP_CERTID_push(ids, id)) goto err; if (!OCSP_request_add0_id(*req, id)) goto err; return 1; err: BIO_printf(bio_err, "Error Creating OCSP request\n"); return 0; } static int print_ocsp_summary(BIO * out, OCSP_BASICRESP * bs, OCSP_REQUEST * req, STACK_OF(OPENSSL_STRING) * names, STACK_OF(OCSP_CERTID) * ids, long nsec, long maxage) { OCSP_CERTID *id; char *name; int i; int status, reason; ASN1_GENERALIZEDTIME *rev, *thisupd, *nextupd; if (!bs || !req || !sk_OPENSSL_STRING_num(names) || !sk_OCSP_CERTID_num(ids)) return 1; for (i = 0; i < sk_OCSP_CERTID_num(ids); i++) { id = sk_OCSP_CERTID_value(ids, i); name = sk_OPENSSL_STRING_value(names, i); BIO_printf(out, "%s: ", name); if (!OCSP_resp_find_status(bs, id, &status, &reason, &rev, &thisupd, &nextupd)) { BIO_puts(out, "ERROR: No Status found.\n"); continue; } /* * Check validity: if invalid write to output BIO so we know * which response this refers to. */ if (!OCSP_check_validity(thisupd, nextupd, nsec, maxage)) { BIO_puts(out, "WARNING: Status times invalid.\n"); ERR_print_errors(out); } BIO_printf(out, "%s\n", OCSP_cert_status_str(status)); BIO_puts(out, "\tThis Update: "); ASN1_GENERALIZEDTIME_print(out, thisupd); BIO_puts(out, "\n"); if (nextupd) { BIO_puts(out, "\tNext Update: "); ASN1_GENERALIZEDTIME_print(out, nextupd); BIO_puts(out, "\n"); } if (status != V_OCSP_CERTSTATUS_REVOKED) continue; if (reason != -1) BIO_printf(out, "\tReason: %s\n", OCSP_crl_reason_str(reason)); BIO_puts(out, "\tRevocation Time: "); ASN1_GENERALIZEDTIME_print(out, rev); BIO_puts(out, "\n"); } return 1; } static int make_ocsp_response(OCSP_RESPONSE ** resp, OCSP_REQUEST * req, CA_DB * db, X509 * ca, X509 * rcert, EVP_PKEY * rkey, STACK_OF(X509) * rother, unsigned long flags, int nmin, int ndays) { ASN1_TIME *thisupd = NULL, *nextupd = NULL; OCSP_CERTID *cid, *ca_id = NULL; OCSP_BASICRESP *bs = NULL; int i, id_count, ret = 1; id_count = OCSP_request_onereq_count(req); if (id_count <= 0) { *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_MALFORMEDREQUEST, NULL); goto end; } bs = OCSP_BASICRESP_new(); thisupd = X509_gmtime_adj(NULL, 0); if (ndays != -1) nextupd = X509_gmtime_adj(NULL, nmin * 60 + ndays * 3600 * 24); /* Examine each certificate id in the request */ for (i = 0; i < id_count; i++) { OCSP_ONEREQ *one; ASN1_INTEGER *serial; char **inf; ASN1_OBJECT *cert_id_md_oid; const EVP_MD *cert_id_md; one = OCSP_request_onereq_get0(req, i); cid = OCSP_onereq_get0_id(one); OCSP_id_get0_info(NULL, &cert_id_md_oid, NULL, NULL, cid); cert_id_md = EVP_get_digestbyobj(cert_id_md_oid); if (!cert_id_md) { *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_INTERNALERROR, NULL); goto end; } if (ca_id) OCSP_CERTID_free(ca_id); ca_id = OCSP_cert_to_id(cert_id_md, NULL, ca); /* Is this request about our CA? */ if (OCSP_id_issuer_cmp(ca_id, cid)) { OCSP_basic_add1_status(bs, cid, V_OCSP_CERTSTATUS_UNKNOWN, 0, NULL, thisupd, nextupd); continue; } OCSP_id_get0_info(NULL, NULL, NULL, &serial, cid); inf = lookup_serial(db, serial); if (!inf) OCSP_basic_add1_status(bs, cid, V_OCSP_CERTSTATUS_UNKNOWN, 0, NULL, thisupd, nextupd); else if (inf[DB_type][0] == DB_TYPE_VAL) OCSP_basic_add1_status(bs, cid, V_OCSP_CERTSTATUS_GOOD, 0, NULL, thisupd, nextupd); else if (inf[DB_type][0] == DB_TYPE_REV) { ASN1_OBJECT *inst = NULL; ASN1_TIME *revtm = NULL; ASN1_GENERALIZEDTIME *invtm = NULL; OCSP_SINGLERESP *single; int reason = -1; unpack_revinfo(&revtm, &reason, &inst, &invtm, inf[DB_rev_date]); single = OCSP_basic_add1_status(bs, cid, V_OCSP_CERTSTATUS_REVOKED, reason, revtm, thisupd, nextupd); if (invtm) OCSP_SINGLERESP_add1_ext_i2d(single, NID_invalidity_date, invtm, 0, 0); else if (inst) OCSP_SINGLERESP_add1_ext_i2d(single, NID_hold_instruction_code, inst, 0, 0); ASN1_OBJECT_free(inst); ASN1_TIME_free(revtm); ASN1_GENERALIZEDTIME_free(invtm); } } OCSP_copy_nonce(bs, req); OCSP_basic_sign(bs, rcert, rkey, NULL, rother, flags); *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_SUCCESSFUL, bs); end: ASN1_TIME_free(thisupd); ASN1_TIME_free(nextupd); OCSP_CERTID_free(ca_id); OCSP_BASICRESP_free(bs); return ret; } static char ** lookup_serial(CA_DB * db, ASN1_INTEGER * ser) { int i; BIGNUM *bn = NULL; char *itmp, *row[DB_NUMBER], **rrow; for (i = 0; i < DB_NUMBER; i++) row[i] = NULL; bn = ASN1_INTEGER_to_BN(ser, NULL); OPENSSL_assert(bn); /* FIXME: should report an error at this * point and abort */ if (BN_is_zero(bn)) itmp = strdup("00"); else itmp = BN_bn2hex(bn); row[DB_serial] = itmp; BN_free(bn); rrow = TXT_DB_get_by_index(db->db, DB_serial, row); free(itmp); return rrow; } /* Quick and dirty OCSP server: read in and parse input request */ static BIO * init_responder(char *port) { BIO *acbio = NULL, *bufbio = NULL; bufbio = BIO_new(BIO_f_buffer()); if (!bufbio) goto err; acbio = BIO_new_accept(port); if (!acbio) goto err; BIO_set_accept_bios(acbio, bufbio); bufbio = NULL; if (BIO_do_accept(acbio) <= 0) { BIO_printf(bio_err, "Error setting up accept BIO\n"); ERR_print_errors(bio_err); goto err; } return acbio; err: BIO_free_all(acbio); BIO_free(bufbio); return NULL; } static int do_responder(OCSP_REQUEST ** preq, BIO ** pcbio, BIO * acbio, char *port) { int have_post = 0, len; OCSP_REQUEST *req = NULL; char inbuf[1024]; BIO *cbio = NULL; if (BIO_do_accept(acbio) <= 0) { BIO_printf(bio_err, "Error accepting connection\n"); ERR_print_errors(bio_err); return 0; } cbio = BIO_pop(acbio); *pcbio = cbio; for (;;) { len = BIO_gets(cbio, inbuf, sizeof inbuf); if (len <= 0) return 1; /* Look for "POST" signalling start of query */ if (!have_post) { if (strncmp(inbuf, "POST", 4)) { BIO_printf(bio_err, "Invalid request\n"); return 1; } have_post = 1; } /* Look for end of headers */ if ((inbuf[0] == '\r') || (inbuf[0] == '\n')) break; } /* Try to read OCSP request */ req = d2i_OCSP_REQUEST_bio(cbio, NULL); if (!req) { BIO_printf(bio_err, "Error parsing OCSP request\n"); ERR_print_errors(bio_err); } *preq = req; return 1; } static int send_ocsp_response(BIO * cbio, OCSP_RESPONSE * resp) { static const char http_resp[] = "HTTP/1.0 200 OK\r\nContent-type: application/ocsp-response\r\n" "Content-Length: %d\r\n\r\n"; if (!cbio) return 0; BIO_printf(cbio, http_resp, i2d_OCSP_RESPONSE(resp, NULL)); i2d_OCSP_RESPONSE_bio(cbio, resp); (void) BIO_flush(cbio); return 1; } static OCSP_RESPONSE * query_responder(BIO * err, BIO * cbio, char *path, STACK_OF(CONF_VALUE) * headers, OCSP_REQUEST * req, int req_timeout) { int fd; int rv; int i; OCSP_REQ_CTX *ctx = NULL; OCSP_RESPONSE *rsp = NULL; struct pollfd pfd[1]; if (req_timeout != -1) BIO_set_nbio(cbio, 1); rv = BIO_do_connect(cbio); if ((rv <= 0) && ((req_timeout == -1) || !BIO_should_retry(cbio))) { BIO_puts(err, "Error connecting BIO\n"); return NULL; } if (BIO_get_fd(cbio, &fd) < 0) { BIO_puts(err, "Can't get connection fd\n"); goto err; } if (req_timeout != -1 && rv <= 0) { pfd[0].fd = fd; pfd[0].events = POLLOUT; rv = poll(pfd, 1, req_timeout * 1000); if (rv == 0) { BIO_puts(err, "Timeout on connect\n"); return NULL; } if (rv == -1) { BIO_puts(err, "Poll error\n"); return NULL; } } ctx = OCSP_sendreq_new(cbio, path, NULL, -1); if (!ctx) return NULL; for (i = 0; i < sk_CONF_VALUE_num(headers); i++) { CONF_VALUE *hdr = sk_CONF_VALUE_value(headers, i); if (!OCSP_REQ_CTX_add1_header(ctx, hdr->name, hdr->value)) goto err; } if (!OCSP_REQ_CTX_set1_req(ctx, req)) goto err; for (;;) { rv = OCSP_sendreq_nbio(&rsp, ctx); if (rv != -1) break; if (req_timeout == -1) continue; pfd[0].fd = fd; if (BIO_should_read(cbio)) pfd[0].events = POLLIN; else if (BIO_should_write(cbio)) pfd[0].events = POLLOUT; else { BIO_puts(err, "Unexpected retry condition\n"); goto err; } rv = poll(pfd, 1, req_timeout * 1000); if (rv == 0) { BIO_puts(err, "Timeout on request\n"); break; } if (rv == -1 || (pfd[0].revents & (POLLERR|POLLNVAL))) { BIO_puts(err, "Poll error\n"); break; } } err: if (ctx) OCSP_REQ_CTX_free(ctx); return rsp; } OCSP_RESPONSE * process_responder(BIO * err, OCSP_REQUEST * req, char *host, char *path, char *port, int use_ssl, STACK_OF(CONF_VALUE) * headers, int req_timeout) { BIO *cbio = NULL; SSL_CTX *ctx = NULL; OCSP_RESPONSE *resp = NULL; cbio = BIO_new_connect(host); if (!cbio) { BIO_printf(err, "Error creating connect BIO\n"); goto end; } if (port) BIO_set_conn_port(cbio, port); if (use_ssl == 1) { BIO *sbio; ctx = SSL_CTX_new(SSLv23_client_method()); if (ctx == NULL) { BIO_printf(err, "Error creating SSL context.\n"); goto end; } SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY); sbio = BIO_new_ssl(ctx, 1); cbio = BIO_push(sbio, cbio); } resp = query_responder(err, cbio, path, headers, req, req_timeout); if (!resp) BIO_printf(bio_err, "Error querying OCSP responder\n"); end: if (cbio) BIO_free_all(cbio); if (ctx) SSL_CTX_free(ctx); return resp; } #endif |
Added jni/libressl/apps/openssl/openssl.1.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 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 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 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 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 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 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 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 8975 8976 8977 8978 8979 8980 8981 8982 8983 8984 8985 8986 8987 8988 8989 8990 8991 8992 8993 8994 8995 8996 8997 8998 8999 9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 9018 9019 9020 9021 9022 9023 9024 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 9051 9052 9053 9054 9055 9056 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071 9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 9093 9094 9095 9096 9097 9098 9099 9100 9101 9102 9103 9104 9105 9106 9107 9108 9109 9110 9111 9112 9113 9114 9115 9116 9117 9118 9119 9120 9121 9122 9123 9124 9125 9126 9127 9128 9129 9130 9131 9132 9133 9134 9135 9136 9137 9138 9139 9140 9141 9142 9143 9144 9145 9146 9147 9148 9149 9150 | .\" $OpenBSD: openssl.1,v 1.39 2016/07/21 18:40:26 jmc Exp $ .\" ==================================================================== .\" Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in .\" the documentation and/or other materials provided with the .\" distribution. .\" .\" 3. All advertising materials mentioning features or use of this .\" software must display the following acknowledgment: .\" "This product includes software developed by the OpenSSL Project .\" for use in the OpenSSL Toolkit. (http://www.openssl.org/)" .\" .\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to .\" endorse or promote products derived from this software without .\" prior written permission. For written permission, please contact .\" openssl-core@openssl.org. .\" .\" 5. Products derived from this software may not be called "OpenSSL" .\" nor may "OpenSSL" appear in their names without prior written .\" permission of the OpenSSL Project. .\" .\" 6. Redistributions of any form whatsoever must retain the following .\" acknowledgment: .\" "This product includes software developed by the OpenSSL Project .\" for use in the OpenSSL Toolkit (http://www.openssl.org/)" .\" .\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY .\" EXPRESSED 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 OpenSSL PROJECT OR .\" ITS 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 product includes cryptographic software written by Eric Young .\" (eay@cryptsoft.com). This product includes software written by Tim .\" Hudson (tjh@cryptsoft.com). .\" .\" .\" Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) .\" All rights reserved. .\" .\" This package is an SSL implementation written .\" by Eric Young (eay@cryptsoft.com). .\" The implementation was written so as to conform with Netscapes SSL. .\" .\" This library is free for commercial and non-commercial use as long as .\" the following conditions are aheared to. The following conditions .\" apply to all code found in this distribution, be it the RC4, RSA, .\" lhash, DES, etc., code; not just the SSL code. The SSL documentation .\" included with this distribution is covered by the same copyright terms .\" except that the holder is Tim Hudson (tjh@cryptsoft.com). .\" .\" Copyright remains Eric Young's, and as such any Copyright notices in .\" the code are not to be removed. .\" If this package is used in a product, Eric Young should be given attribution .\" as the author of the parts of the library used. .\" This can be in the form of a textual message at program startup or .\" in documentation (online or textual) provided with the package. .\" .\" 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 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. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" "This product includes cryptographic software written by .\" Eric Young (eay@cryptsoft.com)" .\" The word 'cryptographic' can be left out if the rouines from the library .\" being used are not cryptographic related :-). .\" 4. If you include any Windows specific code (or a derivative thereof) from .\" the apps directory (application code) you must include an .\" acknowledgement: .\" "This product includes software written by Tim Hudson .\" (tjh@cryptsoft.com)" .\" .\" THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" The licence and distribution terms for any publically available version or .\" derivative of this code cannot be changed. i.e. this code cannot simply be .\" copied and put under another distribution licence .\" [including the GNU Public Licence.] .\" .\" OPENSSL .\" .Dd $Mdocdate: July 21 2016 $ .Dt OPENSSL 1 .Os .Sh NAME .Nm openssl .Nd OpenSSL command line tool .Sh SYNOPSIS .Nm .Cm command .Op Ar command_opts .Op Ar command_args .Pp .Nm .Cm list-standard-commands | .Cm list-message-digest-commands | .Cm list-cipher-commands | .Cm list-cipher-algorithms | .Cm list-message-digest-algorithms | .Cm list-public-key-algorithms .Pp .Nm .Cm no- Ns Ar command .Sh DESCRIPTION .Nm OpenSSL is a cryptography toolkit implementing the Transport Layer Security .Pq TLS v1 network protocol, as well as related cryptography standards. .Pp The .Nm program is a command line tool for using the various cryptography functions of .Nm openssl Ns 's crypto library from the shell. .Pp The pseudo-commands .Cm list-standard-commands , list-message-digest-commands , and .Cm list-cipher-commands output a list .Pq one entry per line of the names of all standard commands, message digest commands, or cipher commands, respectively, that are available in the present .Nm utility. .Pp The pseudo-commands .Cm list-cipher-algorithms and .Cm list-message-digest-algorithms list all cipher and message digest names, one entry per line. Aliases are listed as: .Pp .D1 from => to .Pp The pseudo-command .Cm list-public-key-algorithms lists all supported public key algorithms. .Pp The pseudo-command .Cm no- Ns Ar command tests whether a command of the specified name is available. If .Ar command does not exist, it returns 0 and prints .Cm no- Ns Ar command ; otherwise it returns 1 and prints .Ar command . In both cases, the output goes to stdout and nothing is printed to stderr. Additional command line arguments are always ignored. Since for each cipher there is a command of the same name, this provides an easy way for shell scripts to test for the availability of ciphers in the .Nm program. .Pp .Sy Note : .Cm no- Ns Ar command is not able to detect pseudo-commands such as .Cm quit , .Cm list- Ns Ar ... Ns Cm -commands , or .Cm no- Ns Ar command itself. .Sh ASN1PARSE .nr nS 1 .Nm "openssl asn1parse" .Op Fl i .Op Fl dlimit Ar number .Op Fl dump .Op Fl genconf Ar file .Op Fl genstr Ar str .Op Fl in Ar file .Op Fl inform Cm der | pem | txt .Op Fl length Ar number .Op Fl noout .Op Fl offset Ar number .Op Fl oid Ar file .Op Fl out Ar file .Op Fl strparse Ar offset .nr nS 0 .Pp The .Nm asn1parse command is a diagnostic utility that can parse ASN.1 structures. It can also be used to extract data from ASN.1 formatted data. .Pp The options are as follows: .Bl -tag -width Ds .It Fl dlimit Ar number Dump the first .Ar number bytes of unknown data in hex form. .It Fl dump Dump unknown data in hex form. .It Fl genconf Ar file , Fl genstr Ar str Generate encoded data based on string .Ar str , file .Ar file , or both, using the format described in .Xr ASN1_generate_nconf 3 . If only .Ar file is present then the string is obtained from the default section using the name .Dq asn1 . The encoded data is passed through the ASN1 parser and printed out as though it came from a file; the contents can thus be examined and written to a file using the .Fl out option. .It Fl i Indent the output according to the .Qq depth of the structures. .It Fl in Ar file The input file; the default is standard input. .It Fl inform Cm der | pem | txt The input format. .It Fl length Ar number Number of bytes to parse; the default is until end of file. .It Fl noout Don't output the parsed version of the input file. .It Fl offset Ar number Starting offset to begin parsing; the default is start of file. .It Fl oid Ar file A file containing additional object identifiers .Pq OIDs . If an OID .Pq object identifier is not part of .Nm openssl Ns 's internal table it will be represented in numerical form .Pq for example 1.2.3.4 . .Pp Each line consists of three columns: the first column is the OID in numerical format and should be followed by whitespace. The second column is the .Qq short name , which is a single word followed by whitespace. The final column is the rest of the line and is the .Qq long name . .Nm asn1parse displays the long name. .It Fl out Ar file The DER-encoded output file; the default is no encoded output (useful when combined with .Fl strparse ) . .It Fl strparse Ar offset Parse the content octets of the ASN.1 object starting at .Ar offset . This option can be used multiple times to .Qq drill down into a nested structure. .El .Sh CA .nr nS 1 .Nm "openssl ca" .Op Fl batch .Op Fl cert Ar file .Op Fl config Ar file .Op Fl crl_CA_compromise Ar time .Op Fl crl_compromise Ar time .Op Fl crl_hold Ar instruction .Op Fl crl_reason Ar reason .Op Fl crldays Ar days .Op Fl crlexts Ar section .Op Fl crlhours Ar hours .Op Fl days Ar arg .Op Fl enddate Ar date .Op Fl extensions Ar section .Op Fl extfile Ar section .Op Fl gencrl .Op Fl in Ar file .Op Fl infiles .Op Fl key Ar keyfile .Op Fl keyfile Ar arg .Op Fl keyform Ar PEM .Op Fl md Ar arg .Op Fl msie_hack .Op Fl name Ar section .Op Fl noemailDN .Op Fl notext .Op Fl out Ar file .Op Fl outdir Ar dir .Op Fl passin Ar arg .Op Fl policy Ar arg .Op Fl preserveDN .Op Fl revoke Ar file .Op Fl spkac Ar file .Op Fl ss_cert Ar file .Op Fl startdate Ar date .Op Fl status Ar serial .Op Fl subj Ar arg .Op Fl updatedb .Op Fl verbose .nr nS 0 .Pp The .Nm ca command is a minimal certificate authority (CA) application. It can be used to sign certificate requests in a variety of forms and generate certificate revocation lists (CRLs). It also maintains a text database of issued certificates and their status. .Pp The options relevant to CAs are as follows: .Bl -tag -width "XXXX" .It Fl batch This sets the batch mode. In this mode no questions will be asked and all certificates will be certified automatically. .It Fl cert Ar file The CA certificate file. .It Fl config Ar file Specifies the configuration file to use. .It Fl days Ar arg The number of days to certify the certificate for. .It Fl enddate Ar date This allows the expiry date to be explicitly set. The format of the date is YYMMDDHHMMSSZ .Pq the same as an ASN1 UTCTime structure . .It Fl extensions Ar section The section of the configuration file containing certificate extensions to be added when a certificate is issued (defaults to .Cm x509_extensions unless the .Fl extfile option is used). If no extension section is present, a V1 certificate is created. If the extension section is present .Pq even if it is empty , then a V3 certificate is created. .It Fl extfile Ar file An additional configuration .Ar file to read certificate extensions from (using the default section unless the .Fl extensions option is also used). .It Fl in Ar file An input .Ar file containing a single certificate request to be signed by the CA. .It Fl infiles If present, this should be the last option; all subsequent arguments are assumed to be the names of files containing certificate requests. .It Fl key Ar keyfile The password used to encrypt the private key. Since on some systems the command line arguments are visible, this option should be used with caution. .It Fl keyfile Ar file The private key to sign requests with. .It Fl keyform Ar PEM Private key file format. .It Fl md Ar alg The message digest to use. Possible values include .Ar md5 and .Ar sha1 . This option also applies to CRLs. .It Fl msie_hack This is a legacy option to make .Nm ca work with very old versions of the IE certificate enrollment control .Qq certenr3 . It used UniversalStrings for almost everything. Since the old control has various security bugs, its use is strongly discouraged. The newer control .Qq Xenroll does not need this option. .It Fl name Ar section Specifies the configuration file .Ar section to use (overrides .Cm default_ca in the .Cm ca section). .It Fl noemailDN The DN of a certificate can contain the EMAIL field if present in the request DN, however it is good policy just having the email set into the .Cm altName extension of the certificate. When this option is set, the EMAIL field is removed from the certificate's subject and set only in the, eventually present, extensions. The .Ar email_in_dn keyword can be used in the configuration file to enable this behaviour. .It Fl notext Don't output the text form of a certificate to the output file. .It Fl out Ar file The output file to output certificates to. The default is standard output. The certificate details will also be printed out to this file. .It Fl outdir Ar directory The .Ar directory to output certificates to. The certificate will be written to a file consisting of the serial number in hex with .Qq .pem appended. .It Fl passin Ar arg The key password source. .It Fl policy Ar arg This option defines the CA .Qq policy to use. The policy section in the configuration file consists of a set of variables corresponding to certificate DN fields. The values may be one of .Qq match (the value must match the same field in the CA certificate), .Qq supplied (the value must be present), or .Qq optional (the value may be present). Any fields not mentioned in the policy section are silently deleted, unless the .Fl preserveDN option is set, but this can be regarded more of a quirk than intended behaviour. .It Fl preserveDN Normally, the DN order of a certificate is the same as the order of the fields in the relevant policy section. When this option is set, the order is the same as the request. This is largely for compatibility with the older IE enrollment control which would only accept certificates if their DNs matched the order of the request. This is not needed for Xenroll. .It Fl spkac Ar file A file containing a single Netscape signed public key and challenge, and additional field values to be signed by the CA. This will usually come from the KEYGEN tag in an HTML form to create a new private key. It is, however, possible to create SPKACs using the .Nm spkac utility. .Pp The file should contain the variable SPKAC set to the value of the SPKAC and also the required DN components as name value pairs. If it's necessary to include the same component twice, then it can be preceded by a number and a .Sq \&. . .It Fl ss_cert Ar file A single self-signed certificate to be signed by the CA. .It Fl startdate Ar date This allows the start date to be explicitly set. The format of the date is YYMMDDHHMMSSZ .Pq the same as an ASN1 UTCTime structure . .It Fl status Ar serial Show the status of the certificate with serial number .Ar serial . .It Fl updatedb Update database for expired certificates. .It Fl verbose This prints extra details about the operations being performed. .El .Pp The options relevant to CRLs are as follows: .Bl -tag -width "XXXX" .It Fl crl_CA_compromise Ar time This is the same as .Fl crl_compromise , except the revocation reason is set to CACompromise. .It Fl crl_compromise Ar time This sets the revocation reason to keyCompromise and the compromise time to .Ar time . .Ar time should be in GeneralizedTime format, i.e. YYYYMMDDHHMMSSZ. .It Fl crl_hold Ar instruction This sets the CRL revocation reason code to certificateHold and the hold instruction to .Ar instruction which must be an OID. Although any OID can be used, only holdInstructionNone (the use of which is discouraged by RFC 2459), holdInstructionCallIssuer or holdInstructionReject will normally be used. .It Fl crl_reason Ar reason Revocation reason, where .Ar reason is one of: unspecified, keyCompromise, CACompromise, affiliationChanged, superseded, cessationOfOperation, certificateHold or removeFromCRL. The matching of .Ar reason is case insensitive. Setting any revocation reason will make the CRL v2. In practice, removeFromCRL is not particularly useful because it is only used in delta CRLs which are not currently implemented. .It Fl crldays Ar num The number of days before the next CRL is due. This is the days from now to place in the CRL .Cm nextUpdate field. .It Fl crlexts Ar section The .Ar section of the configuration file containing CRL extensions to include. If no CRL extension section is present then a V1 CRL is created; if the CRL extension section is present .Pq even if it is empty then a V2 CRL is created. The CRL extensions specified are CRL extensions and .Em not CRL entry extensions. It should be noted that some software .Pq for example Netscape can't handle V2 CRLs. .It Fl crlhours Ar num The number of hours before the next CRL is due. .It Fl gencrl This option generates a CRL based on information in the index file. .It Fl revoke Ar file A .Ar file containing a certificate to revoke. .It Fl subj Ar arg Supersedes the subject name given in the request. The .Ar arg must be formatted as .Ar /type0=value0/type1=value1/type2=... ; characters may be escaped by .Sq \e .Pq backslash , no spaces are skipped. .El .Pp Many of the options can be set in the .Cm ca section of the configuration file (or in the default section of the configuration file), specified using .Cm default_ca or .Fl name . The options .Cm preserve and .Cm msie_hack are read directly from the .Cm ca section. .Pp Many of the configuration file options are identical to command line options. Where the option is present in the configuration file and the command line, the command line value is used. Where an option is described as mandatory, then it must be present in the configuration file or the command line equivalent .Pq if any used. .Bl -tag -width "XXXX" .It Cm certificate The same as .Fl cert . It gives the file containing the CA certificate. Mandatory. .It Cm copy_extensions Determines how extensions in certificate requests should be handled. If set to .Cm none or this option is not present, then extensions are ignored and not copied to the certificate. If set to .Cm copy , then any extensions present in the request that are not already present are copied to the certificate. If set to .Cm copyall , then all extensions in the request are copied to the certificate: if the extension is already present in the certificate it is deleted first. .Pp The .Cm copy_extensions option should be used with caution. If care is not taken, it can be a security risk. For example, if a certificate request contains a .Cm basicConstraints extension with CA:TRUE and the .Cm copy_extensions value is set to .Cm copyall and the user does not spot this when the certificate is displayed, then this will hand the requestor a valid CA certificate. .Pp This situation can be avoided by setting .Cm copy_extensions to .Cm copy and including .Cm basicConstraints with CA:FALSE in the configuration file. Then if the request contains a .Cm basicConstraints extension, it will be ignored. .Pp The main use of this option is to allow a certificate request to supply values for certain extensions such as .Cm subjectAltName . .It Cm crl_extensions The same as .Fl crlexts . .It Cm crlnumber A text file containing the next CRL number to use in hex. The CRL number will be inserted in the CRLs only if this file exists. If this file is present, it must contain a valid CRL number. .It Cm database The text database file to use. Mandatory. This file must be present, though initially it will be empty. .It Cm default_crl_hours , default_crl_days The same as the .Fl crlhours and .Fl crldays options. These will only be used if neither command line option is present. At least one of these must be present to generate a CRL. .It Cm default_days The same as the .Fl days option. The number of days to certify a certificate for. .It Cm default_enddate The same as the .Fl enddate option. Either this option or .Cm default_days .Pq or the command line equivalents must be present. .It Cm default_md The same as the .Fl md option. The message digest to use. Mandatory. .It Cm default_startdate The same as the .Fl startdate option. The start date to certify a certificate for. If not set, the current time is used. .It Cm email_in_dn The same as .Fl noemailDN . If the EMAIL field is to be removed from the DN of the certificate, simply set this to .Qq no . If not present, the default is to allow for the EMAIL field in the certificate's DN. .It Cm msie_hack The same as .Fl msie_hack . .It Cm name_opt , cert_opt These options allow the format used to display the certificate details when asking the user to confirm signing. All the options supported by the .Nm x509 utilities' .Fl nameopt and .Fl certopt switches can be used here, except that .Cm no_signame and .Cm no_sigdump are permanently set and cannot be disabled (this is because the certificate signature cannot be displayed because the certificate has not been signed at this point). .Pp For convenience, the value .Cm ca_default is accepted by both to produce a reasonable output. .Pp If neither option is present, the format used in earlier versions of .Nm openssl is used. Use of the old format is .Em strongly discouraged because it only displays fields mentioned in the .Cm policy section, mishandles multicharacter string types and does not display extensions. .It Cm new_certs_dir The same as the .Fl outdir command line option. It specifies the directory where new certificates will be placed. Mandatory. .It Cm oid_file This specifies a file containing additional object identifiers. Each line of the file should consist of the numerical form of the object identifier followed by whitespace, then the short name followed by whitespace and finally the long name. .It Cm oid_section This specifies a section in the configuration file containing extra object identifiers. Each line should consist of the short name of the object identifier followed by .Sq = and the numerical form. The short and long names are the same when this option is used. .It Cm policy The same as .Fl policy . Mandatory. .It Cm preserve The same as .Fl preserveDN . .It Cm private_key Same as the .Fl keyfile option. The file containing the CA private key. Mandatory. .It Cm serial A text file containing the next serial number to use in hex. Mandatory. This file must be present and contain a valid serial number. .It Cm unique_subject If the value .Cm yes is given, the valid certificate entries in the database must have unique subjects. If the value .Cm no is given, several valid certificate entries may have the exact same subject. The default value is .Cm yes . .It Cm x509_extensions The same as .Fl extensions . .El .Sh CIPHERS .Nm openssl ciphers .Op Fl hVv .Op Fl tls1 .Op Ar cipherlist .Pp The .Nm ciphers command converts .Nm openssl cipher lists into ordered SSL cipher preference lists. It can be used as a test tool to determine the appropriate cipherlist. .Pp The options are as follows: .Bl -tag -width Ds .It Fl h , \&? Print a brief usage message. .It Fl tls1 Only include TLS v1 ciphers. .It Fl V Verbose. List ciphers with a complete description of protocol version, key exchange, authentication, encryption and mac algorithms, any key size restrictions, and cipher suite codes (hex format). .It Fl v Like .Fl V , but without cipher suite codes. .It Ar cipherlist A cipher list to convert to a cipher preference list. If it is not included, the default cipher list will be used. .Pp The cipher list consists of one or more cipher strings separated by colons. Commas or spaces are also acceptable separators, but colons are normally used. .Pp The actual cipher string can take several different forms: .Pp It can consist of a single cipher suite, such as RC4-SHA. .Pp It can represent a list of cipher suites containing a certain algorithm, or cipher suites of a certain type. For example SHA1 represents all cipher suites using the digest algorithm SHA1. .Pp Lists of cipher suites can be combined in a single cipher string using the .Sq + character (logical AND operation). For example, SHA1+DES represents all cipher suites containing the SHA1 and DES algorithms. .Pp Each cipher string can be optionally preceded by the characters .Sq \&! , .Sq - , or .Sq + . If .Sq !\& is used, then the ciphers are permanently deleted from the list. The ciphers deleted can never reappear in the list even if they are explicitly stated. If .Sq - is used, then the ciphers are deleted from the list, but some or all of the ciphers can be added again by later options. If .Sq + is used, then the ciphers are moved to the end of the list. This option doesn't add any new ciphers, it just moves matching existing ones. .Pp If none of these characters is present, the string is just interpreted as a list of ciphers to be appended to the current preference list. If the list includes any ciphers already present, they will be ignored; that is, they will not be moved to the end of the list. .Pp Additionally, the cipher string .Cm @STRENGTH can be used at any point to sort the current cipher list in order of encryption algorithm key length. .El .Pp The following is a list of all permitted cipher strings and their meanings. .Bl -tag -width "XXXX" .It Cm DEFAULT The default cipher list. This is determined at compile time and is currently .Cm ALL:!aNULL:!eNULL:!SSLv2 . This must be the first cipher string specified. .It Cm COMPLEMENTOFDEFAULT The ciphers included in .Cm ALL , but not enabled by default. Currently this is .Cm ADH . Note that this rule does not cover .Cm eNULL , which is not included by .Cm ALL (use .Cm COMPLEMENTOFALL if necessary). .It Cm ALL All cipher suites except the .Cm eNULL ciphers, which must be explicitly enabled. .It Cm COMPLEMENTOFALL The cipher suites not enabled by .Cm ALL , currently being .Cm eNULL . .It Cm HIGH .Qq High encryption cipher suites. This currently means those with key lengths larger than 128 bits. .It Cm MEDIUM .Qq Medium encryption cipher suites, currently those using 128-bit encryption. .It Cm LOW .Qq Low encryption cipher suites, currently those using 64- or 56-bit encryption algorithms. .It Cm eNULL , NULL The .Qq NULL ciphers; that is, those offering no encryption. Because these offer no encryption at all and are a security risk, they are disabled unless explicitly included. .It Cm aNULL The cipher suites offering no authentication. This is currently the anonymous DH algorithms. These cipher suites are vulnerable to a .Qq man in the middle attack, so their use is normally discouraged. .It Cm kRSA , RSA Cipher suites using RSA key exchange. .It Cm kEDH Cipher suites using ephemeral DH key agreement. .It Cm aRSA Cipher suites using RSA authentication, i.e. the certificates carry RSA keys. .It Cm aDSS , DSS Cipher suites using DSS authentication, i.e. the certificates carry DSS keys. .It Cm TLSv1 TLS v1.0 cipher suites. .It Cm DH Cipher suites using DH, including anonymous DH. .It Cm ADH Anonymous DH cipher suites. .It Cm AES Cipher suites using AES. .It Cm 3DES Cipher suites using triple DES. .It Cm DES Cipher suites using DES .Pq not triple DES . .It Cm RC4 Cipher suites using RC4. .It Cm CAMELLIA Cipher suites using Camellia. .It Cm CHACHA20 Cipher suites using ChaCha20. .It Cm IDEA Cipher suites using IDEA. .It Cm MD5 Cipher suites using MD5. .It Cm SHA1 , SHA Cipher suites using SHA1. .El .Sh CRL .nr nS 1 .Nm "openssl crl" .Op Fl CAfile Ar file .Op Fl CApath Ar dir .Op Fl fingerprint .Op Fl hash .Op Fl in Ar file .Op Fl inform Cm der | pem .Op Fl issuer .Op Fl lastupdate .Op Fl nextupdate .Op Fl noout .Op Fl out Ar file .Op Fl outform Cm der | pem .Op Fl text .nr nS 0 .Pp The .Nm crl command processes CRL files in DER or PEM format. The PEM CRL format uses the header and footer lines: .Bd -unfilled -offset indent -----BEGIN X509 CRL----- -----END X509 CRL----- .Ed .Pp The options are as follows: .Bl -tag -width Ds .It Fl CAfile Ar file Verify the signature on a CRL by looking up the issuing certificate in .Ar file . .It Fl CApath Ar directory Verify the signature on a CRL by looking up the issuing certificate in .Ar dir . This directory must be a standard certificate directory, i.e. a hash of each subject name (using .Cm x509 Fl hash ) should be linked to each certificate. .It Fl fingerprint Print the CRL fingerprint. .It Fl hash Output a hash of the issuer name. This can be used to look up CRLs in a directory by issuer name. .It Fl in Ar file The input file to read from, or standard input if not specified. .It Fl inform Cm der | pem The input format. .It Fl issuer Output the issuer name. .It Fl lastupdate Output the .Cm lastUpdate field. .It Fl nextupdate Output the .Cm nextUpdate field. .It Fl noout Don't output the encoded version of the CRL. .It Fl out Ar file The output file to write to, or standard output if not specified. .It Fl outform Cm der | pem The output format. .It Fl text Print out the CRL in text form. .El .Sh CRL2PKCS7 .nr nS 1 .Nm "openssl crl2pkcs7" .Op Fl certfile Ar file .Op Fl in Ar file .Op Fl inform Cm der | pem .Op Fl nocrl .Op Fl out Ar file .Op Fl outform Cm der | pem .nr nS 0 .Pp The .Nm crl2pkcs7 command takes an optional CRL and one or more certificates and converts them into a PKCS#7 degenerate .Qq certificates only structure. .Pp The options are as follows: .Bl -tag -width Ds .It Fl certfile Ar file Add the certificates in PEM .Ar file to the PKCS#7 structure. This option can be used more than once to read certificates from multiple files. .It Fl in Ar file Read the CRL from .Ar file , or standard input if not specified. .It Fl inform Cm der | pem Specify the CRL input format. .It Fl nocrl Normally, a CRL is included in the output file. With this option, no CRL is included in the output file and a CRL is not read from the input file. .It Fl out Ar file Write the PKCS#7 structure to .Ar file , or standard output if not specified. .It Fl outform Cm der | pem Specify the PKCS#7 structure output format. .El .\" .\" DGST .\" .Sh DGST .nr nS 1 .Nm "openssl dgst" .Bk -words .Oo .Fl gost-mac | streebog256 | streebog512 | md_gost94 | .Fl md4 | md5 | ripemd160 | sha1 | .Fl sha224 | sha256 | sha384 | sha512 | whirlpool .Oc .Op Fl binary .Op Fl cd .Op Fl hex .Op Fl hmac Ar key .Op Fl keyform Ar PEM .Op Fl mac Ar algorithm .Op Fl macopt Ar nm : Ns Ar v .Op Fl out Ar file .Op Fl passin Ar arg .Op Fl prverify Ar file .Op Fl sign Ar file .Op Fl signature Ar file .Op Fl sigopt Ar nm : Ns Ar v .Op Fl verify Ar file .Op Ar .Ek .nr nS 0 .Pp .Nm openssl .Cm gost-mac | streebog256 | streebog512 | md_gost94 | .Cm md4 | md5 | ripemd160 | sha1 | .Cm sha224 | sha256 | sha384 | sha512 | whirlpool .Op Fl c .Op Fl d .Op Ar .Pp The digest functions output the message digest of a supplied .Ar file or .Ar files in hexadecimal form. They can also be used for digital signing and verification. .Pp The options are as follows: .Bl -tag -width Ds .It Fl binary Output the digest or signature in binary form. .It Fl c Print out the digest in two-digit groups separated by colons; only relevant if .Em hex format output is used. .It Fl d Print out BIO debugging information. .It Fl hex Digest is to be output as a hex dump. This is the default case for a .Qq normal digest as opposed to a digital signature. .It Fl hmac Ar key Create a hashed MAC using .Ar key . .It Fl keyform Ar PEM Specifies the key format to sign the digest with. .It Fl mac Ar algorithm Create a keyed Message Authentication Code (MAC). The most popular MAC algorithm is HMAC (hash-based MAC), but there are other MAC algorithms which are not based on hash. MAC keys and other options should be set via the .Fl macopt parameter. .It Fl macopt Ar nm : Ns Ar v Passes options to the MAC algorithm, specified by .Fl mac . The following options are supported by HMAC: .Bl -tag -width Ds .It Ar key : Ns Ar string Specifies the MAC key as an alphanumeric string (use if the key contain printable characters only). String length must conform to any restrictions of the MAC algorithm. .It Ar hexkey : Ns Ar string Specifies the MAC key in hexadecimal form (two hex digits per byte). Key length must conform to any restrictions of the MAC algorithm. .El .It Fl out Ar file The file to output to, or standard output by default. .It Fl passin Ar arg The key password source. .It Fl prverify Ar file Verify the signature using the private key in .Ar file . The output is either .Qq Verification OK or .Qq Verification Failure . .It Fl sign Ar file Digitally sign the digest using the private key in .Ar file . .It Fl signature Ar file The actual signature to verify. .It Fl sigopt Ar nm : Ns Ar v Pass options to the signature algorithm during sign or verify operations. The names and values of these options are algorithm-specific. .It Fl verify Ar file Verify the signature using the public key in .Ar file . The output is either .Qq Verification OK or .Qq Verification Failure . .It Ar File or files to digest. If no files are specified then standard input is used. .El .Sh DGST NOTES The digest of choice for all new applications is SHA1. Other digests are, however, still widely used. .Pp If you wish to sign or verify data using the DSA algorithm, the dss1 digest must be used. .Pp A source of random numbers is required for certain signing algorithms, in particular DSA. .Pp The signing and verify options should only be used if a single file is being signed or verified. .\" .\" DH .\" .Sh DH Diffie-Hellman Parameter Management. The .Nm dh command has been replaced by .Nm dhparam . See .Sx DHPARAM below. .\" .\" DHPARAM .\" .Sh DHPARAM .nr nS 1 .Nm "openssl dhparam" .Bk -words .Op Fl 2 | 5 .Op Fl C .Op Fl check .Op Fl dsaparam .Op Fl in Ar file .Op Fl inform Ar DER | PEM .Op Fl noout .Op Fl out Ar file .Op Fl outform Ar DER | PEM .Op Fl text .Op Ar numbits .Ek .nr nS 0 .Pp The .Nm dhparam command is used to manipulate DH parameter files. .Pp The options are as follows: .Bl -tag -width Ds .It Fl 2 , 5 The generator to use, either 2 or 5. 2 is the default. If present, the input file is ignored and parameters are generated instead. .It Fl C This option converts the parameters into C code. The parameters can then be loaded by calling the .Cm get_dh Ns Ar numbits Ns Li () function. .It Fl check Check the DH parameters. .It Fl dsaparam If this option is used, DSA rather than DH parameters are read or created; they are converted to DH format. Otherwise, .Qq strong primes .Pq such that (p-1)/2 is also prime will be used for DH parameter generation. .Pp DH parameter generation with the .Fl dsaparam option is much faster, and the recommended exponent length is shorter, which makes DH key exchange more efficient. Beware that with such DSA-style DH parameters, a fresh DH key should be created for each use to avoid small-subgroup attacks that may be possible otherwise. .It Fl in Ar file This specifies the input .Ar file to read parameters from, or standard input if this option is not specified. .It Fl inform Ar DER | PEM This specifies the input format. The argument .Ar DER uses an ASN1 DER-encoded form compatible with the PKCS#3 DHparameter structure. The .Ar PEM form is the default format: it consists of the DER format base64-encoded with additional header and footer lines. .It Fl noout This option inhibits the output of the encoded version of the parameters. .It Ar numbits This argument specifies that a parameter set should be generated of size .Ar numbits . It must be the last option. If not present, a value of 2048 is used. If this value is present, the input file is ignored and parameters are generated instead. .It Fl out Ar file This specifies the output .Ar file to write parameters to. Standard output is used if this option is not present. The output filename should .Em not be the same as the input filename. .It Fl outform Ar DER | PEM This specifies the output format; the options have the same meaning as the .Fl inform option. .It Fl text This option prints out the DH parameters in human readable form. .El .Sh DHPARAM WARNINGS The program .Nm dhparam combines the functionality of the programs .Nm dh and .Nm gendh in previous versions of .Nm OpenSSL and .Nm SSLeay . The .Nm dh and .Nm gendh programs are retained for now, but may have different purposes in future versions of .Nm OpenSSL . .Sh DHPARAM NOTES PEM format DH parameters use the header and footer lines: .Bd -unfilled -offset indent -----BEGIN DH PARAMETERS----- -----END DH PARAMETERS----- .Ed .Pp .Nm OpenSSL currently only supports the older PKCS#3 DH, not the newer X9.42 DH. .Pp This program manipulates DH parameters not keys. .Sh DHPARAM BUGS There should be a way to generate and manipulate DH keys. .Sh DHPARAM HISTORY The .Nm dhparam command was added in .Nm OpenSSL 0.9.5. The .Fl dsaparam option was added in .Nm OpenSSL 0.9.6. .\" .\" DSA .\" .Sh DSA .nr nS 1 .Nm "openssl dsa" .Bk -words .Oo .Fl aes128 | aes192 | aes256 | .Fl des | des3 .Oc .Op Fl in Ar file .Op Fl inform Ar DER | PEM .Op Fl modulus .Op Fl noout .Op Fl out Ar file .Op Fl outform Ar DER | PEM .Op Fl passin Ar arg .Op Fl passout Ar arg .Op Fl pubin .Op Fl pubout .Op Fl text .Ek .nr nS 0 .Pp The .Nm dsa command processes DSA keys. They can be converted between various forms and their components printed out. .Pp .Sy Note : This command uses the traditional .Nm SSLeay compatible format for private key encryption: newer applications should use the more secure PKCS#8 format using the .Nm pkcs8 command. .Pp The options are as follows: .Bl -tag -width Ds .It Xo .Fl aes128 | aes192 | aes256 | .Fl des | des3 .Xc These options encrypt the private key with the AES, DES, or the triple DES ciphers, respectively, before outputting it. A pass phrase is prompted for. If none of these options is specified, the key is written in plain text. This means that using the .Nm dsa utility to read in an encrypted key with no encryption option can be used to remove the pass phrase from a key, or by setting the encryption options it can be use to add or change the pass phrase. These options can only be used with PEM format output files. .It Fl in Ar file This specifies the input .Ar file to read a key from, or standard input if this option is not specified. If the key is encrypted, a pass phrase will be prompted for. .It Fl inform Ar DER | PEM This specifies the input format. The .Ar DER argument with a private key uses an ASN1 DER-encoded form of an ASN.1 SEQUENCE consisting of the values of version .Pq currently zero , P, Q, G, and the public and private key components, respectively, as ASN.1 INTEGERs. When used with a public key it uses a .Em SubjectPublicKeyInfo structure: it is an error if the key is not DSA. .Pp The .Ar PEM form is the default format: it consists of the DER format base64-encoded with additional header and footer lines. In the case of a private key, PKCS#8 format is also accepted. .It Fl modulus This option prints out the value of the public key component of the key. .It Fl noout This option prevents output of the encoded version of the key. .It Fl out Ar file This specifies the output .Ar file to write a key to, or standard output if not specified. If any encryption options are set then a pass phrase will be prompted for. The output filename should .Em not be the same as the input filename. .It Fl outform Ar DER | PEM This specifies the output format; the options have the same meaning as the .Fl inform option. .It Fl passin Ar arg The key password source. .It Fl passout Ar arg The output file password source. .It Fl pubin By default, a private key is read from the input file. With this option a public key is read instead. .It Fl pubout By default, a private key is output. With this option a public key will be output instead. This option is automatically set if the input is a public key. .It Fl text Prints out the public/private key components and parameters. .El .Sh DSA NOTES The PEM private key format uses the header and footer lines: .Bd -unfilled -offset indent -----BEGIN DSA PRIVATE KEY----- -----END DSA PRIVATE KEY----- .Ed .Pp The PEM public key format uses the header and footer lines: .Bd -unfilled -offset indent -----BEGIN PUBLIC KEY----- -----END PUBLIC KEY----- .Ed .Sh DSA EXAMPLES To remove the pass phrase on a DSA private key: .Pp .Dl $ openssl dsa -in key.pem -out keyout.pem .Pp To encrypt a private key using triple DES: .Pp .Dl $ openssl dsa -in key.pem -des3 -out keyout.pem .Pp To convert a private key from PEM to DER format: .Pp .Dl $ openssl dsa -in key.pem -outform DER -out keyout.der .Pp To print out the components of a private key to standard output: .Pp .Dl $ openssl dsa -in key.pem -text -noout .Pp To just output the public part of a private key: .Pp .Dl $ openssl dsa -in key.pem -pubout -out pubkey.pem .\" .\" DSAPARAM .\" .Sh DSAPARAM .nr nS 1 .Nm "openssl dsaparam" .Bk -words .Op Fl C .Op Fl genkey .Op Fl in Ar file .Op Fl inform Ar DER | PEM .Op Fl noout .Op Fl out Ar file .Op Fl outform Ar DER | PEM .Op Fl text .Op Ar numbits .Ek .nr nS 0 .Pp The .Nm dsaparam command is used to manipulate or generate DSA parameter files. .Pp The options are as follows: .Bl -tag -width Ds .It Fl C This option converts the parameters into C code. The parameters can then be loaded by calling the .Cm get_dsa Ns Ar XXX Ns Li () function. .It Fl genkey This option will generate a DSA either using the specified or generated parameters. .It Fl in Ar file This specifies the input .Ar file to read parameters from, or standard input if this option is not specified. If the .Ar numbits parameter is included, then this option will be ignored. .It Fl inform Ar DER | PEM This specifies the input format. The .Ar DER argument uses an ASN1 DER-encoded form compatible with RFC 2459 .Pq PKIX DSS-Parms that is a SEQUENCE consisting of p, q and g, respectively. The .Ar PEM form is the default format: it consists of the DER format base64-encoded with additional header and footer lines. .It Fl noout This option inhibits the output of the encoded version of the parameters. .It Ar numbits This option specifies that a parameter set should be generated of size .Ar numbits . If this option is included, the input file .Pq if any is ignored. .It Fl out Ar file This specifies the output .Ar file to write parameters to. Standard output is used if this option is not present. The output filename should .Em not be the same as the input filename. .It Fl outform Ar DER | PEM This specifies the output format; the options have the same meaning as the .Fl inform option. .It Fl text This option prints out the DSA parameters in human readable form. .El .Sh DSAPARAM NOTES PEM format DSA parameters use the header and footer lines: .Bd -unfilled -offset indent -----BEGIN DSA PARAMETERS----- -----END DSA PARAMETERS----- .Ed .Pp DSA parameter generation is a slow process and as a result the same set of DSA parameters is often used to generate several distinct keys. .\" .\" EC .\" .Sh EC .nr nS 1 .Nm "openssl ec" .Bk -words .Op Fl conv_form Ar arg .Op Fl des .Op Fl des3 .Op Fl in Ar file .Op Fl inform Ar DER | PEM .Op Fl noout .Op Fl out Ar file .Op Fl outform Ar DER | PEM .Op Fl param_enc Ar arg .Op Fl param_out .Op Fl passin Ar arg .Op Fl passout Ar arg .Op Fl pubin .Op Fl pubout .Op Fl text .Ek .nr nS 0 .Pp The .Nm ec command processes EC keys. They can be converted between various forms and their components printed out. Note: .Nm OpenSSL uses the private key format specified in .Dq SEC 1: Elliptic Curve Cryptography .Pq Lk http://www.secg.org/ . To convert an .Nm OpenSSL EC private key into the PKCS#8 private key format use the .Nm pkcs8 command. .Pp The options are as follows: .Bl -tag -width Ds .It Fl conv_form Ar arg This specifies how the points on the elliptic curve are converted into octet strings. Possible values are: .Cm compressed (the default value), .Cm uncompressed , and .Cm hybrid . For more information regarding the point conversion forms please read the X9.62 standard. Note: Due to patent issues the .Cm compressed option is disabled by default for binary curves and can be enabled by defining the preprocessor macro .Ar OPENSSL_EC_BIN_PT_COMP at compile time. .It Fl des | des3 These options encrypt the private key with the DES, triple DES, or any other cipher supported by .Nm OpenSSL before outputting it. A pass phrase is prompted for. If none of these options is specified the key is written in plain text. This means that using the .Nm ec utility to read in an encrypted key with no encryption option can be used to remove the pass phrase from a key, or by setting the encryption options it can be use to add or change the pass phrase. These options can only be used with PEM format output files. .It Fl in Ar file This specifies the input filename to read a key from, or standard input if this option is not specified. If the key is encrypted a pass phrase will be prompted for. .It Fl inform Ar DER | PEM This specifies the input format. DER with a private key uses an ASN.1 DER-encoded SEC1 private key. When used with a public key it uses the SubjectPublicKeyInfo structure as specified in RFC 3280. PEM is the default format: it consists of the DER format base64 encoded with additional header and footer lines. In the case of a private key PKCS#8 format is also accepted. .It Fl noout Prevents output of the encoded version of the key. .It Fl out Ar file Specifies the output filename to write a key to, or standard output if none is specified. If any encryption options are set then a pass phrase will be prompted for. The output filename should .Em not be the same as the input filename. .It Fl outform Ar DER | PEM This specifies the output format. The options have the same meaning as the .Fl inform option. .It Fl param_enc Ar arg This specifies how the elliptic curve parameters are encoded. Possible value are: .Cm named_curve , i.e. the EC parameters are specified by an OID; or .Cm explicit , where the EC parameters are explicitly given (see RFC 3279 for the definition of the EC parameter structures). The default value is .Cm named_curve . Note: the .Cm implicitlyCA alternative, as specified in RFC 3279, is currently not implemented in .Nm OpenSSL . .It Fl passin Ar arg The key password source. .It Fl passout Ar arg The output file password source. .It Fl pubin By default a private key is read from the input file; with this option a public key is read instead. .It Fl pubout By default a private key is output; with this option a public key is output instead. This option is automatically set if the input is a public key. .It Fl text Prints out the public/private key components and parameters. .El .Sh EC NOTES The PEM private key format uses the header and footer lines: .Bd -literal -offset indent -----BEGIN EC PRIVATE KEY----- -----END EC PRIVATE KEY----- .Ed .Pp The PEM public key format uses the header and footer lines: .Bd -literal -offset indent -----BEGIN PUBLIC KEY----- -----END PUBLIC KEY----- .Ed .Sh EC EXAMPLES To encrypt a private key using triple DES: .Bd -literal -offset indent $ openssl ec -in key.pem -des3 -out keyout.pem .Ed .Pp To convert a private key from PEM to DER format: .Bd -literal -offset indent $ openssl ec -in key.pem -outform DER -out keyout.der .Ed .Pp To print out the components of a private key to standard output: .Bd -literal -offset indent $ openssl ec -in key.pem -text -noout .Ed .Pp To just output the public part of a private key: .Bd -literal -offset indent $ openssl ec -in key.pem -pubout -out pubkey.pem .Ed .Pp To change the parameter encoding to .Cm explicit : .Bd -literal -offset indent $ openssl ec -in key.pem -param_enc explicit -out keyout.pem .Ed .Pp To change the point conversion form to .Cm compressed : .Bd -literal -offset indent $ openssl ec -in key.pem -conv_form compressed -out keyout.pem .Ed .Sh EC HISTORY The .Nm ec command was first introduced in .Nm OpenSSL 0.9.8. .Sh EC AUTHORS .An Nils Larsch . .\" .\" ECPARAM .\" .Sh ECPARAM .nr nS 1 .Nm "openssl ecparam" .Bk -words .Op Fl C .Op Fl check .Op Fl conv_form Ar arg .Op Fl genkey .Op Fl in Ar file .Op Fl inform Ar DER | PEM .Op Fl list_curves .Op Fl name Ar arg .Op Fl no_seed .Op Fl noout .Op Fl out Ar file .Op Fl outform Ar DER | PEM .Op Fl param_enc Ar arg .Op Fl text .Ek .nr nS 0 .Pp This command is used to manipulate or generate EC parameter files. .Pp The options are as follows: .Bl -tag -width Ds .It Fl C Convert the EC parameters into C code. The parameters can then be loaded by calling the .Fn get_ec_group_XXX function. .It Fl check Validate the elliptic curve parameters. .It Fl conv_form Ar arg Specify how the points on the elliptic curve are converted into octet strings. Possible values are: .Cm compressed (the default value), .Cm uncompressed , and .Cm hybrid . For more information regarding the point conversion forms please read the X9.62 standard. Note: Due to patent issues the .Cm compressed option is disabled by default for binary curves and can be enabled by defining the preprocessor macro .Ar OPENSSL_EC_BIN_PT_COMP at compile time. .It Fl genkey Generate an EC private key using the specified parameters. .It Fl in Ar file Specify the input filename to read parameters from or standard input if this option is not specified. .It Fl inform Ar DER | PEM Specify the input format. DER uses an ASN.1 DER-encoded form compatible with RFC 3279 EcpkParameters. PEM is the default format: it consists of the DER format base64 encoded with additional header and footer lines. .It Fl list_curves Print out a list of all currently implemented EC parameter names and exit. .It Fl name Ar arg Use the EC parameters with the specified 'short' name. Use .Fl list_curves to get a list of all currently implemented EC parameters. .It Fl no_seed Inhibit that the 'seed' for the parameter generation is included in the ECParameters structure (see RFC 3279). .It Fl noout Inhibit the output of the encoded version of the parameters. .It Fl out Ar file Specify the output filename parameters are written to. Standard output is used if this option is not present. The output filename should .Em not be the same as the input filename. .It Fl outform Ar DER | PEM Specify the output format; the parameters have the same meaning as the .Fl inform option. .It Fl param_enc Ar arg This specifies how the elliptic curve parameters are encoded. Possible value are: .Cm named_curve , i.e. the EC parameters are specified by an OID, or .Cm explicit , where the EC parameters are explicitly given (see RFC 3279 for the definition of the EC parameter structures). The default value is .Cm named_curve . Note: the .Cm implicitlyCA alternative, as specified in RFC 3279, is currently not implemented in .Nm OpenSSL . .It Fl text Print out the EC parameters in human readable form. .El .Sh ECPARAM NOTES PEM format EC parameters use the header and footer lines: .Bd -literal -offset indent -----BEGIN EC PARAMETERS----- -----END EC PARAMETERS----- .Ed .Pp .Nm OpenSSL is currently not able to generate new groups and therefore .Nm ecparam can only create EC parameters from known (named) curves. .Sh ECPARAM EXAMPLES To create EC parameters with the group 'prime192v1': .Bd -literal -offset indent $ openssl ecparam -out ec_param.pem -name prime192v1 .Ed .Pp To create EC parameters with explicit parameters: .Bd -literal -offset indent $ openssl ecparam -out ec_param.pem -name prime192v1 \e -param_enc explicit .Ed .Pp To validate given EC parameters: .Bd -literal -offset indent $ openssl ecparam -in ec_param.pem -check .Ed .Pp To create EC parameters and a private key: .Bd -literal -offset indent $ openssl ecparam -out ec_key.pem -name prime192v1 -genkey .Ed .Pp To change the point encoding to 'compressed': .Bd -literal -offset indent $ openssl ecparam -in ec_in.pem -out ec_out.pem \e -conv_form compressed .Ed .Pp To print out the EC parameters to standard output: .Bd -literal -offset indent $ openssl ecparam -in ec_param.pem -noout -text .Ed .Sh ECPARAM HISTORY The .Nm ecparam command was first introduced in .Nm OpenSSL 0.9.8. .Sh ECPARAM AUTHORS .An Nils Larsch . .\" .\" ENC .\" .Sh ENC .nr nS 1 .Nm "openssl enc" .Bk -words .Fl ciphername .Op Fl AadePp .Op Fl base64 .Op Fl bufsize Ar number .Op Fl debug .Op Fl in Ar file .Op Fl iv Ar IV .Op Fl K Ar key .Op Fl k Ar password .Op Fl kfile Ar file .Op Fl md Ar digest .Op Fl none .Op Fl nopad .Op Fl nosalt .Op Fl out Ar file .Op Fl pass Ar arg .Op Fl S Ar salt .Op Fl salt .Ek .nr nS 0 .Pp The symmetric cipher commands allow data to be encrypted or decrypted using various block and stream ciphers using keys based on passwords or explicitly provided. Base64 encoding or decoding can also be performed either by itself or in addition to the encryption or decryption. .Pp The options are as follows: .Bl -tag -width Ds .It Fl A If the .Fl a option is set, then base64 process the data on one line. .It Fl a , base64 Base64 process the data. This means that if encryption is taking place, the data is base64-encoded after encryption. If decryption is set, the input data is base64 decoded before being decrypted. .It Fl bufsize Ar number Set the buffer size for I/O. .It Fl d Decrypt the input data. .It Fl debug Debug the BIOs used for I/O. .It Fl e Encrypt the input data: this is the default. .It Fl in Ar file The input .Ar file ; standard input by default. .It Fl iv Ar IV The actual .Ar IV .Pq initialisation vector to use: this must be represented as a string comprised only of hex digits. When only the .Ar key is specified using the .Fl K option, the .Ar IV must explicitly be defined. When a password is being specified using one of the other options, the .Ar IV is generated from this password. .It Fl K Ar key The actual .Ar key to use: this must be represented as a string comprised only of hex digits. If only the key is specified, the .Ar IV must be additionally specified using the .Fl iv option. When both a .Ar key and a .Ar password are specified, the .Ar key given with the .Fl K option will be used and the .Ar IV generated from the password will be taken. It probably does not make much sense to specify both .Ar key and .Ar password . .It Fl k Ar password The .Ar password to derive the key from. This is for compatibility with previous versions of .Nm OpenSSL . Superseded by the .Fl pass option. .It Fl kfile Ar file Read the password to derive the key from the first line of .Ar file . This is for compatibility with previous versions of .Nm OpenSSL . Superseded by the .Fl pass option. .It Fl md Ar digest Use .Ar digest to create a key from a pass phrase. .Ar digest may be one of .Dq md5 or .Dq sha1 . .It Fl none Use NULL cipher (no encryption or decryption of input). .It Fl nopad Disable standard block padding. .It Fl nosalt Don't use a .Ar salt in the key derivation routines. This option should .Em NEVER be used unless compatibility with previous versions of .Nm OpenSSL or .Nm SSLeay is required. .It Fl out Ar file The output .Ar file , standard output by default. .It Fl P Print out the .Ar salt , .Ar key , and .Ar IV used, then immediately exit; don't do any encryption or decryption. .It Fl p Print out the .Ar salt , .Ar key , and .Ar IV used. .It Fl pass Ar arg The password source. .It Fl S Ar salt The actual .Ar salt to use: this must be represented as a string comprised only of hex digits. .It Fl salt Use a .Ar salt in the key derivation routines. This is the default. .El .Sh ENC NOTES The program can be called either as .Nm openssl ciphername or .Nm openssl enc -ciphername . .Pp A password will be prompted for to derive the .Ar key and .Ar IV if necessary. .Pp The .Fl nosalt option should .Em NEVER be used unless compatibility with previous versions of .Nm OpenSSL or .Nm SSLeay is required. .Pp With the .Fl nosalt option it is possible to perform efficient dictionary attacks on the password and to attack stream cipher encrypted data. The reason for this is that without the salt the same password always generates the same encryption key. When the salt is being used the first eight bytes of the encrypted data are reserved for the salt: it is generated at random when encrypting a file and read from the encrypted file when it is decrypted. .Pp Some of the ciphers do not have large keys and others have security implications if not used correctly. A beginner is advised to just use a strong block cipher in CBC mode such as bf or des3. .Pp All the block ciphers normally use PKCS#5 padding also known as standard block padding: this allows a rudimentary integrity or password check to be performed. However, since the chance of random data passing the test is better than 1 in 256, it isn't a very good test. .Pp If padding is disabled, the input data must be a multiple of the cipher block length. .Pp All RC2 ciphers have the same key and effective key length. .Pp Blowfish and RC5 algorithms use a 128-bit key. .Sh ENC SUPPORTED CIPHERS .Bd -unfilled -offset indent aes-[128|192|256]-cbc 128/192/256 bit AES in CBC mode aes-[128|192|256] Alias for aes-[128|192|256]-cbc aes-[128|192|256]-cfb 128/192/256 bit AES in 128 bit CFB mode aes-[128|192|256]-cfb1 128/192/256 bit AES in 1 bit CFB mode aes-[128|192|256]-cfb8 128/192/256 bit AES in 8 bit CFB mode aes-[128|192|256]-ecb 128/192/256 bit AES in ECB mode aes-[128|192|256]-ofb 128/192/256 bit AES in OFB mode base64 Base 64 bf Alias for bf-cbc bf-cbc Blowfish in CBC mode bf-cfb Blowfish in CFB mode bf-ecb Blowfish in ECB mode bf-ofb Blowfish in OFB mode cast Alias for cast-cbc cast-cbc CAST in CBC mode cast5-cbc CAST5 in CBC mode cast5-cfb CAST5 in CFB mode cast5-ecb CAST5 in ECB mode cast5-ofb CAST5 in OFB mode des Alias for des-cbc des-cbc DES in CBC mode des-cfb DES in CBC mode des-ecb DES in ECB mode des-ofb DES in OFB mode des-ede Two key triple DES EDE in ECB mode des-ede-cbc Two key triple DES EDE in CBC mode des-ede-cfb Two key triple DES EDE in CFB mode des-ede-ofb Two key triple DES EDE in OFB mode des3 Alias for des-ede3-cbc des-ede3 Three key triple DES EDE in ECB mode des-ede3-cbc Three key triple DES EDE in CBC mode des-ede3-cfb Three key triple DES EDE CFB mode des-ede3-ofb Three key triple DES EDE in OFB mode desx DESX algorithm rc2 Alias for rc2-cbc rc2-cbc 128-bit RC2 in CBC mode rc2-cfb 128-bit RC2 in CFB mode rc2-ecb 128-bit RC2 in ECB mode rc2-ofb 128-bit RC2 in OFB mode rc2-64-cbc 64-bit RC2 in CBC mode rc2-40-cbc 40-bit RC2 in CBC mode rc4 128-bit RC4 rc4-40 40-bit RC4 .Ed .Sh ENC EXAMPLES Just base64 encode a binary file: .Pp .Dl $ openssl base64 -in file.bin -out file.b64 .Pp Decode the same file: .Pp .Dl $ openssl base64 -d -in file.b64 -out file.bin .Pp Encrypt a file using triple DES in CBC mode using a prompted password: .Pp .Dl $ openssl des3 -salt -in file.txt -out file.des3 .Pp Decrypt a file using a supplied password: .Pp .Dl "$ openssl des3 -d -in file.des3 -out file.txt -k mypassword" .Pp Encrypt a file then base64 encode it (so it can be sent via mail for example) using Blowfish in CBC mode: .Pp .Dl $ openssl bf -a -salt -in file.txt -out file.bf .Pp Base64 decode a file then decrypt it: .Pp .Dl "$ openssl bf -d -a -in file.bf -out file.txt" .Sh ENC BUGS The .Fl A option when used with large files doesn't work properly. .Pp There should be an option to allow an iteration count to be included. .Pp The .Nm enc program only supports a fixed number of algorithms with certain parameters. Therefore it is not possible to use RC2 with a 76-bit key or RC4 with an 84-bit key with this program. .\" .\" ERRSTR .\" .Sh ERRSTR .Nm openssl errstr .Op Fl stats .Ar errno ... .Pp The .Nm errstr command performs error number to error string conversion, generating a human-readable string representing the error code .Ar errno . The string is obtained through the .Xr ERR_error_string_n 3 function and has the following format: .Pp .Dl error:[error code]:[library name]:[function name]:[reason string] .Pp .Bq error code is an 8-digit hexadecimal number. The remaining fields .Bq library name , .Bq function name , and .Bq reason string are all ASCII text. .Pp The options are as follows: .Bl -tag -width Ds .It Fl stats Print debugging statistics about various aspects of the hash table. .El .Sh ERRSTR EXAMPLES The following error code: .Pp .Dl 27594:error:2006D080:lib(32):func(109):reason(128):bss_file.c:107: .Pp \&...can be displayed with: .Pp .Dl $ openssl errstr 2006D080 .Pp \&...to produce the error message: .Pp .Dl error:2006D080:BIO routines:BIO_new_file:no such file .\" .\" GENDH .\" .Sh GENDH Generation of Diffie-Hellman Parameters. Replaced by .Nm dhparam . See .Sx DHPARAM above. .\" .\" GENDSA .\" .Sh GENDSA .nr nS 1 .Nm "openssl gendsa" .Bk -words .Oo .Fl aes128 | aes192 | aes256 | .Fl des | des3 .Oc .Op Fl out Ar file .Op Ar paramfile .Ek .nr nS 0 .Pp The .Nm gendsa command generates a DSA private key from a DSA parameter file (which will typically be generated by the .Nm openssl dsaparam command). .Pp The options are as follows: .Bl -tag -width Ds .It Xo .Fl aes128 | aes192 | aes256 | .Fl des | des3 .Xc These options encrypt the private key with the AES, DES, or the triple DES ciphers, respectively, before outputting it. A pass phrase is prompted for. If none of these options are specified, no encryption is used. .It Fl out Ar file The output .Ar file . If this argument is not specified, standard output is used. .It Ar paramfile This option specifies the DSA parameter file to use. The parameters in this file determine the size of the private key. DSA parameters can be generated and examined using the .Nm openssl dsaparam command. .El .Sh GENDSA NOTES DSA key generation is little more than random number generation so it is much quicker than RSA key generation, for example. .\" .\" GENPKEY .\" .Sh GENPKEY .nr nS 1 .Nm "openssl genpkey" .Bk -words .Op Fl algorithm Ar alg .Op Ar cipher .Op Fl genparam .Op Fl out Ar file .Op Fl outform Ar DER | PEM .Op Fl paramfile Ar file .Op Fl pass Ar arg .Op Fl pkeyopt Ar opt : Ns Ar value .Op Fl text .Ek .nr nS 0 .Pp The .Nm genpkey command generates private keys. The use of this program is encouraged over the algorithm specific utilities because additional algorithm options can be used. .Pp The options are as follows: .Bl -tag -width Ds .It Fl algorithm Ar alg The public key algorithm to use, such as RSA, DSA, or DH. If used this option must precede any .Fl pkeyopt options. The options .Fl paramfile and .Fl algorithm are mutually exclusive. .It Ar cipher Encrypt the private key with the supplied cipher. Any algorithm name accepted by .Fn EVP_get_cipherbyname is acceptable, such as .Cm des3 . .It Fl genparam Generate a set of parameters instead of a private key. If used this option must precede any .Fl algorithm , .Fl paramfile , or .Fl pkeyopt options. .It Fl out Ar file The output filename. If this argument is not specified then standard output is used. .It Fl outform Ar DER | PEM This specifies the output format, DER or PEM. .It Fl paramfile Ar file Some public key algorithms generate a private key based on a set of parameters. They can be supplied using this option. If this option is used the public key algorithm used is determined by the parameters. If used this option must precede any .Fl pkeyopt options. The options .Fl paramfile and .Fl algorithm are mutually exclusive. .It Fl pass Ar arg The output file password source. .It Fl pkeyopt Ar opt : Ns Ar value Set the public key algorithm option .Ar opt to .Ar value . The precise set of options supported depends on the public key algorithm used and its implementation. See .Sx GENPKEY KEY GENERATION OPTIONS below for more details. .It Fl text Print an (unencrypted) text representation of private and public keys and parameters along with the DER or PEM structure. .El .Sh GENPKEY KEY GENERATION OPTIONS The options supported by each algorithm and indeed each implementation of an algorithm can vary. The options for the .Nm OpenSSL implementations are detailed below. .Bl -tag -width Ds -offset indent .It rsa_keygen_bits : Ns Ar numbits (RSA) The number of bits in the generated key. If not specified 2048 is used. .It rsa_keygen_pubexp : Ns Ar value (RSA) The RSA public exponent value. This can be a large decimal or hexadecimal value if preceded by 0x. The default value is 65537. .It dsa_paramgen_bits : Ns Ar numbits (DSA) The number of bits in the generated parameters. If not specified 1024 is used. .It dh_paramgen_prime_len : Ns Ar numbits (DH) The number of bits in the prime parameter .Ar p . .It dh_paramgen_generator : Ns Ar value (DH) The value to use for the generator .Ar g . .It ec_paramgen_curve : Ns Ar curve (EC) The EC curve to use. .El .Sh GENPKEY EXAMPLES Generate an RSA private key using default parameters: .Bd -literal -offset indent $ openssl genpkey -algorithm RSA -out key.pem .Ed .Pp Encrypt and output a private key using 128-bit AES and the passphrase "hello": .Bd -literal -offset indent $ openssl genpkey -algorithm RSA -out key.pem \e -aes-128-cbc -pass pass:hello .Ed .Pp Generate a 2048-bit RSA key using 3 as the public exponent: .Bd -literal -offset indent $ openssl genpkey -algorithm RSA -out key.pem \e -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:3 .Ed .Pp Generate 1024-bit DSA parameters: .Bd -literal -offset indent $ openssl genpkey -genparam -algorithm DSA \e -out dsap.pem -pkeyopt dsa_paramgen_bits:1024 .Ed .Pp Generate a DSA key from parameters: .Bd -literal -offset indent $ openssl genpkey -paramfile dsap.pem -out dsakey.pem .Ed .Pp Generate 1024-bit DH parameters: .Bd -literal -offset indent $ openssl genpkey -genparam -algorithm DH \e -out dhp.pem -pkeyopt dh_paramgen_prime_len:1024 .Ed .Pp Generate a DH key from parameters: .Bd -literal -offset indent $ openssl genpkey -paramfile dhp.pem -out dhkey.pem .Ed .\" .\" GENRSA .\" .Sh GENRSA .nr nS 1 .Nm "openssl genrsa" .Bk -words .Op Fl 3 | f4 .Oo .Fl aes128 | aes192 | aes256 | .Fl des | des3 .Oc .Op Fl out Ar file .Op Fl passout Ar arg .Op Ar numbits .Ek .nr nS 0 .Pp The .Nm genrsa command generates an RSA private key. .Pp The options are as follows: .Bl -tag -width Ds .It Fl 3 | f4 The public exponent to use, either 3 or 65537. The default is 65537. .It Xo .Fl aes128 | aes192 | aes256 | .Fl des | des3 .Xc These options encrypt the private key with the AES, DES, or the triple DES ciphers, respectively, before outputting it. If none of these options are specified, no encryption is used. If encryption is used, a pass phrase is prompted for, if it is not supplied via the .Fl passout option. .It Fl out Ar file The output .Ar file . If this argument is not specified, standard output is used. .It Fl passout Ar arg The output file password source. .It Ar numbits The size of the private key to generate in bits. This must be the last option specified. The default is 2048. .El .Sh GENRSA NOTES RSA private key generation essentially involves the generation of two prime numbers. When generating a private key, various symbols will be output to indicate the progress of the generation. A .Sq \&. represents each number which has passed an initial sieve test; .Sq + means a number has passed a single round of the Miller-Rabin primality test. A newline means that the number has passed all the prime tests .Pq the actual number depends on the key size . .Pp Because key generation is a random process, the time taken to generate a key may vary somewhat. .Sh GENRSA BUGS A quirk of the prime generation algorithm is that it cannot generate small primes. Therefore the number of bits should not be less that 64. For typical private keys this will not matter because for security reasons they will be much larger .Pq typically 2048 bits . .\" .\" NSEQ .\" .Sh NSEQ .Nm openssl nseq .Op Fl in Ar file .Op Fl out Ar file .Op Fl toseq .Pp The .Nm nseq command takes a file containing a Netscape certificate sequence and prints out the certificates contained in it or takes a file of certificates and converts it into a Netscape certificate sequence. .Pp The options are as follows: .Bl -tag -width Ds .It Fl in Ar file This specifies the input .Ar file to read, or standard input if this option is not specified. .It Fl out Ar file Specifies the output .Ar file , or standard output by default. .It Fl toseq Normally, a Netscape certificate sequence will be input and the output is the certificates contained in it. With the .Fl toseq option the situation is reversed: a Netscape certificate sequence is created from a file of certificates. .El .Sh NSEQ EXAMPLES Output the certificates in a Netscape certificate sequence: .Bd -literal -offset indent $ openssl nseq -in nseq.pem -out certs.pem .Ed .Pp Create a Netscape certificate sequence: .Bd -literal -offset indent $ openssl nseq -in certs.pem -toseq -out nseq.pem .Ed .Sh NSEQ NOTES The PEM-encoded form uses the same headers and footers as a certificate: .Bd -unfilled -offset indent -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- .Ed .Pp A Netscape certificate sequence is a Netscape specific form that can be sent to browsers as an alternative to the standard PKCS#7 format when several certificates are sent to the browser: for example during certificate enrollment. It is used by the Netscape certificate server, for example. .Sh NSEQ BUGS This program needs a few more options, like allowing DER or PEM input and output files and allowing multiple certificate files to be used. .\" .\" OCSP .\" .Sh OCSP .nr nS 1 .Nm "openssl ocsp" .Bk -words .Op Fl CA Ar file .Op Fl CAfile Ar file .Op Fl CApath Ar directory .Op Fl cert Ar file .Op Fl dgst Ar alg .Oo .Fl host .Ar hostname : Ns Ar port .Oc .Op Fl index Ar indexfile .Op Fl issuer Ar file .Op Fl ndays Ar days .Op Fl nmin Ar minutes .Op Fl no_cert_checks .Op Fl no_cert_verify .Op Fl no_certs .Op Fl no_chain .Op Fl no_intern .Op Fl no_nonce .Op Fl no_signature_verify .Op Fl nonce .Op Fl noverify .Op Fl nrequest Ar number .Op Fl out Ar file .Op Fl path Ar path .Op Fl port Ar portnum .Op Fl req_text .Op Fl reqin Ar file .Op Fl reqout Ar file .Op Fl resp_key_id .Op Fl resp_no_certs .Op Fl resp_text .Op Fl respin Ar file .Op Fl respout Ar file .Op Fl rkey Ar file .Op Fl rother Ar file .Op Fl rsigner Ar file .Op Fl serial Ar number .Op Fl sign_other Ar file .Op Fl signer Ar file .Op Fl signkey Ar file .Op Fl status_age Ar age .Op Fl text .Op Fl trust_other .Op Fl url Ar responder_url .Op Fl VAfile Ar file .Op Fl validity_period Ar nsec .Op Fl verify_other Ar file .Ek .nr nS 0 .Pp The Online Certificate Status Protocol .Pq OCSP enables applications to determine the .Pq revocation state of an identified certificate .Pq RFC 2560 . .Pp The .Nm ocsp command performs many common OCSP tasks. It can be used to print out requests and responses, create requests and send queries to an OCSP responder, and behave like a mini OCSP server itself. .Pp The options are as follows: .Bl -tag -width Ds .It Fl CAfile Ar file , Fl CApath Ar directory .Ar file or .Ar path containing trusted CA certificates. These are used to verify the signature on the OCSP response. .It Fl cert Ar file Add the certificate .Ar file to the request. The issuer certificate is taken from the previous .Fl issuer option, or an error occurs if no issuer certificate is specified. .It Fl dgst Ar alg Sets the digest algorithm to use for certificate identification in the OCSP request. By default SHA-1 is used. .It Xo .Fl host Ar hostname : Ns Ar port , .Fl path Ar path .Xc If the .Fl host option is present, then the OCSP request is sent to the host .Ar hostname on port .Ar port . .Fl path specifies the HTTP path name to use, or .Sq / by default. .It Fl issuer Ar file This specifies the current issuer certificate. This option can be used multiple times. The certificate specified in .Ar file must be in PEM format. This option .Em must come before any .Fl cert options. .It Fl no_cert_checks Don't perform any additional checks on the OCSP response signer's certificate. That is, do not make any checks to see if the signer's certificate is authorised to provide the necessary status information: as a result this option should only be used for testing purposes. .It Fl no_cert_verify Don't verify the OCSP response signer's certificate at all. Since this option allows the OCSP response to be signed by any certificate, it should only be used for testing purposes. .It Fl no_certs Don't include any certificates in signed request. .It Fl no_chain Do not use certificates in the response as additional untrusted CA certificates. .It Fl no_intern Ignore certificates contained in the OCSP response when searching for the signer's certificate. With this option, the signer's certificate must be specified with either the .Fl verify_other or .Fl VAfile options. .It Fl no_signature_verify Don't check the signature on the OCSP response. Since this option tolerates invalid signatures on OCSP responses, it will normally only be used for testing purposes. .It Fl nonce , no_nonce Add an OCSP .Em nonce extension to a request or disable an OCSP .Em nonce addition. Normally, if an OCSP request is input using the .Fl respin option no .Em nonce is added: using the .Fl nonce option will force addition of a .Em nonce . If an OCSP request is being created (using the .Fl cert and .Fl serial options) a .Em nonce is automatically added; specifying .Fl no_nonce overrides this. .It Fl noverify Don't attempt to verify the OCSP response signature or the .Em nonce values. This option will normally only be used for debugging since it disables all verification of the responder's certificate. .It Fl out Ar file Specify output .Ar file ; default is standard output. .It Fl req_text , resp_text , text Print out the text form of the OCSP request, response, or both, respectively. .It Fl reqin Ar file , Fl respin Ar file Read an OCSP request or response file from .Ar file . These options are ignored if an OCSP request or response creation is implied by other options (for example with the .Fl serial , cert , and .Fl host options). .It Fl reqout Ar file , Fl respout Ar file Write out the DER-encoded certificate request or response to .Ar file . .It Fl serial Ar num Same as the .Fl cert option except the certificate with serial number .Ar num is added to the request. The serial number is interpreted as a decimal integer unless preceded by .Sq 0x . Negative integers can also be specified by preceding the value with a .Sq - sign. .It Fl sign_other Ar file Additional certificates to include in the signed request. .It Fl signer Ar file , Fl signkey Ar file Sign the OCSP request using the certificate specified in the .Fl signer option and the private key specified by the .Fl signkey option. If the .Fl signkey option is not present, then the private key is read from the same file as the certificate. If neither option is specified, the OCSP request is not signed. .It Fl trust_other The certificates specified by the .Fl verify_other option should be explicitly trusted and no additional checks will be performed on them. This is useful when the complete responder certificate chain is not available or trusting a root CA is not appropriate. .It Fl url Ar responder_url Specify the responder URL. Both HTTP and HTTPS .Pq SSL/TLS URLs can be specified. .It Fl VAfile Ar file .Ar file containing explicitly trusted responder certificates. Equivalent to the .Fl verify_other and .Fl trust_other options. .It Fl validity_period Ar nsec , Fl status_age Ar age These options specify the range of times, in seconds, which will be tolerated in an OCSP response. Each certificate status response includes a .Em notBefore time and an optional .Em notAfter time. The current time should fall between these two values, but the interval between the two times may be only a few seconds. In practice the OCSP responder and clients' clocks may not be precisely synchronised and so such a check may fail. To avoid this the .Fl validity_period option can be used to specify an acceptable error range in seconds, the default value is 5 minutes. .Pp If the .Em notAfter time is omitted from a response, then this means that new status information is immediately available. In this case the age of the .Em notBefore field is checked to see it is not older than .Ar age seconds old. By default, this additional check is not performed. .It Fl verify_other Ar file .Ar file containing additional certificates to search when attempting to locate the OCSP response signing certificate. Some responders omit the actual signer's certificate from the response; this option can be used to supply the necessary certificate in such cases. .El .Sh OCSP SERVER OPTIONS .Bl -tag -width "XXXX" .It Fl CA Ar file CA certificate corresponding to the revocation information in .Ar indexfile . .It Fl index Ar indexfile .Ar indexfile is a text index file in .Nm ca format containing certificate revocation information. .Pp If the .Fl index option is specified, the .Nm ocsp utility is in .Em responder mode, otherwise it is in .Em client mode. The request(s) the responder processes can be either specified on the command line (using the .Fl issuer and .Fl serial options), supplied in a file (using the .Fl respin option) or via external OCSP clients (if .Ar port or .Ar url is specified). .Pp If the .Fl index option is present, then the .Fl CA and .Fl rsigner options must also be present. .It Fl nmin Ar minutes , Fl ndays Ar days Number of .Ar minutes or .Ar days when fresh revocation information is available: used in the .Ar nextUpdate field. If neither option is present, the .Em nextUpdate field is omitted, meaning fresh revocation information is immediately available. .It Fl nrequest Ar number The OCSP server will exit after receiving .Ar number requests, default unlimited. .It Fl port Ar portnum Port to listen for OCSP requests on. The port may also be specified using the .Fl url option. .It Fl resp_key_id Identify the signer certificate using the key ID; default is to use the subject name. .It Fl resp_no_certs Don't include any certificates in the OCSP response. .It Fl rkey Ar file The private key to sign OCSP responses with; if not present, the file specified in the .Fl rsigner option is used. .It Fl rother Ar file Additional certificates to include in the OCSP response. .It Fl rsigner Ar file The certificate to sign OCSP responses with. .El .Sh OCSP RESPONSE VERIFICATION OCSP Response follows the rules specified in RFC 2560. .Pp Initially the OCSP responder certificate is located and the signature on the OCSP request checked using the responder certificate's public key. .Pp Then a normal certificate verify is performed on the OCSP responder certificate building up a certificate chain in the process. The locations of the trusted certificates used to build the chain can be specified by the .Fl CAfile and .Fl CApath options or they will be looked for in the standard .Nm OpenSSL certificates directory. .Pp If the initial verify fails, the OCSP verify process halts with an error. .Pp Otherwise the issuing CA certificate in the request is compared to the OCSP responder certificate: if there is a match then the OCSP verify succeeds. .Pp Otherwise the OCSP responder certificate's CA is checked against the issuing CA certificate in the request. If there is a match and the OCSPSigning extended key usage is present in the OCSP responder certificate, then the OCSP verify succeeds. .Pp Otherwise the root CA of the OCSP responder's CA is checked to see if it is trusted for OCSP signing. If it is, the OCSP verify succeeds. .Pp If none of these checks is successful, the OCSP verify fails. .Pp What this effectively means is that if the OCSP responder certificate is authorised directly by the CA it is issuing revocation information about .Pq and it is correctly configured , then verification will succeed. .Pp If the OCSP responder is a .Em global responder which can give details about multiple CAs and has its own separate certificate chain, then its root CA can be trusted for OCSP signing. For example: .Bd -literal -offset indent $ openssl x509 -in ocspCA.pem -addtrust OCSPSigning \e -out trustedCA.pem .Ed .Pp Alternatively, the responder certificate itself can be explicitly trusted with the .Fl VAfile option. .Sh OCSP NOTES As noted, most of the verify options are for testing or debugging purposes. Normally, only the .Fl CApath , CAfile and .Pq if the responder is a `global VA' .Fl VAfile options need to be used. .Pp The OCSP server is only useful for test and demonstration purposes: it is not really usable as a full OCSP responder. It contains only a very simple HTTP request handling and can only handle the POST form of OCSP queries. It also handles requests serially, meaning it cannot respond to new requests until it has processed the current one. The text index file format of revocation is also inefficient for large quantities of revocation data. .Pp It is possible to run the .Nm ocsp application in .Em responder mode via a CGI script using the .Fl respin and .Fl respout options. .Sh OCSP EXAMPLES Create an OCSP request and write it to a file: .Bd -literal -offset indent $ openssl ocsp -issuer issuer.pem -cert c1.pem -cert c2.pem \e -reqout req.der .Ed .Pp Send a query to an OCSP responder with URL .Pa http://ocsp.myhost.com/ , save the response to a file and print it out in text form: .Bd -literal -offset indent $ openssl ocsp -issuer issuer.pem -cert c1.pem -cert c2.pem \e -url http://ocsp.myhost.com/ -resp_text -respout resp.der .Ed .Pp Read in an OCSP response and print out in text form: .Pp .Dl $ openssl ocsp -respin resp.der -text .Pp OCSP server on port 8888 using a standard .Nm ca configuration, and a separate responder certificate. All requests and responses are printed to a file: .Bd -literal -offset indent $ openssl ocsp -index demoCA/index.txt -port 8888 -rsigner \e rcert.pem -CA demoCA/cacert.pem -text -out log.txt .Ed .Pp As above, but exit after processing one request: .Bd -literal -offset indent $ openssl ocsp -index demoCA/index.txt -port 8888 -rsigner \e rcert.pem -CA demoCA/cacert.pem -nrequest 1 .Ed .Pp Query status information using internally generated request: .Bd -literal -offset indent $ openssl ocsp -index demoCA/index.txt -rsigner rcert.pem -CA \e demoCA/cacert.pem -issuer demoCA/cacert.pem -serial 1 .Ed .Pp Query status information using request read from a file and write the response to a second file: .Bd -literal -offset indent $ openssl ocsp -index demoCA/index.txt -rsigner rcert.pem -CA \e demoCA/cacert.pem -reqin req.der -respout resp.der .Ed .\" .\" PASSWD .\" .Sh PASSWD .nr nS 1 .Nm "openssl passwd" .Op Fl 1 | apr1 | crypt .Op Fl in Ar file .Op Fl noverify .Op Fl quiet .Op Fl reverse .Op Fl salt Ar string .Op Fl stdin .Op Fl table .Op Ar password .nr nS 0 .Pp The .Nm passwd command computes the hash of a password typed at run-time or the hash of each password in a list. The password list is taken from the named .Ar file for option .Fl in , from stdin for option .Fl stdin , or from the command line, or from the terminal otherwise. The .Ux standard algorithm .Em crypt and the MD5-based .Bx password algorithm .Em 1 and its Apache variant .Em apr1 are available. .Pp The options are as follows: .Bl -tag -width Ds .It Fl 1 Use the MD5 based .Bx password algorithm .Em 1 . .It Fl apr1 Use the .Em apr1 algorithm .Pq Apache variant of the .Bx algorithm. .It Fl crypt Use the .Em crypt algorithm .Pq default . .It Fl in Ar file Read passwords from .Ar file . .It Fl noverify Don't verify when reading a password from the terminal. .It Fl quiet Don't output warnings when passwords given on the command line are truncated. .It Fl reverse Switch table columns. This only makes sense in conjunction with the .Fl table option. .It Fl salt Ar string Use the specified .Ar salt . When reading a password from the terminal, this implies .Fl noverify . .It Fl stdin Read passwords from .Em stdin . .It Fl table In the output list, prepend the cleartext password and a TAB character to each password hash. .El .Sh PASSWD EXAMPLES .Dl $ openssl passwd -crypt -salt xx password prints .Qq xxj31ZMTZzkVA . .Pp .Dl $ openssl passwd -1 -salt xxxxxxxx password prints .Qq $1$xxxxxxxx$UYCIxa628.9qXjpQCjM4a. . .Pp .Dl $ openssl passwd -apr1 -salt xxxxxxxx password prints .Qq $apr1$xxxxxxxx$dxHfLAsjHkDRmG83UXe8K0 . .\" .\" PKCS7 .\" .Sh PKCS7 .nr nS 1 .Nm "openssl pkcs7" .Bk -words .Op Fl in Ar file .Op Fl inform Ar DER | PEM .Op Fl noout .Op Fl out Ar file .Op Fl outform Ar DER | PEM .Op Fl print_certs .Op Fl text .Ek .nr nS 0 .Pp The .Nm pkcs7 command processes PKCS#7 files in DER or PEM format. .Pp The options are as follows: .Bl -tag -width Ds .It Fl in Ar file This specifies the input .Ar file to read from, or standard input if this option is not specified. .It Fl inform Ar DER | PEM This specifies the input format. .Ar DER format is a DER-encoded PKCS#7 v1.5 structure. .Ar PEM .Pq the default is a base64-encoded version of the DER form with header and footer lines. .It Fl noout Don't output the encoded version of the PKCS#7 structure (or certificates if .Fl print_certs is set). .It Fl out Ar file Specifies the output .Ar file to write to, or standard output by default. .It Fl outform Ar DER | PEM This specifies the output format; the options have the same meaning as the .Fl inform option. .It Fl print_certs Prints out any certificates or CRLs contained in the file. They are preceded by their subject and issuer names in a one-line format. .It Fl text Prints out certificate details in full rather than just subject and issuer names. .El .Sh PKCS7 EXAMPLES Convert a PKCS#7 file from PEM to DER: .Pp .Dl $ openssl pkcs7 -in file.pem -outform DER -out file.der .Pp Output all certificates in a file: .Pp .Dl $ openssl pkcs7 -in file.pem -print_certs -out certs.pem .Sh PKCS7 NOTES The PEM PKCS#7 format uses the header and footer lines: .Bd -unfilled -offset indent -----BEGIN PKCS7----- -----END PKCS7----- .Ed .Pp For compatibility with some CAs it will also accept: .Bd -unfilled -offset indent -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- .Ed .Sh PKCS7 RESTRICTIONS There is no option to print out all the fields of a PKCS#7 file. .Pp The PKCS#7 routines only understand PKCS#7 v 1.5 as specified in RFC 2315. They cannot currently parse, for example, the new CMS as described in RFC 2630. .\" .\" PKCS8 .\" .Sh PKCS8 .nr nS 1 .Nm "openssl pkcs8" .Bk -words .Op Fl embed .Op Fl in Ar file .Op Fl inform Ar DER | PEM .Op Fl nocrypt .Op Fl noiter .Op Fl nooct .Op Fl nsdb .Op Fl out Ar file .Op Fl outform Ar DER | PEM .Op Fl passin Ar arg .Op Fl passout Ar arg .Op Fl topk8 .Op Fl v1 Ar alg .Op Fl v2 Ar alg .Ek .nr nS 0 .Pp The .Nm pkcs8 command processes private keys in PKCS#8 format. It can handle both unencrypted PKCS#8 PrivateKeyInfo format and EncryptedPrivateKeyInfo format with a variety of PKCS#5 .Pq v1.5 and v2.0 and PKCS#12 algorithms. .Pp The options are as follows: .Bl -tag -width Ds .It Fl embed This option generates DSA keys in a broken format. The DSA parameters are embedded inside the .Em PrivateKey structure. In this form the OCTET STRING contains an ASN1 SEQUENCE consisting of two structures: a SEQUENCE containing the parameters and an ASN1 INTEGER containing the private key. .It Fl in Ar file This specifies the input .Ar file to read a key from, or standard input if this option is not specified. If the key is encrypted, a pass phrase will be prompted for. .It Fl inform Ar DER | PEM This specifies the input format. If a PKCS#8 format key is expected on input, then either a DER- or PEM-encoded version of a PKCS#8 key will be expected. Otherwise the DER or PEM format of the traditional format private key is used. .It Fl nocrypt PKCS#8 keys generated or input are normally PKCS#8 .Em EncryptedPrivateKeyInfo structures using an appropriate password-based encryption algorithm. With this option, an unencrypted .Em PrivateKeyInfo structure is expected or output. This option does not encrypt private keys at all and should only be used when absolutely necessary. Certain software such as some versions of Java code signing software use unencrypted private keys. .It Fl noiter Use an iteration count of 1. See the .Sx PKCS12 section below for a detailed explanation of this option. .It Fl nooct This option generates RSA private keys in a broken format that some software uses. Specifically the private key should be enclosed in an OCTET STRING, but some software just includes the structure itself without the surrounding OCTET STRING. .It Fl nsdb This option generates DSA keys in a broken format compatible with Netscape private key databases. The .Em PrivateKey contains a SEQUENCE consisting of the public and private keys, respectively. .It Fl out Ar file This specifies the output .Ar file to write a key to, or standard output by default. If any encryption options are set, a pass phrase will be prompted for. The output filename should .Em not be the same as the input filename. .It Fl outform Ar DER | PEM This specifies the output format; the options have the same meaning as the .Fl inform option. .It Fl passin Ar arg The key password source. .It Fl passout Ar arg The output file password source. .It Fl topk8 Normally, a PKCS#8 private key is expected on input and a traditional format private key will be written. With the .Fl topk8 option the situation is reversed: it reads a traditional format private key and writes a PKCS#8 format key. .It Fl v1 Ar alg This option specifies a PKCS#5 v1.5 or PKCS#12 algorithm to use. A complete list of possible algorithms is included below. .It Fl v2 Ar alg This option enables the use of PKCS#5 v2.0 algorithms. Normally, PKCS#8 private keys are encrypted with the password-based encryption algorithm called .Em pbeWithMD5AndDES-CBC ; this uses 56-bit DES encryption but it was the strongest encryption algorithm supported in PKCS#5 v1.5. Using the .Fl v2 option PKCS#5 v2.0 algorithms are used which can use any encryption algorithm such as 168-bit triple DES or 128-bit RC2, however not many implementations support PKCS#5 v2.0 yet. If using private keys with .Nm OpenSSL then this doesn't matter. .Pp The .Ar alg argument is the encryption algorithm to use; valid values include .Ar des , des3 , and .Ar rc2 . It is recommended that .Ar des3 is used. .El .Sh PKCS8 NOTES The encrypted form of a PEM-encoded PKCS#8 file uses the following headers and footers: .Bd -unfilled -offset indent -----BEGIN ENCRYPTED PRIVATE KEY----- -----END ENCRYPTED PRIVATE KEY----- .Ed .Pp The unencrypted form uses: .Bd -unfilled -offset indent -----BEGIN PRIVATE KEY----- -----END PRIVATE KEY----- .Ed .Pp Private keys encrypted using PKCS#5 v2.0 algorithms and high iteration counts are more secure than those encrypted using the traditional .Nm SSLeay compatible formats. So if additional security is considered important, the keys should be converted. .Pp The default encryption is only 56 bits because this is the encryption that most current implementations of PKCS#8 support. .Pp Some software may use PKCS#12 password-based encryption algorithms with PKCS#8 format private keys: these are handled automatically but there is no option to produce them. .Pp It is possible to write out DER-encoded encrypted private keys in PKCS#8 format because the encryption details are included at an ASN1 level whereas the traditional format includes them at a PEM level. .Sh PKCS#5 V1.5 AND PKCS#12 ALGORITHMS Various algorithms can be used with the .Fl v1 command line option, including PKCS#5 v1.5 and PKCS#12. These are described in more detail below. .Pp .Bl -tag -width "XXXX" -compact .It Ar PBE-MD5-DES These algorithms were included in the original PKCS#5 v1.5 specification. They only offer 56 bits of protection since they both use DES. .Pp .It Ar PBE-SHA1-RC2-64 | PBE-MD5-RC2-64 | PBE-SHA1-DES These algorithms are not mentioned in the original PKCS#5 v1.5 specification but they use the same key derivation algorithm and are supported by some software. They are mentioned in PKCS#5 v2.0. They use either 64-bit RC2 or 56-bit DES. .Pp .It Ar PBE-SHA1-RC4-128 | PBE-SHA1-RC4-40 | PBE-SHA1-3DES | PBE-SHA1-2DES .It Ar PBE-SHA1-RC2-128 | PBE-SHA1-RC2-40 These algorithms use the PKCS#12 password-based encryption algorithm and allow strong encryption algorithms like triple DES or 128-bit RC2 to be used. .El .Sh PKCS8 EXAMPLES Convert a private key from traditional to PKCS#5 v2.0 format using triple DES: .Pp .Dl "$ openssl pkcs8 -in key.pem -topk8 -v2 des3 -out enckey.pem" .Pp Convert a private key to PKCS#8 using a PKCS#5 1.5 compatible algorithm .Pq DES : .Pp .Dl $ openssl pkcs8 -in key.pem -topk8 -out enckey.pem .Pp Convert a private key to PKCS#8 using a PKCS#12 compatible algorithm .Pq 3DES : .Bd -literal -offset indent $ openssl pkcs8 -in key.pem -topk8 -out enckey.pem \e -v1 PBE-SHA1-3DES .Ed .Pp Read a DER-unencrypted PKCS#8 format private key: .Pp .Dl "$ openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem" .Pp Convert a private key from any PKCS#8 format to traditional format: .Pp .Dl $ openssl pkcs8 -in pk8.pem -out key.pem .Sh PKCS8 STANDARDS Test vectors from this PKCS#5 v2.0 implementation were posted to the pkcs-tng mailing list using triple DES, DES and RC2 with high iteration counts; several people confirmed that they could decrypt the private keys produced and therefore it can be assumed that the PKCS#5 v2.0 implementation is reasonably accurate at least as far as these algorithms are concerned. .Pp The format of PKCS#8 DSA .Pq and other private keys is not well documented: it is hidden away in PKCS#11 v2.01, section 11.9; .Nm OpenSSL Ns Li 's default DSA PKCS#8 private key format complies with this standard. .Sh PKCS8 BUGS There should be an option that prints out the encryption algorithm in use and other details such as the iteration count. .Pp PKCS#8 using triple DES and PKCS#5 v2.0 should be the default private key format; for .Nm OpenSSL compatibility, several of the utilities use the old format at present. .\" .\" PKCS12 .\" .Sh PKCS12 .nr nS 1 .Nm "openssl pkcs12" .Bk -words .Oo .Fl aes128 | aes192 | aes256 | .Fl des | des3 .Oc .Op Fl cacerts .Op Fl CAfile Ar file .Op Fl caname Ar name .Op Fl CApath Ar directory .Op Fl certfile Ar file .Op Fl certpbe Ar alg .Op Fl chain .Op Fl clcerts .Op Fl CSP Ar name .Op Fl descert .Op Fl export .Op Fl in Ar file .Op Fl info .Op Fl inkey Ar file .Op Fl keyex .Op Fl keypbe Ar alg .Op Fl keysig .Op Fl macalg Ar alg .Op Fl maciter .Op Fl name Ar name .Op Fl nocerts .Op Fl nodes .Op Fl noiter .Op Fl nokeys .Op Fl nomac .Op Fl nomaciter .Op Fl nomacver .Op Fl noout .Op Fl out Ar file .Op Fl passin Ar arg .Op Fl passout Ar arg .Op Fl twopass .Ek .nr nS 0 .Pp The .Nm pkcs12 command allows PKCS#12 files .Pq sometimes referred to as PFX files to be created and parsed. PKCS#12 files are used by several programs including Netscape, MSIE and MS Outlook. .Pp There are a lot of options; the meaning of some depends on whether a PKCS#12 file is being created or parsed. By default, a PKCS#12 file is parsed; a PKCS#12 file can be created by using the .Fl export option .Pq see below . .Sh PKCS12 PARSING OPTIONS .Bl -tag -width "XXXX" .It Xo .Fl aes128 | aes192 | aes256 | .Fl des | des3 .Xc Use AES, DES, or triple DES, respectively, to encrypt private keys before outputting. The default is triple DES. .It Fl cacerts Only output CA certificates .Pq not client certificates . .It Fl clcerts Only output client certificates .Pq not CA certificates . .It Fl in Ar file This specifies the .Ar file of the PKCS#12 file to be parsed. Standard input is used by default. .It Fl info Output additional information about the PKCS#12 file structure, algorithms used, and iteration counts. .It Fl nocerts No certificates at all will be output. .It Fl nodes Don't encrypt the private keys at all. .It Fl nokeys No private keys will be output. .It Fl nomacver Don't attempt to verify the integrity MAC before reading the file. .It Fl noout This option inhibits output of the keys and certificates to the output file version of the PKCS#12 file. .It Fl out Ar file The .Ar file to write certificates and private keys to, standard output by default. They are all written in PEM format. .It Fl passin Ar arg The key password source. .It Fl passout Ar arg The output file password source. .It Fl twopass Prompt for separate integrity and encryption passwords: most software always assumes these are the same so this option will render such PKCS#12 files unreadable. .El .Sh PKCS12 FILE CREATION OPTIONS .Bl -tag -width "XXXX" .It Fl CAfile Ar file CA storage as a file. .It Fl CApath Ar directory CA storage as a directory. This directory must be a standard certificate directory: that is, a hash of each subject name (using .Cm x509 -hash ) should be linked to each certificate. .It Fl caname Ar name This specifies the .Qq friendly name for other certificates. This option may be used multiple times to specify names for all certificates in the order they appear. Netscape ignores friendly names on other certificates, whereas MSIE displays them. .It Fl certfile Ar file A file to read additional certificates from. .It Fl certpbe Ar alg , Fl keypbe Ar alg These options allow the algorithm used to encrypt the private key and certificates to be selected. Any PKCS#5 v1.5 or PKCS#12 PBE algorithm name can be used (see the .Sx PKCS12 NOTES section for more information). If a cipher name (as output by the .Cm list-cipher-algorithms command) is specified then it is used with PKCS#5 v2.0. For interoperability reasons it is advisable to only use PKCS#12 algorithms. .It Fl chain If this option is present, an attempt is made to include the entire certificate chain of the user certificate. The standard CA store is used for this search. If the search fails, it is considered a fatal error. .It Fl CSP Ar name Write .Ar name as a Microsoft CSP name. .It Fl descert Encrypt the certificate using triple DES; this may render the PKCS#12 file unreadable by some .Qq export grade software. By default, the private key is encrypted using triple DES and the certificate using 40-bit RC2. .It Fl export This option specifies that a PKCS#12 file will be created rather than parsed. .It Fl in Ar file The .Ar file to read certificates and private keys from, standard input by default. They must all be in PEM format. The order doesn't matter but one private key and its corresponding certificate should be present. If additional certificates are present, they will also be included in the PKCS#12 file. .It Fl inkey Ar file File to read private key from. If not present, a private key must be present in the input file. .It Fl keyex | keysig Specifies that the private key is to be used for key exchange or just signing. This option is only interpreted by MSIE and similar MS software. Normally, .Qq export grade software will only allow 512-bit RSA keys to be used for encryption purposes, but arbitrary length keys for signing. The .Fl keysig option marks the key for signing only. Signing only keys can be used for S/MIME signing, authenticode .Pq ActiveX control signing and SSL client authentication; however, due to a bug only MSIE 5.0 and later support the use of signing only keys for SSL client authentication. .It Fl macalg Ar alg Specify the MAC digest algorithm. If not included then SHA1 is used. .It Fl maciter This option is included for compatibility with previous versions; it used to be needed to use MAC iterations counts but they are now used by default. .It Fl name Ar name This specifies the .Qq friendly name for the certificate and private key. This name is typically displayed in list boxes by software importing the file. .It Fl nomac Don't attempt to provide the MAC integrity. .It Fl nomaciter , noiter These options affect the iteration counts on the MAC and key algorithms. Unless you wish to produce files compatible with MSIE 4.0, you should leave these options alone. .Pp To discourage attacks by using large dictionaries of common passwords, the algorithm that derives keys from passwords can have an iteration count applied to it: this causes a certain part of the algorithm to be repeated and slows it down. The MAC is used to check the file integrity but since it will normally have the same password as the keys and certificates it could also be attacked. By default, both MAC and encryption iteration counts are set to 2048; using these options the MAC and encryption iteration counts can be set to 1. Since this reduces the file security you should not use these options unless you really have to. Most software supports both MAC and key iteration counts. MSIE 4.0 doesn't support MAC iteration counts, so it needs the .Fl nomaciter option. .It Fl out Ar file This specifies .Ar file to write the PKCS#12 file to. Standard output is used by default. .It Fl passin Ar arg The key password source. .It Fl passout Ar arg The output file password source. .El .Sh PKCS12 NOTES Although there are a large number of options, most of them are very rarely used. For PKCS#12 file parsing, only .Fl in and .Fl out need to be used for PKCS#12 file creation. .Fl export and .Fl name are also used. .Pp If none of the .Fl clcerts , cacerts , or .Fl nocerts options are present, then all certificates will be output in the order they appear in the input PKCS#12 files. There is no guarantee that the first certificate present is the one corresponding to the private key. Certain software which requires a private key and certificate and assumes the first certificate in the file is the one corresponding to the private key: this may not always be the case. Using the .Fl clcerts option will solve this problem by only outputting the certificate corresponding to the private key. If the CA certificates are required, they can be output to a separate file using the .Fl nokeys and .Fl cacerts options to just output CA certificates. .Pp The .Fl keypbe and .Fl certpbe algorithms allow the precise encryption algorithms for private keys and certificates to be specified. Normally, the defaults are fine but occasionally software can't handle triple DES encrypted private keys; then the option .Fl keypbe Ar PBE-SHA1-RC2-40 can be used to reduce the private key encryption to 40-bit RC2. A complete description of all algorithms is contained in the .Sx PKCS8 section above. .Sh PKCS12 EXAMPLES Parse a PKCS#12 file and output it to a file: .Pp .Dl $ openssl pkcs12 -in file.p12 -out file.pem .Pp Output only client certificates to a file: .Pp .Dl $ openssl pkcs12 -in file.p12 -clcerts -out file.pem .Pp Don't encrypt the private key: .Pp .Dl $ openssl pkcs12 -in file.p12 -out file.pem -nodes .Pp Print some info about a PKCS#12 file: .Pp .Dl $ openssl pkcs12 -in file.p12 -info -noout .Pp Create a PKCS#12 file: .Bd -literal -offset indent $ openssl pkcs12 -export -in file.pem -out file.p12 \e -name "My Certificate" .Ed .Pp Include some extra certificates: .Bd -literal -offset indent $ openssl pkcs12 -export -in file.pem -out file.p12 \e -name "My Certificate" -certfile othercerts.pem .Ed .Sh PKCS12 BUGS Some would argue that the PKCS#12 standard is one big bug :\-) .Pp Versions of .Nm OpenSSL before 0.9.6a had a bug in the PKCS#12 key generation routines. Under rare circumstances this could produce a PKCS#12 file encrypted with an invalid key. As a result some PKCS#12 files which triggered this bug from other implementations .Pq MSIE or Netscape could not be decrypted by .Nm OpenSSL and similarly .Nm OpenSSL could produce PKCS#12 files which could not be decrypted by other implementations. The chances of producing such a file are relatively small: less than 1 in 256. .Pp A side effect of fixing this bug is that any old invalidly encrypted PKCS#12 files can no longer be parsed by the fixed version. Under such circumstances the .Nm pkcs12 utility will report that the MAC is OK but fail with a decryption error when extracting private keys. .Pp This problem can be resolved by extracting the private keys and certificates from the PKCS#12 file using an older version of .Nm OpenSSL and recreating the PKCS#12 file from the keys and certificates using a newer version of .Nm OpenSSL . For example: .Bd -literal -offset indent $ old-openssl -in bad.p12 -out keycerts.pem $ openssl -in keycerts.pem -export -name "My PKCS#12 file" \e -out fixed.p12 .Ed .\" .\" PKEY .\" .Sh PKEY .nr nS 1 .Nm "openssl pkey" .Bk -words .Op Ar cipher .Op Fl in Ar file .Op Fl inform Ar DER | PEM .Op Fl noout .Op Fl out Ar file .Op Fl outform Ar DER | PEM .Op Fl passin Ar arg .Op Fl passout Ar arg .Op Fl pubin .Op Fl pubout .Op Fl text .Op Fl text_pub .Ek .nr nS 0 .Pp The .Nm pkey command processes public or private keys. They can be converted between various forms and their components printed out. .Pp The options are as follows: .Bl -tag -width Ds .It Ar cipher These options encrypt the private key with the supplied cipher. Any algorithm name accepted by .Fn EVP_get_cipherbyname is acceptable, such as .Cm des3 . .It Fl in Ar file This specifies the input filename to read a key from, or standard input if this option is not specified. If the key is encrypted a pass phrase will be prompted for. .It Fl inform Ar DER | PEM This specifies the input format, DER or PEM. .It Fl noout Do not output the encoded version of the key. .It Fl out Ar file This specifies the output filename to write a key to, or standard output if this option is not specified. If any encryption options are set then a pass phrase will be prompted for. The output filename should .Em not be the same as the input filename. .It Fl outform Ar DER | PEM This specifies the output format; the options have the same meaning as the .Fl inform option. .It Fl passin Ar arg The key password source. .It Fl passout Ar arg The output file password source. .It Fl pubin By default a private key is read from the input file: with this option a public key is read instead. .It Fl pubout By default a private key is output: with this option a public key will be output instead. This option is automatically set if the input is a public key. .It Fl text Print out the various public or private key components in plain text in addition to the encoded version. .It Fl text_pub Print out only public key components even if a private key is being processed. .El .Sh PKEY EXAMPLES To remove the pass phrase on an RSA private key: .Bd -literal -offset indent $ openssl pkey -in key.pem -out keyout.pem .Ed .Pp To encrypt a private key using triple DES: .Bd -literal -offset indent $ openssl pkey -in key.pem -des3 -out keyout.pem .Ed .Pp To convert a private key from PEM to DER format: .Bd -literal -offset indent $ openssl pkey -in key.pem -outform DER -out keyout.der .Ed .Pp To print the components of a private key to standard output: .Bd -literal -offset indent $ openssl pkey -in key.pem -text -noout .Ed .Pp To print the public components of a private key to standard output: .Bd -literal -offset indent $ openssl pkey -in key.pem -text_pub -noout .Ed .Pp To just output the public part of a private key: .Bd -literal -offset indent $ openssl pkey -in key.pem -pubout -out pubkey.pem .Ed .\" .\" PKEYPARAM .\" .Sh PKEYPARAM .Cm openssl pkeyparam .Op Fl in Ar file .Op Fl noout .Op Fl out Ar file .Op Fl text .Pp The .Nm pkey command processes public or private keys. They can be converted between various forms and their components printed out. .Pp The options are as follows: .Bl -tag -width Ds .It Fl in Ar file This specifies the input filename to read parameters from, or standard input if this option is not specified. .It Fl noout Do not output the encoded version of the parameters. .It Fl out Ar file This specifies the output filename to write parameters to, or standard output if this option is not specified. .It Fl text Prints out the parameters in plain text in addition to the encoded version. .El .Sh PKEYPARAM EXAMPLES Print out text version of parameters: .Bd -literal -offset indent $ openssl pkeyparam -in param.pem -text .Ed .Sh PKEYPARAM NOTES There are no .Fl inform or .Fl outform options for this command because only PEM format is supported because the key type is determined by the PEM headers. .\" .\" PKEYUTL .\" .Sh PKEYUTL .nr nS 1 .Nm "openssl pkeyutl" .Bk -words .Op Fl asn1parse .Op Fl certin .Op Fl decrypt .Op Fl derive .Op Fl encrypt .Op Fl hexdump .Op Fl in Ar file .Op Fl inkey Ar file .Op Fl keyform Ar DER | PEM .Op Fl out Ar file .Op Fl passin Ar arg .Op Fl peerform Ar DER | PEM .Op Fl peerkey Ar file .Op Fl pkeyopt Ar opt : Ns Ar value .Op Fl pubin .Op Fl rev .Op Fl sigfile Ar file .Op Fl sign .Op Fl verify .Op Fl verifyrecover .Ek .nr nS 0 .Pp The .Nm pkeyutl command can be used to perform public key operations using any supported algorithm. .Pp The options are as follows: .Bl -tag -width Ds .It Fl asn1parse ASN1parse the output data. This is useful when combined with the .Fl verifyrecover option when an ASN1 structure is signed. .It Fl certin The input is a certificate containing a public key. .It Fl decrypt Decrypt the input data using a private key. .It Fl derive Derive a shared secret using the peer key. .It Fl encrypt Encrypt the input data using a public key. .It Fl hexdump Hex dump the output data. .It Fl in Ar file Specify the input filename to read data from, or standard input if this option is not specified. .It Fl inkey Ar file The input key file. By default it should be a private key. .It Fl keyform Ar DER | PEM The key format DER or PEM. .It Fl out Ar file Specify the output filename to write to, or standard output by default. .It Fl passin Ar arg The key password source. .It Fl peerform Ar DER | PEM The peer key format DER or PEM. .It Fl peerkey Ar file The peer key file, used by key derivation (agreement) operations. .It Fl pkeyopt Ar opt : Ns Ar value Public key options. .It Fl pubin The input file is a public key. .It Fl rev Reverse the order of the input buffer. This is useful for some libraries (such as CryptoAPI) which represent the buffer in little endian format. .It Fl sigfile Ar file Signature file (verify operation only). .It Fl sign Sign the input data and output the signed result. This requires a private key. .It Fl verify Verify the input data against the signature file and indicate if the verification succeeded or failed. .It Fl verifyrecover Verify the input data and output the recovered data. .El .Sh PKEYUTL NOTES The operations and options supported vary according to the key algorithm and its implementation. The .Nm OpenSSL operations and options are indicated below. .Pp Unless otherwise mentioned all algorithms support the .Ar digest : Ns Ar alg option which specifies the digest in use for sign, verify, and verifyrecover operations. The value .Ar alg should represent a digest name as used in the .Fn EVP_get_digestbyname function, for example .Cm sha1 . .Ss RSA algorithm The RSA algorithm supports the encrypt, decrypt, sign, verify, and verifyrecover operations in general. Some padding modes only support some of these operations however. .Bl -tag -width Ds .It rsa_padding_mode : Ns Ar mode This sets the RSA padding mode. Acceptable values for .Ar mode are .Cm pkcs1 for PKCS#1 padding; .Cm none for no padding; .Cm oaep for OAEP mode; .Cm x931 for X9.31 mode; and .Cm pss for PSS. .Pp In PKCS#1 padding if the message digest is not set then the supplied data is signed or verified directly instead of using a DigestInfo structure. If a digest is set then a DigestInfo structure is used and its length must correspond to the digest type. .Pp For oeap mode only encryption and decryption is supported. .Pp For x931 if the digest type is set it is used to format the block data; otherwise the first byte is used to specify the X9.31 digest ID. Sign, verify, and verifyrecover can be performed in this mode. .Pp For pss mode only sign and verify are supported and the digest type must be specified. .It rsa_pss_saltlen : Ns Ar len For pss mode only this option specifies the salt length. Two special values are supported: -1 sets the salt length to the digest length. When signing -2 sets the salt length to the maximum permissible value. When verifying -2 causes the salt length to be automatically determined based on the PSS block structure. .El .Ss DSA algorithm The DSA algorithm supports the sign and verify operations. Currently there are no additional options other than .Ar digest . Only the SHA1 digest can be used and this digest is assumed by default. .Ss DH algorithm The DH algorithm supports the derive operation and no additional options. .Ss EC algorithm The EC algorithm supports the sign, verify, and derive operations. The sign and verify operations use ECDSA and derive uses ECDH. Currently there are no additional options other than .Ar digest . Only the SHA1 digest can be used and this digest is assumed by default. .Sh PKEYUTL EXAMPLES Sign some data using a private key: .Bd -literal -offset indent $ openssl pkeyutl -sign -in file -inkey key.pem -out sig .Ed .Pp Recover the signed data (e.g. if an RSA key is used): .Bd -literal -offset indent $ openssl pkeyutl -verifyrecover -in sig -inkey key.pem .Ed .Pp Verify the signature (e.g. a DSA key): .Bd -literal -offset indent $ openssl pkeyutl -verify -in file -sigfile sig \e -inkey key.pem .Ed .Pp Sign data using a message digest value (this is currently only valid for RSA): .Bd -literal -offset indent $ openssl pkeyutl -sign -in file -inkey key.pem \e -out sig -pkeyopt digest:sha256 .Ed .Pp Derive a shared secret value: .Bd -literal -offset indent $ openssl pkeyutl -derive -inkey key.pem \e -peerkey pubkey.pem -out secret .Ed .\" .\" PRIME .\" .Sh PRIME .Cm openssl prime .Op Fl bits Ar n .Op Fl checks Ar n .Op Fl generate .Op Fl hex .Op Fl safe .Ar p .Pp The .Nm prime command is used to generate prime numbers, or to check numbers for primality. Results are probabilistic: they have an exceedingly high likelihood of being correct, but are not guaranteed. .Pp The options are as follows: .Bl -tag -width Ds .It Fl bits Ar n Specify the number of bits in the generated prime number. Must be used in conjunction with .Fl generate . .It Fl checks Ar n Perform a Miller-Rabin probabilistic primality test with .Ar n iterations. The default is 20. .It Fl generate Generate a pseudo-random prime number. Must be used in conjunction with .Fl bits . .It Fl hex Output in hex format. .It Fl safe Generate only .Qq safe prime numbers (i.e. a prime p so that (p-1)/2 is also prime). .It Ar p Test if number .Ar p is prime. .El .\" .\" RAND .\" .Sh RAND .nr nS 1 .Nm "openssl rand" .Op Fl base64 .Op Fl hex .Op Fl out Ar file .Ar num .nr nS 0 .Pp The .Nm rand command outputs .Ar num pseudo-random bytes. .Pp The options are as follows: .Bl -tag -width Ds .It Fl base64 Perform .Em base64 encoding on the output. .It Fl hex Specify hexadecimal output. .It Fl out Ar file Write to .Ar file instead of standard output. .El .\" .\" REQ .\" .Sh REQ .nr nS 1 .Nm "openssl req" .Bk -words .Op Fl asn1-kludge .Op Fl batch .Op Fl config Ar file .Op Fl days Ar n .Op Fl extensions Ar section .Op Fl in Ar file .Op Fl inform Ar DER | PEM .Op Fl key Ar keyfile .Op Fl keyform Ar DER | PEM .Op Fl keyout Ar file .Op Fl md4 | md5 | sha1 .Op Fl modulus .Op Fl nameopt Ar option .Op Fl new .Op Fl newhdr .Op Fl newkey Ar arg .Op Fl no-asn1-kludge .Op Fl nodes .Op Fl noout .Op Fl out Ar file .Op Fl outform Ar DER | PEM .Op Fl passin Ar arg .Op Fl passout Ar arg .Op Fl pubkey .Op Fl reqexts Ar section .Op Fl reqopt Ar option .Op Fl set_serial Ar n .Op Fl subj Ar arg .Op Fl subject .Op Fl text .Op Fl utf8 .Op Fl verbose .Op Fl verify .Op Fl x509 .Ek .nr nS 0 .Pp The .Nm req command primarily creates and processes certificate requests in PKCS#10 format. It can additionally create self-signed certificates, for use as root CAs, for example. .Pp The options are as follows: .Bl -tag -width Ds .It Fl asn1-kludge By default, the .Nm req command outputs certificate requests containing no attributes in the correct PKCS#10 format. However certain CAs will only accept requests containing no attributes in an invalid form: this option produces this invalid format. .Pp More precisely, the .Em Attributes in a PKCS#10 certificate request are defined as a SET OF Attribute. They are .Em not optional, so if no attributes are present then they should be encoded as an empty SET OF. The invalid form does not include the empty SET OF, whereas the correct form does. .Pp It should be noted that very few CAs still require the use of this option. .It Fl batch Non-interactive mode. .It Fl config Ar file This allows an alternative configuration file to be specified; this overrides the compile time filename or any specified in the .Ev OPENSSL_CONF environment variable. .It Fl days Ar n When the .Fl x509 option is being used, this specifies the number of days to certify the certificate for. The default is 30 days. .It Fl extensions Ar section , Fl reqexts Ar section These options specify alternative sections to include certificate extensions (if the .Fl x509 option is present) or certificate request extensions. This allows several different sections to be used in the same configuration file to specify requests for a variety of purposes. .It Fl in Ar file This specifies the input .Ar file to read a request from, or standard input if this option is not specified. A request is only read if the creation options .Fl new and .Fl newkey are not specified. .It Fl inform Ar DER | PEM This specifies the input format. The .Ar DER argument uses an ASN1 DER-encoded form compatible with the PKCS#10. The .Ar PEM form is the default format: it consists of the DER format base64-encoded with additional header and footer lines. .It Fl key Ar keyfile This specifies the file to read the private key from. It also accepts PKCS#8 format private keys for PEM format files. .It Fl keyform Ar DER | PEM The format of the private key file specified in the .Fl key argument. .Ar PEM is the default. .It Fl keyout Ar file This gives the .Ar file to write the newly created private key to. If this option is not specified, the filename present in the configuration file is used. .It Fl md5 | sha1 | sha256 This specifies the message digest to sign the request with. This overrides the digest algorithm specified in the configuration file. .Pp Some public key algorithms may override this choice. For instance, DSA signatures always use SHA1. .It Fl modulus This option prints out the value of the modulus of the public key contained in the request. .It Fl nameopt Ar option , Fl reqopt Ar option These options determine how the subject or issuer names are displayed. The .Ar option argument can be a single option or multiple options separated by commas. Alternatively, these options may be used more than once to set multiple options. See the .Sx X509 section below for details. .It Fl new This option generates a new certificate request. It will prompt the user for the relevant field values. The actual fields prompted for and their maximum and minimum sizes are specified in the configuration file and any requested extensions. .Pp If the .Fl key option is not used, it will generate a new RSA private key using information specified in the configuration file. .It Fl newhdr Adds the word NEW to the PEM file header and footer lines on the outputed request. Some software .Pq Netscape certificate server and some CAs need this. .It Fl newkey Ar arg This option creates a new certificate request and a new private key. The argument takes one of several forms. .Ar rsa : Ns Ar nbits , where .Ar nbits is the number of bits, generates an RSA key .Ar nbits in size. If .Ar nbits is omitted, i.e.\& .Cm -newkey rsa specified, the default key size, specified in the configuration file, is used. .Pp All other algorithms support the .Ar alg : Ns Ar file form, where file may be an algorithm parameter file, created by the .Cm genpkey -genparam command or an X.509 certificate for a key with appropriate algorithm. .Pp .Ar param : Ns Ar file generates a key using the parameter file or certificate .Ar file ; the algorithm is determined by the parameters. .Ar algname : Ns Ar file use algorithm .Ar algname and parameter file .Ar file : the two algorithms must match or an error occurs. .Ar algname just uses algorithm .Ar algname , and parameters, if necessary, should be specified via the .Fl pkeyopt option. .Pp .Ar dsa : Ns Ar file generates a DSA key using the parameters in the file .Ar file . .It Fl no-asn1-kludge Reverses the effect of .Fl asn1-kludge . .It Fl nodes If this option is specified and a private key is created, it will not be encrypted. .It Fl noout This option prevents output of the encoded version of the request. .It Fl out Ar file This specifies the output .Ar file to write to, or standard output by default. .It Fl outform Ar DER | PEM This specifies the output format; the options have the same meaning as the .Fl inform option. .It Fl passin Ar arg The key password source. .It Fl passout Ar arg The output file password source. .It Fl pubkey Outputs the public key. .It Fl reqopt Ar option Customise the output format used with .Fl text . The .Ar option argument can be a single option or multiple options separated by commas. .Pp See the discussion of the .Fl certopt option in the .Nm x509 command. .It Fl set_serial Ar n Serial number to use when outputting a self-signed certificate. This may be specified as a decimal value or a hex value if preceded by .Sq 0x . It is possible to use negative serial numbers but this is not recommended. .It Fl subj Ar arg Replaces subject field of input request with specified data and outputs modified request. The arg must be formatted as .Em /type0=value0/type1=value1/type2=... ; characters may be escaped by .Sq \e .Pq backslash ; no spaces are skipped. .It Fl subject Prints out the request subject (or certificate subject if .Fl x509 is specified. .It Fl text Prints out the certificate request in text form. .It Fl utf8 This option causes field values to be interpreted as UTF8 strings; by default they are interpreted as ASCII. This means that the field values, whether prompted from a terminal or obtained from a configuration file, must be valid UTF8 strings. .It Fl verbose Print extra details about the operations being performed. .It Fl verify Verifies the signature on the request. .It Fl x509 This option outputs a self-signed certificate instead of a certificate request. This is typically used to generate a test certificate or a self-signed root CA. The extensions added to the certificate .Pq if any are specified in the configuration file. Unless specified using the .Fl set_serial option, 0 will be used for the serial number. .El .Sh REQ CONFIGURATION FILE FORMAT The configuration options are specified in the .Em req section of the configuration file. As with all configuration files, if no value is specified in the specific section (i.e.\& .Em req ) then the initial unnamed or .Em default section is searched too. .Pp The options available are described in detail below. .Bl -tag -width "XXXX" .It Ar attributes This specifies the section containing any request attributes: its format is the same as .Ar distinguished_name . Typically these may contain the .Em challengePassword or .Em unstructuredName types. They are currently ignored by .Nm OpenSSL Ns Li 's request signing utilities, but some CAs might want them. .It Ar default_bits This specifies the default key size in bits. If not specified, 2048 is used. It is used if the .Fl new option is used. It can be overridden by using the .Fl newkey option. .It Ar default_keyfile This is the default file to write a private key to. If not specified, the key is written to standard output. This can be overridden by the .Fl keyout option. .It Ar default_md This option specifies the digest algorithm to use. Possible values include .Ar md5 , .Ar sha1 and .Ar sha256 . If not present, SHA256 is used. This option can be overridden on the command line. .It Ar distinguished_name This specifies the section containing the distinguished name fields to prompt for when generating a certificate or certificate request. The format is described in the next section. .It Ar encrypt_key If this is set to .Em no and a private key is generated, it is .Em not encrypted. This is equivalent to the .Fl nodes command line option. For compatibility, .Ar encrypt_rsa_key is an equivalent option. .It Ar input_password | output_password The passwords for the input private key file .Pq if present and the output private key file .Pq if one will be created . The command line options .Fl passin and .Fl passout override the configuration file values. .It Ar oid_file This specifies a file containing additional OBJECT IDENTIFIERS. Each line of the file should consist of the numerical form of the object identifier, followed by whitespace, then the short name followed by whitespace and finally the long name. .It Ar oid_section This specifies a section in the configuration file containing extra object identifiers. Each line should consist of the short name of the object identifier followed by .Sq = and the numerical form. The short and long names are the same when this option is used. .It Ar prompt If set to the value .Em no , this disables prompting of certificate fields and just takes values from the config file directly. It also changes the expected format of the .Em distinguished_name and .Em attributes sections. .It Ar req_extensions This specifies the configuration file section containing a list of extensions to add to the certificate request. It can be overridden by the .Fl reqexts command line switch. .It Ar string_mask This option limits the string types for encoding certain fields. The following values may be used, limiting strings to the indicated types: .Bl -tag -width "MASK:number" .It Ar utf8only .Em UTF8String. This is the default, as recommended by PKIX in RFC 2459. .It Ar default .Em PrintableString , IA5String , T61String , BMPString , UTF8String . .It Ar pkix .Em PrintableString , IA5String , BMPString , UTF8String . This was inspired by the PKIX recommendation in RFC 2459 for certificates generated before 2004, but differs by also permitting .Em IA5String . .It Ar nombstr .Em PrintableString , IA5String , T61String , UniversalString . This was a workaround for some ancient software that had problems with the variable-sized .Em BMPString and .Em UTF8String types. .It Cm MASK : Ns Ar number This is an explicit bitmask of permitted types, where .Ar number is a C-style hex, decimal, or octal number that's a bit-wise OR of .Dv B_ASN1_* values from .In openssl/asn1.h . .El .It Ar utf8 If set to the value .Em yes , then field values are interpreted as UTF8 strings; by default they are interpreted as ASCII. This means that the field values, whether prompted from a terminal or obtained from a configuration file, must be valid UTF8 strings. .It Ar x509_extensions This specifies the configuration file section containing a list of extensions to add to a certificate generated when the .Fl x509 switch is used. It can be overridden by the .Fl extensions command line switch. .El .Sh REQ DISTINGUISHED NAME AND ATTRIBUTE SECTION FORMAT There are two separate formats for the distinguished name and attribute sections. If the .Fl prompt option is set to .Em no , then these sections just consist of field names and values: for example, .Bd -unfilled -offset indent CN=My Name OU=My Organization emailAddress=someone@somewhere.org .Ed .Pp This allows external programs .Pq e.g. GUI based to generate a template file with all the field names and values and just pass it to .Nm req . An example of this kind of configuration file is contained in the .Sx REQ EXAMPLES section. .Pp Alternatively if the .Fl prompt option is absent or not set to .Em no , then the file contains field prompting information. It consists of lines of the form: .Bd -unfilled -offset indent fieldName="prompt" fieldName_default="default field value" fieldName_min= 2 fieldName_max= 4 .Ed .Pp .Qq fieldName is the field name being used, for example .Em commonName .Pq or CN . The .Qq prompt string is used to ask the user to enter the relevant details. If the user enters nothing, the default value is used; if no default value is present, the field is omitted. A field can still be omitted if a default value is present, if the user just enters the .Sq \&. character. .Pp The number of characters entered must be between the .Em fieldName_min and .Em fieldName_max limits: there may be additional restrictions based on the field being used (for example .Em countryName can only ever be two characters long and must fit in a .Em PrintableString ) . .Pp Some fields (such as .Em organizationName ) can be used more than once in a DN. This presents a problem because configuration files will not recognize the same name occurring twice. To avoid this problem, if the .Em fieldName contains some characters followed by a full stop, they will be ignored. So, for example, a second .Em organizationName can be input by calling it .Qq 1.organizationName . .Pp The actual permitted field names are any object identifier short or long names. These are compiled into .Nm OpenSSL and include the usual values such as .Em commonName , countryName , localityName , organizationName , .Em organizationUnitName , stateOrProvinceName . Additionally, .Em emailAddress is included as well as .Em name , surname , givenName initials and .Em dnQualifier . .Pp Additional object identifiers can be defined with the .Ar oid_file or .Ar oid_section options in the configuration file. Any additional fields will be treated as though they were a .Em DirectoryString . .Sh REQ EXAMPLES Examine and verify a certificate request: .Pp .Dl $ openssl req -in req.pem -text -verify -noout .Pp Create a private key and then generate a certificate request from it: .Bd -literal -offset indent $ openssl genrsa -out key.pem 2048 $ openssl req -new -key key.pem -out req.pem .Ed .Pp The same but just using req: .Pp .Dl $ openssl req -newkey rsa:2048 -keyout key.pem -out req.pem .Pp Generate a self-signed root certificate: .Pp .Dl "$ openssl req -x509 -newkey rsa:2048 -keyout key.pem -out req.pem" .Pp Example of a file pointed to by the .Ar oid_file option: .Bd -unfilled -offset indent 1.2.3.4 shortName A longer Name 1.2.3.6 otherName Other longer Name .Ed .Pp Example of a section pointed to by .Ar oid_section making use of variable expansion: .Bd -unfilled -offset indent testoid1=1.2.3.5 testoid2=${testoid1}.6 .Ed .Pp Sample configuration file prompting for field values: .Bd -literal \& [ req ] \& default_bits = 1024 \& default_keyfile = privkey.pem \& distinguished_name = req_distinguished_name \& attributes = req_attributes \& x509_extensions = v3_ca \& dirstring_type = nobmp \& [ req_distinguished_name ] \& countryName = Country Name (2 letter code) \& countryName_default = AU \& countryName_min = 2 \& countryName_max = 2 \& localityName = Locality Name (eg, city) \& organizationalUnitName = Organizational Unit Name (eg, section) \& commonName = Common Name (eg, YOUR name) \& commonName_max = 64 \& emailAddress = Email Address \& emailAddress_max = 40 \& [ req_attributes ] \& challengePassword = A challenge password \& challengePassword_min = 4 \& challengePassword_max = 20 \& [ v3_ca ] \& subjectKeyIdentifier=hash \& authorityKeyIdentifier=keyid:always,issuer:always \& basicConstraints = CA:true .Ed .Pp Sample configuration containing all field values: .Bd -literal \& [ req ] \& default_bits = 1024 \& default_keyfile = keyfile.pem \& distinguished_name = req_distinguished_name \& attributes = req_attributes \& prompt = no \& output_password = mypass \& [ req_distinguished_name ] \& C = GB \& ST = Test State or Province \& L = Test Locality \& O = Organization Name \& OU = Organizational Unit Name \& CN = Common Name \& emailAddress = test@email.address \& [ req_attributes ] \& challengePassword = A challenge password .Ed .Sh REQ NOTES The header and footer lines in the PEM format are normally: .Bd -unfilled -offset indent -----BEGIN CERTIFICATE REQUEST----- -----END CERTIFICATE REQUEST----- .Ed .Pp Some software .Pq some versions of Netscape certificate server instead needs: .Bd -unfilled -offset indent -----BEGIN NEW CERTIFICATE REQUEST----- -----END NEW CERTIFICATE REQUEST----- .Ed .Pp which is produced with the .Fl newhdr option but is otherwise compatible. Either form is accepted transparently on input. .Pp The certificate requests generated by Xenroll with MSIE have extensions added. It includes the .Em keyUsage extension which determines the type of key .Pq signature only or general purpose and any additional OIDs entered by the script in an .Em extendedKeyUsage extension. .Sh REQ DIAGNOSTICS The following messages are frequently asked about: .Bd -unfilled -offset indent Using configuration from /some/path/openssl.cnf Unable to load config info .Ed .Pp This is followed some time later by... .Bd -unfilled -offset indent unable to find 'distinguished_name' in config problems making Certificate Request .Ed .Pp The first error message is the clue: it can't find the configuration file! Certain operations .Pq like examining a certificate request don't need a configuration file so its use isn't enforced. Generation of certificates or requests, however, do need a configuration file. This could be regarded as a bug. .Pp Another puzzling message is this: .Bd -unfilled -offset indent Attributes: a0:00 .Ed .Pp This is displayed when no attributes are present and the request includes the correct empty SET OF structure .Pq the DER encoding of which is 0xa0 0x00 . If you just see: .Pp .D1 Attributes: .Pp then the SET OF is missing and the encoding is technically invalid .Pq but it is tolerated . See the description of the command line option .Fl asn1-kludge for more information. .Sh REQ ENVIRONMENT VARIABLES The variable .Ev OPENSSL_CONF , if defined, allows an alternative configuration file location to be specified; it will be overridden by the .Fl config command line switch if it is present. .Sh REQ BUGS .Nm OpenSSL Ns Li 's handling of T61Strings .Pq aka TeletexStrings is broken: it effectively treats them as ISO 8859-1 .Pq Latin 1 ; Netscape and MSIE have similar behaviour. This can cause problems if you need characters that aren't available in .Em PrintableStrings and you don't want to or can't use .Em BMPStrings . .Pp As a consequence of the T61String handling, the only correct way to represent accented characters in .Nm OpenSSL is to use a .Em BMPString : unfortunately Netscape currently chokes on these. If you have to use accented characters with Netscape and MSIE then you currently need to use the invalid T61String form. .Pp The current prompting is not very friendly. It doesn't allow you to confirm what you've just entered. Other things, like extensions in certificate requests, are statically defined in the configuration file. Some of these, like an email address in .Em subjectAltName , should be input by the user. .\" .\" RSA .\" .Sh RSA .nr nS 1 .Nm "openssl rsa" .Bk -words .Oo .Fl aes128 | aes192 | aes256 | .Fl des | des3 .Oc .Op Fl check .Op Fl in Ar file .Op Fl inform Ar DER | NET | PEM .Op Fl modulus .Op Fl noout .Op Fl out Ar file .Op Fl outform Ar DER | NET | PEM .Op Fl passin Ar arg .Op Fl passout Ar arg .Op Fl pubin .Op Fl pubout .Op Fl sgckey .Op Fl text .nr nS 0 .Ek .Pp The .Nm rsa command processes RSA keys. They can be converted between various forms and their components printed out. .Pp .Sy Note : this command uses the traditional .Nm SSLeay compatible format for private key encryption: newer applications should use the more secure PKCS#8 format using the .Nm pkcs8 utility. .Pp The options are as follows: .Bl -tag -width Ds .It Xo .Fl aes128 | aes192 | aes256 | .Fl des | des3 .Xc These options encrypt the private key with the AES, DES, or the triple DES ciphers, respectively, before outputting it. A pass phrase is prompted for. If none of these options are specified, the key is written in plain text. This means that using the .Nm rsa utility to read in an encrypted key with no encryption option can be used to remove the pass phrase from a key, or by setting the encryption options it can be used to add or change the pass phrase. These options can only be used with PEM format output files. .It Fl check This option checks the consistency of an RSA private key. .It Fl in Ar file This specifies the input .Ar file to read a key from, or standard input if this option is not specified. If the key is encrypted, a pass phrase will be prompted for. .It Fl inform Ar DER | NET | PEM This specifies the input format. The .Ar DER argument uses an ASN1 DER-encoded form compatible with the PKCS#1 RSAPrivateKey or SubjectPublicKeyInfo format. The .Ar PEM form is the default format: it consists of the DER format base64-encoded with additional header and footer lines. On input PKCS#8 format private keys are also accepted. The .Ar NET form is a format described in the .Sx RSA NOTES section. .It Fl noout This option prevents output of the encoded version of the key. .It Fl modulus This option prints out the value of the modulus of the key. .It Fl out Ar file This specifies the output .Ar file to write a key to, or standard output if this option is not specified. If any encryption options are set, a pass phrase will be prompted for. The output filename should .Em not be the same as the input filename. .It Fl outform Ar DER | NET | PEM This specifies the output format; the options have the same meaning as the .Fl inform option. .It Fl passin Ar arg The key password source. .It Fl passout Ar arg The output file password source. .It Fl pubin By default, a private key is read from the input file; with this option a public key is read instead. .It Fl pubout By default, a private key is output; with this option a public key will be output instead. This option is automatically set if the input is a public key. .It Fl sgckey Use the modified .Em NET algorithm used with some versions of Microsoft IIS and SGC keys. .It Fl text Prints out the various public or private key components in plain text, in addition to the encoded version. .El .Sh RSA NOTES The PEM private key format uses the header and footer lines: .Bd -unfilled -offset indent -----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY----- .Ed .Pp The PEM public key format uses the header and footer lines: .Bd -unfilled -offset indent -----BEGIN PUBLIC KEY----- -----END PUBLIC KEY----- .Ed .Pp The .Em NET form is a format compatible with older Netscape servers and Microsoft IIS .key files; this uses unsalted RC4 for its encryption. It is not very secure and so should only be used when necessary. .Pp Some newer version of IIS have additional data in the exported .key files. To use these with the .Nm rsa utility, view the file with a binary editor and look for the string .Qq private-key , then trace back to the byte sequence 0x30, 0x82 .Pq this is an ASN1 SEQUENCE . Copy all the data from this point onwards to another file and use that as the input to the .Nm rsa utility with the .Fl inform Ar NET option. If there is an error after entering the password, try the .Fl sgckey option. .Sh RSA EXAMPLES To remove the pass phrase on an RSA private key: .Pp .Dl $ openssl rsa -in key.pem -out keyout.pem .Pp To encrypt a private key using triple DES: .Pp .Dl $ openssl rsa -in key.pem -des3 -out keyout.pem .Pp To convert a private key from PEM to DER format: .Pp .Dl $ openssl rsa -in key.pem -outform DER -out keyout.der .Pp To print out the components of a private key to standard output: .Pp .Dl $ openssl rsa -in key.pem -text -noout .Pp To just output the public part of a private key: .Pp .Dl $ openssl rsa -in key.pem -pubout -out pubkey.pem .Sh RSA BUGS The command line password arguments don't currently work with .Em NET format. .Pp There should be an option that automatically handles .key files, without having to manually edit them. .\" .\" RSAUTL .\" .Sh RSAUTL .nr nS 1 .Nm "openssl rsautl" .Bk -words .Op Fl asn1parse .Op Fl certin .Op Fl decrypt .Op Fl encrypt .Op Fl hexdump .Op Fl in Ar file .Op Fl inkey Ar file .Op Fl keyform Ar DER | PEM .Op Fl oaep | pkcs | raw | ssl .Op Fl out Ar file .Op Fl pubin .Op Fl sign .Op Fl verify .Ek .nr nS 0 .Pp The .Nm rsautl command can be used to sign, verify, encrypt and decrypt data using the RSA algorithm. .Pp The options are as follows: .Bl -tag -width Ds .It Fl asn1parse Asn1parse the output data; this is useful when combined with the .Fl verify option. .It Fl certin The input is a certificate containing an RSA public key. .It Fl decrypt Decrypt the input data using an RSA private key. .It Fl encrypt Encrypt the input data using an RSA public key. .It Fl hexdump Hex dump the output data. .It Fl in Ar file This specifies the input .Ar file to read data from, or standard input if this option is not specified. .It Fl inkey Ar file The input key file, by default it should be an RSA private key. .It Fl keyform Ar DER | PEM Private ket format. Default is .Ar PEM . .It Fl oaep | pkcs | raw | ssl The padding to use: PKCS#1 OAEP, PKCS#1 v1.5 .Pq the default , or no padding, respectively. For signatures, only .Fl pkcs and .Fl raw can be used. .It Fl out Ar file Specifies the output .Ar file to write to, or standard output by default. .It Fl pubin The input file is an RSA public key. .It Fl sign Sign the input data and output the signed result. This requires an RSA private key. .It Fl verify Verify the input data and output the recovered data. .El .Sh RSAUTL NOTES .Nm rsautl , because it uses the RSA algorithm directly, can only be used to sign or verify small pieces of data. .Sh RSAUTL EXAMPLES Sign some data using a private key: .Pp .Dl "$ openssl rsautl -sign -in file -inkey key.pem -out sig" .Pp Recover the signed data: .Pp .Dl $ openssl rsautl -verify -in sig -inkey key.pem .Pp Examine the raw signed data: .Pp .Li "\ \&$ openssl rsautl -verify -in file -inkey key.pem -raw -hexdump" .Bd -unfilled \& 0000 - 00 01 ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ \& 0010 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ \& 0020 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ \& 0030 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ \& 0040 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ \& 0050 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ \& 0060 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ \& 0070 - ff ff ff ff 00 68 65 6c-6c 6f 20 77 6f 72 6c 64 .....hello world .Ed .Pp The PKCS#1 block formatting is evident from this. If this was done using encrypt and decrypt, the block would have been of type 2 .Pq the second byte and random padding data visible instead of the 0xff bytes. .Pp It is possible to analyse the signature of certificates using this utility in conjunction with .Nm asn1parse . Consider the self-signed example in .Pa certs/pca-cert.pem : running .Nm asn1parse as follows yields: .Pp .Li "\ \&$ openssl asn1parse -in pca-cert.pem" .Bd -unfilled \& 0:d=0 hl=4 l= 742 cons: SEQUENCE \& 4:d=1 hl=4 l= 591 cons: SEQUENCE \& 8:d=2 hl=2 l= 3 cons: cont [ 0 ] \& 10:d=3 hl=2 l= 1 prim: INTEGER :02 \& 13:d=2 hl=2 l= 1 prim: INTEGER :00 \& 16:d=2 hl=2 l= 13 cons: SEQUENCE \& 18:d=3 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption \& 29:d=3 hl=2 l= 0 prim: NULL \& 31:d=2 hl=2 l= 92 cons: SEQUENCE \& 33:d=3 hl=2 l= 11 cons: SET \& 35:d=4 hl=2 l= 9 cons: SEQUENCE \& 37:d=5 hl=2 l= 3 prim: OBJECT :countryName \& 42:d=5 hl=2 l= 2 prim: PRINTABLESTRING :AU \& .... \& 599:d=1 hl=2 l= 13 cons: SEQUENCE \& 601:d=2 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption \& 612:d=2 hl=2 l= 0 prim: NULL \& 614:d=1 hl=3 l= 129 prim: BIT STRING .Ed .Pp The final BIT STRING contains the actual signature. It can be extracted with: .Pp .Dl "$ openssl asn1parse -in pca-cert.pem -out sig -noout -strparse 614" .Pp The certificate public key can be extracted with: .Pp .Dl $ openssl x509 -in test/testx509.pem -pubkey -noout \*(Gtpubkey.pem .Pp The signature can be analysed with: .Pp .Li "\ \&$ openssl rsautl -in sig -verify -asn1parse -inkey pubkey.pem -pubin" .Bd -unfilled \& 0:d=0 hl=2 l= 32 cons: SEQUENCE \& 2:d=1 hl=2 l= 12 cons: SEQUENCE \& 4:d=2 hl=2 l= 8 prim: OBJECT :md5 \& 14:d=2 hl=2 l= 0 prim: NULL \& 16:d=1 hl=2 l= 16 prim: OCTET STRING \& 0000 - f3 46 9e aa 1a 4a 73 c9-37 ea 93 00 48 25 08 b5 .F...Js.7...H%.. .Ed .Pp This is the parsed version of an ASN1 .Em DigestInfo structure. It can be seen that the digest used was MD5. The actual part of the certificate that was signed can be extracted with: .Pp .Dl "$ openssl asn1parse -in pca-cert.pem -out tbs -noout -strparse 4" .Pp and its digest computed with: .Pp .Dl $ openssl md5 -c tbs .D1 MD5(tbs)= f3:46:9e:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5 .Pp which it can be seen agrees with the recovered value above. .\" .\" S_CLIENT .\" .Sh S_CLIENT .nr nS 1 .Nm "openssl s_client" .Bk -words .Op Fl 4 | 6 .Op Fl bugs .Op Fl CAfile Ar file .Op Fl CApath Ar directory .Op Fl cert Ar file .Op Fl check_ss_sig .Op Fl cipher Ar cipherlist .Oo .Fl connect Ar host : Ns Ar port | .Ar host Ns / Ns Ar port .Oc .Op Fl crl_check .Op Fl crl_check_all .Op Fl crlf .Op Fl debug .Op Fl extended_crl .Op Fl ign_eof .Op Fl ignore_critical .Op Fl issuer_checks .Op Fl key Ar keyfile .Op Fl msg .Op Fl nbio .Op Fl nbio_test .Op Fl no_ticket .Op Fl no_tls1 .Op Fl no_tls1_1 .Op Fl no_tls1_2 .Op Fl pause .Op Fl policy_check .Op Fl prexit .Op Fl proxy Ar host : Ns Ar port .Op Fl psk Ar key .Op Fl psk_identity Ar identity .Op Fl quiet .Op Fl reconnect .Op Fl servername Ar name .Op Fl showcerts .Op Fl starttls Ar protocol .Op Fl state .Op Fl tls1 .Op Fl tls1_1 .Op Fl tls1_2 .Op Fl tlsextdebug .Op Fl verify Ar depth .Op Fl x509_strict .Op Fl xmpphost Ar host .Ek .nr nS 0 .Pp The .Nm s_client command implements a generic SSL/TLS client which connects to a remote host using SSL/TLS. It is a .Em very useful diagnostic tool for SSL servers. .Pp The options are as follows: .Bl -tag -width Ds .It Fl 4 Specify that .Nm s_client should attempt connections using IPv4 only. .It Fl 6 Specify that .Nm s_client should attempt connections using IPv6 only. .It Fl bugs There are several known bugs in SSL and TLS implementations. Adding this option enables various workarounds. .It Fl CAfile Ar file A .Ar file containing trusted certificates to use during server authentication and to use when attempting to build the client certificate chain. .It Fl CApath Ar directory The .Ar directory to use for server certificate verification. This directory must be in .Qq hash format ; see .Fl verify for more information. These are also used when building the client certificate chain. .It Fl cert Ar file The certificate to use, if one is requested by the server. The default is not to use a certificate. .It Xo .Fl check_ss_sig , .Fl crl_check , .Fl crl_check_all , .Fl extended_crl , .Fl ignore_critical , .Fl issuer_checks , .Fl policy_check , .Fl x509_strict .Xc Set various certificate chain validation options. See the .Nm VERIFY command for details. .It Fl cipher Ar cipherlist This allows the cipher list sent by the client to be modified. Although the server determines which cipher suite is used, it should take the first supported cipher in the list sent by the client. See the .Sx CIPHERS section above for more information. .It Xo .Fl connect Ar host : Ns Ar port | .Ar host Ns / Ns Ar port .Xc This specifies the .Ar host and optional .Ar port to connect to. If not specified, an attempt is made to connect to the local host on port 4433. Alternatively, the host and port pair may be separated using a forward-slash character. This form is useful for numeric IPv6 addresses. .It Fl crlf This option translates a line feed from the terminal into CR+LF as required by some servers. .It Fl debug Print extensive debugging information including a hex dump of all traffic. .It Fl ign_eof Inhibit shutting down the connection when end of file is reached in the input. .It Fl key Ar keyfile The private key to use. If not specified, the certificate file will be used. .It Fl msg Show all protocol messages with hex dump. .It Fl nbio Turns on non-blocking I/O. .It Fl nbio_test Tests non-blocking I/O. .It Fl no_tls1 | no_tls1_1 | no_tls1_2 By default, the initial handshake uses a method which should be compatible with servers supporting any version of TLS. These options disable the use of TLS1.0, 1.1, and 1.2, respectively. .Pp Unfortunately there are a lot of ancient and broken servers in use which cannot handle this technique and will fail to connect. .It Fl no_ticket Disable RFC 4507 session ticket support. .It Fl pause Pauses 1 second between each read and write call. .It Fl prexit Print session information when the program exits. This will always attempt to print out information even if the connection fails. Normally, information will only be printed out once if the connection succeeds. This option is useful because the cipher in use may be renegotiated or the connection may fail because a client certificate is required or is requested only after an attempt is made to access a certain URL. .Sy Note : the output produced by this option is not always accurate because a connection might never have been established. .It Fl proxy Ar host : Ns Ar port Use the HTTP proxy at .Ar host and .Ar port . The connection to the proxy is done in cleartext and the .Fl connect argument is given to the proxy. If not specified, localhost is used as final destination. After that, switch the connection through the proxy to the destination to TLS. .It Fl psk Ar key Use the PSK key .Ar key when using a PSK cipher suite. The key is given as a hexadecimal number without the leading 0x, for example -psk 1a2b3c4d. .It Fl psk_identity Ar identity Use the PSK identity .Ar identity when using a PSK cipher suite. .It Fl quiet Inhibit printing of session and certificate information. This implicitly turns on .Fl ign_eof as well. .It Fl reconnect Reconnects to the same server 5 times using the same session ID; this can be used as a test that session caching is working. .It Fl servername Ar name Include the TLS Server Name Indication (SNI) extension in the ClientHello message, using the specified server .Ar name . .It Fl showcerts Display the whole server certificate chain: normally only the server certificate itself is displayed. .It Fl starttls Ar protocol Send the protocol-specific message(s) to switch to TLS for communication. .Ar protocol is a keyword for the intended protocol. Currently, the supported keywords are .Qq ftp , .Qq imap , .Qq smtp , .Qq pop3 , and .Qq xmpp . .It Fl state Prints out the SSL session states. .It Fl tls1 | tls1_1 | tls1_2 Permit only TLS1.0, 1.1, or 1.2, respectively. .It Fl tlsextdebug Print out a hex dump of any TLS extensions received from the server. .It Fl verify Ar depth The verify .Ar depth to use. This specifies the maximum length of the server certificate chain and turns on server certificate verification. Currently the verify operation continues after errors so all the problems with a certificate chain can be seen. As a side effect the connection will never fail due to a server certificate verify failure. .It Fl xmpphost Ar hostname This option, when used with .Fl starttls Ar xmpp , specifies the host for the "to" attribute of the stream element. If this option is not specified then the host specified with .Fl connect will be used. .El .Sh S_CLIENT CONNECTED COMMANDS If a connection is established with an SSL server, any data received from the server is displayed and any key presses will be sent to the server. When used interactively (which means neither .Fl quiet nor .Fl ign_eof have been given), the session will be renegotiated if the line begins with an .Em R ; if the line begins with a .Em Q or if end of file is reached, the connection will be closed down. .Sh S_CLIENT NOTES .Nm s_client can be used to debug SSL servers. To connect to an SSL HTTP server the command: .Pp .Dl $ openssl s_client -connect servername:443 .Pp would typically be used .Pq HTTPS uses port 443 . If the connection succeeds, an HTTP command can be given such as .Qq GET to retrieve a web page. .Pp If the handshake fails, there are several possible causes; if it is nothing obvious like no client certificate, then the .Fl bugs , tls1 , tls1_1, tls1_2 , no_tls1 , no_tls1_1 , and .Fl no_tls1_2 options can be tried in case it is a buggy server. .Pp A frequent problem when attempting to get client certificates working is that a web client complains it has no certificates or gives an empty list to choose from. This is normally because the server is not sending the client's certificate authority in its .Qq acceptable CA list when it requests a certificate. By using .Nm s_client the CA list can be viewed and checked. However some servers only request client authentication after a specific URL is requested. To obtain the list in this case it is necessary to use the .Fl prexit option and send an HTTP request for an appropriate page. .Pp If a certificate is specified on the command line using the .Fl cert option, it will not be used unless the server specifically requests a client certificate. Therefore merely including a client certificate on the command line is no guarantee that the certificate works. .Pp If there are problems verifying a server certificate, the .Fl showcerts option can be used to show the whole chain. .Pp Compression methods are only supported for .Fl tls1 . .Sh S_CLIENT BUGS Because this program has a lot of options and also because some of the techniques used are rather old, the C source of .Nm s_client is rather hard to read and not a model of how things should be done. A typical SSL client program would be much simpler. .Pp The .Fl verify option should really exit if the server verification fails. .Pp The .Fl prexit option is a bit of a hack. We should really report information whenever a session is renegotiated. .\" .\" S_SERVER .\" .Sh S_SERVER .nr nS 1 .Nm "openssl s_server" .Bk -words .Op Fl accept Ar port .Op Fl bugs .Op Fl CAfile Ar file .Op Fl CApath Ar directory .Op Fl cert Ar file .Op Fl cipher Ar cipherlist .Op Fl context Ar id .Op Fl crl_check .Op Fl crl_check_all .Op Fl crlf .Op Fl dcert Ar file .Op Fl debug .Op Fl dhparam Ar file .Op Fl dkey Ar file .Op Fl hack .Op Fl HTTP .Op Fl id_prefix Ar arg .Op Fl key Ar keyfile .Op Fl msg .Op Fl nbio .Op Fl nbio_test .Op Fl no_dhe .Op Fl no_tls1 .Op Fl no_tls1_1 .Op Fl no_tls1_2 .Op Fl no_tmp_rsa .Op Fl nocert .Op Fl psk Ar key .Op Fl psk_hint Ar hint .Op Fl quiet .Op Fl serverpref .Op Fl state .Op Fl tls1 .Op Fl tls1_1 .Op Fl tls1_2 .Op Fl Verify Ar depth .Op Fl verify Ar depth .Op Fl WWW .Op Fl www .Ek .nr nS 0 .Pp The .Nm s_server command implements a generic SSL/TLS server which listens for connections on a given port using SSL/TLS. .Pp The options are as follows: .Bl -tag -width Ds .It Fl accept Ar port The TCP .Ar port to listen on for connections. If not specified, 4433 is used. .It Fl bugs There are several known bugs in SSL and TLS implementations. Adding this option enables various workarounds. .It Fl CAfile Ar file A file containing trusted certificates to use during client authentication and to use when attempting to build the server certificate chain. The list is also used in the list of acceptable client CAs passed to the client when a certificate is requested. .It Fl CApath Ar directory The .Ar directory to use for client certificate verification. This directory must be in .Qq hash format ; see .Fl verify for more information. These are also used when building the server certificate chain. .It Fl cert Ar file The certificate to use; most server's cipher suites require the use of a certificate and some require a certificate with a certain public key type: for example the DSS cipher suites require a certificate containing a DSS .Pq DSA key. If not specified, the file .Pa server.pem will be used. .It Fl cipher Ar cipherlist This allows the cipher list used by the server to be modified. When the client sends a list of supported ciphers, the first client cipher also included in the server list is used. Because the client specifies the preference order, the order of the server cipherlist is irrelevant. See the .Sx CIPHERS section for more information. .It Fl context Ar id Sets the SSL context ID. It can be given any string value. If this option is not present, a default value will be used. .It Fl crl_check , crl_check_all Check the peer certificate has not been revoked by its CA. The CRLs are appended to the certificate file. With the .Fl crl_check_all option, all CRLs of all CAs in the chain are checked. .It Fl crlf This option translates a line feed from the terminal into CR+LF. .It Fl dcert Ar file , Fl dkey Ar file Specify an additional certificate and private key; these behave in the same manner as the .Fl cert and .Fl key options except there is no default if they are not specified .Pq no additional certificate or key is used . As noted above some cipher suites require a certificate containing a key of a certain type. Some cipher suites need a certificate carrying an RSA key and some a DSS .Pq DSA key. By using RSA and DSS certificates and keys, a server can support clients which only support RSA or DSS cipher suites by using an appropriate certificate. .It Fl debug Print extensive debugging information including a hex dump of all traffic. .It Fl dhparam Ar file The DH parameter file to use. The ephemeral DH cipher suites generate keys using a set of DH parameters. If not specified, an attempt is made to load the parameters from the server certificate file. If this fails, a static set of parameters hard coded into the .Nm s_server program will be used. .It Fl hack This option enables a further workaround for some early Netscape SSL code .Pq \&? . .It Fl HTTP Emulates a simple web server. Pages will be resolved relative to the current directory; for example if the URL .Pa https://myhost/page.html is requested, the file .Pa ./page.html will be loaded. The files loaded are assumed to contain a complete and correct HTTP response (lines that are part of the HTTP response line and headers must end with CRLF). .It Fl id_prefix Ar arg Generate SSL/TLS session IDs prefixed by .Ar arg . This is mostly useful for testing any SSL/TLS code .Pq e.g. proxies that wish to deal with multiple servers, when each of which might be generating a unique range of session IDs .Pq e.g. with a certain prefix . .It Fl key Ar keyfile The private key to use. If not specified, the certificate file will be used. .It Fl msg Show all protocol messages with hex dump. .It Fl nbio Turns on non-blocking I/O. .It Fl nbio_test Tests non-blocking I/O. .It Fl no_dhe If this option is set, no DH parameters will be loaded, effectively disabling the ephemeral DH cipher suites. .It Fl no_tls1 | no_tls1_1 | no_tls1_2 By default, the initial handshake uses a method which should be compatible with clients supporting any version of TLS. These options disable the use of TLS1.0, 1.1, and 1.2, respectively. .It Fl no_tmp_rsa Certain export cipher suites sometimes use a temporary RSA key; this option disables temporary RSA key generation. .It Fl nocert If this option is set, no certificate is used. This restricts the cipher suites available to the anonymous ones .Pq currently just anonymous DH . .It Fl psk Ar key Use the PSK key .Ar key when using a PSK cipher suite. The key is given as a hexadecimal number without the leading 0x, for example -psk 1a2b3c4d. .It Fl psk_hint Ar hint Use the PSK identity hint .Ar hint when using a PSK cipher suite. .It Fl quiet Inhibit printing of session and certificate information. .It Fl serverpref Use server's cipher preferences. .It Fl state Prints out the SSL session states. .It Fl tls1 | tls1_1 | tls1_2 Permit only TLS1.0, 1.1, or 1.2, respectively. .It Fl WWW Emulates a simple web server. Pages will be resolved relative to the current directory; for example if the URL .Pa https://myhost/page.html is requested, the file .Pa ./page.html will be loaded. .It Fl www Sends a status message back to the client when it connects. This includes lots of information about the ciphers used and various session parameters. The output is in HTML format so this option will normally be used with a web browser. .It Fl Verify Ar depth , Fl verify Ar depth The verify .Ar depth to use. This specifies the maximum length of the client certificate chain and makes the server request a certificate from the client. With the .Fl Verify option, the client must supply a certificate or an error occurs. With the .Fl verify option, a certificate is requested but the client does not have to send one. .El .Sh S_SERVER CONNECTED COMMANDS If a connection request is established with an SSL client and neither the .Fl www nor the .Fl WWW option has been used, then normally any data received from the client is displayed and any key presses will be sent to the client. .Pp Certain single letter commands are also recognized which perform special operations: these are listed below. .Bl -tag -width "XXXX" .It Ar P Send some plain text down the underlying TCP connection: this should cause the client to disconnect due to a protocol violation. .It Ar Q End the current SSL connection and exit. .It Ar q End the current SSL connection, but still accept new connections. .It Ar R Renegotiate the SSL session and request a client certificate. .It Ar r Renegotiate the SSL session. .It Ar S Print out some session cache status information. .El .Sh S_SERVER NOTES .Nm s_server can be used to debug SSL clients. To accept connections from a web browser the command: .Pp .Dl $ openssl s_server -accept 443 -www .Pp can be used, for example. .Pp Most web browsers .Pq in particular Netscape and MSIE only support RSA cipher suites, so they cannot connect to servers which don't use a certificate carrying an RSA key or a version of .Nm OpenSSL with RSA disabled. .Pp Although specifying an empty list of CAs when requesting a client certificate is strictly speaking a protocol violation, some SSL clients interpret this to mean any CA is acceptable. This is useful for debugging purposes. .Pp The session parameters can printed out using the .Nm sess_id program. .Sh S_SERVER BUGS Because this program has a lot of options and also because some of the techniques used are rather old, the C source of .Nm s_server is rather hard to read and not a model of how things should be done. A typical SSL server program would be much simpler. .Pp The output of common ciphers is wrong: it just gives the list of ciphers that .Nm OpenSSL recognizes and the client supports. .Pp There should be a way for the .Nm s_server program to print out details of any unknown cipher suites a client says it supports. .\" .\" S_TIME .\" .Sh S_TIME .nr nS 1 .Nm "openssl s_time" .Bk -words .Op Fl bugs .Op Fl CAfile Ar file .Op Fl CApath Ar directory .Op Fl cert Ar file .Op Fl cipher Ar cipherlist .Op Fl connect Ar host : Ns Ar port .Op Fl key Ar keyfile .Op Fl nbio .Op Fl new .Op Fl no_shutdown .Op Fl reuse .Op Fl time Ar seconds .Op Fl verify Ar depth .Op Fl www Ar page .Ek .nr nS 0 .Pp The .Nm s_client command implements a generic SSL/TLS client which connects to a remote host using SSL/TLS. It can request a page from the server and includes the time to transfer the payload data in its timing measurements. It measures the number of connections within a given timeframe, the amount of data transferred .Pq if any , and calculates the average time spent for one connection. .Pp The options are as follows: .Bl -tag -width Ds .It Fl bugs There are several known bugs in SSL and TLS implementations. Adding this option enables various workarounds. .It Fl CAfile Ar file A file containing trusted certificates to use during server authentication and to use when attempting to build the client certificate chain. .It Fl CApath Ar directory The directory to use for server certificate verification. This directory must be in .Qq hash format ; see .Nm verify for more information. These are also used when building the client certificate chain. .It Fl cert Ar file The certificate to use, if one is requested by the server. The default is not to use a certificate. The file is in PEM format. .It Fl cipher Ar cipherlist This allows the cipher list sent by the client to be modified. Although the server determines which cipher suite is used, it should take the first supported cipher in the list sent by the client. See the .Nm ciphers command for more information. .It Fl connect Ar host : Ns Ar port This specifies the host and optional port to connect to. .It Fl key Ar keyfile The private key to use. If not specified, the certificate file will be used. The file is in PEM format. .It Fl nbio Turns on non-blocking I/O. .It Fl new Performs the timing test using a new session ID for each connection. If neither .Fl new nor .Fl reuse are specified, they are both on by default and executed in sequence. .It Fl no_shutdown Shut down the connection without sending a .Dq close notify shutdown alert to the server. .It Fl reuse Performs the timing test using the same session ID; this can be used as a test that session caching is working. If neither .Fl new nor .Fl reuse are specified, they are both on by default and executed in sequence. .It Fl time Ar seconds Specifies how long .Pq in seconds .Nm s_time should establish connections and optionally transfer payload data from a server. The default is 30 seconds. Server and client performance and the link speed determine how many connections .Nm s_time can establish. .It Fl verify Ar depth The verify depth to use. This specifies the maximum length of the server certificate chain and turns on server certificate verification. Currently the verify operation continues after errors, so all the problems with a certificate chain can be seen. As a side effect, the connection will never fail due to a server certificate verify failure. .It Fl www Ar page This specifies the page to GET from the server. A value of .Sq / gets the index.htm[l] page. If this parameter is not specified, .Nm s_time will only perform the handshake to establish SSL connections but not transfer any payload data. .El .Sh S_TIME NOTES .Nm s_client can be used to measure the performance of an SSL connection. To connect to an SSL HTTP server and get the default page the command .Bd -literal -offset indent $ openssl s_time -connect servername:443 -www / -CApath yourdir \e -CAfile yourfile.pem -cipher commoncipher .Ed .Pp would typically be used .Pq HTTPS uses port 443 . .Dq commoncipher is a cipher to which both client and server can agree; see the .Nm ciphers command for details. .Pp If the handshake fails, there are several possible causes: if it is nothing obvious like no client certificate, the .Fl bugs option can be tried in case it is a buggy server. .Pp A frequent problem when attempting to get client certificates working is that a web client complains it has no certificates or gives an empty list to choose from. This is normally because the server is not sending the clients certificate authority in its .Qq acceptable CA list when it requests a certificate. By using .Nm s_client , the CA list can be viewed and checked. However some servers only request client authentication after a specific URL is requested. To obtain the list in this case, it is necessary to use the .Fl prexit option of .Nm s_client and send an HTTP request for an appropriate page. .Pp If a certificate is specified on the command line using the .Fl cert option, it will not be used unless the server specifically requests a client certificate. Therefore merely including a client certificate on the command line is no guarantee that the certificate works. .Sh S_TIME BUGS Because this program does not have all the options of the .Nm s_client program to turn protocols on and off, you may not be able to measure the performance of all protocols with all servers. .Pp The .Fl verify option should really exit if the server verification fails. .\" .\" SESS_ID .\" .Sh SESS_ID .nr nS 1 .Nm "openssl sess_id" .Bk -words .Op Fl cert .Op Fl context Ar ID .Op Fl in Ar file .Op Fl inform Ar DER | PEM .Op Fl noout .Op Fl out Ar file .Op Fl outform Ar DER | PEM .Op Fl text .Ek .nr nS 0 .Pp The .Nm sess_id program processes the encoded version of the SSL session structure and optionally prints out SSL session details .Pq for example the SSL session master key in human readable format. Since this is a diagnostic tool that needs some knowledge of the SSL protocol to use properly, most users will not need to use it. .Pp The options are as follows: .Bl -tag -width Ds .It Fl cert If a certificate is present in the session, it will be output using this option; if the .Fl text option is also present, then it will be printed out in text form. .It Fl context Ar ID This option can set the session ID so the output session information uses the supplied .Ar ID . The .Ar ID can be any string of characters. This option won't normally be used. .It Fl in Ar file This specifies the input .Ar file to read session information from, or standard input by default. .It Fl inform Ar DER | PEM This specifies the input format. The .Ar DER argument uses an ASN1 DER-encoded format containing session details. The precise format can vary from one version to the next. The .Ar PEM form is the default format: it consists of the DER format base64-encoded with additional header and footer lines. .It Fl noout This option prevents output of the encoded version of the session. .It Fl out Ar file This specifies the output .Ar file to write session information to, or standard output if this option is not specified. .It Fl outform Ar DER | PEM This specifies the output format; the options have the same meaning as the .Fl inform option. .It Fl text Prints out the various public or private key components in plain text in addition to the encoded version. .El .Sh SESS_ID OUTPUT Typical output: .Bd -literal SSL-Session: Protocol : TLSv1 Cipher : 0016 Session-ID: 871E62626C554CE95488823752CBD5F3673A3EF3DCE9C67BD916C809914B40ED Session-ID-ctx: 01000000 Master-Key: A7CEFC571974BE02CAC305269DC59F76EA9F0B180CB6642697A68251F2D2BB57E51DBBB4C7885573192AE9AEE220FACD Key-Arg : None Start Time: 948459261 Timeout : 300 (sec) Verify return code 0 (ok) .Ed .Pp These are described below in more detail. .Pp .Bl -tag -width "Verify return code " -compact .It Ar Protocol This is the protocol in use. .It Ar Cipher The cipher used is the actual raw SSL or TLS cipher code; see the SSL or TLS specifications for more information. .It Ar Session-ID The SSL session ID in hex format. .It Ar Session-ID-ctx The session ID context in hex format. .It Ar Master-Key This is the SSL session master key. .It Ar Key-Arg The key argument; this is only used in SSL v2. .It Ar Start Time This is the session start time, represented as an integer in standard .Ux format. .It Ar Timeout The timeout in seconds. .It Ar Verify return code This is the return code when an SSL client certificate is verified. .El .Sh SESS_ID NOTES The PEM-encoded session format uses the header and footer lines: .Bd -unfilled -offset indent -----BEGIN SSL SESSION PARAMETERS----- -----END SSL SESSION PARAMETERS----- .Ed .Pp Since the SSL session output contains the master key, it is possible to read the contents of an encrypted session using this information. Therefore appropriate security precautions should be taken if the information is being output by a .Qq real application. This is, however, strongly discouraged and should only be used for debugging purposes. .Sh SESS_ID BUGS The cipher and start time should be printed out in human readable form. .\" .\" SMIME .\" .Sh SMIME .nr nS 1 .Nm "openssl smime" .Bk -words .Oo .Fl aes128 | aes192 | aes256 | des | .Fl des3 | rc2-40 | rc2-64 | rc2-128 .Oc .Op Fl binary .Op Fl CAfile Ar file .Op Fl CApath Ar directory .Op Fl certfile Ar file .Op Fl check_ss_sig .Op Fl content Ar file .Op Fl crl_check .Op Fl crl_check_all .Op Fl decrypt .Op Fl encrypt .Op Fl extended_crl .Op Fl from Ar addr .Op Fl ignore_critical .Op Fl in Ar file .Op Fl indef .Op Fl inform Ar DER | PEM | SMIME .Op Fl inkey Ar file .Op Fl issuer_checks .Op Fl keyform Ar PEM .Op Fl md Ar digest .Op Fl noattr .Op Fl nocerts .Op Fl nochain .Op Fl nodetach .Op Fl noindef .Op Fl nointern .Op Fl nosigs .Op Fl noverify .Op Fl out Ar file .Op Fl outform Ar DER | PEM | SMIME .Op Fl passin Ar arg .Op Fl pk7out .Op Fl policy_check .Op Fl recip Ar file .Op Fl resign .Op Fl sign .Op Fl signer Ar file .Op Fl stream .Op Fl subject Ar s .Op Fl text .Op Fl to Ar addr .Op Fl verify .Op Fl x509_strict .Op Ar cert.pem ... .Ek .nr nS 0 .Pp The .Nm smime command handles .Em S/MIME mail. It can encrypt, decrypt, sign, and verify .Em S/MIME messages. .Pp There are six operation options that set the type of operation to be performed. The meaning of the other options varies according to the operation type. .Pp The six operation options are as follows: .Bl -tag -width "XXXX" .It Fl decrypt Decrypt mail using the supplied certificate and private key. Expects an encrypted mail message in .Em MIME format for the input file. The decrypted mail is written to the output file. .It Fl encrypt Encrypt mail for the given recipient certificates. Input file is the message to be encrypted. The output file is the encrypted mail in .Em MIME format. .It Fl pk7out Takes an input message and writes out a PEM-encoded PKCS#7 structure. .It Fl resign Resign a message: take an existing message and one or more new signers. .It Fl sign Sign mail using the supplied certificate and private key. Input file is the message to be signed. The signed message in .Em MIME format is written to the output file. .It Fl verify Verify signed mail. Expects a signed mail message on input and outputs the signed data. Both clear text and opaque signing is supported. .El .Pp The remaining options are as follows: .Bl -tag -width "XXXX" .It Xo .Fl aes128 | aes192 | aes256 | des | .Fl des3 | rc2-40 | rc2-64 | rc2-128 .Xc The encryption algorithm to use. 128-, 192-, or 256-bit AES, DES .Pq 56 bits , triple DES .Pq 168 bits , or 40-, 64-, or 128-bit RC2, respectively; if not specified, 40-bit RC2 is used. Only used with .Fl encrypt . .It Fl binary Normally, the input message is converted to .Qq canonical format which is effectively using CR and LF as end of line \- as required by the .Em S/MIME specification. When this option is present no translation occurs. This is useful when handling binary data which may not be in .Em MIME format. .It Fl CAfile Ar file A .Ar file containing trusted CA certificates; only used with .Fl verify . .It Fl CApath Ar directory A .Ar directory containing trusted CA certificates; only used with .Fl verify . This directory must be a standard certificate directory: that is, a hash of each subject name (using .Nm x509 -hash ) should be linked to each certificate. .It Ar cert.pem ... One or more certificates of message recipients: used when encrypting a message. .It Fl certfile Ar file Allows additional certificates to be specified. When signing, these will be included with the message. When verifying, these will be searched for the signers' certificates. The certificates should be in PEM format. .It Xo .Fl check_ss_sig , .Fl crl_check , .Fl crl_check_all , .Fl extended_crl , .Fl ignore_critical , .Fl issuer_checks , .Fl policy_check , .Fl x509_strict .Xc Set various certificate chain validation options. See the .Nm VERIFY command for details. .It Fl content Ar file This specifies a file containing the detached content. This is only useful with the .Fl verify command. This is only usable if the PKCS#7 structure is using the detached signature form where the content is not included. This option will override any content if the input format is .Em S/MIME and it uses the multipart/signed .Em MIME content type. .It Xo .Fl from Ar addr , .Fl subject Ar s , .Fl to Ar addr .Xc The relevant mail headers. These are included outside the signed portion of a message so they may be included manually. When signing, many .Em S/MIME mail clients check that the signer's certificate email address matches the From: address. .It Fl in Ar file The input message to be encrypted or signed or the .Em MIME message to be decrypted or verified. .It Fl indef Enable streaming I/O for encoding operations. This permits single pass processing of data without the need to hold the entire contents in memory, potentially supporting very large files. Streaming is automatically set for S/MIME signing with detached data if the output format is SMIME; it is currently off by default for all other operations. .It Fl inform Ar DER | PEM | SMIME This specifies the input format for the PKCS#7 structure. The default is .Em SMIME , which reads an .Em S/MIME format message. .Ar PEM and .Ar DER format change this to expect PEM and DER format PKCS#7 structures instead. This currently only affects the input format of the PKCS#7 structure; if no PKCS#7 structure is being input (for example with .Fl encrypt or .Fl sign ) , this option has no effect. .It Fl inkey Ar file The private key to use when signing or decrypting. This must match the corresponding certificate. If this option is not specified, the private key must be included in the certificate file specified with the .Fl recip or .Fl signer file. When signing, this option can be used multiple times to specify successive keys. .It Fl keyform Ar PEM Input private key format. .It Fl md Ar digest The digest algorithm to use when signing or resigning. If not present then the default digest algorithm for the signing key is used (usually SHA1). .It Fl noattr Normally, when a message is signed a set of attributes are included which include the signing time and supported symmetric algorithms. With this option they are not included. .It Fl nocerts When signing a message, the signer's certificate is normally included; with this option it is excluded. This will reduce the size of the signed message but the verifier must have a copy of the signer's certificate available locally (passed using the .Fl certfile option, for example). .It Fl nochain Do not do chain verification of signers' certificates: that is, don't use the certificates in the signed message as untrusted CAs. .It Fl nodetach When signing a message use opaque signing: this form is more resistant to translation by mail relays but it cannot be read by mail agents that do not support .Em S/MIME . Without this option cleartext signing with the .Em MIME type multipart/signed is used. .It Fl noindef Disable streaming I/O where it would produce an encoding of indefinite length. This option currently has no effect. In future streaming will be enabled by default on all relevant operations and this option will disable it. .It Fl nointern When verifying a message, normally certificates .Pq if any included in the message are searched for the signing certificate. With this option, only the certificates specified in the .Fl certfile option are used. The supplied certificates can still be used as untrusted CAs however. .It Fl nosigs Don't try to verify the signatures on the message. .It Fl noverify Do not verify the signer's certificate of a signed message. .It Fl out Ar file The message text that has been decrypted or verified, or the output .Em MIME format message that has been signed or verified. .It Fl outform Ar DER | PEM | SMIME This specifies the output format for the PKCS#7 structure. The default is .Em SMIME , which writes an .Em S/MIME format message. .Ar PEM and .Ar DER format change this to write PEM and DER format PKCS#7 structures instead. This currently only affects the output format of the PKCS#7 structure; if no PKCS#7 structure is being output (for example with .Fl verify or .Fl decrypt ) this option has no effect. .It Fl passin Ar arg The key password source. .It Fl recip Ar file The recipients certificate when decrypting a message. This certificate must match one of the recipients of the message or an error occurs. .It Fl signer Ar file A signing certificate when signing or resigning a message; this option can be used multiple times if more than one signer is required. If a message is being verified, the signer's certificates will be written to this file if the verification was successful. .It Fl stream The same as .Fl indef . .It Fl text This option adds plain text .Pq text/plain .Em MIME headers to the supplied message if encrypting or signing. If decrypting or verifying, it strips off text headers: if the decrypted or verified message is not of .Em MIME type text/plain then an error occurs. .El .Sh SMIME NOTES The .Em MIME message must be sent without any blank lines between the headers and the output. Some mail programs will automatically add a blank line. Piping the mail directly to an MTA is one way to achieve the correct format. .Pp The supplied message to be signed or encrypted must include the necessary .Em MIME headers or many .Em S/MIME clients won't display it properly .Pq if at all . You can use the .Fl text option to automatically add plain text headers. .Pp A .Qq signed and encrypted message is one where a signed message is then encrypted. This can be produced by encrypting an already signed message: see the .Sx SMIME EXAMPLES section. .Pp This version of the program only allows one signer per message, but it will verify multiple signers on received messages. Some .Em S/MIME clients choke if a message contains multiple signers. It is possible to sign messages .Qq in parallel by signing an already signed message. .Pp The options .Fl encrypt and .Fl decrypt reflect common usage in .Em S/MIME clients. Strictly speaking these process PKCS#7 enveloped data: PKCS#7 encrypted data is used for other purposes. .Pp The .Fl resign option uses an existing message digest when adding a new signer. This means that attributes must be present in at least one existing signer using the same message digest or this operation will fail. .Pp The .Fl stream and .Fl indef options enable experimental streaming I/O support. As a result the encoding is BER using indefinite length constructed encoding and no longer DER. Streaming is supported for the .Fl encrypt and .Fl sign operations if the content is not detached. .Pp Streaming is always used for the .Fl sign operation with detached data but since the content is no longer part of the PKCS#7 structure the encoding remains DER. .Sh SMIME EXIT CODES .Bl -tag -width "XXXX" .It Ar 0 The operation was completely successful. .It Ar 1 An error occurred parsing the command options. .It Ar 2 One of the input files could not be read. .It Ar 3 An error occurred creating the PKCS#7 file or when reading the .Em MIME message. .It Ar 4 An error occurred decrypting or verifying the message. .It Ar 5 The message was verified correctly, but an error occurred writing out the signer's certificates. .El .Sh SMIME EXAMPLES Create a cleartext signed message: .Bd -literal -offset indent $ openssl smime -sign -in message.txt -text -out mail.msg \e -signer mycert.pem .Ed .Pp Create an opaque signed message: .Bd -literal -offset indent $ openssl smime -sign -in message.txt -text -out mail.msg \e -nodetach -signer mycert.pem .Ed .Pp Create a signed message, include some additional certificates and read the private key from another file: .Bd -literal -offset indent $ openssl smime -sign -in in.txt -text -out mail.msg \e -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem .Ed .Pp Create a signed message with two signers: .Bd -literal -offset indent openssl smime -sign -in message.txt -text -out mail.msg \e -signer mycert.pem -signer othercert.pem .Ed .Pp Send a signed message under .Ux directly to .Xr sendmail 8 , including headers: .Bd -literal -offset indent $ openssl smime -sign -in in.txt -text -signer mycert.pem \e -from steve@openssl.org -to someone@somewhere \e -subject "Signed message" | sendmail someone@somewhere .Ed .Pp Verify a message and extract the signer's certificate if successful: .Bd -literal -offset indent $ openssl smime -verify -in mail.msg -signer user.pem \e -out signedtext.txt .Ed .Pp Send encrypted mail using triple DES: .Bd -literal -offset indent $ openssl smime -encrypt -in in.txt -from steve@openssl.org \e -to someone@somewhere -subject "Encrypted message" \e -des3 -out mail.msg user.pem .Ed .Pp Sign and encrypt mail: .Bd -literal -offset indent $ openssl smime -sign -in ml.txt -signer my.pem -text | \e openssl smime -encrypt -out mail.msg \e -from steve@openssl.org -to someone@somewhere \e -subject "Signed and Encrypted message" -des3 user.pem .Ed .Pp .Sy Note : The encryption command does not include the .Fl text option because the message being encrypted already has .Em MIME headers. .Pp Decrypt mail: .Bd -literal -offset indent $ openssl smime -decrypt -in mail.msg -recip mycert.pem \e -inkey key.pem" .Ed .Pp The output from Netscape form signing is a PKCS#7 structure with the detached signature format. You can use this program to verify the signature by line wrapping the base64-encoded structure and surrounding it with: .Bd -unfilled -offset indent -----BEGIN PKCS7----- -----END PKCS7----- .Ed .Pp and using the command: .Bd -literal -offset indent $ openssl smime -verify -inform PEM -in signature.pem \e -content content.txt .Ed .Pp Alternatively, you can base64 decode the signature and use: .Bd -literal -offset indent $ openssl smime -verify -inform DER -in signature.der \e -content content.txt .Ed .Pp Create an encrypted message using 128-bit AES: .Bd -literal -offset indent openssl smime -encrypt -in plain.txt -aes128 \e -out mail.msg cert.pem .Ed .Pp Add a signer to an existing message: .Bd -literal -offset indent openssl smime -resign -in mail.msg -signer newsign.pem \e -out mail2.msg .Ed .Sh SMIME BUGS The .Em MIME parser isn't very clever: it seems to handle most messages that I've thrown at it, but it may choke on others. .Pp The code currently will only write out the signer's certificate to a file: if the signer has a separate encryption certificate this must be manually extracted. There should be some heuristic that determines the correct encryption certificate. .Pp Ideally, a database should be maintained of a certificate for each email address. .Pp The code doesn't currently take note of the permitted symmetric encryption algorithms as supplied in the .Em SMIMECapabilities signed attribute. This means the user has to manually include the correct encryption algorithm. It should store the list of permitted ciphers in a database and only use those. .Pp No revocation checking is done on the signer's certificate. .Pp The current code can only handle .Em S/MIME v2 messages; the more complex .Em S/MIME v3 structures may cause parsing errors. .Sh SMIME HISTORY The use of multiple .Fl signer options and the .Fl resign command were first added in .Nm OpenSSL 1.0.0. .\" .\" SPEED .\" .Sh SPEED .nr nS 1 .Nm "openssl speed" .Bk -words .Op Cm aes .Op Cm aes-128-cbc .Op Cm aes-192-cbc .Op Cm aes-256-cbc .Op Cm aes-128-gcm .Op Cm aes-256-gcm .Op Cm blowfish .Op Cm bf-cbc .Op Cm cast .Op Cm cast-cbc .Op Cm chacha20-poly1305 .Op Cm des .Op Cm des-cbc .Op Cm des-ede3 .Op Cm dsa .Op Cm dsa512 .Op Cm dsa1024 .Op Cm dsa2048 .Op Cm hmac .Op Cm md4 .Op Cm md5 .Op Cm rc2 .Op Cm rc2-cbc .Op Cm rc4 .Op Cm rmd160 .Op Cm rsa .Op Cm rsa512 .Op Cm rsa1024 .Op Cm rsa2048 .Op Cm rsa4096 .Op Cm sha1 .Op Fl decrypt .Op Fl elapsed .Op Fl evp Ar e .Op Fl mr .Op Fl multi Ar number .Ek .nr nS 0 .Pp The .Nm speed command is used to test the performance of cryptographic algorithms. .Bl -tag -width "XXXX" .It Bq Cm zero or more test algorithms If any options are given, .Nm speed tests those algorithms, otherwise all of the above are tested. .It Fl decrypt Time decryption instead of encryption .Pq only EVP . .It Fl elapsed Measure time in real time instead of CPU user time. .It Fl evp Ar e Use EVP .Ar e . .It Fl mr Produce machine readable output. .It Fl multi Ar number Run .Ar number benchmarks in parallel. .El .\" .\" TS .\" .Sh TS .nr nS 1 .Nm "openssl ts" .Bk -words .Fl query .Op Fl md4 | md5 | ripemd160 | sha1 .Op Fl cert .Op Fl config Ar configfile .Op Fl data Ar file_to_hash .Op Fl digest Ar digest_bytes .Op Fl in Ar request.tsq .Op Fl no_nonce .Op Fl out Ar request.tsq .Op Fl policy Ar object_id .Op Fl text .Ek .nr nS 0 .Pp .nr nS 1 .Nm "openssl ts" .Bk -words .Fl reply .Op Fl chain Ar certs_file.pem .Op Fl config Ar configfile .Op Fl in Ar response.tsr .Op Fl inkey Ar private.pem .Op Fl out Ar response.tsr .Op Fl passin Ar arg .Op Fl policy Ar object_id .Op Fl queryfile Ar request.tsq .Op Fl section Ar tsa_section .Op Fl signer Ar tsa_cert.pem .Op Fl text .Op Fl token_in .Op Fl token_out .Ek .nr nS 0 .Pp .nr nS 1 .Nm "openssl ts" .Bk -words .Fl verify .Op Fl CAfile Ar trusted_certs.pem .Op Fl CApath Ar trusted_cert_path .Op Fl data Ar file_to_hash .Op Fl digest Ar digest_bytes .Op Fl in Ar response.tsr .Op Fl queryfile Ar request.tsq .Op Fl token_in .Op Fl untrusted Ar cert_file.pem .Ek .nr nS 0 .Pp The .Nm ts command is a basic Time Stamping Authority (TSA) client and server application as specified in RFC 3161 (Time-Stamp Protocol, TSP). A TSA can be part of a PKI deployment and its role is to provide long term proof of the existence of a certain datum before a particular time. Here is a brief description of the protocol: .Bl -enum .It The TSA client computes a one-way hash value for a data file and sends the hash to the TSA. .It The TSA attaches the current date and time to the received hash value, signs them and sends the time stamp token back to the client. By creating this token the TSA certifies the existence of the original data file at the time of response generation. .It The TSA client receives the time stamp token and verifies the signature on it. It also checks if the token contains the same hash value that it had sent to the TSA. .El .Pp There is one DER-encoded protocol data unit defined for transporting a time stamp request to the TSA and one for sending the time stamp response back to the client. The .Nm ts command has three main functions: creating a time stamp request based on a data file; creating a time stamp response based on a request; and verifying if a response corresponds to a particular request or a data file. .Pp There is no support for sending the requests/responses automatically over HTTP or TCP yet as suggested in RFC 3161. Users must send the requests either by FTP or email. .Pp The .Fl query switch can be used for creating and printing a time stamp request with the following options: .Bl -tag -width Ds .It Fl cert The TSA is expected to include its signing certificate in the response. .It Fl config Ar configfile The configuration file to use. This option overrides the .Ev OPENSSL_CONF environment variable. Only the OID section of the config file is used with the .Fl query command. .It Fl data Ar file_to_hash The data file for which the time stamp request needs to be created. stdin is the default if neither the .Fl data nor the .Fl digest option is specified. .It Fl digest Ar digest_bytes It is possible to specify the message imprint explicitly without the data file. The imprint must be specified in a hexadecimal format, two characters per byte, the bytes optionally separated by colons (e.g. 1A:F6:01:... or 1AF601...). The number of bytes must match the message digest algorithm in use. .It Fl in Ar request.tsq This option specifies a previously created time stamp request in DER format that will be printed into the output file. Useful when you need to examine the content of a request in human-readable format. .It Fl md4|md5|ripemd160|sha|sha1 The message digest to apply to the data file. It supports all the message digest algorithms that are supported by the .Nm dgst command. The default is SHA-1. .It Fl no_nonce No nonce is specified in the request if this option is given. Otherwise a 64-bit long pseudo-random none is included in the request. It is recommended to use nonce to protect against replay-attacks. .It Fl out Ar request.tsq Name of the output file to which the request will be written. The default is stdout. .It Fl policy Ar object_id The policy that the client expects the TSA to use for creating the time stamp token. Either the dotted OID notation or OID names defined in the config file can be used. If no policy is requested the TSA will use its own default policy. .It Fl text If this option is specified the output is in human-readable text format instead of DER. .El .Pp A time stamp response (TimeStampResp) consists of a response status and the time stamp token itself (ContentInfo), if the token generation was successful. The .Fl reply command is for creating a time stamp response or time stamp token based on a request and printing the response/token in human-readable format. If .Fl token_out is not specified the output is always a time stamp response (TimeStampResp), otherwise it is a time stamp token (ContentInfo). .Bl -tag -width Ds .It Fl chain Ar certs_file.pem The collection of certificates, in PEM format, that will be included in the response in addition to the signer certificate if the .Fl cert option was used for the request. This file is supposed to contain the certificate chain for the signer certificate from its issuer upwards. The .Fl reply command does not build a certificate chain automatically. .It Fl config Ar configfile The configuration file to use. This option overrides the .Ev OPENSSL_CONF environment variable. See .Sx TS CONFIGURATION FILE OPTIONS for configurable variables. .It Fl in Ar response.tsr Specifies a previously created time stamp response or time stamp token, if .Fl token_in is also specified, in DER format that will be written to the output file. This option does not require a request; it is useful, for example, when you need to examine the content of a response or token or you want to extract the time stamp token from a response. If the input is a token and the output is a time stamp response a default .Dq granted status info is added to the token. .It Fl inkey Ar private.pem The signer private key of the TSA in PEM format. Overrides the .Cm signer_key config file option. .It Fl out Ar response.tsr The response is written to this file. The format and content of the file depends on other options (see .Fl text and .Fl token_out ) . The default is stdout. .It Fl passin Ar arg The key password source. .It Fl policy Ar object_id The default policy to use for the response unless the client explicitly requires a particular TSA policy. The OID can be specified either in dotted notation or with its name. Overrides the .Cm default_policy config file option. .It Fl queryfile Ar request.tsq The name of the file containing a DER-encoded time stamp request. .It Fl section Ar tsa_section The name of the config file section containing the settings for the response generation. If not specified the default TSA section is used; see .Sx TS CONFIGURATION FILE OPTIONS for details. .It Fl signer Ar tsa_cert.pem The signer certificate of the TSA in PEM format. The TSA signing certificate must have exactly one extended key usage assigned to it: timeStamping. The extended key usage must also be critical, otherwise the certificate is going to be refused. Overrides the .Cm signer_cert variable of the config file. .It Fl text If this option is specified the output is human-readable text format instead of DER. .It Fl token_in This flag can be used together with the .Fl in option and indicates that the input is a DER-encoded time stamp token (ContentInfo) instead of a time stamp response (TimeStampResp). .It Fl token_out The output is a time stamp token (ContentInfo) instead of time stamp response (TimeStampResp). .El .Pp The .Fl verify command is for verifying if a time stamp response or time stamp token is valid and matches a particular time stamp request or data file. The .Fl verify command does not use the configuration file. .Bl -tag -width Ds .It Fl CAfile Ar trusted_certs.pem The name of the file containing a set of trusted self-signed CA certificates in PEM format. See the similar option of .Nm verify for additional details. Either this option or .Fl CApath must be specified. .It Fl CApath Ar trusted_cert_path The name of the directory containing the trused CA certificates of the client. See the similar option of .Nm verify for additional details. Either this option or .Fl CAfile must be specified. .It Fl data Ar file_to_hash The response or token must be verified against .Ar file_to_hash . The file is hashed with the message digest algorithm specified in the token. The .Fl digest and .Fl queryfile options must not be specified with this one. .It Fl digest Ar digest_bytes The response or token must be verified against the message digest specified with this option. The number of bytes must match the message digest algorithm specified in the token. The .Fl data and .Fl queryfile options must not be specified with this one. .It Fl in Ar response.tsr The time stamp response that needs to be verified, in DER format. This option in mandatory. .It Fl queryfile Ar request.tsq The original time stamp request, in DER format. The .Fl data and .Fl digest options must not be specified with this one. .It Fl token_in This flag can be used together with the .Fl in option and indicates that the input is a DER-encoded time stamp token (ContentInfo) instead of a time stamp response (TimeStampResp). .It Fl untrusted Ar cert_file.pem Set of additional untrusted certificates in PEM format which may be needed when building the certificate chain for the TSA's signing certificate. This file must contain the TSA signing certificate and all intermediate CA certificates unless the response includes them. .El .Sh TS CONFIGURATION FILE OPTIONS The .Fl query and .Fl reply options make use of a configuration file defined by the .Ev OPENSSL_CONF environment variable. The .Fl query option uses only the symbolic OID names section and it can work without it. However, the .Fl reply option needs the config file for its operation. .Pp When there is a command line switch equivalent of a variable the switch always overrides the settings in the config file. .Bl -tag -width Ds .It Cm tsa Ar section , Cm default_tsa This is the main section and it specifies the name of another section that contains all the options for the .Fl reply option. This default section can be overridden with the .Fl section command line switch. .It Cm oid_file See .Nm ca for a description. .It Cm oid_section See .Nm ca for a description. .It Cm serial The name of the file containing the hexadecimal serial number of the last time stamp response created. This number is incremented by 1 for each response. If the file does not exist at the time of response generation a new file is created with serial number 1. This parameter is mandatory. .It Cm signer_cert TSA signing certificate, in PEM format. The same as the .Fl signer command line option. .It Cm certs A file containing a set of PEM-encoded certificates that need to be included in the response. The same as the .Fl chain command line option. .It Cm signer_key The private key of the TSA, in PEM format. The same as the .Fl inkey command line option. .It Cm default_policy The default policy to use when the request does not mandate any policy. The same as the .Fl policy command line option. .It Cm other_policies Comma separated list of policies that are also acceptable by the TSA and used only if the request explicitly specifies one of them. .It Cm digests The list of message digest algorithms that the TSA accepts. At least one algorithm must be specified. This parameter is mandatory. .It Cm accuracy The accuracy of the time source of the TSA in seconds, milliseconds and microseconds. For example, secs:1, millisecs:500, microsecs:100. If any of the components is missing, zero is assumed for that field. .It Cm clock_precision_digits Specifies the maximum number of digits, which represent the fraction of seconds, that need to be included in the time field. The trailing zeroes must be removed from the time, so there might actually be fewer digits, or no fraction of seconds at all. The maximum value is 6; the default is 0. .It Cm ordering If this option is yes, the responses generated by this TSA can always be ordered, even if the time difference between two responses is less than the sum of their accuracies. The default is no. .It Cm tsa_name Set this option to yes if the subject name of the TSA must be included in the TSA name field of the response. The default is no. .It Cm ess_cert_id_chain The SignedData objects created by the TSA always contain the certificate identifier of the signing certificate in a signed attribute (see RFC 2634, Enhanced Security Services). If this option is set to yes and either the .Cm certs variable or the .Fl chain option is specified then the certificate identifiers of the chain will also be included in the SigningCertificate signed attribute. If this variable is set to no, only the signing certificate identifier is included. The default is no. .El .Sh TS ENVIRONMENT VARIABLES .Ev OPENSSL_CONF contains the path of the configuration file and can be overridden by the .Fl config command line option. .Sh TS EXAMPLES All the examples below presume that .Ev OPENSSL_CONF is set to a proper configuration file, e.g. the example configuration file .Pa openssl/apps/openssl.cnf will do. .Pp To create a time stamp request for design1.txt with SHA-1 without nonce and policy and no certificate is required in the response: .Bd -literal -offset indent $ openssl ts -query -data design1.txt -no_nonce \e -out design1.tsq .Ed .Pp To create a similar time stamp request but specifying the message imprint explicitly: .Bd -literal -offset indent $ openssl ts -query \e -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \e -no_nonce -out design1.tsq .Ed .Pp To print the content of the previous request in human readable format: .Bd -literal -offset indent $ openssl ts -query -in design1.tsq -text .Ed .Pp To create a time stamp request which includes the MD5 digest of design2.txt, requests the signer certificate and nonce, specifies a policy ID (assuming the tsa_policy1 name is defined in the OID section of the config file): .Bd -literal -offset indent $ openssl ts -query -data design2.txt -md5 \e -policy tsa_policy1 -cert -out design2.tsq .Ed .Pp Before generating a response, a signing certificate must be created for the TSA that contains the .Cm timeStamping critical extended key usage extension without any other key usage extensions. You can add the .Dq extendedKeyUsage = critical,timeStamping line to the user certificate section of the config file to generate a proper certificate. See the .Nm req , .Nm ca , and .Nm x509 commands for instructions. The examples below assume that cacert.pem contains the certificate of the CA, tsacert.pem is the signing certificate issued by cacert.pem and tsakey.pem is the private key of the TSA. .Pp To create a time stamp response for a request: .Bd -literal -offset indent $ openssl ts -reply -queryfile design1.tsq -inkey tsakey.pem \e -signer tsacert.pem -out design1.tsr .Ed .Pp If you want to use the settings in the config file you could just write: .Bd -literal -offset indent $ openssl ts -reply -queryfile design1.tsq -out design1.tsr .Ed .Pp To print a time stamp reply to stdout in human readable format: .Bd -literal -offset indent $ openssl ts -reply -in design1.tsr -text .Ed .Pp To create a time stamp token instead of time stamp response: .Bd -literal -offset indent $ openssl ts -reply -queryfile design1.tsq \e -out design1_token.der -token_out .Ed .Pp To print a time stamp token to stdout in human readable format: .Bd -literal -offset indent $ openssl ts -reply -in design1_token.der -token_in \e -text -token_out .Ed .Pp To extract the time stamp token from a response: .Bd -literal -offset indent $ openssl ts -reply -in design1.tsr -out design1_token.der \e -token_out .Ed .Pp To add .Dq granted status info to a time stamp token thereby creating a valid response: .Bd -literal -offset indent $ openssl ts -reply -in design1_token.der \e -token_in -out design1.tsr .Ed .Pp To verify a time stamp reply against a request: .Bd -literal -offset indent $ openssl ts -verify -queryfile design1.tsq -in design1.tsr \e -CAfile cacert.pem -untrusted tsacert.pem .Ed .Pp To verify a time stamp reply that includes the certificate chain: .Bd -literal -offset indent $ openssl ts -verify -queryfile design2.tsq -in design2.tsr \e -CAfile cacert.pem .Ed .Pp To verify a time stamp token against the original data file: .Bd -literal -offset indent $ openssl ts -verify -data design2.txt -in design2.tsr \e -CAfile cacert.pem .Ed .Pp To verify a time stamp token against a message imprint: .Bd -literal -offset indent $ openssl ts -verify \e -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \e -in design2.tsr -CAfile cacert.pem .Ed .Sh TS BUGS No support for time stamps over SMTP, though it is quite easy to implement an automatic email-based TSA with .Xr procmail and .Xr perl 1 . Pure TCP/IP is not supported. .Pp The file containing the last serial number of the TSA is not locked when being read or written. This is a problem if more than one instance of .Nm OpenSSL is trying to create a time stamp response at the same time. .Pp Look for the FIXME word in the source files. .Pp The source code should really be reviewed by somebody else, too. .Pp More testing is needed. .Sh TS AUTHORS .An Zoltan Glozik Aq Mt zglozik@opentsa.org , OpenTSA project .Pq Lk http://www.opentsa.org . .\" .\" SPKAC .\" .Sh SPKAC .nr nS 1 .Nm "openssl spkac" .Bk -words .Op Fl challenge Ar string .Op Fl in Ar file .Op Fl key Ar keyfile .Op Fl noout .Op Fl out Ar file .Op Fl passin Ar arg .Op Fl pubkey .Op Fl spkac Ar spkacname .Op Fl spksect Ar section .Op Fl verify .Ek .nr nS 0 .Pp The .Nm spkac command processes Netscape signed public key and challenge .Pq SPKAC files. It can print out their contents, verify the signature, and produce its own SPKACs from a supplied private key. .Pp The options are as follows: .Bl -tag -width Ds .It Fl challenge Ar string Specifies the challenge string if an SPKAC is being created. .It Fl in Ar file This specifies the input .Ar file to read from, or standard input if this option is not specified. Ignored if the .Fl key option is used. .It Fl key Ar keyfile Create an SPKAC file using the private key in .Ar keyfile . The .Fl in , noout , spksect , and .Fl verify options are ignored if present. .It Fl noout Don't output the text version of the SPKAC .Pq not used if an SPKAC is being created . .It Fl out Ar file Specifies the output .Ar file to write to, or standard output by default. .It Fl passin Ar arg The key password source. .It Fl pubkey Output the public key of an SPKAC .Pq not used if an SPKAC is being created . .It Fl spkac Ar spkacname Allows an alternative name for the variable containing the SPKAC. The default is "SPKAC". This option affects both generated and input SPKAC files. .It Fl spksect Ar section Allows an alternative name for the .Ar section containing the SPKAC. The default is the default section. .It Fl verify Verifies the digital signature on the supplied SPKAC. .El .Sh SPKAC EXAMPLES Print out the contents of an SPKAC: .Pp .Dl $ openssl spkac -in spkac.cnf .Pp Verify the signature of an SPKAC: .Pp .Dl $ openssl spkac -in spkac.cnf -noout -verify .Pp Create an SPKAC using the challenge string .Qq hello : .Pp .Dl $ openssl spkac -key key.pem -challenge hello -out spkac.cnf .Pp Example of an SPKAC, .Pq long lines split up for clarity : .Bd -unfilled -offset indent SPKAC=MIG5MGUwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA1cCoq2Wa3Ixs47uI7F\e PVwHVIPDx5yso105Y6zpozam135a8R0CpoRvkkigIyXfcCjiVi5oWk+6FfPaD03u\e PFoQIDAQABFgVoZWxsbzANBgkqhkiG9w0BAQQFAANBAFpQtY/FojdwkJh1bEIYuc\e 2EeM2KHTWPEepWYeawvHD0gQ3DngSC75YCWnnDdq+NQ3F+X4deMx9AaEglZtULwV\e 4= .Ed .Sh SPKAC NOTES A created SPKAC with suitable DN components appended can be fed into the .Nm ca utility. .Pp SPKACs are typically generated by Netscape when a form is submitted containing the .Em KEYGEN tag as part of the certificate enrollment process. .Pp The challenge string permits a primitive form of proof of possession of private key. By checking the SPKAC signature and a random challenge string, some guarantee is given that the user knows the private key corresponding to the public key being certified. This is important in some applications. Without this it is possible for a previous SPKAC to be used in a .Qq replay attack . .\" .\" VERIFY .\" .Sh VERIFY .nr nS 1 .Nm "openssl verify" .Bk -words .Op Fl CAfile Ar file .Op Fl CApath Ar directory .Op Fl check_ss_sig .Op Fl crl_check .Op Fl crl_check_all .Op Fl explicit_policy .Op Fl extended_crl .Op Fl help .Op Fl ignore_critical .Op Fl inhibit_any .Op Fl inhibit_map .Op Fl issuer_checks .Op Fl policy_check .Op Fl purpose Ar purpose .Op Fl untrusted Ar file .Op Fl verbose .Op Fl x509_strict .Op Fl .Op Ar certificates .Ek .nr nS 0 .Pp The .Nm verify command verifies certificate chains. .Pp The options are as follows: .Bl -tag -width Ds .It Fl check_ss_sig Verify the signature on the self-signed root CA. This is disabled by default because it doesn't add any security. .It Fl CAfile Ar file A .Ar file of trusted certificates. The .Ar file should contain multiple certificates in PEM format, concatenated together. .It Fl CApath Ar directory A .Ar directory of trusted certificates. The certificates should have names of the form .Em hash.0 , or have symbolic links to them of this form ("hash" is the hashed certificate subject name: see the .Fl hash option of the .Nm x509 utility). The .Nm c_rehash script distributed with OpenSSL will automatically create symbolic links to a directory of certificates. .It Fl crl_check Checks end entity certificate validity by attempting to look up a valid CRL. If a valid CRL cannot be found an error occurs. .It Fl crl_check_all Checks the validity of all certificates in the chain by attempting to look up valid CRLs. .It Fl explicit_policy Set policy variable require-explicit-policy (see RFC 3280 et al). .It Fl extended_crl Enable extended CRL features such as indirect CRLs and alternate CRL signing keys. .It Fl help Prints out a usage message. .It Fl ignore_critical Normally if an unhandled critical extension is present which is not supported by .Nm OpenSSL , the certificate is rejected (as required by RFC 3280 et al). If this option is set, critical extensions are ignored. .It Fl inhibit_any Set policy variable inhibit-any-policy (see RFC 3280 et al). .It Fl inhibit_map Set policy variable inhibit-policy-mapping (see RFC 3280 et al). .It Fl issuer_checks Print out diagnostics relating to searches for the issuer certificate of the current certificate. This shows why each candidate issuer certificate was rejected. However the presence of rejection messages does not itself imply that anything is wrong: during the normal verify process several rejections may take place. .It Fl policy_check Enables certificate policy processing. .It Fl purpose Ar purpose The intended use for the certificate. Without this option no chain verification will be done. Currently accepted uses are .Ar sslclient , sslserver , .Ar nssslserver , smimesign , .Ar smimeencrypt , crlsign , .Ar any , and .Ar ocsphelper . See the .Sx VERIFY OPERATION section for more information. .It Fl untrusted Ar file A .Ar file of untrusted certificates. The .Ar file should contain multiple certificates. .It Fl verbose Print extra information about the operations being performed. .It Fl x509_strict Disable workarounds for broken certificates which have to be disabled for strict X.509 compliance. .It Fl Marks the last option. All arguments following this are assumed to be certificate files. This is useful if the first certificate filename begins with a .Sq - . .It Ar certificates One or more .Ar certificates to verify. If no certificate files are included, an attempt is made to read a certificate from standard input. They should all be in PEM format. .El .Sh VERIFY OPERATION The .Nm verify program uses the same functions as the internal SSL and S/MIME verification, therefore this description applies to these verify operations too. .Pp There is one crucial difference between the verify operations performed by the .Nm verify program: wherever possible an attempt is made to continue after an error, whereas normally the verify operation would halt on the first error. This allows all the problems with a certificate chain to be determined. .Pp The verify operation consists of a number of separate steps: .Pp Firstly a certificate chain is built up starting from the supplied certificate and ending in the root CA. It is an error if the whole chain cannot be built up. The chain is built up by looking up the issuer's certificate of the current certificate. If a certificate is found which is its own issuer, it is assumed to be the root CA. .Pp The process of .Qq looking up the issuer's certificate itself involves a number of steps. In versions of .Nm OpenSSL before 0.9.5a the first certificate whose subject name matched the issuer of the current certificate was assumed to be the issuer's certificate. In .Nm OpenSSL 0.9.6 and later all certificates whose subject name matches the issuer name of the current certificate are subject to further tests. The relevant authority key identifier components of the current certificate .Pq if present must match the subject key identifier .Pq if present and issuer and serial number of the candidate issuer; in addition the .Em keyUsage extension of the candidate issuer .Pq if present must permit certificate signing. .Pp The lookup first looks in the list of untrusted certificates and if no match is found the remaining lookups are from the trusted certificates. The root CA is always looked up in the trusted certificate list: if the certificate to verify is a root certificate, then an exact match must be found in the trusted list. .Pp The second operation is to check every untrusted certificate's extensions for consistency with the supplied purpose. If the .Fl purpose option is not included, then no checks are done. The supplied or .Qq leaf certificate must have extensions compatible with the supplied purpose and all other certificates must also be valid CA certificates. The precise extensions required are described in more detail in the .Sx X.509 CERTIFICATE EXTENSIONS section below. .Pp The third operation is to check the trust settings on the root CA. The root CA should be trusted for the supplied purpose. For compatibility with previous versions of .Nm SSLeay and .Nm OpenSSL , a certificate with no trust settings is considered to be valid for all purposes. .Pp The final operation is to check the validity of the certificate chain. The validity period is checked against the current system time and the .Em notBefore and .Em notAfter dates in the certificate. The certificate signatures are also checked at this point. .Pp If all operations complete successfully, the certificate is considered valid. If any operation fails then the certificate is not valid. .Sh VERIFY DIAGNOSTICS When a verify operation fails, the output messages can be somewhat cryptic. The general form of the error message is: .Bd -unfilled \& server.pem: /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024-bit) \& error 24 at 1 depth lookup:invalid CA certificate .Ed .Pp The first line contains the name of the certificate being verified, followed by the subject name of the certificate. The second line contains the error number and the depth. The depth is the number of the certificate being verified when a problem was detected starting with zero for the certificate being verified itself, then 1 for the CA that signed the certificate and so on. Finally a text version of the error number is presented. .Pp An exhaustive list of the error codes and messages is shown below; this also includes the name of the error code as defined in the header file .In openssl/x509_vfy.h . Some of the error codes are defined but never returned: these are described as .Qq unused . .Bl -tag -width "XXXX" .It Ar "0 X509_V_OK: ok" The operation was successful. .It Ar 2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: unable to get issuer certificate The issuer certificate could not be found: this occurs if the issuer certificate of an untrusted certificate cannot be found. .It Ar 3 X509_V_ERR_UNABLE_TO_GET_CRL: unable to get certificate CRL The CRL of a certificate could not be found. .It Ar 4 X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: unable to decrypt certificate's signature The certificate signature could not be decrypted. This means that the actual signature value could not be determined rather than it not matching the expected value. This is only meaningful for RSA keys. .It Ar 5 X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: unable to decrypt CRL's signature The CRL signature could not be decrypted: this means that the actual signature value could not be determined rather than it not matching the expected value. Unused. .It Ar 6 X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY: unable to decode issuer public key The public key in the certificate .Em SubjectPublicKeyInfo could not be read. .It Ar 7 X509_V_ERR_CERT_SIGNATURE_FAILURE: certificate signature failure The signature of the certificate is invalid. .It Ar 8 X509_V_ERR_CRL_SIGNATURE_FAILURE: CRL signature failure The signature of the certificate is invalid. .It Ar 9 X509_V_ERR_CERT_NOT_YET_VALID: certificate is not yet valid The certificate is not yet valid: the .Em notBefore date is after the current time. .It Ar 10 X509_V_ERR_CERT_HAS_EXPIRED: certificate has expired The certificate has expired; that is, the .Em notAfter date is before the current time. .It Ar 11 X509_V_ERR_CRL_NOT_YET_VALID: CRL is not yet valid The CRL is not yet valid. .It Ar 12 X509_V_ERR_CRL_HAS_EXPIRED: CRL has expired The CRL has expired. .It Ar 13 X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: format error in certificate's notBefore field The certificate .Em notBefore field contains an invalid time. .It Ar 14 X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: format error in certificate's notAfter field The certificate .Em notAfter field contains an invalid time. .It Ar 15 X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD: format error in CRL's lastUpdate field The CRL .Em lastUpdate field contains an invalid time. .It Ar 16 X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD: format error in CRL's nextUpdate field The CRL .Em nextUpdate field contains an invalid time. .It Ar 17 X509_V_ERR_OUT_OF_MEM: out of memory An error occurred trying to allocate memory. This should never happen. .It Ar 18 X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: self signed certificate The passed certificate is self-signed and the same certificate cannot be found in the list of trusted certificates. .It Ar 19 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: self signed certificate in certificate chain The certificate chain could be built up using the untrusted certificates but the root could not be found locally. .It Ar 20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: unable to get local issuer certificate The issuer certificate of a locally looked up certificate could not be found. This normally means the list of trusted certificates is not complete. .It Ar 21 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE: unable to verify the first certificate No signatures could be verified because the chain contains only one certificate and it is not self-signed. .It Ar 22 X509_V_ERR_CERT_CHAIN_TOO_LONG: certificate chain too long The certificate chain length is greater than the supplied maximum depth. Unused. .It Ar 23 X509_V_ERR_CERT_REVOKED: certificate revoked The certificate has been revoked. .It Ar 24 X509_V_ERR_INVALID_CA: invalid CA certificate A CA certificate is invalid. Either it is not a CA or its extensions are not consistent with the supplied purpose. .It Ar 25 X509_V_ERR_PATH_LENGTH_EXCEEDED: path length constraint exceeded The .Em basicConstraints pathlength parameter has been exceeded. .It Ar 26 X509_V_ERR_INVALID_PURPOSE: unsupported certificate purpose The supplied certificate cannot be used for the specified purpose. .It Ar 27 X509_V_ERR_CERT_UNTRUSTED: certificate not trusted The root CA is not marked as trusted for the specified purpose. .It Ar 28 X509_V_ERR_CERT_REJECTED: certificate rejected The root CA is marked to reject the specified purpose. .It Ar 29 X509_V_ERR_SUBJECT_ISSUER_MISMATCH: subject issuer mismatch The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate. Only displayed when the .Fl issuer_checks option is set. .It Ar 30 X509_V_ERR_AKID_SKID_MISMATCH: authority and subject key identifier mismatch The current candidate issuer certificate was rejected because its subject key identifier was present and did not match the authority key identifier current certificate. Only displayed when the .Fl issuer_checks option is set. .It Ar 31 X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH: authority and issuer serial number mismatch The current candidate issuer certificate was rejected because its issuer name and serial number were present and did not match the authority key identifier of the current certificate. Only displayed when the .Fl issuer_checks option is set. .It Ar 32 X509_V_ERR_KEYUSAGE_NO_CERTSIGN:key usage does not include certificate signing The current candidate issuer certificate was rejected because its .Em keyUsage extension does not permit certificate signing. .It Ar 50 X509_V_ERR_APPLICATION_VERIFICATION: application verification failure An application specific error. Unused. .El .Sh VERIFY BUGS Although the issuer checks are a considerable improvement over the old technique, they still suffer from limitations in the underlying X509_LOOKUP API. One consequence of this is that trusted certificates with matching subject name must either appear in a file (as specified by the .Fl CAfile option) or a directory (as specified by .Fl CApath ) . If they occur in both, only the certificates in the file will be recognised. .Pp Previous versions of .Nm OpenSSL assumed certificates with matching subject name were identical and mishandled them. .\" .\" VERSION .\" .Sh VERSION .Nm openssl version .Op Fl abdfopv .Pp The .Nm version command is used to print out version information about .Nm OpenSSL . .Pp The options are as follows: .Bl -tag -width Ds .It Fl a All information: this is the same as setting all the other flags. .It Fl b The date the current version of .Nm OpenSSL was built. .It Fl d .Ev OPENSSLDIR setting. .It Fl f Compilation flags. .It Fl o Option information: various options set when the library was built. .It Fl p Platform setting. .It Fl v The current .Nm OpenSSL version. .El .Sh VERSION NOTES The output of .Nm openssl version -a would typically be used when sending in a bug report. .Sh VERSION HISTORY The .Fl d option was added in .Nm OpenSSL 0.9.7. .\" .\" X509 .\" .Sh X509 .nr nS 1 .Nm "openssl x509" .Bk -words .Op Fl C .Op Fl addreject Ar arg .Op Fl addtrust Ar arg .Op Fl alias .Op Fl CA Ar file .Op Fl CAcreateserial .Op Fl CAform Ar DER | PEM .Op Fl CAkey Ar file .Op Fl CAkeyform Ar DER | PEM .Op Fl CAserial Ar file .Op Fl certopt Ar option .Op Fl checkend Ar arg .Op Fl clrext .Op Fl clrreject .Op Fl clrtrust .Op Fl dates .Op Fl days Ar arg .Op Fl email .Op Fl enddate .Op Fl extensions Ar section .Op Fl extfile Ar file .Op Fl fingerprint .Op Fl hash .Op Fl in Ar file .Op Fl inform Ar DER | NET | PEM .Op Fl issuer .Op Fl issuer_hash .Op Fl issuer_hash_old .Op Fl keyform Ar DER | PEM .Op Fl md5 | sha1 .Op Fl modulus .Op Fl nameopt Ar option .Op Fl noout .Op Fl ocsp_uri .Op Fl ocspid .Op Fl out Ar file .Op Fl outform Ar DER | NET | PEM .Op Fl passin Ar arg .Op Fl pubkey .Op Fl purpose .Op Fl req .Op Fl serial .Op Fl set_serial Ar n .Op Fl setalias Ar arg .Op Fl signkey Ar file .Op Fl startdate .Op Fl subject .Op Fl subject_hash .Op Fl subject_hash_old .Op Fl text .Op Fl trustout .Op Fl x509toreq .Ek .nr nS 0 .Pp The .Nm x509 command is a multi-purpose certificate utility. It can be used to display certificate information, convert certificates to various forms, sign certificate requests like a .Qq mini CA , or edit certificate trust settings. .Pp Since there are a large number of options, they are split up into various sections. .Sh X509 INPUT, OUTPUT, AND GENERAL PURPOSE OPTIONS .Bl -tag -width "XXXX" .It Fl in Ar file This specifies the input .Ar file to read a certificate from, or standard input if this option is not specified. .It Fl inform Ar DER | NET | PEM This specifies the input format. Normally, the command will expect an X.509 certificate, but this can change if other options such as .Fl req are present. The .Ar DER format is the DER encoding of the certificate and .Ar PEM is the base64 encoding of the DER encoding with header and footer lines added. The .Ar NET option is an obscure Netscape server format that is now obsolete. .It Fl md5 | sha1 The digest to use. This affects any signing or display option that uses a message digest, such as the .Fl fingerprint , signkey , and .Fl CA options. If not specified, MD5 is used. If the key being used to sign with is a DSA key, this option has no effect: SHA1 is always used with DSA keys. .It Fl out Ar file This specifies the output .Ar file to write to, or standard output by default. .It Fl outform Ar DER | NET | PEM This specifies the output format; the options have the same meaning as the .Fl inform option. .It Fl passin Ar arg The key password source. .El .Sh X509 DISPLAY OPTIONS .Sy Note : The .Fl alias and .Fl purpose options are also display options but are described in the .Sx X509 TRUST SETTINGS section. .Bl -tag -width "XXXX" .It Fl C This outputs the certificate in the form of a C source file. .It Fl certopt Ar option Customise the output format used with .Fl text . The .Ar option argument can be a single option or multiple options separated by commas. The .Fl certopt switch may also be used more than once to set multiple options. See the .Sx X509 TEXT OPTIONS section for more information. .It Fl dates Prints out the start and expiry dates of a certificate. .It Fl email Outputs the email address(es), if any. .It Fl enddate Prints out the expiry date of the certificate; that is, the .Em notAfter date. .It Fl fingerprint Prints out the digest of the DER-encoded version of the whole certificate (see .Sx DIGEST OPTIONS ) . .It Fl hash A synonym for .Fl subject_hash , for backwards compatibility. .It Fl issuer Outputs the issuer name. .It Fl issuer_hash Outputs the .Qq hash of the certificate issuer name. .It Fl issuer_hash_old Outputs the .Qq hash of the certificate issuer name using the older algorithm as used by .Nm OpenSSL versions before 1.0.0. .It Fl modulus This option prints out the value of the modulus of the public key contained in the certificate. .It Fl nameopt Ar option Option which determines how the subject or issuer names are displayed. The .Ar option argument can be a single option or multiple options separated by commas. Alternatively, the .Fl nameopt switch may be used more than once to set multiple options. See the .Sx X509 NAME OPTIONS section for more information. .It Fl noout This option prevents output of the encoded version of the request. .It Fl ocsp_uri Outputs the OCSP responder addresses, if any. .It Fl ocspid Print OCSP hash values for the subject name and public key. .It Fl pubkey Output the public key. .It Fl serial Outputs the certificate serial number. .It Fl startdate Prints out the start date of the certificate; that is, the .Em notBefore date. .It Fl subject Outputs the subject name. .It Fl subject_hash Outputs the .Qq hash of the certificate subject name. This is used in .Nm OpenSSL to form an index to allow certificates in a directory to be looked up by subject name. .It Fl subject_hash_old Outputs the .Qq hash of the certificate subject name using the older algorithm as used by .Nm OpenSSL versions before 1.0.0. .It Fl text Prints out the certificate in text form. Full details are output including the public key, signature algorithms, issuer and subject names, serial number, any extensions present, and any trust settings. .El .Sh X509 TRUST SETTINGS Please note these options are currently experimental and may well change. .Pp A .Em trusted certificate is an ordinary certificate which has several additional pieces of information attached to it such as the permitted and prohibited uses of the certificate and an .Qq alias . .Pp Normally, when a certificate is being verified at least one certificate must be .Qq trusted . By default, a trusted certificate must be stored locally and must be a root CA: any certificate chain ending in this CA is then usable for any purpose. .Pp Trust settings currently are only used with a root CA. They allow a finer control over the purposes the root CA can be used for. For example, a CA may be trusted for an SSL client but not for SSL server use. .Pp See the description of the .Nm verify utility for more information on the meaning of trust settings. .Pp Future versions of .Nm OpenSSL will recognize trust settings on any certificate: not just root CAs. .Bl -tag -width "XXXX" .It Fl addreject Ar arg Adds a prohibited use. It accepts the same values as the .Fl addtrust option. .It Fl addtrust Ar arg Adds a trusted certificate use. Any object name can be used here, but currently only .Ar clientAuth .Pq SSL client use , .Ar serverAuth .Pq SSL server use , and .Ar emailProtection .Pq S/MIME email are used. Other .Nm OpenSSL applications may define additional uses. .It Fl alias Outputs the certificate alias, if any. .It Fl clrreject Clears all the prohibited or rejected uses of the certificate. .It Fl clrtrust Clears all the permitted or trusted uses of the certificate. .It Fl purpose This option performs tests on the certificate extensions and outputs the results. For a more complete description, see the .Sx X.509 CERTIFICATE EXTENSIONS section. .It Fl setalias Ar arg Sets the alias of the certificate. This will allow the certificate to be referred to using a nickname, for example .Qq Steve's Certificate . .It Fl trustout This causes .Nm x509 to output a .Em trusted certificate . An ordinary or trusted certificate can be input, but by default an ordinary certificate is output and any trust settings are discarded. With the .Fl trustout option a trusted certificate is output. A trusted certificate is automatically output if any trust settings are modified. .El .Sh X509 SIGNING OPTIONS The .Nm x509 utility can be used to sign certificates and requests: it can thus behave like a .Qq mini CA . .Bl -tag -width "XXXX" .It Fl CA Ar file Specifies the CA certificate to be used for signing. When this option is present, .Nm x509 behaves like a .Qq mini CA . The input file is signed by the CA using this option; that is, its issuer name is set to the subject name of the CA and it is digitally signed using the CA's private key. .Pp This option is normally combined with the .Fl req option. Without the .Fl req option, the input is a certificate which must be self-signed. .It Fl CAcreateserial With this option the CA serial number file is created if it does not exist: it will contain the serial number .Sq 02 and the certificate being signed will have .Sq 1 as its serial number. Normally, if the .Fl CA option is specified and the serial number file does not exist, it is an error. .It Fl CAform Ar DER | PEM The format of the CA certificate file. The default is .Ar PEM . .It Fl CAkey Ar file Sets the CA private key to sign a certificate with. If this option is not specified, it is assumed that the CA private key is present in the CA certificate file. .It Fl CAkeyform Ar DER | PEM The format of the CA private key. The default is .Ar PEM . .It Fl CAserial Ar file Sets the CA serial number file to use. .Pp When the .Fl CA option is used to sign a certificate, it uses a serial number specified in a file. This file consists of one line containing an even number of hex digits with the serial number to use. After each use the serial number is incremented and written out to the file again. .Pp The default filename consists of the CA certificate file base name with .Pa .srl appended. For example, if the CA certificate file is called .Pa mycacert.pem , it expects to find a serial number file called .Pa mycacert.srl . .It Fl checkend Ar arg Check whether the certificate expires in the next .Ar arg seconds. If so, exit with return value 1; otherwise exit with return value 0. .It Fl clrext Delete any extensions from a certificate. This option is used when a certificate is being created from another certificate (for example with the .Fl signkey or the .Fl CA options). Normally, all extensions are retained. .It Fl days Ar arg Specifies the number of days to make a certificate valid for. The default is 30 days. .It Fl extensions Ar section The section to add certificate extensions from. If this option is not specified, the extensions should either be contained in the unnamed .Pq default section or the default section should contain a variable called .Qq extensions which contains the section to use. .It Fl extfile Ar file File containing certificate extensions to use. If not specified, no extensions are added to the certificate. .It Fl keyform Ar DER | PEM Specifies the format .Pq DER or PEM of the private key file used in the .Fl signkey option. .It Fl req By default, a certificate is expected on input. With this option a certificate request is expected instead. .It Fl set_serial Ar n Specifies the serial number to use. This option can be used with either the .Fl signkey or .Fl CA options. If used in conjunction with the .Fl CA option, the serial number file (as specified by the .Fl CAserial or .Fl CAcreateserial options) is not used. .Pp The serial number can be decimal or hex (if preceded by .Sq 0x ) . Negative serial numbers can also be specified but their use is not recommended. .It Fl signkey Ar file This option causes the input file to be self-signed using the supplied private key. .Pp If the input file is a certificate, it sets the issuer name to the subject name .Pq i.e. makes it self-signed , changes the public key to the supplied value, and changes the start and end dates. The start date is set to the current time and the end date is set to a value determined by the .Fl days option. Any certificate extensions are retained unless the .Fl clrext option is supplied. .Pp If the input is a certificate request, a self-signed certificate is created using the supplied private key using the subject name in the request. .It Fl x509toreq Converts a certificate into a certificate request. The .Fl signkey option is used to pass the required private key. .El .Sh X509 NAME OPTIONS The .Fl nameopt command line switch determines how the subject and issuer names are displayed. If no .Fl nameopt switch is present, the default .Qq oneline format is used which is compatible with previous versions of .Nm OpenSSL . Each option is described in detail below; all options can be preceded by a .Sq - to turn the option off. Only .Ar compat , .Ar RFC2253 , .Ar oneline , and .Ar multiline will normally be used. .Bl -tag -width "XXXX" .It Ar align Align field values for a more readable output. Only usable with .Ar sep_multiline . .It Ar compat Use the old format. This is equivalent to specifying no name options at all. .It Ar dn_rev Reverse the fields of the DN. This is required by RFC 2253. As a side effect, this also reverses the order of multiple AVAs but this is permissible. .It Ar dump_all Dump all fields. This option, when used with .Ar dump_der , allows the DER encoding of the structure to be unambiguously determined. .It Ar dump_der When this option is set, any fields that need to be hexdumped will be dumped using the DER encoding of the field. Otherwise just the content octets will be displayed. Both options use the RFC 2253 #XXXX... format. .It Ar dump_nostr Dump non-character string types .Pq for example OCTET STRING ; if this option is not set, non-character string types will be displayed as though each content octet represents a single character. .It Ar dump_unknown Dump any field whose OID is not recognised by .Nm OpenSSL . .It Ar esc_2253 Escape the .Qq special characters required by RFC 2253 in a field that is .Dq \& ,+"\*(Lt\*(Gt; . Additionally, .Sq # is escaped at the beginning of a string and a space character at the beginning or end of a string. .It Ar esc_ctrl Escape control characters. That is, those with ASCII values less than 0x20 .Pq space and the delete .Pq 0x7f character. They are escaped using the RFC 2253 \eXX notation (where XX are two hex digits representing the character value). .It Ar esc_msb Escape characters with the MSB set; that is, with ASCII values larger than 127. .It Ar multiline A multiline format. It is equivalent to .Ar esc_ctrl , esc_msb , sep_multiline , .Ar space_eq , lname , and .Ar align . .It Ar no_type This option does not attempt to interpret multibyte characters in any way. That is, their content octets are merely dumped as though one octet represents each character. This is useful for diagnostic purposes but will result in rather odd looking output. .It Ar nofname , sname , lname , oid These options alter how the field name is displayed. .Ar nofname does not display the field at all. .Ar sname uses the .Qq short name form (CN for .Ar commonName , for example). .Ar lname uses the long form. .Ar oid represents the OID in numerical form and is useful for diagnostic purpose. .It Ar oneline A oneline format which is more readable than .Ar RFC2253 . It is equivalent to specifying the .Ar esc_2253 , esc_ctrl , esc_msb , utf8 , .Ar dump_nostr , dump_der , use_quote , sep_comma_plus_spc , .Ar space_eq , and .Ar sname options. .It Ar RFC2253 Displays names compatible with RFC 2253; equivalent to .Ar esc_2253 , esc_ctrl , .Ar esc_msb , utf8 , dump_nostr , dump_unknown , .Ar dump_der , sep_comma_plus , dn_rev , and .Ar sname . .It Ar sep_comma_plus , sep_comma_plus_space , sep_semi_plus_space , sep_multiline These options determine the field separators. The first character is between RDNs and the second between multiple AVAs (multiple AVAs are very rare and their use is discouraged). The options ending in .Qq space additionally place a space after the separator to make it more readable. The .Ar sep_multiline uses a linefeed character for the RDN separator and a spaced .Sq + for the AVA separator. It also indents the fields by four characters. .It Ar show_type Show the type of the ASN1 character string. The type precedes the field contents. For example .Qq BMPSTRING: Hello World . .It Ar space_eq Places spaces round the .Sq = character which follows the field name. .It Ar use_quote Escapes some characters by surrounding the whole string with .Sq \&" characters. Without the option, all escaping is done with the .Sq \e character. .It Ar utf8 Convert all strings to UTF8 format first. This is required by RFC 2253. If you are lucky enough to have a UTF8 compatible terminal, the use of this option (and .Em not setting .Ar esc_msb ) may result in the correct display of multibyte .Pq international characters. If this option is not present, multibyte characters larger than 0xff will be represented using the format \eUXXXX for 16 bits and \eWXXXXXXXX for 32 bits. Also, if this option is off, any UTF8Strings will be converted to their character form first. .El .Sh X509 TEXT OPTIONS As well as customising the name output format, it is also possible to customise the actual fields printed using the .Fl certopt options when the .Fl text option is present. The default behaviour is to print all fields. .Bl -tag -width "XXXX" .It Ar ca_default The value used by the .Nm ca utility; equivalent to .Ar no_issuer , no_pubkey , no_header , .Ar no_version , no_sigdump , and .Ar no_signame . .It Ar compatible Use the old format. This is equivalent to specifying no output options at all. .It Ar ext_default Retain default extension behaviour: attempt to print out unsupported certificate extensions. .It Ar ext_dump Hex dump unsupported extensions. .It Ar ext_error Print an error message for unsupported certificate extensions. .It Ar ext_parse ASN1 parse unsupported extensions. .It Ar no_aux Don't print out certificate trust information. .It Ar no_extensions Don't print out any X509V3 extensions. .It Ar no_header Don't print header information: that is, the lines saying .Qq Certificate and .Qq Data . .It Ar no_issuer Don't print out the issuer name. .It Ar no_pubkey Don't print out the public key. .It Ar no_serial Don't print out the serial number. .It Ar no_sigdump Don't give a hexadecimal dump of the certificate signature. .It Ar no_signame Don't print out the signature algorithm used. .It Ar no_subject Don't print out the subject name. .It Ar no_validity Don't print the validity; that is, the .Em notBefore and .Em notAfter fields. .It Ar no_version Don't print out the version number. .El .Sh X509 EXAMPLES Display the contents of a certificate: .Pp .Dl $ openssl x509 -in cert.pem -noout -text .Pp Display the certificate serial number: .Pp .Dl $ openssl x509 -in cert.pem -noout -serial .Pp Display the certificate subject name: .Pp .Dl $ openssl x509 -in cert.pem -noout -subject .Pp Display the certificate subject name in RFC 2253 form: .Pp .Dl $ openssl x509 -in cert.pem -noout -subject -nameopt RFC2253 .Pp Display the certificate subject name in oneline form on a terminal supporting UTF8: .Bd -literal -offset indent $ openssl x509 -in cert.pem -noout -subject \e -nameopt oneline,-esc_msb .Ed .Pp Display the certificate MD5 fingerprint: .Pp .Dl $ openssl x509 -in cert.pem -noout -fingerprint .Pp Display the certificate SHA1 fingerprint: .Pp .Dl $ openssl x509 -sha1 -in cert.pem -noout -fingerprint .Pp Convert a certificate from PEM to DER format: .Pp .Dl "$ openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER" .Pp Convert a certificate to a certificate request: .Bd -literal -offset indent $ openssl x509 -x509toreq -in cert.pem -out req.pem \e -signkey key.pem .Ed .Pp Convert a certificate request into a self-signed certificate using extensions for a CA: .Bd -literal -offset indent $ openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions \e v3_ca -signkey key.pem -out cacert.pem .Ed .Pp Sign a certificate request using the CA certificate above and add user certificate extensions: .Bd -literal -offset indent $ openssl x509 -req -in req.pem -extfile openssl.cnf -extensions \e v3_usr -CA cacert.pem -CAkey key.pem -CAcreateserial .Ed .Pp Set a certificate to be trusted for SSL client use and set its alias to .Qq Steve's Class 1 CA : .Bd -literal -offset indent $ openssl x509 -in cert.pem -addtrust clientAuth \e -setalias "Steve's Class 1 CA" -out trust.pem .Ed .Sh X509 NOTES The PEM format uses the header and footer lines: .Bd -unfilled -offset indent -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- .Ed .Pp It will also handle files containing: .Bd -unfilled -offset indent -----BEGIN X509 CERTIFICATE----- -----END X509 CERTIFICATE----- .Ed .Pp Trusted certificates have the lines: .Bd -unfilled -offset indent -----BEGIN TRUSTED CERTIFICATE----- -----END TRUSTED CERTIFICATE----- .Ed .Pp The conversion to UTF8 format used with the name options assumes that T61Strings use the ISO 8859-1 character set. This is wrong, but Netscape and MSIE do this, as do many certificates. So although this is incorrect it is more likely to display the majority of certificates correctly. .Pp The .Fl fingerprint option takes the digest of the DER-encoded certificate. This is commonly called a .Qq fingerprint . Because of the nature of message digests, the fingerprint of a certificate is unique to that certificate and two certificates with the same fingerprint can be considered to be the same. .Pp The Netscape fingerprint uses MD5, whereas MSIE uses SHA1. .Pp The .Fl email option searches the subject name and the subject alternative name extension. Only unique email addresses will be printed out: it will not print the same address more than once. .Sh X.509 CERTIFICATE EXTENSIONS The .Fl purpose option checks the certificate extensions and determines what the certificate can be used for. The actual checks done are rather complex and include various hacks and workarounds to handle broken certificates and software. .Pp The same code is used when verifying untrusted certificates in chains, so this section is useful if a chain is rejected by the verify code. .Pp The .Em basicConstraints extension CA flag is used to determine whether the certificate can be used as a CA. If the CA flag is true, it is a CA; if the CA flag is false, it is not a CA. .Em All CAs should have the CA flag set to true. .Pp If the .Em basicConstraints extension is absent, then the certificate is considered to be a .Qq possible CA ; other extensions are checked according to the intended use of the certificate. A warning is given in this case because the certificate should really not be regarded as a CA: however, it is allowed to be a CA to work around some broken software. .Pp If the certificate is a V1 certificate .Pq and thus has no extensions and it is self-signed, it is also assumed to be a CA but a warning is again given: this is to work around the problem of Verisign roots which are V1 self-signed certificates. .Pp If the .Em keyUsage extension is present, then additional restraints are made on the uses of the certificate. A CA certificate .Em must have the .Em keyCertSign bit set if the .Em keyUsage extension is present. .Pp The extended key usage extension places additional restrictions on the certificate uses. If this extension is present .Pq whether critical or not , the key can only be used for the purposes specified. .Pp A complete description of each test is given below. The comments about .Em basicConstraints and .Em keyUsage and V1 certificates above apply to .Em all CA certificates. .Bl -tag -width "XXXX" .It Ar SSL Client The extended key usage extension must be absent or include the .Qq web client authentication OID. .Ar keyUsage must be absent or it must have the .Em digitalSignature bit set. Netscape certificate type must be absent or it must have the SSL client bit set. .It Ar SSL Client CA The extended key usage extension must be absent or include the .Qq web client authentication OID. Netscape certificate type must be absent or it must have the SSL CA bit set: this is used as a work around if the .Em basicConstraints extension is absent. .It Ar SSL Server The extended key usage extension must be absent or include the .Qq web server authentication and/or one of the SGC OIDs. .Em keyUsage must be absent or it must have the .Em digitalSignature set, the .Em keyEncipherment set, or both bits set. Netscape certificate type must be absent or have the SSL server bit set. .It Ar SSL Server CA The extended key usage extension must be absent or include the .Qq web server authentication and/or one of the SGC OIDs. Netscape certificate type must be absent or the SSL CA bit must be set: this is used as a work around if the .Em basicConstraints extension is absent. .It Ar Netscape SSL Server For Netscape SSL clients to connect to an SSL server; it must have the .Em keyEncipherment bit set if the .Em keyUsage extension is present. This isn't always valid because some cipher suites use the key for digital signing. Otherwise it is the same as a normal SSL server. .It Ar Common S/MIME Client Tests The extended key usage extension must be absent or include the .Qq email protection OID. Netscape certificate type must be absent or should have the .Em S/MIME bit set. If the .Em S/MIME bit is not set in Netscape certificate type, then the SSL client bit is tolerated as an alternative but a warning is shown: this is because some Verisign certificates don't set the .Em S/MIME bit. .It Ar S/MIME Signing In addition to the common .Em S/MIME client tests, the .Em digitalSignature bit must be set if the .Em keyUsage extension is present. .It Ar S/MIME Encryption In addition to the common .Em S/MIME tests, the .Em keyEncipherment bit must be set if the .Em keyUsage extension is present. .It Ar S/MIME CA The extended key usage extension must be absent or include the .Qq email protection OID. Netscape certificate type must be absent or must have the .Em S/MIME CA bit set: this is used as a work around if the .Em basicConstraints extension is absent. .It Ar CRL Signing The .Em keyUsage extension must be absent or it must have the .Em CRL signing bit set. .It Ar CRL Signing CA The normal CA tests apply. Except in this case the .Em basicConstraints extension must be present. .El .Sh X509 BUGS Extensions in certificates are not transferred to certificate requests and vice versa. .Pp It is possible to produce invalid certificates or requests by specifying the wrong private key or using inconsistent options in some cases: these should be checked. .Pp There should be options to explicitly set such things as start and end dates, rather than an offset from the current time. .Pp The code to implement the verify behaviour described in the .Sx X509 TRUST SETTINGS is currently being developed. It thus describes the intended behaviour rather than the current behaviour. It is hoped that it will represent reality in .Nm OpenSSL 0.9.5 and later. .Sh X509 HISTORY Before .Nm OpenSSL 0.9.8, the default digest for RSA keys was MD5. .Pp The hash algorithm used in the .Fl subject_hash and .Fl issuer_hash options before .Nm OpenSSL 1.0.0 was based on the deprecated MD5 algorithm and the encoding of the distinguished name. In .Nm OpenSSL 1.0.0 and later it is based on a canonical version of the DN using SHA1. This means that any directories using the old form must have their links rebuilt using .Ar c_rehash or similar. .Sh COMMON NOTATION Several commands share a common syntax, as detailed below. .Pp Password arguments, typically specified using .Fl passin and .Fl passout for input and output passwords, allow passwords to be obtained from a variety of sources. Both of these options take a single argument, described below. If no password argument is given and a password is required, then the user is prompted to enter one: this will typically be read from the current terminal with echoing turned off. .Bl -tag -width "pass:password" -offset indent .It Cm pass : Ns Ar password The actual password is .Ar password . Since the password is visible to utilities, this form should only be used where security is not important. .It Cm env : Ns Ar var Obtain the password from the environment variable .Ar var . Since the environment of other processes is visible, this option should be used with caution. .It Cm file : Ns Ar path The first line of .Ar path is the password. If the same .Ar path argument is supplied to .Fl passin and .Fl passout , then the first line will be used for the input password and the next line for the output password. .Ar path need not refer to a regular file: it could, for example, refer to a device or named pipe. .It Cm fd : Ns Ar number Read the password from the file descriptor .Ar number . This can be used to send the data via a pipe, for example. .It Cm stdin Read the password from standard input. .El .Pp File formats, typically specified using .Fl inform and .Fl outform , indicate the type of file being read from or the file format to write. The argument is case insensitive. .Pp .Bl -tag -width Ds -offset indent -compact .It Cm der Distinguished Encoding Rules (DER) is a binary format. .It Cm pem Privacy Enhanced Mail (PEM) is base64-encoded. .It Cm txt Plain ASCII text. .El .Sh ENVIRONMENT The following environment variables affect the execution of .Nm openssl : .Bl -tag -width "/etc/ssl/openssl.cnf" .It Ev OPENSSL_CONF The location of the master configuration file. .El .\" .\" FILES .\" .Sh FILES .Bl -tag -width "/etc/ssl/openssl.cnf" -compact .It Pa /etc/ssl/ Default config directory for .Nm openssl . .It Pa /etc/ssl/lib/ Unused. .It Pa /etc/ssl/private/ Default private key directory. .It Pa /etc/ssl/openssl.cnf Default configuration file for .Nm openssl . .It Pa /etc/ssl/x509v3.cnf Default configuration file for .Nm x509 certificates. .El .\" .\" SEE ALSO .\" .Sh SEE ALSO .Xr nc 1 , .Xr ssl 8 , .Xr starttls 8 .Sh STANDARDS .Rs .%D February 1995 .%Q Netscape Communications Corp. .%T The SSL Protocol .Re .Pp .Rs .%D November 1996 .%Q Netscape Communications Corp. .%T The SSL 3.0 Protocol .Re .Pp .Rs .%A T. Dierks .%A C. Allen .%D January 1999 .%R RFC 2246 .%T The TLS Protocol Version 1.0 .Re .Pp .Rs .%A M. Wahl .%A S. Killie .%A T. Howes .%D December 1997 .%R RFC 2253 .%T Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names .Re .Pp .Rs .%A B. Kaliski .%D March 1998 .%R RFC 2315 .%T PKCS #7: Cryptographic Message Syntax Version 1.5 .Re .Pp .Rs .%A R. Housley .%A W. Ford .%A W. Polk .%A D. Solo .%D January 1999 .%R RFC 2459 .%T Internet X.509 Public Key Infrastructure Certificate and CRL Profile .Re .Pp .Rs .%A M. Myers .%A R. Ankney .%A A. Malpani .%A S. Galperin .%A C. Adams .%D June 1999 .%R RFC 2560 .%T X.509 Internet Public Key Infrastructure Online Certificate Status Protocol \(en OCSP .Re .Pp .Rs .%A R. Housley .%D June 1999 .%R RFC 2630 .%T Cryptographic Message Syntax .Re .Pp .Rs .%A P. Chown .%D June 2002 .%R RFC 3268 .%T Advanced Encryption Standard (AES) Ciphersuites for Transport Layer Security (TLS) .Re .\" .\" OPENSSL HISTORY .\" .Sh HISTORY The .Xr openssl 1 document appeared in .Nm OpenSSL 0.9.2. The .Cm list- Ns XXX Ns Cm -commands pseudo-commands were added in .Nm OpenSSL 0.9.3; the .Cm no- Ns XXX pseudo-commands were added in .Nm OpenSSL 0.9.5a; the .Cm list- Ns XXX Ns Cm -algorithms pseudo-commands were added in .Nm OpenSSL 1.0.0. |
Added jni/libressl/apps/openssl/openssl.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 | /* $OpenBSD: openssl.c,v 1.22 2015/12/01 01:24:47 beck Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <err.h> #include <signal.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/conf.h> #include <openssl/crypto.h> #include <openssl/err.h> #include <openssl/lhash.h> #include <openssl/pem.h> #include <openssl/ssl.h> #include <openssl/x509.h> #include "progs.h" #include "s_apps.h" #define FUNC_TYPE_GENERAL 1 #define FUNC_TYPE_MD 2 #define FUNC_TYPE_CIPHER 3 #define FUNC_TYPE_PKEY 4 #define FUNC_TYPE_MD_ALG 5 #define FUNC_TYPE_CIPHER_ALG 6 int single_execution = 0; typedef struct { int type; const char *name; int (*func)(int argc, char **argv); } FUNCTION; DECLARE_LHASH_OF(FUNCTION); FUNCTION functions[] = { /* General functions. */ { FUNC_TYPE_GENERAL, "asn1parse", asn1parse_main }, { FUNC_TYPE_GENERAL, "ca", ca_main }, { FUNC_TYPE_GENERAL, "certhash", certhash_main }, { FUNC_TYPE_GENERAL, "ciphers", ciphers_main }, #ifndef OPENSSL_NO_CMS { FUNC_TYPE_GENERAL, "cms", cms_main }, #endif { FUNC_TYPE_GENERAL, "crl2pkcs7", crl2pkcs7_main }, { FUNC_TYPE_GENERAL, "crl", crl_main }, { FUNC_TYPE_GENERAL, "dgst", dgst_main }, { FUNC_TYPE_GENERAL, "enc", enc_main }, { FUNC_TYPE_GENERAL, "errstr", errstr_main }, { FUNC_TYPE_GENERAL, "genpkey", genpkey_main }, { FUNC_TYPE_GENERAL, "nseq", nseq_main }, #ifndef OPENSSL_NO_OCSP { FUNC_TYPE_GENERAL, "ocsp", ocsp_main }, #endif { FUNC_TYPE_GENERAL, "passwd", passwd_main }, { FUNC_TYPE_GENERAL, "pkcs7", pkcs7_main }, { FUNC_TYPE_GENERAL, "pkcs8", pkcs8_main }, #if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1) { FUNC_TYPE_GENERAL, "pkcs12", pkcs12_main }, #endif { FUNC_TYPE_GENERAL, "pkey", pkey_main }, { FUNC_TYPE_GENERAL, "pkeyparam", pkeyparam_main }, { FUNC_TYPE_GENERAL, "pkeyutl", pkeyutl_main }, { FUNC_TYPE_GENERAL, "prime", prime_main }, { FUNC_TYPE_GENERAL, "rand", rand_main }, { FUNC_TYPE_GENERAL, "req", req_main }, { FUNC_TYPE_GENERAL, "s_client", s_client_main }, { FUNC_TYPE_GENERAL, "s_server", s_server_main }, { FUNC_TYPE_GENERAL, "s_time", s_time_main }, { FUNC_TYPE_GENERAL, "sess_id", sess_id_main }, { FUNC_TYPE_GENERAL, "smime", smime_main }, #ifndef OPENSSL_NO_SPEED { FUNC_TYPE_GENERAL, "speed", speed_main }, #endif { FUNC_TYPE_GENERAL, "spkac", spkac_main }, { FUNC_TYPE_GENERAL, "ts", ts_main }, { FUNC_TYPE_GENERAL, "verify", verify_main }, { FUNC_TYPE_GENERAL, "version", version_main }, { FUNC_TYPE_GENERAL, "x509", x509_main }, #ifndef OPENSSL_NO_DH { FUNC_TYPE_GENERAL, "dh", dh_main }, { FUNC_TYPE_GENERAL, "dhparam", dhparam_main }, { FUNC_TYPE_GENERAL, "gendh", gendh_main }, #endif #ifndef OPENSSL_NO_DSA { FUNC_TYPE_GENERAL, "dsa", dsa_main }, { FUNC_TYPE_GENERAL, "dsaparam", dsaparam_main }, { FUNC_TYPE_GENERAL, "gendsa", gendsa_main }, #endif #ifndef OPENSSL_NO_EC { FUNC_TYPE_GENERAL, "ec", ec_main }, { FUNC_TYPE_GENERAL, "ecparam", ecparam_main }, #endif #ifndef OPENSSL_NO_RSA { FUNC_TYPE_GENERAL, "genrsa", genrsa_main }, { FUNC_TYPE_GENERAL, "rsa", rsa_main }, { FUNC_TYPE_GENERAL, "rsautl", rsautl_main }, #endif /* Message Digests. */ #ifndef OPENSSL_NO_GOST { FUNC_TYPE_MD, "gost-mac", dgst_main }, { FUNC_TYPE_MD, "md_gost94", dgst_main }, { FUNC_TYPE_MD, "streebog256", dgst_main }, { FUNC_TYPE_MD, "streebog512", dgst_main }, #endif #ifndef OPENSSL_NO_MD4 { FUNC_TYPE_MD, "md4", dgst_main }, #endif #ifndef OPENSSL_NO_MD5 { FUNC_TYPE_MD, "md5", dgst_main }, #endif #ifndef OPENSSL_NO_RIPEMD160 { FUNC_TYPE_MD, "ripemd160", dgst_main }, #endif #ifndef OPENSSL_NO_SHA1 { FUNC_TYPE_MD, "sha1", dgst_main }, #endif #ifndef OPENSSL_NO_SHA224 { FUNC_TYPE_MD, "sha224", dgst_main }, #endif #ifndef OPENSSL_NO_SHA256 { FUNC_TYPE_MD, "sha256", dgst_main }, #endif #ifndef OPENSSL_NO_SHA384 { FUNC_TYPE_MD, "sha384", dgst_main }, #endif #ifndef OPENSSL_NO_SHA512 { FUNC_TYPE_MD, "sha512", dgst_main }, #endif #ifndef OPENSSL_NO_WHIRLPOOL { FUNC_TYPE_MD, "whirlpool", dgst_main }, #endif /* Ciphers. */ { FUNC_TYPE_CIPHER, "base64", enc_main }, #ifndef OPENSSL_NO_AES { FUNC_TYPE_CIPHER, "aes-128-cbc", enc_main }, { FUNC_TYPE_CIPHER, "aes-128-ecb", enc_main }, { FUNC_TYPE_CIPHER, "aes-192-cbc", enc_main }, { FUNC_TYPE_CIPHER, "aes-192-ecb", enc_main }, { FUNC_TYPE_CIPHER, "aes-256-cbc", enc_main }, { FUNC_TYPE_CIPHER, "aes-256-ecb", enc_main }, #endif #ifndef OPENSSL_NO_BF { FUNC_TYPE_CIPHER, "bf", enc_main }, { FUNC_TYPE_CIPHER, "bf-cbc", enc_main }, { FUNC_TYPE_CIPHER, "bf-ecb", enc_main }, { FUNC_TYPE_CIPHER, "bf-cfb", enc_main }, { FUNC_TYPE_CIPHER, "bf-ofb", enc_main }, #endif #ifndef OPENSSL_NO_CAMELLIA { FUNC_TYPE_CIPHER, "camellia-128-cbc", enc_main }, { FUNC_TYPE_CIPHER, "camellia-128-ecb", enc_main }, { FUNC_TYPE_CIPHER, "camellia-192-cbc", enc_main }, { FUNC_TYPE_CIPHER, "camellia-192-ecb", enc_main }, { FUNC_TYPE_CIPHER, "camellia-256-cbc", enc_main }, { FUNC_TYPE_CIPHER, "camellia-256-ecb", enc_main }, #endif #ifndef OPENSSL_NO_CAST { FUNC_TYPE_CIPHER, "cast", enc_main }, { FUNC_TYPE_CIPHER, "cast5-cbc", enc_main }, { FUNC_TYPE_CIPHER, "cast5-ecb", enc_main }, { FUNC_TYPE_CIPHER, "cast5-cfb", enc_main }, { FUNC_TYPE_CIPHER, "cast5-ofb", enc_main }, { FUNC_TYPE_CIPHER, "cast-cbc", enc_main }, #endif #ifndef OPENSSL_NO_CHACHA { FUNC_TYPE_CIPHER, "chacha", enc_main }, #endif #ifndef OPENSSL_NO_DES { FUNC_TYPE_CIPHER, "des", enc_main }, { FUNC_TYPE_CIPHER, "des3", enc_main }, { FUNC_TYPE_CIPHER, "desx", enc_main }, { FUNC_TYPE_CIPHER, "des-ecb", enc_main }, { FUNC_TYPE_CIPHER, "des-ede", enc_main }, { FUNC_TYPE_CIPHER, "des-ede3", enc_main }, { FUNC_TYPE_CIPHER, "des-cbc", enc_main }, { FUNC_TYPE_CIPHER, "des-ede-cbc", enc_main }, { FUNC_TYPE_CIPHER, "des-ede3-cbc", enc_main }, { FUNC_TYPE_CIPHER, "des-cfb", enc_main }, { FUNC_TYPE_CIPHER, "des-ede-cfb", enc_main }, { FUNC_TYPE_CIPHER, "des-ede3-cfb", enc_main }, { FUNC_TYPE_CIPHER, "des-ofb", enc_main }, { FUNC_TYPE_CIPHER, "des-ede-ofb", enc_main }, { FUNC_TYPE_CIPHER, "des-ede3-ofb", enc_main }, #endif #ifndef OPENSSL_NO_IDEA { FUNC_TYPE_CIPHER, "idea", enc_main }, { FUNC_TYPE_CIPHER, "idea-cbc", enc_main }, { FUNC_TYPE_CIPHER, "idea-ecb", enc_main }, { FUNC_TYPE_CIPHER, "idea-cfb", enc_main }, { FUNC_TYPE_CIPHER, "idea-ofb", enc_main }, #endif #ifndef OPENSSL_NO_RC2 { FUNC_TYPE_CIPHER, "rc2", enc_main }, { FUNC_TYPE_CIPHER, "rc2-cbc", enc_main }, { FUNC_TYPE_CIPHER, "rc2-ecb", enc_main }, { FUNC_TYPE_CIPHER, "rc2-cfb", enc_main }, { FUNC_TYPE_CIPHER, "rc2-ofb", enc_main }, { FUNC_TYPE_CIPHER, "rc2-64-cbc", enc_main }, { FUNC_TYPE_CIPHER, "rc2-40-cbc", enc_main }, #endif #ifndef OPENSSL_NO_RC4 { FUNC_TYPE_CIPHER, "rc4", enc_main }, { FUNC_TYPE_CIPHER, "rc4-40", enc_main }, #endif #ifdef ZLIB { FUNC_TYPE_CIPHER, "zlib", enc_main }, #endif { 0, NULL, NULL } }; static void openssl_startup(void); static void openssl_shutdown(void); /* The LHASH callbacks ("hash" & "cmp") have been replaced by functions with the * base prototypes (we cast each variable inside the function to the required * type of "FUNCTION*"). This removes the necessity for macro-generated wrapper * functions. */ static LHASH_OF(FUNCTION) *prog_init(void); static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]); static void list_pkey(BIO * out); static void list_cipher(BIO * out); static void list_md(BIO * out); char *default_config_file = NULL; CONF *config = NULL; BIO *bio_err = NULL; static void lock_dbg_cb(int mode, int type, const char *file, int line) { static int modes[CRYPTO_NUM_LOCKS]; /* = {0, 0, ... } */ const char *errstr = NULL; int rw; rw = mode & (CRYPTO_READ | CRYPTO_WRITE); if (!((rw == CRYPTO_READ) || (rw == CRYPTO_WRITE))) { errstr = "invalid mode"; goto err; } if (type < 0 || type >= CRYPTO_NUM_LOCKS) { errstr = "type out of bounds"; goto err; } if (mode & CRYPTO_LOCK) { if (modes[type]) { errstr = "already locked"; /* * must not happen in a single-threaded program * (would deadlock) */ goto err; } modes[type] = rw; } else if (mode & CRYPTO_UNLOCK) { if (!modes[type]) { errstr = "not locked"; goto err; } if (modes[type] != rw) { errstr = (rw == CRYPTO_READ) ? "CRYPTO_r_unlock on write lock" : "CRYPTO_w_unlock on read lock"; } modes[type] = 0; } else { errstr = "invalid mode"; goto err; } err: if (errstr) { /* we cannot use bio_err here */ fprintf(stderr, "openssl (lock_dbg_cb): %s (mode=%d, type=%d) at %s:%d\n", errstr, mode, type, file, line); } } static void openssl_startup(void) { #ifndef _WIN32 signal(SIGPIPE, SIG_IGN); #endif OpenSSL_add_all_algorithms(); SSL_library_init(); SSL_load_error_strings(); setup_ui(); } static void openssl_shutdown(void) { CONF_modules_unload(1); destroy_ui(); OBJ_cleanup(); EVP_cleanup(); CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); ERR_free_strings(); } int main(int argc, char **argv) { ARGS arg; #define PROG_NAME_SIZE 39 char pname[PROG_NAME_SIZE + 1]; FUNCTION f, *fp; const char *prompt; char buf[1024]; char *to_free = NULL; int n, i, ret = 0; char *p; LHASH_OF(FUNCTION) * prog = NULL; long errline; arg.data = NULL; arg.count = 0; if (pledge("stdio inet dns rpath wpath cpath proc flock tty", NULL) == -1) { fprintf(stderr, "openssl: pledge: %s\n", strerror(errno)); exit(1); } bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); if (bio_err == NULL) { fprintf(stderr, "openssl: failed to initialise bio_err\n"); exit(1); } if (BIO_sock_init() != 1) { BIO_printf(bio_err, "BIO_sock_init failed\n"); exit(1); } CRYPTO_set_locking_callback(lock_dbg_cb); openssl_startup(); /* Lets load up our environment a little */ p = getenv("OPENSSL_CONF"); if (p == NULL) { p = to_free = make_config_name(); if (p == NULL) { BIO_printf(bio_err, "error making config file name\n"); goto end; } } default_config_file = p; config = NCONF_new(NULL); i = NCONF_load(config, p, &errline); if (i == 0) { if (ERR_GET_REASON(ERR_peek_last_error()) == CONF_R_NO_SUCH_FILE) { BIO_printf(bio_err, "WARNING: can't open config file: %s\n", p); ERR_clear_error(); NCONF_free(config); config = NULL; } else { ERR_print_errors(bio_err); NCONF_free(config); exit(1); } } if (!load_config(bio_err, NULL)) { BIO_printf(bio_err, "failed to load configuration\n"); goto end; } prog = prog_init(); /* first check the program name */ program_name(argv[0], pname, sizeof pname); f.name = pname; fp = lh_FUNCTION_retrieve(prog, &f); if (fp != NULL) { argv[0] = pname; single_execution = 1; ret = fp->func(argc, argv); goto end; } /* * ok, now check that there are not arguments, if there are, run with * them, shifting the ssleay off the front */ if (argc != 1) { argc--; argv++; single_execution = 1; ret = do_cmd(prog, argc, argv); if (ret < 0) ret = 0; goto end; } /* ok, lets enter the old 'OpenSSL>' mode */ for (;;) { ret = 0; p = buf; n = sizeof buf; i = 0; for (;;) { p[0] = '\0'; if (i++) prompt = ">"; else prompt = "OpenSSL> "; fputs(prompt, stdout); fflush(stdout); if (!fgets(p, n, stdin)) goto end; if (p[0] == '\0') goto end; i = strlen(p); if (i <= 1) break; if (p[i - 2] != '\\') break; i -= 2; p += i; n -= i; } if (!chopup_args(&arg, buf, &argc, &argv)) break; ret = do_cmd(prog, argc, argv); if (ret < 0) { ret = 0; goto end; } if (ret != 0) BIO_printf(bio_err, "error in %s\n", argv[0]); (void) BIO_flush(bio_err); } BIO_printf(bio_err, "bad exit\n"); ret = 1; end: free(to_free); if (config != NULL) { NCONF_free(config); config = NULL; } if (prog != NULL) lh_FUNCTION_free(prog); free(arg.data); openssl_shutdown(); if (bio_err != NULL) { BIO_free(bio_err); bio_err = NULL; } return (ret); } #define LIST_STANDARD_COMMANDS "list-standard-commands" #define LIST_MESSAGE_DIGEST_COMMANDS "list-message-digest-commands" #define LIST_MESSAGE_DIGEST_ALGORITHMS "list-message-digest-algorithms" #define LIST_CIPHER_COMMANDS "list-cipher-commands" #define LIST_CIPHER_ALGORITHMS "list-cipher-algorithms" #define LIST_PUBLIC_KEY_ALGORITHMS "list-public-key-algorithms" static int do_cmd(LHASH_OF(FUNCTION) * prog, int argc, char *argv[]) { FUNCTION f, *fp; int i, ret = 1, tp, nl; if ((argc <= 0) || (argv[0] == NULL)) { ret = 0; goto end; } f.name = argv[0]; fp = lh_FUNCTION_retrieve(prog, &f); if (fp == NULL) { if (EVP_get_digestbyname(argv[0])) { f.type = FUNC_TYPE_MD; f.func = dgst_main; fp = &f; } else if (EVP_get_cipherbyname(argv[0])) { f.type = FUNC_TYPE_CIPHER; f.func = enc_main; fp = &f; } } if (fp != NULL) { ret = fp->func(argc, argv); } else if ((strncmp(argv[0], "no-", 3)) == 0) { BIO *bio_stdout = BIO_new_fp(stdout, BIO_NOCLOSE); f.name = argv[0] + 3; ret = (lh_FUNCTION_retrieve(prog, &f) != NULL); if (!ret) BIO_printf(bio_stdout, "%s\n", argv[0]); else BIO_printf(bio_stdout, "%s\n", argv[0] + 3); BIO_free_all(bio_stdout); goto end; } else if ((strcmp(argv[0], "quit") == 0) || (strcmp(argv[0], "q") == 0) || (strcmp(argv[0], "exit") == 0) || (strcmp(argv[0], "bye") == 0)) { ret = -1; goto end; } else if ((strcmp(argv[0], LIST_STANDARD_COMMANDS) == 0) || (strcmp(argv[0], LIST_MESSAGE_DIGEST_COMMANDS) == 0) || (strcmp(argv[0], LIST_MESSAGE_DIGEST_ALGORITHMS) == 0) || (strcmp(argv[0], LIST_CIPHER_COMMANDS) == 0) || (strcmp(argv[0], LIST_CIPHER_ALGORITHMS) == 0) || (strcmp(argv[0], LIST_PUBLIC_KEY_ALGORITHMS) == 0)) { int list_type; BIO *bio_stdout; if (strcmp(argv[0], LIST_STANDARD_COMMANDS) == 0) list_type = FUNC_TYPE_GENERAL; else if (strcmp(argv[0], LIST_MESSAGE_DIGEST_COMMANDS) == 0) list_type = FUNC_TYPE_MD; else if (strcmp(argv[0], LIST_MESSAGE_DIGEST_ALGORITHMS) == 0) list_type = FUNC_TYPE_MD_ALG; else if (strcmp(argv[0], LIST_PUBLIC_KEY_ALGORITHMS) == 0) list_type = FUNC_TYPE_PKEY; else if (strcmp(argv[0], LIST_CIPHER_ALGORITHMS) == 0) list_type = FUNC_TYPE_CIPHER_ALG; else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */ list_type = FUNC_TYPE_CIPHER; bio_stdout = BIO_new_fp(stdout, BIO_NOCLOSE); if (list_type == FUNC_TYPE_PKEY) list_pkey(bio_stdout); if (list_type == FUNC_TYPE_MD_ALG) list_md(bio_stdout); if (list_type == FUNC_TYPE_CIPHER_ALG) list_cipher(bio_stdout); else { for (fp = functions; fp->name != NULL; fp++) if (fp->type == list_type) BIO_printf(bio_stdout, "%s\n", fp->name); } BIO_free_all(bio_stdout); ret = 0; goto end; } else { BIO_printf(bio_err, "openssl:Error: '%s' is an invalid command.\n", argv[0]); BIO_printf(bio_err, "\nStandard commands"); i = 0; tp = 0; for (fp = functions; fp->name != NULL; fp++) { nl = 0; #ifdef OPENSSL_NO_CAMELLIA if (((i++) % 5) == 0) #else if (((i++) % 4) == 0) #endif { BIO_printf(bio_err, "\n"); nl = 1; } if (fp->type != tp) { tp = fp->type; if (!nl) BIO_printf(bio_err, "\n"); if (tp == FUNC_TYPE_MD) { i = 1; BIO_printf(bio_err, "\nMessage Digest commands (see the `dgst' command for more details)\n"); } else if (tp == FUNC_TYPE_CIPHER) { i = 1; BIO_printf(bio_err, "\nCipher commands (see the `enc' command for more details)\n"); } } #ifdef OPENSSL_NO_CAMELLIA BIO_printf(bio_err, "%-15s", fp->name); #else BIO_printf(bio_err, "%-18s", fp->name); #endif } BIO_printf(bio_err, "\n\n"); ret = 0; } end: return (ret); } static int SortFnByName(const void *_f1, const void *_f2) { const FUNCTION *f1 = _f1; const FUNCTION *f2 = _f2; if (f1->type != f2->type) return f1->type - f2->type; return strcmp(f1->name, f2->name); } static void list_pkey(BIO * out) { int i; for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) { const EVP_PKEY_ASN1_METHOD *ameth; int pkey_id, pkey_base_id, pkey_flags; const char *pinfo, *pem_str; ameth = EVP_PKEY_asn1_get0(i); EVP_PKEY_asn1_get0_info(&pkey_id, &pkey_base_id, &pkey_flags, &pinfo, &pem_str, ameth); if (pkey_flags & ASN1_PKEY_ALIAS) { BIO_printf(out, "Name: %s\n", OBJ_nid2ln(pkey_id)); BIO_printf(out, "\tType: Alias to %s\n", OBJ_nid2ln(pkey_base_id)); } else { BIO_printf(out, "Name: %s\n", pinfo); BIO_printf(out, "\tType: %s Algorithm\n", pkey_flags & ASN1_PKEY_DYNAMIC ? "External" : "Builtin"); BIO_printf(out, "\tOID: %s\n", OBJ_nid2ln(pkey_id)); if (pem_str == NULL) pem_str = "(none)"; BIO_printf(out, "\tPEM string: %s\n", pem_str); } } } static void list_cipher_fn(const EVP_CIPHER * c, const char *from, const char *to, void *arg) { if (c) BIO_printf(arg, "%s\n", EVP_CIPHER_name(c)); else { if (!from) from = "<undefined>"; if (!to) to = "<undefined>"; BIO_printf(arg, "%s => %s\n", from, to); } } static void list_cipher(BIO * out) { EVP_CIPHER_do_all_sorted(list_cipher_fn, out); } static void list_md_fn(const EVP_MD * m, const char *from, const char *to, void *arg) { if (m) BIO_printf(arg, "%s\n", EVP_MD_name(m)); else { if (!from) from = "<undefined>"; if (!to) to = "<undefined>"; BIO_printf(arg, "%s => %s\n", from, to); } } static void list_md(BIO * out) { EVP_MD_do_all_sorted(list_md_fn, out); } static int function_cmp(const FUNCTION * a, const FUNCTION * b) { return strncmp(a->name, b->name, 8); } static IMPLEMENT_LHASH_COMP_FN(function, FUNCTION) static unsigned long function_hash(const FUNCTION * a) { return lh_strhash(a->name); } static IMPLEMENT_LHASH_HASH_FN(function, FUNCTION) static LHASH_OF(FUNCTION) * prog_init(void) { LHASH_OF(FUNCTION) * ret; FUNCTION *f; size_t i; /* Purely so it looks nice when the user hits ? */ for (i = 0, f = functions; f->name != NULL; ++f, ++i) ; qsort(functions, i, sizeof *functions, SortFnByName); if ((ret = lh_FUNCTION_new()) == NULL) return (NULL); for (f = functions; f->name != NULL; f++) (void) lh_FUNCTION_insert(ret, f); return (ret); } |
Added jni/libressl/apps/openssl/openssl.cnf.
> > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | [ req ] #default_bits = 2048 #default_md = sha256 #default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (eg, fully qualified host name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 |
Added jni/libressl/apps/openssl/passwd.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 | /* $OpenBSD: passwd.c,v 1.6 2015/10/17 07:51:10 semarie Exp $ */ #if defined OPENSSL_NO_MD5 #define NO_MD5CRYPT_1 #endif #if !defined(OPENSSL_NO_DES) || !defined(NO_MD5CRYPT_1) #include <assert.h> #include <string.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/err.h> #include <openssl/evp.h> #ifndef OPENSSL_NO_DES #include <openssl/des.h> #endif #ifndef NO_MD5CRYPT_1 #include <openssl/md5.h> #endif static unsigned const char cov_2char[64] = { /* from crypto/des/fcrypt.c */ 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A }; static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, char *passwd, BIO * out, int quiet, int table, int reverse, size_t pw_maxlen, int usecrypt, int use1, int useapr1); static struct { char *infile; int in_stdin; int noverify; int quiet; int reverse; char *salt; int table; int use1; int useapr1; int usecrypt; } passwd_config; static struct option passwd_options[] = { #ifndef NO_MD5CRYPT_1 { .name = "1", .desc = "Use MD5 based BSD password algorithm 1", .type = OPTION_FLAG, .opt.flag = &passwd_config.use1, }, { .name = "apr1", .desc = "Use apr1 algorithm (Apache variant of BSD algorithm)", .type = OPTION_FLAG, .opt.flag = &passwd_config.useapr1, }, #endif #ifndef OPENSSL_NO_DES { .name = "crypt", .desc = "Use crypt algorithm (default)", .type = OPTION_FLAG, .opt.flag = &passwd_config.usecrypt, }, #endif { .name = "in", .argname = "file", .desc = "Read passwords from specified file", .type = OPTION_ARG, .opt.arg = &passwd_config.infile, }, { .name = "noverify", .desc = "Do not verify password", .type = OPTION_FLAG, .opt.flag = &passwd_config.noverify, }, { .name = "quiet", .desc = "Do not output warnings", .type = OPTION_FLAG, .opt.flag = &passwd_config.quiet, }, { .name = "reverse", .desc = "Reverse table columns (requires -table)", .type = OPTION_FLAG, .opt.flag = &passwd_config.reverse, }, { .name = "salt", .argname = "string", .desc = "Use specified salt", .type = OPTION_ARG, .opt.arg = &passwd_config.salt, }, { .name = "stdin", .desc = "Read passwords from stdin", .type = OPTION_FLAG, .opt.flag = &passwd_config.in_stdin, }, { .name = "table", .desc = "Output cleartext and hashed passwords (tab separated)", .type = OPTION_FLAG, .opt.flag = &passwd_config.table, }, { NULL }, }; static void passwd_usage(void) { fprintf(stderr, "usage: passwd [-1 | -apr1 | -crypt] [-in file] " "[-noverify] [-quiet]\n" " [-reverse] [-salt string] [-stdin] [-table] [password]\n\n"); options_usage(passwd_options); } int passwd_main(int argc, char **argv) { char *passwd = NULL, **passwds = NULL; char *salt_malloc = NULL, *passwd_malloc = NULL; size_t passwd_malloc_size = 0; BIO *in = NULL, *out = NULL; int badopt = 0; int passed_salt = 0; size_t pw_maxlen = 0; int argsused; int ret = 1; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } memset(&passwd_config, 0, sizeof(passwd_config)); if (options_parse(argc, argv, passwd_options, NULL, &argsused) != 0) { passwd_usage(); goto err; } if (argsused < argc) passwds = &argv[argsused]; if (passwd_config.salt != NULL) passed_salt = 1; if (!passwd_config.usecrypt && !passwd_config.use1 && !passwd_config.useapr1) passwd_config.usecrypt = 1; /* use default */ if (passwd_config.usecrypt + passwd_config.use1 + passwd_config.useapr1 > 1) badopt = 1; /* conflicting options */ /* Reject unsupported algorithms */ #ifdef OPENSSL_NO_DES if (passwd_config.usecrypt) badopt = 1; #endif #ifdef NO_MD5CRYPT_1 if (passwd_config.use1 || passwd_config.useapr1) badopt = 1; #endif if (badopt) { passwd_usage(); goto err; } if ((out = BIO_new(BIO_s_file())) == NULL) goto err; BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); if (passwd_config.infile != NULL || passwd_config.in_stdin) { if ((in = BIO_new(BIO_s_file())) == NULL) goto err; if (passwd_config.infile != NULL) { assert(passwd_config.in_stdin == 0); if (BIO_read_filename(in, passwd_config.infile) <= 0) goto err; } else { assert(passwd_config.in_stdin); BIO_set_fp(in, stdin, BIO_NOCLOSE); } } if (passwd_config.usecrypt) pw_maxlen = 8; else if (passwd_config.use1 || passwd_config.useapr1) pw_maxlen = 256;/* arbitrary limit, should be enough for most * passwords */ if (passwds == NULL) { /* no passwords on the command line */ passwd_malloc_size = pw_maxlen + 2; /* longer than necessary so that we can warn about truncation */ passwd = passwd_malloc = malloc(passwd_malloc_size); if (passwd_malloc == NULL) goto err; } if (in == NULL && passwds == NULL) { /* build a null-terminated list */ static char *passwds_static[2] = {NULL, NULL}; passwds = passwds_static; if (in == NULL) if (EVP_read_pw_string(passwd_malloc, passwd_malloc_size, "Password: ", !(passed_salt || passwd_config.noverify)) != 0) goto err; passwds[0] = passwd_malloc; } if (in == NULL) { assert(passwds != NULL); assert(*passwds != NULL); do { /* loop over list of passwords */ passwd = *passwds++; if (!do_passwd(passed_salt, &passwd_config.salt, &salt_malloc, passwd, out, passwd_config.quiet, passwd_config.table, passwd_config.reverse, pw_maxlen, passwd_config.usecrypt, passwd_config.use1, passwd_config.useapr1)) goto err; } while (*passwds != NULL); } else { int done; assert(passwd != NULL); do { int r = BIO_gets(in, passwd, pw_maxlen + 1); if (r > 0) { char *c = (strchr(passwd, '\n')); if (c != NULL) *c = 0; /* truncate at newline */ else { /* ignore rest of line */ char trash[BUFSIZ]; do r = BIO_gets(in, trash, sizeof trash); while ((r > 0) && (!strchr(trash, '\n'))); } if (!do_passwd(passed_salt, &passwd_config.salt, &salt_malloc, passwd, out, passwd_config.quiet, passwd_config.table, passwd_config.reverse, pw_maxlen, passwd_config.usecrypt, passwd_config.use1, passwd_config.useapr1)) goto err; } done = (r <= 0); } while (!done); } ret = 0; err: ERR_print_errors(bio_err); free(salt_malloc); free(passwd_malloc); BIO_free(in); BIO_free_all(out); return (ret); } #ifndef NO_MD5CRYPT_1 /* MD5-based password algorithm (should probably be available as a library * function; then the static buffer would not be acceptable). * For magic string "1", this should be compatible to the MD5-based BSD * password algorithm. * For 'magic' string "apr1", this is compatible to the MD5-based Apache * password algorithm. * (Apparently, the Apache password algorithm is identical except that the * 'magic' string was changed -- the laziest application of the NIH principle * I've ever encountered.) */ static char * md5crypt(const char *passwd, const char *magic, const char *salt) { static char out_buf[6 + 9 + 24 + 2]; /* "$apr1$..salt..$.......md5h * ash..........\0" */ unsigned char buf[MD5_DIGEST_LENGTH]; char *salt_out; int n; unsigned int i; EVP_MD_CTX md, md2; size_t passwd_len, salt_len; passwd_len = strlen(passwd); out_buf[0] = '$'; out_buf[1] = 0; assert(strlen(magic) <= 4); /* "1" or "apr1" */ strlcat(out_buf, magic, sizeof(out_buf)); strlcat(out_buf, "$", sizeof(out_buf)); strlcat(out_buf, salt, sizeof(out_buf)); assert(strlen(out_buf) <= 6 + 8); /* "$apr1$..salt.." */ salt_out = out_buf + 2 + strlen(magic); salt_len = strlen(salt_out); assert(salt_len <= 8); EVP_MD_CTX_init(&md); EVP_DigestInit_ex(&md, EVP_md5(), NULL); EVP_DigestUpdate(&md, passwd, passwd_len); EVP_DigestUpdate(&md, "$", 1); EVP_DigestUpdate(&md, magic, strlen(magic)); EVP_DigestUpdate(&md, "$", 1); EVP_DigestUpdate(&md, salt_out, salt_len); EVP_MD_CTX_init(&md2); EVP_DigestInit_ex(&md2, EVP_md5(), NULL); EVP_DigestUpdate(&md2, passwd, passwd_len); EVP_DigestUpdate(&md2, salt_out, salt_len); EVP_DigestUpdate(&md2, passwd, passwd_len); EVP_DigestFinal_ex(&md2, buf, NULL); for (i = passwd_len; i > sizeof buf; i -= sizeof buf) EVP_DigestUpdate(&md, buf, sizeof buf); EVP_DigestUpdate(&md, buf, i); n = passwd_len; while (n) { EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1); n >>= 1; } EVP_DigestFinal_ex(&md, buf, NULL); for (i = 0; i < 1000; i++) { EVP_DigestInit_ex(&md2, EVP_md5(), NULL); EVP_DigestUpdate(&md2, (i & 1) ? (unsigned const char *) passwd : buf, (i & 1) ? passwd_len : sizeof buf); if (i % 3) EVP_DigestUpdate(&md2, salt_out, salt_len); if (i % 7) EVP_DigestUpdate(&md2, passwd, passwd_len); EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned const char *) passwd, (i & 1) ? sizeof buf : passwd_len); EVP_DigestFinal_ex(&md2, buf, NULL); } EVP_MD_CTX_cleanup(&md2); { /* transform buf into output string */ unsigned char buf_perm[sizeof buf]; int dest, source; char *output; /* silly output permutation */ for (dest = 0, source = 0; dest < 14; dest++, source = (source + 6) % 17) buf_perm[dest] = buf[source]; buf_perm[14] = buf[5]; buf_perm[15] = buf[11]; assert(16 == sizeof buf_perm); output = salt_out + salt_len; assert(output == out_buf + strlen(out_buf)); *output++ = '$'; for (i = 0; i < 15; i += 3) { *output++ = cov_2char[buf_perm[i + 2] & 0x3f]; *output++ = cov_2char[((buf_perm[i + 1] & 0xf) << 2) | (buf_perm[i + 2] >> 6)]; *output++ = cov_2char[((buf_perm[i] & 3) << 4) | (buf_perm[i + 1] >> 4)]; *output++ = cov_2char[buf_perm[i] >> 2]; } assert(i == 15); *output++ = cov_2char[buf_perm[i] & 0x3f]; *output++ = cov_2char[buf_perm[i] >> 6]; *output = 0; assert(strlen(out_buf) < sizeof(out_buf)); } EVP_MD_CTX_cleanup(&md); return out_buf; } #endif static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, char *passwd, BIO * out, int quiet, int table, int reverse, size_t pw_maxlen, int usecrypt, int use1, int useapr1) { char *hash = NULL; assert(salt_p != NULL); assert(salt_malloc_p != NULL); /* first make sure we have a salt */ if (!passed_salt) { #ifndef OPENSSL_NO_DES if (usecrypt) { if (*salt_malloc_p == NULL) { *salt_p = *salt_malloc_p = malloc(3); if (*salt_malloc_p == NULL) goto err; } arc4random_buf(*salt_p, 2); (*salt_p)[0] = cov_2char[(*salt_p)[0] & 0x3f]; /* 6 bits */ (*salt_p)[1] = cov_2char[(*salt_p)[1] & 0x3f]; /* 6 bits */ (*salt_p)[2] = 0; } #endif /* !OPENSSL_NO_DES */ #ifndef NO_MD5CRYPT_1 if (use1 || useapr1) { int i; if (*salt_malloc_p == NULL) { *salt_p = *salt_malloc_p = malloc(9); if (*salt_malloc_p == NULL) goto err; } arc4random_buf(*salt_p, 8); for (i = 0; i < 8; i++) (*salt_p)[i] = cov_2char[(*salt_p)[i] & 0x3f]; /* 6 bits */ (*salt_p)[8] = 0; } #endif /* !NO_MD5CRYPT_1 */ } assert(*salt_p != NULL); /* truncate password if necessary */ if ((strlen(passwd) > pw_maxlen)) { if (!quiet) /* * XXX: really we should know how to print a size_t, * not cast it */ BIO_printf(bio_err, "Warning: truncating password to %u characters\n", (unsigned) pw_maxlen); passwd[pw_maxlen] = 0; } assert(strlen(passwd) <= pw_maxlen); /* now compute password hash */ #ifndef OPENSSL_NO_DES if (usecrypt) hash = DES_crypt(passwd, *salt_p); #endif #ifndef NO_MD5CRYPT_1 if (use1 || useapr1) hash = md5crypt(passwd, (use1 ? "1" : "apr1"), *salt_p); #endif assert(hash != NULL); if (table && !reverse) BIO_printf(out, "%s\t%s\n", passwd, hash); else if (table && reverse) BIO_printf(out, "%s\t%s\n", hash, passwd); else BIO_printf(out, "%s\n", hash); return 1; err: return 0; } #else int passwd_main(int argc, char **argv) { fputs("Program not available.\n", stderr) return (1); } #endif |
Added jni/libressl/apps/openssl/pkcs12.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 | /* $OpenBSD: pkcs12.c,v 1.6 2015/10/17 07:51:10 semarie Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project. */ /* ==================================================================== * Copyright (c) 1999-2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <openssl/opensslconf.h> #if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1) #include <stdio.h> #include <stdlib.h> #include <string.h> #include "apps.h" #include <openssl/crypto.h> #include <openssl/err.h> #include <openssl/pem.h> #include <openssl/pkcs12.h> const EVP_CIPHER *enc; #define NOKEYS 0x1 #define NOCERTS 0x2 #define INFO 0x4 #define CLCERTS 0x8 #define CACERTS 0x10 int get_cert_chain(X509 * cert, X509_STORE * store, STACK_OF(X509) ** chain); int dump_certs_keys_p12(BIO * out, PKCS12 * p12, char *pass, int passlen, int options, char *pempass); int dump_certs_pkeys_bags(BIO * out, STACK_OF(PKCS12_SAFEBAG) * bags, char *pass, int passlen, int options, char *pempass); int dump_certs_pkeys_bag(BIO * out, PKCS12_SAFEBAG * bags, char *pass, int passlen, int options, char *pempass); int print_attribs(BIO * out, STACK_OF(X509_ATTRIBUTE) * attrlst, const char *name); void hex_prin(BIO * out, unsigned char *buf, int len); int alg_print(BIO * x, X509_ALGOR * alg); int cert_load(BIO * in, STACK_OF(X509) * sk); static int set_pbe(BIO * err, int *ppbe, const char *str); int pkcs12_main(int argc, char **argv) { char *infile = NULL, *outfile = NULL, *keyname = NULL; char *certfile = NULL; BIO *in = NULL, *out = NULL; char **args; char *name = NULL; char *csp_name = NULL; int add_lmk = 0; PKCS12 *p12 = NULL; char pass[50], macpass[50]; int export_cert = 0; int options = 0; int chain = 0; int badarg = 0; int iter = PKCS12_DEFAULT_ITER; int maciter = PKCS12_DEFAULT_ITER; int twopass = 0; int keytype = 0; int cert_pbe; int key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; int ret = 1; int macver = 1; int noprompt = 0; STACK_OF(OPENSSL_STRING) * canames = NULL; char *cpass = NULL, *mpass = NULL; char *passargin = NULL, *passargout = NULL, *passarg = NULL; char *passin = NULL, *passout = NULL; char *macalg = NULL; char *CApath = NULL, *CAfile = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC; enc = EVP_des_ede3_cbc(); args = argv + 1; while (*args) { if (*args[0] == '-') { if (!strcmp(*args, "-nokeys")) options |= NOKEYS; else if (!strcmp(*args, "-keyex")) keytype = KEY_EX; else if (!strcmp(*args, "-keysig")) keytype = KEY_SIG; else if (!strcmp(*args, "-nocerts")) options |= NOCERTS; else if (!strcmp(*args, "-clcerts")) options |= CLCERTS; else if (!strcmp(*args, "-cacerts")) options |= CACERTS; else if (!strcmp(*args, "-noout")) options |= (NOKEYS | NOCERTS); else if (!strcmp(*args, "-info")) options |= INFO; else if (!strcmp(*args, "-chain")) chain = 1; else if (!strcmp(*args, "-twopass")) twopass = 1; else if (!strcmp(*args, "-nomacver")) macver = 0; else if (!strcmp(*args, "-descert")) cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; else if (!strcmp(*args, "-export")) export_cert = 1; else if (!strcmp(*args, "-des")) enc = EVP_des_cbc(); else if (!strcmp(*args, "-des3")) enc = EVP_des_ede3_cbc(); #ifndef OPENSSL_NO_IDEA else if (!strcmp(*args, "-idea")) enc = EVP_idea_cbc(); #endif #ifndef OPENSSL_NO_AES else if (!strcmp(*args, "-aes128")) enc = EVP_aes_128_cbc(); else if (!strcmp(*args, "-aes192")) enc = EVP_aes_192_cbc(); else if (!strcmp(*args, "-aes256")) enc = EVP_aes_256_cbc(); #endif #ifndef OPENSSL_NO_CAMELLIA else if (!strcmp(*args, "-camellia128")) enc = EVP_camellia_128_cbc(); else if (!strcmp(*args, "-camellia192")) enc = EVP_camellia_192_cbc(); else if (!strcmp(*args, "-camellia256")) enc = EVP_camellia_256_cbc(); #endif else if (!strcmp(*args, "-noiter")) iter = 1; else if (!strcmp(*args, "-maciter")) maciter = PKCS12_DEFAULT_ITER; else if (!strcmp(*args, "-nomaciter")) maciter = 1; else if (!strcmp(*args, "-nomac")) maciter = -1; else if (!strcmp(*args, "-macalg")) if (args[1]) { args++; macalg = *args; } else badarg = 1; else if (!strcmp(*args, "-nodes")) enc = NULL; else if (!strcmp(*args, "-certpbe")) { if (!set_pbe(bio_err, &cert_pbe, *++args)) badarg = 1; } else if (!strcmp(*args, "-keypbe")) { if (!set_pbe(bio_err, &key_pbe, *++args)) badarg = 1; } else if (!strcmp(*args, "-inkey")) { if (args[1]) { args++; keyname = *args; } else badarg = 1; } else if (!strcmp(*args, "-certfile")) { if (args[1]) { args++; certfile = *args; } else badarg = 1; } else if (!strcmp(*args, "-name")) { if (args[1]) { args++; name = *args; } else badarg = 1; } else if (!strcmp(*args, "-LMK")) add_lmk = 1; else if (!strcmp(*args, "-CSP")) { if (args[1]) { args++; csp_name = *args; } else badarg = 1; } else if (!strcmp(*args, "-caname")) { if (args[1]) { args++; if (!canames) canames = sk_OPENSSL_STRING_new_null(); sk_OPENSSL_STRING_push(canames, *args); } else badarg = 1; } else if (!strcmp(*args, "-in")) { if (args[1]) { args++; infile = *args; } else badarg = 1; } else if (!strcmp(*args, "-out")) { if (args[1]) { args++; outfile = *args; } else badarg = 1; } else if (!strcmp(*args, "-passin")) { if (args[1]) { args++; passargin = *args; } else badarg = 1; } else if (!strcmp(*args, "-passout")) { if (args[1]) { args++; passargout = *args; } else badarg = 1; } else if (!strcmp(*args, "-password")) { if (args[1]) { args++; passarg = *args; noprompt = 1; } else badarg = 1; } else if (!strcmp(*args, "-CApath")) { if (args[1]) { args++; CApath = *args; } else badarg = 1; } else if (!strcmp(*args, "-CAfile")) { if (args[1]) { args++; CAfile = *args; } else badarg = 1; } else badarg = 1; } else badarg = 1; args++; } if (badarg) { BIO_printf(bio_err, "Usage: pkcs12 [options]\n"); BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err, "-export output PKCS12 file\n"); BIO_printf(bio_err, "-chain add certificate chain\n"); BIO_printf(bio_err, "-inkey file private key if not infile\n"); BIO_printf(bio_err, "-certfile f add all certs in f\n"); BIO_printf(bio_err, "-CApath arg - PEM format directory of CA's\n"); BIO_printf(bio_err, "-CAfile arg - PEM format file of CA's\n"); BIO_printf(bio_err, "-name \"name\" use name as friendly name\n"); BIO_printf(bio_err, "-caname \"nm\" use nm as CA friendly name (can be used more than once).\n"); BIO_printf(bio_err, "-in infile input filename\n"); BIO_printf(bio_err, "-out outfile output filename\n"); BIO_printf(bio_err, "-noout don't output anything, just verify.\n"); BIO_printf(bio_err, "-nomacver don't verify MAC.\n"); BIO_printf(bio_err, "-nocerts don't output certificates.\n"); BIO_printf(bio_err, "-clcerts only output client certificates.\n"); BIO_printf(bio_err, "-cacerts only output CA certificates.\n"); BIO_printf(bio_err, "-nokeys don't output private keys.\n"); BIO_printf(bio_err, "-info give info about PKCS#12 structure.\n"); BIO_printf(bio_err, "-des encrypt private keys with DES\n"); BIO_printf(bio_err, "-des3 encrypt private keys with triple DES (default)\n"); #ifndef OPENSSL_NO_IDEA BIO_printf(bio_err, "-idea encrypt private keys with idea\n"); #endif #ifndef OPENSSL_NO_AES BIO_printf(bio_err, "-aes128, -aes192, -aes256\n"); BIO_printf(bio_err, " encrypt PEM output with cbc aes\n"); #endif #ifndef OPENSSL_NO_CAMELLIA BIO_printf(bio_err, "-camellia128, -camellia192, -camellia256\n"); BIO_printf(bio_err, " encrypt PEM output with cbc camellia\n"); #endif BIO_printf(bio_err, "-nodes don't encrypt private keys\n"); BIO_printf(bio_err, "-noiter don't use encryption iteration\n"); BIO_printf(bio_err, "-nomaciter don't use MAC iteration\n"); BIO_printf(bio_err, "-maciter use MAC iteration\n"); BIO_printf(bio_err, "-nomac don't generate MAC\n"); BIO_printf(bio_err, "-twopass separate MAC, encryption passwords\n"); BIO_printf(bio_err, "-descert encrypt PKCS#12 certificates with triple DES (default RC2-40)\n"); BIO_printf(bio_err, "-certpbe alg specify certificate PBE algorithm (default RC2-40)\n"); BIO_printf(bio_err, "-keypbe alg specify private key PBE algorithm (default 3DES)\n"); BIO_printf(bio_err, "-macalg alg digest algorithm used in MAC (default SHA1)\n"); BIO_printf(bio_err, "-keyex set MS key exchange type\n"); BIO_printf(bio_err, "-keysig set MS key signature type\n"); BIO_printf(bio_err, "-password p set import/export password source\n"); BIO_printf(bio_err, "-passin p input file pass phrase source\n"); BIO_printf(bio_err, "-passout p output file pass phrase source\n"); BIO_printf(bio_err, "-CSP name Microsoft CSP name\n"); BIO_printf(bio_err, "-LMK Add local machine keyset attribute to private key\n"); goto end; } if (passarg) { if (export_cert) passargout = passarg; else passargin = passarg; } if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { BIO_printf(bio_err, "Error getting passwords\n"); goto end; } if (!cpass) { if (export_cert) cpass = passout; else cpass = passin; } if (cpass) { mpass = cpass; noprompt = 1; } else { cpass = pass; mpass = macpass; } if (!infile) in = BIO_new_fp(stdin, BIO_NOCLOSE); else in = BIO_new_file(infile, "rb"); if (!in) { BIO_printf(bio_err, "Error opening input file %s\n", infile ? infile : "<stdin>"); perror(infile); goto end; } if (!outfile) { out = BIO_new_fp(stdout, BIO_NOCLOSE); } else out = BIO_new_file(outfile, "wb"); if (!out) { BIO_printf(bio_err, "Error opening output file %s\n", outfile ? outfile : "<stdout>"); perror(outfile); goto end; } if (twopass) { if (EVP_read_pw_string(macpass, sizeof macpass, "Enter MAC Password:", export_cert)) { BIO_printf(bio_err, "Can't read Password\n"); goto end; } } if (export_cert) { EVP_PKEY *key = NULL; X509 *ucert = NULL, *x = NULL; STACK_OF(X509) * certs = NULL; const EVP_MD *macmd = NULL; unsigned char *catmp = NULL; int i; if ((options & (NOCERTS | NOKEYS)) == (NOCERTS | NOKEYS)) { BIO_printf(bio_err, "Nothing to do!\n"); goto export_end; } if (options & NOCERTS) chain = 0; if (!(options & NOKEYS)) { key = load_key(bio_err, keyname ? keyname : infile, FORMAT_PEM, 1, passin, "private key"); if (!key) goto export_end; } /* Load in all certs in input file */ if (!(options & NOCERTS)) { certs = load_certs(bio_err, infile, FORMAT_PEM, NULL, "certificates"); if (!certs) goto export_end; if (key) { /* Look for matching private key */ for (i = 0; i < sk_X509_num(certs); i++) { x = sk_X509_value(certs, i); if (X509_check_private_key(x, key)) { ucert = x; /* Zero keyid and alias */ X509_keyid_set1(ucert, NULL, 0); X509_alias_set1(ucert, NULL, 0); /* Remove from list */ (void) sk_X509_delete(certs, i); break; } } if (!ucert) { BIO_printf(bio_err, "No certificate matches private key\n"); goto export_end; } } } /* Add any more certificates asked for */ if (certfile) { STACK_OF(X509) * morecerts = NULL; if (!(morecerts = load_certs(bio_err, certfile, FORMAT_PEM, NULL, "certificates from certfile"))) goto export_end; while (sk_X509_num(morecerts) > 0) sk_X509_push(certs, sk_X509_shift(morecerts)); sk_X509_free(morecerts); } /* If chaining get chain from user cert */ if (chain) { int vret; STACK_OF(X509) * chain2; X509_STORE *store = X509_STORE_new(); if (!store) { BIO_printf(bio_err, "Memory allocation error\n"); goto export_end; } if (!X509_STORE_load_locations(store, CAfile, CApath)) X509_STORE_set_default_paths(store); vret = get_cert_chain(ucert, store, &chain2); X509_STORE_free(store); if (!vret) { /* Exclude verified certificate */ for (i = 1; i < sk_X509_num(chain2); i++) sk_X509_push(certs, sk_X509_value(chain2, i)); /* Free first certificate */ X509_free(sk_X509_value(chain2, 0)); sk_X509_free(chain2); } else { if (vret >= 0) BIO_printf(bio_err, "Error %s getting chain.\n", X509_verify_cert_error_string(vret)); else ERR_print_errors(bio_err); goto export_end; } } /* Add any CA names */ for (i = 0; i < sk_OPENSSL_STRING_num(canames); i++) { catmp = (unsigned char *) sk_OPENSSL_STRING_value(canames, i); X509_alias_set1(sk_X509_value(certs, i), catmp, -1); } if (csp_name && key) EVP_PKEY_add1_attr_by_NID(key, NID_ms_csp_name, MBSTRING_ASC, (unsigned char *) csp_name, -1); if (add_lmk && key) EVP_PKEY_add1_attr_by_NID(key, NID_LocalKeySet, 0, NULL, -1); if (!noprompt && EVP_read_pw_string(pass, sizeof pass, "Enter Export Password:", 1)) { BIO_printf(bio_err, "Can't read Password\n"); goto export_end; } if (!twopass) strlcpy(macpass, pass, sizeof macpass); p12 = PKCS12_create(cpass, name, key, ucert, certs, key_pbe, cert_pbe, iter, -1, keytype); if (!p12) { ERR_print_errors(bio_err); goto export_end; } if (macalg) { macmd = EVP_get_digestbyname(macalg); if (!macmd) { BIO_printf(bio_err, "Unknown digest algorithm %s\n", macalg); } } if (maciter != -1) PKCS12_set_mac(p12, mpass, -1, NULL, 0, maciter, macmd); i2d_PKCS12_bio(out, p12); ret = 0; export_end: if (key) EVP_PKEY_free(key); if (certs) sk_X509_pop_free(certs, X509_free); if (ucert) X509_free(ucert); goto end; } if (!(p12 = d2i_PKCS12_bio(in, NULL))) { ERR_print_errors(bio_err); goto end; } if (!noprompt && EVP_read_pw_string(pass, sizeof pass, "Enter Import Password:", 0)) { BIO_printf(bio_err, "Can't read Password\n"); goto end; } if (!twopass) strlcpy(macpass, pass, sizeof macpass); if ((options & INFO) && p12->mac) BIO_printf(bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get(p12->mac->iter) : 1); if (macver) { /* If we enter empty password try no password first */ if (!mpass[0] && PKCS12_verify_mac(p12, NULL, 0)) { /* If mac and crypto pass the same set it to NULL too */ if (!twopass) cpass = NULL; } else if (!PKCS12_verify_mac(p12, mpass, -1)) { BIO_printf(bio_err, "Mac verify error: invalid password?\n"); ERR_print_errors(bio_err); goto end; } BIO_printf(bio_err, "MAC verified OK\n"); } if (!dump_certs_keys_p12(out, p12, cpass, -1, options, passout)) { BIO_printf(bio_err, "Error outputting keys and certificates\n"); ERR_print_errors(bio_err); goto end; } ret = 0; end: if (p12) PKCS12_free(p12); BIO_free(in); BIO_free_all(out); if (canames) sk_OPENSSL_STRING_free(canames); free(passin); free(passout); return (ret); } int dump_certs_keys_p12(BIO * out, PKCS12 * p12, char *pass, int passlen, int options, char *pempass) { STACK_OF(PKCS7) * asafes = NULL; STACK_OF(PKCS12_SAFEBAG) * bags; int i, bagnid; int ret = 0; PKCS7 *p7; if (!(asafes = PKCS12_unpack_authsafes(p12))) return 0; for (i = 0; i < sk_PKCS7_num(asafes); i++) { p7 = sk_PKCS7_value(asafes, i); bagnid = OBJ_obj2nid(p7->type); if (bagnid == NID_pkcs7_data) { bags = PKCS12_unpack_p7data(p7); if (options & INFO) BIO_printf(bio_err, "PKCS7 Data\n"); } else if (bagnid == NID_pkcs7_encrypted) { if (options & INFO) { BIO_printf(bio_err, "PKCS7 Encrypted data: "); alg_print(bio_err, p7->d.encrypted->enc_data->algorithm); } bags = PKCS12_unpack_p7encdata(p7, pass, passlen); } else continue; if (!bags) goto err; if (!dump_certs_pkeys_bags(out, bags, pass, passlen, options, pempass)) { sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free); goto err; } sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free); bags = NULL; } ret = 1; err: if (asafes) sk_PKCS7_pop_free(asafes, PKCS7_free); return ret; } int dump_certs_pkeys_bags(BIO * out, STACK_OF(PKCS12_SAFEBAG) * bags, char *pass, int passlen, int options, char *pempass) { int i; for (i = 0; i < sk_PKCS12_SAFEBAG_num(bags); i++) { if (!dump_certs_pkeys_bag(out, sk_PKCS12_SAFEBAG_value(bags, i), pass, passlen, options, pempass)) return 0; } return 1; } int dump_certs_pkeys_bag(BIO * out, PKCS12_SAFEBAG * bag, char *pass, int passlen, int options, char *pempass) { EVP_PKEY *pkey; PKCS8_PRIV_KEY_INFO *p8; X509 *x509; switch (M_PKCS12_bag_type(bag)) { case NID_keyBag: if (options & INFO) BIO_printf(bio_err, "Key bag\n"); if (options & NOKEYS) return 1; print_attribs(out, bag->attrib, "Bag Attributes"); p8 = bag->value.keybag; if (!(pkey = EVP_PKCS82PKEY(p8))) return 0; print_attribs(out, p8->attributes, "Key Attributes"); PEM_write_bio_PrivateKey(out, pkey, enc, NULL, 0, NULL, pempass); EVP_PKEY_free(pkey); break; case NID_pkcs8ShroudedKeyBag: if (options & INFO) { BIO_printf(bio_err, "Shrouded Keybag: "); alg_print(bio_err, bag->value.shkeybag->algor); } if (options & NOKEYS) return 1; print_attribs(out, bag->attrib, "Bag Attributes"); if (!(p8 = PKCS12_decrypt_skey(bag, pass, passlen))) return 0; if (!(pkey = EVP_PKCS82PKEY(p8))) { PKCS8_PRIV_KEY_INFO_free(p8); return 0; } print_attribs(out, p8->attributes, "Key Attributes"); PKCS8_PRIV_KEY_INFO_free(p8); PEM_write_bio_PrivateKey(out, pkey, enc, NULL, 0, NULL, pempass); EVP_PKEY_free(pkey); break; case NID_certBag: if (options & INFO) BIO_printf(bio_err, "Certificate bag\n"); if (options & NOCERTS) return 1; if (PKCS12_get_attr(bag, NID_localKeyID)) { if (options & CACERTS) return 1; } else if (options & CLCERTS) return 1; print_attribs(out, bag->attrib, "Bag Attributes"); if (M_PKCS12_cert_bag_type(bag) != NID_x509Certificate) return 1; if (!(x509 = PKCS12_certbag2x509(bag))) return 0; dump_cert_text(out, x509); PEM_write_bio_X509(out, x509); X509_free(x509); break; case NID_safeContentsBag: if (options & INFO) BIO_printf(bio_err, "Safe Contents bag\n"); print_attribs(out, bag->attrib, "Bag Attributes"); return dump_certs_pkeys_bags(out, bag->value.safes, pass, passlen, options, pempass); default: BIO_printf(bio_err, "Warning unsupported bag type: "); i2a_ASN1_OBJECT(bio_err, bag->type); BIO_printf(bio_err, "\n"); return 1; break; } return 1; } /* Given a single certificate return a verified chain or NULL if error */ /* Hope this is OK .... */ int get_cert_chain(X509 * cert, X509_STORE * store, STACK_OF(X509) ** chain) { X509_STORE_CTX store_ctx; STACK_OF(X509) * chn; int i = 0; /* * FIXME: Should really check the return status of * X509_STORE_CTX_init for an error, but how that fits into the * return value of this function is less obvious. */ X509_STORE_CTX_init(&store_ctx, store, cert, NULL); if (X509_verify_cert(&store_ctx) <= 0) { i = X509_STORE_CTX_get_error(&store_ctx); if (i == 0) /* * avoid returning 0 if X509_verify_cert() did not * set an appropriate error value in the context */ i = -1; chn = NULL; goto err; } else chn = X509_STORE_CTX_get1_chain(&store_ctx); err: X509_STORE_CTX_cleanup(&store_ctx); *chain = chn; return i; } int alg_print(BIO * x, X509_ALGOR * alg) { PBEPARAM *pbe; const unsigned char *p; p = alg->parameter->value.sequence->data; pbe = d2i_PBEPARAM(NULL, &p, alg->parameter->value.sequence->length); if (!pbe) return 1; BIO_printf(bio_err, "%s, Iteration %ld\n", OBJ_nid2ln(OBJ_obj2nid(alg->algorithm)), ASN1_INTEGER_get(pbe->iter)); PBEPARAM_free(pbe); return 1; } /* Load all certificates from a given file */ int cert_load(BIO * in, STACK_OF(X509) * sk) { int ret; X509 *cert; ret = 0; while ((cert = PEM_read_bio_X509(in, NULL, NULL, NULL))) { ret = 1; sk_X509_push(sk, cert); } if (ret) ERR_clear_error(); return ret; } /* Generalised attribute print: handle PKCS#8 and bag attributes */ int print_attribs(BIO * out, STACK_OF(X509_ATTRIBUTE) * attrlst, const char *name) { X509_ATTRIBUTE *attr; ASN1_TYPE *av; char *value; int i, attr_nid; if (!attrlst) { BIO_printf(out, "%s: <No Attributes>\n", name); return 1; } if (!sk_X509_ATTRIBUTE_num(attrlst)) { BIO_printf(out, "%s: <Empty Attributes>\n", name); return 1; } BIO_printf(out, "%s\n", name); for (i = 0; i < sk_X509_ATTRIBUTE_num(attrlst); i++) { attr = sk_X509_ATTRIBUTE_value(attrlst, i); attr_nid = OBJ_obj2nid(attr->object); BIO_printf(out, " "); if (attr_nid == NID_undef) { i2a_ASN1_OBJECT(out, attr->object); BIO_printf(out, ": "); } else BIO_printf(out, "%s: ", OBJ_nid2ln(attr_nid)); if (sk_ASN1_TYPE_num(attr->value.set)) { av = sk_ASN1_TYPE_value(attr->value.set, 0); switch (av->type) { case V_ASN1_BMPSTRING: value = OPENSSL_uni2asc(av->value.bmpstring->data, av->value.bmpstring->length); BIO_printf(out, "%s\n", value); free(value); break; case V_ASN1_OCTET_STRING: hex_prin(out, av->value.octet_string->data, av->value.octet_string->length); BIO_printf(out, "\n"); break; case V_ASN1_BIT_STRING: hex_prin(out, av->value.bit_string->data, av->value.bit_string->length); BIO_printf(out, "\n"); break; default: BIO_printf(out, "<Unsupported tag %d>\n", av->type); break; } } else BIO_printf(out, "<No Values>\n"); } return 1; } void hex_prin(BIO * out, unsigned char *buf, int len) { int i; for (i = 0; i < len; i++) BIO_printf(out, "%02X ", buf[i]); } static int set_pbe(BIO * err, int *ppbe, const char *str) { if (!str) return 0; if (!strcmp(str, "NONE")) { *ppbe = -1; return 1; } *ppbe = OBJ_txt2nid(str); if (*ppbe == NID_undef) { BIO_printf(bio_err, "Unknown PBE algorithm %s\n", str); return 0; } return 1; } #endif |
Added jni/libressl/apps/openssl/pkcs7.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 | /* $OpenBSD: pkcs7.c,v 1.7 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "apps.h" #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/objects.h> #include <openssl/pem.h> #include <openssl/pkcs7.h> #include <openssl/x509.h> static struct { char *infile; int informat; int noout; char *outfile; int outformat; int p7_print; int print_certs; int text; } pkcs7_config; static struct option pkcs7_options[] = { { .name = "in", .argname = "file", .desc = "Input file (default stdin)", .type = OPTION_ARG, .opt.arg = &pkcs7_config.infile, }, { .name = "inform", .argname = "format", .desc = "Input format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &pkcs7_config.informat, }, { .name = "noout", .desc = "Do not output encoded version of PKCS#7 structure", .type = OPTION_FLAG, .opt.flag = &pkcs7_config.noout, }, { .name = "out", .argname = "file", .desc = "Output file (default stdout)", .type = OPTION_ARG, .opt.arg = &pkcs7_config.outfile, }, { .name = "outform", .argname = "format", .desc = "Output format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &pkcs7_config.outformat, }, { .name = "print", .desc = "Output ASN.1 representation of PKCS#7 structure", .type = OPTION_FLAG, .opt.flag = &pkcs7_config.p7_print, }, { .name = "print_certs", .desc = "Print out any certificates or CRLs contained in file", .type = OPTION_FLAG, .opt.flag = &pkcs7_config.print_certs, }, { .name = "text", .desc = "Print out full certificate details", .type = OPTION_FLAG, .opt.flag = &pkcs7_config.text, }, { NULL }, }; static void pkcs7_usage() { fprintf(stderr, "usage: pkcs7 [-in file] " "[-inform DER | PEM] [-noout]\n" " [-out file] [-outform DER | PEM] [-print_certs] [-text]\n\n"); options_usage(pkcs7_options); } int pkcs7_main(int argc, char **argv) { PKCS7 *p7 = NULL; BIO *in = NULL, *out = NULL; int ret = 1; int i; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&pkcs7_config, 0, sizeof(pkcs7_config)); pkcs7_config.informat = FORMAT_PEM; pkcs7_config.outformat = FORMAT_PEM; if (options_parse(argc, argv, pkcs7_options, NULL, NULL) != 0) { pkcs7_usage(); goto end; } in = BIO_new(BIO_s_file()); out = BIO_new(BIO_s_file()); if ((in == NULL) || (out == NULL)) { ERR_print_errors(bio_err); goto end; } if (pkcs7_config.infile == NULL) BIO_set_fp(in, stdin, BIO_NOCLOSE); else { if (BIO_read_filename(in, pkcs7_config.infile) <= 0) { perror(pkcs7_config.infile); goto end; } } if (pkcs7_config.informat == FORMAT_ASN1) p7 = d2i_PKCS7_bio(in, NULL); else if (pkcs7_config.informat == FORMAT_PEM) p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL); else { BIO_printf(bio_err, "bad input format specified for pkcs7 object\n"); goto end; } if (p7 == NULL) { BIO_printf(bio_err, "unable to load PKCS7 object\n"); ERR_print_errors(bio_err); goto end; } if (pkcs7_config.outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, pkcs7_config.outfile) <= 0) { perror(pkcs7_config.outfile); goto end; } } if (pkcs7_config.p7_print) PKCS7_print_ctx(out, p7, 0, NULL); if (pkcs7_config.print_certs) { STACK_OF(X509) * certs = NULL; STACK_OF(X509_CRL) * crls = NULL; i = OBJ_obj2nid(p7->type); switch (i) { case NID_pkcs7_signed: certs = p7->d.sign->cert; crls = p7->d.sign->crl; break; case NID_pkcs7_signedAndEnveloped: certs = p7->d.signed_and_enveloped->cert; crls = p7->d.signed_and_enveloped->crl; break; default: break; } if (certs != NULL) { X509 *x; for (i = 0; i < sk_X509_num(certs); i++) { x = sk_X509_value(certs, i); if (pkcs7_config.text) X509_print(out, x); else dump_cert_text(out, x); if (!pkcs7_config.noout) PEM_write_bio_X509(out, x); BIO_puts(out, "\n"); } } if (crls != NULL) { X509_CRL *crl; for (i = 0; i < sk_X509_CRL_num(crls); i++) { crl = sk_X509_CRL_value(crls, i); X509_CRL_print(out, crl); if (!pkcs7_config.noout) PEM_write_bio_X509_CRL(out, crl); BIO_puts(out, "\n"); } } ret = 0; goto end; } if (!pkcs7_config.noout) { if (pkcs7_config.outformat == FORMAT_ASN1) i = i2d_PKCS7_bio(out, p7); else if (pkcs7_config.outformat == FORMAT_PEM) i = PEM_write_bio_PKCS7(out, p7); else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } if (!i) { BIO_printf(bio_err, "unable to write pkcs7 object\n"); ERR_print_errors(bio_err); goto end; } } ret = 0; end: if (p7 != NULL) PKCS7_free(p7); if (in != NULL) BIO_free(in); if (out != NULL) BIO_free_all(out); return (ret); } |
Added jni/libressl/apps/openssl/pkcs8.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 | /* $OpenBSD: pkcs8.c,v 1.8 2015/10/17 07:51:10 semarie Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999-2004. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <string.h> #include "apps.h" #include "progs.h" #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/pem.h> #include <openssl/pkcs12.h> static struct { const EVP_CIPHER *cipher; char *infile; int informat; int iter; int nocrypt; char *outfile; int outformat; int p8_broken; char *passargin; char *passargout; int pbe_nid; int topk8; } pkcs8_config; static int pkcs8_opt_v1(char *arg) { if ((pkcs8_config.pbe_nid = OBJ_txt2nid(arg)) == NID_undef) { fprintf(stderr, "Unknown PBE algorithm '%s'\n", arg); return (1); } return (0); } static int pkcs8_opt_v2(char *arg) { if ((pkcs8_config.cipher = EVP_get_cipherbyname(arg)) == NULL) { fprintf(stderr, "Unknown cipher '%s'\n", arg); return (1); } return (0); } static struct option pkcs8_options[] = { { .name = "embed", .desc = "Generate DSA keys in a broken format", .type = OPTION_VALUE, .value = PKCS8_EMBEDDED_PARAM, .opt.value = &pkcs8_config.p8_broken, }, { .name = "in", .argname = "file", .desc = "Input file (default stdin)", .type = OPTION_ARG, .opt.arg = &pkcs8_config.infile, }, { .name = "inform", .argname = "format", .desc = "Input format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &pkcs8_config.informat, }, { .name = "nocrypt", .desc = "Use or expect unencrypted private key", .type = OPTION_FLAG, .opt.flag = &pkcs8_config.nocrypt, }, { .name = "noiter", .desc = "Use 1 as iteration count", .type = OPTION_VALUE, .value = 1, .opt.value = &pkcs8_config.iter, }, { .name = "nooct", .desc = "Generate RSA keys in a broken format (no octet)", .type = OPTION_VALUE, .value = PKCS8_NO_OCTET, .opt.value = &pkcs8_config.p8_broken, }, { .name = "nsdb", .desc = "Generate DSA keys in the broken Netscape DB format", .type = OPTION_VALUE, .value = PKCS8_NS_DB, .opt.value = &pkcs8_config.p8_broken, }, { .name = "out", .argname = "file", .desc = "Output file (default stdout)", .type = OPTION_ARG, .opt.arg = &pkcs8_config.outfile, }, { .name = "outform", .argname = "format", .desc = "Output format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &pkcs8_config.outformat, }, { .name = "passin", .argname = "source", .desc = "Input file passphrase source", .type = OPTION_ARG, .opt.arg = &pkcs8_config.passargin, }, { .name = "passout", .argname = "source", .desc = "Output file passphrase source", .type = OPTION_ARG, .opt.arg = &pkcs8_config.passargout, }, { .name = "topk8", .desc = "Read traditional format key and write PKCS#8 format" " key", .type = OPTION_FLAG, .opt.flag = &pkcs8_config.topk8, }, { .name = "v1", .argname = "algorithm", .desc = "Use PKCS#5 v1.5 or PKCS#12 with given algorithm", .type = OPTION_ARG_FUNC, .opt.argfunc = pkcs8_opt_v1, }, { .name = "v2", .argname = "cipher", .desc = "Use PKCS#5 v2.0 with given cipher", .type = OPTION_ARG_FUNC, .opt.argfunc = pkcs8_opt_v2, }, { NULL }, }; static void pkcs8_usage() { fprintf(stderr, "usage: pkcs8 [-embed] [-in file] " "[-inform fmt] [-nocrypt]\n" " [-noiter] [-nooct] [-nsdb] [-out file] [-outform fmt] " "[-passin src]\n" " [-passout src] [-topk8] [-v1 alg] [-v2 alg]\n\n"); options_usage(pkcs8_options); } int pkcs8_main(int argc, char **argv) { BIO *in = NULL, *out = NULL; X509_SIG *p8 = NULL; PKCS8_PRIV_KEY_INFO *p8inf = NULL; EVP_PKEY *pkey = NULL; char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL; int ret = 1; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } memset(&pkcs8_config, 0, sizeof(pkcs8_config)); pkcs8_config.iter = PKCS12_DEFAULT_ITER; pkcs8_config.informat = FORMAT_PEM; pkcs8_config.outformat = FORMAT_PEM; pkcs8_config.p8_broken = PKCS8_OK; pkcs8_config.pbe_nid = -1; if (options_parse(argc, argv, pkcs8_options, NULL, NULL) != 0) { pkcs8_usage(); return (1); } if (!app_passwd(bio_err, pkcs8_config.passargin, pkcs8_config.passargout, &passin, &passout)) { BIO_printf(bio_err, "Error getting passwords\n"); goto end; } if ((pkcs8_config.pbe_nid == -1) && !pkcs8_config.cipher) pkcs8_config.pbe_nid = NID_pbeWithMD5AndDES_CBC; if (pkcs8_config.infile) { if (!(in = BIO_new_file(pkcs8_config.infile, "rb"))) { BIO_printf(bio_err, "Can't open input file '%s'\n", pkcs8_config.infile); goto end; } } else in = BIO_new_fp(stdin, BIO_NOCLOSE); if (pkcs8_config.outfile) { if (!(out = BIO_new_file(pkcs8_config.outfile, "wb"))) { BIO_printf(bio_err, "Can't open output file '%s'\n", pkcs8_config.outfile); goto end; } } else { out = BIO_new_fp(stdout, BIO_NOCLOSE); } if (pkcs8_config.topk8) { pkey = load_key(bio_err, pkcs8_config.infile, pkcs8_config.informat, 1, passin, "key"); if (!pkey) goto end; if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, pkcs8_config.p8_broken))) { BIO_printf(bio_err, "Error converting key\n"); ERR_print_errors(bio_err); goto end; } if (pkcs8_config.nocrypt) { if (pkcs8_config.outformat == FORMAT_PEM) PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf); else if (pkcs8_config.outformat == FORMAT_ASN1) i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf); else { BIO_printf(bio_err, "Bad format specified for key\n"); goto end; } } else { if (passout) p8pass = passout; else { p8pass = pass; if (EVP_read_pw_string(pass, sizeof pass, "Enter Encryption Password:", 1)) goto end; } if (!(p8 = PKCS8_encrypt(pkcs8_config.pbe_nid, pkcs8_config.cipher, p8pass, strlen(p8pass), NULL, 0, pkcs8_config.iter, p8inf))) { BIO_printf(bio_err, "Error encrypting key\n"); ERR_print_errors(bio_err); goto end; } if (pkcs8_config.outformat == FORMAT_PEM) PEM_write_bio_PKCS8(out, p8); else if (pkcs8_config.outformat == FORMAT_ASN1) i2d_PKCS8_bio(out, p8); else { BIO_printf(bio_err, "Bad format specified for key\n"); goto end; } } ret = 0; goto end; } if (pkcs8_config.nocrypt) { if (pkcs8_config.informat == FORMAT_PEM) p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in, NULL, NULL, NULL); else if (pkcs8_config.informat == FORMAT_ASN1) p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL); else { BIO_printf(bio_err, "Bad format specified for key\n"); goto end; } } else { if (pkcs8_config.informat == FORMAT_PEM) p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL); else if (pkcs8_config.informat == FORMAT_ASN1) p8 = d2i_PKCS8_bio(in, NULL); else { BIO_printf(bio_err, "Bad format specified for key\n"); goto end; } if (!p8) { BIO_printf(bio_err, "Error reading key\n"); ERR_print_errors(bio_err); goto end; } if (passin) p8pass = passin; else { p8pass = pass; EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0); } p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass)); } if (!p8inf) { BIO_printf(bio_err, "Error decrypting key\n"); ERR_print_errors(bio_err); goto end; } if (!(pkey = EVP_PKCS82PKEY(p8inf))) { BIO_printf(bio_err, "Error converting key\n"); ERR_print_errors(bio_err); goto end; } if (p8inf->broken) { BIO_printf(bio_err, "Warning: broken key encoding: "); switch (p8inf->broken) { case PKCS8_NO_OCTET: BIO_printf(bio_err, "No Octet String in PrivateKey\n"); break; case PKCS8_EMBEDDED_PARAM: BIO_printf(bio_err, "DSA parameters included in PrivateKey\n"); break; case PKCS8_NS_DB: BIO_printf(bio_err, "DSA public key include in PrivateKey\n"); break; case PKCS8_NEG_PRIVKEY: BIO_printf(bio_err, "DSA private key value is negative\n"); break; default: BIO_printf(bio_err, "Unknown broken type\n"); break; } } if (pkcs8_config.outformat == FORMAT_PEM) PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout); else if (pkcs8_config.outformat == FORMAT_ASN1) i2d_PrivateKey_bio(out, pkey); else { BIO_printf(bio_err, "Bad format specified for key\n"); goto end; } ret = 0; end: X509_SIG_free(p8); PKCS8_PRIV_KEY_INFO_free(p8inf); EVP_PKEY_free(pkey); BIO_free_all(out); BIO_free(in); free(passin); free(passout); return ret; } |
Added jni/libressl/apps/openssl/pkey.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 | /* $OpenBSD: pkey.c,v 1.7 2015/10/17 07:51:10 semarie Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2006 */ /* ==================================================================== * Copyright (c) 2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <string.h> #include "apps.h" #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/pem.h> int pkey_main(int argc, char **argv) { char **args, *infile = NULL, *outfile = NULL; char *passargin = NULL, *passargout = NULL; BIO *in = NULL, *out = NULL; const EVP_CIPHER *cipher = NULL; int informat, outformat; int pubin = 0, pubout = 0, pubtext = 0, text = 0, noout = 0; EVP_PKEY *pkey = NULL; char *passin = NULL, *passout = NULL; int badarg = 0; int ret = 1; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } informat = FORMAT_PEM; outformat = FORMAT_PEM; args = argv + 1; while (!badarg && *args && *args[0] == '-') { if (!strcmp(*args, "-inform")) { if (args[1]) { args++; informat = str2fmt(*args); } else badarg = 1; } else if (!strcmp(*args, "-outform")) { if (args[1]) { args++; outformat = str2fmt(*args); } else badarg = 1; } else if (!strcmp(*args, "-passin")) { if (!args[1]) goto bad; passargin = *(++args); } else if (!strcmp(*args, "-passout")) { if (!args[1]) goto bad; passargout = *(++args); } else if (!strcmp(*args, "-in")) { if (args[1]) { args++; infile = *args; } else badarg = 1; } else if (!strcmp(*args, "-out")) { if (args[1]) { args++; outfile = *args; } else badarg = 1; } else if (strcmp(*args, "-pubin") == 0) { pubin = 1; pubout = 1; pubtext = 1; } else if (strcmp(*args, "-pubout") == 0) pubout = 1; else if (strcmp(*args, "-text_pub") == 0) { pubtext = 1; text = 1; } else if (strcmp(*args, "-text") == 0) text = 1; else if (strcmp(*args, "-noout") == 0) noout = 1; else { cipher = EVP_get_cipherbyname(*args + 1); if (!cipher) { BIO_printf(bio_err, "Unknown cipher %s\n", *args + 1); badarg = 1; } } args++; } if (badarg) { bad: BIO_printf(bio_err, "Usage pkey [options]\n"); BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err, "-in file input file\n"); BIO_printf(bio_err, "-inform X input format (DER or PEM)\n"); BIO_printf(bio_err, "-passin arg input file pass phrase source\n"); BIO_printf(bio_err, "-outform X output format (DER or PEM)\n"); BIO_printf(bio_err, "-out file output file\n"); BIO_printf(bio_err, "-passout arg output file pass phrase source\n"); return 1; } if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { BIO_printf(bio_err, "Error getting passwords\n"); goto end; } if (outfile) { if (!(out = BIO_new_file(outfile, "wb"))) { BIO_printf(bio_err, "Can't open output file %s\n", outfile); goto end; } } else { out = BIO_new_fp(stdout, BIO_NOCLOSE); } if (pubin) pkey = load_pubkey(bio_err, infile, informat, 1, passin, "Public Key"); else pkey = load_key(bio_err, infile, informat, 1, passin, "key"); if (!pkey) goto end; if (!noout) { if (outformat == FORMAT_PEM) { if (pubout) PEM_write_bio_PUBKEY(out, pkey); else PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0, NULL, passout); } else if (outformat == FORMAT_ASN1) { if (pubout) i2d_PUBKEY_bio(out, pkey); else i2d_PrivateKey_bio(out, pkey); } else { BIO_printf(bio_err, "Bad format specified for key\n"); goto end; } } if (text) { if (pubtext) EVP_PKEY_print_public(out, pkey, 0, NULL); else EVP_PKEY_print_private(out, pkey, 0, NULL); } ret = 0; end: EVP_PKEY_free(pkey); BIO_free_all(out); BIO_free(in); free(passin); free(passout); return ret; } |
Added jni/libressl/apps/openssl/pkeyparam.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | /* $OpenBSD: pkeyparam.c,v 1.8 2015/10/10 22:28:51 doug Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2006 */ /* ==================================================================== * Copyright (c) 2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <string.h> #include "apps.h" #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/pem.h> struct { char *infile; int noout; char *outfile; int text; } pkeyparam_config; struct option pkeyparam_options[] = { { .name = "in", .argname = "file", .desc = "Input file (default stdin)", .type = OPTION_ARG, .opt.arg = &pkeyparam_config.infile, }, { .name = "noout", .desc = "Do not print encoded version of the parameters", .type = OPTION_FLAG, .opt.flag = &pkeyparam_config.noout, }, { .name = "out", .argname = "file", .desc = "Output file (default stdout)", .type = OPTION_ARG, .opt.arg = &pkeyparam_config.outfile, }, { .name = "text", .desc = "Print out the parameters in plain text", .type = OPTION_FLAG, .opt.flag = &pkeyparam_config.text, }, { NULL }, }; static void pkeyparam_usage() { fprintf(stderr, "usage: pkeyparam [-in file] [-noout] [-out file] " "[-text]\n"); options_usage(pkeyparam_options); } int pkeyparam_main(int argc, char **argv) { BIO *in = NULL, *out = NULL; EVP_PKEY *pkey = NULL; int ret = 1; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&pkeyparam_config, 0, sizeof(pkeyparam_config)); if (options_parse(argc, argv, pkeyparam_options, NULL, NULL) != 0) { pkeyparam_usage(); return (1); } if (pkeyparam_config.infile) { if (!(in = BIO_new_file(pkeyparam_config.infile, "r"))) { BIO_printf(bio_err, "Can't open input file %s\n", pkeyparam_config.infile); goto end; } } else in = BIO_new_fp(stdin, BIO_NOCLOSE); if (pkeyparam_config.outfile) { if (!(out = BIO_new_file(pkeyparam_config.outfile, "w"))) { BIO_printf(bio_err, "Can't open output file %s\n", pkeyparam_config.outfile); goto end; } } else { out = BIO_new_fp(stdout, BIO_NOCLOSE); } pkey = PEM_read_bio_Parameters(in, NULL); if (!pkey) { BIO_printf(bio_err, "Error reading parameters\n"); ERR_print_errors(bio_err); goto end; } if (!pkeyparam_config.noout) PEM_write_bio_Parameters(out, pkey); if (pkeyparam_config.text) EVP_PKEY_print_params(out, pkey, 0, NULL); ret = 0; end: EVP_PKEY_free(pkey); BIO_free_all(out); BIO_free(in); return ret; } |
Added jni/libressl/apps/openssl/pkeyutl.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 | /* $OpenBSD: pkeyutl.c,v 1.9 2015/10/17 07:51:10 semarie Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2006. */ /* ==================================================================== * Copyright (c) 2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <string.h> #include "apps.h" #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/pem.h> #define KEY_PRIVKEY 1 #define KEY_PUBKEY 2 #define KEY_CERT 3 static void usage(void); static EVP_PKEY_CTX *init_ctx(int *pkeysize, char *keyfile, int keyform, int key_type, char *passargin, int pkey_op); static int setup_peer(BIO * err, EVP_PKEY_CTX * ctx, int peerform, const char *file); static int do_keyop(EVP_PKEY_CTX * ctx, int pkey_op, unsigned char *out, size_t * poutlen, unsigned char *in, size_t inlen); int pkeyutl_main(int argc, char **argv) { BIO *in = NULL, *out = NULL; char *infile = NULL, *outfile = NULL, *sigfile = NULL; int pkey_op = EVP_PKEY_OP_SIGN, key_type = KEY_PRIVKEY; int keyform = FORMAT_PEM, peerform = FORMAT_PEM; char badarg = 0, rev = 0; char hexdump = 0, asn1parse = 0; EVP_PKEY_CTX *ctx = NULL; char *passargin = NULL; int keysize = -1; unsigned char *buf_in = NULL, *buf_out = NULL, *sig = NULL; size_t buf_outlen; int buf_inlen = 0, siglen = -1; int ret = 1, rv = -1; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } argc--; argv++; while (argc >= 1) { if (!strcmp(*argv, "-in")) { if (--argc < 1) badarg = 1; else infile = *(++argv); } else if (!strcmp(*argv, "-out")) { if (--argc < 1) badarg = 1; else outfile = *(++argv); } else if (!strcmp(*argv, "-sigfile")) { if (--argc < 1) badarg = 1; else sigfile = *(++argv); } else if (!strcmp(*argv, "-inkey")) { if (--argc < 1) badarg = 1; else { ctx = init_ctx(&keysize, *(++argv), keyform, key_type, passargin, pkey_op); if (!ctx) { BIO_puts(bio_err, "Error initializing context\n"); ERR_print_errors(bio_err); badarg = 1; } } } else if (!strcmp(*argv, "-peerkey")) { if (--argc < 1) badarg = 1; else if (!setup_peer(bio_err, ctx, peerform, *(++argv))) badarg = 1; } else if (!strcmp(*argv, "-passin")) { if (--argc < 1) badarg = 1; else passargin = *(++argv); } else if (strcmp(*argv, "-peerform") == 0) { if (--argc < 1) badarg = 1; else peerform = str2fmt(*(++argv)); } else if (strcmp(*argv, "-keyform") == 0) { if (--argc < 1) badarg = 1; else keyform = str2fmt(*(++argv)); } else if (!strcmp(*argv, "-pubin")) key_type = KEY_PUBKEY; else if (!strcmp(*argv, "-certin")) key_type = KEY_CERT; else if (!strcmp(*argv, "-asn1parse")) asn1parse = 1; else if (!strcmp(*argv, "-hexdump")) hexdump = 1; else if (!strcmp(*argv, "-sign")) pkey_op = EVP_PKEY_OP_SIGN; else if (!strcmp(*argv, "-verify")) pkey_op = EVP_PKEY_OP_VERIFY; else if (!strcmp(*argv, "-verifyrecover")) pkey_op = EVP_PKEY_OP_VERIFYRECOVER; else if (!strcmp(*argv, "-rev")) rev = 1; else if (!strcmp(*argv, "-encrypt")) pkey_op = EVP_PKEY_OP_ENCRYPT; else if (!strcmp(*argv, "-decrypt")) pkey_op = EVP_PKEY_OP_DECRYPT; else if (!strcmp(*argv, "-derive")) pkey_op = EVP_PKEY_OP_DERIVE; else if (strcmp(*argv, "-pkeyopt") == 0) { if (--argc < 1) badarg = 1; else if (!ctx) { BIO_puts(bio_err, "-pkeyopt command before -inkey\n"); badarg = 1; } else if (pkey_ctrl_string(ctx, *(++argv)) <= 0) { BIO_puts(bio_err, "parameter setting error\n"); ERR_print_errors(bio_err); goto end; } } else badarg = 1; if (badarg) { usage(); goto end; } argc--; argv++; } if (!ctx) { usage(); goto end; } if (sigfile && (pkey_op != EVP_PKEY_OP_VERIFY)) { BIO_puts(bio_err, "Signature file specified for non verify\n"); goto end; } if (!sigfile && (pkey_op == EVP_PKEY_OP_VERIFY)) { BIO_puts(bio_err, "No signature file specified for verify\n"); goto end; } if (pkey_op != EVP_PKEY_OP_DERIVE) { if (infile) { if (!(in = BIO_new_file(infile, "rb"))) { BIO_puts(bio_err, "Error Opening Input File\n"); ERR_print_errors(bio_err); goto end; } } else in = BIO_new_fp(stdin, BIO_NOCLOSE); } if (outfile) { if (!(out = BIO_new_file(outfile, "wb"))) { BIO_printf(bio_err, "Error Creating Output File\n"); ERR_print_errors(bio_err); goto end; } } else { out = BIO_new_fp(stdout, BIO_NOCLOSE); } if (sigfile) { BIO *sigbio = BIO_new_file(sigfile, "rb"); if (!sigbio) { BIO_printf(bio_err, "Can't open signature file %s\n", sigfile); goto end; } siglen = bio_to_mem(&sig, keysize * 10, sigbio); BIO_free(sigbio); if (siglen <= 0) { BIO_printf(bio_err, "Error reading signature data\n"); goto end; } } if (in) { /* Read the input data */ buf_inlen = bio_to_mem(&buf_in, keysize * 10, in); if (buf_inlen <= 0) { BIO_printf(bio_err, "Error reading input Data\n"); exit(1); } if (rev) { size_t i; unsigned char ctmp; size_t l = (size_t) buf_inlen; for (i = 0; i < l / 2; i++) { ctmp = buf_in[i]; buf_in[i] = buf_in[l - 1 - i]; buf_in[l - 1 - i] = ctmp; } } } if (pkey_op == EVP_PKEY_OP_VERIFY) { rv = EVP_PKEY_verify(ctx, sig, (size_t) siglen, buf_in, (size_t) buf_inlen); if (rv == 1) { BIO_puts(out, "Signature Verified Successfully\n"); ret = 0; } else BIO_puts(out, "Signature Verification Failure\n"); if (rv >= 0) goto end; } else { rv = do_keyop(ctx, pkey_op, NULL, (size_t *)&buf_outlen, buf_in, (size_t) buf_inlen); if (rv > 0) { buf_out = malloc(buf_outlen); if (!buf_out) rv = -1; else rv = do_keyop(ctx, pkey_op, buf_out, (size_t *) & buf_outlen, buf_in, (size_t) buf_inlen); } } if (rv <= 0) { BIO_printf(bio_err, "Public Key operation error\n"); ERR_print_errors(bio_err); goto end; } ret = 0; if (asn1parse) { if (!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1)) ERR_print_errors(bio_err); } else if (hexdump) BIO_dump(out, (char *) buf_out, buf_outlen); else BIO_write(out, buf_out, buf_outlen); end: if (ctx) EVP_PKEY_CTX_free(ctx); BIO_free(in); BIO_free_all(out); free(buf_in); free(buf_out); free(sig); return ret; } static void usage() { BIO_printf(bio_err, "Usage: pkeyutl [options]\n"); BIO_printf(bio_err, "-in file input file\n"); BIO_printf(bio_err, "-out file output file\n"); BIO_printf(bio_err, "-sigfile file signature file (verify operation only)\n"); BIO_printf(bio_err, "-inkey file input key\n"); BIO_printf(bio_err, "-keyform arg private key format - default PEM\n"); BIO_printf(bio_err, "-pubin input is a public key\n"); BIO_printf(bio_err, "-certin input is a certificate carrying a public key\n"); BIO_printf(bio_err, "-pkeyopt X:Y public key options\n"); BIO_printf(bio_err, "-sign sign with private key\n"); BIO_printf(bio_err, "-verify verify with public key\n"); BIO_printf(bio_err, "-verifyrecover verify with public key, recover original data\n"); BIO_printf(bio_err, "-encrypt encrypt with public key\n"); BIO_printf(bio_err, "-decrypt decrypt with private key\n"); BIO_printf(bio_err, "-derive derive shared secret\n"); BIO_printf(bio_err, "-hexdump hex dump output\n"); BIO_printf(bio_err, "-passin arg pass phrase source\n"); } static EVP_PKEY_CTX * init_ctx(int *pkeysize, char *keyfile, int keyform, int key_type, char *passargin, int pkey_op) { EVP_PKEY *pkey = NULL; EVP_PKEY_CTX *ctx = NULL; char *passin = NULL; int rv = -1; X509 *x; if (((pkey_op == EVP_PKEY_OP_SIGN) || (pkey_op == EVP_PKEY_OP_DECRYPT) || (pkey_op == EVP_PKEY_OP_DERIVE)) && (key_type != KEY_PRIVKEY)) { BIO_printf(bio_err, "A private key is needed for this operation\n"); goto end; } if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto end; } switch (key_type) { case KEY_PRIVKEY: pkey = load_key(bio_err, keyfile, keyform, 0, passin, "Private Key"); break; case KEY_PUBKEY: pkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL, "Public Key"); break; case KEY_CERT: x = load_cert(bio_err, keyfile, keyform, NULL, "Certificate"); if (x) { pkey = X509_get_pubkey(x); X509_free(x); } break; } *pkeysize = EVP_PKEY_size(pkey); if (!pkey) goto end; ctx = EVP_PKEY_CTX_new(pkey, NULL); EVP_PKEY_free(pkey); if (!ctx) goto end; switch (pkey_op) { case EVP_PKEY_OP_SIGN: rv = EVP_PKEY_sign_init(ctx); break; case EVP_PKEY_OP_VERIFY: rv = EVP_PKEY_verify_init(ctx); break; case EVP_PKEY_OP_VERIFYRECOVER: rv = EVP_PKEY_verify_recover_init(ctx); break; case EVP_PKEY_OP_ENCRYPT: rv = EVP_PKEY_encrypt_init(ctx); break; case EVP_PKEY_OP_DECRYPT: rv = EVP_PKEY_decrypt_init(ctx); break; case EVP_PKEY_OP_DERIVE: rv = EVP_PKEY_derive_init(ctx); break; } if (rv <= 0) { EVP_PKEY_CTX_free(ctx); ctx = NULL; } end: free(passin); return ctx; } static int setup_peer(BIO * err, EVP_PKEY_CTX * ctx, int peerform, const char *file) { EVP_PKEY *peer = NULL; int ret; if (!ctx) { BIO_puts(err, "-peerkey command before -inkey\n"); return 0; } peer = load_pubkey(bio_err, file, peerform, 0, NULL, "Peer Key"); if (!peer) { BIO_printf(bio_err, "Error reading peer key %s\n", file); ERR_print_errors(err); return 0; } ret = EVP_PKEY_derive_set_peer(ctx, peer); EVP_PKEY_free(peer); if (ret <= 0) ERR_print_errors(err); return ret; } static int do_keyop(EVP_PKEY_CTX * ctx, int pkey_op, unsigned char *out, size_t * poutlen, unsigned char *in, size_t inlen) { int rv = 0; switch (pkey_op) { case EVP_PKEY_OP_VERIFYRECOVER: rv = EVP_PKEY_verify_recover(ctx, out, poutlen, in, inlen); break; case EVP_PKEY_OP_SIGN: rv = EVP_PKEY_sign(ctx, out, poutlen, in, inlen); break; case EVP_PKEY_OP_ENCRYPT: rv = EVP_PKEY_encrypt(ctx, out, poutlen, in, inlen); break; case EVP_PKEY_OP_DECRYPT: rv = EVP_PKEY_decrypt(ctx, out, poutlen, in, inlen); break; case EVP_PKEY_OP_DERIVE: rv = EVP_PKEY_derive(ctx, out, poutlen); break; } return rv; } |
Added jni/libressl/apps/openssl/prime.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 | /* $OpenBSD: prime.c,v 1.9 2015/10/10 22:28:51 doug Exp $ */ /* ==================================================================== * Copyright (c) 2004 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 <string.h> #include <limits.h> #include "apps.h" #include <openssl/bn.h> #include <openssl/err.h> struct { int bits; int checks; int generate; int hex; int safe; } prime_config; struct option prime_options[] = { { .name = "bits", .argname = "n", .desc = "Number of bits in the generated prime number", .type = OPTION_ARG_INT, .opt.value = &prime_config.bits, }, { .name = "checks", .argname = "n", .desc = "Miller-Rabin probablistic primality test iterations", .type = OPTION_ARG_INT, .opt.value = &prime_config.checks, }, { .name = "generate", .desc = "Generate a pseudo-random prime number", .type = OPTION_FLAG, .opt.flag = &prime_config.generate, }, { .name = "hex", .desc = "Hexadecimal prime numbers", .type = OPTION_FLAG, .opt.flag = &prime_config.hex, }, { .name = "safe", .desc = "Generate only \"safe\" prime numbers", .type = OPTION_FLAG, .opt.flag = &prime_config.safe, }, {NULL}, }; static void prime_usage() { fprintf(stderr, "usage: prime [-bits n] [-checks n] [-generate] [-hex] [-safe] " "p\n"); options_usage(prime_options); } int prime_main(int argc, char **argv) { BIGNUM *bn = NULL; char *prime = NULL; BIO *bio_out; char *s; int ret = 1; if (single_execution) { if (pledge("stdio rpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&prime_config, 0, sizeof(prime_config)); /* Default iterations for Miller-Rabin probabilistic primality test. */ prime_config.checks = 20; if (options_parse(argc, argv, prime_options, &prime, NULL) != 0) { prime_usage(); return (1); } if (prime == NULL && prime_config.generate == 0) { BIO_printf(bio_err, "No prime specified.\n"); prime_usage(); return (1); } if ((bio_out = BIO_new(BIO_s_file())) == NULL) { ERR_print_errors(bio_err); return (1); } BIO_set_fp(bio_out, stdout, BIO_NOCLOSE); if (prime_config.generate != 0) { if (prime_config.bits == 0) { BIO_printf(bio_err, "Specify the number of bits.\n"); goto end; } bn = BN_new(); if (!bn) { BIO_printf(bio_err, "Out of memory.\n"); goto end; } if (!BN_generate_prime_ex(bn, prime_config.bits, prime_config.safe, NULL, NULL, NULL)) { BIO_printf(bio_err, "Prime generation error.\n"); goto end; } s = prime_config.hex ? BN_bn2hex(bn) : BN_bn2dec(bn); if (s == NULL) { BIO_printf(bio_err, "Out of memory.\n"); goto end; } BIO_printf(bio_out, "%s\n", s); free(s); } else { if (prime_config.hex) { if (!BN_hex2bn(&bn, prime)) { BIO_printf(bio_err, "%s is an invalid hex " "value.\n", prime); goto end; } } else { if (!BN_dec2bn(&bn, prime)) { BIO_printf(bio_err, "%s is an invalid decimal " "value.\n", prime); goto end; } } BIO_printf(bio_out, "%s is %sprime\n", prime, BN_is_prime_ex(bn, prime_config.checks, NULL, NULL) ? "" : "not "); } ret = 0; end: BN_free(bn); BIO_free_all(bio_out); return (ret); } |
Added jni/libressl/apps/openssl/progs.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | /* $OpenBSD: progs.h,v 1.6 2015/08/22 16:36:05 jsing Exp $ */ /* Public domain */ int asn1parse_main(int argc, char **argv); int ca_main(int argc, char **argv); int certhash_main(int argc, char **argv); int ciphers_main(int argc, char **argv); int cms_main(int argc, char **argv); int crl2pkcs7_main(int argc, char **argv); int crl_main(int argc, char **argv); int dgst_main(int argc, char **argv); int dh_main(int argc, char **argv); int dhparam_main(int argc, char **argv); int dsa_main(int argc, char **argv); int dsaparam_main(int argc, char **argv); int ec_main(int argc, char **argv); int ecparam_main(int argc, char **argv); int enc_main(int argc, char **argv); int errstr_main(int argc, char **argv); int gendh_main(int argc, char **argv); int gendsa_main(int argc, char **argv); int genpkey_main(int argc, char **argv); int genrsa_main(int argc, char **argv); int nseq_main(int argc, char **argv); int ocsp_main(int argc, char **argv); int passwd_main(int argc, char **argv); int pkcs7_main(int argc, char **argv); int pkcs8_main(int argc, char **argv); int pkcs12_main(int argc, char **argv); int pkey_main(int argc, char **argv); int pkeyparam_main(int argc, char **argv); int pkeyutl_main(int argc, char **argv); int prime_main(int argc, char **argv); int rand_main(int argc, char **argv); int req_main(int argc, char **argv); int rsa_main(int argc, char **argv); int rsautl_main(int argc, char **argv); int s_client_main(int argc, char **argv); int s_server_main(int argc, char **argv); int s_time_main(int argc, char **argv); int sess_id_main(int argc, char **argv); int smime_main(int argc, char **argv); int speed_main(int argc, char **argv); int spkac_main(int argc, char **argv); int ts_main(int argc, char **argv); int verify_main(int argc, char **argv); int version_main(int argc, char **argv); int x509_main(int argc, char **argv); |
Added jni/libressl/apps/openssl/rand.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | /* $OpenBSD: rand.c,v 1.9 2015/10/10 22:28:51 doug Exp $ */ /* ==================================================================== * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <ctype.h> #include <stdio.h> #include <string.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/err.h> struct { int base64; int hex; char *outfile; } rand_config; struct option rand_options[] = { { .name = "base64", .desc = "Perform base64 encoding on output", .type = OPTION_FLAG, .opt.flag = &rand_config.base64, }, { .name = "hex", .desc = "Hexadecimal output", .type = OPTION_FLAG, .opt.flag = &rand_config.hex, }, { .name = "out", .argname = "file", .desc = "Write to the given file instead of standard output", .type = OPTION_ARG, .opt.arg = &rand_config.outfile, }, {NULL}, }; static void rand_usage() { fprintf(stderr, "usage: rand [-base64 | -hex] [-out file] num\n"); options_usage(rand_options); } int rand_main(int argc, char **argv) { char *num_bytes = NULL; int ret = 1; int badopt = 0; int num = -1; int i, r; BIO *out = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&rand_config, 0, sizeof(rand_config)); if (options_parse(argc, argv, rand_options, &num_bytes, NULL) != 0) { rand_usage(); return (1); } if (num_bytes != NULL) { r = sscanf(num_bytes, "%d", &num); if (r == 0 || num < 0) badopt = 1; } else badopt = 1; if (rand_config.hex && rand_config.base64) badopt = 1; if (badopt) { rand_usage(); goto err; } out = BIO_new(BIO_s_file()); if (out == NULL) goto err; if (rand_config.outfile != NULL) r = BIO_write_filename(out, rand_config.outfile); else r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); if (r <= 0) goto err; if (rand_config.base64) { BIO *b64 = BIO_new(BIO_f_base64()); if (b64 == NULL) goto err; out = BIO_push(b64, out); } while (num > 0) { unsigned char buf[4096]; int chunk; chunk = num; if (chunk > (int) sizeof(buf)) chunk = sizeof(buf); arc4random_buf(buf, chunk); if (rand_config.hex) { for (i = 0; i < chunk; i++) BIO_printf(out, "%02x", buf[i]); } else BIO_write(out, buf, chunk); num -= chunk; } if (rand_config.hex) BIO_puts(out, "\n"); (void) BIO_flush(out); ret = 0; err: ERR_print_errors(bio_err); if (out) BIO_free_all(out); return (ret); } |
Added jni/libressl/apps/openssl/req.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 | /* $OpenBSD: req.c,v 1.12 2015/10/17 15:00:11 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* Until the key-gen callbacks are modified to use newer prototypes, we allow * deprecated functions for openssl-internal code */ #ifdef OPENSSL_NO_DEPRECATED #undef OPENSSL_NO_DEPRECATED #endif #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> #include <time.h> #include "apps.h" #include <openssl/asn1.h> #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/conf.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/objects.h> #include <openssl/pem.h> #include <openssl/x509.h> #include <openssl/x509v3.h> #include <openssl/dsa.h> #include <openssl/rsa.h> #define SECTION "req" #define BITS "default_bits" #define KEYFILE "default_keyfile" #define PROMPT "prompt" #define DISTINGUISHED_NAME "distinguished_name" #define ATTRIBUTES "attributes" #define V3_EXTENSIONS "x509_extensions" #define REQ_EXTENSIONS "req_extensions" #define STRING_MASK "string_mask" #define UTF8_IN "utf8" #define DEFAULT_KEY_LENGTH 2048 #define MIN_KEY_LENGTH 384 /* -inform arg - input format - default PEM (DER or PEM) * -outform arg - output format - default PEM * -in arg - input file - default stdin * -out arg - output file - default stdout * -verify - check request signature * -noout - don't print stuff out. * -text - print out human readable text. * -nodes - no des encryption * -config file - Load configuration file. * -key file - make a request using key in file (or use it for verification). * -keyform arg - key file format. * -newkey - make a key and a request. * -modulus - print RSA modulus. * -pubkey - output Public Key. * -x509 - output a self signed X509 structure instead. * -asn1-kludge - output new certificate request in a format that some CA's * require. This format is wrong */ static int make_REQ(X509_REQ * req, EVP_PKEY * pkey, char *dn, int multirdn, int attribs, unsigned long chtype); static int build_subject(X509_REQ * req, char *subj, unsigned long chtype, int multirdn); static int prompt_info(X509_REQ * req, STACK_OF(CONF_VALUE) * dn_sk, char *dn_sect, STACK_OF(CONF_VALUE) * attr_sk, char *attr_sect, int attribs, unsigned long chtype); static int auto_info(X509_REQ * req, STACK_OF(CONF_VALUE) * sk, STACK_OF(CONF_VALUE) * attr, int attribs, unsigned long chtype); static int add_attribute_object(X509_REQ * req, char *text, const char *def, char *value, int nid, int n_min, int n_max, unsigned long chtype); static int add_DN_object(X509_NAME * n, char *text, const char *def, char *value, int nid, int n_min, int n_max, unsigned long chtype, int mval); static int genpkey_cb(EVP_PKEY_CTX * ctx); static int req_check_len(int len, int n_min, int n_max); static int check_end(const char *str, const char *end); static EVP_PKEY_CTX *set_keygen_ctx(BIO * err, const char *gstr, int *pkey_type, long *pkeylen, char **palgnam); static CONF *req_conf = NULL; static int batch = 0; int req_main(int argc, char **argv) { unsigned long nmflag = 0, reqflag = 0; int ex = 1, x509 = 0, days = 30; X509 *x509ss = NULL; X509_REQ *req = NULL; EVP_PKEY_CTX *genctx = NULL; const char *keyalg = NULL; char *keyalgstr = NULL; STACK_OF(OPENSSL_STRING) * pkeyopts = NULL, *sigopts = NULL; EVP_PKEY *pkey = NULL; int i = 0, badops = 0, newreq = 0, verbose = 0, pkey_type = -1; long newkey = -1; BIO *in = NULL, *out = NULL; int informat, outformat, verify = 0, noout = 0, text = 0, keyform = FORMAT_PEM; int nodes = 0, kludge = 0, newhdr = 0, subject = 0, pubkey = 0; char *infile, *outfile, *prog, *keyfile = NULL, *template = NULL, *keyout = NULL; char *extensions = NULL; char *req_exts = NULL; const EVP_CIPHER *cipher = NULL; ASN1_INTEGER *serial = NULL; int modulus = 0; char *passargin = NULL, *passargout = NULL; char *passin = NULL, *passout = NULL; char *p; char *subj = NULL; int multirdn = 0; const EVP_MD *md_alg = NULL, *digest = NULL; unsigned long chtype = MBSTRING_ASC; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } req_conf = NULL; cipher = EVP_aes_256_cbc(); digest = EVP_sha256(); infile = NULL; outfile = NULL; informat = FORMAT_PEM; outformat = FORMAT_PEM; prog = argv[0]; argc--; argv++; while (argc >= 1) { if (strcmp(*argv, "-inform") == 0) { if (--argc < 1) goto bad; informat = str2fmt(*(++argv)); } else if (strcmp(*argv, "-outform") == 0) { if (--argc < 1) goto bad; outformat = str2fmt(*(++argv)); } else if (strcmp(*argv, "-key") == 0) { if (--argc < 1) goto bad; keyfile = *(++argv); } else if (strcmp(*argv, "-pubkey") == 0) { pubkey = 1; } else if (strcmp(*argv, "-new") == 0) { newreq = 1; } else if (strcmp(*argv, "-config") == 0) { if (--argc < 1) goto bad; template = *(++argv); } else if (strcmp(*argv, "-keyform") == 0) { if (--argc < 1) goto bad; keyform = str2fmt(*(++argv)); } else if (strcmp(*argv, "-in") == 0) { if (--argc < 1) goto bad; infile = *(++argv); } else if (strcmp(*argv, "-out") == 0) { if (--argc < 1) goto bad; outfile = *(++argv); } else if (strcmp(*argv, "-keyout") == 0) { if (--argc < 1) goto bad; keyout = *(++argv); } else if (strcmp(*argv, "-passin") == 0) { if (--argc < 1) goto bad; passargin = *(++argv); } else if (strcmp(*argv, "-passout") == 0) { if (--argc < 1) goto bad; passargout = *(++argv); } else if (strcmp(*argv, "-newkey") == 0) { if (--argc < 1) goto bad; keyalg = *(++argv); newreq = 1; } else if (strcmp(*argv, "-pkeyopt") == 0) { if (--argc < 1) goto bad; if (!pkeyopts) pkeyopts = sk_OPENSSL_STRING_new_null(); if (!pkeyopts || !sk_OPENSSL_STRING_push(pkeyopts, *(++argv))) goto bad; } else if (strcmp(*argv, "-sigopt") == 0) { if (--argc < 1) goto bad; if (!sigopts) sigopts = sk_OPENSSL_STRING_new_null(); if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv))) goto bad; } else if (strcmp(*argv, "-batch") == 0) batch = 1; else if (strcmp(*argv, "-newhdr") == 0) newhdr = 1; else if (strcmp(*argv, "-modulus") == 0) modulus = 1; else if (strcmp(*argv, "-verify") == 0) verify = 1; else if (strcmp(*argv, "-nodes") == 0) nodes = 1; else if (strcmp(*argv, "-noout") == 0) noout = 1; else if (strcmp(*argv, "-verbose") == 0) verbose = 1; else if (strcmp(*argv, "-utf8") == 0) chtype = MBSTRING_UTF8; else if (strcmp(*argv, "-nameopt") == 0) { if (--argc < 1) goto bad; if (!set_name_ex(&nmflag, *(++argv))) goto bad; } else if (strcmp(*argv, "-reqopt") == 0) { if (--argc < 1) goto bad; if (!set_cert_ex(&reqflag, *(++argv))) goto bad; } else if (strcmp(*argv, "-subject") == 0) subject = 1; else if (strcmp(*argv, "-text") == 0) text = 1; else if (strcmp(*argv, "-x509") == 0) x509 = 1; else if (strcmp(*argv, "-asn1-kludge") == 0) kludge = 1; else if (strcmp(*argv, "-no-asn1-kludge") == 0) kludge = 0; else if (strcmp(*argv, "-subj") == 0) { if (--argc < 1) goto bad; subj = *(++argv); } else if (strcmp(*argv, "-multivalue-rdn") == 0) multirdn = 1; else if (strcmp(*argv, "-days") == 0) { const char *errstr; if (--argc < 1) goto bad; days = strtonum(*(++argv), 1, INT_MAX, &errstr); if (errstr) { BIO_printf(bio_err, "bad -days %s, using 0: %s\n", *argv, errstr); days = 30; } } else if (strcmp(*argv, "-set_serial") == 0) { if (--argc < 1) goto bad; serial = s2i_ASN1_INTEGER(NULL, *(++argv)); if (!serial) goto bad; } else if (strcmp(*argv, "-extensions") == 0) { if (--argc < 1) goto bad; extensions = *(++argv); } else if (strcmp(*argv, "-reqexts") == 0) { if (--argc < 1) goto bad; req_exts = *(++argv); } else if ((md_alg = EVP_get_digestbyname(&((*argv)[1]))) != NULL) { /* ok */ digest = md_alg; } else { BIO_printf(bio_err, "unknown option %s\n", *argv); badops = 1; break; } argc--; argv++; } if (badops) { bad: BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog); BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err, " -inform arg input format - DER or PEM\n"); BIO_printf(bio_err, " -outform arg output format - DER or PEM\n"); BIO_printf(bio_err, " -in arg input file\n"); BIO_printf(bio_err, " -out arg output file\n"); BIO_printf(bio_err, " -text text form of request\n"); BIO_printf(bio_err, " -pubkey output public key\n"); BIO_printf(bio_err, " -noout do not output REQ\n"); BIO_printf(bio_err, " -verify verify signature on REQ\n"); BIO_printf(bio_err, " -modulus RSA modulus\n"); BIO_printf(bio_err, " -nodes don't encrypt the output key\n"); BIO_printf(bio_err, " -subject output the request's subject\n"); BIO_printf(bio_err, " -passin private key password source\n"); BIO_printf(bio_err, " -key file use the private key contained in file\n"); BIO_printf(bio_err, " -keyform arg key file format\n"); BIO_printf(bio_err, " -keyout arg file to send the key to\n"); BIO_printf(bio_err, " -newkey rsa:bits generate a new RSA key of 'bits' in size\n"); BIO_printf(bio_err, " -newkey dsa:file generate a new DSA key, parameters taken from CA in 'file'\n"); BIO_printf(bio_err, " -newkey ec:file generate a new EC key, parameters taken from CA in 'file'\n"); BIO_printf(bio_err, " -[digest] Digest to sign with (md5, sha1, md4)\n"); BIO_printf(bio_err, " -config file request template file.\n"); BIO_printf(bio_err, " -subj arg set or modify request subject\n"); BIO_printf(bio_err, " -multivalue-rdn enable support for multivalued RDNs\n"); BIO_printf(bio_err, " -new new request.\n"); BIO_printf(bio_err, " -batch do not ask anything during request generation\n"); BIO_printf(bio_err, " -x509 output a x509 structure instead of a cert. req.\n"); BIO_printf(bio_err, " -days number of days a certificate generated by -x509 is valid for.\n"); BIO_printf(bio_err, " -set_serial serial number to use for a certificate generated by -x509.\n"); BIO_printf(bio_err, " -newhdr output \"NEW\" in the header lines\n"); BIO_printf(bio_err, " -asn1-kludge Output the 'request' in a format that is wrong but some CA's\n"); BIO_printf(bio_err, " have been reported as requiring\n"); BIO_printf(bio_err, " -extensions .. specify certificate extension section (override value in config file)\n"); BIO_printf(bio_err, " -reqexts .. specify request extension section (override value in config file)\n"); BIO_printf(bio_err, " -utf8 input characters are UTF8 (default ASCII)\n"); BIO_printf(bio_err, " -nameopt arg - various certificate name options\n"); BIO_printf(bio_err, " -reqopt arg - various request text options\n\n"); goto end; } if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { BIO_printf(bio_err, "Error getting passwords\n"); goto end; } if (template != NULL) { long errline = -1; if (verbose) BIO_printf(bio_err, "Using configuration from %s\n", template); req_conf = NCONF_new(NULL); i = NCONF_load(req_conf, template, &errline); if (i == 0) { BIO_printf(bio_err, "error on line %ld of %s\n", errline, template); goto end; } } else { req_conf = config; if (req_conf == NULL) { BIO_printf(bio_err, "Unable to load config info from %s\n", default_config_file); if (newreq) goto end; } else if (verbose) BIO_printf(bio_err, "Using configuration from %s\n", default_config_file); } if (req_conf != NULL) { if (!load_config(bio_err, req_conf)) goto end; p = NCONF_get_string(req_conf, NULL, "oid_file"); if (p == NULL) ERR_clear_error(); if (p != NULL) { BIO *oid_bio; oid_bio = BIO_new_file(p, "r"); if (oid_bio == NULL) { /* BIO_printf(bio_err,"problems opening %s for extra oid's\n",p); ERR_print_errors(bio_err); */ } else { OBJ_create_objects(oid_bio); BIO_free(oid_bio); } } } if (!add_oid_section(bio_err, req_conf)) goto end; if (md_alg == NULL) { p = NCONF_get_string(req_conf, SECTION, "default_md"); if (p == NULL) ERR_clear_error(); if (p != NULL) { if ((md_alg = EVP_get_digestbyname(p)) != NULL) digest = md_alg; } } if (!extensions) { extensions = NCONF_get_string(req_conf, SECTION, V3_EXTENSIONS); if (!extensions) ERR_clear_error(); } if (extensions) { /* Check syntax of file */ X509V3_CTX ctx; X509V3_set_ctx_test(&ctx); X509V3_set_nconf(&ctx, req_conf); if (!X509V3_EXT_add_nconf(req_conf, &ctx, extensions, NULL)) { BIO_printf(bio_err, "Error Loading extension section %s\n", extensions); goto end; } } if (!passin) { passin = NCONF_get_string(req_conf, SECTION, "input_password"); if (!passin) ERR_clear_error(); } if (!passout) { passout = NCONF_get_string(req_conf, SECTION, "output_password"); if (!passout) ERR_clear_error(); } p = NCONF_get_string(req_conf, SECTION, STRING_MASK); if (!p) ERR_clear_error(); if (p && !ASN1_STRING_set_default_mask_asc(p)) { BIO_printf(bio_err, "Invalid global string mask setting %s\n", p); goto end; } if (chtype != MBSTRING_UTF8) { p = NCONF_get_string(req_conf, SECTION, UTF8_IN); if (!p) ERR_clear_error(); else if (!strcmp(p, "yes")) chtype = MBSTRING_UTF8; } if (!req_exts) { req_exts = NCONF_get_string(req_conf, SECTION, REQ_EXTENSIONS); if (!req_exts) ERR_clear_error(); } if (req_exts) { /* Check syntax of file */ X509V3_CTX ctx; X509V3_set_ctx_test(&ctx); X509V3_set_nconf(&ctx, req_conf); if (!X509V3_EXT_add_nconf(req_conf, &ctx, req_exts, NULL)) { BIO_printf(bio_err, "Error Loading request extension section %s\n", req_exts); goto end; } } in = BIO_new(BIO_s_file()); out = BIO_new(BIO_s_file()); if ((in == NULL) || (out == NULL)) goto end; if (keyfile != NULL) { pkey = load_key(bio_err, keyfile, keyform, 0, passin, "Private Key"); if (!pkey) { /* * load_key() has already printed an appropriate * message */ goto end; } } if (newreq && (pkey == NULL)) { if (!NCONF_get_number(req_conf, SECTION, BITS, &newkey)) { newkey = DEFAULT_KEY_LENGTH; } if (keyalg) { genctx = set_keygen_ctx(bio_err, keyalg, &pkey_type, &newkey, &keyalgstr); if (!genctx) goto end; } if (newkey < MIN_KEY_LENGTH && (pkey_type == EVP_PKEY_RSA || pkey_type == EVP_PKEY_DSA)) { BIO_printf(bio_err, "private key length is too short,\n"); BIO_printf(bio_err, "it needs to be at least %d bits, not %ld\n", MIN_KEY_LENGTH, newkey); goto end; } if (!genctx) { genctx = set_keygen_ctx(bio_err, NULL, &pkey_type, &newkey, &keyalgstr); if (!genctx) goto end; } if (pkeyopts) { char *genopt; for (i = 0; i < sk_OPENSSL_STRING_num(pkeyopts); i++) { genopt = sk_OPENSSL_STRING_value(pkeyopts, i); if (pkey_ctrl_string(genctx, genopt) <= 0) { BIO_printf(bio_err, "parameter error \"%s\"\n", genopt); ERR_print_errors(bio_err); goto end; } } } BIO_printf(bio_err, "Generating a %ld bit %s private key\n", newkey, keyalgstr); EVP_PKEY_CTX_set_cb(genctx, genpkey_cb); EVP_PKEY_CTX_set_app_data(genctx, bio_err); if (EVP_PKEY_keygen(genctx, &pkey) <= 0) { BIO_puts(bio_err, "Error Generating Key\n"); goto end; } EVP_PKEY_CTX_free(genctx); genctx = NULL; if (keyout == NULL) { keyout = NCONF_get_string(req_conf, SECTION, KEYFILE); if (keyout == NULL) ERR_clear_error(); } if (keyout == NULL) { BIO_printf(bio_err, "writing new private key to stdout\n"); BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { BIO_printf(bio_err, "writing new private key to '%s'\n", keyout); if (BIO_write_filename(out, keyout) <= 0) { perror(keyout); goto end; } } p = NCONF_get_string(req_conf, SECTION, "encrypt_rsa_key"); if (p == NULL) { ERR_clear_error(); p = NCONF_get_string(req_conf, SECTION, "encrypt_key"); if (p == NULL) ERR_clear_error(); } if ((p != NULL) && (strcmp(p, "no") == 0)) cipher = NULL; if (nodes) cipher = NULL; i = 0; loop: if (!PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0, NULL, passout)) { if ((ERR_GET_REASON(ERR_peek_error()) == PEM_R_PROBLEMS_GETTING_PASSWORD) && (i < 3)) { ERR_clear_error(); i++; goto loop; } goto end; } BIO_printf(bio_err, "-----\n"); } if (!newreq) { /* * Since we are using a pre-existing certificate request, the * kludge 'format' info should not be changed. */ kludge = -1; if (infile == NULL) BIO_set_fp(in, stdin, BIO_NOCLOSE); else { if (BIO_read_filename(in, infile) <= 0) { perror(infile); goto end; } } if (informat == FORMAT_ASN1) req = d2i_X509_REQ_bio(in, NULL); else if (informat == FORMAT_PEM) req = PEM_read_bio_X509_REQ(in, NULL, NULL, NULL); else { BIO_printf(bio_err, "bad input format specified for X509 request\n"); goto end; } if (req == NULL) { BIO_printf(bio_err, "unable to load X509 request\n"); goto end; } } if (newreq || x509) { if (pkey == NULL) { BIO_printf(bio_err, "you need to specify a private key\n"); goto end; } if (req == NULL) { req = X509_REQ_new(); if (req == NULL) { goto end; } i = make_REQ(req, pkey, subj, multirdn, !x509, chtype); subj = NULL; /* done processing '-subj' option */ if ((kludge > 0) && !sk_X509_ATTRIBUTE_num(req->req_info->attributes)) { sk_X509_ATTRIBUTE_free(req->req_info->attributes); req->req_info->attributes = NULL; } if (!i) { BIO_printf(bio_err, "problems making Certificate Request\n"); goto end; } } if (x509) { EVP_PKEY *tmppkey; X509V3_CTX ext_ctx; if ((x509ss = X509_new()) == NULL) goto end; /* Set version to V3 */ if (extensions && !X509_set_version(x509ss, 2)) goto end; if (serial) { if (!X509_set_serialNumber(x509ss, serial)) goto end; } else { if (!rand_serial(NULL, X509_get_serialNumber(x509ss))) goto end; } if (!X509_set_issuer_name(x509ss, X509_REQ_get_subject_name(req))) goto end; if (!X509_gmtime_adj(X509_get_notBefore(x509ss), 0)) goto end; if (!X509_time_adj_ex(X509_get_notAfter(x509ss), days, 0, NULL)) goto end; if (!X509_set_subject_name(x509ss, X509_REQ_get_subject_name(req))) goto end; tmppkey = X509_REQ_get_pubkey(req); if (!tmppkey || !X509_set_pubkey(x509ss, tmppkey)) goto end; EVP_PKEY_free(tmppkey); /* Set up V3 context struct */ X509V3_set_ctx(&ext_ctx, x509ss, x509ss, NULL, NULL, 0); X509V3_set_nconf(&ext_ctx, req_conf); /* Add extensions */ if (extensions && !X509V3_EXT_add_nconf(req_conf, &ext_ctx, extensions, x509ss)) { BIO_printf(bio_err, "Error Loading extension section %s\n", extensions); goto end; } i = do_X509_sign(bio_err, x509ss, pkey, digest, sigopts); if (!i) { ERR_print_errors(bio_err); goto end; } } else { X509V3_CTX ext_ctx; /* Set up V3 context struct */ X509V3_set_ctx(&ext_ctx, NULL, NULL, req, NULL, 0); X509V3_set_nconf(&ext_ctx, req_conf); /* Add extensions */ if (req_exts && !X509V3_EXT_REQ_add_nconf(req_conf, &ext_ctx, req_exts, req)) { BIO_printf(bio_err, "Error Loading extension section %s\n", req_exts); goto end; } i = do_X509_REQ_sign(bio_err, req, pkey, digest, sigopts); if (!i) { ERR_print_errors(bio_err); goto end; } } } if (subj && x509) { BIO_printf(bio_err, "Cannot modifiy certificate subject\n"); goto end; } if (subj && !x509) { if (verbose) { BIO_printf(bio_err, "Modifying Request's Subject\n"); print_name(bio_err, "old subject=", X509_REQ_get_subject_name(req), nmflag); } if (build_subject(req, subj, chtype, multirdn) == 0) { BIO_printf(bio_err, "ERROR: cannot modify subject\n"); ex = 1; goto end; } req->req_info->enc.modified = 1; if (verbose) { print_name(bio_err, "new subject=", X509_REQ_get_subject_name(req), nmflag); } } if (verify && !x509) { int tmp = 0; if (pkey == NULL) { pkey = X509_REQ_get_pubkey(req); tmp = 1; if (pkey == NULL) goto end; } i = X509_REQ_verify(req, pkey); if (tmp) { EVP_PKEY_free(pkey); pkey = NULL; } if (i < 0) { goto end; } else if (i == 0) { BIO_printf(bio_err, "verify failure\n"); ERR_print_errors(bio_err); } else /* if (i > 0) */ BIO_printf(bio_err, "verify OK\n"); } if (noout && !text && !modulus && !subject && !pubkey) { ex = 0; goto end; } if (outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if ((keyout != NULL) && (strcmp(outfile, keyout) == 0)) i = (int) BIO_append_filename(out, outfile); else i = (int) BIO_write_filename(out, outfile); if (!i) { perror(outfile); goto end; } } if (pubkey) { EVP_PKEY *tpubkey; tpubkey = X509_REQ_get_pubkey(req); if (tpubkey == NULL) { BIO_printf(bio_err, "Error getting public key\n"); ERR_print_errors(bio_err); goto end; } PEM_write_bio_PUBKEY(out, tpubkey); EVP_PKEY_free(tpubkey); } if (text) { if (x509) X509_print_ex(out, x509ss, nmflag, reqflag); else X509_REQ_print_ex(out, req, nmflag, reqflag); } if (subject) { if (x509) print_name(out, "subject=", X509_get_subject_name(x509ss), nmflag); else print_name(out, "subject=", X509_REQ_get_subject_name(req), nmflag); } if (modulus) { EVP_PKEY *tpubkey; if (x509) tpubkey = X509_get_pubkey(x509ss); else tpubkey = X509_REQ_get_pubkey(req); if (tpubkey == NULL) { fprintf(stdout, "Modulus=unavailable\n"); goto end; } fprintf(stdout, "Modulus="); if (EVP_PKEY_base_id(tpubkey) == EVP_PKEY_RSA) BN_print(out, tpubkey->pkey.rsa->n); else fprintf(stdout, "Wrong Algorithm type"); EVP_PKEY_free(tpubkey); fprintf(stdout, "\n"); } if (!noout && !x509) { if (outformat == FORMAT_ASN1) i = i2d_X509_REQ_bio(out, req); else if (outformat == FORMAT_PEM) { if (newhdr) i = PEM_write_bio_X509_REQ_NEW(out, req); else i = PEM_write_bio_X509_REQ(out, req); } else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } if (!i) { BIO_printf(bio_err, "unable to write X509 request\n"); goto end; } } if (!noout && x509 && (x509ss != NULL)) { if (outformat == FORMAT_ASN1) i = i2d_X509_bio(out, x509ss); else if (outformat == FORMAT_PEM) i = PEM_write_bio_X509(out, x509ss); else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } if (!i) { BIO_printf(bio_err, "unable to write X509 certificate\n"); goto end; } } ex = 0; end: if (ex) { ERR_print_errors(bio_err); } if ((req_conf != NULL) && (req_conf != config)) NCONF_free(req_conf); BIO_free(in); BIO_free_all(out); EVP_PKEY_free(pkey); if (genctx) EVP_PKEY_CTX_free(genctx); if (pkeyopts) sk_OPENSSL_STRING_free(pkeyopts); if (sigopts) sk_OPENSSL_STRING_free(sigopts); free(keyalgstr); X509_REQ_free(req); X509_free(x509ss); ASN1_INTEGER_free(serial); if (passargin && passin) free(passin); if (passargout && passout) free(passout); OBJ_cleanup(); return (ex); } static int make_REQ(X509_REQ * req, EVP_PKEY * pkey, char *subj, int multirdn, int attribs, unsigned long chtype) { int ret = 0, i; char no_prompt = 0; STACK_OF(CONF_VALUE) * dn_sk, *attr_sk = NULL; char *tmp, *dn_sect, *attr_sect; tmp = NCONF_get_string(req_conf, SECTION, PROMPT); if (tmp == NULL) ERR_clear_error(); if ((tmp != NULL) && !strcmp(tmp, "no")) no_prompt = 1; dn_sect = NCONF_get_string(req_conf, SECTION, DISTINGUISHED_NAME); if (dn_sect == NULL) { BIO_printf(bio_err, "unable to find '%s' in config\n", DISTINGUISHED_NAME); goto err; } dn_sk = NCONF_get_section(req_conf, dn_sect); if (dn_sk == NULL) { BIO_printf(bio_err, "unable to get '%s' section\n", dn_sect); goto err; } attr_sect = NCONF_get_string(req_conf, SECTION, ATTRIBUTES); if (attr_sect == NULL) { ERR_clear_error(); attr_sk = NULL; } else { attr_sk = NCONF_get_section(req_conf, attr_sect); if (attr_sk == NULL) { BIO_printf(bio_err, "unable to get '%s' section\n", attr_sect); goto err; } } /* setup version number */ if (!X509_REQ_set_version(req, 0L)) goto err; /* version 1 */ if (no_prompt) i = auto_info(req, dn_sk, attr_sk, attribs, chtype); else { if (subj) i = build_subject(req, subj, chtype, multirdn); else i = prompt_info(req, dn_sk, dn_sect, attr_sk, attr_sect, attribs, chtype); } if (!i) goto err; if (!X509_REQ_set_pubkey(req, pkey)) goto err; ret = 1; err: return (ret); } /* * subject is expected to be in the format /type0=value0/type1=value1/type2=... * where characters may be escaped by \ */ static int build_subject(X509_REQ * req, char *subject, unsigned long chtype, int multirdn) { X509_NAME *n; if (!(n = parse_name(subject, chtype, multirdn))) return 0; if (!X509_REQ_set_subject_name(req, n)) { X509_NAME_free(n); return 0; } X509_NAME_free(n); return 1; } static int prompt_info(X509_REQ * req, STACK_OF(CONF_VALUE) * dn_sk, char *dn_sect, STACK_OF(CONF_VALUE) * attr_sk, char *attr_sect, int attribs, unsigned long chtype) { int i; char *p, *q; char buf[100]; int nid, mval; long n_min, n_max; char *type, *value; const char *def; CONF_VALUE *v; X509_NAME *subj; subj = X509_REQ_get_subject_name(req); if (!batch) { BIO_printf(bio_err, "You are about to be asked to enter information that will be incorporated\n"); BIO_printf(bio_err, "into your certificate request.\n"); BIO_printf(bio_err, "What you are about to enter is what is called a Distinguished Name or a DN.\n"); BIO_printf(bio_err, "There are quite a few fields but you can leave some blank\n"); BIO_printf(bio_err, "For some fields there will be a default value,\n"); BIO_printf(bio_err, "If you enter '.', the field will be left blank.\n"); BIO_printf(bio_err, "-----\n"); } if (sk_CONF_VALUE_num(dn_sk)) { i = -1; start: for (;;) { int ret; i++; if (sk_CONF_VALUE_num(dn_sk) <= i) break; v = sk_CONF_VALUE_value(dn_sk, i); p = q = NULL; type = v->name; if (!check_end(type, "_min") || !check_end(type, "_max") || !check_end(type, "_default") || !check_end(type, "_value")) continue; /* * Skip past any leading X. X: X, etc to allow for * multiple instances */ for (p = v->name; *p; p++) if ((*p == ':') || (*p == ',') || (*p == '.')) { p++; if (*p) type = p; break; } if (*type == '+') { mval = -1; type++; } else mval = 0; /* If OBJ not recognised ignore it */ if ((nid = OBJ_txt2nid(type)) == NID_undef) goto start; ret = snprintf(buf, sizeof buf, "%s_default", v->name); if (ret == -1 || ret >= sizeof(buf)) { BIO_printf(bio_err, "Name '%s' too long for default\n", v->name); return 0; } if ((def = NCONF_get_string(req_conf, dn_sect, buf)) == NULL) { ERR_clear_error(); def = ""; } ret = snprintf(buf, sizeof buf, "%s_value", v->name); if (ret == -1 || ret >= sizeof(buf)) { BIO_printf(bio_err, "Name '%s' too long for value\n", v->name); return 0; } if ((value = NCONF_get_string(req_conf, dn_sect, buf)) == NULL) { ERR_clear_error(); value = NULL; } ret = snprintf(buf, sizeof buf, "%s_min", v->name); if (ret == -1 || ret >= sizeof(buf)) { BIO_printf(bio_err, "Name '%s' too long for min\n", v->name); return 0; } if (!NCONF_get_number(req_conf, dn_sect, buf, &n_min)) { ERR_clear_error(); n_min = -1; } ret = snprintf(buf, sizeof buf, "%s_max", v->name); if (ret == -1 || ret >= sizeof(buf)) { BIO_printf(bio_err, "Name '%s' too long for max\n", v->name); return 0; } if (!NCONF_get_number(req_conf, dn_sect, buf, &n_max)) { ERR_clear_error(); n_max = -1; } if (!add_DN_object(subj, v->value, def, value, nid, n_min, n_max, chtype, mval)) return 0; } if (X509_NAME_entry_count(subj) == 0) { BIO_printf(bio_err, "error, no objects specified in config file\n"); return 0; } if (attribs) { if ((attr_sk != NULL) && (sk_CONF_VALUE_num(attr_sk) > 0) && (!batch)) { BIO_printf(bio_err, "\nPlease enter the following 'extra' attributes\n"); BIO_printf(bio_err, "to be sent with your certificate request\n"); } i = -1; start2: for (;;) { int ret; i++; if ((attr_sk == NULL) || (sk_CONF_VALUE_num(attr_sk) <= i)) break; v = sk_CONF_VALUE_value(attr_sk, i); type = v->name; if ((nid = OBJ_txt2nid(type)) == NID_undef) goto start2; ret = snprintf(buf, sizeof buf, "%s_default", type); if (ret == -1 || ret >= sizeof(buf)) { BIO_printf(bio_err, "Name '%s' too long for default\n", v->name); return 0; } if ((def = NCONF_get_string(req_conf, attr_sect, buf)) == NULL) { ERR_clear_error(); def = ""; } ret = snprintf(buf, sizeof buf, "%s_value", type); if (ret == -1 || ret >= sizeof(buf)) { BIO_printf(bio_err, "Name '%s' too long for value\n", v->name); return 0; } if ((value = NCONF_get_string(req_conf, attr_sect, buf)) == NULL) { ERR_clear_error(); value = NULL; } ret = snprintf(buf, sizeof buf, "%s_min", type); if (ret == -1 || ret >= sizeof(buf)) { BIO_printf(bio_err, "Name '%s' too long for min\n", v->name); return 0; } if (!NCONF_get_number(req_conf, attr_sect, buf, &n_min)) { ERR_clear_error(); n_min = -1; } ret = snprintf(buf, sizeof buf, "%s_max", type); if (ret == -1 || ret >= sizeof(buf)) { BIO_printf(bio_err, "Name '%s' too long for max\n", v->name); return 0; } if (!NCONF_get_number(req_conf, attr_sect, buf, &n_max)) { ERR_clear_error(); n_max = -1; } if (!add_attribute_object(req, v->value, def, value, nid, n_min, n_max, chtype)) return 0; } } } else { BIO_printf(bio_err, "No template, please set one up.\n"); return 0; } return 1; } static int auto_info(X509_REQ * req, STACK_OF(CONF_VALUE) * dn_sk, STACK_OF(CONF_VALUE) * attr_sk, int attribs, unsigned long chtype) { int i; char *p, *q; char *type; CONF_VALUE *v; X509_NAME *subj; subj = X509_REQ_get_subject_name(req); for (i = 0; i < sk_CONF_VALUE_num(dn_sk); i++) { int mval; v = sk_CONF_VALUE_value(dn_sk, i); p = q = NULL; type = v->name; /* * Skip past any leading X. X: X, etc to allow for multiple * instances */ for (p = v->name; *p; p++) if ((*p == ':') || (*p == ',') || (*p == '.')) { p++; if (*p) type = p; break; } if (*p == '+') { p++; mval = -1; } else mval = 0; if (!X509_NAME_add_entry_by_txt(subj, type, chtype, (unsigned char *) v->value, -1, -1, mval)) return 0; } if (!X509_NAME_entry_count(subj)) { BIO_printf(bio_err, "error, no objects specified in config file\n"); return 0; } if (attribs) { for (i = 0; i < sk_CONF_VALUE_num(attr_sk); i++) { v = sk_CONF_VALUE_value(attr_sk, i); if (!X509_REQ_add1_attr_by_txt(req, v->name, chtype, (unsigned char *) v->value, -1)) return 0; } } return 1; } static int add_DN_object(X509_NAME * n, char *text, const char *def, char *value, int nid, int n_min, int n_max, unsigned long chtype, int mval) { int i, ret = 0; char buf[1024]; start: if (!batch) BIO_printf(bio_err, "%s [%s]:", text, def); (void) BIO_flush(bio_err); if (value != NULL) { strlcpy(buf, value, sizeof buf); strlcat(buf, "\n", sizeof buf); BIO_printf(bio_err, "%s\n", value); } else { buf[0] = '\0'; if (!batch) { if (!fgets(buf, sizeof buf, stdin)) return 0; } else { buf[0] = '\n'; buf[1] = '\0'; } } if (buf[0] == '\0') return (0); else if (buf[0] == '\n') { if ((def == NULL) || (def[0] == '\0')) return (1); strlcpy(buf, def, sizeof buf); strlcat(buf, "\n", sizeof buf); } else if ((buf[0] == '.') && (buf[1] == '\n')) return (1); i = strlen(buf); if (buf[i - 1] != '\n') { BIO_printf(bio_err, "weird input :-(\n"); return (0); } buf[--i] = '\0'; if (!req_check_len(i, n_min, n_max)) goto start; if (!X509_NAME_add_entry_by_NID(n, nid, chtype, (unsigned char *) buf, -1, -1, mval)) goto err; ret = 1; err: return (ret); } static int add_attribute_object(X509_REQ * req, char *text, const char *def, char *value, int nid, int n_min, int n_max, unsigned long chtype) { int i; static char buf[1024]; start: if (!batch) BIO_printf(bio_err, "%s [%s]:", text, def); (void) BIO_flush(bio_err); if (value != NULL) { strlcpy(buf, value, sizeof buf); strlcat(buf, "\n", sizeof buf); BIO_printf(bio_err, "%s\n", value); } else { buf[0] = '\0'; if (!batch) { if (!fgets(buf, sizeof buf, stdin)) return 0; } else { buf[0] = '\n'; buf[1] = '\0'; } } if (buf[0] == '\0') return (0); else if (buf[0] == '\n') { if ((def == NULL) || (def[0] == '\0')) return (1); strlcpy(buf, def, sizeof buf); strlcat(buf, "\n", sizeof buf); } else if ((buf[0] == '.') && (buf[1] == '\n')) return (1); i = strlen(buf); if (buf[i - 1] != '\n') { BIO_printf(bio_err, "weird input :-(\n"); return (0); } buf[--i] = '\0'; if (!req_check_len(i, n_min, n_max)) goto start; if (!X509_REQ_add1_attr_by_NID(req, nid, chtype, (unsigned char *) buf, -1)) { BIO_printf(bio_err, "Error adding attribute\n"); ERR_print_errors(bio_err); goto err; } return (1); err: return (0); } static int req_check_len(int len, int n_min, int n_max) { if ((n_min > 0) && (len < n_min)) { BIO_printf(bio_err, "string is too short, it needs to be at least %d bytes long\n", n_min); return (0); } if ((n_max >= 0) && (len > n_max)) { BIO_printf(bio_err, "string is too long, it needs to be less than %d bytes long\n", n_max); return (0); } return (1); } /* Check if the end of a string matches 'end' */ static int check_end(const char *str, const char *end) { int elen, slen; const char *tmp; elen = strlen(end); slen = strlen(str); if (elen > slen) return 1; tmp = str + slen - elen; return strcmp(tmp, end); } static EVP_PKEY_CTX * set_keygen_ctx(BIO * err, const char *gstr, int *pkey_type, long *pkeylen, char **palgnam) { EVP_PKEY_CTX *gctx = NULL; EVP_PKEY *param = NULL; long keylen = -1; BIO *pbio = NULL; const char *paramfile = NULL; const char *errstr; if (gstr == NULL) { *pkey_type = EVP_PKEY_RSA; keylen = *pkeylen; } else if (gstr[0] >= '0' && gstr[0] <= '9') { *pkey_type = EVP_PKEY_RSA; keylen = strtonum(gstr, 0, LONG_MAX, &errstr); if (errstr) { BIO_printf(err, "bad algorithm %s: %s\n", gstr, errstr); return NULL; } *pkeylen = keylen; } else if (!strncmp(gstr, "param:", 6)) paramfile = gstr + 6; else { const char *p = strchr(gstr, ':'); int len; const EVP_PKEY_ASN1_METHOD *ameth; if (p) len = p - gstr; else len = strlen(gstr); ameth = EVP_PKEY_asn1_find_str(NULL, gstr, len); if (!ameth) { BIO_printf(err, "Unknown algorithm %.*s\n", len, gstr); return NULL; } EVP_PKEY_asn1_get0_info(NULL, pkey_type, NULL, NULL, NULL, ameth); if (*pkey_type == EVP_PKEY_RSA) { if (p) { keylen = strtonum(p + 1, 0, LONG_MAX, &errstr); if (errstr) { BIO_printf(err, "bad algorithm %s: %s\n", p + 1, errstr); return NULL; } *pkeylen = keylen; } else keylen = *pkeylen; } else if (p) paramfile = p + 1; } if (paramfile) { pbio = BIO_new_file(paramfile, "r"); if (!pbio) { BIO_printf(err, "Can't open parameter file %s\n", paramfile); return NULL; } param = PEM_read_bio_Parameters(pbio, NULL); if (!param) { X509 *x; (void) BIO_reset(pbio); x = PEM_read_bio_X509(pbio, NULL, NULL, NULL); if (x) { param = X509_get_pubkey(x); X509_free(x); } } BIO_free(pbio); if (!param) { BIO_printf(err, "Error reading parameter file %s\n", paramfile); return NULL; } if (*pkey_type == -1) *pkey_type = EVP_PKEY_id(param); else if (*pkey_type != EVP_PKEY_base_id(param)) { BIO_printf(err, "Key Type does not match parameters\n"); EVP_PKEY_free(param); return NULL; } } if (palgnam) { const EVP_PKEY_ASN1_METHOD *ameth; const char *anam; ameth = EVP_PKEY_asn1_find(NULL, *pkey_type); if (!ameth) { BIO_puts(err, "Internal error: can't find key algorithm\n"); return NULL; } EVP_PKEY_asn1_get0_info(NULL, NULL, NULL, NULL, &anam, ameth); *palgnam = strdup(anam); } if (param) { gctx = EVP_PKEY_CTX_new(param, NULL); *pkeylen = EVP_PKEY_bits(param); EVP_PKEY_free(param); } else gctx = EVP_PKEY_CTX_new_id(*pkey_type, NULL); if (!gctx) { BIO_puts(err, "Error allocating keygen context\n"); ERR_print_errors(err); return NULL; } if (EVP_PKEY_keygen_init(gctx) <= 0) { BIO_puts(err, "Error initializing keygen context\n"); ERR_print_errors(err); return NULL; } if ((*pkey_type == EVP_PKEY_RSA) && (keylen != -1)) { if (EVP_PKEY_CTX_set_rsa_keygen_bits(gctx, keylen) <= 0) { BIO_puts(err, "Error setting RSA keysize\n"); ERR_print_errors(err); EVP_PKEY_CTX_free(gctx); return NULL; } } return gctx; } static int genpkey_cb(EVP_PKEY_CTX * ctx) { char c = '*'; BIO *b = EVP_PKEY_CTX_get_app_data(ctx); int p; p = EVP_PKEY_CTX_get_keygen_info(ctx, 0); if (p == 0) c = '.'; if (p == 1) c = '+'; if (p == 2) c = '*'; if (p == 3) c = '\n'; BIO_write(b, &c, 1); (void) BIO_flush(b); return 1; } static int do_sign_init(BIO * err, EVP_MD_CTX * ctx, EVP_PKEY * pkey, const EVP_MD * md, STACK_OF(OPENSSL_STRING) * sigopts) { EVP_PKEY_CTX *pkctx = NULL; int i; EVP_MD_CTX_init(ctx); if (!EVP_DigestSignInit(ctx, &pkctx, md, NULL, pkey)) return 0; for (i = 0; i < sk_OPENSSL_STRING_num(sigopts); i++) { char *sigopt = sk_OPENSSL_STRING_value(sigopts, i); if (pkey_ctrl_string(pkctx, sigopt) <= 0) { BIO_printf(err, "parameter error \"%s\"\n", sigopt); ERR_print_errors(bio_err); return 0; } } return 1; } int do_X509_sign(BIO * err, X509 * x, EVP_PKEY * pkey, const EVP_MD * md, STACK_OF(OPENSSL_STRING) * sigopts) { int rv; EVP_MD_CTX mctx; EVP_MD_CTX_init(&mctx); rv = do_sign_init(err, &mctx, pkey, md, sigopts); if (rv > 0) rv = X509_sign_ctx(x, &mctx); EVP_MD_CTX_cleanup(&mctx); return rv > 0 ? 1 : 0; } int do_X509_REQ_sign(BIO * err, X509_REQ * x, EVP_PKEY * pkey, const EVP_MD * md, STACK_OF(OPENSSL_STRING) * sigopts) { int rv; EVP_MD_CTX mctx; EVP_MD_CTX_init(&mctx); rv = do_sign_init(err, &mctx, pkey, md, sigopts); if (rv > 0) rv = X509_REQ_sign_ctx(x, &mctx); EVP_MD_CTX_cleanup(&mctx); return rv > 0 ? 1 : 0; } int do_X509_CRL_sign(BIO * err, X509_CRL * x, EVP_PKEY * pkey, const EVP_MD * md, STACK_OF(OPENSSL_STRING) * sigopts) { int rv; EVP_MD_CTX mctx; EVP_MD_CTX_init(&mctx); rv = do_sign_init(err, &mctx, pkey, md, sigopts); if (rv > 0) rv = X509_CRL_sign_ctx(x, &mctx); EVP_MD_CTX_cleanup(&mctx); return rv > 0 ? 1 : 0; } |
Added jni/libressl/apps/openssl/rsa.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 | /* $OpenBSD: rsa.c,v 1.7 2015/10/17 07:51:10 semarie Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <openssl/opensslconf.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "apps.h" #include "progs.h" #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/pem.h> #include <openssl/rsa.h> #include <openssl/x509.h> static struct { int check; const EVP_CIPHER *enc; char *infile; int informat; int modulus; int noout; char *outfile; int outformat; char *passargin; char *passargout; int pubin; int pubout; int pvk_encr; int sgckey; int text; } rsa_config; static int rsa_opt_cipher(int argc, char **argv, int *argsused) { char *name = argv[0]; if (*name++ != '-') return (1); if ((rsa_config.enc = EVP_get_cipherbyname(name)) == NULL) { fprintf(stderr, "Invalid cipher '%s'\n", name); return (1); } *argsused = 1; return (0); } static struct option rsa_options[] = { { .name = "check", .desc = "Check consistency of RSA private key", .type = OPTION_FLAG, .opt.flag = &rsa_config.check, }, { .name = "in", .argname = "file", .desc = "Input file (default stdin)", .type = OPTION_ARG, .opt.arg = &rsa_config.infile, }, { .name = "inform", .argname = "format", .desc = "Input format (DER, NET or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &rsa_config.informat, }, { .name = "modulus", .desc = "Print the RSA key modulus", .type = OPTION_FLAG, .opt.flag = &rsa_config.modulus, }, { .name = "noout", .desc = "Do not print encoded version of the key", .type = OPTION_FLAG, .opt.flag = &rsa_config.noout, }, { .name = "out", .argname = "file", .desc = "Output file (default stdout)", .type = OPTION_ARG, .opt.arg = &rsa_config.outfile, }, { .name = "outform", .argname = "format", .desc = "Output format (DER, NET or PEM (default PEM))", .type = OPTION_ARG_FORMAT, .opt.value = &rsa_config.outformat, }, { .name = "passin", .argname = "src", .desc = "Input file passphrase source", .type = OPTION_ARG, .opt.arg = &rsa_config.passargin, }, { .name = "passout", .argname = "src", .desc = "Output file passphrase source", .type = OPTION_ARG, .opt.arg = &rsa_config.passargout, }, { .name = "pubin", .desc = "Expect a public key (default private key)", .type = OPTION_VALUE, .value = 1, .opt.value = &rsa_config.pubin, }, { .name = "pubout", .desc = "Output a public key (default private key)", .type = OPTION_VALUE, .value = 1, .opt.value = &rsa_config.pubout, }, { .name = "pvk-none", .type = OPTION_VALUE, .value = 0, .opt.value = &rsa_config.pvk_encr, }, { .name = "pvk-strong", .type = OPTION_VALUE, .value = 2, .opt.value = &rsa_config.pvk_encr, }, { .name = "pvk-weak", .type = OPTION_VALUE, .value = 1, .opt.value = &rsa_config.pvk_encr, }, { .name = "RSAPublicKey_in", .type = OPTION_VALUE, .value = 2, .opt.value = &rsa_config.pubin, }, { .name = "RSAPublicKey_out", .type = OPTION_VALUE, .value = 2, .opt.value = &rsa_config.pubout, }, { .name = "sgckey", .desc = "Use modified NET algorithm for IIS and SGC keys", .type = OPTION_FLAG, .opt.flag = &rsa_config.sgckey, }, { .name = "text", .desc = "Print in plain text in addition to encoded", .type = OPTION_FLAG, .opt.flag = &rsa_config.text, }, { .name = NULL, .type = OPTION_ARGV_FUNC, .opt.argvfunc = rsa_opt_cipher, }, { NULL } }; static void show_ciphers(const OBJ_NAME *name, void *arg) { static int n; fprintf(stderr, " -%-24s%s", name->name, (++n % 3 ? "" : "\n")); } static void rsa_usage() { fprintf(stderr, "usage: rsa [-ciphername] [-check] [-in file] " "[-inform fmt]\n" " [-modulus] [-noout] [-out file] [-outform fmt] " "[-passin src]\n" " [-passout src] [-pubin] [-pubout] [-sgckey] [-text]\n\n"); options_usage(rsa_options); fprintf(stderr, "\n"); fprintf(stderr, "Valid ciphername values:\n\n"); OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, show_ciphers, NULL); fprintf(stderr, "\n"); } int rsa_main(int argc, char **argv) { int ret = 1; RSA *rsa = NULL; int i; BIO *out = NULL; char *passin = NULL, *passout = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } memset(&rsa_config, 0, sizeof(rsa_config)); rsa_config.pvk_encr = 2; rsa_config.informat = FORMAT_PEM; rsa_config.outformat = FORMAT_PEM; if (options_parse(argc, argv, rsa_options, NULL, NULL) != 0) { rsa_usage(); goto end; } if (!app_passwd(bio_err, rsa_config.passargin, rsa_config.passargout, &passin, &passout)) { BIO_printf(bio_err, "Error getting passwords\n"); goto end; } if (rsa_config.check && rsa_config.pubin) { BIO_printf(bio_err, "Only private keys can be checked\n"); goto end; } out = BIO_new(BIO_s_file()); { EVP_PKEY *pkey; if (rsa_config.pubin) { int tmpformat = -1; if (rsa_config.pubin == 2) { if (rsa_config.informat == FORMAT_PEM) tmpformat = FORMAT_PEMRSA; else if (rsa_config.informat == FORMAT_ASN1) tmpformat = FORMAT_ASN1RSA; } else if (rsa_config.informat == FORMAT_NETSCAPE && rsa_config.sgckey) tmpformat = FORMAT_IISSGC; else tmpformat = rsa_config.informat; pkey = load_pubkey(bio_err, rsa_config.infile, tmpformat, 1, passin, "Public Key"); } else pkey = load_key(bio_err, rsa_config.infile, (rsa_config.informat == FORMAT_NETSCAPE && rsa_config.sgckey ? FORMAT_IISSGC : rsa_config.informat), 1, passin, "Private Key"); if (pkey != NULL) rsa = EVP_PKEY_get1_RSA(pkey); EVP_PKEY_free(pkey); } if (rsa == NULL) { ERR_print_errors(bio_err); goto end; } if (rsa_config.outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, rsa_config.outfile) <= 0) { perror(rsa_config.outfile); goto end; } } if (rsa_config.text) if (!RSA_print(out, rsa, 0)) { perror(rsa_config.outfile); ERR_print_errors(bio_err); goto end; } if (rsa_config.modulus) { BIO_printf(out, "Modulus="); BN_print(out, rsa->n); BIO_printf(out, "\n"); } if (rsa_config.check) { int r = RSA_check_key(rsa); if (r == 1) BIO_printf(out, "RSA key ok\n"); else if (r == 0) { unsigned long err; while ((err = ERR_peek_error()) != 0 && ERR_GET_LIB(err) == ERR_LIB_RSA && ERR_GET_FUNC(err) == RSA_F_RSA_CHECK_KEY && ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE) { BIO_printf(out, "RSA key error: %s\n", ERR_reason_error_string(err)); ERR_get_error(); /* remove e from error * stack */ } } if (r == -1 || ERR_peek_error() != 0) { /* should happen only if * r == -1 */ ERR_print_errors(bio_err); goto end; } } if (rsa_config.noout) { ret = 0; goto end; } BIO_printf(bio_err, "writing RSA key\n"); if (rsa_config.outformat == FORMAT_ASN1) { if (rsa_config.pubout || rsa_config.pubin) { if (rsa_config.pubout == 2) i = i2d_RSAPublicKey_bio(out, rsa); else i = i2d_RSA_PUBKEY_bio(out, rsa); } else i = i2d_RSAPrivateKey_bio(out, rsa); } #ifndef OPENSSL_NO_RC4 else if (rsa_config.outformat == FORMAT_NETSCAPE) { unsigned char *p, *pp; int size; i = 1; size = i2d_RSA_NET(rsa, NULL, NULL, rsa_config.sgckey); if ((p = malloc(size)) == NULL) { BIO_printf(bio_err, "Memory allocation failure\n"); goto end; } pp = p; i2d_RSA_NET(rsa, &p, NULL, rsa_config.sgckey); BIO_write(out, (char *) pp, size); free(pp); } #endif else if (rsa_config.outformat == FORMAT_PEM) { if (rsa_config.pubout || rsa_config.pubin) { if (rsa_config.pubout == 2) i = PEM_write_bio_RSAPublicKey(out, rsa); else i = PEM_write_bio_RSA_PUBKEY(out, rsa); } else i = PEM_write_bio_RSAPrivateKey(out, rsa, rsa_config.enc, NULL, 0, NULL, passout); #if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_RC4) } else if (rsa_config.outformat == FORMAT_MSBLOB || rsa_config.outformat == FORMAT_PVK) { EVP_PKEY *pk; pk = EVP_PKEY_new(); EVP_PKEY_set1_RSA(pk, rsa); if (rsa_config.outformat == FORMAT_PVK) i = i2b_PVK_bio(out, pk, rsa_config.pvk_encr, 0, passout); else if (rsa_config.pubin || rsa_config.pubout) i = i2b_PublicKey_bio(out, pk); else i = i2b_PrivateKey_bio(out, pk); EVP_PKEY_free(pk); #endif } else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } if (i <= 0) { BIO_printf(bio_err, "unable to write key\n"); ERR_print_errors(bio_err); } else ret = 0; end: BIO_free_all(out); RSA_free(rsa); free(passin); free(passout); return (ret); } |
Added jni/libressl/apps/openssl/rsautl.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 | /* $OpenBSD: rsautl.c,v 1.9 2015/10/17 07:51:10 semarie Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2000. */ /* ==================================================================== * Copyright (c) 2000 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <openssl/opensslconf.h> #include <string.h> #include "apps.h" #include <openssl/err.h> #include <openssl/pem.h> #include <openssl/rsa.h> #define RSA_SIGN 1 #define RSA_VERIFY 2 #define RSA_ENCRYPT 3 #define RSA_DECRYPT 4 #define KEY_PRIVKEY 1 #define KEY_PUBKEY 2 #define KEY_CERT 3 static void usage(void); int rsautl_main(int argc, char **argv) { BIO *in = NULL, *out = NULL; char *infile = NULL, *outfile = NULL; char *keyfile = NULL; char rsa_mode = RSA_VERIFY, key_type = KEY_PRIVKEY; int keyform = FORMAT_PEM; char need_priv = 0, badarg = 0, rev = 0; char hexdump = 0, asn1parse = 0; X509 *x; EVP_PKEY *pkey = NULL; RSA *rsa = NULL; unsigned char *rsa_in = NULL, *rsa_out = NULL, pad; char *passargin = NULL, *passin = NULL; int rsa_inlen, rsa_outlen = 0; int keysize; int ret = 1; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } argc--; argv++; pad = RSA_PKCS1_PADDING; while (argc >= 1) { if (!strcmp(*argv, "-in")) { if (--argc < 1) badarg = 1; else infile = *(++argv); } else if (!strcmp(*argv, "-out")) { if (--argc < 1) badarg = 1; else outfile = *(++argv); } else if (!strcmp(*argv, "-inkey")) { if (--argc < 1) badarg = 1; else keyfile = *(++argv); } else if (!strcmp(*argv, "-passin")) { if (--argc < 1) badarg = 1; else passargin = *(++argv); } else if (strcmp(*argv, "-keyform") == 0) { if (--argc < 1) badarg = 1; else keyform = str2fmt(*(++argv)); } else if (!strcmp(*argv, "-pubin")) { key_type = KEY_PUBKEY; } else if (!strcmp(*argv, "-certin")) { key_type = KEY_CERT; } else if (!strcmp(*argv, "-asn1parse")) asn1parse = 1; else if (!strcmp(*argv, "-hexdump")) hexdump = 1; else if (!strcmp(*argv, "-raw")) pad = RSA_NO_PADDING; else if (!strcmp(*argv, "-oaep")) pad = RSA_PKCS1_OAEP_PADDING; else if (!strcmp(*argv, "-ssl")) pad = RSA_SSLV23_PADDING; else if (!strcmp(*argv, "-pkcs")) pad = RSA_PKCS1_PADDING; else if (!strcmp(*argv, "-x931")) pad = RSA_X931_PADDING; else if (!strcmp(*argv, "-sign")) { rsa_mode = RSA_SIGN; need_priv = 1; } else if (!strcmp(*argv, "-verify")) rsa_mode = RSA_VERIFY; else if (!strcmp(*argv, "-rev")) rev = 1; else if (!strcmp(*argv, "-encrypt")) rsa_mode = RSA_ENCRYPT; else if (!strcmp(*argv, "-decrypt")) { rsa_mode = RSA_DECRYPT; need_priv = 1; } else badarg = 1; if (badarg) { usage(); goto end; } argc--; argv++; } if (need_priv && (key_type != KEY_PRIVKEY)) { BIO_printf(bio_err, "A private key is needed for this operation\n"); goto end; } if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto end; } switch (key_type) { case KEY_PRIVKEY: pkey = load_key(bio_err, keyfile, keyform, 0, passin, "Private Key"); break; case KEY_PUBKEY: pkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL, "Public Key"); break; case KEY_CERT: x = load_cert(bio_err, keyfile, keyform, NULL, "Certificate"); if (x) { pkey = X509_get_pubkey(x); X509_free(x); } break; } if (!pkey) goto end; rsa = EVP_PKEY_get1_RSA(pkey); EVP_PKEY_free(pkey); if (!rsa) { BIO_printf(bio_err, "Error getting RSA key\n"); ERR_print_errors(bio_err); goto end; } if (infile) { if (!(in = BIO_new_file(infile, "rb"))) { BIO_printf(bio_err, "Error Reading Input File\n"); ERR_print_errors(bio_err); goto end; } } else in = BIO_new_fp(stdin, BIO_NOCLOSE); if (outfile) { if (!(out = BIO_new_file(outfile, "wb"))) { BIO_printf(bio_err, "Error Reading Output File\n"); ERR_print_errors(bio_err); goto end; } } else { out = BIO_new_fp(stdout, BIO_NOCLOSE); } keysize = RSA_size(rsa); rsa_in = reallocarray(NULL, keysize, 2); if (rsa_in == NULL) { BIO_printf(bio_err, "Error allocating memory for input data\n"); exit(1); } rsa_out = malloc(keysize); if (rsa_out == NULL) { BIO_printf(bio_err, "Error allocating memory for output data\n"); exit(1); } /* Read the input data */ rsa_inlen = BIO_read(in, rsa_in, keysize * 2); if (rsa_inlen <= 0) { BIO_printf(bio_err, "Error reading input Data\n"); exit(1); } if (rev) { int i; unsigned char ctmp; for (i = 0; i < rsa_inlen / 2; i++) { ctmp = rsa_in[i]; rsa_in[i] = rsa_in[rsa_inlen - 1 - i]; rsa_in[rsa_inlen - 1 - i] = ctmp; } } switch (rsa_mode) { case RSA_VERIFY: rsa_outlen = RSA_public_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); break; case RSA_SIGN: rsa_outlen = RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); break; case RSA_ENCRYPT: rsa_outlen = RSA_public_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); break; case RSA_DECRYPT: rsa_outlen = RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); break; } if (rsa_outlen <= 0) { BIO_printf(bio_err, "RSA operation error\n"); ERR_print_errors(bio_err); goto end; } ret = 0; if (asn1parse) { if (!ASN1_parse_dump(out, rsa_out, rsa_outlen, 1, -1)) { ERR_print_errors(bio_err); } } else if (hexdump) BIO_dump(out, (char *) rsa_out, rsa_outlen); else BIO_write(out, rsa_out, rsa_outlen); end: RSA_free(rsa); BIO_free(in); BIO_free_all(out); free(rsa_in); free(rsa_out); free(passin); return ret; } static void usage() { BIO_printf(bio_err, "Usage: rsautl [options]\n"); BIO_printf(bio_err, "-in file input file\n"); BIO_printf(bio_err, "-out file output file\n"); BIO_printf(bio_err, "-inkey file input key\n"); BIO_printf(bio_err, "-keyform arg private key format - default PEM\n"); BIO_printf(bio_err, "-pubin input is an RSA public\n"); BIO_printf(bio_err, "-certin input is a certificate carrying an RSA public key\n"); BIO_printf(bio_err, "-ssl use SSL v2 padding\n"); BIO_printf(bio_err, "-raw use no padding\n"); BIO_printf(bio_err, "-pkcs use PKCS#1 v1.5 padding (default)\n"); BIO_printf(bio_err, "-oaep use PKCS#1 OAEP\n"); BIO_printf(bio_err, "-sign sign with private key\n"); BIO_printf(bio_err, "-verify verify with public key\n"); BIO_printf(bio_err, "-encrypt encrypt with public key\n"); BIO_printf(bio_err, "-decrypt decrypt with private key\n"); BIO_printf(bio_err, "-hexdump hex dump output\n"); } |
Added jni/libressl/apps/openssl/s_apps.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | /* $OpenBSD: s_apps.h,v 1.2 2015/04/14 12:56:36 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <sys/types.h> #include <openssl/opensslconf.h> #define PORT 4433 #define PORT_STR "4433" #define PROTOCOL "tcp" extern int verify_depth; extern int verify_return_error; int do_server(int port, int type, int *ret, int (*cb)(char *hostname, int s, unsigned char *context), unsigned char *context); #ifdef HEADER_X509_H int verify_callback(int ok, X509_STORE_CTX *ctx); #endif #ifdef HEADER_SSL_H int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file); int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key); #endif int init_client(int *sock, char *server, char *port, int type, int af); int should_retry(int i); int extract_port(char *str, short *port_ptr); int extract_host_port(char *str, char **host_ptr, unsigned char *ip, char **p); long bio_dump_callback(BIO *bio, int cmd, const char *argp, int argi, long argl, long ret); #ifdef HEADER_SSL_H void apps_ssl_info_callback(const SSL *s, int where, int ret); void msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg); void tlsext_cb(SSL *s, int client_server, int type, unsigned char *data, int len, void *arg); #endif int generate_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len); int verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int cookie_len); |
Added jni/libressl/apps/openssl/s_cb.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 | /* $OpenBSD: s_cb.c,v 1.5 2015/09/10 06:36:45 bcook Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "apps.h" #include <openssl/err.h> #include <openssl/ssl.h> #include <openssl/x509.h> #include "s_apps.h" #define COOKIE_SECRET_LENGTH 16 int verify_depth = 0; int verify_return_error = 0; unsigned char cookie_secret[COOKIE_SECRET_LENGTH]; int cookie_initialized = 0; int verify_callback(int ok, X509_STORE_CTX * ctx) { X509 *err_cert; int err, depth; err_cert = X509_STORE_CTX_get_current_cert(ctx); err = X509_STORE_CTX_get_error(ctx); depth = X509_STORE_CTX_get_error_depth(ctx); BIO_printf(bio_err, "depth=%d ", depth); if (err_cert) { X509_NAME_print_ex(bio_err, X509_get_subject_name(err_cert), 0, XN_FLAG_ONELINE); BIO_puts(bio_err, "\n"); } else BIO_puts(bio_err, "<no cert>\n"); if (!ok) { BIO_printf(bio_err, "verify error:num=%d:%s\n", err, X509_verify_cert_error_string(err)); if (verify_depth >= depth) { if (!verify_return_error) ok = 1; } else { ok = 0; } } switch (err) { case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: BIO_puts(bio_err, "issuer= "); if (err_cert == NULL) BIO_puts(bio_err, "<error getting cert>"); else X509_NAME_print_ex(bio_err, X509_get_issuer_name(err_cert), 0, XN_FLAG_ONELINE); BIO_puts(bio_err, "\n"); break; case X509_V_ERR_CERT_NOT_YET_VALID: case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: BIO_printf(bio_err, "notBefore="); if (err_cert == NULL) BIO_printf(bio_err, " <error getting cert>"); else ASN1_TIME_print(bio_err, X509_get_notBefore(err_cert)); BIO_printf(bio_err, "\n"); break; case X509_V_ERR_CERT_HAS_EXPIRED: case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: BIO_printf(bio_err, "notAfter="); if (err_cert == NULL) BIO_printf(bio_err, " <error getting cert>"); else ASN1_TIME_print(bio_err, X509_get_notAfter(err_cert)); BIO_printf(bio_err, "\n"); break; case X509_V_ERR_NO_EXPLICIT_POLICY: policies_print(bio_err, ctx); break; } if (err == X509_V_OK && ok == 2) policies_print(bio_err, ctx); BIO_printf(bio_err, "verify return:%d\n", ok); return (ok); } int set_cert_stuff(SSL_CTX * ctx, char *cert_file, char *key_file) { if (cert_file != NULL) { /* SSL *ssl; X509 *x509; */ if (SSL_CTX_use_certificate_file(ctx, cert_file, SSL_FILETYPE_PEM) <= 0) { BIO_printf(bio_err, "unable to get certificate from '%s'\n", cert_file); ERR_print_errors(bio_err); return (0); } if (key_file == NULL) key_file = cert_file; if (SSL_CTX_use_PrivateKey_file(ctx, key_file, SSL_FILETYPE_PEM) <= 0) { BIO_printf(bio_err, "unable to get private key from '%s'\n", key_file); ERR_print_errors(bio_err); return (0); } /* In theory this is no longer needed ssl=SSL_new(ctx); x509=SSL_get_certificate(ssl); if (x509 != NULL) { EVP_PKEY *pktmp; pktmp = X509_get_pubkey(x509); EVP_PKEY_copy_parameters(pktmp, SSL_get_privatekey(ssl)); EVP_PKEY_free(pktmp); } SSL_free(ssl); */ /* * If we are using DSA, we can copy the parameters from the * private key */ /* * Now we know that a key and cert have been set against the * SSL context */ if (!SSL_CTX_check_private_key(ctx)) { BIO_printf(bio_err, "Private key does not match the certificate public key\n"); return (0); } } return (1); } int set_cert_key_stuff(SSL_CTX * ctx, X509 * cert, EVP_PKEY * key) { if (cert == NULL) return 1; if (SSL_CTX_use_certificate(ctx, cert) <= 0) { BIO_printf(bio_err, "error setting certificate\n"); ERR_print_errors(bio_err); return 0; } if (SSL_CTX_use_PrivateKey(ctx, key) <= 0) { BIO_printf(bio_err, "error setting private key\n"); ERR_print_errors(bio_err); return 0; } /* * Now we know that a key and cert have been set against the SSL * context */ if (!SSL_CTX_check_private_key(ctx)) { BIO_printf(bio_err, "Private key does not match the certificate public key\n"); return 0; } return 1; } long bio_dump_callback(BIO * bio, int cmd, const char *argp, int argi, long argl, long ret) { BIO *out; out = (BIO *) BIO_get_callback_arg(bio); if (out == NULL) return (ret); if (cmd == (BIO_CB_READ | BIO_CB_RETURN)) { BIO_printf(out, "read from %p [%p] (%lu bytes => %ld (0x%lX))\n", (void *) bio, argp, (unsigned long) argi, ret, ret); BIO_dump(out, argp, (int) ret); return (ret); } else if (cmd == (BIO_CB_WRITE | BIO_CB_RETURN)) { BIO_printf(out, "write to %p [%p] (%lu bytes => %ld (0x%lX))\n", (void *) bio, argp, (unsigned long) argi, ret, ret); BIO_dump(out, argp, (int) ret); } return (ret); } void apps_ssl_info_callback(const SSL * s, int where, int ret) { const char *str; int w; w = where & ~SSL_ST_MASK; if (w & SSL_ST_CONNECT) str = "SSL_connect"; else if (w & SSL_ST_ACCEPT) str = "SSL_accept"; else str = "undefined"; if (where & SSL_CB_LOOP) { BIO_printf(bio_err, "%s:%s\n", str, SSL_state_string_long(s)); } else if (where & SSL_CB_ALERT) { str = (where & SSL_CB_READ) ? "read" : "write"; BIO_printf(bio_err, "SSL3 alert %s:%s:%s\n", str, SSL_alert_type_string_long(ret), SSL_alert_desc_string_long(ret)); } else if (where & SSL_CB_EXIT) { if (ret == 0) BIO_printf(bio_err, "%s:failed in %s\n", str, SSL_state_string_long(s)); else if (ret < 0) { BIO_printf(bio_err, "%s:error in %s\n", str, SSL_state_string_long(s)); } } } void msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, SSL * ssl, void *arg) { BIO *bio = arg; const char *str_write_p, *str_version, *str_content_type = "", *str_details1 = "", *str_details2 = ""; str_write_p = write_p ? ">>>" : "<<<"; switch (version) { case SSL2_VERSION: str_version = "SSL 2.0"; break; case SSL3_VERSION: str_version = "SSL 3.0 "; break; case TLS1_VERSION: str_version = "TLS 1.0 "; break; case TLS1_1_VERSION: str_version = "TLS 1.1 "; break; case TLS1_2_VERSION: str_version = "TLS 1.2 "; break; case DTLS1_VERSION: str_version = "DTLS 1.0 "; break; default: str_version = "???"; } if (version == SSL2_VERSION) { str_details1 = "???"; if (len > 0) { switch (((const unsigned char *) buf)[0]) { case 0: str_details1 = ", ERROR:"; str_details2 = " ???"; if (len >= 3) { unsigned err = (((const unsigned char *) buf)[1] << 8) + ((const unsigned char *) buf)[2]; switch (err) { case 0x0001: str_details2 = " NO-CIPHER-ERROR"; break; case 0x0002: str_details2 = " NO-CERTIFICATE-ERROR"; break; case 0x0004: str_details2 = " BAD-CERTIFICATE-ERROR"; break; case 0x0006: str_details2 = " UNSUPPORTED-CERTIFICATE-TYPE-ERROR"; break; } } break; case 1: str_details1 = ", CLIENT-HELLO"; break; case 2: str_details1 = ", CLIENT-MASTER-KEY"; break; case 3: str_details1 = ", CLIENT-FINISHED"; break; case 4: str_details1 = ", SERVER-HELLO"; break; case 5: str_details1 = ", SERVER-VERIFY"; break; case 6: str_details1 = ", SERVER-FINISHED"; break; case 7: str_details1 = ", REQUEST-CERTIFICATE"; break; case 8: str_details1 = ", CLIENT-CERTIFICATE"; break; } } } if (version == SSL3_VERSION || version == TLS1_VERSION || version == TLS1_1_VERSION || version == TLS1_2_VERSION || version == DTLS1_VERSION) { switch (content_type) { case 20: str_content_type = "ChangeCipherSpec"; break; case 21: str_content_type = "Alert"; break; case 22: str_content_type = "Handshake"; break; } if (content_type == 21) { /* Alert */ str_details1 = ", ???"; if (len == 2) { switch (((const unsigned char *) buf)[0]) { case 1: str_details1 = ", warning"; break; case 2: str_details1 = ", fatal"; break; } str_details2 = " ???"; switch (((const unsigned char *) buf)[1]) { case 0: str_details2 = " close_notify"; break; case 10: str_details2 = " unexpected_message"; break; case 20: str_details2 = " bad_record_mac"; break; case 21: str_details2 = " decryption_failed"; break; case 22: str_details2 = " record_overflow"; break; case 30: str_details2 = " decompression_failure"; break; case 40: str_details2 = " handshake_failure"; break; case 42: str_details2 = " bad_certificate"; break; case 43: str_details2 = " unsupported_certificate"; break; case 44: str_details2 = " certificate_revoked"; break; case 45: str_details2 = " certificate_expired"; break; case 46: str_details2 = " certificate_unknown"; break; case 47: str_details2 = " illegal_parameter"; break; case 48: str_details2 = " unknown_ca"; break; case 49: str_details2 = " access_denied"; break; case 50: str_details2 = " decode_error"; break; case 51: str_details2 = " decrypt_error"; break; case 60: str_details2 = " export_restriction"; break; case 70: str_details2 = " protocol_version"; break; case 71: str_details2 = " insufficient_security"; break; case 80: str_details2 = " internal_error"; break; case 90: str_details2 = " user_canceled"; break; case 100: str_details2 = " no_renegotiation"; break; case 110: str_details2 = " unsupported_extension"; break; case 111: str_details2 = " certificate_unobtainable"; break; case 112: str_details2 = " unrecognized_name"; break; case 113: str_details2 = " bad_certificate_status_response"; break; case 114: str_details2 = " bad_certificate_hash_value"; break; case 115: str_details2 = " unknown_psk_identity"; break; } } } if (content_type == 22) { /* Handshake */ str_details1 = "???"; if (len > 0) { switch (((const unsigned char *) buf)[0]) { case 0: str_details1 = ", HelloRequest"; break; case 1: str_details1 = ", ClientHello"; break; case 2: str_details1 = ", ServerHello"; break; case 3: str_details1 = ", HelloVerifyRequest"; break; case 11: str_details1 = ", Certificate"; break; case 12: str_details1 = ", ServerKeyExchange"; break; case 13: str_details1 = ", CertificateRequest"; break; case 14: str_details1 = ", ServerHelloDone"; break; case 15: str_details1 = ", CertificateVerify"; break; case 16: str_details1 = ", ClientKeyExchange"; break; case 20: str_details1 = ", Finished"; break; } } } } BIO_printf(bio, "%s %s%s [length %04lx]%s%s\n", str_write_p, str_version, str_content_type, (unsigned long) len, str_details1, str_details2); if (len > 0) { size_t num, i; BIO_printf(bio, " "); num = len; for (i = 0; i < num; i++) { if (i % 16 == 0 && i > 0) BIO_printf(bio, "\n "); BIO_printf(bio, " %02x", ((const unsigned char *) buf)[i]); } if (i < len) BIO_printf(bio, " ..."); BIO_printf(bio, "\n"); } (void) BIO_flush(bio); } void tlsext_cb(SSL * s, int client_server, int type, unsigned char *data, int len, void *arg) { BIO *bio = arg; char *extname; switch (type) { case TLSEXT_TYPE_server_name: extname = "server name"; break; case TLSEXT_TYPE_max_fragment_length: extname = "max fragment length"; break; case TLSEXT_TYPE_client_certificate_url: extname = "client certificate URL"; break; case TLSEXT_TYPE_trusted_ca_keys: extname = "trusted CA keys"; break; case TLSEXT_TYPE_truncated_hmac: extname = "truncated HMAC"; break; case TLSEXT_TYPE_status_request: extname = "status request"; break; case TLSEXT_TYPE_user_mapping: extname = "user mapping"; break; case TLSEXT_TYPE_client_authz: extname = "client authz"; break; case TLSEXT_TYPE_server_authz: extname = "server authz"; break; case TLSEXT_TYPE_cert_type: extname = "cert type"; break; case TLSEXT_TYPE_elliptic_curves: extname = "elliptic curves"; break; case TLSEXT_TYPE_ec_point_formats: extname = "EC point formats"; break; case TLSEXT_TYPE_srp: extname = "SRP"; break; case TLSEXT_TYPE_signature_algorithms: extname = "signature algorithms"; break; case TLSEXT_TYPE_use_srtp: extname = "use SRTP"; break; case TLSEXT_TYPE_heartbeat: extname = "heartbeat"; break; case TLSEXT_TYPE_session_ticket: extname = "session ticket"; break; case TLSEXT_TYPE_renegotiate: extname = "renegotiation info"; break; #ifdef TLSEXT_TYPE_next_proto_neg case TLSEXT_TYPE_next_proto_neg: extname = "next protocol"; break; #endif default: extname = "unknown"; break; } BIO_printf(bio, "TLS %s extension \"%s\" (id=%d), len=%d\n", client_server ? "server" : "client", extname, type, len); BIO_dump(bio, (char *) data, len); (void) BIO_flush(bio); } int generate_cookie_callback(SSL * ssl, unsigned char *cookie, unsigned int *cookie_len) { unsigned char *buffer, result[EVP_MAX_MD_SIZE]; unsigned int length, resultlength; union { struct sockaddr sa; struct sockaddr_in s4; struct sockaddr_in6 s6; } peer; /* Initialize a random secret */ if (!cookie_initialized) { arc4random_buf(cookie_secret, COOKIE_SECRET_LENGTH); cookie_initialized = 1; } /* Read peer information */ (void) BIO_dgram_get_peer(SSL_get_rbio(ssl), &peer); /* Create buffer with peer's address and port */ length = 0; switch (peer.sa.sa_family) { case AF_INET: length += sizeof(struct in_addr); length += sizeof(peer.s4.sin_port); break; case AF_INET6: length += sizeof(struct in6_addr); length += sizeof(peer.s6.sin6_port); break; default: OPENSSL_assert(0); break; } buffer = malloc(length); if (buffer == NULL) { BIO_printf(bio_err, "out of memory\n"); return 0; } switch (peer.sa.sa_family) { case AF_INET: memcpy(buffer, &peer.s4.sin_port, sizeof(peer.s4.sin_port)); memcpy(buffer + sizeof(peer.s4.sin_port), &peer.s4.sin_addr, sizeof(struct in_addr)); break; case AF_INET6: memcpy(buffer, &peer.s6.sin6_port, sizeof(peer.s6.sin6_port)); memcpy(buffer + sizeof(peer.s6.sin6_port), &peer.s6.sin6_addr, sizeof(struct in6_addr)); break; default: OPENSSL_assert(0); break; } /* Calculate HMAC of buffer using the secret */ HMAC(EVP_sha1(), cookie_secret, COOKIE_SECRET_LENGTH, buffer, length, result, &resultlength); free(buffer); memcpy(cookie, result, resultlength); *cookie_len = resultlength; return 1; } int verify_cookie_callback(SSL * ssl, unsigned char *cookie, unsigned int cookie_len) { unsigned char *buffer, result[EVP_MAX_MD_SIZE]; unsigned int length, resultlength; union { struct sockaddr sa; struct sockaddr_in s4; struct sockaddr_in6 s6; } peer; /* If secret isn't initialized yet, the cookie can't be valid */ if (!cookie_initialized) return 0; /* Read peer information */ (void) BIO_dgram_get_peer(SSL_get_rbio(ssl), &peer); /* Create buffer with peer's address and port */ length = 0; switch (peer.sa.sa_family) { case AF_INET: length += sizeof(struct in_addr); length += sizeof(peer.s4.sin_port); break; case AF_INET6: length += sizeof(struct in6_addr); length += sizeof(peer.s6.sin6_port); break; default: OPENSSL_assert(0); break; } buffer = malloc(length); if (buffer == NULL) { BIO_printf(bio_err, "out of memory\n"); return 0; } switch (peer.sa.sa_family) { case AF_INET: memcpy(buffer, &peer.s4.sin_port, sizeof(peer.s4.sin_port)); memcpy(buffer + sizeof(peer.s4.sin_port), &peer.s4.sin_addr, sizeof(struct in_addr)); break; case AF_INET6: memcpy(buffer, &peer.s6.sin6_port, sizeof(peer.s6.sin6_port)); memcpy(buffer + sizeof(peer.s6.sin6_port), &peer.s6.sin6_addr, sizeof(struct in6_addr)); break; default: OPENSSL_assert(0); break; } /* Calculate HMAC of buffer using the secret */ HMAC(EVP_sha1(), cookie_secret, COOKIE_SECRET_LENGTH, buffer, length, result, &resultlength); free(buffer); if (cookie_len == resultlength && memcmp(result, cookie, resultlength) == 0) return 1; return 0; } |
Added jni/libressl/apps/openssl/s_client.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 | /* $OpenBSD: s_client.c,v 1.27 2015/12/01 12:01:56 jca Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* ==================================================================== * Copyright 2005 Nokia. All rights reserved. * * The portions of the attached software ("Contribution") is developed by * Nokia Corporation and is licensed pursuant to the OpenSSL open source * license. * * The Contribution, originally written by Mika Kousa and Pasi Eronen of * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites * support (see RFC 4279) to OpenSSL. * * No patent licenses or other rights except those expressly stated in * the OpenSSL open source license shall be deemed granted or received * expressly, by implication, estoppel, or otherwise. * * No assurances are provided by Nokia that the Contribution does not * infringe the patent or other intellectual property rights of any third * party or that the license provides you with all the necessary rights * to make use of the Contribution. * * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR * OTHERWISE. */ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <assert.h> #include <ctype.h> #include <limits.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <poll.h> #include "apps.h" #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/ocsp.h> #include <openssl/pem.h> #include <openssl/ssl.h> #include <openssl/x509.h> #include "s_apps.h" #include "timeouts.h" /*#define SSL_HOST_NAME "www.netscape.com" */ /*#define SSL_HOST_NAME "193.118.187.102" */ #define SSL_HOST_NAME "localhost" /*#define TEST_CERT "client.pem" *//* no default cert. */ #define BUFSIZZ 1024*8 static int c_nbio = 0; static int c_Pause = 0; static int c_debug = 0; static int c_tlsextdebug = 0; static int c_status_req = 0; static int c_msg = 0; static int c_showcerts = 0; static char *keymatexportlabel = NULL; static int keymatexportlen = 20; static void sc_usage(void); static void print_stuff(BIO * berr, SSL * con, int full); static int ocsp_resp_cb(SSL * s, void *arg); static BIO *bio_c_out = NULL; static int c_quiet = 0; static int c_ign_eof = 0; static void sc_usage(void) { BIO_printf(bio_err, "usage: s_client args\n"); BIO_printf(bio_err, "\n"); BIO_printf(bio_err, " -4 - Force IPv4\n"); BIO_printf(bio_err, " -6 - Force IPv6\n"); BIO_printf(bio_err, " -host host - use -connect instead\n"); BIO_printf(bio_err, " -port port - use -connect instead\n"); BIO_printf(bio_err, " -connect host:port - who to connect to (default is %s:%s)\n", SSL_HOST_NAME, PORT_STR); BIO_printf(bio_err, " -proxy host:port - connect to http proxy\n"); BIO_printf(bio_err, " -verify arg - turn on peer certificate verification\n"); BIO_printf(bio_err, " -cert arg - certificate file to use, PEM format assumed\n"); BIO_printf(bio_err, " -certform arg - certificate format (PEM or DER) PEM default\n"); BIO_printf(bio_err, " -key arg - Private key file to use, in cert file if\n"); BIO_printf(bio_err, " not specified but cert file is.\n"); BIO_printf(bio_err, " -keyform arg - key format (PEM or DER) PEM default\n"); BIO_printf(bio_err, " -pass arg - private key file pass phrase source\n"); BIO_printf(bio_err, " -CApath arg - PEM format directory of CA's\n"); BIO_printf(bio_err, " -CAfile arg - PEM format file of CA's\n"); BIO_printf(bio_err, " -reconnect - Drop and re-make the connection with the same Session-ID\n"); BIO_printf(bio_err, " -pause - sleep(1) after each read(2) and write(2) system call\n"); BIO_printf(bio_err, " -showcerts - show all certificates in the chain\n"); BIO_printf(bio_err, " -debug - extra output\n"); BIO_printf(bio_err, " -msg - Show protocol messages\n"); BIO_printf(bio_err, " -nbio_test - more ssl protocol testing\n"); BIO_printf(bio_err, " -state - print the 'ssl' states\n"); BIO_printf(bio_err, " -nbio - Run with non-blocking IO\n"); BIO_printf(bio_err, " -crlf - convert LF from terminal into CRLF\n"); BIO_printf(bio_err, " -quiet - no s_client output\n"); BIO_printf(bio_err, " -ign_eof - ignore input eof (default when -quiet)\n"); BIO_printf(bio_err, " -no_ign_eof - don't ignore input eof\n"); BIO_printf(bio_err, " -tls1_2 - just use TLSv1.2\n"); BIO_printf(bio_err, " -tls1_1 - just use TLSv1.1\n"); BIO_printf(bio_err, " -tls1 - just use TLSv1\n"); BIO_printf(bio_err, " -dtls1 - just use DTLSv1\n"); BIO_printf(bio_err, " -mtu - set the link layer MTU\n"); BIO_printf(bio_err, " -no_tls1_2/-no_tls1_1/-no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol\n"); BIO_printf(bio_err, " -bugs - Switch on all SSL implementation bug workarounds\n"); BIO_printf(bio_err, " -cipher - preferred cipher to use, use the 'openssl ciphers'\n"); BIO_printf(bio_err, " command to see what is available\n"); BIO_printf(bio_err, " -starttls prot - use the STARTTLS command before starting TLS\n"); BIO_printf(bio_err, " for those protocols that support it, where\n"); BIO_printf(bio_err, " 'prot' defines which one to assume. Currently,\n"); BIO_printf(bio_err, " only \"smtp\", \"lmtp\", \"pop3\", \"imap\", \"ftp\" and \"xmpp\"\n"); BIO_printf(bio_err, " are supported.\n"); BIO_printf(bio_err, " -xmpphost host - connect to this virtual host on the xmpp server\n"); BIO_printf(bio_err, " -sess_out arg - file to write SSL session to\n"); BIO_printf(bio_err, " -sess_in arg - file to read SSL session from\n"); BIO_printf(bio_err, " -servername host - Set TLS extension servername in ClientHello\n"); BIO_printf(bio_err, " -tlsextdebug - hex dump of all TLS extensions received\n"); BIO_printf(bio_err, " -status - request certificate status from server\n"); BIO_printf(bio_err, " -no_ticket - disable use of RFC4507bis session tickets\n"); BIO_printf(bio_err, " -nextprotoneg arg - enable NPN extension, considering named protocols supported (comma-separated list)\n"); BIO_printf(bio_err, " -alpn arg - enable ALPN extension, considering named protocols supported (comma-separated list)\n"); #ifndef OPENSSL_NO_SRTP BIO_printf(bio_err, " -use_srtp profiles - Offer SRTP key management with a colon-separated profile list\n"); #endif BIO_printf(bio_err, " -keymatexport label - Export keying material using label\n"); BIO_printf(bio_err, " -keymatexportlen len - Export len bytes of keying material (default 20)\n"); } /* This is a context that we pass to callbacks */ typedef struct tlsextctx_st { BIO *biodebug; int ack; } tlsextctx; static int ssl_servername_cb(SSL * s, int *ad, void *arg) { tlsextctx *p = (tlsextctx *) arg; const char *hn = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name); if (SSL_get_servername_type(s) != -1) p->ack = !SSL_session_reused(s) && hn != NULL; else BIO_printf(bio_err, "Can't use SSL_get_servername\n"); return SSL_TLSEXT_ERR_OK; } #ifndef OPENSSL_NO_SRTP char *srtp_profiles = NULL; #endif /* This the context that we pass to next_proto_cb */ typedef struct tlsextnextprotoctx_st { unsigned char *data; unsigned short len; int status; } tlsextnextprotoctx; static tlsextnextprotoctx next_proto; static int next_proto_cb(SSL * s, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg) { tlsextnextprotoctx *ctx = arg; if (!c_quiet) { /* We can assume that |in| is syntactically valid. */ unsigned i; BIO_printf(bio_c_out, "Protocols advertised by server: "); for (i = 0; i < inlen;) { if (i) BIO_write(bio_c_out, ", ", 2); BIO_write(bio_c_out, &in[i + 1], in[i]); i += in[i] + 1; } BIO_write(bio_c_out, "\n", 1); } ctx->status = SSL_select_next_proto(out, outlen, in, inlen, ctx->data, ctx->len); return SSL_TLSEXT_ERR_OK; } enum { PROTO_OFF = 0, PROTO_SMTP, PROTO_LMTP, PROTO_POP3, PROTO_IMAP, PROTO_FTP, PROTO_XMPP }; int s_client_main(int argc, char **argv) { unsigned int off = 0, clr = 0; SSL *con = NULL; int s, k, state = 0, af = AF_UNSPEC; char *cbuf = NULL, *sbuf = NULL, *mbuf = NULL; int cbuf_len, cbuf_off; int sbuf_len, sbuf_off; char *port = PORT_STR; int full_log = 1; char *host = SSL_HOST_NAME; char *xmpphost = NULL; char *proxy = NULL, *connect = NULL; char *cert_file = NULL, *key_file = NULL; int cert_format = FORMAT_PEM, key_format = FORMAT_PEM; char *passarg = NULL, *pass = NULL; X509 *cert = NULL; EVP_PKEY *key = NULL; char *CApath = NULL, *CAfile = NULL, *cipher = NULL; int reconnect = 0, badop = 0, verify = SSL_VERIFY_NONE, bugs = 0; int crlf = 0; int write_tty, read_tty, write_ssl, read_ssl, tty_on, ssl_pending; SSL_CTX *ctx = NULL; int ret = 1, in_init = 1, i, nbio_test = 0; int starttls_proto = PROTO_OFF; int prexit = 0; X509_VERIFY_PARAM *vpm = NULL; int badarg = 0; const SSL_METHOD *meth = NULL; int socket_type = SOCK_STREAM; BIO *sbio; int mbuf_len = 0; struct timeval timeout; const char *errstr = NULL; char *servername = NULL; tlsextctx tlsextcbp = {NULL, 0}; const char *next_proto_neg_in = NULL; const char *alpn_in = NULL; char *sess_in = NULL; char *sess_out = NULL; struct sockaddr peer; int peerlen = sizeof(peer); int enable_timeouts = 0; long socket_mtu = 0; if (single_execution) { if (pledge("stdio inet dns rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } meth = SSLv23_client_method(); c_Pause = 0; c_quiet = 0; c_ign_eof = 0; c_debug = 0; c_msg = 0; c_showcerts = 0; if (((cbuf = malloc(BUFSIZZ)) == NULL) || ((sbuf = malloc(BUFSIZZ)) == NULL) || ((mbuf = malloc(BUFSIZZ + 1)) == NULL)) { /* NUL byte */ BIO_printf(bio_err, "out of memory\n"); goto end; } verify_depth = 0; c_nbio = 0; argc--; argv++; while (argc >= 1) { if (strcmp(*argv, "-host") == 0) { if (--argc < 1) goto bad; host = *(++argv); } else if (strcmp(*argv, "-port") == 0) { if (--argc < 1) goto bad; port = *(++argv); if (port == NULL || *port == '\0') goto bad; } else if (strcmp(*argv, "-connect") == 0) { if (--argc < 1) goto bad; connect = *(++argv); } else if (strcmp(*argv, "-proxy") == 0) { if (--argc < 1) goto bad; proxy = *(++argv); } else if (strcmp(*argv,"-xmpphost") == 0) { if (--argc < 1) goto bad; xmpphost= *(++argv); } else if (strcmp(*argv, "-verify") == 0) { verify = SSL_VERIFY_PEER; if (--argc < 1) goto bad; verify_depth = strtonum(*(++argv), 0, INT_MAX, &errstr); if (errstr) goto bad; BIO_printf(bio_err, "verify depth is %d\n", verify_depth); } else if (strcmp(*argv, "-cert") == 0) { if (--argc < 1) goto bad; cert_file = *(++argv); } else if (strcmp(*argv, "-sess_out") == 0) { if (--argc < 1) goto bad; sess_out = *(++argv); } else if (strcmp(*argv, "-sess_in") == 0) { if (--argc < 1) goto bad; sess_in = *(++argv); } else if (strcmp(*argv, "-certform") == 0) { if (--argc < 1) goto bad; cert_format = str2fmt(*(++argv)); } else if (args_verify(&argv, &argc, &badarg, bio_err, &vpm)) { if (badarg) goto bad; continue; } else if (strcmp(*argv, "-verify_return_error") == 0) verify_return_error = 1; else if (strcmp(*argv, "-prexit") == 0) prexit = 1; else if (strcmp(*argv, "-crlf") == 0) crlf = 1; else if (strcmp(*argv, "-quiet") == 0) { c_quiet = 1; c_ign_eof = 1; } else if (strcmp(*argv, "-ign_eof") == 0) c_ign_eof = 1; else if (strcmp(*argv, "-no_ign_eof") == 0) c_ign_eof = 0; else if (strcmp(*argv, "-pause") == 0) c_Pause = 1; else if (strcmp(*argv, "-debug") == 0) c_debug = 1; else if (strcmp(*argv, "-tlsextdebug") == 0) c_tlsextdebug = 1; else if (strcmp(*argv, "-status") == 0) c_status_req = 1; else if (strcmp(*argv, "-msg") == 0) c_msg = 1; else if (strcmp(*argv, "-showcerts") == 0) c_showcerts = 1; else if (strcmp(*argv, "-nbio_test") == 0) nbio_test = 1; else if (strcmp(*argv, "-state") == 0) state = 1; else if (strcmp(*argv, "-tls1_2") == 0) meth = TLSv1_2_client_method(); else if (strcmp(*argv, "-tls1_1") == 0) meth = TLSv1_1_client_method(); else if (strcmp(*argv, "-tls1") == 0) meth = TLSv1_client_method(); #ifndef OPENSSL_NO_DTLS1 else if (strcmp(*argv, "-dtls1") == 0) { meth = DTLSv1_client_method(); socket_type = SOCK_DGRAM; } else if (strcmp(*argv, "-timeout") == 0) enable_timeouts = 1; else if (strcmp(*argv, "-mtu") == 0) { if (--argc < 1) goto bad; socket_mtu = strtonum(*(++argv), 0, LONG_MAX, &errstr); if (errstr) goto bad; } #endif else if (strcmp(*argv, "-bugs") == 0) bugs = 1; else if (strcmp(*argv, "-keyform") == 0) { if (--argc < 1) goto bad; key_format = str2fmt(*(++argv)); } else if (strcmp(*argv, "-pass") == 0) { if (--argc < 1) goto bad; passarg = *(++argv); } else if (strcmp(*argv, "-key") == 0) { if (--argc < 1) goto bad; key_file = *(++argv); } else if (strcmp(*argv, "-reconnect") == 0) { reconnect = 5; } else if (strcmp(*argv, "-CApath") == 0) { if (--argc < 1) goto bad; CApath = *(++argv); } else if (strcmp(*argv, "-CAfile") == 0) { if (--argc < 1) goto bad; CAfile = *(++argv); } else if (strcmp(*argv, "-no_tls1_2") == 0) off |= SSL_OP_NO_TLSv1_2; else if (strcmp(*argv, "-no_tls1_1") == 0) off |= SSL_OP_NO_TLSv1_1; else if (strcmp(*argv, "-no_tls1") == 0) off |= SSL_OP_NO_TLSv1; else if (strcmp(*argv, "-no_ssl3") == 0) off |= SSL_OP_NO_SSLv3; else if (strcmp(*argv, "-no_ssl2") == 0) off |= SSL_OP_NO_SSLv2; else if (strcmp(*argv, "-no_comp") == 0) { off |= SSL_OP_NO_COMPRESSION; } else if (strcmp(*argv, "-no_ticket") == 0) { off |= SSL_OP_NO_TICKET; } else if (strcmp(*argv, "-nextprotoneg") == 0) { if (--argc < 1) goto bad; next_proto_neg_in = *(++argv); } else if (strcmp(*argv, "-alpn") == 0) { if (--argc < 1) goto bad; alpn_in = *(++argv); } else if (strcmp(*argv, "-serverpref") == 0) off |= SSL_OP_CIPHER_SERVER_PREFERENCE; else if (strcmp(*argv, "-legacy_renegotiation") == 0) ; /* no-op */ else if (strcmp(*argv, "-legacy_server_connect") == 0) { off |= SSL_OP_LEGACY_SERVER_CONNECT; } else if (strcmp(*argv, "-no_legacy_server_connect") == 0) { clr |= SSL_OP_LEGACY_SERVER_CONNECT; } else if (strcmp(*argv, "-cipher") == 0) { if (--argc < 1) goto bad; cipher = *(++argv); } else if (strcmp(*argv, "-nbio") == 0) { c_nbio = 1; } else if (strcmp(*argv, "-starttls") == 0) { if (--argc < 1) goto bad; ++argv; if (strcmp(*argv, "smtp") == 0) starttls_proto = PROTO_SMTP; else if (strcmp(*argv, "lmtp") == 0) starttls_proto = PROTO_LMTP; else if (strcmp(*argv, "pop3") == 0) starttls_proto = PROTO_POP3; else if (strcmp(*argv, "imap") == 0) starttls_proto = PROTO_IMAP; else if (strcmp(*argv, "ftp") == 0) starttls_proto = PROTO_FTP; else if (strcmp(*argv, "xmpp") == 0) starttls_proto = PROTO_XMPP; else goto bad; } else if (strcmp(*argv, "-4") == 0) { af = AF_INET; } else if (strcmp(*argv, "-6") == 0) { af = AF_INET6; } else if (strcmp(*argv, "-servername") == 0) { if (--argc < 1) goto bad; servername = *(++argv); /* meth=TLSv1_client_method(); */ } #ifndef OPENSSL_NO_SRTP else if (strcmp(*argv, "-use_srtp") == 0) { if (--argc < 1) goto bad; srtp_profiles = *(++argv); } #endif else if (strcmp(*argv, "-keymatexport") == 0) { if (--argc < 1) goto bad; keymatexportlabel = *(++argv); } else if (strcmp(*argv, "-keymatexportlen") == 0) { if (--argc < 1) goto bad; keymatexportlen = strtonum(*(++argv), 1, INT_MAX, &errstr); if (errstr) goto bad; } else { BIO_printf(bio_err, "unknown option %s\n", *argv); badop = 1; break; } argc--; argv++; } if (proxy != NULL) { if (!extract_host_port(proxy, &host, NULL, &port)) goto bad; if (connect == NULL) connect = SSL_HOST_NAME; } else if (connect != NULL) { if (!extract_host_port(connect, &host, NULL, &port)) goto bad; } if (badop) { bad: if (errstr) BIO_printf(bio_err, "invalid argument %s: %s\n", *argv, errstr); else sc_usage(); goto end; } next_proto.status = -1; if (next_proto_neg_in) { next_proto.data = next_protos_parse(&next_proto.len, next_proto_neg_in); if (next_proto.data == NULL) { BIO_printf(bio_err, "Error parsing -nextprotoneg argument\n"); goto end; } } else next_proto.data = NULL; if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto end; } if (key_file == NULL) key_file = cert_file; if (key_file) { key = load_key(bio_err, key_file, key_format, 0, pass, "client certificate private key file"); if (!key) { ERR_print_errors(bio_err); goto end; } } if (cert_file) { cert = load_cert(bio_err, cert_file, cert_format, NULL, "client certificate file"); if (!cert) { ERR_print_errors(bio_err); goto end; } } if (bio_c_out == NULL) { if (c_quiet && !c_debug && !c_msg) { bio_c_out = BIO_new(BIO_s_null()); } else { if (bio_c_out == NULL) bio_c_out = BIO_new_fp(stdout, BIO_NOCLOSE); } } ctx = SSL_CTX_new(meth); if (ctx == NULL) { ERR_print_errors(bio_err); goto end; } if (vpm) SSL_CTX_set1_param(ctx, vpm); #ifndef OPENSSL_NO_SRTP if (srtp_profiles != NULL) SSL_CTX_set_tlsext_use_srtp(ctx, srtp_profiles); #endif if (bugs) SSL_CTX_set_options(ctx, SSL_OP_ALL | off); else SSL_CTX_set_options(ctx, off); if (clr) SSL_CTX_clear_options(ctx, clr); /* * DTLS: partial reads end up discarding unread UDP bytes :-( Setting * read ahead solves this problem. */ if (socket_type == SOCK_DGRAM) SSL_CTX_set_read_ahead(ctx, 1); if (next_proto.data) SSL_CTX_set_next_proto_select_cb(ctx, next_proto_cb, &next_proto); if (alpn_in) { unsigned short alpn_len; unsigned char *alpn = next_protos_parse(&alpn_len, alpn_in); if (alpn == NULL) { BIO_printf(bio_err, "Error parsing -alpn argument\n"); goto end; } SSL_CTX_set_alpn_protos(ctx, alpn, alpn_len); free(alpn); } if (state) SSL_CTX_set_info_callback(ctx, apps_ssl_info_callback); if (cipher != NULL) if (!SSL_CTX_set_cipher_list(ctx, cipher)) { BIO_printf(bio_err, "error setting cipher list\n"); ERR_print_errors(bio_err); goto end; } SSL_CTX_set_verify(ctx, verify, verify_callback); if (!set_cert_key_stuff(ctx, cert, key)) goto end; if ((CAfile || CApath) && !SSL_CTX_load_verify_locations(ctx, CAfile, CApath)) ERR_print_errors(bio_err); if (!SSL_CTX_set_default_verify_paths(ctx)) ERR_print_errors(bio_err); if (servername != NULL) { tlsextcbp.biodebug = bio_err; SSL_CTX_set_tlsext_servername_callback(ctx, ssl_servername_cb); SSL_CTX_set_tlsext_servername_arg(ctx, &tlsextcbp); } con = SSL_new(ctx); if (sess_in) { SSL_SESSION *sess; BIO *stmp = BIO_new_file(sess_in, "r"); if (!stmp) { BIO_printf(bio_err, "Can't open session file %s\n", sess_in); ERR_print_errors(bio_err); goto end; } sess = PEM_read_bio_SSL_SESSION(stmp, NULL, 0, NULL); BIO_free(stmp); if (!sess) { BIO_printf(bio_err, "Can't open session file %s\n", sess_in); ERR_print_errors(bio_err); goto end; } SSL_set_session(con, sess); SSL_SESSION_free(sess); } if (servername != NULL) { if (!SSL_set_tlsext_host_name(con, servername)) { BIO_printf(bio_err, "Unable to set TLS servername extension.\n"); ERR_print_errors(bio_err); goto end; } } /* SSL_set_cipher_list(con,"RC4-MD5"); */ re_start: if (init_client(&s, host, port, socket_type, af) == 0) { BIO_printf(bio_err, "connect:errno=%d\n", errno); goto end; } BIO_printf(bio_c_out, "CONNECTED(%08X)\n", s); if (c_nbio) { if (!c_quiet) BIO_printf(bio_c_out, "turning on non blocking io\n"); if (!BIO_socket_nbio(s, 1)) { ERR_print_errors(bio_err); goto end; } } if (c_Pause & 0x01) SSL_set_debug(con, 1); if (SSL_version(con) == DTLS1_VERSION) { sbio = BIO_new_dgram(s, BIO_NOCLOSE); if (getsockname(s, &peer, (void *) &peerlen) < 0) { BIO_printf(bio_err, "getsockname:errno=%d\n", errno); shutdown(s, SHUT_RD); close(s); goto end; } (void) BIO_ctrl_set_connected(sbio, 1, &peer); if (enable_timeouts) { timeout.tv_sec = 0; timeout.tv_usec = DGRAM_RCV_TIMEOUT; BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, &timeout); timeout.tv_sec = 0; timeout.tv_usec = DGRAM_SND_TIMEOUT; BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, &timeout); } if (socket_mtu > 28) { SSL_set_options(con, SSL_OP_NO_QUERY_MTU); SSL_set_mtu(con, socket_mtu - 28); } else /* want to do MTU discovery */ BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL); } else sbio = BIO_new_socket(s, BIO_NOCLOSE); if (nbio_test) { BIO *test; test = BIO_new(BIO_f_nbio_test()); sbio = BIO_push(test, sbio); } if (c_debug) { SSL_set_debug(con, 1); BIO_set_callback(sbio, bio_dump_callback); BIO_set_callback_arg(sbio, (char *) bio_c_out); } if (c_msg) { SSL_set_msg_callback(con, msg_cb); SSL_set_msg_callback_arg(con, bio_c_out); } if (c_tlsextdebug) { SSL_set_tlsext_debug_callback(con, tlsext_cb); SSL_set_tlsext_debug_arg(con, bio_c_out); } if (c_status_req) { SSL_set_tlsext_status_type(con, TLSEXT_STATUSTYPE_ocsp); SSL_CTX_set_tlsext_status_cb(ctx, ocsp_resp_cb); SSL_CTX_set_tlsext_status_arg(ctx, bio_c_out); } SSL_set_bio(con, sbio, sbio); SSL_set_connect_state(con); /* ok, lets connect */ read_tty = 1; write_tty = 0; tty_on = 0; read_ssl = 1; write_ssl = 1; cbuf_len = 0; cbuf_off = 0; sbuf_len = 0; sbuf_off = 0; /* This is an ugly hack that does a lot of assumptions */ /* * We do have to handle multi-line responses which may come in a * single packet or not. We therefore have to use BIO_gets() which * does need a buffering BIO. So during the initial chitchat we do * push a buffering BIO into the chain that is removed again later on * to not disturb the rest of the s_client operation. */ if (starttls_proto == PROTO_SMTP || starttls_proto == PROTO_LMTP) { int foundit = 0; BIO *fbio = BIO_new(BIO_f_buffer()); BIO_push(fbio, sbio); /* wait for multi-line response to end from SMTP */ do { mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ); } while (mbuf_len > 3 && mbuf[3] == '-'); /* STARTTLS command requires EHLO... */ BIO_printf(fbio, "%cHLO openssl.client.net\r\n", starttls_proto == PROTO_SMTP ? 'E' : 'L'); (void) BIO_flush(fbio); /* wait for multi-line response to end EHLO SMTP response */ do { mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ); if (strstr(mbuf, "STARTTLS")) foundit = 1; } while (mbuf_len > 3 && mbuf[3] == '-'); (void) BIO_flush(fbio); BIO_pop(fbio); BIO_free(fbio); if (!foundit) BIO_printf(bio_err, "didn't found starttls in server response," " try anyway...\n"); BIO_printf(sbio, "STARTTLS\r\n"); BIO_read(sbio, sbuf, BUFSIZZ); } else if (starttls_proto == PROTO_POP3) { mbuf_len = BIO_read(sbio, mbuf, BUFSIZZ); if (mbuf_len == -1) { BIO_printf(bio_err, "BIO_read failed\n"); goto end; } BIO_printf(sbio, "STLS\r\n"); BIO_read(sbio, sbuf, BUFSIZZ); } else if (starttls_proto == PROTO_IMAP) { int foundit = 0; BIO *fbio = BIO_new(BIO_f_buffer()); BIO_push(fbio, sbio); BIO_gets(fbio, mbuf, BUFSIZZ); /* STARTTLS command requires CAPABILITY... */ BIO_printf(fbio, ". CAPABILITY\r\n"); (void) BIO_flush(fbio); /* wait for multi-line CAPABILITY response */ do { mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ); if (strstr(mbuf, "STARTTLS")) foundit = 1; } while (mbuf_len > 3 && mbuf[0] != '.'); (void) BIO_flush(fbio); BIO_pop(fbio); BIO_free(fbio); if (!foundit) BIO_printf(bio_err, "didn't found STARTTLS in server response," " try anyway...\n"); BIO_printf(sbio, ". STARTTLS\r\n"); BIO_read(sbio, sbuf, BUFSIZZ); } else if (starttls_proto == PROTO_FTP) { BIO *fbio = BIO_new(BIO_f_buffer()); BIO_push(fbio, sbio); /* wait for multi-line response to end from FTP */ do { mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ); } while (mbuf_len > 3 && mbuf[3] == '-'); (void) BIO_flush(fbio); BIO_pop(fbio); BIO_free(fbio); BIO_printf(sbio, "AUTH TLS\r\n"); BIO_read(sbio, sbuf, BUFSIZZ); } else if (starttls_proto == PROTO_XMPP) { int seen = 0; BIO_printf(sbio, "<stream:stream " "xmlns:stream='http://etherx.jabber.org/streams' " "xmlns='jabber:client' to='%s' version='1.0'>", xmpphost ? xmpphost : host); seen = BIO_read(sbio, mbuf, BUFSIZZ); if (seen <= 0) goto shut; mbuf[seen] = 0; while (!strstr(mbuf, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'") && !strstr(mbuf, "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"")) { seen = BIO_read(sbio, mbuf, BUFSIZZ); if (seen <= 0) goto shut; mbuf[seen] = 0; } BIO_printf(sbio, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>"); seen = BIO_read(sbio, sbuf, BUFSIZZ); sbuf[seen] = 0; if (!strstr(sbuf, "<proceed")) goto shut; mbuf[0] = 0; } else if (proxy != NULL) { BIO_printf(sbio, "CONNECT %s HTTP/1.0\r\n\r\n", connect); mbuf_len = BIO_read(sbio, mbuf, BUFSIZZ); if (mbuf_len == -1) { BIO_printf(bio_err, "BIO_read failed\n"); goto end; } } for (;;) { struct pollfd pfd[3]; /* stdin, stdout, socket */ int ptimeout = -1; if ((SSL_version(con) == DTLS1_VERSION) && DTLSv1_get_timeout(con, &timeout)) ptimeout = timeout.tv_sec * 1000 + timeout.tv_usec / 1000; if (SSL_in_init(con) && !SSL_total_renegotiations(con)) { in_init = 1; tty_on = 0; } else { tty_on = 1; if (in_init) { in_init = 0; if (sess_out) { BIO *stmp = BIO_new_file(sess_out, "w"); if (stmp) { PEM_write_bio_SSL_SESSION(stmp, SSL_get_session(con)); BIO_free(stmp); } else BIO_printf(bio_err, "Error writing session file %s\n", sess_out); } print_stuff(bio_c_out, con, full_log); if (full_log > 0) full_log--; if (starttls_proto) { BIO_write(bio_err, mbuf, mbuf_len); /* We don't need to know any more */ starttls_proto = PROTO_OFF; } if (reconnect) { reconnect--; BIO_printf(bio_c_out, "drop connection and then reconnect\n"); SSL_shutdown(con); SSL_set_connect_state(con); shutdown(SSL_get_fd(con), SHUT_RD); close(SSL_get_fd(con)); goto re_start; } } } ssl_pending = read_ssl && SSL_pending(con); pfd[0].fd = -1; pfd[1].fd = -1; if (!ssl_pending) { if (tty_on) { if (read_tty) { pfd[0].fd = fileno(stdin); pfd[0].events = POLLIN; } if (write_tty) { pfd[1].fd = fileno(stdout); pfd[1].events = POLLOUT; } } pfd[2].fd = SSL_get_fd(con); pfd[2].events = 0; if (read_ssl) pfd[2].events |= POLLIN; if (write_ssl) pfd[2].events |= POLLOUT; /* printf("mode tty(%d %d%d) ssl(%d%d)\n", tty_on,read_tty,write_tty,read_ssl,write_ssl);*/ i = poll(pfd, 3, ptimeout); if (i < 0) { BIO_printf(bio_err, "bad select %d\n", errno); goto shut; /* goto end; */ } } if ((SSL_version(con) == DTLS1_VERSION) && DTLSv1_handle_timeout(con) > 0) { BIO_printf(bio_err, "TIMEOUT occured\n"); } if (!ssl_pending && (pfd[2].revents & (POLLOUT|POLLERR|POLLNVAL))) { if (pfd[2].revents & (POLLERR|POLLNVAL)) { BIO_printf(bio_err, "poll error"); goto shut; } k = SSL_write(con, &(cbuf[cbuf_off]), (unsigned int) cbuf_len); switch (SSL_get_error(con, k)) { case SSL_ERROR_NONE: cbuf_off += k; cbuf_len -= k; if (k <= 0) goto end; /* we have done a write(con,NULL,0); */ if (cbuf_len <= 0) { read_tty = 1; write_ssl = 0; } else { /* if (cbuf_len > 0) */ read_tty = 0; write_ssl = 1; } break; case SSL_ERROR_WANT_WRITE: BIO_printf(bio_c_out, "write W BLOCK\n"); write_ssl = 1; read_tty = 0; break; case SSL_ERROR_WANT_READ: BIO_printf(bio_c_out, "write R BLOCK\n"); write_tty = 0; read_ssl = 1; write_ssl = 0; break; case SSL_ERROR_WANT_X509_LOOKUP: BIO_printf(bio_c_out, "write X BLOCK\n"); break; case SSL_ERROR_ZERO_RETURN: if (cbuf_len != 0) { BIO_printf(bio_c_out, "shutdown\n"); ret = 0; goto shut; } else { read_tty = 1; write_ssl = 0; break; } case SSL_ERROR_SYSCALL: if ((k != 0) || (cbuf_len != 0)) { BIO_printf(bio_err, "write:errno=%d\n", errno); goto shut; } else { read_tty = 1; write_ssl = 0; } break; case SSL_ERROR_SSL: ERR_print_errors(bio_err); goto shut; } } else if (!ssl_pending && (pfd[1].revents & (POLLOUT|POLLERR|POLLNVAL))) { if (pfd[1].revents & (POLLERR|POLLNVAL)) { BIO_printf(bio_err, "poll error"); goto shut; } i = write(fileno(stdout), &(sbuf[sbuf_off]), sbuf_len); if (i <= 0) { BIO_printf(bio_c_out, "DONE\n"); ret = 0; goto shut; /* goto end; */ } sbuf_len -= i; sbuf_off += i; if (sbuf_len <= 0) { read_ssl = 1; write_tty = 0; } } else if (ssl_pending || (pfd[2].revents & (POLLIN|POLLHUP))) { #ifdef RENEG { static int iiii; if (++iiii == 52) { SSL_renegotiate(con); iiii = 0; } } #endif k = SSL_read(con, sbuf, 1024 /* BUFSIZZ */ ); switch (SSL_get_error(con, k)) { case SSL_ERROR_NONE: if (k <= 0) goto end; sbuf_off = 0; sbuf_len = k; read_ssl = 0; write_tty = 1; break; case SSL_ERROR_WANT_WRITE: BIO_printf(bio_c_out, "read W BLOCK\n"); write_ssl = 1; read_tty = 0; break; case SSL_ERROR_WANT_READ: BIO_printf(bio_c_out, "read R BLOCK\n"); write_tty = 0; read_ssl = 1; if ((read_tty == 0) && (write_ssl == 0)) write_ssl = 1; break; case SSL_ERROR_WANT_X509_LOOKUP: BIO_printf(bio_c_out, "read X BLOCK\n"); break; case SSL_ERROR_SYSCALL: ret = errno; BIO_printf(bio_err, "read:errno=%d\n", ret); goto shut; case SSL_ERROR_ZERO_RETURN: BIO_printf(bio_c_out, "closed\n"); ret = 0; goto shut; case SSL_ERROR_SSL: ERR_print_errors(bio_err); goto shut; /* break; */ } } else if (pfd[0].revents) { if (pfd[0].revents & (POLLERR|POLLNVAL)) { BIO_printf(bio_err, "poll error"); goto shut; } if (crlf) { int j, lf_num; i = read(fileno(stdin), cbuf, BUFSIZZ / 2); lf_num = 0; /* both loops are skipped when i <= 0 */ for (j = 0; j < i; j++) if (cbuf[j] == '\n') lf_num++; for (j = i - 1; j >= 0; j--) { cbuf[j + lf_num] = cbuf[j]; if (cbuf[j] == '\n') { lf_num--; i++; cbuf[j + lf_num] = '\r'; } } assert(lf_num == 0); } else i = read(fileno(stdin), cbuf, BUFSIZZ); if ((!c_ign_eof) && ((i <= 0) || (cbuf[0] == 'Q'))) { BIO_printf(bio_err, "DONE\n"); ret = 0; goto shut; } if ((!c_ign_eof) && (cbuf[0] == 'R')) { BIO_printf(bio_err, "RENEGOTIATING\n"); SSL_renegotiate(con); cbuf_len = 0; } else { cbuf_len = i; cbuf_off = 0; } write_ssl = 1; read_tty = 0; } } ret = 0; shut: if (in_init) print_stuff(bio_c_out, con, full_log); SSL_shutdown(con); shutdown(SSL_get_fd(con), SHUT_RD); close(SSL_get_fd(con)); end: if (con != NULL) { if (prexit != 0) print_stuff(bio_c_out, con, 1); SSL_free(con); } free(next_proto.data); if (ctx != NULL) SSL_CTX_free(ctx); if (cert) X509_free(cert); if (key) EVP_PKEY_free(key); free(pass); if (vpm) X509_VERIFY_PARAM_free(vpm); if (cbuf != NULL) { explicit_bzero(cbuf, BUFSIZZ); free(cbuf); } if (sbuf != NULL) { explicit_bzero(sbuf, BUFSIZZ); free(sbuf); } if (mbuf != NULL) { explicit_bzero(mbuf, BUFSIZZ); free(mbuf); } if (bio_c_out != NULL) { BIO_free(bio_c_out); bio_c_out = NULL; } return (ret); } static void print_stuff(BIO * bio, SSL * s, int full) { X509 *peer = NULL; char *p; static const char *space = " "; char buf[BUFSIZ]; STACK_OF(X509) * sk; STACK_OF(X509_NAME) * sk2; const SSL_CIPHER *c; X509_NAME *xn; int j, i; unsigned char *exportedkeymat; if (full) { int got_a_chain = 0; sk = SSL_get_peer_cert_chain(s); if (sk != NULL) { got_a_chain = 1; /* we don't have it for SSL2 * (yet) */ BIO_printf(bio, "---\nCertificate chain\n"); for (i = 0; i < sk_X509_num(sk); i++) { X509_NAME_oneline(X509_get_subject_name( sk_X509_value(sk, i)), buf, sizeof buf); BIO_printf(bio, "%2d s:%s\n", i, buf); X509_NAME_oneline(X509_get_issuer_name( sk_X509_value(sk, i)), buf, sizeof buf); BIO_printf(bio, " i:%s\n", buf); if (c_showcerts) PEM_write_bio_X509(bio, sk_X509_value(sk, i)); } } BIO_printf(bio, "---\n"); peer = SSL_get_peer_certificate(s); if (peer != NULL) { BIO_printf(bio, "Server certificate\n"); if (!(c_showcerts && got_a_chain)) /* Redundant if we * showed the whole * chain */ PEM_write_bio_X509(bio, peer); X509_NAME_oneline(X509_get_subject_name(peer), buf, sizeof buf); BIO_printf(bio, "subject=%s\n", buf); X509_NAME_oneline(X509_get_issuer_name(peer), buf, sizeof buf); BIO_printf(bio, "issuer=%s\n", buf); } else BIO_printf(bio, "no peer certificate available\n"); sk2 = SSL_get_client_CA_list(s); if ((sk2 != NULL) && (sk_X509_NAME_num(sk2) > 0)) { BIO_printf(bio, "---\nAcceptable client certificate CA names\n"); for (i = 0; i < sk_X509_NAME_num(sk2); i++) { xn = sk_X509_NAME_value(sk2, i); X509_NAME_oneline(xn, buf, sizeof(buf)); BIO_write(bio, buf, strlen(buf)); BIO_write(bio, "\n", 1); } } else { BIO_printf(bio, "---\nNo client certificate CA names sent\n"); } p = SSL_get_shared_ciphers(s, buf, sizeof buf); if (p != NULL) { /* * This works only for SSL 2. In later protocol * versions, the client does not know what other * ciphers (in addition to the one to be used in the * current connection) the server supports. */ BIO_printf(bio, "---\nCiphers common between both SSL endpoints:\n"); j = i = 0; while (*p) { if (*p == ':') { BIO_write(bio, space, 15 - j % 25); i++; j = 0; BIO_write(bio, ((i % 3) ? " " : "\n"), 1); } else { BIO_write(bio, p, 1); j++; } p++; } BIO_write(bio, "\n", 1); } BIO_printf(bio, "---\nSSL handshake has read %ld bytes and written %ld bytes\n", BIO_number_read(SSL_get_rbio(s)), BIO_number_written(SSL_get_wbio(s))); } BIO_printf(bio, (SSL_cache_hit(s) ? "---\nReused, " : "---\nNew, ")); c = SSL_get_current_cipher(s); BIO_printf(bio, "%s, Cipher is %s\n", SSL_CIPHER_get_version(c), SSL_CIPHER_get_name(c)); if (peer != NULL) { EVP_PKEY *pktmp; pktmp = X509_get_pubkey(peer); BIO_printf(bio, "Server public key is %d bit\n", EVP_PKEY_bits(pktmp)); EVP_PKEY_free(pktmp); } BIO_printf(bio, "Secure Renegotiation IS%s supported\n", SSL_get_secure_renegotiation_support(s) ? "" : " NOT"); /* Compression is not supported and will always be none. */ BIO_printf(bio, "Compression: NONE\n"); BIO_printf(bio, "Expansion: NONE\n"); #ifdef SSL_DEBUG { /* Print out local port of connection: useful for debugging */ int sock; struct sockaddr_in ladd; socklen_t ladd_size = sizeof(ladd); sock = SSL_get_fd(s); getsockname(sock, (struct sockaddr *) & ladd, &ladd_size); BIO_printf(bio_c_out, "LOCAL PORT is %u\n", ntohs(ladd.sin_port)); } #endif if (next_proto.status != -1) { const unsigned char *proto; unsigned int proto_len; SSL_get0_next_proto_negotiated(s, &proto, &proto_len); BIO_printf(bio, "Next protocol: (%d) ", next_proto.status); BIO_write(bio, proto, proto_len); BIO_write(bio, "\n", 1); } { const unsigned char *proto; unsigned int proto_len; SSL_get0_alpn_selected(s, &proto, &proto_len); if (proto_len > 0) { BIO_printf(bio, "ALPN protocol: "); BIO_write(bio, proto, proto_len); BIO_write(bio, "\n", 1); } else BIO_printf(bio, "No ALPN negotiated\n"); } #ifndef OPENSSL_NO_SRTP { SRTP_PROTECTION_PROFILE *srtp_profile = SSL_get_selected_srtp_profile(s); if (srtp_profile) BIO_printf(bio, "SRTP Extension negotiated, profile=%s\n", srtp_profile->name); } #endif SSL_SESSION_print(bio, SSL_get_session(s)); if (keymatexportlabel != NULL) { BIO_printf(bio, "Keying material exporter:\n"); BIO_printf(bio, " Label: '%s'\n", keymatexportlabel); BIO_printf(bio, " Length: %i bytes\n", keymatexportlen); exportedkeymat = malloc(keymatexportlen); if (exportedkeymat != NULL) { if (!SSL_export_keying_material(s, exportedkeymat, keymatexportlen, keymatexportlabel, strlen(keymatexportlabel), NULL, 0, 0)) { BIO_printf(bio, " Error\n"); } else { BIO_printf(bio, " Keying material: "); for (i = 0; i < keymatexportlen; i++) BIO_printf(bio, "%02X", exportedkeymat[i]); BIO_printf(bio, "\n"); } free(exportedkeymat); } } BIO_printf(bio, "---\n"); if (peer != NULL) X509_free(peer); /* flush, or debugging output gets mixed with http response */ (void) BIO_flush(bio); } static int ocsp_resp_cb(SSL * s, void *arg) { const unsigned char *p; int len; OCSP_RESPONSE *rsp; len = SSL_get_tlsext_status_ocsp_resp(s, &p); BIO_puts(arg, "OCSP response: "); if (!p) { BIO_puts(arg, "no response sent\n"); return 1; } rsp = d2i_OCSP_RESPONSE(NULL, &p, len); if (!rsp) { BIO_puts(arg, "response parse error\n"); BIO_dump_indent(arg, (char *) p, len, 4); return 0; } BIO_puts(arg, "\n======================================\n"); OCSP_RESPONSE_print(arg, rsp, 0); BIO_puts(arg, "======================================\n"); OCSP_RESPONSE_free(rsp); return 1; } |
Added jni/libressl/apps/openssl/s_server.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 | /* $OpenBSD: s_server.c,v 1.23 2015/12/01 12:04:51 jca Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * ECC cipher suite support in OpenSSL originally developed by * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. */ /* ==================================================================== * Copyright 2005 Nokia. All rights reserved. * * The portions of the attached software ("Contribution") is developed by * Nokia Corporation and is licensed pursuant to the OpenSSL open source * license. * * The Contribution, originally written by Mika Kousa and Pasi Eronen of * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites * support (see RFC 4279) to OpenSSL. * * No patent licenses or other rights except those expressly stated in * the OpenSSL open source license shall be deemed granted or received * expressly, by implication, estoppel, or otherwise. * * No assurances are provided by Nokia that the Contribution does not * infringe the patent or other intellectual property rights of any third * party or that the license provides you with all the necessary rights * to make use of the Contribution. * * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR * OTHERWISE. */ /* Until the key-gen callbacks are modified to use newer prototypes, we allow * deprecated functions for openssl-internal code */ #ifdef OPENSSL_NO_DEPRECATED #undef OPENSSL_NO_DEPRECATED #endif #include <sys/types.h> #include <sys/socket.h> #include <assert.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> #include <unistd.h> #include <poll.h> #include "apps.h" #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/lhash.h> #include <openssl/ocsp.h> #include <openssl/pem.h> #include <openssl/ssl.h> #include <openssl/x509.h> #ifndef OPENSSL_NO_DH #include <openssl/dh.h> #endif #include <openssl/rsa.h> #include "s_apps.h" #include "timeouts.h" static int sv_body(char *hostname, int s, unsigned char *context); static int www_body(char *hostname, int s, unsigned char *context); static void close_accept_socket(void); static void sv_usage(void); static int init_ssl_connection(SSL * s); static void print_stats(BIO * bp, SSL_CTX * ctx); static int generate_session_id(const SSL * ssl, unsigned char *id, unsigned int *id_len); #ifndef OPENSSL_NO_DH static DH *load_dh_param(const char *dhfile); #endif static void s_server_init(void); /* static int load_CA(SSL_CTX *ctx, char *file);*/ #define BUFSIZZ 16*1024 static int bufsize = BUFSIZZ; static int accept_socket = -1; #define TEST_CERT "server.pem" #define TEST_CERT2 "server2.pem" static char *cipher = NULL; static int s_server_verify = SSL_VERIFY_NONE; static int s_server_session_id_context = 1; /* anything will do */ static const char *s_cert_file = TEST_CERT, *s_key_file = NULL; static const char *s_cert_file2 = TEST_CERT2, *s_key_file2 = NULL; static char *s_dcert_file = NULL, *s_dkey_file = NULL; static int s_nbio = 0; static int s_nbio_test = 0; int s_crlf = 0; static SSL_CTX *ctx = NULL; static SSL_CTX *ctx2 = NULL; static int www = 0; static BIO *bio_s_out = NULL; static int s_debug = 0; static int s_tlsextdebug = 0; static int s_tlsextstatus = 0; static int cert_status_cb(SSL * s, void *arg); static int s_msg = 0; static int s_quiet = 0; static char *keymatexportlabel = NULL; static int keymatexportlen = 20; static const char *session_id_prefix = NULL; static int enable_timeouts = 0; static long socket_mtu; #ifndef OPENSSL_NO_DTLS1 static int cert_chain = 0; #endif static void s_server_init(void) { accept_socket = -1; cipher = NULL; s_server_verify = SSL_VERIFY_NONE; s_dcert_file = NULL; s_dkey_file = NULL; s_cert_file = TEST_CERT; s_key_file = NULL; s_cert_file2 = TEST_CERT2; s_key_file2 = NULL; ctx2 = NULL; s_nbio = 0; s_nbio_test = 0; ctx = NULL; www = 0; bio_s_out = NULL; s_debug = 0; s_msg = 0; s_quiet = 0; } static void sv_usage(void) { BIO_printf(bio_err, "usage: s_server [args ...]\n"); BIO_printf(bio_err, "\n"); BIO_printf(bio_err, " -accept arg - port to accept on (default is %d)\n", PORT); BIO_printf(bio_err, " -context arg - set session ID context\n"); BIO_printf(bio_err, " -verify arg - turn on peer certificate verification\n"); BIO_printf(bio_err, " -Verify arg - turn on peer certificate verification, must have a cert.\n"); BIO_printf(bio_err, " -cert arg - certificate file to use\n"); BIO_printf(bio_err, " (default is %s)\n", TEST_CERT); BIO_printf(bio_err, " -crl_check - check the peer certificate has not been revoked by its CA.\n" \ " The CRL(s) are appended to the certificate file\n"); BIO_printf(bio_err, " -crl_check_all - check the peer certificate has not been revoked by its CA\n" \ " or any other CRL in the CA chain. CRL(s) are appended to the\n" \ " the certificate file.\n"); BIO_printf(bio_err, " -certform arg - certificate format (PEM or DER) PEM default\n"); BIO_printf(bio_err, " -key arg - Private Key file to use, in cert file if\n"); BIO_printf(bio_err, " not specified (default is %s)\n", TEST_CERT); BIO_printf(bio_err, " -keyform arg - key format (PEM or DER) PEM default\n"); BIO_printf(bio_err, " -pass arg - private key file pass phrase source\n"); BIO_printf(bio_err, " -dcert arg - second certificate file to use (usually for DSA)\n"); BIO_printf(bio_err, " -dcertform x - second certificate format (PEM or DER) PEM default\n"); BIO_printf(bio_err, " -dkey arg - second private key file to use (usually for DSA)\n"); BIO_printf(bio_err, " -dkeyform arg - second key format (PEM or DER) PEM default\n"); BIO_printf(bio_err, " -dpass arg - second private key file pass phrase source\n"); BIO_printf(bio_err, " -dhparam arg - DH parameter file to use, in cert file if not specified\n"); BIO_printf(bio_err, " or a default set of parameters is used\n"); BIO_printf(bio_err, " -named_curve arg - Elliptic curve name to use for ephemeral ECDH keys.\n" \ " Use \"openssl ecparam -list_curves\" for all names\n" \ " (default is nistp256).\n"); BIO_printf(bio_err, " -nbio - Run with non-blocking IO\n"); BIO_printf(bio_err, " -nbio_test - test with the non-blocking test bio\n"); BIO_printf(bio_err, " -crlf - convert LF from terminal into CRLF\n"); BIO_printf(bio_err, " -debug - Print more output\n"); BIO_printf(bio_err, " -msg - Show protocol messages\n"); BIO_printf(bio_err, " -state - Print the SSL states\n"); BIO_printf(bio_err, " -CApath arg - PEM format directory of CA's\n"); BIO_printf(bio_err, " -CAfile arg - PEM format file of CA's\n"); BIO_printf(bio_err, " -nocert - Don't use any certificates (Anon-DH)\n"); BIO_printf(bio_err, " -cipher arg - play with 'openssl ciphers' to see what goes here\n"); BIO_printf(bio_err, " -serverpref - Use server's cipher preferences\n"); BIO_printf(bio_err, " -quiet - Inhibit printing of session and certificate information\n"); BIO_printf(bio_err, " -tls1_2 - Just talk TLSv1.2\n"); BIO_printf(bio_err, " -tls1_1 - Just talk TLSv1.1\n"); BIO_printf(bio_err, " -tls1 - Just talk TLSv1\n"); BIO_printf(bio_err, " -dtls1 - Just talk DTLSv1\n"); BIO_printf(bio_err, " -timeout - Enable timeouts\n"); BIO_printf(bio_err, " -mtu - Set link layer MTU\n"); BIO_printf(bio_err, " -chain - Read a certificate chain\n"); BIO_printf(bio_err, " -no_ssl2 - Just disable SSLv2\n"); BIO_printf(bio_err, " -no_ssl3 - Just disable SSLv3\n"); BIO_printf(bio_err, " -no_tls1 - Just disable TLSv1\n"); BIO_printf(bio_err, " -no_tls1_1 - Just disable TLSv1.1\n"); BIO_printf(bio_err, " -no_tls1_2 - Just disable TLSv1.2\n"); #ifndef OPENSSL_NO_DH BIO_printf(bio_err, " -no_dhe - Disable ephemeral DH\n"); #endif BIO_printf(bio_err, " -no_ecdhe - Disable ephemeral ECDH\n"); BIO_printf(bio_err, " -bugs - Turn on SSL bug compatibility\n"); BIO_printf(bio_err, " -www - Respond to a 'GET /' with a status page\n"); BIO_printf(bio_err, " -WWW - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n"); BIO_printf(bio_err, " -HTTP - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n"); BIO_printf(bio_err, " with the assumption it contains a complete HTTP response.\n"); BIO_printf(bio_err, " -id_prefix arg - Generate SSL/TLS session IDs prefixed by 'arg'\n"); BIO_printf(bio_err, " -servername host - servername for HostName TLS extension\n"); BIO_printf(bio_err, " -servername_fatal - on mismatch send fatal alert (default warning alert)\n"); BIO_printf(bio_err, " -cert2 arg - certificate file to use for servername\n"); BIO_printf(bio_err, " (default is %s)\n", TEST_CERT2); BIO_printf(bio_err, " -key2 arg - Private Key file to use for servername, in cert file if\n"); BIO_printf(bio_err, " not specified (default is %s)\n", TEST_CERT2); BIO_printf(bio_err, " -tlsextdebug - hex dump of all TLS extensions received\n"); BIO_printf(bio_err, " -no_ticket - disable use of RFC4507bis session tickets\n"); BIO_printf(bio_err, " -nextprotoneg arg - set the advertised protocols for the NPN extension (comma-separated list)\n"); BIO_printf(bio_err," -alpn arg - set the advertised protocols for the ALPN extension (comma-separated list)\n"); #ifndef OPENSSL_NO_SRTP BIO_printf(bio_err, " -use_srtp profiles - Offer SRTP key management with a colon-separated profile list\n"); #endif BIO_printf(bio_err, " -keymatexport label - Export keying material using label\n"); BIO_printf(bio_err, " -keymatexportlen len - Export len bytes of keying material (default 20)\n"); } static int local_argc = 0; static char **local_argv; /* This is a context that we pass to callbacks */ typedef struct tlsextctx_st { char *servername; BIO *biodebug; int extension_error; } tlsextctx; static int ssl_servername_cb(SSL * s, int *ad, void *arg) { tlsextctx *p = (tlsextctx *) arg; const char *servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name); if (servername && p->biodebug) BIO_printf(p->biodebug, "Hostname in TLS extension: \"%s\"\n", servername); if (!p->servername) return SSL_TLSEXT_ERR_NOACK; if (servername) { if (strcmp(servername, p->servername)) return p->extension_error; if (ctx2) { BIO_printf(p->biodebug, "Switching server context.\n"); SSL_set_SSL_CTX(s, ctx2); } } return SSL_TLSEXT_ERR_OK; } /* Structure passed to cert status callback */ typedef struct tlsextstatusctx_st { /* Default responder to use */ char *host, *path, *port; int use_ssl; int timeout; BIO *err; int verbose; } tlsextstatusctx; static tlsextstatusctx tlscstatp = {NULL, NULL, NULL, 0, -1, NULL, 0}; /* Certificate Status callback. This is called when a client includes a * certificate status request extension. * * This is a simplified version. It examines certificates each time and * makes one OCSP responder query for each request. * * A full version would store details such as the OCSP certificate IDs and * minimise the number of OCSP responses by caching them until they were * considered "expired". */ static int cert_status_cb(SSL * s, void *arg) { tlsextstatusctx *srctx = arg; BIO *err = srctx->err; char *host, *port, *path; int use_ssl; unsigned char *rspder = NULL; int rspderlen; STACK_OF(OPENSSL_STRING) * aia = NULL; X509 *x = NULL; X509_STORE_CTX inctx; X509_OBJECT obj; OCSP_REQUEST *req = NULL; OCSP_RESPONSE *resp = NULL; OCSP_CERTID *id = NULL; STACK_OF(X509_EXTENSION) * exts; int ret = SSL_TLSEXT_ERR_NOACK; int i; if (srctx->verbose) BIO_puts(err, "cert_status: callback called\n"); /* Build up OCSP query from server certificate */ x = SSL_get_certificate(s); aia = X509_get1_ocsp(x); if (aia) { if (!OCSP_parse_url(sk_OPENSSL_STRING_value(aia, 0), &host, &port, &path, &use_ssl)) { BIO_puts(err, "cert_status: can't parse AIA URL\n"); goto err; } if (srctx->verbose) BIO_printf(err, "cert_status: AIA URL: %s\n", sk_OPENSSL_STRING_value(aia, 0)); } else { if (!srctx->host) { BIO_puts(srctx->err, "cert_status: no AIA and no default responder URL\n"); goto done; } host = srctx->host; path = srctx->path; port = srctx->port; use_ssl = srctx->use_ssl; } if (!X509_STORE_CTX_init(&inctx, SSL_CTX_get_cert_store(SSL_get_SSL_CTX(s)), NULL, NULL)) goto err; if (X509_STORE_get_by_subject(&inctx, X509_LU_X509, X509_get_issuer_name(x), &obj) <= 0) { BIO_puts(err, "cert_status: Can't retrieve issuer certificate.\n"); X509_STORE_CTX_cleanup(&inctx); goto done; } req = OCSP_REQUEST_new(); if (!req) goto err; id = OCSP_cert_to_id(NULL, x, obj.data.x509); X509_free(obj.data.x509); X509_STORE_CTX_cleanup(&inctx); if (!id) goto err; if (!OCSP_request_add0_id(req, id)) goto err; id = NULL; /* Add any extensions to the request */ SSL_get_tlsext_status_exts(s, &exts); for (i = 0; i < sk_X509_EXTENSION_num(exts); i++) { X509_EXTENSION *ext = sk_X509_EXTENSION_value(exts, i); if (!OCSP_REQUEST_add_ext(req, ext, -1)) goto err; } resp = process_responder(err, req, host, path, port, use_ssl, NULL, srctx->timeout); if (!resp) { BIO_puts(err, "cert_status: error querying responder\n"); goto done; } rspderlen = i2d_OCSP_RESPONSE(resp, &rspder); if (rspderlen <= 0) goto err; SSL_set_tlsext_status_ocsp_resp(s, rspder, rspderlen); if (srctx->verbose) { BIO_puts(err, "cert_status: ocsp response sent:\n"); OCSP_RESPONSE_print(err, resp, 2); } ret = SSL_TLSEXT_ERR_OK; done: if (ret != SSL_TLSEXT_ERR_OK) ERR_print_errors(err); if (aia) { free(host); free(path); free(port); X509_email_free(aia); } if (id) OCSP_CERTID_free(id); if (req) OCSP_REQUEST_free(req); if (resp) OCSP_RESPONSE_free(resp); return ret; err: ret = SSL_TLSEXT_ERR_ALERT_FATAL; goto done; } /* This is the context that we pass to next_proto_cb */ typedef struct tlsextnextprotoctx_st { unsigned char *data; unsigned int len; } tlsextnextprotoctx; static int next_proto_cb(SSL * s, const unsigned char **data, unsigned int *len, void *arg) { tlsextnextprotoctx *next_proto = arg; *data = next_proto->data; *len = next_proto->len; return SSL_TLSEXT_ERR_OK; } /* This the context that we pass to alpn_cb */ typedef struct tlsextalpnctx_st { unsigned char *data; unsigned short len; } tlsextalpnctx; static int alpn_cb(SSL *s, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg) { tlsextalpnctx *alpn_ctx = arg; if (!s_quiet) { /* We can assume that in is syntactically valid. */ unsigned i; BIO_printf(bio_s_out, "ALPN protocols advertised by the client: "); for (i = 0; i < inlen; ) { if (i) BIO_write(bio_s_out, ", ", 2); BIO_write(bio_s_out, &in[i + 1], in[i]); i += in[i] + 1; } BIO_write(bio_s_out, "\n", 1); } if (SSL_select_next_proto((unsigned char**)out, outlen, alpn_ctx->data, alpn_ctx->len, in, inlen) != OPENSSL_NPN_NEGOTIATED) return (SSL_TLSEXT_ERR_NOACK); if (!s_quiet) { BIO_printf(bio_s_out, "ALPN protocols selected: "); BIO_write(bio_s_out, *out, *outlen); BIO_write(bio_s_out, "\n", 1); } return (SSL_TLSEXT_ERR_OK); } #ifndef OPENSSL_NO_SRTP static char *srtp_profiles = NULL; #endif int s_server_main(int argc, char *argv[]) { X509_VERIFY_PARAM *vpm = NULL; int badarg = 0; short port = PORT; char *CApath = NULL, *CAfile = NULL; unsigned char *context = NULL; char *dhfile = NULL; char *named_curve = NULL; int badop = 0, bugs = 0; int ret = 1; int off = 0; int no_dhe = 0, no_ecdhe = 0, nocert = 0; int state = 0; const SSL_METHOD *meth = NULL; int socket_type = SOCK_STREAM; int s_cert_format = FORMAT_PEM, s_key_format = FORMAT_PEM; char *passarg = NULL, *pass = NULL; char *dpassarg = NULL, *dpass = NULL; int s_dcert_format = FORMAT_PEM, s_dkey_format = FORMAT_PEM; X509 *s_cert = NULL, *s_dcert = NULL; EVP_PKEY *s_key = NULL, *s_dkey = NULL; int no_cache = 0; const char *errstr = NULL; EVP_PKEY *s_key2 = NULL; X509 *s_cert2 = NULL; tlsextctx tlsextcbp = {NULL, NULL, SSL_TLSEXT_ERR_ALERT_WARNING}; const char *next_proto_neg_in = NULL; tlsextnextprotoctx next_proto = { NULL, 0 }; const char *alpn_in = NULL; tlsextalpnctx alpn_ctx = { NULL, 0 }; if (single_execution) { if (pledge("stdio inet dns rpath tty", NULL) == -1) { perror("pledge"); exit(1); } } meth = SSLv23_server_method(); local_argc = argc; local_argv = argv; s_server_init(); verify_depth = 0; s_nbio = 0; s_nbio_test = 0; argc--; argv++; while (argc >= 1) { if ((strcmp(*argv, "-port") == 0) || (strcmp(*argv, "-accept") == 0)) { if (--argc < 1) goto bad; if (!extract_port(*(++argv), &port)) goto bad; } else if (strcmp(*argv, "-verify") == 0) { s_server_verify = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE; if (--argc < 1) goto bad; verify_depth = strtonum(*(++argv), 0, INT_MAX, &errstr); if (errstr) goto bad; BIO_printf(bio_err, "verify depth is %d\n", verify_depth); } else if (strcmp(*argv, "-Verify") == 0) { s_server_verify = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT | SSL_VERIFY_CLIENT_ONCE; if (--argc < 1) goto bad; verify_depth = strtonum(*(++argv), 0, INT_MAX, &errstr); if (errstr) goto bad; BIO_printf(bio_err, "verify depth is %d, must return a certificate\n", verify_depth); } else if (strcmp(*argv, "-context") == 0) { if (--argc < 1) goto bad; context = (unsigned char *) *(++argv); } else if (strcmp(*argv, "-cert") == 0) { if (--argc < 1) goto bad; s_cert_file = *(++argv); } else if (strcmp(*argv, "-certform") == 0) { if (--argc < 1) goto bad; s_cert_format = str2fmt(*(++argv)); } else if (strcmp(*argv, "-key") == 0) { if (--argc < 1) goto bad; s_key_file = *(++argv); } else if (strcmp(*argv, "-keyform") == 0) { if (--argc < 1) goto bad; s_key_format = str2fmt(*(++argv)); } else if (strcmp(*argv, "-pass") == 0) { if (--argc < 1) goto bad; passarg = *(++argv); } else if (strcmp(*argv, "-dhparam") == 0) { if (--argc < 1) goto bad; dhfile = *(++argv); } else if (strcmp(*argv, "-named_curve") == 0) { if (--argc < 1) goto bad; named_curve = *(++argv); } else if (strcmp(*argv, "-dcertform") == 0) { if (--argc < 1) goto bad; s_dcert_format = str2fmt(*(++argv)); } else if (strcmp(*argv, "-dcert") == 0) { if (--argc < 1) goto bad; s_dcert_file = *(++argv); } else if (strcmp(*argv, "-dkeyform") == 0) { if (--argc < 1) goto bad; s_dkey_format = str2fmt(*(++argv)); } else if (strcmp(*argv, "-dpass") == 0) { if (--argc < 1) goto bad; dpassarg = *(++argv); } else if (strcmp(*argv, "-dkey") == 0) { if (--argc < 1) goto bad; s_dkey_file = *(++argv); } else if (strcmp(*argv, "-nocert") == 0) { nocert = 1; } else if (strcmp(*argv, "-CApath") == 0) { if (--argc < 1) goto bad; CApath = *(++argv); } else if (strcmp(*argv, "-no_cache") == 0) no_cache = 1; else if (args_verify(&argv, &argc, &badarg, bio_err, &vpm)) { if (badarg) goto bad; continue; } else if (strcmp(*argv, "-verify_return_error") == 0) verify_return_error = 1; else if (strcmp(*argv, "-serverpref") == 0) { off |= SSL_OP_CIPHER_SERVER_PREFERENCE; } else if (strcmp(*argv, "-legacy_renegotiation") == 0) ; /* no-op */ else if (strcmp(*argv, "-cipher") == 0) { if (--argc < 1) goto bad; cipher = *(++argv); } else if (strcmp(*argv, "-CAfile") == 0) { if (--argc < 1) goto bad; CAfile = *(++argv); } else if (strcmp(*argv, "-nbio") == 0) { s_nbio = 1; } else if (strcmp(*argv, "-nbio_test") == 0) { s_nbio = 1; s_nbio_test = 1; } else if (strcmp(*argv, "-debug") == 0) { s_debug = 1; } else if (strcmp(*argv, "-tlsextdebug") == 0) s_tlsextdebug = 1; else if (strcmp(*argv, "-status") == 0) s_tlsextstatus = 1; else if (strcmp(*argv, "-status_verbose") == 0) { s_tlsextstatus = 1; tlscstatp.verbose = 1; } else if (!strcmp(*argv, "-status_timeout")) { s_tlsextstatus = 1; if (--argc < 1) goto bad; tlscstatp.timeout = strtonum(*(++argv), 0, INT_MAX, &errstr); if (errstr) goto bad; } else if (!strcmp(*argv, "-status_url")) { s_tlsextstatus = 1; if (--argc < 1) goto bad; if (!OCSP_parse_url(*(++argv), &tlscstatp.host, &tlscstatp.port, &tlscstatp.path, &tlscstatp.use_ssl)) { BIO_printf(bio_err, "Error parsing URL\n"); goto bad; } } else if (strcmp(*argv, "-msg") == 0) { s_msg = 1; } else if (strcmp(*argv, "-state") == 0) { state = 1; } else if (strcmp(*argv, "-crlf") == 0) { s_crlf = 1; } else if (strcmp(*argv, "-quiet") == 0) { s_quiet = 1; } else if (strcmp(*argv, "-bugs") == 0) { bugs = 1; } else if (strcmp(*argv, "-no_tmp_rsa") == 0) { /* No-op. */ } else if (strcmp(*argv, "-no_dhe") == 0) { no_dhe = 1; } else if (strcmp(*argv, "-no_ecdhe") == 0) { no_ecdhe = 1; } else if (strcmp(*argv, "-www") == 0) { www = 1; } else if (strcmp(*argv, "-WWW") == 0) { www = 2; } else if (strcmp(*argv, "-HTTP") == 0) { www = 3; } else if (strcmp(*argv, "-no_ssl2") == 0) { off |= SSL_OP_NO_SSLv2; } else if (strcmp(*argv, "-no_ssl3") == 0) { off |= SSL_OP_NO_SSLv3; } else if (strcmp(*argv, "-no_tls1") == 0) { off |= SSL_OP_NO_TLSv1; } else if (strcmp(*argv, "-no_tls1_1") == 0) { off |= SSL_OP_NO_TLSv1_1; } else if (strcmp(*argv, "-no_tls1_2") == 0) { off |= SSL_OP_NO_TLSv1_2; } else if (strcmp(*argv, "-no_comp") == 0) { off |= SSL_OP_NO_COMPRESSION; } else if (strcmp(*argv, "-no_ticket") == 0) { off |= SSL_OP_NO_TICKET; } else if (strcmp(*argv, "-tls1") == 0) { meth = TLSv1_server_method(); } else if (strcmp(*argv, "-tls1_1") == 0) { meth = TLSv1_1_server_method(); } else if (strcmp(*argv, "-tls1_2") == 0) { meth = TLSv1_2_server_method(); } #ifndef OPENSSL_NO_DTLS1 else if (strcmp(*argv, "-dtls1") == 0) { meth = DTLSv1_server_method(); socket_type = SOCK_DGRAM; } else if (strcmp(*argv, "-timeout") == 0) enable_timeouts = 1; else if (strcmp(*argv, "-mtu") == 0) { if (--argc < 1) goto bad; socket_mtu = strtonum(*(++argv), 0, LONG_MAX, &errstr); if (errstr) goto bad; } else if (strcmp(*argv, "-chain") == 0) cert_chain = 1; #endif else if (strcmp(*argv, "-id_prefix") == 0) { if (--argc < 1) goto bad; session_id_prefix = *(++argv); } else if (strcmp(*argv, "-servername") == 0) { if (--argc < 1) goto bad; tlsextcbp.servername = *(++argv); } else if (strcmp(*argv, "-servername_fatal") == 0) { tlsextcbp.extension_error = SSL_TLSEXT_ERR_ALERT_FATAL; } else if (strcmp(*argv, "-cert2") == 0) { if (--argc < 1) goto bad; s_cert_file2 = *(++argv); } else if (strcmp(*argv, "-key2") == 0) { if (--argc < 1) goto bad; s_key_file2 = *(++argv); } else if (strcmp(*argv, "-nextprotoneg") == 0) { if (--argc < 1) goto bad; next_proto_neg_in = *(++argv); } else if (strcmp(*argv,"-alpn") == 0) { if (--argc < 1) goto bad; alpn_in = *(++argv); } #ifndef OPENSSL_NO_SRTP else if (strcmp(*argv, "-use_srtp") == 0) { if (--argc < 1) goto bad; srtp_profiles = *(++argv); } #endif else if (strcmp(*argv, "-keymatexport") == 0) { if (--argc < 1) goto bad; keymatexportlabel = *(++argv); } else if (strcmp(*argv, "-keymatexportlen") == 0) { if (--argc < 1) goto bad; keymatexportlen = strtonum(*(++argv), 1, INT_MAX, &errstr); if (errstr) goto bad; } else { BIO_printf(bio_err, "unknown option %s\n", *argv); badop = 1; break; } argc--; argv++; } if (badop) { bad: if (errstr) BIO_printf(bio_err, "invalid argument %s: %s\n", *argv, errstr); else sv_usage(); goto end; } if (!app_passwd(bio_err, passarg, dpassarg, &pass, &dpass)) { BIO_printf(bio_err, "Error getting password\n"); goto end; } if (s_key_file == NULL) s_key_file = s_cert_file; if (s_key_file2 == NULL) s_key_file2 = s_cert_file2; if (nocert == 0) { s_key = load_key(bio_err, s_key_file, s_key_format, 0, pass, "server certificate private key file"); if (!s_key) { ERR_print_errors(bio_err); goto end; } s_cert = load_cert(bio_err, s_cert_file, s_cert_format, NULL, "server certificate file"); if (!s_cert) { ERR_print_errors(bio_err); goto end; } if (tlsextcbp.servername) { s_key2 = load_key(bio_err, s_key_file2, s_key_format, 0, pass, "second server certificate private key file"); if (!s_key2) { ERR_print_errors(bio_err); goto end; } s_cert2 = load_cert(bio_err, s_cert_file2, s_cert_format, NULL, "second server certificate file"); if (!s_cert2) { ERR_print_errors(bio_err); goto end; } } } if (next_proto_neg_in) { unsigned short len; next_proto.data = next_protos_parse(&len, next_proto_neg_in); if (next_proto.data == NULL) goto end; next_proto.len = len; } else { next_proto.data = NULL; } alpn_ctx.data = NULL; if (alpn_in) { unsigned short len; alpn_ctx.data = next_protos_parse(&len, alpn_in); if (alpn_ctx.data == NULL) goto end; alpn_ctx.len = len; } if (s_dcert_file) { if (s_dkey_file == NULL) s_dkey_file = s_dcert_file; s_dkey = load_key(bio_err, s_dkey_file, s_dkey_format, 0, dpass, "second certificate private key file"); if (!s_dkey) { ERR_print_errors(bio_err); goto end; } s_dcert = load_cert(bio_err, s_dcert_file, s_dcert_format, NULL, "second server certificate file"); if (!s_dcert) { ERR_print_errors(bio_err); goto end; } } if (bio_s_out == NULL) { if (s_quiet && !s_debug && !s_msg) { bio_s_out = BIO_new(BIO_s_null()); } else { if (bio_s_out == NULL) bio_s_out = BIO_new_fp(stdout, BIO_NOCLOSE); } } if (nocert) { s_cert_file = NULL; s_key_file = NULL; s_dcert_file = NULL; s_dkey_file = NULL; s_cert_file2 = NULL; s_key_file2 = NULL; } ctx = SSL_CTX_new(meth); if (ctx == NULL) { ERR_print_errors(bio_err); goto end; } if (session_id_prefix) { if (strlen(session_id_prefix) >= 32) BIO_printf(bio_err, "warning: id_prefix is too long, only one new session will be possible\n"); else if (strlen(session_id_prefix) >= 16) BIO_printf(bio_err, "warning: id_prefix is too long if you use SSLv2\n"); if (!SSL_CTX_set_generate_session_id(ctx, generate_session_id)) { BIO_printf(bio_err, "error setting 'id_prefix'\n"); ERR_print_errors(bio_err); goto end; } BIO_printf(bio_err, "id_prefix '%s' set.\n", session_id_prefix); } SSL_CTX_set_quiet_shutdown(ctx, 1); if (bugs) SSL_CTX_set_options(ctx, SSL_OP_ALL); SSL_CTX_set_options(ctx, off); /* * DTLS: partial reads end up discarding unread UDP bytes :-( Setting * read ahead solves this problem. */ if (socket_type == SOCK_DGRAM) SSL_CTX_set_read_ahead(ctx, 1); if (state) SSL_CTX_set_info_callback(ctx, apps_ssl_info_callback); if (no_cache) SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF); else SSL_CTX_sess_set_cache_size(ctx, 128); #ifndef OPENSSL_NO_SRTP if (srtp_profiles != NULL) SSL_CTX_set_tlsext_use_srtp(ctx, srtp_profiles); #endif if ((!SSL_CTX_load_verify_locations(ctx, CAfile, CApath)) || (!SSL_CTX_set_default_verify_paths(ctx))) { /* BIO_printf(bio_err,"X509_load_verify_locations\n"); */ ERR_print_errors(bio_err); /* goto end; */ } if (vpm) SSL_CTX_set1_param(ctx, vpm); if (s_cert2) { ctx2 = SSL_CTX_new(meth); if (ctx2 == NULL) { ERR_print_errors(bio_err); goto end; } } if (ctx2) { BIO_printf(bio_s_out, "Setting secondary ctx parameters\n"); if (session_id_prefix) { if (strlen(session_id_prefix) >= 32) BIO_printf(bio_err, "warning: id_prefix is too long, only one new session will be possible\n"); else if (strlen(session_id_prefix) >= 16) BIO_printf(bio_err, "warning: id_prefix is too long if you use SSLv2\n"); if (!SSL_CTX_set_generate_session_id(ctx2, generate_session_id)) { BIO_printf(bio_err, "error setting 'id_prefix'\n"); ERR_print_errors(bio_err); goto end; } BIO_printf(bio_err, "id_prefix '%s' set.\n", session_id_prefix); } SSL_CTX_set_quiet_shutdown(ctx2, 1); if (bugs) SSL_CTX_set_options(ctx2, SSL_OP_ALL); SSL_CTX_set_options(ctx2, off); /* * DTLS: partial reads end up discarding unread UDP bytes :-( * Setting read ahead solves this problem. */ if (socket_type == SOCK_DGRAM) SSL_CTX_set_read_ahead(ctx2, 1); if (state) SSL_CTX_set_info_callback(ctx2, apps_ssl_info_callback); if (no_cache) SSL_CTX_set_session_cache_mode(ctx2, SSL_SESS_CACHE_OFF); else SSL_CTX_sess_set_cache_size(ctx2, 128); if ((!SSL_CTX_load_verify_locations(ctx2, CAfile, CApath)) || (!SSL_CTX_set_default_verify_paths(ctx2))) { ERR_print_errors(bio_err); } if (vpm) SSL_CTX_set1_param(ctx2, vpm); } if (next_proto.data) SSL_CTX_set_next_protos_advertised_cb(ctx, next_proto_cb, &next_proto); if (alpn_ctx.data) SSL_CTX_set_alpn_select_cb(ctx, alpn_cb, &alpn_ctx); #ifndef OPENSSL_NO_DH if (!no_dhe) { DH *dh = NULL; if (dhfile) dh = load_dh_param(dhfile); else if (s_cert_file) dh = load_dh_param(s_cert_file); if (dh != NULL) BIO_printf(bio_s_out, "Setting temp DH parameters\n"); else BIO_printf(bio_s_out, "Using auto DH parameters\n"); (void) BIO_flush(bio_s_out); if (dh == NULL) SSL_CTX_set_dh_auto(ctx, 1); else if (!SSL_CTX_set_tmp_dh(ctx, dh)) { BIO_printf(bio_err, "Error setting temp DH parameters\n"); ERR_print_errors(bio_err); DH_free(dh); goto end; } if (ctx2) { if (!dhfile) { DH *dh2 = NULL; if (s_cert_file2 != NULL) dh2 = load_dh_param(s_cert_file2); if (dh2 != NULL) { BIO_printf(bio_s_out, "Setting temp DH parameters\n"); (void) BIO_flush(bio_s_out); DH_free(dh); dh = dh2; } } if (dh == NULL) SSL_CTX_set_dh_auto(ctx2, 1); else if (!SSL_CTX_set_tmp_dh(ctx2, dh)) { BIO_printf(bio_err, "Error setting temp DH parameters\n"); ERR_print_errors(bio_err); DH_free(dh); goto end; } } DH_free(dh); } #endif if (!no_ecdhe) { EC_KEY *ecdh = NULL; if (named_curve) { int nid = OBJ_sn2nid(named_curve); if (nid == 0) { BIO_printf(bio_err, "unknown curve name (%s)\n", named_curve); goto end; } ecdh = EC_KEY_new_by_curve_name(nid); if (ecdh == NULL) { BIO_printf(bio_err, "unable to create curve (%s)\n", named_curve); goto end; } } if (ecdh != NULL) { BIO_printf(bio_s_out, "Setting temp ECDH parameters\n"); } else { BIO_printf(bio_s_out, "Using default temp ECDH parameters\n"); ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); if (ecdh == NULL) { BIO_printf(bio_err, "unable to create curve (nistp256)\n"); goto end; } } (void) BIO_flush(bio_s_out); SSL_CTX_set_tmp_ecdh(ctx, ecdh); if (ctx2) SSL_CTX_set_tmp_ecdh(ctx2, ecdh); EC_KEY_free(ecdh); } if (!set_cert_key_stuff(ctx, s_cert, s_key)) goto end; if (ctx2 && !set_cert_key_stuff(ctx2, s_cert2, s_key2)) goto end; if (s_dcert != NULL) { if (!set_cert_key_stuff(ctx, s_dcert, s_dkey)) goto end; } if (cipher != NULL) { if (!SSL_CTX_set_cipher_list(ctx, cipher)) { BIO_printf(bio_err, "error setting cipher list\n"); ERR_print_errors(bio_err); goto end; } if (ctx2 && !SSL_CTX_set_cipher_list(ctx2, cipher)) { BIO_printf(bio_err, "error setting cipher list\n"); ERR_print_errors(bio_err); goto end; } } SSL_CTX_set_verify(ctx, s_server_verify, verify_callback); SSL_CTX_set_session_id_context(ctx, (void *) &s_server_session_id_context, sizeof s_server_session_id_context); /* Set DTLS cookie generation and verification callbacks */ SSL_CTX_set_cookie_generate_cb(ctx, generate_cookie_callback); SSL_CTX_set_cookie_verify_cb(ctx, verify_cookie_callback); if (ctx2) { SSL_CTX_set_verify(ctx2, s_server_verify, verify_callback); SSL_CTX_set_session_id_context(ctx2, (void *) &s_server_session_id_context, sizeof s_server_session_id_context); tlsextcbp.biodebug = bio_s_out; SSL_CTX_set_tlsext_servername_callback(ctx2, ssl_servername_cb); SSL_CTX_set_tlsext_servername_arg(ctx2, &tlsextcbp); SSL_CTX_set_tlsext_servername_callback(ctx, ssl_servername_cb); SSL_CTX_set_tlsext_servername_arg(ctx, &tlsextcbp); } if (CAfile != NULL) { SSL_CTX_set_client_CA_list(ctx, SSL_load_client_CA_file(CAfile)); if (ctx2) SSL_CTX_set_client_CA_list(ctx2, SSL_load_client_CA_file(CAfile)); } BIO_printf(bio_s_out, "ACCEPT\n"); (void) BIO_flush(bio_s_out); if (www) do_server(port, socket_type, &accept_socket, www_body, context); else do_server(port, socket_type, &accept_socket, sv_body, context); print_stats(bio_s_out, ctx); ret = 0; end: if (ctx != NULL) SSL_CTX_free(ctx); if (s_cert) X509_free(s_cert); if (s_dcert) X509_free(s_dcert); if (s_key) EVP_PKEY_free(s_key); if (s_dkey) EVP_PKEY_free(s_dkey); free(pass); free(dpass); if (vpm) X509_VERIFY_PARAM_free(vpm); free(tlscstatp.host); free(tlscstatp.port); free(tlscstatp.path); if (ctx2 != NULL) SSL_CTX_free(ctx2); if (s_cert2) X509_free(s_cert2); if (s_key2) EVP_PKEY_free(s_key2); free(next_proto.data); free(alpn_ctx.data); if (bio_s_out != NULL) { BIO_free(bio_s_out); bio_s_out = NULL; } return (ret); } static void print_stats(BIO * bio, SSL_CTX * ssl_ctx) { BIO_printf(bio, "%4ld items in the session cache\n", SSL_CTX_sess_number(ssl_ctx)); BIO_printf(bio, "%4ld client connects (SSL_connect())\n", SSL_CTX_sess_connect(ssl_ctx)); BIO_printf(bio, "%4ld client renegotiates (SSL_connect())\n", SSL_CTX_sess_connect_renegotiate(ssl_ctx)); BIO_printf(bio, "%4ld client connects that finished\n", SSL_CTX_sess_connect_good(ssl_ctx)); BIO_printf(bio, "%4ld server accepts (SSL_accept())\n", SSL_CTX_sess_accept(ssl_ctx)); BIO_printf(bio, "%4ld server renegotiates (SSL_accept())\n", SSL_CTX_sess_accept_renegotiate(ssl_ctx)); BIO_printf(bio, "%4ld server accepts that finished\n", SSL_CTX_sess_accept_good(ssl_ctx)); BIO_printf(bio, "%4ld session cache hits\n", SSL_CTX_sess_hits(ssl_ctx)); BIO_printf(bio, "%4ld session cache misses\n", SSL_CTX_sess_misses(ssl_ctx)); BIO_printf(bio, "%4ld session cache timeouts\n", SSL_CTX_sess_timeouts(ssl_ctx)); BIO_printf(bio, "%4ld callback cache hits\n", SSL_CTX_sess_cb_hits(ssl_ctx)); BIO_printf(bio, "%4ld cache full overflows (%ld allowed)\n", SSL_CTX_sess_cache_full(ssl_ctx), SSL_CTX_sess_get_cache_size(ssl_ctx)); } static int sv_body(char *hostname, int s, unsigned char *context) { char *buf = NULL; int ret = 1; int k, i; unsigned long l; SSL *con = NULL; BIO *sbio; struct timeval timeout; if ((buf = malloc(bufsize)) == NULL) { BIO_printf(bio_err, "out of memory\n"); goto err; } if (s_nbio) { if (!s_quiet) BIO_printf(bio_err, "turning on non blocking io\n"); if (!BIO_socket_nbio(s, 1)) ERR_print_errors(bio_err); } if (con == NULL) { con = SSL_new(ctx); if (s_tlsextdebug) { SSL_set_tlsext_debug_callback(con, tlsext_cb); SSL_set_tlsext_debug_arg(con, bio_s_out); } if (s_tlsextstatus) { SSL_CTX_set_tlsext_status_cb(ctx, cert_status_cb); tlscstatp.err = bio_err; SSL_CTX_set_tlsext_status_arg(ctx, &tlscstatp); } if (context) SSL_set_session_id_context(con, context, strlen((char *) context)); } SSL_clear(con); if (SSL_version(con) == DTLS1_VERSION) { sbio = BIO_new_dgram(s, BIO_NOCLOSE); if (enable_timeouts) { timeout.tv_sec = 0; timeout.tv_usec = DGRAM_RCV_TIMEOUT; BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, &timeout); timeout.tv_sec = 0; timeout.tv_usec = DGRAM_SND_TIMEOUT; BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, &timeout); } if (socket_mtu > 28) { SSL_set_options(con, SSL_OP_NO_QUERY_MTU); SSL_set_mtu(con, socket_mtu - 28); } else /* want to do MTU discovery */ BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL); /* turn on cookie exchange */ SSL_set_options(con, SSL_OP_COOKIE_EXCHANGE); } else sbio = BIO_new_socket(s, BIO_NOCLOSE); if (s_nbio_test) { BIO *test; test = BIO_new(BIO_f_nbio_test()); sbio = BIO_push(test, sbio); } SSL_set_bio(con, sbio, sbio); SSL_set_accept_state(con); /* SSL_set_fd(con,s); */ if (s_debug) { SSL_set_debug(con, 1); BIO_set_callback(SSL_get_rbio(con), bio_dump_callback); BIO_set_callback_arg(SSL_get_rbio(con), (char *) bio_s_out); } if (s_msg) { SSL_set_msg_callback(con, msg_cb); SSL_set_msg_callback_arg(con, bio_s_out); } if (s_tlsextdebug) { SSL_set_tlsext_debug_callback(con, tlsext_cb); SSL_set_tlsext_debug_arg(con, bio_s_out); } for (;;) { int read_from_terminal; int read_from_sslcon; struct pollfd pfd[2]; int ptimeout; read_from_terminal = 0; read_from_sslcon = SSL_pending(con); if (!read_from_sslcon) { pfd[0].fd = fileno(stdin); pfd[0].events = POLLIN; pfd[1].fd = s; pfd[1].events = POLLIN; if ((SSL_version(con) == DTLS1_VERSION) && DTLSv1_get_timeout(con, &timeout)) ptimeout = timeout.tv_sec * 1000 + timeout.tv_usec / 1000; else ptimeout = -1; i = poll(pfd, 2, ptimeout); if ((SSL_version(con) == DTLS1_VERSION) && DTLSv1_handle_timeout(con) > 0) { BIO_printf(bio_err, "TIMEOUT occured\n"); } if (i <= 0) continue; if (pfd[0].revents) { if ((pfd[0].revents & (POLLERR|POLLNVAL))) continue; read_from_terminal = 1; } if (pfd[1].revents) { if ((pfd[1].revents & (POLLERR|POLLNVAL))) continue; read_from_sslcon = 1; } } if (read_from_terminal) { if (s_crlf) { int j, lf_num; i = read(fileno(stdin), buf, bufsize / 2); lf_num = 0; /* both loops are skipped when i <= 0 */ for (j = 0; j < i; j++) if (buf[j] == '\n') lf_num++; for (j = i - 1; j >= 0; j--) { buf[j + lf_num] = buf[j]; if (buf[j] == '\n') { lf_num--; i++; buf[j + lf_num] = '\r'; } } assert(lf_num == 0); } else i = read(fileno(stdin), buf, bufsize); if (!s_quiet) { if ((i <= 0) || (buf[0] == 'Q')) { BIO_printf(bio_s_out, "DONE\n"); shutdown(s, SHUT_RD); close(s); close_accept_socket(); ret = -11; goto err; } if ((i <= 0) || (buf[0] == 'q')) { BIO_printf(bio_s_out, "DONE\n"); if (SSL_version(con) != DTLS1_VERSION) { shutdown(s, SHUT_RD); close(s); } /* * close_accept_socket(); ret= -11; */ goto err; } if ((buf[0] == 'r') && ((buf[1] == '\n') || (buf[1] == '\r'))) { SSL_renegotiate(con); i = SSL_do_handshake(con); printf("SSL_do_handshake -> %d\n", i); i = 0; /* 13; */ continue; /* * RE-NEGOTIATE\n"); */ } if ((buf[0] == 'R') && ((buf[1] == '\n') || (buf[1] == '\r'))) { SSL_set_verify(con, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE, NULL); SSL_renegotiate(con); i = SSL_do_handshake(con); printf("SSL_do_handshake -> %d\n", i); i = 0; /* 13; */ continue; /* * RE-NEGOTIATE asking for client * cert\n"); */ } if (buf[0] == 'P') { static const char *str = "Lets print some clear text\n"; BIO_write(SSL_get_wbio(con), str, strlen(str)); } if (buf[0] == 'S') { print_stats(bio_s_out, SSL_get_SSL_CTX(con)); } } l = k = 0; for (;;) { /* should do a select for the write */ #ifdef RENEG { static count = 0; if (++count == 100) { count = 0; SSL_renegotiate(con); } } #endif k = SSL_write(con, &(buf[l]), (unsigned int) i); switch (SSL_get_error(con, k)) { case SSL_ERROR_NONE: break; case SSL_ERROR_WANT_WRITE: case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_X509_LOOKUP: BIO_printf(bio_s_out, "Write BLOCK\n"); break; case SSL_ERROR_SYSCALL: case SSL_ERROR_SSL: BIO_printf(bio_s_out, "ERROR\n"); ERR_print_errors(bio_err); ret = 1; goto err; /* break; */ case SSL_ERROR_ZERO_RETURN: BIO_printf(bio_s_out, "DONE\n"); ret = 1; goto err; } l += k; i -= k; if (i <= 0) break; } } if (read_from_sslcon) { if (!SSL_is_init_finished(con)) { i = init_ssl_connection(con); if (i < 0) { ret = 0; goto err; } else if (i == 0) { ret = 1; goto err; } } else { again: i = SSL_read(con, (char *) buf, bufsize); switch (SSL_get_error(con, i)) { case SSL_ERROR_NONE: { int len, n; for (len = 0; len < i;) { do { n = write(fileno(stdout), buf + len, i - len); } while (n == -1 && errno == EINTR); if (n < 0) { BIO_printf(bio_s_out, "ERROR\n"); goto err; } len += n; } } if (SSL_pending(con)) goto again; break; case SSL_ERROR_WANT_WRITE: case SSL_ERROR_WANT_READ: BIO_printf(bio_s_out, "Read BLOCK\n"); break; case SSL_ERROR_SYSCALL: case SSL_ERROR_SSL: BIO_printf(bio_s_out, "ERROR\n"); ERR_print_errors(bio_err); ret = 1; goto err; case SSL_ERROR_ZERO_RETURN: BIO_printf(bio_s_out, "DONE\n"); ret = 1; goto err; } } } } err: if (con != NULL) { BIO_printf(bio_s_out, "shutting down SSL\n"); SSL_set_shutdown(con, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); SSL_free(con); } BIO_printf(bio_s_out, "CONNECTION CLOSED\n"); if (buf != NULL) { explicit_bzero(buf, bufsize); free(buf); } if (ret >= 0) BIO_printf(bio_s_out, "ACCEPT\n"); return (ret); } static void close_accept_socket(void) { BIO_printf(bio_err, "shutdown accept socket\n"); if (accept_socket >= 0) { shutdown(accept_socket, SHUT_RDWR); close(accept_socket); } } static int init_ssl_connection(SSL * con) { int i; const char *str; X509 *peer; long verify_error; char buf[BUFSIZ]; const unsigned char *next_proto_neg; unsigned next_proto_neg_len; unsigned char *exportedkeymat; i = SSL_accept(con); if (i <= 0) { if (BIO_sock_should_retry(i)) { BIO_printf(bio_s_out, "DELAY\n"); return (1); } BIO_printf(bio_err, "ERROR\n"); verify_error = SSL_get_verify_result(con); if (verify_error != X509_V_OK) { BIO_printf(bio_err, "verify error:%s\n", X509_verify_cert_error_string(verify_error)); } else ERR_print_errors(bio_err); return (0); } PEM_write_bio_SSL_SESSION(bio_s_out, SSL_get_session(con)); peer = SSL_get_peer_certificate(con); if (peer != NULL) { BIO_printf(bio_s_out, "Client certificate\n"); PEM_write_bio_X509(bio_s_out, peer); X509_NAME_oneline(X509_get_subject_name(peer), buf, sizeof buf); BIO_printf(bio_s_out, "subject=%s\n", buf); X509_NAME_oneline(X509_get_issuer_name(peer), buf, sizeof buf); BIO_printf(bio_s_out, "issuer=%s\n", buf); X509_free(peer); } if (SSL_get_shared_ciphers(con, buf, sizeof buf) != NULL) BIO_printf(bio_s_out, "Shared ciphers:%s\n", buf); str = SSL_CIPHER_get_name(SSL_get_current_cipher(con)); BIO_printf(bio_s_out, "CIPHER is %s\n", (str != NULL) ? str : "(NONE)"); SSL_get0_next_proto_negotiated(con, &next_proto_neg, &next_proto_neg_len); if (next_proto_neg) { BIO_printf(bio_s_out, "NEXTPROTO is "); BIO_write(bio_s_out, next_proto_neg, next_proto_neg_len); BIO_printf(bio_s_out, "\n"); } #ifndef OPENSSL_NO_SRTP { SRTP_PROTECTION_PROFILE *srtp_profile = SSL_get_selected_srtp_profile(con); if (srtp_profile) BIO_printf(bio_s_out, "SRTP Extension negotiated, profile=%s\n", srtp_profile->name); } #endif if (SSL_cache_hit(con)) BIO_printf(bio_s_out, "Reused session-id\n"); BIO_printf(bio_s_out, "Secure Renegotiation IS%s supported\n", SSL_get_secure_renegotiation_support(con) ? "" : " NOT"); if (keymatexportlabel != NULL) { BIO_printf(bio_s_out, "Keying material exporter:\n"); BIO_printf(bio_s_out, " Label: '%s'\n", keymatexportlabel); BIO_printf(bio_s_out, " Length: %i bytes\n", keymatexportlen); exportedkeymat = malloc(keymatexportlen); if (exportedkeymat != NULL) { if (!SSL_export_keying_material(con, exportedkeymat, keymatexportlen, keymatexportlabel, strlen(keymatexportlabel), NULL, 0, 0)) { BIO_printf(bio_s_out, " Error\n"); } else { BIO_printf(bio_s_out, " Keying material: "); for (i = 0; i < keymatexportlen; i++) BIO_printf(bio_s_out, "%02X", exportedkeymat[i]); BIO_printf(bio_s_out, "\n"); } free(exportedkeymat); } } return (1); } #ifndef OPENSSL_NO_DH static DH * load_dh_param(const char *dhfile) { DH *ret = NULL; BIO *bio; if ((bio = BIO_new_file(dhfile, "r")) == NULL) goto err; ret = PEM_read_bio_DHparams(bio, NULL, NULL, NULL); err: BIO_free(bio); return (ret); } #endif static int www_body(char *hostname, int s, unsigned char *context) { char *buf = NULL; int ret = 1; int i, j, k, dot; SSL *con; const SSL_CIPHER *c; BIO *io, *ssl_bio, *sbio; buf = malloc(bufsize); if (buf == NULL) return (0); io = BIO_new(BIO_f_buffer()); ssl_bio = BIO_new(BIO_f_ssl()); if ((io == NULL) || (ssl_bio == NULL)) goto err; if (s_nbio) { if (!s_quiet) BIO_printf(bio_err, "turning on non blocking io\n"); if (!BIO_socket_nbio(s, 1)) ERR_print_errors(bio_err); } /* lets make the output buffer a reasonable size */ if (!BIO_set_write_buffer_size(io, bufsize)) goto err; if ((con = SSL_new(ctx)) == NULL) goto err; if (s_tlsextdebug) { SSL_set_tlsext_debug_callback(con, tlsext_cb); SSL_set_tlsext_debug_arg(con, bio_s_out); } if (context) SSL_set_session_id_context(con, context, strlen((char *) context)); sbio = BIO_new_socket(s, BIO_NOCLOSE); if (s_nbio_test) { BIO *test; test = BIO_new(BIO_f_nbio_test()); sbio = BIO_push(test, sbio); } SSL_set_bio(con, sbio, sbio); SSL_set_accept_state(con); /* SSL_set_fd(con,s); */ BIO_set_ssl(ssl_bio, con, BIO_CLOSE); BIO_push(io, ssl_bio); if (s_debug) { SSL_set_debug(con, 1); BIO_set_callback(SSL_get_rbio(con), bio_dump_callback); BIO_set_callback_arg(SSL_get_rbio(con), (char *) bio_s_out); } if (s_msg) { SSL_set_msg_callback(con, msg_cb); SSL_set_msg_callback_arg(con, bio_s_out); } for (;;) { i = BIO_gets(io, buf, bufsize - 1); if (i < 0) { /* error */ if (!BIO_should_retry(io)) { if (!s_quiet) ERR_print_errors(bio_err); goto err; } else { BIO_printf(bio_s_out, "read R BLOCK\n"); sleep(1); continue; } } else if (i == 0) { /* end of input */ ret = 1; goto end; } /* else we have data */ if (((www == 1) && (strncmp("GET ", buf, 4) == 0)) || ((www == 2) && (strncmp("GET /stats ", buf, 11) == 0))) { char *p; X509 *peer; STACK_OF(SSL_CIPHER) * sk; static const char *space = " "; BIO_puts(io, "HTTP/1.0 200 ok\r\nContent-type: text/html\r\n\r\n"); BIO_puts(io, "<HTML><BODY BGCOLOR=\"#ffffff\">\n"); BIO_puts(io, "<pre>\n"); /* BIO_puts(io,SSLeay_version(SSLEAY_VERSION));*/ BIO_puts(io, "\n"); for (i = 0; i < local_argc; i++) { BIO_puts(io, local_argv[i]); BIO_write(io, " ", 1); } BIO_puts(io, "\n"); BIO_printf(io, "Secure Renegotiation IS%s supported\n", SSL_get_secure_renegotiation_support(con) ? "" : " NOT"); /* * The following is evil and should not really be * done */ BIO_printf(io, "Ciphers supported in s_server binary\n"); sk = SSL_get_ciphers(con); j = sk_SSL_CIPHER_num(sk); for (i = 0; i < j; i++) { c = sk_SSL_CIPHER_value(sk, i); BIO_printf(io, "%-11s:%-25s", SSL_CIPHER_get_version(c), SSL_CIPHER_get_name(c)); if ((((i + 1) % 2) == 0) && (i + 1 != j)) BIO_puts(io, "\n"); } BIO_puts(io, "\n"); p = SSL_get_shared_ciphers(con, buf, bufsize); if (p != NULL) { BIO_printf(io, "---\nCiphers common between both SSL end points:\n"); j = i = 0; while (*p) { if (*p == ':') { BIO_write(io, space, 26 - j); i++; j = 0; BIO_write(io, ((i % 3) ? " " : "\n"), 1); } else { BIO_write(io, p, 1); j++; } p++; } BIO_puts(io, "\n"); } BIO_printf(io, (SSL_cache_hit(con) ? "---\nReused, " : "---\nNew, ")); c = SSL_get_current_cipher(con); BIO_printf(io, "%s, Cipher is %s\n", SSL_CIPHER_get_version(c), SSL_CIPHER_get_name(c)); SSL_SESSION_print(io, SSL_get_session(con)); BIO_printf(io, "---\n"); print_stats(io, SSL_get_SSL_CTX(con)); BIO_printf(io, "---\n"); peer = SSL_get_peer_certificate(con); if (peer != NULL) { BIO_printf(io, "Client certificate\n"); X509_print(io, peer); PEM_write_bio_X509(io, peer); } else BIO_puts(io, "no client certificate available\n"); BIO_puts(io, "</BODY></HTML>\r\n\r\n"); break; } else if ((www == 2 || www == 3) && (strncmp("GET /", buf, 5) == 0)) { BIO *file; char *p, *e; static const char *text = "HTTP/1.0 200 ok\r\nContent-type: text/plain\r\n\r\n"; /* skip the '/' */ p = &(buf[5]); dot = 1; for (e = p; *e != '\0'; e++) { if (e[0] == ' ') break; switch (dot) { case 1: dot = (e[0] == '.') ? 2 : 0; break; case 2: dot = (e[0] == '.') ? 3 : 0; break; case 3: dot = (e[0] == '/') ? -1 : 0; break; } if (dot == 0) dot = (e[0] == '/') ? 1 : 0; } dot = (dot == 3) || (dot == -1); /* filename contains * ".." component */ if (*e == '\0') { BIO_puts(io, text); BIO_printf(io, "'%s' is an invalid file name\r\n", p); break; } *e = '\0'; if (dot) { BIO_puts(io, text); BIO_printf(io, "'%s' contains '..' reference\r\n", p); break; } if (*p == '/') { BIO_puts(io, text); BIO_printf(io, "'%s' is an invalid path\r\n", p); break; } /* if a directory, do the index thang */ if (app_isdir(p) > 0) { BIO_puts(io, text); BIO_printf(io, "'%s' is a directory\r\n", p); break; } if ((file = BIO_new_file(p, "r")) == NULL) { BIO_puts(io, text); BIO_printf(io, "Error opening '%s'\r\n", p); ERR_print_errors(io); break; } if (!s_quiet) BIO_printf(bio_err, "FILE:%s\n", p); if (www == 2) { i = strlen(p); if (((i > 5) && (strcmp(&(p[i - 5]), ".html") == 0)) || ((i > 4) && (strcmp(&(p[i - 4]), ".php") == 0)) || ((i > 4) && (strcmp(&(p[i - 4]), ".htm") == 0))) BIO_puts(io, "HTTP/1.0 200 ok\r\nContent-type: text/html\r\n\r\n"); else BIO_puts(io, "HTTP/1.0 200 ok\r\nContent-type: text/plain\r\n\r\n"); } /* send the file */ for (;;) { i = BIO_read(file, buf, bufsize); if (i <= 0) break; #ifdef RENEG total_bytes += i; fprintf(stderr, "%d\n", i); if (total_bytes > 3 * 1024) { total_bytes = 0; fprintf(stderr, "RENEGOTIATE\n"); SSL_renegotiate(con); } #endif for (j = 0; j < i;) { #ifdef RENEG { static count = 0; if (++count == 13) { SSL_renegotiate(con); } } #endif k = BIO_write(io, &(buf[j]), i - j); if (k <= 0) { if (!BIO_should_retry(io)) goto write_error; else { BIO_printf(bio_s_out, "rwrite W BLOCK\n"); } } else { j += k; } } } write_error: BIO_free(file); break; } } for (;;) { i = (int) BIO_flush(io); if (i <= 0) { if (!BIO_should_retry(io)) break; } else break; } end: /* make sure we re-use sessions */ SSL_set_shutdown(con, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); err: if (ret >= 0) BIO_printf(bio_s_out, "ACCEPT\n"); free(buf); if (io != NULL) BIO_free_all(io); /* if (ssl_bio != NULL) BIO_free(ssl_bio);*/ return (ret); } #define MAX_SESSION_ID_ATTEMPTS 10 static int generate_session_id(const SSL * ssl, unsigned char *id, unsigned int *id_len) { unsigned int count = 0; do { arc4random_buf(id, *id_len); /* * Prefix the session_id with the required prefix. NB: If our * prefix is too long, clip it - but there will be worse * effects anyway, eg. the server could only possibly create * 1 session ID (ie. the prefix!) so all future session * negotiations will fail due to conflicts. */ memcpy(id, session_id_prefix, (strlen(session_id_prefix) < *id_len) ? strlen(session_id_prefix) : *id_len); } while (SSL_has_matching_session_id(ssl, id, *id_len) && (++count < MAX_SESSION_ID_ATTEMPTS)); if (count >= MAX_SESSION_ID_ATTEMPTS) return 0; return 1; } |
Added jni/libressl/apps/openssl/s_socket.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 | /* $OpenBSD: s_socket.c,v 1.7 2015/07/20 03:22:25 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <sys/socket.h> #include <netinet/in.h> #include <errno.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "apps.h" #include <openssl/ssl.h> #include "s_apps.h" static int init_server(int *sock, int port, int type); static int init_server_long(int *sock, int port, char *ip, int type); static int do_accept(int acc_sock, int *sock, char **host); int init_client(int *sock, char *host, char *port, int type, int af) { struct addrinfo hints, *ai_top, *ai; int i, s = -1; memset(&hints, '\0', sizeof(hints)); hints.ai_family = af; hints.ai_socktype = type; if ((i = getaddrinfo(host, port, &hints, &ai_top)) != 0) { BIO_printf(bio_err, "getaddrinfo: %s\n", gai_strerror(i)); return (0); } if (ai_top == NULL || ai_top->ai_addr == NULL) { BIO_printf(bio_err, "getaddrinfo returned no addresses\n"); if (ai_top != NULL) { freeaddrinfo(ai_top); } return (0); } for (ai = ai_top; ai != NULL; ai = ai->ai_next) { s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); if (s == -1) { continue; } if (type == SOCK_STREAM) { i = 0; i = setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (char *) &i, sizeof(i)); if (i < 0) { perror("keepalive"); goto out; } } if ((i = connect(s, ai->ai_addr, ai->ai_addrlen)) == 0) { *sock = s; freeaddrinfo(ai_top); return (1); } close(s); s = -1; } perror("connect"); out: if (s != -1) close(s); freeaddrinfo(ai_top); return (0); } int do_server(int port, int type, int *ret, int (*cb) (char *hostname, int s, unsigned char *context), unsigned char *context) { int sock; char *name = NULL; int accept_socket = 0; int i; if (!init_server(&accept_socket, port, type)) return (0); if (ret != NULL) { *ret = accept_socket; /* return(1); */ } for (;;) { if (type == SOCK_STREAM) { if (do_accept(accept_socket, &sock, &name) == 0) { shutdown(accept_socket, SHUT_RD); close(accept_socket); return (0); } } else sock = accept_socket; i = (*cb) (name, sock, context); free(name); if (type == SOCK_STREAM) { shutdown(sock, SHUT_RDWR); close(sock); } if (i < 0) { shutdown(accept_socket, SHUT_RDWR); close(accept_socket); return (i); } } } static int init_server_long(int *sock, int port, char *ip, int type) { int ret = 0; struct sockaddr_in server; int s = -1; memset((char *) &server, 0, sizeof(server)); server.sin_family = AF_INET; server.sin_port = htons((unsigned short) port); if (ip == NULL) server.sin_addr.s_addr = INADDR_ANY; else memcpy(&server.sin_addr.s_addr, ip, 4); if (type == SOCK_STREAM) s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); else /* type == SOCK_DGRAM */ s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (s == -1) goto err; #if defined SOL_SOCKET && defined SO_REUSEADDR { int j = 1; if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *) &j, sizeof j) == -1) { perror("setsockopt"); goto err; } } #endif if (bind(s, (struct sockaddr *) & server, sizeof(server)) == -1) { perror("bind"); goto err; } /* Make it 128 for linux */ if (type == SOCK_STREAM && listen(s, 128) == -1) goto err; *sock = s; ret = 1; err: if ((ret == 0) && (s != -1)) { shutdown(s, SHUT_RD); close(s); } return (ret); } static int init_server(int *sock, int port, int type) { return (init_server_long(sock, port, NULL, type)); } static int do_accept(int acc_sock, int *sock, char **host) { int ret; struct hostent *h1, *h2; static struct sockaddr_in from; socklen_t len; /* struct linger ling; */ redoit: memset((char *) &from, 0, sizeof(from)); len = sizeof(from); ret = accept(acc_sock, (struct sockaddr *) & from, &len); if (ret == -1) { if (errno == EINTR) { /* check_timeout(); */ goto redoit; } fprintf(stderr, "errno=%d ", errno); perror("accept"); return (0); } /* ling.l_onoff=1; ling.l_linger=0; i=setsockopt(ret,SOL_SOCKET,SO_LINGER,(char *)&ling,sizeof(ling)); if (i < 0) { perror("linger"); return(0); } i=0; i=setsockopt(ret,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i)); if (i < 0) { perror("keepalive"); return(0); } */ if (host == NULL) goto end; h1 = gethostbyaddr((char *) &from.sin_addr.s_addr, sizeof(from.sin_addr.s_addr), AF_INET); if (h1 == NULL) { BIO_printf(bio_err, "bad gethostbyaddr\n"); *host = NULL; /* return(0); */ } else { if ((*host = strdup(h1->h_name)) == NULL) { perror("strdup"); close(ret); return (0); } h2 = gethostbyname(*host); if (h2 == NULL) { BIO_printf(bio_err, "gethostbyname failure\n"); close(ret); return (0); } if (h2->h_addrtype != AF_INET) { BIO_printf(bio_err, "gethostbyname addr is not AF_INET\n"); close(ret); return (0); } } end: *sock = ret; return (1); } int extract_host_port(char *str, char **host_ptr, unsigned char *ip, char **port_ptr) { char *h, *p; h = str; p = strrchr(str, '/'); /* IPv6 host/port */ if (p == NULL) { p = strrchr(str, ':'); } if (p == NULL) { BIO_printf(bio_err, "no port defined\n"); return (0); } *(p++) = '\0'; if (host_ptr != NULL) *host_ptr = h; if (port_ptr != NULL && p != NULL && *p != '\0') *port_ptr = p; return (1); } int extract_port(char *str, short *port_ptr) { int i; const char *errstr; struct servent *s; i = strtonum(str, 1, 65535, &errstr); if (!errstr) { *port_ptr = (unsigned short) i; } else { s = getservbyname(str, "tcp"); if (s == NULL) { BIO_printf(bio_err, "getservbyname failure for %s\n", str); return (0); } *port_ptr = ntohs((unsigned short) s->s_port); } return (1); } |
Added jni/libressl/apps/openssl/s_time.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 | /* $OpenBSD: s_time.c,v 1.13 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /*----------------------------------------- s_time - SSL client connection timer program Written and donated by Larry Streepy <streepy@healthcare.com> -----------------------------------------*/ #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> #include <unistd.h> #include <poll.h> #include "apps.h" #include <openssl/err.h> #include <openssl/pem.h> #include <openssl/ssl.h> #include <openssl/x509.h> #include "s_apps.h" #define SSL_CONNECT_NAME "localhost:4433" #define BUFSIZZ 1024*10 #define MYBUFSIZ 1024*8 #undef min #undef max #define min(a,b) (((a) < (b)) ? (a) : (b)) #define max(a,b) (((a) > (b)) ? (a) : (b)) #define SECONDS 30 extern int verify_depth; extern int verify_error; static void s_time_usage(void); static SSL *doConnection(SSL * scon); static SSL_CTX *tm_ctx = NULL; static const SSL_METHOD *s_time_meth = NULL; static long bytes_read = 0; struct { int bugs; char *CAfile; char *CApath; char *certfile; char *cipher; char *host; char *keyfile; int maxtime; int nbio; int no_shutdown; int perform; int verify; int verify_depth; char *www_path; } s_time_config; struct option s_time_options[] = { { .name = "bugs", .desc = "Enable workarounds for known SSL/TLS bugs", .type = OPTION_FLAG, .opt.flag = &s_time_config.bugs, }, { .name = "CAfile", .argname = "file", .desc = "File containing trusted certificates in PEM format", .type = OPTION_ARG, .opt.arg = &s_time_config.CAfile, }, { .name = "CApath", .argname = "path", .desc = "Directory containing trusted certificates", .type = OPTION_ARG, .opt.arg = &s_time_config.CApath, }, { .name = "cert", .argname = "file", .desc = "Client certificate to use, if one is requested", .type = OPTION_ARG, .opt.arg = &s_time_config.certfile, }, { .name = "cipher", .argname = "list", .desc = "List of cipher suites to send to the server", .type = OPTION_ARG, .opt.arg = &s_time_config.cipher, }, { .name = "connect", .argname = "host:port", .desc = "Host and port to connect to (default " SSL_CONNECT_NAME ")", .type = OPTION_ARG, .opt.arg = &s_time_config.host, }, { .name = "key", .argname = "file", .desc = "Client private key to use, if one is required", .type = OPTION_ARG, .opt.arg = &s_time_config.keyfile, }, { .name = "nbio", .desc = "Use non-blocking I/O", .type = OPTION_FLAG, .opt.flag = &s_time_config.nbio, }, { .name = "new", .desc = "Use a new session ID for each connection", .type = OPTION_VALUE, .opt.value = &s_time_config.perform, .value = 1, }, { .name = "no_shutdown", .desc = "Shut down the connection without notifying the server", .type = OPTION_FLAG, .opt.flag = &s_time_config.no_shutdown, }, { .name = "reuse", .desc = "Reuse the same session ID for each connection", .type = OPTION_VALUE, .opt.value = &s_time_config.perform, .value = 2, }, { .name = "time", .argname = "seconds", .desc = "Duration to perform timing tests for (default 30)", .type = OPTION_ARG_INT, .opt.value = &s_time_config.maxtime, }, { .name = "verify", .argname = "depth", .desc = "Enable peer certificate verification with given depth", .type = OPTION_ARG_INT, .opt.value = &s_time_config.verify_depth, }, { .name = "www", .argname = "page", .desc = "Page to GET from the server (default none)", .type = OPTION_ARG, .opt.arg = &s_time_config.www_path, }, { NULL }, }; static void s_time_usage(void) { fprintf(stderr, "usage: s_time " "[-bugs] [-CAfile file] [-CApath directory] [-cert file]\n" " [-cipher cipherlist] [-connect host:port] [-key keyfile]\n" " [-nbio] [-new] [-no_shutdown] [-reuse] [-time seconds]\n" " [-verify depth] [-www page]\n\n"); options_usage(s_time_options); } /*********************************************************************** * TIME - time functions */ #define START 0 #define STOP 1 static double tm_Time_F(int s) { return app_tminterval(s, 1); } /*********************************************************************** * MAIN - main processing area for client * real name depends on MONOLITH */ int s_time_main(int argc, char **argv) { double totalTime = 0.0; int nConn = 0; SSL *scon = NULL; long finishtime = 0; int ret = 1, i; char buf[1024 * 8]; int ver; if (single_execution) { if (pledge("stdio inet rpath", NULL) == -1) { perror("pledge"); exit(1); } } s_time_meth = SSLv23_client_method(); verify_depth = 0; memset(&s_time_config, 0, sizeof(s_time_config)); s_time_config.host = SSL_CONNECT_NAME; s_time_config.maxtime = SECONDS; s_time_config.perform = 3; s_time_config.verify = SSL_VERIFY_NONE; s_time_config.verify_depth = -1; if (options_parse(argc, argv, s_time_options, NULL, NULL) != 0) { s_time_usage(); goto end; } if (s_time_config.verify_depth >= 0) { s_time_config.verify = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE; verify_depth = s_time_config.verify_depth; BIO_printf(bio_err, "verify depth is %d\n", verify_depth); } if (s_time_config.www_path != NULL && strlen(s_time_config.www_path) > MYBUFSIZ - 100) { BIO_printf(bio_err, "-www option too long\n"); goto end; } if ((tm_ctx = SSL_CTX_new(s_time_meth)) == NULL) return (1); SSL_CTX_set_quiet_shutdown(tm_ctx, 1); if (s_time_config.bugs) SSL_CTX_set_options(tm_ctx, SSL_OP_ALL); if (s_time_config.cipher != NULL) { if (!SSL_CTX_set_cipher_list(tm_ctx, s_time_config.cipher)) { BIO_printf(bio_err, "error setting cipher list\n"); ERR_print_errors(bio_err); goto end; } } SSL_CTX_set_verify(tm_ctx, s_time_config.verify, NULL); if (!set_cert_stuff(tm_ctx, s_time_config.certfile, s_time_config.keyfile)) goto end; if ((!SSL_CTX_load_verify_locations(tm_ctx, s_time_config.CAfile, s_time_config.CApath)) || (!SSL_CTX_set_default_verify_paths(tm_ctx))) { /* * BIO_printf(bio_err,"error setting default verify * locations\n"); */ ERR_print_errors(bio_err); /* goto end; */ } if (!(s_time_config.perform & 1)) goto next; printf("Collecting connection statistics for %d seconds\n", s_time_config.maxtime); /* Loop and time how long it takes to make connections */ bytes_read = 0; finishtime = (long) time(NULL) + s_time_config.maxtime; tm_Time_F(START); for (;;) { if (finishtime < (long) time(NULL)) break; if ((scon = doConnection(NULL)) == NULL) goto end; if (s_time_config.www_path != NULL) { int retval = snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n", s_time_config.www_path); if ((size_t)retval >= sizeof buf) { fprintf(stderr, "URL too long\n"); goto end; } SSL_write(scon, buf, strlen(buf)); while ((i = SSL_read(scon, buf, sizeof(buf))) > 0) bytes_read += i; } if (s_time_config.no_shutdown) SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); else SSL_shutdown(scon); shutdown(SSL_get_fd(scon), SHUT_RDWR); close(SSL_get_fd(scon)); nConn += 1; if (SSL_session_reused(scon)) ver = 'r'; else { ver = SSL_version(scon); if (ver == TLS1_VERSION) ver = 't'; else if (ver == SSL3_VERSION) ver = '3'; else if (ver == SSL2_VERSION) ver = '2'; else ver = '*'; } fputc(ver, stdout); fflush(stdout); SSL_free(scon); scon = NULL; } totalTime += tm_Time_F(STOP); /* Add the time for this iteration */ i = (int) ((long) time(NULL) - finishtime + s_time_config.maxtime); printf("\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double) nConn / totalTime), bytes_read); printf("%d connections in %ld real seconds, %ld bytes read per connection\n", nConn, (long) time(NULL) - finishtime + s_time_config.maxtime, bytes_read / nConn); /* * Now loop and time connections using the same session id over and * over */ next: if (!(s_time_config.perform & 2)) goto end; printf("\n\nNow timing with session id reuse.\n"); /* Get an SSL object so we can reuse the session id */ if ((scon = doConnection(NULL)) == NULL) { fprintf(stderr, "Unable to get connection\n"); goto end; } if (s_time_config.www_path != NULL) { int retval = snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n", s_time_config.www_path); if ((size_t)retval >= sizeof buf) { fprintf(stderr, "URL too long\n"); goto end; } SSL_write(scon, buf, strlen(buf)); while (SSL_read(scon, buf, sizeof(buf)) > 0); } if (s_time_config.no_shutdown) SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); else SSL_shutdown(scon); shutdown(SSL_get_fd(scon), SHUT_RDWR); close(SSL_get_fd(scon)); nConn = 0; totalTime = 0.0; finishtime = (long) time(NULL) + s_time_config.maxtime; printf("starting\n"); bytes_read = 0; tm_Time_F(START); for (;;) { if (finishtime < (long) time(NULL)) break; if ((doConnection(scon)) == NULL) goto end; if (s_time_config.www_path) { int retval = snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n", s_time_config.www_path); if ((size_t)retval >= sizeof buf) { fprintf(stderr, "URL too long\n"); goto end; } SSL_write(scon, buf, strlen(buf)); while ((i = SSL_read(scon, buf, sizeof(buf))) > 0) bytes_read += i; } if (s_time_config.no_shutdown) SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); else SSL_shutdown(scon); shutdown(SSL_get_fd(scon), SHUT_RDWR); close(SSL_get_fd(scon)); nConn += 1; if (SSL_session_reused(scon)) ver = 'r'; else { ver = SSL_version(scon); if (ver == TLS1_VERSION) ver = 't'; else if (ver == SSL3_VERSION) ver = '3'; else if (ver == SSL2_VERSION) ver = '2'; else ver = '*'; } fputc(ver, stdout); fflush(stdout); } totalTime += tm_Time_F(STOP); /* Add the time for this iteration */ printf("\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double) nConn / totalTime), bytes_read); printf("%d connections in %ld real seconds, %ld bytes read per connection\n", nConn, (long) time(NULL) - finishtime + s_time_config.maxtime, bytes_read / nConn); ret = 0; end: if (scon != NULL) SSL_free(scon); if (tm_ctx != NULL) { SSL_CTX_free(tm_ctx); tm_ctx = NULL; } return (ret); } /*********************************************************************** * doConnection - make a connection * Args: * scon = earlier ssl connection for session id, or NULL * Returns: * SSL * = the connection pointer. */ static SSL * doConnection(SSL * scon) { struct pollfd pfd[1]; SSL *serverCon; BIO *conn; long verify_error; int i; if ((conn = BIO_new(BIO_s_connect())) == NULL) return (NULL); /* BIO_set_conn_port(conn,port);*/ BIO_set_conn_hostname(conn, s_time_config.host); if (scon == NULL) serverCon = SSL_new(tm_ctx); else { serverCon = scon; SSL_set_connect_state(serverCon); } SSL_set_bio(serverCon, conn, conn); /* ok, lets connect */ for (;;) { i = SSL_connect(serverCon); if (BIO_sock_should_retry(i)) { BIO_printf(bio_err, "DELAY\n"); i = SSL_get_fd(serverCon); pfd[0].fd = i; pfd[0].events = POLLIN; poll(pfd, 1, -1); continue; } break; } if (i <= 0) { BIO_printf(bio_err, "ERROR\n"); verify_error = SSL_get_verify_result(serverCon); if (verify_error != X509_V_OK) BIO_printf(bio_err, "verify error:%s\n", X509_verify_cert_error_string(verify_error)); else ERR_print_errors(bio_err); if (scon == NULL) SSL_free(serverCon); return NULL; } return serverCon; } |
Added jni/libressl/apps/openssl/sess_id.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 | /* $OpenBSD: sess_id.c,v 1.6 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "apps.h" #include "progs.h" #include <openssl/bio.h> #include <openssl/err.h> #include <openssl/pem.h> #include <openssl/ssl.h> #include <openssl/x509.h> static struct { int cert; char *context; char *infile; int informat; int noout; char *outfile; int outformat; int text; } sess_id_config; static struct option sess_id_options[] = { { .name = "cert", .desc = "Output certificate if present in session", .type = OPTION_FLAG, .opt.flag = &sess_id_config.cert, }, { .name = "context", .argname = "id", .desc = "Set the session ID context for output", .type = OPTION_ARG, .opt.arg = &sess_id_config.context, }, { .name = "in", .argname = "file", .desc = "Input file (default stdin)", .type = OPTION_ARG, .opt.arg = &sess_id_config.infile, }, { .name = "inform", .argname = "format", .desc = "Input format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &sess_id_config.informat, }, { .name = "noout", .desc = "Do not output the encoded session info", .type = OPTION_FLAG, .opt.flag = &sess_id_config.noout, }, { .name = "out", .argname = "file", .desc = "Output file (default stdout)", .type = OPTION_ARG, .opt.arg = &sess_id_config.outfile, }, { .name = "outform", .argname = "format", .desc = "Output format (DER or PEM (default))", .type = OPTION_ARG_FORMAT, .opt.value = &sess_id_config.outformat, }, { .name = "text", .desc = "Print various public or private key components in" " plain text", .type = OPTION_FLAG, .opt.flag = &sess_id_config.text, }, { NULL } }; static void sess_id_usage(void) { fprintf(stderr, "usage: sess_id [-cert] [-context id] [-in file] [-inform fmt] " "[-noout]\n" " [-out file] [-outform fmt] [-text]\n\n"); options_usage(sess_id_options); } static SSL_SESSION *load_sess_id(char *file, int format); int sess_id_main(int argc, char **argv) { SSL_SESSION *x = NULL; X509 *peer = NULL; int ret = 1, i; BIO *out = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath", NULL) == -1) { perror("pledge"); exit(1); } } memset(&sess_id_config, 0, sizeof(sess_id_config)); sess_id_config.informat = FORMAT_PEM; sess_id_config.outformat = FORMAT_PEM; if (options_parse(argc, argv, sess_id_options, NULL, NULL) != 0) { sess_id_usage(); return (1); } x = load_sess_id(sess_id_config.infile, sess_id_config.informat); if (x == NULL) { goto end; } peer = SSL_SESSION_get0_peer(x); if (sess_id_config.context) { size_t ctx_len = strlen(sess_id_config.context); if (ctx_len > SSL_MAX_SID_CTX_LENGTH) { BIO_printf(bio_err, "Context too long\n"); goto end; } SSL_SESSION_set1_id_context(x, (unsigned char *)sess_id_config.context, ctx_len); } if (!sess_id_config.noout || sess_id_config.text) { out = BIO_new(BIO_s_file()); if (out == NULL) { ERR_print_errors(bio_err); goto end; } if (sess_id_config.outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, sess_id_config.outfile) <= 0) { perror(sess_id_config.outfile); goto end; } } } if (sess_id_config.text) { SSL_SESSION_print(out, x); if (sess_id_config.cert) { if (peer == NULL) BIO_puts(out, "No certificate present\n"); else X509_print(out, peer); } } if (!sess_id_config.noout && !sess_id_config.cert) { if (sess_id_config.outformat == FORMAT_ASN1) i = i2d_SSL_SESSION_bio(out, x); else if (sess_id_config.outformat == FORMAT_PEM) i = PEM_write_bio_SSL_SESSION(out, x); else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } if (!i) { BIO_printf(bio_err, "unable to write SSL_SESSION\n"); goto end; } } else if (!sess_id_config.noout && (peer != NULL)) { /* just print the certificate */ if (sess_id_config.outformat == FORMAT_ASN1) i = (int) i2d_X509_bio(out, peer); else if (sess_id_config.outformat == FORMAT_PEM) i = PEM_write_bio_X509(out, peer); else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } if (!i) { BIO_printf(bio_err, "unable to write X509\n"); goto end; } } ret = 0; end: BIO_free_all(out); SSL_SESSION_free(x); return (ret); } static SSL_SESSION * load_sess_id(char *infile, int format) { SSL_SESSION *x = NULL; BIO *in = NULL; in = BIO_new(BIO_s_file()); if (in == NULL) { ERR_print_errors(bio_err); goto end; } if (infile == NULL) BIO_set_fp(in, stdin, BIO_NOCLOSE); else { if (BIO_read_filename(in, infile) <= 0) { perror(infile); goto end; } } if (format == FORMAT_ASN1) x = d2i_SSL_SESSION_bio(in, NULL); else if (format == FORMAT_PEM) x = PEM_read_bio_SSL_SESSION(in, NULL, NULL, NULL); else { BIO_printf(bio_err, "bad input format specified for input crl\n"); goto end; } if (x == NULL) { BIO_printf(bio_err, "unable to load SSL_SESSION\n"); ERR_print_errors(bio_err); goto end; } end: BIO_free(in); return (x); } |
Added jni/libressl/apps/openssl/smime.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 | /* $OpenBSD: smime.c,v 1.6 2015/10/17 07:51:10 semarie Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project. */ /* ==================================================================== * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* S/MIME utility function */ #include <stdio.h> #include <string.h> #include "apps.h" #include <openssl/crypto.h> #include <openssl/err.h> #include <openssl/pem.h> #include <openssl/x509_vfy.h> #include <openssl/x509v3.h> static int save_certs(char *signerfile, STACK_OF(X509) * signers); static int smime_cb(int ok, X509_STORE_CTX * ctx); #define SMIME_OP 0x10 #define SMIME_IP 0x20 #define SMIME_SIGNERS 0x40 #define SMIME_ENCRYPT (1 | SMIME_OP) #define SMIME_DECRYPT (2 | SMIME_IP) #define SMIME_SIGN (3 | SMIME_OP | SMIME_SIGNERS) #define SMIME_VERIFY (4 | SMIME_IP) #define SMIME_PK7OUT (5 | SMIME_IP | SMIME_OP) #define SMIME_RESIGN (6 | SMIME_IP | SMIME_OP | SMIME_SIGNERS) int smime_main(int argc, char **argv) { int operation = 0; int ret = 0; char **args; const char *inmode = "r", *outmode = "w"; char *infile = NULL, *outfile = NULL; char *signerfile = NULL, *recipfile = NULL; STACK_OF(OPENSSL_STRING) * sksigners = NULL, *skkeys = NULL; char *certfile = NULL, *keyfile = NULL, *contfile = NULL; const EVP_CIPHER *cipher = NULL; PKCS7 *p7 = NULL; X509_STORE *store = NULL; X509 *cert = NULL, *recip = NULL, *signer = NULL; EVP_PKEY *key = NULL; STACK_OF(X509) * encerts = NULL, *other = NULL; BIO *in = NULL, *out = NULL, *indata = NULL; int badarg = 0; int flags = PKCS7_DETACHED; char *to = NULL, *from = NULL, *subject = NULL; char *CAfile = NULL, *CApath = NULL; char *passargin = NULL, *passin = NULL; int indef = 0; const EVP_MD *sign_md = NULL; int informat = FORMAT_SMIME, outformat = FORMAT_SMIME; int keyform = FORMAT_PEM; X509_VERIFY_PARAM *vpm = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } args = argv + 1; ret = 1; while (!badarg && *args && *args[0] == '-') { if (!strcmp(*args, "-encrypt")) operation = SMIME_ENCRYPT; else if (!strcmp(*args, "-decrypt")) operation = SMIME_DECRYPT; else if (!strcmp(*args, "-sign")) operation = SMIME_SIGN; else if (!strcmp(*args, "-resign")) operation = SMIME_RESIGN; else if (!strcmp(*args, "-verify")) operation = SMIME_VERIFY; else if (!strcmp(*args, "-pk7out")) operation = SMIME_PK7OUT; #ifndef OPENSSL_NO_DES else if (!strcmp(*args, "-des3")) cipher = EVP_des_ede3_cbc(); else if (!strcmp(*args, "-des")) cipher = EVP_des_cbc(); #endif #ifndef OPENSSL_NO_RC2 else if (!strcmp(*args, "-rc2-40")) cipher = EVP_rc2_40_cbc(); else if (!strcmp(*args, "-rc2-128")) cipher = EVP_rc2_cbc(); else if (!strcmp(*args, "-rc2-64")) cipher = EVP_rc2_64_cbc(); #endif #ifndef OPENSSL_NO_AES else if (!strcmp(*args, "-aes128")) cipher = EVP_aes_128_cbc(); else if (!strcmp(*args, "-aes192")) cipher = EVP_aes_192_cbc(); else if (!strcmp(*args, "-aes256")) cipher = EVP_aes_256_cbc(); #endif #ifndef OPENSSL_NO_CAMELLIA else if (!strcmp(*args, "-camellia128")) cipher = EVP_camellia_128_cbc(); else if (!strcmp(*args, "-camellia192")) cipher = EVP_camellia_192_cbc(); else if (!strcmp(*args, "-camellia256")) cipher = EVP_camellia_256_cbc(); #endif else if (!strcmp(*args, "-text")) flags |= PKCS7_TEXT; else if (!strcmp(*args, "-nointern")) flags |= PKCS7_NOINTERN; else if (!strcmp(*args, "-noverify")) flags |= PKCS7_NOVERIFY; else if (!strcmp(*args, "-nochain")) flags |= PKCS7_NOCHAIN; else if (!strcmp(*args, "-nocerts")) flags |= PKCS7_NOCERTS; else if (!strcmp(*args, "-noattr")) flags |= PKCS7_NOATTR; else if (!strcmp(*args, "-nodetach")) flags &= ~PKCS7_DETACHED; else if (!strcmp(*args, "-nosmimecap")) flags |= PKCS7_NOSMIMECAP; else if (!strcmp(*args, "-binary")) flags |= PKCS7_BINARY; else if (!strcmp(*args, "-nosigs")) flags |= PKCS7_NOSIGS; else if (!strcmp(*args, "-stream")) indef = 1; else if (!strcmp(*args, "-indef")) indef = 1; else if (!strcmp(*args, "-noindef")) indef = 0; else if (!strcmp(*args, "-nooldmime")) flags |= PKCS7_NOOLDMIMETYPE; else if (!strcmp(*args, "-crlfeol")) flags |= PKCS7_CRLFEOL; else if (!strcmp(*args, "-passin")) { if (!args[1]) goto argerr; passargin = *++args; } else if (!strcmp(*args, "-to")) { if (!args[1]) goto argerr; to = *++args; } else if (!strcmp(*args, "-from")) { if (!args[1]) goto argerr; from = *++args; } else if (!strcmp(*args, "-subject")) { if (!args[1]) goto argerr; subject = *++args; } else if (!strcmp(*args, "-signer")) { if (!args[1]) goto argerr; /* If previous -signer argument add signer to list */ if (signerfile) { if (!sksigners) sksigners = sk_OPENSSL_STRING_new_null(); sk_OPENSSL_STRING_push(sksigners, signerfile); if (!keyfile) keyfile = signerfile; if (!skkeys) skkeys = sk_OPENSSL_STRING_new_null(); sk_OPENSSL_STRING_push(skkeys, keyfile); keyfile = NULL; } signerfile = *++args; } else if (!strcmp(*args, "-recip")) { if (!args[1]) goto argerr; recipfile = *++args; } else if (!strcmp(*args, "-md")) { if (!args[1]) goto argerr; sign_md = EVP_get_digestbyname(*++args); if (sign_md == NULL) { BIO_printf(bio_err, "Unknown digest %s\n", *args); goto argerr; } } else if (!strcmp(*args, "-inkey")) { if (!args[1]) goto argerr; /* If previous -inkey arument add signer to list */ if (keyfile) { if (!signerfile) { BIO_puts(bio_err, "Illegal -inkey without -signer\n"); goto argerr; } if (!sksigners) sksigners = sk_OPENSSL_STRING_new_null(); sk_OPENSSL_STRING_push(sksigners, signerfile); signerfile = NULL; if (!skkeys) skkeys = sk_OPENSSL_STRING_new_null(); sk_OPENSSL_STRING_push(skkeys, keyfile); } keyfile = *++args; } else if (!strcmp(*args, "-keyform")) { if (!args[1]) goto argerr; keyform = str2fmt(*++args); } else if (!strcmp(*args, "-certfile")) { if (!args[1]) goto argerr; certfile = *++args; } else if (!strcmp(*args, "-CAfile")) { if (!args[1]) goto argerr; CAfile = *++args; } else if (!strcmp(*args, "-CApath")) { if (!args[1]) goto argerr; CApath = *++args; } else if (!strcmp(*args, "-in")) { if (!args[1]) goto argerr; infile = *++args; } else if (!strcmp(*args, "-inform")) { if (!args[1]) goto argerr; informat = str2fmt(*++args); } else if (!strcmp(*args, "-outform")) { if (!args[1]) goto argerr; outformat = str2fmt(*++args); } else if (!strcmp(*args, "-out")) { if (!args[1]) goto argerr; outfile = *++args; } else if (!strcmp(*args, "-content")) { if (!args[1]) goto argerr; contfile = *++args; } else if (args_verify(&args, NULL, &badarg, bio_err, &vpm)) continue; else if ((cipher = EVP_get_cipherbyname(*args + 1)) == NULL) badarg = 1; args++; } if (!(operation & SMIME_SIGNERS) && (skkeys || sksigners)) { BIO_puts(bio_err, "Multiple signers or keys not allowed\n"); goto argerr; } if (operation & SMIME_SIGNERS) { /* Check to see if any final signer needs to be appended */ if (keyfile && !signerfile) { BIO_puts(bio_err, "Illegal -inkey without -signer\n"); goto argerr; } if (signerfile) { if (!sksigners) sksigners = sk_OPENSSL_STRING_new_null(); sk_OPENSSL_STRING_push(sksigners, signerfile); if (!skkeys) skkeys = sk_OPENSSL_STRING_new_null(); if (!keyfile) keyfile = signerfile; sk_OPENSSL_STRING_push(skkeys, keyfile); } if (!sksigners) { BIO_printf(bio_err, "No signer certificate specified\n"); badarg = 1; } signerfile = NULL; keyfile = NULL; } else if (operation == SMIME_DECRYPT) { if (!recipfile && !keyfile) { BIO_printf(bio_err, "No recipient certificate or key specified\n"); badarg = 1; } } else if (operation == SMIME_ENCRYPT) { if (!*args) { BIO_printf(bio_err, "No recipient(s) certificate(s) specified\n"); badarg = 1; } } else if (!operation) badarg = 1; if (badarg) { argerr: BIO_printf(bio_err, "Usage smime [options] cert.pem ...\n"); BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err, "-encrypt encrypt message\n"); BIO_printf(bio_err, "-decrypt decrypt encrypted message\n"); BIO_printf(bio_err, "-sign sign message\n"); BIO_printf(bio_err, "-verify verify signed message\n"); BIO_printf(bio_err, "-pk7out output PKCS#7 structure\n"); #ifndef OPENSSL_NO_DES BIO_printf(bio_err, "-des3 encrypt with triple DES\n"); BIO_printf(bio_err, "-des encrypt with DES\n"); #endif #ifndef OPENSSL_NO_RC2 BIO_printf(bio_err, "-rc2-40 encrypt with RC2-40 (default)\n"); BIO_printf(bio_err, "-rc2-64 encrypt with RC2-64\n"); BIO_printf(bio_err, "-rc2-128 encrypt with RC2-128\n"); #endif #ifndef OPENSSL_NO_AES BIO_printf(bio_err, "-aes128, -aes192, -aes256\n"); BIO_printf(bio_err, " encrypt PEM output with cbc aes\n"); #endif #ifndef OPENSSL_NO_CAMELLIA BIO_printf(bio_err, "-camellia128, -camellia192, -camellia256\n"); BIO_printf(bio_err, " encrypt PEM output with cbc camellia\n"); #endif BIO_printf(bio_err, "-nointern don't search certificates in message for signer\n"); BIO_printf(bio_err, "-nosigs don't verify message signature\n"); BIO_printf(bio_err, "-noverify don't verify signers certificate\n"); BIO_printf(bio_err, "-nocerts don't include signers certificate when signing\n"); BIO_printf(bio_err, "-nodetach use opaque signing\n"); BIO_printf(bio_err, "-noattr don't include any signed attributes\n"); BIO_printf(bio_err, "-binary don't translate message to text\n"); BIO_printf(bio_err, "-certfile file other certificates file\n"); BIO_printf(bio_err, "-signer file signer certificate file\n"); BIO_printf(bio_err, "-recip file recipient certificate file for decryption\n"); BIO_printf(bio_err, "-in file input file\n"); BIO_printf(bio_err, "-inform arg input format SMIME (default), PEM or DER\n"); BIO_printf(bio_err, "-inkey file input private key (if not signer or recipient)\n"); BIO_printf(bio_err, "-keyform arg input private key format (PEM)\n"); BIO_printf(bio_err, "-out file output file\n"); BIO_printf(bio_err, "-outform arg output format SMIME (default), PEM or DER\n"); BIO_printf(bio_err, "-content file supply or override content for detached signature\n"); BIO_printf(bio_err, "-to addr to address\n"); BIO_printf(bio_err, "-from ad from address\n"); BIO_printf(bio_err, "-subject s subject\n"); BIO_printf(bio_err, "-text include or delete text MIME headers\n"); BIO_printf(bio_err, "-CApath dir trusted certificates directory\n"); BIO_printf(bio_err, "-CAfile file trusted certificates file\n"); BIO_printf(bio_err, "-crl_check check revocation status of signer's certificate using CRLs\n"); BIO_printf(bio_err, "-crl_check_all check revocation status of signer's certificate chain using CRLs\n"); BIO_printf(bio_err, "-passin arg input file pass phrase source\n"); BIO_printf(bio_err, "cert.pem recipient certificate(s) for encryption\n"); goto end; } if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto end; } ret = 2; if (!(operation & SMIME_SIGNERS)) flags &= ~PKCS7_DETACHED; if (operation & SMIME_OP) { if (outformat == FORMAT_ASN1) outmode = "wb"; } else { if (flags & PKCS7_BINARY) outmode = "wb"; } if (operation & SMIME_IP) { if (informat == FORMAT_ASN1) inmode = "rb"; } else { if (flags & PKCS7_BINARY) inmode = "rb"; } if (operation == SMIME_ENCRYPT) { if (!cipher) { #ifndef OPENSSL_NO_RC2 cipher = EVP_rc2_40_cbc(); #else BIO_printf(bio_err, "No cipher selected\n"); goto end; #endif } encerts = sk_X509_new_null(); while (*args) { if (!(cert = load_cert(bio_err, *args, FORMAT_PEM, NULL, "recipient certificate file"))) { goto end; } sk_X509_push(encerts, cert); cert = NULL; args++; } } if (certfile) { if (!(other = load_certs(bio_err, certfile, FORMAT_PEM, NULL, "certificate file"))) { ERR_print_errors(bio_err); goto end; } } if (recipfile && (operation == SMIME_DECRYPT)) { if (!(recip = load_cert(bio_err, recipfile, FORMAT_PEM, NULL, "recipient certificate file"))) { ERR_print_errors(bio_err); goto end; } } if (operation == SMIME_DECRYPT) { if (!keyfile) keyfile = recipfile; } else if (operation == SMIME_SIGN) { if (!keyfile) keyfile = signerfile; } else keyfile = NULL; if (keyfile) { key = load_key(bio_err, keyfile, keyform, 0, passin, "signing key file"); if (!key) goto end; } if (infile) { if (!(in = BIO_new_file(infile, inmode))) { BIO_printf(bio_err, "Can't open input file %s\n", infile); goto end; } } else in = BIO_new_fp(stdin, BIO_NOCLOSE); if (operation & SMIME_IP) { if (informat == FORMAT_SMIME) p7 = SMIME_read_PKCS7(in, &indata); else if (informat == FORMAT_PEM) p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL); else if (informat == FORMAT_ASN1) p7 = d2i_PKCS7_bio(in, NULL); else { BIO_printf(bio_err, "Bad input format for PKCS#7 file\n"); goto end; } if (!p7) { BIO_printf(bio_err, "Error reading S/MIME message\n"); goto end; } if (contfile) { BIO_free(indata); if (!(indata = BIO_new_file(contfile, "rb"))) { BIO_printf(bio_err, "Can't read content file %s\n", contfile); goto end; } } } if (outfile) { if (!(out = BIO_new_file(outfile, outmode))) { BIO_printf(bio_err, "Can't open output file %s\n", outfile); goto end; } } else { out = BIO_new_fp(stdout, BIO_NOCLOSE); } if (operation == SMIME_VERIFY) { if (!(store = setup_verify(bio_err, CAfile, CApath))) goto end; X509_STORE_set_verify_cb(store, smime_cb); if (vpm) X509_STORE_set1_param(store, vpm); } ret = 3; if (operation == SMIME_ENCRYPT) { if (indef) flags |= PKCS7_STREAM; p7 = PKCS7_encrypt(encerts, in, cipher, flags); } else if (operation & SMIME_SIGNERS) { int i; /* * If detached data content we only enable streaming if * S/MIME output format. */ if (operation == SMIME_SIGN) { if (flags & PKCS7_DETACHED) { if (outformat == FORMAT_SMIME) flags |= PKCS7_STREAM; } else if (indef) flags |= PKCS7_STREAM; flags |= PKCS7_PARTIAL; p7 = PKCS7_sign(NULL, NULL, other, in, flags); if (!p7) goto end; } else flags |= PKCS7_REUSE_DIGEST; for (i = 0; i < sk_OPENSSL_STRING_num(sksigners); i++) { signerfile = sk_OPENSSL_STRING_value(sksigners, i); keyfile = sk_OPENSSL_STRING_value(skkeys, i); signer = load_cert(bio_err, signerfile, FORMAT_PEM, NULL, "signer certificate"); if (!signer) goto end; key = load_key(bio_err, keyfile, keyform, 0, passin, "signing key file"); if (!key) goto end; if (!PKCS7_sign_add_signer(p7, signer, key, sign_md, flags)) goto end; X509_free(signer); signer = NULL; EVP_PKEY_free(key); key = NULL; } /* If not streaming or resigning finalize structure */ if ((operation == SMIME_SIGN) && !(flags & PKCS7_STREAM)) { if (!PKCS7_final(p7, in, flags)) goto end; } } if (!p7) { BIO_printf(bio_err, "Error creating PKCS#7 structure\n"); goto end; } ret = 4; if (operation == SMIME_DECRYPT) { if (!PKCS7_decrypt(p7, key, recip, out, flags)) { BIO_printf(bio_err, "Error decrypting PKCS#7 structure\n"); goto end; } } else if (operation == SMIME_VERIFY) { STACK_OF(X509) * signers; if (PKCS7_verify(p7, other, store, indata, out, flags)) BIO_printf(bio_err, "Verification successful\n"); else { BIO_printf(bio_err, "Verification failure\n"); goto end; } signers = PKCS7_get0_signers(p7, other, flags); if (!save_certs(signerfile, signers)) { BIO_printf(bio_err, "Error writing signers to %s\n", signerfile); ret = 5; goto end; } sk_X509_free(signers); } else if (operation == SMIME_PK7OUT) PEM_write_bio_PKCS7(out, p7); else { if (to) BIO_printf(out, "To: %s\n", to); if (from) BIO_printf(out, "From: %s\n", from); if (subject) BIO_printf(out, "Subject: %s\n", subject); if (outformat == FORMAT_SMIME) { if (operation == SMIME_RESIGN) SMIME_write_PKCS7(out, p7, indata, flags); else SMIME_write_PKCS7(out, p7, in, flags); } else if (outformat == FORMAT_PEM) PEM_write_bio_PKCS7_stream(out, p7, in, flags); else if (outformat == FORMAT_ASN1) i2d_PKCS7_bio_stream(out, p7, in, flags); else { BIO_printf(bio_err, "Bad output format for PKCS#7 file\n"); goto end; } } ret = 0; end: if (ret) ERR_print_errors(bio_err); sk_X509_pop_free(encerts, X509_free); sk_X509_pop_free(other, X509_free); if (vpm) X509_VERIFY_PARAM_free(vpm); if (sksigners) sk_OPENSSL_STRING_free(sksigners); if (skkeys) sk_OPENSSL_STRING_free(skkeys); X509_STORE_free(store); X509_free(cert); X509_free(recip); X509_free(signer); EVP_PKEY_free(key); PKCS7_free(p7); BIO_free(in); BIO_free(indata); BIO_free_all(out); free(passin); return (ret); } static int save_certs(char *signerfile, STACK_OF(X509) * signers) { int i; BIO *tmp; if (!signerfile) return 1; tmp = BIO_new_file(signerfile, "w"); if (!tmp) return 0; for (i = 0; i < sk_X509_num(signers); i++) PEM_write_bio_X509(tmp, sk_X509_value(signers, i)); BIO_free(tmp); return 1; } /* Minimal callback just to output policy info (if any) */ static int smime_cb(int ok, X509_STORE_CTX * ctx) { int error; error = X509_STORE_CTX_get_error(ctx); if ((error != X509_V_ERR_NO_EXPLICIT_POLICY) && ((error != X509_V_OK) || (ok != 2))) return ok; policies_print(NULL, ctx); return ok; } |
Added jni/libressl/apps/openssl/speed.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 | /* $OpenBSD: speed.c,v 1.17 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * * Portions of the attached software ("Contribution") are developed by * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. * * The Contribution is licensed pursuant to the OpenSSL open source * license provided above. * * The ECDH and ECDSA speed test software is originally written by * Sumit Gupta of Sun Microsystems Laboratories. * */ /* most of this code has been pilfered from my libdes speed.c program */ #ifndef OPENSSL_NO_SPEED #define SECONDS 3 #define RSA_SECONDS 10 #define DSA_SECONDS 10 #define ECDSA_SECONDS 10 #define ECDH_SECONDS 10 /* 11-Sep-92 Andrew Daviel Support for Silicon Graphics IRIX added */ /* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */ #include <math.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> #include <unistd.h> #include "apps.h" #include <openssl/bn.h> #include <openssl/crypto.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/modes.h> #include <openssl/objects.h> #include <openssl/x509.h> #ifndef OPENSSL_NO_AES #include <openssl/aes.h> #endif #ifndef OPENSSL_NO_BF #include <openssl/blowfish.h> #endif #ifndef OPENSSL_NO_CAST #include <openssl/cast.h> #endif #ifndef OPENSSL_NO_CAMELLIA #include <openssl/camellia.h> #endif #ifndef OPENSSL_NO_DES #include <openssl/des.h> #endif #include <openssl/dsa.h> #include <openssl/ecdh.h> #include <openssl/ecdsa.h> #ifndef OPENSSL_NO_HMAC #include <openssl/hmac.h> #endif #ifndef OPENSSL_NO_IDEA #include <openssl/idea.h> #endif #ifndef OPENSSL_NO_MD4 #include <openssl/md4.h> #endif #ifndef OPENSSL_NO_MD5 #include <openssl/md5.h> #endif #ifndef OPENSSL_NO_RC2 #include <openssl/rc2.h> #endif #ifndef OPENSSL_NO_RC4 #include <openssl/rc4.h> #endif #include <openssl/rsa.h> #ifndef OPENSSL_NO_RIPEMD #include <openssl/ripemd.h> #endif #ifndef OPENSSL_NO_SHA #include <openssl/sha.h> #endif #ifndef OPENSSL_NO_WHIRLPOOL #include <openssl/whrlpool.h> #endif #include "./testdsa.h" #include "./testrsa.h" #define BUFSIZE (1024*8+64) int run = 0; static int mr = 0; static int usertime = 1; static double Time_F(int s); static void print_message(const char *s, long num, int length); static void pkey_print_message(const char *str, const char *str2, long num, int bits, int sec); static void print_result(int alg, int run_no, int count, double time_used); static int do_multi(int multi); #define ALGOR_NUM 32 #define SIZE_NUM 5 #define RSA_NUM 4 #define DSA_NUM 3 #define EC_NUM 16 #define MAX_ECDH_SIZE 256 static const char *names[ALGOR_NUM] = { "md2", "md4", "md5", "hmac(md5)", "sha1", "rmd160", "rc4", "des cbc", "des ede3", "idea cbc", "seed cbc", "rc2 cbc", "rc5-32/12 cbc", "blowfish cbc", "cast cbc", "aes-128 cbc", "aes-192 cbc", "aes-256 cbc", "camellia-128 cbc", "camellia-192 cbc", "camellia-256 cbc", "evp", "sha256", "sha512", "whirlpool", "aes-128 ige", "aes-192 ige", "aes-256 ige", "ghash", "aes-128 gcm", "aes-256 gcm", "chacha20 poly1305", }; static double results[ALGOR_NUM][SIZE_NUM]; static int lengths[SIZE_NUM] = {16, 64, 256, 1024, 8 * 1024}; static double rsa_results[RSA_NUM][2]; static double dsa_results[DSA_NUM][2]; static double ecdsa_results[EC_NUM][2]; static double ecdh_results[EC_NUM][1]; static void sig_done(int sig); static void sig_done(int sig) { signal(SIGALRM, sig_done); run = 0; } #define START 0 #define STOP 1 static double Time_F(int s) { return app_tminterval(s, usertime); } static const int KDF1_SHA1_len = 20; static void * KDF1_SHA1(const void *in, size_t inlen, void *out, size_t * outlen) { #ifndef OPENSSL_NO_SHA if (*outlen < SHA_DIGEST_LENGTH) return NULL; else *outlen = SHA_DIGEST_LENGTH; return SHA1(in, inlen, out); #else return NULL; #endif /* OPENSSL_NO_SHA */ } int speed_main(int argc, char **argv) { unsigned char *buf = NULL, *buf2 = NULL; int mret = 1; long count = 0, save_count = 0; int i, j, k; long rsa_count; unsigned rsa_num; unsigned char md[EVP_MAX_MD_SIZE]; #ifndef OPENSSL_NO_MD4 unsigned char md4[MD4_DIGEST_LENGTH]; #endif #ifndef OPENSSL_NO_MD5 unsigned char md5[MD5_DIGEST_LENGTH]; unsigned char hmac[MD5_DIGEST_LENGTH]; #endif #ifndef OPENSSL_NO_SHA unsigned char sha[SHA_DIGEST_LENGTH]; #ifndef OPENSSL_NO_SHA256 unsigned char sha256[SHA256_DIGEST_LENGTH]; #endif #ifndef OPENSSL_NO_SHA512 unsigned char sha512[SHA512_DIGEST_LENGTH]; #endif #endif #ifndef OPENSSL_NO_WHIRLPOOL unsigned char whirlpool[WHIRLPOOL_DIGEST_LENGTH]; #endif #ifndef OPENSSL_NO_RIPEMD unsigned char rmd160[RIPEMD160_DIGEST_LENGTH]; #endif #ifndef OPENSSL_NO_RC4 RC4_KEY rc4_ks; #endif #ifndef OPENSSL_NO_RC2 RC2_KEY rc2_ks; #endif #ifndef OPENSSL_NO_IDEA IDEA_KEY_SCHEDULE idea_ks; #endif #ifndef OPENSSL_NO_BF BF_KEY bf_ks; #endif #ifndef OPENSSL_NO_CAST CAST_KEY cast_ks; #endif static const unsigned char key16[16] = {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12}; #ifndef OPENSSL_NO_AES static const unsigned char key24[24] = {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34}; static const unsigned char key32[32] = {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, 0x56}; #endif #ifndef OPENSSL_NO_CAMELLIA static const unsigned char ckey24[24] = {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34}; static const unsigned char ckey32[32] = {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, 0x56}; #endif #ifndef OPENSSL_NO_AES #define MAX_BLOCK_SIZE 128 #else #define MAX_BLOCK_SIZE 64 #endif unsigned char DES_iv[8]; unsigned char iv[2 * MAX_BLOCK_SIZE / 8]; #ifndef OPENSSL_NO_DES static DES_cblock key = {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0}; static DES_cblock key2 = {0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12}; static DES_cblock key3 = {0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34}; DES_key_schedule sch; DES_key_schedule sch2; DES_key_schedule sch3; #endif #ifndef OPENSSL_NO_AES AES_KEY aes_ks1, aes_ks2, aes_ks3; #endif #ifndef OPENSSL_NO_CAMELLIA CAMELLIA_KEY camellia_ks1, camellia_ks2, camellia_ks3; #endif #define D_MD2 0 #define D_MD4 1 #define D_MD5 2 #define D_HMAC 3 #define D_SHA1 4 #define D_RMD160 5 #define D_RC4 6 #define D_CBC_DES 7 #define D_EDE3_DES 8 #define D_CBC_IDEA 9 #define D_CBC_SEED 10 #define D_CBC_RC2 11 #define D_CBC_RC5 12 #define D_CBC_BF 13 #define D_CBC_CAST 14 #define D_CBC_128_AES 15 #define D_CBC_192_AES 16 #define D_CBC_256_AES 17 #define D_CBC_128_CML 18 #define D_CBC_192_CML 19 #define D_CBC_256_CML 20 #define D_EVP 21 #define D_SHA256 22 #define D_SHA512 23 #define D_WHIRLPOOL 24 #define D_IGE_128_AES 25 #define D_IGE_192_AES 26 #define D_IGE_256_AES 27 #define D_GHASH 28 #define D_AES_128_GCM 29 #define D_AES_256_GCM 30 #define D_CHACHA20_POLY1305 31 double d = 0.0; long c[ALGOR_NUM][SIZE_NUM]; #define R_DSA_512 0 #define R_DSA_1024 1 #define R_DSA_2048 2 #define R_RSA_512 0 #define R_RSA_1024 1 #define R_RSA_2048 2 #define R_RSA_4096 3 #define R_EC_P160 0 #define R_EC_P192 1 #define R_EC_P224 2 #define R_EC_P256 3 #define R_EC_P384 4 #define R_EC_P521 5 #define R_EC_K163 6 #define R_EC_K233 7 #define R_EC_K283 8 #define R_EC_K409 9 #define R_EC_K571 10 #define R_EC_B163 11 #define R_EC_B233 12 #define R_EC_B283 13 #define R_EC_B409 14 #define R_EC_B571 15 RSA *rsa_key[RSA_NUM]; long rsa_c[RSA_NUM][2]; static unsigned int rsa_bits[RSA_NUM] = {512, 1024, 2048, 4096}; static unsigned char *rsa_data[RSA_NUM] = {test512, test1024, test2048, test4096}; static int rsa_data_length[RSA_NUM] = { sizeof(test512), sizeof(test1024), sizeof(test2048), sizeof(test4096)}; DSA *dsa_key[DSA_NUM]; long dsa_c[DSA_NUM][2]; static unsigned int dsa_bits[DSA_NUM] = {512, 1024, 2048}; #ifndef OPENSSL_NO_EC /* * We only test over the following curves as they are representative, * To add tests over more curves, simply add the curve NID and curve * name to the following arrays and increase the EC_NUM value * accordingly. */ static unsigned int test_curves[EC_NUM] = { /* Prime Curves */ NID_secp160r1, NID_X9_62_prime192v1, NID_secp224r1, NID_X9_62_prime256v1, NID_secp384r1, NID_secp521r1, /* Binary Curves */ NID_sect163k1, NID_sect233k1, NID_sect283k1, NID_sect409k1, NID_sect571k1, NID_sect163r2, NID_sect233r1, NID_sect283r1, NID_sect409r1, NID_sect571r1 }; static const char *test_curves_names[EC_NUM] = { /* Prime Curves */ "secp160r1", "nistp192", "nistp224", "nistp256", "nistp384", "nistp521", /* Binary Curves */ "nistk163", "nistk233", "nistk283", "nistk409", "nistk571", "nistb163", "nistb233", "nistb283", "nistb409", "nistb571" }; static int test_curves_bits[EC_NUM] = { 160, 192, 224, 256, 384, 521, 163, 233, 283, 409, 571, 163, 233, 283, 409, 571 }; #endif unsigned char ecdsasig[256]; unsigned int ecdsasiglen; EC_KEY *ecdsa[EC_NUM]; long ecdsa_c[EC_NUM][2]; EC_KEY *ecdh_a[EC_NUM], *ecdh_b[EC_NUM]; unsigned char secret_a[MAX_ECDH_SIZE], secret_b[MAX_ECDH_SIZE]; int secret_size_a, secret_size_b; int ecdh_checks = 0; int secret_idx = 0; long ecdh_c[EC_NUM][2]; int rsa_doit[RSA_NUM]; int dsa_doit[DSA_NUM]; int ecdsa_doit[EC_NUM]; int ecdh_doit[EC_NUM]; int doit[ALGOR_NUM]; int pr_header = 0; const EVP_CIPHER *evp_cipher = NULL; const EVP_MD *evp_md = NULL; int decrypt = 0; int multi = 0; const char *errstr = NULL; if (single_execution) { if (pledge("stdio proc", NULL) == -1) { perror("pledge"); exit(1); } } usertime = -1; memset(results, 0, sizeof(results)); memset(dsa_key, 0, sizeof(dsa_key)); for (i = 0; i < EC_NUM; i++) ecdsa[i] = NULL; for (i = 0; i < EC_NUM; i++) { ecdh_a[i] = NULL; ecdh_b[i] = NULL; } memset(rsa_key, 0, sizeof(rsa_key)); for (i = 0; i < RSA_NUM; i++) rsa_key[i] = NULL; if ((buf = malloc(BUFSIZE)) == NULL) { BIO_printf(bio_err, "out of memory\n"); goto end; } if ((buf2 = malloc(BUFSIZE)) == NULL) { BIO_printf(bio_err, "out of memory\n"); goto end; } memset(c, 0, sizeof(c)); memset(DES_iv, 0, sizeof(DES_iv)); memset(iv, 0, sizeof(iv)); for (i = 0; i < ALGOR_NUM; i++) doit[i] = 0; for (i = 0; i < RSA_NUM; i++) rsa_doit[i] = 0; for (i = 0; i < DSA_NUM; i++) dsa_doit[i] = 0; for (i = 0; i < EC_NUM; i++) ecdsa_doit[i] = 0; for (i = 0; i < EC_NUM; i++) ecdh_doit[i] = 0; j = 0; argc--; argv++; while (argc) { if ((argc > 0) && (strcmp(*argv, "-elapsed") == 0)) { usertime = 0; j--; /* Otherwise, -elapsed gets confused with an * algorithm. */ } else if ((argc > 0) && (strcmp(*argv, "-evp") == 0)) { argc--; argv++; if (argc == 0) { BIO_printf(bio_err, "no EVP given\n"); goto end; } evp_cipher = EVP_get_cipherbyname(*argv); if (!evp_cipher) { evp_md = EVP_get_digestbyname(*argv); } if (!evp_cipher && !evp_md) { BIO_printf(bio_err, "%s is an unknown cipher or digest\n", *argv); goto end; } doit[D_EVP] = 1; } else if (argc > 0 && !strcmp(*argv, "-decrypt")) { decrypt = 1; j--; /* Otherwise, -elapsed gets confused with an * algorithm. */ } else if ((argc > 0) && (strcmp(*argv, "-multi") == 0)) { argc--; argv++; if (argc == 0) { BIO_printf(bio_err, "no multi count given\n"); goto end; } multi = strtonum(argv[0], 1, INT_MAX, &errstr); if (errstr) { BIO_printf(bio_err, "bad multi count: %s", errstr); goto end; } j--; /* Otherwise, -mr gets confused with an * algorithm. */ } else if (argc > 0 && !strcmp(*argv, "-mr")) { mr = 1; j--; /* Otherwise, -mr gets confused with an * algorithm. */ } else #ifndef OPENSSL_NO_MD4 if (strcmp(*argv, "md4") == 0) doit[D_MD4] = 1; else #endif #ifndef OPENSSL_NO_MD5 if (strcmp(*argv, "md5") == 0) doit[D_MD5] = 1; else #endif #ifndef OPENSSL_NO_MD5 if (strcmp(*argv, "hmac") == 0) doit[D_HMAC] = 1; else #endif #ifndef OPENSSL_NO_SHA if (strcmp(*argv, "sha1") == 0) doit[D_SHA1] = 1; else if (strcmp(*argv, "sha") == 0) doit[D_SHA1] = 1, doit[D_SHA256] = 1, doit[D_SHA512] = 1; else #ifndef OPENSSL_NO_SHA256 if (strcmp(*argv, "sha256") == 0) doit[D_SHA256] = 1; else #endif #ifndef OPENSSL_NO_SHA512 if (strcmp(*argv, "sha512") == 0) doit[D_SHA512] = 1; else #endif #endif #ifndef OPENSSL_NO_WHIRLPOOL if (strcmp(*argv, "whirlpool") == 0) doit[D_WHIRLPOOL] = 1; else #endif #ifndef OPENSSL_NO_RIPEMD if (strcmp(*argv, "ripemd") == 0) doit[D_RMD160] = 1; else if (strcmp(*argv, "rmd160") == 0) doit[D_RMD160] = 1; else if (strcmp(*argv, "ripemd160") == 0) doit[D_RMD160] = 1; else #endif #ifndef OPENSSL_NO_RC4 if (strcmp(*argv, "rc4") == 0) doit[D_RC4] = 1; else #endif #ifndef OPENSSL_NO_DES if (strcmp(*argv, "des-cbc") == 0) doit[D_CBC_DES] = 1; else if (strcmp(*argv, "des-ede3") == 0) doit[D_EDE3_DES] = 1; else #endif #ifndef OPENSSL_NO_AES if (strcmp(*argv, "aes-128-cbc") == 0) doit[D_CBC_128_AES] = 1; else if (strcmp(*argv, "aes-192-cbc") == 0) doit[D_CBC_192_AES] = 1; else if (strcmp(*argv, "aes-256-cbc") == 0) doit[D_CBC_256_AES] = 1; else if (strcmp(*argv, "aes-128-ige") == 0) doit[D_IGE_128_AES] = 1; else if (strcmp(*argv, "aes-192-ige") == 0) doit[D_IGE_192_AES] = 1; else if (strcmp(*argv, "aes-256-ige") == 0) doit[D_IGE_256_AES] = 1; else #endif #ifndef OPENSSL_NO_CAMELLIA if (strcmp(*argv, "camellia-128-cbc") == 0) doit[D_CBC_128_CML] = 1; else if (strcmp(*argv, "camellia-192-cbc") == 0) doit[D_CBC_192_CML] = 1; else if (strcmp(*argv, "camellia-256-cbc") == 0) doit[D_CBC_256_CML] = 1; else #endif #ifndef RSA_NULL if (strcmp(*argv, "openssl") == 0) { RSA_set_default_method(RSA_PKCS1_SSLeay()); j--; } else #endif if (strcmp(*argv, "dsa512") == 0) dsa_doit[R_DSA_512] = 2; else if (strcmp(*argv, "dsa1024") == 0) dsa_doit[R_DSA_1024] = 2; else if (strcmp(*argv, "dsa2048") == 0) dsa_doit[R_DSA_2048] = 2; else if (strcmp(*argv, "rsa512") == 0) rsa_doit[R_RSA_512] = 2; else if (strcmp(*argv, "rsa1024") == 0) rsa_doit[R_RSA_1024] = 2; else if (strcmp(*argv, "rsa2048") == 0) rsa_doit[R_RSA_2048] = 2; else if (strcmp(*argv, "rsa4096") == 0) rsa_doit[R_RSA_4096] = 2; else #ifndef OPENSSL_NO_RC2 if (strcmp(*argv, "rc2-cbc") == 0) doit[D_CBC_RC2] = 1; else if (strcmp(*argv, "rc2") == 0) doit[D_CBC_RC2] = 1; else #endif #ifndef OPENSSL_NO_IDEA if (strcmp(*argv, "idea-cbc") == 0) doit[D_CBC_IDEA] = 1; else if (strcmp(*argv, "idea") == 0) doit[D_CBC_IDEA] = 1; else #endif #ifndef OPENSSL_NO_BF if (strcmp(*argv, "bf-cbc") == 0) doit[D_CBC_BF] = 1; else if (strcmp(*argv, "blowfish") == 0) doit[D_CBC_BF] = 1; else if (strcmp(*argv, "bf") == 0) doit[D_CBC_BF] = 1; else #endif #ifndef OPENSSL_NO_CAST if (strcmp(*argv, "cast-cbc") == 0) doit[D_CBC_CAST] = 1; else if (strcmp(*argv, "cast") == 0) doit[D_CBC_CAST] = 1; else if (strcmp(*argv, "cast5") == 0) doit[D_CBC_CAST] = 1; else #endif #ifndef OPENSSL_NO_DES if (strcmp(*argv, "des") == 0) { doit[D_CBC_DES] = 1; doit[D_EDE3_DES] = 1; } else #endif #ifndef OPENSSL_NO_AES if (strcmp(*argv, "aes") == 0) { doit[D_CBC_128_AES] = 1; doit[D_CBC_192_AES] = 1; doit[D_CBC_256_AES] = 1; } else if (strcmp(*argv, "ghash") == 0) doit[D_GHASH] = 1; else if (strcmp(*argv,"aes-128-gcm") == 0) doit[D_AES_128_GCM]=1; else if (strcmp(*argv,"aes-256-gcm") == 0) doit[D_AES_256_GCM]=1; else #endif #ifndef OPENSSL_NO_CAMELLIA if (strcmp(*argv, "camellia") == 0) { doit[D_CBC_128_CML] = 1; doit[D_CBC_192_CML] = 1; doit[D_CBC_256_CML] = 1; } else #endif #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) if (strcmp(*argv,"chacha20-poly1305") == 0) doit[D_CHACHA20_POLY1305]=1; else #endif if (strcmp(*argv, "rsa") == 0) { rsa_doit[R_RSA_512] = 1; rsa_doit[R_RSA_1024] = 1; rsa_doit[R_RSA_2048] = 1; rsa_doit[R_RSA_4096] = 1; } else if (strcmp(*argv, "dsa") == 0) { dsa_doit[R_DSA_512] = 1; dsa_doit[R_DSA_1024] = 1; dsa_doit[R_DSA_2048] = 1; } else if (strcmp(*argv, "ecdsap160") == 0) ecdsa_doit[R_EC_P160] = 2; else if (strcmp(*argv, "ecdsap192") == 0) ecdsa_doit[R_EC_P192] = 2; else if (strcmp(*argv, "ecdsap224") == 0) ecdsa_doit[R_EC_P224] = 2; else if (strcmp(*argv, "ecdsap256") == 0) ecdsa_doit[R_EC_P256] = 2; else if (strcmp(*argv, "ecdsap384") == 0) ecdsa_doit[R_EC_P384] = 2; else if (strcmp(*argv, "ecdsap521") == 0) ecdsa_doit[R_EC_P521] = 2; else if (strcmp(*argv, "ecdsak163") == 0) ecdsa_doit[R_EC_K163] = 2; else if (strcmp(*argv, "ecdsak233") == 0) ecdsa_doit[R_EC_K233] = 2; else if (strcmp(*argv, "ecdsak283") == 0) ecdsa_doit[R_EC_K283] = 2; else if (strcmp(*argv, "ecdsak409") == 0) ecdsa_doit[R_EC_K409] = 2; else if (strcmp(*argv, "ecdsak571") == 0) ecdsa_doit[R_EC_K571] = 2; else if (strcmp(*argv, "ecdsab163") == 0) ecdsa_doit[R_EC_B163] = 2; else if (strcmp(*argv, "ecdsab233") == 0) ecdsa_doit[R_EC_B233] = 2; else if (strcmp(*argv, "ecdsab283") == 0) ecdsa_doit[R_EC_B283] = 2; else if (strcmp(*argv, "ecdsab409") == 0) ecdsa_doit[R_EC_B409] = 2; else if (strcmp(*argv, "ecdsab571") == 0) ecdsa_doit[R_EC_B571] = 2; else if (strcmp(*argv, "ecdsa") == 0) { for (i = 0; i < EC_NUM; i++) ecdsa_doit[i] = 1; } else if (strcmp(*argv, "ecdhp160") == 0) ecdh_doit[R_EC_P160] = 2; else if (strcmp(*argv, "ecdhp192") == 0) ecdh_doit[R_EC_P192] = 2; else if (strcmp(*argv, "ecdhp224") == 0) ecdh_doit[R_EC_P224] = 2; else if (strcmp(*argv, "ecdhp256") == 0) ecdh_doit[R_EC_P256] = 2; else if (strcmp(*argv, "ecdhp384") == 0) ecdh_doit[R_EC_P384] = 2; else if (strcmp(*argv, "ecdhp521") == 0) ecdh_doit[R_EC_P521] = 2; else if (strcmp(*argv, "ecdhk163") == 0) ecdh_doit[R_EC_K163] = 2; else if (strcmp(*argv, "ecdhk233") == 0) ecdh_doit[R_EC_K233] = 2; else if (strcmp(*argv, "ecdhk283") == 0) ecdh_doit[R_EC_K283] = 2; else if (strcmp(*argv, "ecdhk409") == 0) ecdh_doit[R_EC_K409] = 2; else if (strcmp(*argv, "ecdhk571") == 0) ecdh_doit[R_EC_K571] = 2; else if (strcmp(*argv, "ecdhb163") == 0) ecdh_doit[R_EC_B163] = 2; else if (strcmp(*argv, "ecdhb233") == 0) ecdh_doit[R_EC_B233] = 2; else if (strcmp(*argv, "ecdhb283") == 0) ecdh_doit[R_EC_B283] = 2; else if (strcmp(*argv, "ecdhb409") == 0) ecdh_doit[R_EC_B409] = 2; else if (strcmp(*argv, "ecdhb571") == 0) ecdh_doit[R_EC_B571] = 2; else if (strcmp(*argv, "ecdh") == 0) { for (i = 0; i < EC_NUM; i++) ecdh_doit[i] = 1; } else { BIO_printf(bio_err, "Error: bad option or value\n"); BIO_printf(bio_err, "\n"); BIO_printf(bio_err, "Available values:\n"); #ifndef OPENSSL_NO_MD4 BIO_printf(bio_err, "md4 "); #endif #ifndef OPENSSL_NO_MD5 BIO_printf(bio_err, "md5 "); #ifndef OPENSSL_NO_HMAC BIO_printf(bio_err, "hmac "); #endif #endif #ifndef OPENSSL_NO_SHA1 BIO_printf(bio_err, "sha1 "); #endif #ifndef OPENSSL_NO_SHA256 BIO_printf(bio_err, "sha256 "); #endif #ifndef OPENSSL_NO_SHA512 BIO_printf(bio_err, "sha512 "); #endif #ifndef OPENSSL_NO_WHIRLPOOL BIO_printf(bio_err, "whirlpool"); #endif #ifndef OPENSSL_NO_RIPEMD160 BIO_printf(bio_err, "rmd160"); #endif #if !defined(OPENSSL_NO_MD2) || \ !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \ !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160) || \ !defined(OPENSSL_NO_WHIRLPOOL) BIO_printf(bio_err, "\n"); #endif #ifndef OPENSSL_NO_IDEA BIO_printf(bio_err, "idea-cbc "); #endif #ifndef OPENSSL_NO_RC2 BIO_printf(bio_err, "rc2-cbc "); #endif #ifndef OPENSSL_NO_BF BIO_printf(bio_err, "bf-cbc "); #endif #ifndef OPENSSL_NO_DES BIO_printf(bio_err, "des-cbc des-ede3\n"); #endif #ifndef OPENSSL_NO_AES BIO_printf(bio_err, "aes-128-cbc aes-192-cbc aes-256-cbc "); BIO_printf(bio_err, "aes-128-ige aes-192-ige aes-256-ige\n"); BIO_printf(bio_err, "aes-128-gcm aes-256-gcm "); #endif #ifndef OPENSSL_NO_CAMELLIA BIO_printf(bio_err, "\n"); BIO_printf(bio_err, "camellia-128-cbc camellia-192-cbc camellia-256-cbc "); #endif #ifndef OPENSSL_NO_RC4 BIO_printf(bio_err, "rc4"); #endif #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) BIO_printf(bio_err," chacha20-poly1305"); #endif BIO_printf(bio_err, "\n"); BIO_printf(bio_err, "rsa512 rsa1024 rsa2048 rsa4096\n"); BIO_printf(bio_err, "dsa512 dsa1024 dsa2048\n"); BIO_printf(bio_err, "ecdsap160 ecdsap192 ecdsap224 ecdsap256 ecdsap384 ecdsap521\n"); BIO_printf(bio_err, "ecdsak163 ecdsak233 ecdsak283 ecdsak409 ecdsak571\n"); BIO_printf(bio_err, "ecdsab163 ecdsab233 ecdsab283 ecdsab409 ecdsab571 ecdsa\n"); BIO_printf(bio_err, "ecdhp160 ecdhp192 ecdhp224 ecdhp256 ecdhp384 ecdhp521\n"); BIO_printf(bio_err, "ecdhk163 ecdhk233 ecdhk283 ecdhk409 ecdhk571\n"); BIO_printf(bio_err, "ecdhb163 ecdhb233 ecdhb283 ecdhb409 ecdhb571 ecdh\n"); #ifndef OPENSSL_NO_IDEA BIO_printf(bio_err, "idea "); #endif #ifndef OPENSSL_NO_RC2 BIO_printf(bio_err, "rc2 "); #endif #ifndef OPENSSL_NO_DES BIO_printf(bio_err, "des "); #endif #ifndef OPENSSL_NO_AES BIO_printf(bio_err, "aes "); #endif #ifndef OPENSSL_NO_CAMELLIA BIO_printf(bio_err, "camellia "); #endif BIO_printf(bio_err, "rsa "); #ifndef OPENSSL_NO_BF BIO_printf(bio_err, "blowfish"); #endif #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || \ !defined(OPENSSL_NO_RC2) || !defined(OPENSSL_NO_DES) || \ !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_BF) || \ !defined(OPENSSL_NO_AES) || !defined(OPENSSL_NO_CAMELLIA) BIO_printf(bio_err, "\n"); #endif BIO_printf(bio_err, "\n"); BIO_printf(bio_err, "Available options:\n"); BIO_printf(bio_err, "-elapsed measure time in real time instead of CPU user time.\n"); BIO_printf(bio_err, "-evp e use EVP e.\n"); BIO_printf(bio_err, "-decrypt time decryption instead of encryption (only EVP).\n"); BIO_printf(bio_err, "-mr produce machine readable output.\n"); BIO_printf(bio_err, "-multi n run n benchmarks in parallel.\n"); goto end; } argc--; argv++; j++; } if (multi && do_multi(multi)) goto show_res; if (j == 0) { for (i = 0; i < ALGOR_NUM; i++) { if (i != D_EVP) doit[i] = 1; } for (i = 0; i < RSA_NUM; i++) rsa_doit[i] = 1; for (i = 0; i < DSA_NUM; i++) dsa_doit[i] = 1; for (i = 0; i < EC_NUM; i++) ecdsa_doit[i] = 1; for (i = 0; i < EC_NUM; i++) ecdh_doit[i] = 1; } for (i = 0; i < ALGOR_NUM; i++) if (doit[i]) pr_header++; if (usertime == 0 && !mr) BIO_printf(bio_err, "You have chosen to measure elapsed time instead of user CPU time.\n"); for (i = 0; i < RSA_NUM; i++) { const unsigned char *p; p = rsa_data[i]; rsa_key[i] = d2i_RSAPrivateKey(NULL, &p, rsa_data_length[i]); if (rsa_key[i] == NULL) { BIO_printf(bio_err, "internal error loading RSA key number %d\n", i); goto end; } } dsa_key[0] = get_dsa512(); dsa_key[1] = get_dsa1024(); dsa_key[2] = get_dsa2048(); #ifndef OPENSSL_NO_DES DES_set_key_unchecked(&key, &sch); DES_set_key_unchecked(&key2, &sch2); DES_set_key_unchecked(&key3, &sch3); #endif #ifndef OPENSSL_NO_AES AES_set_encrypt_key(key16, 128, &aes_ks1); AES_set_encrypt_key(key24, 192, &aes_ks2); AES_set_encrypt_key(key32, 256, &aes_ks3); #endif #ifndef OPENSSL_NO_CAMELLIA Camellia_set_key(key16, 128, &camellia_ks1); Camellia_set_key(ckey24, 192, &camellia_ks2); Camellia_set_key(ckey32, 256, &camellia_ks3); #endif #ifndef OPENSSL_NO_IDEA idea_set_encrypt_key(key16, &idea_ks); #endif #ifndef OPENSSL_NO_RC4 RC4_set_key(&rc4_ks, 16, key16); #endif #ifndef OPENSSL_NO_RC2 RC2_set_key(&rc2_ks, 16, key16, 128); #endif #ifndef OPENSSL_NO_BF BF_set_key(&bf_ks, 16, key16); #endif #ifndef OPENSSL_NO_CAST CAST_set_key(&cast_ks, 16, key16); #endif memset(rsa_c, 0, sizeof(rsa_c)); #define COND(c) (run && count<0x7fffffff) #define COUNT(d) (count) signal(SIGALRM, sig_done); #ifndef OPENSSL_NO_MD4 if (doit[D_MD4]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_MD4], c[D_MD4][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_MD4][j]); count++) EVP_Digest(&(buf[0]), (unsigned long) lengths[j], &(md4[0]), NULL, EVP_md4(), NULL); d = Time_F(STOP); print_result(D_MD4, j, count, d); } } #endif #ifndef OPENSSL_NO_MD5 if (doit[D_MD5]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_MD5], c[D_MD5][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_MD5][j]); count++) EVP_Digest(&(buf[0]), (unsigned long) lengths[j], &(md5[0]), NULL, EVP_get_digestbyname("md5"), NULL); d = Time_F(STOP); print_result(D_MD5, j, count, d); } } #endif #if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC) if (doit[D_HMAC]) { HMAC_CTX hctx; HMAC_CTX_init(&hctx); HMAC_Init_ex(&hctx, (unsigned char *) "This is a key...", 16, EVP_md5(), NULL); for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_HMAC], c[D_HMAC][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_HMAC][j]); count++) { HMAC_Init_ex(&hctx, NULL, 0, NULL, NULL); HMAC_Update(&hctx, buf, lengths[j]); HMAC_Final(&hctx, &(hmac[0]), NULL); } d = Time_F(STOP); print_result(D_HMAC, j, count, d); } HMAC_CTX_cleanup(&hctx); } #endif #ifndef OPENSSL_NO_SHA if (doit[D_SHA1]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_SHA1], c[D_SHA1][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_SHA1][j]); count++) EVP_Digest(buf, (unsigned long) lengths[j], &(sha[0]), NULL, EVP_sha1(), NULL); d = Time_F(STOP); print_result(D_SHA1, j, count, d); } } #ifndef OPENSSL_NO_SHA256 if (doit[D_SHA256]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_SHA256], c[D_SHA256][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_SHA256][j]); count++) SHA256(buf, lengths[j], sha256); d = Time_F(STOP); print_result(D_SHA256, j, count, d); } } #endif #ifndef OPENSSL_NO_SHA512 if (doit[D_SHA512]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_SHA512], c[D_SHA512][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_SHA512][j]); count++) SHA512(buf, lengths[j], sha512); d = Time_F(STOP); print_result(D_SHA512, j, count, d); } } #endif #endif #ifndef OPENSSL_NO_WHIRLPOOL if (doit[D_WHIRLPOOL]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_WHIRLPOOL], c[D_WHIRLPOOL][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_WHIRLPOOL][j]); count++) WHIRLPOOL(buf, lengths[j], whirlpool); d = Time_F(STOP); print_result(D_WHIRLPOOL, j, count, d); } } #endif #ifndef OPENSSL_NO_RIPEMD if (doit[D_RMD160]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_RMD160], c[D_RMD160][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_RMD160][j]); count++) EVP_Digest(buf, (unsigned long) lengths[j], &(rmd160[0]), NULL, EVP_ripemd160(), NULL); d = Time_F(STOP); print_result(D_RMD160, j, count, d); } } #endif #ifndef OPENSSL_NO_RC4 if (doit[D_RC4]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_RC4], c[D_RC4][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_RC4][j]); count++) RC4(&rc4_ks, (unsigned int) lengths[j], buf, buf); d = Time_F(STOP); print_result(D_RC4, j, count, d); } } #endif #ifndef OPENSSL_NO_DES if (doit[D_CBC_DES]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_CBC_DES], c[D_CBC_DES][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_DES][j]); count++) DES_ncbc_encrypt(buf, buf, lengths[j], &sch, &DES_iv, DES_ENCRYPT); d = Time_F(STOP); print_result(D_CBC_DES, j, count, d); } } if (doit[D_EDE3_DES]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_EDE3_DES], c[D_EDE3_DES][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_EDE3_DES][j]); count++) DES_ede3_cbc_encrypt(buf, buf, lengths[j], &sch, &sch2, &sch3, &DES_iv, DES_ENCRYPT); d = Time_F(STOP); print_result(D_EDE3_DES, j, count, d); } } #endif #ifndef OPENSSL_NO_AES if (doit[D_CBC_128_AES]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_CBC_128_AES], c[D_CBC_128_AES][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_128_AES][j]); count++) AES_cbc_encrypt(buf, buf, (unsigned long) lengths[j], &aes_ks1, iv, AES_ENCRYPT); d = Time_F(STOP); print_result(D_CBC_128_AES, j, count, d); } } if (doit[D_CBC_192_AES]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_CBC_192_AES], c[D_CBC_192_AES][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_192_AES][j]); count++) AES_cbc_encrypt(buf, buf, (unsigned long) lengths[j], &aes_ks2, iv, AES_ENCRYPT); d = Time_F(STOP); print_result(D_CBC_192_AES, j, count, d); } } if (doit[D_CBC_256_AES]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_CBC_256_AES], c[D_CBC_256_AES][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_256_AES][j]); count++) AES_cbc_encrypt(buf, buf, (unsigned long) lengths[j], &aes_ks3, iv, AES_ENCRYPT); d = Time_F(STOP); print_result(D_CBC_256_AES, j, count, d); } } if (doit[D_IGE_128_AES]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_IGE_128_AES], c[D_IGE_128_AES][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_IGE_128_AES][j]); count++) AES_ige_encrypt(buf, buf2, (unsigned long) lengths[j], &aes_ks1, iv, AES_ENCRYPT); d = Time_F(STOP); print_result(D_IGE_128_AES, j, count, d); } } if (doit[D_IGE_192_AES]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_IGE_192_AES], c[D_IGE_192_AES][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_IGE_192_AES][j]); count++) AES_ige_encrypt(buf, buf2, (unsigned long) lengths[j], &aes_ks2, iv, AES_ENCRYPT); d = Time_F(STOP); print_result(D_IGE_192_AES, j, count, d); } } if (doit[D_IGE_256_AES]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_IGE_256_AES], c[D_IGE_256_AES][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_IGE_256_AES][j]); count++) AES_ige_encrypt(buf, buf2, (unsigned long) lengths[j], &aes_ks3, iv, AES_ENCRYPT); d = Time_F(STOP); print_result(D_IGE_256_AES, j, count, d); } } if (doit[D_GHASH]) { GCM128_CONTEXT *ctx = CRYPTO_gcm128_new(&aes_ks1, (block128_f) AES_encrypt); CRYPTO_gcm128_setiv(ctx, (unsigned char *) "0123456789ab", 12); for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_GHASH], c[D_GHASH][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_GHASH][j]); count++) CRYPTO_gcm128_aad(ctx, buf, lengths[j]); d = Time_F(STOP); print_result(D_GHASH, j, count, d); } CRYPTO_gcm128_release(ctx); } if (doit[D_AES_128_GCM]) { const EVP_AEAD *aead = EVP_aead_aes_128_gcm(); static const unsigned char nonce[32] = {0}; size_t buf_len, nonce_len; EVP_AEAD_CTX ctx; EVP_AEAD_CTX_init(&ctx, aead, key32, EVP_AEAD_key_length(aead), EVP_AEAD_DEFAULT_TAG_LENGTH, NULL); nonce_len = EVP_AEAD_nonce_length(aead); for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_AES_128_GCM],c[D_AES_128_GCM][j],lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_AES_128_GCM][j]); count++) EVP_AEAD_CTX_seal(&ctx, buf, &buf_len, BUFSIZE, nonce, nonce_len, buf, lengths[j], NULL, 0); d=Time_F(STOP); print_result(D_AES_128_GCM,j,count,d); } EVP_AEAD_CTX_cleanup(&ctx); } if (doit[D_AES_256_GCM]) { const EVP_AEAD *aead = EVP_aead_aes_256_gcm(); static const unsigned char nonce[32] = {0}; size_t buf_len, nonce_len; EVP_AEAD_CTX ctx; EVP_AEAD_CTX_init(&ctx, aead, key32, EVP_AEAD_key_length(aead), EVP_AEAD_DEFAULT_TAG_LENGTH, NULL); nonce_len = EVP_AEAD_nonce_length(aead); for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_AES_256_GCM],c[D_AES_256_GCM][j],lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_AES_256_GCM][j]); count++) EVP_AEAD_CTX_seal(&ctx, buf, &buf_len, BUFSIZE, nonce, nonce_len, buf, lengths[j], NULL, 0); d=Time_F(STOP); print_result(D_AES_256_GCM, j, count, d); } EVP_AEAD_CTX_cleanup(&ctx); } #endif #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) if (doit[D_CHACHA20_POLY1305]) { const EVP_AEAD *aead = EVP_aead_chacha20_poly1305(); static const unsigned char nonce[32] = {0}; size_t buf_len, nonce_len; EVP_AEAD_CTX ctx; EVP_AEAD_CTX_init(&ctx, aead, key32, EVP_AEAD_key_length(aead), EVP_AEAD_DEFAULT_TAG_LENGTH, NULL); nonce_len = EVP_AEAD_nonce_length(aead); for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_CHACHA20_POLY1305], c[D_CHACHA20_POLY1305][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_CHACHA20_POLY1305][j]); count++) EVP_AEAD_CTX_seal(&ctx, buf, &buf_len, BUFSIZE, nonce, nonce_len, buf, lengths[j], NULL, 0); d=Time_F(STOP); print_result(D_CHACHA20_POLY1305, j, count, d); } EVP_AEAD_CTX_cleanup(&ctx); } #endif #ifndef OPENSSL_NO_CAMELLIA if (doit[D_CBC_128_CML]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_CBC_128_CML], c[D_CBC_128_CML][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_128_CML][j]); count++) Camellia_cbc_encrypt(buf, buf, (unsigned long) lengths[j], &camellia_ks1, iv, CAMELLIA_ENCRYPT); d = Time_F(STOP); print_result(D_CBC_128_CML, j, count, d); } } if (doit[D_CBC_192_CML]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_CBC_192_CML], c[D_CBC_192_CML][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_192_CML][j]); count++) Camellia_cbc_encrypt(buf, buf, (unsigned long) lengths[j], &camellia_ks2, iv, CAMELLIA_ENCRYPT); d = Time_F(STOP); print_result(D_CBC_192_CML, j, count, d); } } if (doit[D_CBC_256_CML]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_CBC_256_CML], c[D_CBC_256_CML][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_256_CML][j]); count++) Camellia_cbc_encrypt(buf, buf, (unsigned long) lengths[j], &camellia_ks3, iv, CAMELLIA_ENCRYPT); d = Time_F(STOP); print_result(D_CBC_256_CML, j, count, d); } } #endif #ifndef OPENSSL_NO_IDEA if (doit[D_CBC_IDEA]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_CBC_IDEA], c[D_CBC_IDEA][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_IDEA][j]); count++) idea_cbc_encrypt(buf, buf, (unsigned long) lengths[j], &idea_ks, iv, IDEA_ENCRYPT); d = Time_F(STOP); print_result(D_CBC_IDEA, j, count, d); } } #endif #ifndef OPENSSL_NO_RC2 if (doit[D_CBC_RC2]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_CBC_RC2], c[D_CBC_RC2][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_RC2][j]); count++) RC2_cbc_encrypt(buf, buf, (unsigned long) lengths[j], &rc2_ks, iv, RC2_ENCRYPT); d = Time_F(STOP); print_result(D_CBC_RC2, j, count, d); } } #endif #ifndef OPENSSL_NO_BF if (doit[D_CBC_BF]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_CBC_BF], c[D_CBC_BF][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_BF][j]); count++) BF_cbc_encrypt(buf, buf, (unsigned long) lengths[j], &bf_ks, iv, BF_ENCRYPT); d = Time_F(STOP); print_result(D_CBC_BF, j, count, d); } } #endif #ifndef OPENSSL_NO_CAST if (doit[D_CBC_CAST]) { for (j = 0; j < SIZE_NUM; j++) { print_message(names[D_CBC_CAST], c[D_CBC_CAST][j], lengths[j]); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_CAST][j]); count++) CAST_cbc_encrypt(buf, buf, (unsigned long) lengths[j], &cast_ks, iv, CAST_ENCRYPT); d = Time_F(STOP); print_result(D_CBC_CAST, j, count, d); } } #endif if (doit[D_EVP]) { for (j = 0; j < SIZE_NUM; j++) { if (evp_cipher) { EVP_CIPHER_CTX ctx; int outl; names[D_EVP] = OBJ_nid2ln(evp_cipher->nid); /* * -O3 -fschedule-insns messes up an * optimization here! names[D_EVP] somehow * becomes NULL */ print_message(names[D_EVP], save_count, lengths[j]); EVP_CIPHER_CTX_init(&ctx); if (decrypt) EVP_DecryptInit_ex(&ctx, evp_cipher, NULL, key16, iv); else EVP_EncryptInit_ex(&ctx, evp_cipher, NULL, key16, iv); EVP_CIPHER_CTX_set_padding(&ctx, 0); Time_F(START); if (decrypt) for (count = 0, run = 1; COND(save_count * 4 * lengths[0] / lengths[j]); count++) EVP_DecryptUpdate(&ctx, buf, &outl, buf, lengths[j]); else for (count = 0, run = 1; COND(save_count * 4 * lengths[0] / lengths[j]); count++) EVP_EncryptUpdate(&ctx, buf, &outl, buf, lengths[j]); if (decrypt) EVP_DecryptFinal_ex(&ctx, buf, &outl); else EVP_EncryptFinal_ex(&ctx, buf, &outl); d = Time_F(STOP); EVP_CIPHER_CTX_cleanup(&ctx); } if (evp_md) { names[D_EVP] = OBJ_nid2ln(evp_md->type); print_message(names[D_EVP], save_count, lengths[j]); Time_F(START); for (count = 0, run = 1; COND(save_count * 4 * lengths[0] / lengths[j]); count++) EVP_Digest(buf, lengths[j], &(md[0]), NULL, evp_md, NULL); d = Time_F(STOP); } print_result(D_EVP, j, count, d); } } arc4random_buf(buf, 36); for (j = 0; j < RSA_NUM; j++) { int ret; if (!rsa_doit[j]) continue; ret = RSA_sign(NID_md5_sha1, buf, 36, buf2, &rsa_num, rsa_key[j]); if (ret == 0) { BIO_printf(bio_err, "RSA sign failure. No RSA sign will be done.\n"); ERR_print_errors(bio_err); rsa_count = 1; } else { pkey_print_message("private", "rsa", rsa_c[j][0], rsa_bits[j], RSA_SECONDS); /* RSA_blinding_on(rsa_key[j],NULL); */ Time_F(START); for (count = 0, run = 1; COND(rsa_c[j][0]); count++) { ret = RSA_sign(NID_md5_sha1, buf, 36, buf2, &rsa_num, rsa_key[j]); if (ret == 0) { BIO_printf(bio_err, "RSA sign failure\n"); ERR_print_errors(bio_err); count = 1; break; } } d = Time_F(STOP); BIO_printf(bio_err, mr ? "+R1:%ld:%d:%.2f\n" : "%ld %d bit private RSA's in %.2fs\n", count, rsa_bits[j], d); rsa_results[j][0] = d / (double) count; rsa_count = count; } ret = RSA_verify(NID_md5_sha1, buf, 36, buf2, rsa_num, rsa_key[j]); if (ret <= 0) { BIO_printf(bio_err, "RSA verify failure. No RSA verify will be done.\n"); ERR_print_errors(bio_err); rsa_doit[j] = 0; } else { pkey_print_message("public", "rsa", rsa_c[j][1], rsa_bits[j], RSA_SECONDS); Time_F(START); for (count = 0, run = 1; COND(rsa_c[j][1]); count++) { ret = RSA_verify(NID_md5_sha1, buf, 36, buf2, rsa_num, rsa_key[j]); if (ret <= 0) { BIO_printf(bio_err, "RSA verify failure\n"); ERR_print_errors(bio_err); count = 1; break; } } d = Time_F(STOP); BIO_printf(bio_err, mr ? "+R2:%ld:%d:%.2f\n" : "%ld %d bit public RSA's in %.2fs\n", count, rsa_bits[j], d); rsa_results[j][1] = d / (double) count; } if (rsa_count <= 1) { /* if longer than 10s, don't do any more */ for (j++; j < RSA_NUM; j++) rsa_doit[j] = 0; } } arc4random_buf(buf, 20); for (j = 0; j < DSA_NUM; j++) { unsigned int kk; int ret; if (!dsa_doit[j]) continue; /* DSA_generate_key(dsa_key[j]); */ /* DSA_sign_setup(dsa_key[j],NULL); */ ret = DSA_sign(EVP_PKEY_DSA, buf, 20, buf2, &kk, dsa_key[j]); if (ret == 0) { BIO_printf(bio_err, "DSA sign failure. No DSA sign will be done.\n"); ERR_print_errors(bio_err); rsa_count = 1; } else { pkey_print_message("sign", "dsa", dsa_c[j][0], dsa_bits[j], DSA_SECONDS); Time_F(START); for (count = 0, run = 1; COND(dsa_c[j][0]); count++) { ret = DSA_sign(EVP_PKEY_DSA, buf, 20, buf2, &kk, dsa_key[j]); if (ret == 0) { BIO_printf(bio_err, "DSA sign failure\n"); ERR_print_errors(bio_err); count = 1; break; } } d = Time_F(STOP); BIO_printf(bio_err, mr ? "+R3:%ld:%d:%.2f\n" : "%ld %d bit DSA signs in %.2fs\n", count, dsa_bits[j], d); dsa_results[j][0] = d / (double) count; rsa_count = count; } ret = DSA_verify(EVP_PKEY_DSA, buf, 20, buf2, kk, dsa_key[j]); if (ret <= 0) { BIO_printf(bio_err, "DSA verify failure. No DSA verify will be done.\n"); ERR_print_errors(bio_err); dsa_doit[j] = 0; } else { pkey_print_message("verify", "dsa", dsa_c[j][1], dsa_bits[j], DSA_SECONDS); Time_F(START); for (count = 0, run = 1; COND(dsa_c[j][1]); count++) { ret = DSA_verify(EVP_PKEY_DSA, buf, 20, buf2, kk, dsa_key[j]); if (ret <= 0) { BIO_printf(bio_err, "DSA verify failure\n"); ERR_print_errors(bio_err); count = 1; break; } } d = Time_F(STOP); BIO_printf(bio_err, mr ? "+R4:%ld:%d:%.2f\n" : "%ld %d bit DSA verify in %.2fs\n", count, dsa_bits[j], d); dsa_results[j][1] = d / (double) count; } if (rsa_count <= 1) { /* if longer than 10s, don't do any more */ for (j++; j < DSA_NUM; j++) dsa_doit[j] = 0; } } for (j = 0; j < EC_NUM; j++) { int ret; if (!ecdsa_doit[j]) continue; /* Ignore Curve */ ecdsa[j] = EC_KEY_new_by_curve_name(test_curves[j]); if (ecdsa[j] == NULL) { BIO_printf(bio_err, "ECDSA failure.\n"); ERR_print_errors(bio_err); rsa_count = 1; } else { EC_KEY_precompute_mult(ecdsa[j], NULL); /* Perform ECDSA signature test */ EC_KEY_generate_key(ecdsa[j]); ret = ECDSA_sign(0, buf, 20, ecdsasig, &ecdsasiglen, ecdsa[j]); if (ret == 0) { BIO_printf(bio_err, "ECDSA sign failure. No ECDSA sign will be done.\n"); ERR_print_errors(bio_err); rsa_count = 1; } else { pkey_print_message("sign", "ecdsa", ecdsa_c[j][0], test_curves_bits[j], ECDSA_SECONDS); Time_F(START); for (count = 0, run = 1; COND(ecdsa_c[j][0]); count++) { ret = ECDSA_sign(0, buf, 20, ecdsasig, &ecdsasiglen, ecdsa[j]); if (ret == 0) { BIO_printf(bio_err, "ECDSA sign failure\n"); ERR_print_errors(bio_err); count = 1; break; } } d = Time_F(STOP); BIO_printf(bio_err, mr ? "+R5:%ld:%d:%.2f\n" : "%ld %d bit ECDSA signs in %.2fs \n", count, test_curves_bits[j], d); ecdsa_results[j][0] = d / (double) count; rsa_count = count; } /* Perform ECDSA verification test */ ret = ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[j]); if (ret != 1) { BIO_printf(bio_err, "ECDSA verify failure. No ECDSA verify will be done.\n"); ERR_print_errors(bio_err); ecdsa_doit[j] = 0; } else { pkey_print_message("verify", "ecdsa", ecdsa_c[j][1], test_curves_bits[j], ECDSA_SECONDS); Time_F(START); for (count = 0, run = 1; COND(ecdsa_c[j][1]); count++) { ret = ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[j]); if (ret != 1) { BIO_printf(bio_err, "ECDSA verify failure\n"); ERR_print_errors(bio_err); count = 1; break; } } d = Time_F(STOP); BIO_printf(bio_err, mr ? "+R6:%ld:%d:%.2f\n" : "%ld %d bit ECDSA verify in %.2fs\n", count, test_curves_bits[j], d); ecdsa_results[j][1] = d / (double) count; } if (rsa_count <= 1) { /* if longer than 10s, don't do any more */ for (j++; j < EC_NUM; j++) ecdsa_doit[j] = 0; } } } for (j = 0; j < EC_NUM; j++) { if (!ecdh_doit[j]) continue; ecdh_a[j] = EC_KEY_new_by_curve_name(test_curves[j]); ecdh_b[j] = EC_KEY_new_by_curve_name(test_curves[j]); if ((ecdh_a[j] == NULL) || (ecdh_b[j] == NULL)) { BIO_printf(bio_err, "ECDH failure.\n"); ERR_print_errors(bio_err); rsa_count = 1; } else { /* generate two ECDH key pairs */ if (!EC_KEY_generate_key(ecdh_a[j]) || !EC_KEY_generate_key(ecdh_b[j])) { BIO_printf(bio_err, "ECDH key generation failure.\n"); ERR_print_errors(bio_err); rsa_count = 1; } else { /* * If field size is not more than 24 octets, * then use SHA-1 hash of result; otherwise, * use result (see section 4.8 of * draft-ietf-tls-ecc-03.txt). */ int field_size, outlen; void *(*kdf) (const void *in, size_t inlen, void *out, size_t * xoutlen); field_size = EC_GROUP_get_degree(EC_KEY_get0_group(ecdh_a[j])); if (field_size <= 24 * 8) { outlen = KDF1_SHA1_len; kdf = KDF1_SHA1; } else { outlen = (field_size + 7) / 8; kdf = NULL; } secret_size_a = ECDH_compute_key(secret_a, outlen, EC_KEY_get0_public_key(ecdh_b[j]), ecdh_a[j], kdf); secret_size_b = ECDH_compute_key(secret_b, outlen, EC_KEY_get0_public_key(ecdh_a[j]), ecdh_b[j], kdf); if (secret_size_a != secret_size_b) ecdh_checks = 0; else ecdh_checks = 1; for (secret_idx = 0; (secret_idx < secret_size_a) && (ecdh_checks == 1); secret_idx++) { if (secret_a[secret_idx] != secret_b[secret_idx]) ecdh_checks = 0; } if (ecdh_checks == 0) { BIO_printf(bio_err, "ECDH computations don't match.\n"); ERR_print_errors(bio_err); rsa_count = 1; } else { pkey_print_message("", "ecdh", ecdh_c[j][0], test_curves_bits[j], ECDH_SECONDS); Time_F(START); for (count = 0, run = 1; COND(ecdh_c[j][0]); count++) { ECDH_compute_key(secret_a, outlen, EC_KEY_get0_public_key(ecdh_b[j]), ecdh_a[j], kdf); } d = Time_F(STOP); BIO_printf(bio_err, mr ? "+R7:%ld:%d:%.2f\n" : "%ld %d-bit ECDH ops in %.2fs\n", count, test_curves_bits[j], d); ecdh_results[j][0] = d / (double) count; rsa_count = count; } } } if (rsa_count <= 1) { /* if longer than 10s, don't do any more */ for (j++; j < EC_NUM; j++) ecdh_doit[j] = 0; } } show_res: if (!mr) { fprintf(stdout, "%s\n", SSLeay_version(SSLEAY_VERSION)); fprintf(stdout, "%s\n", SSLeay_version(SSLEAY_BUILT_ON)); printf("options:"); printf("%s ", BN_options()); #ifndef OPENSSL_NO_RC4 printf("%s ", RC4_options()); #endif #ifndef OPENSSL_NO_DES printf("%s ", DES_options()); #endif #ifndef OPENSSL_NO_AES printf("%s ", AES_options()); #endif #ifndef OPENSSL_NO_IDEA printf("%s ", idea_options()); #endif #ifndef OPENSSL_NO_BF printf("%s ", BF_options()); #endif fprintf(stdout, "\n%s\n", SSLeay_version(SSLEAY_CFLAGS)); } if (pr_header) { if (mr) fprintf(stdout, "+H"); else { fprintf(stdout, "The 'numbers' are in 1000s of bytes per second processed.\n"); fprintf(stdout, "type "); } for (j = 0; j < SIZE_NUM; j++) fprintf(stdout, mr ? ":%d" : "%7d bytes", lengths[j]); fprintf(stdout, "\n"); } for (k = 0; k < ALGOR_NUM; k++) { if (!doit[k]) continue; if (mr) fprintf(stdout, "+F:%d:%s", k, names[k]); else fprintf(stdout, "%-13s", names[k]); for (j = 0; j < SIZE_NUM; j++) { if (results[k][j] > 10000 && !mr) fprintf(stdout, " %11.2fk", results[k][j] / 1e3); else fprintf(stdout, mr ? ":%.2f" : " %11.2f ", results[k][j]); } fprintf(stdout, "\n"); } j = 1; for (k = 0; k < RSA_NUM; k++) { if (!rsa_doit[k]) continue; if (j && !mr) { printf("%18ssign verify sign/s verify/s\n", " "); j = 0; } if (mr) fprintf(stdout, "+F2:%u:%u:%f:%f\n", k, rsa_bits[k], rsa_results[k][0], rsa_results[k][1]); else fprintf(stdout, "rsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n", rsa_bits[k], rsa_results[k][0], rsa_results[k][1], 1.0 / rsa_results[k][0], 1.0 / rsa_results[k][1]); } j = 1; for (k = 0; k < DSA_NUM; k++) { if (!dsa_doit[k]) continue; if (j && !mr) { printf("%18ssign verify sign/s verify/s\n", " "); j = 0; } if (mr) fprintf(stdout, "+F3:%u:%u:%f:%f\n", k, dsa_bits[k], dsa_results[k][0], dsa_results[k][1]); else fprintf(stdout, "dsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n", dsa_bits[k], dsa_results[k][0], dsa_results[k][1], 1.0 / dsa_results[k][0], 1.0 / dsa_results[k][1]); } j = 1; for (k = 0; k < EC_NUM; k++) { if (!ecdsa_doit[k]) continue; if (j && !mr) { printf("%30ssign verify sign/s verify/s\n", " "); j = 0; } if (mr) fprintf(stdout, "+F4:%u:%u:%f:%f\n", k, test_curves_bits[k], ecdsa_results[k][0], ecdsa_results[k][1]); else fprintf(stdout, "%4u bit ecdsa (%s) %8.4fs %8.4fs %8.1f %8.1f\n", test_curves_bits[k], test_curves_names[k], ecdsa_results[k][0], ecdsa_results[k][1], 1.0 / ecdsa_results[k][0], 1.0 / ecdsa_results[k][1]); } j = 1; for (k = 0; k < EC_NUM; k++) { if (!ecdh_doit[k]) continue; if (j && !mr) { printf("%30sop op/s\n", " "); j = 0; } if (mr) fprintf(stdout, "+F5:%u:%u:%f:%f\n", k, test_curves_bits[k], ecdh_results[k][0], 1.0 / ecdh_results[k][0]); else fprintf(stdout, "%4u bit ecdh (%s) %8.4fs %8.1f\n", test_curves_bits[k], test_curves_names[k], ecdh_results[k][0], 1.0 / ecdh_results[k][0]); } mret = 0; end: ERR_print_errors(bio_err); free(buf); free(buf2); for (i = 0; i < RSA_NUM; i++) if (rsa_key[i] != NULL) RSA_free(rsa_key[i]); for (i = 0; i < DSA_NUM; i++) if (dsa_key[i] != NULL) DSA_free(dsa_key[i]); for (i = 0; i < EC_NUM; i++) if (ecdsa[i] != NULL) EC_KEY_free(ecdsa[i]); for (i = 0; i < EC_NUM; i++) { if (ecdh_a[i] != NULL) EC_KEY_free(ecdh_a[i]); if (ecdh_b[i] != NULL) EC_KEY_free(ecdh_b[i]); } return (mret); } static void print_message(const char *s, long num, int length) { BIO_printf(bio_err, mr ? "+DT:%s:%d:%d\n" : "Doing %s for %ds on %d size blocks: ", s, SECONDS, length); (void) BIO_flush(bio_err); alarm(SECONDS); } static void pkey_print_message(const char *str, const char *str2, long num, int bits, int tm) { BIO_printf(bio_err, mr ? "+DTP:%d:%s:%s:%d\n" : "Doing %d bit %s %s's for %ds: ", bits, str, str2, tm); (void) BIO_flush(bio_err); alarm(tm); } static void print_result(int alg, int run_no, int count, double time_used) { BIO_printf(bio_err, mr ? "+R:%d:%s:%f\n" : "%d %s's in %.2fs\n", count, names[alg], time_used); results[alg][run_no] = ((double) count) / time_used * lengths[run_no]; } static char * sstrsep(char **string, const char *delim) { char isdelim[256]; char *token = *string; if (**string == 0) return NULL; memset(isdelim, 0, sizeof isdelim); isdelim[0] = 1; while (*delim) { isdelim[(unsigned char) (*delim)] = 1; delim++; } while (!isdelim[(unsigned char) (**string)]) { (*string)++; } if (**string) { **string = 0; (*string)++; } return token; } static int do_multi(int multi) { int n; int fd[2]; int *fds; static char sep[] = ":"; const char *errstr = NULL; fds = reallocarray(NULL, multi, sizeof *fds); if (fds == NULL) { fprintf(stderr, "reallocarray failure\n"); exit(1); } for (n = 0; n < multi; ++n) { if (pipe(fd) == -1) { fprintf(stderr, "pipe failure\n"); exit(1); } fflush(stdout); fflush(stderr); if (fork()) { close(fd[1]); fds[n] = fd[0]; } else { close(fd[0]); close(1); if (dup(fd[1]) == -1) { fprintf(stderr, "dup failed\n"); exit(1); } close(fd[1]); mr = 1; usertime = 0; free(fds); return 0; } printf("Forked child %d\n", n); } /* for now, assume the pipe is long enough to take all the output */ for (n = 0; n < multi; ++n) { FILE *f; char buf[1024]; char *p; f = fdopen(fds[n], "r"); while (fgets(buf, sizeof buf, f)) { p = strchr(buf, '\n'); if (p) *p = '\0'; if (buf[0] != '+') { fprintf(stderr, "Don't understand line '%s' from child %d\n", buf, n); continue; } printf("Got: %s from %d\n", buf, n); if (!strncmp(buf, "+F:", 3)) { int alg; int j; p = buf + 3; alg = strtonum(sstrsep(&p, sep), 0, ALGOR_NUM - 1, &errstr); sstrsep(&p, sep); for (j = 0; j < SIZE_NUM; ++j) results[alg][j] += atof(sstrsep(&p, sep)); } else if (!strncmp(buf, "+F2:", 4)) { int k; double d; p = buf + 4; k = strtonum(sstrsep(&p, sep), 0, ALGOR_NUM - 1, &errstr); sstrsep(&p, sep); d = atof(sstrsep(&p, sep)); if (n) rsa_results[k][0] = 1 / (1 / rsa_results[k][0] + 1 / d); else rsa_results[k][0] = d; d = atof(sstrsep(&p, sep)); if (n) rsa_results[k][1] = 1 / (1 / rsa_results[k][1] + 1 / d); else rsa_results[k][1] = d; } else if (!strncmp(buf, "+F2:", 4)) { int k; double d; p = buf + 4; k = strtonum(sstrsep(&p, sep), 0, ALGOR_NUM - 1, &errstr); sstrsep(&p, sep); d = atof(sstrsep(&p, sep)); if (n) rsa_results[k][0] = 1 / (1 / rsa_results[k][0] + 1 / d); else rsa_results[k][0] = d; d = atof(sstrsep(&p, sep)); if (n) rsa_results[k][1] = 1 / (1 / rsa_results[k][1] + 1 / d); else rsa_results[k][1] = d; } else if (!strncmp(buf, "+F3:", 4)) { int k; double d; p = buf + 4; k = strtonum(sstrsep(&p, sep), 0, ALGOR_NUM - 1, &errstr); sstrsep(&p, sep); d = atof(sstrsep(&p, sep)); if (n) dsa_results[k][0] = 1 / (1 / dsa_results[k][0] + 1 / d); else dsa_results[k][0] = d; d = atof(sstrsep(&p, sep)); if (n) dsa_results[k][1] = 1 / (1 / dsa_results[k][1] + 1 / d); else dsa_results[k][1] = d; } else if (!strncmp(buf, "+F4:", 4)) { int k; double d; p = buf + 4; k = strtonum(sstrsep(&p, sep), 0, ALGOR_NUM - 1, &errstr); sstrsep(&p, sep); d = atof(sstrsep(&p, sep)); if (n) ecdsa_results[k][0] = 1 / (1 / ecdsa_results[k][0] + 1 / d); else ecdsa_results[k][0] = d; d = atof(sstrsep(&p, sep)); if (n) ecdsa_results[k][1] = 1 / (1 / ecdsa_results[k][1] + 1 / d); else ecdsa_results[k][1] = d; } else if (!strncmp(buf, "+F5:", 4)) { int k; double d; p = buf + 4; k = strtonum(sstrsep(&p, sep), 0, ALGOR_NUM - 1, &errstr); sstrsep(&p, sep); d = atof(sstrsep(&p, sep)); if (n) ecdh_results[k][0] = 1 / (1 / ecdh_results[k][0] + 1 / d); else ecdh_results[k][0] = d; } else if (!strncmp(buf, "+H:", 3)) { } else fprintf(stderr, "Unknown type '%s' from child %d\n", buf, n); } fclose(f); } free(fds); return 1; } #endif |
Added jni/libressl/apps/openssl/spkac.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 | /* $OpenBSD: spkac.c,v 1.7 2015/10/17 07:51:10 semarie Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. Based on an original idea by Massimiliano Pala * (madwolf@openca.org). */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "apps.h" #include "progs.h" #include <openssl/bio.h> #include <openssl/conf.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/lhash.h> #include <openssl/pem.h> #include <openssl/x509.h> static struct { char *challenge; char *infile; char *keyfile; int noout; char *outfile; char *passargin; int pubkey; char *spkac; char *spksect; int verify; } spkac_config; static struct option spkac_options[] = { { .name = "challenge", .argname = "string", .desc = "Specify challenge string if SPKAC is generated", .type = OPTION_ARG, .opt.arg = &spkac_config.challenge, }, { .name = "in", .argname = "file", .desc = "Input file (default stdin)", .type = OPTION_ARG, .opt.arg = &spkac_config.infile, }, { .name = "key", .argname = "file", .desc = "Create SPKAC using private key file", .type = OPTION_ARG, .opt.arg = &spkac_config.keyfile, }, { .name = "noout", .desc = "Do not print text version of SPKAC", .type = OPTION_FLAG, .opt.flag = &spkac_config.noout, }, { .name = "out", .argname = "file", .desc = "Output file (default stdout)", .type = OPTION_ARG, .opt.arg = &spkac_config.outfile, }, { .name = "passin", .argname = "src", .desc = "Input file passphrase source", .type = OPTION_ARG, .opt.arg = &spkac_config.passargin, }, { .name = "pubkey", .desc = "Output public key of an SPKAC (not used if creating)", .type = OPTION_FLAG, .opt.flag = &spkac_config.pubkey, }, { .name = "spkac", .argname = "name", .desc = "SPKAC name (default \"SPKAC\")", .type = OPTION_ARG, .opt.arg = &spkac_config.spkac, }, { .name = "spksect", .argname = "name", .desc = "Name of the section containing SPKAC (default" " \"default\")", .type = OPTION_ARG, .opt.arg = &spkac_config.spksect, }, { .name = "verify", .desc = "Verify digital signature on supplied SPKAC", .type = OPTION_FLAG, .opt.flag = &spkac_config.verify, }, { NULL } }; static void spkac_usage(void) { fprintf(stderr, "usage: spkac [-challenge string] [-in file] " "[-key file] [-noout]\n" " [-out file] [-passin src] [-pubkey] [-spkac name] " "[-spksect section]\n" " [-verify]\n\n"); options_usage(spkac_options); } int spkac_main(int argc, char **argv) { int i, ret = 1; BIO *in = NULL, *out = NULL; char *passin = NULL; char *spkstr = NULL; CONF *conf = NULL; NETSCAPE_SPKI *spki = NULL; EVP_PKEY *pkey = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } memset(&spkac_config, 0, sizeof(spkac_config)); spkac_config.spkac = "SPKAC"; spkac_config.spksect = "default"; if (options_parse(argc, argv, spkac_options, NULL, NULL) != 0) { spkac_usage(); return (1); } if (!app_passwd(bio_err, spkac_config.passargin, NULL, &passin, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto end; } if (spkac_config.keyfile) { pkey = load_key(bio_err, strcmp(spkac_config.keyfile, "-") ? spkac_config.keyfile : NULL, FORMAT_PEM, 1, passin, "private key"); if (!pkey) { goto end; } spki = NETSCAPE_SPKI_new(); if (spkac_config.challenge) ASN1_STRING_set(spki->spkac->challenge, spkac_config.challenge, (int) strlen(spkac_config.challenge)); NETSCAPE_SPKI_set_pubkey(spki, pkey); NETSCAPE_SPKI_sign(spki, pkey, EVP_md5()); spkstr = NETSCAPE_SPKI_b64_encode(spki); if (spkstr == NULL) { BIO_printf(bio_err, "Error encoding SPKAC\n"); ERR_print_errors(bio_err); goto end; } if (spkac_config.outfile) out = BIO_new_file(spkac_config.outfile, "w"); else out = BIO_new_fp(stdout, BIO_NOCLOSE); if (!out) { BIO_printf(bio_err, "Error opening output file\n"); ERR_print_errors(bio_err); } else { BIO_printf(out, "SPKAC=%s\n", spkstr); ret = 0; } free(spkstr); goto end; } if (spkac_config.infile) in = BIO_new_file(spkac_config.infile, "r"); else in = BIO_new_fp(stdin, BIO_NOCLOSE); if (!in) { BIO_printf(bio_err, "Error opening input file\n"); ERR_print_errors(bio_err); goto end; } conf = NCONF_new(NULL); i = NCONF_load_bio(conf, in, NULL); if (!i) { BIO_printf(bio_err, "Error parsing config file\n"); ERR_print_errors(bio_err); goto end; } spkstr = NCONF_get_string(conf, spkac_config.spksect, spkac_config.spkac); if (!spkstr) { BIO_printf(bio_err, "Can't find SPKAC called \"%s\"\n", spkac_config.spkac); ERR_print_errors(bio_err); goto end; } spki = NETSCAPE_SPKI_b64_decode(spkstr, -1); if (!spki) { BIO_printf(bio_err, "Error loading SPKAC\n"); ERR_print_errors(bio_err); goto end; } if (spkac_config.outfile) out = BIO_new_file(spkac_config.outfile, "w"); else { out = BIO_new_fp(stdout, BIO_NOCLOSE); } if (!out) { BIO_printf(bio_err, "Error opening output file\n"); ERR_print_errors(bio_err); goto end; } if (!spkac_config.noout) NETSCAPE_SPKI_print(out, spki); pkey = NETSCAPE_SPKI_get_pubkey(spki); if (spkac_config.verify) { i = NETSCAPE_SPKI_verify(spki, pkey); if (i > 0) BIO_printf(bio_err, "Signature OK\n"); else { BIO_printf(bio_err, "Signature Failure\n"); ERR_print_errors(bio_err); goto end; } } if (spkac_config.pubkey) PEM_write_bio_PUBKEY(out, pkey); ret = 0; end: NCONF_free(conf); NETSCAPE_SPKI_free(spki); BIO_free(in); BIO_free_all(out); EVP_PKEY_free(pkey); free(passin); return (ret); } |
Added jni/libressl/apps/openssl/testdsa.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | /* $OpenBSD: testdsa.h,v 1.7 2014/06/12 15:49:27 deraadt Exp $ */ DSA *get_dsa512(void); DSA *get_dsa1024(void); DSA *get_dsa2048(void); static unsigned char dsa512_priv[] = { 0x65, 0xe5, 0xc7, 0x38, 0x60, 0x24, 0xb5, 0x89, 0xd4, 0x9c, 0xeb, 0x4c, 0x9c, 0x1d, 0x7a, 0x22, 0xbd, 0xd1, 0xc2, 0xd2, }; static unsigned char dsa512_pub[] = { 0x00, 0x95, 0xa7, 0x0d, 0xec, 0x93, 0x68, 0xba, 0x5f, 0xf7, 0x5f, 0x07, 0xf2, 0x3b, 0xad, 0x6b, 0x01, 0xdc, 0xbe, 0xec, 0xde, 0x04, 0x7a, 0x3a, 0x27, 0xb3, 0xec, 0x49, 0xfd, 0x08, 0x43, 0x3d, 0x7e, 0xa8, 0x2c, 0x5e, 0x7b, 0xbb, 0xfc, 0xf4, 0x6e, 0xeb, 0x6c, 0xb0, 0x6e, 0xf8, 0x02, 0x12, 0x8c, 0x38, 0x5d, 0x83, 0x56, 0x7d, 0xee, 0x53, 0x05, 0x3e, 0x24, 0x84, 0xbe, 0xba, 0x0a, 0x6b, 0xc8, }; static unsigned char dsa512_p[] = { 0x9D, 0x1B, 0x69, 0x8E, 0x26, 0xDB, 0xF2, 0x2B, 0x11, 0x70, 0x19, 0x86, 0xF6, 0x19, 0xC8, 0xF8, 0x19, 0xF2, 0x18, 0x53, 0x94, 0x46, 0x06, 0xD0, 0x62, 0x50, 0x33, 0x4B, 0x02, 0x3C, 0x52, 0x30, 0x03, 0x8B, 0x3B, 0xF9, 0x5F, 0xD1, 0x24, 0x06, 0x4F, 0x7B, 0x4C, 0xBA, 0xAA, 0x40, 0x9B, 0xFD, 0x96, 0xE4, 0x37, 0x33, 0xBB, 0x2D, 0x5A, 0xD7, 0x5A, 0x11, 0x40, 0x66, 0xA2, 0x76, 0x7D, 0x31, }; static unsigned char dsa512_q[] = { 0xFB, 0x53, 0xEF, 0x50, 0xB4, 0x40, 0x92, 0x31, 0x56, 0x86, 0x53, 0x7A, 0xE8, 0x8B, 0x22, 0x9A, 0x49, 0xFB, 0x71, 0x8F, }; static unsigned char dsa512_g[] = { 0x83, 0x3E, 0x88, 0xE5, 0xC5, 0x89, 0x73, 0xCE, 0x3B, 0x6C, 0x01, 0x49, 0xBF, 0xB3, 0xC7, 0x9F, 0x0A, 0xEA, 0x44, 0x91, 0xE5, 0x30, 0xAA, 0xD9, 0xBE, 0x5B, 0x5F, 0xB7, 0x10, 0xD7, 0x89, 0xB7, 0x8E, 0x74, 0xFB, 0xCF, 0x29, 0x1E, 0xEB, 0xA8, 0x2C, 0x54, 0x51, 0xB8, 0x10, 0xDE, 0xA0, 0xCE, 0x2F, 0xCC, 0x24, 0x6B, 0x90, 0x77, 0xDE, 0xA2, 0x68, 0xA6, 0x52, 0x12, 0xA2, 0x03, 0x9D, 0x20, }; DSA * get_dsa512() { DSA *dsa; if ((dsa = DSA_new()) == NULL) return (NULL); dsa->priv_key = BN_bin2bn(dsa512_priv, sizeof(dsa512_priv), NULL); dsa->pub_key = BN_bin2bn(dsa512_pub, sizeof(dsa512_pub), NULL); dsa->p = BN_bin2bn(dsa512_p, sizeof(dsa512_p), NULL); dsa->q = BN_bin2bn(dsa512_q, sizeof(dsa512_q), NULL); dsa->g = BN_bin2bn(dsa512_g, sizeof(dsa512_g), NULL); if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL)) return (NULL); return (dsa); } static unsigned char dsa1024_priv[] = { 0x7d, 0x21, 0xda, 0xbb, 0x62, 0x15, 0x47, 0x36, 0x07, 0x67, 0x12, 0xe8, 0x8c, 0xaa, 0x1c, 0xcd, 0x38, 0x12, 0x61, 0x18, }; static unsigned char dsa1024_pub[] = { 0x3c, 0x4e, 0x9c, 0x2a, 0x7f, 0x16, 0xc1, 0x25, 0xeb, 0xac, 0x78, 0x63, 0x90, 0x14, 0x8c, 0x8b, 0xf4, 0x68, 0x43, 0x3c, 0x2d, 0xee, 0x65, 0x50, 0x7d, 0x9c, 0x8f, 0x8c, 0x8a, 0x51, 0xd6, 0x11, 0x2b, 0x99, 0xaf, 0x1e, 0x90, 0x97, 0xb5, 0xd3, 0xa6, 0x20, 0x25, 0xd6, 0xfe, 0x43, 0x02, 0xd5, 0x91, 0x7d, 0xa7, 0x8c, 0xdb, 0xc9, 0x85, 0xa3, 0x36, 0x48, 0xf7, 0x68, 0xaa, 0x60, 0xb1, 0xf7, 0x05, 0x68, 0x3a, 0xa3, 0x3f, 0xd3, 0x19, 0x82, 0xd8, 0x82, 0x7a, 0x77, 0xfb, 0xef, 0xf4, 0x15, 0x0a, 0xeb, 0x06, 0x04, 0x7f, 0x53, 0x07, 0x0c, 0xbc, 0xcb, 0x2d, 0x83, 0xdb, 0x3e, 0xd1, 0x28, 0xa5, 0xa1, 0x31, 0xe0, 0x67, 0xfa, 0x50, 0xde, 0x9b, 0x07, 0x83, 0x7e, 0x2c, 0x0b, 0xc3, 0x13, 0x50, 0x61, 0xe5, 0xad, 0xbd, 0x36, 0xb8, 0x97, 0x4e, 0x40, 0x7d, 0xe8, 0x83, 0x0d, 0xbc, 0x4b }; static unsigned char dsa1024_p[] = { 0xA7, 0x3F, 0x6E, 0x85, 0xBF, 0x41, 0x6A, 0x29, 0x7D, 0xF0, 0x9F, 0x47, 0x19, 0x30, 0x90, 0x9A, 0x09, 0x1D, 0xDA, 0x6A, 0x33, 0x1E, 0xC5, 0x3D, 0x86, 0x96, 0xB3, 0x15, 0xE0, 0x53, 0x2E, 0x8F, 0xE0, 0x59, 0x82, 0x73, 0x90, 0x3E, 0x75, 0x31, 0x99, 0x47, 0x7A, 0x52, 0xFB, 0x85, 0xE4, 0xD9, 0xA6, 0x7B, 0x38, 0x9B, 0x68, 0x8A, 0x84, 0x9B, 0x87, 0xC6, 0x1E, 0xB5, 0x7E, 0x86, 0x4B, 0x53, 0x5B, 0x59, 0xCF, 0x71, 0x65, 0x19, 0x88, 0x6E, 0xCE, 0x66, 0xAE, 0x6B, 0x88, 0x36, 0xFB, 0xEC, 0x28, 0xDC, 0xC2, 0xD7, 0xA5, 0xBB, 0xE5, 0x2C, 0x39, 0x26, 0x4B, 0xDA, 0x9A, 0x70, 0x18, 0x95, 0x37, 0x95, 0x10, 0x56, 0x23, 0xF6, 0x15, 0xED, 0xBA, 0x04, 0x5E, 0xDE, 0x39, 0x4F, 0xFD, 0xB7, 0x43, 0x1F, 0xB5, 0xA4, 0x65, 0x6F, 0xCD, 0x80, 0x11, 0xE4, 0x70, 0x95, 0x5B, 0x50, 0xCD, 0x49, }; static unsigned char dsa1024_q[] = { 0xF7, 0x07, 0x31, 0xED, 0xFA, 0x6C, 0x06, 0x03, 0xD5, 0x85, 0x8A, 0x1C, 0xAC, 0x9C, 0x65, 0xE7, 0x50, 0x66, 0x65, 0x6F, }; static unsigned char dsa1024_g[] = { 0x4D, 0xDF, 0x4C, 0x03, 0xA6, 0x91, 0x8A, 0xF5, 0x19, 0x6F, 0x50, 0x46, 0x25, 0x99, 0xE5, 0x68, 0x6F, 0x30, 0xE3, 0x69, 0xE1, 0xE5, 0xB3, 0x5D, 0x98, 0xBB, 0x28, 0x86, 0x48, 0xFC, 0xDE, 0x99, 0x04, 0x3F, 0x5F, 0x88, 0x0C, 0x9C, 0x73, 0x24, 0x0D, 0x20, 0x5D, 0xB9, 0x2A, 0x9A, 0x3F, 0x18, 0x96, 0x27, 0xE4, 0x62, 0x87, 0xC1, 0x7B, 0x74, 0x62, 0x53, 0xFC, 0x61, 0x27, 0xA8, 0x7A, 0x91, 0x09, 0x9D, 0xB6, 0xF1, 0x4D, 0x9C, 0x54, 0x0F, 0x58, 0x06, 0xEE, 0x49, 0x74, 0x07, 0xCE, 0x55, 0x7E, 0x23, 0xCE, 0x16, 0xF6, 0xCA, 0xDC, 0x5A, 0x61, 0x01, 0x7E, 0xC9, 0x71, 0xB5, 0x4D, 0xF6, 0xDC, 0x34, 0x29, 0x87, 0x68, 0xF6, 0x5E, 0x20, 0x93, 0xB3, 0xDB, 0xF5, 0xE4, 0x09, 0x6C, 0x41, 0x17, 0x95, 0x92, 0xEB, 0x01, 0xB5, 0x73, 0xA5, 0x6A, 0x7E, 0xD8, 0x32, 0xED, 0x0E, 0x02, 0xB8, }; DSA * get_dsa1024() { DSA *dsa; if ((dsa = DSA_new()) == NULL) return (NULL); dsa->priv_key = BN_bin2bn(dsa1024_priv, sizeof(dsa1024_priv), NULL); dsa->pub_key = BN_bin2bn(dsa1024_pub, sizeof(dsa1024_pub), NULL); dsa->p = BN_bin2bn(dsa1024_p, sizeof(dsa1024_p), NULL); dsa->q = BN_bin2bn(dsa1024_q, sizeof(dsa1024_q), NULL); dsa->g = BN_bin2bn(dsa1024_g, sizeof(dsa1024_g), NULL); if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL)) return (NULL); return (dsa); } static unsigned char dsa2048_priv[] = { 0x32, 0x67, 0x92, 0xf6, 0xc4, 0xe2, 0xe2, 0xe8, 0xa0, 0x8b, 0x6b, 0x45, 0x0c, 0x8a, 0x76, 0xb0, 0xee, 0xcf, 0x91, 0xa7, }; static unsigned char dsa2048_pub[] = { 0x17, 0x8f, 0xa8, 0x11, 0x84, 0x92, 0xec, 0x83, 0x47, 0xc7, 0x6a, 0xb0, 0x92, 0xaf, 0x5a, 0x20, 0x37, 0xa3, 0x64, 0x79, 0xd2, 0xd0, 0x3d, 0xcd, 0xe0, 0x61, 0x88, 0x88, 0x21, 0xcc, 0x74, 0x5d, 0xce, 0x4c, 0x51, 0x47, 0xf0, 0xc5, 0x5c, 0x4c, 0x82, 0x7a, 0xaf, 0x72, 0xad, 0xb9, 0xe0, 0x53, 0xf2, 0x78, 0xb7, 0xf0, 0xb5, 0x48, 0x7f, 0x8a, 0x3a, 0x18, 0xd1, 0x9f, 0x8b, 0x7d, 0xa5, 0x47, 0xb7, 0x95, 0xab, 0x98, 0xf8, 0x7b, 0x74, 0x50, 0x56, 0x8e, 0x57, 0xf0, 0xee, 0xf5, 0xb7, 0xba, 0xab, 0x85, 0x86, 0xf9, 0x2b, 0xef, 0x41, 0x56, 0xa0, 0xa4, 0x9f, 0xb7, 0x38, 0x00, 0x46, 0x0a, 0xa6, 0xf1, 0xfc, 0x1f, 0xd8, 0x4e, 0x85, 0x44, 0x92, 0x43, 0x21, 0x5d, 0x6e, 0xcc, 0xc2, 0xcb, 0x26, 0x31, 0x0d, 0x21, 0xc4, 0xbd, 0x8d, 0x24, 0xbc, 0xd9, 0x18, 0x19, 0xd7, 0xdc, 0xf1, 0xe7, 0x93, 0x50, 0x48, 0x03, 0x2c, 0xae, 0x2e, 0xe7, 0x49, 0x88, 0x5f, 0x93, 0x57, 0x27, 0x99, 0x36, 0xb4, 0x20, 0xab, 0xfc, 0xa7, 0x2b, 0xf2, 0xd9, 0x98, 0xd7, 0xd4, 0x34, 0x9d, 0x96, 0x50, 0x58, 0x9a, 0xea, 0x54, 0xf3, 0xee, 0xf5, 0x63, 0x14, 0xee, 0x85, 0x83, 0x74, 0x76, 0xe1, 0x52, 0x95, 0xc3, 0xf7, 0xeb, 0x04, 0x04, 0x7b, 0xa7, 0x28, 0x1b, 0xcc, 0xea, 0x4a, 0x4e, 0x84, 0xda, 0xd8, 0x9c, 0x79, 0xd8, 0x9b, 0x66, 0x89, 0x2f, 0xcf, 0xac, 0xd7, 0x79, 0xf9, 0xa9, 0xd8, 0x45, 0x13, 0x78, 0xb9, 0x00, 0x14, 0xc9, 0x7e, 0x22, 0x51, 0x86, 0x67, 0xb0, 0x9f, 0x26, 0x11, 0x23, 0xc8, 0x38, 0xd7, 0x70, 0x1d, 0x15, 0x8e, 0x4d, 0x4f, 0x95, 0x97, 0x40, 0xa1, 0xc2, 0x7e, 0x01, 0x18, 0x72, 0xf4, 0x10, 0xe6, 0x8d, 0x52, 0x16, 0x7f, 0xf2, 0xc9, 0xf8, 0x33, 0x8b, 0x33, 0xb7, 0xce, }; static unsigned char dsa2048_p[] = { 0xA0, 0x25, 0xFA, 0xAD, 0xF4, 0x8E, 0xB9, 0xE5, 0x99, 0xF3, 0x5D, 0x6F, 0x4F, 0x83, 0x34, 0xE2, 0x7E, 0xCF, 0x6F, 0xBF, 0x30, 0xAF, 0x6F, 0x81, 0xEB, 0xF8, 0xC4, 0x13, 0xD9, 0xA0, 0x5D, 0x8B, 0x5C, 0x8E, 0xDC, 0xC2, 0x1D, 0x0B, 0x41, 0x32, 0xB0, 0x1F, 0xFE, 0xEF, 0x0C, 0xC2, 0xA2, 0x7E, 0x68, 0x5C, 0x28, 0x21, 0xE9, 0xF5, 0xB1, 0x58, 0x12, 0x63, 0x4C, 0x19, 0x4E, 0xFF, 0x02, 0x4B, 0x92, 0xED, 0xD2, 0x07, 0x11, 0x4D, 0x8C, 0x58, 0x16, 0x5C, 0x55, 0x8E, 0xAD, 0xA3, 0x67, 0x7D, 0xB9, 0x86, 0x6E, 0x0B, 0xE6, 0x54, 0x6F, 0x40, 0xAE, 0x0E, 0x67, 0x4C, 0xF9, 0x12, 0x5B, 0x3C, 0x08, 0x7A, 0xF7, 0xFC, 0x67, 0x86, 0x69, 0xE7, 0x0A, 0x94, 0x40, 0xBF, 0x8B, 0x76, 0xFE, 0x26, 0xD1, 0xF2, 0xA1, 0x1A, 0x84, 0xA1, 0x43, 0x56, 0x28, 0xBC, 0x9A, 0x5F, 0xD7, 0x3B, 0x69, 0x89, 0x8A, 0x36, 0x2C, 0x51, 0xDF, 0x12, 0x77, 0x2F, 0x57, 0x7B, 0xA0, 0xAA, 0xDD, 0x7F, 0xA1, 0x62, 0x3B, 0x40, 0x7B, 0x68, 0x1A, 0x8F, 0x0D, 0x38, 0xBB, 0x21, 0x5D, 0x18, 0xFC, 0x0F, 0x46, 0xF7, 0xA3, 0xB0, 0x1D, 0x23, 0xC3, 0xD2, 0xC7, 0x72, 0x51, 0x18, 0xDF, 0x46, 0x95, 0x79, 0xD9, 0xBD, 0xB5, 0x19, 0x02, 0x2C, 0x87, 0xDC, 0xE7, 0x57, 0x82, 0x7E, 0xF1, 0x8B, 0x06, 0x3D, 0x00, 0xA5, 0x7B, 0x6B, 0x26, 0x27, 0x91, 0x0F, 0x6A, 0x77, 0xE4, 0xD5, 0x04, 0xE4, 0x12, 0x2C, 0x42, 0xFF, 0xD2, 0x88, 0xBB, 0xD3, 0x92, 0xA0, 0xF9, 0xC8, 0x51, 0x64, 0x14, 0x5C, 0xD8, 0xF9, 0x6C, 0x47, 0x82, 0xB4, 0x1C, 0x7F, 0x09, 0xB8, 0xF0, 0x25, 0x83, 0x1D, 0x3F, 0x3F, 0x05, 0xB3, 0x21, 0x0A, 0x5D, 0xA7, 0xD8, 0x54, 0xC3, 0x65, 0x7D, 0xC3, 0xB0, 0x1D, 0xBF, 0xAE, 0xF8, 0x68, 0xCF, 0x9B, }; static unsigned char dsa2048_q[] = { 0x97, 0xE7, 0x33, 0x4D, 0xD3, 0x94, 0x3E, 0x0B, 0xDB, 0x62, 0x74, 0xC6, 0xA1, 0x08, 0xDD, 0x19, 0xA3, 0x75, 0x17, 0x1B, }; static unsigned char dsa2048_g[] = { 0x2C, 0x78, 0x16, 0x59, 0x34, 0x63, 0xF4, 0xF3, 0x92, 0xFC, 0xB5, 0xA5, 0x4F, 0x13, 0xDE, 0x2F, 0x1C, 0xA4, 0x3C, 0xAE, 0xAD, 0x38, 0x3F, 0x7E, 0x90, 0xBF, 0x96, 0xA6, 0xAE, 0x25, 0x90, 0x72, 0xF5, 0x8E, 0x80, 0x0C, 0x39, 0x1C, 0xD9, 0xEC, 0xBA, 0x90, 0x5B, 0x3A, 0xE8, 0x58, 0x6C, 0x9E, 0x30, 0x42, 0x37, 0x02, 0x31, 0x82, 0xBC, 0x6A, 0xDF, 0x6A, 0x09, 0x29, 0xE3, 0xC0, 0x46, 0xD1, 0xCB, 0x85, 0xEC, 0x0C, 0x30, 0x5E, 0xEA, 0xC8, 0x39, 0x8E, 0x22, 0x9F, 0x22, 0x10, 0xD2, 0x34, 0x61, 0x68, 0x37, 0x3D, 0x2E, 0x4A, 0x5B, 0x9A, 0xF5, 0xC1, 0x48, 0xC6, 0xF6, 0xDC, 0x63, 0x1A, 0xD3, 0x96, 0x64, 0xBA, 0x34, 0xC9, 0xD1, 0xA0, 0xD1, 0xAE, 0x6C, 0x2F, 0x48, 0x17, 0x93, 0x14, 0x43, 0xED, 0xF0, 0x21, 0x30, 0x19, 0xC3, 0x1B, 0x5F, 0xDE, 0xA3, 0xF0, 0x70, 0x78, 0x18, 0xE1, 0xA8, 0xE4, 0xEE, 0x2E, 0x00, 0xA5, 0xE4, 0xB3, 0x17, 0xC8, 0x0C, 0x7D, 0x6E, 0x42, 0xDC, 0xB7, 0x46, 0x00, 0x36, 0x4D, 0xD4, 0x46, 0xAA, 0x3D, 0x3C, 0x46, 0x89, 0x40, 0xBF, 0x1D, 0x84, 0x77, 0x0A, 0x75, 0xF3, 0x87, 0x1D, 0x08, 0x4C, 0xA6, 0xD1, 0xA9, 0x1C, 0x1E, 0x12, 0x1E, 0xE1, 0xC7, 0x30, 0x28, 0x76, 0xA5, 0x7F, 0x6C, 0x85, 0x96, 0x2B, 0x6F, 0xDB, 0x80, 0x66, 0x26, 0xAE, 0xF5, 0x93, 0xC7, 0x8E, 0xAE, 0x9A, 0xED, 0xE4, 0xCA, 0x04, 0xEA, 0x3B, 0x72, 0xEF, 0xDC, 0x87, 0xED, 0x0D, 0xA5, 0x4C, 0x4A, 0xDD, 0x71, 0x22, 0x64, 0x59, 0x69, 0x4E, 0x8E, 0xBF, 0x43, 0xDC, 0xAB, 0x8E, 0x66, 0xBB, 0x01, 0xB6, 0xF4, 0xE7, 0xFD, 0xD2, 0xAD, 0x9F, 0x36, 0xC1, 0xA0, 0x29, 0x99, 0xD1, 0x96, 0x70, 0x59, 0x06, 0x78, 0x35, 0xBD, 0x65, 0x55, 0x52, 0x9E, 0xF8, 0xB2, 0xE5, 0x38, }; DSA * get_dsa2048() { DSA *dsa; if ((dsa = DSA_new()) == NULL) return (NULL); dsa->priv_key = BN_bin2bn(dsa2048_priv, sizeof(dsa2048_priv), NULL); dsa->pub_key = BN_bin2bn(dsa2048_pub, sizeof(dsa2048_pub), NULL); dsa->p = BN_bin2bn(dsa2048_p, sizeof(dsa2048_p), NULL); dsa->q = BN_bin2bn(dsa2048_q, sizeof(dsa2048_q), NULL); dsa->g = BN_bin2bn(dsa2048_g, sizeof(dsa2048_g), NULL); if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL)) return (NULL); return (dsa); } |
Added jni/libressl/apps/openssl/testrsa.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 | /* $OpenBSD: testrsa.h,v 1.4 2014/06/12 15:49:27 deraadt Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ static unsigned char test512[] = { 0x30, 0x82, 0x01, 0x3a, 0x02, 0x01, 0x00, 0x02, 0x41, 0x00, 0xd6, 0x33, 0xb9, 0xc8, 0xfb, 0x4f, 0x3c, 0x7d, 0xc0, 0x01, 0x86, 0xd0, 0xe7, 0xa0, 0x55, 0xf2, 0x95, 0x93, 0xcc, 0x4f, 0xb7, 0x5b, 0x67, 0x5b, 0x94, 0x68, 0xc9, 0x34, 0x15, 0xde, 0xa5, 0x2e, 0x1c, 0x33, 0xc2, 0x6e, 0xfc, 0x34, 0x5e, 0x71, 0x13, 0xb7, 0xd6, 0xee, 0xd8, 0xa5, 0x65, 0x05, 0x72, 0x87, 0xa8, 0xb0, 0x77, 0xfe, 0x57, 0xf5, 0xfc, 0x5f, 0x55, 0x83, 0x87, 0xdd, 0x57, 0x49, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x41, 0x00, 0xa7, 0xf7, 0x91, 0xc5, 0x0f, 0x84, 0x57, 0xdc, 0x07, 0xf7, 0x6a, 0x7f, 0x60, 0x52, 0xb3, 0x72, 0xf1, 0x66, 0x1f, 0x7d, 0x97, 0x3b, 0x9e, 0xb6, 0x0a, 0x8f, 0x8c, 0xcf, 0x42, 0x23, 0x00, 0x04, 0xd4, 0x28, 0x0e, 0x1c, 0x90, 0xc4, 0x11, 0x25, 0x25, 0xa5, 0x93, 0xa5, 0x2f, 0x70, 0x02, 0xdf, 0x81, 0x9c, 0x49, 0x03, 0xa0, 0xf8, 0x6d, 0x54, 0x2e, 0x26, 0xde, 0xaa, 0x85, 0x59, 0xa8, 0x31, 0x02, 0x21, 0x00, 0xeb, 0x47, 0xd7, 0x3b, 0xf6, 0xc3, 0xdd, 0x5a, 0x46, 0xc5, 0xb9, 0x2b, 0x9a, 0xa0, 0x09, 0x8f, 0xa6, 0xfb, 0xf3, 0x78, 0x7a, 0x33, 0x70, 0x9d, 0x0f, 0x42, 0x6b, 0x13, 0x68, 0x24, 0xd3, 0x15, 0x02, 0x21, 0x00, 0xe9, 0x10, 0xb0, 0xb3, 0x0d, 0xe2, 0x82, 0x68, 0x77, 0x8a, 0x6e, 0x7c, 0xda, 0xbc, 0x3e, 0x53, 0x83, 0xfb, 0xd6, 0x22, 0xe7, 0xb5, 0xae, 0x6e, 0x80, 0xda, 0x00, 0x55, 0x97, 0xc1, 0xd0, 0x65, 0x02, 0x20, 0x4c, 0xf8, 0x73, 0xb1, 0x6a, 0x49, 0x29, 0x61, 0x1f, 0x46, 0x10, 0x0d, 0xf3, 0xc7, 0xe7, 0x58, 0xd7, 0x88, 0x15, 0x5e, 0x94, 0x9b, 0xbf, 0x7b, 0xa2, 0x42, 0x58, 0x45, 0x41, 0x0c, 0xcb, 0x01, 0x02, 0x20, 0x12, 0x11, 0xba, 0x31, 0x57, 0x9d, 0x3d, 0x11, 0x0e, 0x5b, 0x8c, 0x2f, 0x5f, 0xe2, 0x02, 0x4f, 0x05, 0x47, 0x8c, 0x15, 0x8e, 0xb3, 0x56, 0x3f, 0xb8, 0xfb, 0xad, 0xd4, 0xf4, 0xfc, 0x10, 0xc5, 0x02, 0x20, 0x18, 0xa1, 0x29, 0x99, 0x5b, 0xd9, 0xc8, 0xd4, 0xfc, 0x49, 0x7a, 0x2a, 0x21, 0x2c, 0x49, 0xe4, 0x4f, 0xeb, 0xef, 0x51, 0xf1, 0xab, 0x6d, 0xfb, 0x4b, 0x14, 0xe9, 0x4b, 0x52, 0xb5, 0x82, 0x2c, }; static unsigned char test1024[] = { 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xdc, 0x98, 0x43, 0xe8, 0x3d, 0x43, 0x5b, 0xe4, 0x05, 0xcd, 0xd0, 0xa9, 0x3e, 0xcb, 0x83, 0x75, 0xf6, 0xb5, 0xa5, 0x9f, 0x6b, 0xe9, 0x34, 0x41, 0x29, 0x18, 0xfa, 0x6a, 0x55, 0x4d, 0x70, 0xfc, 0xec, 0xae, 0x87, 0x38, 0x0a, 0x20, 0xa9, 0xc0, 0x45, 0x77, 0x6e, 0x57, 0x60, 0x57, 0xf4, 0xed, 0x96, 0x22, 0xcb, 0x8f, 0xe1, 0x33, 0x3a, 0x17, 0x1f, 0xed, 0x37, 0xa5, 0x6f, 0xeb, 0xa6, 0xbc, 0x12, 0x80, 0x1d, 0x53, 0xbd, 0x70, 0xeb, 0x21, 0x76, 0x3e, 0xc9, 0x2f, 0x1a, 0x45, 0x24, 0x82, 0xff, 0xcd, 0x59, 0x32, 0x06, 0x2e, 0x12, 0x3b, 0x23, 0x78, 0xed, 0x12, 0x3d, 0xe0, 0x8d, 0xf9, 0x67, 0x4f, 0x37, 0x4e, 0x47, 0x02, 0x4c, 0x2d, 0xc0, 0x4f, 0x1f, 0xb3, 0x94, 0xe1, 0x41, 0x2e, 0x2d, 0x90, 0x10, 0xfc, 0x82, 0x91, 0x8b, 0x0f, 0x22, 0xd4, 0xf2, 0xfc, 0x2c, 0xab, 0x53, 0x55, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x81, 0x80, 0x2b, 0xcc, 0x3f, 0x8f, 0x58, 0xba, 0x8b, 0x00, 0x16, 0xf6, 0xea, 0x3a, 0xf0, 0x30, 0xd0, 0x05, 0x17, 0xda, 0xb0, 0xeb, 0x9a, 0x2d, 0x4f, 0x26, 0xb0, 0xd6, 0x38, 0xc1, 0xeb, 0xf5, 0xd8, 0x3d, 0x1f, 0x70, 0xf7, 0x7f, 0xf4, 0xe2, 0xcf, 0x51, 0x51, 0x79, 0x88, 0xfa, 0xe8, 0x32, 0x0e, 0x7b, 0x2d, 0x97, 0xf2, 0xfa, 0xba, 0x27, 0xc5, 0x9c, 0xd9, 0xc5, 0xeb, 0x8a, 0x79, 0x52, 0x3c, 0x64, 0x34, 0x7d, 0xc2, 0xcf, 0x28, 0xc7, 0x4e, 0xd5, 0x43, 0x0b, 0xd1, 0xa6, 0xca, 0x6d, 0x03, 0x2d, 0x72, 0x23, 0xbc, 0x6d, 0x05, 0xfa, 0x16, 0x09, 0x2f, 0x2e, 0x5c, 0xb6, 0xee, 0x74, 0xdd, 0xd2, 0x48, 0x8e, 0x36, 0x0c, 0x06, 0x3d, 0x4d, 0xe5, 0x10, 0x82, 0xeb, 0x6a, 0xf3, 0x4b, 0x9f, 0xd6, 0xed, 0x11, 0xb1, 0x6e, 0xec, 0xf4, 0xfe, 0x8e, 0x75, 0x94, 0x20, 0x2f, 0xcb, 0xac, 0x46, 0xf1, 0x02, 0x41, 0x00, 0xf9, 0x8c, 0xa3, 0x85, 0xb1, 0xdd, 0x29, 0xaf, 0x65, 0xc1, 0x33, 0xf3, 0x95, 0xc5, 0x52, 0x68, 0x0b, 0xd4, 0xf1, 0xe5, 0x0e, 0x02, 0x9f, 0x4f, 0xfa, 0x77, 0xdc, 0x46, 0x9e, 0xc7, 0xa6, 0xe4, 0x16, 0x29, 0xda, 0xb0, 0x07, 0xcf, 0x5b, 0xa9, 0x12, 0x8a, 0xdd, 0x63, 0x0a, 0xde, 0x2e, 0x8c, 0x66, 0x8b, 0x8c, 0xdc, 0x19, 0xa3, 0x7e, 0xf4, 0x3b, 0xd0, 0x1a, 0x8c, 0xa4, 0xc2, 0xe1, 0xd3, 0x02, 0x41, 0x00, 0xe2, 0x4c, 0x05, 0xf2, 0x04, 0x86, 0x4e, 0x61, 0x43, 0xdb, 0xb0, 0xb9, 0x96, 0x86, 0x52, 0x2c, 0xca, 0x8d, 0x7b, 0xab, 0x0b, 0x13, 0x0d, 0x7e, 0x38, 0x5b, 0xe2, 0x2e, 0x7b, 0x0e, 0xe7, 0x19, 0x99, 0x38, 0xe7, 0xf2, 0x21, 0xbd, 0x85, 0x85, 0xe3, 0xfd, 0x28, 0x77, 0x20, 0x31, 0x71, 0x2c, 0xd0, 0xff, 0xfb, 0x2e, 0xaf, 0x85, 0xb4, 0x86, 0xca, 0xf3, 0xbb, 0xca, 0xaa, 0x0f, 0x95, 0x37, 0x02, 0x40, 0x0e, 0x41, 0x9a, 0x95, 0xe8, 0xb3, 0x59, 0xce, 0x4b, 0x61, 0xde, 0x35, 0xec, 0x38, 0x79, 0x9c, 0xb8, 0x10, 0x52, 0x41, 0x63, 0xab, 0x82, 0xae, 0x6f, 0x00, 0xa9, 0xf4, 0xde, 0xdd, 0x49, 0x0b, 0x7e, 0xb8, 0xa5, 0x65, 0xa9, 0x0c, 0x8f, 0x8f, 0xf9, 0x1f, 0x35, 0xc6, 0x92, 0xb8, 0x5e, 0xb0, 0x66, 0xab, 0x52, 0x40, 0xc0, 0xb6, 0x36, 0x6a, 0x7d, 0x80, 0x46, 0x04, 0x02, 0xe5, 0x9f, 0x41, 0x02, 0x41, 0x00, 0xc0, 0xad, 0xcc, 0x4e, 0x21, 0xee, 0x1d, 0x24, 0x91, 0xfb, 0xa7, 0x80, 0x8d, 0x9a, 0xb6, 0xb3, 0x2e, 0x8f, 0xc2, 0xe1, 0x82, 0xdf, 0x69, 0x18, 0xb4, 0x71, 0xff, 0xa6, 0x65, 0xde, 0xed, 0x84, 0x8d, 0x42, 0xb7, 0xb3, 0x21, 0x69, 0x56, 0x1c, 0x07, 0x60, 0x51, 0x29, 0x04, 0xff, 0x34, 0x06, 0xdd, 0xb9, 0x67, 0x2c, 0x7c, 0x04, 0x93, 0x0e, 0x46, 0x15, 0xbb, 0x2a, 0xb7, 0x1b, 0xe7, 0x87, 0x02, 0x40, 0x78, 0xda, 0x5d, 0x07, 0x51, 0x0c, 0x16, 0x7a, 0x9f, 0x29, 0x20, 0x84, 0x0d, 0x42, 0xfa, 0xd7, 0x00, 0xd8, 0x77, 0x7e, 0xb0, 0xb0, 0x6b, 0xd6, 0x5b, 0x53, 0xb8, 0x9b, 0x7a, 0xcd, 0xc7, 0x2b, 0xb8, 0x6a, 0x63, 0xa9, 0xfb, 0x6f, 0xa4, 0x72, 0xbf, 0x4c, 0x5d, 0x00, 0x14, 0xba, 0xfa, 0x59, 0x88, 0xed, 0xe4, 0xe0, 0x8c, 0xa2, 0xec, 0x14, 0x7e, 0x2d, 0xe2, 0xf0, 0x46, 0x49, 0x95, 0x45, }; static unsigned char test2048[] = { 0x30, 0x82, 0x04, 0xa3, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xc0, 0xc0, 0xce, 0x3e, 0x3c, 0x53, 0x67, 0x3f, 0x4f, 0xc5, 0x2f, 0xa4, 0xc2, 0x5a, 0x2f, 0x58, 0xfd, 0x27, 0x52, 0x6a, 0xe8, 0xcf, 0x4a, 0x73, 0x47, 0x8d, 0x25, 0x0f, 0x5f, 0x03, 0x26, 0x78, 0xef, 0xf0, 0x22, 0x12, 0xd3, 0xde, 0x47, 0xb2, 0x1c, 0x0b, 0x38, 0x63, 0x1a, 0x6c, 0x85, 0x7a, 0x80, 0xc6, 0x8f, 0xa0, 0x41, 0xaf, 0x62, 0xc4, 0x67, 0x32, 0x88, 0xf8, 0xa6, 0x9c, 0xf5, 0x23, 0x1d, 0xe4, 0xac, 0x3f, 0x29, 0xf9, 0xec, 0xe1, 0x8b, 0x26, 0x03, 0x2c, 0xb2, 0xab, 0xf3, 0x7d, 0xb5, 0xca, 0x49, 0xc0, 0x8f, 0x1c, 0xdf, 0x33, 0x3a, 0x60, 0xda, 0x3c, 0xb0, 0x16, 0xf8, 0xa9, 0x12, 0x8f, 0x64, 0xac, 0x23, 0x0c, 0x69, 0x64, 0x97, 0x5d, 0x99, 0xd4, 0x09, 0x83, 0x9b, 0x61, 0xd3, 0xac, 0xf0, 0xde, 0xdd, 0x5e, 0x9f, 0x44, 0x94, 0xdb, 0x3a, 0x4d, 0x97, 0xe8, 0x52, 0x29, 0xf7, 0xdb, 0x94, 0x07, 0x45, 0x90, 0x78, 0x1e, 0x31, 0x0b, 0x80, 0xf7, 0x57, 0xad, 0x1c, 0x79, 0xc5, 0xcb, 0x32, 0xb0, 0xce, 0xcd, 0x74, 0xb3, 0xe2, 0x94, 0xc5, 0x78, 0x2f, 0x34, 0x1a, 0x45, 0xf7, 0x8c, 0x52, 0xa5, 0xbc, 0x8d, 0xec, 0xd1, 0x2f, 0x31, 0x3b, 0xf0, 0x49, 0x59, 0x5e, 0x88, 0x9d, 0x15, 0x92, 0x35, 0x32, 0xc1, 0xe7, 0x61, 0xec, 0x50, 0x48, 0x7c, 0xba, 0x05, 0xf9, 0xf8, 0xf8, 0xa7, 0x8c, 0x83, 0xe8, 0x66, 0x5b, 0xeb, 0xfe, 0xd8, 0x4f, 0xdd, 0x6d, 0x36, 0xc0, 0xb2, 0x90, 0x0f, 0xb8, 0x52, 0xf9, 0x04, 0x9b, 0x40, 0x2c, 0x27, 0xd6, 0x36, 0x8e, 0xc2, 0x1b, 0x44, 0xf3, 0x92, 0xd5, 0x15, 0x9e, 0x9a, 0xbc, 0xf3, 0x7d, 0x03, 0xd7, 0x02, 0x14, 0x20, 0xe9, 0x10, 0x92, 0xfd, 0xf9, 0xfc, 0x8f, 0xe5, 0x18, 0xe1, 0x95, 0xcc, 0x9e, 0x60, 0xa6, 0xfa, 0x38, 0x4d, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01, 0x00, 0x00, 0xc3, 0xc3, 0x0d, 0xb4, 0x27, 0x90, 0x8d, 0x4b, 0xbf, 0xb8, 0x84, 0xaa, 0xd0, 0xb8, 0xc7, 0x5d, 0x99, 0xbe, 0x55, 0xf6, 0x3e, 0x7c, 0x49, 0x20, 0xcb, 0x8a, 0x8e, 0x19, 0x0e, 0x66, 0x24, 0xac, 0xaf, 0x03, 0x33, 0x97, 0xeb, 0x95, 0xd5, 0x3b, 0x0f, 0x40, 0x56, 0x04, 0x50, 0xd1, 0xe6, 0xbe, 0x84, 0x0b, 0x25, 0xd3, 0x9c, 0xe2, 0x83, 0x6c, 0xf5, 0x62, 0x5d, 0xba, 0x2b, 0x7d, 0x3d, 0x7a, 0x6c, 0xe1, 0xd2, 0x0e, 0x54, 0x93, 0x80, 0x01, 0x91, 0x51, 0x09, 0xe8, 0x5b, 0x8e, 0x47, 0xbd, 0x64, 0xe4, 0x0e, 0x03, 0x83, 0x55, 0xcf, 0x5a, 0x37, 0xf0, 0x25, 0xb5, 0x7d, 0x21, 0xd7, 0x69, 0xdf, 0x6f, 0xc2, 0xcf, 0x10, 0xc9, 0x8a, 0x40, 0x9f, 0x7a, 0x70, 0xc0, 0xe8, 0xe8, 0xc0, 0xe6, 0x9a, 0x15, 0x0a, 0x8d, 0x4e, 0x46, 0xcb, 0x7a, 0xdb, 0xb3, 0xcb, 0x83, 0x02, 0xc4, 0xf0, 0xab, 0xeb, 0x02, 0x01, 0x0e, 0x23, 0xfc, 0x1d, 0xc4, 0xbd, 0xd4, 0xaa, 0x5d, 0x31, 0x46, 0x99, 0xce, 0x9e, 0xf8, 0x04, 0x75, 0x10, 0x67, 0xc4, 0x53, 0x47, 0x44, 0xfa, 0xc2, 0x25, 0x73, 0x7e, 0xd0, 0x8e, 0x59, 0xd1, 0xb2, 0x5a, 0xf4, 0xc7, 0x18, 0x92, 0x2f, 0x39, 0xab, 0xcd, 0xa3, 0xb5, 0xc2, 0xb9, 0xc7, 0xb9, 0x1b, 0x9f, 0x48, 0xfa, 0x13, 0xc6, 0x98, 0x4d, 0xca, 0x84, 0x9c, 0x06, 0xca, 0xe7, 0x89, 0x01, 0x04, 0xc4, 0x6c, 0xfd, 0x29, 0x59, 0x35, 0xe7, 0xf3, 0xdd, 0xce, 0x64, 0x59, 0xbf, 0x21, 0x13, 0xa9, 0x9f, 0x0e, 0xc5, 0xff, 0xbd, 0x33, 0x00, 0xec, 0xac, 0x6b, 0x11, 0xef, 0x51, 0x5e, 0xad, 0x07, 0x15, 0xde, 0xb8, 0x5f, 0xc6, 0xb9, 0xa3, 0x22, 0x65, 0x46, 0x83, 0x14, 0xdf, 0xd0, 0xf1, 0x44, 0x8a, 0xe1, 0x9c, 0x23, 0x33, 0xb4, 0x97, 0x33, 0xe6, 0x6b, 0x81, 0x02, 0x81, 0x81, 0x00, 0xec, 0x12, 0xa7, 0x59, 0x74, 0x6a, 0xde, 0x3e, 0xad, 0xd8, 0x36, 0x80, 0x50, 0xa2, 0xd5, 0x21, 0x81, 0x07, 0xf1, 0xd0, 0x91, 0xf2, 0x6c, 0x12, 0x2f, 0x9d, 0x1a, 0x26, 0xf8, 0x30, 0x65, 0xdf, 0xe8, 0xc0, 0x9b, 0x6a, 0x30, 0x98, 0x82, 0x87, 0xec, 0xa2, 0x56, 0x87, 0x62, 0x6f, 0xe7, 0x9f, 0xf6, 0x56, 0xe6, 0x71, 0x8f, 0x49, 0x86, 0x93, 0x5a, 0x4d, 0x34, 0x58, 0xfe, 0xd9, 0x04, 0x13, 0xaf, 0x79, 0xb7, 0xad, 0x11, 0xd1, 0x30, 0x9a, 0x14, 0x06, 0xa0, 0xfa, 0xb7, 0x55, 0xdc, 0x6c, 0x5a, 0x4c, 0x2c, 0x59, 0x56, 0xf6, 0xe8, 0x9d, 0xaf, 0x0a, 0x78, 0x99, 0x06, 0x06, 0x9e, 0xe7, 0x9c, 0x51, 0x55, 0x43, 0xfc, 0x3b, 0x6c, 0x0b, 0xbf, 0x2d, 0x41, 0xa7, 0xaf, 0xb7, 0xe0, 0xe8, 0x28, 0x18, 0xb4, 0x13, 0xd1, 0xe6, 0x97, 0xd0, 0x9f, 0x6a, 0x80, 0xca, 0xdd, 0x1a, 0x7e, 0x15, 0x02, 0x81, 0x81, 0x00, 0xd1, 0x06, 0x0c, 0x1f, 0xe3, 0xd0, 0xab, 0xd6, 0xca, 0x7c, 0xbc, 0x7d, 0x13, 0x35, 0xce, 0x27, 0xcd, 0xd8, 0x49, 0x51, 0x63, 0x64, 0x0f, 0xca, 0x06, 0x12, 0xfc, 0x07, 0x3e, 0xaf, 0x61, 0x6d, 0xe2, 0x53, 0x39, 0x27, 0xae, 0xc3, 0x11, 0x9e, 0x94, 0x01, 0x4f, 0xe3, 0xf3, 0x67, 0xf9, 0x77, 0xf9, 0xe7, 0x95, 0x3a, 0x6f, 0xe2, 0x20, 0x73, 0x3e, 0xa4, 0x7a, 0x28, 0xd4, 0x61, 0x97, 0xf6, 0x17, 0xa0, 0x23, 0x10, 0x2b, 0xce, 0x84, 0x57, 0x7e, 0x25, 0x1f, 0xf4, 0xa8, 0x54, 0xd2, 0x65, 0x94, 0xcc, 0x95, 0x0a, 0xab, 0x30, 0xc1, 0x59, 0x1f, 0x61, 0x8e, 0xb9, 0x6b, 0xd7, 0x4e, 0xb9, 0x83, 0x43, 0x79, 0x85, 0x11, 0xbc, 0x0f, 0xae, 0x25, 0x20, 0x05, 0xbc, 0xd2, 0x48, 0xa1, 0x68, 0x09, 0x84, 0xf6, 0x12, 0x9a, 0x66, 0xb9, 0x2b, 0xbb, 0x76, 0x03, 0x17, 0x46, 0x4e, 0x97, 0x59, 0x02, 0x81, 0x80, 0x09, 0x4c, 0xfa, 0xd6, 0xe5, 0x65, 0x48, 0x78, 0x43, 0xb5, 0x1f, 0x00, 0x93, 0x2c, 0xb7, 0x24, 0xe8, 0xc6, 0x7d, 0x5a, 0x70, 0x45, 0x92, 0xc8, 0x6c, 0xa3, 0xcd, 0xe1, 0xf7, 0x29, 0x40, 0xfa, 0x3f, 0x5b, 0x47, 0x44, 0x39, 0xc1, 0xe8, 0x72, 0x9e, 0x7a, 0x0e, 0xda, 0xaa, 0xa0, 0x2a, 0x09, 0xfd, 0x54, 0x93, 0x23, 0xaa, 0x37, 0x85, 0x5b, 0xcc, 0xd4, 0xf9, 0xd8, 0xff, 0xc1, 0x61, 0x0d, 0xbd, 0x7e, 0x18, 0x24, 0x73, 0x6d, 0x40, 0x72, 0xf1, 0x93, 0x09, 0x48, 0x97, 0x6c, 0x84, 0x90, 0xa8, 0x46, 0x14, 0x01, 0x39, 0x11, 0xe5, 0x3c, 0x41, 0x27, 0x32, 0x75, 0x24, 0xed, 0xa1, 0xd9, 0x12, 0x29, 0x8a, 0x28, 0x71, 0x89, 0x8d, 0xca, 0x30, 0xb0, 0x01, 0xc4, 0x2f, 0x82, 0x19, 0x14, 0x4c, 0x70, 0x1c, 0xb8, 0x23, 0x2e, 0xe8, 0x90, 0x49, 0x97, 0x92, 0x97, 0x6b, 0x7a, 0x9d, 0xb9, 0x02, 0x81, 0x80, 0x0f, 0x0e, 0xa1, 0x76, 0xf6, 0xa1, 0x44, 0x8f, 0xaf, 0x7c, 0x76, 0xd3, 0x87, 0xbb, 0xbb, 0x83, 0x10, 0x88, 0x01, 0x18, 0x14, 0xd1, 0xd3, 0x75, 0x59, 0x24, 0xaa, 0xf5, 0x16, 0xa5, 0xe9, 0x9d, 0xd1, 0xcc, 0xee, 0xf4, 0x15, 0xd9, 0xc5, 0x7e, 0x27, 0xe9, 0x44, 0x49, 0x06, 0x72, 0xb9, 0xfc, 0xd3, 0x8a, 0xc4, 0x2c, 0x36, 0x7d, 0x12, 0x9b, 0x5a, 0xaa, 0xdc, 0x85, 0xee, 0x6e, 0xad, 0x54, 0xb3, 0xf4, 0xfc, 0x31, 0xa1, 0x06, 0x3a, 0x70, 0x57, 0x0c, 0xf3, 0x95, 0x5b, 0x3e, 0xe8, 0xfd, 0x1a, 0x4f, 0xf6, 0x78, 0x93, 0x46, 0x6a, 0xd7, 0x31, 0xb4, 0x84, 0x64, 0x85, 0x09, 0x38, 0x89, 0x92, 0x94, 0x1c, 0xbf, 0xe2, 0x3c, 0x2a, 0xe0, 0xff, 0x99, 0xa3, 0xf0, 0x2b, 0x31, 0xc2, 0x36, 0xcd, 0x60, 0xbf, 0x9d, 0x2d, 0x74, 0x32, 0xe8, 0x9c, 0x93, 0x6e, 0xbb, 0x91, 0x7b, 0xfd, 0xd9, 0x02, 0x81, 0x81, 0x00, 0xa2, 0x71, 0x25, 0x38, 0xeb, 0x2a, 0xe9, 0x37, 0xcd, 0xfe, 0x44, 0xce, 0x90, 0x3f, 0x52, 0x87, 0x84, 0x52, 0x1b, 0xae, 0x8d, 0x22, 0x94, 0xce, 0x38, 0xe6, 0x04, 0x88, 0x76, 0x85, 0x9a, 0xd3, 0x14, 0x09, 0xe5, 0x69, 0x9a, 0xff, 0x58, 0x92, 0x02, 0x6a, 0x7d, 0x7c, 0x1e, 0x2c, 0xfd, 0xa8, 0xca, 0x32, 0x14, 0x4f, 0x0d, 0x84, 0x0d, 0x37, 0x43, 0xbf, 0xe4, 0x5d, 0x12, 0xc8, 0x24, 0x91, 0x27, 0x8d, 0x46, 0xd9, 0x54, 0x53, 0xe7, 0x62, 0x71, 0xa8, 0x2b, 0x71, 0x41, 0x8d, 0x75, 0xf8, 0x3a, 0xa0, 0x61, 0x29, 0x46, 0xa6, 0xe5, 0x82, 0xfa, 0x3a, 0xd9, 0x08, 0xfa, 0xfc, 0x63, 0xfd, 0x6b, 0x30, 0xbc, 0xf4, 0x4e, 0x9e, 0x8c, 0x25, 0x0c, 0xb6, 0x55, 0xe7, 0x3c, 0xd4, 0x4e, 0x0b, 0xfd, 0x8b, 0xc3, 0x0e, 0x1d, 0x9c, 0x44, 0x57, 0x8f, 0x1f, 0x86, 0xf7, 0xd5, 0x1b, 0xe4, 0x95, }; static unsigned char test4096[] = { 0x30, 0x82, 0x09, 0x29, 0x02, 0x01, 0x00, 0x02, 0x82, 0x02, 0x01, 0x00, 0xc0, 0x71, 0xac, 0x1a, 0x13, 0x88, 0x82, 0x43, 0x3b, 0x51, 0x57, 0x71, 0x8d, 0xb6, 0x2b, 0x82, 0x65, 0x21, 0x53, 0x5f, 0x28, 0x29, 0x4f, 0x8d, 0x7c, 0x8a, 0xb9, 0x44, 0xb3, 0x28, 0x41, 0x4f, 0xd3, 0xfa, 0x6a, 0xf8, 0xb9, 0x28, 0x50, 0x39, 0x67, 0x53, 0x2c, 0x3c, 0xd7, 0xcb, 0x96, 0x41, 0x40, 0x32, 0xbb, 0xeb, 0x70, 0xae, 0x1f, 0xb0, 0x65, 0xf7, 0x3a, 0xd9, 0x22, 0xfd, 0x10, 0xae, 0xbd, 0x02, 0xe2, 0xdd, 0xf3, 0xc2, 0x79, 0x3c, 0xc6, 0xfc, 0x75, 0xbb, 0xaf, 0x4e, 0x3a, 0x36, 0xc2, 0x4f, 0xea, 0x25, 0xdf, 0x13, 0x16, 0x4b, 0x20, 0xfe, 0x4b, 0x69, 0x16, 0xc4, 0x7f, 0x1a, 0x43, 0xa6, 0x17, 0x1b, 0xb9, 0x0a, 0xf3, 0x09, 0x86, 0x28, 0x89, 0xcf, 0x2c, 0xd0, 0xd4, 0x81, 0xaf, 0xc6, 0x6d, 0xe6, 0x21, 0x8d, 0xee, 0xef, 0xea, 0xdc, 0xb7, 0xc6, 0x3b, 0x63, 0x9f, 0x0e, 0xad, 0x89, 0x78, 0x23, 0x18, 0xbf, 0x70, 0x7e, 0x84, 0xe0, 0x37, 0xec, 0xdb, 0x8e, 0x9c, 0x3e, 0x6a, 0x19, 0xcc, 0x99, 0x72, 0xe6, 0xb5, 0x7d, 0x6d, 0xfa, 0xe5, 0xd3, 0xe4, 0x90, 0xb5, 0xb2, 0xb2, 0x12, 0x70, 0x4e, 0xca, 0xf8, 0x10, 0xf8, 0xa3, 0x14, 0xc2, 0x48, 0x19, 0xeb, 0x60, 0x99, 0xbb, 0x2a, 0x1f, 0xb1, 0x7a, 0xb1, 0x3d, 0x24, 0xfb, 0xa0, 0x29, 0xda, 0xbd, 0x1b, 0xd7, 0xa4, 0xbf, 0xef, 0x60, 0x2d, 0x22, 0xca, 0x65, 0x98, 0xf1, 0xc4, 0xe1, 0xc9, 0x02, 0x6b, 0x16, 0x28, 0x2f, 0xa1, 0xaa, 0x79, 0x00, 0xda, 0xdc, 0x7c, 0x43, 0xf7, 0x42, 0x3c, 0xa0, 0xef, 0x68, 0xf7, 0xdf, 0xb9, 0x69, 0xfb, 0x8e, 0x01, 0xed, 0x01, 0x42, 0xb5, 0x4e, 0x57, 0xa6, 0x26, 0xb8, 0xd0, 0x7b, 0x56, 0x6d, 0x03, 0xc6, 0x40, 0x8c, 0x8c, 0x2a, 0x55, 0xd7, 0x9c, 0x35, 0x00, 0x94, 0x93, 0xec, 0x03, 0xeb, 0x22, 0xef, 0x77, 0xbb, 0x79, 0x13, 0x3f, 0x15, 0xa1, 0x8f, 0xca, 0xdf, 0xfd, 0xd3, 0xb8, 0xe1, 0xd4, 0xcc, 0x09, 0x3f, 0x3c, 0x2c, 0xdb, 0xd1, 0x49, 0x7f, 0x38, 0x07, 0x83, 0x6d, 0xeb, 0x08, 0x66, 0xe9, 0x06, 0x44, 0x12, 0xac, 0x95, 0x22, 0x90, 0x23, 0x67, 0xd4, 0x08, 0xcc, 0xf4, 0xb7, 0xdc, 0xcc, 0x87, 0xd4, 0xac, 0x69, 0x35, 0x4c, 0xb5, 0x39, 0x36, 0xcd, 0xa4, 0xd2, 0x95, 0xca, 0x0d, 0xc5, 0xda, 0xc2, 0xc5, 0x22, 0x32, 0x28, 0x08, 0xe3, 0xd2, 0x8b, 0x38, 0x30, 0xdc, 0x8c, 0x75, 0x4f, 0x6a, 0xec, 0x7a, 0xac, 0x16, 0x3e, 0xa8, 0xd4, 0x6a, 0x45, 0xe1, 0xa8, 0x4f, 0x2e, 0x80, 0x34, 0xaa, 0x54, 0x1b, 0x02, 0x95, 0x7d, 0x8a, 0x6d, 0xcc, 0x79, 0xca, 0xf2, 0xa4, 0x2e, 0x8d, 0xfb, 0xfe, 0x15, 0x51, 0x10, 0x0e, 0x4d, 0x88, 0xb1, 0xc7, 0xf4, 0x79, 0xdb, 0xf0, 0xb4, 0x56, 0x44, 0x37, 0xca, 0x5a, 0xc1, 0x8c, 0x48, 0xac, 0xae, 0x48, 0x80, 0x83, 0x01, 0x3f, 0xde, 0xd9, 0xd3, 0x2c, 0x51, 0x46, 0xb1, 0x41, 0xb6, 0xc6, 0x91, 0x72, 0xf9, 0x83, 0x55, 0x1b, 0x8c, 0xba, 0xf3, 0x73, 0xe5, 0x2c, 0x74, 0x50, 0x3a, 0xbe, 0xc5, 0x2f, 0xa7, 0xb2, 0x6d, 0x8c, 0x9e, 0x13, 0x77, 0xa3, 0x13, 0xcd, 0x6d, 0x8c, 0x45, 0xe1, 0xfc, 0x0b, 0xb7, 0x69, 0xe9, 0x27, 0xbc, 0x65, 0xc3, 0xfa, 0x9b, 0xd0, 0xef, 0xfe, 0xe8, 0x1f, 0xb3, 0x5e, 0x34, 0xf4, 0x8c, 0xea, 0xfc, 0xd3, 0x81, 0xbf, 0x3d, 0x30, 0xb2, 0xb4, 0x01, 0xe8, 0x43, 0x0f, 0xba, 0x02, 0x23, 0x42, 0x76, 0x82, 0x31, 0x73, 0x91, 0xed, 0x07, 0x46, 0x61, 0x0d, 0x39, 0x83, 0x40, 0xce, 0x7a, 0xd4, 0xdb, 0x80, 0x2c, 0x1f, 0x0d, 0xd1, 0x34, 0xd4, 0x92, 0xe3, 0xd4, 0xf1, 0xc2, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x02, 0x01, 0x00, 0x97, 0x6c, 0xda, 0x6e, 0xea, 0x4f, 0xcf, 0xaf, 0xf7, 0x4c, 0xd9, 0xf1, 0x90, 0x00, 0x77, 0xdb, 0xf2, 0x97, 0x76, 0x72, 0xb9, 0xb7, 0x47, 0xd1, 0x9c, 0xdd, 0xcb, 0x4a, 0x33, 0x6e, 0xc9, 0x75, 0x76, 0xe6, 0xe4, 0xa5, 0x31, 0x8c, 0x77, 0x13, 0xb4, 0x29, 0xcd, 0xf5, 0x52, 0x17, 0xef, 0xf3, 0x08, 0x00, 0xe3, 0xbd, 0x2e, 0xbc, 0xd4, 0x52, 0x88, 0xe9, 0x30, 0x75, 0x0b, 0x02, 0xf5, 0xcd, 0x89, 0x0c, 0x6c, 0x57, 0x19, 0x27, 0x3d, 0x1e, 0x85, 0xb4, 0xc1, 0x2f, 0x1d, 0x92, 0x00, 0x5c, 0x76, 0x29, 0x4b, 0xa4, 0xe1, 0x12, 0xb3, 0xc8, 0x09, 0xfe, 0x0e, 0x78, 0x72, 0x61, 0xcb, 0x61, 0x6f, 0x39, 0x91, 0x95, 0x4e, 0xd5, 0x3e, 0xc7, 0x8f, 0xb8, 0xf6, 0x36, 0xfe, 0x9c, 0x93, 0x9a, 0x38, 0x25, 0x7a, 0xf4, 0x4a, 0x12, 0xd4, 0xa0, 0x13, 0xbd, 0xf9, 0x1d, 0x12, 0x3e, 0x21, 0x39, 0xfb, 0x72, 0xe0, 0x05, 0x3d, 0xc3, 0xe5, 0x50, 0xa8, 0x5d, 0x85, 0xa3, 0xea, 0x5f, 0x1c, 0xb2, 0x3f, 0xea, 0x6d, 0x03, 0x91, 0x55, 0xd8, 0x19, 0x0a, 0x21, 0x12, 0x16, 0xd9, 0x12, 0xc4, 0xe6, 0x07, 0x18, 0x5b, 0x26, 0xa4, 0xae, 0xed, 0x2b, 0xb7, 0xa6, 0xed, 0xf8, 0xad, 0xec, 0x77, 0xe6, 0x7f, 0x4f, 0x76, 0x00, 0xc0, 0xfa, 0x15, 0x92, 0xb4, 0x2c, 0x22, 0xc2, 0xeb, 0x6a, 0xad, 0x14, 0x05, 0xb2, 0xe5, 0x8a, 0x9e, 0x85, 0x83, 0xcc, 0x04, 0xf1, 0x56, 0x78, 0x44, 0x5e, 0xde, 0xe0, 0x60, 0x1a, 0x65, 0x79, 0x31, 0x23, 0x05, 0xbb, 0x01, 0xff, 0xdd, 0x2e, 0xb7, 0xb3, 0xaa, 0x74, 0xe0, 0xa5, 0x94, 0xaf, 0x4b, 0xde, 0x58, 0x0f, 0x55, 0xde, 0x33, 0xf6, 0xe3, 0xd6, 0x34, 0x36, 0x57, 0xd6, 0x79, 0x91, 0x2e, 0xbe, 0x3b, 0xd9, 0x4e, 0xb6, 0x9d, 0x21, 0x5c, 0xd3, 0x48, 0x14, 0x7f, 0x4a, 0xc4, 0x60, 0xa9, 0x29, 0xf8, 0x53, 0x7f, 0x88, 0x11, 0x2d, 0xb5, 0xc5, 0x2d, 0x6f, 0xee, 0x85, 0x0b, 0xf7, 0x8d, 0x9a, 0xbe, 0xb0, 0x42, 0xf2, 0x2e, 0x71, 0xaf, 0x19, 0x31, 0x6d, 0xec, 0xcd, 0x6f, 0x2b, 0x23, 0xdf, 0xb4, 0x40, 0xaf, 0x2c, 0x0a, 0xc3, 0x1b, 0x7d, 0x7d, 0x03, 0x1d, 0x4b, 0xf3, 0xb5, 0xe0, 0x85, 0xd8, 0xdf, 0x91, 0x6b, 0x0a, 0x69, 0xf7, 0xf2, 0x69, 0x66, 0x5b, 0xf1, 0xcf, 0x46, 0x7d, 0xe9, 0x70, 0xfa, 0x6d, 0x7e, 0x75, 0x4e, 0xa9, 0x77, 0xe6, 0x8c, 0x02, 0xf7, 0x14, 0x4d, 0xa5, 0x41, 0x8f, 0x3f, 0xc1, 0x62, 0x1e, 0x71, 0x5e, 0x38, 0xb4, 0xd6, 0xe6, 0xe1, 0x4b, 0xc2, 0x2c, 0x30, 0x83, 0x81, 0x6f, 0x49, 0x2e, 0x96, 0xe6, 0xc9, 0x9a, 0xf7, 0x5d, 0x09, 0xa0, 0x55, 0x02, 0xa5, 0x3a, 0x25, 0x23, 0xd0, 0x92, 0xc3, 0xa3, 0xe3, 0x0e, 0x12, 0x2f, 0x4d, 0xef, 0xf3, 0x55, 0x5a, 0xbe, 0xe6, 0x19, 0x86, 0x31, 0xab, 0x75, 0x9a, 0xd3, 0xf0, 0x2c, 0xc5, 0x41, 0x92, 0xd9, 0x1f, 0x5f, 0x11, 0x8c, 0x75, 0x1c, 0x63, 0xd0, 0x02, 0x80, 0x2c, 0x68, 0xcb, 0x93, 0xfb, 0x51, 0x73, 0x49, 0xb4, 0x60, 0xda, 0xe2, 0x26, 0xaf, 0xa9, 0x46, 0x12, 0xb8, 0xec, 0x50, 0xdd, 0x12, 0x06, 0x5f, 0xce, 0x59, 0xe6, 0xf6, 0x1c, 0xe0, 0x54, 0x10, 0xad, 0xf6, 0xcd, 0x98, 0xcc, 0x0f, 0xfb, 0xcb, 0x41, 0x14, 0x9d, 0xed, 0xe4, 0xb4, 0x74, 0x5f, 0x09, 0x60, 0xc7, 0x12, 0xf6, 0x7b, 0x3c, 0x8f, 0xa7, 0x20, 0xbc, 0xe4, 0xb1, 0xef, 0xeb, 0xa4, 0x93, 0xc5, 0x06, 0xca, 0x9a, 0x27, 0x9d, 0x87, 0xf3, 0xde, 0xca, 0xe5, 0xe7, 0xf6, 0x1c, 0x01, 0x65, 0x5b, 0xfb, 0x19, 0x79, 0x6e, 0x08, 0x26, 0xc5, 0xc8, 0x28, 0x0e, 0xb6, 0x3b, 0x07, 0x08, 0xc1, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe8, 0x1c, 0x73, 0xa6, 0xb8, 0xe0, 0x0e, 0x6d, 0x8d, 0x1b, 0xb9, 0x53, 0xed, 0x58, 0x94, 0xe6, 0x1d, 0x60, 0x14, 0x5c, 0x76, 0x43, 0xc4, 0x58, 0x19, 0xc4, 0x24, 0xe8, 0xbc, 0x1b, 0x3b, 0x0b, 0x13, 0x24, 0x45, 0x54, 0x0e, 0xcc, 0x37, 0xf0, 0xe0, 0x63, 0x7d, 0xc3, 0xf7, 0xfb, 0x81, 0x74, 0x81, 0xc4, 0x0f, 0x1a, 0x21, 0x48, 0xaf, 0xce, 0xc1, 0xc4, 0x94, 0x18, 0x06, 0x44, 0x8d, 0xd3, 0xd2, 0x22, 0x2d, 0x2d, 0x3e, 0x5a, 0x31, 0xdc, 0x95, 0x8e, 0xf4, 0x41, 0xfc, 0x58, 0xc9, 0x40, 0x92, 0x17, 0x5f, 0xe3, 0xda, 0xac, 0x9e, 0x3f, 0x1c, 0x2a, 0x6b, 0x58, 0x5f, 0x48, 0x78, 0x20, 0xb1, 0xaf, 0x24, 0x9b, 0x3c, 0x20, 0x8b, 0x93, 0x25, 0x9e, 0xe6, 0x6b, 0xbc, 0x13, 0x42, 0x14, 0x6c, 0x36, 0x31, 0xff, 0x7a, 0xd1, 0xc1, 0x1a, 0x26, 0x14, 0x7f, 0xa9, 0x76, 0xa7, 0x0c, 0xf8, 0xcc, 0xed, 0x07, 0x6a, 0xd2, 0xdf, 0x62, 0xee, 0x0a, 0x7c, 0x84, 0xcb, 0x49, 0x90, 0xb2, 0x03, 0x0d, 0xa2, 0x82, 0x06, 0x77, 0xf1, 0xcd, 0x67, 0xf2, 0x47, 0x21, 0x02, 0x3f, 0x43, 0x21, 0xf0, 0x46, 0x30, 0x62, 0x51, 0x72, 0xb1, 0xe7, 0x48, 0xc6, 0x67, 0x12, 0xcd, 0x9e, 0xd6, 0x15, 0xe5, 0x21, 0xed, 0xfa, 0x8f, 0x30, 0xa6, 0x41, 0xfe, 0xb6, 0xfa, 0x8f, 0x34, 0x14, 0x19, 0xe8, 0x11, 0xf7, 0xa5, 0x77, 0x3e, 0xb7, 0xf9, 0x39, 0x07, 0x8c, 0x67, 0x2a, 0xab, 0x7b, 0x08, 0xf8, 0xb0, 0x06, 0xa8, 0xea, 0x2f, 0x8f, 0xfa, 0xcc, 0xcc, 0x40, 0xce, 0xf3, 0x70, 0x4f, 0x3f, 0x7f, 0xe2, 0x0c, 0xea, 0x76, 0x4a, 0x35, 0x4e, 0x47, 0xad, 0x2b, 0xa7, 0x97, 0x5d, 0x74, 0x43, 0x97, 0x90, 0xd2, 0xfb, 0xd9, 0xf9, 0x96, 0x01, 0x33, 0x05, 0xed, 0x7b, 0x03, 0x05, 0xad, 0xf8, 0x49, 0x03, 0x02, 0x82, 0x01, 0x01, 0x00, 0xd4, 0x40, 0x17, 0x66, 0x10, 0x92, 0x95, 0xc8, 0xec, 0x62, 0xa9, 0x7a, 0xcb, 0x93, 0x8e, 0xe6, 0x53, 0xd4, 0x80, 0x48, 0x27, 0x4b, 0x41, 0xce, 0x61, 0xdf, 0xbf, 0x94, 0xa4, 0x3d, 0x71, 0x03, 0x0b, 0xed, 0x25, 0x71, 0x98, 0xa4, 0xd6, 0xd5, 0x4a, 0x57, 0xf5, 0x6c, 0x1b, 0xda, 0x21, 0x7d, 0x35, 0x45, 0xb3, 0xf3, 0x6a, 0xd9, 0xd3, 0x43, 0xe8, 0x5c, 0x54, 0x1c, 0x83, 0x1b, 0xb4, 0x5f, 0xf2, 0x97, 0x24, 0x2e, 0xdc, 0x40, 0xde, 0x92, 0x23, 0x59, 0x8e, 0xbc, 0xd2, 0xa1, 0xf2, 0xe0, 0x4c, 0xdd, 0x0b, 0xd1, 0xe7, 0xae, 0x65, 0xbc, 0xb5, 0xf5, 0x5b, 0x98, 0xe9, 0xd7, 0xc2, 0xb7, 0x0e, 0x55, 0x71, 0x0e, 0x3c, 0x0a, 0x24, 0x6b, 0xa6, 0xe6, 0x14, 0x61, 0x11, 0xfd, 0x33, 0x42, 0x99, 0x2b, 0x84, 0x77, 0x74, 0x92, 0x91, 0xf5, 0x79, 0x79, 0xcf, 0xad, 0x8e, 0x04, 0xef, 0x80, 0x1e, 0x57, 0xf4, 0x14, 0xf5, 0x35, 0x09, 0x74, 0xb2, 0x13, 0x71, 0x58, 0x6b, 0xea, 0x32, 0x5d, 0xf3, 0xd3, 0x76, 0x48, 0x39, 0x10, 0x23, 0x84, 0x9d, 0xbe, 0x92, 0x77, 0x4a, 0xed, 0x70, 0x3e, 0x1a, 0xa2, 0x6c, 0xb3, 0x81, 0x00, 0xc3, 0xc9, 0xe4, 0x52, 0xc8, 0x24, 0x88, 0x0c, 0x41, 0xad, 0x87, 0x5a, 0xea, 0xa3, 0x7a, 0x85, 0x1c, 0x5e, 0x31, 0x7f, 0xc3, 0x35, 0xc6, 0xfa, 0x10, 0xc8, 0x75, 0x10, 0xc4, 0x96, 0x99, 0xe7, 0xfe, 0x01, 0xb4, 0x74, 0xdb, 0xb4, 0x11, 0xc3, 0xc8, 0x8c, 0xf6, 0xf7, 0x3b, 0x66, 0x50, 0xfc, 0xdb, 0xeb, 0xca, 0x47, 0x85, 0x89, 0xe1, 0x65, 0xd9, 0x62, 0x34, 0x3c, 0x70, 0xd8, 0x2e, 0xb4, 0x2f, 0x65, 0x3c, 0x4a, 0xa6, 0x2a, 0xe7, 0xc7, 0xd8, 0x41, 0x8f, 0x8a, 0x43, 0xbf, 0x42, 0xf2, 0x4d, 0xbc, 0xfc, 0x9e, 0x27, 0x95, 0xfb, 0x75, 0xff, 0xab, 0x02, 0x82, 0x01, 0x00, 0x41, 0x2f, 0x44, 0x57, 0x6d, 0x12, 0x17, 0x5b, 0x32, 0xc6, 0xb7, 0x6c, 0x57, 0x7a, 0x8a, 0x0e, 0x79, 0xef, 0x72, 0xa8, 0x68, 0xda, 0x2d, 0x38, 0xe4, 0xbb, 0x8d, 0xf6, 0x02, 0x65, 0xcf, 0x56, 0x13, 0xe1, 0x1a, 0xcb, 0x39, 0x80, 0xa6, 0xb1, 0x32, 0x03, 0x1e, 0xdd, 0xbb, 0x35, 0xd9, 0xac, 0x43, 0x89, 0x31, 0x08, 0x90, 0x92, 0x5e, 0x35, 0x3d, 0x7b, 0x9c, 0x6f, 0x86, 0xcb, 0x17, 0xdd, 0x85, 0xe4, 0xed, 0x35, 0x08, 0x8e, 0xc1, 0xf4, 0x05, 0xd8, 0x68, 0xc6, 0x63, 0x3c, 0xf7, 0xff, 0xf7, 0x47, 0x33, 0x39, 0xc5, 0x3e, 0xb7, 0x0e, 0x58, 0x35, 0x9d, 0x81, 0xea, 0xf8, 0x6a, 0x2c, 0x1c, 0x5a, 0x68, 0x78, 0x64, 0x11, 0x6b, 0xc1, 0x3e, 0x4e, 0x7a, 0xbd, 0x84, 0xcb, 0x0f, 0xc2, 0xb6, 0x85, 0x1d, 0xd3, 0x76, 0xc5, 0x93, 0x6a, 0x69, 0x89, 0x56, 0x34, 0xdc, 0x4a, 0x9b, 0xbc, 0xff, 0xa8, 0x0d, 0x6e, 0x35, 0x9c, 0x60, 0xa7, 0x23, 0x30, 0xc7, 0x06, 0x64, 0x39, 0x8b, 0x94, 0x89, 0xee, 0xba, 0x7f, 0x60, 0x8d, 0xfa, 0xb6, 0x97, 0x76, 0xdc, 0x51, 0x4a, 0x3c, 0xeb, 0x3a, 0x14, 0x2c, 0x20, 0x60, 0x69, 0x4a, 0x86, 0xfe, 0x8c, 0x21, 0x84, 0x49, 0x54, 0xb3, 0x20, 0xe1, 0x01, 0x7f, 0x58, 0xdf, 0x7f, 0xb5, 0x21, 0x51, 0x8c, 0x47, 0x9f, 0x91, 0xeb, 0x97, 0x3e, 0xf2, 0x54, 0xcf, 0x16, 0x46, 0xf9, 0xd9, 0xb6, 0xe7, 0x64, 0xc9, 0xd0, 0x54, 0xea, 0x2f, 0xa1, 0xcf, 0xa5, 0x7f, 0x28, 0x8d, 0x84, 0xec, 0xd5, 0x39, 0x03, 0x76, 0x5b, 0x2d, 0x8e, 0x43, 0xf2, 0x01, 0x24, 0xc9, 0x6f, 0xc0, 0xf5, 0x69, 0x6f, 0x7d, 0xb5, 0x85, 0xd2, 0x5f, 0x7f, 0x78, 0x40, 0x07, 0x7f, 0x09, 0x15, 0xb5, 0x1f, 0x28, 0x65, 0x10, 0xe4, 0x19, 0xa8, 0xc6, 0x9e, 0x8d, 0xdc, 0xcb, 0x02, 0x82, 0x01, 0x00, 0x13, 0x01, 0xee, 0x56, 0x80, 0x93, 0x70, 0x00, 0x7f, 0x52, 0xd2, 0x94, 0xa1, 0x98, 0x84, 0x4a, 0x92, 0x25, 0x4c, 0x9b, 0xa9, 0x91, 0x2e, 0xc2, 0x79, 0xb7, 0x5c, 0xe3, 0xc5, 0xd5, 0x8e, 0xc2, 0x54, 0x16, 0x17, 0xad, 0x55, 0x9b, 0x25, 0x76, 0x12, 0x63, 0x50, 0x22, 0x2f, 0x58, 0x58, 0x79, 0x6b, 0x04, 0xe3, 0xf9, 0x9f, 0x8f, 0x04, 0x41, 0x67, 0x94, 0xa5, 0x1f, 0xac, 0x8a, 0x15, 0x9c, 0x26, 0x10, 0x6c, 0xf8, 0x19, 0x57, 0x61, 0xd7, 0x3a, 0x7d, 0x31, 0xb0, 0x2d, 0x38, 0xbd, 0x94, 0x62, 0xad, 0xc4, 0xfa, 0x36, 0x42, 0x42, 0xf0, 0x24, 0x67, 0x65, 0x9d, 0x8b, 0x0b, 0x7c, 0x6f, 0x82, 0x44, 0x1a, 0x8c, 0xc8, 0xc9, 0xab, 0xbb, 0x4c, 0x45, 0xfc, 0x7b, 0x38, 0xee, 0x30, 0xe1, 0xfc, 0xef, 0x8d, 0xbc, 0x58, 0xdf, 0x2b, 0x5d, 0x0d, 0x54, 0xe0, 0x49, 0x4d, 0x97, 0x99, 0x8f, 0x22, 0xa8, 0x83, 0xbe, 0x40, 0xbb, 0x50, 0x2e, 0x78, 0x28, 0x0f, 0x95, 0x78, 0x8c, 0x8f, 0x98, 0x24, 0x56, 0xc2, 0x97, 0xf3, 0x2c, 0x43, 0xd2, 0x03, 0x82, 0x66, 0x81, 0x72, 0x5f, 0x53, 0x16, 0xec, 0xb1, 0xb1, 0x04, 0x5e, 0x40, 0x20, 0x48, 0x7b, 0x3f, 0x02, 0x97, 0x6a, 0xeb, 0x96, 0x12, 0x21, 0x35, 0xfe, 0x1f, 0x47, 0xc0, 0x95, 0xea, 0xc5, 0x8a, 0x08, 0x84, 0x4f, 0x5e, 0x63, 0x94, 0x60, 0x0f, 0x71, 0x5b, 0x7f, 0x4a, 0xec, 0x4f, 0x60, 0xc6, 0xba, 0x4a, 0x24, 0xf1, 0x20, 0x8b, 0xa7, 0x2e, 0x3a, 0xce, 0x8d, 0xe0, 0x27, 0x1d, 0xb5, 0x8e, 0xb4, 0x21, 0xc5, 0xe2, 0xa6, 0x16, 0x0a, 0x51, 0x83, 0x55, 0x88, 0xd1, 0x30, 0x11, 0x63, 0xd5, 0xd7, 0x8d, 0xae, 0x16, 0x12, 0x82, 0xc4, 0x85, 0x00, 0x4e, 0x27, 0x83, 0xa5, 0x7c, 0x90, 0x2e, 0xe5, 0xa2, 0xa3, 0xd3, 0x4c, 0x63, 0x02, 0x82, 0x01, 0x01, 0x00, 0x86, 0x08, 0x98, 0x98, 0xa5, 0x00, 0x05, 0x39, 0x77, 0xd9, 0x66, 0xb3, 0xcf, 0xca, 0xa0, 0x71, 0xb3, 0x50, 0xce, 0x3d, 0xb1, 0x93, 0x95, 0x35, 0xc4, 0xd4, 0x2e, 0x90, 0xdf, 0x0f, 0xfc, 0x60, 0xc1, 0x94, 0x68, 0x61, 0x43, 0xca, 0x9a, 0x23, 0x4a, 0x1e, 0x45, 0x72, 0x99, 0xb5, 0x1e, 0x61, 0x8d, 0x77, 0x0f, 0xa0, 0xbb, 0xd7, 0x77, 0xb4, 0x2a, 0x15, 0x11, 0x88, 0x2d, 0xb3, 0x56, 0x61, 0x5e, 0x6a, 0xed, 0xa4, 0x46, 0x4a, 0x3f, 0x50, 0x11, 0xd6, 0xba, 0xb6, 0xd7, 0x95, 0x65, 0x53, 0xc3, 0xa1, 0x8f, 0xe0, 0xa3, 0xf5, 0x1c, 0xfd, 0xaf, 0x6e, 0x43, 0xd7, 0x17, 0xa7, 0xd3, 0x81, 0x1b, 0xa4, 0xdf, 0xe0, 0x97, 0x8a, 0x46, 0x03, 0xd3, 0x46, 0x0e, 0x83, 0x48, 0x4e, 0xd2, 0x02, 0xcb, 0xc0, 0xad, 0x79, 0x95, 0x8c, 0x96, 0xba, 0x40, 0x34, 0x11, 0x71, 0x5e, 0xe9, 0x11, 0xf9, 0xc5, 0x4a, 0x5e, 0x91, 0x9d, 0xf5, 0x92, 0x4f, 0xeb, 0xc6, 0x70, 0x02, 0x2d, 0x3d, 0x04, 0xaa, 0xe9, 0x3a, 0x8e, 0xd5, 0xa8, 0xad, 0xf7, 0xce, 0x0d, 0x16, 0xb2, 0xec, 0x0a, 0x9c, 0xf5, 0x94, 0x39, 0xb9, 0x8a, 0xfc, 0x1e, 0xf9, 0xcc, 0xf2, 0x5f, 0x21, 0x31, 0x74, 0x72, 0x6b, 0x64, 0xae, 0x35, 0x61, 0x8d, 0x0d, 0xcb, 0xe7, 0xda, 0x39, 0xca, 0xf3, 0x21, 0x66, 0x0b, 0x95, 0xd7, 0x0a, 0x7c, 0xca, 0xa1, 0xa9, 0x5a, 0xe8, 0xac, 0xe0, 0x71, 0x54, 0xaf, 0x28, 0xcf, 0xd5, 0x70, 0x89, 0xe0, 0xf3, 0x9e, 0x43, 0x6c, 0x8d, 0x7b, 0x99, 0x01, 0x68, 0x4d, 0xa1, 0x45, 0x46, 0x0c, 0x43, 0xbc, 0xcc, 0x2c, 0xdd, 0xc5, 0x46, 0xc8, 0x4e, 0x0e, 0xbe, 0xed, 0xb9, 0x26, 0xab, 0x2e, 0xdb, 0xeb, 0x8f, 0xff, 0xdb, 0xb0, 0xc6, 0x55, 0xaf, 0xf8, 0x2a, 0x91, 0x9d, 0x50, 0x44, 0x21, 0x17, }; |
Added jni/libressl/apps/openssl/timeouts.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | /* $OpenBSD: timeouts.h,v 1.3 2014/06/12 15:49:27 deraadt Exp $ */ /* * DTLS implementation written by Nagendra Modadugu * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. */ /* ==================================================================== * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef INCLUDED_TIMEOUTS_H #define INCLUDED_TIMEOUTS_H /* numbers in us */ #define DGRAM_RCV_TIMEOUT 250000 #define DGRAM_SND_TIMEOUT 250000 #endif /* ! INCLUDED_TIMEOUTS_H */ |
Added jni/libressl/apps/openssl/ts.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 | /* $OpenBSD: ts.c,v 1.12 2015/10/17 07:51:10 semarie Exp $ */ /* Written by Zoltan Glozik (zglozik@stones.com) for the OpenSSL * project 2002. */ /* ==================================================================== * Copyright (c) 2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/pem.h> #include <openssl/ts.h> /* Length of the nonce of the request in bits (must be a multiple of 8). */ #define NONCE_LENGTH 64 /* Macro definitions for the configuration file. */ #define ENV_OID_FILE "oid_file" /* Local function declarations. */ static ASN1_OBJECT *txt2obj(const char *oid); static CONF *load_config_file(const char *configfile); /* Query related functions. */ static int query_command(const char *data, char *digest, const EVP_MD * md, const char *policy, int no_nonce, int cert, const char *in, const char *out, int text); static BIO *BIO_open_with_default(const char *file, const char *mode, FILE * default_fp); static TS_REQ *create_query(BIO * data_bio, char *digest, const EVP_MD * md, const char *policy, int no_nonce, int cert); static int create_digest(BIO * input, char *digest, const EVP_MD * md, unsigned char **md_value); static ASN1_INTEGER *create_nonce(int bits); /* Reply related functions. */ static int reply_command(CONF * conf, char *section, char *queryfile, char *passin, char *inkey, char *signer, char *chain, const char *policy, char *in, int token_in, char *out, int token_out, int text); static TS_RESP *read_PKCS7(BIO * in_bio); static TS_RESP *create_response(CONF * conf, const char *section, char *queryfile, char *passin, char *inkey, char *signer, char *chain, const char *policy); static ASN1_INTEGER *serial_cb(TS_RESP_CTX * ctx, void *data); static ASN1_INTEGER *next_serial(const char *serialfile); static int save_ts_serial(const char *serialfile, ASN1_INTEGER * serial); /* Verify related functions. */ static int verify_command(char *data, char *digest, char *queryfile, char *in, int token_in, char *ca_path, char *ca_file, char *untrusted); static TS_VERIFY_CTX *create_verify_ctx(char *data, char *digest, char *queryfile, char *ca_path, char *ca_file, char *untrusted); static X509_STORE *create_cert_store(char *ca_path, char *ca_file); static int verify_cb(int ok, X509_STORE_CTX * ctx); int ts_main(int argc, char **argv) { int ret = 1; char *configfile = NULL; char *section = NULL; CONF *conf = NULL; enum mode { CMD_NONE, CMD_QUERY, CMD_REPLY, CMD_VERIFY } mode = CMD_NONE; char *data = NULL; char *digest = NULL; const EVP_MD *md = NULL; char *policy = NULL; int no_nonce = 0; int cert = 0; char *in = NULL; char *out = NULL; int text = 0; char *queryfile = NULL; char *passin = NULL; /* Password source. */ char *password = NULL; /* Password itself. */ char *inkey = NULL; char *signer = NULL; char *chain = NULL; char *ca_path = NULL; char *ca_file = NULL; char *untrusted = NULL; /* Input is ContentInfo instead of TimeStampResp. */ int token_in = 0; /* Output is ContentInfo instead of TimeStampResp. */ int token_out = 0; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } for (argc--, argv++; argc > 0; argc--, argv++) { if (strcmp(*argv, "-config") == 0) { if (argc-- < 1) goto usage; configfile = *++argv; } else if (strcmp(*argv, "-section") == 0) { if (argc-- < 1) goto usage; section = *++argv; } else if (strcmp(*argv, "-query") == 0) { if (mode != CMD_NONE) goto usage; mode = CMD_QUERY; } else if (strcmp(*argv, "-data") == 0) { if (argc-- < 1) goto usage; data = *++argv; } else if (strcmp(*argv, "-digest") == 0) { if (argc-- < 1) goto usage; digest = *++argv; } else if (strcmp(*argv, "-policy") == 0) { if (argc-- < 1) goto usage; policy = *++argv; } else if (strcmp(*argv, "-no_nonce") == 0) { no_nonce = 1; } else if (strcmp(*argv, "-cert") == 0) { cert = 1; } else if (strcmp(*argv, "-in") == 0) { if (argc-- < 1) goto usage; in = *++argv; } else if (strcmp(*argv, "-token_in") == 0) { token_in = 1; } else if (strcmp(*argv, "-out") == 0) { if (argc-- < 1) goto usage; out = *++argv; } else if (strcmp(*argv, "-token_out") == 0) { token_out = 1; } else if (strcmp(*argv, "-text") == 0) { text = 1; } else if (strcmp(*argv, "-reply") == 0) { if (mode != CMD_NONE) goto usage; mode = CMD_REPLY; } else if (strcmp(*argv, "-queryfile") == 0) { if (argc-- < 1) goto usage; queryfile = *++argv; } else if (strcmp(*argv, "-passin") == 0) { if (argc-- < 1) goto usage; passin = *++argv; } else if (strcmp(*argv, "-inkey") == 0) { if (argc-- < 1) goto usage; inkey = *++argv; } else if (strcmp(*argv, "-signer") == 0) { if (argc-- < 1) goto usage; signer = *++argv; } else if (strcmp(*argv, "-chain") == 0) { if (argc-- < 1) goto usage; chain = *++argv; } else if (strcmp(*argv, "-verify") == 0) { if (mode != CMD_NONE) goto usage; mode = CMD_VERIFY; } else if (strcmp(*argv, "-CApath") == 0) { if (argc-- < 1) goto usage; ca_path = *++argv; } else if (strcmp(*argv, "-CAfile") == 0) { if (argc-- < 1) goto usage; ca_file = *++argv; } else if (strcmp(*argv, "-untrusted") == 0) { if (argc-- < 1) goto usage; untrusted = *++argv; } else if ((md = EVP_get_digestbyname(*argv + 1)) != NULL) { /* empty. */ } else goto usage; } /* Get the password if required. */ if (mode == CMD_REPLY && passin && !app_passwd(bio_err, passin, NULL, &password, NULL)) { BIO_printf(bio_err, "Error getting password.\n"); goto cleanup; } /* * Check consistency of parameters and execute the appropriate * function. */ switch (mode) { case CMD_NONE: goto usage; case CMD_QUERY: /* * Data file and message imprint cannot be specified at the * same time. */ ret = data != NULL && digest != NULL; if (ret) goto usage; /* Load the config file for possible policy OIDs. */ conf = load_config_file(configfile); ret = !query_command(data, digest, md, policy, no_nonce, cert, in, out, text); break; case CMD_REPLY: conf = load_config_file(configfile); if (in == NULL) { ret = !(queryfile != NULL && conf != NULL && !token_in); if (ret) goto usage; } else { /* 'in' and 'queryfile' are exclusive. */ ret = !(queryfile == NULL); if (ret) goto usage; } ret = !reply_command(conf, section, queryfile, password, inkey, signer, chain, policy, in, token_in, out, token_out, text); break; case CMD_VERIFY: ret = !(((queryfile && !data && !digest) || (!queryfile && data && !digest) || (!queryfile && !data && digest)) && in != NULL); if (ret) goto usage; ret = !verify_command(data, digest, queryfile, in, token_in, ca_path, ca_file, untrusted); } goto cleanup; usage: BIO_printf(bio_err, "usage:\n" "ts -query [-config configfile] " "[-data file_to_hash] [-digest digest_bytes]" "[-md4|-md5|-sha1|-ripemd160] " "[-policy object_id] [-no_nonce] [-cert] " "[-in request.tsq] [-out request.tsq] [-text]\n"); BIO_printf(bio_err, "or\n" "ts -reply [-config configfile] [-section tsa_section] " "[-queryfile request.tsq] [-passin password] " "[-signer tsa_cert.pem] [-inkey private_key.pem] " "[-chain certs_file.pem] [-policy object_id] " "[-in response.tsr] [-token_in] " "[-out response.tsr] [-token_out] [-text]\n"); BIO_printf(bio_err, "or\n" "ts -verify [-data file_to_hash] [-digest digest_bytes] " "[-queryfile request.tsq] " "-in response.tsr [-token_in] " "-CApath ca_path -CAfile ca_file.pem " "-untrusted cert_file.pem\n"); cleanup: /* Clean up. */ NCONF_free(conf); free(password); OBJ_cleanup(); return (ret); } /* * Configuration file-related function definitions. */ static ASN1_OBJECT * txt2obj(const char *oid) { ASN1_OBJECT *oid_obj = NULL; if (!(oid_obj = OBJ_txt2obj(oid, 0))) BIO_printf(bio_err, "cannot convert %s to OID\n", oid); return oid_obj; } static CONF * load_config_file(const char *configfile) { CONF *conf = NULL; long errorline = -1; if (!configfile) configfile = getenv("OPENSSL_CONF"); if (configfile && (!(conf = NCONF_new(NULL)) || NCONF_load(conf, configfile, &errorline) <= 0)) { if (errorline <= 0) BIO_printf(bio_err, "error loading the config file " "'%s'\n", configfile); else BIO_printf(bio_err, "error on line %ld of config file " "'%s'\n", errorline, configfile); } if (conf != NULL) { const char *p; BIO_printf(bio_err, "Using configuration from %s\n", configfile); p = NCONF_get_string(conf, NULL, ENV_OID_FILE); if (p != NULL) { BIO *oid_bio = BIO_new_file(p, "r"); if (!oid_bio) ERR_print_errors(bio_err); else { OBJ_create_objects(oid_bio); BIO_free_all(oid_bio); } } else ERR_clear_error(); if (!add_oid_section(bio_err, conf)) ERR_print_errors(bio_err); } return conf; } /* * Query-related method definitions. */ static int query_command(const char *data, char *digest, const EVP_MD * md, const char *policy, int no_nonce, int cert, const char *in, const char *out, int text) { int ret = 0; TS_REQ *query = NULL; BIO *in_bio = NULL; BIO *data_bio = NULL; BIO *out_bio = NULL; /* Build query object either from file or from scratch. */ if (in != NULL) { if ((in_bio = BIO_new_file(in, "rb")) == NULL) goto end; query = d2i_TS_REQ_bio(in_bio, NULL); } else { /* Open the file if no explicit digest bytes were specified. */ if (!digest && !(data_bio = BIO_open_with_default(data, "rb", stdin))) goto end; /* Creating the query object. */ query = create_query(data_bio, digest, md, policy, no_nonce, cert); /* Saving the random number generator state. */ } if (query == NULL) goto end; /* Write query either in ASN.1 or in text format. */ if ((out_bio = BIO_open_with_default(out, "wb", stdout)) == NULL) goto end; if (text) { /* Text output. */ if (!TS_REQ_print_bio(out_bio, query)) goto end; } else { /* ASN.1 output. */ if (!i2d_TS_REQ_bio(out_bio, query)) goto end; } ret = 1; end: ERR_print_errors(bio_err); /* Clean up. */ BIO_free_all(in_bio); BIO_free_all(data_bio); BIO_free_all(out_bio); TS_REQ_free(query); return ret; } static BIO * BIO_open_with_default(const char *file, const char *mode, FILE * default_fp) { return file == NULL ? BIO_new_fp(default_fp, BIO_NOCLOSE) : BIO_new_file(file, mode); } static TS_REQ * create_query(BIO * data_bio, char *digest, const EVP_MD * md, const char *policy, int no_nonce, int cert) { int ret = 0; TS_REQ *ts_req = NULL; int len; TS_MSG_IMPRINT *msg_imprint = NULL; X509_ALGOR *algo = NULL; unsigned char *data = NULL; ASN1_OBJECT *policy_obj = NULL; ASN1_INTEGER *nonce_asn1 = NULL; /* Setting default message digest. */ if (!md && !(md = EVP_get_digestbyname("sha1"))) goto err; /* Creating request object. */ if (!(ts_req = TS_REQ_new())) goto err; /* Setting version. */ if (!TS_REQ_set_version(ts_req, 1)) goto err; /* Creating and adding MSG_IMPRINT object. */ if (!(msg_imprint = TS_MSG_IMPRINT_new())) goto err; /* Adding algorithm. */ if (!(algo = X509_ALGOR_new())) goto err; if (!(algo->algorithm = OBJ_nid2obj(EVP_MD_type(md)))) goto err; if (!(algo->parameter = ASN1_TYPE_new())) goto err; algo->parameter->type = V_ASN1_NULL; if (!TS_MSG_IMPRINT_set_algo(msg_imprint, algo)) goto err; /* Adding message digest. */ if ((len = create_digest(data_bio, digest, md, &data)) == 0) goto err; if (!TS_MSG_IMPRINT_set_msg(msg_imprint, data, len)) goto err; if (!TS_REQ_set_msg_imprint(ts_req, msg_imprint)) goto err; /* Setting policy if requested. */ if (policy && !(policy_obj = txt2obj(policy))) goto err; if (policy_obj && !TS_REQ_set_policy_id(ts_req, policy_obj)) goto err; /* Setting nonce if requested. */ if (!no_nonce && !(nonce_asn1 = create_nonce(NONCE_LENGTH))) goto err; if (nonce_asn1 && !TS_REQ_set_nonce(ts_req, nonce_asn1)) goto err; /* Setting certificate request flag if requested. */ if (!TS_REQ_set_cert_req(ts_req, cert)) goto err; ret = 1; err: if (!ret) { TS_REQ_free(ts_req); ts_req = NULL; BIO_printf(bio_err, "could not create query\n"); } TS_MSG_IMPRINT_free(msg_imprint); X509_ALGOR_free(algo); free(data); ASN1_OBJECT_free(policy_obj); ASN1_INTEGER_free(nonce_asn1); return ts_req; } static int create_digest(BIO * input, char *digest, const EVP_MD * md, unsigned char **md_value) { int md_value_len; md_value_len = EVP_MD_size(md); if (md_value_len < 0) goto err; if (input) { /* Digest must be computed from an input file. */ EVP_MD_CTX md_ctx; unsigned char buffer[4096]; int length; *md_value = malloc(md_value_len); if (*md_value == 0) goto err; EVP_DigestInit(&md_ctx, md); while ((length = BIO_read(input, buffer, sizeof(buffer))) > 0) { EVP_DigestUpdate(&md_ctx, buffer, length); } EVP_DigestFinal(&md_ctx, *md_value, NULL); } else { /* Digest bytes are specified with digest. */ long digest_len; *md_value = string_to_hex(digest, &digest_len); if (!*md_value || md_value_len != digest_len) { free(*md_value); *md_value = NULL; BIO_printf(bio_err, "bad digest, %d bytes " "must be specified\n", md_value_len); goto err; } } return md_value_len; err: return 0; } static ASN1_INTEGER * create_nonce(int bits) { unsigned char buf[20]; ASN1_INTEGER *nonce = NULL; int len = (bits - 1) / 8 + 1; int i; /* Generating random byte sequence. */ if (len > (int) sizeof(buf)) goto err; arc4random_buf(buf, len); /* Find the first non-zero byte and creating ASN1_INTEGER object. */ for (i = 0; i < len && !buf[i]; ++i) ; if (!(nonce = ASN1_INTEGER_new())) goto err; free(nonce->data); /* Allocate at least one byte. */ nonce->length = len - i; if (!(nonce->data = malloc(nonce->length + 1))) goto err; memcpy(nonce->data, buf + i, nonce->length); return nonce; err: BIO_printf(bio_err, "could not create nonce\n"); ASN1_INTEGER_free(nonce); return NULL; } /* * Reply-related method definitions. */ static int reply_command(CONF * conf, char *section, char *queryfile, char *passin, char *inkey, char *signer, char *chain, const char *policy, char *in, int token_in, char *out, int token_out, int text) { int ret = 0; TS_RESP *response = NULL; BIO *in_bio = NULL; BIO *query_bio = NULL; BIO *inkey_bio = NULL; BIO *signer_bio = NULL; BIO *out_bio = NULL; /* Build response object either from response or query. */ if (in != NULL) { if ((in_bio = BIO_new_file(in, "rb")) == NULL) goto end; if (token_in) { /* * We have a ContentInfo (PKCS7) object, add * 'granted' status info around it. */ response = read_PKCS7(in_bio); } else { /* We have a ready-made TS_RESP object. */ response = d2i_TS_RESP_bio(in_bio, NULL); } } else { response = create_response(conf, section, queryfile, passin, inkey, signer, chain, policy); if (response) BIO_printf(bio_err, "Response has been generated.\n"); else BIO_printf(bio_err, "Response is not generated.\n"); } if (response == NULL) goto end; /* Write response either in ASN.1 or text format. */ if ((out_bio = BIO_open_with_default(out, "wb", stdout)) == NULL) goto end; if (text) { /* Text output. */ if (token_out) { TS_TST_INFO *tst_info = TS_RESP_get_tst_info(response); if (!TS_TST_INFO_print_bio(out_bio, tst_info)) goto end; } else { if (!TS_RESP_print_bio(out_bio, response)) goto end; } } else { /* ASN.1 DER output. */ if (token_out) { PKCS7 *token = TS_RESP_get_token(response); if (!i2d_PKCS7_bio(out_bio, token)) goto end; } else { if (!i2d_TS_RESP_bio(out_bio, response)) goto end; } } ret = 1; end: ERR_print_errors(bio_err); /* Clean up. */ BIO_free_all(in_bio); BIO_free_all(query_bio); BIO_free_all(inkey_bio); BIO_free_all(signer_bio); BIO_free_all(out_bio); TS_RESP_free(response); return ret; } /* Reads a PKCS7 token and adds default 'granted' status info to it. */ static TS_RESP * read_PKCS7(BIO * in_bio) { int ret = 0; PKCS7 *token = NULL; TS_TST_INFO *tst_info = NULL; TS_RESP *resp = NULL; TS_STATUS_INFO *si = NULL; /* Read PKCS7 object and extract the signed time stamp info. */ if (!(token = d2i_PKCS7_bio(in_bio, NULL))) goto end; if (!(tst_info = PKCS7_to_TS_TST_INFO(token))) goto end; /* Creating response object. */ if (!(resp = TS_RESP_new())) goto end; /* Create granted status info. */ if (!(si = TS_STATUS_INFO_new())) goto end; if (!(ASN1_INTEGER_set(si->status, TS_STATUS_GRANTED))) goto end; if (!TS_RESP_set_status_info(resp, si)) goto end; /* Setting encapsulated token. */ TS_RESP_set_tst_info(resp, token, tst_info); token = NULL; /* Ownership is lost. */ tst_info = NULL; /* Ownership is lost. */ ret = 1; end: PKCS7_free(token); TS_TST_INFO_free(tst_info); if (!ret) { TS_RESP_free(resp); resp = NULL; } TS_STATUS_INFO_free(si); return resp; } static TS_RESP * create_response(CONF * conf, const char *section, char *queryfile, char *passin, char *inkey, char *signer, char *chain, const char *policy) { int ret = 0; TS_RESP *response = NULL; BIO *query_bio = NULL; TS_RESP_CTX *resp_ctx = NULL; if (!(query_bio = BIO_new_file(queryfile, "rb"))) goto end; /* Getting TSA configuration section. */ if (!(section = TS_CONF_get_tsa_section(conf, section))) goto end; /* Setting up response generation context. */ if (!(resp_ctx = TS_RESP_CTX_new())) goto end; /* Setting serial number provider callback. */ if (!TS_CONF_set_serial(conf, section, serial_cb, resp_ctx)) goto end; /* Setting TSA signer certificate. */ if (!TS_CONF_set_signer_cert(conf, section, signer, resp_ctx)) goto end; /* Setting TSA signer certificate chain. */ if (!TS_CONF_set_certs(conf, section, chain, resp_ctx)) goto end; /* Setting TSA signer private key. */ if (!TS_CONF_set_signer_key(conf, section, inkey, passin, resp_ctx)) goto end; /* Setting default policy OID. */ if (!TS_CONF_set_def_policy(conf, section, policy, resp_ctx)) goto end; /* Setting acceptable policy OIDs. */ if (!TS_CONF_set_policies(conf, section, resp_ctx)) goto end; /* Setting the acceptable one-way hash algorithms. */ if (!TS_CONF_set_digests(conf, section, resp_ctx)) goto end; /* Setting guaranteed time stamp accuracy. */ if (!TS_CONF_set_accuracy(conf, section, resp_ctx)) goto end; /* Setting the precision of the time. */ if (!TS_CONF_set_clock_precision_digits(conf, section, resp_ctx)) goto end; /* Setting the ordering flaf if requested. */ if (!TS_CONF_set_ordering(conf, section, resp_ctx)) goto end; /* Setting the TSA name required flag if requested. */ if (!TS_CONF_set_tsa_name(conf, section, resp_ctx)) goto end; /* Setting the ESS cert id chain flag if requested. */ if (!TS_CONF_set_ess_cert_id_chain(conf, section, resp_ctx)) goto end; /* Creating the response. */ if (!(response = TS_RESP_create_response(resp_ctx, query_bio))) goto end; ret = 1; end: if (!ret) { TS_RESP_free(response); response = NULL; } TS_RESP_CTX_free(resp_ctx); BIO_free_all(query_bio); return response; } static ASN1_INTEGER * serial_cb(TS_RESP_CTX * ctx, void *data) { const char *serial_file = (const char *) data; ASN1_INTEGER *serial = next_serial(serial_file); if (!serial) { TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION, "Error during serial number " "generation."); TS_RESP_CTX_add_failure_info(ctx, TS_INFO_ADD_INFO_NOT_AVAILABLE); } else save_ts_serial(serial_file, serial); return serial; } static ASN1_INTEGER * next_serial(const char *serialfile) { int ret = 0; BIO *in = NULL; ASN1_INTEGER *serial = NULL; BIGNUM *bn = NULL; if (!(serial = ASN1_INTEGER_new())) goto err; if (!(in = BIO_new_file(serialfile, "r"))) { ERR_clear_error(); BIO_printf(bio_err, "Warning: could not open file %s for " "reading, using serial number: 1\n", serialfile); if (!ASN1_INTEGER_set(serial, 1)) goto err; } else { char buf[1024]; if (!a2i_ASN1_INTEGER(in, serial, buf, sizeof(buf))) { BIO_printf(bio_err, "unable to load number from %s\n", serialfile); goto err; } if (!(bn = ASN1_INTEGER_to_BN(serial, NULL))) goto err; ASN1_INTEGER_free(serial); serial = NULL; if (!BN_add_word(bn, 1)) goto err; if (!(serial = BN_to_ASN1_INTEGER(bn, NULL))) goto err; } ret = 1; err: if (!ret) { ASN1_INTEGER_free(serial); serial = NULL; } BIO_free_all(in); BN_free(bn); return serial; } static int save_ts_serial(const char *serialfile, ASN1_INTEGER * serial) { int ret = 0; BIO *out = NULL; if (!(out = BIO_new_file(serialfile, "w"))) goto err; if (i2a_ASN1_INTEGER(out, serial) <= 0) goto err; if (BIO_puts(out, "\n") <= 0) goto err; ret = 1; err: if (!ret) BIO_printf(bio_err, "could not save serial number to %s\n", serialfile); BIO_free_all(out); return ret; } /* * Verify-related method definitions. */ static int verify_command(char *data, char *digest, char *queryfile, char *in, int token_in, char *ca_path, char *ca_file, char *untrusted) { BIO *in_bio = NULL; PKCS7 *token = NULL; TS_RESP *response = NULL; TS_VERIFY_CTX *verify_ctx = NULL; int ret = 0; /* Decode the token (PKCS7) or response (TS_RESP) files. */ if (!(in_bio = BIO_new_file(in, "rb"))) goto end; if (token_in) { if (!(token = d2i_PKCS7_bio(in_bio, NULL))) goto end; } else { if (!(response = d2i_TS_RESP_bio(in_bio, NULL))) goto end; } if (!(verify_ctx = create_verify_ctx(data, digest, queryfile, ca_path, ca_file, untrusted))) goto end; /* Checking the token or response against the request. */ ret = token_in ? TS_RESP_verify_token(verify_ctx, token) : TS_RESP_verify_response(verify_ctx, response); end: printf("Verification: "); if (ret) printf("OK\n"); else { printf("FAILED\n"); /* Print errors, if there are any. */ ERR_print_errors(bio_err); } /* Clean up. */ BIO_free_all(in_bio); PKCS7_free(token); TS_RESP_free(response); TS_VERIFY_CTX_free(verify_ctx); return ret; } static TS_VERIFY_CTX * create_verify_ctx(char *data, char *digest, char *queryfile, char *ca_path, char *ca_file, char *untrusted) { TS_VERIFY_CTX *ctx = NULL; BIO *input = NULL; TS_REQ *request = NULL; int ret = 0; if (data != NULL || digest != NULL) { if (!(ctx = TS_VERIFY_CTX_new())) goto err; ctx->flags = TS_VFY_VERSION | TS_VFY_SIGNER; if (data != NULL) { ctx->flags |= TS_VFY_DATA; if (!(ctx->data = BIO_new_file(data, "rb"))) goto err; } else if (digest != NULL) { long imprint_len; ctx->flags |= TS_VFY_IMPRINT; if (!(ctx->imprint = string_to_hex(digest, &imprint_len))) { BIO_printf(bio_err, "invalid digest string\n"); goto err; } ctx->imprint_len = imprint_len; } } else if (queryfile != NULL) { /* * The request has just to be read, decoded and converted to * a verify context object. */ if (!(input = BIO_new_file(queryfile, "rb"))) goto err; if (!(request = d2i_TS_REQ_bio(input, NULL))) goto err; if (!(ctx = TS_REQ_to_TS_VERIFY_CTX(request, NULL))) goto err; } else return NULL; /* Add the signature verification flag and arguments. */ ctx->flags |= TS_VFY_SIGNATURE; /* Initialising the X509_STORE object. */ if (!(ctx->store = create_cert_store(ca_path, ca_file))) goto err; /* Loading untrusted certificates. */ if (untrusted && !(ctx->certs = TS_CONF_load_certs(untrusted))) goto err; ret = 1; err: if (!ret) { TS_VERIFY_CTX_free(ctx); ctx = NULL; } BIO_free_all(input); TS_REQ_free(request); return ctx; } static X509_STORE * create_cert_store(char *ca_path, char *ca_file) { X509_STORE *cert_ctx = NULL; X509_LOOKUP *lookup = NULL; int i; /* Creating the X509_STORE object. */ cert_ctx = X509_STORE_new(); /* Setting the callback for certificate chain verification. */ X509_STORE_set_verify_cb(cert_ctx, verify_cb); /* Adding a trusted certificate directory source. */ if (ca_path) { lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_hash_dir()); if (lookup == NULL) { BIO_printf(bio_err, "memory allocation failure\n"); goto err; } i = X509_LOOKUP_add_dir(lookup, ca_path, X509_FILETYPE_PEM); if (!i) { BIO_printf(bio_err, "Error loading directory %s\n", ca_path); goto err; } } /* Adding a trusted certificate file source. */ if (ca_file) { lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_file()); if (lookup == NULL) { BIO_printf(bio_err, "memory allocation failure\n"); goto err; } i = X509_LOOKUP_load_file(lookup, ca_file, X509_FILETYPE_PEM); if (!i) { BIO_printf(bio_err, "Error loading file %s\n", ca_file); goto err; } } return cert_ctx; err: X509_STORE_free(cert_ctx); return NULL; } static int verify_cb(int ok, X509_STORE_CTX * ctx) { /* char buf[256]; if (!ok) { X509_NAME_oneline(X509_get_subject_name(ctx->current_cert), buf, sizeof(buf)); printf("%s\n", buf); printf("error %d at %d depth lookup: %s\n", ctx->error, ctx->error_depth, X509_verify_cert_error_string(ctx->error)); } */ return ok; } |
Added jni/libressl/apps/openssl/verify.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 | /* $OpenBSD: verify.c,v 1.5 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "apps.h" #include <openssl/bio.h> #include <openssl/err.h> #include <openssl/pem.h> #include <openssl/x509.h> #include <openssl/x509v3.h> static int cb(int ok, X509_STORE_CTX * ctx); static int check(X509_STORE * ctx, char *file, STACK_OF(X509) * uchain, STACK_OF(X509) * tchain, STACK_OF(X509_CRL) * crls); static int v_verbose = 0, vflags = 0; int verify_main(int argc, char **argv) { int i, ret = 1, badarg = 0; char *CApath = NULL, *CAfile = NULL; char *untfile = NULL, *trustfile = NULL, *crlfile = NULL; STACK_OF(X509) * untrusted = NULL, *trusted = NULL; STACK_OF(X509_CRL) * crls = NULL; X509_STORE *cert_ctx = NULL; X509_LOOKUP *lookup = NULL; X509_VERIFY_PARAM *vpm = NULL; if (single_execution) { if (pledge("stdio rpath", NULL) == -1) { perror("pledge"); exit(1); } } cert_ctx = X509_STORE_new(); if (cert_ctx == NULL) goto end; X509_STORE_set_verify_cb(cert_ctx, cb); argc--; argv++; for (;;) { if (argc >= 1) { if (strcmp(*argv, "-CApath") == 0) { if (argc-- < 1) goto end; CApath = *(++argv); } else if (strcmp(*argv, "-CAfile") == 0) { if (argc-- < 1) goto end; CAfile = *(++argv); } else if (args_verify(&argv, &argc, &badarg, bio_err, &vpm)) { if (badarg) goto end; continue; } else if (strcmp(*argv, "-untrusted") == 0) { if (argc-- < 1) goto end; untfile = *(++argv); } else if (strcmp(*argv, "-trusted") == 0) { if (argc-- < 1) goto end; trustfile = *(++argv); } else if (strcmp(*argv, "-CRLfile") == 0) { if (argc-- < 1) goto end; crlfile = *(++argv); } else if (strcmp(*argv, "-help") == 0) goto end; else if (strcmp(*argv, "-verbose") == 0) v_verbose = 1; else if (argv[0][0] == '-') goto end; else break; argc--; argv++; } else break; } if (vpm) X509_STORE_set1_param(cert_ctx, vpm); lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_file()); if (lookup == NULL) abort(); if (CAfile) { i = X509_LOOKUP_load_file(lookup, CAfile, X509_FILETYPE_PEM); if (!i) { BIO_printf(bio_err, "Error loading file %s\n", CAfile); ERR_print_errors(bio_err); goto end; } } else X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT); lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_hash_dir()); if (lookup == NULL) abort(); if (CApath) { i = X509_LOOKUP_add_dir(lookup, CApath, X509_FILETYPE_PEM); if (!i) { BIO_printf(bio_err, "Error loading directory %s\n", CApath); ERR_print_errors(bio_err); goto end; } } else X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT); ERR_clear_error(); if (untfile) { untrusted = load_certs(bio_err, untfile, FORMAT_PEM, NULL, "untrusted certificates"); if (!untrusted) goto end; } if (trustfile) { trusted = load_certs(bio_err, trustfile, FORMAT_PEM, NULL, "trusted certificates"); if (!trusted) goto end; } if (crlfile) { crls = load_crls(bio_err, crlfile, FORMAT_PEM, NULL, "other CRLs"); if (!crls) goto end; } ret = 0; if (argc < 1) { if (1 != check(cert_ctx, NULL, untrusted, trusted, crls)) ret = -1; } else { for (i = 0; i < argc; i++) if (1 != check(cert_ctx, argv[i], untrusted, trusted, crls)) ret = -1; } end: if (ret == 1) { BIO_printf(bio_err, "usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]"); BIO_printf(bio_err, " [-attime timestamp]"); BIO_printf(bio_err, " cert1 cert2 ...\n"); BIO_printf(bio_err, "recognized usages:\n"); for (i = 0; i < X509_PURPOSE_get_count(); i++) { X509_PURPOSE *ptmp; ptmp = X509_PURPOSE_get0(i); BIO_printf(bio_err, "\t%-10s\t%s\n", X509_PURPOSE_get0_sname(ptmp), X509_PURPOSE_get0_name(ptmp)); } } if (vpm) X509_VERIFY_PARAM_free(vpm); if (cert_ctx != NULL) X509_STORE_free(cert_ctx); sk_X509_pop_free(untrusted, X509_free); sk_X509_pop_free(trusted, X509_free); sk_X509_CRL_pop_free(crls, X509_CRL_free); return (ret < 0 ? 2 : ret); } static int check(X509_STORE * ctx, char *file, STACK_OF(X509) * uchain, STACK_OF(X509) * tchain, STACK_OF(X509_CRL) * crls) { X509 *x = NULL; int i = 0, ret = 0; X509_STORE_CTX *csc; x = load_cert(bio_err, file, FORMAT_PEM, NULL, "certificate file"); if (x == NULL) goto end; fprintf(stdout, "%s: ", (file == NULL) ? "stdin" : file); csc = X509_STORE_CTX_new(); if (csc == NULL) { ERR_print_errors(bio_err); goto end; } X509_STORE_set_flags(ctx, vflags); if (!X509_STORE_CTX_init(csc, ctx, x, uchain)) { ERR_print_errors(bio_err); goto end; } if (tchain) X509_STORE_CTX_trusted_stack(csc, tchain); if (crls) X509_STORE_CTX_set0_crls(csc, crls); i = X509_verify_cert(csc); X509_STORE_CTX_free(csc); ret = 0; end: if (i > 0) { fprintf(stdout, "OK\n"); ret = 1; } else ERR_print_errors(bio_err); if (x != NULL) X509_free(x); return (ret); } static int cb(int ok, X509_STORE_CTX * ctx) { int cert_error = X509_STORE_CTX_get_error(ctx); X509 *current_cert = X509_STORE_CTX_get_current_cert(ctx); if (!ok) { if (current_cert) { X509_NAME_print_ex_fp(stdout, X509_get_subject_name(current_cert), 0, XN_FLAG_ONELINE); printf("\n"); } printf("%serror %d at %d depth lookup:%s\n", X509_STORE_CTX_get0_parent_ctx(ctx) ? "[CRL path]" : "", cert_error, X509_STORE_CTX_get_error_depth(ctx), X509_verify_cert_error_string(cert_error)); switch (cert_error) { case X509_V_ERR_NO_EXPLICIT_POLICY: policies_print(NULL, ctx); case X509_V_ERR_CERT_HAS_EXPIRED: /* * since we are just checking the certificates, it is * ok if they are self signed. But we should still * warn the user. */ case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: /* Continue after extension errors too */ case X509_V_ERR_INVALID_CA: case X509_V_ERR_INVALID_NON_CA: case X509_V_ERR_PATH_LENGTH_EXCEEDED: case X509_V_ERR_INVALID_PURPOSE: case X509_V_ERR_CRL_HAS_EXPIRED: case X509_V_ERR_CRL_NOT_YET_VALID: case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION: ok = 1; } return ok; } if (cert_error == X509_V_OK && ok == 2) policies_print(NULL, ctx); if (!v_verbose) ERR_clear_error(); return (ok); } |
Added jni/libressl/apps/openssl/version.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 | /* $OpenBSD: version.c,v 1.7 2015/10/10 22:28:51 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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 product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "apps.h" #include <openssl/bn.h> #include <openssl/crypto.h> #include <openssl/evp.h> #ifndef OPENSSL_NO_BF #include <openssl/blowfish.h> #endif #ifndef OPENSSL_NO_DES #include <openssl/des.h> #endif #ifndef OPENSSL_NO_IDEA #include <openssl/idea.h> #endif #ifndef OPENSSL_NO_RC4 #include <openssl/rc4.h> #endif static struct { int cflags; int date; int dir; int options; int platform; int version; } version_config; static int version_all_opts(void) { version_config.cflags = 1; version_config.date = 1; version_config.dir= 1; version_config.options = 1; version_config.platform = 1; version_config.version = 1; return (0); } static struct option version_options[] = { { .name = "a", .desc = "All information (same as setting all other flags)", .type = OPTION_FUNC, .opt.func = version_all_opts, }, { .name = "b", .desc = "Date the current version of OpenSSL was built", .type = OPTION_FLAG, .opt.flag = &version_config.date, }, { .name = "d", .desc = "OPENSSLDIR value", .type = OPTION_FLAG, .opt.flag = &version_config.dir, }, { .name = "f", .desc = "Compilation flags", .type = OPTION_FLAG, .opt.flag = &version_config.cflags, }, { .name = "o", .desc = "Option information", .type = OPTION_FLAG, .opt.flag = &version_config.options, }, { .name = "p", .desc = "Platform settings", .type = OPTION_FLAG, .opt.flag = &version_config.platform, }, { .name = "v", .desc = "Current OpenSSL version", .type = OPTION_FLAG, .opt.flag = &version_config.version, }, {NULL}, }; static void version_usage(void) { fprintf(stderr, "usage: version [-abdfopv]\n"); options_usage(version_options); } int version_main(int argc, char **argv) { if (single_execution) { if (pledge("stdio", NULL) == -1) { perror("pledge"); exit(1); } } memset(&version_config, 0, sizeof(version_config)); if (options_parse(argc, argv, version_options, NULL, NULL) != 0) { version_usage(); return (1); } if (argc == 1) version_config.version = 1; if (version_config.version) { if (SSLeay() == SSLEAY_VERSION_NUMBER) { printf("%s\n", SSLeay_version(SSLEAY_VERSION)); } else { printf("%s (Library: %s)\n", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION)); } } if (version_config.date) printf("%s\n", SSLeay_version(SSLEAY_BUILT_ON)); if (version_config.platform) printf("%s\n", SSLeay_version(SSLEAY_PLATFORM)); if (version_config.options) { printf("options: "); printf("%s ", BN_options()); #ifndef OPENSSL_NO_RC4 printf("%s ", RC4_options()); #endif #ifndef OPENSSL_NO_DES printf("%s ", DES_options()); #endif #ifndef OPENSSL_NO_IDEA printf("%s ", idea_options()); #endif #ifndef OPENSSL_NO_BF printf("%s ", BF_options()); #endif printf("\n"); } if (version_config.cflags) printf("%s\n", SSLeay_version(SSLEAY_CFLAGS)); if (version_config.dir) printf("%s\n", SSLeay_version(SSLEAY_DIR)); return (0); } |
Added jni/libressl/apps/openssl/x509.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 | /* $OpenBSD: x509.c,v 1.11 2015/10/17 07:51:10 semarie Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> #include "apps.h" #include <openssl/asn1.h> #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/objects.h> #include <openssl/pem.h> #include <openssl/x509.h> #include <openssl/x509v3.h> #include <openssl/dsa.h> #include <openssl/rsa.h> #define POSTFIX ".srl" #define DEF_DAYS 30 static const char *x509_usage[] = { "usage: x509 args\n", " -inform arg - input format - default PEM (one of DER, NET or PEM)\n", " -outform arg - output format - default PEM (one of DER, NET or PEM)\n", " -keyform arg - private key format - default PEM\n", " -CAform arg - CA format - default PEM\n", " -CAkeyform arg - CA key format - default PEM\n", " -in arg - input file - default stdin\n", " -out arg - output file - default stdout\n", " -passin arg - private key password source\n", " -serial - print serial number value\n", " -subject_hash - print subject hash value\n", #ifndef OPENSSL_NO_MD5 " -subject_hash_old - print old-style (MD5) subject hash value\n", #endif " -issuer_hash - print issuer hash value\n", #ifndef OPENSSL_NO_MD5 " -issuer_hash_old - print old-style (MD5) issuer hash value\n", #endif " -hash - synonym for -subject_hash\n", " -subject - print subject DN\n", " -issuer - print issuer DN\n", " -email - print email address(es)\n", " -startdate - notBefore field\n", " -enddate - notAfter field\n", " -purpose - print out certificate purposes\n", " -dates - both Before and After dates\n", " -modulus - print the RSA key modulus\n", " -pubkey - output the public key\n", " -fingerprint - print the certificate fingerprint\n", " -alias - output certificate alias\n", " -noout - no certificate output\n", " -ocspid - print OCSP hash values for the subject name and public key\n", " -ocsp_uri - print OCSP Responder URL(s)\n", " -trustout - output a \"trusted\" certificate\n", " -clrtrust - clear all trusted purposes\n", " -clrreject - clear all rejected purposes\n", " -addtrust arg - trust certificate for a given purpose\n", " -addreject arg - reject certificate for a given purpose\n", " -setalias arg - set certificate alias\n", " -days arg - How long till expiry of a signed certificate - def 30 days\n", " -checkend arg - check whether the cert expires in the next arg seconds\n", " exit 1 if so, 0 if not\n", " -signkey arg - self sign cert with arg\n", " -x509toreq - output a certification request object\n", " -req - input is a certificate request, sign and output.\n", " -CA arg - set the CA certificate, must be PEM format.\n", " -CAkey arg - set the CA key, must be PEM format\n", " missing, it is assumed to be in the CA file.\n", " -CAcreateserial - create serial number file if it does not exist\n", " -CAserial arg - serial file\n", " -set_serial - serial number to use\n", " -text - print the certificate in text form\n", " -C - print out C code forms\n", " -md5/-sha1 - digest to use\n", " -extfile - configuration file with X509V3 extensions to add\n", " -extensions - section from config file with X509V3 extensions to add\n", " -clrext - delete extensions before signing and input certificate\n", " -nameopt arg - various certificate name options\n", " -certopt arg - various certificate text options\n", NULL }; static int callb(int ok, X509_STORE_CTX *ctx); static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, const EVP_MD *digest, CONF *conf, char *section); static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest, X509 *x, X509 *xca, EVP_PKEY *pkey, STACK_OF(OPENSSL_STRING) *sigopts, char *serial, int create, int days, int clrext, CONF *conf, char *section, ASN1_INTEGER *sno); static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt); static int reqfile = 0; int x509_main(int argc, char **argv) { int ret = 1; X509_REQ *req = NULL; X509 *x = NULL, *xca = NULL; ASN1_OBJECT *objtmp; STACK_OF(OPENSSL_STRING) *sigopts = NULL; EVP_PKEY *Upkey = NULL, *CApkey = NULL; ASN1_INTEGER *sno = NULL; int i, num, badops = 0; BIO *out = NULL; BIO *STDout = NULL; STACK_OF(ASN1_OBJECT) *trust = NULL, *reject = NULL; int informat, outformat, keyformat, CAformat, CAkeyformat; char *infile = NULL, *outfile = NULL, *keyfile = NULL, *CAfile = NULL; char *CAkeyfile = NULL, *CAserial = NULL; char *alias = NULL; int text = 0, serial = 0, subject = 0, issuer = 0, startdate = 0, enddate = 0; int next_serial = 0; int subject_hash = 0, issuer_hash = 0, ocspid = 0; #ifndef OPENSSL_NO_MD5 int subject_hash_old = 0, issuer_hash_old = 0; #endif int noout = 0, sign_flag = 0, CA_flag = 0, CA_createserial = 0, email = 0; int ocsp_uri = 0; int trustout = 0, clrtrust = 0, clrreject = 0, aliasout = 0, clrext = 0; int C = 0; int x509req = 0, days = DEF_DAYS, modulus = 0, pubkey = 0; int pprint = 0; const char **pp; X509_STORE *ctx = NULL; X509_REQ *rq = NULL; int fingerprint = 0; char buf[256]; const EVP_MD *md_alg, *digest = NULL; CONF *extconf = NULL; char *extsect = NULL, *extfile = NULL, *passin = NULL, *passargin = NULL; int checkend = 0, checkoffset = 0; unsigned long nmflag = 0, certflag = 0; const char *errstr = NULL; if (single_execution) { if (pledge("stdio rpath wpath cpath tty", NULL) == -1) { perror("pledge"); exit(1); } } reqfile = 0; STDout = BIO_new_fp(stdout, BIO_NOCLOSE); informat = FORMAT_PEM; outformat = FORMAT_PEM; keyformat = FORMAT_PEM; CAformat = FORMAT_PEM; CAkeyformat = FORMAT_PEM; ctx = X509_STORE_new(); if (ctx == NULL) goto end; X509_STORE_set_verify_cb(ctx, callb); argc--; argv++; num = 0; while (argc >= 1) { if (strcmp(*argv, "-inform") == 0) { if (--argc < 1) goto bad; informat = str2fmt(*(++argv)); } else if (strcmp(*argv, "-outform") == 0) { if (--argc < 1) goto bad; outformat = str2fmt(*(++argv)); } else if (strcmp(*argv, "-keyform") == 0) { if (--argc < 1) goto bad; keyformat = str2fmt(*(++argv)); } else if (strcmp(*argv, "-req") == 0) { reqfile = 1; } else if (strcmp(*argv, "-CAform") == 0) { if (--argc < 1) goto bad; CAformat = str2fmt(*(++argv)); } else if (strcmp(*argv, "-CAkeyform") == 0) { if (--argc < 1) goto bad; CAkeyformat = str2fmt(*(++argv)); } else if (strcmp(*argv, "-sigopt") == 0) { if (--argc < 1) goto bad; if (!sigopts) sigopts = sk_OPENSSL_STRING_new_null(); if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv))) goto bad; } else if (strcmp(*argv, "-days") == 0) { if (--argc < 1) goto bad; days = strtonum(*(++argv), 1, INT_MAX, &errstr); if (errstr) { BIO_printf(bio_err, "bad number of days: %s\n", errstr); goto bad; } } else if (strcmp(*argv, "-passin") == 0) { if (--argc < 1) goto bad; passargin = *(++argv); } else if (strcmp(*argv, "-extfile") == 0) { if (--argc < 1) goto bad; extfile = *(++argv); } else if (strcmp(*argv, "-extensions") == 0) { if (--argc < 1) goto bad; extsect = *(++argv); } else if (strcmp(*argv, "-in") == 0) { if (--argc < 1) goto bad; infile = *(++argv); } else if (strcmp(*argv, "-out") == 0) { if (--argc < 1) goto bad; outfile = *(++argv); } else if (strcmp(*argv, "-signkey") == 0) { if (--argc < 1) goto bad; keyfile = *(++argv); sign_flag = ++num; } else if (strcmp(*argv, "-CA") == 0) { if (--argc < 1) goto bad; CAfile = *(++argv); CA_flag = ++num; } else if (strcmp(*argv, "-CAkey") == 0) { if (--argc < 1) goto bad; CAkeyfile = *(++argv); } else if (strcmp(*argv, "-CAserial") == 0) { if (--argc < 1) goto bad; CAserial = *(++argv); } else if (strcmp(*argv, "-set_serial") == 0) { if (--argc < 1) goto bad; ASN1_INTEGER_free(sno); if (!(sno = s2i_ASN1_INTEGER(NULL, *(++argv)))) goto bad; } else if (strcmp(*argv, "-addtrust") == 0) { if (--argc < 1) goto bad; if (!(objtmp = OBJ_txt2obj(*(++argv), 0))) { BIO_printf(bio_err, "Invalid trust object value %s\n", *argv); goto bad; } if (!trust) trust = sk_ASN1_OBJECT_new_null(); sk_ASN1_OBJECT_push(trust, objtmp); trustout = 1; } else if (strcmp(*argv, "-addreject") == 0) { if (--argc < 1) goto bad; if (!(objtmp = OBJ_txt2obj(*(++argv), 0))) { BIO_printf(bio_err, "Invalid reject object value %s\n", *argv); goto bad; } if (!reject) reject = sk_ASN1_OBJECT_new_null(); sk_ASN1_OBJECT_push(reject, objtmp); trustout = 1; } else if (strcmp(*argv, "-setalias") == 0) { if (--argc < 1) goto bad; alias = *(++argv); trustout = 1; } else if (strcmp(*argv, "-certopt") == 0) { if (--argc < 1) goto bad; if (!set_cert_ex(&certflag, *(++argv))) goto bad; } else if (strcmp(*argv, "-nameopt") == 0) { if (--argc < 1) goto bad; if (!set_name_ex(&nmflag, *(++argv))) goto bad; } else if (strcmp(*argv, "-C") == 0) C = ++num; else if (strcmp(*argv, "-email") == 0) email = ++num; else if (strcmp(*argv, "-ocsp_uri") == 0) ocsp_uri = ++num; else if (strcmp(*argv, "-serial") == 0) serial = ++num; else if (strcmp(*argv, "-next_serial") == 0) next_serial = ++num; else if (strcmp(*argv, "-modulus") == 0) modulus = ++num; else if (strcmp(*argv, "-pubkey") == 0) pubkey = ++num; else if (strcmp(*argv, "-x509toreq") == 0) x509req = ++num; else if (strcmp(*argv, "-text") == 0) text = ++num; else if (strcmp(*argv, "-hash") == 0 || strcmp(*argv, "-subject_hash") == 0) subject_hash = ++num; #ifndef OPENSSL_NO_MD5 else if (strcmp(*argv, "-subject_hash_old") == 0) subject_hash_old = ++num; #endif else if (strcmp(*argv, "-issuer_hash") == 0) issuer_hash = ++num; #ifndef OPENSSL_NO_MD5 else if (strcmp(*argv, "-issuer_hash_old") == 0) issuer_hash_old = ++num; #endif else if (strcmp(*argv, "-subject") == 0) subject = ++num; else if (strcmp(*argv, "-issuer") == 0) issuer = ++num; else if (strcmp(*argv, "-fingerprint") == 0) fingerprint = ++num; else if (strcmp(*argv, "-dates") == 0) { startdate = ++num; enddate = ++num; } else if (strcmp(*argv, "-purpose") == 0) pprint = ++num; else if (strcmp(*argv, "-startdate") == 0) startdate = ++num; else if (strcmp(*argv, "-enddate") == 0) enddate = ++num; else if (strcmp(*argv, "-checkend") == 0) { if (--argc < 1) goto bad; checkoffset = strtonum(*(++argv), 0, INT_MAX, &errstr); if (errstr) { BIO_printf(bio_err, "checkend unusable: %s\n", errstr); goto bad; } checkend = 1; } else if (strcmp(*argv, "-noout") == 0) noout = ++num; else if (strcmp(*argv, "-trustout") == 0) trustout = 1; else if (strcmp(*argv, "-clrtrust") == 0) clrtrust = ++num; else if (strcmp(*argv, "-clrreject") == 0) clrreject = ++num; else if (strcmp(*argv, "-alias") == 0) aliasout = ++num; else if (strcmp(*argv, "-CAcreateserial") == 0) CA_createserial = ++num; else if (strcmp(*argv, "-clrext") == 0) clrext = 1; else if (strcmp(*argv, "-ocspid") == 0) ocspid = ++num; else if ((md_alg = EVP_get_digestbyname(*argv + 1))) { /* ok */ digest = md_alg; } else { BIO_printf(bio_err, "unknown option %s\n", *argv); badops = 1; break; } argc--; argv++; } if (badops) { bad: for (pp = x509_usage; (*pp != NULL); pp++) BIO_printf(bio_err, "%s", *pp); goto end; } if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto end; } if (!X509_STORE_set_default_paths(ctx)) { ERR_print_errors(bio_err); goto end; } if ((CAkeyfile == NULL) && (CA_flag) && (CAformat == FORMAT_PEM)) { CAkeyfile = CAfile; } else if ((CA_flag) && (CAkeyfile == NULL)) { BIO_printf(bio_err, "need to specify a CAkey if using the CA command\n"); goto end; } if (extfile) { long errorline = -1; X509V3_CTX ctx2; extconf = NCONF_new(NULL); if (!NCONF_load(extconf, extfile, &errorline)) { if (errorline <= 0) BIO_printf(bio_err, "error loading the config file '%s'\n", extfile); else BIO_printf(bio_err, "error on line %ld of config file '%s'\n", errorline, extfile); goto end; } if (!extsect) { extsect = NCONF_get_string(extconf, "default", "extensions"); if (!extsect) { ERR_clear_error(); extsect = "default"; } } X509V3_set_ctx_test(&ctx2); X509V3_set_nconf(&ctx2, extconf); if (!X509V3_EXT_add_nconf(extconf, &ctx2, extsect, NULL)) { BIO_printf(bio_err, "Error Loading extension section %s\n", extsect); ERR_print_errors(bio_err); goto end; } } if (reqfile) { EVP_PKEY *pkey; BIO *in; if (!sign_flag && !CA_flag) { BIO_printf(bio_err, "We need a private key to sign with\n"); goto end; } in = BIO_new(BIO_s_file()); if (in == NULL) { ERR_print_errors(bio_err); goto end; } if (infile == NULL) BIO_set_fp(in, stdin, BIO_NOCLOSE | BIO_FP_TEXT); else { if (BIO_read_filename(in, infile) <= 0) { perror(infile); BIO_free(in); goto end; } } req = PEM_read_bio_X509_REQ(in, NULL, NULL, NULL); BIO_free(in); if (req == NULL) { ERR_print_errors(bio_err); goto end; } if ((req->req_info == NULL) || (req->req_info->pubkey == NULL) || (req->req_info->pubkey->public_key == NULL) || (req->req_info->pubkey->public_key->data == NULL)) { BIO_printf(bio_err, "The certificate request appears to corrupted\n"); BIO_printf(bio_err, "It does not contain a public key\n"); goto end; } if ((pkey = X509_REQ_get_pubkey(req)) == NULL) { BIO_printf(bio_err, "error unpacking public key\n"); goto end; } i = X509_REQ_verify(req, pkey); EVP_PKEY_free(pkey); if (i < 0) { BIO_printf(bio_err, "Signature verification error\n"); ERR_print_errors(bio_err); goto end; } if (i == 0) { BIO_printf(bio_err, "Signature did not match the certificate request\n"); goto end; } else BIO_printf(bio_err, "Signature ok\n"); print_name(bio_err, "subject=", X509_REQ_get_subject_name(req), nmflag); if ((x = X509_new()) == NULL) goto end; if (sno == NULL) { sno = ASN1_INTEGER_new(); if (!sno || !rand_serial(NULL, sno)) goto end; if (!X509_set_serialNumber(x, sno)) goto end; ASN1_INTEGER_free(sno); sno = NULL; } else if (!X509_set_serialNumber(x, sno)) goto end; if (!X509_set_issuer_name(x, req->req_info->subject)) goto end; if (!X509_set_subject_name(x, req->req_info->subject)) goto end; X509_gmtime_adj(X509_get_notBefore(x), 0); X509_time_adj_ex(X509_get_notAfter(x), days, 0, NULL); pkey = X509_REQ_get_pubkey(req); X509_set_pubkey(x, pkey); EVP_PKEY_free(pkey); } else x = load_cert(bio_err, infile, informat, NULL, "Certificate"); if (x == NULL) goto end; if (CA_flag) { xca = load_cert(bio_err, CAfile, CAformat, NULL, "CA Certificate"); if (xca == NULL) goto end; } if (!noout || text || next_serial) { OBJ_create("2.99999.3", "SET.ex3", "SET x509v3 extension 3"); out = BIO_new(BIO_s_file()); if (out == NULL) { ERR_print_errors(bio_err); goto end; } if (outfile == NULL) { BIO_set_fp(out, stdout, BIO_NOCLOSE); } else { if (BIO_write_filename(out, outfile) <= 0) { perror(outfile); goto end; } } } if (alias) X509_alias_set1(x, (unsigned char *) alias, -1); if (clrtrust) X509_trust_clear(x); if (clrreject) X509_reject_clear(x); if (trust) { for (i = 0; i < sk_ASN1_OBJECT_num(trust); i++) { objtmp = sk_ASN1_OBJECT_value(trust, i); X509_add1_trust_object(x, objtmp); } } if (reject) { for (i = 0; i < sk_ASN1_OBJECT_num(reject); i++) { objtmp = sk_ASN1_OBJECT_value(reject, i); X509_add1_reject_object(x, objtmp); } } if (num) { for (i = 1; i <= num; i++) { if (issuer == i) { print_name(STDout, "issuer= ", X509_get_issuer_name(x), nmflag); } else if (subject == i) { print_name(STDout, "subject= ", X509_get_subject_name(x), nmflag); } else if (serial == i) { BIO_printf(STDout, "serial="); i2a_ASN1_INTEGER(STDout, X509_get_serialNumber(x)); BIO_printf(STDout, "\n"); } else if (next_serial == i) { BIGNUM *bnser; ASN1_INTEGER *ser; ser = X509_get_serialNumber(x); bnser = ASN1_INTEGER_to_BN(ser, NULL); if (!bnser) goto end; if (!BN_add_word(bnser, 1)) goto end; ser = BN_to_ASN1_INTEGER(bnser, NULL); if (!ser) goto end; BN_free(bnser); i2a_ASN1_INTEGER(out, ser); ASN1_INTEGER_free(ser); BIO_puts(out, "\n"); } else if ((email == i) || (ocsp_uri == i)) { int j; STACK_OF(OPENSSL_STRING) *emlst; if (email == i) emlst = X509_get1_email(x); else emlst = X509_get1_ocsp(x); for (j = 0; j < sk_OPENSSL_STRING_num(emlst); j++) BIO_printf(STDout, "%s\n", sk_OPENSSL_STRING_value(emlst, j)); X509_email_free(emlst); } else if (aliasout == i) { unsigned char *alstr; alstr = X509_alias_get0(x, NULL); if (alstr) BIO_printf(STDout, "%s\n", alstr); else BIO_puts(STDout, "<No Alias>\n"); } else if (subject_hash == i) { BIO_printf(STDout, "%08lx\n", X509_subject_name_hash(x)); } #ifndef OPENSSL_NO_MD5 else if (subject_hash_old == i) { BIO_printf(STDout, "%08lx\n", X509_subject_name_hash_old(x)); } #endif else if (issuer_hash == i) { BIO_printf(STDout, "%08lx\n", X509_issuer_name_hash(x)); } #ifndef OPENSSL_NO_MD5 else if (issuer_hash_old == i) { BIO_printf(STDout, "%08lx\n", X509_issuer_name_hash_old(x)); } #endif else if (pprint == i) { X509_PURPOSE *ptmp; int j; BIO_printf(STDout, "Certificate purposes:\n"); for (j = 0; j < X509_PURPOSE_get_count(); j++) { ptmp = X509_PURPOSE_get0(j); purpose_print(STDout, x, ptmp); } } else if (modulus == i) { EVP_PKEY *pkey; pkey = X509_get_pubkey(x); if (pkey == NULL) { BIO_printf(bio_err, "Modulus=unavailable\n"); ERR_print_errors(bio_err); goto end; } BIO_printf(STDout, "Modulus="); if (pkey->type == EVP_PKEY_RSA) BN_print(STDout, pkey->pkey.rsa->n); else if (pkey->type == EVP_PKEY_DSA) BN_print(STDout, pkey->pkey.dsa->pub_key); else BIO_printf(STDout, "Wrong Algorithm type"); BIO_printf(STDout, "\n"); EVP_PKEY_free(pkey); } else if (pubkey == i) { EVP_PKEY *pkey; pkey = X509_get_pubkey(x); if (pkey == NULL) { BIO_printf(bio_err, "Error getting public key\n"); ERR_print_errors(bio_err); goto end; } PEM_write_bio_PUBKEY(STDout, pkey); EVP_PKEY_free(pkey); } else if (C == i) { unsigned char *d; char *m; int y, z; X509_NAME_oneline(X509_get_subject_name(x), buf, sizeof buf); BIO_printf(STDout, "/* subject:%s */\n", buf); m = X509_NAME_oneline( X509_get_issuer_name(x), buf, sizeof buf); BIO_printf(STDout, "/* issuer :%s */\n", buf); z = i2d_X509(x, NULL); m = malloc(z); if (m == NULL) { BIO_printf(bio_err, "out of mem\n"); goto end; } d = (unsigned char *) m; z = i2d_X509_NAME(X509_get_subject_name(x), &d); BIO_printf(STDout, "unsigned char XXX_subject_name[%d]={\n", z); d = (unsigned char *) m; for (y = 0; y < z; y++) { BIO_printf(STDout, "0x%02X,", d[y]); if ((y & 0x0f) == 0x0f) BIO_printf(STDout, "\n"); } if (y % 16 != 0) BIO_printf(STDout, "\n"); BIO_printf(STDout, "};\n"); z = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &d); BIO_printf(STDout, "unsigned char XXX_public_key[%d]={\n", z); d = (unsigned char *) m; for (y = 0; y < z; y++) { BIO_printf(STDout, "0x%02X,", d[y]); if ((y & 0x0f) == 0x0f) BIO_printf(STDout, "\n"); } if (y % 16 != 0) BIO_printf(STDout, "\n"); BIO_printf(STDout, "};\n"); z = i2d_X509(x, &d); BIO_printf(STDout, "unsigned char XXX_certificate[%d]={\n", z); d = (unsigned char *) m; for (y = 0; y < z; y++) { BIO_printf(STDout, "0x%02X,", d[y]); if ((y & 0x0f) == 0x0f) BIO_printf(STDout, "\n"); } if (y % 16 != 0) BIO_printf(STDout, "\n"); BIO_printf(STDout, "};\n"); free(m); } else if (text == i) { X509_print_ex(STDout, x, nmflag, certflag); } else if (startdate == i) { BIO_puts(STDout, "notBefore="); ASN1_TIME_print(STDout, X509_get_notBefore(x)); BIO_puts(STDout, "\n"); } else if (enddate == i) { BIO_puts(STDout, "notAfter="); ASN1_TIME_print(STDout, X509_get_notAfter(x)); BIO_puts(STDout, "\n"); } else if (fingerprint == i) { int j; unsigned int n; unsigned char md[EVP_MAX_MD_SIZE]; const EVP_MD *fdig = digest; if (!fdig) fdig = EVP_sha1(); if (!X509_digest(x, fdig, md, &n)) { BIO_printf(bio_err, "out of memory\n"); goto end; } BIO_printf(STDout, "%s Fingerprint=", OBJ_nid2sn(EVP_MD_type(fdig))); for (j = 0; j < (int) n; j++) { BIO_printf(STDout, "%02X%c", md[j], (j + 1 == (int)n) ? '\n' : ':'); } } /* should be in the library */ else if ((sign_flag == i) && (x509req == 0)) { BIO_printf(bio_err, "Getting Private key\n"); if (Upkey == NULL) { Upkey = load_key(bio_err, keyfile, keyformat, 0, passin, "Private key"); if (Upkey == NULL) goto end; } if (!sign(x, Upkey, days, clrext, digest, extconf, extsect)) goto end; } else if (CA_flag == i) { BIO_printf(bio_err, "Getting CA Private Key\n"); if (CAkeyfile != NULL) { CApkey = load_key(bio_err, CAkeyfile, CAkeyformat, 0, passin, "CA Private Key"); if (CApkey == NULL) goto end; } if (!x509_certify(ctx, CAfile, digest, x, xca, CApkey, sigopts, CAserial, CA_createserial, days, clrext, extconf, extsect, sno)) goto end; } else if (x509req == i) { EVP_PKEY *pk; BIO_printf(bio_err, "Getting request Private Key\n"); if (keyfile == NULL) { BIO_printf(bio_err, "no request key file specified\n"); goto end; } else { pk = load_key(bio_err, keyfile, keyformat, 0, passin, "request key"); if (pk == NULL) goto end; } BIO_printf(bio_err, "Generating certificate request\n"); rq = X509_to_X509_REQ(x, pk, digest); EVP_PKEY_free(pk); if (rq == NULL) { ERR_print_errors(bio_err); goto end; } if (!noout) { X509_REQ_print(out, rq); PEM_write_bio_X509_REQ(out, rq); } noout = 1; } else if (ocspid == i) { X509_ocspid_print(out, x); } } } if (checkend) { time_t tcheck = time(NULL) + checkoffset; if (X509_cmp_time(X509_get_notAfter(x), &tcheck) < 0) { BIO_printf(out, "Certificate will expire\n"); ret = 1; } else { BIO_printf(out, "Certificate will not expire\n"); ret = 0; } goto end; } if (noout) { ret = 0; goto end; } if (outformat == FORMAT_ASN1) i = i2d_X509_bio(out, x); else if (outformat == FORMAT_PEM) { if (trustout) i = PEM_write_bio_X509_AUX(out, x); else i = PEM_write_bio_X509(out, x); } else if (outformat == FORMAT_NETSCAPE) { NETSCAPE_X509 nx; ASN1_OCTET_STRING hdr; hdr.data = (unsigned char *) NETSCAPE_CERT_HDR; hdr.length = strlen(NETSCAPE_CERT_HDR); nx.header = &hdr; nx.cert = x; i = ASN1_item_i2d_bio(ASN1_ITEM_rptr(NETSCAPE_X509), out, &nx); } else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } if (!i) { BIO_printf(bio_err, "unable to write certificate\n"); ERR_print_errors(bio_err); goto end; } ret = 0; end: OBJ_cleanup(); NCONF_free(extconf); BIO_free_all(out); BIO_free_all(STDout); X509_STORE_free(ctx); X509_REQ_free(req); X509_free(x); X509_free(xca); EVP_PKEY_free(Upkey); EVP_PKEY_free(CApkey); if (sigopts) sk_OPENSSL_STRING_free(sigopts); X509_REQ_free(rq); ASN1_INTEGER_free(sno); sk_ASN1_OBJECT_pop_free(trust, ASN1_OBJECT_free); sk_ASN1_OBJECT_pop_free(reject, ASN1_OBJECT_free); free(passin); return (ret); } static ASN1_INTEGER * x509_load_serial(char *CAfile, char *serialfile, int create) { char *buf = NULL, *p; ASN1_INTEGER *bs = NULL; BIGNUM *serial = NULL; size_t len; len = ((serialfile == NULL) ? (strlen(CAfile) + strlen(POSTFIX) + 1) : (strlen(serialfile))) + 1; buf = malloc(len); if (buf == NULL) { BIO_printf(bio_err, "out of mem\n"); goto end; } if (serialfile == NULL) { strlcpy(buf, CAfile, len); for (p = buf; *p; p++) if (*p == '.') { *p = '\0'; break; } strlcat(buf, POSTFIX, len); } else strlcpy(buf, serialfile, len); serial = load_serial(buf, create, NULL); if (serial == NULL) goto end; if (!BN_add_word(serial, 1)) { BIO_printf(bio_err, "add_word failure\n"); goto end; } if (!save_serial(buf, NULL, serial, &bs)) goto end; end: free(buf); BN_free(serial); return bs; } static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest, X509 *x, X509 *xca, EVP_PKEY *pkey, STACK_OF(OPENSSL_STRING) *sigopts, char *serialfile, int create, int days, int clrext, CONF *conf, char *section, ASN1_INTEGER *sno) { int ret = 0; ASN1_INTEGER *bs = NULL; X509_STORE_CTX xsc; EVP_PKEY *upkey; upkey = X509_get_pubkey(xca); EVP_PKEY_copy_parameters(upkey, pkey); EVP_PKEY_free(upkey); if (!X509_STORE_CTX_init(&xsc, ctx, x, NULL)) { BIO_printf(bio_err, "Error initialising X509 store\n"); goto end; } if (sno) bs = sno; else if (!(bs = x509_load_serial(CAfile, serialfile, create))) goto end; /* if (!X509_STORE_add_cert(ctx,x)) goto end;*/ /* * NOTE: this certificate can/should be self signed, unless it was a * certificate request in which case it is not. */ X509_STORE_CTX_set_cert(&xsc, x); X509_STORE_CTX_set_flags(&xsc, X509_V_FLAG_CHECK_SS_SIGNATURE); if (!reqfile && X509_verify_cert(&xsc) <= 0) goto end; if (!X509_check_private_key(xca, pkey)) { BIO_printf(bio_err, "CA certificate and CA private key do not match\n"); goto end; } if (!X509_set_issuer_name(x, X509_get_subject_name(xca))) goto end; if (!X509_set_serialNumber(x, bs)) goto end; if (X509_gmtime_adj(X509_get_notBefore(x), 0L) == NULL) goto end; /* hardwired expired */ if (X509_time_adj_ex(X509_get_notAfter(x), days, 0, NULL) == NULL) goto end; if (clrext) { while (X509_get_ext_count(x) > 0) X509_delete_ext(x, 0); } if (conf) { X509V3_CTX ctx2; X509_set_version(x, 2); /* version 3 certificate */ X509V3_set_ctx(&ctx2, xca, x, NULL, NULL, 0); X509V3_set_nconf(&ctx2, conf); if (!X509V3_EXT_add_nconf(conf, &ctx2, section, x)) goto end; } if (!do_X509_sign(bio_err, x, pkey, digest, sigopts)) goto end; ret = 1; end: X509_STORE_CTX_cleanup(&xsc); if (!ret) ERR_print_errors(bio_err); if (!sno) ASN1_INTEGER_free(bs); return ret; } static int callb(int ok, X509_STORE_CTX *ctx) { int err; X509 *err_cert; /* * it is ok to use a self signed certificate This case will catch * both the initial ok == 0 and the final ok == 1 calls to this * function */ err = X509_STORE_CTX_get_error(ctx); if (err == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) return 1; /* * BAD we should have gotten an error. Normally if everything worked * X509_STORE_CTX_get_error(ctx) will still be set to * DEPTH_ZERO_SELF_.... */ if (ok) { BIO_printf(bio_err, "error with certificate to be certified - should be self signed\n"); return 0; } else { err_cert = X509_STORE_CTX_get_current_cert(ctx); print_name(bio_err, NULL, X509_get_subject_name(err_cert), 0); BIO_printf(bio_err, "error with certificate - error %d at depth %d\n%s\n", err, X509_STORE_CTX_get_error_depth(ctx), X509_verify_cert_error_string(err)); return 1; } } /* self sign */ static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, const EVP_MD *digest, CONF *conf, char *section) { EVP_PKEY *pktmp; pktmp = X509_get_pubkey(x); EVP_PKEY_copy_parameters(pktmp, pkey); EVP_PKEY_save_parameters(pktmp, 1); EVP_PKEY_free(pktmp); if (!X509_set_issuer_name(x, X509_get_subject_name(x))) goto err; if (X509_gmtime_adj(X509_get_notBefore(x), 0) == NULL) goto err; /* Lets just make it 12:00am GMT, Jan 1 1970 */ /* memcpy(x->cert_info->validity->notBefore,"700101120000Z",13); */ /* 28 days to be certified */ if (X509_gmtime_adj(X509_get_notAfter(x), (long) 60 * 60 * 24 * days) == NULL) goto err; if (!X509_set_pubkey(x, pkey)) goto err; if (clrext) { while (X509_get_ext_count(x) > 0) X509_delete_ext(x, 0); } if (conf) { X509V3_CTX ctx; X509_set_version(x, 2); /* version 3 certificate */ X509V3_set_ctx(&ctx, x, x, NULL, NULL, 0); X509V3_set_nconf(&ctx, conf); if (!X509V3_EXT_add_nconf(conf, &ctx, section, x)) goto err; } if (!X509_sign(x, pkey, digest)) goto err; return 1; err: ERR_print_errors(bio_err); return 0; } static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt) { int id, i, idret; char *pname; id = X509_PURPOSE_get_id(pt); pname = X509_PURPOSE_get0_name(pt); for (i = 0; i < 2; i++) { idret = X509_check_purpose(cert, id, i); BIO_printf(bio, "%s%s : ", pname, i ? " CA" : ""); if (idret == 1) BIO_printf(bio, "Yes\n"); else if (idret == 0) BIO_printf(bio, "No\n"); else BIO_printf(bio, "Yes (WARNING code=%d)\n", idret); } return 1; } |
Added jni/libressl/apps/openssl/x509v3.cnf.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | # default settings CERTPATHLEN = 1 CERTUSAGE = digitalSignature,keyCertSign,cRLSign EXTCERTUSAGE = serverAuth,clientAuth CERTIP = 0.0.0.0 CERTFQDN = nohost.nodomain # This section should be referenced when building an x509v3 CA # Certificate. # The default path length and the key usage can be overridden # modified by setting the CERTPATHLEN and CERTUSAGE environment # variables. [x509v3_CA] basicConstraints=critical,CA:true,pathlen:$ENV::CERTPATHLEN keyUsage=$ENV::CERTUSAGE # This section should be referenced to add an IP Address # as an alternate subject name, needed by isakmpd # The address must be provided in the CERTIP environment variable [x509v3_IPAddr] subjectAltName=IP:$ENV::CERTIP extendedKeyUsage=$ENV::EXTCERTUSAGE # This section should be referenced to add a FQDN hostname # as an alternate subject name, needed by isakmpd # The address must be provided in the CERTFQDN environment variable [x509v3_FQDN] subjectAltName=DNS:$ENV::CERTFQDN extendedKeyUsage=$ENV::EXTCERTUSAGE |
Deleted jni/libressl/apps/passwd.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/pkcs12.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/pkcs7.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/pkcs8.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/pkey.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/pkeyparam.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/pkeyutl.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/poll_win.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/prime.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/progs.h.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/rand.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/req.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/rsa.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/rsautl.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/s_apps.h.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/s_cb.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/s_client.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/s_server.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/s_socket.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/s_time.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/sess_id.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/smime.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/speed.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/spkac.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/strtonum.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/testdsa.h.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/testrsa.h.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/timeouts.h.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/ts.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/verify.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/version.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/x509.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/apps/x509v3.cnf.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added jni/libressl/cmake_uninstall.cmake.in.
> > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) string(REGEX REPLACE "\n" ";" files "${files}") foreach(file ${files}) message(STATUS "Uninstalling $ENV{DESTDIR}${file}") if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") exec_program( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) if(NOT "${rm_retval}" STREQUAL 0) message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") endif(NOT "${rm_retval}" STREQUAL 0) else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") message(STATUS "File $ENV{DESTDIR}${file} does not exist.") endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") endforeach(file) |
Changes to jni/libressl/config.guess.
1 2 | #! /bin/sh # Attempt to guess a canonical system name. | | | | 1 2 3 4 5 6 7 8 9 10 11 12 | #! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-12-14' # 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 program is distributed in the hope that it will be useful, but |
︙ | ︙ | |||
46 47 48 49 50 51 52 | Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. | | | 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." |
︙ | ︙ | |||
164 165 166 167 168 169 170 | # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" | > | | > > > > > > | > > > > > > > | | | 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 | # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || \ echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` |
︙ | ︙ | |||
231 232 233 234 235 236 237 238 239 240 241 242 243 244 | exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` | > > > | 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 | exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; *:Sortix:*:*) echo ${UNAME_MACHINE}-unknown-sortix exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` |
︙ | ︙ | |||
929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 | exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) | > > > > > > | 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 | exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; k1om:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) |
︙ | ︙ | |||
1017 1018 1019 1020 1021 1022 1023 | tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) | | | 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 | tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both |
︙ | ︙ | |||
1096 1097 1098 1099 1100 1101 1102 | fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub | | | 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 | fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) |
︙ | ︙ | |||
1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 | echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 <<EOF $0: unable to guess system type This script, last modified $timestamp, has failed to recognize | > > > | 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 | echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac cat >&2 <<EOF $0: unable to guess system type This script, last modified $timestamp, has failed to recognize |
︙ | ︙ |
Changes to jni/libressl/config.sub.
1 2 | #! /bin/sh # Configuration validation subroutine script. | | | | 1 2 3 4 5 6 7 8 9 10 11 12 | #! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-12-14' # 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 program is distributed in the hope that it will be useful, but |
︙ | ︙ | |||
49 50 51 52 53 54 55 | # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ | | < | | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." |
︙ | ︙ | |||
113 114 115 116 117 118 119 | # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ | | | 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android |
︙ | ︙ | |||
251 252 253 254 255 256 257 258 259 260 261 | | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | > | | | 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ |
︙ | ︙ | |||
301 302 303 304 305 306 307 | | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | | | 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 | | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ |
︙ | ︙ | |||
372 373 374 375 376 377 378 379 380 381 382 383 | | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | > | | 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 | | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ |
︙ | ︙ | |||
424 425 426 427 428 429 430 431 432 433 434 435 | | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | > | | 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 | | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ |
︙ | ︙ | |||
514 515 516 517 518 519 520 521 522 523 524 525 526 527 | basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix | > > > | 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 | basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix |
︙ | ︙ | |||
1369 1370 1371 1372 1373 1374 1375 | # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | | | > | 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 | # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) |
︙ | ︙ |
Changes to jni/libressl/configure.
1 2 | #! /bin/sh # Guess values for system-dependent variables and create Makefiles. | | | 1 2 3 4 5 6 7 8 9 10 | #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for libressl 2.4.3. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. |
︙ | ︙ | |||
583 584 585 586 587 588 589 | subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libressl' PACKAGE_TARNAME='libressl' | | | | 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 | subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libressl' PACKAGE_TARNAME='libressl' PACKAGE_VERSION='2.4.3' PACKAGE_STRING='libressl 2.4.3' PACKAGE_BUGREPORT='' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include <stdio.h> #ifdef HAVE_SYS_TYPES_H |
︙ | ︙ | |||
628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 | # include <unistd.h> #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS HOST_ASM_MACOSX_X86_64_FALSE HOST_ASM_MACOSX_X86_64_TRUE HOST_ASM_ELF_X86_64_FALSE HOST_ASM_ELF_X86_64_TRUE OPENSSL_NO_ASM_FALSE OPENSSL_NO_ASM_TRUE ENABLE_EXTRATESTS_FALSE ENABLE_EXTRATESTS_TRUE OPENSSLDIR_DEFINED_FALSE OPENSSLDIR_DEFINED_TRUE OPENSSLDIR HAVE_TIMINGSAFE_MEMCMP_FALSE HAVE_TIMINGSAFE_MEMCMP_TRUE HAVE_TIMINGSAFE_BCMP_FALSE HAVE_TIMINGSAFE_BCMP_TRUE HAVE_GETENTROPY_FALSE HAVE_GETENTROPY_TRUE HAVE_EXPLICIT_BZERO_FALSE HAVE_EXPLICIT_BZERO_TRUE HAVE_ARC4RANDOM_BUF_FALSE HAVE_ARC4RANDOM_BUF_TRUE HAVE_STRTONUM_FALSE HAVE_STRTONUM_TRUE HAVE_STRSEP_FALSE HAVE_STRSEP_TRUE HAVE_STRNLEN_FALSE HAVE_STRNLEN_TRUE HAVE_STRNDUP_FALSE HAVE_STRNDUP_TRUE HAVE_STRLCPY_FALSE HAVE_STRLCPY_TRUE HAVE_STRLCAT_FALSE HAVE_STRLCAT_TRUE HAVE_REALLOCARRAY_FALSE HAVE_REALLOCARRAY_TRUE | > > > > > > > > > > > > > > > > | | > > > > > > | 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 | # include <unistd.h> #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS SMALL_TIME_T_FALSE SMALL_TIME_T_TRUE HOST_ASM_MACOSX_X86_64_FALSE HOST_ASM_MACOSX_X86_64_TRUE HOST_ASM_ELF_X86_64_FALSE HOST_ASM_ELF_X86_64_TRUE OPENSSL_NO_ASM_FALSE OPENSSL_NO_ASM_TRUE ENABLE_EXTRATESTS_FALSE ENABLE_EXTRATESTS_TRUE OPENSSLDIR_DEFINED_FALSE OPENSSLDIR_DEFINED_TRUE OPENSSLDIR HAVE_B64_NTOP_FALSE HAVE_B64_NTOP_TRUE HAVE_TIMINGSAFE_MEMCMP_FALSE HAVE_TIMINGSAFE_MEMCMP_TRUE HAVE_TIMINGSAFE_BCMP_FALSE HAVE_TIMINGSAFE_BCMP_TRUE HAVE_GETENTROPY_FALSE HAVE_GETENTROPY_TRUE HAVE_EXPLICIT_BZERO_FALSE HAVE_EXPLICIT_BZERO_TRUE HAVE_ARC4RANDOM_UNIFORM_FALSE HAVE_ARC4RANDOM_UNIFORM_TRUE HAVE_ARC4RANDOM_BUF_FALSE HAVE_ARC4RANDOM_BUF_TRUE HAVE_ARC4RANDOM_FALSE HAVE_ARC4RANDOM_TRUE HAVE_POLL_FALSE HAVE_POLL_TRUE HAVE_PLEDGE_FALSE HAVE_PLEDGE_TRUE HAVE_ACCEPT4_FALSE HAVE_ACCEPT4_TRUE HAVE_TIMEGM_FALSE HAVE_TIMEGM_TRUE HAVE_STRTONUM_FALSE HAVE_STRTONUM_TRUE HAVE_STRSEP_FALSE HAVE_STRSEP_TRUE HAVE_STRNLEN_FALSE HAVE_STRNLEN_TRUE HAVE_STRNDUP_FALSE HAVE_STRNDUP_TRUE HAVE_STRLCPY_FALSE HAVE_STRLCPY_TRUE HAVE_STRLCAT_FALSE HAVE_STRLCAT_TRUE HAVE_REALLOCARRAY_FALSE HAVE_REALLOCARRAY_TRUE HAVE_READPASSPHRASE_FALSE HAVE_READPASSPHRASE_TRUE HAVE_MEMMEM_FALSE HAVE_MEMMEM_TRUE HAVE_INET_PTON_FALSE HAVE_INET_PTON_TRUE HAVE_ASPRINTF_FALSE HAVE_ASPRINTF_TRUE BUILD_CERTHASH_FALSE BUILD_CERTHASH_TRUE am__fastdepCCAS_FALSE am__fastdepCCAS_TRUE CCASDEPMODE CCASFLAGS CCAS HOST_WIN_FALSE HOST_WIN_TRUE HOST_SOLARIS_FALSE HOST_SOLARIS_TRUE HOST_OPENBSD_FALSE HOST_OPENBSD_TRUE HOST_NETBSD_FALSE HOST_NETBSD_TRUE HOST_LINUX_FALSE HOST_LINUX_TRUE HOST_HPUX_FALSE HOST_HPUX_TRUE HOST_FREEBSD_FALSE HOST_FREEBSD_TRUE HOST_DARWIN_FALSE HOST_DARWIN_TRUE HOST_CYGWIN_FALSE HOST_CYGWIN_TRUE HOST_AIX_FALSE HOST_AIX_TRUE BUILD_NC_FALSE BUILD_NC_TRUE ENABLE_NC_FALSE ENABLE_NC_TRUE PROG_LDADD PLATFORM_LDADD CPP OTOOL64 OTOOL LIPO NMEDIT |
︙ | ︙ | |||
825 826 827 828 829 830 831 832 833 834 835 836 837 838 | enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_hardening enable_windows_ssp with_openssldir enable_extratests enable_asm ' ac_precious_vars='build_alias | > | 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 | enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_nc enable_hardening enable_windows_ssp with_openssldir enable_extratests enable_asm ' ac_precious_vars='build_alias |
︙ | ︙ | |||
1382 1383 1384 1385 1386 1387 1388 | # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF | | | 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 | # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures libressl 2.4.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. |
︙ | ︙ | |||
1452 1453 1454 1455 1456 1457 1458 | --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in | | > | 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 | --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of libressl 2.4.3:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-nc Enable installing TLS-enabled nc(1) --disable-hardening Disable options to frustrate memory corruption exploits --enable-windows-ssp Enable building the stack smashing protection on Windows. This currently distributing libssp-0.dll. --enable-extratests Enable extra tests that may be unreliable on some platforms --disable-asm Disable assembly |
︙ | ︙ | |||
1567 1568 1569 1570 1571 1572 1573 | cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF | | | 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 | cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF libressl configure 2.4.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit |
︙ | ︙ | |||
1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 | eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 | eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include <stdio.h> #include <stdlib.h> int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 <conftest.val; ac_retval=0 else ac_retval=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext rm -f conftest.val fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_compute_int cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by libressl $as_me 2.4.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { |
︙ | ︙ | |||
2280 2281 2282 2283 2284 2285 2286 | ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu | | | | | 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 | ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBCRYPTO_VERSION=38:0:0 LIBSSL_VERSION=39:0:0 LIBTLS_VERSION=11:0:0 ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" |
︙ | ︙ | |||
2873 2874 2875 2876 2877 2878 2879 | CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='libressl' | | | 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 | CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='libressl' VERSION='2.4.3' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF |
︙ | ︙ | |||
11859 11860 11861 11862 11863 11864 11865 11866 11867 11868 11869 11870 11871 11872 11873 11874 11875 11876 11877 11878 11879 11880 11881 11882 11883 11884 11885 11886 11887 11888 11889 11890 11891 11892 | CFLAGS="$CFLAGS -Wall -std=gnu99 -fno-strict-aliasing" case $host_os in *aix*) HOST_OS=aix if test "`echo $CC | cut -d ' ' -f 1`" != "gcc" ; then CFLAGS="-qnoansialias $USER_CFLAGS" fi PLATFORM_LDADD='-lperfstat -lpthread' ;; *cygwin*) HOST_OS=cygwin ;; *darwin*) HOST_OS=darwin HOST_ABI=macosx ;; *freebsd*) HOST_OS=freebsd HOST_ABI=elf PROG_LDADD='-lthr' ;; *hpux*) HOST_OS=hpux; if test "`echo $CC | cut -d ' ' -f 1`" = "gcc" ; then CFLAGS="$CFLAGS -mlp64" | > > > > > > > > | 12066 12067 12068 12069 12070 12071 12072 12073 12074 12075 12076 12077 12078 12079 12080 12081 12082 12083 12084 12085 12086 12087 12088 12089 12090 12091 12092 12093 12094 12095 12096 12097 12098 12099 12100 12101 12102 12103 12104 12105 12106 12107 | CFLAGS="$CFLAGS -Wall -std=gnu99 -fno-strict-aliasing" BUILD_NC=yes case $host_os in *aix*) HOST_OS=aix if test "`echo $CC | cut -d ' ' -f 1`" != "gcc" ; then CFLAGS="-qnoansialias $USER_CFLAGS" fi PLATFORM_LDADD='-lperfstat -lpthread' ;; *cygwin*) HOST_OS=cygwin ;; *darwin*) HOST_OS=darwin HOST_ABI=macosx # weak seed on failure to open /dev/random, based on latest # public source: # http://www.opensource.apple.com/source/Libc/Libc-997.90.3/gen/FreeBSD/arc4random.c USE_BUILTIN_ARC4RANDOM=yes ;; *freebsd*) HOST_OS=freebsd HOST_ABI=elf # fork detection missing, weak seed on failure # https://svnweb.freebsd.org/base/head/lib/libc/gen/arc4random.c?revision=268642&view=markup USE_BUILTIN_ARC4RANDOM=yes PROG_LDADD='-lthr' ;; *hpux*) HOST_OS=hpux; if test "`echo $CC | cut -d ' ' -f 1`" = "gcc" ; then CFLAGS="$CFLAGS -mlp64" |
︙ | ︙ | |||
11900 11901 11902 11903 11904 11905 11906 11907 11908 11909 11910 11911 11912 11913 11914 11915 11916 11917 11918 11919 11920 11921 11922 11923 11924 11925 11926 11927 11928 11929 11930 11931 11932 11933 11934 11935 11936 11937 11938 11939 11940 11941 | *linux*) HOST_OS=linux HOST_ABI=elf CPPFLAGS="$CPPFLAGS -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE" ;; *netbsd*) HOST_OS=netbsd CPPFLAGS="$CPPFLAGS -D_OPENBSD_SOURCE" ;; *openbsd* | *bitrig*) HOST_ABI=elf $as_echo "#define HAVE_ATTRIBUTE__BOUNDED__ 1" >>confdefs.h ;; *mingw*) HOST_OS=win CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_POSIX -D_POSIX_SOURCE -D__USE_MINGW_ANSI_STDIO" CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_POSIX_THREAD_SAFE_FUNCTIONS" CPPFLAGS="$CPPFLAGS -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0501" CPPFLAGS="$CPPFLAGS -DOPENSSL_NO_SPEED" CFLAGS="$CFLAGS -static-libgcc" LDFLAGS="$LDFLAGS -static-libgcc" PLATFORM_LDADD='-lws2_32' ;; *solaris*) HOST_OS=solaris HOST_ABI=elf CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__ -D_XOPEN_SOURCE=600 -DBSD_COMP" PLATFORM_LDADD='-lnsl -lsocket' ;; *) ;; esac if test x$HOST_OS = xaix; then HOST_AIX_TRUE= HOST_AIX_FALSE='#' else HOST_AIX_TRUE='#' HOST_AIX_FALSE= | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 12115 12116 12117 12118 12119 12120 12121 12122 12123 12124 12125 12126 12127 12128 12129 12130 12131 12132 12133 12134 12135 12136 12137 12138 12139 12140 12141 12142 12143 12144 12145 12146 12147 12148 12149 12150 12151 12152 12153 12154 12155 12156 12157 12158 12159 12160 12161 12162 12163 12164 12165 12166 12167 12168 12169 12170 12171 12172 12173 12174 12175 12176 12177 12178 12179 12180 12181 12182 12183 12184 12185 12186 12187 12188 12189 12190 12191 12192 12193 12194 12195 12196 12197 12198 12199 12200 12201 12202 12203 12204 | *linux*) HOST_OS=linux HOST_ABI=elf CPPFLAGS="$CPPFLAGS -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE" ;; *netbsd*) HOST_OS=netbsd HOST_ABI=elf cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/param.h> #if __NetBSD_Version__ < 700000001 undefined #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : USE_BUILTIN_ARC4RANDOM=no else USE_BUILTIN_ARC4RANDOM=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$CPPFLAGS -D_OPENBSD_SOURCE" ;; *openbsd* | *bitrig*) HOST_OS=openbsd HOST_ABI=elf $as_echo "#define HAVE_ATTRIBUTE__BOUNDED__ 1" >>confdefs.h ;; *mingw*) HOST_OS=win BUILD_NC=no CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_POSIX -D_POSIX_SOURCE -D__USE_MINGW_ANSI_STDIO" CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_POSIX_THREAD_SAFE_FUNCTIONS" CPPFLAGS="$CPPFLAGS -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0501" CPPFLAGS="$CPPFLAGS -DOPENSSL_NO_SPEED" CFLAGS="$CFLAGS -static-libgcc" LDFLAGS="$LDFLAGS -static-libgcc" PLATFORM_LDADD='-lws2_32' ;; *solaris*) HOST_OS=solaris HOST_ABI=elf CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__ -D_XOPEN_SOURCE=600 -DBSD_COMP" PLATFORM_LDADD='-lnsl -lsocket' ;; *) ;; esac # Check whether --enable-nc was given. if test "${enable_nc+set}" = set; then : enableval=$enable_nc; fi if test "x$enable_nc" = xyes; then ENABLE_NC_TRUE= ENABLE_NC_FALSE='#' else ENABLE_NC_TRUE='#' ENABLE_NC_FALSE= fi if test x$BUILD_NC = xyes -o "x$enable_nc" = xyes; then BUILD_NC_TRUE= BUILD_NC_FALSE='#' else BUILD_NC_TRUE='#' BUILD_NC_FALSE= fi if test x$HOST_OS = xaix; then HOST_AIX_TRUE= HOST_AIX_FALSE='#' else HOST_AIX_TRUE='#' HOST_AIX_FALSE= |
︙ | ︙ | |||
11984 11985 11986 11987 11988 11989 11990 11991 11992 11993 11994 11995 11996 11997 | if test x$HOST_OS = xnetbsd; then HOST_NETBSD_TRUE= HOST_NETBSD_FALSE='#' else HOST_NETBSD_TRUE='#' HOST_NETBSD_FALSE= fi if test x$HOST_OS = xsolaris; then HOST_SOLARIS_TRUE= HOST_SOLARIS_FALSE='#' else HOST_SOLARIS_TRUE='#' HOST_SOLARIS_FALSE= | > > > > > > > > | 12247 12248 12249 12250 12251 12252 12253 12254 12255 12256 12257 12258 12259 12260 12261 12262 12263 12264 12265 12266 12267 12268 | if test x$HOST_OS = xnetbsd; then HOST_NETBSD_TRUE= HOST_NETBSD_FALSE='#' else HOST_NETBSD_TRUE='#' HOST_NETBSD_FALSE= fi if test x$HOST_OS = xopenbsd; then HOST_OPENBSD_TRUE= HOST_OPENBSD_FALSE='#' else HOST_OPENBSD_TRUE='#' HOST_OPENBSD_FALSE= fi if test x$HOST_OS = xsolaris; then HOST_SOLARIS_TRUE= HOST_SOLARIS_FALSE='#' else HOST_SOLARIS_TRUE='#' HOST_SOLARIS_FALSE= |
︙ | ︙ | |||
12674 12675 12676 12677 12678 12679 12680 12681 12682 | # Check if funopen exists ac_fn_c_check_func "$LINENO" "funopen" "ac_cv_func_funopen" if test "x$ac_cv_func_funopen" = xyes; then : fi # Check for general libc functions | > > > > > > > > > > > > > > | > > > > > > > > > > > > | 12945 12946 12947 12948 12949 12950 12951 12952 12953 12954 12955 12956 12957 12958 12959 12960 12961 12962 12963 12964 12965 12966 12967 12968 12969 12970 12971 12972 12973 12974 12975 12976 12977 12978 12979 12980 12981 12982 12983 12984 12985 12986 12987 12988 12989 12990 12991 12992 12993 12994 12995 12996 12997 12998 12999 | # Check if funopen exists ac_fn_c_check_func "$LINENO" "funopen" "ac_cv_func_funopen" if test "x$ac_cv_func_funopen" = xyes; then : fi # Check for libc headers for ac_header in err.h readpassphrase.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Check for general libc functions for ac_func in asprintf inet_pton memmem readpassphrase reallocarray do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in strlcat strlcpy strndup strnlen strsep strtonum do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in timegm _mkgmtime do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF |
︙ | ︙ | |||
12724 12725 12726 12727 12728 12729 12730 | HAVE_MEMMEM_TRUE= HAVE_MEMMEM_FALSE='#' else HAVE_MEMMEM_TRUE='#' HAVE_MEMMEM_FALSE= fi | | | | | | | 13021 13022 13023 13024 13025 13026 13027 13028 13029 13030 13031 13032 13033 13034 13035 13036 13037 13038 13039 13040 | HAVE_MEMMEM_TRUE= HAVE_MEMMEM_FALSE='#' else HAVE_MEMMEM_TRUE='#' HAVE_MEMMEM_FALSE= fi if test "x$ac_cv_func_readpassphrase" = xyes; then HAVE_READPASSPHRASE_TRUE= HAVE_READPASSPHRASE_FALSE='#' else HAVE_READPASSPHRASE_TRUE='#' HAVE_READPASSPHRASE_FALSE= fi if test "x$ac_cv_func_reallocarray" = xyes; then HAVE_REALLOCARRAY_TRUE= HAVE_REALLOCARRAY_FALSE='#' else HAVE_REALLOCARRAY_TRUE='#' |
︙ | ︙ | |||
12788 12789 12790 12791 12792 12793 12794 12795 12796 | HAVE_STRTONUM_TRUE= HAVE_STRTONUM_FALSE='#' else HAVE_STRTONUM_TRUE='#' HAVE_STRTONUM_FALSE= fi | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > | | 13085 13086 13087 13088 13089 13090 13091 13092 13093 13094 13095 13096 13097 13098 13099 13100 13101 13102 13103 13104 13105 13106 13107 13108 13109 13110 13111 13112 13113 13114 13115 13116 13117 13118 13119 13120 13121 13122 13123 13124 13125 13126 13127 13128 13129 13130 13131 13132 13133 13134 13135 13136 13137 13138 13139 13140 13141 13142 13143 13144 13145 13146 13147 13148 13149 13150 13151 13152 13153 13154 13155 13156 13157 13158 13159 13160 | HAVE_STRTONUM_TRUE= HAVE_STRTONUM_FALSE='#' else HAVE_STRTONUM_TRUE='#' HAVE_STRTONUM_FALSE= fi if test "x$ac_cv_func_timegm" = xyes; then HAVE_TIMEGM_TRUE= HAVE_TIMEGM_FALSE='#' else HAVE_TIMEGM_TRUE='#' HAVE_TIMEGM_FALSE= fi for ac_func in accept4 pledge poll do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_accept4" = xyes; then HAVE_ACCEPT4_TRUE= HAVE_ACCEPT4_FALSE='#' else HAVE_ACCEPT4_TRUE='#' HAVE_ACCEPT4_FALSE= fi if test "x$ac_cv_func_pledge" = xyes; then HAVE_PLEDGE_TRUE= HAVE_PLEDGE_FALSE='#' else HAVE_PLEDGE_TRUE='#' HAVE_PLEDGE_FALSE= fi if test "x$ac_cv_func_poll" = xyes; then HAVE_POLL_TRUE= HAVE_POLL_FALSE='#' else HAVE_POLL_TRUE='#' HAVE_POLL_FALSE= fi # Check crypto-related libc functions and syscalls for ac_func in arc4random arc4random_buf arc4random_uniform do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in explicit_bzero getauxval getentropy do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF |
︙ | ︙ | |||
12814 12815 12816 12817 12818 12819 12820 12821 12822 12823 12824 12825 12826 12827 12828 12829 12830 12831 12832 12833 12834 12835 | if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_arc4random_buf" = xyes; then HAVE_ARC4RANDOM_BUF_TRUE= HAVE_ARC4RANDOM_BUF_FALSE='#' else HAVE_ARC4RANDOM_BUF_TRUE='#' HAVE_ARC4RANDOM_BUF_FALSE= fi if test "x$ac_cv_func_explicit_bzero" = xyes; then HAVE_EXPLICIT_BZERO_TRUE= HAVE_EXPLICIT_BZERO_FALSE='#' else HAVE_EXPLICIT_BZERO_TRUE='#' HAVE_EXPLICIT_BZERO_FALSE= | > > > > > > > > > > > > > > > > | 13169 13170 13171 13172 13173 13174 13175 13176 13177 13178 13179 13180 13181 13182 13183 13184 13185 13186 13187 13188 13189 13190 13191 13192 13193 13194 13195 13196 13197 13198 13199 13200 13201 13202 13203 13204 13205 13206 | if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_arc4random" = xyes; then HAVE_ARC4RANDOM_TRUE= HAVE_ARC4RANDOM_FALSE='#' else HAVE_ARC4RANDOM_TRUE='#' HAVE_ARC4RANDOM_FALSE= fi if test "x$ac_cv_func_arc4random_buf" = xyes; then HAVE_ARC4RANDOM_BUF_TRUE= HAVE_ARC4RANDOM_BUF_FALSE='#' else HAVE_ARC4RANDOM_BUF_TRUE='#' HAVE_ARC4RANDOM_BUF_FALSE= fi if test "x$ac_cv_func_arc4random_uniform" = xyes; then HAVE_ARC4RANDOM_UNIFORM_TRUE= HAVE_ARC4RANDOM_UNIFORM_FALSE='#' else HAVE_ARC4RANDOM_UNIFORM_TRUE='#' HAVE_ARC4RANDOM_UNIFORM_FALSE= fi if test "x$ac_cv_func_explicit_bzero" = xyes; then HAVE_EXPLICIT_BZERO_TRUE= HAVE_EXPLICIT_BZERO_FALSE='#' else HAVE_EXPLICIT_BZERO_TRUE='#' HAVE_EXPLICIT_BZERO_FALSE= |
︙ | ︙ | |||
12857 12858 12859 12860 12861 12862 12863 | else HAVE_TIMINGSAFE_MEMCMP_TRUE='#' HAVE_TIMINGSAFE_MEMCMP_FALSE= fi # Override arc4random_buf implementations with known issues | | < < < < < < | | 13228 13229 13230 13231 13232 13233 13234 13235 13236 13237 13238 13239 13240 13241 13242 13243 13244 13245 13246 13247 13248 13249 13250 13251 13252 13253 13254 13255 13256 13257 13258 | else HAVE_TIMINGSAFE_MEMCMP_TRUE='#' HAVE_TIMINGSAFE_MEMCMP_FALSE= fi # Override arc4random_buf implementations with known issues if test "x$USE_BUILTIN_ARC4RANDOM" != xyes \ -a "x$ac_cv_func_arc4random_buf" = xyes; then HAVE_ARC4RANDOM_BUF_TRUE= HAVE_ARC4RANDOM_BUF_FALSE='#' else HAVE_ARC4RANDOM_BUF_TRUE='#' HAVE_ARC4RANDOM_BUF_FALSE= fi # Check for getentropy fallback dependencies ac_fn_c_check_func "$LINENO" "getauxval" "ac_cv_func_getauxval" if test "x$ac_cv_func_getauxval" = xyes; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 $as_echo_n "checking for library containing clock_gettime... " >&6; } if ${ac_cv_search_clock_gettime+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ |
︙ | ︙ | |||
12935 12936 12937 12938 12939 12940 12941 | $as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi | < < | | > | | | 13300 13301 13302 13303 13304 13305 13306 13307 13308 13309 13310 13311 13312 13313 13314 13315 13316 13317 13318 13319 | $as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" if test "x$ac_cv_func_clock_gettime" = xyes; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dl_iterate_phdr" >&5 $as_echo_n "checking for library containing dl_iterate_phdr... " >&6; } if ${ac_cv_search_dl_iterate_phdr+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ |
︙ | ︙ | |||
12996 12997 12998 12999 13000 13001 13002 13003 13004 13005 13006 13007 13008 13009 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dl_iterate_phdr" >&5 $as_echo "$ac_cv_search_dl_iterate_phdr" >&6; } ac_res=$ac_cv_search_dl_iterate_phdr if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether va_copy exists" >&5 $as_echo_n "checking whether va_copy exists... " >&6; } | > > > | 13360 13361 13362 13363 13364 13365 13366 13367 13368 13369 13370 13371 13372 13373 13374 13375 13376 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dl_iterate_phdr" >&5 $as_echo "$ac_cv_search_dl_iterate_phdr" >&6; } ac_res=$ac_cv_search_dl_iterate_phdr if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_fn_c_check_func "$LINENO" "dl_iterate_phdr" "ac_cv_func_dl_iterate_phdr" if test "x$ac_cv_func_dl_iterate_phdr" = xyes; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether va_copy exists" >&5 $as_echo_n "checking whether va_copy exists... " >&6; } |
︙ | ︙ | |||
13078 13079 13080 13081 13082 13083 13084 | if test "x$ac_cv_have___va_copy" = "xyes" ; then $as_echo "#define HAVE___VA_COPY 1" >>confdefs.h fi | | | < | > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 13445 13446 13447 13448 13449 13450 13451 13452 13453 13454 13455 13456 13457 13458 13459 13460 13461 13462 13463 13464 13465 13466 13467 13468 13469 13470 13471 13472 13473 13474 13475 13476 13477 13478 13479 13480 13481 13482 13483 13484 13485 13486 13487 13488 13489 13490 13491 13492 13493 13494 13495 13496 13497 13498 13499 13500 13501 13502 13503 13504 13505 13506 13507 13508 13509 13510 13511 13512 13513 13514 13515 13516 13517 13518 13519 13520 13521 13522 13523 13524 13525 13526 13527 13528 13529 13530 13531 13532 13533 13534 13535 13536 13537 13538 13539 13540 13541 13542 13543 13544 13545 13546 13547 13548 13549 13550 13551 13552 13553 13554 13555 13556 13557 13558 13559 13560 13561 13562 13563 13564 13565 13566 13567 13568 13569 13570 13571 13572 13573 13574 13575 13576 13577 13578 13579 13580 13581 13582 13583 13584 13585 13586 13587 13588 13589 13590 13591 13592 13593 13594 13595 13596 13597 13598 13599 13600 13601 13602 13603 13604 13605 13606 13607 13608 13609 13610 13611 13612 13613 | if test "x$ac_cv_have___va_copy" = "xyes" ; then $as_echo "#define HAVE___VA_COPY 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing b64_ntop" >&5 $as_echo_n "checking for library containing b64_ntop... " >&6; } if ${ac_cv_search_b64_ntop+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char b64_ntop (); int main () { return b64_ntop (); ; return 0; } _ACEOF for ac_lib in '' resolv; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_b64_ntop=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_b64_ntop+:} false; then : break fi done if ${ac_cv_search_b64_ntop+:} false; then : else ac_cv_search_b64_ntop=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_b64_ntop" >&5 $as_echo "$ac_cv_search_b64_ntop" >&6; } ac_res=$ac_cv_search_b64_ntop if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing __b64_ntop" >&5 $as_echo_n "checking for library containing __b64_ntop... " >&6; } if ${ac_cv_search___b64_ntop+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char __b64_ntop (); int main () { return __b64_ntop (); ; return 0; } _ACEOF for ac_lib in '' resolv; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search___b64_ntop=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search___b64_ntop+:} false; then : break fi done if ${ac_cv_search___b64_ntop+:} false; then : else ac_cv_search___b64_ntop=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search___b64_ntop" >&5 $as_echo "$ac_cv_search___b64_ntop" >&6; } ac_res=$ac_cv_search___b64_ntop if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for b64_ntop" >&5 $as_echo_n "checking for b64_ntop... " >&6; } if ${ac_cv_have_b64_ntop_arg+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <resolv.h> int main () { b64_ntop(NULL, 0, NULL, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_have_b64_ntop_arg="yes" else ac_cv_have_b64_ntop_arg="no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_b64_ntop_arg" >&5 $as_echo "$ac_cv_have_b64_ntop_arg" >&6; } if test "x$ac_cv_func_b64_ntop_arg" = xyes; then HAVE_B64_NTOP_TRUE= HAVE_B64_NTOP_FALSE='#' else HAVE_B64_NTOP_TRUE='#' HAVE_B64_NTOP_FALSE= fi # Check whether --with-openssldir was given. if test "${with_openssldir+set}" = set; then : withval=$with_openssldir; OPENSSLDIR="$withval" |
︙ | ︙ | |||
13161 13162 13163 13164 13165 13166 13167 13168 13169 13170 13171 13172 13173 13174 | *arm*) if test "x$BSWAP4" = "xyes"; then : else CPPFLAGS="$CPPFLAGS -D__STRICT_ALIGNMENT" fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if .gnu.warning accepts long strings" >&5 $as_echo_n "checking if .gnu.warning accepts long strings... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ | > > > > | 13672 13673 13674 13675 13676 13677 13678 13679 13680 13681 13682 13683 13684 13685 13686 13687 13688 13689 | *arm*) if test "x$BSWAP4" = "xyes"; then : else CPPFLAGS="$CPPFLAGS -D__STRICT_ALIGNMENT" fi ;; *amd64*) host_cpu=x86_64 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if .gnu.warning accepts long strings" >&5 $as_echo_n "checking if .gnu.warning accepts long strings... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ |
︙ | ︙ | |||
13222 13223 13224 13225 13226 13227 13228 | HOST_ASM_MACOSX_X86_64_FALSE='#' else HOST_ASM_MACOSX_X86_64_TRUE='#' HOST_ASM_MACOSX_X86_64_FALSE= fi | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > | 13737 13738 13739 13740 13741 13742 13743 13744 13745 13746 13747 13748 13749 13750 13751 13752 13753 13754 13755 13756 13757 13758 13759 13760 13761 13762 13763 13764 13765 13766 13767 13768 13769 13770 13771 13772 13773 13774 13775 13776 13777 13778 13779 13780 13781 13782 13783 13784 13785 13786 13787 13788 13789 13790 13791 13792 13793 13794 13795 13796 13797 13798 13799 13800 13801 | HOST_ASM_MACOSX_X86_64_FALSE='#' else HOST_ASM_MACOSX_X86_64_TRUE='#' HOST_ASM_MACOSX_X86_64_FALSE= fi # Check if time_t is sized correctly # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 $as_echo_n "checking size of time_t... " >&6; } if ${ac_cv_sizeof_time_t+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "$ac_includes_default"; then : else if test "$ac_cv_type_time_t" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (time_t) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_time_t=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 $as_echo "$ac_cv_sizeof_time_t" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_TIME_T $ac_cv_sizeof_time_t _ACEOF ac_config_files="$ac_config_files Makefile include/Makefile include/openssl/Makefile crypto/Makefile ssl/Makefile tls/Makefile tests/Makefile apps/Makefile apps/openssl/Makefile apps/nc/Makefile man/Makefile libcrypto.pc libssl.pc libtls.pc openssl.pc" if test "$ac_cv_sizeof_time_t" = "4"; then SMALL_TIME_T_TRUE= SMALL_TIME_T_FALSE='#' else SMALL_TIME_T_TRUE='#' SMALL_TIME_T_FALSE= fi if test "$ac_cv_sizeof_time_t" = "4"; then echo " ** Warning, this system is unable to represent times past 2038" echo " ** It will behave incorrectly when handling valid RFC5280 dates" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't |
︙ | ︙ | |||
13394 13395 13396 13397 13398 13399 13400 13401 13402 13403 13404 13405 13406 13407 | as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_AIX_TRUE}" && test -z "${HOST_AIX_FALSE}"; then as_fn_error $? "conditional \"HOST_AIX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_CYGWIN_TRUE}" && test -z "${HOST_CYGWIN_FALSE}"; then as_fn_error $? "conditional \"HOST_CYGWIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 | > > > > > > > > | 13959 13960 13961 13962 13963 13964 13965 13966 13967 13968 13969 13970 13971 13972 13973 13974 13975 13976 13977 13978 13979 13980 | as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_NC_TRUE}" && test -z "${ENABLE_NC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_NC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_NC_TRUE}" && test -z "${BUILD_NC_FALSE}"; then as_fn_error $? "conditional \"BUILD_NC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_AIX_TRUE}" && test -z "${HOST_AIX_FALSE}"; then as_fn_error $? "conditional \"HOST_AIX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_CYGWIN_TRUE}" && test -z "${HOST_CYGWIN_FALSE}"; then as_fn_error $? "conditional \"HOST_CYGWIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 |
︙ | ︙ | |||
13421 13422 13423 13424 13425 13426 13427 13428 13429 13430 13431 13432 13433 13434 | if test -z "${HOST_LINUX_TRUE}" && test -z "${HOST_LINUX_FALSE}"; then as_fn_error $? "conditional \"HOST_LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_NETBSD_TRUE}" && test -z "${HOST_NETBSD_FALSE}"; then as_fn_error $? "conditional \"HOST_NETBSD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_SOLARIS_TRUE}" && test -z "${HOST_SOLARIS_FALSE}"; then as_fn_error $? "conditional \"HOST_SOLARIS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_WIN_TRUE}" && test -z "${HOST_WIN_FALSE}"; then as_fn_error $? "conditional \"HOST_WIN\" was never defined. | > > > > | 13994 13995 13996 13997 13998 13999 14000 14001 14002 14003 14004 14005 14006 14007 14008 14009 14010 14011 | if test -z "${HOST_LINUX_TRUE}" && test -z "${HOST_LINUX_FALSE}"; then as_fn_error $? "conditional \"HOST_LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_NETBSD_TRUE}" && test -z "${HOST_NETBSD_FALSE}"; then as_fn_error $? "conditional \"HOST_NETBSD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_OPENBSD_TRUE}" && test -z "${HOST_OPENBSD_FALSE}"; then as_fn_error $? "conditional \"HOST_OPENBSD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_SOLARIS_TRUE}" && test -z "${HOST_SOLARIS_FALSE}"; then as_fn_error $? "conditional \"HOST_SOLARIS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_WIN_TRUE}" && test -z "${HOST_WIN_FALSE}"; then as_fn_error $? "conditional \"HOST_WIN\" was never defined. |
︙ | ︙ | |||
13450 13451 13452 13453 13454 13455 13456 | as_fn_error $? "conditional \"HAVE_INET_PTON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_MEMMEM_TRUE}" && test -z "${HAVE_MEMMEM_FALSE}"; then as_fn_error $? "conditional \"HAVE_MEMMEM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi | | | | 14027 14028 14029 14030 14031 14032 14033 14034 14035 14036 14037 14038 14039 14040 14041 14042 | as_fn_error $? "conditional \"HAVE_INET_PTON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_MEMMEM_TRUE}" && test -z "${HAVE_MEMMEM_FALSE}"; then as_fn_error $? "conditional \"HAVE_MEMMEM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_READPASSPHRASE_TRUE}" && test -z "${HAVE_READPASSPHRASE_FALSE}"; then as_fn_error $? "conditional \"HAVE_READPASSPHRASE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_REALLOCARRAY_TRUE}" && test -z "${HAVE_REALLOCARRAY_FALSE}"; then as_fn_error $? "conditional \"HAVE_REALLOCARRAY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_STRLCAT_TRUE}" && test -z "${HAVE_STRLCAT_FALSE}"; then |
︙ | ︙ | |||
13482 13483 13484 13485 13486 13487 13488 13489 13490 13491 13492 13493 13494 13495 13496 13497 13498 13499 13500 13501 13502 13503 13504 13505 13506 13507 13508 13509 13510 13511 13512 13513 13514 13515 13516 13517 13518 13519 13520 13521 13522 13523 13524 13525 13526 13527 13528 13529 13530 13531 13532 13533 13534 13535 13536 13537 13538 | as_fn_error $? "conditional \"HAVE_STRSEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_STRTONUM_TRUE}" && test -z "${HAVE_STRTONUM_FALSE}"; then as_fn_error $? "conditional \"HAVE_STRTONUM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARC4RANDOM_BUF_TRUE}" && test -z "${HAVE_ARC4RANDOM_BUF_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARC4RANDOM_BUF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_EXPLICIT_BZERO_TRUE}" && test -z "${HAVE_EXPLICIT_BZERO_FALSE}"; then as_fn_error $? "conditional \"HAVE_EXPLICIT_BZERO\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GETENTROPY_TRUE}" && test -z "${HAVE_GETENTROPY_FALSE}"; then as_fn_error $? "conditional \"HAVE_GETENTROPY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_TIMINGSAFE_BCMP_TRUE}" && test -z "${HAVE_TIMINGSAFE_BCMP_FALSE}"; then as_fn_error $? "conditional \"HAVE_TIMINGSAFE_BCMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_TIMINGSAFE_MEMCMP_TRUE}" && test -z "${HAVE_TIMINGSAFE_MEMCMP_FALSE}"; then as_fn_error $? "conditional \"HAVE_TIMINGSAFE_MEMCMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARC4RANDOM_BUF_TRUE}" && test -z "${HAVE_ARC4RANDOM_BUF_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARC4RANDOM_BUF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENSSLDIR_DEFINED_TRUE}" && test -z "${OPENSSLDIR_DEFINED_FALSE}"; then as_fn_error $? "conditional \"OPENSSLDIR_DEFINED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_EXTRATESTS_TRUE}" && test -z "${ENABLE_EXTRATESTS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_EXTRATESTS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENSSL_NO_ASM_TRUE}" && test -z "${OPENSSL_NO_ASM_FALSE}"; then as_fn_error $? "conditional \"OPENSSL_NO_ASM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_ASM_ELF_X86_64_TRUE}" && test -z "${HOST_ASM_ELF_X86_64_FALSE}"; then as_fn_error $? "conditional \"HOST_ASM_ELF_X86_64\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_ASM_MACOSX_X86_64_TRUE}" && test -z "${HOST_ASM_MACOSX_X86_64_FALSE}"; then as_fn_error $? "conditional \"HOST_ASM_MACOSX_X86_64\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 14059 14060 14061 14062 14063 14064 14065 14066 14067 14068 14069 14070 14071 14072 14073 14074 14075 14076 14077 14078 14079 14080 14081 14082 14083 14084 14085 14086 14087 14088 14089 14090 14091 14092 14093 14094 14095 14096 14097 14098 14099 14100 14101 14102 14103 14104 14105 14106 14107 14108 14109 14110 14111 14112 14113 14114 14115 14116 14117 14118 14119 14120 14121 14122 14123 14124 14125 14126 14127 14128 14129 14130 14131 14132 14133 14134 14135 14136 14137 14138 14139 14140 14141 14142 14143 14144 14145 14146 14147 | as_fn_error $? "conditional \"HAVE_STRSEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_STRTONUM_TRUE}" && test -z "${HAVE_STRTONUM_FALSE}"; then as_fn_error $? "conditional \"HAVE_STRTONUM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_TIMEGM_TRUE}" && test -z "${HAVE_TIMEGM_FALSE}"; then as_fn_error $? "conditional \"HAVE_TIMEGM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ACCEPT4_TRUE}" && test -z "${HAVE_ACCEPT4_FALSE}"; then as_fn_error $? "conditional \"HAVE_ACCEPT4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PLEDGE_TRUE}" && test -z "${HAVE_PLEDGE_FALSE}"; then as_fn_error $? "conditional \"HAVE_PLEDGE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_POLL_TRUE}" && test -z "${HAVE_POLL_FALSE}"; then as_fn_error $? "conditional \"HAVE_POLL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARC4RANDOM_TRUE}" && test -z "${HAVE_ARC4RANDOM_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARC4RANDOM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARC4RANDOM_BUF_TRUE}" && test -z "${HAVE_ARC4RANDOM_BUF_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARC4RANDOM_BUF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARC4RANDOM_UNIFORM_TRUE}" && test -z "${HAVE_ARC4RANDOM_UNIFORM_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARC4RANDOM_UNIFORM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_EXPLICIT_BZERO_TRUE}" && test -z "${HAVE_EXPLICIT_BZERO_FALSE}"; then as_fn_error $? "conditional \"HAVE_EXPLICIT_BZERO\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GETENTROPY_TRUE}" && test -z "${HAVE_GETENTROPY_FALSE}"; then as_fn_error $? "conditional \"HAVE_GETENTROPY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_TIMINGSAFE_BCMP_TRUE}" && test -z "${HAVE_TIMINGSAFE_BCMP_FALSE}"; then as_fn_error $? "conditional \"HAVE_TIMINGSAFE_BCMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_TIMINGSAFE_MEMCMP_TRUE}" && test -z "${HAVE_TIMINGSAFE_MEMCMP_FALSE}"; then as_fn_error $? "conditional \"HAVE_TIMINGSAFE_MEMCMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARC4RANDOM_BUF_TRUE}" && test -z "${HAVE_ARC4RANDOM_BUF_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARC4RANDOM_BUF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_B64_NTOP_TRUE}" && test -z "${HAVE_B64_NTOP_FALSE}"; then as_fn_error $? "conditional \"HAVE_B64_NTOP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENSSLDIR_DEFINED_TRUE}" && test -z "${OPENSSLDIR_DEFINED_FALSE}"; then as_fn_error $? "conditional \"OPENSSLDIR_DEFINED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_EXTRATESTS_TRUE}" && test -z "${ENABLE_EXTRATESTS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_EXTRATESTS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENSSL_NO_ASM_TRUE}" && test -z "${OPENSSL_NO_ASM_FALSE}"; then as_fn_error $? "conditional \"OPENSSL_NO_ASM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_ASM_ELF_X86_64_TRUE}" && test -z "${HOST_ASM_ELF_X86_64_FALSE}"; then as_fn_error $? "conditional \"HOST_ASM_ELF_X86_64\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HOST_ASM_MACOSX_X86_64_TRUE}" && test -z "${HOST_ASM_MACOSX_X86_64_FALSE}"; then as_fn_error $? "conditional \"HOST_ASM_MACOSX_X86_64\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SMALL_TIME_T_TRUE}" && test -z "${SMALL_TIME_T_FALSE}"; then as_fn_error $? "conditional \"SMALL_TIME_T\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 |
︙ | ︙ | |||
13923 13924 13925 13926 13927 13928 13929 | test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" | | | 14532 14533 14534 14535 14536 14537 14538 14539 14540 14541 14542 14543 14544 14545 14546 | test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by libressl $as_me 2.4.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ |
︙ | ︙ | |||
13980 13981 13982 13983 13984 13985 13986 | Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ | | | 14589 14590 14591 14592 14593 14594 14595 14596 14597 14598 14599 14600 14601 14602 14603 | Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ libressl config.status 2.4.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." |
︙ | ︙ | |||
14385 14386 14387 14388 14389 14390 14391 14392 14393 14394 14395 14396 14397 14398 | "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/openssl/Makefile") CONFIG_FILES="$CONFIG_FILES include/openssl/Makefile" ;; "crypto/Makefile") CONFIG_FILES="$CONFIG_FILES crypto/Makefile" ;; "ssl/Makefile") CONFIG_FILES="$CONFIG_FILES ssl/Makefile" ;; "tls/Makefile") CONFIG_FILES="$CONFIG_FILES tls/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "apps/Makefile") CONFIG_FILES="$CONFIG_FILES apps/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "libcrypto.pc") CONFIG_FILES="$CONFIG_FILES libcrypto.pc" ;; "libssl.pc") CONFIG_FILES="$CONFIG_FILES libssl.pc" ;; "libtls.pc") CONFIG_FILES="$CONFIG_FILES libtls.pc" ;; "openssl.pc") CONFIG_FILES="$CONFIG_FILES openssl.pc" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; | > > | 14994 14995 14996 14997 14998 14999 15000 15001 15002 15003 15004 15005 15006 15007 15008 15009 | "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/openssl/Makefile") CONFIG_FILES="$CONFIG_FILES include/openssl/Makefile" ;; "crypto/Makefile") CONFIG_FILES="$CONFIG_FILES crypto/Makefile" ;; "ssl/Makefile") CONFIG_FILES="$CONFIG_FILES ssl/Makefile" ;; "tls/Makefile") CONFIG_FILES="$CONFIG_FILES tls/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "apps/Makefile") CONFIG_FILES="$CONFIG_FILES apps/Makefile" ;; "apps/openssl/Makefile") CONFIG_FILES="$CONFIG_FILES apps/openssl/Makefile" ;; "apps/nc/Makefile") CONFIG_FILES="$CONFIG_FILES apps/nc/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "libcrypto.pc") CONFIG_FILES="$CONFIG_FILES libcrypto.pc" ;; "libssl.pc") CONFIG_FILES="$CONFIG_FILES libssl.pc" ;; "libtls.pc") CONFIG_FILES="$CONFIG_FILES libtls.pc" ;; "openssl.pc") CONFIG_FILES="$CONFIG_FILES openssl.pc" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; |
︙ | ︙ |
Changes to jni/libressl/configure.ac.
︙ | ︙ | |||
45 46 47 48 49 50 51 | AC_CHECK_FUNCS([symlink]) AM_CONDITIONAL([BUILD_CERTHASH], [test "x$ac_cv_func_symlink" = xyes]) # Check if funopen exists AC_CHECK_FUNC([funopen]) CHECK_LIBC_COMPAT | > | | < | 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | AC_CHECK_FUNCS([symlink]) AM_CONDITIONAL([BUILD_CERTHASH], [test "x$ac_cv_func_symlink" = xyes]) # Check if funopen exists AC_CHECK_FUNC([funopen]) CHECK_LIBC_COMPAT CHECK_SYSCALL_COMPAT CHECK_CRYPTO_COMPAT CHECK_VA_COPY CHECK_B64_NTOP AC_ARG_WITH([openssldir], AS_HELP_STRING([--with-openssldir], [Set the default openssl directory]), OPENSSLDIR="$withval" AC_SUBST(OPENSSLDIR) ) |
︙ | ︙ | |||
82 83 84 85 86 87 88 89 90 91 92 93 94 95 | *sparc*) CPPFLAGS="$CPPFLAGS -D__STRICT_ALIGNMENT" ;; *arm*) AS_IF([test "x$BSWAP4" = "xyes"],, CPPFLAGS="$CPPFLAGS -D__STRICT_ALIGNMENT") ;; esac AC_MSG_CHECKING([if .gnu.warning accepts long strings]) AC_LINK_IFELSE([AC_LANG_SOURCE([[ extern void SSLv3_method(); __asm__(".section .gnu.warning.SSLv3_method; .ascii \"SSLv3_method is insecure\" ; .text"); int main() {return 0;} | > > > > | 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | *sparc*) CPPFLAGS="$CPPFLAGS -D__STRICT_ALIGNMENT" ;; *arm*) AS_IF([test "x$BSWAP4" = "xyes"],, CPPFLAGS="$CPPFLAGS -D__STRICT_ALIGNMENT") ;; *amd64*) host_cpu=x86_64 ;; esac AC_MSG_CHECKING([if .gnu.warning accepts long strings]) AC_LINK_IFELSE([AC_LANG_SOURCE([[ extern void SSLv3_method(); __asm__(".section .gnu.warning.SSLv3_method; .ascii \"SSLv3_method is insecure\" ; .text"); int main() {return 0;} |
︙ | ︙ | |||
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | # Conditionally enable assembly by default AM_CONDITIONAL([HOST_ASM_ELF_X86_64], [test "x$HOST_ABI" = "xelf" -a "$host_cpu" = "x86_64" -a "x$enable_asm" != "xno"]) AM_CONDITIONAL([HOST_ASM_MACOSX_X86_64], [test "x$HOST_ABI" = "xmacosx" -a "$host_cpu" = "x86_64" -a "x$enable_asm" != "xno"]) AC_CONFIG_FILES([ Makefile include/Makefile include/openssl/Makefile crypto/Makefile ssl/Makefile tls/Makefile tests/Makefile apps/Makefile man/Makefile libcrypto.pc libssl.pc libtls.pc openssl.pc ]) AC_OUTPUT | > > > > > > > > > > > > > | 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | # Conditionally enable assembly by default AM_CONDITIONAL([HOST_ASM_ELF_X86_64], [test "x$HOST_ABI" = "xelf" -a "$host_cpu" = "x86_64" -a "x$enable_asm" != "xno"]) AM_CONDITIONAL([HOST_ASM_MACOSX_X86_64], [test "x$HOST_ABI" = "xmacosx" -a "$host_cpu" = "x86_64" -a "x$enable_asm" != "xno"]) # Check if time_t is sized correctly AC_CHECK_SIZEOF([time_t], [time.h]) AC_CONFIG_FILES([ Makefile include/Makefile include/openssl/Makefile crypto/Makefile ssl/Makefile tls/Makefile tests/Makefile apps/Makefile apps/openssl/Makefile apps/nc/Makefile man/Makefile libcrypto.pc libssl.pc libtls.pc openssl.pc ]) AM_CONDITIONAL([SMALL_TIME_T], [test "$ac_cv_sizeof_time_t" = "4"]) if test "$ac_cv_sizeof_time_t" = "4"; then echo " ** Warning, this system is unable to represent times past 2038" echo " ** It will behave incorrectly when handling valid RFC5280 dates" fi AC_REQUIRE_AUX_FILE([tap-driver.sh]) AC_OUTPUT |
Changes to jni/libressl/crypto/CMakeLists.txt.
1 2 3 4 5 6 7 8 9 10 | include_directories( . ../include ../include/compat asn1 dsa evp modes ) | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | | | | > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | include_directories( . ../include ../include/compat asn1 dsa evp modes ) if(HOST_ASM_ELF_X86_64) set( ASM_X86_64_ELF_SRC aes/aes-elf-x86_64.s aes/bsaes-elf-x86_64.s aes/vpaes-elf-x86_64.s aes/aesni-elf-x86_64.s aes/aesni-sha1-elf-x86_64.s bn/modexp512-elf-x86_64.s bn/mont-elf-x86_64.s bn/mont5-elf-x86_64.s bn/gf2m-elf-x86_64.s camellia/cmll-elf-x86_64.s md5/md5-elf-x86_64.s modes/ghash-elf-x86_64.s rc4/rc4-elf-x86_64.s rc4/rc4-md5-elf-x86_64.s sha/sha1-elf-x86_64.s sha/sha256-elf-x86_64.S sha/sha512-elf-x86_64.S whrlpool/wp-elf-x86_64.s cpuid-elf-x86_64.S ) add_definitions(-DAES_ASM) add_definitions(-DBSAES_ASM) add_definitions(-DVPAES_ASM) add_definitions(-DOPENSSL_IA32_SSE2) add_definitions(-DOPENSSL_BN_ASM_MONT) add_definitions(-DOPENSSL_BN_ASM_MONT5) add_definitions(-DOPENSSL_BN_ASM_GF2m) add_definitions(-DMD5_ASM) add_definitions(-DGHASH_ASM) add_definitions(-DRSA_ASM) add_definitions(-DSHA1_ASM) add_definitions(-DSHA256_ASM) add_definitions(-DSHA512_ASM) add_definitions(-DWHIRLPOOL_ASM) add_definitions(-DOPENSSL_CPUID_OBJ) set(CRYPTO_SRC ${CRYPTO_SRC} ${ASM_X86_64_ELF_SRC}) set_property(SOURCE ${ASM_X86_64_ELF_SRC} PROPERTY LANGUAGE C) endif() if(HOST_ASM_MACOSX_X86_64) set( ASM_X86_64_MACOSX_SRC aes/aes-macosx-x86_64.s aes/bsaes-macosx-x86_64.s aes/vpaes-macosx-x86_64.s aes/aesni-macosx-x86_64.s aes/aesni-sha1-macosx-x86_64.s bn/modexp512-macosx-x86_64.s bn/mont-macosx-x86_64.s bn/mont5-macosx-x86_64.s bn/gf2m-macosx-x86_64.s camellia/cmll-macosx-x86_64.s md5/md5-macosx-x86_64.s modes/ghash-macosx-x86_64.s rc4/rc4-macosx-x86_64.s rc4/rc4-md5-macosx-x86_64.s sha/sha1-macosx-x86_64.s sha/sha256-macosx-x86_64.S sha/sha512-macosx-x86_64.S whrlpool/wp-macosx-x86_64.s cpuid-macosx-x86_64.S ) add_definitions(-DAES_ASM) add_definitions(-DBSAES_ASM) add_definitions(-DVPAES_ASM) add_definitions(-DOPENSSL_IA32_SSE2) add_definitions(-DOPENSSL_BN_ASM_MONT) add_definitions(-DOPENSSL_BN_ASM_MONT5) add_definitions(-DOPENSSL_BN_ASM_GF2m) add_definitions(-DMD5_ASM) add_definitions(-DGHASH_ASM) add_definitions(-DRSA_ASM) add_definitions(-DSHA1_ASM) add_definitions(-DSHA256_ASM) add_definitions(-DSHA512_ASM) add_definitions(-DWHIRLPOOL_ASM) add_definitions(-DOPENSSL_CPUID_OBJ) set(CRYPTO_SRC ${CRYPTO_SRC} ${ASM_X86_64_MACOSX_SRC}) set_property(SOURCE ${ASM_X86_64_MACOSX_SRC} PROPERTY LANGUAGE C) endif() if((NOT HOST_ASM_ELF_X86_64) AND (NOT HOST_ASM_MACOSX_X86_64)) set( CRYPTO_SRC ${CRYPTO_SRC} aes/aes_cbc.c aes/aes_core.c camellia/camellia.c camellia/cmll_cbc.c rc4/rc4_enc.c rc4/rc4_skey.c whrlpool/wp_block.c ) endif() set( CRYPTO_SRC ${CRYPTO_SRC} cpt_err.c cryptlib.c cversion.c ex_data.c malloc-wrapper.c mem_clr.c mem_dbg.c |
︙ | ︙ | |||
38 39 40 41 42 43 44 | asn1/a_bitstr.c asn1/a_bool.c asn1/a_bytes.c asn1/a_d2i_fp.c asn1/a_digest.c asn1/a_dup.c asn1/a_enum.c | < | | | 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | asn1/a_bitstr.c asn1/a_bool.c asn1/a_bytes.c asn1/a_d2i_fp.c asn1/a_digest.c asn1/a_dup.c asn1/a_enum.c asn1/a_i2d_fp.c asn1/a_int.c asn1/a_mbstr.c asn1/a_object.c asn1/a_octet.c asn1/a_print.c asn1/a_set.c asn1/a_sign.c asn1/a_strex.c asn1/a_strnid.c asn1/a_time.c asn1/a_time_tm.c asn1/a_type.c asn1/a_utf8.c asn1/a_verify.c asn1/ameth_lib.c asn1/asn1_err.c asn1/asn1_gen.c asn1/asn1_lib.c asn1/asn1_par.c |
︙ | ︙ | |||
259 260 261 262 263 264 265 | ec/ecp_mont.c ec/ecp_nist.c ec/ecp_oct.c ec/ecp_smpl.c ecdh/ech_err.c ecdh/ech_key.c ecdh/ech_lib.c | < | 349 350 351 352 353 354 355 356 357 358 359 360 361 362 | ec/ecp_mont.c ec/ecp_nist.c ec/ecp_oct.c ec/ecp_smpl.c ecdh/ech_err.c ecdh/ech_key.c ecdh/ech_lib.c ecdsa/ecs_asn1.c ecdsa/ecs_err.c ecdsa/ecs_lib.c ecdsa/ecs_ossl.c ecdsa/ecs_sign.c ecdsa/ecs_vrf.c engine/eng_all.c |
︙ | ︙ | |||
331 332 333 334 335 336 337 | evp/m_ecdsa.c evp/m_gost2814789.c evp/m_gostr341194.c evp/m_md4.c evp/m_md5.c evp/m_null.c evp/m_ripemd.c | < | 420 421 422 423 424 425 426 427 428 429 430 431 432 433 | evp/m_ecdsa.c evp/m_gost2814789.c evp/m_gostr341194.c evp/m_md4.c evp/m_md5.c evp/m_null.c evp/m_ripemd.c evp/m_sha1.c evp/m_sigver.c evp/m_streebog.c evp/m_wp.c evp/names.c evp/p5_crpt.c evp/p5_crpt2.c |
︙ | ︙ | |||
469 470 471 472 473 474 475 | rsa/rsa_sign.c rsa/rsa_ssl.c rsa/rsa_x931.c sha/sha1_one.c sha/sha1dgst.c sha/sha256.c sha/sha512.c | < < | 557 558 559 560 561 562 563 564 565 566 567 568 569 570 | rsa/rsa_sign.c rsa/rsa_ssl.c rsa/rsa_x931.c sha/sha1_one.c sha/sha1dgst.c sha/sha256.c sha/sha512.c stack/stack.c ts/ts_asn1.c ts/ts_conf.c ts/ts_err.c ts/ts_lib.c ts/ts_req_print.c ts/ts_req_utils.c |
︙ | ︙ | |||
594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 | if(NOT HAVE_STRNDUP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strndup.c) if(NOT HAVE_STRNLEN) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strnlen.c) endif() endif() if(NOT HAVE_EXPLICIT_BZERO) if(CMAKE_HOST_WIN32) set(CRYPTO_SRC ${CRYPTO_SRC} compat/explicit_bzero_win.c) else() set(CRYPTO_SRC ${CRYPTO_SRC} compat/explicit_bzero.c) set_source_files_properties(compat/explicit_bzero.c PROPERTIES COMPILE_FLAGS -O0) endif() endif() if(NOT HAVE_ARC4RANDOM_BUF) set(CRYPTO_SRC ${CRYPTO_SRC} compat/arc4random.c) if(NOT HAVE_GETENTROPY) if(CMAKE_HOST_WIN32) set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_win.c) elseif(CMAKE_SYSTEM_NAME MATCHES "AIX") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_aix.c) elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_freebsd.c) elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_linux.c) elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_netbsd.c) elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_darwin.c) elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_solaris.c) endif() endif() endif() if(NOT HAVE_TIMINGSAFE_BCMP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/timingsafe_bcmp.c) endif() if(NOT HAVE_TIMINGSAFE_MEMCMP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/timingsafe_memcmp.c) endif() if (BUILD_SHARED) add_library(crypto-objects OBJECT ${CRYPTO_SRC}) add_library(crypto STATIC $<TARGET_OBJECTS:crypto-objects>) add_library(crypto-shared SHARED $<TARGET_OBJECTS:crypto-objects>) set_target_properties(crypto-shared PROPERTIES OUTPUT_NAME crypto) set_target_properties(crypto-shared PROPERTIES VERSION ${CRYPTO_VERSION} SOVERSION ${CRYPTO_MAJOR_VERSION}) install(TARGETS crypto crypto-shared DESTINATION lib) else() add_library(crypto STATIC ${CRYPTO_SRC}) install(TARGETS crypto DESTINATION lib) endif() | > > > > > > > > > > > > > > > > > > > > > > > > > > > | 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 | if(NOT HAVE_STRNDUP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strndup.c) if(NOT HAVE_STRNLEN) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strnlen.c) endif() endif() if(NOT HAVE_TIMEGM) set(CRYPTO_SRC ${CRYPTO_SRC} compat/timegm.c) endif() if(NOT HAVE_EXPLICIT_BZERO) if(CMAKE_HOST_WIN32) set(CRYPTO_SRC ${CRYPTO_SRC} compat/explicit_bzero_win.c) else() set(CRYPTO_SRC ${CRYPTO_SRC} compat/explicit_bzero.c) set_source_files_properties(compat/explicit_bzero.c PROPERTIES COMPILE_FLAGS -O0) endif() endif() if(NOT HAVE_ARC4RANDOM_BUF) set(CRYPTO_SRC ${CRYPTO_SRC} compat/arc4random.c) if(NOT HAVE_GETENTROPY) if(CMAKE_HOST_WIN32) set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_win.c) elseif(CMAKE_SYSTEM_NAME MATCHES "AIX") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_aix.c) elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_freebsd.c) elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_hpux.c) elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_linux.c) elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_netbsd.c) elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_darwin.c) elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_solaris.c) endif() endif() endif() if(NOT HAVE_ARC4RANDOM_UNIFORM) set(CRYPTO_SRC ${CRYPTO_SRC} compat/arc4random_uniform.c) endif() if(NOT HAVE_TIMINGSAFE_BCMP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/timingsafe_bcmp.c) endif() if(NOT HAVE_TIMINGSAFE_MEMCMP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/timingsafe_memcmp.c) endif() if(NOT ENABLE_ASM) add_definitions(-DOPENSSL_NO_ASM) else() if(CMAKE_HOST_WIN32) add_definitions(-DOPENSSL_NO_ASM) endif() endif() if(NOT "${OPENSSLDIR}" STREQUAL "") add_definitions(-DOPENSSLDIR=\"${OPENSSLDIR}\") else() add_definitions(-DOPENSSLDIR=\"${CMAKE_INSTALL_PREFIX}/etc/ssl\") endif() if (BUILD_SHARED) add_library(crypto-objects OBJECT ${CRYPTO_SRC}) add_library(crypto STATIC $<TARGET_OBJECTS:crypto-objects>) add_library(crypto-shared SHARED $<TARGET_OBJECTS:crypto-objects>) if (MSVC) target_link_libraries(crypto-shared crypto Ws2_32.lib) endif() set_target_properties(crypto-shared PROPERTIES OUTPUT_NAME crypto) set_target_properties(crypto-shared PROPERTIES VERSION ${CRYPTO_VERSION} SOVERSION ${CRYPTO_MAJOR_VERSION}) install(TARGETS crypto crypto-shared DESTINATION lib) else() add_library(crypto STATIC ${CRYPTO_SRC}) install(TARGETS crypto DESTINATION lib) endif() |
Changes to jni/libressl/crypto/Makefile.am.
︙ | ︙ | |||
10 11 12 13 14 15 16 | EXTRA_DIST = VERSION EXTRA_DIST += CMakeLists.txt # needed for a CMake target EXTRA_DIST += compat/strcasecmp.c libcrypto_la_LDFLAGS = -version-info @LIBCRYPTO_VERSION@ -no-undefined | | > > > | > > > < | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | EXTRA_DIST = VERSION EXTRA_DIST += CMakeLists.txt # needed for a CMake target EXTRA_DIST += compat/strcasecmp.c libcrypto_la_LDFLAGS = -version-info @LIBCRYPTO_VERSION@ -no-undefined libcrypto_la_LIBADD = libcompat.la if !HAVE_EXPLICIT_BZERO libcrypto_la_LIBADD += libcompatnoopt.la endif libcrypto_la_CPPFLAGS = $(AM_CPPFLAGS) libcrypto_la_CPPFLAGS += -DLIBRESSL_INTERNAL libcrypto_la_CPPFLAGS += -DOPENSSL_NO_HW_PADLOCK if OPENSSL_NO_ASM libcrypto_la_CPPFLAGS += -DOPENSSL_NO_ASM else if HOST_WIN libcrypto_la_CPPFLAGS += -DOPENSSL_NO_ASM endif endif if OPENSSLDIR_DEFINED libcrypto_la_CPPFLAGS += -DOPENSSLDIR=\"@OPENSSLDIR@\" else libcrypto_la_CPPFLAGS += -DOPENSSLDIR=\"$(sysconfdir)/ssl\" endif noinst_LTLIBRARIES = libcompat.la # compatibility functions that need to be built without optimizations if !HAVE_EXPLICIT_BZERO noinst_LTLIBRARIES += libcompatnoopt.la libcompatnoopt_la_CFLAGS = -O0 libcompatnoopt_la_SOURCES = if HOST_WIN libcompatnoopt_la_SOURCES += compat/explicit_bzero_win.c else libcompatnoopt_la_SOURCES += compat/explicit_bzero.c endif endif |
︙ | ︙ | |||
69 70 71 72 73 74 75 76 77 78 79 80 81 82 | if !HAVE_ASPRINTF libcompat_la_SOURCES += compat/bsd-asprintf.c endif if !HAVE_INET_PTON libcompat_la_SOURCES += compat/inet_pton.c endif if !HAVE_REALLOCARRAY libcompat_la_SOURCES += compat/reallocarray.c endif if !HAVE_TIMINGSAFE_MEMCMP libcompat_la_SOURCES += compat/timingsafe_memcmp.c | > > > > | 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | if !HAVE_ASPRINTF libcompat_la_SOURCES += compat/bsd-asprintf.c endif if !HAVE_INET_PTON libcompat_la_SOURCES += compat/inet_pton.c endif if !HAVE_TIMEGM libcompat_la_SOURCES += compat/timegm.c endif if !HAVE_REALLOCARRAY libcompat_la_SOURCES += compat/reallocarray.c endif if !HAVE_TIMINGSAFE_MEMCMP libcompat_la_SOURCES += compat/timingsafe_memcmp.c |
︙ | ︙ | |||
139 140 141 142 143 144 145 | libcrypto_la_SOURCES += asn1/a_bitstr.c libcrypto_la_SOURCES += asn1/a_bool.c libcrypto_la_SOURCES += asn1/a_bytes.c libcrypto_la_SOURCES += asn1/a_d2i_fp.c libcrypto_la_SOURCES += asn1/a_digest.c libcrypto_la_SOURCES += asn1/a_dup.c libcrypto_la_SOURCES += asn1/a_enum.c | < | | | 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | libcrypto_la_SOURCES += asn1/a_bitstr.c libcrypto_la_SOURCES += asn1/a_bool.c libcrypto_la_SOURCES += asn1/a_bytes.c libcrypto_la_SOURCES += asn1/a_d2i_fp.c libcrypto_la_SOURCES += asn1/a_digest.c libcrypto_la_SOURCES += asn1/a_dup.c libcrypto_la_SOURCES += asn1/a_enum.c libcrypto_la_SOURCES += asn1/a_i2d_fp.c libcrypto_la_SOURCES += asn1/a_int.c libcrypto_la_SOURCES += asn1/a_mbstr.c libcrypto_la_SOURCES += asn1/a_object.c libcrypto_la_SOURCES += asn1/a_octet.c libcrypto_la_SOURCES += asn1/a_print.c libcrypto_la_SOURCES += asn1/a_set.c libcrypto_la_SOURCES += asn1/a_sign.c libcrypto_la_SOURCES += asn1/a_strex.c libcrypto_la_SOURCES += asn1/a_strnid.c libcrypto_la_SOURCES += asn1/a_time.c libcrypto_la_SOURCES += asn1/a_time_tm.c libcrypto_la_SOURCES += asn1/a_type.c libcrypto_la_SOURCES += asn1/a_utf8.c libcrypto_la_SOURCES += asn1/a_verify.c libcrypto_la_SOURCES += asn1/ameth_lib.c libcrypto_la_SOURCES += asn1/asn1_err.c libcrypto_la_SOURCES += asn1/asn1_gen.c libcrypto_la_SOURCES += asn1/asn1_lib.c libcrypto_la_SOURCES += asn1/asn1_par.c |
︙ | ︙ | |||
418 419 420 421 422 423 424 | libcrypto_la_SOURCES += ec/ecp_smpl.c noinst_HEADERS += ec/ec_lcl.h # ecdh libcrypto_la_SOURCES += ecdh/ech_err.c libcrypto_la_SOURCES += ecdh/ech_key.c libcrypto_la_SOURCES += ecdh/ech_lib.c | < | 426 427 428 429 430 431 432 433 434 435 436 437 438 439 | libcrypto_la_SOURCES += ec/ecp_smpl.c noinst_HEADERS += ec/ec_lcl.h # ecdh libcrypto_la_SOURCES += ecdh/ech_err.c libcrypto_la_SOURCES += ecdh/ech_key.c libcrypto_la_SOURCES += ecdh/ech_lib.c noinst_HEADERS += ecdh/ech_locl.h # ecdsa libcrypto_la_SOURCES += ecdsa/ecs_asn1.c libcrypto_la_SOURCES += ecdsa/ecs_err.c libcrypto_la_SOURCES += ecdsa/ecs_lib.c libcrypto_la_SOURCES += ecdsa/ecs_ossl.c |
︙ | ︙ | |||
501 502 503 504 505 506 507 | libcrypto_la_SOURCES += evp/m_ecdsa.c libcrypto_la_SOURCES += evp/m_gost2814789.c libcrypto_la_SOURCES += evp/m_gostr341194.c libcrypto_la_SOURCES += evp/m_md4.c libcrypto_la_SOURCES += evp/m_md5.c libcrypto_la_SOURCES += evp/m_null.c libcrypto_la_SOURCES += evp/m_ripemd.c | < | 508 509 510 511 512 513 514 515 516 517 518 519 520 521 | libcrypto_la_SOURCES += evp/m_ecdsa.c libcrypto_la_SOURCES += evp/m_gost2814789.c libcrypto_la_SOURCES += evp/m_gostr341194.c libcrypto_la_SOURCES += evp/m_md4.c libcrypto_la_SOURCES += evp/m_md5.c libcrypto_la_SOURCES += evp/m_null.c libcrypto_la_SOURCES += evp/m_ripemd.c libcrypto_la_SOURCES += evp/m_sha1.c libcrypto_la_SOURCES += evp/m_sigver.c libcrypto_la_SOURCES += evp/m_streebog.c libcrypto_la_SOURCES += evp/m_wp.c libcrypto_la_SOURCES += evp/names.c libcrypto_la_SOURCES += evp/p5_crpt.c libcrypto_la_SOURCES += evp/p5_crpt2.c |
︙ | ︙ | |||
695 696 697 698 699 700 701 | noinst_HEADERS += rsa/rsa_locl.h # sha libcrypto_la_SOURCES += sha/sha1_one.c libcrypto_la_SOURCES += sha/sha1dgst.c libcrypto_la_SOURCES += sha/sha256.c libcrypto_la_SOURCES += sha/sha512.c | < < | 701 702 703 704 705 706 707 708 709 710 711 712 713 714 | noinst_HEADERS += rsa/rsa_locl.h # sha libcrypto_la_SOURCES += sha/sha1_one.c libcrypto_la_SOURCES += sha/sha1dgst.c libcrypto_la_SOURCES += sha/sha256.c libcrypto_la_SOURCES += sha/sha512.c noinst_HEADERS += sha/sha_locl.h # stack libcrypto_la_SOURCES += stack/stack.c # ts libcrypto_la_SOURCES += ts/ts_asn1.c |
︙ | ︙ |
Changes to jni/libressl/crypto/Makefile.am.arc4random.
1 2 3 4 5 6 7 8 9 | if !HAVE_ARC4RANDOM_BUF libcompat_la_SOURCES += compat/arc4random.c if !HAVE_GETENTROPY if HOST_AIX libcompat_la_SOURCES += compat/getentropy_aix.c endif if HOST_FREEBSD libcompat_la_SOURCES += compat/getentropy_freebsd.c | > | 1 2 3 4 5 6 7 8 9 10 | if !HAVE_ARC4RANDOM_BUF libcompat_la_SOURCES += compat/arc4random.c libcompat_la_SOURCES += compat/arc4random_uniform.c if !HAVE_GETENTROPY if HOST_AIX libcompat_la_SOURCES += compat/getentropy_aix.c endif if HOST_FREEBSD libcompat_la_SOURCES += compat/getentropy_freebsd.c |
︙ | ︙ |
Changes to jni/libressl/crypto/Makefile.in.
︙ | ︙ | |||
85 86 87 88 89 90 91 | PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ | > | | | | > > > | | | | | | | | > | | | | | > | | | | | | | | | | | | | | | | | | | 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_EXPLICIT_BZERO_FALSE@am__append_1 = libcompatnoopt.la @OPENSSL_NO_ASM_TRUE@am__append_2 = -DOPENSSL_NO_ASM @HOST_WIN_TRUE@@OPENSSL_NO_ASM_FALSE@am__append_3 = -DOPENSSL_NO_ASM @OPENSSLDIR_DEFINED_TRUE@am__append_4 = -DOPENSSLDIR=\"@OPENSSLDIR@\" @OPENSSLDIR_DEFINED_FALSE@am__append_5 = -DOPENSSLDIR=\"$(sysconfdir)/ssl\" # compatibility functions that need to be built without optimizations @HAVE_EXPLICIT_BZERO_FALSE@am__append_6 = libcompatnoopt.la @HAVE_EXPLICIT_BZERO_FALSE@@HOST_WIN_TRUE@am__append_7 = compat/explicit_bzero_win.c @HAVE_EXPLICIT_BZERO_FALSE@@HOST_WIN_FALSE@am__append_8 = compat/explicit_bzero.c @HAVE_STRLCAT_FALSE@am__append_9 = compat/strlcat.c @HAVE_STRLCPY_FALSE@am__append_10 = compat/strlcpy.c @HAVE_STRNDUP_FALSE@am__append_11 = compat/strndup.c # the only user of strnlen is strndup, so only build it if needed @HAVE_STRNDUP_FALSE@@HAVE_STRNLEN_FALSE@am__append_12 = compat/strnlen.c @HAVE_ASPRINTF_FALSE@am__append_13 = compat/bsd-asprintf.c @HAVE_INET_PTON_FALSE@am__append_14 = compat/inet_pton.c @HAVE_TIMEGM_FALSE@am__append_15 = compat/timegm.c @HAVE_REALLOCARRAY_FALSE@am__append_16 = compat/reallocarray.c @HAVE_TIMINGSAFE_MEMCMP_FALSE@am__append_17 = compat/timingsafe_memcmp.c @HAVE_TIMINGSAFE_BCMP_FALSE@am__append_18 = compat/timingsafe_bcmp.c @HOST_WIN_TRUE@am__append_19 = compat/posix_win.c @HAVE_ARC4RANDOM_BUF_FALSE@am__append_20 = compat/arc4random.c \ @HAVE_ARC4RANDOM_BUF_FALSE@ compat/arc4random_uniform.c @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_AIX_TRUE@am__append_21 = compat/getentropy_aix.c @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_FREEBSD_TRUE@am__append_22 = compat/getentropy_freebsd.c @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_HPUX_TRUE@am__append_23 = compat/getentropy_hpux.c @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_LINUX_TRUE@am__append_24 = compat/getentropy_linux.c @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_NETBSD_TRUE@am__append_25 = compat/getentropy_netbsd.c @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_DARWIN_TRUE@am__append_26 = compat/getentropy_osx.c @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_SOLARIS_TRUE@am__append_27 = compat/getentropy_solaris.c @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_WIN_TRUE@am__append_28 = compat/getentropy_win.c @HOST_ASM_ELF_X86_64_TRUE@am__append_29 = -DAES_ASM -DBSAES_ASM \ @HOST_ASM_ELF_X86_64_TRUE@ -DVPAES_ASM -DOPENSSL_IA32_SSE2 \ @HOST_ASM_ELF_X86_64_TRUE@ -DOPENSSL_BN_ASM_MONT \ @HOST_ASM_ELF_X86_64_TRUE@ -DOPENSSL_BN_ASM_MONT5 \ @HOST_ASM_ELF_X86_64_TRUE@ -DOPENSSL_BN_ASM_GF2m -DMD5_ASM \ @HOST_ASM_ELF_X86_64_TRUE@ -DGHASH_ASM -DRSA_ASM -DSHA1_ASM \ @HOST_ASM_ELF_X86_64_TRUE@ -DSHA256_ASM -DSHA512_ASM \ @HOST_ASM_ELF_X86_64_TRUE@ -DWHIRLPOOL_ASM -DOPENSSL_CPUID_OBJ @HOST_ASM_ELF_X86_64_TRUE@am__append_30 = $(ASM_X86_64_ELF) @HOST_ASM_MACOSX_X86_64_TRUE@am__append_31 = -DAES_ASM -DBSAES_ASM \ @HOST_ASM_MACOSX_X86_64_TRUE@ -DVPAES_ASM -DOPENSSL_IA32_SSE2 \ @HOST_ASM_MACOSX_X86_64_TRUE@ -DOPENSSL_BN_ASM_MONT \ @HOST_ASM_MACOSX_X86_64_TRUE@ -DOPENSSL_BN_ASM_MONT5 \ @HOST_ASM_MACOSX_X86_64_TRUE@ -DOPENSSL_BN_ASM_GF2m -DMD5_ASM \ @HOST_ASM_MACOSX_X86_64_TRUE@ -DGHASH_ASM -DRSA_ASM -DSHA1_ASM \ @HOST_ASM_MACOSX_X86_64_TRUE@ -DSHA256_ASM -DSHA512_ASM \ @HOST_ASM_MACOSX_X86_64_TRUE@ -DWHIRLPOOL_ASM \ @HOST_ASM_MACOSX_X86_64_TRUE@ -DOPENSSL_CPUID_OBJ @HOST_ASM_MACOSX_X86_64_TRUE@am__append_32 = $(ASM_X86_64_MACOSX) @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@am__append_33 = aes/aes_cbc.c \ @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@ aes/aes_core.c \ @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@ camellia/camellia.c \ @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@ camellia/cmll_cbc.c \ @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@ rc4/rc4_enc.c \ @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@ rc4/rc4_skey.c \ @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@ whrlpool/wp_block.c @HOST_WIN_FALSE@am__append_34 = bio/b_posix.c @HOST_WIN_TRUE@am__append_35 = bio/b_win.c @HOST_WIN_FALSE@am__append_36 = bio/bss_log.c @HOST_WIN_FALSE@am__append_37 = ui/ui_openssl.c @HOST_WIN_TRUE@am__append_38 = ui/ui_openssl_win.c subdir = crypto ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/check-hardening-options.m4 \ $(top_srcdir)/m4/check-libc.m4 \ $(top_srcdir)/m4/check-os-options.m4 \ $(top_srcdir)/m4/disable-compiler-warnings.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ |
︙ | ︙ | |||
191 192 193 194 195 196 197 | } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = libcompat_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am__libcompat_la_SOURCES_DIST = compat/strlcat.c compat/strlcpy.c \ compat/strndup.c compat/strnlen.c compat/bsd-asprintf.c \ | | | > > | | | > | | > | | | | | | | | | | | | > > | | 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 | } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = libcompat_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am__libcompat_la_SOURCES_DIST = compat/strlcat.c compat/strlcpy.c \ compat/strndup.c compat/strnlen.c compat/bsd-asprintf.c \ compat/inet_pton.c compat/timegm.c compat/reallocarray.c \ compat/timingsafe_memcmp.c compat/timingsafe_bcmp.c \ compat/posix_win.c compat/arc4random.c \ compat/arc4random_uniform.c compat/getentropy_aix.c \ compat/getentropy_freebsd.c compat/getentropy_hpux.c \ compat/getentropy_linux.c compat/getentropy_netbsd.c \ compat/getentropy_osx.c compat/getentropy_solaris.c \ compat/getentropy_win.c am__dirstamp = $(am__leading_dot)dirstamp @HAVE_STRLCAT_FALSE@am__objects_1 = compat/strlcat.lo @HAVE_STRLCPY_FALSE@am__objects_2 = compat/strlcpy.lo @HAVE_STRNDUP_FALSE@am__objects_3 = compat/strndup.lo @HAVE_STRNDUP_FALSE@@HAVE_STRNLEN_FALSE@am__objects_4 = \ @HAVE_STRNDUP_FALSE@@HAVE_STRNLEN_FALSE@ compat/strnlen.lo @HAVE_ASPRINTF_FALSE@am__objects_5 = compat/bsd-asprintf.lo @HAVE_INET_PTON_FALSE@am__objects_6 = compat/inet_pton.lo @HAVE_TIMEGM_FALSE@am__objects_7 = compat/timegm.lo @HAVE_REALLOCARRAY_FALSE@am__objects_8 = compat/reallocarray.lo @HAVE_TIMINGSAFE_MEMCMP_FALSE@am__objects_9 = \ @HAVE_TIMINGSAFE_MEMCMP_FALSE@ compat/timingsafe_memcmp.lo @HAVE_TIMINGSAFE_BCMP_FALSE@am__objects_10 = \ @HAVE_TIMINGSAFE_BCMP_FALSE@ compat/timingsafe_bcmp.lo @HOST_WIN_TRUE@am__objects_11 = compat/posix_win.lo @HAVE_ARC4RANDOM_BUF_FALSE@am__objects_12 = compat/arc4random.lo \ @HAVE_ARC4RANDOM_BUF_FALSE@ compat/arc4random_uniform.lo @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_AIX_TRUE@am__objects_13 = compat/getentropy_aix.lo @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_FREEBSD_TRUE@am__objects_14 = compat/getentropy_freebsd.lo @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_HPUX_TRUE@am__objects_15 = compat/getentropy_hpux.lo @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_LINUX_TRUE@am__objects_16 = compat/getentropy_linux.lo @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_NETBSD_TRUE@am__objects_17 = compat/getentropy_netbsd.lo @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_DARWIN_TRUE@am__objects_18 = compat/getentropy_osx.lo @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_SOLARIS_TRUE@am__objects_19 = compat/getentropy_solaris.lo @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_WIN_TRUE@am__objects_20 = compat/getentropy_win.lo am_libcompat_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ $(am__objects_3) $(am__objects_4) $(am__objects_5) \ $(am__objects_6) $(am__objects_7) $(am__objects_8) \ $(am__objects_9) $(am__objects_10) $(am__objects_11) \ $(am__objects_12) $(am__objects_13) $(am__objects_14) \ $(am__objects_15) $(am__objects_16) $(am__objects_17) \ $(am__objects_18) $(am__objects_19) $(am__objects_20) libcompat_la_OBJECTS = $(am_libcompat_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libcompatnoopt_la_LIBADD = am__libcompatnoopt_la_SOURCES_DIST = compat/explicit_bzero_win.c \ compat/explicit_bzero.c @HAVE_EXPLICIT_BZERO_FALSE@@HOST_WIN_TRUE@am__objects_21 = compat/libcompatnoopt_la-explicit_bzero_win.lo @HAVE_EXPLICIT_BZERO_FALSE@@HOST_WIN_FALSE@am__objects_22 = compat/libcompatnoopt_la-explicit_bzero.lo @HAVE_EXPLICIT_BZERO_FALSE@am_libcompatnoopt_la_OBJECTS = \ @HAVE_EXPLICIT_BZERO_FALSE@ $(am__objects_21) $(am__objects_22) libcompatnoopt_la_OBJECTS = $(am_libcompatnoopt_la_OBJECTS) libcompatnoopt_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libcompatnoopt_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ @HAVE_EXPLICIT_BZERO_FALSE@am_libcompatnoopt_la_rpath = libcrypto_la_DEPENDENCIES = libcompat.la $(am__append_1) am__libcrypto_la_SOURCES_DIST = aes/aes-elf-x86_64.s \ aes/bsaes-elf-x86_64.s aes/vpaes-elf-x86_64.s \ aes/aesni-elf-x86_64.s aes/aesni-sha1-elf-x86_64.s \ bn/modexp512-elf-x86_64.s bn/mont-elf-x86_64.s \ bn/mont5-elf-x86_64.s bn/gf2m-elf-x86_64.s \ camellia/cmll-elf-x86_64.s md5/md5-elf-x86_64.s \ modes/ghash-elf-x86_64.s rc4/rc4-elf-x86_64.s \ |
︙ | ︙ | |||
271 272 273 274 275 276 277 | camellia/camellia.c camellia/cmll_cbc.c rc4/rc4_enc.c \ rc4/rc4_skey.c whrlpool/wp_block.c cpt_err.c cryptlib.c \ cversion.c ex_data.c malloc-wrapper.c mem_clr.c mem_dbg.c \ o_init.c o_str.c o_time.c aes/aes_cfb.c aes/aes_ctr.c \ aes/aes_ecb.c aes/aes_ige.c aes/aes_misc.c aes/aes_ofb.c \ aes/aes_wrap.c asn1/a_bitstr.c asn1/a_bool.c asn1/a_bytes.c \ asn1/a_d2i_fp.c asn1/a_digest.c asn1/a_dup.c asn1/a_enum.c \ | | | | | | | | | | | | | | | | | | | | < > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | > | | | | | | < | | | | | | | | < | | | | | | | | | | | | | 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 | camellia/camellia.c camellia/cmll_cbc.c rc4/rc4_enc.c \ rc4/rc4_skey.c whrlpool/wp_block.c cpt_err.c cryptlib.c \ cversion.c ex_data.c malloc-wrapper.c mem_clr.c mem_dbg.c \ o_init.c o_str.c o_time.c aes/aes_cfb.c aes/aes_ctr.c \ aes/aes_ecb.c aes/aes_ige.c aes/aes_misc.c aes/aes_ofb.c \ aes/aes_wrap.c asn1/a_bitstr.c asn1/a_bool.c asn1/a_bytes.c \ asn1/a_d2i_fp.c asn1/a_digest.c asn1/a_dup.c asn1/a_enum.c \ asn1/a_i2d_fp.c asn1/a_int.c asn1/a_mbstr.c asn1/a_object.c \ asn1/a_octet.c asn1/a_print.c asn1/a_set.c asn1/a_sign.c \ asn1/a_strex.c asn1/a_strnid.c asn1/a_time.c asn1/a_time_tm.c \ asn1/a_type.c asn1/a_utf8.c asn1/a_verify.c asn1/ameth_lib.c \ asn1/asn1_err.c asn1/asn1_gen.c asn1/asn1_lib.c \ asn1/asn1_par.c asn1/asn_mime.c asn1/asn_moid.c \ asn1/asn_pack.c asn1/bio_asn1.c asn1/bio_ndef.c asn1/d2i_pr.c \ asn1/d2i_pu.c asn1/evp_asn1.c asn1/f_enum.c asn1/f_int.c \ asn1/f_string.c asn1/i2d_pr.c asn1/i2d_pu.c asn1/n_pkey.c \ asn1/nsseq.c asn1/p5_pbe.c asn1/p5_pbev2.c asn1/p8_pkey.c \ asn1/t_bitst.c asn1/t_crl.c asn1/t_pkey.c asn1/t_req.c \ asn1/t_spki.c asn1/t_x509.c asn1/t_x509a.c asn1/tasn_dec.c \ asn1/tasn_enc.c asn1/tasn_fre.c asn1/tasn_new.c \ asn1/tasn_prn.c asn1/tasn_typ.c asn1/tasn_utl.c asn1/x_algor.c \ asn1/x_attrib.c asn1/x_bignum.c asn1/x_crl.c asn1/x_exten.c \ asn1/x_info.c asn1/x_long.c asn1/x_name.c asn1/x_nx509.c \ asn1/x_pkey.c asn1/x_pubkey.c asn1/x_req.c asn1/x_sig.c \ asn1/x_spki.c asn1/x_val.c asn1/x_x509.c asn1/x_x509a.c \ bf/bf_cfb64.c bf/bf_ecb.c bf/bf_enc.c bf/bf_ofb64.c \ bf/bf_skey.c bio/b_dump.c bio/b_posix.c bio/b_print.c \ bio/b_sock.c bio/b_win.c bio/bf_buff.c bio/bf_nbio.c \ bio/bf_null.c bio/bio_cb.c bio/bio_err.c bio/bio_lib.c \ bio/bss_acpt.c bio/bss_bio.c bio/bss_conn.c bio/bss_dgram.c \ bio/bss_fd.c bio/bss_file.c bio/bss_log.c bio/bss_mem.c \ bio/bss_null.c bio/bss_sock.c bn/bn_add.c bn/bn_asm.c \ bn/bn_blind.c bn/bn_const.c bn/bn_ctx.c bn/bn_depr.c \ bn/bn_div.c bn/bn_err.c bn/bn_exp.c bn/bn_exp2.c bn/bn_gcd.c \ bn/bn_gf2m.c bn/bn_kron.c bn/bn_lib.c bn/bn_mod.c bn/bn_mont.c \ bn/bn_mpi.c bn/bn_mul.c bn/bn_nist.c bn/bn_prime.c \ bn/bn_print.c bn/bn_rand.c bn/bn_recp.c bn/bn_shift.c \ bn/bn_sqr.c bn/bn_sqrt.c bn/bn_word.c bn/bn_x931p.c \ buffer/buf_err.c buffer/buf_str.c buffer/buffer.c \ camellia/cmll_cfb.c camellia/cmll_ctr.c camellia/cmll_ecb.c \ camellia/cmll_misc.c camellia/cmll_ofb.c cast/c_cfb64.c \ cast/c_ecb.c cast/c_enc.c cast/c_ofb64.c cast/c_skey.c \ chacha/chacha.c cmac/cm_ameth.c cmac/cm_pmeth.c cmac/cmac.c \ comp/c_rle.c comp/c_zlib.c comp/comp_err.c comp/comp_lib.c \ conf/conf_api.c conf/conf_def.c conf/conf_err.c \ conf/conf_lib.c conf/conf_mall.c conf/conf_mod.c \ conf/conf_sap.c des/cbc_cksm.c des/cbc_enc.c des/cfb64ede.c \ des/cfb64enc.c des/cfb_enc.c des/des_enc.c des/ecb3_enc.c \ des/ecb_enc.c des/ede_cbcm_enc.c des/enc_read.c des/enc_writ.c \ des/fcrypt.c des/fcrypt_b.c des/ofb64ede.c des/ofb64enc.c \ des/ofb_enc.c des/pcbc_enc.c des/qud_cksm.c des/rand_key.c \ des/set_key.c des/str2key.c des/xcbc_enc.c dh/dh_ameth.c \ dh/dh_asn1.c dh/dh_check.c dh/dh_depr.c dh/dh_err.c \ dh/dh_gen.c dh/dh_key.c dh/dh_lib.c dh/dh_pmeth.c dh/dh_prn.c \ dsa/dsa_ameth.c dsa/dsa_asn1.c dsa/dsa_depr.c dsa/dsa_err.c \ dsa/dsa_gen.c dsa/dsa_key.c dsa/dsa_lib.c dsa/dsa_ossl.c \ dsa/dsa_pmeth.c dsa/dsa_prn.c dsa/dsa_sign.c dsa/dsa_vrf.c \ dso/dso_dlfcn.c dso/dso_err.c dso/dso_lib.c dso/dso_null.c \ dso/dso_openssl.c ec/ec2_mult.c ec/ec2_oct.c ec/ec2_smpl.c \ ec/ec_ameth.c ec/ec_asn1.c ec/ec_check.c ec/ec_curve.c \ ec/ec_cvt.c ec/ec_err.c ec/ec_key.c ec/ec_lib.c ec/ec_mult.c \ ec/ec_oct.c ec/ec_pmeth.c ec/ec_print.c ec/eck_prn.c \ ec/ecp_mont.c ec/ecp_nist.c ec/ecp_oct.c ec/ecp_smpl.c \ ecdh/ech_err.c ecdh/ech_key.c ecdh/ech_lib.c ecdsa/ecs_asn1.c \ ecdsa/ecs_err.c ecdsa/ecs_lib.c ecdsa/ecs_ossl.c \ ecdsa/ecs_sign.c ecdsa/ecs_vrf.c engine/eng_all.c \ engine/eng_cnf.c engine/eng_ctrl.c engine/eng_dyn.c \ engine/eng_err.c engine/eng_fat.c engine/eng_init.c \ engine/eng_lib.c engine/eng_list.c engine/eng_openssl.c \ engine/eng_pkey.c engine/eng_table.c engine/tb_asnmth.c \ engine/tb_cipher.c engine/tb_dh.c engine/tb_digest.c \ engine/tb_dsa.c engine/tb_ecdh.c engine/tb_ecdsa.c \ engine/tb_pkmeth.c engine/tb_rand.c engine/tb_rsa.c \ engine/tb_store.c err/err.c err/err_all.c err/err_prn.c \ evp/bio_b64.c evp/bio_enc.c evp/bio_md.c evp/c_all.c \ evp/digest.c evp/e_aes.c evp/e_aes_cbc_hmac_sha1.c evp/e_bf.c \ evp/e_camellia.c evp/e_cast.c evp/e_chacha.c \ evp/e_chacha20poly1305.c evp/e_des.c evp/e_des3.c \ evp/e_gost2814789.c evp/e_idea.c evp/e_null.c evp/e_old.c \ evp/e_rc2.c evp/e_rc4.c evp/e_rc4_hmac_md5.c evp/e_xcbc_d.c \ evp/encode.c evp/evp_aead.c evp/evp_enc.c evp/evp_err.c \ evp/evp_key.c evp/evp_lib.c evp/evp_pbe.c evp/evp_pkey.c \ evp/m_dss.c evp/m_dss1.c evp/m_ecdsa.c evp/m_gost2814789.c \ evp/m_gostr341194.c evp/m_md4.c evp/m_md5.c evp/m_null.c \ evp/m_ripemd.c evp/m_sha1.c evp/m_sigver.c evp/m_streebog.c \ evp/m_wp.c evp/names.c evp/p5_crpt.c evp/p5_crpt2.c \ evp/p_dec.c evp/p_enc.c evp/p_lib.c evp/p_open.c evp/p_seal.c \ evp/p_sign.c evp/p_verify.c evp/pmeth_fn.c evp/pmeth_gn.c \ evp/pmeth_lib.c gost/gost2814789.c gost/gost89_keywrap.c \ gost/gost89_params.c gost/gost89imit_ameth.c \ gost/gost89imit_pmeth.c gost/gost_asn1.c gost/gost_err.c \ gost/gostr341001.c gost/gostr341001_ameth.c \ gost/gostr341001_key.c gost/gostr341001_params.c \ gost/gostr341001_pmeth.c gost/gostr341194.c gost/streebog.c \ hmac/hm_ameth.c hmac/hm_pmeth.c hmac/hmac.c idea/i_cbc.c \ idea/i_cfb64.c idea/i_ecb.c idea/i_ofb64.c idea/i_skey.c \ krb5/krb5_asn.c lhash/lh_stats.c lhash/lhash.c md4/md4_dgst.c \ md4/md4_one.c md5/md5_dgst.c md5/md5_one.c modes/cbc128.c \ modes/ccm128.c modes/cfb128.c modes/ctr128.c modes/cts128.c \ modes/gcm128.c modes/ofb128.c modes/xts128.c objects/o_names.c \ objects/obj_dat.c objects/obj_err.c objects/obj_lib.c \ objects/obj_xref.c ocsp/ocsp_asn.c ocsp/ocsp_cl.c \ ocsp/ocsp_err.c ocsp/ocsp_ext.c ocsp/ocsp_ht.c ocsp/ocsp_lib.c \ ocsp/ocsp_prn.c ocsp/ocsp_srv.c ocsp/ocsp_vfy.c pem/pem_all.c \ pem/pem_err.c pem/pem_info.c pem/pem_lib.c pem/pem_oth.c \ pem/pem_pk8.c pem/pem_pkey.c pem/pem_seal.c pem/pem_sign.c \ pem/pem_x509.c pem/pem_xaux.c pem/pvkfmt.c pkcs12/p12_add.c \ |
︙ | ︙ | |||
389 390 391 392 393 394 395 | rc2/rc2_skey.c rc2/rc2cfb64.c rc2/rc2ofb64.c ripemd/rmd_dgst.c \ ripemd/rmd_one.c rsa/rsa_ameth.c rsa/rsa_asn1.c rsa/rsa_chk.c \ rsa/rsa_crpt.c rsa/rsa_depr.c rsa/rsa_eay.c rsa/rsa_err.c \ rsa/rsa_gen.c rsa/rsa_lib.c rsa/rsa_none.c rsa/rsa_oaep.c \ rsa/rsa_pk1.c rsa/rsa_pmeth.c rsa/rsa_prn.c rsa/rsa_pss.c \ rsa/rsa_saos.c rsa/rsa_sign.c rsa/rsa_ssl.c rsa/rsa_x931.c \ sha/sha1_one.c sha/sha1dgst.c sha/sha256.c sha/sha512.c \ | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | < | | | | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 | rc2/rc2_skey.c rc2/rc2cfb64.c rc2/rc2ofb64.c ripemd/rmd_dgst.c \ ripemd/rmd_one.c rsa/rsa_ameth.c rsa/rsa_asn1.c rsa/rsa_chk.c \ rsa/rsa_crpt.c rsa/rsa_depr.c rsa/rsa_eay.c rsa/rsa_err.c \ rsa/rsa_gen.c rsa/rsa_lib.c rsa/rsa_none.c rsa/rsa_oaep.c \ rsa/rsa_pk1.c rsa/rsa_pmeth.c rsa/rsa_prn.c rsa/rsa_pss.c \ rsa/rsa_saos.c rsa/rsa_sign.c rsa/rsa_ssl.c rsa/rsa_x931.c \ sha/sha1_one.c sha/sha1dgst.c sha/sha256.c sha/sha512.c \ stack/stack.c ts/ts_asn1.c ts/ts_conf.c ts/ts_err.c \ ts/ts_lib.c ts/ts_req_print.c ts/ts_req_utils.c \ ts/ts_rsp_print.c ts/ts_rsp_sign.c ts/ts_rsp_utils.c \ ts/ts_rsp_verify.c ts/ts_verify_ctx.c txt_db/txt_db.c \ ui/ui_err.c ui/ui_lib.c ui/ui_openssl.c ui/ui_openssl_win.c \ ui/ui_util.c whrlpool/wp_dgst.c x509/by_dir.c x509/by_file.c \ x509/by_mem.c x509/x509_att.c x509/x509_cmp.c x509/x509_d2.c \ x509/x509_def.c x509/x509_err.c x509/x509_ext.c x509/x509_lu.c \ x509/x509_obj.c x509/x509_r2x.c x509/x509_req.c \ x509/x509_set.c x509/x509_trs.c x509/x509_txt.c x509/x509_v3.c \ x509/x509_vfy.c x509/x509_vpm.c x509/x509cset.c \ x509/x509name.c x509/x509rset.c x509/x509spki.c \ x509/x509type.c x509/x_all.c x509v3/pcy_cache.c \ x509v3/pcy_data.c x509v3/pcy_lib.c x509v3/pcy_map.c \ x509v3/pcy_node.c x509v3/pcy_tree.c x509v3/v3_akey.c \ x509v3/v3_akeya.c x509v3/v3_alt.c x509v3/v3_bcons.c \ x509v3/v3_bitst.c x509v3/v3_conf.c x509v3/v3_cpols.c \ x509v3/v3_crld.c x509v3/v3_enum.c x509v3/v3_extku.c \ x509v3/v3_genn.c x509v3/v3_ia5.c x509v3/v3_info.c \ x509v3/v3_int.c x509v3/v3_lib.c x509v3/v3_ncons.c \ x509v3/v3_ocsp.c x509v3/v3_pci.c x509v3/v3_pcia.c \ x509v3/v3_pcons.c x509v3/v3_pku.c x509v3/v3_pmaps.c \ x509v3/v3_prn.c x509v3/v3_purp.c x509v3/v3_skey.c \ x509v3/v3_sxnet.c x509v3/v3_utl.c x509v3/v3err.c am__objects_23 = aes/aes-elf-x86_64.lo aes/bsaes-elf-x86_64.lo \ aes/vpaes-elf-x86_64.lo aes/aesni-elf-x86_64.lo \ aes/aesni-sha1-elf-x86_64.lo bn/modexp512-elf-x86_64.lo \ bn/mont-elf-x86_64.lo bn/mont5-elf-x86_64.lo \ bn/gf2m-elf-x86_64.lo camellia/cmll-elf-x86_64.lo \ md5/md5-elf-x86_64.lo modes/ghash-elf-x86_64.lo \ rc4/rc4-elf-x86_64.lo rc4/rc4-md5-elf-x86_64.lo \ sha/sha1-elf-x86_64.lo sha/libcrypto_la-sha256-elf-x86_64.lo \ sha/libcrypto_la-sha512-elf-x86_64.lo \ whrlpool/wp-elf-x86_64.lo libcrypto_la-cpuid-elf-x86_64.lo @HOST_ASM_ELF_X86_64_TRUE@am__objects_24 = $(am__objects_23) am__objects_25 = aes/aes-macosx-x86_64.lo aes/bsaes-macosx-x86_64.lo \ aes/vpaes-macosx-x86_64.lo aes/aesni-macosx-x86_64.lo \ aes/aesni-sha1-macosx-x86_64.lo bn/modexp512-macosx-x86_64.lo \ bn/mont-macosx-x86_64.lo bn/mont5-macosx-x86_64.lo \ bn/gf2m-macosx-x86_64.lo camellia/cmll-macosx-x86_64.lo \ md5/md5-macosx-x86_64.lo modes/ghash-macosx-x86_64.lo \ rc4/rc4-macosx-x86_64.lo rc4/rc4-md5-macosx-x86_64.lo \ sha/sha1-macosx-x86_64.lo \ sha/libcrypto_la-sha256-macosx-x86_64.lo \ sha/libcrypto_la-sha512-macosx-x86_64.lo \ whrlpool/wp-macosx-x86_64.lo \ libcrypto_la-cpuid-macosx-x86_64.lo @HOST_ASM_MACOSX_X86_64_TRUE@am__objects_26 = $(am__objects_25) @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@am__objects_27 = aes/libcrypto_la-aes_cbc.lo \ @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@ aes/libcrypto_la-aes_core.lo \ @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@ camellia/libcrypto_la-camellia.lo \ @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@ camellia/libcrypto_la-cmll_cbc.lo \ @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@ rc4/libcrypto_la-rc4_enc.lo \ @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@ rc4/libcrypto_la-rc4_skey.lo \ @HOST_ASM_ELF_X86_64_FALSE@@HOST_ASM_MACOSX_X86_64_FALSE@ whrlpool/libcrypto_la-wp_block.lo @HOST_WIN_FALSE@am__objects_28 = bio/libcrypto_la-b_posix.lo @HOST_WIN_TRUE@am__objects_29 = bio/libcrypto_la-b_win.lo @HOST_WIN_FALSE@am__objects_30 = bio/libcrypto_la-bss_log.lo @HOST_WIN_FALSE@am__objects_31 = ui/libcrypto_la-ui_openssl.lo @HOST_WIN_TRUE@am__objects_32 = ui/libcrypto_la-ui_openssl_win.lo am_libcrypto_la_OBJECTS = $(am__objects_24) $(am__objects_26) \ $(am__objects_27) libcrypto_la-cpt_err.lo \ libcrypto_la-cryptlib.lo libcrypto_la-cversion.lo \ libcrypto_la-ex_data.lo libcrypto_la-malloc-wrapper.lo \ libcrypto_la-mem_clr.lo libcrypto_la-mem_dbg.lo \ libcrypto_la-o_init.lo libcrypto_la-o_str.lo \ libcrypto_la-o_time.lo aes/libcrypto_la-aes_cfb.lo \ aes/libcrypto_la-aes_ctr.lo aes/libcrypto_la-aes_ecb.lo \ aes/libcrypto_la-aes_ige.lo aes/libcrypto_la-aes_misc.lo \ aes/libcrypto_la-aes_ofb.lo aes/libcrypto_la-aes_wrap.lo \ asn1/libcrypto_la-a_bitstr.lo asn1/libcrypto_la-a_bool.lo \ asn1/libcrypto_la-a_bytes.lo asn1/libcrypto_la-a_d2i_fp.lo \ asn1/libcrypto_la-a_digest.lo asn1/libcrypto_la-a_dup.lo \ asn1/libcrypto_la-a_enum.lo asn1/libcrypto_la-a_i2d_fp.lo \ asn1/libcrypto_la-a_int.lo asn1/libcrypto_la-a_mbstr.lo \ asn1/libcrypto_la-a_object.lo asn1/libcrypto_la-a_octet.lo \ asn1/libcrypto_la-a_print.lo asn1/libcrypto_la-a_set.lo \ asn1/libcrypto_la-a_sign.lo asn1/libcrypto_la-a_strex.lo \ asn1/libcrypto_la-a_strnid.lo asn1/libcrypto_la-a_time.lo \ asn1/libcrypto_la-a_time_tm.lo asn1/libcrypto_la-a_type.lo \ asn1/libcrypto_la-a_utf8.lo asn1/libcrypto_la-a_verify.lo \ asn1/libcrypto_la-ameth_lib.lo asn1/libcrypto_la-asn1_err.lo \ asn1/libcrypto_la-asn1_gen.lo asn1/libcrypto_la-asn1_lib.lo \ asn1/libcrypto_la-asn1_par.lo asn1/libcrypto_la-asn_mime.lo \ asn1/libcrypto_la-asn_moid.lo asn1/libcrypto_la-asn_pack.lo \ asn1/libcrypto_la-bio_asn1.lo asn1/libcrypto_la-bio_ndef.lo \ asn1/libcrypto_la-d2i_pr.lo asn1/libcrypto_la-d2i_pu.lo \ asn1/libcrypto_la-evp_asn1.lo asn1/libcrypto_la-f_enum.lo \ asn1/libcrypto_la-f_int.lo asn1/libcrypto_la-f_string.lo \ asn1/libcrypto_la-i2d_pr.lo asn1/libcrypto_la-i2d_pu.lo \ asn1/libcrypto_la-n_pkey.lo asn1/libcrypto_la-nsseq.lo \ asn1/libcrypto_la-p5_pbe.lo asn1/libcrypto_la-p5_pbev2.lo \ asn1/libcrypto_la-p8_pkey.lo asn1/libcrypto_la-t_bitst.lo \ asn1/libcrypto_la-t_crl.lo asn1/libcrypto_la-t_pkey.lo \ asn1/libcrypto_la-t_req.lo asn1/libcrypto_la-t_spki.lo \ asn1/libcrypto_la-t_x509.lo asn1/libcrypto_la-t_x509a.lo \ asn1/libcrypto_la-tasn_dec.lo asn1/libcrypto_la-tasn_enc.lo \ asn1/libcrypto_la-tasn_fre.lo asn1/libcrypto_la-tasn_new.lo \ asn1/libcrypto_la-tasn_prn.lo asn1/libcrypto_la-tasn_typ.lo \ asn1/libcrypto_la-tasn_utl.lo asn1/libcrypto_la-x_algor.lo \ asn1/libcrypto_la-x_attrib.lo asn1/libcrypto_la-x_bignum.lo \ asn1/libcrypto_la-x_crl.lo asn1/libcrypto_la-x_exten.lo \ asn1/libcrypto_la-x_info.lo asn1/libcrypto_la-x_long.lo \ asn1/libcrypto_la-x_name.lo asn1/libcrypto_la-x_nx509.lo \ asn1/libcrypto_la-x_pkey.lo asn1/libcrypto_la-x_pubkey.lo \ asn1/libcrypto_la-x_req.lo asn1/libcrypto_la-x_sig.lo \ asn1/libcrypto_la-x_spki.lo asn1/libcrypto_la-x_val.lo \ asn1/libcrypto_la-x_x509.lo asn1/libcrypto_la-x_x509a.lo \ bf/libcrypto_la-bf_cfb64.lo bf/libcrypto_la-bf_ecb.lo \ bf/libcrypto_la-bf_enc.lo bf/libcrypto_la-bf_ofb64.lo \ bf/libcrypto_la-bf_skey.lo bio/libcrypto_la-b_dump.lo \ $(am__objects_28) bio/libcrypto_la-b_print.lo \ bio/libcrypto_la-b_sock.lo $(am__objects_29) \ bio/libcrypto_la-bf_buff.lo bio/libcrypto_la-bf_nbio.lo \ bio/libcrypto_la-bf_null.lo bio/libcrypto_la-bio_cb.lo \ bio/libcrypto_la-bio_err.lo bio/libcrypto_la-bio_lib.lo \ bio/libcrypto_la-bss_acpt.lo bio/libcrypto_la-bss_bio.lo \ bio/libcrypto_la-bss_conn.lo bio/libcrypto_la-bss_dgram.lo \ bio/libcrypto_la-bss_fd.lo bio/libcrypto_la-bss_file.lo \ $(am__objects_30) bio/libcrypto_la-bss_mem.lo \ bio/libcrypto_la-bss_null.lo bio/libcrypto_la-bss_sock.lo \ bn/libcrypto_la-bn_add.lo bn/libcrypto_la-bn_asm.lo \ bn/libcrypto_la-bn_blind.lo bn/libcrypto_la-bn_const.lo \ bn/libcrypto_la-bn_ctx.lo bn/libcrypto_la-bn_depr.lo \ bn/libcrypto_la-bn_div.lo bn/libcrypto_la-bn_err.lo \ bn/libcrypto_la-bn_exp.lo bn/libcrypto_la-bn_exp2.lo \ bn/libcrypto_la-bn_gcd.lo bn/libcrypto_la-bn_gf2m.lo \ bn/libcrypto_la-bn_kron.lo bn/libcrypto_la-bn_lib.lo \ bn/libcrypto_la-bn_mod.lo bn/libcrypto_la-bn_mont.lo \ bn/libcrypto_la-bn_mpi.lo bn/libcrypto_la-bn_mul.lo \ bn/libcrypto_la-bn_nist.lo bn/libcrypto_la-bn_prime.lo \ bn/libcrypto_la-bn_print.lo bn/libcrypto_la-bn_rand.lo \ bn/libcrypto_la-bn_recp.lo bn/libcrypto_la-bn_shift.lo \ bn/libcrypto_la-bn_sqr.lo bn/libcrypto_la-bn_sqrt.lo \ bn/libcrypto_la-bn_word.lo bn/libcrypto_la-bn_x931p.lo \ buffer/libcrypto_la-buf_err.lo buffer/libcrypto_la-buf_str.lo \ buffer/libcrypto_la-buffer.lo \ camellia/libcrypto_la-cmll_cfb.lo \ camellia/libcrypto_la-cmll_ctr.lo \ camellia/libcrypto_la-cmll_ecb.lo \ camellia/libcrypto_la-cmll_misc.lo \ camellia/libcrypto_la-cmll_ofb.lo cast/libcrypto_la-c_cfb64.lo \ cast/libcrypto_la-c_ecb.lo cast/libcrypto_la-c_enc.lo \ cast/libcrypto_la-c_ofb64.lo cast/libcrypto_la-c_skey.lo \ |
︙ | ︙ | |||
577 578 579 580 581 582 583 | ec/libcrypto_la-ec_err.lo ec/libcrypto_la-ec_key.lo \ ec/libcrypto_la-ec_lib.lo ec/libcrypto_la-ec_mult.lo \ ec/libcrypto_la-ec_oct.lo ec/libcrypto_la-ec_pmeth.lo \ ec/libcrypto_la-ec_print.lo ec/libcrypto_la-eck_prn.lo \ ec/libcrypto_la-ecp_mont.lo ec/libcrypto_la-ecp_nist.lo \ ec/libcrypto_la-ecp_oct.lo ec/libcrypto_la-ecp_smpl.lo \ ecdh/libcrypto_la-ech_err.lo ecdh/libcrypto_la-ech_key.lo \ | | | | | | | | < | | 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 | ec/libcrypto_la-ec_err.lo ec/libcrypto_la-ec_key.lo \ ec/libcrypto_la-ec_lib.lo ec/libcrypto_la-ec_mult.lo \ ec/libcrypto_la-ec_oct.lo ec/libcrypto_la-ec_pmeth.lo \ ec/libcrypto_la-ec_print.lo ec/libcrypto_la-eck_prn.lo \ ec/libcrypto_la-ecp_mont.lo ec/libcrypto_la-ecp_nist.lo \ ec/libcrypto_la-ecp_oct.lo ec/libcrypto_la-ecp_smpl.lo \ ecdh/libcrypto_la-ech_err.lo ecdh/libcrypto_la-ech_key.lo \ ecdh/libcrypto_la-ech_lib.lo ecdsa/libcrypto_la-ecs_asn1.lo \ ecdsa/libcrypto_la-ecs_err.lo ecdsa/libcrypto_la-ecs_lib.lo \ ecdsa/libcrypto_la-ecs_ossl.lo ecdsa/libcrypto_la-ecs_sign.lo \ ecdsa/libcrypto_la-ecs_vrf.lo engine/libcrypto_la-eng_all.lo \ engine/libcrypto_la-eng_cnf.lo engine/libcrypto_la-eng_ctrl.lo \ engine/libcrypto_la-eng_dyn.lo engine/libcrypto_la-eng_err.lo \ engine/libcrypto_la-eng_fat.lo engine/libcrypto_la-eng_init.lo \ engine/libcrypto_la-eng_lib.lo engine/libcrypto_la-eng_list.lo \ engine/libcrypto_la-eng_openssl.lo \ engine/libcrypto_la-eng_pkey.lo \ engine/libcrypto_la-eng_table.lo \ engine/libcrypto_la-tb_asnmth.lo \ engine/libcrypto_la-tb_cipher.lo engine/libcrypto_la-tb_dh.lo \ engine/libcrypto_la-tb_digest.lo engine/libcrypto_la-tb_dsa.lo \ engine/libcrypto_la-tb_ecdh.lo engine/libcrypto_la-tb_ecdsa.lo \ |
︙ | ︙ | |||
618 619 620 621 622 623 624 | evp/libcrypto_la-evp_err.lo evp/libcrypto_la-evp_key.lo \ evp/libcrypto_la-evp_lib.lo evp/libcrypto_la-evp_pbe.lo \ evp/libcrypto_la-evp_pkey.lo evp/libcrypto_la-m_dss.lo \ evp/libcrypto_la-m_dss1.lo evp/libcrypto_la-m_ecdsa.lo \ evp/libcrypto_la-m_gost2814789.lo \ evp/libcrypto_la-m_gostr341194.lo evp/libcrypto_la-m_md4.lo \ evp/libcrypto_la-m_md5.lo evp/libcrypto_la-m_null.lo \ | | | | | | | | | | | | 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 | evp/libcrypto_la-evp_err.lo evp/libcrypto_la-evp_key.lo \ evp/libcrypto_la-evp_lib.lo evp/libcrypto_la-evp_pbe.lo \ evp/libcrypto_la-evp_pkey.lo evp/libcrypto_la-m_dss.lo \ evp/libcrypto_la-m_dss1.lo evp/libcrypto_la-m_ecdsa.lo \ evp/libcrypto_la-m_gost2814789.lo \ evp/libcrypto_la-m_gostr341194.lo evp/libcrypto_la-m_md4.lo \ evp/libcrypto_la-m_md5.lo evp/libcrypto_la-m_null.lo \ evp/libcrypto_la-m_ripemd.lo evp/libcrypto_la-m_sha1.lo \ evp/libcrypto_la-m_sigver.lo evp/libcrypto_la-m_streebog.lo \ evp/libcrypto_la-m_wp.lo evp/libcrypto_la-names.lo \ evp/libcrypto_la-p5_crpt.lo evp/libcrypto_la-p5_crpt2.lo \ evp/libcrypto_la-p_dec.lo evp/libcrypto_la-p_enc.lo \ evp/libcrypto_la-p_lib.lo evp/libcrypto_la-p_open.lo \ evp/libcrypto_la-p_seal.lo evp/libcrypto_la-p_sign.lo \ evp/libcrypto_la-p_verify.lo evp/libcrypto_la-pmeth_fn.lo \ evp/libcrypto_la-pmeth_gn.lo evp/libcrypto_la-pmeth_lib.lo \ gost/libcrypto_la-gost2814789.lo \ gost/libcrypto_la-gost89_keywrap.lo \ gost/libcrypto_la-gost89_params.lo \ gost/libcrypto_la-gost89imit_ameth.lo \ gost/libcrypto_la-gost89imit_pmeth.lo \ gost/libcrypto_la-gost_asn1.lo gost/libcrypto_la-gost_err.lo \ gost/libcrypto_la-gostr341001.lo \ gost/libcrypto_la-gostr341001_ameth.lo \ |
︙ | ︙ | |||
696 697 698 699 700 701 702 | rsa/libcrypto_la-rsa_lib.lo rsa/libcrypto_la-rsa_none.lo \ rsa/libcrypto_la-rsa_oaep.lo rsa/libcrypto_la-rsa_pk1.lo \ rsa/libcrypto_la-rsa_pmeth.lo rsa/libcrypto_la-rsa_prn.lo \ rsa/libcrypto_la-rsa_pss.lo rsa/libcrypto_la-rsa_saos.lo \ rsa/libcrypto_la-rsa_sign.lo rsa/libcrypto_la-rsa_ssl.lo \ rsa/libcrypto_la-rsa_x931.lo sha/libcrypto_la-sha1_one.lo \ sha/libcrypto_la-sha1dgst.lo sha/libcrypto_la-sha256.lo \ | < | | | 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 | rsa/libcrypto_la-rsa_lib.lo rsa/libcrypto_la-rsa_none.lo \ rsa/libcrypto_la-rsa_oaep.lo rsa/libcrypto_la-rsa_pk1.lo \ rsa/libcrypto_la-rsa_pmeth.lo rsa/libcrypto_la-rsa_prn.lo \ rsa/libcrypto_la-rsa_pss.lo rsa/libcrypto_la-rsa_saos.lo \ rsa/libcrypto_la-rsa_sign.lo rsa/libcrypto_la-rsa_ssl.lo \ rsa/libcrypto_la-rsa_x931.lo sha/libcrypto_la-sha1_one.lo \ sha/libcrypto_la-sha1dgst.lo sha/libcrypto_la-sha256.lo \ sha/libcrypto_la-sha512.lo stack/libcrypto_la-stack.lo \ ts/libcrypto_la-ts_asn1.lo ts/libcrypto_la-ts_conf.lo \ ts/libcrypto_la-ts_err.lo ts/libcrypto_la-ts_lib.lo \ ts/libcrypto_la-ts_req_print.lo \ ts/libcrypto_la-ts_req_utils.lo \ ts/libcrypto_la-ts_rsp_print.lo ts/libcrypto_la-ts_rsp_sign.lo \ ts/libcrypto_la-ts_rsp_utils.lo \ ts/libcrypto_la-ts_rsp_verify.lo \ ts/libcrypto_la-ts_verify_ctx.lo txt_db/libcrypto_la-txt_db.lo \ ui/libcrypto_la-ui_err.lo ui/libcrypto_la-ui_lib.lo \ $(am__objects_31) $(am__objects_32) ui/libcrypto_la-ui_util.lo \ whrlpool/libcrypto_la-wp_dgst.lo x509/libcrypto_la-by_dir.lo \ x509/libcrypto_la-by_file.lo x509/libcrypto_la-by_mem.lo \ x509/libcrypto_la-x509_att.lo x509/libcrypto_la-x509_cmp.lo \ x509/libcrypto_la-x509_d2.lo x509/libcrypto_la-x509_def.lo \ x509/libcrypto_la-x509_err.lo x509/libcrypto_la-x509_ext.lo \ x509/libcrypto_la-x509_lu.lo x509/libcrypto_la-x509_obj.lo \ x509/libcrypto_la-x509_r2x.lo x509/libcrypto_la-x509_req.lo \ |
︙ | ︙ | |||
964 965 966 967 968 969 970 | -I$(top_srcdir)/crypto lib_LTLIBRARIES = libcrypto.la # needed for a CMake target EXTRA_DIST = VERSION CMakeLists.txt compat/strcasecmp.c \ $(ASM_X86_64_ELF) $(ASM_X86_64_MACOSX) libcrypto_la_LDFLAGS = -version-info @LIBCRYPTO_VERSION@ -no-undefined | | | | | | < < | | > | | | | | | | | 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 | -I$(top_srcdir)/crypto lib_LTLIBRARIES = libcrypto.la # needed for a CMake target EXTRA_DIST = VERSION CMakeLists.txt compat/strcasecmp.c \ $(ASM_X86_64_ELF) $(ASM_X86_64_MACOSX) libcrypto_la_LDFLAGS = -version-info @LIBCRYPTO_VERSION@ -no-undefined libcrypto_la_LIBADD = libcompat.la $(am__append_1) libcrypto_la_CPPFLAGS = $(AM_CPPFLAGS) -DLIBRESSL_INTERNAL \ -DOPENSSL_NO_HW_PADLOCK $(am__append_2) $(am__append_3) \ $(am__append_4) $(am__append_5) $(am__append_29) \ $(am__append_31) noinst_LTLIBRARIES = libcompat.la $(am__append_6) @HAVE_EXPLICIT_BZERO_FALSE@libcompatnoopt_la_CFLAGS = -O0 @HAVE_EXPLICIT_BZERO_FALSE@libcompatnoopt_la_SOURCES = \ @HAVE_EXPLICIT_BZERO_FALSE@ $(am__append_7) $(am__append_8) # other compatibility functions libcompat_la_SOURCES = $(am__append_9) $(am__append_10) \ $(am__append_11) $(am__append_12) $(am__append_13) \ $(am__append_14) $(am__append_15) $(am__append_16) \ $(am__append_17) $(am__append_18) $(am__append_19) \ $(am__append_20) $(am__append_21) $(am__append_22) \ $(am__append_23) $(am__append_24) $(am__append_25) \ $(am__append_26) $(am__append_27) $(am__append_28) libcompat_la_LIBADD = $(PLATFORM_LDADD) # rc4 noinst_HEADERS = compat/arc4random.h compat/arc4random_aix.h \ compat/arc4random_freebsd.h compat/arc4random_hpux.h \ compat/arc4random_linux.h compat/arc4random_netbsd.h \ compat/arc4random_osx.h compat/arc4random_solaris.h \ |
︙ | ︙ | |||
1096 1097 1098 1099 1100 1101 1102 | # ui # whrlpool # x509 # x509v3 | | | | | | | | | | | | 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 | # ui # whrlpool # x509 # x509v3 libcrypto_la_SOURCES = $(am__append_30) $(am__append_32) \ $(am__append_33) cpt_err.c cryptlib.c cversion.c ex_data.c \ malloc-wrapper.c mem_clr.c mem_dbg.c o_init.c o_str.c o_time.c \ aes/aes_cfb.c aes/aes_ctr.c aes/aes_ecb.c aes/aes_ige.c \ aes/aes_misc.c aes/aes_ofb.c aes/aes_wrap.c asn1/a_bitstr.c \ asn1/a_bool.c asn1/a_bytes.c asn1/a_d2i_fp.c asn1/a_digest.c \ asn1/a_dup.c asn1/a_enum.c asn1/a_i2d_fp.c asn1/a_int.c \ asn1/a_mbstr.c asn1/a_object.c asn1/a_octet.c asn1/a_print.c \ asn1/a_set.c asn1/a_sign.c asn1/a_strex.c asn1/a_strnid.c \ asn1/a_time.c asn1/a_time_tm.c asn1/a_type.c asn1/a_utf8.c \ asn1/a_verify.c asn1/ameth_lib.c asn1/asn1_err.c \ asn1/asn1_gen.c asn1/asn1_lib.c asn1/asn1_par.c \ asn1/asn_mime.c asn1/asn_moid.c asn1/asn_pack.c \ asn1/bio_asn1.c asn1/bio_ndef.c asn1/d2i_pr.c asn1/d2i_pu.c \ asn1/evp_asn1.c asn1/f_enum.c asn1/f_int.c asn1/f_string.c \ asn1/i2d_pr.c asn1/i2d_pu.c asn1/n_pkey.c asn1/nsseq.c \ asn1/p5_pbe.c asn1/p5_pbev2.c asn1/p8_pkey.c asn1/t_bitst.c \ asn1/t_crl.c asn1/t_pkey.c asn1/t_req.c asn1/t_spki.c \ asn1/t_x509.c asn1/t_x509a.c asn1/tasn_dec.c asn1/tasn_enc.c \ asn1/tasn_fre.c asn1/tasn_new.c asn1/tasn_prn.c \ asn1/tasn_typ.c asn1/tasn_utl.c asn1/x_algor.c asn1/x_attrib.c \ asn1/x_bignum.c asn1/x_crl.c asn1/x_exten.c asn1/x_info.c \ asn1/x_long.c asn1/x_name.c asn1/x_nx509.c asn1/x_pkey.c \ asn1/x_pubkey.c asn1/x_req.c asn1/x_sig.c asn1/x_spki.c \ asn1/x_val.c asn1/x_x509.c asn1/x_x509a.c bf/bf_cfb64.c \ bf/bf_ecb.c bf/bf_enc.c bf/bf_ofb64.c bf/bf_skey.c \ bio/b_dump.c $(am__append_34) bio/b_print.c bio/b_sock.c \ $(am__append_35) bio/bf_buff.c bio/bf_nbio.c bio/bf_null.c \ bio/bio_cb.c bio/bio_err.c bio/bio_lib.c bio/bss_acpt.c \ bio/bss_bio.c bio/bss_conn.c bio/bss_dgram.c bio/bss_fd.c \ bio/bss_file.c $(am__append_36) bio/bss_mem.c bio/bss_null.c \ bio/bss_sock.c bn/bn_add.c bn/bn_asm.c bn/bn_blind.c \ bn/bn_const.c bn/bn_ctx.c bn/bn_depr.c bn/bn_div.c bn/bn_err.c \ bn/bn_exp.c bn/bn_exp2.c bn/bn_gcd.c bn/bn_gf2m.c bn/bn_kron.c \ bn/bn_lib.c bn/bn_mod.c bn/bn_mont.c bn/bn_mpi.c bn/bn_mul.c \ bn/bn_nist.c bn/bn_prime.c bn/bn_print.c bn/bn_rand.c \ bn/bn_recp.c bn/bn_shift.c bn/bn_sqr.c bn/bn_sqrt.c \ bn/bn_word.c bn/bn_x931p.c buffer/buf_err.c buffer/buf_str.c \ |
︙ | ︙ | |||
1159 1160 1161 1162 1163 1164 1165 | dsa/dsa_vrf.c dso/dso_dlfcn.c dso/dso_err.c dso/dso_lib.c \ dso/dso_null.c dso/dso_openssl.c ec/ec2_mult.c ec/ec2_oct.c \ ec/ec2_smpl.c ec/ec_ameth.c ec/ec_asn1.c ec/ec_check.c \ ec/ec_curve.c ec/ec_cvt.c ec/ec_err.c ec/ec_key.c ec/ec_lib.c \ ec/ec_mult.c ec/ec_oct.c ec/ec_pmeth.c ec/ec_print.c \ ec/eck_prn.c ec/ecp_mont.c ec/ecp_nist.c ec/ecp_oct.c \ ec/ecp_smpl.c ecdh/ech_err.c ecdh/ech_key.c ecdh/ech_lib.c \ | | | | | | | | | | | | | | | | < | | | | | | | | < | | | | | | | | | | | | | 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 | dsa/dsa_vrf.c dso/dso_dlfcn.c dso/dso_err.c dso/dso_lib.c \ dso/dso_null.c dso/dso_openssl.c ec/ec2_mult.c ec/ec2_oct.c \ ec/ec2_smpl.c ec/ec_ameth.c ec/ec_asn1.c ec/ec_check.c \ ec/ec_curve.c ec/ec_cvt.c ec/ec_err.c ec/ec_key.c ec/ec_lib.c \ ec/ec_mult.c ec/ec_oct.c ec/ec_pmeth.c ec/ec_print.c \ ec/eck_prn.c ec/ecp_mont.c ec/ecp_nist.c ec/ecp_oct.c \ ec/ecp_smpl.c ecdh/ech_err.c ecdh/ech_key.c ecdh/ech_lib.c \ ecdsa/ecs_asn1.c ecdsa/ecs_err.c ecdsa/ecs_lib.c \ ecdsa/ecs_ossl.c ecdsa/ecs_sign.c ecdsa/ecs_vrf.c \ engine/eng_all.c engine/eng_cnf.c engine/eng_ctrl.c \ engine/eng_dyn.c engine/eng_err.c engine/eng_fat.c \ engine/eng_init.c engine/eng_lib.c engine/eng_list.c \ engine/eng_openssl.c engine/eng_pkey.c engine/eng_table.c \ engine/tb_asnmth.c engine/tb_cipher.c engine/tb_dh.c \ engine/tb_digest.c engine/tb_dsa.c engine/tb_ecdh.c \ engine/tb_ecdsa.c engine/tb_pkmeth.c engine/tb_rand.c \ engine/tb_rsa.c engine/tb_store.c err/err.c err/err_all.c \ err/err_prn.c evp/bio_b64.c evp/bio_enc.c evp/bio_md.c \ evp/c_all.c evp/digest.c evp/e_aes.c evp/e_aes_cbc_hmac_sha1.c \ evp/e_bf.c evp/e_camellia.c evp/e_cast.c evp/e_chacha.c \ evp/e_chacha20poly1305.c evp/e_des.c evp/e_des3.c \ evp/e_gost2814789.c evp/e_idea.c evp/e_null.c evp/e_old.c \ evp/e_rc2.c evp/e_rc4.c evp/e_rc4_hmac_md5.c evp/e_xcbc_d.c \ evp/encode.c evp/evp_aead.c evp/evp_enc.c evp/evp_err.c \ evp/evp_key.c evp/evp_lib.c evp/evp_pbe.c evp/evp_pkey.c \ evp/m_dss.c evp/m_dss1.c evp/m_ecdsa.c evp/m_gost2814789.c \ evp/m_gostr341194.c evp/m_md4.c evp/m_md5.c evp/m_null.c \ evp/m_ripemd.c evp/m_sha1.c evp/m_sigver.c evp/m_streebog.c \ evp/m_wp.c evp/names.c evp/p5_crpt.c evp/p5_crpt2.c \ evp/p_dec.c evp/p_enc.c evp/p_lib.c evp/p_open.c evp/p_seal.c \ evp/p_sign.c evp/p_verify.c evp/pmeth_fn.c evp/pmeth_gn.c \ evp/pmeth_lib.c gost/gost2814789.c gost/gost89_keywrap.c \ gost/gost89_params.c gost/gost89imit_ameth.c \ gost/gost89imit_pmeth.c gost/gost_asn1.c gost/gost_err.c \ gost/gostr341001.c gost/gostr341001_ameth.c \ gost/gostr341001_key.c gost/gostr341001_params.c \ gost/gostr341001_pmeth.c gost/gostr341194.c gost/streebog.c \ hmac/hm_ameth.c hmac/hm_pmeth.c hmac/hmac.c idea/i_cbc.c \ idea/i_cfb64.c idea/i_ecb.c idea/i_ofb64.c idea/i_skey.c \ krb5/krb5_asn.c lhash/lh_stats.c lhash/lhash.c md4/md4_dgst.c \ md4/md4_one.c md5/md5_dgst.c md5/md5_one.c modes/cbc128.c \ modes/ccm128.c modes/cfb128.c modes/ctr128.c modes/cts128.c \ modes/gcm128.c modes/ofb128.c modes/xts128.c objects/o_names.c \ objects/obj_dat.c objects/obj_err.c objects/obj_lib.c \ objects/obj_xref.c ocsp/ocsp_asn.c ocsp/ocsp_cl.c \ ocsp/ocsp_err.c ocsp/ocsp_ext.c ocsp/ocsp_ht.c ocsp/ocsp_lib.c \ ocsp/ocsp_prn.c ocsp/ocsp_srv.c ocsp/ocsp_vfy.c pem/pem_all.c \ pem/pem_err.c pem/pem_info.c pem/pem_lib.c pem/pem_oth.c \ pem/pem_pk8.c pem/pem_pkey.c pem/pem_seal.c pem/pem_sign.c \ pem/pem_x509.c pem/pem_xaux.c pem/pvkfmt.c pkcs12/p12_add.c \ |
︙ | ︙ | |||
1220 1221 1222 1223 1224 1225 1226 | rc2/rc2_skey.c rc2/rc2cfb64.c rc2/rc2ofb64.c ripemd/rmd_dgst.c \ ripemd/rmd_one.c rsa/rsa_ameth.c rsa/rsa_asn1.c rsa/rsa_chk.c \ rsa/rsa_crpt.c rsa/rsa_depr.c rsa/rsa_eay.c rsa/rsa_err.c \ rsa/rsa_gen.c rsa/rsa_lib.c rsa/rsa_none.c rsa/rsa_oaep.c \ rsa/rsa_pk1.c rsa/rsa_pmeth.c rsa/rsa_prn.c rsa/rsa_pss.c \ rsa/rsa_saos.c rsa/rsa_sign.c rsa/rsa_ssl.c rsa/rsa_x931.c \ sha/sha1_one.c sha/sha1dgst.c sha/sha256.c sha/sha512.c \ | | | | | | | | | | | 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 | rc2/rc2_skey.c rc2/rc2cfb64.c rc2/rc2ofb64.c ripemd/rmd_dgst.c \ ripemd/rmd_one.c rsa/rsa_ameth.c rsa/rsa_asn1.c rsa/rsa_chk.c \ rsa/rsa_crpt.c rsa/rsa_depr.c rsa/rsa_eay.c rsa/rsa_err.c \ rsa/rsa_gen.c rsa/rsa_lib.c rsa/rsa_none.c rsa/rsa_oaep.c \ rsa/rsa_pk1.c rsa/rsa_pmeth.c rsa/rsa_prn.c rsa/rsa_pss.c \ rsa/rsa_saos.c rsa/rsa_sign.c rsa/rsa_ssl.c rsa/rsa_x931.c \ sha/sha1_one.c sha/sha1dgst.c sha/sha256.c sha/sha512.c \ stack/stack.c ts/ts_asn1.c ts/ts_conf.c ts/ts_err.c \ ts/ts_lib.c ts/ts_req_print.c ts/ts_req_utils.c \ ts/ts_rsp_print.c ts/ts_rsp_sign.c ts/ts_rsp_utils.c \ ts/ts_rsp_verify.c ts/ts_verify_ctx.c txt_db/txt_db.c \ ui/ui_err.c ui/ui_lib.c $(am__append_37) $(am__append_38) \ ui/ui_util.c whrlpool/wp_dgst.c x509/by_dir.c x509/by_file.c \ x509/by_mem.c x509/x509_att.c x509/x509_cmp.c x509/x509_d2.c \ x509/x509_def.c x509/x509_err.c x509/x509_ext.c x509/x509_lu.c \ x509/x509_obj.c x509/x509_r2x.c x509/x509_req.c \ x509/x509_set.c x509/x509_trs.c x509/x509_txt.c x509/x509_v3.c \ x509/x509_vfy.c x509/x509_vpm.c x509/x509cset.c \ x509/x509name.c x509/x509rset.c x509/x509spki.c \ x509/x509type.c x509/x_all.c x509v3/pcy_cache.c \ x509v3/pcy_data.c x509v3/pcy_lib.c x509v3/pcy_map.c \ x509v3/pcy_node.c x509v3/pcy_tree.c x509v3/v3_akey.c \ x509v3/v3_akeya.c x509v3/v3_alt.c x509v3/v3_bcons.c \ |
︙ | ︙ | |||
1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 | compat/strndup.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/strnlen.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/bsd-asprintf.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/inet_pton.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/reallocarray.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/timingsafe_memcmp.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/timingsafe_bcmp.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/posix_win.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/arc4random.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/getentropy_aix.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/getentropy_freebsd.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/getentropy_hpux.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) | > > > > | 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 | compat/strndup.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/strnlen.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/bsd-asprintf.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/inet_pton.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/timegm.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/reallocarray.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/timingsafe_memcmp.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/timingsafe_bcmp.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/posix_win.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/arc4random.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/arc4random_uniform.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/getentropy_aix.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/getentropy_freebsd.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) compat/getentropy_hpux.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) |
︙ | ︙ | |||
1403 1404 1405 1406 1407 1408 1409 | $(AM_V_CCLD)$(LINK) $(libcompat_la_OBJECTS) $(libcompat_la_LIBADD) $(LIBS) compat/libcompatnoopt_la-explicit_bzero_win.lo: \ compat/$(am__dirstamp) compat/$(DEPDIR)/$(am__dirstamp) compat/libcompatnoopt_la-explicit_bzero.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) libcompatnoopt.la: $(libcompatnoopt_la_OBJECTS) $(libcompatnoopt_la_DEPENDENCIES) $(EXTRA_libcompatnoopt_la_DEPENDENCIES) | | | 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 | $(AM_V_CCLD)$(LINK) $(libcompat_la_OBJECTS) $(libcompat_la_LIBADD) $(LIBS) compat/libcompatnoopt_la-explicit_bzero_win.lo: \ compat/$(am__dirstamp) compat/$(DEPDIR)/$(am__dirstamp) compat/libcompatnoopt_la-explicit_bzero.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) libcompatnoopt.la: $(libcompatnoopt_la_OBJECTS) $(libcompatnoopt_la_DEPENDENCIES) $(EXTRA_libcompatnoopt_la_DEPENDENCIES) $(AM_V_CCLD)$(libcompatnoopt_la_LINK) $(am_libcompatnoopt_la_rpath) $(libcompatnoopt_la_OBJECTS) $(libcompatnoopt_la_LIBADD) $(LIBS) aes/$(am__dirstamp): @$(MKDIR_P) aes @: > aes/$(am__dirstamp) aes/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) aes/$(DEPDIR) @: > aes/$(DEPDIR)/$(am__dirstamp) aes/aes-elf-x86_64.lo: aes/$(am__dirstamp) \ |
︙ | ︙ | |||
1570 1571 1572 1573 1574 1575 1576 | asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_digest.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_dup.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_enum.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) | < < | 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 | asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_digest.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_dup.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_enum.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_i2d_fp.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_int.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_mbstr.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_object.lo: asn1/$(am__dirstamp) \ |
︙ | ︙ | |||
1594 1595 1596 1597 1598 1599 1600 | asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_strex.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_strnid.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_time.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) | | | | 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 | asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_strex.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_strnid.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_time.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_time_tm.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_type.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_utf8.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-a_verify.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) asn1/libcrypto_la-ameth_lib.lo: asn1/$(am__dirstamp) \ asn1/$(DEPDIR)/$(am__dirstamp) |
︙ | ︙ | |||
2102 2103 2104 2105 2106 2107 2108 | @: > ecdh/$(DEPDIR)/$(am__dirstamp) ecdh/libcrypto_la-ech_err.lo: ecdh/$(am__dirstamp) \ ecdh/$(DEPDIR)/$(am__dirstamp) ecdh/libcrypto_la-ech_key.lo: ecdh/$(am__dirstamp) \ ecdh/$(DEPDIR)/$(am__dirstamp) ecdh/libcrypto_la-ech_lib.lo: ecdh/$(am__dirstamp) \ ecdh/$(DEPDIR)/$(am__dirstamp) | < < | 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 | @: > ecdh/$(DEPDIR)/$(am__dirstamp) ecdh/libcrypto_la-ech_err.lo: ecdh/$(am__dirstamp) \ ecdh/$(DEPDIR)/$(am__dirstamp) ecdh/libcrypto_la-ech_key.lo: ecdh/$(am__dirstamp) \ ecdh/$(DEPDIR)/$(am__dirstamp) ecdh/libcrypto_la-ech_lib.lo: ecdh/$(am__dirstamp) \ ecdh/$(DEPDIR)/$(am__dirstamp) ecdsa/$(am__dirstamp): @$(MKDIR_P) ecdsa @: > ecdsa/$(am__dirstamp) ecdsa/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ecdsa/$(DEPDIR) @: > ecdsa/$(DEPDIR)/$(am__dirstamp) ecdsa/libcrypto_la-ecs_asn1.lo: ecdsa/$(am__dirstamp) \ |
︙ | ︙ | |||
2270 2271 2272 2273 2274 2275 2276 | evp/$(DEPDIR)/$(am__dirstamp) evp/libcrypto_la-m_md5.lo: evp/$(am__dirstamp) \ evp/$(DEPDIR)/$(am__dirstamp) evp/libcrypto_la-m_null.lo: evp/$(am__dirstamp) \ evp/$(DEPDIR)/$(am__dirstamp) evp/libcrypto_la-m_ripemd.lo: evp/$(am__dirstamp) \ evp/$(DEPDIR)/$(am__dirstamp) | < < | 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 | evp/$(DEPDIR)/$(am__dirstamp) evp/libcrypto_la-m_md5.lo: evp/$(am__dirstamp) \ evp/$(DEPDIR)/$(am__dirstamp) evp/libcrypto_la-m_null.lo: evp/$(am__dirstamp) \ evp/$(DEPDIR)/$(am__dirstamp) evp/libcrypto_la-m_ripemd.lo: evp/$(am__dirstamp) \ evp/$(DEPDIR)/$(am__dirstamp) evp/libcrypto_la-m_sha1.lo: evp/$(am__dirstamp) \ evp/$(DEPDIR)/$(am__dirstamp) evp/libcrypto_la-m_sigver.lo: evp/$(am__dirstamp) \ evp/$(DEPDIR)/$(am__dirstamp) evp/libcrypto_la-m_streebog.lo: evp/$(am__dirstamp) \ evp/$(DEPDIR)/$(am__dirstamp) evp/libcrypto_la-m_wp.lo: evp/$(am__dirstamp) \ |
︙ | ︙ | |||
2642 2643 2644 2645 2646 2647 2648 | sha/$(DEPDIR)/$(am__dirstamp) sha/libcrypto_la-sha1dgst.lo: sha/$(am__dirstamp) \ sha/$(DEPDIR)/$(am__dirstamp) sha/libcrypto_la-sha256.lo: sha/$(am__dirstamp) \ sha/$(DEPDIR)/$(am__dirstamp) sha/libcrypto_la-sha512.lo: sha/$(am__dirstamp) \ sha/$(DEPDIR)/$(am__dirstamp) | < < < < | 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 | sha/$(DEPDIR)/$(am__dirstamp) sha/libcrypto_la-sha1dgst.lo: sha/$(am__dirstamp) \ sha/$(DEPDIR)/$(am__dirstamp) sha/libcrypto_la-sha256.lo: sha/$(am__dirstamp) \ sha/$(DEPDIR)/$(am__dirstamp) sha/libcrypto_la-sha512.lo: sha/$(am__dirstamp) \ sha/$(DEPDIR)/$(am__dirstamp) stack/$(am__dirstamp): @$(MKDIR_P) stack @: > stack/$(am__dirstamp) stack/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) stack/$(DEPDIR) @: > stack/$(DEPDIR)/$(am__dirstamp) stack/libcrypto_la-stack.lo: stack/$(am__dirstamp) \ |
︙ | ︙ | |||
2982 2983 2984 2985 2986 2987 2988 | @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_bitstr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_bool.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_bytes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_d2i_fp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_digest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_dup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_enum.Plo@am__quote@ | < | | | 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 | @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_bitstr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_bool.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_bytes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_d2i_fp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_digest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_dup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_enum.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_i2d_fp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_int.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_mbstr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_object.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_octet.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_print.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_set.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_sign.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_strex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_strnid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_time.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_time_tm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_type.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_utf8.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-a_verify.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-ameth_lib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-asn1_err.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-asn1_gen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-asn1_lib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@asn1/$(DEPDIR)/libcrypto_la-asn1_par.Plo@am__quote@ |
︙ | ︙ | |||
3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 | @AMDEP_TRUE@@am__include@ @am__quote@cmac/$(DEPDIR)/libcrypto_la-cm_pmeth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@cmac/$(DEPDIR)/libcrypto_la-cmac.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@comp/$(DEPDIR)/libcrypto_la-c_rle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@comp/$(DEPDIR)/libcrypto_la-c_zlib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@comp/$(DEPDIR)/libcrypto_la-comp_err.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@comp/$(DEPDIR)/libcrypto_la-comp_lib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/arc4random.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/bsd-asprintf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_aix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_freebsd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_hpux.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_linux.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_netbsd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_osx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_solaris.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_win.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/inet_pton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/libcompatnoopt_la-explicit_bzero.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/libcompatnoopt_la-explicit_bzero_win.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/posix_win.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/reallocarray.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/strlcat.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/strlcpy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/strndup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/strnlen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/timingsafe_bcmp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/timingsafe_memcmp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@conf/$(DEPDIR)/libcrypto_la-conf_api.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@conf/$(DEPDIR)/libcrypto_la-conf_def.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@conf/$(DEPDIR)/libcrypto_la-conf_err.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@conf/$(DEPDIR)/libcrypto_la-conf_lib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@conf/$(DEPDIR)/libcrypto_la-conf_mall.Plo@am__quote@ | > > | 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 | @AMDEP_TRUE@@am__include@ @am__quote@cmac/$(DEPDIR)/libcrypto_la-cm_pmeth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@cmac/$(DEPDIR)/libcrypto_la-cmac.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@comp/$(DEPDIR)/libcrypto_la-c_rle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@comp/$(DEPDIR)/libcrypto_la-c_zlib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@comp/$(DEPDIR)/libcrypto_la-comp_err.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@comp/$(DEPDIR)/libcrypto_la-comp_lib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/arc4random.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/arc4random_uniform.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/bsd-asprintf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_aix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_freebsd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_hpux.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_linux.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_netbsd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_osx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_solaris.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/getentropy_win.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/inet_pton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/libcompatnoopt_la-explicit_bzero.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/libcompatnoopt_la-explicit_bzero_win.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/posix_win.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/reallocarray.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/strlcat.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/strlcpy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/strndup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/strnlen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/timegm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/timingsafe_bcmp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/timingsafe_memcmp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@conf/$(DEPDIR)/libcrypto_la-conf_api.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@conf/$(DEPDIR)/libcrypto_la-conf_def.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@conf/$(DEPDIR)/libcrypto_la-conf_err.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@conf/$(DEPDIR)/libcrypto_la-conf_lib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@conf/$(DEPDIR)/libcrypto_la-conf_mall.Plo@am__quote@ |
︙ | ︙ | |||
3231 3232 3233 3234 3235 3236 3237 | @AMDEP_TRUE@@am__include@ @am__quote@ec/$(DEPDIR)/libcrypto_la-ecp_mont.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ec/$(DEPDIR)/libcrypto_la-ecp_nist.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ec/$(DEPDIR)/libcrypto_la-ecp_oct.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ec/$(DEPDIR)/libcrypto_la-ecp_smpl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ecdh/$(DEPDIR)/libcrypto_la-ech_err.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ecdh/$(DEPDIR)/libcrypto_la-ech_key.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ecdh/$(DEPDIR)/libcrypto_la-ech_lib.Plo@am__quote@ | < | 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 | @AMDEP_TRUE@@am__include@ @am__quote@ec/$(DEPDIR)/libcrypto_la-ecp_mont.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ec/$(DEPDIR)/libcrypto_la-ecp_nist.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ec/$(DEPDIR)/libcrypto_la-ecp_oct.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ec/$(DEPDIR)/libcrypto_la-ecp_smpl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ecdh/$(DEPDIR)/libcrypto_la-ech_err.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ecdh/$(DEPDIR)/libcrypto_la-ech_key.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ecdh/$(DEPDIR)/libcrypto_la-ech_lib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ecdsa/$(DEPDIR)/libcrypto_la-ecs_asn1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ecdsa/$(DEPDIR)/libcrypto_la-ecs_err.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ecdsa/$(DEPDIR)/libcrypto_la-ecs_lib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ecdsa/$(DEPDIR)/libcrypto_la-ecs_ossl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ecdsa/$(DEPDIR)/libcrypto_la-ecs_sign.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ecdsa/$(DEPDIR)/libcrypto_la-ecs_vrf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@engine/$(DEPDIR)/libcrypto_la-eng_all.Plo@am__quote@ |
︙ | ︙ | |||
3303 3304 3305 3306 3307 3308 3309 | @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_ecdsa.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_gost2814789.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_gostr341194.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_md4.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_md5.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_null.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_ripemd.Plo@am__quote@ | < | 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 | @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_ecdsa.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_gost2814789.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_gostr341194.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_md4.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_md5.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_null.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_ripemd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_sha1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_sigver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_streebog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-m_wp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-names.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-p5_crpt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@evp/$(DEPDIR)/libcrypto_la-p5_crpt2.Plo@am__quote@ |
︙ | ︙ | |||
3448 3449 3450 3451 3452 3453 3454 | @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha1dgst.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha256-elf-x86_64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha256-macosx-x86_64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha256.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha512-elf-x86_64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha512-macosx-x86_64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha512.Plo@am__quote@ | < < | 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 | @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha1dgst.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha256-elf-x86_64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha256-macosx-x86_64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha256.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha512-elf-x86_64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha512-macosx-x86_64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sha/$(DEPDIR)/libcrypto_la-sha512.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@stack/$(DEPDIR)/libcrypto_la-stack.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ts/$(DEPDIR)/libcrypto_la-ts_asn1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ts/$(DEPDIR)/libcrypto_la-ts_conf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ts/$(DEPDIR)/libcrypto_la-ts_err.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ts/$(DEPDIR)/libcrypto_la-ts_lib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ts/$(DEPDIR)/libcrypto_la-ts_req_print.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ts/$(DEPDIR)/libcrypto_la-ts_req_utils.Plo@am__quote@ |
︙ | ︙ | |||
3851 3852 3853 3854 3855 3856 3857 | asn1/libcrypto_la-a_enum.lo: asn1/a_enum.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT asn1/libcrypto_la-a_enum.lo -MD -MP -MF asn1/$(DEPDIR)/libcrypto_la-a_enum.Tpo -c -o asn1/libcrypto_la-a_enum.lo `test -f 'asn1/a_enum.c' || echo '$(srcdir)/'`asn1/a_enum.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) asn1/$(DEPDIR)/libcrypto_la-a_enum.Tpo asn1/$(DEPDIR)/libcrypto_la-a_enum.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asn1/a_enum.c' object='asn1/libcrypto_la-a_enum.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o asn1/libcrypto_la-a_enum.lo `test -f 'asn1/a_enum.c' || echo '$(srcdir)/'`asn1/a_enum.c | < < < < < < < | 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 | asn1/libcrypto_la-a_enum.lo: asn1/a_enum.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT asn1/libcrypto_la-a_enum.lo -MD -MP -MF asn1/$(DEPDIR)/libcrypto_la-a_enum.Tpo -c -o asn1/libcrypto_la-a_enum.lo `test -f 'asn1/a_enum.c' || echo '$(srcdir)/'`asn1/a_enum.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) asn1/$(DEPDIR)/libcrypto_la-a_enum.Tpo asn1/$(DEPDIR)/libcrypto_la-a_enum.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asn1/a_enum.c' object='asn1/libcrypto_la-a_enum.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o asn1/libcrypto_la-a_enum.lo `test -f 'asn1/a_enum.c' || echo '$(srcdir)/'`asn1/a_enum.c asn1/libcrypto_la-a_i2d_fp.lo: asn1/a_i2d_fp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT asn1/libcrypto_la-a_i2d_fp.lo -MD -MP -MF asn1/$(DEPDIR)/libcrypto_la-a_i2d_fp.Tpo -c -o asn1/libcrypto_la-a_i2d_fp.lo `test -f 'asn1/a_i2d_fp.c' || echo '$(srcdir)/'`asn1/a_i2d_fp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) asn1/$(DEPDIR)/libcrypto_la-a_i2d_fp.Tpo asn1/$(DEPDIR)/libcrypto_la-a_i2d_fp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asn1/a_i2d_fp.c' object='asn1/libcrypto_la-a_i2d_fp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o asn1/libcrypto_la-a_i2d_fp.lo `test -f 'asn1/a_i2d_fp.c' || echo '$(srcdir)/'`asn1/a_i2d_fp.c |
︙ | ︙ | |||
3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 | asn1/libcrypto_la-a_time.lo: asn1/a_time.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT asn1/libcrypto_la-a_time.lo -MD -MP -MF asn1/$(DEPDIR)/libcrypto_la-a_time.Tpo -c -o asn1/libcrypto_la-a_time.lo `test -f 'asn1/a_time.c' || echo '$(srcdir)/'`asn1/a_time.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) asn1/$(DEPDIR)/libcrypto_la-a_time.Tpo asn1/$(DEPDIR)/libcrypto_la-a_time.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asn1/a_time.c' object='asn1/libcrypto_la-a_time.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o asn1/libcrypto_la-a_time.lo `test -f 'asn1/a_time.c' || echo '$(srcdir)/'`asn1/a_time.c asn1/libcrypto_la-a_type.lo: asn1/a_type.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT asn1/libcrypto_la-a_type.lo -MD -MP -MF asn1/$(DEPDIR)/libcrypto_la-a_type.Tpo -c -o asn1/libcrypto_la-a_type.lo `test -f 'asn1/a_type.c' || echo '$(srcdir)/'`asn1/a_type.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) asn1/$(DEPDIR)/libcrypto_la-a_type.Tpo asn1/$(DEPDIR)/libcrypto_la-a_type.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asn1/a_type.c' object='asn1/libcrypto_la-a_type.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o asn1/libcrypto_la-a_type.lo `test -f 'asn1/a_type.c' || echo '$(srcdir)/'`asn1/a_type.c | > > > > > > > < < < < < < < | 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 | asn1/libcrypto_la-a_time.lo: asn1/a_time.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT asn1/libcrypto_la-a_time.lo -MD -MP -MF asn1/$(DEPDIR)/libcrypto_la-a_time.Tpo -c -o asn1/libcrypto_la-a_time.lo `test -f 'asn1/a_time.c' || echo '$(srcdir)/'`asn1/a_time.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) asn1/$(DEPDIR)/libcrypto_la-a_time.Tpo asn1/$(DEPDIR)/libcrypto_la-a_time.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asn1/a_time.c' object='asn1/libcrypto_la-a_time.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o asn1/libcrypto_la-a_time.lo `test -f 'asn1/a_time.c' || echo '$(srcdir)/'`asn1/a_time.c asn1/libcrypto_la-a_time_tm.lo: asn1/a_time_tm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT asn1/libcrypto_la-a_time_tm.lo -MD -MP -MF asn1/$(DEPDIR)/libcrypto_la-a_time_tm.Tpo -c -o asn1/libcrypto_la-a_time_tm.lo `test -f 'asn1/a_time_tm.c' || echo '$(srcdir)/'`asn1/a_time_tm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) asn1/$(DEPDIR)/libcrypto_la-a_time_tm.Tpo asn1/$(DEPDIR)/libcrypto_la-a_time_tm.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asn1/a_time_tm.c' object='asn1/libcrypto_la-a_time_tm.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o asn1/libcrypto_la-a_time_tm.lo `test -f 'asn1/a_time_tm.c' || echo '$(srcdir)/'`asn1/a_time_tm.c asn1/libcrypto_la-a_type.lo: asn1/a_type.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT asn1/libcrypto_la-a_type.lo -MD -MP -MF asn1/$(DEPDIR)/libcrypto_la-a_type.Tpo -c -o asn1/libcrypto_la-a_type.lo `test -f 'asn1/a_type.c' || echo '$(srcdir)/'`asn1/a_type.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) asn1/$(DEPDIR)/libcrypto_la-a_type.Tpo asn1/$(DEPDIR)/libcrypto_la-a_type.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asn1/a_type.c' object='asn1/libcrypto_la-a_type.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o asn1/libcrypto_la-a_type.lo `test -f 'asn1/a_type.c' || echo '$(srcdir)/'`asn1/a_type.c asn1/libcrypto_la-a_utf8.lo: asn1/a_utf8.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT asn1/libcrypto_la-a_utf8.lo -MD -MP -MF asn1/$(DEPDIR)/libcrypto_la-a_utf8.Tpo -c -o asn1/libcrypto_la-a_utf8.lo `test -f 'asn1/a_utf8.c' || echo '$(srcdir)/'`asn1/a_utf8.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) asn1/$(DEPDIR)/libcrypto_la-a_utf8.Tpo asn1/$(DEPDIR)/libcrypto_la-a_utf8.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asn1/a_utf8.c' object='asn1/libcrypto_la-a_utf8.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o asn1/libcrypto_la-a_utf8.lo `test -f 'asn1/a_utf8.c' || echo '$(srcdir)/'`asn1/a_utf8.c |
︙ | ︙ | |||
5419 5420 5421 5422 5423 5424 5425 | ecdh/libcrypto_la-ech_lib.lo: ecdh/ech_lib.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ecdh/libcrypto_la-ech_lib.lo -MD -MP -MF ecdh/$(DEPDIR)/libcrypto_la-ech_lib.Tpo -c -o ecdh/libcrypto_la-ech_lib.lo `test -f 'ecdh/ech_lib.c' || echo '$(srcdir)/'`ecdh/ech_lib.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ecdh/$(DEPDIR)/libcrypto_la-ech_lib.Tpo ecdh/$(DEPDIR)/libcrypto_la-ech_lib.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ecdh/ech_lib.c' object='ecdh/libcrypto_la-ech_lib.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ecdh/libcrypto_la-ech_lib.lo `test -f 'ecdh/ech_lib.c' || echo '$(srcdir)/'`ecdh/ech_lib.c | < < < < < < < | 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 | ecdh/libcrypto_la-ech_lib.lo: ecdh/ech_lib.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ecdh/libcrypto_la-ech_lib.lo -MD -MP -MF ecdh/$(DEPDIR)/libcrypto_la-ech_lib.Tpo -c -o ecdh/libcrypto_la-ech_lib.lo `test -f 'ecdh/ech_lib.c' || echo '$(srcdir)/'`ecdh/ech_lib.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ecdh/$(DEPDIR)/libcrypto_la-ech_lib.Tpo ecdh/$(DEPDIR)/libcrypto_la-ech_lib.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ecdh/ech_lib.c' object='ecdh/libcrypto_la-ech_lib.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ecdh/libcrypto_la-ech_lib.lo `test -f 'ecdh/ech_lib.c' || echo '$(srcdir)/'`ecdh/ech_lib.c ecdsa/libcrypto_la-ecs_asn1.lo: ecdsa/ecs_asn1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ecdsa/libcrypto_la-ecs_asn1.lo -MD -MP -MF ecdsa/$(DEPDIR)/libcrypto_la-ecs_asn1.Tpo -c -o ecdsa/libcrypto_la-ecs_asn1.lo `test -f 'ecdsa/ecs_asn1.c' || echo '$(srcdir)/'`ecdsa/ecs_asn1.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ecdsa/$(DEPDIR)/libcrypto_la-ecs_asn1.Tpo ecdsa/$(DEPDIR)/libcrypto_la-ecs_asn1.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ecdsa/ecs_asn1.c' object='ecdsa/libcrypto_la-ecs_asn1.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ecdsa/libcrypto_la-ecs_asn1.lo `test -f 'ecdsa/ecs_asn1.c' || echo '$(srcdir)/'`ecdsa/ecs_asn1.c |
︙ | ︙ | |||
5923 5924 5925 5926 5927 5928 5929 | evp/libcrypto_la-m_ripemd.lo: evp/m_ripemd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT evp/libcrypto_la-m_ripemd.lo -MD -MP -MF evp/$(DEPDIR)/libcrypto_la-m_ripemd.Tpo -c -o evp/libcrypto_la-m_ripemd.lo `test -f 'evp/m_ripemd.c' || echo '$(srcdir)/'`evp/m_ripemd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) evp/$(DEPDIR)/libcrypto_la-m_ripemd.Tpo evp/$(DEPDIR)/libcrypto_la-m_ripemd.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='evp/m_ripemd.c' object='evp/libcrypto_la-m_ripemd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o evp/libcrypto_la-m_ripemd.lo `test -f 'evp/m_ripemd.c' || echo '$(srcdir)/'`evp/m_ripemd.c | < < < < < < < | 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 | evp/libcrypto_la-m_ripemd.lo: evp/m_ripemd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT evp/libcrypto_la-m_ripemd.lo -MD -MP -MF evp/$(DEPDIR)/libcrypto_la-m_ripemd.Tpo -c -o evp/libcrypto_la-m_ripemd.lo `test -f 'evp/m_ripemd.c' || echo '$(srcdir)/'`evp/m_ripemd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) evp/$(DEPDIR)/libcrypto_la-m_ripemd.Tpo evp/$(DEPDIR)/libcrypto_la-m_ripemd.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='evp/m_ripemd.c' object='evp/libcrypto_la-m_ripemd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o evp/libcrypto_la-m_ripemd.lo `test -f 'evp/m_ripemd.c' || echo '$(srcdir)/'`evp/m_ripemd.c evp/libcrypto_la-m_sha1.lo: evp/m_sha1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT evp/libcrypto_la-m_sha1.lo -MD -MP -MF evp/$(DEPDIR)/libcrypto_la-m_sha1.Tpo -c -o evp/libcrypto_la-m_sha1.lo `test -f 'evp/m_sha1.c' || echo '$(srcdir)/'`evp/m_sha1.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) evp/$(DEPDIR)/libcrypto_la-m_sha1.Tpo evp/$(DEPDIR)/libcrypto_la-m_sha1.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='evp/m_sha1.c' object='evp/libcrypto_la-m_sha1.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o evp/libcrypto_la-m_sha1.lo `test -f 'evp/m_sha1.c' || echo '$(srcdir)/'`evp/m_sha1.c |
︙ | ︙ | |||
6889 6890 6891 6892 6893 6894 6895 | sha/libcrypto_la-sha512.lo: sha/sha512.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sha/libcrypto_la-sha512.lo -MD -MP -MF sha/$(DEPDIR)/libcrypto_la-sha512.Tpo -c -o sha/libcrypto_la-sha512.lo `test -f 'sha/sha512.c' || echo '$(srcdir)/'`sha/sha512.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sha/$(DEPDIR)/libcrypto_la-sha512.Tpo sha/$(DEPDIR)/libcrypto_la-sha512.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sha/sha512.c' object='sha/libcrypto_la-sha512.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sha/libcrypto_la-sha512.lo `test -f 'sha/sha512.c' || echo '$(srcdir)/'`sha/sha512.c | < < < < < < < < < < < < < < | 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 | sha/libcrypto_la-sha512.lo: sha/sha512.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sha/libcrypto_la-sha512.lo -MD -MP -MF sha/$(DEPDIR)/libcrypto_la-sha512.Tpo -c -o sha/libcrypto_la-sha512.lo `test -f 'sha/sha512.c' || echo '$(srcdir)/'`sha/sha512.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sha/$(DEPDIR)/libcrypto_la-sha512.Tpo sha/$(DEPDIR)/libcrypto_la-sha512.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sha/sha512.c' object='sha/libcrypto_la-sha512.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sha/libcrypto_la-sha512.lo `test -f 'sha/sha512.c' || echo '$(srcdir)/'`sha/sha512.c stack/libcrypto_la-stack.lo: stack/stack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stack/libcrypto_la-stack.lo -MD -MP -MF stack/$(DEPDIR)/libcrypto_la-stack.Tpo -c -o stack/libcrypto_la-stack.lo `test -f 'stack/stack.c' || echo '$(srcdir)/'`stack/stack.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) stack/$(DEPDIR)/libcrypto_la-stack.Tpo stack/$(DEPDIR)/libcrypto_la-stack.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stack/stack.c' object='stack/libcrypto_la-stack.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stack/libcrypto_la-stack.lo `test -f 'stack/stack.c' || echo '$(srcdir)/'`stack/stack.c |
︙ | ︙ |
Changes to jni/libressl/crypto/VERSION.
|
| | | 1 | 38:0:0 |
Changes to jni/libressl/crypto/aes/aes_core.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: aes_core.c,v 1.12 2015/02/10 09:46:30 miod Exp $ */ /** * rijndael-alg-fst.c * * @version 3.0 (December 2000) * * Optimised ANSI C code for the Rijndael cipher (now AES) * |
︙ | ︙ | |||
1128 1129 1130 1131 1132 1133 1134 | } #endif /* ?FULL_UNROLL */ /* * apply last round and * map cipher state to byte array block: */ s0 = | | | | | | 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 | } #endif /* ?FULL_UNROLL */ /* * apply last round and * map cipher state to byte array block: */ s0 = (((uint32_t)Td4[(t0 >> 24)]) << 24) ^ (Td4[(t3 >> 16) & 0xff] << 16) ^ (Td4[(t2 >> 8) & 0xff] << 8) ^ (Td4[(t1) & 0xff]) ^ rk[0]; PUTU32(out, s0); s1 = (((uint32_t)Td4[(t1 >> 24)]) << 24) ^ (Td4[(t0 >> 16) & 0xff] << 16) ^ (Td4[(t3 >> 8) & 0xff] << 8) ^ (Td4[(t2) & 0xff]) ^ rk[1]; PUTU32(out + 4, s1); s2 = (((uint32_t)Td4[(t2 >> 24)]) << 24) ^ (Td4[(t1 >> 16) & 0xff] << 16) ^ (Td4[(t0 >> 8) & 0xff] << 8) ^ (Td4[(t3) & 0xff]) ^ rk[2]; PUTU32(out + 8, s2); s3 = (((uint32_t)Td4[(t3 >> 24)]) << 24) ^ (Td4[(t2 >> 16) & 0xff] << 16) ^ (Td4[(t1 >> 8) & 0xff] << 8) ^ (Td4[(t0) & 0xff]) ^ rk[3]; PUTU32(out + 12, s3); } |
︙ | ︙ |
Changes to jni/libressl/crypto/aes/aes_wrap.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: aes_wrap.c,v 1.9 2014/07/11 08:44:47 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project. */ /* ==================================================================== * Copyright (c) 2008 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
122 123 124 125 126 127 128 | AES_decrypt(B, B, key); memcpy(R, B + 8, 8); } } if (!iv) iv = default_iv; if (memcmp(A, iv, 8)) { | | | 122 123 124 125 126 127 128 129 130 131 132 133 | AES_decrypt(B, B, key); memcpy(R, B + 8, 8); } } if (!iv) iv = default_iv; if (memcmp(A, iv, 8)) { explicit_bzero(out, inlen); return 0; } return inlen; } |
Changes to jni/libressl/crypto/aes/aesni-elf-x86_64.s.
︙ | ︙ | |||
748 749 750 751 752 753 754 | movdqa .Lbswap_mask(%rip),%xmm7 shrl $1,%eax leaq 0(%rcx),%r11 movdqu (%r9),%xmm3 movdqa %xmm9,%xmm2 movl %eax,%r10d | | | 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 | movdqa .Lbswap_mask(%rip),%xmm7 shrl $1,%eax leaq 0(%rcx),%r11 movdqu (%r9),%xmm3 movdqa %xmm9,%xmm2 movl %eax,%r10d .byte 102,68,15,56,0,207 jmp .Lccm64_enc_outer .align 16 .Lccm64_enc_outer: movups (%r11),%xmm0 movl %r10d,%eax movups (%rdi),%xmm8 |
︙ | ︙ | |||
785 786 787 788 789 790 791 | decq %rdx leaq 16(%rdi),%rdi xorps %xmm2,%xmm8 movdqa %xmm9,%xmm2 movups %xmm8,(%rsi) leaq 16(%rsi),%rsi | | | | 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 | decq %rdx leaq 16(%rdi),%rdi xorps %xmm2,%xmm8 movdqa %xmm9,%xmm2 movups %xmm8,(%rsi) leaq 16(%rsi),%rsi .byte 102,15,56,0,215 jnz .Lccm64_enc_outer movups %xmm3,(%r9) .byte 0xf3,0xc3 .size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks .globl aesni_ccm64_decrypt_blocks .type aesni_ccm64_decrypt_blocks,@function .align 16 aesni_ccm64_decrypt_blocks: movl 240(%rcx),%eax movups (%r8),%xmm9 movdqu (%r9),%xmm3 movdqa .Lincrement64(%rip),%xmm6 movdqa .Lbswap_mask(%rip),%xmm7 movaps %xmm9,%xmm2 movl %eax,%r10d movq %rcx,%r11 .byte 102,68,15,56,0,207 movups (%rcx),%xmm0 movups 16(%rcx),%xmm1 leaq 32(%rcx),%rcx xorps %xmm0,%xmm2 .Loop_enc1_5: aesenc %xmm1,%xmm2 decl %eax |
︙ | ︙ | |||
827 828 829 830 831 832 833 | .align 16 .Lccm64_dec_outer: xorps %xmm2,%xmm8 movdqa %xmm9,%xmm2 movl %r10d,%eax movups %xmm8,(%rsi) leaq 16(%rsi),%rsi | | | 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 | .align 16 .Lccm64_dec_outer: xorps %xmm2,%xmm8 movdqa %xmm9,%xmm2 movl %r10d,%eax movups %xmm8,(%rsi) leaq 16(%rsi),%rsi .byte 102,15,56,0,215 subq $1,%rdx jz .Lccm64_dec_break movups (%r11),%xmm0 shrl $1,%eax movups 16(%r11),%xmm1 |
︙ | ︙ | |||
907 908 909 910 911 912 913 | incq %r11 .byte 102,69,15,58,34,235,1 incl %r10d .byte 102,69,15,58,34,226,2 incq %r11 .byte 102,69,15,58,34,235,2 movdqa %xmm12,-40(%rsp) | | | | 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 | incq %r11 .byte 102,69,15,58,34,235,1 incl %r10d .byte 102,69,15,58,34,226,2 incq %r11 .byte 102,69,15,58,34,235,2 movdqa %xmm12,-40(%rsp) .byte 102,69,15,56,0,231 movdqa %xmm13,-24(%rsp) .byte 102,69,15,56,0,239 pshufd $192,%xmm12,%xmm2 pshufd $128,%xmm12,%xmm3 pshufd $64,%xmm12,%xmm4 cmpq $6,%rdx jb .Lctr32_tail shrl $1,%eax |
︙ | ︙ | |||
987 988 989 990 991 992 993 | aesenc %xmm1,%xmm3 paddd -24(%rsp),%xmm13 aesenc %xmm1,%xmm4 movdqa %xmm12,-40(%rsp) aesenc %xmm1,%xmm5 movdqa %xmm13,-24(%rsp) aesenc %xmm1,%xmm6 | | | | 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 | aesenc %xmm1,%xmm3 paddd -24(%rsp),%xmm13 aesenc %xmm1,%xmm4 movdqa %xmm12,-40(%rsp) aesenc %xmm1,%xmm5 movdqa %xmm13,-24(%rsp) aesenc %xmm1,%xmm6 .byte 102,69,15,56,0,231 aesenc %xmm1,%xmm7 .byte 102,69,15,56,0,239 aesenclast %xmm0,%xmm2 movups (%rdi),%xmm8 aesenclast %xmm0,%xmm3 movups 16(%rdi),%xmm9 aesenclast %xmm0,%xmm4 movups 32(%rdi),%xmm10 |
︙ | ︙ |
Changes to jni/libressl/crypto/aes/aesni-macosx-x86_64.s.
︙ | ︙ | |||
748 749 750 751 752 753 754 | movdqa L$bswap_mask(%rip),%xmm7 shrl $1,%eax leaq 0(%rcx),%r11 movdqu (%r9),%xmm3 movdqa %xmm9,%xmm2 movl %eax,%r10d | | | 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 | movdqa L$bswap_mask(%rip),%xmm7 shrl $1,%eax leaq 0(%rcx),%r11 movdqu (%r9),%xmm3 movdqa %xmm9,%xmm2 movl %eax,%r10d .byte 102,68,15,56,0,207 jmp L$ccm64_enc_outer .p2align 4 L$ccm64_enc_outer: movups (%r11),%xmm0 movl %r10d,%eax movups (%rdi),%xmm8 |
︙ | ︙ | |||
785 786 787 788 789 790 791 | decq %rdx leaq 16(%rdi),%rdi xorps %xmm2,%xmm8 movdqa %xmm9,%xmm2 movups %xmm8,(%rsi) leaq 16(%rsi),%rsi | | | | 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 | decq %rdx leaq 16(%rdi),%rdi xorps %xmm2,%xmm8 movdqa %xmm9,%xmm2 movups %xmm8,(%rsi) leaq 16(%rsi),%rsi .byte 102,15,56,0,215 jnz L$ccm64_enc_outer movups %xmm3,(%r9) .byte 0xf3,0xc3 .globl _aesni_ccm64_decrypt_blocks .p2align 4 _aesni_ccm64_decrypt_blocks: movl 240(%rcx),%eax movups (%r8),%xmm9 movdqu (%r9),%xmm3 movdqa L$increment64(%rip),%xmm6 movdqa L$bswap_mask(%rip),%xmm7 movaps %xmm9,%xmm2 movl %eax,%r10d movq %rcx,%r11 .byte 102,68,15,56,0,207 movups (%rcx),%xmm0 movups 16(%rcx),%xmm1 leaq 32(%rcx),%rcx xorps %xmm0,%xmm2 L$oop_enc1_5: aesenc %xmm1,%xmm2 decl %eax |
︙ | ︙ | |||
827 828 829 830 831 832 833 | .p2align 4 L$ccm64_dec_outer: xorps %xmm2,%xmm8 movdqa %xmm9,%xmm2 movl %r10d,%eax movups %xmm8,(%rsi) leaq 16(%rsi),%rsi | | | 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 | .p2align 4 L$ccm64_dec_outer: xorps %xmm2,%xmm8 movdqa %xmm9,%xmm2 movl %r10d,%eax movups %xmm8,(%rsi) leaq 16(%rsi),%rsi .byte 102,15,56,0,215 subq $1,%rdx jz L$ccm64_dec_break movups (%r11),%xmm0 shrl $1,%eax movups 16(%r11),%xmm1 |
︙ | ︙ | |||
907 908 909 910 911 912 913 | incq %r11 .byte 102,69,15,58,34,235,1 incl %r10d .byte 102,69,15,58,34,226,2 incq %r11 .byte 102,69,15,58,34,235,2 movdqa %xmm12,-40(%rsp) | | | | 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 | incq %r11 .byte 102,69,15,58,34,235,1 incl %r10d .byte 102,69,15,58,34,226,2 incq %r11 .byte 102,69,15,58,34,235,2 movdqa %xmm12,-40(%rsp) .byte 102,69,15,56,0,231 movdqa %xmm13,-24(%rsp) .byte 102,69,15,56,0,239 pshufd $192,%xmm12,%xmm2 pshufd $128,%xmm12,%xmm3 pshufd $64,%xmm12,%xmm4 cmpq $6,%rdx jb L$ctr32_tail shrl $1,%eax |
︙ | ︙ | |||
987 988 989 990 991 992 993 | aesenc %xmm1,%xmm3 paddd -24(%rsp),%xmm13 aesenc %xmm1,%xmm4 movdqa %xmm12,-40(%rsp) aesenc %xmm1,%xmm5 movdqa %xmm13,-24(%rsp) aesenc %xmm1,%xmm6 | | | | 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 | aesenc %xmm1,%xmm3 paddd -24(%rsp),%xmm13 aesenc %xmm1,%xmm4 movdqa %xmm12,-40(%rsp) aesenc %xmm1,%xmm5 movdqa %xmm13,-24(%rsp) aesenc %xmm1,%xmm6 .byte 102,69,15,56,0,231 aesenc %xmm1,%xmm7 .byte 102,69,15,56,0,239 aesenclast %xmm0,%xmm2 movups (%rdi),%xmm8 aesenclast %xmm0,%xmm3 movups 16(%rdi),%xmm9 aesenclast %xmm0,%xmm4 movups 32(%rdi),%xmm10 |
︙ | ︙ |
Changes to jni/libressl/crypto/aes/aesni-sha1-elf-x86_64.s.
︙ | ︙ | |||
47 48 49 50 51 52 53 | movdqa 64(%r11),%xmm6 movdqa 0(%r11),%xmm9 movdqu 0(%r10),%xmm0 movdqu 16(%r10),%xmm1 movdqu 32(%r10),%xmm2 movdqu 48(%r10),%xmm3 | | | | | | 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | movdqa 64(%r11),%xmm6 movdqa 0(%r11),%xmm9 movdqu 0(%r10),%xmm0 movdqu 16(%r10),%xmm1 movdqu 32(%r10),%xmm2 movdqu 48(%r10),%xmm3 .byte 102,15,56,0,198 addq $64,%r10 .byte 102,15,56,0,206 .byte 102,15,56,0,214 .byte 102,15,56,0,222 paddd %xmm9,%xmm0 paddd %xmm9,%xmm1 paddd %xmm9,%xmm2 movdqa %xmm0,0(%rsp) psubd %xmm9,%xmm0 movdqa %xmm1,16(%rsp) psubd %xmm9,%xmm1 |
︙ | ︙ | |||
75 76 77 78 79 80 81 | movups 0(%r12),%xmm12 xorps %xmm13,%xmm12 xorps %xmm12,%xmm11 aesenc %xmm14,%xmm11 movups 32(%r15),%xmm15 xorl %edx,%ecx movdqa %xmm3,%xmm8 | | | 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | movups 0(%r12),%xmm12 xorps %xmm13,%xmm12 xorps %xmm12,%xmm11 aesenc %xmm14,%xmm11 movups 32(%r15),%xmm15 xorl %edx,%ecx movdqa %xmm3,%xmm8 .byte 102,15,58,15,224,8 movl %eax,%edi roll $5,%eax paddd %xmm3,%xmm9 andl %ecx,%esi xorl %edx,%ecx psrldq $4,%xmm8 xorl %edx,%esi |
︙ | ︙ | |||
140 141 142 143 144 145 146 | pxor %xmm9,%xmm4 rorl $7,%edx addl %edi,%ebx movdqa %xmm2,%xmm5 addl 16(%rsp),%eax xorl %ebp,%edx movdqa %xmm4,%xmm9 | | | 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | pxor %xmm9,%xmm4 rorl $7,%edx addl %edi,%ebx movdqa %xmm2,%xmm5 addl 16(%rsp),%eax xorl %ebp,%edx movdqa %xmm4,%xmm9 .byte 102,15,58,15,233,8 movl %ebx,%edi roll $5,%ebx paddd %xmm4,%xmm10 andl %edx,%esi xorl %ebp,%edx psrldq $4,%xmm9 xorl %ebp,%esi |
︙ | ︙ | |||
205 206 207 208 209 210 211 | pxor %xmm10,%xmm5 rorl $7,%ebp addl %edi,%ecx movdqa %xmm3,%xmm6 addl 32(%rsp),%ebx xorl %eax,%ebp movdqa %xmm5,%xmm10 | | | 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 | pxor %xmm10,%xmm5 rorl $7,%ebp addl %edi,%ecx movdqa %xmm3,%xmm6 addl 32(%rsp),%ebx xorl %eax,%ebp movdqa %xmm5,%xmm10 .byte 102,15,58,15,242,8 movl %ecx,%edi roll $5,%ecx aesenc %xmm15,%xmm11 movups 112(%r15),%xmm14 paddd %xmm5,%xmm8 andl %ebp,%esi xorl %eax,%ebp |
︙ | ︙ | |||
272 273 274 275 276 277 278 | pxor %xmm8,%xmm6 rorl $7,%eax addl %edi,%edx movdqa %xmm4,%xmm7 addl 48(%rsp),%ecx xorl %ebx,%eax movdqa %xmm6,%xmm8 | | | 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 | pxor %xmm8,%xmm6 rorl $7,%eax addl %edi,%edx movdqa %xmm4,%xmm7 addl 48(%rsp),%ecx xorl %ebx,%eax movdqa %xmm6,%xmm8 .byte 102,15,58,15,251,8 movl %edx,%edi roll $5,%edx paddd %xmm6,%xmm9 andl %eax,%esi xorl %ebx,%eax psrldq $4,%xmm8 xorl %ebx,%esi |
︙ | ︙ | |||
348 349 350 351 352 353 354 | addl %eax,%ebp pxor %xmm9,%xmm7 rorl $7,%ebx addl %edi,%ebp movdqa %xmm7,%xmm9 addl 0(%rsp),%edx pxor %xmm4,%xmm0 | | | 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 | addl %eax,%ebp pxor %xmm9,%xmm7 rorl $7,%ebx addl %edi,%ebp movdqa %xmm7,%xmm9 addl 0(%rsp),%edx pxor %xmm4,%xmm0 .byte 102,68,15,58,15,206,8 xorl %ecx,%ebx movl %ebp,%edi roll $5,%ebp pxor %xmm1,%xmm0 andl %ebx,%esi xorl %ecx,%ebx movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
410 411 412 413 414 415 416 | addl %ebx,%eax rorl $7,%ecx addl %edi,%eax addl 16(%rsp),%ebp aesenc %xmm14,%xmm11 movups 64(%r15),%xmm15 pxor %xmm5,%xmm1 | | | 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 | addl %ebx,%eax rorl $7,%ecx addl %edi,%eax addl 16(%rsp),%ebp aesenc %xmm14,%xmm11 movups 64(%r15),%xmm15 pxor %xmm5,%xmm1 .byte 102,68,15,58,15,215,8 xorl %edx,%esi movl %eax,%edi roll $5,%eax pxor %xmm2,%xmm1 xorl %ecx,%esi addl %eax,%ebp movdqa %xmm8,%xmm9 |
︙ | ︙ | |||
456 457 458 459 460 461 462 | roll $5,%ecx xorl %ebp,%edi addl %ecx,%ebx rorl $7,%edx addl %edi,%ebx addl 32(%rsp),%eax pxor %xmm6,%xmm2 | | | 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 | roll $5,%ecx xorl %ebp,%edi addl %ecx,%ebx rorl $7,%edx addl %edi,%ebx addl 32(%rsp),%eax pxor %xmm6,%xmm2 .byte 102,68,15,58,15,192,8 xorl %ebp,%esi movl %ebx,%edi roll $5,%ebx pxor %xmm3,%xmm2 xorl %edx,%esi addl %ebx,%eax movdqa 32(%r11),%xmm10 |
︙ | ︙ | |||
504 505 506 507 508 509 510 | aesenc %xmm15,%xmm11 movups 112(%r15),%xmm14 addl %edx,%ecx rorl $7,%ebp addl %edi,%ecx addl 48(%rsp),%ebx pxor %xmm7,%xmm3 | | | 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 | aesenc %xmm15,%xmm11 movups 112(%r15),%xmm14 addl %edx,%ecx rorl $7,%ebp addl %edi,%ecx addl 48(%rsp),%ebx pxor %xmm7,%xmm3 .byte 102,68,15,58,15,201,8 xorl %eax,%esi movl %ecx,%edi roll $5,%ecx pxor %xmm4,%xmm3 xorl %ebp,%esi addl %ecx,%ebx movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
550 551 552 553 554 555 556 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 0(%rsp),%ecx pxor %xmm0,%xmm4 | | | 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 0(%rsp),%ecx pxor %xmm0,%xmm4 .byte 102,68,15,58,15,210,8 xorl %ebx,%esi movl %edx,%edi roll $5,%edx pxor %xmm5,%xmm4 xorl %eax,%esi aesenc %xmm15,%xmm11 movups 144(%r15),%xmm14 |
︙ | ︙ | |||
598 599 600 601 602 603 604 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 16(%rsp),%edx pxor %xmm1,%xmm5 | | | 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 16(%rsp),%edx pxor %xmm1,%xmm5 .byte 102,68,15,58,15,195,8 xorl %ecx,%esi movl %ebp,%edi roll $5,%ebp pxor %xmm6,%xmm5 xorl %ebx,%esi addl %ebp,%edx movdqa %xmm9,%xmm10 |
︙ | ︙ | |||
662 663 664 665 666 667 668 | movups 32(%r12),%xmm12 xorps %xmm13,%xmm12 movups %xmm11,16(%r13,%r12,1) xorps %xmm12,%xmm11 aesenc %xmm14,%xmm11 movups 32(%r15),%xmm15 pxor %xmm2,%xmm6 | | | 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 | movups 32(%r12),%xmm12 xorps %xmm13,%xmm12 movups %xmm11,16(%r13,%r12,1) xorps %xmm12,%xmm11 aesenc %xmm14,%xmm11 movups 32(%r15),%xmm15 pxor %xmm2,%xmm6 .byte 102,68,15,58,15,204,8 xorl %edx,%ecx addl 32(%rsp),%ebp andl %edx,%edi pxor %xmm7,%xmm6 andl %ecx,%esi rorl $7,%ebx movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
726 727 728 729 730 731 732 | movl %ecx,%esi roll $5,%ecx addl %edi,%ebx xorl %eax,%ebp addl %ecx,%ebx movl %edx,%edi pxor %xmm3,%xmm7 | | | 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 | movl %ecx,%esi roll $5,%ecx addl %edi,%ebx xorl %eax,%ebp addl %ecx,%ebx movl %edx,%edi pxor %xmm3,%xmm7 .byte 102,68,15,58,15,213,8 xorl %ebp,%edx addl 48(%rsp),%eax andl %ebp,%edi pxor %xmm0,%xmm7 andl %edx,%esi rorl $7,%ecx movdqa 48(%r11),%xmm9 |
︙ | ︙ | |||
790 791 792 793 794 795 796 | movl %edx,%esi roll $5,%edx addl %edi,%ecx xorl %ebx,%eax addl %edx,%ecx movl %ebp,%edi pxor %xmm4,%xmm0 | | | 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 | movl %edx,%esi roll $5,%edx addl %edi,%ecx xorl %ebx,%eax addl %edx,%ecx movl %ebp,%edi pxor %xmm4,%xmm0 .byte 102,68,15,58,15,198,8 xorl %eax,%ebp addl 0(%rsp),%ebx andl %eax,%edi pxor %xmm1,%xmm0 andl %ebp,%esi aesenc %xmm15,%xmm11 movups 112(%r15),%xmm14 |
︙ | ︙ | |||
856 857 858 859 860 861 862 | aesenc %xmm15,%xmm11 movups 144(%r15),%xmm14 addl %edi,%edx xorl %ecx,%ebx addl %ebp,%edx movl %eax,%edi pxor %xmm5,%xmm1 | | | 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 | aesenc %xmm15,%xmm11 movups 144(%r15),%xmm14 addl %edi,%edx xorl %ecx,%ebx addl %ebp,%edx movl %eax,%edi pxor %xmm5,%xmm1 .byte 102,68,15,58,15,207,8 xorl %ebx,%eax addl 16(%rsp),%ecx andl %ebx,%edi pxor %xmm2,%xmm1 andl %eax,%esi rorl $7,%ebp movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
932 933 934 935 936 937 938 | movl %eax,%esi roll $5,%eax addl %edi,%ebp xorl %edx,%ecx addl %eax,%ebp movl %ebx,%edi pxor %xmm6,%xmm2 | | | 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 | movl %eax,%esi roll $5,%eax addl %edi,%ebp xorl %edx,%ecx addl %eax,%ebp movl %ebx,%edi pxor %xmm6,%xmm2 .byte 102,68,15,58,15,208,8 xorl %ecx,%ebx addl 32(%rsp),%edx andl %ecx,%edi pxor %xmm3,%xmm2 andl %ebx,%esi rorl $7,%eax movdqa %xmm8,%xmm9 |
︙ | ︙ | |||
1002 1003 1004 1005 1006 1007 1008 | addl %edi,%eax xorl %ebp,%edx addl %ebx,%eax addl 48(%rsp),%ebp aesenc %xmm14,%xmm11 movups 64(%r15),%xmm15 pxor %xmm7,%xmm3 | | | 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 | addl %edi,%eax xorl %ebp,%edx addl %ebx,%eax addl 48(%rsp),%ebp aesenc %xmm14,%xmm11 movups 64(%r15),%xmm15 pxor %xmm7,%xmm3 .byte 102,68,15,58,15,193,8 xorl %edx,%esi movl %eax,%edi roll $5,%eax pxor %xmm4,%xmm3 xorl %ecx,%esi addl %eax,%ebp movdqa %xmm9,%xmm10 |
︙ | ︙ | |||
1091 1092 1093 1094 1095 1096 1097 | je .Ldone_ssse3 movdqa 64(%r11),%xmm6 movdqa 0(%r11),%xmm9 movdqu 0(%r10),%xmm0 movdqu 16(%r10),%xmm1 movdqu 32(%r10),%xmm2 movdqu 48(%r10),%xmm3 | | | | 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 | je .Ldone_ssse3 movdqa 64(%r11),%xmm6 movdqa 0(%r11),%xmm9 movdqu 0(%r10),%xmm0 movdqu 16(%r10),%xmm1 movdqu 32(%r10),%xmm2 movdqu 48(%r10),%xmm3 .byte 102,15,56,0,198 addq $64,%r10 addl 16(%rsp),%ebx xorl %eax,%esi .byte 102,15,56,0,206 movl %ecx,%edi roll $5,%ecx paddd %xmm9,%xmm0 xorl %ebp,%esi addl %ecx,%ebx rorl $7,%edx addl %esi,%ebx |
︙ | ︙ | |||
1133 1134 1135 1136 1137 1138 1139 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 32(%rsp),%ecx xorl %ebx,%esi | | | 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 32(%rsp),%ecx xorl %ebx,%esi .byte 102,15,56,0,214 movl %edx,%edi roll $5,%edx paddd %xmm9,%xmm1 xorl %eax,%esi aesenc %xmm15,%xmm11 movups 144(%r15),%xmm14 addl %edx,%ecx |
︙ | ︙ | |||
1173 1174 1175 1176 1177 1178 1179 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 48(%rsp),%edx xorl %ecx,%esi | | | 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 48(%rsp),%edx xorl %ecx,%esi .byte 102,15,56,0,222 movl %ebp,%edi roll $5,%ebp paddd %xmm9,%xmm2 xorl %ebx,%esi addl %ebp,%edx rorl $7,%eax addl %esi,%edx |
︙ | ︙ |
Changes to jni/libressl/crypto/aes/aesni-sha1-macosx-x86_64.s.
︙ | ︙ | |||
47 48 49 50 51 52 53 | movdqa 64(%r11),%xmm6 movdqa 0(%r11),%xmm9 movdqu 0(%r10),%xmm0 movdqu 16(%r10),%xmm1 movdqu 32(%r10),%xmm2 movdqu 48(%r10),%xmm3 | | | | | | 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | movdqa 64(%r11),%xmm6 movdqa 0(%r11),%xmm9 movdqu 0(%r10),%xmm0 movdqu 16(%r10),%xmm1 movdqu 32(%r10),%xmm2 movdqu 48(%r10),%xmm3 .byte 102,15,56,0,198 addq $64,%r10 .byte 102,15,56,0,206 .byte 102,15,56,0,214 .byte 102,15,56,0,222 paddd %xmm9,%xmm0 paddd %xmm9,%xmm1 paddd %xmm9,%xmm2 movdqa %xmm0,0(%rsp) psubd %xmm9,%xmm0 movdqa %xmm1,16(%rsp) psubd %xmm9,%xmm1 |
︙ | ︙ | |||
75 76 77 78 79 80 81 | movups 0(%r12),%xmm12 xorps %xmm13,%xmm12 xorps %xmm12,%xmm11 aesenc %xmm14,%xmm11 movups 32(%r15),%xmm15 xorl %edx,%ecx movdqa %xmm3,%xmm8 | | | 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | movups 0(%r12),%xmm12 xorps %xmm13,%xmm12 xorps %xmm12,%xmm11 aesenc %xmm14,%xmm11 movups 32(%r15),%xmm15 xorl %edx,%ecx movdqa %xmm3,%xmm8 .byte 102,15,58,15,224,8 movl %eax,%edi roll $5,%eax paddd %xmm3,%xmm9 andl %ecx,%esi xorl %edx,%ecx psrldq $4,%xmm8 xorl %edx,%esi |
︙ | ︙ | |||
140 141 142 143 144 145 146 | pxor %xmm9,%xmm4 rorl $7,%edx addl %edi,%ebx movdqa %xmm2,%xmm5 addl 16(%rsp),%eax xorl %ebp,%edx movdqa %xmm4,%xmm9 | | | 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | pxor %xmm9,%xmm4 rorl $7,%edx addl %edi,%ebx movdqa %xmm2,%xmm5 addl 16(%rsp),%eax xorl %ebp,%edx movdqa %xmm4,%xmm9 .byte 102,15,58,15,233,8 movl %ebx,%edi roll $5,%ebx paddd %xmm4,%xmm10 andl %edx,%esi xorl %ebp,%edx psrldq $4,%xmm9 xorl %ebp,%esi |
︙ | ︙ | |||
205 206 207 208 209 210 211 | pxor %xmm10,%xmm5 rorl $7,%ebp addl %edi,%ecx movdqa %xmm3,%xmm6 addl 32(%rsp),%ebx xorl %eax,%ebp movdqa %xmm5,%xmm10 | | | 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 | pxor %xmm10,%xmm5 rorl $7,%ebp addl %edi,%ecx movdqa %xmm3,%xmm6 addl 32(%rsp),%ebx xorl %eax,%ebp movdqa %xmm5,%xmm10 .byte 102,15,58,15,242,8 movl %ecx,%edi roll $5,%ecx aesenc %xmm15,%xmm11 movups 112(%r15),%xmm14 paddd %xmm5,%xmm8 andl %ebp,%esi xorl %eax,%ebp |
︙ | ︙ | |||
272 273 274 275 276 277 278 | pxor %xmm8,%xmm6 rorl $7,%eax addl %edi,%edx movdqa %xmm4,%xmm7 addl 48(%rsp),%ecx xorl %ebx,%eax movdqa %xmm6,%xmm8 | | | 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 | pxor %xmm8,%xmm6 rorl $7,%eax addl %edi,%edx movdqa %xmm4,%xmm7 addl 48(%rsp),%ecx xorl %ebx,%eax movdqa %xmm6,%xmm8 .byte 102,15,58,15,251,8 movl %edx,%edi roll $5,%edx paddd %xmm6,%xmm9 andl %eax,%esi xorl %ebx,%eax psrldq $4,%xmm8 xorl %ebx,%esi |
︙ | ︙ | |||
348 349 350 351 352 353 354 | addl %eax,%ebp pxor %xmm9,%xmm7 rorl $7,%ebx addl %edi,%ebp movdqa %xmm7,%xmm9 addl 0(%rsp),%edx pxor %xmm4,%xmm0 | | | 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 | addl %eax,%ebp pxor %xmm9,%xmm7 rorl $7,%ebx addl %edi,%ebp movdqa %xmm7,%xmm9 addl 0(%rsp),%edx pxor %xmm4,%xmm0 .byte 102,68,15,58,15,206,8 xorl %ecx,%ebx movl %ebp,%edi roll $5,%ebp pxor %xmm1,%xmm0 andl %ebx,%esi xorl %ecx,%ebx movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
410 411 412 413 414 415 416 | addl %ebx,%eax rorl $7,%ecx addl %edi,%eax addl 16(%rsp),%ebp aesenc %xmm14,%xmm11 movups 64(%r15),%xmm15 pxor %xmm5,%xmm1 | | | 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 | addl %ebx,%eax rorl $7,%ecx addl %edi,%eax addl 16(%rsp),%ebp aesenc %xmm14,%xmm11 movups 64(%r15),%xmm15 pxor %xmm5,%xmm1 .byte 102,68,15,58,15,215,8 xorl %edx,%esi movl %eax,%edi roll $5,%eax pxor %xmm2,%xmm1 xorl %ecx,%esi addl %eax,%ebp movdqa %xmm8,%xmm9 |
︙ | ︙ | |||
456 457 458 459 460 461 462 | roll $5,%ecx xorl %ebp,%edi addl %ecx,%ebx rorl $7,%edx addl %edi,%ebx addl 32(%rsp),%eax pxor %xmm6,%xmm2 | | | 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 | roll $5,%ecx xorl %ebp,%edi addl %ecx,%ebx rorl $7,%edx addl %edi,%ebx addl 32(%rsp),%eax pxor %xmm6,%xmm2 .byte 102,68,15,58,15,192,8 xorl %ebp,%esi movl %ebx,%edi roll $5,%ebx pxor %xmm3,%xmm2 xorl %edx,%esi addl %ebx,%eax movdqa 32(%r11),%xmm10 |
︙ | ︙ | |||
504 505 506 507 508 509 510 | aesenc %xmm15,%xmm11 movups 112(%r15),%xmm14 addl %edx,%ecx rorl $7,%ebp addl %edi,%ecx addl 48(%rsp),%ebx pxor %xmm7,%xmm3 | | | 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 | aesenc %xmm15,%xmm11 movups 112(%r15),%xmm14 addl %edx,%ecx rorl $7,%ebp addl %edi,%ecx addl 48(%rsp),%ebx pxor %xmm7,%xmm3 .byte 102,68,15,58,15,201,8 xorl %eax,%esi movl %ecx,%edi roll $5,%ecx pxor %xmm4,%xmm3 xorl %ebp,%esi addl %ecx,%ebx movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
550 551 552 553 554 555 556 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 0(%rsp),%ecx pxor %xmm0,%xmm4 | | | 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 0(%rsp),%ecx pxor %xmm0,%xmm4 .byte 102,68,15,58,15,210,8 xorl %ebx,%esi movl %edx,%edi roll $5,%edx pxor %xmm5,%xmm4 xorl %eax,%esi aesenc %xmm15,%xmm11 movups 144(%r15),%xmm14 |
︙ | ︙ | |||
598 599 600 601 602 603 604 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 16(%rsp),%edx pxor %xmm1,%xmm5 | | | 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 16(%rsp),%edx pxor %xmm1,%xmm5 .byte 102,68,15,58,15,195,8 xorl %ecx,%esi movl %ebp,%edi roll $5,%ebp pxor %xmm6,%xmm5 xorl %ebx,%esi addl %ebp,%edx movdqa %xmm9,%xmm10 |
︙ | ︙ | |||
662 663 664 665 666 667 668 | movups 32(%r12),%xmm12 xorps %xmm13,%xmm12 movups %xmm11,16(%r13,%r12,1) xorps %xmm12,%xmm11 aesenc %xmm14,%xmm11 movups 32(%r15),%xmm15 pxor %xmm2,%xmm6 | | | 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 | movups 32(%r12),%xmm12 xorps %xmm13,%xmm12 movups %xmm11,16(%r13,%r12,1) xorps %xmm12,%xmm11 aesenc %xmm14,%xmm11 movups 32(%r15),%xmm15 pxor %xmm2,%xmm6 .byte 102,68,15,58,15,204,8 xorl %edx,%ecx addl 32(%rsp),%ebp andl %edx,%edi pxor %xmm7,%xmm6 andl %ecx,%esi rorl $7,%ebx movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
726 727 728 729 730 731 732 | movl %ecx,%esi roll $5,%ecx addl %edi,%ebx xorl %eax,%ebp addl %ecx,%ebx movl %edx,%edi pxor %xmm3,%xmm7 | | | 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 | movl %ecx,%esi roll $5,%ecx addl %edi,%ebx xorl %eax,%ebp addl %ecx,%ebx movl %edx,%edi pxor %xmm3,%xmm7 .byte 102,68,15,58,15,213,8 xorl %ebp,%edx addl 48(%rsp),%eax andl %ebp,%edi pxor %xmm0,%xmm7 andl %edx,%esi rorl $7,%ecx movdqa 48(%r11),%xmm9 |
︙ | ︙ | |||
790 791 792 793 794 795 796 | movl %edx,%esi roll $5,%edx addl %edi,%ecx xorl %ebx,%eax addl %edx,%ecx movl %ebp,%edi pxor %xmm4,%xmm0 | | | 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 | movl %edx,%esi roll $5,%edx addl %edi,%ecx xorl %ebx,%eax addl %edx,%ecx movl %ebp,%edi pxor %xmm4,%xmm0 .byte 102,68,15,58,15,198,8 xorl %eax,%ebp addl 0(%rsp),%ebx andl %eax,%edi pxor %xmm1,%xmm0 andl %ebp,%esi aesenc %xmm15,%xmm11 movups 112(%r15),%xmm14 |
︙ | ︙ | |||
856 857 858 859 860 861 862 | aesenc %xmm15,%xmm11 movups 144(%r15),%xmm14 addl %edi,%edx xorl %ecx,%ebx addl %ebp,%edx movl %eax,%edi pxor %xmm5,%xmm1 | | | 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 | aesenc %xmm15,%xmm11 movups 144(%r15),%xmm14 addl %edi,%edx xorl %ecx,%ebx addl %ebp,%edx movl %eax,%edi pxor %xmm5,%xmm1 .byte 102,68,15,58,15,207,8 xorl %ebx,%eax addl 16(%rsp),%ecx andl %ebx,%edi pxor %xmm2,%xmm1 andl %eax,%esi rorl $7,%ebp movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
932 933 934 935 936 937 938 | movl %eax,%esi roll $5,%eax addl %edi,%ebp xorl %edx,%ecx addl %eax,%ebp movl %ebx,%edi pxor %xmm6,%xmm2 | | | 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 | movl %eax,%esi roll $5,%eax addl %edi,%ebp xorl %edx,%ecx addl %eax,%ebp movl %ebx,%edi pxor %xmm6,%xmm2 .byte 102,68,15,58,15,208,8 xorl %ecx,%ebx addl 32(%rsp),%edx andl %ecx,%edi pxor %xmm3,%xmm2 andl %ebx,%esi rorl $7,%eax movdqa %xmm8,%xmm9 |
︙ | ︙ | |||
1002 1003 1004 1005 1006 1007 1008 | addl %edi,%eax xorl %ebp,%edx addl %ebx,%eax addl 48(%rsp),%ebp aesenc %xmm14,%xmm11 movups 64(%r15),%xmm15 pxor %xmm7,%xmm3 | | | 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 | addl %edi,%eax xorl %ebp,%edx addl %ebx,%eax addl 48(%rsp),%ebp aesenc %xmm14,%xmm11 movups 64(%r15),%xmm15 pxor %xmm7,%xmm3 .byte 102,68,15,58,15,193,8 xorl %edx,%esi movl %eax,%edi roll $5,%eax pxor %xmm4,%xmm3 xorl %ecx,%esi addl %eax,%ebp movdqa %xmm9,%xmm10 |
︙ | ︙ | |||
1091 1092 1093 1094 1095 1096 1097 | je L$done_ssse3 movdqa 64(%r11),%xmm6 movdqa 0(%r11),%xmm9 movdqu 0(%r10),%xmm0 movdqu 16(%r10),%xmm1 movdqu 32(%r10),%xmm2 movdqu 48(%r10),%xmm3 | | | | 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 | je L$done_ssse3 movdqa 64(%r11),%xmm6 movdqa 0(%r11),%xmm9 movdqu 0(%r10),%xmm0 movdqu 16(%r10),%xmm1 movdqu 32(%r10),%xmm2 movdqu 48(%r10),%xmm3 .byte 102,15,56,0,198 addq $64,%r10 addl 16(%rsp),%ebx xorl %eax,%esi .byte 102,15,56,0,206 movl %ecx,%edi roll $5,%ecx paddd %xmm9,%xmm0 xorl %ebp,%esi addl %ecx,%ebx rorl $7,%edx addl %esi,%ebx |
︙ | ︙ | |||
1133 1134 1135 1136 1137 1138 1139 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 32(%rsp),%ecx xorl %ebx,%esi | | | 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 32(%rsp),%ecx xorl %ebx,%esi .byte 102,15,56,0,214 movl %edx,%edi roll $5,%edx paddd %xmm9,%xmm1 xorl %eax,%esi aesenc %xmm15,%xmm11 movups 144(%r15),%xmm14 addl %edx,%ecx |
︙ | ︙ | |||
1173 1174 1175 1176 1177 1178 1179 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 48(%rsp),%edx xorl %ecx,%esi | | | 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 48(%rsp),%edx xorl %ecx,%esi .byte 102,15,56,0,222 movl %ebp,%edi roll $5,%ebp paddd %xmm9,%xmm2 xorl %ebx,%esi addl %ebp,%edx rorl $7,%eax addl %esi,%edx |
︙ | ︙ |
Changes to jni/libressl/crypto/aes/bsaes-elf-x86_64.s.
︙ | ︙ | |||
9 10 11 12 13 14 15 | leaq .LBS0(%rip),%r11 movdqa (%rax),%xmm8 leaq 16(%rax),%rax movdqa 80(%r11),%xmm7 pxor %xmm8,%xmm15 pxor %xmm8,%xmm0 | | | | | | | | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | leaq .LBS0(%rip),%r11 movdqa (%rax),%xmm8 leaq 16(%rax),%rax movdqa 80(%r11),%xmm7 pxor %xmm8,%xmm15 pxor %xmm8,%xmm0 .byte 102,68,15,56,0,255 pxor %xmm8,%xmm1 .byte 102,15,56,0,199 pxor %xmm8,%xmm2 .byte 102,15,56,0,207 pxor %xmm8,%xmm3 .byte 102,15,56,0,215 pxor %xmm8,%xmm4 .byte 102,15,56,0,223 pxor %xmm8,%xmm5 .byte 102,15,56,0,231 pxor %xmm8,%xmm6 .byte 102,15,56,0,239 .byte 102,15,56,0,247 _bsaes_encrypt8_bitslice: movdqa 0(%r11),%xmm7 movdqa 16(%r11),%xmm8 movdqa %xmm5,%xmm9 psrlq $1,%xmm5 movdqa %xmm3,%xmm10 psrlq $1,%xmm3 |
︙ | ︙ | |||
117 118 119 120 121 122 123 | pxor %xmm10,%xmm15 decl %r10d jmp .Lenc_sbox .align 16 .Lenc_loop: pxor 0(%rax),%xmm15 pxor 16(%rax),%xmm0 | | | | | | | | | | 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | pxor %xmm10,%xmm15 decl %r10d jmp .Lenc_sbox .align 16 .Lenc_loop: pxor 0(%rax),%xmm15 pxor 16(%rax),%xmm0 .byte 102,68,15,56,0,255 pxor 32(%rax),%xmm1 .byte 102,15,56,0,199 pxor 48(%rax),%xmm2 .byte 102,15,56,0,207 pxor 64(%rax),%xmm3 .byte 102,15,56,0,215 pxor 80(%rax),%xmm4 .byte 102,15,56,0,223 pxor 96(%rax),%xmm5 .byte 102,15,56,0,231 pxor 112(%rax),%xmm6 .byte 102,15,56,0,239 leaq 128(%rax),%rax .byte 102,15,56,0,247 .Lenc_sbox: pxor %xmm5,%xmm4 pxor %xmm0,%xmm1 pxor %xmm15,%xmm2 pxor %xmm1,%xmm5 pxor %xmm15,%xmm4 |
︙ | ︙ | |||
481 482 483 484 485 486 487 | leaq .LBS0(%rip),%r11 movdqa (%rax),%xmm8 leaq 16(%rax),%rax movdqa -48(%r11),%xmm7 pxor %xmm8,%xmm15 pxor %xmm8,%xmm0 | | | | | | | | | | 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 | leaq .LBS0(%rip),%r11 movdqa (%rax),%xmm8 leaq 16(%rax),%rax movdqa -48(%r11),%xmm7 pxor %xmm8,%xmm15 pxor %xmm8,%xmm0 .byte 102,68,15,56,0,255 pxor %xmm8,%xmm1 .byte 102,15,56,0,199 pxor %xmm8,%xmm2 .byte 102,15,56,0,207 pxor %xmm8,%xmm3 .byte 102,15,56,0,215 pxor %xmm8,%xmm4 .byte 102,15,56,0,223 pxor %xmm8,%xmm5 .byte 102,15,56,0,231 pxor %xmm8,%xmm6 .byte 102,15,56,0,239 .byte 102,15,56,0,247 movdqa 0(%r11),%xmm7 movdqa 16(%r11),%xmm8 movdqa %xmm5,%xmm9 psrlq $1,%xmm5 movdqa %xmm3,%xmm10 psrlq $1,%xmm3 pxor %xmm6,%xmm5 |
︙ | ︙ | |||
588 589 590 591 592 593 594 | pxor %xmm10,%xmm15 decl %r10d jmp .Ldec_sbox .align 16 .Ldec_loop: pxor 0(%rax),%xmm15 pxor 16(%rax),%xmm0 | | | | | | | | | | 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 | pxor %xmm10,%xmm15 decl %r10d jmp .Ldec_sbox .align 16 .Ldec_loop: pxor 0(%rax),%xmm15 pxor 16(%rax),%xmm0 .byte 102,68,15,56,0,255 pxor 32(%rax),%xmm1 .byte 102,15,56,0,199 pxor 48(%rax),%xmm2 .byte 102,15,56,0,207 pxor 64(%rax),%xmm3 .byte 102,15,56,0,215 pxor 80(%rax),%xmm4 .byte 102,15,56,0,223 pxor 96(%rax),%xmm5 .byte 102,15,56,0,231 pxor 112(%rax),%xmm6 .byte 102,15,56,0,239 leaq 128(%rax),%rax .byte 102,15,56,0,247 .Ldec_sbox: pxor %xmm3,%xmm2 pxor %xmm6,%xmm3 pxor %xmm6,%xmm1 pxor %xmm3,%xmm5 pxor %xmm5,%xmm6 |
︙ | ︙ | |||
996 997 998 999 1000 1001 1002 | movdqu (%rcx),%xmm6 movdqa %xmm7,(%rax) leaq 16(%rax),%rax decl %r10d jmp .Lkey_loop .align 16 .Lkey_loop: | | | 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 | movdqu (%rcx),%xmm6 movdqa %xmm7,(%rax) leaq 16(%rax),%rax decl %r10d jmp .Lkey_loop .align 16 .Lkey_loop: .byte 102,15,56,0,244 movdqa %xmm0,%xmm8 movdqa %xmm1,%xmm9 pand %xmm6,%xmm8 pand %xmm6,%xmm9 movdqa %xmm2,%xmm10 |
︙ | ︙ | |||
1349 1350 1351 1352 1353 1354 1355 | pxor %xmm6,%xmm7 movdqa %xmm7,(%rax) movdqa (%rsp),%xmm8 leaq .LADD1(%rip),%r11 movdqa 32(%rbp),%xmm15 movdqa -32(%r11),%xmm7 | | | | 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 | pxor %xmm6,%xmm7 movdqa %xmm7,(%rax) movdqa (%rsp),%xmm8 leaq .LADD1(%rip),%r11 movdqa 32(%rbp),%xmm15 movdqa -32(%r11),%xmm7 .byte 102,68,15,56,0,199 .byte 102,68,15,56,0,255 movdqa %xmm8,(%rsp) jmp .Lctr_enc_loop .align 16 .Lctr_enc_loop: movdqa %xmm15,32(%rbp) movdqa %xmm15,%xmm0 movdqa %xmm15,%xmm1 |
︙ | ︙ | |||
1378 1379 1380 1381 1382 1383 1384 | movdqa (%rsp),%xmm8 leaq 16(%rsp),%rax movdqa -16(%r11),%xmm7 pxor %xmm8,%xmm15 pxor %xmm8,%xmm0 | | | | | | | | | | 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 | movdqa (%rsp),%xmm8 leaq 16(%rsp),%rax movdqa -16(%r11),%xmm7 pxor %xmm8,%xmm15 pxor %xmm8,%xmm0 .byte 102,68,15,56,0,255 pxor %xmm8,%xmm1 .byte 102,15,56,0,199 pxor %xmm8,%xmm2 .byte 102,15,56,0,207 pxor %xmm8,%xmm3 .byte 102,15,56,0,215 pxor %xmm8,%xmm4 .byte 102,15,56,0,223 pxor %xmm8,%xmm5 .byte 102,15,56,0,231 pxor %xmm8,%xmm6 .byte 102,15,56,0,239 leaq .LBS0(%rip),%r11 .byte 102,15,56,0,247 movl %ebx,%r10d call _bsaes_encrypt8_bitslice subq $8,%r14 jc .Lctr_enc_loop_done |
︙ | ︙ |
Changes to jni/libressl/crypto/aes/bsaes-macosx-x86_64.s.
︙ | ︙ | |||
9 10 11 12 13 14 15 | leaq L$BS0(%rip),%r11 movdqa (%rax),%xmm8 leaq 16(%rax),%rax movdqa 80(%r11),%xmm7 pxor %xmm8,%xmm15 pxor %xmm8,%xmm0 | | | | | | | | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | leaq L$BS0(%rip),%r11 movdqa (%rax),%xmm8 leaq 16(%rax),%rax movdqa 80(%r11),%xmm7 pxor %xmm8,%xmm15 pxor %xmm8,%xmm0 .byte 102,68,15,56,0,255 pxor %xmm8,%xmm1 .byte 102,15,56,0,199 pxor %xmm8,%xmm2 .byte 102,15,56,0,207 pxor %xmm8,%xmm3 .byte 102,15,56,0,215 pxor %xmm8,%xmm4 .byte 102,15,56,0,223 pxor %xmm8,%xmm5 .byte 102,15,56,0,231 pxor %xmm8,%xmm6 .byte 102,15,56,0,239 .byte 102,15,56,0,247 _bsaes_encrypt8_bitslice: movdqa 0(%r11),%xmm7 movdqa 16(%r11),%xmm8 movdqa %xmm5,%xmm9 psrlq $1,%xmm5 movdqa %xmm3,%xmm10 psrlq $1,%xmm3 |
︙ | ︙ | |||
117 118 119 120 121 122 123 | pxor %xmm10,%xmm15 decl %r10d jmp L$enc_sbox .p2align 4 L$enc_loop: pxor 0(%rax),%xmm15 pxor 16(%rax),%xmm0 | | | | | | | | | | 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | pxor %xmm10,%xmm15 decl %r10d jmp L$enc_sbox .p2align 4 L$enc_loop: pxor 0(%rax),%xmm15 pxor 16(%rax),%xmm0 .byte 102,68,15,56,0,255 pxor 32(%rax),%xmm1 .byte 102,15,56,0,199 pxor 48(%rax),%xmm2 .byte 102,15,56,0,207 pxor 64(%rax),%xmm3 .byte 102,15,56,0,215 pxor 80(%rax),%xmm4 .byte 102,15,56,0,223 pxor 96(%rax),%xmm5 .byte 102,15,56,0,231 pxor 112(%rax),%xmm6 .byte 102,15,56,0,239 leaq 128(%rax),%rax .byte 102,15,56,0,247 L$enc_sbox: pxor %xmm5,%xmm4 pxor %xmm0,%xmm1 pxor %xmm15,%xmm2 pxor %xmm1,%xmm5 pxor %xmm15,%xmm4 |
︙ | ︙ | |||
481 482 483 484 485 486 487 | leaq L$BS0(%rip),%r11 movdqa (%rax),%xmm8 leaq 16(%rax),%rax movdqa -48(%r11),%xmm7 pxor %xmm8,%xmm15 pxor %xmm8,%xmm0 | | | | | | | | | | 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 | leaq L$BS0(%rip),%r11 movdqa (%rax),%xmm8 leaq 16(%rax),%rax movdqa -48(%r11),%xmm7 pxor %xmm8,%xmm15 pxor %xmm8,%xmm0 .byte 102,68,15,56,0,255 pxor %xmm8,%xmm1 .byte 102,15,56,0,199 pxor %xmm8,%xmm2 .byte 102,15,56,0,207 pxor %xmm8,%xmm3 .byte 102,15,56,0,215 pxor %xmm8,%xmm4 .byte 102,15,56,0,223 pxor %xmm8,%xmm5 .byte 102,15,56,0,231 pxor %xmm8,%xmm6 .byte 102,15,56,0,239 .byte 102,15,56,0,247 movdqa 0(%r11),%xmm7 movdqa 16(%r11),%xmm8 movdqa %xmm5,%xmm9 psrlq $1,%xmm5 movdqa %xmm3,%xmm10 psrlq $1,%xmm3 pxor %xmm6,%xmm5 |
︙ | ︙ | |||
588 589 590 591 592 593 594 | pxor %xmm10,%xmm15 decl %r10d jmp L$dec_sbox .p2align 4 L$dec_loop: pxor 0(%rax),%xmm15 pxor 16(%rax),%xmm0 | | | | | | | | | | 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 | pxor %xmm10,%xmm15 decl %r10d jmp L$dec_sbox .p2align 4 L$dec_loop: pxor 0(%rax),%xmm15 pxor 16(%rax),%xmm0 .byte 102,68,15,56,0,255 pxor 32(%rax),%xmm1 .byte 102,15,56,0,199 pxor 48(%rax),%xmm2 .byte 102,15,56,0,207 pxor 64(%rax),%xmm3 .byte 102,15,56,0,215 pxor 80(%rax),%xmm4 .byte 102,15,56,0,223 pxor 96(%rax),%xmm5 .byte 102,15,56,0,231 pxor 112(%rax),%xmm6 .byte 102,15,56,0,239 leaq 128(%rax),%rax .byte 102,15,56,0,247 L$dec_sbox: pxor %xmm3,%xmm2 pxor %xmm6,%xmm3 pxor %xmm6,%xmm1 pxor %xmm3,%xmm5 pxor %xmm5,%xmm6 |
︙ | ︙ | |||
996 997 998 999 1000 1001 1002 | movdqu (%rcx),%xmm6 movdqa %xmm7,(%rax) leaq 16(%rax),%rax decl %r10d jmp L$key_loop .p2align 4 L$key_loop: | | | 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 | movdqu (%rcx),%xmm6 movdqa %xmm7,(%rax) leaq 16(%rax),%rax decl %r10d jmp L$key_loop .p2align 4 L$key_loop: .byte 102,15,56,0,244 movdqa %xmm0,%xmm8 movdqa %xmm1,%xmm9 pand %xmm6,%xmm8 pand %xmm6,%xmm9 movdqa %xmm2,%xmm10 |
︙ | ︙ | |||
1349 1350 1351 1352 1353 1354 1355 | pxor %xmm6,%xmm7 movdqa %xmm7,(%rax) movdqa (%rsp),%xmm8 leaq L$ADD1(%rip),%r11 movdqa 32(%rbp),%xmm15 movdqa -32(%r11),%xmm7 | | | | 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 | pxor %xmm6,%xmm7 movdqa %xmm7,(%rax) movdqa (%rsp),%xmm8 leaq L$ADD1(%rip),%r11 movdqa 32(%rbp),%xmm15 movdqa -32(%r11),%xmm7 .byte 102,68,15,56,0,199 .byte 102,68,15,56,0,255 movdqa %xmm8,(%rsp) jmp L$ctr_enc_loop .p2align 4 L$ctr_enc_loop: movdqa %xmm15,32(%rbp) movdqa %xmm15,%xmm0 movdqa %xmm15,%xmm1 |
︙ | ︙ | |||
1378 1379 1380 1381 1382 1383 1384 | movdqa (%rsp),%xmm8 leaq 16(%rsp),%rax movdqa -16(%r11),%xmm7 pxor %xmm8,%xmm15 pxor %xmm8,%xmm0 | | | | | | | | | | 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 | movdqa (%rsp),%xmm8 leaq 16(%rsp),%rax movdqa -16(%r11),%xmm7 pxor %xmm8,%xmm15 pxor %xmm8,%xmm0 .byte 102,68,15,56,0,255 pxor %xmm8,%xmm1 .byte 102,15,56,0,199 pxor %xmm8,%xmm2 .byte 102,15,56,0,207 pxor %xmm8,%xmm3 .byte 102,15,56,0,215 pxor %xmm8,%xmm4 .byte 102,15,56,0,223 pxor %xmm8,%xmm5 .byte 102,15,56,0,231 pxor %xmm8,%xmm6 .byte 102,15,56,0,239 leaq L$BS0(%rip),%r11 .byte 102,15,56,0,247 movl %ebx,%r10d call _bsaes_encrypt8_bitslice subq $8,%r14 jc L$ctr_enc_loop_done |
︙ | ︙ |
Changes to jni/libressl/crypto/aes/vpaes-elf-x86_64.s.
︙ | ︙ | |||
23 24 25 26 27 28 29 | movl 240(%rdx),%eax movdqa %xmm9,%xmm1 movdqa .Lk_ipt(%rip),%xmm2 pandn %xmm0,%xmm1 movdqu (%r9),%xmm5 psrld $4,%xmm1 pand %xmm9,%xmm0 | | | | | | | | | | | | | | | | | | | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | movl 240(%rdx),%eax movdqa %xmm9,%xmm1 movdqa .Lk_ipt(%rip),%xmm2 pandn %xmm0,%xmm1 movdqu (%r9),%xmm5 psrld $4,%xmm1 pand %xmm9,%xmm0 .byte 102,15,56,0,208 movdqa .Lk_ipt+16(%rip),%xmm0 .byte 102,15,56,0,193 pxor %xmm5,%xmm2 pxor %xmm2,%xmm0 addq $16,%r9 leaq .Lk_mc_backward(%rip),%r10 jmp .Lenc_entry .align 16 .Lenc_loop: movdqa %xmm13,%xmm4 .byte 102,15,56,0,226 pxor %xmm5,%xmm4 movdqa %xmm12,%xmm0 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 movdqa %xmm15,%xmm5 .byte 102,15,56,0,234 movdqa -64(%r11,%r10,1),%xmm1 movdqa %xmm14,%xmm2 .byte 102,15,56,0,211 pxor %xmm5,%xmm2 movdqa (%r11,%r10,1),%xmm4 movdqa %xmm0,%xmm3 .byte 102,15,56,0,193 addq $16,%r9 pxor %xmm2,%xmm0 .byte 102,15,56,0,220 addq $16,%r11 pxor %xmm0,%xmm3 .byte 102,15,56,0,193 andq $48,%r11 pxor %xmm3,%xmm0 subq $1,%rax .Lenc_entry: movdqa %xmm9,%xmm1 pandn %xmm0,%xmm1 psrld $4,%xmm1 pand %xmm9,%xmm0 movdqa %xmm11,%xmm5 .byte 102,15,56,0,232 pxor %xmm1,%xmm0 movdqa %xmm10,%xmm3 .byte 102,15,56,0,217 pxor %xmm5,%xmm3 movdqa %xmm10,%xmm4 .byte 102,15,56,0,224 pxor %xmm5,%xmm4 movdqa %xmm10,%xmm2 .byte 102,15,56,0,211 pxor %xmm0,%xmm2 movdqa %xmm10,%xmm3 movdqu (%r9),%xmm5 .byte 102,15,56,0,220 pxor %xmm1,%xmm3 jnz .Lenc_loop movdqa -96(%r10),%xmm4 movdqa -80(%r10),%xmm0 .byte 102,15,56,0,226 pxor %xmm5,%xmm4 .byte 102,15,56,0,195 movdqa 64(%r11,%r10,1),%xmm1 pxor %xmm4,%xmm0 .byte 102,15,56,0,193 .byte 0xf3,0xc3 .size _vpaes_encrypt_core,.-_vpaes_encrypt_core |
︙ | ︙ | |||
114 115 116 117 118 119 120 | movdqa .Lk_dipt(%rip),%xmm2 pandn %xmm0,%xmm1 movq %rax,%r11 psrld $4,%xmm1 movdqu (%r9),%xmm5 shlq $4,%r11 pand %xmm9,%xmm0 | | | | | | | | | | | | | | | | | | | | | | | | 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 | movdqa .Lk_dipt(%rip),%xmm2 pandn %xmm0,%xmm1 movq %rax,%r11 psrld $4,%xmm1 movdqu (%r9),%xmm5 shlq $4,%r11 pand %xmm9,%xmm0 .byte 102,15,56,0,208 movdqa .Lk_dipt+16(%rip),%xmm0 xorq $48,%r11 leaq .Lk_dsbd(%rip),%r10 .byte 102,15,56,0,193 andq $48,%r11 pxor %xmm5,%xmm2 movdqa .Lk_mc_forward+48(%rip),%xmm5 pxor %xmm2,%xmm0 addq $16,%r9 addq %r10,%r11 jmp .Ldec_entry .align 16 .Ldec_loop: movdqa -32(%r10),%xmm4 .byte 102,15,56,0,226 pxor %xmm0,%xmm4 movdqa -16(%r10),%xmm0 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 addq $16,%r9 .byte 102,15,56,0,197 movdqa 0(%r10),%xmm4 .byte 102,15,56,0,226 pxor %xmm0,%xmm4 movdqa 16(%r10),%xmm0 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 subq $1,%rax .byte 102,15,56,0,197 movdqa 32(%r10),%xmm4 .byte 102,15,56,0,226 pxor %xmm0,%xmm4 movdqa 48(%r10),%xmm0 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 .byte 102,15,56,0,197 movdqa 64(%r10),%xmm4 .byte 102,15,56,0,226 pxor %xmm0,%xmm4 movdqa 80(%r10),%xmm0 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 .byte 102,15,58,15,237,12 .Ldec_entry: movdqa %xmm9,%xmm1 pandn %xmm0,%xmm1 psrld $4,%xmm1 pand %xmm9,%xmm0 movdqa %xmm11,%xmm2 .byte 102,15,56,0,208 pxor %xmm1,%xmm0 movdqa %xmm10,%xmm3 .byte 102,15,56,0,217 pxor %xmm2,%xmm3 movdqa %xmm10,%xmm4 .byte 102,15,56,0,224 pxor %xmm2,%xmm4 movdqa %xmm10,%xmm2 .byte 102,15,56,0,211 pxor %xmm0,%xmm2 movdqa %xmm10,%xmm3 .byte 102,15,56,0,220 pxor %xmm1,%xmm3 movdqu (%r9),%xmm0 jnz .Ldec_loop movdqa 96(%r10),%xmm4 .byte 102,15,56,0,226 pxor %xmm0,%xmm4 movdqa 112(%r10),%xmm0 movdqa -352(%r11),%xmm2 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 .byte 102,15,56,0,194 .byte 0xf3,0xc3 .size _vpaes_decrypt_core,.-_vpaes_decrypt_core |
︙ | ︙ | |||
237 238 239 240 241 242 243 | movdqu %xmm0,(%rdx) jmp .Lschedule_go .Lschedule_am_decrypting: movdqa (%r8,%r10,1),%xmm1 | | | 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 | movdqu %xmm0,(%rdx) jmp .Lschedule_go .Lschedule_am_decrypting: movdqa (%r8,%r10,1),%xmm1 .byte 102,15,56,0,217 movdqu %xmm3,(%rdx) xorq $48,%r8 .Lschedule_go: cmpl $192,%esi ja .Lschedule_256 je .Lschedule_192 |
︙ | ︙ | |||
291 292 293 294 295 296 297 | movdqa %xmm0,%xmm6 pxor %xmm4,%xmm4 movhlps %xmm4,%xmm6 movl $4,%esi .Loop_schedule_192: call _vpaes_schedule_round | | | 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 | movdqa %xmm0,%xmm6 pxor %xmm4,%xmm4 movhlps %xmm4,%xmm6 movl $4,%esi .Loop_schedule_192: call _vpaes_schedule_round .byte 102,15,58,15,198,8 call _vpaes_schedule_mangle call _vpaes_schedule_192_smear call _vpaes_schedule_mangle call _vpaes_schedule_round decq %rsi jz .Lschedule_mangle_last call _vpaes_schedule_mangle |
︙ | ︙ | |||
357 358 359 360 361 362 363 | leaq .Lk_deskew(%rip),%r11 testq %rcx,%rcx jnz .Lschedule_mangle_last_dec movdqa (%r8,%r10,1),%xmm1 | | | 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 | leaq .Lk_deskew(%rip),%r11 testq %rcx,%rcx jnz .Lschedule_mangle_last_dec movdqa (%r8,%r10,1),%xmm1 .byte 102,15,56,0,193 leaq .Lk_opt(%rip),%r11 addq $32,%rdx .Lschedule_mangle_last_dec: addq $-16,%rdx pxor .Lk_s63(%rip),%xmm0 call _vpaes_schedule_transform |
︙ | ︙ | |||
429 430 431 432 433 434 435 | .type _vpaes_schedule_round,@function .align 16 _vpaes_schedule_round: pxor %xmm1,%xmm1 | | | | | | | | | | | | 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 | .type _vpaes_schedule_round,@function .align 16 _vpaes_schedule_round: pxor %xmm1,%xmm1 .byte 102,65,15,58,15,200,15 .byte 102,69,15,58,15,192,15 pxor %xmm1,%xmm7 pshufd $255,%xmm0,%xmm0 .byte 102,15,58,15,192,1 _vpaes_schedule_low_round: movdqa %xmm7,%xmm1 pslldq $4,%xmm7 pxor %xmm1,%xmm7 movdqa %xmm7,%xmm1 pslldq $8,%xmm7 pxor %xmm1,%xmm7 pxor .Lk_s63(%rip),%xmm7 movdqa %xmm9,%xmm1 pandn %xmm0,%xmm1 psrld $4,%xmm1 pand %xmm9,%xmm0 movdqa %xmm11,%xmm2 .byte 102,15,56,0,208 pxor %xmm1,%xmm0 movdqa %xmm10,%xmm3 .byte 102,15,56,0,217 pxor %xmm2,%xmm3 movdqa %xmm10,%xmm4 .byte 102,15,56,0,224 pxor %xmm2,%xmm4 movdqa %xmm10,%xmm2 .byte 102,15,56,0,211 pxor %xmm0,%xmm2 movdqa %xmm10,%xmm3 .byte 102,15,56,0,220 pxor %xmm1,%xmm3 movdqa %xmm13,%xmm4 .byte 102,15,56,0,226 movdqa %xmm12,%xmm0 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 pxor %xmm7,%xmm0 movdqa %xmm0,%xmm7 .byte 0xf3,0xc3 .size _vpaes_schedule_round,.-_vpaes_schedule_round |
︙ | ︙ | |||
499 500 501 502 503 504 505 | .align 16 _vpaes_schedule_transform: movdqa %xmm9,%xmm1 pandn %xmm0,%xmm1 psrld $4,%xmm1 pand %xmm9,%xmm0 movdqa (%r11),%xmm2 | | | | 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 | .align 16 _vpaes_schedule_transform: movdqa %xmm9,%xmm1 pandn %xmm0,%xmm1 psrld $4,%xmm1 pand %xmm9,%xmm0 movdqa (%r11),%xmm2 .byte 102,15,56,0,208 movdqa 16(%r11),%xmm0 .byte 102,15,56,0,193 pxor %xmm2,%xmm0 .byte 0xf3,0xc3 .size _vpaes_schedule_transform,.-_vpaes_schedule_transform |
︙ | ︙ | |||
540 541 542 543 544 545 546 | movdqa .Lk_mc_forward(%rip),%xmm5 testq %rcx,%rcx jnz .Lschedule_mangle_dec addq $16,%rdx pxor .Lk_s63(%rip),%xmm4 | | | | | | | | | | | | | | | | | 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 | movdqa .Lk_mc_forward(%rip),%xmm5 testq %rcx,%rcx jnz .Lschedule_mangle_dec addq $16,%rdx pxor .Lk_s63(%rip),%xmm4 .byte 102,15,56,0,229 movdqa %xmm4,%xmm3 .byte 102,15,56,0,229 pxor %xmm4,%xmm3 .byte 102,15,56,0,229 pxor %xmm4,%xmm3 jmp .Lschedule_mangle_both .align 16 .Lschedule_mangle_dec: leaq .Lk_dksd(%rip),%r11 movdqa %xmm9,%xmm1 pandn %xmm4,%xmm1 psrld $4,%xmm1 pand %xmm9,%xmm4 movdqa 0(%r11),%xmm2 .byte 102,15,56,0,212 movdqa 16(%r11),%xmm3 .byte 102,15,56,0,217 pxor %xmm2,%xmm3 .byte 102,15,56,0,221 movdqa 32(%r11),%xmm2 .byte 102,15,56,0,212 pxor %xmm3,%xmm2 movdqa 48(%r11),%xmm3 .byte 102,15,56,0,217 pxor %xmm2,%xmm3 .byte 102,15,56,0,221 movdqa 64(%r11),%xmm2 .byte 102,15,56,0,212 pxor %xmm3,%xmm2 movdqa 80(%r11),%xmm3 .byte 102,15,56,0,217 pxor %xmm2,%xmm3 .byte 102,15,56,0,221 movdqa 96(%r11),%xmm2 .byte 102,15,56,0,212 pxor %xmm3,%xmm2 movdqa 112(%r11),%xmm3 .byte 102,15,56,0,217 pxor %xmm2,%xmm3 addq $-16,%rdx .Lschedule_mangle_both: movdqa (%r8,%r10,1),%xmm1 .byte 102,15,56,0,217 addq $-16,%r8 andq $48,%r8 movdqu %xmm3,(%rdx) .byte 0xf3,0xc3 .size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle |
︙ | ︙ |
Changes to jni/libressl/crypto/aes/vpaes-macosx-x86_64.s.
︙ | ︙ | |||
23 24 25 26 27 28 29 | movl 240(%rdx),%eax movdqa %xmm9,%xmm1 movdqa L$k_ipt(%rip),%xmm2 pandn %xmm0,%xmm1 movdqu (%r9),%xmm5 psrld $4,%xmm1 pand %xmm9,%xmm0 | | | | | | | | | | | | | | | | | | | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | movl 240(%rdx),%eax movdqa %xmm9,%xmm1 movdqa L$k_ipt(%rip),%xmm2 pandn %xmm0,%xmm1 movdqu (%r9),%xmm5 psrld $4,%xmm1 pand %xmm9,%xmm0 .byte 102,15,56,0,208 movdqa L$k_ipt+16(%rip),%xmm0 .byte 102,15,56,0,193 pxor %xmm5,%xmm2 pxor %xmm2,%xmm0 addq $16,%r9 leaq L$k_mc_backward(%rip),%r10 jmp L$enc_entry .p2align 4 L$enc_loop: movdqa %xmm13,%xmm4 .byte 102,15,56,0,226 pxor %xmm5,%xmm4 movdqa %xmm12,%xmm0 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 movdqa %xmm15,%xmm5 .byte 102,15,56,0,234 movdqa -64(%r11,%r10,1),%xmm1 movdqa %xmm14,%xmm2 .byte 102,15,56,0,211 pxor %xmm5,%xmm2 movdqa (%r11,%r10,1),%xmm4 movdqa %xmm0,%xmm3 .byte 102,15,56,0,193 addq $16,%r9 pxor %xmm2,%xmm0 .byte 102,15,56,0,220 addq $16,%r11 pxor %xmm0,%xmm3 .byte 102,15,56,0,193 andq $48,%r11 pxor %xmm3,%xmm0 subq $1,%rax L$enc_entry: movdqa %xmm9,%xmm1 pandn %xmm0,%xmm1 psrld $4,%xmm1 pand %xmm9,%xmm0 movdqa %xmm11,%xmm5 .byte 102,15,56,0,232 pxor %xmm1,%xmm0 movdqa %xmm10,%xmm3 .byte 102,15,56,0,217 pxor %xmm5,%xmm3 movdqa %xmm10,%xmm4 .byte 102,15,56,0,224 pxor %xmm5,%xmm4 movdqa %xmm10,%xmm2 .byte 102,15,56,0,211 pxor %xmm0,%xmm2 movdqa %xmm10,%xmm3 movdqu (%r9),%xmm5 .byte 102,15,56,0,220 pxor %xmm1,%xmm3 jnz L$enc_loop movdqa -96(%r10),%xmm4 movdqa -80(%r10),%xmm0 .byte 102,15,56,0,226 pxor %xmm5,%xmm4 .byte 102,15,56,0,195 movdqa 64(%r11,%r10,1),%xmm1 pxor %xmm4,%xmm0 .byte 102,15,56,0,193 .byte 0xf3,0xc3 |
︙ | ︙ | |||
114 115 116 117 118 119 120 | movdqa L$k_dipt(%rip),%xmm2 pandn %xmm0,%xmm1 movq %rax,%r11 psrld $4,%xmm1 movdqu (%r9),%xmm5 shlq $4,%r11 pand %xmm9,%xmm0 | | | | | | | | | | | | | | | | | | | | | | | | 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 | movdqa L$k_dipt(%rip),%xmm2 pandn %xmm0,%xmm1 movq %rax,%r11 psrld $4,%xmm1 movdqu (%r9),%xmm5 shlq $4,%r11 pand %xmm9,%xmm0 .byte 102,15,56,0,208 movdqa L$k_dipt+16(%rip),%xmm0 xorq $48,%r11 leaq L$k_dsbd(%rip),%r10 .byte 102,15,56,0,193 andq $48,%r11 pxor %xmm5,%xmm2 movdqa L$k_mc_forward+48(%rip),%xmm5 pxor %xmm2,%xmm0 addq $16,%r9 addq %r10,%r11 jmp L$dec_entry .p2align 4 L$dec_loop: movdqa -32(%r10),%xmm4 .byte 102,15,56,0,226 pxor %xmm0,%xmm4 movdqa -16(%r10),%xmm0 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 addq $16,%r9 .byte 102,15,56,0,197 movdqa 0(%r10),%xmm4 .byte 102,15,56,0,226 pxor %xmm0,%xmm4 movdqa 16(%r10),%xmm0 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 subq $1,%rax .byte 102,15,56,0,197 movdqa 32(%r10),%xmm4 .byte 102,15,56,0,226 pxor %xmm0,%xmm4 movdqa 48(%r10),%xmm0 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 .byte 102,15,56,0,197 movdqa 64(%r10),%xmm4 .byte 102,15,56,0,226 pxor %xmm0,%xmm4 movdqa 80(%r10),%xmm0 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 .byte 102,15,58,15,237,12 L$dec_entry: movdqa %xmm9,%xmm1 pandn %xmm0,%xmm1 psrld $4,%xmm1 pand %xmm9,%xmm0 movdqa %xmm11,%xmm2 .byte 102,15,56,0,208 pxor %xmm1,%xmm0 movdqa %xmm10,%xmm3 .byte 102,15,56,0,217 pxor %xmm2,%xmm3 movdqa %xmm10,%xmm4 .byte 102,15,56,0,224 pxor %xmm2,%xmm4 movdqa %xmm10,%xmm2 .byte 102,15,56,0,211 pxor %xmm0,%xmm2 movdqa %xmm10,%xmm3 .byte 102,15,56,0,220 pxor %xmm1,%xmm3 movdqu (%r9),%xmm0 jnz L$dec_loop movdqa 96(%r10),%xmm4 .byte 102,15,56,0,226 pxor %xmm0,%xmm4 movdqa 112(%r10),%xmm0 movdqa -352(%r11),%xmm2 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 .byte 102,15,56,0,194 .byte 0xf3,0xc3 |
︙ | ︙ | |||
237 238 239 240 241 242 243 | movdqu %xmm0,(%rdx) jmp L$schedule_go L$schedule_am_decrypting: movdqa (%r8,%r10,1),%xmm1 | | | 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 | movdqu %xmm0,(%rdx) jmp L$schedule_go L$schedule_am_decrypting: movdqa (%r8,%r10,1),%xmm1 .byte 102,15,56,0,217 movdqu %xmm3,(%rdx) xorq $48,%r8 L$schedule_go: cmpl $192,%esi ja L$schedule_256 je L$schedule_192 |
︙ | ︙ | |||
291 292 293 294 295 296 297 | movdqa %xmm0,%xmm6 pxor %xmm4,%xmm4 movhlps %xmm4,%xmm6 movl $4,%esi L$oop_schedule_192: call _vpaes_schedule_round | | | 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 | movdqa %xmm0,%xmm6 pxor %xmm4,%xmm4 movhlps %xmm4,%xmm6 movl $4,%esi L$oop_schedule_192: call _vpaes_schedule_round .byte 102,15,58,15,198,8 call _vpaes_schedule_mangle call _vpaes_schedule_192_smear call _vpaes_schedule_mangle call _vpaes_schedule_round decq %rsi jz L$schedule_mangle_last call _vpaes_schedule_mangle |
︙ | ︙ | |||
357 358 359 360 361 362 363 | leaq L$k_deskew(%rip),%r11 testq %rcx,%rcx jnz L$schedule_mangle_last_dec movdqa (%r8,%r10,1),%xmm1 | | | 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 | leaq L$k_deskew(%rip),%r11 testq %rcx,%rcx jnz L$schedule_mangle_last_dec movdqa (%r8,%r10,1),%xmm1 .byte 102,15,56,0,193 leaq L$k_opt(%rip),%r11 addq $32,%rdx L$schedule_mangle_last_dec: addq $-16,%rdx pxor L$k_s63(%rip),%xmm0 call _vpaes_schedule_transform |
︙ | ︙ | |||
429 430 431 432 433 434 435 | .p2align 4 _vpaes_schedule_round: pxor %xmm1,%xmm1 | | | | | | | | | | | | 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 | .p2align 4 _vpaes_schedule_round: pxor %xmm1,%xmm1 .byte 102,65,15,58,15,200,15 .byte 102,69,15,58,15,192,15 pxor %xmm1,%xmm7 pshufd $255,%xmm0,%xmm0 .byte 102,15,58,15,192,1 _vpaes_schedule_low_round: movdqa %xmm7,%xmm1 pslldq $4,%xmm7 pxor %xmm1,%xmm7 movdqa %xmm7,%xmm1 pslldq $8,%xmm7 pxor %xmm1,%xmm7 pxor L$k_s63(%rip),%xmm7 movdqa %xmm9,%xmm1 pandn %xmm0,%xmm1 psrld $4,%xmm1 pand %xmm9,%xmm0 movdqa %xmm11,%xmm2 .byte 102,15,56,0,208 pxor %xmm1,%xmm0 movdqa %xmm10,%xmm3 .byte 102,15,56,0,217 pxor %xmm2,%xmm3 movdqa %xmm10,%xmm4 .byte 102,15,56,0,224 pxor %xmm2,%xmm4 movdqa %xmm10,%xmm2 .byte 102,15,56,0,211 pxor %xmm0,%xmm2 movdqa %xmm10,%xmm3 .byte 102,15,56,0,220 pxor %xmm1,%xmm3 movdqa %xmm13,%xmm4 .byte 102,15,56,0,226 movdqa %xmm12,%xmm0 .byte 102,15,56,0,195 pxor %xmm4,%xmm0 pxor %xmm7,%xmm0 movdqa %xmm0,%xmm7 .byte 0xf3,0xc3 |
︙ | ︙ | |||
499 500 501 502 503 504 505 | .p2align 4 _vpaes_schedule_transform: movdqa %xmm9,%xmm1 pandn %xmm0,%xmm1 psrld $4,%xmm1 pand %xmm9,%xmm0 movdqa (%r11),%xmm2 | | | | 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 | .p2align 4 _vpaes_schedule_transform: movdqa %xmm9,%xmm1 pandn %xmm0,%xmm1 psrld $4,%xmm1 pand %xmm9,%xmm0 movdqa (%r11),%xmm2 .byte 102,15,56,0,208 movdqa 16(%r11),%xmm0 .byte 102,15,56,0,193 pxor %xmm2,%xmm0 .byte 0xf3,0xc3 |
︙ | ︙ | |||
540 541 542 543 544 545 546 | movdqa L$k_mc_forward(%rip),%xmm5 testq %rcx,%rcx jnz L$schedule_mangle_dec addq $16,%rdx pxor L$k_s63(%rip),%xmm4 | | | | | | | | | | | | | | | | | 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 | movdqa L$k_mc_forward(%rip),%xmm5 testq %rcx,%rcx jnz L$schedule_mangle_dec addq $16,%rdx pxor L$k_s63(%rip),%xmm4 .byte 102,15,56,0,229 movdqa %xmm4,%xmm3 .byte 102,15,56,0,229 pxor %xmm4,%xmm3 .byte 102,15,56,0,229 pxor %xmm4,%xmm3 jmp L$schedule_mangle_both .p2align 4 L$schedule_mangle_dec: leaq L$k_dksd(%rip),%r11 movdqa %xmm9,%xmm1 pandn %xmm4,%xmm1 psrld $4,%xmm1 pand %xmm9,%xmm4 movdqa 0(%r11),%xmm2 .byte 102,15,56,0,212 movdqa 16(%r11),%xmm3 .byte 102,15,56,0,217 pxor %xmm2,%xmm3 .byte 102,15,56,0,221 movdqa 32(%r11),%xmm2 .byte 102,15,56,0,212 pxor %xmm3,%xmm2 movdqa 48(%r11),%xmm3 .byte 102,15,56,0,217 pxor %xmm2,%xmm3 .byte 102,15,56,0,221 movdqa 64(%r11),%xmm2 .byte 102,15,56,0,212 pxor %xmm3,%xmm2 movdqa 80(%r11),%xmm3 .byte 102,15,56,0,217 pxor %xmm2,%xmm3 .byte 102,15,56,0,221 movdqa 96(%r11),%xmm2 .byte 102,15,56,0,212 pxor %xmm3,%xmm2 movdqa 112(%r11),%xmm3 .byte 102,15,56,0,217 pxor %xmm2,%xmm3 addq $-16,%rdx L$schedule_mangle_both: movdqa (%r8,%r10,1),%xmm1 .byte 102,15,56,0,217 addq $-16,%r8 andq $48,%r8 movdqu %xmm3,(%rdx) .byte 0xf3,0xc3 |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/a_bitstr.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: a_bitstr.c,v 1.22 2015/07/29 14:58:34 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
136 137 138 139 140 141 142 | if (len < 1) { i = ASN1_R_STRING_TOO_SHORT; goto err; } if ((a == NULL) || ((*a) == NULL)) { | | | 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | if (len < 1) { i = ASN1_R_STRING_TOO_SHORT; goto err; } if ((a == NULL) || ((*a) == NULL)) { if ((ret = ASN1_BIT_STRING_new()) == NULL) return (NULL); } else ret = (*a); p = *pp; i = *(p++); /* We do this to preserve the settings. If we modify |
︙ | ︙ | |||
174 175 176 177 178 179 180 | (*a) = ret; *pp = p; return (ret); err: ASN1err(ASN1_F_C2I_ASN1_BIT_STRING, i); if ((ret != NULL) && ((a == NULL) || (*a != ret))) | | | 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | (*a) = ret; *pp = p; return (ret); err: ASN1err(ASN1_F_C2I_ASN1_BIT_STRING, i); if ((ret != NULL) && ((a == NULL) || (*a != ret))) ASN1_BIT_STRING_free(ret); return (NULL); } /* These next 2 functions from Goetz Babin-Ebell <babinebell@trustcenter.de> */ int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value) |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/a_d2i_fp.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: a_d2i_fp.c,v 1.14 2016/05/04 14:58:09 tedu Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/a_enum.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: a_enum.c,v 1.16 2014/09/21 12:17:42 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
136 137 138 139 140 141 142 | ASN1_ENUMERATED * BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai) { ASN1_ENUMERATED *ret; int len, j; if (ai == NULL) | | | 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | ASN1_ENUMERATED * BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai) { ASN1_ENUMERATED *ret; int len, j; if (ai == NULL) ret = ASN1_ENUMERATED_new(); else ret = ai; if (ret == NULL) { ASN1err(ASN1_F_BN_TO_ASN1_ENUMERATED, ERR_R_NESTED_ASN1_ERROR); goto err; } if (BN_is_negative(bn)) |
︙ | ︙ | |||
168 169 170 171 172 173 174 | ret->data[0] = 0; ret->length = 1; } return (ret); err: if (ret != ai) | | | 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | ret->data[0] = 0; ret->length = 1; } return (ret); err: if (ret != ai) ASN1_ENUMERATED_free(ret); return (NULL); } BIGNUM * ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai, BIGNUM *bn) { BIGNUM *ret; |
︙ | ︙ |
Deleted jni/libressl/crypto/asn1/a_gentm.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/crypto/asn1/a_int.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: a_int.c,v 1.28 2015/07/29 14:58:34 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
192 193 194 195 196 197 198 | { ASN1_INTEGER *ret = NULL; const unsigned char *p, *pend; unsigned char *to, *s; int i; if ((a == NULL) || ((*a) == NULL)) { | | < | 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | { ASN1_INTEGER *ret = NULL; const unsigned char *p, *pend; unsigned char *to, *s; int i; if ((a == NULL) || ((*a) == NULL)) { if ((ret = ASN1_INTEGER_new()) == NULL) return (NULL); } else ret = (*a); p = *pp; pend = p + len; /* We must malloc stuff, even for 0 bytes otherwise it |
︙ | ︙ | |||
265 266 267 268 269 270 271 | (*a) = ret; *pp = pend; return (ret); err: ASN1err(ASN1_F_C2I_ASN1_INTEGER, i); if (a == NULL || *a != ret) | | | < | 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 | (*a) = ret; *pp = pend; return (ret); err: ASN1err(ASN1_F_C2I_ASN1_INTEGER, i); if (a == NULL || *a != ret) ASN1_INTEGER_free(ret); return (NULL); } /* This is a version of d2i_ASN1_INTEGER that ignores the sign bit of * ASN1 integers: some broken software can encode a positive INTEGER * with its MSB set as negative (it doesn't add a padding zero). */ ASN1_INTEGER * d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, long length) { ASN1_INTEGER *ret = NULL; const unsigned char *p; unsigned char *s; long len; int inf, tag, xclass; int i; if ((a == NULL) || ((*a) == NULL)) { if ((ret = ASN1_INTEGER_new()) == NULL) return (NULL); } else ret = (*a); p = *pp; inf = ASN1_get_object(&p, &len, &tag, &xclass, length); if (inf & 0x80) { i = ASN1_R_BAD_OBJECT_HEADER; |
︙ | ︙ | |||
332 333 334 335 336 337 338 | (*a) = ret; *pp = p; return (ret); err: ASN1err(ASN1_F_D2I_ASN1_UINTEGER, i); if (a == NULL || *a != ret) | | | 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 | (*a) = ret; *pp = p; return (ret); err: ASN1err(ASN1_F_D2I_ASN1_UINTEGER, i); if (a == NULL || *a != ret) ASN1_INTEGER_free(ret); return (NULL); } int ASN1_INTEGER_set(ASN1_INTEGER *a, long v) { int j, k; |
︙ | ︙ | |||
410 411 412 413 414 415 416 | ASN1_INTEGER * BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai) { ASN1_INTEGER *ret; int len, j; if (ai == NULL) | | | 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 | ASN1_INTEGER * BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai) { ASN1_INTEGER *ret; int len, j; if (ai == NULL) ret = ASN1_INTEGER_new(); else ret = ai; if (ret == NULL) { ASN1err(ASN1_F_BN_TO_ASN1_INTEGER, ERR_R_NESTED_ASN1_ERROR); goto err; } if (BN_is_negative(bn)) |
︙ | ︙ | |||
442 443 444 445 446 447 448 | ret->data[0] = 0; ret->length = 1; } return (ret); err: if (ret != ai) | | | 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 | ret->data[0] = 0; ret->length = 1; } return (ret); err: if (ret != ai) ASN1_INTEGER_free(ret); return (NULL); } BIGNUM * ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn) { BIGNUM *ret; |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/a_object.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: a_object.c,v 1.25 2016/03/06 18:05:00 beck Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
221 222 223 224 225 226 227 | { return OBJ_obj2txt(buf, buf_len, a, 0); } int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a) { | | > | | > > | | > > | < > | | > | < > | | 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 | { return OBJ_obj2txt(buf, buf_len, a, 0); } int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a) { char *tmp = NULL; size_t tlen = 256; int i = -1; if ((a == NULL) || (a->data == NULL)) return(BIO_write(bp, "NULL", 4)); if ((tmp = malloc(tlen)) == NULL) return -1; i = i2t_ASN1_OBJECT(tmp, tlen, a); if (i > (int)(tlen - 1)) { explicit_bzero(tmp, tlen); free(tmp); if ((tmp = malloc(i + 1)) == NULL) return -1; tlen = i + 1; i = i2t_ASN1_OBJECT(tmp, tlen, a); } if (i <= 0) i = BIO_write(bp, "<INVALID>", 9); else i = BIO_write(bp, tmp, i); explicit_bzero(tmp, tlen); free(tmp); return (i); } ASN1_OBJECT * d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, long length) { const unsigned char *p; |
︙ | ︙ | |||
313 314 315 316 317 318 319 | return (NULL); } else ret = (*a); p = *pp; /* detach data from object */ data = (unsigned char *)ret->data; | | < < | | | | | | | | < | 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 | return (NULL); } else ret = (*a); p = *pp; /* detach data from object */ data = (unsigned char *)ret->data; if (data != NULL) explicit_bzero(data, ret->length); free(data); data = malloc(length); if (data == NULL) { i = ERR_R_MALLOC_FAILURE; goto err; } ret->flags |= ASN1_OBJECT_FLAG_DYNAMIC_DATA; memcpy(data, p, length); /* reattach data to object, after which it remains const */ ret->data = data; ret->length = length; ret->sn = NULL; ret->ln = NULL; /* ret->flags=ASN1_OBJECT_FLAG_DYNAMIC; we know it is dynamic */ |
︙ | ︙ | |||
376 377 378 379 380 381 382 383 384 385 386 387 388 389 | return; if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_STRINGS) { free((void *)a->sn); free((void *)a->ln); a->sn = a->ln = NULL; } if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_DATA) { free((void *)a->data); a->data = NULL; a->length = 0; } if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC) free(a); } | > > | 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 | return; if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_STRINGS) { free((void *)a->sn); free((void *)a->ln); a->sn = a->ln = NULL; } if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_DATA) { if (a->data != NULL) explicit_bzero((void *)a->data, a->length); free((void *)a->data); a->data = NULL; a->length = 0; } if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC) free(a); } |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/a_sign.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: a_sign.c,v 1.20 2015/07/19 18:29:31 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
108 109 110 111 112 113 114 115 116 117 118 119 120 121 | * Hudson (tjh@cryptsoft.com). * */ #include <sys/types.h> #include <stdio.h> #include <time.h> #include <openssl/bn.h> #include <openssl/buffer.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/objects.h> | > | 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | * Hudson (tjh@cryptsoft.com). * */ #include <sys/types.h> #include <stdio.h> #include <string.h> #include <time.h> #include <openssl/bn.h> #include <openssl/buffer.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/objects.h> |
︙ | ︙ | |||
225 226 227 228 229 230 231 | */ signature->flags &= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); signature->flags |= ASN1_STRING_FLAG_BITS_LEFT; err: EVP_MD_CTX_cleanup(ctx); if (buf_in != NULL) { | | | | 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 | */ signature->flags &= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); signature->flags |= ASN1_STRING_FLAG_BITS_LEFT; err: EVP_MD_CTX_cleanup(ctx); if (buf_in != NULL) { explicit_bzero((char *)buf_in, inl); free(buf_in); } if (buf_out != NULL) { explicit_bzero((char *)buf_out, outll); free(buf_out); } return (outl); } |
Changes to jni/libressl/crypto/asn1/a_time.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: a_time.c,v 1.26 2015/10/02 15:04:45 beck Exp $ */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * |
︙ | ︙ | |||
64 65 66 67 68 69 70 | #include <string.h> #include <time.h> #include <openssl/asn1t.h> #include <openssl/err.h> #include "o_time.h" | | | 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <string.h> #include <time.h> #include <openssl/asn1t.h> #include <openssl/err.h> #include "o_time.h" #include "asn1_locl.h" const ASN1_ITEM ASN1_TIME_it = { .itype = ASN1_ITYPE_MSTRING, .utype = B_ASN1_TIME, .templates = NULL, .tcount = 0, .funcs = NULL, |
︙ | ︙ | |||
101 102 103 104 105 106 107 | } void ASN1_TIME_free(ASN1_TIME *a) { ASN1_item_free((ASN1_VALUE *)a, &ASN1_TIME_it); } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 101 102 103 104 105 106 107 | } void ASN1_TIME_free(ASN1_TIME *a) { ASN1_item_free((ASN1_VALUE *)a, &ASN1_TIME_it); } |
Added jni/libressl/crypto/asn1/a_time_tm.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 | /* $OpenBSD: a_time_tm.c,v 1.8 2015/10/22 15:38:05 jsing Exp $ */ /* * Copyright (c) 2015 Bob Beck <beck@openbsd.org> * * 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. */ #include <ctype.h> #include <limits.h> #include <stdio.h> #include <string.h> #include <time.h> #include <openssl/asn1t.h> #include <openssl/err.h> #include "o_time.h" #define RFC5280 0 #define GENTIME_LENGTH 15 #define UTCTIME_LENGTH 13 int asn1_tm_cmp(struct tm *tm1, struct tm *tm2) { if (tm1->tm_year < tm2->tm_year) return (-1); if (tm1->tm_year > tm2->tm_year) return (1); if (tm1->tm_mon < tm2->tm_mon) return (-1); if (tm1->tm_mon > tm2->tm_mon) return (1); if (tm1->tm_mday < tm2->tm_mday) return (-1); if (tm1->tm_mday > tm2->tm_mday) return (1); if (tm1->tm_hour < tm2->tm_hour) return (-1); if (tm1->tm_hour > tm2->tm_hour) return (1); if (tm1->tm_min < tm2->tm_min) return (-1); if (tm1->tm_min > tm2->tm_min) return (1); if (tm1->tm_sec < tm2->tm_sec) return (-1); if (tm1->tm_sec > tm2->tm_sec) return (1); return 0; } /* Format a time as an RFC 5280 format Generalized time */ char * gentime_string_from_tm(struct tm *tm) { char *ret = NULL; int year; year = tm->tm_year + 1900; if (year < 0 || year > 9999) return (NULL); if (asprintf(&ret, "%04u%02u%02u%02u%02u%02uZ", year, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec) == -1) ret = NULL; return (ret); } /* Format a time as an RFC 5280 format UTC time */ char * utctime_string_from_tm(struct tm *tm) { char *ret = NULL; if (tm->tm_year >= 150 || tm->tm_year < 50) return (NULL); if (asprintf(&ret, "%02u%02u%02u%02u%02u%02uZ", tm->tm_year % 100, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec) == -1) ret = NULL; return (ret); } /* Format a time correctly for an X509 object as per RFC 5280 */ char * rfc5280_string_from_tm(struct tm *tm) { char *ret = NULL; int year; year = tm->tm_year + 1900; if (year < 1950 || year > 9999) return (NULL); if (year < 2050) ret = utctime_string_from_tm(tm); else ret = gentime_string_from_tm(tm); return (ret); } /* * Parse an RFC 5280 format ASN.1 time string. * * mode must be: * 0 if we expect to parse a time as specified in RFC 5280 from an X509 object. * V_ASN1_UTCTIME if we wish to parse on RFC5280 format UTC time. * V_ASN1_GENERALIZEDTIME if we wish to parse an RFC5280 format Generalized time. * * Returns: * -1 if the string was invalid. * V_ASN1_UTCTIME if the string validated as a UTC time string. * V_ASN1_GENERALIZEDTIME if the string validated as a Generalized time string. * * Fills in *tm with the corresponding time if tm is non NULL. */ #define ATOI2(ar) ((ar) += 2, ((ar)[-2] - '0') * 10 + ((ar)[-1] - '0')) int asn1_time_parse(const char *bytes, size_t len, struct tm *tm, int mode) { size_t i; int type = 0; struct tm ltm; struct tm *lt; const char *p; if (bytes == NULL) return (-1); /* Constrain to valid lengths. */ if (len != UTCTIME_LENGTH && len != GENTIME_LENGTH) return (-1); lt = tm; if (lt == NULL) { memset(<m, 0, sizeof(ltm)); lt = <m; } /* Timezone is required and must be GMT (Zulu). */ if (bytes[len - 1] != 'Z') return (-1); /* Make sure everything else is digits. */ for (i = 0; i < len - 1; i++) { if (isdigit((unsigned char)bytes[i])) continue; return (-1); } /* * Validate and convert the time */ p = bytes; switch (len) { case GENTIME_LENGTH: if (mode == V_ASN1_UTCTIME) return (-1); lt->tm_year = (ATOI2(p) * 100) - 1900; /* cc */ type = V_ASN1_GENERALIZEDTIME; /* FALLTHROUGH */ case UTCTIME_LENGTH: if (type == 0) { if (mode == V_ASN1_GENERALIZEDTIME) return (-1); type = V_ASN1_UTCTIME; } lt->tm_year += ATOI2(p); /* yy */ if (type == V_ASN1_UTCTIME) { if (lt->tm_year < 50) lt->tm_year += 100; } lt->tm_mon = ATOI2(p) - 1; /* mm */ if (lt->tm_mon < 0 || lt->tm_mon > 11) return (-1); lt->tm_mday = ATOI2(p); /* dd */ if (lt->tm_mday < 1 || lt->tm_mday > 31) return (-1); lt->tm_hour = ATOI2(p); /* HH */ if (lt->tm_hour < 0 || lt->tm_hour > 23) return (-1); lt->tm_min = ATOI2(p); /* MM */ if (lt->tm_min < 0 || lt->tm_min > 59) return (-1); lt->tm_sec = ATOI2(p); /* SS */ /* Leap second 60 is not accepted. Reconsider later? */ if (lt->tm_sec < 0 || lt->tm_sec > 59) return (-1); break; default: return (-1); } return (type); } /* * ASN1_TIME generic functions. */ static int ASN1_TIME_set_string_internal(ASN1_TIME *s, const char *str, int mode) { int type; char *tmp; if ((type = asn1_time_parse(str, strlen(str), NULL, mode)) == -1) return (0); if (mode != 0 && mode != type) return (0); if (s == NULL) return (1); if ((tmp = strdup(str)) == NULL) return (0); free(s->data); s->data = tmp; s->length = strlen(tmp); s->type = type; return (1); } static ASN1_TIME * ASN1_TIME_adj_internal(ASN1_TIME *s, time_t t, int offset_day, long offset_sec, int mode) { int allocated = 0; struct tm tm; size_t len; char * p; if (gmtime_r(&t, &tm) == NULL) return (NULL); if (offset_day || offset_sec) { if (!OPENSSL_gmtime_adj(&tm, offset_day, offset_sec)) return (NULL); } switch (mode) { case V_ASN1_UTCTIME: p = utctime_string_from_tm(&tm); break; case V_ASN1_GENERALIZEDTIME: p = gentime_string_from_tm(&tm); break; case RFC5280: p = rfc5280_string_from_tm(&tm); break; default: return (NULL); } if (p == NULL) { ASN1err(ASN1_F_ASN1_GENERALIZEDTIME_ADJ, ASN1_R_ILLEGAL_TIME_VALUE); return (NULL); } if (s == NULL) { if ((s = ASN1_TIME_new()) == NULL) return (NULL); allocated = 1; } len = strlen(p); switch (len) { case GENTIME_LENGTH: s->type = V_ASN1_GENERALIZEDTIME; break; case UTCTIME_LENGTH: s->type = V_ASN1_UTCTIME; break; default: if (allocated) ASN1_TIME_free(s); free(p); return (NULL); } free(s->data); s->data = p; s->length = len; return (s); } ASN1_TIME * ASN1_TIME_set(ASN1_TIME *s, time_t t) { return (ASN1_TIME_adj(s, t, 0, 0)); } ASN1_TIME * ASN1_TIME_adj(ASN1_TIME *s, time_t t, int offset_day, long offset_sec) { return (ASN1_TIME_adj_internal(s, t, offset_day, offset_sec, RFC5280)); } int ASN1_TIME_check(ASN1_TIME *t) { if (t->type != V_ASN1_GENERALIZEDTIME && t->type != V_ASN1_UTCTIME) return (0); return (t->type == asn1_time_parse(t->data, t->length, NULL, t->type)); } ASN1_GENERALIZEDTIME * ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME **out) { ASN1_GENERALIZEDTIME *tmp = NULL; struct tm tm; char *str; if (t->type != V_ASN1_GENERALIZEDTIME && t->type != V_ASN1_UTCTIME) return (NULL); memset(&tm, 0, sizeof(tm)); if (t->type != asn1_time_parse(t->data, t->length, &tm, t->type)) return (NULL); if ((str = gentime_string_from_tm(&tm)) == NULL) return (NULL); if (out != NULL) tmp = *out; if (tmp == NULL && (tmp = ASN1_GENERALIZEDTIME_new()) == NULL) { free(str); return (NULL); } if (out != NULL) *out = tmp; free(tmp->data); tmp->data = str; tmp->length = strlen(str); return (tmp); } int ASN1_TIME_set_string(ASN1_TIME *s, const char *str) { return (ASN1_TIME_set_string_internal(s, str, 0)); } /* * ASN1_UTCTIME wrappers */ int ASN1_UTCTIME_check(ASN1_UTCTIME *d) { if (d->type != V_ASN1_UTCTIME) return (0); return (d->type == asn1_time_parse(d->data, d->length, NULL, d->type)); } int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str) { if (s != NULL && s->type != V_ASN1_UTCTIME) return (0); return (ASN1_TIME_set_string_internal(s, str, V_ASN1_UTCTIME)); } ASN1_UTCTIME * ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t) { return (ASN1_UTCTIME_adj(s, t, 0, 0)); } ASN1_UTCTIME * ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, int offset_day, long offset_sec) { return (ASN1_TIME_adj_internal(s, t, offset_day, offset_sec, V_ASN1_UTCTIME)); } int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t2) { struct tm tm1, tm2; /* * This function has never handled failure conditions properly * and should be deprecated. The OpenSSL version used to * simply follow NULL pointers on failure. BoringSSL and * OpenSSL now make it return -2 on failure. * * The danger is that users of this function will not * differentiate the -2 failure case from t1 < t2. */ if (asn1_time_parse(s->data, s->length, &tm1, V_ASN1_UTCTIME) == -1) return (-2); /* XXX */ if (gmtime_r(&t2, &tm2) == NULL) return (-2); /* XXX */ return asn1_tm_cmp(&tm1, &tm2); } /* * ASN1_GENERALIZEDTIME wrappers */ int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *d) { if (d->type != V_ASN1_GENERALIZEDTIME) return (0); return (d->type == asn1_time_parse(d->data, d->length, NULL, d->type)); } int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str) { if (s != NULL && s->type != V_ASN1_GENERALIZEDTIME) return (0); return (ASN1_TIME_set_string_internal(s, str, V_ASN1_GENERALIZEDTIME)); } ASN1_GENERALIZEDTIME * ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, time_t t) { return (ASN1_GENERALIZEDTIME_adj(s, t, 0, 0)); } ASN1_GENERALIZEDTIME * ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, time_t t, int offset_day, long offset_sec) { return (ASN1_TIME_adj_internal(s, t, offset_day, offset_sec, V_ASN1_GENERALIZEDTIME)); } |
Changes to jni/libressl/crypto/asn1/a_type.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: a_type.c,v 1.18 2016/05/04 14:53:29 tedu Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ |
Deleted jni/libressl/crypto/asn1/a_utctm.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/crypto/asn1/a_verify.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: a_verify.c,v 1.21 2015/01/28 04:14:31 beck Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
55 56 57 58 59 60 61 62 63 64 65 66 67 68 | * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <sys/types.h> #include <stdio.h> #include <time.h> #include <openssl/bn.h> #include <openssl/buffer.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/objects.h> | > | 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <sys/types.h> #include <stdio.h> #include <string.h> #include <time.h> #include <openssl/bn.h> #include <openssl/buffer.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/objects.h> |
︙ | ︙ | |||
148 149 150 151 152 153 154 | if (!EVP_DigestVerifyUpdate(&ctx, buf_in, inl)) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_EVP_LIB); ret = 0; goto err; } | | | 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | if (!EVP_DigestVerifyUpdate(&ctx, buf_in, inl)) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_EVP_LIB); ret = 0; goto err; } explicit_bzero(buf_in, (unsigned int)inl); free(buf_in); if (EVP_DigestVerifyFinal(&ctx, signature->data, (size_t)signature->length) <= 0) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_EVP_LIB); ret = 0; goto err; |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/asn1_gen.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: asn1_gen.c,v 1.14 2015/07/18 14:40:59 miod Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2002. */ /* ==================================================================== * Copyright (c) 2002 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
142 143 144 145 146 147 148 | int i, len; unsigned char *orig_der = NULL, *new_der = NULL; const unsigned char *cpy_start; unsigned char *p; const unsigned char *cp; int cpy_len; | | | 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | int i, len; unsigned char *orig_der = NULL, *new_der = NULL; const unsigned char *cpy_start; unsigned char *p; const unsigned char *cp; int cpy_len; long hdr_len = 0; int hdr_constructed = 0, hdr_tag, hdr_class; int r; asn1_tags.imp_tag = -1; asn1_tags.imp_class = -1; asn1_tags.format = ASN1_GEN_FORMAT_ASCII; asn1_tags.exp_count = 0; |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/asn1_lib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: asn1_lib.c,v 1.36 2015/07/29 14:53:20 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
397 398 399 400 401 402 403 404 405 406 407 408 409 410 | str->data[str->length]='\0'; return (1); } void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len) { free(str->data); str->data = data; str->length = len; } ASN1_STRING * ASN1_STRING_new(void) | > > | 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 | str->data[str->length]='\0'; return (1); } void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len) { if (str->data != NULL) explicit_bzero(str->data, str->length); free(str->data); str->data = data; str->length = len; } ASN1_STRING * ASN1_STRING_new(void) |
︙ | ︙ | |||
430 431 432 433 434 435 436 | } void ASN1_STRING_free(ASN1_STRING *a) { if (a == NULL) return; | | > > | 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 | } void ASN1_STRING_free(ASN1_STRING *a) { if (a == NULL) return; if (a->data != NULL && !(a->flags & ASN1_STRING_FLAG_NDEF)) { explicit_bzero(a->data, a->length); free(a->data); } free(a); } int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b) { int i; |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/asn1_locl.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: asn1_locl.h,v 1.6 2015/10/02 15:04:45 beck Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2006. */ /* ==================================================================== * Copyright (c) 2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/asn1_par.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: asn1_par.c,v 1.24 2015/09/30 18:41:06 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
282 283 284 285 286 287 288 | ((dump == -1 || dump > os->length) ? os->length : dump), dump_indent) <= 0) goto end; nl = 1; } } | | | 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 | ((dump == -1 || dump > os->length) ? os->length : dump), dump_indent) <= 0) goto end; nl = 1; } } ASN1_OCTET_STRING_free(os); os = NULL; } else if (tag == V_ASN1_INTEGER) { ASN1_INTEGER *bs; int i; opp = op; bs = d2i_ASN1_INTEGER(NULL, &opp, len + hl); |
︙ | ︙ | |||
309 310 311 312 313 314 315 | if (BIO_write(bp, "00", 2) <= 0) goto end; } } else { if (BIO_write(bp, "BAD INTEGER", 11) <= 0) goto end; } | | | 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 | if (BIO_write(bp, "00", 2) <= 0) goto end; } } else { if (BIO_write(bp, "BAD INTEGER", 11) <= 0) goto end; } ASN1_INTEGER_free(bs); } else if (tag == V_ASN1_ENUMERATED) { ASN1_ENUMERATED *bs; int i; opp = op; bs = d2i_ASN1_ENUMERATED(NULL, &opp, len + hl); if (bs != NULL) { |
︙ | ︙ | |||
335 336 337 338 339 340 341 | if (BIO_write(bp, "00", 2) <= 0) goto end; } } else { if (BIO_write(bp, "BAD ENUMERATED", 14) <= 0) goto end; } | | | 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 | if (BIO_write(bp, "00", 2) <= 0) goto end; } } else { if (BIO_write(bp, "BAD ENUMERATED", 14) <= 0) goto end; } ASN1_ENUMERATED_free(bs); } else if (len > 0 && dump) { if (!nl) { if (BIO_write(bp, "\n", 1) <= 0) goto end; } if (BIO_dump_indent(bp, (const char *)p, ((dump == -1 || dump > len) ? len : dump), |
︙ | ︙ | |||
365 366 367 368 369 370 371 | length -= len; } ret = 1; end: if (o != NULL) ASN1_OBJECT_free(o); | | | 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 | length -= len; } ret = 1; end: if (o != NULL) ASN1_OBJECT_free(o); ASN1_OCTET_STRING_free(os); *pp = p; return (ret); } const char * ASN1_tag2str(int tag) { |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/asn_pack.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: asn_pack.c,v 1.14 2014/07/11 13:41:59 miod Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
176 177 178 179 180 181 182 | if (!(octmp = ASN1_STRING_new ())) { ASN1err(ASN1_F_ASN1_ITEM_PACK, ERR_R_MALLOC_FAILURE); return NULL; } } else octmp = *oct; | < | | < | 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | if (!(octmp = ASN1_STRING_new ())) { ASN1err(ASN1_F_ASN1_ITEM_PACK, ERR_R_MALLOC_FAILURE); return NULL; } } else octmp = *oct; free(octmp->data); octmp->data = NULL; if (!(octmp->length = ASN1_item_i2d(obj, &octmp->data, it))) { ASN1err(ASN1_F_ASN1_ITEM_PACK, ASN1_R_ENCODE_ERROR); goto err; } if (!octmp->data) { ASN1err(ASN1_F_ASN1_ITEM_PACK, ERR_R_MALLOC_FAILURE); |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/bio_asn1.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bio_asn1.c,v 1.11 2015/02/10 09:52:35 miod Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project. */ /* ==================================================================== * Copyright (c) 2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
169 170 171 172 173 174 175 | return 0; ctx->bufsize = size; ctx->bufpos = 0; ctx->buflen = 0; ctx->copylen = 0; ctx->asn1_class = V_ASN1_UNIVERSAL; ctx->asn1_tag = V_ASN1_OCTET_STRING; | | | 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | return 0; ctx->bufsize = size; ctx->bufpos = 0; ctx->buflen = 0; ctx->copylen = 0; ctx->asn1_class = V_ASN1_UNIVERSAL; ctx->asn1_tag = V_ASN1_OCTET_STRING; ctx->ex_buf = NULL; ctx->ex_pos = 0; ctx->ex_len = 0; ctx->state = ASN1_STATE_START; return 1; } static int |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/evp_asn1.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: evp_asn1.c,v 1.17 2015/09/30 18:41:06 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
64 65 66 67 68 69 70 | #include <openssl/err.h> int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len) { ASN1_STRING *os; | | | | | | 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | #include <openssl/err.h> int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len) { ASN1_STRING *os; if ((os = ASN1_OCTET_STRING_new()) == NULL) return (0); if (!ASN1_STRING_set(os, data, len)) { ASN1_OCTET_STRING_free(os); return (0); } ASN1_TYPE_set(a, V_ASN1_OCTET_STRING, os); return (1); } /* int max_len: for returned value */ int ASN1_TYPE_get_octetstring(ASN1_TYPE *a, unsigned char *data, int max_len) { int ret, num; unsigned char *p; if ((a->type != V_ASN1_OCTET_STRING) || (a->value.octet_string == NULL)) { ASN1err(ASN1_F_ASN1_TYPE_GET_OCTETSTRING, ASN1_R_DATA_IS_WRONG); return (-1); } p = ASN1_STRING_data(a->value.octet_string); ret = ASN1_STRING_length(a->value.octet_string); if (ret < max_len) num = ret; else num = max_len; memcpy(data, p, num); return (ret); } |
︙ | ︙ | |||
113 114 115 116 117 118 119 | in.data = buf; in.length = 32; os.data = data; os.type = V_ASN1_OCTET_STRING; os.length = len; ASN1_INTEGER_set(&in, num); n = i2d_ASN1_INTEGER(&in, NULL); | | > | | | > | 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | in.data = buf; in.length = 32; os.data = data; os.type = V_ASN1_OCTET_STRING; os.length = len; ASN1_INTEGER_set(&in, num); n = i2d_ASN1_INTEGER(&in, NULL); n += i2d_ASN1_bytes((ASN1_STRING *)&os, NULL, V_ASN1_OCTET_STRING, V_ASN1_UNIVERSAL); size = ASN1_object_size(1, n, V_ASN1_SEQUENCE); if ((osp = ASN1_STRING_new()) == NULL) return (0); /* Grow the 'string' */ if (!ASN1_STRING_set(osp, NULL, size)) { ASN1_STRING_free(osp); return (0); } ASN1_STRING_length_set(osp, size); p = ASN1_STRING_data(osp); ASN1_put_object(&p, 1,n, V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL); i2d_ASN1_INTEGER(&in, &p); i2d_ASN1_bytes((ASN1_STRING *)&os, &p, V_ASN1_OCTET_STRING, V_ASN1_UNIVERSAL); ASN1_TYPE_set(a, V_ASN1_SEQUENCE, osp); return (1); } /* we return the actual length..., num may be missing, in which * case, set it to zero */ |
︙ | ︙ | |||
153 154 155 156 157 158 159 | const unsigned char *p; long length; ASN1_const_CTX c; if ((a->type != V_ASN1_SEQUENCE) || (a->value.sequence == NULL)) { goto err; } | | | | 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | const unsigned char *p; long length; ASN1_const_CTX c; if ((a->type != V_ASN1_SEQUENCE) || (a->value.sequence == NULL)) { goto err; } p = ASN1_STRING_data(a->value.sequence); length = ASN1_STRING_length(a->value.sequence); c.pp = &p; c.p = p; c.max = p + length; c.error = ASN1_R_DATA_IS_WRONG; M_ASN1_D2I_start_sequence(); |
︙ | ︙ | |||
176 177 178 179 180 181 182 | c.slen -= (c.p - c.q); if (!M_ASN1_D2I_end_sequence()) goto err; if (num != NULL) *num = ASN1_INTEGER_get(ai); | | | | | | 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 | c.slen -= (c.p - c.q); if (!M_ASN1_D2I_end_sequence()) goto err; if (num != NULL) *num = ASN1_INTEGER_get(ai); ret = ASN1_STRING_length(os); if (max_len > ret) n = ret; else n = max_len; if (data != NULL) memcpy(data, ASN1_STRING_data(os), n); if (0) { err: ASN1err(ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING, ASN1_R_DATA_IS_WRONG); } ASN1_OCTET_STRING_free(os); ASN1_INTEGER_free(ai); return (ret); } |
Changes to jni/libressl/crypto/asn1/n_pkey.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: n_pkey.c,v 1.29 2015/10/16 15:12:30 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
109 110 111 112 113 114 115 | .templates = NETSCAPE_ENCRYPTED_PKEY_seq_tt, .tcount = sizeof(NETSCAPE_ENCRYPTED_PKEY_seq_tt) / sizeof(ASN1_TEMPLATE), .funcs = &NETSCAPE_ENCRYPTED_PKEY_aux, .size = sizeof(NETSCAPE_ENCRYPTED_PKEY), .sname = "NETSCAPE_ENCRYPTED_PKEY", }; | | | > > | 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | .templates = NETSCAPE_ENCRYPTED_PKEY_seq_tt, .tcount = sizeof(NETSCAPE_ENCRYPTED_PKEY_seq_tt) / sizeof(ASN1_TEMPLATE), .funcs = &NETSCAPE_ENCRYPTED_PKEY_aux, .size = sizeof(NETSCAPE_ENCRYPTED_PKEY), .sname = "NETSCAPE_ENCRYPTED_PKEY", }; NETSCAPE_ENCRYPTED_PKEY *NETSCAPE_ENCRYPTED_PKEY_new(void); void NETSCAPE_ENCRYPTED_PKEY_free(NETSCAPE_ENCRYPTED_PKEY *a); NETSCAPE_ENCRYPTED_PKEY *d2i_NETSCAPE_ENCRYPTED_PKEY(NETSCAPE_ENCRYPTED_PKEY **a, const unsigned char **in, long len); int i2d_NETSCAPE_ENCRYPTED_PKEY(const NETSCAPE_ENCRYPTED_PKEY *a, unsigned char **out); NETSCAPE_ENCRYPTED_PKEY * d2i_NETSCAPE_ENCRYPTED_PKEY(NETSCAPE_ENCRYPTED_PKEY **a, const unsigned char **in, long len) { return (NETSCAPE_ENCRYPTED_PKEY *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, &NETSCAPE_ENCRYPTED_PKEY_it); } |
︙ | ︙ | |||
164 165 166 167 168 169 170 | .utype = V_ASN1_SEQUENCE, .templates = NETSCAPE_PKEY_seq_tt, .tcount = sizeof(NETSCAPE_PKEY_seq_tt) / sizeof(ASN1_TEMPLATE), .size = sizeof(NETSCAPE_PKEY), .sname = "NETSCAPE_PKEY", }; | | | > > | 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | .utype = V_ASN1_SEQUENCE, .templates = NETSCAPE_PKEY_seq_tt, .tcount = sizeof(NETSCAPE_PKEY_seq_tt) / sizeof(ASN1_TEMPLATE), .size = sizeof(NETSCAPE_PKEY), .sname = "NETSCAPE_PKEY", }; NETSCAPE_PKEY *NETSCAPE_PKEY_new(void); void NETSCAPE_PKEY_free(NETSCAPE_PKEY *a); NETSCAPE_PKEY *d2i_NETSCAPE_PKEY(NETSCAPE_PKEY **a, const unsigned char **in, long len); int i2d_NETSCAPE_PKEY(const NETSCAPE_PKEY *a, unsigned char **out); NETSCAPE_PKEY * d2i_NETSCAPE_PKEY(NETSCAPE_PKEY **a, const unsigned char **in, long len) { return (NETSCAPE_PKEY *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, &NETSCAPE_PKEY_it); } |
︙ | ︙ | |||
273 274 275 276 277 278 279 | ASN1err(ASN1_F_I2D_RSA_NET, ERR_R_MALLOC_FAILURE); goto err; } enckey->enckey->digest->data = zz; i2d_NETSCAPE_PKEY(pkey, &zz); /* Wipe the private key encoding */ | | | | 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 | ASN1err(ASN1_F_I2D_RSA_NET, ERR_R_MALLOC_FAILURE); goto err; } enckey->enckey->digest->data = zz; i2d_NETSCAPE_PKEY(pkey, &zz); /* Wipe the private key encoding */ explicit_bzero(pkey->private_key->data, rsalen); if (cb == NULL) cb = EVP_read_pw_string; i = cb((char *)buf, sizeof(buf), "Enter Private Key password:", 1); if (i != 0) { ASN1err(ASN1_F_I2D_RSA_NET, ASN1_R_BAD_PASSWORD_READ); goto err; } i = strlen((char *)buf); /* If the key is used for SGC the algorithm is modified a little. */ if (sgckey) { if (!EVP_Digest(buf, i, buf, NULL, EVP_md5(), NULL)) goto err; memcpy(buf + 16, "SGCKEYSALT", 10); i = 26; } if (!EVP_BytesToKey(EVP_rc4(), EVP_md5(), NULL, buf, i,1, key, NULL)) goto err; explicit_bzero(buf, sizeof(buf)); /* Encrypt private key in place */ zz = enckey->enckey->digest->data; if (!EVP_EncryptInit_ex(&ctx, EVP_rc4(), NULL, key, NULL)) goto err; if (!EVP_EncryptUpdate(&ctx, zz, &i, zz, pkeylen)) goto err; |
︙ | ︙ | |||
390 391 392 393 394 395 396 | goto err; memcpy(buf + 16, "SGCKEYSALT", 10); i = 26; } if (!EVP_BytesToKey(EVP_rc4(), EVP_md5(), NULL, buf, i,1, key, NULL)) goto err; | | | 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 | goto err; memcpy(buf + 16, "SGCKEYSALT", 10); i = 26; } if (!EVP_BytesToKey(EVP_rc4(), EVP_md5(), NULL, buf, i,1, key, NULL)) goto err; explicit_bzero(buf, sizeof(buf)); if (!EVP_DecryptInit_ex(&ctx, EVP_rc4(), NULL, key, NULL)) goto err; if (!EVP_DecryptUpdate(&ctx, os->data, &i, os->data, os->length)) goto err; if (!EVP_DecryptFinal_ex(&ctx, &(os->data[i]), &j)) goto err; |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/p5_pbev2.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: p5_pbev2.c,v 1.22 2015/09/30 17:30:15 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999-2004. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
299 300 301 302 303 304 305 | { X509_ALGOR *keyfunc = NULL; PBKDF2PARAM *kdf = NULL; ASN1_OCTET_STRING *osalt = NULL; if (!(kdf = PBKDF2PARAM_new())) goto merr; | | | 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 | { X509_ALGOR *keyfunc = NULL; PBKDF2PARAM *kdf = NULL; ASN1_OCTET_STRING *osalt = NULL; if (!(kdf = PBKDF2PARAM_new())) goto merr; if (!(osalt = ASN1_OCTET_STRING_new())) goto merr; kdf->salt->value.octet_string = osalt; kdf->salt->type = V_ASN1_OCTET_STRING; if (!saltlen) saltlen = PKCS5_SALT_LEN; |
︙ | ︙ | |||
326 327 328 329 330 331 332 | if (!ASN1_INTEGER_set(kdf->iter, iter)) goto merr; /* If have a key len set it up */ if (keylen > 0) { | | | | 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 | if (!ASN1_INTEGER_set(kdf->iter, iter)) goto merr; /* If have a key len set it up */ if (keylen > 0) { if (!(kdf->keylength = ASN1_INTEGER_new())) goto merr; if (!ASN1_INTEGER_set(kdf->keylength, keylen)) goto merr; } /* prf can stay NULL if we are using hmacWithSHA1 */ if (prf_nid > 0 && prf_nid != NID_hmacWithSHA1) { kdf->prf = X509_ALGOR_new(); if (!kdf->prf) |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/p8_pkey.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: p8_pkey.c,v 1.16 2015/07/16 18:21:57 miod Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <openssl/asn1t.h> #include <openssl/x509.h> /* Minor tweak to operation: zero private key data */ static int pkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) { /* Since the structure must still be valid use ASN1_OP_FREE_PRE */ if (operation == ASN1_OP_FREE_PRE) { PKCS8_PRIV_KEY_INFO *key = (PKCS8_PRIV_KEY_INFO *)*pval; if (key->pkey != NULL && key->pkey->type == V_ASN1_OCTET_STRING && key->pkey->value.octet_string != NULL) | > | | 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <string.h> #include <openssl/asn1t.h> #include <openssl/x509.h> /* Minor tweak to operation: zero private key data */ static int pkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) { /* Since the structure must still be valid use ASN1_OP_FREE_PRE */ if (operation == ASN1_OP_FREE_PRE) { PKCS8_PRIV_KEY_INFO *key = (PKCS8_PRIV_KEY_INFO *)*pval; if (key->pkey != NULL && key->pkey->type == V_ASN1_OCTET_STRING && key->pkey->value.octet_string != NULL) explicit_bzero(key->pkey->value.octet_string->data, key->pkey->value.octet_string->length); } return 1; } static const ASN1_AUX PKCS8_PRIV_KEY_INFO_aux = { .asn1_cb = pkey_cb, |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/tasn_dec.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: tasn_dec.c,v 1.31 2016/05/04 14:53:29 tedu Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2000. */ /* ==================================================================== * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
672 673 674 675 676 677 678 679 680 681 682 683 684 685 | long plen; char cst, inf, free_cont = 0; const unsigned char *p; BUF_MEM buf; const unsigned char *cont = NULL; long len; if (!pval) { ASN1err(ASN1_F_ASN1_D2I_EX_PRIMITIVE, ASN1_R_ILLEGAL_NULL); return 0; /* Should never happen */ } if (it->itype == ASN1_ITYPE_MSTRING) { utype = tag; | > > > > | 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 | long plen; char cst, inf, free_cont = 0; const unsigned char *p; BUF_MEM buf; const unsigned char *cont = NULL; long len; buf.length = 0; buf.max = 0; buf.data = NULL; if (!pval) { ASN1err(ASN1_F_ASN1_D2I_EX_PRIMITIVE, ASN1_R_ILLEGAL_NULL); return 0; /* Should never happen */ } if (it->itype == ASN1_ITYPE_MSTRING) { utype = tag; |
︙ | ︙ | |||
749 750 751 752 753 754 755 | len = p - cont; } else { len = p - cont + plen; p += plen; buf.data = NULL; } } else if (cst) { | < < < | 753 754 755 756 757 758 759 760 761 762 763 764 765 766 | len = p - cont; } else { len = p - cont + plen; p += plen; buf.data = NULL; } } else if (cst) { /* Should really check the internal tags are correct but * some things may get this wrong. The relevant specs * say that constructed string types should be OCTET STRINGs * internally irrespective of the type. So instead just check * for UNIVERSAL class and ignore the tag. */ if (!asn1_collect(&buf, &p, plen, inf, -1, V_ASN1_UNIVERSAL, 0)) { |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/tasn_enc.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: tasn_enc.c,v 1.19 2016/05/04 14:53:29 tedu Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2000. */ /* ==================================================================== * Copyright (c) 2000-2004 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
133 134 135 136 137 138 139 | ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass) { const ASN1_TEMPLATE *tt = NULL; int i, seqcontlen, seqlen, ndef = 1; const ASN1_EXTERN_FUNCS *ef; const ASN1_AUX *aux = it->funcs; | | | 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass) { const ASN1_TEMPLATE *tt = NULL; int i, seqcontlen, seqlen, ndef = 1; const ASN1_EXTERN_FUNCS *ef; const ASN1_AUX *aux = it->funcs; ASN1_aux_cb *asn1_cb = NULL; if ((it->itype != ASN1_ITYPE_PRIMITIVE) && !*pval) return 0; if (aux && aux->asn1_cb) asn1_cb = aux->asn1_cb; |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/tasn_prn.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: tasn_prn.c,v 1.13 2015/02/14 15:15:27 miod Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2000. */ /* ==================================================================== * Copyright (c) 2000,2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
210 211 212 213 214 215 216 | if (aux && aux->asn1_cb) { parg.out = out; parg.indent = indent; parg.pctx = pctx; asn1_cb = aux->asn1_cb; } else | | | 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 | if (aux && aux->asn1_cb) { parg.out = out; parg.indent = indent; parg.pctx = pctx; asn1_cb = aux->asn1_cb; } else asn1_cb = NULL; if (*fld == NULL) { if (pctx->flags & ASN1_PCTX_FLAGS_SHOW_ABSENT) { if (!nohdr && !asn1_print_fsname(out, indent, fname, sname, pctx)) return 0; if (BIO_puts(out, "<ABSENT>\n") <= 0) |
︙ | ︙ |
Changes to jni/libressl/crypto/asn1/x_info.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: x_info.c,v 1.15 2015/02/10 11:22:21 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
93 94 95 96 97 98 99 | if (x == NULL) return; i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_X509_INFO); if (i > 0) return; | < | | 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | if (x == NULL) return; i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_X509_INFO); if (i > 0) return; X509_free(x->x509); if (x->crl != NULL) X509_CRL_free(x->crl); if (x->x_pkey != NULL) X509_PKEY_free(x->x_pkey); free(x->enc_data); free(x); } |
Changes to jni/libressl/crypto/asn1/x_pkey.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: x_pkey.c,v 1.18 2015/07/27 12:53:56 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
74 75 76 77 78 79 80 | goto err; } ret->version = 0; if ((ret->enc_algor = X509_ALGOR_new()) == NULL) { ASN1err(ASN1_F_X509_PKEY_NEW, ERR_R_MALLOC_FAILURE); goto err; } | | | 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | goto err; } ret->version = 0; if ((ret->enc_algor = X509_ALGOR_new()) == NULL) { ASN1err(ASN1_F_X509_PKEY_NEW, ERR_R_MALLOC_FAILURE); goto err; } if ((ret->enc_pkey = ASN1_OCTET_STRING_new()) == NULL) { ASN1err(ASN1_F_X509_PKEY_NEW, ERR_R_MALLOC_FAILURE); goto err; } ret->dec_pkey = NULL; ret->key_length = 0; ret->key_data = NULL; ret->key_free = 0; |
︙ | ︙ | |||
109 110 111 112 113 114 115 | i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_X509_PKEY); if (i > 0) return; if (x->enc_algor != NULL) X509_ALGOR_free(x->enc_algor); | | | 109 110 111 112 113 114 115 116 117 118 119 120 121 | i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_X509_PKEY); if (i > 0) return; if (x->enc_algor != NULL) X509_ALGOR_free(x->enc_algor); ASN1_OCTET_STRING_free(x->enc_pkey); EVP_PKEY_free(x->dec_pkey); if ((x->key_data != NULL) && (x->key_free)) free(x->key_data); free(x); } |
Changes to jni/libressl/crypto/bio/bss_bio.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bss_bio.c,v 1.21 2015/10/30 15:45:57 miod Exp $ */ /* ==================================================================== * Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * |
︙ | ︙ | |||
74 75 76 77 78 79 80 81 82 83 84 85 86 87 | # endif #endif #include <assert.h> #include <limits.h> #include <stdlib.h> #include <string.h> #include <openssl/bio.h> #include <openssl/err.h> #include <openssl/crypto.h> static int bio_new(BIO *bio); static int bio_free(BIO *bio); | > | 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | # endif #endif #include <assert.h> #include <limits.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <openssl/bio.h> #include <openssl/err.h> #include <openssl/crypto.h> static int bio_new(BIO *bio); static int bio_free(BIO *bio); |
︙ | ︙ | |||
495 496 497 498 499 500 501 | } else if (num == 0) { BIOerr(BIO_F_BIO_CTRL, BIO_R_INVALID_ARGUMENT); ret = 0; } else { size_t new_size = num; if (b->size != new_size) { | < | | < | 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 | } else if (num == 0) { BIOerr(BIO_F_BIO_CTRL, BIO_R_INVALID_ARGUMENT); ret = 0; } else { size_t new_size = num; if (b->size != new_size) { free(b->buf); b->buf = NULL; b->size = new_size; } ret = 1; } break; case BIO_C_GET_WRITE_BUF_SIZE: |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/bn_err.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bn_err.c,v 1.12 2014/07/10 22:45:56 jsing Exp $ */ /* ==================================================================== * Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * |
︙ | ︙ | |||
85 86 87 88 89 90 91 92 93 94 95 96 97 98 | {ERR_FUNC(BN_F_BN_CTX_START), "BN_CTX_start"}, {ERR_FUNC(BN_F_BN_DIV), "BN_div"}, {ERR_FUNC(BN_F_BN_DIV_NO_BRANCH), "BN_div_no_branch"}, {ERR_FUNC(BN_F_BN_DIV_RECP), "BN_div_recp"}, {ERR_FUNC(BN_F_BN_EXP), "BN_exp"}, {ERR_FUNC(BN_F_BN_EXPAND2), "bn_expand2"}, {ERR_FUNC(BN_F_BN_EXPAND_INTERNAL), "BN_EXPAND_INTERNAL"}, {ERR_FUNC(BN_F_BN_GF2M_MOD), "BN_GF2m_mod"}, {ERR_FUNC(BN_F_BN_GF2M_MOD_EXP), "BN_GF2m_mod_exp"}, {ERR_FUNC(BN_F_BN_GF2M_MOD_MUL), "BN_GF2m_mod_mul"}, {ERR_FUNC(BN_F_BN_GF2M_MOD_SOLVE_QUAD), "BN_GF2m_mod_solve_quad"}, {ERR_FUNC(BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR), "BN_GF2m_mod_solve_quad_arr"}, {ERR_FUNC(BN_F_BN_GF2M_MOD_SQR), "BN_GF2m_mod_sqr"}, {ERR_FUNC(BN_F_BN_GF2M_MOD_SQRT), "BN_GF2m_mod_sqrt"}, | > | 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | {ERR_FUNC(BN_F_BN_CTX_START), "BN_CTX_start"}, {ERR_FUNC(BN_F_BN_DIV), "BN_div"}, {ERR_FUNC(BN_F_BN_DIV_NO_BRANCH), "BN_div_no_branch"}, {ERR_FUNC(BN_F_BN_DIV_RECP), "BN_div_recp"}, {ERR_FUNC(BN_F_BN_EXP), "BN_exp"}, {ERR_FUNC(BN_F_BN_EXPAND2), "bn_expand2"}, {ERR_FUNC(BN_F_BN_EXPAND_INTERNAL), "BN_EXPAND_INTERNAL"}, {ERR_FUNC(BN_F_BN_GENERATE_PRIME_EX), "BN_generate_prime_ex"}, {ERR_FUNC(BN_F_BN_GF2M_MOD), "BN_GF2m_mod"}, {ERR_FUNC(BN_F_BN_GF2M_MOD_EXP), "BN_GF2m_mod_exp"}, {ERR_FUNC(BN_F_BN_GF2M_MOD_MUL), "BN_GF2m_mod_mul"}, {ERR_FUNC(BN_F_BN_GF2M_MOD_SOLVE_QUAD), "BN_GF2m_mod_solve_quad"}, {ERR_FUNC(BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR), "BN_GF2m_mod_solve_quad_arr"}, {ERR_FUNC(BN_F_BN_GF2M_MOD_SQR), "BN_GF2m_mod_sqr"}, {ERR_FUNC(BN_F_BN_GF2M_MOD_SQRT), "BN_GF2m_mod_sqrt"}, |
︙ | ︙ | |||
115 116 117 118 119 120 121 122 123 124 125 126 127 128 | {0, NULL} }; static ERR_STRING_DATA BN_str_reasons[]= { {ERR_REASON(BN_R_ARG2_LT_ARG3) , "arg2 lt arg3"}, {ERR_REASON(BN_R_BAD_RECIPROCAL) , "bad reciprocal"}, {ERR_REASON(BN_R_BIGNUM_TOO_LONG) , "bignum too long"}, {ERR_REASON(BN_R_CALLED_WITH_EVEN_MODULUS), "called with even modulus"}, {ERR_REASON(BN_R_DIV_BY_ZERO) , "div by zero"}, {ERR_REASON(BN_R_ENCODING_ERROR) , "encoding error"}, {ERR_REASON(BN_R_EXPAND_ON_STATIC_BIGNUM_DATA), "expand on static bignum data"}, {ERR_REASON(BN_R_INPUT_NOT_REDUCED) , "input not reduced"}, {ERR_REASON(BN_R_INVALID_LENGTH) , "invalid length"}, {ERR_REASON(BN_R_INVALID_RANGE) , "invalid range"}, | > | 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | {0, NULL} }; static ERR_STRING_DATA BN_str_reasons[]= { {ERR_REASON(BN_R_ARG2_LT_ARG3) , "arg2 lt arg3"}, {ERR_REASON(BN_R_BAD_RECIPROCAL) , "bad reciprocal"}, {ERR_REASON(BN_R_BIGNUM_TOO_LONG) , "bignum too long"}, {ERR_REASON(BN_R_BITS_TOO_SMALL) , "bits too small"}, {ERR_REASON(BN_R_CALLED_WITH_EVEN_MODULUS), "called with even modulus"}, {ERR_REASON(BN_R_DIV_BY_ZERO) , "div by zero"}, {ERR_REASON(BN_R_ENCODING_ERROR) , "encoding error"}, {ERR_REASON(BN_R_EXPAND_ON_STATIC_BIGNUM_DATA), "expand on static bignum data"}, {ERR_REASON(BN_R_INPUT_NOT_REDUCED) , "input not reduced"}, {ERR_REASON(BN_R_INVALID_LENGTH) , "invalid length"}, {ERR_REASON(BN_R_INVALID_RANGE) , "invalid range"}, |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/bn_exp.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bn_exp.c,v 1.22 2015/03/21 08:05:20 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
821 822 823 824 825 826 827 | goto err; ret = 1; err: if ((in_mont == NULL) && (mont != NULL)) BN_MONT_CTX_free(mont); if (powerbuf != NULL) { | | | 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 | goto err; ret = 1; err: if ((in_mont == NULL) && (mont != NULL)) BN_MONT_CTX_free(mont); if (powerbuf != NULL) { explicit_bzero(powerbuf, powerbufLen); free(powerbufFree); } BN_CTX_end(ctx); return (ret); } int |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/bn_gf2m.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bn_gf2m.c,v 1.20 2015/06/11 15:55:28 jsing Exp $ */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * * The Elliptic Curve Public-Key Crypto Library (ECC Code) included * herein is developed by SUN MICROSYSTEMS, INC., and is contributed * to the OpenSSL project. * |
︙ | ︙ | |||
701 702 703 704 705 706 707 | #else { int i, ubits = BN_num_bits(u), vbits = BN_num_bits(v), /* v is copy of p */ top = p->top; BN_ULONG *udp, *bdp, *vdp, *cdp; | | > | > | > | 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 | #else { int i, ubits = BN_num_bits(u), vbits = BN_num_bits(v), /* v is copy of p */ top = p->top; BN_ULONG *udp, *bdp, *vdp, *cdp; if (!bn_wexpand(u, top)) goto err; udp = u->d; for (i = u->top; i < top; i++) udp[i] = 0; u->top = top; if (!bn_wexpand(b, top)) goto err; bdp = b->d; bdp[0] = 1; for (i = 1; i < top; i++) bdp[i] = 0; b->top = top; if (!bn_wexpand(c, top)) goto err; cdp = c->d; for (i = 0; i < top; i++) cdp[i] = 0; c->top = top; vdp = v->d; /* It pays off to "cache" *->d pointers, because * it allows optimizer to be more aggressive. * But we don't have to "cache" p->d, because *p |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/bn_lcl.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bn_lcl.h,v 1.21 2014/10/28 07:35:58 jsg Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
255 256 257 258 259 260 261 | asm ("mulq %3" \ : "=a"(low),"=d"(high) \ : "a"(a),"g"(b) \ : "cc"); # endif # elif defined(__mips) && defined(_LP64) # if defined(__GNUC__) && __GNUC__>=2 | | | 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 | asm ("mulq %3" \ : "=a"(low),"=d"(high) \ : "a"(a),"g"(b) \ : "cc"); # endif # elif defined(__mips) && defined(_LP64) # if defined(__GNUC__) && __GNUC__>=2 # if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) /* "h" constraint is no more since 4.4 */ # define BN_UMULT_HIGH(a,b) (((__uint128_t)(a)*(b))>>64) # define BN_UMULT_LOHI(low,high,a,b) ({ \ __uint128_t ret=(__uint128_t)(a)*(b); \ (high)=ret>>64; (low)=ret; }) # else # define BN_UMULT_HIGH(a,b) ({ \ BN_ULONG ret; \ |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/bn_lib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bn_lib.c,v 1.35 2016/03/04 16:23:30 deraadt Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
220 221 222 223 224 225 226 | { int i; if (a == NULL) return; bn_check_top(a); if (a->d != NULL && !(BN_get_flags(a, BN_FLG_STATIC_DATA))) { | | | | 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 | { int i; if (a == NULL) return; bn_check_top(a); if (a->d != NULL && !(BN_get_flags(a, BN_FLG_STATIC_DATA))) { explicit_bzero(a->d, a->dmax * sizeof(a->d[0])); free(a->d); } i = BN_get_flags(a, BN_FLG_MALLOCED); explicit_bzero(a, sizeof(BIGNUM)); if (i) free(a); } void BN_free(BIGNUM *a) { |
︙ | ︙ | |||
294 295 296 297 298 299 300 | /* Check if the previous number needs to be copied */ if (B != NULL) { for (i = b->top >> 2; i > 0; i--, A += 4, B += 4) { /* * The fact that the loop is unrolled * 4-wise is a tribute to Intel. It's * the one that doesn't have enough | | | 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 | /* Check if the previous number needs to be copied */ if (B != NULL) { for (i = b->top >> 2; i > 0; i--, A += 4, B += 4) { /* * The fact that the loop is unrolled * 4-wise is a tribute to Intel. It's * the one that doesn't have enough * registers to accommodate more data. * I'd unroll it 8-wise otherwise:-) * * <appro@fy.chalmers.se> */ BN_ULONG a0, a1, a2, a3; a0 = B[0]; a1 = B[1]; |
︙ | ︙ | |||
394 395 396 397 398 399 400 | bn_check_top(b); if (words > b->dmax) { BN_ULONG *a = bn_expand_internal(b, words); if (!a) return NULL; if (b->d) { | | | 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 | bn_check_top(b); if (words > b->dmax) { BN_ULONG *a = bn_expand_internal(b, words); if (!a) return NULL; if (b->d) { explicit_bzero(b->d, b->dmax * sizeof(b->d[0])); free(b->d); } b->d = a; b->dmax = words; } /* None of this should be necessary because of what b->top means! */ |
︙ | ︙ | |||
548 549 550 551 552 553 554 555 556 557 558 559 560 561 | if (a->top > 1) return BN_MASK2; else if (a->top == 1) return a->d[0]; /* a->top == 0 */ return 0; } int BN_set_word(BIGNUM *a, BN_ULONG w) { bn_check_top(a); if (bn_expand(a, (int)sizeof(BN_ULONG) * 8) == NULL) return (0); | > > > > > > > > > > > > | 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 | if (a->top > 1) return BN_MASK2; else if (a->top == 1) return a->d[0]; /* a->top == 0 */ return 0; } BIGNUM * bn_expand(BIGNUM *a, int bits) { if (bits > (INT_MAX - BN_BITS2 + 1)) return (NULL); if (((bits + BN_BITS2 - 1) / BN_BITS2) <= a->dmax) return (a); return bn_expand2(a, (bits + BN_BITS2 - 1) / BN_BITS2); } int BN_set_word(BIGNUM *a, BN_ULONG w) { bn_check_top(a); if (bn_expand(a, (int)sizeof(BN_ULONG) * 8) == NULL) return (0); |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/bn_nist.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bn_nist.c,v 1.17 2016/07/17 22:01:01 bcook Exp $ */ /* * Written by Nils Larsch for the OpenSSL project */ /* ==================================================================== * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
55 56 57 58 59 60 61 62 63 64 65 66 67 68 | * Hudson (tjh@cryptsoft.com). * */ #include <machine/endian.h> #include <stdint.h> #include "bn_lcl.h" #define BN_NIST_192_TOP (192+BN_BITS2-1)/BN_BITS2 #define BN_NIST_224_TOP (224+BN_BITS2-1)/BN_BITS2 #define BN_NIST_256_TOP (256+BN_BITS2-1)/BN_BITS2 #define BN_NIST_384_TOP (384+BN_BITS2-1)/BN_BITS2 | > | 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | * Hudson (tjh@cryptsoft.com). * */ #include <machine/endian.h> #include <stdint.h> #include <string.h> #include "bn_lcl.h" #define BN_NIST_192_TOP (192+BN_BITS2-1)/BN_BITS2 #define BN_NIST_224_TOP (224+BN_BITS2-1)/BN_BITS2 #define BN_NIST_256_TOP (256+BN_BITS2-1)/BN_BITS2 #define BN_NIST_384_TOP (384+BN_BITS2-1)/BN_BITS2 |
︙ | ︙ | |||
506 507 508 509 510 511 512 | acc += bp[5 * 2 - 5]; rp[5] = (unsigned int)acc; carry = (int)(acc >> 32); } #else { | | | 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 | acc += bp[5 * 2 - 5]; rp[5] = (unsigned int)acc; carry = (int)(acc >> 32); } #else { BN_ULONG t_d[BN_NIST_192_TOP] = {0}; nist_set_192(t_d, buf.bn, 0, 3, 3); carry = (int)bn_add_words(r_d, r_d, t_d, BN_NIST_192_TOP); nist_set_192(t_d, buf.bn, 4, 4, 0); carry += (int)bn_add_words(r_d, r_d, t_d, BN_NIST_192_TOP); nist_set_192(t_d, buf.bn, 5, 5, 5) carry += (int)bn_add_words(r_d, r_d, t_d, BN_NIST_192_TOP); |
︙ | ︙ | |||
599 600 601 602 603 604 605 606 607 608 609 610 611 612 | if (!bn_wexpand(r, BN_NIST_224_TOP)) return 0; r_d = r->d; nist_cp_bn(r_d, a_d, BN_NIST_224_TOP); } else r_d = a_d; #if BN_BITS2==64 /* copy upper 256 bits of 448 bit number ... */ nist_cp_bn_0(c_d, a_d + (BN_NIST_224_TOP - 1), top - (BN_NIST_224_TOP - 1), BN_NIST_224_TOP); /* ... and right shift by 32 to obtain upper 224 bits */ nist_set_224(buf.bn, c_d, 14, 13, 12, 11, 10, 9, 8); /* truncate lower part to 224 bits too */ | > > | 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 | if (!bn_wexpand(r, BN_NIST_224_TOP)) return 0; r_d = r->d; nist_cp_bn(r_d, a_d, BN_NIST_224_TOP); } else r_d = a_d; memset(&buf, 0, sizeof(buf)); #if BN_BITS2==64 /* copy upper 256 bits of 448 bit number ... */ nist_cp_bn_0(c_d, a_d + (BN_NIST_224_TOP - 1), top - (BN_NIST_224_TOP - 1), BN_NIST_224_TOP); /* ... and right shift by 32 to obtain upper 224 bits */ nist_set_224(buf.bn, c_d, 14, 13, 12, 11, 10, 9, 8); /* truncate lower part to 224 bits too */ |
︙ | ︙ | |||
669 670 671 672 673 674 675 | carry = (int)(acc >> 32); # if BN_BITS2==64 rp[7] = carry; # endif } #else { | | | 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 | carry = (int)(acc >> 32); # if BN_BITS2==64 rp[7] = carry; # endif } #else { BN_ULONG t_d[BN_NIST_224_TOP] = {0}; nist_set_224(t_d, buf.bn, 10, 9, 8, 7, 0, 0, 0); carry = (int)bn_add_words(r_d, r_d, t_d, BN_NIST_224_TOP); nist_set_224(t_d, buf.bn, 0, 13, 12, 11, 0, 0, 0); carry += (int)bn_add_words(r_d, r_d, t_d, BN_NIST_224_TOP); nist_set_224(t_d, buf.bn, 13, 12, 11, 10, 9, 8, 7); carry -= (int)bn_sub_words(r_d, r_d, t_d, BN_NIST_224_TOP); |
︙ | ︙ | |||
742 743 744 745 746 747 748 | int carry = 0; BN_ULONG *a_d = a->d, *r_d; union { BN_ULONG bn[BN_NIST_256_TOP]; unsigned int ui[BN_NIST_256_TOP * sizeof(BN_ULONG) / sizeof(unsigned int)]; } buf; | | | 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 | int carry = 0; BN_ULONG *a_d = a->d, *r_d; union { BN_ULONG bn[BN_NIST_256_TOP]; unsigned int ui[BN_NIST_256_TOP * sizeof(BN_ULONG) / sizeof(unsigned int)]; } buf; BN_ULONG c_d[BN_NIST_256_TOP] = {0}, *res; uintptr_t mask; union { bn_addsub_f f; uintptr_t p; } u; static const BIGNUM _bignum_nist_p_256_sqr = { (BN_ULONG *)_nist_p_256_sqr, |
︙ | ︙ | |||
875 876 877 878 879 880 881 | acc -= bp[13 - 8]; rp[7] = (unsigned int)acc; carry = (int)(acc >> 32); } #else { | | | 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 | acc -= bp[13 - 8]; rp[7] = (unsigned int)acc; carry = (int)(acc >> 32); } #else { BN_ULONG t_d[BN_NIST_256_TOP] = {0}; /*S1*/ nist_set_256(t_d, buf.bn, 15, 14, 13, 12, 11, 0, 0, 0); /*S2*/ nist_set_256(c_d, buf.bn, 0, 15, 14, 13, 12, 0, 0, 0); carry = (int)bn_add_words(t_d, t_d, c_d, BN_NIST_256_TOP); /* left shift */ |
︙ | ︙ | |||
1129 1130 1131 1132 1133 1134 1135 | acc -= bp[22 - 12]; rp[11] = (unsigned int)acc; carry = (int)(acc >> 32); } #else { | | | 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 | acc -= bp[22 - 12]; rp[11] = (unsigned int)acc; carry = (int)(acc >> 32); } #else { BN_ULONG t_d[BN_NIST_384_TOP] = {0}; /*S1*/ nist_set_256(t_d, buf.bn, 0, 0, 0, 0, 0, 23 - 4, 22 - 4, 21 - 4); /* left shift */ { BN_ULONG *ap, t, c; |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/bn_prime.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bn_prime.c,v 1.14 2015/10/21 19:02:22 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
108 109 110 111 112 113 114 115 116 117 118 119 120 121 | * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <time.h> #include "bn_lcl.h" /* NB: these functions have been "upgraded", the deprecated versions (which are * compatibility wrappers using these functions) are in bn_depr.c. * - Geoff */ | > > | 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <time.h> #include <openssl/err.h> #include "bn_lcl.h" /* NB: these functions have been "upgraded", the deprecated versions (which are * compatibility wrappers using these functions) are in bn_depr.c. * - Geoff */ |
︙ | ︙ | |||
160 161 162 163 164 165 166 | BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, const BIGNUM *rem, BN_GENCB *cb) { BIGNUM *t; int found = 0; int i, j, c1 = 0; BN_CTX *ctx; | | > > > > > > > > > > > > | 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 | BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, const BIGNUM *rem, BN_GENCB *cb) { BIGNUM *t; int found = 0; int i, j, c1 = 0; BN_CTX *ctx; int checks; if (bits < 2 || (bits == 2 && safe)) { /* * There are no prime numbers smaller than 2, and the smallest * safe prime (7) spans three bits. */ BNerr(BN_F_BN_GENERATE_PRIME_EX, BN_R_BITS_TOO_SMALL); return 0; } ctx = BN_CTX_new(); if (ctx == NULL) goto err; BN_CTX_start(ctx); if ((t = BN_CTX_get(ctx)) == NULL) goto err; checks = BN_prime_checks_for_size(bits); loop: /* make a random number and set the top and bottom bits */ if (add == NULL) { if (!probable_prime(ret, bits)) goto err; } else { if (safe) { |
︙ | ︙ | |||
259 260 261 262 263 264 265 | checks = BN_prime_checks_for_size(BN_num_bits(a)); /* first look for small factors */ if (!BN_is_odd(a)) /* a is even => a is prime if and only if a == 2 */ return BN_is_word(a, 2); if (do_trial_division) { | | | > > > > | 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 | checks = BN_prime_checks_for_size(BN_num_bits(a)); /* first look for small factors */ if (!BN_is_odd(a)) /* a is even => a is prime if and only if a == 2 */ return BN_is_word(a, 2); if (do_trial_division) { for (i = 1; i < NUMPRIMES; i++) { BN_ULONG mod = BN_mod_word(a, primes[i]); if (mod == (BN_ULONG)-1) goto err; if (mod == 0) return 0; } if (!BN_GENCB_call(cb, 1, -1)) goto err; } if (ctx_passed != NULL) ctx = ctx_passed; else if ((ctx = BN_CTX_new()) == NULL) |
︙ | ︙ | |||
380 381 382 383 384 385 386 | prime_t mods[NUMPRIMES]; BN_ULONG delta, maxdelta; again: if (!BN_rand(rnd, bits, 1, 1)) return (0); /* we now have a random number 'rand' to test. */ | | > > > | > | 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 | prime_t mods[NUMPRIMES]; BN_ULONG delta, maxdelta; again: if (!BN_rand(rnd, bits, 1, 1)) return (0); /* we now have a random number 'rand' to test. */ for (i = 1; i < NUMPRIMES; i++) { BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]); if (mod == (BN_ULONG)-1) return (0); mods[i] = (prime_t)mod; } maxdelta = BN_MASK2 - primes[NUMPRIMES - 1]; delta = 0; loop: for (i = 1; i < NUMPRIMES; i++) { /* check that rnd is not a prime and also * that gcd(rnd-1,primes) == 1 (except for 2) */ if (((mods[i] + delta) % primes[i]) <= 1) { |
︙ | ︙ | |||
434 435 436 437 438 439 440 | } /* we now have a random number 'rand' to test. */ loop: for (i = 1; i < NUMPRIMES; i++) { /* check that rnd is a prime */ | | > > > | 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 | } /* we now have a random number 'rand' to test. */ loop: for (i = 1; i < NUMPRIMES; i++) { /* check that rnd is a prime */ BN_LONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]); if (mod == (BN_ULONG)-1) goto err; if (mod <= 1) { if (!BN_add(rnd, rnd, add)) goto err; goto loop; } } ret = 1; |
︙ | ︙ | |||
496 497 498 499 500 501 502 | goto err; loop: for (i = 1; i < NUMPRIMES; i++) { /* check that p and q are prime */ /* check that for p and q * gcd(p-1,primes) == 1 (except for 2) */ | | | > > > | 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 | goto err; loop: for (i = 1; i < NUMPRIMES; i++) { /* check that p and q are prime */ /* check that for p and q * gcd(p-1,primes) == 1 (except for 2) */ BN_ULONG pmod = BN_mod_word(p, (BN_ULONG)primes[i]); BN_ULONG qmod = BN_mod_word(q, (BN_ULONG)primes[i]); if (pmod == (BN_ULONG)-1 || qmod == (BN_ULONG)-1) goto err; if (pmod == 0 || qmod == 0) { if (!BN_add(p, p, padd)) goto err; if (!BN_add(q, q, qadd)) goto err; goto loop; } } |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/bn_print.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bn_print.c,v 1.28 2015/09/28 18:58:33 deraadt Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
53 54 55 56 57 58 59 60 61 62 63 64 65 66 | * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <ctype.h> #include <stdio.h> #ifndef HAVE_REALLOCARRAY #include <compat/stdlib.h> #endif #include <openssl/opensslconf.h> | > | 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <ctype.h> #include <limits.h> #include <stdio.h> #ifndef HAVE_REALLOCARRAY #include <compat/stdlib.h> #endif #include <openssl/opensslconf.h> |
︙ | ︙ | |||
76 77 78 79 80 81 82 | char * BN_bn2hex(const BIGNUM *a) { int i, j, v, z = 0; char *buf; char *p; | | | | | | | > > > > > > > > > > > > > > < < < < | | | | | | | | | | | | | | | | | | | < | 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | char * BN_bn2hex(const BIGNUM *a) { int i, j, v, z = 0; char *buf; char *p; buf = malloc(BN_is_negative(a) + a->top * BN_BYTES * 2 + 2); if (buf == NULL) { BNerr(BN_F_BN_BN2HEX, ERR_R_MALLOC_FAILURE); goto err; } p = buf; if (BN_is_negative(a)) *p++ = '-'; if (BN_is_zero(a)) *p++ = '0'; for (i = a->top - 1; i >=0; i--) { for (j = BN_BITS2 - 8; j >= 0; j -= 8) { /* strip leading zeros */ v = ((int)(a->d[i] >> (long)j)) & 0xff; if (z || (v != 0)) { *p++ = Hex[v >> 4]; *p++ = Hex[v & 0x0f]; z = 1; } } } *p = '\0'; err: return (buf); } /* Must 'free' the returned data */ char * BN_bn2dec(const BIGNUM *a) { int i = 0, num, ok = 0; char *buf = NULL; char *p; BIGNUM *t = NULL; BN_ULONG *bn_data = NULL, *lp; if (BN_is_zero(a)) { buf = malloc(BN_is_negative(a) + 2); if (buf == NULL) { BNerr(BN_F_BN_BN2DEC, ERR_R_MALLOC_FAILURE); goto err; } p = buf; if (BN_is_negative(a)) *p++ = '-'; *p++ = '0'; *p++ = '\0'; return (buf); } /* get an upper bound for the length of the decimal integer * num <= (BN_num_bits(a) + 1) * log(2) * <= 3 * BN_num_bits(a) * 0.1001 + log(2) + 1 (rounding error) * <= BN_num_bits(a)/10 + BN_num_bits/1000 + 1 + 1 */ i = BN_num_bits(a) * 3; num = (i / 10 + i / 1000 + 1) + 1; bn_data = reallocarray(NULL, num / BN_DEC_NUM + 1, sizeof(BN_ULONG)); buf = malloc(num + 3); if ((buf == NULL) || (bn_data == NULL)) { BNerr(BN_F_BN_BN2DEC, ERR_R_MALLOC_FAILURE); goto err; } if ((t = BN_dup(a)) == NULL) goto err; #define BUF_REMAIN (num+3 - (size_t)(p - buf)) p = buf; lp = bn_data; if (BN_is_negative(t)) *p++ = '-'; i = 0; while (!BN_is_zero(t)) { *lp = BN_div_word(t, BN_DEC_CONV); lp++; } lp--; /* We now have a series of blocks, BN_DEC_NUM chars * in length, where the last one needs truncation. * The blocks need to be reversed in order. */ snprintf(p, BUF_REMAIN, BN_DEC_FMT1, *lp); while (*p) p++; while (lp != bn_data) { lp--; snprintf(p, BUF_REMAIN, BN_DEC_FMT2, *lp); while (*p) p++; } ok = 1; err: free(bn_data); BN_free(t); if (!ok && buf) { |
︙ | ︙ | |||
187 188 189 190 191 192 193 | return (0); if (*a == '-') { neg = 1; a++; } | | > > | | 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 | return (0); if (*a == '-') { neg = 1; a++; } for (i = 0; i <= (INT_MAX / 4) && isxdigit((unsigned char)a[i]); i++) ; if (i > INT_MAX / 4) goto err; num = i + neg; if (bn == NULL) return (num); /* a is the start of the hex digits, and it is 'i' long */ if (*bn == NULL) { if ((ret = BN_new()) == NULL) return (0); } else { ret= *bn; BN_zero(ret); } /* i is the number of hex digits */ if (bn_expand(ret, i * 4) == NULL) goto err; j = i; /* least significant 'hex' */ m = 0; h = 0; while (j > 0) { |
︙ | ︙ | |||
261 262 263 264 265 266 267 | if ((a == NULL) || (*a == '\0')) return (0); if (*a == '-') { neg = 1; a++; } | | > > | | 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 | if ((a == NULL) || (*a == '\0')) return (0); if (*a == '-') { neg = 1; a++; } for (i = 0; i <= (INT_MAX / 4) && isdigit((unsigned char)a[i]); i++) ; if (i > INT_MAX / 4) goto err; num = i + neg; if (bn == NULL) return (num); /* a is the start of the digits, and it is 'i' long. * We chop it into BN_DEC_NUM digits at a time */ if (*bn == NULL) { if ((ret = BN_new()) == NULL) return (0); } else { ret = *bn; BN_zero(ret); } /* i is the number of digits, a bit of an over expand */ if (bn_expand(ret, i * 4) == NULL) goto err; j = BN_DEC_NUM - (i % BN_DEC_NUM); if (j == BN_DEC_NUM) j = 0; l = 0; |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/bn_rand.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bn_rand.c,v 1.17 2015/02/19 06:10:29 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
107 108 109 110 111 112 113 114 115 116 117 118 119 120 | * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <stdlib.h> #include <time.h> #include <openssl/err.h> #include "bn_lcl.h" static int | > | 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <openssl/err.h> #include "bn_lcl.h" static int |
︙ | ︙ | |||
182 183 184 185 186 187 188 | buf[bytes - 1] |= 1; if (BN_bin2bn(buf, bytes, rnd) == NULL) goto err; ret = 1; err: if (buf != NULL) { | | | 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 | buf[bytes - 1] |= 1; if (BN_bin2bn(buf, bytes, rnd) == NULL) goto err; ret = 1; err: if (buf != NULL) { explicit_bzero(buf, bytes); free(buf); } bn_check_top(rnd); return (ret); } int |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/bn_word.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bn_word.c,v 1.12 2014/07/11 08:44:48 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #else BN_ULLONG ret = 0; #endif int i; if (w == 0) return (BN_ULONG) - 1; bn_check_top(a); w &= BN_MASK2; for (i = a->top - 1; i >= 0; i--) { #ifndef BN_LLONG ret = ((ret << BN_BITS4) | ((a->d[i] >> BN_BITS4) & BN_MASK2l)) % w; | > > > > > > > > > > > > > > | 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | #else BN_ULLONG ret = 0; #endif int i; if (w == 0) return (BN_ULONG) - 1; #ifndef BN_ULLONG /* If |w| is too long and we don't have |BN_ULLONG| then we need to fall back * to using |BN_div_word|. */ if (w > ((BN_ULONG)1 << BN_BITS4)) { BIGNUM *tmp = BN_dup(a); if (tmp == NULL) { return (BN_ULONG)-1; } ret = BN_div_word(tmp, w); BN_free(tmp); return ret; } #endif bn_check_top(a); w &= BN_MASK2; for (i = a->top - 1; i >= 0; i--) { #ifndef BN_LLONG ret = ((ret << BN_BITS4) | ((a->d[i] >> BN_BITS4) & BN_MASK2l)) % w; |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/gf2m-elf-x86_64.s.
︙ | ︙ | |||
179 180 181 182 183 184 185 | xorq %rbx,%rdx andq %rbp,%rsi shrq $4,%rbp pxor %xmm1,%xmm0 movq (%rsp,%rdi,8),%rcx movq %rcx,%rbx shlq $60,%rcx | | | | | | | | | | | 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | xorq %rbx,%rdx andq %rbp,%rsi shrq $4,%rbp pxor %xmm1,%xmm0 movq (%rsp,%rdi,8),%rcx movq %rcx,%rbx shlq $60,%rcx movd %xmm0,%rsi shrq $4,%rbx xorq %rcx,%rax psrldq $8,%xmm0 xorq %rbx,%rdx movd %xmm0,%rdi xorq %rsi,%rax xorq %rdi,%rdx addq $128+8,%rsp .byte 0xf3,0xc3 .Lend_mul_1x1: .size _mul_1x1,.-_mul_1x1 .globl bn_GF2m_mul_2x2 .type bn_GF2m_mul_2x2,@function .align 16 bn_GF2m_mul_2x2: movq OPENSSL_ia32cap_P(%rip),%rax btq $33,%rax jnc .Lvanilla_mul_2x2 movd %rsi,%xmm0 movd %rcx,%xmm1 movd %rdx,%xmm2 movd %r8,%xmm3 movdqa %xmm0,%xmm4 movdqa %xmm1,%xmm5 .byte 102,15,58,68,193,0 pxor %xmm2,%xmm4 pxor %xmm3,%xmm5 .byte 102,15,58,68,211,0 .byte 102,15,58,68,229,0 xorps %xmm0,%xmm4 xorps %xmm2,%xmm4 movdqa %xmm4,%xmm5 pslldq $8,%xmm4 psrldq $8,%xmm5 pxor %xmm4,%xmm2 pxor %xmm5,%xmm0 |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/gf2m-macosx-x86_64.s.
︙ | ︙ | |||
179 180 181 182 183 184 185 | xorq %rbx,%rdx andq %rbp,%rsi shrq $4,%rbp pxor %xmm1,%xmm0 movq (%rsp,%rdi,8),%rcx movq %rcx,%rbx shlq $60,%rcx | | | | | | | | | | | 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | xorq %rbx,%rdx andq %rbp,%rsi shrq $4,%rbp pxor %xmm1,%xmm0 movq (%rsp,%rdi,8),%rcx movq %rcx,%rbx shlq $60,%rcx movd %xmm0,%rsi shrq $4,%rbx xorq %rcx,%rax psrldq $8,%xmm0 xorq %rbx,%rdx movd %xmm0,%rdi xorq %rsi,%rax xorq %rdi,%rdx addq $128+8,%rsp .byte 0xf3,0xc3 L$end_mul_1x1: .globl _bn_GF2m_mul_2x2 .p2align 4 _bn_GF2m_mul_2x2: movq _OPENSSL_ia32cap_P(%rip),%rax btq $33,%rax jnc L$vanilla_mul_2x2 movd %rsi,%xmm0 movd %rcx,%xmm1 movd %rdx,%xmm2 movd %r8,%xmm3 movdqa %xmm0,%xmm4 movdqa %xmm1,%xmm5 .byte 102,15,58,68,193,0 pxor %xmm2,%xmm4 pxor %xmm3,%xmm5 .byte 102,15,58,68,211,0 .byte 102,15,58,68,229,0 xorps %xmm0,%xmm4 xorps %xmm2,%xmm4 movdqa %xmm4,%xmm5 pslldq $8,%xmm4 psrldq $8,%xmm5 pxor %xmm4,%xmm2 pxor %xmm5,%xmm0 |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/mont5-elf-x86_64.s.
︙ | ︙ | |||
50 51 52 53 54 55 56 | pand %xmm6,%xmm2 por %xmm1,%xmm0 pand %xmm7,%xmm3 por %xmm2,%xmm0 leaq 256(%r12),%r12 por %xmm3,%xmm0 | | | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | pand %xmm6,%xmm2 por %xmm1,%xmm0 pand %xmm7,%xmm3 por %xmm2,%xmm0 leaq 256(%r12),%r12 por %xmm3,%xmm0 movd %xmm0,%rbx movq (%r8),%r8 movq (%rsi),%rax xorq %r14,%r14 xorq %r15,%r15 |
︙ | ︙ | |||
113 114 115 116 117 118 119 | leaq 1(%r15),%r15 movq %rdx,%r10 mulq %rbp cmpq %r9,%r15 jl .L1st | | | 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | leaq 1(%r15),%r15 movq %rdx,%r10 mulq %rbp cmpq %r9,%r15 jl .L1st movd %xmm0,%rbx addq %rax,%r13 movq (%rsi),%rax adcq $0,%rdx addq %r11,%r13 adcq $0,%rdx movq %r13,-16(%rsp,%r15,8) |
︙ | ︙ | |||
196 197 198 199 200 201 202 | adcq $0,%r11 leaq 1(%r15),%r15 mulq %rbp cmpq %r9,%r15 jl .Linner | | | 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | adcq $0,%r11 leaq 1(%r15),%r15 mulq %rbp cmpq %r9,%r15 jl .Linner movd %xmm0,%rbx addq %rax,%r13 movq (%rsi),%rax adcq $0,%rdx addq %r10,%r13 movq (%rsp,%r15,8),%r10 adcq $0,%rdx |
︙ | ︙ | |||
308 309 310 311 312 313 314 | pand %xmm6,%xmm2 por %xmm1,%xmm0 pand %xmm7,%xmm3 por %xmm2,%xmm0 leaq 256(%r12),%r12 por %xmm3,%xmm0 | | | 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 | pand %xmm6,%xmm2 por %xmm1,%xmm0 pand %xmm7,%xmm3 por %xmm2,%xmm0 leaq 256(%r12),%r12 por %xmm3,%xmm0 movd %xmm0,%rbx movq (%r8),%r8 movq (%rsi),%rax xorq %r14,%r14 xorq %r15,%r15 movq -96(%r12),%xmm0 |
︙ | ︙ | |||
455 456 457 458 459 460 461 | movq (%rsi),%rax adcq $0,%rdx addq %r11,%rdi adcq $0,%rdx movq %rdi,-16(%rsp,%r15,8) movq %rdx,%r13 | | | 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 | movq (%rsi),%rax adcq $0,%rdx addq %r11,%rdi adcq $0,%rdx movq %rdi,-16(%rsp,%r15,8) movq %rdx,%r13 movd %xmm0,%rbx xorq %rdi,%rdi addq %r10,%r13 adcq $0,%rdi movq %r13,-8(%rsp,%r15,8) movq %rdi,(%rsp,%r15,8) |
︙ | ︙ | |||
623 624 625 626 627 628 629 | movq (%rsi),%rax adcq $0,%rdx addq %r11,%rdi adcq $0,%rdx movq %r13,-24(%rsp,%r15,8) movq %rdx,%r13 | | | 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 | movq (%rsi),%rax adcq $0,%rdx addq %r11,%rdi adcq $0,%rdx movq %r13,-24(%rsp,%r15,8) movq %rdx,%r13 movd %xmm0,%rbx movq %rdi,-16(%rsp,%r15,8) xorq %rdi,%rdi addq %r10,%r13 adcq $0,%rdi addq (%rsp,%r9,8),%r13 adcq $0,%rdi |
︙ | ︙ |
Changes to jni/libressl/crypto/bn/mont5-macosx-x86_64.s.
︙ | ︙ | |||
50 51 52 53 54 55 56 | pand %xmm6,%xmm2 por %xmm1,%xmm0 pand %xmm7,%xmm3 por %xmm2,%xmm0 leaq 256(%r12),%r12 por %xmm3,%xmm0 | | | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | pand %xmm6,%xmm2 por %xmm1,%xmm0 pand %xmm7,%xmm3 por %xmm2,%xmm0 leaq 256(%r12),%r12 por %xmm3,%xmm0 movd %xmm0,%rbx movq (%r8),%r8 movq (%rsi),%rax xorq %r14,%r14 xorq %r15,%r15 |
︙ | ︙ | |||
113 114 115 116 117 118 119 | leaq 1(%r15),%r15 movq %rdx,%r10 mulq %rbp cmpq %r9,%r15 jl L$1st | | | 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | leaq 1(%r15),%r15 movq %rdx,%r10 mulq %rbp cmpq %r9,%r15 jl L$1st movd %xmm0,%rbx addq %rax,%r13 movq (%rsi),%rax adcq $0,%rdx addq %r11,%r13 adcq $0,%rdx movq %r13,-16(%rsp,%r15,8) |
︙ | ︙ | |||
196 197 198 199 200 201 202 | adcq $0,%r11 leaq 1(%r15),%r15 mulq %rbp cmpq %r9,%r15 jl L$inner | | | 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | adcq $0,%r11 leaq 1(%r15),%r15 mulq %rbp cmpq %r9,%r15 jl L$inner movd %xmm0,%rbx addq %rax,%r13 movq (%rsi),%rax adcq $0,%rdx addq %r10,%r13 movq (%rsp,%r15,8),%r10 adcq $0,%rdx |
︙ | ︙ | |||
308 309 310 311 312 313 314 | pand %xmm6,%xmm2 por %xmm1,%xmm0 pand %xmm7,%xmm3 por %xmm2,%xmm0 leaq 256(%r12),%r12 por %xmm3,%xmm0 | | | 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 | pand %xmm6,%xmm2 por %xmm1,%xmm0 pand %xmm7,%xmm3 por %xmm2,%xmm0 leaq 256(%r12),%r12 por %xmm3,%xmm0 movd %xmm0,%rbx movq (%r8),%r8 movq (%rsi),%rax xorq %r14,%r14 xorq %r15,%r15 movq -96(%r12),%xmm0 |
︙ | ︙ | |||
455 456 457 458 459 460 461 | movq (%rsi),%rax adcq $0,%rdx addq %r11,%rdi adcq $0,%rdx movq %rdi,-16(%rsp,%r15,8) movq %rdx,%r13 | | | 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 | movq (%rsi),%rax adcq $0,%rdx addq %r11,%rdi adcq $0,%rdx movq %rdi,-16(%rsp,%r15,8) movq %rdx,%r13 movd %xmm0,%rbx xorq %rdi,%rdi addq %r10,%r13 adcq $0,%rdi movq %r13,-8(%rsp,%r15,8) movq %rdi,(%rsp,%r15,8) |
︙ | ︙ | |||
623 624 625 626 627 628 629 | movq (%rsi),%rax adcq $0,%rdx addq %r11,%rdi adcq $0,%rdx movq %r13,-24(%rsp,%r15,8) movq %rdx,%r13 | | | 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 | movq (%rsi),%rax adcq $0,%rdx addq %r11,%rdi adcq $0,%rdx movq %r13,-24(%rsp,%r15,8) movq %rdx,%r13 movd %xmm0,%rbx movq %rdi,-16(%rsp,%r15,8) xorq %rdi,%rdi addq %r10,%r13 adcq $0,%rdi addq (%rsp,%r9,8),%r13 adcq $0,%rdi |
︙ | ︙ |
Changes to jni/libressl/crypto/cast/cast_lcl.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: cast_lcl.h,v 1.10 2014/06/12 15:49:28 deraadt Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
140 141 142 143 144 145 146 147 148 149 150 151 152 153 | #undef l2n #define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24L)&0xff), \ *((c)++)=(unsigned char)(((l)>>16L)&0xff), \ *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \ *((c)++)=(unsigned char)(((l) )&0xff)) #define ROTL(a,n) ((((a)<<(n))&0xffffffffL)|((a)>>(32-(n)))) #define C_M 0x3fc #define C_0 22L #define C_1 14L #define C_2 6L #define C_3 2L /* left shift */ | > | 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | #undef l2n #define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24L)&0xff), \ *((c)++)=(unsigned char)(((l)>>16L)&0xff), \ *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \ *((c)++)=(unsigned char)(((l) )&0xff)) /* only invoked with 0 <= n <= 31 */ #define ROTL(a,n) ((((a)<<(n))&0xffffffffL)|((a)>>(32-(n)))) #define C_M 0x3fc #define C_0 22L #define C_1 14L #define C_2 6L #define C_3 2L /* left shift */ |
︙ | ︙ |
Changes to jni/libressl/crypto/chacha/chacha.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: chacha.c,v 1.6 2014/07/08 14:30:23 bcook Exp $ */ /* * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> * * 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. * |
︙ | ︙ | |||
53 54 55 56 57 58 59 | } chacha_encrypt_bytes((chacha_ctx *)ctx, in, out, (uint32_t)len); } void CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t len, | | | | 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | } chacha_encrypt_bytes((chacha_ctx *)ctx, in, out, (uint32_t)len); } void CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t len, const unsigned char key[32], const unsigned char iv[8], uint64_t counter) { struct chacha_ctx ctx; /* * chacha_ivsetup expects the counter to be in u8. Rather than * converting size_t to u8 and then back again, pass a counter of * NULL and manually assign it afterwards. */ chacha_keysetup(&ctx, key, 256); chacha_ivsetup(&ctx, iv, NULL); if (counter != 0) { ctx.input[12] = (uint32_t)counter; ctx.input[13] = (uint32_t)(counter >> 32); } chacha_encrypt_bytes(&ctx, in, out, (uint32_t)len); } |
Changes to jni/libressl/crypto/cmac/cmac.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: cmac.c,v 1.9 2014/07/12 14:58:32 miod Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project. */ /* ==================================================================== * Copyright (c) 2010 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
103 104 105 106 107 108 109 | return ctx; } void CMAC_CTX_cleanup(CMAC_CTX *ctx) { EVP_CIPHER_CTX_cleanup(&ctx->cctx); | | | | | | 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | return ctx; } void CMAC_CTX_cleanup(CMAC_CTX *ctx) { EVP_CIPHER_CTX_cleanup(&ctx->cctx); explicit_bzero(ctx->tbl, EVP_MAX_BLOCK_LENGTH); explicit_bzero(ctx->k1, EVP_MAX_BLOCK_LENGTH); explicit_bzero(ctx->k2, EVP_MAX_BLOCK_LENGTH); explicit_bzero(ctx->last_block, EVP_MAX_BLOCK_LENGTH); ctx->nlast_block = -1; } EVP_CIPHER_CTX * CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx) { return &ctx->cctx; |
︙ | ︙ | |||
179 180 181 182 183 184 185 | if (!EVP_EncryptInit_ex(&ctx->cctx, NULL, NULL, key, zero_iv)) return 0; bl = EVP_CIPHER_CTX_block_size(&ctx->cctx); if (!EVP_Cipher(&ctx->cctx, ctx->tbl, zero_iv, bl)) return 0; make_kn(ctx->k1, ctx->tbl, bl); make_kn(ctx->k2, ctx->k1, bl); | | | 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | if (!EVP_EncryptInit_ex(&ctx->cctx, NULL, NULL, key, zero_iv)) return 0; bl = EVP_CIPHER_CTX_block_size(&ctx->cctx); if (!EVP_Cipher(&ctx->cctx, ctx->tbl, zero_iv, bl)) return 0; make_kn(ctx->k1, ctx->tbl, bl); make_kn(ctx->k2, ctx->k1, bl); explicit_bzero(ctx->tbl, bl); /* Reset context again ready for first data block */ if (!EVP_EncryptInit_ex(&ctx->cctx, NULL, NULL, NULL, zero_iv)) return 0; /* Zero tbl so resume works */ memset(ctx->tbl, 0, bl); ctx->nlast_block = 0; } |
︙ | ︙ | |||
256 257 258 259 260 261 262 | ctx->last_block[lb] = 0x80; if (bl - lb > 1) memset(ctx->last_block + lb + 1, 0, bl - lb - 1); for (i = 0; i < bl; i++) out[i] = ctx->last_block[i] ^ ctx->k2[i]; } if (!EVP_Cipher(&ctx->cctx, out, out, bl)) { | | | 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | ctx->last_block[lb] = 0x80; if (bl - lb > 1) memset(ctx->last_block + lb + 1, 0, bl - lb - 1); for (i = 0; i < bl; i++) out[i] = ctx->last_block[i] ^ ctx->k2[i]; } if (!EVP_Cipher(&ctx->cctx, out, out, bl)) { explicit_bzero(out, bl); return 0; } return 1; } int CMAC_resume(CMAC_CTX *ctx) |
︙ | ︙ |
Changes to jni/libressl/crypto/comp/c_zlib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: c_zlib.c,v 1.17 2014/11/03 16:58:28 tedu Exp $ */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/objects.h> #include <openssl/comp.h> #include <openssl/err.h> |
︙ | ︙ | |||
520 521 522 523 524 525 526 | obs = (int) num; } else { ibs = (int)num; obs = ibs; } if (ibs != -1) { | < | | < < | | < | 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 | obs = (int) num; } else { ibs = (int)num; obs = ibs; } if (ibs != -1) { free(ctx->ibuf); ctx->ibuf = NULL; ctx->ibufsize = ibs; } if (obs != -1) { free(ctx->obuf); ctx->obuf = NULL; ctx->obufsize = obs; } ret = 1; break; case BIO_C_DO_STATE_MACHINE: BIO_clear_retry_flags(b); |
︙ | ︙ |
Changes to jni/libressl/crypto/compat/arc4random.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: arc4random.c,v 1.53 2015/09/10 18:53:50 bcook Exp $ */ /* * Copyright (c) 1996, David Mazieres <dm@uun.org> * Copyright (c) 2008, Damien Miller <djm@openbsd.org> * Copyright (c) 2013, Markus Friedl <markus@openbsd.org> * Copyright (c) 2014, Theo de Raadt <deraadt@openbsd.org> * |
︙ | ︙ | |||
32 33 34 35 36 37 38 | #include <unistd.h> #include <sys/types.h> #include <sys/time.h> #define KEYSTREAM_ONLY #include "chacha_private.h" | < | < | | | 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <unistd.h> #include <sys/types.h> #include <sys/time.h> #define KEYSTREAM_ONLY #include "chacha_private.h" #define minimum(a, b) ((a) < (b) ? (a) : (b)) #if defined(__GNUC__) || defined(_MSC_VER) #define inline __inline #else /* __GNUC__ || _MSC_VER */ #define inline #endif /* !__GNUC__ && !_MSC_VER */ #define KEYSZ 32 #define IVSZ 8 #define BLOCKSZ 64 #define RSBUFSZ (16*BLOCKSZ) /* Marked MAP_INHERIT_ZERO, so zero'd out in fork children. */ |
︙ | ︙ | |||
126 127 128 129 130 131 132 | /* fill rs_buf with the keystream */ chacha_encrypt_bytes(&rsx->rs_chacha, rsx->rs_buf, rsx->rs_buf, sizeof(rsx->rs_buf)); /* mix in optional user provided data */ if (dat) { size_t i, m; | | | | 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | /* fill rs_buf with the keystream */ chacha_encrypt_bytes(&rsx->rs_chacha, rsx->rs_buf, rsx->rs_buf, sizeof(rsx->rs_buf)); /* mix in optional user provided data */ if (dat) { size_t i, m; m = minimum(datlen, KEYSZ + IVSZ); for (i = 0; i < m; i++) rsx->rs_buf[i] ^= dat[i]; } /* immediately reinit for backtracking resistance */ _rs_init(rsx->rs_buf, KEYSZ + IVSZ); memset(rsx->rs_buf, 0, KEYSZ + IVSZ); rs->rs_have = sizeof(rsx->rs_buf) - KEYSZ - IVSZ; } static inline void _rs_random_buf(void *_buf, size_t n) { u_char *buf = (u_char *)_buf; u_char *keystream; size_t m; _rs_stir_if_needed(n); while (n > 0) { if (rs->rs_have > 0) { m = minimum(n, rs->rs_have); keystream = rsx->rs_buf + sizeof(rsx->rs_buf) - rs->rs_have; memcpy(buf, keystream, m); memset(keystream, 0, m); buf += m; n -= m; rs->rs_have -= m; |
︙ | ︙ |
Changes to jni/libressl/crypto/compat/arc4random_aix.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: arc4random_aix.h,v 1.1 2015/03/30 11:29:48 bcook Exp $ */ /* * Copyright (c) 1996, David Mazieres <dm@uun.org> * Copyright (c) 2008, Damien Miller <djm@openbsd.org> * Copyright (c) 2013, Markus Friedl <markus@openbsd.org> * Copyright (c) 2014, Theo de Raadt <deraadt@openbsd.org> * |
︙ | ︙ | |||
68 69 70 71 72 73 74 75 76 77 78 79 80 | if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) return (-1); if ((*rsxp = mmap(NULL, sizeof(**rsxp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) { munmap(*rsp, sizeof(**rsp)); return (-1); } _ARC4_ATFORK(_rs_forkhandler); return (0); } | > | 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) return (-1); if ((*rsxp = mmap(NULL, sizeof(**rsxp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) { munmap(*rsp, sizeof(**rsp)); *rsp = NULL; return (-1); } _ARC4_ATFORK(_rs_forkhandler); return (0); } |
Changes to jni/libressl/crypto/compat/arc4random_freebsd.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: arc4random_freebsd.h,v 1.3 2015/09/11 11:52:55 deraadt Exp $ */ /* * Copyright (c) 1996, David Mazieres <dm@uun.org> * Copyright (c) 2008, Damien Miller <djm@openbsd.org> * Copyright (c) 2013, Markus Friedl <markus@openbsd.org> * Copyright (c) 2014, Theo de Raadt <deraadt@openbsd.org> * |
︙ | ︙ | |||
69 70 71 72 73 74 75 | } static inline int _rs_allocate(struct _rs **rsp, struct _rsx **rsxp) { if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) | | > | | | 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | } static inline int _rs_allocate(struct _rs **rsp, struct _rsx **rsxp) { if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) return (-1); if ((*rsxp = mmap(NULL, sizeof(**rsxp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) { munmap(*rsp, sizeof(**rsp)); *rsp = NULL; return (-1); } _ARC4_ATFORK(_rs_forkhandler); return (0); } |
Changes to jni/libressl/crypto/compat/arc4random_hpux.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: arc4random_hpux.h,v 1.2 2015/01/15 06:57:18 deraadt Exp $ */ /* * Copyright (c) 1996, David Mazieres <dm@uun.org> * Copyright (c) 2008, Damien Miller <djm@openbsd.org> * Copyright (c) 2013, Markus Friedl <markus@openbsd.org> * Copyright (c) 2014, Theo de Raadt <deraadt@openbsd.org> * |
︙ | ︙ | |||
68 69 70 71 72 73 74 75 76 77 78 79 80 | if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) return (-1); if ((*rsxp = mmap(NULL, sizeof(**rsxp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) { munmap(*rsp, sizeof(**rsp)); return (-1); } _ARC4_ATFORK(_rs_forkhandler); return (0); } | > | 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) return (-1); if ((*rsxp = mmap(NULL, sizeof(**rsxp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) { munmap(*rsp, sizeof(**rsp)); *rsp = NULL; return (-1); } _ARC4_ATFORK(_rs_forkhandler); return (0); } |
Changes to jni/libressl/crypto/compat/arc4random_linux.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: arc4random_linux.h,v 1.10 2016/01/04 02:04:56 bcook Exp $ */ /* * Copyright (c) 1996, David Mazieres <dm@uun.org> * Copyright (c) 2008, Damien Miller <djm@openbsd.org> * Copyright (c) 2013, Markus Friedl <markus@openbsd.org> * Copyright (c) 2014, Theo de Raadt <deraadt@openbsd.org> * |
︙ | ︙ | |||
56 57 58 59 60 61 62 | static inline void _rs_forkdetect(void) { static pid_t _rs_pid = 0; pid_t pid = getpid(); | > | > | 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | static inline void _rs_forkdetect(void) { static pid_t _rs_pid = 0; pid_t pid = getpid(); /* XXX unusual calls to clone() can bypass checks */ if (_rs_pid == 0 || _rs_pid == 1 || _rs_pid != pid || _rs_forked) { _rs_pid = pid; _rs_forked = 0; if (rs) memset(rs, 0, sizeof(*rs)); } } static inline int _rs_allocate(struct _rs **rsp, struct _rsx **rsxp) { if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) return (-1); if ((*rsxp = mmap(NULL, sizeof(**rsxp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) { munmap(*rsp, sizeof(**rsp)); *rsp = NULL; return (-1); } _ARC4_ATFORK(_rs_forkhandler); return (0); } |
Changes to jni/libressl/crypto/compat/arc4random_netbsd.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: arc4random_netbsd.h,v 1.2 2015/09/11 11:52:55 deraadt Exp $ */ /* * Copyright (c) 1996, David Mazieres <dm@uun.org> * Copyright (c) 2008, Damien Miller <djm@openbsd.org> * Copyright (c) 2013, Markus Friedl <markus@openbsd.org> * Copyright (c) 2014, Theo de Raadt <deraadt@openbsd.org> * |
︙ | ︙ | |||
69 70 71 72 73 74 75 | } static inline int _rs_allocate(struct _rs **rsp, struct _rsx **rsxp) { if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) | | > | | | 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | } static inline int _rs_allocate(struct _rs **rsp, struct _rsx **rsxp) { if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) return (-1); if ((*rsxp = mmap(NULL, sizeof(**rsxp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) { munmap(*rsp, sizeof(**rsp)); *rsp = NULL; return (-1); } _ARC4_ATFORK(_rs_forkhandler); return (0); } |
Changes to jni/libressl/crypto/compat/arc4random_osx.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: arc4random_osx.h,v 1.10 2015/09/11 11:52:55 deraadt Exp $ */ /* * Copyright (c) 1996, David Mazieres <dm@uun.org> * Copyright (c) 2008, Damien Miller <djm@openbsd.org> * Copyright (c) 2013, Markus Friedl <markus@openbsd.org> * Copyright (c) 2014, Theo de Raadt <deraadt@openbsd.org> * |
︙ | ︙ | |||
63 64 65 66 67 68 69 | } static inline int _rs_allocate(struct _rs **rsp, struct _rsx **rsxp) { if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) | | > | | | 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | } static inline int _rs_allocate(struct _rs **rsp, struct _rsx **rsxp) { if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) return (-1); if ((*rsxp = mmap(NULL, sizeof(**rsxp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) { munmap(*rsp, sizeof(**rsp)); *rsp = NULL; return (-1); } _ARC4_ATFORK(_rs_forkhandler); return (0); } |
Changes to jni/libressl/crypto/compat/arc4random_solaris.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: arc4random_solaris.h,v 1.9 2015/01/15 06:57:18 deraadt Exp $ */ /* * Copyright (c) 1996, David Mazieres <dm@uun.org> * Copyright (c) 2008, Damien Miller <djm@openbsd.org> * Copyright (c) 2013, Markus Friedl <markus@openbsd.org> * Copyright (c) 2014, Theo de Raadt <deraadt@openbsd.org> * |
︙ | ︙ | |||
68 69 70 71 72 73 74 75 76 77 78 79 80 | if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) return (-1); if ((*rsxp = mmap(NULL, sizeof(**rsxp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) { munmap(*rsp, sizeof(**rsp)); return (-1); } _ARC4_ATFORK(_rs_forkhandler); return (0); } | > | 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) return (-1); if ((*rsxp = mmap(NULL, sizeof(**rsxp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) { munmap(*rsp, sizeof(**rsp)); *rsp = NULL; return (-1); } _ARC4_ATFORK(_rs_forkhandler); return (0); } |
Added jni/libressl/crypto/compat/arc4random_uniform.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | /* $OpenBSD: arc4random_uniform.c,v 1.1 2014/07/12 13:24:54 deraadt Exp $ */ /* * Copyright (c) 2008, Damien Miller <djm@openbsd.org> * * 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. */ #include <sys/types.h> #include <stdlib.h> /* * Calculate a uniformly distributed random number less than upper_bound * avoiding "modulo bias". * * Uniformity is achieved by generating new random numbers until the one * returned is outside the range [0, 2**32 % upper_bound). This * guarantees the selected random number will be inside * [2**32 % upper_bound, 2**32) which maps back to [0, upper_bound) * after reduction modulo upper_bound. */ uint32_t arc4random_uniform(uint32_t upper_bound) { uint32_t r, min; if (upper_bound < 2) return 0; /* 2**32 % x == (2**32 - x) % x */ min = -upper_bound % upper_bound; /* * This could theoretically loop forever but each retry has * p > 0.5 (worst case, usually far better) of selecting a * number inside the range we need, so it should rarely need * to re-roll. */ for (;;) { r = arc4random(); if (r >= min) break; } return r % upper_bound; } |
Changes to jni/libressl/crypto/compat/arc4random_win.h.
︙ | ︙ | |||
48 49 50 51 52 53 54 | { TerminateProcess(GetCurrentProcess(), 0); } static inline int _rs_allocate(struct _rs **rsp, struct _rsx **rsxp) { | | > | > | > | 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | { TerminateProcess(GetCurrentProcess(), 0); } static inline int _rs_allocate(struct _rs **rsp, struct _rsx **rsxp) { *rsp = VirtualAlloc(NULL, sizeof(**rsp), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); if (*rsp == NULL) return (-1); *rsxp = VirtualAlloc(NULL, sizeof(**rsxp), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); if (*rsxp == NULL) { VirtualFree(*rsp, 0, MEM_RELEASE); *rsp = NULL; return (-1); } return (0); } static inline void _rs_forkhandler(void) |
︙ | ︙ |
Changes to jni/libressl/crypto/compat/explicit_bzero.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: explicit_bzero.c,v 1.3 2014/06/21 02:34:26 matthew Exp $ */ /* * Public domain. * Written by Matthew Dempsky. */ #include <string.h> |
︙ | ︙ |
Changes to jni/libressl/crypto/compat/getentropy_aix.c.
|
| | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | /* $OpenBSD: getentropy_aix.c,v 1.3 2015/08/25 17:26:43 deraadt Exp $ */ /* * Copyright (c) 2015 Michael Felt <aixtools@gmail.com> * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> * Copyright (c) 2014 Bob Beck <beck@obtuse.com> * * 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. * * Emulation of getentropy(2) as documented at: * http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/getentropy.2 */ /* * -lperfstat is needed for the psuedo entropy data */ #include <sys/mman.h> |
︙ | ︙ | |||
52 53 54 55 56 57 58 | HD(errno); \ else \ HD(b); \ } while (0) #define HR(x, l) (SHA512_Update(&ctx, (char *)(x), (l))) #define HD(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (x))) | | | | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | HD(errno); \ else \ HD(b); \ } while (0) #define HR(x, l) (SHA512_Update(&ctx, (char *)(x), (l))) #define HD(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (x))) #define HF(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (void*))) int getentropy(void *buf, size_t len); static int gotdata(char *buf, size_t len); static int getentropy_urandom(void *buf, size_t len, const char *path, int devfscheck); static int getentropy_fallback(void *buf, size_t len); int getentropy(void *buf, size_t len) { int ret = -1; if (len > 256) { errno = EIO; return (-1); } /* * Try to get entropy with /dev/urandom */ ret = getentropy_urandom(buf, len, "/dev/urandom", 0); if (ret != -1) |
︙ | ︙ | |||
126 127 128 129 130 131 132 | { char any_set = 0; size_t i; for (i = 0; i < len; ++i) any_set |= buf[i]; if (any_set == 0) | | | | 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | { char any_set = 0; size_t i; for (i = 0; i < len; ++i) any_set |= buf[i]; if (any_set == 0) return (-1); return (0); } static int getentropy_urandom(void *buf, size_t len, const char *path, int devfscheck) { struct stat st; size_t i; |
︙ | ︙ | |||
177 178 179 180 181 182 183 | goto nodevrandom; } i += ret; } close(fd); if (gotdata(buf, len) == 0) { errno = save_errno; | | | | 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 | goto nodevrandom; } i += ret; } close(fd); if (gotdata(buf, len) == 0) { errno = save_errno; return (0); /* satisfied */ } nodevrandom: errno = EIO; return (-1); } static const int cl[] = { CLOCK_REALTIME, #ifdef CLOCK_MONOTONIC CLOCK_MONOTONIC, #endif |
︙ | ︙ | |||
414 415 416 417 418 419 420 | memcpy((char *)buf + i, results, min(sizeof(results), len - i)); i += min(sizeof(results), len - i); } explicit_bzero(&ctx, sizeof ctx); explicit_bzero(results, sizeof results); if (gotdata(buf, len) == 0) { errno = save_errno; | | | | 414 415 416 417 418 419 420 421 422 423 424 425 | memcpy((char *)buf + i, results, min(sizeof(results), len - i)); i += min(sizeof(results), len - i); } explicit_bzero(&ctx, sizeof ctx); explicit_bzero(results, sizeof results); if (gotdata(buf, len) == 0) { errno = save_errno; return (0); /* satisfied */ } errno = EIO; return (-1); } |
Changes to jni/libressl/crypto/compat/getentropy_freebsd.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: getentropy_freebsd.c,v 1.1 2014/11/03 06:23:30 bcook Exp $ */ /* * Copyright (c) 2014 Pawel Jakub Dawidek <pjd@FreeBSD.org> * Copyright (c) 2014 Brent Cook <bcook@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above |
︙ | ︙ | |||
50 51 52 53 54 55 56 | return (done); } int getentropy(void *buf, size_t len) { | < | | | < | | 50 51 52 53 54 55 56 57 58 59 60 61 62 | return (done); } int getentropy(void *buf, size_t len) { if (len <= 256 && getentropy_sysctl(buf, len) == len) return (0); errno = EIO; return (-1); } |
Changes to jni/libressl/crypto/compat/getentropy_hpux.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: getentropy_hpux.c,v 1.3 2015/08/25 17:26:43 deraadt Exp $ */ /* * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> * Copyright (c) 2014 Bob Beck <beck@obtuse.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above |
︙ | ︙ | |||
56 57 58 59 60 61 62 | HD(errno); \ else \ HD(b); \ } while (0) #define HR(x, l) (SHA512_Update(&ctx, (char *)(x), (l))) #define HD(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (x))) | | | | 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | HD(errno); \ else \ HD(b); \ } while (0) #define HR(x, l) (SHA512_Update(&ctx, (char *)(x), (l))) #define HD(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (x))) #define HF(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (void*))) int getentropy(void *buf, size_t len); static int gotdata(char *buf, size_t len); static int getentropy_urandom(void *buf, size_t len, const char *path, int devfscheck); static int getentropy_fallback(void *buf, size_t len); int getentropy(void *buf, size_t len) { int ret = -1; if (len > 256) { errno = EIO; return (-1); } /* * Try to get entropy with /dev/urandom */ ret = getentropy_urandom(buf, len, "/dev/urandom", 0); if (ret != -1) |
︙ | ︙ | |||
130 131 132 133 134 135 136 | { char any_set = 0; size_t i; for (i = 0; i < len; ++i) any_set |= buf[i]; if (any_set == 0) | | | | 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | { char any_set = 0; size_t i; for (i = 0; i < len; ++i) any_set |= buf[i]; if (any_set == 0) return (-1); return (0); } static int getentropy_urandom(void *buf, size_t len, const char *path, int devfscheck) { struct stat st; size_t i; |
︙ | ︙ | |||
181 182 183 184 185 186 187 | goto nodevrandom; } i += ret; } close(fd); if (gotdata(buf, len) == 0) { errno = save_errno; | | | | 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 | goto nodevrandom; } i += ret; } close(fd); if (gotdata(buf, len) == 0) { errno = save_errno; return (0); /* satisfied */ } nodevrandom: errno = EIO; return (-1); } static const int cl[] = { CLOCK_REALTIME, #ifdef CLOCK_MONOTONIC CLOCK_MONOTONIC, #endif |
︙ | ︙ | |||
408 409 410 411 412 413 414 | memcpy((char *)buf + i, results, min(sizeof(results), len - i)); i += min(sizeof(results), len - i); } explicit_bzero(&ctx, sizeof ctx); explicit_bzero(results, sizeof results); if (gotdata(buf, len) == 0) { errno = save_errno; | | | | 408 409 410 411 412 413 414 415 416 417 418 419 | memcpy((char *)buf + i, results, min(sizeof(results), len - i)); i += min(sizeof(results), len - i); } explicit_bzero(&ctx, sizeof ctx); explicit_bzero(results, sizeof results); if (gotdata(buf, len) == 0) { errno = save_errno; return (0); /* satisfied */ } errno = EIO; return (-1); } |
Changes to jni/libressl/crypto/compat/getentropy_linux.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: getentropy_linux.c,v 1.41 2015/09/11 11:52:55 deraadt Exp $ */ /* * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> * Copyright (c) 2014 Bob Beck <beck@obtuse.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above |
︙ | ︙ | |||
87 88 89 90 91 92 93 | int getentropy(void *buf, size_t len) { int ret = -1; if (len > 256) { errno = EIO; | | | 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | int getentropy(void *buf, size_t len) { int ret = -1; if (len > 256) { errno = EIO; return (-1); } #ifdef SYS_getrandom /* * Try descriptor-less getrandom() */ ret = getentropy_getrandom(buf, len); |
︙ | ︙ | |||
116 117 118 119 120 121 122 | return (ret); #ifdef SYS__sysctl /* * Try to use sysctl CTL_KERN, KERN_RANDOM, RANDOM_UUID. * sysctl is a failsafe API, so it guarantees a result. This * should work inside a chroot, or when file descriptors are | | | 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | return (ret); #ifdef SYS__sysctl /* * Try to use sysctl CTL_KERN, KERN_RANDOM, RANDOM_UUID. * sysctl is a failsafe API, so it guarantees a result. This * should work inside a chroot, or when file descriptors are * exhausted. * * However this can fail if the Linux kernel removes support * for sysctl. Starting in 2007, there have been efforts to * deprecate the sysctl API/ABI, and push callers towards use * of the chroot-unavailable fd-using /proc mechanism -- * essentially the same problems as /dev/urandom. * |
︙ | ︙ | |||
182 183 184 185 186 187 188 | { char any_set = 0; size_t i; for (i = 0; i < len; ++i) any_set |= buf[i]; if (any_set == 0) | | | | 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 | { char any_set = 0; size_t i; for (i = 0; i < len; ++i) any_set |= buf[i]; if (any_set == 0) return (-1); return (0); } #ifdef SYS_getrandom static int getentropy_getrandom(void *buf, size_t len) { int pre_errno = errno; |
︙ | ︙ | |||
256 257 258 259 260 261 262 | goto nodevrandom; } i += ret; } close(fd); if (gotdata(buf, len) == 0) { errno = save_errno; | | | | 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | goto nodevrandom; } i += ret; } close(fd); if (gotdata(buf, len) == 0) { errno = save_errno; return (0); /* satisfied */ } nodevrandom: errno = EIO; return (-1); } #ifdef SYS__sysctl static int getentropy_sysctl(void *buf, size_t len) { static int mib[] = { CTL_KERN, KERN_RANDOM, RANDOM_UUID }; |
︙ | ︙ | |||
291 292 293 294 295 296 297 | } if (gotdata(buf, len) == 0) { errno = save_errno; return (0); /* satisfied */ } sysctlfailed: errno = EIO; | | | | 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 | } if (gotdata(buf, len) == 0) { errno = save_errno; return (0); /* satisfied */ } sysctlfailed: errno = EIO; return (-1); } #endif /* SYS__sysctl */ static const int cl[] = { CLOCK_REALTIME, #ifdef CLOCK_MONOTONIC CLOCK_MONOTONIC, #endif #ifdef CLOCK_MONOTONIC_RAW CLOCK_MONOTONIC_RAW, #endif |
︙ | ︙ | |||
326 327 328 329 330 331 332 | static int getentropy_phdr(struct dl_phdr_info *info, size_t size, void *data) { SHA512_CTX *ctx = data; SHA512_Update(ctx, &info->dlpi_addr, sizeof (info->dlpi_addr)); | | | 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 | static int getentropy_phdr(struct dl_phdr_info *info, size_t size, void *data) { SHA512_CTX *ctx = data; SHA512_Update(ctx, &info->dlpi_addr, sizeof (info->dlpi_addr)); return (0); } static int getentropy_fallback(void *buf, size_t len) { uint8_t results[SHA512_DIGEST_LENGTH]; int save_errno = errno, e, pgs = getpagesize(), faster = 0, repeat; |
︙ | ︙ | |||
536 537 538 539 540 541 542 | memcpy((char *)buf + i, results, min(sizeof(results), len - i)); i += min(sizeof(results), len - i); } explicit_bzero(&ctx, sizeof ctx); explicit_bzero(results, sizeof results); if (gotdata(buf, len) == 0) { errno = save_errno; | | | | 536 537 538 539 540 541 542 543 544 545 546 547 | memcpy((char *)buf + i, results, min(sizeof(results), len - i)); i += min(sizeof(results), len - i); } explicit_bzero(&ctx, sizeof ctx); explicit_bzero(results, sizeof results); if (gotdata(buf, len) == 0) { errno = save_errno; return (0); /* satisfied */ } errno = EIO; return (-1); } |
Changes to jni/libressl/crypto/compat/getentropy_netbsd.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: getentropy_netbsd.c,v 1.1 2015/01/19 20:21:40 bcook Exp $ */ /* * Copyright (c) 2014 Pawel Jakub Dawidek <pjd@FreeBSD.org> * Copyright (c) 2014 Brent Cook <bcook@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above |
︙ | ︙ | |||
51 52 53 54 55 56 57 | return (done); } int getentropy(void *buf, size_t len) { if (len <= 256 && | | | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | return (done); } int getentropy(void *buf, size_t len) { if (len <= 256 && getentropy_sysctl(buf, len) == len) { return (0); } errno = EIO; return (-1); } |
Changes to jni/libressl/crypto/compat/getentropy_osx.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: getentropy_osx.c,v 1.8 2014/07/21 20:19:47 guenther Exp $ */ /* * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> * Copyright (c) 2014 Bob Beck <beck@obtuse.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above |
︙ | ︙ | |||
84 85 86 87 88 89 90 | int getentropy(void *buf, size_t len) { int ret = -1; if (len > 256) { errno = EIO; | | | 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | int getentropy(void *buf, size_t len) { int ret = -1; if (len > 256) { errno = EIO; return (-1); } /* * Try to get entropy with /dev/urandom * * This can fail if the process is inside a chroot or if file * descriptors are exhausted. |
︙ | ︙ | |||
145 146 147 148 149 150 151 | { char any_set = 0; size_t i; for (i = 0; i < len; ++i) any_set |= buf[i]; if (any_set == 0) | | | | 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | { char any_set = 0; size_t i; for (i = 0; i < len; ++i) any_set |= buf[i]; if (any_set == 0) return (-1); return (0); } static int getentropy_urandom(void *buf, size_t len) { struct stat st; size_t i; |
︙ | ︙ | |||
196 197 198 199 200 201 202 | goto nodevrandom; } i += ret; } close(fd); if (gotdata(buf, len) == 0) { errno = save_errno; | | | | 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | goto nodevrandom; } i += ret; } close(fd); if (gotdata(buf, len) == 0) { errno = save_errno; return (0); /* satisfied */ } nodevrandom: errno = EIO; return (-1); } static int tcpmib[] = { CTL_NET, AF_INET, IPPROTO_TCP, TCPCTL_STATS }; static int udpmib[] = { CTL_NET, AF_INET, IPPROTO_UDP, UDPCTL_STATS }; static int ipmib[] = { CTL_NET, AF_INET, IPPROTO_IP, IPCTL_STATS }; static int kmib[] = { CTL_KERN, KERN_USRSTACK }; static int hwmib[] = { CTL_HW, HW_USERMEM }; |
︙ | ︙ | |||
418 419 420 421 422 423 424 | memcpy((char *)buf + i, results, min(sizeof(results), len - i)); i += min(sizeof(results), len - i); } explicit_bzero(&ctx, sizeof ctx); explicit_bzero(results, sizeof results); if (gotdata(buf, len) == 0) { errno = save_errno; | | | | 418 419 420 421 422 423 424 425 426 427 428 429 | memcpy((char *)buf + i, results, min(sizeof(results), len - i)); i += min(sizeof(results), len - i); } explicit_bzero(&ctx, sizeof ctx); explicit_bzero(results, sizeof results); if (gotdata(buf, len) == 0) { errno = save_errno; return (0); /* satisfied */ } errno = EIO; return (-1); } |
Changes to jni/libressl/crypto/compat/getentropy_solaris.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: getentropy_solaris.c,v 1.10 2015/08/25 17:26:43 deraadt Exp $ */ /* * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> * Copyright (c) 2014 Bob Beck <beck@obtuse.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above |
︙ | ︙ | |||
60 61 62 63 64 65 66 | HD(errno); \ else \ HD(b); \ } while (0) #define HR(x, l) (SHA512_Update(&ctx, (char *)(x), (l))) #define HD(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (x))) | | | | 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | HD(errno); \ else \ HD(b); \ } while (0) #define HR(x, l) (SHA512_Update(&ctx, (char *)(x), (l))) #define HD(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (x))) #define HF(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (void*))) int getentropy(void *buf, size_t len); static int gotdata(char *buf, size_t len); static int getentropy_urandom(void *buf, size_t len, const char *path, int devfscheck); static int getentropy_fallback(void *buf, size_t len); static int getentropy_phdr(struct dl_phdr_info *info, size_t size, void *data); int getentropy(void *buf, size_t len) { int ret = -1; if (len > 256) { errno = EIO; return (-1); } /* * Try to get entropy with /dev/urandom * * Solaris provides /dev/urandom as a symbolic link to * /devices/pseudo/random@0:urandom which is provided by |
︙ | ︙ | |||
156 157 158 159 160 161 162 | { char any_set = 0; size_t i; for (i = 0; i < len; ++i) any_set |= buf[i]; if (any_set == 0) | | | | 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | { char any_set = 0; size_t i; for (i = 0; i < len; ++i) any_set |= buf[i]; if (any_set == 0) return (-1); return (0); } static int getentropy_urandom(void *buf, size_t len, const char *path, int devfscheck) { struct stat st; size_t i; |
︙ | ︙ | |||
208 209 210 211 212 213 214 | goto nodevrandom; } i += ret; } close(fd); if (gotdata(buf, len) == 0) { errno = save_errno; | | | | 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 | goto nodevrandom; } i += ret; } close(fd); if (gotdata(buf, len) == 0) { errno = save_errno; return (0); /* satisfied */ } nodevrandom: errno = EIO; return (-1); } static const int cl[] = { CLOCK_REALTIME, #ifdef CLOCK_MONOTONIC CLOCK_MONOTONIC, #endif |
︙ | ︙ | |||
246 247 248 249 250 251 252 | static int getentropy_phdr(struct dl_phdr_info *info, size_t size, void *data) { SHA512_CTX *ctx = data; SHA512_Update(ctx, &info->dlpi_addr, sizeof (info->dlpi_addr)); | | | 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 | static int getentropy_phdr(struct dl_phdr_info *info, size_t size, void *data) { SHA512_CTX *ctx = data; SHA512_Update(ctx, &info->dlpi_addr, sizeof (info->dlpi_addr)); return (0); } static int getentropy_fallback(void *buf, size_t len) { uint8_t results[SHA512_DIGEST_LENGTH]; int save_errno = errno, e, pgs = getpagesize(), faster = 0, repeat; |
︙ | ︙ | |||
434 435 436 437 438 439 440 | memcpy((char *)buf + i, results, min(sizeof(results), len - i)); i += min(sizeof(results), len - i); } explicit_bzero(&ctx, sizeof ctx); explicit_bzero(results, sizeof results); if (gotdata(buf, len) == 0) { errno = save_errno; | | | | 434 435 436 437 438 439 440 441 442 443 444 445 | memcpy((char *)buf + i, results, min(sizeof(results), len - i)); i += min(sizeof(results), len - i); } explicit_bzero(&ctx, sizeof ctx); explicit_bzero(results, sizeof results); if (gotdata(buf, len) == 0) { errno = save_errno; return (0); /* satisfied */ } errno = EIO; return (-1); } |
Changes to jni/libressl/crypto/compat/getentropy_win.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: getentropy_win.c,v 1.3 2014/11/11 13:54:33 bcook Exp $ */ /* * Copyright (c) 2014, Theo de Raadt <deraadt@openbsd.org> * Copyright (c) 2014, Bob Beck <beck@obtuse.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above |
︙ | ︙ | |||
36 37 38 39 40 41 42 | int getentropy(void *buf, size_t len) { HCRYPTPROV provider; if (len > 256) { errno = EIO; | | | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | int getentropy(void *buf, size_t len) { HCRYPTPROV provider; if (len > 256) { errno = EIO; return (-1); } if (CryptAcquireContext(&provider, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) == 0) goto fail; if (CryptGenRandom(provider, len, buf) == 0) { CryptReleaseContext(provider, 0); |
︙ | ︙ |
Changes to jni/libressl/crypto/compat/posix_win.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #define NO_REDEF_POSIX_FUNCTIONS #include <windows.h> #include <ws2tcpip.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> void posix_perror(const char *s) | > | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #define NO_REDEF_POSIX_FUNCTIONS #include <windows.h> #include <ws2tcpip.h> #include <errno.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> void posix_perror(const char *s) |
︙ | ︙ | |||
33 34 35 36 37 38 39 40 41 42 43 44 45 46 | FILE *f = fopen(path, bin_mode); free(bin_mode); return f; } return fopen(path, mode); } int posix_rename(const char *oldpath, const char *newpath) { return MoveFileEx(oldpath, newpath, MOVEFILE_REPLACE_EXISTING) ? 0 : -1; } | > > > > > > > > > > > > > > | 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | FILE *f = fopen(path, bin_mode); free(bin_mode); return f; } return fopen(path, mode); } char * posix_fgets(char *s, int size, FILE *stream) { char *ret = fgets(s, size, stream); if (ret != NULL) { size_t end = strlen(ret); if (end >= 2 && ret[end - 2] == '\r' && ret[end - 1] == '\n') { ret[end - 2] = '\n'; ret[end - 1] = '\0'; } } return ret; } int posix_rename(const char *oldpath, const char *newpath) { return MoveFileEx(oldpath, newpath, MOVEFILE_REPLACE_EXISTING) ? 0 : -1; } |
︙ | ︙ |
Changes to jni/libressl/crypto/compat/reallocarray.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: reallocarray.c,v 1.2 2014/12/08 03:45:00 bcook Exp $ */ /* * Copyright (c) 2008 Otto Moerbeek <otto@drijf.net> * * 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. * |
︙ | ︙ |
Changes to jni/libressl/crypto/compat/strcasecmp.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: strcasecmp.c,v 1.6 2005/08/08 08:05:37 espie Exp $ */ /* * Copyright (c) 1987, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions |
︙ | ︙ |
Changes to jni/libressl/crypto/compat/strlcat.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: strlcat.c,v 1.15 2015/03/02 21:41:08 millert Exp $ */ /* * Copyright (c) 1998, 2015 Todd C. Miller <Todd.Miller@courtesan.com> * * 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. |
︙ | ︙ |
Changes to jni/libressl/crypto/compat/strlcpy.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: strlcpy.c,v 1.12 2015/01/15 03:54:12 millert Exp $ */ /* * Copyright (c) 1998, 2015 Todd C. Miller <Todd.Miller@courtesan.com> * * 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. |
︙ | ︙ |
Changes to jni/libressl/crypto/compat/strndup.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: strndup.c,v 1.1 2010/05/18 22:24:55 tedu Exp $ */ /* * Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com> * * 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. |
︙ | ︙ |
Changes to jni/libressl/crypto/compat/strnlen.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: strnlen.c,v 1.5 2014/06/10 04:17:37 deraadt Exp $ */ /* * Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com> * * 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. |
︙ | ︙ |
Added jni/libressl/crypto/compat/timegm.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 | /* * ---------------------------------------------------------------------- * Copyright © 2005-2014 Rich Felker, et al. * * 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 <errno.h> #include <limits.h> #include <time.h> #ifdef _WIN32 #ifndef EOVERFLOW #define EOVERFLOW ERANGE #endif #endif /* 2000-03-01 (mod 400 year, immediately after feb29 */ #define LEAPOCH (946684800LL + 86400*(31+29)) #define DAYS_PER_400Y (365*400 + 97) #define DAYS_PER_100Y (365*100 + 24) #define DAYS_PER_4Y (365*4 + 1) static int __month_to_secs(int month, int is_leap) { static const int secs_through_month[] = { 0, 31*86400, 59*86400, 90*86400, 120*86400, 151*86400, 181*86400, 212*86400, 243*86400, 273*86400, 304*86400, 334*86400 }; int t = secs_through_month[month]; if (is_leap && month >= 2) t+=86400; return t; } static long long __year_to_secs(long long year, int *is_leap) { if (year-2ULL <= 136) { int y = year; int leaps = (y-68)>>2; if (!((y-68)&3)) { leaps--; if (is_leap) *is_leap = 1; } else if (is_leap) *is_leap = 0; return 31536000*(y-70) + 86400*leaps; } int cycles, centuries, leaps, rem; if (!is_leap) is_leap = &(int){0}; cycles = (year-100) / 400; rem = (year-100) % 400; if (rem < 0) { cycles--; rem += 400; } if (!rem) { *is_leap = 1; centuries = 0; leaps = 0; } else { if (rem >= 200) { if (rem >= 300) centuries = 3, rem -= 300; else centuries = 2, rem -= 200; } else { if (rem >= 100) centuries = 1, rem -= 100; else centuries = 0; } if (!rem) { *is_leap = 0; leaps = 0; } else { leaps = rem / 4U; rem %= 4U; *is_leap = !rem; } } leaps += 97*cycles + 24*centuries - *is_leap; return (year-100) * 31536000LL + leaps * 86400LL + 946684800 + 86400; } static long long __tm_to_secs(const struct tm *tm) { int is_leap; long long year = tm->tm_year; int month = tm->tm_mon; if (month >= 12 || month < 0) { int adj = month / 12; month %= 12; if (month < 0) { adj--; month += 12; } year += adj; } long long t = __year_to_secs(year, &is_leap); t += __month_to_secs(month, is_leap); t += 86400LL * (tm->tm_mday-1); t += 3600LL * tm->tm_hour; t += 60LL * tm->tm_min; t += tm->tm_sec; return t; } static int __secs_to_tm(long long t, struct tm *tm) { long long days, secs; int remdays, remsecs, remyears; int qc_cycles, c_cycles, q_cycles; int years, months; int wday, yday, leap; static const char days_in_month[] = {31,30,31,30,31,31,30,31,30,31,31,29}; /* Reject time_t values whose year would overflow int */ if (t < INT_MIN * 31622400LL || t > INT_MAX * 31622400LL) return -1; secs = t - LEAPOCH; days = secs / 86400; remsecs = secs % 86400; if (remsecs < 0) { remsecs += 86400; days--; } wday = (3+days)%7; if (wday < 0) wday += 7; qc_cycles = days / DAYS_PER_400Y; remdays = days % DAYS_PER_400Y; if (remdays < 0) { remdays += DAYS_PER_400Y; qc_cycles--; } c_cycles = remdays / DAYS_PER_100Y; if (c_cycles == 4) c_cycles--; remdays -= c_cycles * DAYS_PER_100Y; q_cycles = remdays / DAYS_PER_4Y; if (q_cycles == 25) q_cycles--; remdays -= q_cycles * DAYS_PER_4Y; remyears = remdays / 365; if (remyears == 4) remyears--; remdays -= remyears * 365; leap = !remyears && (q_cycles || !c_cycles); yday = remdays + 31 + 28 + leap; if (yday >= 365+leap) yday -= 365+leap; years = remyears + 4*q_cycles + 100*c_cycles + 400*qc_cycles; for (months=0; days_in_month[months] <= remdays; months++) remdays -= days_in_month[months]; if (years+100 > INT_MAX || years+100 < INT_MIN) return -1; tm->tm_year = years + 100; tm->tm_mon = months + 2; if (tm->tm_mon >= 12) { tm->tm_mon -=12; tm->tm_year++; } tm->tm_mday = remdays + 1; tm->tm_wday = wday; tm->tm_yday = yday; tm->tm_hour = remsecs / 3600; tm->tm_min = remsecs / 60 % 60; tm->tm_sec = remsecs % 60; return 0; } #ifdef _WIN32 struct tm *__gmtime_r(const time_t *t, struct tm *tm) { if (__secs_to_tm(*t, tm) < 0) { errno = EOVERFLOW; return 0; } tm->tm_isdst = 0; return tm; } #endif time_t timegm(struct tm *tm) { struct tm new; long long t = __tm_to_secs(tm); if (__secs_to_tm(t, &new) < 0) { errno = EOVERFLOW; return -1; } #if SIZEOF_TIME_T != 8 if (t > (long long)INT_MAX || t < (long long)INT_MIN) { errno = EOVERFLOW; return -1; } #endif *tm = new; tm->tm_isdst = 0; return t; } |
Changes to jni/libressl/crypto/compat/timingsafe_bcmp.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: timingsafe_bcmp.c,v 1.2 2014/06/10 04:17:37 deraadt Exp $ */ /* * Copyright (c) 2010 Damien Miller. All rights reserved. * * 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. * |
︙ | ︙ |
Changes to jni/libressl/crypto/compat/timingsafe_memcmp.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: timingsafe_memcmp.c,v 1.1 2014/06/13 02:12:17 matthew Exp $ */ /* * Copyright (c) 2014 Google Inc. * * 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. * |
︙ | ︙ |
Changes to jni/libressl/crypto/cryptlib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: cryptlib.c,v 1.36 2015/09/13 10:02:49 miod Exp $ */ /* ==================================================================== * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * |
︙ | ︙ | |||
624 625 626 627 628 629 630 | } #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__INTEL__) || \ defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) unsigned int OPENSSL_ia32cap_P[2]; | | > | < < < < < < | < | 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 | } #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__INTEL__) || \ defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) unsigned int OPENSSL_ia32cap_P[2]; uint64_t OPENSSL_cpu_caps(void) { return *(uint64_t *)OPENSSL_ia32cap_P; } #if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) && !defined(I386_ONLY) #define OPENSSL_CPUID_SETUP typedef unsigned long long IA32CAP; void OPENSSL_cpuid_setup(void) |
︙ | ︙ | |||
669 670 671 672 673 674 675 676 677 678 679 680 681 682 | #else unsigned long * OPENSSL_ia32cap_loc(void) { return NULL; } #endif #if !defined(OPENSSL_CPUID_SETUP) && !defined(OPENSSL_CPUID_OBJ) void OPENSSL_cpuid_setup(void) { } | > > > > > > | 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 | #else unsigned long * OPENSSL_ia32cap_loc(void) { return NULL; } uint64_t OPENSSL_cpu_caps(void) { return 0; } #endif #if !defined(OPENSSL_CPUID_SETUP) && !defined(OPENSSL_CPUID_OBJ) void OPENSSL_cpuid_setup(void) { } |
︙ | ︙ |
Changes to jni/libressl/crypto/des/str2key.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: str2key.c,v 1.9 2014/10/28 07:35:58 jsg Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
91 92 93 94 95 96 97 | if(DES_is_weak_key(key)) (*key)[7] ^= 0xF0; DES_set_key(key,&ks); #else DES_set_key_unchecked(key,&ks); #endif DES_cbc_cksum((const unsigned char*)str,key,length,&ks,key); | | | 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | if(DES_is_weak_key(key)) (*key)[7] ^= 0xF0; DES_set_key(key,&ks); #else DES_set_key_unchecked(key,&ks); #endif DES_cbc_cksum((const unsigned char*)str,key,length,&ks,key); explicit_bzero(&ks,sizeof(ks)); DES_set_odd_parity(key); } void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2) { DES_key_schedule ks; int i,length; |
︙ | ︙ | |||
164 165 166 167 168 169 170 | if(DES_is_weak_key(key2)) (*key2)[7] ^= 0xF0; DES_set_key(key2,&ks); #else DES_set_key_unchecked(key2,&ks); #endif DES_cbc_cksum((const unsigned char*)str,key2,length,&ks,key2); | | | 164 165 166 167 168 169 170 171 172 173 174 | if(DES_is_weak_key(key2)) (*key2)[7] ^= 0xF0; DES_set_key(key2,&ks); #else DES_set_key_unchecked(key2,&ks); #endif DES_cbc_cksum((const unsigned char*)str,key2,length,&ks,key2); explicit_bzero(&ks,sizeof(ks)); DES_set_odd_parity(key1); DES_set_odd_parity(key2); } |
Changes to jni/libressl/crypto/dh/dh_check.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: dh_check.c,v 1.15 2015/02/07 13:19:15 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | goto err; q = BN_new(); if (q == NULL) goto err; if (BN_is_word(dh->g, DH_GENERATOR_2)) { l = BN_mod_word(dh->p, 24); if (l != 11) *ret |= DH_NOT_SUITABLE_GENERATOR; } else if (BN_is_word(dh->g, DH_GENERATOR_5)) { l = BN_mod_word(dh->p, 10); if (l != 3 && l != 7) *ret |= DH_NOT_SUITABLE_GENERATOR; } else *ret |= DH_UNABLE_TO_CHECK_GENERATOR; if (!BN_is_prime_ex(dh->p, BN_prime_checks, ctx, NULL)) *ret |= DH_CHECK_P_NOT_PRIME; | > > > > | 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | goto err; q = BN_new(); if (q == NULL) goto err; if (BN_is_word(dh->g, DH_GENERATOR_2)) { l = BN_mod_word(dh->p, 24); if (l == (BN_ULONG)-1) goto err; if (l != 11) *ret |= DH_NOT_SUITABLE_GENERATOR; } else if (BN_is_word(dh->g, DH_GENERATOR_5)) { l = BN_mod_word(dh->p, 10); if (l == (BN_ULONG)-1) goto err; if (l != 3 && l != 7) *ret |= DH_NOT_SUITABLE_GENERATOR; } else *ret |= DH_UNABLE_TO_CHECK_GENERATOR; if (!BN_is_prime_ex(dh->p, BN_prime_checks, ctx, NULL)) *ret |= DH_CHECK_P_NOT_PRIME; |
︙ | ︙ |
Changes to jni/libressl/crypto/dh/dh_key.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: dh_key.c,v 1.24 2016/06/30 02:02:06 bcook Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
143 144 145 146 147 148 149 | l = dh->length ? dh->length : BN_num_bits(dh->p) - 1; if (!BN_rand(priv_key, l, 0, 0)) goto err; } } { | < | < | < | < < | | | | > | 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | l = dh->length ? dh->length : BN_num_bits(dh->p) - 1; if (!BN_rand(priv_key, l, 0, 0)) goto err; } } { BIGNUM prk; BN_init(&prk); BN_with_flags(&prk, priv_key, BN_FLG_CONSTTIME); if (!dh->meth->bn_mod_exp(dh, pub_key, dh->g, &prk, dh->p, ctx, mont)) { goto err; } } dh->pub_key = pub_key; dh->priv_key = priv_key; ok = 1; err: if (ok != 1) DHerr(DH_F_GENERATE_KEY, ERR_R_BN_LIB); |
︙ | ︙ | |||
202 203 204 205 206 207 208 | DHerr(DH_F_COMPUTE_KEY, DH_R_NO_PRIVATE_VALUE); goto err; } if (dh->flags & DH_FLAG_CACHE_MONT_P) { mont = BN_MONT_CTX_set_locked(&dh->method_mont_p, CRYPTO_LOCK_DH, dh->p, ctx); | | < | | | 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | DHerr(DH_F_COMPUTE_KEY, DH_R_NO_PRIVATE_VALUE); goto err; } if (dh->flags & DH_FLAG_CACHE_MONT_P) { mont = BN_MONT_CTX_set_locked(&dh->method_mont_p, CRYPTO_LOCK_DH, dh->p, ctx); BN_set_flags(dh->priv_key, BN_FLG_CONSTTIME); if (!mont) goto err; } if (!DH_check_pub_key(dh, pub_key, &check_result) || check_result) { DHerr(DH_F_COMPUTE_KEY, DH_R_INVALID_PUBKEY); goto err; |
︙ | ︙ | |||
234 235 236 237 238 239 240 | return ret; } static int dh_bn_mod_exp(const DH *dh, BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx) { | < < < < < < < < < | | 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | return ret; } static int dh_bn_mod_exp(const DH *dh, BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx) { return BN_mod_exp_mont(r, a, p, m, ctx, m_ctx); } static int dh_init(DH *dh) { dh->flags |= DH_FLAG_CACHE_MONT_P; return 1; |
︙ | ︙ |
Changes to jni/libressl/crypto/dsa/dsa_ameth.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: dsa_ameth.c,v 1.18 2015/09/10 18:12:55 miod Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2006. */ /* ==================================================================== * Copyright (c) 2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
177 178 179 180 181 182 183 | return 0; } /* In PKCS#8 DSA: you just get a private key integer and parameters in the * AlgorithmIdentifier the pubkey must be recalculated. */ | < < > > < < < < < < < < < < < < < < < < | < < < < < | < < < < < < < | | | < < < | | < < < < | | | < < < | < | > | > > < < < | < | | 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 | return 0; } /* In PKCS#8 DSA: you just get a private key integer and parameters in the * AlgorithmIdentifier the pubkey must be recalculated. */ static int dsa_priv_decode(EVP_PKEY *pkey, PKCS8_PRIV_KEY_INFO *p8) { const unsigned char *p, *pm; int pklen, pmlen; int ptype; void *pval; ASN1_STRING *pstr; X509_ALGOR *palg; ASN1_INTEGER *privkey = NULL; BN_CTX *ctx = NULL; DSA *dsa = NULL; int ret = 0; if (!PKCS8_pkey_get0(NULL, &p, &pklen, &palg, p8)) return 0; X509_ALGOR_get0(NULL, &ptype, &pval, palg); if (ptype != V_ASN1_SEQUENCE) goto decerr; if ((privkey = d2i_ASN1_INTEGER(NULL, &p, pklen)) == NULL) goto decerr; if (privkey->type == V_ASN1_NEG_INTEGER) goto decerr; pstr = pval; pm = pstr->data; pmlen = pstr->length; if (!(dsa = d2i_DSAparams(NULL, &pm, pmlen))) goto decerr; /* We have parameters now set private key */ if (!(dsa->priv_key = ASN1_INTEGER_to_BN(privkey, NULL))) { DSAerr(DSA_F_DSA_PRIV_DECODE,DSA_R_BN_ERROR); goto dsaerr; } /* Calculate public key */ if (!(dsa->pub_key = BN_new())) { DSAerr(DSA_F_DSA_PRIV_DECODE, ERR_R_MALLOC_FAILURE); goto dsaerr; } if (!(ctx = BN_CTX_new())) { DSAerr(DSA_F_DSA_PRIV_DECODE, ERR_R_MALLOC_FAILURE); goto dsaerr; } if (!BN_mod_exp(dsa->pub_key, dsa->g, dsa->priv_key, dsa->p, ctx)) { DSAerr(DSA_F_DSA_PRIV_DECODE,DSA_R_BN_ERROR); goto dsaerr; } if (!EVP_PKEY_assign_DSA(pkey, dsa)) goto decerr; ret = 1; goto done; decerr: DSAerr(DSA_F_DSA_PRIV_DECODE, DSA_R_DECODE_ERROR); dsaerr: DSA_free(dsa); done: BN_CTX_free(ctx); ASN1_INTEGER_free(privkey); return ret; } static int dsa_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey) { ASN1_STRING *params = NULL; ASN1_INTEGER *prkey = NULL; |
︙ | ︙ | |||
515 516 517 518 519 520 521 522 | return do_dsa_print(bp, pkey->pkey.dsa, indent, 2); } static int old_dsa_priv_decode(EVP_PKEY *pkey, const unsigned char **pder, int derlen) { DSA *dsa; | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 | return do_dsa_print(bp, pkey->pkey.dsa, indent, 2); } static int old_dsa_priv_decode(EVP_PKEY *pkey, const unsigned char **pder, int derlen) { DSA *dsa; BN_CTX *ctx = NULL; BIGNUM *j, *p1, *newp1; if (!(dsa = d2i_DSAPrivateKey(NULL, pder, derlen))) { DSAerr(DSA_F_OLD_DSA_PRIV_DECODE, ERR_R_DSA_LIB); return 0; } ctx = BN_CTX_new(); if (ctx == NULL) goto err; /* * Check that p and q are consistent with each other. */ j = BN_CTX_get(ctx); p1 = BN_CTX_get(ctx); newp1 = BN_CTX_get(ctx); if (j == NULL || p1 == NULL || newp1 == NULL) goto err; /* p1 = p - 1 */ if (BN_sub(p1, dsa->p, BN_value_one()) == 0) goto err; /* j = (p - 1) / q */ if (BN_div(j, NULL, p1, dsa->q, ctx) == 0) goto err; /* q * j should == p - 1 */ if (BN_mul(newp1, dsa->q, j, ctx) == 0) goto err; if (BN_cmp(newp1, p1) != 0) { DSAerr(DSA_F_DSA_PARAM_DECODE, DSA_R_BAD_Q_VALUE); goto err; } /* * Check that q is not a composite number. */ if (BN_is_prime_ex(dsa->q, BN_prime_checks, ctx, NULL) == 0) { DSAerr(DSA_F_DSA_PARAM_DECODE, DSA_R_BAD_Q_VALUE); goto err; } BN_CTX_free(ctx); EVP_PKEY_assign_DSA(pkey, dsa); return 1; err: BN_CTX_free(ctx); DSA_free(dsa); return 0; } static int old_dsa_priv_encode(const EVP_PKEY *pkey, unsigned char **pder) { return i2d_DSAPrivateKey(pkey->pkey.dsa, pder); } |
︙ | ︙ |
Changes to jni/libressl/crypto/dsa/dsa_key.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: dsa_key.c,v 1.21 2016/06/21 04:16:53 bcook Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
100 101 102 103 104 105 106 | if (dsa->pub_key == NULL) { if ((pub_key = BN_new()) == NULL) goto err; } else pub_key=dsa->pub_key; { | < | < < < | < < | | 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | if (dsa->pub_key == NULL) { if ((pub_key = BN_new()) == NULL) goto err; } else pub_key=dsa->pub_key; { BIGNUM prk; BN_with_flags(&prk, priv_key, BN_FLG_CONSTTIME); if (!BN_mod_exp(pub_key, dsa->g, &prk, dsa->p, ctx)) goto err; } dsa->priv_key = priv_key; dsa->pub_key = pub_key; ok = 1; |
︙ | ︙ |
Changes to jni/libressl/crypto/dsa/dsa_ossl.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: dsa_ossl.c,v 1.25 2016/06/06 23:37:37 tedu Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
79 80 81 82 83 84 85 | .dsa_do_sign = dsa_do_sign, .dsa_sign_setup = dsa_sign_setup, .dsa_do_verify = dsa_do_verify, .init = dsa_init, .finish = dsa_finish }; | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | .dsa_do_sign = dsa_do_sign, .dsa_sign_setup = dsa_sign_setup, .dsa_do_verify = dsa_do_verify, .init = dsa_init, .finish = dsa_finish }; const DSA_METHOD * DSA_OpenSSL(void) { return &openssl_dsa_meth; } static DSA_SIG * |
︙ | ︙ | |||
218 219 220 221 222 223 224 | return ret; } static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp) { BN_CTX *ctx; | | < > > < < < < | | | | | | | | | | | | | | > > > | < < | < < > < < | 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 | return ret; } static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp) { BN_CTX *ctx; BIGNUM k, *kinv = NULL, *r = NULL; int ret = 0; if (!dsa->p || !dsa->q || !dsa->g) { DSAerr(DSA_F_DSA_SIGN_SETUP, DSA_R_MISSING_PARAMETERS); return 0; } BN_init(&k); if (ctx_in == NULL) { if ((ctx = BN_CTX_new()) == NULL) goto err; } else ctx = ctx_in; if ((r = BN_new()) == NULL) goto err; /* Get random k */ do { if (!BN_rand_range(&k, dsa->q)) goto err; } while (BN_is_zero(&k)); BN_set_flags(&k, BN_FLG_CONSTTIME); if (dsa->flags & DSA_FLAG_CACHE_MONT_P) { if (!BN_MONT_CTX_set_locked(&dsa->method_mont_p, CRYPTO_LOCK_DSA, dsa->p, ctx)) goto err; } /* Compute r = (g^k mod p) mod q */ /* * We do not want timing information to leak the length of k, * so we compute g^k using an equivalent exponent of fixed * length. * * (This is a kludge that we need because the BN_mod_exp_mont() * does not let us specify the desired timing behaviour.) */ if (!BN_add(&k, &k, dsa->q)) goto err; if (BN_num_bits(&k) <= BN_num_bits(dsa->q)) { if (!BN_add(&k, &k, dsa->q)) goto err; } if (dsa->meth->bn_mod_exp != NULL) { if (!dsa->meth->bn_mod_exp(dsa, r, dsa->g, &k, dsa->p, ctx, dsa->method_mont_p)) goto err; } else { if (!BN_mod_exp_mont(r, dsa->g, &k, dsa->p, ctx, dsa->method_mont_p)) goto err; } if (!BN_mod(r,r,dsa->q,ctx)) goto err; /* Compute part of 's = inv(k) (m + xr) mod q' */ if ((kinv = BN_mod_inverse(NULL, &k, dsa->q, ctx)) == NULL) goto err; |
︙ | ︙ | |||
304 305 306 307 308 309 310 | if (!ret) { DSAerr(DSA_F_DSA_SIGN_SETUP, ERR_R_BN_LIB); BN_clear_free(r); } if (ctx_in == NULL) BN_CTX_free(ctx); BN_clear_free(&k); | < | 259 260 261 262 263 264 265 266 267 268 269 270 271 272 | if (!ret) { DSAerr(DSA_F_DSA_SIGN_SETUP, ERR_R_BN_LIB); BN_clear_free(r); } if (ctx_in == NULL) BN_CTX_free(ctx); BN_clear_free(&k); return ret; } static int dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig, DSA *dsa) { BN_CTX *ctx; |
︙ | ︙ | |||
382 383 384 385 386 387 388 | if (dsa->flags & DSA_FLAG_CACHE_MONT_P) { mont = BN_MONT_CTX_set_locked(&dsa->method_mont_p, CRYPTO_LOCK_DSA, dsa->p, ctx); if (!mont) goto err; } | > > > > > | | > > > < < | | 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 | if (dsa->flags & DSA_FLAG_CACHE_MONT_P) { mont = BN_MONT_CTX_set_locked(&dsa->method_mont_p, CRYPTO_LOCK_DSA, dsa->p, ctx); if (!mont) goto err; } if (dsa->meth->dsa_mod_exp != NULL) { if (!dsa->meth->dsa_mod_exp(dsa, &t1, dsa->g, &u1, dsa->pub_key, &u2, dsa->p, ctx, mont)) goto err; } else { if (!BN_mod_exp2_mont(&t1, dsa->g, &u1, dsa->pub_key, &u2, dsa->p, ctx, mont)) goto err; } /* BN_copy(&u1,&t1); */ /* let u1 = u1 mod q */ if (!BN_mod(&u1, &t1, dsa->q, ctx)) goto err; /* V is now in u1. If the signature is correct, it will be * equal to R. */ ret = BN_ucmp(&u1, sig->r) == 0; err: if (ret < 0) DSAerr(DSA_F_DSA_DO_VERIFY, ERR_R_BN_LIB); BN_CTX_free(ctx); BN_free(&u1); BN_free(&u2); BN_free(&t1); return ret; } |
︙ | ︙ |
Changes to jni/libressl/crypto/ec/ec2_mult.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ec2_mult.c,v 1.7 2015/02/09 15:49:22 jsing Exp $ */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * * The Elliptic Curve Public-Key Crypto Library (ECC Code) included * herein is developed by SUN MICROSYSTEMS, INC., and is contributed * to the OpenSSL project. * |
︙ | ︙ | |||
79 80 81 82 83 84 85 | /* Compute the x-coordinate x/z for the point 2*(x/z) in Montgomery projective * coordinates. * Uses algorithm Mdouble in appendix of * Lopez, J. and Dahab, R. "Fast multiplication on elliptic curves over * GF(2^m) without precomputation" (CHES '99, LNCS 1717). * modified to not require precomputation of c=b^{2^{m-1}}. */ | | | 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | /* Compute the x-coordinate x/z for the point 2*(x/z) in Montgomery projective * coordinates. * Uses algorithm Mdouble in appendix of * Lopez, J. and Dahab, R. "Fast multiplication on elliptic curves over * GF(2^m) without precomputation" (CHES '99, LNCS 1717). * modified to not require precomputation of c=b^{2^{m-1}}. */ static int gf2m_Mdouble(const EC_GROUP *group, BIGNUM *x, BIGNUM *z, BN_CTX *ctx) { BIGNUM *t1; int ret = 0; /* Since Mdouble is static we can guarantee that ctx != NULL. */ BN_CTX_start(ctx); |
︙ | ︙ | |||
118 119 120 121 122 123 124 | /* Compute the x-coordinate x1/z1 for the point (x1/z1)+(x2/x2) in Montgomery * projective coordinates. * Uses algorithm Madd in appendix of * Lopez, J. and Dahab, R. "Fast multiplication on elliptic curves over * GF(2^m) without precomputation" (CHES '99, LNCS 1717). */ | | | 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | /* Compute the x-coordinate x1/z1 for the point (x1/z1)+(x2/x2) in Montgomery * projective coordinates. * Uses algorithm Madd in appendix of * Lopez, J. and Dahab, R. "Fast multiplication on elliptic curves over * GF(2^m) without precomputation" (CHES '99, LNCS 1717). */ static int gf2m_Madd(const EC_GROUP *group, const BIGNUM *x, BIGNUM *x1, BIGNUM *z1, const BIGNUM *x2, const BIGNUM *z2, BN_CTX *ctx) { BIGNUM *t1, *t2; int ret = 0; /* Since Madd is static we can guarantee that ctx != NULL. */ |
︙ | ︙ | |||
165 166 167 168 169 170 171 | * Lopez, J. and Dahab, R. "Fast multiplication on elliptic curves over * GF(2^m) without precomputation" (CHES '99, LNCS 1717). * Returns: * 0 on error * 1 if return value should be the point at infinity * 2 otherwise */ | | | 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | * Lopez, J. and Dahab, R. "Fast multiplication on elliptic curves over * GF(2^m) without precomputation" (CHES '99, LNCS 1717). * Returns: * 0 on error * 1 if return value should be the point at infinity * 2 otherwise */ static int gf2m_Mxy(const EC_GROUP *group, const BIGNUM *x, const BIGNUM *y, BIGNUM *x1, BIGNUM *z1, BIGNUM *x2, BIGNUM *z2, BN_CTX *ctx) { BIGNUM *t3, *t4, *t5; int ret = 0; if (BN_is_zero(z1)) { |
︙ | ︙ | |||
254 255 256 257 258 259 260 | * Uses a modified algorithm 2P of * Lopez, J. and Dahab, R. "Fast multiplication on elliptic curves over * GF(2^m) without precomputation" (CHES '99, LNCS 1717). * * To protect against side-channel attack the function uses constant time swap, * avoiding conditional branches. */ | | | 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 | * Uses a modified algorithm 2P of * Lopez, J. and Dahab, R. "Fast multiplication on elliptic curves over * GF(2^m) without precomputation" (CHES '99, LNCS 1717). * * To protect against side-channel attack the function uses constant time swap, * avoiding conditional branches. */ static int ec_GF2m_montgomery_point_multiply(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar, const EC_POINT *point, BN_CTX *ctx) { BIGNUM *x1, *x2, *z1, *z2; int ret = 0, i; BN_ULONG mask, word; |
︙ | ︙ | |||
285 286 287 288 289 290 291 | goto err; if ((z1 = BN_CTX_get(ctx)) == NULL) goto err; x2 = &r->X; z2 = &r->Y; | | > | > | > | > | 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 | goto err; if ((z1 = BN_CTX_get(ctx)) == NULL) goto err; x2 = &r->X; z2 = &r->Y; if (!bn_wexpand(x1, group->field.top)) goto err; if (!bn_wexpand(z1, group->field.top)) goto err; if (!bn_wexpand(x2, group->field.top)) goto err; if (!bn_wexpand(z2, group->field.top)) goto err; if (!BN_GF2m_mod_arr(x1, &point->X, group->poly)) goto err; /* x1 = x */ if (!BN_one(z1)) goto err; /* z1 = 1 */ if (!group->meth->field_sqr(group, z2, x1, ctx)) goto err; /* z2 = x1^2 = x^2 */ |
︙ | ︙ | |||
358 359 360 361 362 363 364 | } /* Computes the sum * scalar*group->generator + scalars[0]*points[0] + ... + scalars[num-1]*points[num-1] * gracefully ignoring NULL scalar values. */ | | | 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 | } /* Computes the sum * scalar*group->generator + scalars[0]*points[0] + ... + scalars[num-1]*points[num-1] * gracefully ignoring NULL scalar values. */ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar, size_t num, const EC_POINT *points[], const BIGNUM *scalars[], BN_CTX *ctx) { BN_CTX *new_ctx = NULL; int ret = 0; size_t i; EC_POINT *p = NULL; |
︙ | ︙ | |||
427 428 429 430 431 432 433 | return ret; } /* Precomputation for point multiplication: fall back to wNAF methods * because ec_GF2m_simple_mul() uses ec_wNAF_mul() if appropriate */ | | | | 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 | return ret; } /* Precomputation for point multiplication: fall back to wNAF methods * because ec_GF2m_simple_mul() uses ec_wNAF_mul() if appropriate */ int ec_GF2m_precompute_mult(EC_GROUP * group, BN_CTX * ctx) { return ec_wNAF_precompute_mult(group, ctx); } int ec_GF2m_have_precompute_mult(const EC_GROUP * group) { return ec_wNAF_have_precompute_mult(group); } #endif |
Changes to jni/libressl/crypto/ec/ec_asn1.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ec_asn1.c,v 1.21 2015/10/16 15:15:39 jsing Exp $ */ /* * Written by Nils Larsch for the OpenSSL project. */ /* ==================================================================== * Copyright (c) 2000-2003 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
228 229 230 231 232 233 234 | .templates = X9_62_PENTANOMIAL_seq_tt, .tcount = sizeof(X9_62_PENTANOMIAL_seq_tt) / sizeof(ASN1_TEMPLATE), .funcs = NULL, .size = sizeof(X9_62_PENTANOMIAL), .sname = "X9_62_PENTANOMIAL", }; | > | | 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | .templates = X9_62_PENTANOMIAL_seq_tt, .tcount = sizeof(X9_62_PENTANOMIAL_seq_tt) / sizeof(ASN1_TEMPLATE), .funcs = NULL, .size = sizeof(X9_62_PENTANOMIAL), .sname = "X9_62_PENTANOMIAL", }; X9_62_PENTANOMIAL *X9_62_PENTANOMIAL_new(void); void X9_62_PENTANOMIAL_free(X9_62_PENTANOMIAL *a); X9_62_PENTANOMIAL * X9_62_PENTANOMIAL_new(void) { return (X9_62_PENTANOMIAL*)ASN1_item_new(&X9_62_PENTANOMIAL_it); } |
︙ | ︙ | |||
329 330 331 332 333 334 335 | .utype = V_ASN1_SEQUENCE, .templates = X9_62_CHARACTERISTIC_TWO_seq_tt, .tcount = sizeof(X9_62_CHARACTERISTIC_TWO_seq_tt) / sizeof(ASN1_TEMPLATE), .funcs = NULL, .size = sizeof(X9_62_CHARACTERISTIC_TWO), .sname = "X9_62_CHARACTERISTIC_TWO", }; | > | | 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 | .utype = V_ASN1_SEQUENCE, .templates = X9_62_CHARACTERISTIC_TWO_seq_tt, .tcount = sizeof(X9_62_CHARACTERISTIC_TWO_seq_tt) / sizeof(ASN1_TEMPLATE), .funcs = NULL, .size = sizeof(X9_62_CHARACTERISTIC_TWO), .sname = "X9_62_CHARACTERISTIC_TWO", }; X9_62_CHARACTERISTIC_TWO *X9_62_CHARACTERISTIC_TWO_new(void); void X9_62_CHARACTERISTIC_TWO_free(X9_62_CHARACTERISTIC_TWO *a); X9_62_CHARACTERISTIC_TWO * X9_62_CHARACTERISTIC_TWO_new(void) { return (X9_62_CHARACTERISTIC_TWO*)ASN1_item_new(&X9_62_CHARACTERISTIC_TWO_it); } |
︙ | ︙ | |||
500 501 502 503 504 505 506 | .utype = V_ASN1_SEQUENCE, .templates = ECPARAMETERS_seq_tt, .tcount = sizeof(ECPARAMETERS_seq_tt) / sizeof(ASN1_TEMPLATE), .funcs = NULL, .size = sizeof(ECPARAMETERS), .sname = "ECPARAMETERS", }; | > | | 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 | .utype = V_ASN1_SEQUENCE, .templates = ECPARAMETERS_seq_tt, .tcount = sizeof(ECPARAMETERS_seq_tt) / sizeof(ASN1_TEMPLATE), .funcs = NULL, .size = sizeof(ECPARAMETERS), .sname = "ECPARAMETERS", }; ECPARAMETERS *ECPARAMETERS_new(void); void ECPARAMETERS_free(ECPARAMETERS *a); ECPARAMETERS * ECPARAMETERS_new(void) { return (ECPARAMETERS*)ASN1_item_new(&ECPARAMETERS_it); } |
︙ | ︙ | |||
547 548 549 550 551 552 553 | .utype = offsetof(ECPKPARAMETERS, type), .templates = ECPKPARAMETERS_ch_tt, .tcount = sizeof(ECPKPARAMETERS_ch_tt) / sizeof(ASN1_TEMPLATE), .funcs = NULL, .size = sizeof(ECPKPARAMETERS), .sname = "ECPKPARAMETERS", }; | | > | > > | 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 | .utype = offsetof(ECPKPARAMETERS, type), .templates = ECPKPARAMETERS_ch_tt, .tcount = sizeof(ECPKPARAMETERS_ch_tt) / sizeof(ASN1_TEMPLATE), .funcs = NULL, .size = sizeof(ECPKPARAMETERS), .sname = "ECPKPARAMETERS", }; ECPKPARAMETERS *ECPKPARAMETERS_new(void); void ECPKPARAMETERS_free(ECPKPARAMETERS *a); ECPKPARAMETERS *d2i_ECPKPARAMETERS(ECPKPARAMETERS **a, const unsigned char **in, long len); int i2d_ECPKPARAMETERS(const ECPKPARAMETERS *a, unsigned char **out); ECPKPARAMETERS * d2i_ECPKPARAMETERS(ECPKPARAMETERS **a, const unsigned char **in, long len) { return (ECPKPARAMETERS *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, &ECPKPARAMETERS_it); } |
︙ | ︙ | |||
615 616 617 618 619 620 621 | .utype = V_ASN1_SEQUENCE, .templates = EC_PRIVATEKEY_seq_tt, .tcount = sizeof(EC_PRIVATEKEY_seq_tt) / sizeof(ASN1_TEMPLATE), .funcs = NULL, .size = sizeof(EC_PRIVATEKEY), .sname = "EC_PRIVATEKEY", }; | | > | > > | 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 | .utype = V_ASN1_SEQUENCE, .templates = EC_PRIVATEKEY_seq_tt, .tcount = sizeof(EC_PRIVATEKEY_seq_tt) / sizeof(ASN1_TEMPLATE), .funcs = NULL, .size = sizeof(EC_PRIVATEKEY), .sname = "EC_PRIVATEKEY", }; EC_PRIVATEKEY *EC_PRIVATEKEY_new(void); void EC_PRIVATEKEY_free(EC_PRIVATEKEY *a); EC_PRIVATEKEY *d2i_EC_PRIVATEKEY(EC_PRIVATEKEY **a, const unsigned char **in, long len); int i2d_EC_PRIVATEKEY(const EC_PRIVATEKEY *a, unsigned char **out); EC_PRIVATEKEY * d2i_EC_PRIVATEKEY(EC_PRIVATEKEY **a, const unsigned char **in, long len) { return (EC_PRIVATEKEY *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, &EC_PRIVATEKEY_it); } |
︙ | ︙ | |||
1006 1007 1008 1009 1010 1011 1012 | ASN1_OBJECT_free(ret->value.named_curve); else if (ret->type == 1 && ret->value.parameters) ECPARAMETERS_free(ret->value.parameters); } if (EC_GROUP_get_asn1_flag(group)) { /* | | | 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 | ASN1_OBJECT_free(ret->value.named_curve); else if (ret->type == 1 && ret->value.parameters) ECPARAMETERS_free(ret->value.parameters); } if (EC_GROUP_get_asn1_flag(group)) { /* * use the asn1 OID to describe the elliptic curve * parameters */ tmp = EC_GROUP_get_curve_name(group); if (tmp) { ret->type = 0; if ((ret->value.named_curve = OBJ_nid2obj(tmp)) == NULL) ok = 0; |
︙ | ︙ | |||
1363 1364 1365 1366 1367 1368 1369 | ECerr(EC_F_D2I_ECPRIVATEKEY, ERR_R_EC_LIB); goto err; } ret->version = priv_key->version; if (priv_key->privateKey) { ret->priv_key = BN_bin2bn( | | | | 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 | ECerr(EC_F_D2I_ECPRIVATEKEY, ERR_R_EC_LIB); goto err; } ret->version = priv_key->version; if (priv_key->privateKey) { ret->priv_key = BN_bin2bn( ASN1_STRING_data(priv_key->privateKey), ASN1_STRING_length(priv_key->privateKey), ret->priv_key); if (ret->priv_key == NULL) { ECerr(EC_F_D2I_ECPRIVATEKEY, ERR_R_BN_LIB); goto err; } } else { |
︙ | ︙ | |||
1387 1388 1389 1390 1391 1392 1393 | EC_POINT_clear_free(ret->pub_key); ret->pub_key = EC_POINT_new(ret->group); if (ret->pub_key == NULL) { ECerr(EC_F_D2I_ECPRIVATEKEY, ERR_R_EC_LIB); goto err; } | | | | 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 | EC_POINT_clear_free(ret->pub_key); ret->pub_key = EC_POINT_new(ret->group); if (ret->pub_key == NULL) { ECerr(EC_F_D2I_ECPRIVATEKEY, ERR_R_EC_LIB); goto err; } pub_oct = ASN1_STRING_data(priv_key->publicKey); pub_oct_len = ASN1_STRING_length(priv_key->publicKey); /* save the point conversion form */ ret->conv_form = (point_conversion_form_t) (pub_oct[0] & ~0x01); if (!EC_POINT_oct2point(ret->group, ret->pub_key, pub_oct, pub_oct_len, NULL)) { ECerr(EC_F_D2I_ECPRIVATEKEY, ERR_R_EC_LIB); goto err; } |
︙ | ︙ | |||
1455 1456 1457 1458 1459 1460 1461 | if ((priv_key->parameters = ec_asn1_group2pkparameters( a->group, priv_key->parameters)) == NULL) { ECerr(EC_F_I2D_ECPRIVATEKEY, ERR_R_EC_LIB); goto err; } } if (!(a->enc_flag & EC_PKEY_NO_PUBKEY) && a->pub_key != NULL) { | | | 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 | if ((priv_key->parameters = ec_asn1_group2pkparameters( a->group, priv_key->parameters)) == NULL) { ECerr(EC_F_I2D_ECPRIVATEKEY, ERR_R_EC_LIB); goto err; } } if (!(a->enc_flag & EC_PKEY_NO_PUBKEY) && a->pub_key != NULL) { priv_key->publicKey = ASN1_BIT_STRING_new(); if (priv_key->publicKey == NULL) { ECerr(EC_F_I2D_ECPRIVATEKEY, ERR_R_MALLOC_FAILURE); goto err; } tmp_len = EC_POINT_point2oct(a->group, a->pub_key, a->conv_form, NULL, 0, NULL); |
︙ | ︙ |
Changes to jni/libressl/crypto/ec/ec_curve.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ec_curve.c,v 1.12 2015/06/20 13:26:08 jsing Exp $ */ /* * Written by Nils Larsch for the OpenSSL project. */ /* ==================================================================== * Copyright (c) 1998-2010 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
2205 2206 2207 2208 2209 2210 2211 | } }; #endif /* These curves were added by Annie Yousar <a.yousar@informatik.hu-berlin.de> * For the definition of RFC 5639 curves see | | | 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 | } }; #endif /* These curves were added by Annie Yousar <a.yousar@informatik.hu-berlin.de> * For the definition of RFC 5639 curves see * https://www.ietf.org/rfc/rfc5639.txt * These curves are generated verifiable at random, nevertheless the seed is * omitted as parameter because the generation mechanism is different from * those defined in ANSI X9.62. */ static const struct { EC_CURVE_DATA h; |
︙ | ︙ |
Changes to jni/libressl/crypto/ec/ec_key.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ec_key.c,v 1.11 2015/02/09 15:49:22 jsing Exp $ */ /* * Written by Nils Larsch for the OpenSSL project. */ /* ==================================================================== * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
118 119 120 121 122 123 124 | EC_GROUP_free(r->group); EC_POINT_free(r->pub_key); BN_clear_free(r->priv_key); EC_EX_DATA_free_all_data(&r->method_data); | | | 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | EC_GROUP_free(r->group); EC_POINT_free(r->pub_key); BN_clear_free(r->priv_key); EC_EX_DATA_free_all_data(&r->method_data); explicit_bzero((void *) r, sizeof(EC_KEY)); free(r); } EC_KEY * EC_KEY_copy(EC_KEY * dest, const EC_KEY * src) { |
︙ | ︙ |
Changes to jni/libressl/crypto/ec/ec_lib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ec_lib.c,v 1.19 2015/09/10 15:56:25 jsing Exp $ */ /* * Originally written by Bodo Moeller for the OpenSSL project. */ /* ==================================================================== * Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
148 149 150 151 152 153 154 | EC_EX_DATA_clear_free_all_data(&group->extra_data); EC_POINT_clear_free(group->generator); BN_clear_free(&group->order); BN_clear_free(&group->cofactor); if (group->seed) { | | | | 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | EC_EX_DATA_clear_free_all_data(&group->extra_data); EC_POINT_clear_free(group->generator); BN_clear_free(&group->order); BN_clear_free(&group->cofactor); if (group->seed) { explicit_bzero(group->seed, group->seed_len); free(group->seed); } explicit_bzero(group, sizeof *group); free(group); } int EC_GROUP_copy(EC_GROUP * dest, const EC_GROUP * src) { |
︙ | ︙ | |||
750 751 752 753 754 755 756 | if (!point) return; if (point->meth->point_clear_finish != 0) point->meth->point_clear_finish(point); else if (point->meth->point_finish != 0) point->meth->point_finish(point); | | | 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 | if (!point) return; if (point->meth->point_clear_finish != 0) point->meth->point_clear_finish(point); else if (point->meth->point_finish != 0) point->meth->point_finish(point); explicit_bzero(point, sizeof *point); free(point); } int EC_POINT_copy(EC_POINT * dest, const EC_POINT * src) { |
︙ | ︙ | |||
1098 1099 1100 1101 1102 1103 1104 | if (group->meth->have_precompute_mult != 0) return group->meth->have_precompute_mult(group); else return 0; /* cannot tell whether precomputation has * been performed */ } | > > > > > > > > > > > > > > > > | 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 | if (group->meth->have_precompute_mult != 0) return group->meth->have_precompute_mult(group); else return 0; /* cannot tell whether precomputation has * been performed */ } EC_KEY * ECParameters_dup(EC_KEY *key) { unsigned char *p = NULL; EC_KEY *k = NULL; int len; if (key == NULL) return (NULL); if ((len = i2d_ECParameters(key, &p)) > 0) k = d2i_ECParameters(NULL, (const unsigned char **)&p, len); return (k); } |
Changes to jni/libressl/crypto/ec/ec_mult.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ec_mult.c,v 1.18 2015/02/15 08:44:35 miod Exp $ */ /* * Originally written by Bodo Moeller and Nils Larsch for the OpenSSL project. */ /* ==================================================================== * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
172 173 174 175 176 177 178 | return; if (pre->points) { EC_POINT **p; for (p = pre->points; *p != NULL; p++) { EC_POINT_clear_free(*p); | | | | 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | return; if (pre->points) { EC_POINT **p; for (p = pre->points; *p != NULL; p++) { EC_POINT_clear_free(*p); explicit_bzero(p, sizeof *p); } free(pre->points); } explicit_bzero(pre, sizeof *pre); free(pre); } /* Determine the modified width-(w+1) Non-Adjacent Form (wNAF) of 'scalar'. |
︙ | ︙ |
Changes to jni/libressl/crypto/ecdh/ech_err.c.
|
| | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /* $OpenBSD: ech_err.c,v 1.4 2015/09/13 10:46:20 jsing Exp $ */ /* ==================================================================== * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this |
︙ | ︙ | |||
67 68 69 70 71 72 73 | /* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR #define ERR_FUNC(func) ERR_PACK(ERR_LIB_ECDH,func,0) #define ERR_REASON(reason) ERR_PACK(ERR_LIB_ECDH,0,reason) | | < | | | | | | < | > | | | | | > | | < | < | | | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | /* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR #define ERR_FUNC(func) ERR_PACK(ERR_LIB_ECDH,func,0) #define ERR_REASON(reason) ERR_PACK(ERR_LIB_ECDH,0,reason) static ERR_STRING_DATA ECDH_str_functs[]= { {ERR_FUNC(ECDH_F_ECDH_CHECK), "ECDH_CHECK"}, {ERR_FUNC(ECDH_F_ECDH_COMPUTE_KEY), "ECDH_compute_key"}, {ERR_FUNC(ECDH_F_ECDH_DATA_NEW_METHOD), "ECDH_DATA_new_method"}, {0, NULL} }; static ERR_STRING_DATA ECDH_str_reasons[]= { {ERR_REASON(ECDH_R_KDF_FAILED) , "KDF failed"}, {ERR_REASON(ECDH_R_KEY_TRUNCATION), "key would be truncated"}, {ERR_REASON(ECDH_R_NON_FIPS_METHOD) , "non fips method"}, {ERR_REASON(ECDH_R_NO_PRIVATE_VALUE) , "no private value"}, {ERR_REASON(ECDH_R_POINT_ARITHMETIC_FAILURE), "point arithmetic failure"}, {0, NULL} }; #endif void ERR_load_ECDH_strings(void) { #ifndef OPENSSL_NO_ERR if (ERR_func_error_string(ECDH_str_functs[0].error) == NULL) { ERR_load_strings(0, ECDH_str_functs); ERR_load_strings(0, ECDH_str_reasons); } #endif } |
Changes to jni/libressl/crypto/ecdh/ech_key.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ech_key.c,v 1.5 2015/09/13 14:11:57 jsing Exp $ */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * * The Elliptic Curve Public-Key Crypto Library (ECC Code) included * herein is developed by SUN MICROSYSTEMS, INC., and is contributed * to the OpenSSL project. * |
︙ | ︙ | |||
17 18 19 20 21 22 23 | * Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright | | | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | * Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this |
︙ | ︙ | |||
63 64 65 66 67 68 69 70 71 | * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include "ech_locl.h" | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 | * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <limits.h> #include <string.h> #include <openssl/opensslconf.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/obj_mac.h> #include <openssl/sha.h> #include "ech_locl.h" static int ecdh_compute_key(void *out, size_t len, const EC_POINT *pub_key, EC_KEY *ecdh, void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen)); /* * This implementation is based on the following primitives in the IEEE 1363 * standard: * - ECKAS-DH1 * - ECSVDP-DH * Finally an optional KDF is applied. */ static int ecdh_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh, void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen)) { BN_CTX *ctx; EC_POINT *tmp = NULL; BIGNUM *x = NULL, *y = NULL; const BIGNUM *priv_key; const EC_GROUP* group; int ret = -1; size_t buflen, len; unsigned char *buf = NULL; if (outlen > INT_MAX) { /* Sort of, anyway. */ ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ERR_R_MALLOC_FAILURE); return -1; } if ((ctx = BN_CTX_new()) == NULL) goto err; BN_CTX_start(ctx); if ((x = BN_CTX_get(ctx)) == NULL) goto err; if ((y = BN_CTX_get(ctx)) == NULL) goto err; priv_key = EC_KEY_get0_private_key(ecdh); if (priv_key == NULL) { ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ECDH_R_NO_PRIVATE_VALUE); goto err; } group = EC_KEY_get0_group(ecdh); if ((tmp = EC_POINT_new(group)) == NULL) { ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ERR_R_MALLOC_FAILURE); goto err; } if (!EC_POINT_mul(group, tmp, NULL, pub_key, priv_key, ctx)) { ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ECDH_R_POINT_ARITHMETIC_FAILURE); goto err; } if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) == NID_X9_62_prime_field) { if (!EC_POINT_get_affine_coordinates_GFp(group, tmp, x, y, ctx)) { ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ECDH_R_POINT_ARITHMETIC_FAILURE); goto err; } } #ifndef OPENSSL_NO_EC2M else { if (!EC_POINT_get_affine_coordinates_GF2m(group, tmp, x, y, ctx)) { ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ECDH_R_POINT_ARITHMETIC_FAILURE); goto err; } } #endif buflen = ECDH_size(ecdh); len = BN_num_bytes(x); if (len > buflen) { ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ERR_R_INTERNAL_ERROR); goto err; } if (KDF == NULL && outlen < buflen) { /* The resulting key would be truncated. */ ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ECDH_R_KEY_TRUNCATION); goto err; } if ((buf = malloc(buflen)) == NULL) { ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ERR_R_MALLOC_FAILURE); goto err; } memset(buf, 0, buflen - len); if (len != (size_t)BN_bn2bin(x, buf + buflen - len)) { ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ERR_R_BN_LIB); goto err; } if (KDF != NULL) { if (KDF(buf, buflen, out, &outlen) == NULL) { ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ECDH_R_KDF_FAILED); goto err; } ret = outlen; } else { /* No KDF, just copy out the key and zero the rest. */ if (outlen > buflen) { memset((void *)((uintptr_t)out + buflen), 0, outlen - buflen); outlen = buflen; } memcpy(out, buf, outlen); ret = outlen; } err: EC_POINT_free(tmp); if (ctx) BN_CTX_end(ctx); BN_CTX_free(ctx); free(buf); return (ret); } static ECDH_METHOD openssl_ecdh_meth = { .name = "OpenSSL ECDH method", .compute_key = ecdh_compute_key }; const ECDH_METHOD * ECDH_OpenSSL(void) { return &openssl_ecdh_meth; } int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *eckey, void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen)) { ECDH_DATA *ecdh = ecdh_check(eckey); if (ecdh == NULL) return 0; return ecdh->meth->compute_key(out, outlen, pub_key, eckey, KDF); } |
Changes to jni/libressl/crypto/ecdh/ech_lib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ech_lib.c,v 1.10 2015/09/13 10:46:20 jsing Exp $ */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * * The Elliptic Curve Public-Key Crypto Library (ECC Code) included * herein is developed by SUN MICROSYSTEMS, INC., and is contributed * to the OpenSSL project. * |
︙ | ︙ | |||
17 18 19 20 21 22 23 | * Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright | | | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | * Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this |
︙ | ︙ | |||
79 80 81 82 83 84 85 | static const ECDH_METHOD *default_ECDH_method = NULL; static void *ecdh_data_new(void); static void *ecdh_data_dup(void *); static void ecdh_data_free(void *); | > | | | | > | | < | | > | | | < | | | | > | | | < | | | < | < | | | | | > | | > | > | | | | > | | | | | < | | < | < | | > | | | | | > | | | | > | | | | > > > > > > | 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 | static const ECDH_METHOD *default_ECDH_method = NULL; static void *ecdh_data_new(void); static void *ecdh_data_dup(void *); static void ecdh_data_free(void *); void ECDH_set_default_method(const ECDH_METHOD *meth) { default_ECDH_method = meth; } const ECDH_METHOD * ECDH_get_default_method(void) { if (!default_ECDH_method) { default_ECDH_method = ECDH_OpenSSL(); } return default_ECDH_method; } int ECDH_set_method(EC_KEY *eckey, const ECDH_METHOD *meth) { ECDH_DATA *ecdh; ecdh = ecdh_check(eckey); if (ecdh == NULL) return 0; #ifndef OPENSSL_NO_ENGINE if (ecdh->engine) { ENGINE_finish(ecdh->engine); ecdh->engine = NULL; } #endif ecdh->meth = meth; return 1; } static ECDH_DATA * ECDH_DATA_new_method(ENGINE *engine) { ECDH_DATA *ret; ret = malloc(sizeof(ECDH_DATA)); if (ret == NULL) { ECDHerr(ECDH_F_ECDH_DATA_NEW_METHOD, ERR_R_MALLOC_FAILURE); return (NULL); } ret->init = NULL; ret->meth = ECDH_get_default_method(); ret->engine = engine; #ifndef OPENSSL_NO_ENGINE if (!ret->engine) ret->engine = ENGINE_get_default_ECDH(); if (ret->engine) { ret->meth = ENGINE_get_ECDH(ret->engine); if (!ret->meth) { ECDHerr(ECDH_F_ECDH_DATA_NEW_METHOD, ERR_R_ENGINE_LIB); ENGINE_finish(ret->engine); free(ret); return NULL; } } #endif ret->flags = ret->meth->flags; CRYPTO_new_ex_data(CRYPTO_EX_INDEX_ECDH, ret, &ret->ex_data); return (ret); } static void * ecdh_data_new(void) { return (void *)ECDH_DATA_new_method(NULL); } static void * ecdh_data_dup(void *data) { ECDH_DATA *r = (ECDH_DATA *)data; /* XXX: dummy operation */ if (r == NULL) return NULL; return (void *)ecdh_data_new(); } void ecdh_data_free(void *data) { ECDH_DATA *r = (ECDH_DATA *)data; #ifndef OPENSSL_NO_ENGINE if (r->engine) ENGINE_finish(r->engine); #endif CRYPTO_free_ex_data(CRYPTO_EX_INDEX_ECDH, r, &r->ex_data); explicit_bzero((void *)r, sizeof(ECDH_DATA)); free(r); } ECDH_DATA * ecdh_check(EC_KEY *key) { ECDH_DATA *ecdh_data; void *data = EC_KEY_get_key_method_data(key, ecdh_data_dup, ecdh_data_free, ecdh_data_free); if (data == NULL) { ecdh_data = (ECDH_DATA *)ecdh_data_new(); if (ecdh_data == NULL) return NULL; data = EC_KEY_insert_key_method_data(key, (void *)ecdh_data, ecdh_data_dup, ecdh_data_free, ecdh_data_free); if (data != NULL) { /* Another thread raced us to install the key_method * data and won. */ ecdh_data_free(ecdh_data); ecdh_data = (ECDH_DATA *)data; } } else ecdh_data = (ECDH_DATA *)data; return ecdh_data; } int ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) { return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ECDH, argl, argp, new_func, dup_func, free_func); } int ECDH_set_ex_data(EC_KEY *d, int idx, void *arg) { ECDH_DATA *ecdh; ecdh = ecdh_check(d); if (ecdh == NULL) return 0; return (CRYPTO_set_ex_data(&ecdh->ex_data, idx, arg)); } void * ECDH_get_ex_data(EC_KEY *d, int idx) { ECDH_DATA *ecdh; ecdh = ecdh_check(d); if (ecdh == NULL) return NULL; return (CRYPTO_get_ex_data(&ecdh->ex_data, idx)); } int ECDH_size(const EC_KEY *d) { return ((EC_GROUP_get_degree(EC_KEY_get0_group(d)) + 7) / 8); } |
Changes to jni/libressl/crypto/ecdh/ech_locl.h.
|
| | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /* $OpenBSD: ech_locl.h,v 1.3 2015/02/07 13:19:15 doug Exp $ */ /* ==================================================================== * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this |
︙ | ︙ | |||
58 59 60 61 62 63 64 | #include <openssl/ecdh.h> #ifdef __cplusplus extern "C" { #endif | | < | | | 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <openssl/ecdh.h> #ifdef __cplusplus extern "C" { #endif struct ecdh_method { const char *name; int (*compute_key)(void *key, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh, void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen)); int flags; char *app_data; }; /* If this flag is set the ECDH method is FIPS compliant and can be used * in FIPS mode. This is set in the validated module method. If an * application sets this flag in its own methods it is its responsibility * to ensure the result is compliant. */ |
︙ | ︙ |
Deleted jni/libressl/crypto/ecdh/ech_ossl.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/crypto/ecdsa/ecs_asn1.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ecs_asn1.c,v 1.7 2015/10/16 15:12:30 jsing Exp $ */ /* ==================================================================== * Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * |
︙ | ︙ | |||
80 81 82 83 84 85 86 | .templates = ECDSA_SIG_seq_tt, .tcount = sizeof(ECDSA_SIG_seq_tt) / sizeof(ASN1_TEMPLATE), .funcs = NULL, .size = sizeof(ECDSA_SIG), .sname = "ECDSA_SIG", }; | | | > > | 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | .templates = ECDSA_SIG_seq_tt, .tcount = sizeof(ECDSA_SIG_seq_tt) / sizeof(ASN1_TEMPLATE), .funcs = NULL, .size = sizeof(ECDSA_SIG), .sname = "ECDSA_SIG", }; ECDSA_SIG *ECDSA_SIG_new(void); void ECDSA_SIG_free(ECDSA_SIG *a); ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **a, const unsigned char **in, long len); int i2d_ECDSA_SIG(const ECDSA_SIG *a, unsigned char **out); ECDSA_SIG * d2i_ECDSA_SIG(ECDSA_SIG **a, const unsigned char **in, long len) { return (ECDSA_SIG *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, &ECDSA_SIG_it); } |
︙ | ︙ |
Changes to jni/libressl/crypto/ecdsa/ecs_lib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ecs_lib.c,v 1.9 2015/02/08 13:35:07 jsing Exp $ */ /* ==================================================================== * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * |
︙ | ︙ | |||
166 167 168 169 170 171 172 | #ifndef OPENSSL_NO_ENGINE if (r->engine) ENGINE_finish(r->engine); #endif CRYPTO_free_ex_data(CRYPTO_EX_INDEX_ECDSA, r, &r->ex_data); | | | 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | #ifndef OPENSSL_NO_ENGINE if (r->engine) ENGINE_finish(r->engine); #endif CRYPTO_free_ex_data(CRYPTO_EX_INDEX_ECDSA, r, &r->ex_data); explicit_bzero((void *)r, sizeof(ECDSA_DATA)); free(r); } ECDSA_DATA * ecdsa_check(EC_KEY *key) { |
︙ | ︙ |
Changes to jni/libressl/crypto/engine/eng_openssl.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: eng_openssl.c,v 1.11 2015/08/28 01:06:09 beck Exp $ */ /* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL * project 2000. */ /* ==================================================================== * Copyright (c) 1999-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
101 102 103 104 105 106 107 | /* Now check what of those algorithms are actually enabled */ #ifdef OPENSSL_NO_RC4 #undef TEST_ENG_OPENSSL_RC4 #undef TEST_ENG_OPENSSL_RC4_OTHERS #undef TEST_ENG_OPENSSL_RC4_P_INIT #undef TEST_ENG_OPENSSL_RC4_P_CIPHER #endif | | | 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | /* Now check what of those algorithms are actually enabled */ #ifdef OPENSSL_NO_RC4 #undef TEST_ENG_OPENSSL_RC4 #undef TEST_ENG_OPENSSL_RC4_OTHERS #undef TEST_ENG_OPENSSL_RC4_P_INIT #undef TEST_ENG_OPENSSL_RC4_P_CIPHER #endif #if defined(OPENSSL_NO_SHA) || defined(OPENSSL_NO_SHA1) #undef TEST_ENG_OPENSSL_SHA #undef TEST_ENG_OPENSSL_SHA_OTHERS #undef TEST_ENG_OPENSSL_SHA_P_INIT #undef TEST_ENG_OPENSSL_SHA_P_UPDATE #undef TEST_ENG_OPENSSL_SHA_P_FINAL #endif |
︙ | ︙ | |||
189 190 191 192 193 194 195 | void ENGINE_load_openssl(void) { ENGINE *toadd = engine_openssl(); if (!toadd) return; | | | 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | void ENGINE_load_openssl(void) { ENGINE *toadd = engine_openssl(); if (!toadd) return; (void) ENGINE_add(toadd); /* If the "add" worked, it gets a structural reference. So either way, * we release our just-created reference. */ ENGINE_free(toadd); ERR_clear_error(); } /* This stuff is needed if this ENGINE is being compiled into a self-contained |
︙ | ︙ |
Changes to jni/libressl/crypto/evp/bio_enc.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bio_enc.c,v 1.18 2014/07/11 08:44:48 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
131 132 133 134 135 136 137 | { BIO_ENC_CTX *b; if (a == NULL) return (0); b = (BIO_ENC_CTX *)a->ptr; EVP_CIPHER_CTX_cleanup(&(b->cipher)); | | | 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | { BIO_ENC_CTX *b; if (a == NULL) return (0); b = (BIO_ENC_CTX *)a->ptr; EVP_CIPHER_CTX_cleanup(&(b->cipher)); explicit_bzero(a->ptr, sizeof(BIO_ENC_CTX)); free(a->ptr); a->ptr = NULL; a->init = 0; a->flags = 0; return (1); } |
︙ | ︙ |
Changes to jni/libressl/crypto/evp/c_all.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: c_all.c,v 1.19 2015/09/13 23:36:21 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
234 235 236 237 238 239 240 | #ifndef OPENSSL_NO_MD5 EVP_add_digest(EVP_md5()); EVP_add_digest_alias(SN_md5, "ssl2-md5"); EVP_add_digest_alias(SN_md5, "ssl3-md5"); #endif | | < | 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 | #ifndef OPENSSL_NO_MD5 EVP_add_digest(EVP_md5()); EVP_add_digest_alias(SN_md5, "ssl2-md5"); EVP_add_digest_alias(SN_md5, "ssl3-md5"); #endif #if !defined(OPENSSL_NO_SHA) #ifndef OPENSSL_NO_DSA EVP_add_digest(EVP_dss()); #endif #endif #if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1) EVP_add_digest(EVP_sha1()); EVP_add_digest_alias(SN_sha1, "ssl3-sha1"); |
︙ | ︙ |
Changes to jni/libressl/crypto/evp/e_aes.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: e_aes.c,v 1.28 2015/06/20 12:01:14 jsing Exp $ */ /* ==================================================================== * Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * |
︙ | ︙ | |||
686 687 688 689 690 691 692 | static int aes_gcm_cleanup(EVP_CIPHER_CTX *c) { EVP_AES_GCM_CTX *gctx = c->cipher_data; if (gctx->iv != c->iv) free(gctx->iv); | | | 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 | static int aes_gcm_cleanup(EVP_CIPHER_CTX *c) { EVP_AES_GCM_CTX *gctx = c->cipher_data; if (gctx->iv != c->iv) free(gctx->iv); explicit_bzero(gctx, sizeof(*gctx)); return 1; } /* increment counter (64-bit int) by 1 */ static void ctr64_inc(unsigned char *counter) { |
︙ | ︙ | |||
968 969 970 971 972 973 974 | goto err; } /* Retrieve tag */ CRYPTO_gcm128_tag(&gctx->gcm, ctx->buf, EVP_GCM_TLS_TAG_LEN); /* If tag mismatch wipe buffer */ if (memcmp(ctx->buf, in + len, EVP_GCM_TLS_TAG_LEN)) { | | | 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 | goto err; } /* Retrieve tag */ CRYPTO_gcm128_tag(&gctx->gcm, ctx->buf, EVP_GCM_TLS_TAG_LEN); /* If tag mismatch wipe buffer */ if (memcmp(ctx->buf, in + len, EVP_GCM_TLS_TAG_LEN)) { explicit_bzero(out, len); goto err; } rv = len; } err: gctx->iv_set = 0; |
︙ | ︙ | |||
1335 1336 1337 1338 1339 1340 1341 | unsigned char tag[16]; if (CRYPTO_ccm128_tag(ccm, tag, cctx->M)) { if (!memcmp(tag, ctx->buf, cctx->M)) rv = len; } } if (rv == -1) | | | 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 | unsigned char tag[16]; if (CRYPTO_ccm128_tag(ccm, tag, cctx->M)) { if (!memcmp(tag, ctx->buf, cctx->M)) rv = len; } } if (rv == -1) explicit_bzero(out, len); cctx->iv_set = 0; cctx->tag_set = 0; cctx->len_set = 0; return rv; } } |
︙ | ︙ | |||
1413 1414 1415 1416 1417 1418 1419 | } static void aead_aes_gcm_cleanup(EVP_AEAD_CTX *ctx) { struct aead_aes_gcm_ctx *gcm_ctx = ctx->aead_state; | | | 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 | } static void aead_aes_gcm_cleanup(EVP_AEAD_CTX *ctx) { struct aead_aes_gcm_ctx *gcm_ctx = ctx->aead_state; explicit_bzero(gcm_ctx, sizeof(*gcm_ctx)); free(gcm_ctx); } static int aead_aes_gcm_seal(const EVP_AEAD_CTX *ctx, unsigned char *out, size_t *out_len, size_t max_out_len, const unsigned char *nonce, size_t nonce_len, const unsigned char *in, size_t in_len, const unsigned char *ad, |
︙ | ︙ |
Changes to jni/libressl/crypto/evp/e_aes_cbc_hmac_sha1.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: e_aes_cbc_hmac_sha1.c,v 1.11 2016/05/04 14:53:29 tedu Exp $ */ /* ==================================================================== * Copyright (c) 2011-2013 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * |
︙ | ︙ | |||
501 502 503 504 505 506 507 | SHA1_Update(&key->head, hmac_key, sizeof(hmac_key)); for (i = 0; i < sizeof(hmac_key); i++) hmac_key[i] ^= 0x36 ^ 0x5c; /* opad */ SHA1_Init(&key->tail); SHA1_Update(&key->tail, hmac_key, sizeof(hmac_key)); | | | 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 | SHA1_Update(&key->head, hmac_key, sizeof(hmac_key)); for (i = 0; i < sizeof(hmac_key); i++) hmac_key[i] ^= 0x36 ^ 0x5c; /* opad */ SHA1_Init(&key->tail); SHA1_Update(&key->tail, hmac_key, sizeof(hmac_key)); explicit_bzero(hmac_key, sizeof(hmac_key)); return 1; } case EVP_CTRL_AEAD_TLS1_AAD: { unsigned char *p = ptr; unsigned int len = p[arg - 2] << 8 | p[arg - 1]; |
︙ | ︙ |
Changes to jni/libressl/crypto/evp/e_chacha20poly1305.c.
|
| | > > | 1 2 3 4 5 6 7 8 9 10 11 | /* $OpenBSD: e_chacha20poly1305.c,v 1.13 2016/04/13 13:25:05 jsing Exp $ */ /* * Copyright (c) 2015 Reyk Floter <reyk@openbsd.org> * Copyright (c) 2014, Google Inc. * * Permission to use, copy, modify, and/or 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 |
︙ | ︙ | |||
26 27 28 29 30 31 32 | #include <openssl/evp.h> #include <openssl/chacha.h> #include <openssl/poly1305.h> #include "evp_locl.h" #define POLY1305_TAG_LEN 16 | | > > > > > > > > > > | 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <openssl/evp.h> #include <openssl/chacha.h> #include <openssl/poly1305.h> #include "evp_locl.h" #define POLY1305_TAG_LEN 16 #define CHACHA20_NONCE_LEN_OLD 8 /* * The informational RFC 7539, "ChaCha20 and Poly1305 for IETF Protocols", * introduced a modified AEAD construction that is incompatible with the * common style that has been already used in TLS. The IETF version also * adds a constant (salt) that is prepended to the nonce. */ #define CHACHA20_CONSTANT_LEN 4 #define CHACHA20_IV_LEN 8 #define CHACHA20_NONCE_LEN (CHACHA20_CONSTANT_LEN + CHACHA20_IV_LEN) struct aead_chacha20_poly1305_ctx { unsigned char key[32]; unsigned char tag_len; }; static int |
︙ | ︙ | |||
67 68 69 70 71 72 73 | } static void aead_chacha20_poly1305_cleanup(EVP_AEAD_CTX *ctx) { struct aead_chacha20_poly1305_ctx *c20_ctx = ctx->aead_state; | | > | > > > > > > > > > > > > > > > > > > | > > > | | | | | | | > > > > > > > > > > > > > > > > > > | 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 | } static void aead_chacha20_poly1305_cleanup(EVP_AEAD_CTX *ctx) { struct aead_chacha20_poly1305_ctx *c20_ctx = ctx->aead_state; explicit_bzero(c20_ctx->key, sizeof(c20_ctx->key)); free(c20_ctx); } static void poly1305_update_with_length(poly1305_state *poly1305, const unsigned char *data, size_t data_len) { size_t j = data_len; unsigned char length_bytes[8]; unsigned i; for (i = 0; i < sizeof(length_bytes); i++) { length_bytes[i] = j; j >>= 8; } if (data != NULL) CRYPTO_poly1305_update(poly1305, data, data_len); CRYPTO_poly1305_update(poly1305, length_bytes, sizeof(length_bytes)); } static void poly1305_update_with_pad16(poly1305_state *poly1305, const unsigned char *data, size_t data_len) { static const unsigned char zero_pad16[16]; size_t pad_len; CRYPTO_poly1305_update(poly1305, data, data_len); /* pad16() is defined in RFC 7539 2.8.1. */ if ((pad_len = data_len % 16) == 0) return; CRYPTO_poly1305_update(poly1305, zero_pad16, 16 - pad_len); } static int aead_chacha20_poly1305_seal(const EVP_AEAD_CTX *ctx, unsigned char *out, size_t *out_len, size_t max_out_len, const unsigned char *nonce, size_t nonce_len, const unsigned char *in, size_t in_len, const unsigned char *ad, size_t ad_len) { const struct aead_chacha20_poly1305_ctx *c20_ctx = ctx->aead_state; unsigned char poly1305_key[32]; poly1305_state poly1305; const unsigned char *iv; const uint64_t in_len_64 = in_len; uint64_t ctr; /* The underlying ChaCha implementation may not overflow the block * counter into the second counter word. Therefore we disallow * individual operations that work on more than 2TB at a time. * in_len_64 is needed because, on 32-bit platforms, size_t is only * 32-bits and this produces a warning because it's always false. * Casting to uint64_t inside the conditional is not sufficient to stop * the warning. */ if (in_len_64 >= (1ULL << 32) * 64 - 64) { EVPerr(EVP_F_AEAD_CHACHA20_POLY1305_SEAL, EVP_R_TOO_LARGE); return 0; } if (max_out_len < in_len + c20_ctx->tag_len) { EVPerr(EVP_F_AEAD_CHACHA20_POLY1305_SEAL, EVP_R_BUFFER_TOO_SMALL); return 0; } if (nonce_len != ctx->aead->nonce_len) { EVPerr(EVP_F_AEAD_CHACHA20_POLY1305_SEAL, EVP_R_IV_TOO_LARGE); return 0; } if (nonce_len == CHACHA20_NONCE_LEN_OLD) { /* Google's draft-agl-tls-chacha20poly1305-04, Nov 2013 */ memset(poly1305_key, 0, sizeof(poly1305_key)); CRYPTO_chacha_20(poly1305_key, poly1305_key, sizeof(poly1305_key), c20_ctx->key, nonce, 0); CRYPTO_poly1305_init(&poly1305, poly1305_key); poly1305_update_with_length(&poly1305, ad, ad_len); CRYPTO_chacha_20(out, in, in_len, c20_ctx->key, nonce, 1); poly1305_update_with_length(&poly1305, out, in_len); } else if (nonce_len == CHACHA20_NONCE_LEN) { /* RFC 7539, May 2015 */ ctr = (uint64_t)(nonce[0] | nonce[1] << 8 | nonce[2] << 16 | nonce[3] << 24) << 32; iv = nonce + CHACHA20_CONSTANT_LEN; memset(poly1305_key, 0, sizeof(poly1305_key)); CRYPTO_chacha_20(poly1305_key, poly1305_key, sizeof(poly1305_key), c20_ctx->key, iv, ctr); CRYPTO_poly1305_init(&poly1305, poly1305_key); poly1305_update_with_pad16(&poly1305, ad, ad_len); CRYPTO_chacha_20(out, in, in_len, c20_ctx->key, iv, ctr + 1); poly1305_update_with_pad16(&poly1305, out, in_len); poly1305_update_with_length(&poly1305, NULL, ad_len); poly1305_update_with_length(&poly1305, NULL, in_len); } if (c20_ctx->tag_len != POLY1305_TAG_LEN) { unsigned char tag[POLY1305_TAG_LEN]; CRYPTO_poly1305_finish(&poly1305, tag); memcpy(out + in_len, tag, c20_ctx->tag_len); *out_len = in_len + c20_ctx->tag_len; return 1; |
︙ | ︙ | |||
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | size_t *out_len, size_t max_out_len, const unsigned char *nonce, size_t nonce_len, const unsigned char *in, size_t in_len, const unsigned char *ad, size_t ad_len) { const struct aead_chacha20_poly1305_ctx *c20_ctx = ctx->aead_state; unsigned char mac[POLY1305_TAG_LEN]; unsigned char poly1305_key[32]; poly1305_state poly1305; const uint64_t in_len_64 = in_len; size_t plaintext_len; if (in_len < c20_ctx->tag_len) { EVPerr(EVP_F_AEAD_CHACHA20_POLY1305_OPEN, EVP_R_BAD_DECRYPT); return 0; } /* The underlying ChaCha implementation may not overflow the block * counter into the second counter word. Therefore we disallow * individual operations that work on more than 2TB at a time. * in_len_64 is needed because, on 32-bit platforms, size_t is only * 32-bits and this produces a warning because it's always false. * Casting to uint64_t inside the conditional is not sufficient to stop * the warning. */ if (in_len_64 >= (1ULL << 32) * 64 - 64) { EVPerr(EVP_F_AEAD_CHACHA20_POLY1305_OPEN, EVP_R_TOO_LARGE); return 0; } | > > | > > > | | | | | | > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > | 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 | size_t *out_len, size_t max_out_len, const unsigned char *nonce, size_t nonce_len, const unsigned char *in, size_t in_len, const unsigned char *ad, size_t ad_len) { const struct aead_chacha20_poly1305_ctx *c20_ctx = ctx->aead_state; unsigned char mac[POLY1305_TAG_LEN]; unsigned char poly1305_key[32]; const unsigned char *iv = nonce; poly1305_state poly1305; const uint64_t in_len_64 = in_len; size_t plaintext_len; uint64_t ctr = 0; if (in_len < c20_ctx->tag_len) { EVPerr(EVP_F_AEAD_CHACHA20_POLY1305_OPEN, EVP_R_BAD_DECRYPT); return 0; } /* The underlying ChaCha implementation may not overflow the block * counter into the second counter word. Therefore we disallow * individual operations that work on more than 2TB at a time. * in_len_64 is needed because, on 32-bit platforms, size_t is only * 32-bits and this produces a warning because it's always false. * Casting to uint64_t inside the conditional is not sufficient to stop * the warning. */ if (in_len_64 >= (1ULL << 32) * 64 - 64) { EVPerr(EVP_F_AEAD_CHACHA20_POLY1305_OPEN, EVP_R_TOO_LARGE); return 0; } if (nonce_len != ctx->aead->nonce_len) { EVPerr(EVP_F_AEAD_CHACHA20_POLY1305_OPEN, EVP_R_IV_TOO_LARGE); return 0; } plaintext_len = in_len - c20_ctx->tag_len; if (max_out_len < plaintext_len) { EVPerr(EVP_F_AEAD_CHACHA20_POLY1305_OPEN, EVP_R_BUFFER_TOO_SMALL); return 0; } if (nonce_len == CHACHA20_NONCE_LEN_OLD) { /* Google's draft-agl-tls-chacha20poly1305-04, Nov 2013 */ memset(poly1305_key, 0, sizeof(poly1305_key)); CRYPTO_chacha_20(poly1305_key, poly1305_key, sizeof(poly1305_key), c20_ctx->key, nonce, 0); CRYPTO_poly1305_init(&poly1305, poly1305_key); poly1305_update_with_length(&poly1305, ad, ad_len); poly1305_update_with_length(&poly1305, in, plaintext_len); } else if (nonce_len == CHACHA20_NONCE_LEN) { /* RFC 7539, May 2015 */ ctr = (uint64_t)(nonce[0] | nonce[1] << 8 | nonce[2] << 16 | nonce[3] << 24) << 32; iv = nonce + CHACHA20_CONSTANT_LEN; memset(poly1305_key, 0, sizeof(poly1305_key)); CRYPTO_chacha_20(poly1305_key, poly1305_key, sizeof(poly1305_key), c20_ctx->key, iv, ctr); CRYPTO_poly1305_init(&poly1305, poly1305_key); poly1305_update_with_pad16(&poly1305, ad, ad_len); poly1305_update_with_pad16(&poly1305, in, plaintext_len); poly1305_update_with_length(&poly1305, NULL, ad_len); poly1305_update_with_length(&poly1305, NULL, plaintext_len); } CRYPTO_poly1305_finish(&poly1305, mac); if (timingsafe_memcmp(mac, in + plaintext_len, c20_ctx->tag_len) != 0) { EVPerr(EVP_F_AEAD_CHACHA20_POLY1305_OPEN, EVP_R_BAD_DECRYPT); return 0; } CRYPTO_chacha_20(out, in, plaintext_len, c20_ctx->key, iv, ctr + 1); *out_len = plaintext_len; return 1; } static const EVP_AEAD aead_chacha20_poly1305 = { .key_len = 32, .nonce_len = CHACHA20_NONCE_LEN, .overhead = POLY1305_TAG_LEN, .max_tag_len = POLY1305_TAG_LEN, .init = aead_chacha20_poly1305_init, .cleanup = aead_chacha20_poly1305_cleanup, .seal = aead_chacha20_poly1305_seal, .open = aead_chacha20_poly1305_open, }; static const EVP_AEAD aead_chacha20_poly1305_old = { .key_len = 32, .nonce_len = CHACHA20_NONCE_LEN_OLD, .overhead = POLY1305_TAG_LEN, .max_tag_len = POLY1305_TAG_LEN, .init = aead_chacha20_poly1305_init, .cleanup = aead_chacha20_poly1305_cleanup, .seal = aead_chacha20_poly1305_seal, .open = aead_chacha20_poly1305_open, }; const EVP_AEAD * EVP_aead_chacha20_poly1305() { return &aead_chacha20_poly1305; } const EVP_AEAD * EVP_aead_chacha20_poly1305_old() { return &aead_chacha20_poly1305_old; } #endif /* !OPENSSL_NO_CHACHA && !OPENSSL_NO_POLY1305 */ |
Changes to jni/libressl/crypto/evp/e_des.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: e_des.c,v 1.13 2014/10/18 17:20:40 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
201 202 203 204 205 206 207 | static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { DES_cblock *deskey = (DES_cblock *)key; | < < < < < | 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { DES_cblock *deskey = (DES_cblock *)key; DES_set_key_unchecked(deskey, ctx->cipher_data); return 1; } static int des_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) { switch (type) { |
︙ | ︙ |
Changes to jni/libressl/crypto/evp/e_des3.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: e_des3.c,v 1.18 2014/10/18 17:20:40 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
226 227 228 229 230 231 232 | static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { DES_cblock *deskey = (DES_cblock *)key; | < < < < < < < < < < < < < | 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 | static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { DES_cblock *deskey = (DES_cblock *)key; DES_set_key_unchecked(&deskey[0], &data(ctx)->ks1); DES_set_key_unchecked(&deskey[1], &data(ctx)->ks2); memcpy(&data(ctx)->ks3, &data(ctx)->ks1, sizeof(data(ctx)->ks1)); return 1; } static int des_ede3_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { DES_cblock *deskey = (DES_cblock *)key; DES_set_key_unchecked(&deskey[0], &data(ctx)->ks1); DES_set_key_unchecked(&deskey[1], &data(ctx)->ks2); DES_set_key_unchecked(&deskey[2], &data(ctx)->ks3); return 1; } static int des3_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) { DES_cblock *deskey = ptr; |
︙ | ︙ |
Changes to jni/libressl/crypto/evp/e_idea.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: e_idea.c,v 1.9 2014/07/11 08:44:48 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
53 54 55 56 57 58 59 60 61 62 63 64 65 66 | * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <stdio.h> #include <openssl/opensslconf.h> #ifndef OPENSSL_NO_IDEA #include <openssl/evp.h> #include <openssl/idea.h> | > | 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <stdio.h> #include <string.h> #include <openssl/opensslconf.h> #ifndef OPENSSL_NO_IDEA #include <openssl/evp.h> #include <openssl/idea.h> |
︙ | ︙ | |||
111 112 113 114 115 116 117 | if (enc) idea_set_encrypt_key(key, ctx->cipher_data); else { IDEA_KEY_SCHEDULE tmp; idea_set_encrypt_key(key, &tmp); idea_set_decrypt_key(&tmp, ctx->cipher_data); | | | 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | if (enc) idea_set_encrypt_key(key, ctx->cipher_data); else { IDEA_KEY_SCHEDULE tmp; idea_set_encrypt_key(key, &tmp); idea_set_decrypt_key(&tmp, ctx->cipher_data); explicit_bzero((unsigned char *)&tmp, sizeof(IDEA_KEY_SCHEDULE)); } return 1; } #endif |
Changes to jni/libressl/crypto/evp/encode.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: encode.c,v 1.23 2016/05/04 14:53:29 tedu Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ |
Changes to jni/libressl/crypto/evp/evp_enc.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: evp_enc.c,v 1.31 2016/05/30 13:42:54 beck Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
260 261 262 263 264 265 266 | return EVP_DecryptFinal_ex(ctx, out, outl); } int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl) { if (ctx->encrypt) | | | | 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 | return EVP_DecryptFinal_ex(ctx, out, outl); } int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl) { if (ctx->encrypt) return EVP_EncryptFinal_ex(ctx, out, outl); else return EVP_DecryptFinal_ex(ctx, out, outl); } int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const unsigned char *key, const unsigned char *iv) { return EVP_CipherInit(ctx, cipher, key, iv, 1); |
︙ | ︙ | |||
558 559 560 561 562 563 564 | EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c) { if (c->cipher != NULL) { if (c->cipher->cleanup && !c->cipher->cleanup(c)) return 0; /* Cleanse cipher context data */ if (c->cipher_data) | | | | 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 | EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c) { if (c->cipher != NULL) { if (c->cipher->cleanup && !c->cipher->cleanup(c)) return 0; /* Cleanse cipher context data */ if (c->cipher_data) explicit_bzero(c->cipher_data, c->cipher->ctx_size); } free(c->cipher_data); #ifndef OPENSSL_NO_ENGINE if (c->engine) /* The EVP_CIPHER we used belongs to an ENGINE, release the * functional reference we held for this reason. */ ENGINE_finish(c->engine); #endif explicit_bzero(c, sizeof(EVP_CIPHER_CTX)); return 1; } int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *c, int keylen) { if (c->cipher->flags & EVP_CIPH_CUSTOM_KEY_LENGTH) |
︙ | ︙ |
Changes to jni/libressl/crypto/evp/evp_key.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: evp_key.c,v 1.22 2015/02/10 09:55:39 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
112 113 114 115 116 117 118 | if (verify) { if (UI_add_verify_string(ui, prompt, 0, buff, min, (len >= BUFSIZ) ? BUFSIZ - 1 : len, buf) < 0) return -1; } ret = UI_process(ui); UI_free(ui); | | | 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | if (verify) { if (UI_add_verify_string(ui, prompt, 0, buff, min, (len >= BUFSIZ) ? BUFSIZ - 1 : len, buf) < 0) return -1; } ret = UI_process(ui); UI_free(ui); explicit_bzero(buff, BUFSIZ); return ret; } int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, const unsigned char *salt, const unsigned char *data, int datal, int count, unsigned char *key, unsigned char *iv) |
︙ | ︙ | |||
197 198 199 200 201 202 203 | if ((nkey == 0) && (niv == 0)) break; } rv = type->key_len; err: EVP_MD_CTX_cleanup(&c); | | | 197 198 199 200 201 202 203 204 205 206 | if ((nkey == 0) && (niv == 0)) break; } rv = type->key_len; err: EVP_MD_CTX_cleanup(&c); explicit_bzero(md_buf, sizeof md_buf); return rv; } |
Changes to jni/libressl/crypto/evp/m_md4.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD$ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ |
Deleted jni/libressl/crypto/evp/m_sha.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/crypto/evp/m_sigver.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: m_sigver.c,v 1.4 2014/07/11 08:44:48 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2006. */ /* ==================================================================== * Copyright (c) 2006,2007 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
132 133 134 135 136 137 138 | if (ctx->pctx->pmeth->signctx) sctx = 1; else sctx = 0; if (sigret) { EVP_MD_CTX tmp_ctx; unsigned char md[EVP_MAX_MD_SIZE]; | | | 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | if (ctx->pctx->pmeth->signctx) sctx = 1; else sctx = 0; if (sigret) { EVP_MD_CTX tmp_ctx; unsigned char md[EVP_MAX_MD_SIZE]; unsigned int mdlen = 0; EVP_MD_CTX_init(&tmp_ctx); if (!EVP_MD_CTX_copy_ex(&tmp_ctx, ctx)) return 0; if (sctx) r = tmp_ctx.pctx->pmeth->signctx(tmp_ctx.pctx, sigret, siglen, &tmp_ctx); else |
︙ | ︙ | |||
167 168 169 170 171 172 173 | int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, unsigned char *sig, size_t siglen) { EVP_MD_CTX tmp_ctx; unsigned char md[EVP_MAX_MD_SIZE]; int r; | | | 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, unsigned char *sig, size_t siglen) { EVP_MD_CTX tmp_ctx; unsigned char md[EVP_MAX_MD_SIZE]; int r; unsigned int mdlen = 0; int vctx; if (ctx->pctx->pmeth->verifyctx) vctx = 1; else vctx = 0; EVP_MD_CTX_init(&tmp_ctx); |
︙ | ︙ |
Changes to jni/libressl/crypto/evp/p5_crpt.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: p5_crpt.c,v 1.15 2015/02/10 09:52:35 miod Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
143 144 145 146 147 148 149 | EVPerr(EVP_F_PKCS5_PBE_KEYIVGEN, EVP_R_IV_TOO_LARGE); goto err; } memcpy(iv, md_tmp + (16 - EVP_CIPHER_iv_length(cipher)), EVP_CIPHER_iv_length(cipher)); if (!EVP_CipherInit_ex(cctx, cipher, NULL, key, iv, en_de)) goto err; | | | | | 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | EVPerr(EVP_F_PKCS5_PBE_KEYIVGEN, EVP_R_IV_TOO_LARGE); goto err; } memcpy(iv, md_tmp + (16 - EVP_CIPHER_iv_length(cipher)), EVP_CIPHER_iv_length(cipher)); if (!EVP_CipherInit_ex(cctx, cipher, NULL, key, iv, en_de)) goto err; explicit_bzero(md_tmp, EVP_MAX_MD_SIZE); explicit_bzero(key, EVP_MAX_KEY_LENGTH); explicit_bzero(iv, EVP_MAX_IV_LENGTH); rv = 1; err: EVP_MD_CTX_cleanup(&ctx); PBEPARAM_free(pbe); return rv; } |
Changes to jni/libressl/crypto/evp/p5_crpt2.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: p5_crpt2.c,v 1.20 2015/02/14 15:49:51 miod Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999-2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
296 297 298 299 300 301 302 | iter = ASN1_INTEGER_get(kdf->iter); if (!PKCS5_PBKDF2_HMAC(pass, passlen, salt, saltlen, iter, prfmd, keylen, key)) goto err; rv = EVP_CipherInit_ex(ctx, NULL, NULL, key, NULL, en_de); err: | | | 296 297 298 299 300 301 302 303 304 305 306 307 308 | iter = ASN1_INTEGER_get(kdf->iter); if (!PKCS5_PBKDF2_HMAC(pass, passlen, salt, saltlen, iter, prfmd, keylen, key)) goto err; rv = EVP_CipherInit_ex(ctx, NULL, NULL, key, NULL, en_de); err: explicit_bzero(key, keylen); PBKDF2PARAM_free(kdf); return rv; } #endif |
Changes to jni/libressl/crypto/evp/p_open.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: p_open.c,v 1.16 2014/07/11 08:44:48 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
53 54 55 56 57 58 59 60 61 62 63 64 65 66 | * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <stdio.h> #include <openssl/opensslconf.h> #ifndef OPENSSL_NO_RSA #include <openssl/err.h> #include <openssl/evp.h> | > | 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <stdio.h> #include <string.h> #include <openssl/opensslconf.h> #ifndef OPENSSL_NO_RSA #include <openssl/err.h> #include <openssl/evp.h> |
︙ | ︙ | |||
105 106 107 108 109 110 111 | if (!EVP_DecryptInit_ex(ctx, NULL, NULL, key, iv)) goto err; ret = 1; err: if (key != NULL) | | | 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | if (!EVP_DecryptInit_ex(ctx, NULL, NULL, key, iv)) goto err; ret = 1; err: if (key != NULL) explicit_bzero(key, size); free(key); return (ret); } int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl) { |
︙ | ︙ |
Changes to jni/libressl/crypto/gost/gost2814789.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: gost2814789.c,v 1.4 2015/02/10 09:46:30 miod Exp $ */ /* * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> * Copyright (c) 2005-2006 Cryptocom LTD * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: |
︙ | ︙ | |||
460 461 462 463 464 465 466 | if (md == NULL) md = m; GOST2814789IMIT_Init(&c, nid); memcpy(c.mac, iv, 8); Gost2814789_set_key(&c.cipher, key, 256); GOST2814789IMIT_Update(&c, d, n); GOST2814789IMIT_Final(md, &c); | | | 460 461 462 463 464 465 466 467 468 469 470 471 | if (md == NULL) md = m; GOST2814789IMIT_Init(&c, nid); memcpy(c.mac, iv, 8); Gost2814789_set_key(&c.cipher, key, 256); GOST2814789IMIT_Update(&c, d, n); GOST2814789IMIT_Final(md, &c); explicit_bzero(&c, sizeof(c)); return (md); } #endif |
Changes to jni/libressl/crypto/gost/gostr341001_key.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: gostr341001_key.c,v 1.5 2015/02/14 06:40:04 jsing Exp $ */ /* * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> * Copyright (c) 2005-2006 Cryptocom LTD * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: |
︙ | ︙ | |||
44 45 46 47 48 49 50 51 52 53 54 55 56 57 | * 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 <openssl/opensslconf.h> #ifndef OPENSSL_NO_GOST #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/gost.h> | > > | 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | * 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 <string.h> #include <openssl/opensslconf.h> #ifndef OPENSSL_NO_GOST #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/gost.h> |
︙ | ︙ | |||
99 100 101 102 103 104 105 | if (i > 0) return; EC_GROUP_free(r->group); EC_POINT_free(r->pub_key); BN_clear_free(r->priv_key); | | | 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | if (i > 0) return; EC_GROUP_free(r->group); EC_POINT_free(r->pub_key); BN_clear_free(r->priv_key); explicit_bzero((void *)r, sizeof(GOST_KEY)); free(r); } int GOST_KEY_check_key(const GOST_KEY *key) { int ok = 0; |
︙ | ︙ |
Changes to jni/libressl/crypto/gost/gostr341194.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: gostr341194.c,v 1.4 2015/07/15 17:13:17 beck Exp $ */ /* * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> * Copyright (c) 2005-2006 Cryptocom LTD * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: |
︙ | ︙ | |||
263 264 265 266 267 268 269 | if (md == NULL) md = m; if (!GOSTR341194_Init(&c, nid)) return 0; GOSTR341194_Update(&c, d, n); GOSTR341194_Final(md, &c); | | | 263 264 265 266 267 268 269 270 271 272 273 | if (md == NULL) md = m; if (!GOSTR341194_Init(&c, nid)) return 0; GOSTR341194_Update(&c, d, n); GOSTR341194_Final(md, &c); explicit_bzero(&c, sizeof(c)); return (md); } #endif |
Changes to jni/libressl/crypto/gost/streebog.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: streebog.c,v 1.4 2014/12/07 16:33:51 jsing Exp $ */ /* * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> * Copyright (c) 2005-2006 Cryptocom LTD * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: |
︙ | ︙ | |||
1451 1452 1453 1454 1455 1456 1457 | static unsigned char m[STREEBOG256_LENGTH]; if (md == NULL) md = m; STREEBOG256_Init(&c); STREEBOG256_Update(&c, d, n); STREEBOG256_Final(md, &c); | | | | 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 | static unsigned char m[STREEBOG256_LENGTH]; if (md == NULL) md = m; STREEBOG256_Init(&c); STREEBOG256_Update(&c, d, n); STREEBOG256_Final(md, &c); explicit_bzero(&c, sizeof(c)); return (md); } unsigned char * STREEBOG512(const unsigned char *d, size_t n, unsigned char *md) { STREEBOG_CTX c; static unsigned char m[STREEBOG512_LENGTH]; if (md == NULL) md = m; STREEBOG512_Init(&c); STREEBOG512_Update(&c, d, n); STREEBOG512_Final(md, &c); explicit_bzero(&c, sizeof(c)); return (md); } #endif |
Changes to jni/libressl/crypto/hmac/hm_ameth.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: hm_ameth.c,v 1.9 2015/07/20 15:45:29 miod Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2007. */ /* ==================================================================== * Copyright (c) 2007 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
79 80 81 82 83 84 85 | static void hmac_key_free(EVP_PKEY *pkey) { ASN1_OCTET_STRING *os = (ASN1_OCTET_STRING *)pkey->pkey.ptr; if (os) { if (os->data) | | | 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | static void hmac_key_free(EVP_PKEY *pkey) { ASN1_OCTET_STRING *os = (ASN1_OCTET_STRING *)pkey->pkey.ptr; if (os) { if (os->data) explicit_bzero(os->data, os->length); ASN1_OCTET_STRING_free(os); } } static int hmac_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) { |
︙ | ︙ |
Changes to jni/libressl/crypto/hmac/hm_pmeth.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: hm_pmeth.c,v 1.8 2014/07/11 08:44:48 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2007. */ /* ==================================================================== * Copyright (c) 2007 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
120 121 122 123 124 125 126 | pkey_hmac_cleanup(EVP_PKEY_CTX *ctx) { HMAC_PKEY_CTX *hctx = ctx->data; HMAC_CTX_cleanup(&hctx->ctx); if (hctx->ktmp.data) { if (hctx->ktmp.length) | | | 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | pkey_hmac_cleanup(EVP_PKEY_CTX *ctx) { HMAC_PKEY_CTX *hctx = ctx->data; HMAC_CTX_cleanup(&hctx->ctx); if (hctx->ktmp.data) { if (hctx->ktmp.length) explicit_bzero(hctx->ktmp.data, hctx->ktmp.length); free(hctx->ktmp.data); hctx->ktmp.data = NULL; } free(hctx); } static int |
︙ | ︙ |
Changes to jni/libressl/crypto/md4/md4_dgst.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD$ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ |
Changes to jni/libressl/crypto/md4/md4_locl.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD$ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ |
Changes to jni/libressl/crypto/md4/md4_one.c.
︙ | ︙ | |||
67 68 69 70 71 72 73 | static unsigned char m[MD4_DIGEST_LENGTH]; if (md == NULL) md=m; if (!MD4_Init(&c)) return NULL; MD4_Update(&c,d,n); MD4_Final(md,&c); | | | 67 68 69 70 71 72 73 74 75 76 77 | static unsigned char m[MD4_DIGEST_LENGTH]; if (md == NULL) md=m; if (!MD4_Init(&c)) return NULL; MD4_Update(&c,d,n); MD4_Final(md,&c); explicit_bzero(&c,sizeof(c)); return(md); } |
Changes to jni/libressl/crypto/md5/md5_one.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: md5_one.c,v 1.9 2015/09/10 15:03:59 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
67 68 69 70 71 72 73 | static unsigned char m[MD5_DIGEST_LENGTH]; if (md == NULL) md=m; if (!MD5_Init(&c)) return NULL; MD5_Update(&c,d,n); MD5_Final(md,&c); | | | 67 68 69 70 71 72 73 74 75 76 77 | static unsigned char m[MD5_DIGEST_LENGTH]; if (md == NULL) md=m; if (!MD5_Init(&c)) return NULL; MD5_Update(&c,d,n); MD5_Final(md,&c); explicit_bzero(&c,sizeof(c)); return(md); } |
Changes to jni/libressl/crypto/modes/gcm128.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: gcm128.c,v 1.12 2015/02/10 09:46:30 miod Exp $ */ /* ==================================================================== * Copyright (c) 2010 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * |
︙ | ︙ | |||
1529 1530 1531 1532 1533 1534 1535 | return ret; } void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx) { if (ctx) { | | | 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 | return ret; } void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx) { if (ctx) { explicit_bzero(ctx,sizeof(*ctx)); free(ctx); } } |
Changes to jni/libressl/crypto/modes/ghash-elf-x86_64.s.
︙ | ︙ | |||
678 679 680 681 682 683 684 | movdqa %xmm2,%xmm0 movdqa %xmm0,%xmm1 pshufd $78,%xmm0,%xmm3 pshufd $78,%xmm2,%xmm4 pxor %xmm0,%xmm3 pxor %xmm2,%xmm4 | | | | | 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 | movdqa %xmm2,%xmm0 movdqa %xmm0,%xmm1 pshufd $78,%xmm0,%xmm3 pshufd $78,%xmm2,%xmm4 pxor %xmm0,%xmm3 pxor %xmm2,%xmm4 .byte 102,15,58,68,194,0 .byte 102,15,58,68,202,17 .byte 102,15,58,68,220,0 pxor %xmm0,%xmm3 pxor %xmm1,%xmm3 movdqa %xmm3,%xmm4 psrldq $8,%xmm3 pslldq $8,%xmm4 pxor %xmm3,%xmm1 |
︙ | ︙ | |||
722 723 724 725 726 727 728 | .globl gcm_gmult_clmul .type gcm_gmult_clmul,@function .align 16 gcm_gmult_clmul: movdqu (%rdi),%xmm0 movdqa .Lbswap_mask(%rip),%xmm5 movdqu (%rsi),%xmm2 | | | | | | 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 | .globl gcm_gmult_clmul .type gcm_gmult_clmul,@function .align 16 gcm_gmult_clmul: movdqu (%rdi),%xmm0 movdqa .Lbswap_mask(%rip),%xmm5 movdqu (%rsi),%xmm2 .byte 102,15,56,0,197 movdqa %xmm0,%xmm1 pshufd $78,%xmm0,%xmm3 pshufd $78,%xmm2,%xmm4 pxor %xmm0,%xmm3 pxor %xmm2,%xmm4 .byte 102,15,58,68,194,0 .byte 102,15,58,68,202,17 .byte 102,15,58,68,220,0 pxor %xmm0,%xmm3 pxor %xmm1,%xmm3 movdqa %xmm3,%xmm4 psrldq $8,%xmm3 pslldq $8,%xmm4 pxor %xmm3,%xmm1 |
︙ | ︙ | |||
761 762 763 764 765 766 767 | psrlq $5,%xmm0 pxor %xmm4,%xmm0 psrlq $1,%xmm0 pxor %xmm4,%xmm0 pxor %xmm1,%xmm4 psrlq $1,%xmm0 pxor %xmm4,%xmm0 | | | | | | | | | | | | | | | | | | | | 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 | psrlq $5,%xmm0 pxor %xmm4,%xmm0 psrlq $1,%xmm0 pxor %xmm4,%xmm0 pxor %xmm1,%xmm4 psrlq $1,%xmm0 pxor %xmm4,%xmm0 .byte 102,15,56,0,197 movdqu %xmm0,(%rdi) .byte 0xf3,0xc3 .size gcm_gmult_clmul,.-gcm_gmult_clmul .globl gcm_ghash_clmul .type gcm_ghash_clmul,@function .align 16 gcm_ghash_clmul: movdqa .Lbswap_mask(%rip),%xmm5 movdqu (%rdi),%xmm0 movdqu (%rsi),%xmm2 .byte 102,15,56,0,197 subq $16,%rcx jz .Lodd_tail movdqu 16(%rsi),%xmm8 movdqu (%rdx),%xmm3 movdqu 16(%rdx),%xmm6 .byte 102,15,56,0,221 .byte 102,15,56,0,245 pxor %xmm3,%xmm0 movdqa %xmm6,%xmm7 pshufd $78,%xmm6,%xmm3 pshufd $78,%xmm2,%xmm4 pxor %xmm6,%xmm3 pxor %xmm2,%xmm4 .byte 102,15,58,68,242,0 .byte 102,15,58,68,250,17 .byte 102,15,58,68,220,0 pxor %xmm6,%xmm3 pxor %xmm7,%xmm3 movdqa %xmm3,%xmm4 psrldq $8,%xmm3 pslldq $8,%xmm4 pxor %xmm3,%xmm7 pxor %xmm4,%xmm6 movdqa %xmm0,%xmm1 pshufd $78,%xmm0,%xmm3 pshufd $78,%xmm8,%xmm4 pxor %xmm0,%xmm3 pxor %xmm8,%xmm4 leaq 32(%rdx),%rdx subq $32,%rcx jbe .Leven_tail .Lmod_loop: .byte 102,65,15,58,68,192,0 .byte 102,65,15,58,68,200,17 .byte 102,15,58,68,220,0 pxor %xmm0,%xmm3 pxor %xmm1,%xmm3 movdqa %xmm3,%xmm4 psrldq $8,%xmm3 pslldq $8,%xmm4 pxor %xmm3,%xmm1 pxor %xmm4,%xmm0 movdqu (%rdx),%xmm3 pxor %xmm6,%xmm0 pxor %xmm7,%xmm1 movdqu 16(%rdx),%xmm6 .byte 102,15,56,0,221 .byte 102,15,56,0,245 movdqa %xmm6,%xmm7 pshufd $78,%xmm6,%xmm9 pshufd $78,%xmm2,%xmm10 pxor %xmm6,%xmm9 pxor %xmm2,%xmm10 pxor %xmm3,%xmm1 movdqa %xmm0,%xmm3 psllq $1,%xmm0 pxor %xmm3,%xmm0 psllq $5,%xmm0 pxor %xmm3,%xmm0 .byte 102,15,58,68,242,0 psllq $57,%xmm0 movdqa %xmm0,%xmm4 pslldq $8,%xmm0 psrldq $8,%xmm4 pxor %xmm3,%xmm0 pxor %xmm4,%xmm1 .byte 102,15,58,68,250,17 movdqa %xmm0,%xmm4 psrlq $5,%xmm0 pxor %xmm4,%xmm0 psrlq $1,%xmm0 pxor %xmm4,%xmm0 pxor %xmm1,%xmm4 psrlq $1,%xmm0 pxor %xmm4,%xmm0 .byte 102,69,15,58,68,202,0 movdqa %xmm0,%xmm1 pshufd $78,%xmm0,%xmm3 pshufd $78,%xmm8,%xmm4 pxor %xmm0,%xmm3 pxor %xmm8,%xmm4 pxor %xmm6,%xmm9 pxor %xmm7,%xmm9 movdqa %xmm9,%xmm10 psrldq $8,%xmm9 pslldq $8,%xmm10 pxor %xmm9,%xmm7 pxor %xmm10,%xmm6 leaq 32(%rdx),%rdx subq $32,%rcx ja .Lmod_loop .Leven_tail: .byte 102,65,15,58,68,192,0 .byte 102,65,15,58,68,200,17 .byte 102,15,58,68,220,0 pxor %xmm0,%xmm3 pxor %xmm1,%xmm3 movdqa %xmm3,%xmm4 psrldq $8,%xmm3 pslldq $8,%xmm4 pxor %xmm3,%xmm1 |
︙ | ︙ | |||
925 926 927 928 929 930 931 | psrlq $1,%xmm0 pxor %xmm4,%xmm0 testq %rcx,%rcx jnz .Ldone .Lodd_tail: movdqu (%rdx),%xmm3 | | | | | | 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 | psrlq $1,%xmm0 pxor %xmm4,%xmm0 testq %rcx,%rcx jnz .Ldone .Lodd_tail: movdqu (%rdx),%xmm3 .byte 102,15,56,0,221 pxor %xmm3,%xmm0 movdqa %xmm0,%xmm1 pshufd $78,%xmm0,%xmm3 pshufd $78,%xmm2,%xmm4 pxor %xmm0,%xmm3 pxor %xmm2,%xmm4 .byte 102,15,58,68,194,0 .byte 102,15,58,68,202,17 .byte 102,15,58,68,220,0 pxor %xmm0,%xmm3 pxor %xmm1,%xmm3 movdqa %xmm3,%xmm4 psrldq $8,%xmm3 pslldq $8,%xmm4 pxor %xmm3,%xmm1 |
︙ | ︙ | |||
966 967 968 969 970 971 972 | pxor %xmm4,%xmm0 psrlq $1,%xmm0 pxor %xmm4,%xmm0 pxor %xmm1,%xmm4 psrlq $1,%xmm0 pxor %xmm4,%xmm0 .Ldone: | | | 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 | pxor %xmm4,%xmm0 psrlq $1,%xmm0 pxor %xmm4,%xmm0 pxor %xmm1,%xmm4 psrlq $1,%xmm0 pxor %xmm4,%xmm0 .Ldone: .byte 102,15,56,0,197 movdqu %xmm0,(%rdi) .byte 0xf3,0xc3 .LSEH_end_gcm_ghash_clmul: .size gcm_ghash_clmul,.-gcm_ghash_clmul .align 64 .Lbswap_mask: .byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 |
︙ | ︙ |
Changes to jni/libressl/crypto/modes/ghash-macosx-x86_64.s.
︙ | ︙ | |||
678 679 680 681 682 683 684 | movdqa %xmm2,%xmm0 movdqa %xmm0,%xmm1 pshufd $78,%xmm0,%xmm3 pshufd $78,%xmm2,%xmm4 pxor %xmm0,%xmm3 pxor %xmm2,%xmm4 | | | | | 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 | movdqa %xmm2,%xmm0 movdqa %xmm0,%xmm1 pshufd $78,%xmm0,%xmm3 pshufd $78,%xmm2,%xmm4 pxor %xmm0,%xmm3 pxor %xmm2,%xmm4 .byte 102,15,58,68,194,0 .byte 102,15,58,68,202,17 .byte 102,15,58,68,220,0 pxor %xmm0,%xmm3 pxor %xmm1,%xmm3 movdqa %xmm3,%xmm4 psrldq $8,%xmm3 pslldq $8,%xmm4 pxor %xmm3,%xmm1 |
︙ | ︙ | |||
722 723 724 725 726 727 728 | .globl _gcm_gmult_clmul .p2align 4 _gcm_gmult_clmul: movdqu (%rdi),%xmm0 movdqa L$bswap_mask(%rip),%xmm5 movdqu (%rsi),%xmm2 | | | | | | 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 | .globl _gcm_gmult_clmul .p2align 4 _gcm_gmult_clmul: movdqu (%rdi),%xmm0 movdqa L$bswap_mask(%rip),%xmm5 movdqu (%rsi),%xmm2 .byte 102,15,56,0,197 movdqa %xmm0,%xmm1 pshufd $78,%xmm0,%xmm3 pshufd $78,%xmm2,%xmm4 pxor %xmm0,%xmm3 pxor %xmm2,%xmm4 .byte 102,15,58,68,194,0 .byte 102,15,58,68,202,17 .byte 102,15,58,68,220,0 pxor %xmm0,%xmm3 pxor %xmm1,%xmm3 movdqa %xmm3,%xmm4 psrldq $8,%xmm3 pslldq $8,%xmm4 pxor %xmm3,%xmm1 |
︙ | ︙ | |||
761 762 763 764 765 766 767 | psrlq $5,%xmm0 pxor %xmm4,%xmm0 psrlq $1,%xmm0 pxor %xmm4,%xmm0 pxor %xmm1,%xmm4 psrlq $1,%xmm0 pxor %xmm4,%xmm0 | | | | | | | | | | | | | | | | | | | | 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 | psrlq $5,%xmm0 pxor %xmm4,%xmm0 psrlq $1,%xmm0 pxor %xmm4,%xmm0 pxor %xmm1,%xmm4 psrlq $1,%xmm0 pxor %xmm4,%xmm0 .byte 102,15,56,0,197 movdqu %xmm0,(%rdi) .byte 0xf3,0xc3 .globl _gcm_ghash_clmul .p2align 4 _gcm_ghash_clmul: movdqa L$bswap_mask(%rip),%xmm5 movdqu (%rdi),%xmm0 movdqu (%rsi),%xmm2 .byte 102,15,56,0,197 subq $16,%rcx jz L$odd_tail movdqu 16(%rsi),%xmm8 movdqu (%rdx),%xmm3 movdqu 16(%rdx),%xmm6 .byte 102,15,56,0,221 .byte 102,15,56,0,245 pxor %xmm3,%xmm0 movdqa %xmm6,%xmm7 pshufd $78,%xmm6,%xmm3 pshufd $78,%xmm2,%xmm4 pxor %xmm6,%xmm3 pxor %xmm2,%xmm4 .byte 102,15,58,68,242,0 .byte 102,15,58,68,250,17 .byte 102,15,58,68,220,0 pxor %xmm6,%xmm3 pxor %xmm7,%xmm3 movdqa %xmm3,%xmm4 psrldq $8,%xmm3 pslldq $8,%xmm4 pxor %xmm3,%xmm7 pxor %xmm4,%xmm6 movdqa %xmm0,%xmm1 pshufd $78,%xmm0,%xmm3 pshufd $78,%xmm8,%xmm4 pxor %xmm0,%xmm3 pxor %xmm8,%xmm4 leaq 32(%rdx),%rdx subq $32,%rcx jbe L$even_tail L$mod_loop: .byte 102,65,15,58,68,192,0 .byte 102,65,15,58,68,200,17 .byte 102,15,58,68,220,0 pxor %xmm0,%xmm3 pxor %xmm1,%xmm3 movdqa %xmm3,%xmm4 psrldq $8,%xmm3 pslldq $8,%xmm4 pxor %xmm3,%xmm1 pxor %xmm4,%xmm0 movdqu (%rdx),%xmm3 pxor %xmm6,%xmm0 pxor %xmm7,%xmm1 movdqu 16(%rdx),%xmm6 .byte 102,15,56,0,221 .byte 102,15,56,0,245 movdqa %xmm6,%xmm7 pshufd $78,%xmm6,%xmm9 pshufd $78,%xmm2,%xmm10 pxor %xmm6,%xmm9 pxor %xmm2,%xmm10 pxor %xmm3,%xmm1 movdqa %xmm0,%xmm3 psllq $1,%xmm0 pxor %xmm3,%xmm0 psllq $5,%xmm0 pxor %xmm3,%xmm0 .byte 102,15,58,68,242,0 psllq $57,%xmm0 movdqa %xmm0,%xmm4 pslldq $8,%xmm0 psrldq $8,%xmm4 pxor %xmm3,%xmm0 pxor %xmm4,%xmm1 .byte 102,15,58,68,250,17 movdqa %xmm0,%xmm4 psrlq $5,%xmm0 pxor %xmm4,%xmm0 psrlq $1,%xmm0 pxor %xmm4,%xmm0 pxor %xmm1,%xmm4 psrlq $1,%xmm0 pxor %xmm4,%xmm0 .byte 102,69,15,58,68,202,0 movdqa %xmm0,%xmm1 pshufd $78,%xmm0,%xmm3 pshufd $78,%xmm8,%xmm4 pxor %xmm0,%xmm3 pxor %xmm8,%xmm4 pxor %xmm6,%xmm9 pxor %xmm7,%xmm9 movdqa %xmm9,%xmm10 psrldq $8,%xmm9 pslldq $8,%xmm10 pxor %xmm9,%xmm7 pxor %xmm10,%xmm6 leaq 32(%rdx),%rdx subq $32,%rcx ja L$mod_loop L$even_tail: .byte 102,65,15,58,68,192,0 .byte 102,65,15,58,68,200,17 .byte 102,15,58,68,220,0 pxor %xmm0,%xmm3 pxor %xmm1,%xmm3 movdqa %xmm3,%xmm4 psrldq $8,%xmm3 pslldq $8,%xmm4 pxor %xmm3,%xmm1 |
︙ | ︙ | |||
925 926 927 928 929 930 931 | psrlq $1,%xmm0 pxor %xmm4,%xmm0 testq %rcx,%rcx jnz L$done L$odd_tail: movdqu (%rdx),%xmm3 | | | | | | 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 | psrlq $1,%xmm0 pxor %xmm4,%xmm0 testq %rcx,%rcx jnz L$done L$odd_tail: movdqu (%rdx),%xmm3 .byte 102,15,56,0,221 pxor %xmm3,%xmm0 movdqa %xmm0,%xmm1 pshufd $78,%xmm0,%xmm3 pshufd $78,%xmm2,%xmm4 pxor %xmm0,%xmm3 pxor %xmm2,%xmm4 .byte 102,15,58,68,194,0 .byte 102,15,58,68,202,17 .byte 102,15,58,68,220,0 pxor %xmm0,%xmm3 pxor %xmm1,%xmm3 movdqa %xmm3,%xmm4 psrldq $8,%xmm3 pslldq $8,%xmm4 pxor %xmm3,%xmm1 |
︙ | ︙ | |||
966 967 968 969 970 971 972 | pxor %xmm4,%xmm0 psrlq $1,%xmm0 pxor %xmm4,%xmm0 pxor %xmm1,%xmm4 psrlq $1,%xmm0 pxor %xmm4,%xmm0 L$done: | | | 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 | pxor %xmm4,%xmm0 psrlq $1,%xmm0 pxor %xmm4,%xmm0 pxor %xmm1,%xmm4 psrlq $1,%xmm0 pxor %xmm4,%xmm0 L$done: .byte 102,15,56,0,197 movdqu %xmm0,(%rdi) .byte 0xf3,0xc3 L$SEH_end_gcm_ghash_clmul: .p2align 6 L$bswap_mask: .byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 |
︙ | ︙ |
Changes to jni/libressl/crypto/objects/obj_dat.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: obj_dat.c,v 1.35 2015/10/14 21:54:10 tedu Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
66 67 68 69 70 71 72 | #include <openssl/asn1.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/lhash.h> #include <openssl/objects.h> /* obj_dat.h is generated from objects.h by obj_dat.pl */ | < < < < < < < < < < < < < | 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #include <openssl/asn1.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/lhash.h> #include <openssl/objects.h> /* obj_dat.h is generated from objects.h by obj_dat.pl */ #include "obj_dat.h" DECLARE_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, sn); DECLARE_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, ln); DECLARE_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, obj); #define ADDED_DATA 0 #define ADDED_SNAME 1 |
︙ | ︙ | |||
561 562 563 564 565 566 567 568 569 570 571 572 573 574 | *buf++ = i + '0'; *buf = '\0'; buf_len--; } ret++; } if (use_bn) { char *bndec; bndec = BN_bn2dec(bl); if (!bndec) goto err; i = snprintf(buf, buf_len, ".%s", bndec); | > > > > | 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 | *buf++ = i + '0'; *buf = '\0'; buf_len--; } ret++; } if (buf_len <= 0) { ret = 0; goto out; } if (use_bn) { char *bndec; bndec = BN_bn2dec(bl); if (!bndec) goto err; i = snprintf(buf, buf_len, ".%s", bndec); |
︙ | ︙ |
Changes to jni/libressl/crypto/ocsp/ocsp_cl.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ocsp_cl.c,v 1.10 2016/07/05 03:24:38 beck Exp $ */ /* Written by Tom Titchener <Tom_Titchener@groove.net> for the OpenSSL * project. */ /* History: This file was transfered to Richard Levitte from CertCo by Kathy Weinhold in mid-spring 2000 to be included in OpenSSL or released as a patch kit. */ |
︙ | ︙ | |||
66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include <openssl/err.h> #include <openssl/ocsp.h> #include <openssl/objects.h> #include <openssl/pem.h> #include <openssl/x509.h> #include <openssl/x509v3.h> /* Utility functions related to sending OCSP requests and extracting * relevant information from the response. */ /* Add an OCSP_CERTID to an OCSP request. Return new OCSP_ONEREQ * pointer: useful if we want to add extensions. | > > > | 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include <openssl/err.h> #include <openssl/ocsp.h> #include <openssl/objects.h> #include <openssl/pem.h> #include <openssl/x509.h> #include <openssl/x509v3.h> int asn1_time_parse(const char *, size_t, struct tm *, int); int asn1_tm_cmp(struct tm *, struct tm *); /* Utility functions related to sending OCSP requests and extracting * relevant information from the response. */ /* Add an OCSP_CERTID to an OCSP request. Return new OCSP_ONEREQ * pointer: useful if we want to add extensions. |
︙ | ︙ | |||
323 324 325 326 327 328 329 | * Also to avoid accepting very old responses without a nextUpdate field an optional maxage * parameter specifies the maximum age the thisUpdate field can be. */ int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, ASN1_GENERALIZEDTIME *nextupd, long nsec, long maxsec) { | < > > > > > > > > > | | > > | | > | > > > > | | | > | | > > | | | | | | 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 | * Also to avoid accepting very old responses without a nextUpdate field an optional maxage * parameter specifies the maximum age the thisUpdate field can be. */ int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, ASN1_GENERALIZEDTIME *nextupd, long nsec, long maxsec) { time_t t_now, t_tmp; struct tm tm_this, tm_next, tm_tmp; time(&t_now); /* * Times must explicitly be a GENERALIZEDTIME as per section * 4.2.2.1 of RFC 6960 - It is invalid to accept other times * (such as UTCTIME permitted/required by RFC 5280 for certificates) */ /* Check thisUpdate is valid and not more than nsec in the future */ if (asn1_time_parse(thisupd->data, thisupd->length, &tm_this, V_ASN1_GENERALIZEDTIME) != V_ASN1_GENERALIZEDTIME) { OCSPerr(OCSP_F_OCSP_CHECK_VALIDITY, OCSP_R_ERROR_IN_THISUPDATE_FIELD); return 0; } else { t_tmp = t_now + nsec; if (gmtime_r(&t_tmp, &tm_tmp) == NULL) return 0; if (asn1_tm_cmp(&tm_this, &tm_tmp) > 0) { OCSPerr(OCSP_F_OCSP_CHECK_VALIDITY, OCSP_R_STATUS_NOT_YET_VALID); return 0; } /* * If maxsec specified check thisUpdate is not more than maxsec * in the past */ if (maxsec >= 0) { t_tmp = t_now - maxsec; if (gmtime_r(&t_tmp, &tm_tmp) == NULL) return 0; if (asn1_tm_cmp(&tm_this, &tm_tmp) < 0) { OCSPerr(OCSP_F_OCSP_CHECK_VALIDITY, OCSP_R_STATUS_TOO_OLD); return 0; } } } if (!nextupd) return 1; /* Check nextUpdate is valid and not more than nsec in the past */ if (asn1_time_parse(nextupd->data, nextupd->length, &tm_next, V_ASN1_GENERALIZEDTIME) != V_ASN1_GENERALIZEDTIME) { OCSPerr(OCSP_F_OCSP_CHECK_VALIDITY, OCSP_R_ERROR_IN_NEXTUPDATE_FIELD); return 0; } else { t_tmp = t_now - nsec; if (gmtime_r(&t_tmp, &tm_tmp) == NULL) return 0; if (asn1_tm_cmp(&tm_next, &tm_tmp) < 0) { OCSPerr(OCSP_F_OCSP_CHECK_VALIDITY, OCSP_R_STATUS_EXPIRED); return 0; } } /* Also don't allow nextUpdate to precede thisUpdate */ if (asn1_tm_cmp(&tm_next, &tm_this) < 0) { OCSPerr(OCSP_F_OCSP_CHECK_VALIDITY, OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE); return 0; } return 1; } |
Changes to jni/libressl/crypto/ocsp/ocsp_srv.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ocsp_srv.c,v 1.7 2014/10/18 17:20:40 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2001. */ /* ==================================================================== * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
256 257 258 259 260 261 262 | if (!X509_NAME_set(&rid->value.byName, X509_get_subject_name(signer))) goto err; rid->type = V_OCSP_RESPID_NAME; } if (!(flags & OCSP_NOTIME) && | | | 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 | if (!X509_NAME_set(&rid->value.byName, X509_get_subject_name(signer))) goto err; rid->type = V_OCSP_RESPID_NAME; } if (!(flags & OCSP_NOTIME) && !ASN1_GENERALIZEDTIME_set(brsp->tbsResponseData->producedAt, time(NULL))) goto err; /* Right now, I think that not doing double hashing is the right thing. -- Richard Levitte */ if (!OCSP_BASICRESP_sign(brsp, key, dgst, 0)) goto err; return 1; err: return 0; } |
Changes to jni/libressl/crypto/ocsp/ocsp_vfy.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ocsp_vfy.c,v 1.12 2014/07/09 19:08:10 tedu Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2000. */ /* ==================================================================== * Copyright (c) 2000-2004 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
76 77 78 79 80 81 82 83 84 85 86 87 88 89 | /* Verify a basic response message */ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, X509_STORE *st, unsigned long flags) { X509 *signer, *x; STACK_OF(X509) *chain = NULL; X509_STORE_CTX ctx; int i, ret = 0; ret = ocsp_find_signer(&signer, bs, certs, st, flags); if (!ret) { OCSPerr(OCSP_F_OCSP_BASIC_VERIFY, OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND); | > | 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | /* Verify a basic response message */ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, X509_STORE *st, unsigned long flags) { X509 *signer, *x; STACK_OF(X509) *chain = NULL; STACK_OF(X509) *untrusted = NULL; X509_STORE_CTX ctx; int i, ret = 0; ret = ocsp_find_signer(&signer, bs, certs, st, flags); if (!ret) { OCSPerr(OCSP_F_OCSP_BASIC_VERIFY, OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND); |
︙ | ︙ | |||
104 105 106 107 108 109 110 | OCSP_R_SIGNATURE_FAILURE); goto end; } } if (!(flags & OCSP_NOVERIFY)) { int init_res; | | > > > > | > > > > > > | > | < | 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | OCSP_R_SIGNATURE_FAILURE); goto end; } } if (!(flags & OCSP_NOVERIFY)) { int init_res; if (flags & OCSP_NOCHAIN) { untrusted = NULL; } else if (bs->certs && certs) { untrusted = sk_X509_dup(bs->certs); for (i = 0; i < sk_X509_num(certs); i++) { if (!sk_X509_push(untrusted, sk_X509_value(certs, i))) { OCSPerr(OCSP_F_OCSP_BASIC_VERIFY, ERR_R_MALLOC_FAILURE); goto end; } } } else untrusted = bs->certs; init_res = X509_STORE_CTX_init(&ctx, st, signer, untrusted); if (!init_res) { ret = -1; OCSPerr(OCSP_F_OCSP_BASIC_VERIFY, ERR_R_X509_LIB); goto end; } X509_STORE_CTX_set_purpose(&ctx, X509_PURPOSE_OCSP_HELPER); |
︙ | ︙ | |||
159 160 161 162 163 164 165 166 167 168 169 170 171 172 | } ret = 1; } end: if (chain) sk_X509_pop_free(chain, X509_free); return ret; } static int ocsp_find_signer(X509 **psigner, OCSP_BASICRESP *bs, STACK_OF(X509) *certs, X509_STORE *st, unsigned long flags) { | > > | 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | } ret = 1; } end: if (chain) sk_X509_pop_free(chain, X509_free); if (bs->certs && certs) sk_X509_free(untrusted); return ret; } static int ocsp_find_signer(X509 **psigner, OCSP_BASICRESP *bs, STACK_OF(X509) *certs, X509_STORE *st, unsigned long flags) { |
︙ | ︙ | |||
429 430 431 432 433 434 435 | static int ocsp_req_find_signer(X509 **psigner, OCSP_REQUEST *req, X509_NAME *nm, STACK_OF(X509) *certs, X509_STORE *st, unsigned long flags) { X509 *signer; if (!(flags & OCSP_NOINTERN)) { | < | > | | > | 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 | static int ocsp_req_find_signer(X509 **psigner, OCSP_REQUEST *req, X509_NAME *nm, STACK_OF(X509) *certs, X509_STORE *st, unsigned long flags) { X509 *signer; if (!(flags & OCSP_NOINTERN)) { signer = X509_find_by_subject(req->optionalSignature->certs, nm); if (signer) { *psigner = signer; return 1; } } signer = X509_find_by_subject(certs, nm); if (signer) { *psigner = signer; return 2; } return 0; } |
Changes to jni/libressl/crypto/pem/pem_info.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: pem_info.c,v 1.20 2015/02/10 09:52:35 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
396 397 398 399 400 401 402 | * coding it here and Eric can do it when this makes it into the * base library --tjh */ ret = 1; err: | | | | 396 397 398 399 400 401 402 403 404 405 406 | * coding it here and Eric can do it when this makes it into the * base library --tjh */ ret = 1; err: explicit_bzero((char *)&ctx, sizeof(ctx)); explicit_bzero(buf, PEM_BUFSIZE); return (ret); } |
Changes to jni/libressl/crypto/pem/pem_lib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: pem_lib.c,v 1.41 2015/07/19 18:29:31 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
402 403 404 405 406 407 408 | /* The 'iv' is used as the iv and as a salt. It is * NOT taken from the BytesToKey function */ if (!EVP_BytesToKey(enc, EVP_md5(), iv, kstr, klen, 1, key, NULL)) goto err; if (kstr == (unsigned char *)buf) | | | 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 | /* The 'iv' is used as the iv and as a salt. It is * NOT taken from the BytesToKey function */ if (!EVP_BytesToKey(enc, EVP_md5(), iv, kstr, klen, 1, key, NULL)) goto err; if (kstr == (unsigned char *)buf) explicit_bzero(buf, PEM_BUFSIZE); if (strlen(objstr) + 23 + 2 * enc->iv_len + 13 > sizeof buf) { PEMerr(PEM_F_PEM_ASN1_WRITE_BIO, ASN1_R_BUFFER_TOO_SMALL); goto err; } |
︙ | ︙ | |||
433 434 435 436 437 438 439 | ret = 1; buf[0] = '\0'; } i = PEM_write_bio(bp, name, buf, data, i); if (i <= 0) ret = 0; err: | | | | | | | 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 | ret = 1; buf[0] = '\0'; } i = PEM_write_bio(bp, name, buf, data, i); if (i <= 0) ret = 0; err: explicit_bzero(key, sizeof(key)); explicit_bzero(iv, sizeof(iv)); explicit_bzero((char *)&ctx, sizeof(ctx)); explicit_bzero(buf, PEM_BUFSIZE); if (data != NULL) { explicit_bzero(data, (unsigned int)dsize); free(data); } return (ret); } int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *plen, |
︙ | ︙ | |||
479 480 481 482 483 484 485 | o = EVP_DecryptInit_ex(&ctx, cipher->cipher, NULL, key, &(cipher->iv[0])); if (o) o = EVP_DecryptUpdate(&ctx, data, &i, data, j); if (o) o = EVP_DecryptFinal_ex(&ctx, &(data[i]), &j); EVP_CIPHER_CTX_cleanup(&ctx); | | | | 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 | o = EVP_DecryptInit_ex(&ctx, cipher->cipher, NULL, key, &(cipher->iv[0])); if (o) o = EVP_DecryptUpdate(&ctx, data, &i, data, j); if (o) o = EVP_DecryptFinal_ex(&ctx, &(data[i]), &j); EVP_CIPHER_CTX_cleanup(&ctx); explicit_bzero((char *)buf, sizeof(buf)); explicit_bzero((char *)key, sizeof(key)); if (!o) { PEMerr(PEM_F_PEM_DO_HEADER, PEM_R_BAD_DECRYPT); return (0); } *plen = j + i; return (1); } |
︙ | ︙ | |||
639 640 641 642 643 644 645 | i += outl; len -= n; j += n; } EVP_EncodeFinal(&ctx, buf, &outl); if ((outl > 0) && (BIO_write(bp, (char *)buf, outl) != outl)) goto err; | | | | 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 | i += outl; len -= n; j += n; } EVP_EncodeFinal(&ctx, buf, &outl); if ((outl > 0) && (BIO_write(bp, (char *)buf, outl) != outl)) goto err; explicit_bzero(buf, PEM_BUFSIZE * 8); free(buf); buf = NULL; if ((BIO_write(bp, "-----END ", 9) != 9) || (BIO_write(bp, name, nlen) != nlen) || (BIO_write(bp, "-----\n", 6) != 6)) goto err; return (i + outl); err: if (buf) { explicit_bzero(buf, PEM_BUFSIZE * 8); free(buf); } PEMerr(PEM_F_PEM_WRITE_BIO, reason); return (0); } int |
︙ | ︙ |
Changes to jni/libressl/crypto/pem/pem_pk8.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: pem_pk8.c,v 1.9 2014/10/18 17:20:40 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
53 54 55 56 57 58 59 60 61 62 63 64 65 66 | * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <stdio.h> #include <openssl/buffer.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/objects.h> #include <openssl/pem.h> #include <openssl/pkcs12.h> | > | 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <stdio.h> #include <string.h> #include <openssl/buffer.h> #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/objects.h> #include <openssl/pem.h> #include <openssl/pkcs12.h> |
︙ | ︙ | |||
131 132 133 134 135 136 137 | return 0; } kstr = buf; } p8 = PKCS8_encrypt(nid, enc, kstr, klen, NULL, 0, 0, p8inf); if (kstr == buf) | | | 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | return 0; } kstr = buf; } p8 = PKCS8_encrypt(nid, enc, kstr, klen, NULL, 0, 0, p8inf); if (kstr == buf) explicit_bzero(buf, klen); PKCS8_PRIV_KEY_INFO_free(p8inf); if (isder) ret = i2d_PKCS8_bio(bp, p8); else ret = PEM_write_bio_PKCS8(bp, p8); X509_SIG_free(p8); return ret; |
︙ | ︙ |
Changes to jni/libressl/crypto/pem/pem_pkey.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: pem_pkey.c,v 1.20 2015/02/11 03:19:37 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
140 141 142 143 144 145 146 | } p8err: if (ret == NULL) PEMerr(PEM_F_PEM_READ_BIO_PRIVATEKEY, ERR_R_ASN1_LIB); err: free(nm); | | | 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | } p8err: if (ret == NULL) PEMerr(PEM_F_PEM_READ_BIO_PRIVATEKEY, ERR_R_ASN1_LIB); err: free(nm); explicit_bzero(data, len); free(data); return (ret); } int PEM_write_bio_PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u) |
︙ | ︙ |
Changes to jni/libressl/crypto/pem/pem_seal.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: pem_seal.c,v 1.21 2014/10/18 17:20:40 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
116 117 118 119 120 121 122 | memcpy(ek[i], s, j + 1); } ret = npubk; err: free(s); | | | 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | memcpy(ek[i], s, j + 1); } ret = npubk; err: free(s); explicit_bzero(key, EVP_MAX_KEY_LENGTH); return (ret); } void PEM_SealUpdate(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *out, int *outl, unsigned char *in, int inl) { |
︙ | ︙ |
Changes to jni/libressl/crypto/pem/pvkfmt.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: pvkfmt.c,v 1.15 2016/03/02 05:02:35 beck Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2005. */ /* ==================================================================== * Copyright (c) 2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
175 176 177 178 179 180 181 182 183 184 185 186 187 188 | PEMerr(PEM_F_DO_BLOB_HEADER, PEM_R_BAD_VERSION_NUMBER); return 0; } /* Ignore reserved, aiKeyAlg */ p += 6; *pmagic = read_ledword(&p); *pbitlen = read_ledword(&p); *pisdss = 0; switch (*pmagic) { case MS_DSS1MAGIC: *pisdss = 1; case MS_RSA1MAGIC: if (*pispub == 0) { | > > > > | 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | PEMerr(PEM_F_DO_BLOB_HEADER, PEM_R_BAD_VERSION_NUMBER); return 0; } /* Ignore reserved, aiKeyAlg */ p += 6; *pmagic = read_ledword(&p); *pbitlen = read_ledword(&p); if (*pbitlen > 65536) { PEMerr(PEM_F_DO_BLOB_HEADER, PEM_R_INCONSISTENT_HEADER); return 0; } *pisdss = 0; switch (*pmagic) { case MS_DSS1MAGIC: *pisdss = 1; case MS_RSA1MAGIC: if (*pispub == 0) { |
︙ | ︙ | |||
677 678 679 680 681 682 683 684 685 686 687 688 689 690 | } /* Skip reserved */ p += 4; /*keytype = */read_ledword(&p); is_encrypted = read_ledword(&p); *psaltlen = read_ledword(&p); *pkeylen = read_ledword(&p); if (is_encrypted && !*psaltlen) { PEMerr(PEM_F_DO_PVK_HEADER, PEM_R_INCONSISTENT_HEADER); return 0; } *in = p; | > > > > | 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 | } /* Skip reserved */ p += 4; /*keytype = */read_ledword(&p); is_encrypted = read_ledword(&p); *psaltlen = read_ledword(&p); *pkeylen = read_ledword(&p); if (*psaltlen > 65536 || *pkeylen > 65536) { PEMerr(PEM_F_DO_PVK_HEADER, PEM_R_ERROR_CONVERTING_PRIVATE_KEY); return 0; } if (is_encrypted && !*psaltlen) { PEMerr(PEM_F_DO_PVK_HEADER, PEM_R_INCONSISTENT_HEADER); return 0; } *in = p; |
︙ | ︙ | |||
761 762 763 764 765 766 767 | magic = read_ledword((const unsigned char **)&q); if (magic != MS_RSA2MAGIC && magic != MS_DSS2MAGIC) { q = enctmp + 8; memset(keybuf + 5, 0, 11); if (!EVP_DecryptInit_ex(&cctx, EVP_rc4(), NULL, keybuf, NULL)) goto err; | | | | | | | 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 | magic = read_ledword((const unsigned char **)&q); if (magic != MS_RSA2MAGIC && magic != MS_DSS2MAGIC) { q = enctmp + 8; memset(keybuf + 5, 0, 11); if (!EVP_DecryptInit_ex(&cctx, EVP_rc4(), NULL, keybuf, NULL)) goto err; explicit_bzero(keybuf, 20); if (!EVP_DecryptUpdate(&cctx, q, &enctmplen, p, inlen)) goto err; if (!EVP_DecryptFinal_ex(&cctx, q + enctmplen, &enctmplen)) goto err; magic = read_ledword((const unsigned char **)&q); if (magic != MS_RSA2MAGIC && magic != MS_DSS2MAGIC) { PEMerr(PEM_F_DO_PVK_BODY, PEM_R_BAD_DECRYPT); goto err; } } else explicit_bzero(keybuf, 20); p = enctmp; } ret = b2i_PrivateKey(&p, keylen); err: EVP_CIPHER_CTX_cleanup(&cctx); if (enctmp && saltlen) free(enctmp); return ret; } EVP_PKEY * b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u) { unsigned char pvk_hdr[24], *buf = NULL; const unsigned char *p; size_t buflen; EVP_PKEY *ret = NULL; unsigned int saltlen, keylen; if (BIO_read(in, pvk_hdr, 24) != 24) { PEMerr(PEM_F_B2I_PVK_BIO, PEM_R_PVK_DATA_TOO_SHORT); return NULL; } p = pvk_hdr; if (!do_PVK_header(&p, 24, 0, &saltlen, &keylen)) return 0; buflen = keylen + saltlen; buf = malloc(buflen); if (!buf) { PEMerr(PEM_F_B2I_PVK_BIO, ERR_R_MALLOC_FAILURE); return 0; } p = buf; if (BIO_read(in, buf, buflen) != buflen) { PEMerr(PEM_F_B2I_PVK_BIO, PEM_R_PVK_DATA_TOO_SHORT); goto err; } ret = do_PVK_body(&p, saltlen, keylen, cb, u); err: if (buf) { explicit_bzero(buf, buflen); free(buf); } return ret; } static int i2b_PVK(unsigned char **out, EVP_PKEY*pk, int enclevel, pem_password_cb *cb, |
︙ | ︙ | |||
890 891 892 893 894 895 896 | (unsigned char *)psbuf, inlen)) goto error; if (enclevel == 1) memset(keybuf + 5, 0, 11); p = salt + PVK_SALTLEN + 8; if (!EVP_EncryptInit_ex(&cctx, EVP_rc4(), NULL, keybuf, NULL)) goto error; | | | 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 | (unsigned char *)psbuf, inlen)) goto error; if (enclevel == 1) memset(keybuf + 5, 0, 11); p = salt + PVK_SALTLEN + 8; if (!EVP_EncryptInit_ex(&cctx, EVP_rc4(), NULL, keybuf, NULL)) goto error; explicit_bzero(keybuf, 20); if (!EVP_DecryptUpdate(&cctx, p, &enctmplen, p, pklen - 8)) goto error; if (!EVP_DecryptFinal_ex(&cctx, p + enctmplen, &enctmplen)) goto error; } EVP_CIPHER_CTX_cleanup(&cctx); return outlen; |
︙ | ︙ |
Changes to jni/libressl/crypto/pkcs12/p12_add.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: p12_add.c,v 1.12 2015/02/14 12:43:07 miod Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
147 148 149 150 151 152 153 | PKCS7 *p7; if (!(p7 = PKCS7_new())) { PKCS12err(PKCS12_F_PKCS12_PACK_P7DATA, ERR_R_MALLOC_FAILURE); return NULL; } p7->type = OBJ_nid2obj(NID_pkcs7_data); | | | 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | PKCS7 *p7; if (!(p7 = PKCS7_new())) { PKCS12err(PKCS12_F_PKCS12_PACK_P7DATA, ERR_R_MALLOC_FAILURE); return NULL; } p7->type = OBJ_nid2obj(NID_pkcs7_data); if (!(p7->d.data = ASN1_OCTET_STRING_new())) { PKCS12err(PKCS12_F_PKCS12_PACK_P7DATA, ERR_R_MALLOC_FAILURE); goto err; } if (!ASN1_item_pack(sk, ASN1_ITEM_rptr(PKCS12_SAFEBAGS), &p7->d.data)) { PKCS12err(PKCS12_F_PKCS12_PACK_P7DATA, PKCS12_R_CANT_PACK_STRUCTURE); |
︙ | ︙ | |||
209 210 211 212 213 214 215 | if (!pbe) { PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA, ERR_R_MALLOC_FAILURE); goto err; } X509_ALGOR_free(p7->d.encrypted->enc_data->algorithm); p7->d.encrypted->enc_data->algorithm = pbe; | | | 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 | if (!pbe) { PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA, ERR_R_MALLOC_FAILURE); goto err; } X509_ALGOR_free(p7->d.encrypted->enc_data->algorithm); p7->d.encrypted->enc_data->algorithm = pbe; ASN1_OCTET_STRING_free(p7->d.encrypted->enc_data->enc_data); if (!(p7->d.encrypted->enc_data->enc_data = PKCS12_item_i2d_encrypt( pbe, ASN1_ITEM_rptr(PKCS12_SAFEBAGS), pass, passlen, bags, 1))) { PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA, PKCS12_R_ENCRYPT_ERROR); goto err; } |
︙ | ︙ |
Changes to jni/libressl/crypto/pkcs12/p12_crpt.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: p12_crpt.c,v 1.11 2014/07/11 08:44:49 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
53 54 55 56 57 58 59 60 61 62 63 64 65 66 | * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <openssl/err.h> #include <openssl/pkcs12.h> /* PKCS#12 PBE algorithms now in static table */ void | > | 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <string.h> #include <openssl/err.h> #include <openssl/pkcs12.h> /* PKCS#12 PBE algorithms now in static table */ void |
︙ | ︙ | |||
107 108 109 110 111 112 113 | iter, EVP_CIPHER_iv_length(cipher), iv, md)) { PKCS12err(PKCS12_F_PKCS12_PBE_KEYIVGEN, PKCS12_R_IV_GEN_ERROR); PBEPARAM_free(pbe); return 0; } PBEPARAM_free(pbe); ret = EVP_CipherInit_ex(ctx, cipher, NULL, key, iv, en_de); | | | | 108 109 110 111 112 113 114 115 116 117 118 | iter, EVP_CIPHER_iv_length(cipher), iv, md)) { PKCS12err(PKCS12_F_PKCS12_PBE_KEYIVGEN, PKCS12_R_IV_GEN_ERROR); PBEPARAM_free(pbe); return 0; } PBEPARAM_free(pbe); ret = EVP_CipherInit_ex(ctx, cipher, NULL, key, iv, en_de); explicit_bzero(key, EVP_MAX_KEY_LENGTH); explicit_bzero(iv, EVP_MAX_IV_LENGTH); return ret; } |
Changes to jni/libressl/crypto/pkcs12/p12_decr.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: p12_decr.c,v 1.16 2015/09/10 15:56:25 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
53 54 55 56 57 58 59 60 61 62 63 64 65 66 | * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <openssl/err.h> #include <openssl/pkcs12.h> /* Encrypt/Decrypt a buffer based on password and algor, result in a * malloc'ed buffer */ | > | 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <string.h> #include <openssl/err.h> #include <openssl/pkcs12.h> /* Encrypt/Decrypt a buffer based on password and algor, result in a * malloc'ed buffer */ |
︙ | ︙ | |||
133 134 135 136 137 138 139 | PKCS12err(PKCS12_F_PKCS12_ITEM_DECRYPT_D2I, PKCS12_R_PKCS12_PBE_CRYPT_ERROR); return NULL; } p = out; ret = ASN1_item_d2i(NULL, &p, outlen, it); if (zbuf) | | | | | | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | PKCS12err(PKCS12_F_PKCS12_ITEM_DECRYPT_D2I, PKCS12_R_PKCS12_PBE_CRYPT_ERROR); return NULL; } p = out; ret = ASN1_item_d2i(NULL, &p, outlen, it); if (zbuf) explicit_bzero(out, outlen); if (!ret) PKCS12err(PKCS12_F_PKCS12_ITEM_DECRYPT_D2I, PKCS12_R_DECODE_ERROR); free(out); return ret; } /* Encode ASN1 structure and encrypt, return OCTET STRING * if zbuf set zero encoding. */ ASN1_OCTET_STRING * PKCS12_item_i2d_encrypt(X509_ALGOR *algor, const ASN1_ITEM *it, const char *pass, int passlen, void *obj, int zbuf) { ASN1_OCTET_STRING *oct; unsigned char *in = NULL; int inlen; if (!(oct = ASN1_OCTET_STRING_new ())) { PKCS12err(PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT, ERR_R_MALLOC_FAILURE); return NULL; } inlen = ASN1_item_i2d(obj, &in, it); if (!in) { PKCS12err(PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT, PKCS12_R_ENCODE_ERROR); goto err; } if (!PKCS12_pbe_crypt(algor, pass, passlen, in, inlen, &oct->data, &oct->length, 1)) { PKCS12err(PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT, PKCS12_R_ENCRYPT_ERROR); goto err; } if (zbuf) explicit_bzero(in, inlen); free(in); return oct; err: free(in); ASN1_OCTET_STRING_free(oct); return NULL; } IMPLEMENT_PKCS12_STACK_OF(PKCS7) |
Changes to jni/libressl/crypto/pkcs12/p12_init.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: p12_init.c,v 1.9 2014/07/11 08:44:49 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
73 74 75 76 77 78 79 | return NULL; } ASN1_INTEGER_set(pkcs12->version, 3); pkcs12->authsafes->type = OBJ_nid2obj(mode); switch (mode) { case NID_pkcs7_data: if (!(pkcs12->authsafes->d.data = | | | 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | return NULL; } ASN1_INTEGER_set(pkcs12->version, 3); pkcs12->authsafes->type = OBJ_nid2obj(mode); switch (mode) { case NID_pkcs7_data: if (!(pkcs12->authsafes->d.data = ASN1_OCTET_STRING_new())) { PKCS12err(PKCS12_F_PKCS12_INIT, ERR_R_MALLOC_FAILURE); goto err; } break; default: PKCS12err(PKCS12_F_PKCS12_INIT, PKCS12_R_UNSUPPORTED_PKCS12_MODE); |
︙ | ︙ |
Changes to jni/libressl/crypto/pkcs12/p12_key.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: p12_key.c,v 1.22 2015/02/07 13:19:15 doug Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
85 86 87 88 89 90 91 | return 0; } ret = PKCS12_key_gen_uni(unipass, uniplen, salt, saltlen, id, iter, n, out, md_type); if (ret <= 0) return 0; if (unipass) { | | | 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | return 0; } ret = PKCS12_key_gen_uni(unipass, uniplen, salt, saltlen, id, iter, n, out, md_type); if (ret <= 0) return 0; if (unipass) { explicit_bzero(unipass, uniplen); free(unipass); } return ret; } int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, |
︙ | ︙ |
Changes to jni/libressl/crypto/pkcs12/p12_kiss.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: p12_kiss.c,v 1.16 2014/07/11 08:44:49 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
145 146 147 148 149 150 151 | *ca = sk_X509_new_null(); if (!*ca) goto err; if (!sk_X509_push(*ca, x)) goto err; x = NULL; } | < | | < | | 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | *ca = sk_X509_new_null(); if (!*ca) goto err; if (!sk_X509_push(*ca, x)) goto err; x = NULL; } X509_free(x); } if (ocerts) sk_X509_pop_free(ocerts, X509_free); return 1; err: if (pkey && *pkey) EVP_PKEY_free(*pkey); if (cert) X509_free(*cert); X509_free(x); if (ocerts) sk_X509_pop_free(ocerts, X509_free); return 0; } /* Parse the outer PKCS#12 structure */ |
︙ | ︙ |
Changes to jni/libressl/crypto/pkcs12/p12_mutl.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: p12_mutl.c,v 1.20 2015/07/29 14:58:34 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
172 173 174 175 176 177 178 | int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, int saltlen, const EVP_MD *md_type) { if (!(p12->mac = PKCS12_MAC_DATA_new())) return PKCS12_ERROR; if (iter > 1) { | | | 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, int saltlen, const EVP_MD *md_type) { if (!(p12->mac = PKCS12_MAC_DATA_new())) return PKCS12_ERROR; if (iter > 1) { if (!(p12->mac->iter = ASN1_INTEGER_new())) { PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE); return 0; } if (!ASN1_INTEGER_set(p12->mac->iter, iter)) { PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE); |
︙ | ︙ |
Changes to jni/libressl/crypto/pkcs12/p12_p8e.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: p12_p8e.c,v 1.5 2014/07/11 08:44:49 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2001. */ /* ==================================================================== * Copyright (c) 2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
80 81 82 83 84 85 86 | pbe = PKCS5_pbe_set(pbe_nid, iter, salt, saltlen); if (!pbe) { PKCS12err(PKCS12_F_PKCS8_ENCRYPT, ERR_R_ASN1_LIB); goto err; } X509_ALGOR_free(p8->algor); p8->algor = pbe; | | | 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | pbe = PKCS5_pbe_set(pbe_nid, iter, salt, saltlen); if (!pbe) { PKCS12err(PKCS12_F_PKCS8_ENCRYPT, ERR_R_ASN1_LIB); goto err; } X509_ALGOR_free(p8->algor); p8->algor = pbe; ASN1_OCTET_STRING_free(p8->digest); p8->digest = PKCS12_item_i2d_encrypt(pbe, ASN1_ITEM_rptr(PKCS8_PRIV_KEY_INFO), pass, passlen, p8inf, 1); if (!p8->digest) { PKCS12err(PKCS12_F_PKCS8_ENCRYPT, PKCS12_R_ENCRYPT_ERROR); goto err; } return p8; err: X509_SIG_free(p8); return NULL; } |
Changes to jni/libressl/crypto/pkcs7/pk7_doit.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: pk7_doit.c,v 1.37 2015/09/10 15:56:25 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
229 230 231 232 233 234 235 | PKCS7err(PKCS7_F_PKCS7_DECRYPT_RINFO, ERR_R_EVP_LIB); goto err; } ret = 1; if (*pek) { | | | 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | PKCS7err(PKCS7_F_PKCS7_DECRYPT_RINFO, ERR_R_EVP_LIB); goto err; } ret = 1; if (*pek) { explicit_bzero(*pek, *peklen); free(*pek); } *pek = ek; *peklen = eklen; err: |
︙ | ︙ | |||
367 368 369 370 371 372 373 | /* Lets do the pub key stuff :-) */ for (i = 0; i < sk_PKCS7_RECIP_INFO_num(rsk); i++) { ri = sk_PKCS7_RECIP_INFO_value(rsk, i); if (pkcs7_encode_rinfo(ri, key, keylen) <= 0) goto err; } | | | 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 | /* Lets do the pub key stuff :-) */ for (i = 0; i < sk_PKCS7_RECIP_INFO_num(rsk); i++) { ri = sk_PKCS7_RECIP_INFO_value(rsk, i); if (pkcs7_encode_rinfo(ri, key, keylen) <= 0) goto err; } explicit_bzero(key, keylen); if (out == NULL) out = btmp; else BIO_push(out, btmp); btmp = NULL; } |
︙ | ︙ | |||
584 585 586 587 588 589 590 | if (eklen != EVP_CIPHER_CTX_key_length(evp_ctx)) { /* Some S/MIME clients don't use the same key * and effective key length. The key length is * determined by the size of the decrypted RSA key. */ if (!EVP_CIPHER_CTX_set_key_length(evp_ctx, eklen)) { /* Use random key as MMA defence */ | | | | | 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 | if (eklen != EVP_CIPHER_CTX_key_length(evp_ctx)) { /* Some S/MIME clients don't use the same key * and effective key length. The key length is * determined by the size of the decrypted RSA key. */ if (!EVP_CIPHER_CTX_set_key_length(evp_ctx, eklen)) { /* Use random key as MMA defence */ explicit_bzero(ek, eklen); free(ek); ek = tkey; eklen = tkeylen; tkey = NULL; } } /* Clear errors so we don't leak information useful in MMA */ ERR_clear_error(); if (EVP_CipherInit_ex(evp_ctx, NULL, NULL, ek, NULL, 0) <= 0) goto err; if (ek) { explicit_bzero(ek, eklen); free(ek); ek = NULL; } if (tkey) { explicit_bzero(tkey, tkeylen); free(tkey); tkey = NULL; } if (out == NULL) out = etmp; else |
︙ | ︙ | |||
631 632 633 634 635 636 637 | goto err; } BIO_push(out, bio); if (0) { err: if (ek) { | | | | 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 | goto err; } BIO_push(out, bio); if (0) { err: if (ek) { explicit_bzero(ek, eklen); free(ek); } if (tkey) { explicit_bzero(tkey, tkeylen); free(tkey); } if (out != NULL) BIO_free_all(out); if (btmp != NULL) BIO_free_all(btmp); if (etmp != NULL) |
︙ | ︙ | |||
741 742 743 744 745 746 747 | os = p7->d.data; break; case NID_pkcs7_signedAndEnveloped: /* XXX */ si_sk = p7->d.signed_and_enveloped->signer_info; os = p7->d.signed_and_enveloped->enc_data->enc_data; if (!os) { | | | | | | 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 | os = p7->d.data; break; case NID_pkcs7_signedAndEnveloped: /* XXX */ si_sk = p7->d.signed_and_enveloped->signer_info; os = p7->d.signed_and_enveloped->enc_data->enc_data; if (!os) { os = ASN1_OCTET_STRING_new(); if (!os) { PKCS7err(PKCS7_F_PKCS7_DATAFINAL, ERR_R_MALLOC_FAILURE); goto err; } p7->d.signed_and_enveloped->enc_data->enc_data = os; } break; case NID_pkcs7_enveloped: /* XXX */ os = p7->d.enveloped->enc_data->enc_data; if (!os) { os = ASN1_OCTET_STRING_new(); if (!os) { PKCS7err(PKCS7_F_PKCS7_DATAFINAL, ERR_R_MALLOC_FAILURE); goto err; } p7->d.enveloped->enc_data->enc_data = os; } break; case NID_pkcs7_signed: si_sk = p7->d.sign->signer_info; os = PKCS7_get_octet_string(p7->d.sign->contents); if (!PKCS7_is_detached(p7) && os == NULL) { PKCS7err(PKCS7_F_PKCS7_DATAFINAL, PKCS7_R_DECODE_ERROR); goto err; } /* If detached data then the content is excluded */ if (PKCS7_type_is_data(p7->d.sign->contents) && p7->detached) { ASN1_OCTET_STRING_free(os); os = NULL; p7->d.sign->contents->d.data = NULL; } break; case NID_pkcs7_digest: os = PKCS7_get_octet_string(p7->d.digest->contents); if (os == NULL) { PKCS7err(PKCS7_F_PKCS7_DATAFINAL, PKCS7_R_DECODE_ERROR); goto err; } /* If detached data then the content is excluded */ if (PKCS7_type_is_data(p7->d.digest->contents) && p7->detached) { ASN1_OCTET_STRING_free(os); os = NULL; p7->d.digest->contents->d.data = NULL; } break; default: PKCS7err(PKCS7_F_PKCS7_DATAFINAL, |
︙ | ︙ |
Changes to jni/libressl/crypto/pkcs7/pk7_lib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: pk7_lib.c,v 1.17 2015/09/30 17:30:15 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
177 178 179 180 181 182 183 | PKCS7_SIGNED_free(p7->d.sign); p7->d.sign = NULL; goto err; } break; case NID_pkcs7_data: p7->type = obj; | | | 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | PKCS7_SIGNED_free(p7->d.sign); p7->d.sign = NULL; goto err; } break; case NID_pkcs7_data: p7->type = obj; if ((p7->d.data = ASN1_OCTET_STRING_new()) == NULL) goto err; break; case NID_pkcs7_signedAndEnveloped: p7->type = obj; if ((p7->d.signed_and_enveloped = PKCS7_SIGN_ENVELOPE_new()) == NULL) goto err; |
︙ | ︙ | |||
374 375 376 377 378 379 380 | goto err; if (!X509_NAME_set(&p7i->issuer_and_serial->issuer, X509_get_issuer_name(x509))) goto err; /* because ASN1_INTEGER_set is used to set a 'long' we will do * things the ugly way. */ | | | 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 | goto err; if (!X509_NAME_set(&p7i->issuer_and_serial->issuer, X509_get_issuer_name(x509))) goto err; /* because ASN1_INTEGER_set is used to set a 'long' we will do * things the ugly way. */ ASN1_INTEGER_free(p7i->issuer_and_serial->serial); if (!(p7i->issuer_and_serial->serial = ASN1_STRING_dup(X509_get_serialNumber(x509)))) goto err; /* lets keep the pkey around for a while */ CRYPTO_add(&pkey->references, 1, CRYPTO_LOCK_EVP_PKEY); p7i->pkey = pkey; |
︙ | ︙ | |||
539 540 541 542 543 544 545 | EVP_PKEY *pkey = NULL; if (!ASN1_INTEGER_set(p7i->version, 0)) return 0; if (!X509_NAME_set(&p7i->issuer_and_serial->issuer, X509_get_issuer_name(x509))) return 0; | | | 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 | EVP_PKEY *pkey = NULL; if (!ASN1_INTEGER_set(p7i->version, 0)) return 0; if (!X509_NAME_set(&p7i->issuer_and_serial->issuer, X509_get_issuer_name(x509))) return 0; ASN1_INTEGER_free(p7i->issuer_and_serial->serial); if (!(p7i->issuer_and_serial->serial = ASN1_STRING_dup(X509_get_serialNumber(x509)))) return 0; pkey = X509_get_pubkey(x509); if (!pkey || !pkey->ameth || !pkey->ameth->pkey_ctrl) { |
︙ | ︙ | |||
632 633 634 635 636 637 638 | case NID_pkcs7_data: os = p7->d.data; break; case NID_pkcs7_signedAndEnveloped: os = p7->d.signed_and_enveloped->enc_data->enc_data; if (os == NULL) { | | | | 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 | case NID_pkcs7_data: os = p7->d.data; break; case NID_pkcs7_signedAndEnveloped: os = p7->d.signed_and_enveloped->enc_data->enc_data; if (os == NULL) { os = ASN1_OCTET_STRING_new(); p7->d.signed_and_enveloped->enc_data->enc_data = os; } break; case NID_pkcs7_enveloped: os = p7->d.enveloped->enc_data->enc_data; if (os == NULL) { os = ASN1_OCTET_STRING_new(); p7->d.enveloped->enc_data->enc_data = os; } break; case NID_pkcs7_signed: os = p7->d.sign->contents->d.data; break; |
︙ | ︙ |
Changes to jni/libressl/crypto/rand/randfile.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: randfile.c,v 1.41 2015/07/18 22:46:42 beck Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
126 127 128 129 130 131 132 | } ret += i; if (n <= 0) break; } fclose(out); | | | 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | } ret += i; if (n <= 0) break; } fclose(out); explicit_bzero(buf, BUFSIZE); return ret; } const char * RAND_file_name(char * buf, size_t size) { if (strlcpy(buf, "/dev/urandom", size) >= size) return (NULL); return buf; } |
Changes to jni/libressl/crypto/rc4/rc4_enc.c.
|
| | | | | | | | > | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | /* $OpenBSD: rc4_enc.c,v 1.14 2015/10/20 15:50:13 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <machine/endian.h> #include <openssl/rc4.h> #include "rc4_locl.h" /* RC4 as implemented from a posting from * Newsgroups: sci.crypt * From: sterndark@netcom.com (David Sterndark) * Subject: RC4 Algorithm revealed. * Message-ID: <sternCvKL4B.Hyy@netcom.com> * Date: Wed, 14 Sep 1994 06:35:31 GMT */ void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, unsigned char *outdata) { RC4_INT *d; RC4_INT x, y,tx, ty; size_t i; x = key->x; y = key->y; d = key->data; #if defined(RC4_CHUNK) /* * The original reason for implementing this(*) was the fact that * pre-21164a Alpha CPUs don't have byte load/store instructions * and e.g. a byte store has to be done with 64-bit load, shift, * and, or and finally 64-bit store. Peaking data and operating |
︙ | ︙ | |||
117 118 119 120 121 122 123 | y=(tx+y)&0xff, \ ty=d[y], \ d[y]=tx, \ d[x]=ty, \ (RC4_CHUNK)d[(tx+ty)&0xff]\ ) | | | < | | 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | y=(tx+y)&0xff, \ ty=d[y], \ d[y]=tx, \ d[x]=ty, \ (RC4_CHUNK)d[(tx+ty)&0xff]\ ) if ((((size_t)indata & (sizeof(RC4_CHUNK) - 1)) | ((size_t)outdata & (sizeof(RC4_CHUNK) - 1))) == 0 ) { RC4_CHUNK ichunk, otp; /* * I reckon we can afford to implement both endian * cases and to decide which way to take at run-time * because the machine code appears to be very compact * and redundant 1-2KB is perfectly tolerable (i.e. * in case the compiler fails to eliminate it:-). By |
︙ | ︙ | |||
142 143 144 145 146 147 148 | * expressions themselves so I've got 'em to replace * corresponding #ifdefs from the previous version; * - I chose to let the redundant switch cases when * sizeof(RC4_CHUNK)!=8 be (were also #ifdefed * before); * - in case you wonder "&(sizeof(RC4_CHUNK)*8-1)" in * [LB]ESHFT guards against "shift is out of range" | | | < | < | | | | | < | | | | | | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | < | | | | | | < | | | | | | | | < < < | < < < < < < < < < < < < < < | < < < < < < < < < | | < | < | | | | | | | | | | | > | | | | < | < | > > | > > | > > | > > | > > | > > | > > | | | | | | 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | * expressions themselves so I've got 'em to replace * corresponding #ifdefs from the previous version; * - I chose to let the redundant switch cases when * sizeof(RC4_CHUNK)!=8 be (were also #ifdefed * before); * - in case you wonder "&(sizeof(RC4_CHUNK)*8-1)" in * [LB]ESHFT guards against "shift is out of range" * warnings when sizeof(RC4_CHUNK)!=8 * * <appro@fy.chalmers.se> */ if (BYTE_ORDER != LITTLE_ENDIAN) { /* BIG-ENDIAN CASE */ # define BESHFT(c) (((sizeof(RC4_CHUNK)-(c)-1)*8)&(sizeof(RC4_CHUNK)*8-1)) for (; len & (0 - sizeof(RC4_CHUNK)); len -= sizeof(RC4_CHUNK)) { ichunk = *(RC4_CHUNK *)indata; otp = RC4_STEP << BESHFT(0); otp |= RC4_STEP << BESHFT(1); otp |= RC4_STEP << BESHFT(2); otp |= RC4_STEP << BESHFT(3); if (sizeof(RC4_CHUNK) == 8) { otp |= RC4_STEP << BESHFT(4); otp |= RC4_STEP << BESHFT(5); otp |= RC4_STEP << BESHFT(6); otp |= RC4_STEP << BESHFT(7); } *(RC4_CHUNK *)outdata = otp^ichunk; indata += sizeof(RC4_CHUNK); outdata += sizeof(RC4_CHUNK); } } else { /* LITTLE-ENDIAN CASE */ # define LESHFT(c) (((c)*8)&(sizeof(RC4_CHUNK)*8-1)) for (; len & (0 - sizeof(RC4_CHUNK)); len -= sizeof(RC4_CHUNK)) { ichunk = *(RC4_CHUNK *)indata; otp = RC4_STEP; otp |= RC4_STEP << 8; otp |= RC4_STEP << 16; otp |= RC4_STEP << 24; if (sizeof(RC4_CHUNK) == 8) { otp |= RC4_STEP << LESHFT(4); otp |= RC4_STEP << LESHFT(5); otp |= RC4_STEP << LESHFT(6); otp |= RC4_STEP << LESHFT(7); } *(RC4_CHUNK *)outdata = otp ^ ichunk; indata += sizeof(RC4_CHUNK); outdata += sizeof(RC4_CHUNK); } } } #endif #define LOOP(in,out) \ x=((x+1)&0xff); \ tx=d[x]; \ y=(tx+y)&0xff; \ d[x]=ty=d[y]; \ d[y]=tx; \ (out) = d[(tx+ty)&0xff]^ (in); #ifndef RC4_INDEX #define RC4_LOOP(a,b,i) LOOP(*((a)++),*((b)++)) #else #define RC4_LOOP(a,b,i) LOOP(a[i],b[i]) #endif i = len >> 3; if (i) { for (;;) { RC4_LOOP(indata, outdata, 0); RC4_LOOP(indata, outdata, 1); RC4_LOOP(indata, outdata, 2); RC4_LOOP(indata, outdata, 3); RC4_LOOP(indata, outdata, 4); RC4_LOOP(indata, outdata, 5); RC4_LOOP(indata, outdata, 6); RC4_LOOP(indata, outdata, 7); #ifdef RC4_INDEX indata += 8; outdata += 8; #endif if (--i == 0) break; } } i = len&0x07; if (i) { for (;;) { RC4_LOOP(indata, outdata, 0); if (--i == 0) break; RC4_LOOP(indata, outdata, 1); if (--i == 0) break; RC4_LOOP(indata, outdata, 2); if (--i == 0) break; RC4_LOOP(indata, outdata, 3); if (--i == 0) break; RC4_LOOP(indata, outdata, 4); if (--i == 0) break; RC4_LOOP(indata, outdata, 5); if (--i == 0) break; RC4_LOOP(indata, outdata, 6); if (--i == 0) break; } } key->x = x; key->y = y; } |
Changes to jni/libressl/crypto/rc4/rc4_skey.c.
|
| | | | | | | | | > | | > | | | | | | | | | | | | > | < | | | | | | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | /* $OpenBSD: rc4_skey.c,v 1.13 2014/10/28 07:35:59 jsg Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #include <openssl/rc4.h> #include "rc4_locl.h" #include <openssl/opensslv.h> const char * RC4_options(void) { #ifdef RC4_INDEX if (sizeof(RC4_INT) == 1) return("rc4(idx,char)"); else return("rc4(idx,int)"); #else if (sizeof(RC4_INT) == 1) return("rc4(ptr,char)"); else return("rc4(ptr,int)"); #endif } /* RC4 as implemented from a posting from * Newsgroups: sci.crypt * From: sterndark@netcom.com (David Sterndark) * Subject: RC4 Algorithm revealed. * Message-ID: <sternCvKL4B.Hyy@netcom.com> * Date: Wed, 14 Sep 1994 06:35:31 GMT */ void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data) { RC4_INT tmp; int id1, id2; RC4_INT *d; unsigned int i; d = &(key->data[0]); key->x = 0; key->y = 0; id1 = id2 = 0; #define SK_LOOP(d,n) { \ tmp=d[(n)]; \ id2 = (data[id1] + tmp + id2) & 0xff; \ if (++id1 == len) id1=0; \ d[(n)]=d[id2]; \ d[id2]=tmp; } for (i = 0; i < 256; i++) d[i] = i; for (i = 0; i < 256; i += 4) { SK_LOOP(d, i + 0); SK_LOOP(d, i + 1); SK_LOOP(d, i + 2); SK_LOOP(d, i + 3); } } |
Changes to jni/libressl/crypto/ripemd/rmd_one.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: rmd_one.c,v 1.8 2015/09/10 15:03:59 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
68 69 70 71 72 73 74 | static unsigned char m[RIPEMD160_DIGEST_LENGTH]; if (md == NULL) md=m; if (!RIPEMD160_Init(&c)) return NULL; RIPEMD160_Update(&c,d,n); RIPEMD160_Final(md,&c); | | | 68 69 70 71 72 73 74 75 76 77 78 | static unsigned char m[RIPEMD160_DIGEST_LENGTH]; if (md == NULL) md=m; if (!RIPEMD160_Init(&c)) return NULL; RIPEMD160_Update(&c,d,n); RIPEMD160_Final(md,&c); explicit_bzero(&c,sizeof(c)); return(md); } |
Changes to jni/libressl/crypto/rsa/rsa_crpt.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: rsa_crpt.c,v 1.15 2016/06/30 02:02:06 bcook Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
165 166 167 168 169 170 171 | BN_CTX_end(ctx); return ret; } BN_BLINDING * RSA_setup_blinding(RSA *rsa, BN_CTX *in_ctx) { | | | | 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | BN_CTX_end(ctx); return ret; } BN_BLINDING * RSA_setup_blinding(RSA *rsa, BN_CTX *in_ctx) { BIGNUM *e; BIGNUM n; BN_CTX *ctx; BN_BLINDING *ret = NULL; if (in_ctx == NULL) { if ((ctx = BN_CTX_new()) == NULL) return 0; } else |
︙ | ︙ | |||
188 189 190 191 192 193 194 | RSAerr(RSA_F_RSA_SETUP_BLINDING, RSA_R_NO_PUBLIC_EXPONENT); goto err; } } else e = rsa->e; | < | < | < < | > | 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | RSAerr(RSA_F_RSA_SETUP_BLINDING, RSA_R_NO_PUBLIC_EXPONENT); goto err; } } else e = rsa->e; BN_init(&n); BN_with_flags(&n, rsa->n, BN_FLG_CONSTTIME); ret = BN_BLINDING_create_param(NULL, e, &n, ctx, rsa->meth->bn_mod_exp, rsa->_method_mod_n); if (ret == NULL) { RSAerr(RSA_F_RSA_SETUP_BLINDING, ERR_R_BN_LIB); goto err; } CRYPTO_THREADID_current(BN_BLINDING_thread_id(ret)); err: BN_CTX_end(ctx); |
︙ | ︙ |
Changes to jni/libressl/crypto/rsa/rsa_eay.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: rsa_eay.c,v 1.41 2016/06/30 02:02:06 bcook Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
106 107 108 109 110 111 112 113 114 115 116 117 118 119 | * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <openssl/opensslconf.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/rsa.h> | > | 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <string.h> #include <openssl/opensslconf.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/rsa.h> |
︙ | ︙ | |||
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT, RSA_R_BAD_E_VALUE); return -1; } } if ((ctx = BN_CTX_new()) == NULL) goto err; BN_CTX_start(ctx); f = BN_CTX_get(ctx); ret = BN_CTX_get(ctx); num = BN_num_bytes(rsa->n); buf = malloc(num); if (f == NULL || ret == NULL || buf == NULL) { RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT, ERR_R_MALLOC_FAILURE); goto err; } switch (padding) { case RSA_PKCS1_PADDING: | > > | 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT, RSA_R_BAD_E_VALUE); return -1; } } if ((ctx = BN_CTX_new()) == NULL) goto err; BN_CTX_start(ctx); f = BN_CTX_get(ctx); ret = BN_CTX_get(ctx); num = BN_num_bytes(rsa->n); buf = malloc(num); if (f == NULL || ret == NULL || buf == NULL) { RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT, ERR_R_MALLOC_FAILURE); goto err; } switch (padding) { case RSA_PKCS1_PADDING: |
︙ | ︙ | |||
238 239 240 241 242 243 244 | r = num; err: if (ctx != NULL) { BN_CTX_end(ctx); BN_CTX_free(ctx); } if (buf != NULL) { | | | 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 | r = num; err: if (ctx != NULL) { BN_CTX_end(ctx); BN_CTX_free(ctx); } if (buf != NULL) { explicit_bzero(buf, num); free(buf); } return r; } static BN_BLINDING * rsa_get_blinding(RSA *rsa, int *local, BN_CTX *ctx) |
︙ | ︙ | |||
357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 | * the unblinding factor outside the blinding structure. */ BIGNUM *unblind = NULL; BN_BLINDING *blinding = NULL; if ((ctx = BN_CTX_new()) == NULL) goto err; BN_CTX_start(ctx); f = BN_CTX_get(ctx); ret = BN_CTX_get(ctx); num = BN_num_bytes(rsa->n); buf = malloc(num); if (f == NULL || ret == NULL || buf == NULL) { RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT, ERR_R_MALLOC_FAILURE); goto err; } switch (padding) { case RSA_PKCS1_PADDING: | > > | 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 | * the unblinding factor outside the blinding structure. */ BIGNUM *unblind = NULL; BN_BLINDING *blinding = NULL; if ((ctx = BN_CTX_new()) == NULL) goto err; BN_CTX_start(ctx); f = BN_CTX_get(ctx); ret = BN_CTX_get(ctx); num = BN_num_bytes(rsa->n); buf = malloc(num); if (f == NULL || ret == NULL || buf == NULL) { RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT, ERR_R_MALLOC_FAILURE); goto err; } switch (padding) { case RSA_PKCS1_PADDING: |
︙ | ︙ | |||
421 422 423 424 425 426 427 | if ((rsa->flags & RSA_FLAG_EXT_PKEY) || (rsa->p != NULL && rsa->q != NULL && rsa->dmp1 != NULL && rsa->dmq1 != NULL && rsa->iqmp != NULL)) { if (!rsa->meth->rsa_mod_exp(ret, f, rsa, ctx)) goto err; } else { | | < < | < | < < | | > | 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 | if ((rsa->flags & RSA_FLAG_EXT_PKEY) || (rsa->p != NULL && rsa->q != NULL && rsa->dmp1 != NULL && rsa->dmq1 != NULL && rsa->iqmp != NULL)) { if (!rsa->meth->rsa_mod_exp(ret, f, rsa, ctx)) goto err; } else { BIGNUM d; BN_init(&d); BN_with_flags(&d, rsa->d, BN_FLG_CONSTTIME); if (rsa->flags & RSA_FLAG_CACHE_PUBLIC) if (!BN_MONT_CTX_set_locked(&rsa->_method_mod_n, CRYPTO_LOCK_RSA, rsa->n, ctx)) goto err; if (!rsa->meth->bn_mod_exp(ret, f, &d, rsa->n, ctx, rsa->_method_mod_n)) { goto err; } } if (blinding) if (!rsa_blinding_invert(blinding, ret, unblind, ctx)) goto err; if (padding == RSA_X931_PADDING) { |
︙ | ︙ | |||
468 469 470 471 472 473 474 | r = num; err: if (ctx != NULL) { BN_CTX_end(ctx); BN_CTX_free(ctx); } if (buf != NULL) { | | | 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 | r = num; err: if (ctx != NULL) { BN_CTX_end(ctx); BN_CTX_free(ctx); } if (buf != NULL) { explicit_bzero(buf, num); free(buf); } return r; } static int RSA_eay_private_decrypt(int flen, const unsigned char *from, unsigned char *to, |
︙ | ︙ | |||
494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 | * the unblinding factor outside the blinding structure. */ BIGNUM *unblind = NULL; BN_BLINDING *blinding = NULL; if ((ctx = BN_CTX_new()) == NULL) goto err; BN_CTX_start(ctx); f = BN_CTX_get(ctx); ret = BN_CTX_get(ctx); num = BN_num_bytes(rsa->n); buf = malloc(num); if (!f || !ret || !buf) { RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT, ERR_R_MALLOC_FAILURE); goto err; } /* This check was for equality but PGP does evil things * and chops off the top '0' bytes */ | > > | 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 | * the unblinding factor outside the blinding structure. */ BIGNUM *unblind = NULL; BN_BLINDING *blinding = NULL; if ((ctx = BN_CTX_new()) == NULL) goto err; BN_CTX_start(ctx); f = BN_CTX_get(ctx); ret = BN_CTX_get(ctx); num = BN_num_bytes(rsa->n); buf = malloc(num); if (!f || !ret || !buf) { RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT, ERR_R_MALLOC_FAILURE); goto err; } /* This check was for equality but PGP does evil things * and chops off the top '0' bytes */ |
︙ | ︙ | |||
548 549 550 551 552 553 554 | /* do the decrypt */ if ((rsa->flags & RSA_FLAG_EXT_PKEY) || (rsa->p != NULL && rsa->q != NULL && rsa->dmp1 != NULL && rsa->dmq1 != NULL && rsa->iqmp != NULL)) { if (!rsa->meth->rsa_mod_exp(ret, f, rsa, ctx)) goto err; } else { | | < < < > | < < > | | > | 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 | /* do the decrypt */ if ((rsa->flags & RSA_FLAG_EXT_PKEY) || (rsa->p != NULL && rsa->q != NULL && rsa->dmp1 != NULL && rsa->dmq1 != NULL && rsa->iqmp != NULL)) { if (!rsa->meth->rsa_mod_exp(ret, f, rsa, ctx)) goto err; } else { BIGNUM d; BN_init(&d); BN_with_flags(&d, rsa->d, BN_FLG_CONSTTIME); if (rsa->flags & RSA_FLAG_CACHE_PUBLIC) if (!BN_MONT_CTX_set_locked(&rsa->_method_mod_n, CRYPTO_LOCK_RSA, rsa->n, ctx)) goto err; if (!rsa->meth->bn_mod_exp(ret, f, &d, rsa->n, ctx, rsa->_method_mod_n)) { goto err; } } if (blinding) if (!rsa_blinding_invert(blinding, ret, unblind, ctx)) goto err; p = buf; |
︙ | ︙ | |||
603 604 605 606 607 608 609 | err: if (ctx != NULL) { BN_CTX_end(ctx); BN_CTX_free(ctx); } if (buf != NULL) { | | | 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 | err: if (ctx != NULL) { BN_CTX_end(ctx); BN_CTX_free(ctx); } if (buf != NULL) { explicit_bzero(buf, num); free(buf); } return r; } /* signature verification */ static int |
︙ | ︙ | |||
640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 | RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT, RSA_R_BAD_E_VALUE); return -1; } } if ((ctx = BN_CTX_new()) == NULL) goto err; BN_CTX_start(ctx); f = BN_CTX_get(ctx); ret = BN_CTX_get(ctx); num = BN_num_bytes(rsa->n); buf = malloc(num); if (!f || !ret || !buf) { RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT, ERR_R_MALLOC_FAILURE); goto err; } /* This check was for equality but PGP does evil things * and chops off the top '0' bytes */ | > > | 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 | RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT, RSA_R_BAD_E_VALUE); return -1; } } if ((ctx = BN_CTX_new()) == NULL) goto err; BN_CTX_start(ctx); f = BN_CTX_get(ctx); ret = BN_CTX_get(ctx); num = BN_num_bytes(rsa->n); buf = malloc(num); if (!f || !ret || !buf) { RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT, ERR_R_MALLOC_FAILURE); goto err; } /* This check was for equality but PGP does evil things * and chops off the top '0' bytes */ |
︙ | ︙ | |||
708 709 710 711 712 713 714 | err: if (ctx != NULL) { BN_CTX_end(ctx); BN_CTX_free(ctx); } if (buf != NULL) { | | < | | < | < | < < < | < > | < < < < | < | | > | < | | < < | | | < < | | | < | < < | | < < | | | < < | | | < | > < | | | < | | 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 | err: if (ctx != NULL) { BN_CTX_end(ctx); BN_CTX_free(ctx); } if (buf != NULL) { explicit_bzero(buf, num); free(buf); } return r; } static int RSA_eay_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) { BIGNUM *r1, *m1, *vrfy; BIGNUM dmp1, dmq1, c, pr1; int ret = 0; BN_CTX_start(ctx); r1 = BN_CTX_get(ctx); m1 = BN_CTX_get(ctx); vrfy = BN_CTX_get(ctx); if (r1 == NULL || m1 == NULL || vrfy == NULL) { RSAerr(RSA_F_RSA_EAY_MOD_EXP, ERR_R_MALLOC_FAILURE); goto err; } { BIGNUM p, q; /* * Make sure BN_mod_inverse in Montgomery intialization uses the * BN_FLG_CONSTTIME flag */ BN_init(&p); BN_init(&q); BN_with_flags(&p, rsa->p, BN_FLG_CONSTTIME); BN_with_flags(&q, rsa->q, BN_FLG_CONSTTIME); if (rsa->flags & RSA_FLAG_CACHE_PRIVATE) { if (!BN_MONT_CTX_set_locked(&rsa->_method_mod_p, CRYPTO_LOCK_RSA, &p, ctx) || !BN_MONT_CTX_set_locked(&rsa->_method_mod_q, CRYPTO_LOCK_RSA, &q, ctx)) { goto err; } } } if (rsa->flags & RSA_FLAG_CACHE_PUBLIC) if (!BN_MONT_CTX_set_locked(&rsa->_method_mod_n, CRYPTO_LOCK_RSA, rsa->n, ctx)) goto err; /* compute I mod q */ BN_init(&c); BN_with_flags(&c, I, BN_FLG_CONSTTIME); if (!BN_mod(r1, &c, rsa->q, ctx)) goto err; /* compute r1^dmq1 mod q */ BN_init(&dmq1); BN_with_flags(&dmq1, rsa->dmq1, BN_FLG_CONSTTIME); if (!rsa->meth->bn_mod_exp(m1, r1, &dmq1, rsa->q, ctx, rsa->_method_mod_q)) goto err; /* compute I mod p */ BN_with_flags(&c, I, BN_FLG_CONSTTIME); if (!BN_mod(r1, &c, rsa->p, ctx)) goto err; /* compute r1^dmp1 mod p */ BN_init(&dmp1); BN_with_flags(&dmp1, rsa->dmp1, BN_FLG_CONSTTIME); if (!rsa->meth->bn_mod_exp(r0, r1, &dmp1, rsa->p, ctx, rsa->_method_mod_p)) goto err; if (!BN_sub(r0, r0, m1)) goto err; /* * This will help stop the size of r0 increasing, which does * affect the multiply if it optimised for a power of 2 size */ if (BN_is_negative(r0)) if (!BN_add(r0, r0, rsa->p)) goto err; if (!BN_mul(r1, r0, rsa->iqmp, ctx)) goto err; /* Turn BN_FLG_CONSTTIME flag on before division operation */ BN_init(&pr1); BN_with_flags(&pr1, r1, BN_FLG_CONSTTIME); if (!BN_mod(r0, &pr1, rsa->p, ctx)) goto err; /* * If p < q it is occasionally possible for the correction of * adding 'p' if r0 is negative above to leave the result still * negative. This can break the private key operations: the following * second correction should *always* correct this rare occurrence. |
︙ | ︙ | |||
870 871 872 873 874 875 876 | goto err; if (!BN_is_zero(vrfy)) { /* * 'I' and 'vrfy' aren't congruent mod n. Don't leak * miscalculated CRT output, just do a raw (slower) * mod_exp and return that instead. */ | < | < < < > | | < | | > | 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 | goto err; if (!BN_is_zero(vrfy)) { /* * 'I' and 'vrfy' aren't congruent mod n. Don't leak * miscalculated CRT output, just do a raw (slower) * mod_exp and return that instead. */ BIGNUM d; BN_init(&d); BN_with_flags(&d, rsa->d, BN_FLG_CONSTTIME); if (!rsa->meth->bn_mod_exp(r0, I, &d, rsa->n, ctx, rsa->_method_mod_n)) { goto err; } } } ret = 1; err: BN_CTX_end(ctx); return ret; } |
︙ | ︙ |
Changes to jni/libressl/crypto/rsa/rsa_gen.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: rsa_gen.c,v 1.17 2015/02/09 15:49:22 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
86 87 88 89 90 91 92 | return rsa_builtin_keygen(rsa, bits, e_value, cb); } static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) { BIGNUM *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *tmp; | < | | 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | return rsa_builtin_keygen(rsa, bits, e_value, cb); } static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) { BIGNUM *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *tmp; BIGNUM pr0, d, p; int bitsp, bitsq, ok = -1, n = 0; BN_CTX *ctx = NULL; ctx = BN_CTX_new(); if (ctx == NULL) goto err; BN_CTX_start(ctx); |
︙ | ︙ | |||
189 190 191 192 193 194 195 | /* calculate d */ if (!BN_sub(r1, rsa->p, BN_value_one())) /* p-1 */ goto err; if (!BN_sub(r2, rsa->q, BN_value_one())) /* q-1 */ goto err; if (!BN_mul(r0, r1, r2, ctx)) /* (p-1)(q-1) */ goto err; | | < | | < | < < | < < | | < < | < < | | 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | /* calculate d */ if (!BN_sub(r1, rsa->p, BN_value_one())) /* p-1 */ goto err; if (!BN_sub(r2, rsa->q, BN_value_one())) /* q-1 */ goto err; if (!BN_mul(r0, r1, r2, ctx)) /* (p-1)(q-1) */ goto err; BN_with_flags(&pr0, r0, BN_FLG_CONSTTIME); if (!BN_mod_inverse(rsa->d, rsa->e, &pr0, ctx)) /* d */ goto err; /* set up d for correct BN_FLG_CONSTTIME flag */ BN_with_flags(&d, rsa->d, BN_FLG_CONSTTIME); /* calculate d mod (p-1) */ if (!BN_mod(rsa->dmp1, &d, r1, ctx)) goto err; /* calculate d mod (q-1) */ if (!BN_mod(rsa->dmq1, &d, r2, ctx)) goto err; /* calculate inverse of q mod p */ BN_with_flags(&p, rsa->p, BN_FLG_CONSTTIME); if (!BN_mod_inverse(rsa->iqmp, rsa->q, &p, ctx)) goto err; ok = 1; err: if (ok == -1) { RSAerr(RSA_F_RSA_BUILTIN_KEYGEN, ERR_LIB_BN); ok = 0; |
︙ | ︙ |
Changes to jni/libressl/crypto/rsa/rsa_saos.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: rsa_saos.c,v 1.18 2015/09/10 15:56:25 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
93 94 95 96 97 98 99 | i2d_ASN1_OCTET_STRING(&sig, &p); i = RSA_private_encrypt(i, s, sigret, rsa, RSA_PKCS1_PADDING); if (i <= 0) ret = 0; else *siglen = i; | | | 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | i2d_ASN1_OCTET_STRING(&sig, &p); i = RSA_private_encrypt(i, s, sigret, rsa, RSA_PKCS1_PADDING); if (i <= 0) ret = 0; else *siglen = i; explicit_bzero(s, (unsigned int)j + 1); free(s); return ret; } int RSA_verify_ASN1_OCTET_STRING(int dtype, const unsigned char *m, unsigned int m_len, unsigned char *sigbuf, unsigned int siglen, RSA *rsa) |
︙ | ︙ | |||
136 137 138 139 140 141 142 | if ((unsigned int)sig->length != m_len || memcmp(m, sig->data, m_len) != 0) { RSAerr(RSA_F_RSA_VERIFY_ASN1_OCTET_STRING, RSA_R_BAD_SIGNATURE); } else ret = 1; err: | | | | 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | if ((unsigned int)sig->length != m_len || memcmp(m, sig->data, m_len) != 0) { RSAerr(RSA_F_RSA_VERIFY_ASN1_OCTET_STRING, RSA_R_BAD_SIGNATURE); } else ret = 1; err: ASN1_OCTET_STRING_free(sig); if (s != NULL) { explicit_bzero(s, (unsigned int)siglen); free(s); } return ret; } |
Changes to jni/libressl/crypto/rsa/rsa_sign.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: rsa_sign.c,v 1.24 2015/07/19 18:29:31 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
133 134 135 136 137 138 139 | i = RSA_private_encrypt(i, s, sigret, rsa, RSA_PKCS1_PADDING); if (i <= 0) ret = 0; else *siglen = i; if (type != NID_md5_sha1) { | | | 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | i = RSA_private_encrypt(i, s, sigret, rsa, RSA_PKCS1_PADDING); if (i <= 0) ret = 0; else *siglen = i; if (type != NID_md5_sha1) { explicit_bzero(tmps, (unsigned int)j + 1); free(tmps); } return (ret); } int int_rsa_verify(int dtype, const unsigned char *m, unsigned int m_len, |
︙ | ︙ | |||
233 234 235 236 237 238 239 | } else ret = 1; } err: if (sig != NULL) X509_SIG_free(sig); if (s != NULL) { | | | 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 | } else ret = 1; } err: if (sig != NULL) X509_SIG_free(sig); if (s != NULL) { explicit_bzero(s, (unsigned int)siglen); free(s); } return ret; } int RSA_verify(int dtype, const unsigned char *m, unsigned int m_len, |
︙ | ︙ |
Changes to jni/libressl/crypto/sha/sha1-elf-x86_64.s.
︙ | ︙ | |||
1313 1314 1315 1316 1317 1318 1319 | movdqa 64(%r11),%xmm6 movdqa 0(%r11),%xmm9 movdqu 0(%r9),%xmm0 movdqu 16(%r9),%xmm1 movdqu 32(%r9),%xmm2 movdqu 48(%r9),%xmm3 | | | | | | | 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 | movdqa 64(%r11),%xmm6 movdqa 0(%r11),%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 paddd %xmm9,%xmm0 paddd %xmm9,%xmm1 paddd %xmm9,%xmm2 movdqa %xmm0,0(%rsp) psubd %xmm9,%xmm0 movdqa %xmm1,16(%rsp) psubd %xmm9,%xmm1 movdqa %xmm2,32(%rsp) psubd %xmm9,%xmm2 jmp .Loop_ssse3 .align 16 .Loop_ssse3: movdqa %xmm1,%xmm4 addl 0(%rsp),%ebp xorl %edx,%ecx movdqa %xmm3,%xmm8 .byte 102,15,58,15,224,8 movl %eax,%edi roll $5,%eax paddd %xmm3,%xmm9 andl %ecx,%esi xorl %edx,%ecx psrldq $4,%xmm8 xorl %edx,%esi |
︙ | ︙ | |||
1395 1396 1397 1398 1399 1400 1401 | pxor %xmm9,%xmm4 rorl $7,%edx addl %edi,%ebx movdqa %xmm2,%xmm5 addl 16(%rsp),%eax xorl %ebp,%edx movdqa %xmm4,%xmm9 | | | 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 | pxor %xmm9,%xmm4 rorl $7,%edx addl %edi,%ebx movdqa %xmm2,%xmm5 addl 16(%rsp),%eax xorl %ebp,%edx movdqa %xmm4,%xmm9 .byte 102,15,58,15,233,8 movl %ebx,%edi roll $5,%ebx paddd %xmm4,%xmm10 andl %edx,%esi xorl %ebp,%edx psrldq $4,%xmm9 xorl %ebp,%esi |
︙ | ︙ | |||
1456 1457 1458 1459 1460 1461 1462 | pxor %xmm10,%xmm5 rorl $7,%ebp addl %edi,%ecx movdqa %xmm3,%xmm6 addl 32(%rsp),%ebx xorl %eax,%ebp movdqa %xmm5,%xmm10 | | | 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 | pxor %xmm10,%xmm5 rorl $7,%ebp addl %edi,%ecx movdqa %xmm3,%xmm6 addl 32(%rsp),%ebx xorl %eax,%ebp movdqa %xmm5,%xmm10 .byte 102,15,58,15,242,8 movl %ecx,%edi roll $5,%ecx paddd %xmm5,%xmm8 andl %ebp,%esi xorl %eax,%ebp psrldq $4,%xmm10 xorl %eax,%esi |
︙ | ︙ | |||
1517 1518 1519 1520 1521 1522 1523 | pxor %xmm8,%xmm6 rorl $7,%eax addl %edi,%edx movdqa %xmm4,%xmm7 addl 48(%rsp),%ecx xorl %ebx,%eax movdqa %xmm6,%xmm8 | | | 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 | pxor %xmm8,%xmm6 rorl $7,%eax addl %edi,%edx movdqa %xmm4,%xmm7 addl 48(%rsp),%ecx xorl %ebx,%eax movdqa %xmm6,%xmm8 .byte 102,15,58,15,251,8 movl %edx,%edi roll $5,%edx paddd %xmm6,%xmm9 andl %eax,%esi xorl %ebx,%eax psrldq $4,%xmm8 xorl %ebx,%esi |
︙ | ︙ | |||
1577 1578 1579 1580 1581 1582 1583 | addl %eax,%ebp pxor %xmm9,%xmm7 rorl $7,%ebx addl %edi,%ebp movdqa %xmm7,%xmm9 addl 0(%rsp),%edx pxor %xmm4,%xmm0 | | | 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 | addl %eax,%ebp pxor %xmm9,%xmm7 rorl $7,%ebx addl %edi,%ebp movdqa %xmm7,%xmm9 addl 0(%rsp),%edx pxor %xmm4,%xmm0 .byte 102,68,15,58,15,206,8 xorl %ecx,%ebx movl %ebp,%edi roll $5,%ebp pxor %xmm1,%xmm0 andl %ebx,%esi xorl %ecx,%ebx movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
1629 1630 1631 1632 1633 1634 1635 | xorl %ebp,%edx xorl %ebp,%edi addl %ebx,%eax rorl $7,%ecx addl %edi,%eax addl 16(%rsp),%ebp pxor %xmm5,%xmm1 | | | 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 | xorl %ebp,%edx xorl %ebp,%edi addl %ebx,%eax rorl $7,%ecx addl %edi,%eax addl 16(%rsp),%ebp pxor %xmm5,%xmm1 .byte 102,68,15,58,15,215,8 xorl %edx,%esi movl %eax,%edi roll $5,%eax pxor %xmm2,%xmm1 xorl %ecx,%esi addl %eax,%ebp movdqa %xmm8,%xmm9 |
︙ | ︙ | |||
1673 1674 1675 1676 1677 1678 1679 | roll $5,%ecx xorl %ebp,%edi addl %ecx,%ebx rorl $7,%edx addl %edi,%ebx addl 32(%rsp),%eax pxor %xmm6,%xmm2 | | | 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 | roll $5,%ecx xorl %ebp,%edi addl %ecx,%ebx rorl $7,%edx addl %edi,%ebx addl 32(%rsp),%eax pxor %xmm6,%xmm2 .byte 102,68,15,58,15,192,8 xorl %ebp,%esi movl %ebx,%edi roll $5,%ebx pxor %xmm3,%xmm2 xorl %edx,%esi addl %ebx,%eax movdqa 32(%r11),%xmm10 |
︙ | ︙ | |||
1717 1718 1719 1720 1721 1722 1723 | roll $5,%edx xorl %eax,%edi addl %edx,%ecx rorl $7,%ebp addl %edi,%ecx addl 48(%rsp),%ebx pxor %xmm7,%xmm3 | | | 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 | roll $5,%edx xorl %eax,%edi addl %edx,%ecx rorl $7,%ebp addl %edi,%ecx addl 48(%rsp),%ebx pxor %xmm7,%xmm3 .byte 102,68,15,58,15,201,8 xorl %eax,%esi movl %ecx,%edi roll $5,%ecx pxor %xmm4,%xmm3 xorl %ebp,%esi addl %ecx,%ebx movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
1761 1762 1763 1764 1765 1766 1767 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 0(%rsp),%ecx pxor %xmm0,%xmm4 | | | 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 0(%rsp),%ecx pxor %xmm0,%xmm4 .byte 102,68,15,58,15,210,8 xorl %ebx,%esi movl %edx,%edi roll $5,%edx pxor %xmm5,%xmm4 xorl %eax,%esi addl %edx,%ecx movdqa %xmm8,%xmm9 |
︙ | ︙ | |||
1805 1806 1807 1808 1809 1810 1811 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 16(%rsp),%edx pxor %xmm1,%xmm5 | | | 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 16(%rsp),%edx pxor %xmm1,%xmm5 .byte 102,68,15,58,15,195,8 xorl %ecx,%esi movl %ebp,%edi roll $5,%ebp pxor %xmm6,%xmm5 xorl %ebx,%esi addl %ebp,%edx movdqa %xmm9,%xmm10 |
︙ | ︙ | |||
1849 1850 1851 1852 1853 1854 1855 | roll $5,%ebx xorl %edx,%edi addl %ebx,%eax rorl $7,%ecx addl %edi,%eax movl %ecx,%edi pxor %xmm2,%xmm6 | | | 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 | roll $5,%ebx xorl %edx,%edi addl %ebx,%eax rorl $7,%ecx addl %edi,%eax movl %ecx,%edi pxor %xmm2,%xmm6 .byte 102,68,15,58,15,204,8 xorl %edx,%ecx addl 32(%rsp),%ebp andl %edx,%edi pxor %xmm7,%xmm6 andl %ecx,%esi rorl $7,%ebx movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
1909 1910 1911 1912 1913 1914 1915 | movl %ecx,%esi roll $5,%ecx addl %edi,%ebx xorl %eax,%ebp addl %ecx,%ebx movl %edx,%edi pxor %xmm3,%xmm7 | | | 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 | movl %ecx,%esi roll $5,%ecx addl %edi,%ebx xorl %eax,%ebp addl %ecx,%ebx movl %edx,%edi pxor %xmm3,%xmm7 .byte 102,68,15,58,15,213,8 xorl %ebp,%edx addl 48(%rsp),%eax andl %ebp,%edi pxor %xmm0,%xmm7 andl %edx,%esi rorl $7,%ecx movdqa 48(%r11),%xmm9 |
︙ | ︙ | |||
1969 1970 1971 1972 1973 1974 1975 | movl %edx,%esi roll $5,%edx addl %edi,%ecx xorl %ebx,%eax addl %edx,%ecx movl %ebp,%edi pxor %xmm4,%xmm0 | | | 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 | movl %edx,%esi roll $5,%edx addl %edi,%ecx xorl %ebx,%eax addl %edx,%ecx movl %ebp,%edi pxor %xmm4,%xmm0 .byte 102,68,15,58,15,198,8 xorl %eax,%ebp addl 0(%rsp),%ebx andl %eax,%edi pxor %xmm1,%xmm0 andl %ebp,%esi rorl $7,%edx movdqa %xmm9,%xmm10 |
︙ | ︙ | |||
2029 2030 2031 2032 2033 2034 2035 | movl %ebp,%esi roll $5,%ebp addl %edi,%edx xorl %ecx,%ebx addl %ebp,%edx movl %eax,%edi pxor %xmm5,%xmm1 | | | 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 | movl %ebp,%esi roll $5,%ebp addl %edi,%edx xorl %ecx,%ebx addl %ebp,%edx movl %eax,%edi pxor %xmm5,%xmm1 .byte 102,68,15,58,15,207,8 xorl %ebx,%eax addl 16(%rsp),%ecx andl %ebx,%edi pxor %xmm2,%xmm1 andl %eax,%esi rorl $7,%ebp movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
2089 2090 2091 2092 2093 2094 2095 | movl %eax,%esi roll $5,%eax addl %edi,%ebp xorl %edx,%ecx addl %eax,%ebp movl %ebx,%edi pxor %xmm6,%xmm2 | | | 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 | movl %eax,%esi roll $5,%eax addl %edi,%ebp xorl %edx,%ecx addl %eax,%ebp movl %ebx,%edi pxor %xmm6,%xmm2 .byte 102,68,15,58,15,208,8 xorl %ecx,%ebx addl 32(%rsp),%edx andl %ecx,%edi pxor %xmm3,%xmm2 andl %ebx,%esi rorl $7,%eax movdqa %xmm8,%xmm9 |
︙ | ︙ | |||
2149 2150 2151 2152 2153 2154 2155 | movl %ebx,%esi roll $5,%ebx addl %edi,%eax xorl %ebp,%edx addl %ebx,%eax addl 48(%rsp),%ebp pxor %xmm7,%xmm3 | | | 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 | movl %ebx,%esi roll $5,%ebx addl %edi,%eax xorl %ebp,%edx addl %ebx,%eax addl 48(%rsp),%ebp pxor %xmm7,%xmm3 .byte 102,68,15,58,15,193,8 xorl %edx,%esi movl %eax,%edi roll $5,%eax pxor %xmm4,%xmm3 xorl %ecx,%esi addl %eax,%ebp movdqa %xmm9,%xmm10 |
︙ | ︙ | |||
2232 2233 2234 2235 2236 2237 2238 | je .Ldone_ssse3 movdqa 64(%r11),%xmm6 movdqa 0(%r11),%xmm9 movdqu 0(%r9),%xmm0 movdqu 16(%r9),%xmm1 movdqu 32(%r9),%xmm2 movdqu 48(%r9),%xmm3 | | | | 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 | je .Ldone_ssse3 movdqa 64(%r11),%xmm6 movdqa 0(%r11),%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 addl 16(%rsp),%ebx xorl %eax,%esi .byte 102,15,56,0,206 movl %ecx,%edi roll $5,%ecx paddd %xmm9,%xmm0 xorl %ebp,%esi addl %ecx,%ebx rorl $7,%edx addl %esi,%ebx |
︙ | ︙ | |||
2272 2273 2274 2275 2276 2277 2278 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 32(%rsp),%ecx xorl %ebx,%esi | | | 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 32(%rsp),%ecx xorl %ebx,%esi .byte 102,15,56,0,214 movl %edx,%edi roll $5,%edx paddd %xmm9,%xmm1 xorl %eax,%esi addl %edx,%ecx rorl $7,%ebp addl %esi,%ecx |
︙ | ︙ | |||
2308 2309 2310 2311 2312 2313 2314 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 48(%rsp),%edx xorl %ecx,%esi | | | 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 48(%rsp),%edx xorl %ecx,%esi .byte 102,15,56,0,222 movl %ebp,%edi roll $5,%ebp paddd %xmm9,%xmm2 xorl %ebx,%esi addl %ebp,%edx rorl $7,%eax addl %esi,%edx |
︙ | ︙ |
Changes to jni/libressl/crypto/sha/sha1-macosx-x86_64.s.
︙ | ︙ | |||
1313 1314 1315 1316 1317 1318 1319 | movdqa 64(%r11),%xmm6 movdqa 0(%r11),%xmm9 movdqu 0(%r9),%xmm0 movdqu 16(%r9),%xmm1 movdqu 32(%r9),%xmm2 movdqu 48(%r9),%xmm3 | | | | | | | 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 | movdqa 64(%r11),%xmm6 movdqa 0(%r11),%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 paddd %xmm9,%xmm0 paddd %xmm9,%xmm1 paddd %xmm9,%xmm2 movdqa %xmm0,0(%rsp) psubd %xmm9,%xmm0 movdqa %xmm1,16(%rsp) psubd %xmm9,%xmm1 movdqa %xmm2,32(%rsp) psubd %xmm9,%xmm2 jmp L$oop_ssse3 .p2align 4 L$oop_ssse3: movdqa %xmm1,%xmm4 addl 0(%rsp),%ebp xorl %edx,%ecx movdqa %xmm3,%xmm8 .byte 102,15,58,15,224,8 movl %eax,%edi roll $5,%eax paddd %xmm3,%xmm9 andl %ecx,%esi xorl %edx,%ecx psrldq $4,%xmm8 xorl %edx,%esi |
︙ | ︙ | |||
1395 1396 1397 1398 1399 1400 1401 | pxor %xmm9,%xmm4 rorl $7,%edx addl %edi,%ebx movdqa %xmm2,%xmm5 addl 16(%rsp),%eax xorl %ebp,%edx movdqa %xmm4,%xmm9 | | | 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 | pxor %xmm9,%xmm4 rorl $7,%edx addl %edi,%ebx movdqa %xmm2,%xmm5 addl 16(%rsp),%eax xorl %ebp,%edx movdqa %xmm4,%xmm9 .byte 102,15,58,15,233,8 movl %ebx,%edi roll $5,%ebx paddd %xmm4,%xmm10 andl %edx,%esi xorl %ebp,%edx psrldq $4,%xmm9 xorl %ebp,%esi |
︙ | ︙ | |||
1456 1457 1458 1459 1460 1461 1462 | pxor %xmm10,%xmm5 rorl $7,%ebp addl %edi,%ecx movdqa %xmm3,%xmm6 addl 32(%rsp),%ebx xorl %eax,%ebp movdqa %xmm5,%xmm10 | | | 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 | pxor %xmm10,%xmm5 rorl $7,%ebp addl %edi,%ecx movdqa %xmm3,%xmm6 addl 32(%rsp),%ebx xorl %eax,%ebp movdqa %xmm5,%xmm10 .byte 102,15,58,15,242,8 movl %ecx,%edi roll $5,%ecx paddd %xmm5,%xmm8 andl %ebp,%esi xorl %eax,%ebp psrldq $4,%xmm10 xorl %eax,%esi |
︙ | ︙ | |||
1517 1518 1519 1520 1521 1522 1523 | pxor %xmm8,%xmm6 rorl $7,%eax addl %edi,%edx movdqa %xmm4,%xmm7 addl 48(%rsp),%ecx xorl %ebx,%eax movdqa %xmm6,%xmm8 | | | 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 | pxor %xmm8,%xmm6 rorl $7,%eax addl %edi,%edx movdqa %xmm4,%xmm7 addl 48(%rsp),%ecx xorl %ebx,%eax movdqa %xmm6,%xmm8 .byte 102,15,58,15,251,8 movl %edx,%edi roll $5,%edx paddd %xmm6,%xmm9 andl %eax,%esi xorl %ebx,%eax psrldq $4,%xmm8 xorl %ebx,%esi |
︙ | ︙ | |||
1577 1578 1579 1580 1581 1582 1583 | addl %eax,%ebp pxor %xmm9,%xmm7 rorl $7,%ebx addl %edi,%ebp movdqa %xmm7,%xmm9 addl 0(%rsp),%edx pxor %xmm4,%xmm0 | | | 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 | addl %eax,%ebp pxor %xmm9,%xmm7 rorl $7,%ebx addl %edi,%ebp movdqa %xmm7,%xmm9 addl 0(%rsp),%edx pxor %xmm4,%xmm0 .byte 102,68,15,58,15,206,8 xorl %ecx,%ebx movl %ebp,%edi roll $5,%ebp pxor %xmm1,%xmm0 andl %ebx,%esi xorl %ecx,%ebx movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
1629 1630 1631 1632 1633 1634 1635 | xorl %ebp,%edx xorl %ebp,%edi addl %ebx,%eax rorl $7,%ecx addl %edi,%eax addl 16(%rsp),%ebp pxor %xmm5,%xmm1 | | | 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 | xorl %ebp,%edx xorl %ebp,%edi addl %ebx,%eax rorl $7,%ecx addl %edi,%eax addl 16(%rsp),%ebp pxor %xmm5,%xmm1 .byte 102,68,15,58,15,215,8 xorl %edx,%esi movl %eax,%edi roll $5,%eax pxor %xmm2,%xmm1 xorl %ecx,%esi addl %eax,%ebp movdqa %xmm8,%xmm9 |
︙ | ︙ | |||
1673 1674 1675 1676 1677 1678 1679 | roll $5,%ecx xorl %ebp,%edi addl %ecx,%ebx rorl $7,%edx addl %edi,%ebx addl 32(%rsp),%eax pxor %xmm6,%xmm2 | | | 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 | roll $5,%ecx xorl %ebp,%edi addl %ecx,%ebx rorl $7,%edx addl %edi,%ebx addl 32(%rsp),%eax pxor %xmm6,%xmm2 .byte 102,68,15,58,15,192,8 xorl %ebp,%esi movl %ebx,%edi roll $5,%ebx pxor %xmm3,%xmm2 xorl %edx,%esi addl %ebx,%eax movdqa 32(%r11),%xmm10 |
︙ | ︙ | |||
1717 1718 1719 1720 1721 1722 1723 | roll $5,%edx xorl %eax,%edi addl %edx,%ecx rorl $7,%ebp addl %edi,%ecx addl 48(%rsp),%ebx pxor %xmm7,%xmm3 | | | 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 | roll $5,%edx xorl %eax,%edi addl %edx,%ecx rorl $7,%ebp addl %edi,%ecx addl 48(%rsp),%ebx pxor %xmm7,%xmm3 .byte 102,68,15,58,15,201,8 xorl %eax,%esi movl %ecx,%edi roll $5,%ecx pxor %xmm4,%xmm3 xorl %ebp,%esi addl %ecx,%ebx movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
1761 1762 1763 1764 1765 1766 1767 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 0(%rsp),%ecx pxor %xmm0,%xmm4 | | | 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 0(%rsp),%ecx pxor %xmm0,%xmm4 .byte 102,68,15,58,15,210,8 xorl %ebx,%esi movl %edx,%edi roll $5,%edx pxor %xmm5,%xmm4 xorl %eax,%esi addl %edx,%ecx movdqa %xmm8,%xmm9 |
︙ | ︙ | |||
1805 1806 1807 1808 1809 1810 1811 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 16(%rsp),%edx pxor %xmm1,%xmm5 | | | 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 16(%rsp),%edx pxor %xmm1,%xmm5 .byte 102,68,15,58,15,195,8 xorl %ecx,%esi movl %ebp,%edi roll $5,%ebp pxor %xmm6,%xmm5 xorl %ebx,%esi addl %ebp,%edx movdqa %xmm9,%xmm10 |
︙ | ︙ | |||
1849 1850 1851 1852 1853 1854 1855 | roll $5,%ebx xorl %edx,%edi addl %ebx,%eax rorl $7,%ecx addl %edi,%eax movl %ecx,%edi pxor %xmm2,%xmm6 | | | 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 | roll $5,%ebx xorl %edx,%edi addl %ebx,%eax rorl $7,%ecx addl %edi,%eax movl %ecx,%edi pxor %xmm2,%xmm6 .byte 102,68,15,58,15,204,8 xorl %edx,%ecx addl 32(%rsp),%ebp andl %edx,%edi pxor %xmm7,%xmm6 andl %ecx,%esi rorl $7,%ebx movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
1909 1910 1911 1912 1913 1914 1915 | movl %ecx,%esi roll $5,%ecx addl %edi,%ebx xorl %eax,%ebp addl %ecx,%ebx movl %edx,%edi pxor %xmm3,%xmm7 | | | 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 | movl %ecx,%esi roll $5,%ecx addl %edi,%ebx xorl %eax,%ebp addl %ecx,%ebx movl %edx,%edi pxor %xmm3,%xmm7 .byte 102,68,15,58,15,213,8 xorl %ebp,%edx addl 48(%rsp),%eax andl %ebp,%edi pxor %xmm0,%xmm7 andl %edx,%esi rorl $7,%ecx movdqa 48(%r11),%xmm9 |
︙ | ︙ | |||
1969 1970 1971 1972 1973 1974 1975 | movl %edx,%esi roll $5,%edx addl %edi,%ecx xorl %ebx,%eax addl %edx,%ecx movl %ebp,%edi pxor %xmm4,%xmm0 | | | 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 | movl %edx,%esi roll $5,%edx addl %edi,%ecx xorl %ebx,%eax addl %edx,%ecx movl %ebp,%edi pxor %xmm4,%xmm0 .byte 102,68,15,58,15,198,8 xorl %eax,%ebp addl 0(%rsp),%ebx andl %eax,%edi pxor %xmm1,%xmm0 andl %ebp,%esi rorl $7,%edx movdqa %xmm9,%xmm10 |
︙ | ︙ | |||
2029 2030 2031 2032 2033 2034 2035 | movl %ebp,%esi roll $5,%ebp addl %edi,%edx xorl %ecx,%ebx addl %ebp,%edx movl %eax,%edi pxor %xmm5,%xmm1 | | | 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 | movl %ebp,%esi roll $5,%ebp addl %edi,%edx xorl %ecx,%ebx addl %ebp,%edx movl %eax,%edi pxor %xmm5,%xmm1 .byte 102,68,15,58,15,207,8 xorl %ebx,%eax addl 16(%rsp),%ecx andl %ebx,%edi pxor %xmm2,%xmm1 andl %eax,%esi rorl $7,%ebp movdqa %xmm10,%xmm8 |
︙ | ︙ | |||
2089 2090 2091 2092 2093 2094 2095 | movl %eax,%esi roll $5,%eax addl %edi,%ebp xorl %edx,%ecx addl %eax,%ebp movl %ebx,%edi pxor %xmm6,%xmm2 | | | 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 | movl %eax,%esi roll $5,%eax addl %edi,%ebp xorl %edx,%ecx addl %eax,%ebp movl %ebx,%edi pxor %xmm6,%xmm2 .byte 102,68,15,58,15,208,8 xorl %ecx,%ebx addl 32(%rsp),%edx andl %ecx,%edi pxor %xmm3,%xmm2 andl %ebx,%esi rorl $7,%eax movdqa %xmm8,%xmm9 |
︙ | ︙ | |||
2149 2150 2151 2152 2153 2154 2155 | movl %ebx,%esi roll $5,%ebx addl %edi,%eax xorl %ebp,%edx addl %ebx,%eax addl 48(%rsp),%ebp pxor %xmm7,%xmm3 | | | 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 | movl %ebx,%esi roll $5,%ebx addl %edi,%eax xorl %ebp,%edx addl %ebx,%eax addl 48(%rsp),%ebp pxor %xmm7,%xmm3 .byte 102,68,15,58,15,193,8 xorl %edx,%esi movl %eax,%edi roll $5,%eax pxor %xmm4,%xmm3 xorl %ecx,%esi addl %eax,%ebp movdqa %xmm9,%xmm10 |
︙ | ︙ | |||
2232 2233 2234 2235 2236 2237 2238 | je L$done_ssse3 movdqa 64(%r11),%xmm6 movdqa 0(%r11),%xmm9 movdqu 0(%r9),%xmm0 movdqu 16(%r9),%xmm1 movdqu 32(%r9),%xmm2 movdqu 48(%r9),%xmm3 | | | | 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 | je L$done_ssse3 movdqa 64(%r11),%xmm6 movdqa 0(%r11),%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 addl 16(%rsp),%ebx xorl %eax,%esi .byte 102,15,56,0,206 movl %ecx,%edi roll $5,%ecx paddd %xmm9,%xmm0 xorl %ebp,%esi addl %ecx,%ebx rorl $7,%edx addl %esi,%ebx |
︙ | ︙ | |||
2272 2273 2274 2275 2276 2277 2278 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 32(%rsp),%ecx xorl %ebx,%esi | | | 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 | roll $5,%ebp xorl %ebx,%edi addl %ebp,%edx rorl $7,%eax addl %edi,%edx addl 32(%rsp),%ecx xorl %ebx,%esi .byte 102,15,56,0,214 movl %edx,%edi roll $5,%edx paddd %xmm9,%xmm1 xorl %eax,%esi addl %edx,%ecx rorl $7,%ebp addl %esi,%ecx |
︙ | ︙ | |||
2308 2309 2310 2311 2312 2313 2314 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 48(%rsp),%edx xorl %ecx,%esi | | | 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 | roll $5,%eax xorl %ecx,%edi addl %eax,%ebp rorl $7,%ebx addl %edi,%ebp addl 48(%rsp),%edx xorl %ecx,%esi .byte 102,15,56,0,222 movl %ebp,%edi roll $5,%ebp paddd %xmm9,%xmm2 xorl %ebx,%esi addl %ebp,%edx rorl $7,%eax addl %esi,%edx |
︙ | ︙ |
Changes to jni/libressl/crypto/sha/sha1_one.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: sha1_one.c,v 1.11 2014/07/10 22:45:58 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
71 72 73 74 75 76 77 | static unsigned char m[SHA_DIGEST_LENGTH]; if (md == NULL) md=m; if (!SHA1_Init(&c)) return NULL; SHA1_Update(&c,d,n); SHA1_Final(md,&c); | | | 71 72 73 74 75 76 77 78 79 80 81 | static unsigned char m[SHA_DIGEST_LENGTH]; if (md == NULL) md=m; if (!SHA1_Init(&c)) return NULL; SHA1_Update(&c,d,n); SHA1_Final(md,&c); explicit_bzero(&c,sizeof(c)); return(md); } #endif |
Changes to jni/libressl/crypto/sha/sha1dgst.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: sha1dgst.c,v 1.13 2014/07/10 22:45:58 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
58 59 60 61 62 63 64 | #include <openssl/opensslconf.h> #include <openssl/crypto.h> #if !defined(OPENSSL_NO_SHA1) && !defined(OPENSSL_NO_SHA) | < < < | 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include <openssl/opensslconf.h> #include <openssl/crypto.h> #if !defined(OPENSSL_NO_SHA1) && !defined(OPENSSL_NO_SHA) #include <openssl/opensslv.h> /* The implementation is in ../md32_common.h */ #include "sha_locl.h" #endif |
Changes to jni/libressl/crypto/sha/sha256.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: sha256.c,v 1.8 2014/08/18 19:11:48 bcook Exp $ */ /* ==================================================================== * Copyright (c) 2004 The OpenSSL Project. All rights reserved * according to the OpenSSL license [found in ../../LICENSE]. * ==================================================================== */ #include <openssl/opensslconf.h> |
︙ | ︙ | |||
45 46 47 48 49 50 51 | SHA256_CTX c; static unsigned char m[SHA224_DIGEST_LENGTH]; if (md == NULL) md=m; SHA224_Init(&c); SHA256_Update(&c,d,n); SHA256_Final(md,&c); | | | | 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | SHA256_CTX c; static unsigned char m[SHA224_DIGEST_LENGTH]; if (md == NULL) md=m; SHA224_Init(&c); SHA256_Update(&c,d,n); SHA256_Final(md,&c); explicit_bzero(&c,sizeof(c)); return(md); } unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md) { SHA256_CTX c; static unsigned char m[SHA256_DIGEST_LENGTH]; if (md == NULL) md=m; SHA256_Init(&c); SHA256_Update(&c,d,n); SHA256_Final(md,&c); explicit_bzero(&c,sizeof(c)); return(md); } int SHA224_Update(SHA256_CTX *c, const void *data, size_t len) { return SHA256_Update (c,data,len); } int SHA224_Final (unsigned char *md, SHA256_CTX *c) { return SHA256_Final (md,c); } |
︙ | ︙ |
Changes to jni/libressl/crypto/sha/sha512.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: sha512.c,v 1.13 2014/07/11 08:44:49 jsing Exp $ */ /* ==================================================================== * Copyright (c) 2004 The OpenSSL Project. All rights reserved * according to the OpenSSL license [found in ../../LICENSE]. * ==================================================================== */ #include <machine/endian.h> |
︙ | ︙ | |||
244 245 246 247 248 249 250 | SHA512_CTX c; static unsigned char m[SHA384_DIGEST_LENGTH]; if (md == NULL) md=m; SHA384_Init(&c); SHA512_Update(&c,d,n); SHA512_Final(md,&c); | | | | 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 | SHA512_CTX c; static unsigned char m[SHA384_DIGEST_LENGTH]; if (md == NULL) md=m; SHA384_Init(&c); SHA512_Update(&c,d,n); SHA512_Final(md,&c); explicit_bzero(&c,sizeof(c)); return(md); } unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md) { SHA512_CTX c; static unsigned char m[SHA512_DIGEST_LENGTH]; if (md == NULL) md=m; SHA512_Init(&c); SHA512_Update(&c,d,n); SHA512_Final(md,&c); explicit_bzero(&c,sizeof(c)); return(md); } #ifndef SHA512_ASM static const SHA_LONG64 K512[80] = { U64(0x428a2f98d728ae22),U64(0x7137449123ef65cd), U64(0xb5c0fbcfec4d3b2f),U64(0xe9b5dba58189dbbc), |
︙ | ︙ |
Deleted jni/libressl/crypto/sha/sha_dgst.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/crypto/sha/sha_locl.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: sha_locl.h,v 1.20 2015/09/13 21:09:56 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
72 73 74 75 76 77 78 | ll=(c)->h0; HOST_l2c(ll,(s)); \ ll=(c)->h1; HOST_l2c(ll,(s)); \ ll=(c)->h2; HOST_l2c(ll,(s)); \ ll=(c)->h3; HOST_l2c(ll,(s)); \ ll=(c)->h4; HOST_l2c(ll,(s)); \ } while (0) | < < < < < < < < < < < < < < < < < < < < < | 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | ll=(c)->h0; HOST_l2c(ll,(s)); \ ll=(c)->h1; HOST_l2c(ll,(s)); \ ll=(c)->h2; HOST_l2c(ll,(s)); \ ll=(c)->h3; HOST_l2c(ll,(s)); \ ll=(c)->h4; HOST_l2c(ll,(s)); \ } while (0) # define HASH_UPDATE SHA1_Update # define HASH_TRANSFORM SHA1_Transform # define HASH_FINAL SHA1_Final # define HASH_INIT SHA1_Init # define HASH_BLOCK_DATA_ORDER sha1_block_data_order # define Xupdate(a,ix,ia,ib,ic,id) ( (a)=(ia^ib^ic^id), \ ix=(a)=ROTATE((a),1) \ ) #ifndef SHA1_ASM static #endif void sha1_block_data_order (SHA_CTX *c, const void *p,size_t num); #include "md32_common.h" #define INIT_DATA_h0 0x67452301UL #define INIT_DATA_h1 0xefcdab89UL #define INIT_DATA_h2 0x98badcfeUL #define INIT_DATA_h3 0x10325476UL #define INIT_DATA_h4 0xc3d2e1f0UL int SHA1_Init(SHA_CTX *c) { memset (c,0,sizeof(*c)); c->h0=INIT_DATA_h0; c->h1=INIT_DATA_h1; c->h2=INIT_DATA_h2; c->h3=INIT_DATA_h3; c->h4=INIT_DATA_h4; |
︙ | ︙ | |||
180 181 182 183 184 185 186 | #ifdef X #undef X #endif #ifndef MD32_XARRAY /* * Originally X was an array. As it's automatic it's natural | | | | 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | #ifdef X #undef X #endif #ifndef MD32_XARRAY /* * Originally X was an array. As it's automatic it's natural * to expect RISC compiler to accommodate at least part of it in * the register bank, isn't it? Unfortunately not all compilers * "find" this expectation reasonable:-( On order to make such * compilers generate better code I replace X[] with a bunch of * X0, X1, etc. See the function body below... * <appro@fy.chalmers.se> */ # define X(i) XX##i #else /* * However! Some compilers (most notably HP C) get overwhelmed by * that many local variables so that we have to have the way to * fall down to the original behavior. */ # define X(i) XX[i] #endif #if !defined(SHA1_ASM) #include <machine/endian.h> static void HASH_BLOCK_DATA_ORDER (SHA_CTX *c, const void *p, size_t num) { const unsigned char *data=p; unsigned MD32_REG_T A,B,C,D,E,T,l; #ifndef MD32_XARRAY unsigned MD32_REG_T XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7, |
︙ | ︙ | |||
383 384 385 386 387 388 389 | #define BODY_60_79(xa,xb,xc,xd) do { \ Xupdate(T,xa,xa,xb,xc,xd); \ T=E+K_60_79+F_60_79(B,C,D); \ E=D, D=C, C=ROTATE(B,30), B=A; \ A=ROTATE(A,5)+T+xa; } while(0) | | | 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 | #define BODY_60_79(xa,xb,xc,xd) do { \ Xupdate(T,xa,xa,xb,xc,xd); \ T=E+K_60_79+F_60_79(B,C,D); \ E=D, D=C, C=ROTATE(B,30), B=A; \ A=ROTATE(A,5)+T+xa; } while(0) #if !defined(SHA1_ASM) static void HASH_BLOCK_DATA_ORDER (SHA_CTX *c, const void *p, size_t num) { const unsigned char *data=p; unsigned MD32_REG_T A,B,C,D,E,T,l; int i; SHA_LONG X[16]; |
︙ | ︙ |
Deleted jni/libressl/crypto/sha/sha_one.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/crypto/ts/ts_lib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ts_lib.c,v 1.9 2015/07/29 14:58:34 jsing Exp $ */ /* Written by Zoltan Glozik (zglozik@stones.com) for the OpenSSL * project 2002. */ /* ==================================================================== * Copyright (c) 2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
133 134 135 136 137 138 139 | return BIO_printf(bio, "Hash Algorithm: %s\n", (i == NID_undef) ? "UNKNOWN" : OBJ_nid2ln(i)); } int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *a) { | | | | | 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | return BIO_printf(bio, "Hash Algorithm: %s\n", (i == NID_undef) ? "UNKNOWN" : OBJ_nid2ln(i)); } int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *a) { ASN1_OCTET_STRING *msg; TS_X509_ALGOR_print_bio(bio, TS_MSG_IMPRINT_get_algo(a)); BIO_printf(bio, "Message data:\n"); msg = TS_MSG_IMPRINT_get_msg(a); BIO_dump_indent(bio, (const char *)ASN1_STRING_data(msg), ASN1_STRING_length(msg), 4); return 1; } |
Changes to jni/libressl/crypto/ts/ts_rsp_sign.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ts_rsp_sign.c,v 1.19 2015/09/30 18:04:02 jsing Exp $ */ /* Written by Zoltan Glozik (zglozik@stones.com) for the OpenSSL * project 2002. */ /* ==================================================================== * Copyright (c) 2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
181 182 183 184 185 186 187 | TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer) { if (X509_check_purpose(signer, X509_PURPOSE_TIMESTAMP_SIGN, 0) != 1) { TSerr(TS_F_TS_RESP_CTX_SET_SIGNER_CERT, TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE); return 0; } | < | | 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 | TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer) { if (X509_check_purpose(signer, X509_PURPOSE_TIMESTAMP_SIGN, 0) != 1) { TSerr(TS_F_TS_RESP_CTX_SET_SIGNER_CERT, TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE); return 0; } X509_free(ctx->signer_cert); ctx->signer_cert = signer; CRYPTO_add(&ctx->signer_cert->references, +1, CRYPTO_LOCK_X509); return 1; } int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key) |
︙ | ︙ | |||
1004 1005 1006 1007 1008 1009 1010 | "%04d%02d%02d%02d%02d%02d%sZ", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, usecstr); if (rv == -1 || rv >= sizeof(genTime_str)) goto err; /* Now call OpenSSL to check and set our genTime value */ | | | 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 | "%04d%02d%02d%02d%02d%02d%sZ", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, usecstr); if (rv == -1 || rv >= sizeof(genTime_str)) goto err; /* Now call OpenSSL to check and set our genTime value */ if (!asn1_time && !(asn1_time = ASN1_GENERALIZEDTIME_new())) goto err; if (!ASN1_GENERALIZEDTIME_set_string(asn1_time, genTime_str)) { ASN1_GENERALIZEDTIME_free(asn1_time); goto err; } return asn1_time; err: TSerr(TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION, TS_R_COULD_NOT_SET_TIME); return NULL; } |
Changes to jni/libressl/crypto/ui/ui_lib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ui_lib.c,v 1.30 2015/02/10 11:22:21 jsing Exp $ */ /* Written by Richard Levitte (richard@levitte.org) for the OpenSSL * project 2001. */ /* ==================================================================== * Copyright (c) 2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
487 488 489 490 491 492 493 494 495 496 497 498 499 500 | } for (i = 0; i < sk_UI_STRING_num(ui->strings); i++) { if (ui->meth->ui_read_string) { switch (ui->meth->ui_read_string(ui, sk_UI_STRING_value(ui->strings, i))) { case -1: /* Interrupt/Cancel/something... */ ok = -2; goto err; case 0: /* Errors */ ok = -1; goto err; default: /* Success */ ok = 0; | > | 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 | } for (i = 0; i < sk_UI_STRING_num(ui->strings); i++) { if (ui->meth->ui_read_string) { switch (ui->meth->ui_read_string(ui, sk_UI_STRING_value(ui->strings, i))) { case -1: /* Interrupt/Cancel/something... */ ui->flags &= ~UI_FLAG_REDOABLE; ok = -2; goto err; case 0: /* Errors */ ok = -1; goto err; default: /* Success */ ok = 0; |
︙ | ︙ |
Changes to jni/libressl/crypto/ui/ui_openssl.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ui_openssl.c,v 1.24 2015/07/16 02:46:49 guenther Exp $ */ /* Written by Richard Levitte (richard@levitte.org) and others * for the OpenSSL project 2001. */ /* ==================================================================== * Copyright (c) 2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
282 283 284 285 286 287 288 | fprintf(tty_out, "\n"); if (ps >= 2 && !echo && !echo_console(ui)) ok = 0; if (ps >= 1) popsig(); | | | 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 | fprintf(tty_out, "\n"); if (ps >= 2 && !echo && !echo_console(ui)) ok = 0; if (ps >= 1) popsig(); explicit_bzero(result, BUFSIZ); return ok; } /* Internal functions to open, handle and close a channel to the console. */ static int open_console(UI *ui) |
︙ | ︙ |
Changes to jni/libressl/crypto/ui/ui_openssl_win.c.
︙ | ︙ | |||
282 283 284 285 286 287 288 | fprintf(tty_out, "\n"); if (ps >= 2 && !echo && !echo_console(ui)) ok = 0; if (ps >= 1) popsig(); | | | > | > > > | > | > > > | > | > > > | 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 | fprintf(tty_out, "\n"); if (ps >= 2 && !echo && !echo_console(ui)) ok = 0; if (ps >= 1) popsig(); explicit_bzero(result, BUFSIZ); return ok; } /* Internal functions to open, handle and close a channel to the console. */ static int open_console(UI *ui) { CRYPTO_w_lock(CRYPTO_LOCK_UI); is_a_tty = 1; tty_in = stdin; tty_out = stderr; HANDLE handle = GetStdHandle(STD_INPUT_HANDLE); if (handle != NULL && handle != INVALID_HANDLE_VALUE) { if (GetFileType(handle) == FILE_TYPE_CHAR) return GetConsoleMode(handle, &console_mode); else return 1; } return 0; } static int noecho_console(UI *ui) { HANDLE handle = GetStdHandle(STD_INPUT_HANDLE); if (handle != NULL && handle != INVALID_HANDLE_VALUE) { if (GetFileType(handle) == FILE_TYPE_CHAR) return SetConsoleMode(handle, console_mode & ~ENABLE_ECHO_INPUT); else return 1; } return 0; } static int echo_console(UI *ui) { HANDLE handle = GetStdHandle(STD_INPUT_HANDLE); if (handle != NULL && handle != INVALID_HANDLE_VALUE) { if (GetFileType(handle) == FILE_TYPE_CHAR) return SetConsoleMode(handle, console_mode); else return 1; } return 0; } static int close_console(UI *ui) { if (tty_in != stdin) |
︙ | ︙ |
Changes to jni/libressl/crypto/ui/ui_util.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ui_util.c,v 1.9 2014/06/12 15:49:31 deraadt Exp $ */ /* ==================================================================== * Copyright (c) 2001-2002 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * |
︙ | ︙ | |||
63 64 65 66 67 68 69 | UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, int verify) { char buff[BUFSIZ]; int ret; ret = UI_UTIL_read_pw(buf, buff, (length > BUFSIZ) ? BUFSIZ : length, prompt, verify); | | | 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, int verify) { char buff[BUFSIZ]; int ret; ret = UI_UTIL_read_pw(buf, buff, (length > BUFSIZ) ? BUFSIZ : length, prompt, verify); explicit_bzero(buff, BUFSIZ); return (ret); } int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, int verify) { int ok = 0; |
︙ | ︙ |
Changes to jni/libressl/crypto/whrlpool/wp_block.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: wp_block.c,v 1.9 2014/07/09 16:06:13 miod Exp $ */ /** * The Whirlpool hashing function. * * <P> * <b>References</b> * * <P> |
︙ | ︙ | |||
111 112 113 114 115 116 117 | * nor does it require additional rotations. */ /* * Note that every Cn macro expands as two loads: one byte load and * one quadword load. One can argue that that many single-byte loads * is too excessive, as one could load a quadword and "milk" it for * eight 8-bit values instead. Well, yes, but in order to do so *and* | | | 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | * nor does it require additional rotations. */ /* * Note that every Cn macro expands as two loads: one byte load and * one quadword load. One can argue that that many single-byte loads * is too excessive, as one could load a quadword and "milk" it for * eight 8-bit values instead. Well, yes, but in order to do so *and* * avoid excessive loads you have to accommodate a handful of 64-bit * values in the register bank and issue a bunch of shifts and mask. * It's a tradeoff: loads vs. shift and mask in big register bank[!]. * On most CPUs eight single-byte loads are faster and I let other * ones to depend on smart compiler to fold byte loads if beneficial. * Hand-coded assembler would be another alternative:-) */ #ifdef __STRICT_ALIGNMENT |
︙ | ︙ |
Changes to jni/libressl/crypto/x509/by_file.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: by_file.c,v 1.19 2015/04/11 16:03:21 deraadt Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
168 169 170 171 172 173 174 | goto err; ret = i; } else { X509err(X509_F_X509_LOAD_CERT_FILE, X509_R_BAD_X509_FILETYPE); goto err; } err: | < | | 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | goto err; ret = i; } else { X509err(X509_F_X509_LOAD_CERT_FILE, X509_R_BAD_X509_FILETYPE); goto err; } err: X509_free(x); BIO_free(in); return (ret); } int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type) { |
︙ | ︙ |
Changes to jni/libressl/crypto/x509/x509_att.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: x509_att.c,v 1.13 2014/09/29 16:20:40 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
293 294 295 296 297 298 299 | int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj) { if ((attr == NULL) || (obj == NULL)) return (0); ASN1_OBJECT_free(attr->object); attr->object = OBJ_dup(obj); | | | 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 | int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj) { if ((attr == NULL) || (obj == NULL)) return (0); ASN1_OBJECT_free(attr->object); attr->object = OBJ_dup(obj); return attr->object != NULL; } int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, const void *data, int len) { ASN1_TYPE *ttmp = NULL; |
︙ | ︙ |
Changes to jni/libressl/crypto/x509/x509_lcl.h.
︙ | ︙ | |||
53 54 55 56 57 58 59 | * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ int x509_check_cert_time(X509_STORE_CTX *ctx, X509 *x, int quiet); | > > | 53 54 55 56 57 58 59 60 61 | * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ int x509_check_cert_time(X509_STORE_CTX *ctx, X509 *x, int quiet); int asn1_time_parse(const char *, size_t, struct tm *, int); int asn1_tm_cmp(struct tm *tm1, struct tm *tm2); |
Changes to jni/libressl/crypto/x509/x509_r2x.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: x509_r2x.c,v 1.9 2014/07/11 08:44:49 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
78 79 80 81 82 83 84 | goto err; } /* duplicate the request */ xi = ret->cert_info; if (sk_X509_ATTRIBUTE_num(r->req_info->attributes) != 0) { | | | 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | goto err; } /* duplicate the request */ xi = ret->cert_info; if (sk_X509_ATTRIBUTE_num(r->req_info->attributes) != 0) { if ((xi->version = ASN1_INTEGER_new()) == NULL) goto err; if (!ASN1_INTEGER_set(xi->version, 2)) goto err; /* xi->extensions=ri->attributes; <- bad, should not ever be done ri->attributes=NULL; */ } |
︙ | ︙ |
Changes to jni/libressl/crypto/x509/x509_req.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: x509_req.c,v 1.17 2015/03/15 22:52:17 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
82 83 84 85 86 87 88 | if (ret == NULL) { X509err(X509_F_X509_TO_X509_REQ, ERR_R_MALLOC_FAILURE); goto err; } ri = ret->req_info; | | | 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | if (ret == NULL) { X509err(X509_F_X509_TO_X509_REQ, ERR_R_MALLOC_FAILURE); goto err; } ri = ret->req_info; if ((ri->version = ASN1_INTEGER_new()) == NULL) goto err; if (ASN1_INTEGER_set(ri->version, 0) == 0) goto err; if (!X509_REQ_set_subject_name(ret, X509_get_subject_name(x))) goto err; |
︙ | ︙ |
Changes to jni/libressl/crypto/x509/x509_set.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: x509_set.c,v 1.11 2015/09/30 17:30:16 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
65 66 67 68 69 70 71 | int X509_set_version(X509 *x, long version) { if (x == NULL) return (0); if (x->cert_info->version == NULL) { | | | | | 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | int X509_set_version(X509 *x, long version) { if (x == NULL) return (0); if (x->cert_info->version == NULL) { if ((x->cert_info->version = ASN1_INTEGER_new()) == NULL) return (0); } return (ASN1_INTEGER_set(x->cert_info->version, version)); } int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial) { ASN1_INTEGER *in; if (x == NULL) return (0); in = x->cert_info->serialNumber; if (in != serial) { in = ASN1_INTEGER_dup(serial); if (in != NULL) { ASN1_INTEGER_free(x->cert_info->serialNumber); x->cert_info->serialNumber = in; } } return (in != NULL); } int |
︙ | ︙ | |||
116 117 118 119 120 121 122 | if ((x == NULL) || (x->cert_info->validity == NULL)) return (0); in = x->cert_info->validity->notBefore; if (in != tm) { in = ASN1_STRING_dup(tm); if (in != NULL) { | | | | 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | if ((x == NULL) || (x->cert_info->validity == NULL)) return (0); in = x->cert_info->validity->notBefore; if (in != tm) { in = ASN1_STRING_dup(tm); if (in != NULL) { ASN1_TIME_free(x->cert_info->validity->notBefore); x->cert_info->validity->notBefore = in; } } return (in != NULL); } int X509_set_notAfter(X509 *x, const ASN1_TIME *tm) { ASN1_TIME *in; if ((x == NULL) || (x->cert_info->validity == NULL)) return (0); in = x->cert_info->validity->notAfter; if (in != tm) { in = ASN1_STRING_dup(tm); if (in != NULL) { ASN1_TIME_free(x->cert_info->validity->notAfter); x->cert_info->validity->notAfter = in; } } return (in != NULL); } int X509_set_pubkey(X509 *x, EVP_PKEY *pkey) { if ((x == NULL) || (x->cert_info == NULL)) return (0); return (X509_PUBKEY_set(&(x->cert_info->key), pkey)); } |
Changes to jni/libressl/crypto/x509/x509_v3.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: x509_v3.c,v 1.12 2015/07/29 14:58:34 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
244 245 246 247 248 249 250 | int X509_EXTENSION_set_object(X509_EXTENSION *ex, ASN1_OBJECT *obj) { if ((ex == NULL) || (obj == NULL)) return (0); ASN1_OBJECT_free(ex->object); ex->object = OBJ_dup(obj); | | | 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 | int X509_EXTENSION_set_object(X509_EXTENSION *ex, ASN1_OBJECT *obj) { if ((ex == NULL) || (obj == NULL)) return (0); ASN1_OBJECT_free(ex->object); ex->object = OBJ_dup(obj); return ex->object != NULL; } int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit) { if (ex == NULL) return (0); |
︙ | ︙ |
Changes to jni/libressl/crypto/x509/x509_vfy.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: x509_vfy.c,v 1.48 2015/12/14 03:38:13 beck Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
384 385 386 387 388 389 390 | goto end; if (0) { end: X509_get_pubkey_parameters(NULL, ctx->chain); } if (sktmp != NULL) sk_X509_free(sktmp); | < | | 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 | goto end; if (0) { end: X509_get_pubkey_parameters(NULL, ctx->chain); } if (sktmp != NULL) sk_X509_free(sktmp); X509_free(chain_ss); return ok; } /* Given a STACK_OF(X509) find the issuer of cert (if any) */ |
︙ | ︙ | |||
681 682 683 684 685 686 687 | } static int check_cert(X509_STORE_CTX *ctx) { X509_CRL *crl = NULL, *dcrl = NULL; X509 *x; | | | 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 | } static int check_cert(X509_STORE_CTX *ctx) { X509_CRL *crl = NULL, *dcrl = NULL; X509 *x; int ok = 0, cnum; unsigned int last_reasons; cnum = ctx->error_depth; x = sk_X509_value(ctx->chain, cnum); ctx->current_cert = x; ctx->current_issuer = NULL; ctx->current_crl_score = 0; |
︙ | ︙ | |||
754 755 756 757 758 759 760 | } /* Check CRL times against values in X509_STORE_CTX */ static int check_crl_time(X509_STORE_CTX *ctx, X509_CRL *crl, int notify) { | | > > > > > > < < < < | 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 | } /* Check CRL times against values in X509_STORE_CTX */ static int check_crl_time(X509_STORE_CTX *ctx, X509_CRL *crl, int notify) { time_t *ptime = NULL; int i; if (ctx->param->flags & X509_V_FLAG_NO_CHECK_TIME) return (1); if (ctx->param->flags & X509_V_FLAG_USE_CHECK_TIME) ptime = &ctx->param->check_time; if (notify) ctx->current_crl = crl; i = X509_cmp_time(X509_CRL_get_lastUpdate(crl), ptime); if (i == 0) { if (!notify) return 0; ctx->error = X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD; if (!ctx->verify_cb(0, ctx)) |
︙ | ︙ | |||
1485 1486 1487 1488 1489 1490 1491 | return 1; } int x509_check_cert_time(X509_STORE_CTX *ctx, X509 *x, int quiet) { | | > > > < < | 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 | return 1; } int x509_check_cert_time(X509_STORE_CTX *ctx, X509 *x, int quiet) { time_t *ptime = NULL; int i; if (ctx->param->flags & X509_V_FLAG_NO_CHECK_TIME) return (1); if (ctx->param->flags & X509_V_FLAG_USE_CHECK_TIME) ptime = &ctx->param->check_time; i = X509_cmp_time(X509_get_notBefore(x), ptime); if (i == 0) { if (quiet) return 0; ctx->error = X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD; ctx->current_cert = x; |
︙ | ︙ | |||
1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 | int X509_cmp_current_time(const ASN1_TIME *ctm) { return X509_cmp_time(ctm, NULL); } int X509_cmp_time(const ASN1_TIME *ctm, time_t *cmp_time) { | > > > > > > > > > > > > > < < < < < | < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < | | < < < < | < < | < < < < < < < < < < < < < < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | < | | | < < < < < < < | 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 | int X509_cmp_current_time(const ASN1_TIME *ctm) { return X509_cmp_time(ctm, NULL); } /* * Compare a possibly unvalidated ASN1_TIME string against a time_t * using RFC 5280 rules for the time string. If *cmp_time is NULL * the current system time is used. * * XXX NOTE that unlike what you expect a "cmp" function to do in C, * XXX this one is "special", and returns 0 for error. * * Returns: * -1 if the ASN1_time is earlier than OR the same as *cmp_time. * 1 if the ASN1_time is later than *cmp_time. * 0 on error. */ int X509_cmp_time(const ASN1_TIME *ctm, time_t *cmp_time) { time_t time1, time2; struct tm tm1, tm2; int ret = 0; int type; if (cmp_time == NULL) time2 = time(NULL); else time2 = *cmp_time; memset(&tm1, 0, sizeof(tm1)); if ((type = asn1_time_parse(ctm->data, ctm->length, &tm1, 0)) == -1) goto out; /* invalid time */ /* RFC 5280 section 4.1.2.5 */ if (tm1.tm_year < 150 && type != V_ASN1_UTCTIME) goto out; if (tm1.tm_year >= 150 && type != V_ASN1_GENERALIZEDTIME) goto out; /* * Defensively fail if the time string is not representable as * a time_t. A time_t must be sane if you care about times after * Jan 19 2038. */ if ((time1 = timegm(&tm1)) == -1) goto out; if (gmtime_r(&time2, &tm2) == NULL) goto out; ret = asn1_tm_cmp(&tm1, &tm2); if (ret == 0) ret = -1; /* 0 is used for error, so map same to less than */ out: return (ret); } ASN1_TIME * X509_gmtime_adj(ASN1_TIME *s, long adj) { return X509_time_adj(s, adj, NULL); } ASN1_TIME * X509_time_adj(ASN1_TIME *s, long offset_sec, time_t *in_time) { return X509_time_adj_ex(s, 0, offset_sec, in_time); } ASN1_TIME * X509_time_adj_ex(ASN1_TIME *s, int offset_day, long offset_sec, time_t *in_time) { time_t t; if (in_time == NULL) t = time(NULL); else t = *in_time; return ASN1_TIME_adj(s, t, offset_day, offset_sec); } int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain) { EVP_PKEY *ktmp = NULL, *ktmp2; |
︙ | ︙ |
Changes to jni/libressl/crypto/x509/x509cset.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: x509cset.c,v 1.10 2015/09/30 17:30:16 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2001. */ /* ==================================================================== * Copyright (c) 2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
65 66 67 68 69 70 71 | int X509_CRL_set_version(X509_CRL *x, long version) { if (x == NULL) return (0); if (x->crl->version == NULL) { | | | 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | int X509_CRL_set_version(X509_CRL *x, long version) { if (x == NULL) return (0); if (x->crl->version == NULL) { if ((x->crl->version = ASN1_INTEGER_new()) == NULL) return (0); } return (ASN1_INTEGER_set(x->crl->version, version)); } int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name) |
︙ | ︙ | |||
90 91 92 93 94 95 96 | if (x == NULL) return (0); in = x->crl->lastUpdate; if (in != tm) { in = ASN1_STRING_dup(tm); if (in != NULL) { | | | | 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | if (x == NULL) return (0); in = x->crl->lastUpdate; if (in != tm) { in = ASN1_STRING_dup(tm); if (in != NULL) { ASN1_TIME_free(x->crl->lastUpdate); x->crl->lastUpdate = in; } } return (in != NULL); } int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm) { ASN1_TIME *in; if (x == NULL) return (0); in = x->crl->nextUpdate; if (in != tm) { in = ASN1_STRING_dup(tm); if (in != NULL) { ASN1_TIME_free(x->crl->nextUpdate); x->crl->nextUpdate = in; } } return (in != NULL); } int |
︙ | ︙ | |||
143 144 145 146 147 148 149 | if (x == NULL) return (0); in = x->revocationDate; if (in != tm) { in = ASN1_STRING_dup(tm); if (in != NULL) { | | | | | 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | if (x == NULL) return (0); in = x->revocationDate; if (in != tm) { in = ASN1_STRING_dup(tm); if (in != NULL) { ASN1_TIME_free(x->revocationDate); x->revocationDate = in; } } return (in != NULL); } int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial) { ASN1_INTEGER *in; if (x == NULL) return (0); in = x->serialNumber; if (in != serial) { in = ASN1_INTEGER_dup(serial); if (in != NULL) { ASN1_INTEGER_free(x->serialNumber); x->serialNumber = in; } } return (in != NULL); } |
Changes to jni/libressl/crypto/x509/x_all.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: x_all.c,v 1.20 2015/09/13 15:59:30 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #ifndef OPENSSL_NO_DSA #include <openssl/dsa.h> #endif #ifndef OPENSSL_NO_RSA #include <openssl/rsa.h> #endif int X509_verify(X509 *a, EVP_PKEY *r) { if (X509_ALGOR_cmp(a->sig_alg, a->cert_info->signature)) return 0; return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CINF), a->sig_alg, a->signature, a->cert_info, r)); } int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r) { | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 | #ifndef OPENSSL_NO_DSA #include <openssl/dsa.h> #endif #ifndef OPENSSL_NO_RSA #include <openssl/rsa.h> #endif X509 * d2i_X509_bio(BIO *bp, X509 **x509) { return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509), bp, x509); } int i2d_X509_bio(BIO *bp, X509 *x509) { return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509), bp, x509); } X509 * d2i_X509_fp(FILE *fp, X509 **x509) { return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509), fp, x509); } int i2d_X509_fp(FILE *fp, X509 *x509) { return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509), fp, x509); } X509_CRL * d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl) { return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); } int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl) { return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); } X509_CRL * d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl) { return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); } int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl) { return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); } PKCS7 * d2i_PKCS7_bio(BIO *bp, PKCS7 **p7) { return ASN1_item_d2i_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); } int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7) { return ASN1_item_i2d_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); } PKCS7 * d2i_PKCS7_fp(FILE *fp, PKCS7 **p7) { return ASN1_item_d2i_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); } int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7) { return ASN1_item_i2d_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); } X509_REQ * d2i_X509_REQ_bio(BIO *bp, X509_REQ **req) { return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); } int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req) { return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); } X509_REQ * d2i_X509_REQ_fp(FILE *fp, X509_REQ **req) { return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); } int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req) { return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); } #ifndef OPENSSL_NO_RSA RSA * d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa) { return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); } int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa) { return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); } RSA * d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa) { return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); } int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa) { return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); } RSA * d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa) { return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); } int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa) { return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); } RSA * d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa) { return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); } int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa) { return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); } RSA * d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa) { return ASN1_d2i_bio_of(RSA, RSA_new, d2i_RSA_PUBKEY, bp, rsa); } int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa) { return ASN1_i2d_bio_of(RSA, i2d_RSA_PUBKEY, bp, rsa); } int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa) { return ASN1_i2d_fp((I2D_OF(void))i2d_RSA_PUBKEY, fp, rsa); } RSA * d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa) { return ASN1_d2i_fp((void *(*)(void))RSA_new, (D2I_OF(void))d2i_RSA_PUBKEY, fp, (void **)rsa); } #endif #ifndef OPENSSL_NO_DSA DSA * d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa) { return ASN1_item_d2i_bio(ASN1_ITEM_rptr(DSAPrivateKey), bp, dsa); } int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa) { return ASN1_item_i2d_bio(ASN1_ITEM_rptr(DSAPrivateKey), bp, dsa); } DSA * d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa) { return ASN1_item_d2i_fp(ASN1_ITEM_rptr(DSAPrivateKey), fp, dsa); } int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa) { return ASN1_item_i2d_fp(ASN1_ITEM_rptr(DSAPrivateKey), fp, dsa); } DSA * d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa) { return ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSA_PUBKEY, bp, dsa); } int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa) { return ASN1_i2d_bio_of(DSA, i2d_DSA_PUBKEY, bp, dsa); } DSA * d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa) { return ASN1_d2i_fp_of(DSA, DSA_new, d2i_DSA_PUBKEY, fp, dsa); } int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa) { return ASN1_i2d_fp_of(DSA, i2d_DSA_PUBKEY, fp, dsa); } #endif #ifndef OPENSSL_NO_EC EC_KEY * d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey) { return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, bp, eckey); } int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey) { return ASN1_i2d_bio_of(EC_KEY, i2d_ECPrivateKey, bp, eckey); } EC_KEY * d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey) { return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, fp, eckey); } int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey) { return ASN1_i2d_fp_of(EC_KEY, i2d_ECPrivateKey, fp, eckey); } EC_KEY * d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey) { return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, bp, eckey); } int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *ecdsa) { return ASN1_i2d_bio_of(EC_KEY, i2d_EC_PUBKEY, bp, ecdsa); } EC_KEY * d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey) { return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, fp, eckey); } int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey) { return ASN1_i2d_fp_of(EC_KEY, i2d_EC_PUBKEY, fp, eckey); } #endif X509_SIG * d2i_PKCS8_bio(BIO *bp, X509_SIG **p8) { return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_SIG), bp, p8); } int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8) { return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_SIG), bp, p8); } X509_SIG * d2i_PKCS8_fp(FILE *fp, X509_SIG **p8) { return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_SIG), fp, p8); } int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8) { return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_SIG), fp, p8); } PKCS8_PRIV_KEY_INFO * d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO **p8inf) { return ASN1_item_d2i_bio(ASN1_ITEM_rptr(PKCS8_PRIV_KEY_INFO), bp, p8inf); } int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf) { return ASN1_item_i2d_bio(ASN1_ITEM_rptr(PKCS8_PRIV_KEY_INFO), bp, p8inf); } PKCS8_PRIV_KEY_INFO * d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO **p8inf) { return ASN1_item_d2i_fp(ASN1_ITEM_rptr(PKCS8_PRIV_KEY_INFO), fp, p8inf); } int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf) { return ASN1_item_i2d_fp(ASN1_ITEM_rptr(PKCS8_PRIV_KEY_INFO), fp, p8inf); } EVP_PKEY * d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a) { return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey, bp, a); } int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey) { return ASN1_i2d_bio_of(EVP_PKEY, i2d_PrivateKey, bp, pkey); } EVP_PKEY * d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a) { return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey, fp, a); } int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey) { return ASN1_i2d_fp_of(EVP_PKEY, i2d_PrivateKey, fp, pkey); } EVP_PKEY * d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a) { return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, bp, a); } int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey) { return ASN1_i2d_bio_of(EVP_PKEY, i2d_PUBKEY, bp, pkey); } int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey) { return ASN1_i2d_fp_of(EVP_PKEY, i2d_PUBKEY, fp, pkey); } EVP_PKEY * d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a) { return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, fp, a); } int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key) { PKCS8_PRIV_KEY_INFO *p8inf; int ret; p8inf = EVP_PKEY2PKCS8(key); if (!p8inf) return 0; ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf); PKCS8_PRIV_KEY_INFO_free(p8inf); return ret; } int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key) { PKCS8_PRIV_KEY_INFO *p8inf; int ret; p8inf = EVP_PKEY2PKCS8(key); if (!p8inf) return 0; ret = i2d_PKCS8_PRIV_KEY_INFO_fp(fp, p8inf); PKCS8_PRIV_KEY_INFO_free(p8inf); return ret; } int X509_verify(X509 *a, EVP_PKEY *r) { if (X509_ALGOR_cmp(a->sig_alg, a->cert_info->signature)) return 0; return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CINF), a->sig_alg, a->signature, a->cert_info, r)); } int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r) { return (ASN1_item_verify(ASN1_ITEM_rptr(X509_REQ_INFO), a->sig_alg, a->signature, a->req_info, r)); } int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r) { return (ASN1_item_verify(ASN1_ITEM_rptr(NETSCAPE_SPKAC), a->sig_algor, a->signature, a->spkac, r)); } int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md) { x->cert_info->enc.modified = 1; |
︙ | ︙ | |||
146 147 148 149 150 151 152 | int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md) { return (ASN1_item_sign(ASN1_ITEM_rptr(NETSCAPE_SPKAC), x->sig_algor, NULL, x->signature, x->spkac, pkey, md)); } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 545 546 547 548 549 550 551 552 553 554 555 556 557 558 | int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md) { return (ASN1_item_sign(ASN1_ITEM_rptr(NETSCAPE_SPKAC), x->sig_algor, NULL, x->signature, x->spkac, pkey, md)); } int X509_pubkey_digest(const X509 *data, const EVP_MD *type, unsigned char *md, unsigned int *len) { ASN1_BIT_STRING *key; key = X509_get0_pubkey_bitstr(data); |
︙ | ︙ | |||
472 473 474 475 476 477 478 | int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, const EVP_MD *type, unsigned char *md, unsigned int *len) { return(ASN1_item_digest(ASN1_ITEM_rptr(PKCS7_ISSUER_AND_SERIAL), type, (char *)data, md, len)); } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 596 597 598 599 600 601 602 | int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, const EVP_MD *type, unsigned char *md, unsigned int *len) { return(ASN1_item_digest(ASN1_ITEM_rptr(PKCS7_ISSUER_AND_SERIAL), type, (char *)data, md, len)); } |
Changes to jni/libressl/crypto/x509v3/pcy_tree.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: pcy_tree.c,v 1.15 2015/07/18 00:01:05 beck Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2004. */ /* ==================================================================== * Copyright (c) 2004 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
635 636 637 638 639 640 641 | if (!tree) return; sk_X509_POLICY_NODE_free(tree->auth_policies); sk_X509_POLICY_NODE_pop_free(tree->user_policies, exnode_free); for (i = 0, curr = tree->levels; i < tree->nlevel; i++, curr++) { | < | | 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 | if (!tree) return; sk_X509_POLICY_NODE_free(tree->auth_policies); sk_X509_POLICY_NODE_pop_free(tree->user_policies, exnode_free); for (i = 0, curr = tree->levels; i < tree->nlevel; i++, curr++) { X509_free(curr->cert); if (curr->nodes) sk_X509_POLICY_NODE_pop_free(curr->nodes, policy_node_free); if (curr->anyPolicy) policy_node_free(curr->anyPolicy); } |
︙ | ︙ |
Changes to jni/libressl/crypto/x509v3/v3_akey.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: v3_akey.c,v 1.16 2015/09/30 17:30:16 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
171 172 173 174 175 176 177 | X509V3_R_UNABLE_TO_GET_ISSUER_KEYID); return NULL; } } if ((issuer && !ikeyid) || (issuer == 2)) { isname = X509_NAME_dup(X509_get_issuer_name(cert)); | | | 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | X509V3_R_UNABLE_TO_GET_ISSUER_KEYID); return NULL; } } if ((issuer && !ikeyid) || (issuer == 2)) { isname = X509_NAME_dup(X509_get_issuer_name(cert)); serial = ASN1_INTEGER_dup(X509_get_serialNumber(cert)); if (!isname || !serial) { X509V3err(X509V3_F_V2I_AUTHORITY_KEYID, X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS); goto err; } } |
︙ | ︙ | |||
205 206 207 208 209 210 211 | return akeyid; err: AUTHORITY_KEYID_free(akeyid); GENERAL_NAME_free(gen); sk_GENERAL_NAME_free(gens); X509_NAME_free(isname); | | | | 205 206 207 208 209 210 211 212 213 214 215 | return akeyid; err: AUTHORITY_KEYID_free(akeyid); GENERAL_NAME_free(gen); sk_GENERAL_NAME_free(gens); X509_NAME_free(isname); ASN1_INTEGER_free(serial); ASN1_OCTET_STRING_free(ikeyid); return NULL; } |
Changes to jni/libressl/crypto/x509v3/v3_alt.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: v3_alt.c,v 1.24 2015/07/29 16:13:48 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project. */ /* ==================================================================== * Copyright (c) 1999-2003 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
435 436 437 438 439 440 441 | gen = NULL; } return 1; err: GENERAL_NAME_free(gen); | | | 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 | gen = NULL; } return 1; err: GENERAL_NAME_free(gen); ASN1_IA5STRING_free(email); return 0; } GENERAL_NAMES * v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) { |
︙ | ︙ | |||
553 554 555 556 557 558 559 | default: X509V3err(X509V3_F_A2I_GENERAL_NAME, X509V3_R_UNSUPPORTED_TYPE); goto err; } if (is_string) { | | | 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 | default: X509V3err(X509V3_F_A2I_GENERAL_NAME, X509V3_R_UNSUPPORTED_TYPE); goto err; } if (is_string) { if (!(gen->d.ia5 = ASN1_IA5STRING_new()) || !ASN1_STRING_set(gen->d.ia5, (unsigned char*)value, strlen(value))) { X509V3err(X509V3_F_A2I_GENERAL_NAME, ERR_R_MALLOC_FAILURE); goto err; } } |
︙ | ︙ |
Changes to jni/libressl/crypto/x509v3/v3_bitst.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: v3_bitst.c,v 1.11 2015/07/29 16:13:48 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
140 141 142 143 144 145 146 | STACK_OF(CONF_VALUE) *nval) { CONF_VALUE *val; ASN1_BIT_STRING *bs; int i; BIT_STRING_BITNAME *bnam; | | | | | 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | STACK_OF(CONF_VALUE) *nval) { CONF_VALUE *val; ASN1_BIT_STRING *bs; int i; BIT_STRING_BITNAME *bnam; if (!(bs = ASN1_BIT_STRING_new())) { X509V3err(X509V3_F_V2I_ASN1_BIT_STRING, ERR_R_MALLOC_FAILURE); return NULL; } for (i = 0; i < sk_CONF_VALUE_num(nval); i++) { val = sk_CONF_VALUE_value(nval, i); for (bnam = method->usr_data; bnam->lname; bnam++) { if (!strcmp(bnam->sname, val->name) || !strcmp(bnam->lname, val->name) ) { if (!ASN1_BIT_STRING_set_bit(bs, bnam->bitnum, 1)) { X509V3err(X509V3_F_V2I_ASN1_BIT_STRING, ERR_R_MALLOC_FAILURE); ASN1_BIT_STRING_free(bs); return NULL; } break; } } if (!bnam->lname) { X509V3err(X509V3_F_V2I_ASN1_BIT_STRING, X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT); X509V3_conf_err(val); ASN1_BIT_STRING_free(bs); return NULL; } } return bs; } |
Changes to jni/libressl/crypto/x509v3/v3_conf.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: v3_conf.c,v 1.18 2015/09/30 18:41:06 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
199 200 201 202 203 204 205 | unsigned char *p; ext_len = method->i2d(ext_struc, NULL); if (!(ext_der = malloc(ext_len))) goto merr; p = ext_der; method->i2d(ext_struc, &p); } | | | | | 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 | unsigned char *p; ext_len = method->i2d(ext_struc, NULL); if (!(ext_der = malloc(ext_len))) goto merr; p = ext_der; method->i2d(ext_struc, &p); } if (!(ext_oct = ASN1_OCTET_STRING_new())) goto merr; ext_oct->data = ext_der; ext_oct->length = ext_len; ext = X509_EXTENSION_create_by_NID(NULL, ext_nid, crit, ext_oct); if (!ext) goto merr; ASN1_OCTET_STRING_free(ext_oct); return ext; merr: ASN1_OCTET_STRING_free(ext_oct); X509V3err(X509V3_F_DO_EXT_I2D, ERR_R_MALLOC_FAILURE); return NULL; } /* Given an internal structure, nid and critical flag create an extension */ |
︙ | ︙ | |||
274 275 276 277 278 279 280 | /* Create a generic extension: for now just handle DER type */ static X509_EXTENSION * v3_generic_extension(const char *ext, char *value, int crit, int gen_type, X509V3_CTX *ctx) { unsigned char *ext_der = NULL; | | > > > > | | | 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 | /* Create a generic extension: for now just handle DER type */ static X509_EXTENSION * v3_generic_extension(const char *ext, char *value, int crit, int gen_type, X509V3_CTX *ctx) { unsigned char *ext_der = NULL; long ext_len = 0; ASN1_OBJECT *obj = NULL; ASN1_OCTET_STRING *oct = NULL; X509_EXTENSION *extension = NULL; if (!(obj = OBJ_txt2obj(ext, 0))) { X509V3err(X509V3_F_V3_GENERIC_EXTENSION, X509V3_R_EXTENSION_NAME_ERROR); ERR_asprintf_error_data("name=%s", ext); goto err; } if (gen_type == 1) ext_der = string_to_hex(value, &ext_len); else if (gen_type == 2) ext_der = generic_asn1(value, ctx, &ext_len); else { ERR_asprintf_error_data("Unexpected generic extension type %d", gen_type); goto err; } if (ext_der == NULL) { X509V3err(X509V3_F_V3_GENERIC_EXTENSION, X509V3_R_EXTENSION_VALUE_ERROR); ERR_asprintf_error_data("value=%s", value); goto err; } if (!(oct = ASN1_OCTET_STRING_new())) { X509V3err(X509V3_F_V3_GENERIC_EXTENSION, ERR_R_MALLOC_FAILURE); goto err; } oct->data = ext_der; oct->length = ext_len; ext_der = NULL; extension = X509_EXTENSION_create_by_OBJ(NULL, obj, crit, oct); err: ASN1_OBJECT_free(obj); ASN1_OCTET_STRING_free(oct); free(ext_der); return extension; } static unsigned char * generic_asn1(char *value, X509V3_CTX *ctx, long *ext_len) { |
︙ | ︙ |
Changes to jni/libressl/crypto/x509v3/v3_cpols.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: v3_cpols.c,v 1.22 2015/07/29 16:13:48 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
493 494 495 496 497 498 499 | goto err; } pol->policyid = pobj; } else if (name_cmp(cnf->name, "CPS") == 0) { if ((nqual = POLICYQUALINFO_new()) == NULL) goto merr; nqual->pqualid = OBJ_nid2obj(NID_id_qt_cps); | | | 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 | goto err; } pol->policyid = pobj; } else if (name_cmp(cnf->name, "CPS") == 0) { if ((nqual = POLICYQUALINFO_new()) == NULL) goto merr; nqual->pqualid = OBJ_nid2obj(NID_id_qt_cps); nqual->d.cpsuri = ASN1_IA5STRING_new(); if (nqual->d.cpsuri == NULL) goto merr; if (ASN1_STRING_set(nqual->d.cpsuri, cnf->value, strlen(cnf->value)) == 0) goto merr; if (pol->qualifiers == NULL) { |
︙ | ︙ | |||
579 580 581 582 583 584 585 | if (!(not = USERNOTICE_new())) goto merr; qual->d.usernotice = not; for (i = 0; i < sk_CONF_VALUE_num(unot); i++) { cnf = sk_CONF_VALUE_value(unot, i); if (!strcmp(cnf->name, "explicitText")) { if (not->exptext == NULL) { | | | 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 | if (!(not = USERNOTICE_new())) goto merr; qual->d.usernotice = not; for (i = 0; i < sk_CONF_VALUE_num(unot); i++) { cnf = sk_CONF_VALUE_value(unot, i); if (!strcmp(cnf->name, "explicitText")) { if (not->exptext == NULL) { not->exptext = ASN1_VISIBLESTRING_new(); if (not->exptext == NULL) goto merr; } if (!ASN1_STRING_set(not->exptext, cnf->value, strlen(cnf->value))) goto merr; } else if (!strcmp(cnf->name, "organization")) { |
︙ | ︙ |
Changes to jni/libressl/crypto/x509v3/v3_genn.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: v3_genn.c,v 1.11 2015/07/25 16:00:14 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999-2008 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
317 318 319 320 321 322 323 | { ASN1_item_free((ASN1_VALUE *)a, &GENERAL_NAMES_it); } GENERAL_NAME * GENERAL_NAME_dup(GENERAL_NAME *a) { | < | | 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 | { ASN1_item_free((ASN1_VALUE *)a, &GENERAL_NAMES_it); } GENERAL_NAME * GENERAL_NAME_dup(GENERAL_NAME *a) { return ASN1_item_dup(&GENERAL_NAME_it, a); } /* Returns 0 if they are equal, != 0 otherwise. */ int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b) { int result = -1; |
︙ | ︙ |
Changes to jni/libressl/crypto/x509v3/v3_ia5.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: v3_ia5.c,v 1.14 2015/07/29 16:13:48 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
220 221 222 223 224 225 226 | { ASN1_IA5STRING *ia5; if (!str) { X509V3err(X509V3_F_S2I_ASN1_IA5STRING, X509V3_R_INVALID_NULL_ARGUMENT); return NULL; } | | | | 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 | { ASN1_IA5STRING *ia5; if (!str) { X509V3err(X509V3_F_S2I_ASN1_IA5STRING, X509V3_R_INVALID_NULL_ARGUMENT); return NULL; } if (!(ia5 = ASN1_IA5STRING_new())) goto err; if (!ASN1_STRING_set((ASN1_STRING *)ia5, (unsigned char*)str, strlen(str))) { ASN1_IA5STRING_free(ia5); goto err; } return ia5; err: X509V3err(X509V3_F_S2I_ASN1_IA5STRING, ERR_R_MALLOC_FAILURE); return NULL; } |
Changes to jni/libressl/crypto/x509v3/v3_ocsp.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: v3_ocsp.c,v 1.12 2015/07/29 16:13:49 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
308 309 310 311 312 313 314 | if (pos != NULL) *pos = os; return os; err: if (pos == NULL || *pos != os) | | | | 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 | if (pos != NULL) *pos = os; return os; err: if (pos == NULL || *pos != os) ASN1_OCTET_STRING_free(os); OCSPerr(OCSP_F_D2I_OCSP_NONCE, ERR_R_MALLOC_FAILURE); return NULL; } static void ocsp_nonce_free(void *a) { ASN1_OCTET_STRING_free(a); } static int i2r_ocsp_nonce(const X509V3_EXT_METHOD *method, void *nonce, BIO *out, int indent) { if (BIO_printf(out, "%*s", indent, "") <= 0) |
︙ | ︙ |
Changes to jni/libressl/crypto/x509v3/v3_skey.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: v3_skey.c,v 1.12 2015/07/29 16:13:49 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
90 91 92 93 94 95 96 | ASN1_OCTET_STRING * s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *str) { ASN1_OCTET_STRING *oct; long length; | | | | | 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | ASN1_OCTET_STRING * s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *str) { ASN1_OCTET_STRING *oct; long length; if (!(oct = ASN1_OCTET_STRING_new())) { X509V3err(X509V3_F_S2I_ASN1_OCTET_STRING, ERR_R_MALLOC_FAILURE); return NULL; } if (!(oct->data = string_to_hex(str, &length))) { ASN1_OCTET_STRING_free(oct); return NULL; } oct->length = length; return oct; } static ASN1_OCTET_STRING * s2i_skey_id(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *str) { ASN1_OCTET_STRING *oct; ASN1_BIT_STRING *pk; unsigned char pkey_dig[EVP_MAX_MD_SIZE]; unsigned int diglen; if (strcmp(str, "hash")) return s2i_ASN1_OCTET_STRING(method, ctx, str); if (!(oct = ASN1_OCTET_STRING_new())) { X509V3err(X509V3_F_S2I_SKEY_ID, ERR_R_MALLOC_FAILURE); return NULL; } if (ctx && (ctx->flags == CTX_TEST)) return oct; |
︙ | ︙ | |||
151 152 153 154 155 156 157 | X509V3err(X509V3_F_S2I_SKEY_ID, ERR_R_MALLOC_FAILURE); goto err; } return oct; err: | | | 151 152 153 154 155 156 157 158 159 160 | X509V3err(X509V3_F_S2I_SKEY_ID, ERR_R_MALLOC_FAILURE); goto err; } return oct; err: ASN1_OCTET_STRING_free(oct); return NULL; } |
Changes to jni/libressl/crypto/x509v3/v3_sxnet.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: v3_sxnet.c,v 1.16 2015/07/29 16:13:49 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
268 269 270 271 272 273 274 | /* Add an id given the zone as an unsigned long */ int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user, int userlen) { ASN1_INTEGER *izone = NULL; | | | | 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 | /* Add an id given the zone as an unsigned long */ int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user, int userlen) { ASN1_INTEGER *izone = NULL; if (!(izone = ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) { X509V3err(X509V3_F_SXNET_ADD_ID_ULONG, ERR_R_MALLOC_FAILURE); ASN1_INTEGER_free(izone); return 0; } return SXNET_add_id_INTEGER(psx, izone, user, userlen); } /* Add an id given the zone as an ASN1_INTEGER. * Note this version uses the passed integer and doesn't make a copy so don't |
︙ | ︙ | |||
346 347 348 349 350 351 352 | if (!(izone = s2i_ASN1_INTEGER(NULL, zone))) { X509V3err(X509V3_F_SXNET_GET_ID_ASC, X509V3_R_ERROR_CONVERTING_ZONE); return NULL; } oct = SXNET_get_id_INTEGER(sx, izone); | | | | | | 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 | if (!(izone = s2i_ASN1_INTEGER(NULL, zone))) { X509V3err(X509V3_F_SXNET_GET_ID_ASC, X509V3_R_ERROR_CONVERTING_ZONE); return NULL; } oct = SXNET_get_id_INTEGER(sx, izone); ASN1_INTEGER_free(izone); return oct; } ASN1_OCTET_STRING * SXNET_get_id_ulong(SXNET *sx, unsigned long lzone) { ASN1_INTEGER *izone = NULL; ASN1_OCTET_STRING *oct; if (!(izone = ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) { X509V3err(X509V3_F_SXNET_GET_ID_ULONG, ERR_R_MALLOC_FAILURE); ASN1_INTEGER_free(izone); return NULL; } oct = SXNET_get_id_INTEGER(sx, izone); ASN1_INTEGER_free(izone); return oct; } ASN1_OCTET_STRING * SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone) { SXNETID *id; |
︙ | ︙ |
Changes to jni/libressl/include/CMakeLists.txt.
1 2 3 4 | install(DIRECTORY . DESTINATION include PATTERN "CMakeLists.txt" EXCLUDE PATTERN "compat" EXCLUDE | | | 1 2 3 4 5 | install(DIRECTORY . DESTINATION include PATTERN "CMakeLists.txt" EXCLUDE PATTERN "compat" EXCLUDE PATTERN "Makefile*" EXCLUDE) |
Changes to jni/libressl/include/Makefile.am.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | include $(top_srcdir)/Makefile.am.common EXTRA_DIST = CMakeLists.txt SUBDIRS = openssl noinst_HEADERS = pqueue.h noinst_HEADERS += compat/dirent.h noinst_HEADERS += compat/dirent_msvc.h noinst_HEADERS += compat/err.h noinst_HEADERS += compat/netdb.h noinst_HEADERS += compat/poll.h noinst_HEADERS += compat/stdio.h noinst_HEADERS += compat/stdlib.h noinst_HEADERS += compat/string.h noinst_HEADERS += compat/time.h noinst_HEADERS += compat/unistd.h noinst_HEADERS += compat/win32netcompat.h noinst_HEADERS += compat/arpa/inet.h noinst_HEADERS += compat/arpa/nameser.h noinst_HEADERS += compat/machine/endian.h noinst_HEADERS += compat/netinet/in.h noinst_HEADERS += compat/netinet/tcp.h noinst_HEADERS += compat/sys/cdefs.h noinst_HEADERS += compat/sys/ioctl.h noinst_HEADERS += compat/sys/mman.h noinst_HEADERS += compat/sys/param.h noinst_HEADERS += compat/sys/select.h | > > > > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | include $(top_srcdir)/Makefile.am.common EXTRA_DIST = CMakeLists.txt SUBDIRS = openssl noinst_HEADERS = pqueue.h noinst_HEADERS += compat/dirent.h noinst_HEADERS += compat/dirent_msvc.h noinst_HEADERS += compat/err.h noinst_HEADERS += compat/limits.h noinst_HEADERS += compat/netdb.h noinst_HEADERS += compat/poll.h noinst_HEADERS += compat/readpassphrase.h noinst_HEADERS += compat/resolv.h noinst_HEADERS += compat/stdio.h noinst_HEADERS += compat/stdlib.h noinst_HEADERS += compat/string.h noinst_HEADERS += compat/time.h noinst_HEADERS += compat/unistd.h noinst_HEADERS += compat/win32netcompat.h noinst_HEADERS += compat/arpa/inet.h noinst_HEADERS += compat/arpa/nameser.h noinst_HEADERS += compat/machine/endian.h noinst_HEADERS += compat/netinet/in.h noinst_HEADERS += compat/netinet/ip.h noinst_HEADERS += compat/netinet/tcp.h noinst_HEADERS += compat/sys/cdefs.h noinst_HEADERS += compat/sys/ioctl.h noinst_HEADERS += compat/sys/mman.h noinst_HEADERS += compat/sys/param.h noinst_HEADERS += compat/sys/select.h noinst_HEADERS += compat/sys/socket.h noinst_HEADERS += compat/sys/stat.h noinst_HEADERS += compat/sys/time.h noinst_HEADERS += compat/sys/types.h noinst_HEADERS += compat/sys/uio.h include_HEADERS = tls.h |
Changes to jni/libressl/include/Makefile.in.
︙ | ︙ | |||
340 341 342 343 344 345 346 | top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat -DLIBRESSL_INTERNAL EXTRA_DIST = CMakeLists.txt SUBDIRS = openssl noinst_HEADERS = pqueue.h compat/dirent.h compat/dirent_msvc.h \ | | > | | | | > | 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 | top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat -DLIBRESSL_INTERNAL EXTRA_DIST = CMakeLists.txt SUBDIRS = openssl noinst_HEADERS = pqueue.h compat/dirent.h compat/dirent_msvc.h \ compat/err.h compat/limits.h compat/netdb.h compat/poll.h \ compat/readpassphrase.h compat/resolv.h compat/stdio.h \ compat/stdlib.h compat/string.h compat/time.h compat/unistd.h \ compat/win32netcompat.h compat/arpa/inet.h \ compat/arpa/nameser.h compat/machine/endian.h \ compat/netinet/in.h compat/netinet/ip.h compat/netinet/tcp.h \ compat/sys/cdefs.h compat/sys/ioctl.h compat/sys/mman.h \ compat/sys/param.h compat/sys/select.h compat/sys/socket.h \ compat/sys/stat.h compat/sys/time.h compat/sys/types.h \ compat/sys/uio.h include_HEADERS = tls.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ |
︙ | ︙ |
Changes to jni/libressl/include/compat/err.h.
︙ | ︙ | |||
9 10 11 12 13 14 15 16 17 18 | #else #ifndef LIBCRYPTOCOMPAT_ERR_H #define LIBCRYPTOCOMPAT_ERR_H #include <errno.h> #include <stdio.h> #include <string.h> | > > > > > > > | > > > > > > > > > | > > | > | > > > > > > > | > > | > > | > > > > > > > > | > > | > | > > > | > > | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #else #ifndef LIBCRYPTOCOMPAT_ERR_H #define LIBCRYPTOCOMPAT_ERR_H #include <errno.h> #include <stdarg.h> #include <stdlib.h> #include <stdio.h> #include <string.h> static inline void err(int eval, const char *fmt, ...) { int sverrno = errno; va_list ap; va_start(ap, fmt); if (fmt != NULL) { vfprintf(stderr, fmt, ap); fprintf(stderr, ": "); } fprintf(stderr, "%s\n", strerror(sverrno)); exit(eval); va_end(ap); } static inline void errx(int eval, const char *fmt, ...) { va_list ap; va_start(ap, fmt); if (fmt != NULL) vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); exit(eval); va_end(ap); } static inline void warn(const char *fmt, ...) { int sverrno = errno; va_list ap; va_start(ap, fmt); if (fmt != NULL) { vfprintf(stderr, fmt, ap); fprintf(stderr, ": "); } fprintf(stderr, "%s\n", strerror(sverrno)); va_end(ap); } static inline void warnx(const char *fmt, ...) { va_list ap; va_start(ap, fmt); if (fmt != NULL) vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); va_end(ap); } #endif #endif |
Added jni/libressl/include/compat/limits.h.
> > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /* * Public domain * limits.h compatibility shim */ #ifdef _MSC_VER #include <../include/limits.h> #else #include_next <limits.h> #endif #ifdef __hpux #include <sys/param.h> #ifndef PATH_MAX #define PATH_MAX MAXPATHLEN #endif #endif |
Added jni/libressl/include/compat/netinet/ip.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | /* * Public domain * netinet/ip.h compatibility shim */ #if defined(__hpux) #include <netinet/in_systm.h> #endif #ifndef _WIN32 #include_next <netinet/ip.h> #else #include <win32netcompat.h> #endif /* * Definitions for DiffServ Codepoints as per RFC2474 */ #ifndef IPTOS_DSCP_CS0 #define IPTOS_DSCP_CS0 0x00 #define IPTOS_DSCP_CS1 0x20 #define IPTOS_DSCP_CS2 0x40 #define IPTOS_DSCP_CS3 0x60 #define IPTOS_DSCP_CS4 0x80 #define IPTOS_DSCP_CS5 0xa0 #define IPTOS_DSCP_CS6 0xc0 #define IPTOS_DSCP_CS7 0xe0 #endif #ifndef IPTOS_DSCP_AF11 #define IPTOS_DSCP_AF11 0x28 #define IPTOS_DSCP_AF12 0x30 #define IPTOS_DSCP_AF13 0x38 #define IPTOS_DSCP_AF21 0x48 #define IPTOS_DSCP_AF22 0x50 #define IPTOS_DSCP_AF23 0x58 #define IPTOS_DSCP_AF31 0x68 #define IPTOS_DSCP_AF32 0x70 #define IPTOS_DSCP_AF33 0x78 #define IPTOS_DSCP_AF41 0x88 #define IPTOS_DSCP_AF42 0x90 #define IPTOS_DSCP_AF43 0x98 #endif #ifndef IPTOS_DSCP_EF #define IPTOS_DSCP_EF 0xb8 #endif |
Added jni/libressl/include/compat/readpassphrase.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | /* $OpenBSD: readpassphrase.h,v 1.5 2003/06/17 21:56:23 millert Exp $ */ /* * Copyright (c) 2000, 2002 Todd C. Miller <Todd.Miller@courtesan.com> * * 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. * * Sponsored in part by the Defense Advanced Research Projects * Agency (DARPA) and Air Force Research Laboratory, Air Force * Materiel Command, USAF, under agreement number F39502-99-1-0512. */ #ifdef HAVE_READPASSPHRASE_H #include_next <readpassphrase.h> #else #ifndef _READPASSPHRASE_H_ #define _READPASSPHRASE_H_ #define RPP_ECHO_OFF 0x00 /* Turn off echo (default). */ #define RPP_ECHO_ON 0x01 /* Leave echo on. */ #define RPP_REQUIRE_TTY 0x02 /* Fail if there is no tty. */ #define RPP_FORCELOWER 0x04 /* Force input to lower case. */ #define RPP_FORCEUPPER 0x08 /* Force input to upper case. */ #define RPP_SEVENBIT 0x10 /* Strip the high bit from input. */ #define RPP_STDIN 0x20 /* Read from stdin, not /dev/tty */ char * readpassphrase(const char *, char *, size_t, int); #endif /* !_READPASSPHRASE_H_ */ #endif |
Added jni/libressl/include/compat/resolv.h.
> > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | /* * Public domain * resolv.h compatibility shim */ #ifndef LIBCRYPTOCOMPAT_RESOLV_H #define LIBCRYPTOCOMPAT_RESOLV_H #ifdef _MSC_VER #if _MSC_VER >= 1900 #include <../ucrt/resolv.h> #else #include <../include/resolv.h> #endif #else #include_next <resolv.h> #endif #ifndef HAVE_B64_NTOP int b64_ntop(unsigned char const *, size_t, char *, size_t); int b64_pton(char const *, unsigned char *, size_t); #endif #endif |
Changes to jni/libressl/include/compat/stdio.h.
︙ | ︙ | |||
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | int asprintf(char **str, const char *fmt, ...); #endif #ifdef _WIN32 void posix_perror(const char *s); FILE * posix_fopen(const char *path, const char *mode); int posix_rename(const char *oldpath, const char *newpath); #ifndef NO_REDEF_POSIX_FUNCTIONS #define perror(errnum) posix_perror(errnum) #define fopen(path, mode) posix_fopen(path, mode) #define rename(oldpath, newpath) posix_rename(oldpath, newpath) #endif #ifdef _MSC_VER #define snprintf _snprintf #endif | > > | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | int asprintf(char **str, const char *fmt, ...); #endif #ifdef _WIN32 void posix_perror(const char *s); FILE * posix_fopen(const char *path, const char *mode); char * posix_fgets(char *s, int size, FILE *stream); int posix_rename(const char *oldpath, const char *newpath); #ifndef NO_REDEF_POSIX_FUNCTIONS #define perror(errnum) posix_perror(errnum) #define fopen(path, mode) posix_fopen(path, mode) #define fgets(s, size, stream) posix_fgets(s, size, stream) #define rename(oldpath, newpath) posix_rename(oldpath, newpath) #endif #ifdef _MSC_VER #define snprintf _snprintf #endif |
︙ | ︙ |
Changes to jni/libressl/include/compat/stdlib.h.
︙ | ︙ | |||
18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <sys/types.h> #include <stdint.h> #ifndef HAVE_ARC4RANDOM_BUF uint32_t arc4random(void); void arc4random_buf(void *_buf, size_t n); #endif #ifndef HAVE_REALLOCARRAY void *reallocarray(void *, size_t, size_t); #endif #ifndef HAVE_STRTONUM | > | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <sys/types.h> #include <stdint.h> #ifndef HAVE_ARC4RANDOM_BUF uint32_t arc4random(void); void arc4random_buf(void *_buf, size_t n); uint32_t arc4random_uniform(uint32_t upper_bound); #endif #ifndef HAVE_REALLOCARRAY void *reallocarray(void *, size_t, size_t); #endif #ifndef HAVE_STRTONUM |
︙ | ︙ |
Changes to jni/libressl/include/compat/string.h.
︙ | ︙ | |||
14 15 16 17 18 19 20 | #endif #else #include_next <string.h> #endif #include <sys/types.h> | | | > | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #endif #else #include_next <string.h> #endif #include <sys/types.h> #if defined(__sun) || defined(_AIX) || defined(__hpux) /* Some functions historically defined in string.h were placed in strings.h by * SUS. Use the same hack as OS X and FreeBSD use to work around on AIX, * Solaris, and HPUX. */ #include <strings.h> #endif #ifndef HAVE_STRCASECMP int strcasecmp(const char *s1, const char *s2); int strncasecmp(const char *s1, const char *s2, size_t len); |
︙ | ︙ |
Changes to jni/libressl/include/compat/time.h.
1 2 3 4 5 6 7 8 9 10 11 | /* * Public domain * sys/time.h compatibility shim */ #ifdef _MSC_VER #if _MSC_VER >= 1900 #include <../ucrt/time.h> #else #include <../include/time.h> #endif | < > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /* * Public domain * sys/time.h compatibility shim */ #ifdef _MSC_VER #if _MSC_VER >= 1900 #include <../ucrt/time.h> #else #include <../include/time.h> #endif #else #include_next <time.h> #endif #ifdef _WIN32 struct tm *__gmtime_r(const time_t * t, struct tm * tm); #define gmtime_r(tp, tm) __gmtime_r(tp, tm) #endif #ifndef HAVE_TIMEGM time_t timegm(struct tm *tm); #endif |
Changes to jni/libressl/include/compat/unistd.h.
︙ | ︙ | |||
23 24 25 26 27 28 29 30 31 32 | unsigned int sleep(unsigned int seconds); #endif #ifndef HAVE_GETENTROPY int getentropy(void *buf, size_t buflen); #endif #endif | > > > > > > > > > | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | unsigned int sleep(unsigned int seconds); #endif #ifndef HAVE_GETENTROPY int getentropy(void *buf, size_t buflen); #else /* * Solaris 11.3 adds getentropy(2), but defines the function in sys/random.h */ #if defined(__sun) #include <sys/random.h> #endif #endif #define pledge(request, paths) 0 #endif |
Changes to jni/libressl/include/compat/win32netcompat.h.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /* * Public domain * * BSD socket emulation code for Winsock2 * Brent Cook <bcook@openbsd.org> */ #ifndef LIBCRYPTOCOMPAT_WIN32NETCOMPAT_H #define LIBCRYPTOCOMPAT_WIN32NETCOMPAT_H #ifdef _WIN32 #include <ws2tcpip.h> #define SHUT_RDWR SD_BOTH #define SHUT_RD SD_RECEIVE #define SHUT_WR SD_SEND | > > > > > > > | < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | /* * Public domain * * BSD socket emulation code for Winsock2 * Brent Cook <bcook@openbsd.org> */ #ifndef LIBCRYPTOCOMPAT_WIN32NETCOMPAT_H #define LIBCRYPTOCOMPAT_WIN32NETCOMPAT_H #ifdef _WIN32 #include <ws2tcpip.h> #include <errno.h> #include <unistd.h> #ifndef SHUT_RDWR #define SHUT_RDWR SD_BOTH #endif #ifndef SHUT_RD #define SHUT_RD SD_RECEIVE #endif #ifndef SHUT_WR #define SHUT_WR SD_SEND #endif int posix_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); int posix_close(int fd); ssize_t posix_read(int fd, void *buf, size_t count); ssize_t posix_write(int fd, const void *buf, size_t count); |
︙ | ︙ |
Changes to jni/libressl/include/openssl/Makefile.am.
︙ | ︙ | |||
21 22 23 24 25 26 27 | opensslinclude_HEADERS += conf_api.h opensslinclude_HEADERS += crypto.h opensslinclude_HEADERS += des.h opensslinclude_HEADERS += dh.h opensslinclude_HEADERS += dsa.h opensslinclude_HEADERS += dso.h opensslinclude_HEADERS += dtls1.h | < | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | opensslinclude_HEADERS += conf_api.h opensslinclude_HEADERS += crypto.h opensslinclude_HEADERS += des.h opensslinclude_HEADERS += dh.h opensslinclude_HEADERS += dsa.h opensslinclude_HEADERS += dso.h opensslinclude_HEADERS += dtls1.h opensslinclude_HEADERS += ec.h opensslinclude_HEADERS += ecdh.h opensslinclude_HEADERS += ecdsa.h opensslinclude_HEADERS += engine.h opensslinclude_HEADERS += err.h opensslinclude_HEADERS += evp.h opensslinclude_HEADERS += gost.h |
︙ | ︙ |
Changes to jni/libressl/include/openssl/Makefile.in.
︙ | ︙ | |||
299 300 301 302 303 304 305 | top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat -DLIBRESSL_INTERNAL opensslincludedir = $(includedir)/openssl opensslinclude_HEADERS = aes.h asn1.h asn1_mac.h asn1t.h bio.h \ blowfish.h bn.h buffer.h camellia.h cast.h chacha.h cmac.h \ cms.h comp.h conf.h conf_api.h crypto.h des.h dh.h dsa.h dso.h \ | | | | | | | | 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 | top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat -DLIBRESSL_INTERNAL opensslincludedir = $(includedir)/openssl opensslinclude_HEADERS = aes.h asn1.h asn1_mac.h asn1t.h bio.h \ blowfish.h bn.h buffer.h camellia.h cast.h chacha.h cmac.h \ cms.h comp.h conf.h conf_api.h crypto.h des.h dh.h dsa.h dso.h \ dtls1.h ec.h ecdh.h ecdsa.h engine.h err.h evp.h gost.h hmac.h \ idea.h krb5_asn.h lhash.h md4.h md5.h modes.h obj_mac.h \ objects.h ocsp.h opensslconf.h opensslfeatures.h opensslv.h \ ossl_typ.h pem.h pem2.h pkcs12.h pkcs7.h poly1305.h rand.h \ rc2.h rc4.h ripemd.h rsa.h safestack.h sha.h srtp.h ssl.h \ ssl2.h ssl23.h ssl3.h stack.h tls1.h ts.h txt_db.h ui.h \ ui_compat.h whrlpool.h x509.h x509_vfy.h x509v3.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ |
︙ | ︙ |
Changes to jni/libressl/include/openssl/asn1.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: asn1.h,v 1.33 2015/10/08 02:42:58 beck Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
531 532 533 534 535 536 537 538 539 540 541 542 543 544 | /* This is used to contain a list of bit names */ typedef struct BIT_STRING_BITNAME_st { int bitnum; const char *lname; const char *sname; } BIT_STRING_BITNAME; #define M_ASN1_STRING_length(x) ((x)->length) #define M_ASN1_STRING_length_set(x, n) ((x)->length = (n)) #define M_ASN1_STRING_type(x) ((x)->type) #define M_ASN1_STRING_data(x) ((x)->data) /* Macros for string operations */ | > | 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 | /* This is used to contain a list of bit names */ typedef struct BIT_STRING_BITNAME_st { int bitnum; const char *lname; const char *sname; } BIT_STRING_BITNAME; #ifndef LIBRESSL_INTERNAL #define M_ASN1_STRING_length(x) ((x)->length) #define M_ASN1_STRING_length_set(x, n) ((x)->length = (n)) #define M_ASN1_STRING_type(x) ((x)->type) #define M_ASN1_STRING_data(x) ((x)->data) /* Macros for string operations */ |
︙ | ︙ | |||
576 577 578 579 580 581 582 | (const ASN1_STRING *)a,(const ASN1_STRING *)b) #define M_ASN1_OCTET_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) #define M_ASN1_OCTET_STRING_print(a,b) ASN1_STRING_print(a,(ASN1_STRING *)b) #define M_i2d_ASN1_OCTET_STRING(a,pp) \ i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_OCTET_STRING,\ V_ASN1_UNIVERSAL) | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 577 578 579 580 581 582 583 584 585 586 587 588 589 590 | (const ASN1_STRING *)a,(const ASN1_STRING *)b) #define M_ASN1_OCTET_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) #define M_ASN1_OCTET_STRING_print(a,b) ASN1_STRING_print(a,(ASN1_STRING *)b) #define M_i2d_ASN1_OCTET_STRING(a,pp) \ i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_OCTET_STRING,\ V_ASN1_UNIVERSAL) #define M_ASN1_PRINTABLE_new() ASN1_STRING_type_new(V_ASN1_T61STRING) #define M_ASN1_PRINTABLE_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_i2d_ASN1_PRINTABLE(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ pp,a->type,V_ASN1_UNIVERSAL) #define M_d2i_ASN1_PRINTABLE(a,pp,l) \ d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ B_ASN1_PRINTABLE) |
︙ | ︙ | |||
729 730 731 732 733 734 735 736 737 738 739 740 741 742 | #define M_i2d_ASN1_UTF8STRING(a,pp) \ i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UTF8STRING,\ V_ASN1_UNIVERSAL) #define M_d2i_ASN1_UTF8STRING(a,pp,l) \ (ASN1_UTF8STRING *)d2i_ASN1_type_bytes\ ((ASN1_STRING **)a,pp,l,B_ASN1_UTF8STRING) /* for the is_set parameter to i2d_ASN1_SET */ #define IS_SEQUENCE 0 #define IS_SET 1 DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) int ASN1_TYPE_get(ASN1_TYPE *a); | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 | #define M_i2d_ASN1_UTF8STRING(a,pp) \ i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UTF8STRING,\ V_ASN1_UNIVERSAL) #define M_d2i_ASN1_UTF8STRING(a,pp,l) \ (ASN1_UTF8STRING *)d2i_ASN1_type_bytes\ ((ASN1_STRING **)a,pp,l,B_ASN1_UTF8STRING) #endif #define B_ASN1_TIME \ B_ASN1_UTCTIME | \ B_ASN1_GENERALIZEDTIME #define B_ASN1_PRINTABLE \ B_ASN1_NUMERICSTRING| \ B_ASN1_PRINTABLESTRING| \ B_ASN1_T61STRING| \ B_ASN1_IA5STRING| \ B_ASN1_BIT_STRING| \ B_ASN1_UNIVERSALSTRING|\ B_ASN1_BMPSTRING|\ B_ASN1_UTF8STRING|\ B_ASN1_SEQUENCE|\ B_ASN1_UNKNOWN #define B_ASN1_DIRECTORYSTRING \ B_ASN1_PRINTABLESTRING| \ B_ASN1_TELETEXSTRING|\ B_ASN1_BMPSTRING|\ B_ASN1_UNIVERSALSTRING|\ B_ASN1_UTF8STRING #define B_ASN1_DISPLAYTEXT \ B_ASN1_IA5STRING| \ B_ASN1_VISIBLESTRING| \ B_ASN1_BMPSTRING|\ B_ASN1_UTF8STRING /* for the is_set parameter to i2d_ASN1_SET */ #define IS_SEQUENCE 0 #define IS_SET 1 DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) int ASN1_TYPE_get(ASN1_TYPE *a); |
︙ | ︙ | |||
805 806 807 808 809 810 811 812 | DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) int ASN1_UTCTIME_check(ASN1_UTCTIME *a); ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, int offset_day, long offset_sec); int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); | > | | 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 | DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) int ASN1_UTCTIME_check(ASN1_UTCTIME *a); ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, int offset_day, long offset_sec); int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); #ifndef LIBRESSL_INTERNAL int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); #endif int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *a); ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, time_t t); ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, time_t t, int offset_day, long offset_sec); int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); |
︙ | ︙ | |||
905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 | int *pclass, long omax); int ASN1_check_infinite_end(unsigned char **p, long len); int ASN1_const_check_infinite_end(const unsigned char **p, long len); void ASN1_put_object(unsigned char **pp, int constructed, int length, int tag, int xclass); int ASN1_put_eoc(unsigned char **pp); int ASN1_object_size(int constructed, int length, int tag); /* Used to implement other functions */ void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); #define ASN1_dup_of(type,i2d,d2i,x) \ ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ CHECKED_D2I_OF(type, d2i), \ CHECKED_PTR_OF(type, x))) #define ASN1_dup_of_const(type,i2d,d2i,x) \ ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ CHECKED_D2I_OF(type, d2i), \ CHECKED_PTR_OF(const type, x))) | > > > > < < > > | 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 | int *pclass, long omax); int ASN1_check_infinite_end(unsigned char **p, long len); int ASN1_const_check_infinite_end(const unsigned char **p, long len); void ASN1_put_object(unsigned char **pp, int constructed, int length, int tag, int xclass); int ASN1_put_eoc(unsigned char **pp); int ASN1_object_size(int constructed, int length, int tag); void *ASN1_item_dup(const ASN1_ITEM *it, void *x); #ifndef LIBRESSL_INTERNAL /* Used to implement other functions */ void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); #define ASN1_dup_of(type,i2d,d2i,x) \ ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ CHECKED_D2I_OF(type, d2i), \ CHECKED_PTR_OF(type, x))) #define ASN1_dup_of_const(type,i2d,d2i,x) \ ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ CHECKED_D2I_OF(type, d2i), \ CHECKED_PTR_OF(const type, x))) /* ASN1 alloc/free macros for when a type is only used internally */ #define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) #define M_ASN1_free_of(x, type) \ ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) #endif void *ASN1_d2i_fp(void *(*xnew)(void), d2i_of_void *d2i, FILE *in, void **x); #define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ CHECKED_D2I_OF(type, d2i), \ in, \ |
︙ | ︙ |
Changes to jni/libressl/include/openssl/bn.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bn.h,v 1.30 2016/03/04 16:06:38 doug Exp $ */ /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
128 129 130 131 132 133 134 135 136 137 138 139 140 141 | #include <stdio.h> #include <stdlib.h> #include <openssl/opensslconf.h> #include <openssl/ossl_typ.h> #include <openssl/crypto.h> #ifdef __cplusplus extern "C" { #endif /* These preprocessor symbols control various aspects of the bignum headers and * library code. They're not defined by any "normal" configuration, as they are | > | 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | #include <stdio.h> #include <stdlib.h> #include <openssl/opensslconf.h> #include <openssl/ossl_typ.h> #include <openssl/crypto.h> #include <openssl/bio.h> #ifdef __cplusplus extern "C" { #endif /* These preprocessor symbols control various aspects of the bignum headers and * library code. They're not defined by any "normal" configuration, as they are |
︙ | ︙ | |||
429 430 431 432 433 434 435 | const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx); int BN_mask_bits(BIGNUM *a, int n); int BN_print_fp(FILE *fp, const BIGNUM *a); | < < < < | 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 | const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx); int BN_mask_bits(BIGNUM *a, int n); int BN_print_fp(FILE *fp, const BIGNUM *a); int BN_print(BIO *fp, const BIGNUM *a); int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx); int BN_rshift(BIGNUM *r, const BIGNUM *a, int n); int BN_rshift1(BIGNUM *r, const BIGNUM *a); void BN_clear(BIGNUM *a); BIGNUM *BN_dup(const BIGNUM *a); int BN_ucmp(const BIGNUM *a, const BIGNUM *b); int BN_set_bit(BIGNUM *a, int n); |
︙ | ︙ | |||
618 619 620 621 622 623 624 | const BIGNUM *BN_get0_nist_prime_224(void); const BIGNUM *BN_get0_nist_prime_256(void); const BIGNUM *BN_get0_nist_prime_384(void); const BIGNUM *BN_get0_nist_prime_521(void); /* library internal functions */ | < < > > | 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 | const BIGNUM *BN_get0_nist_prime_224(void); const BIGNUM *BN_get0_nist_prime_256(void); const BIGNUM *BN_get0_nist_prime_384(void); const BIGNUM *BN_get0_nist_prime_521(void); /* library internal functions */ #define bn_wexpand(a,words) (((words) <= (a)->dmax)?(a):bn_expand2((a),(words))) BIGNUM *bn_expand2(BIGNUM *a, int words); BIGNUM *bn_expand(BIGNUM *a, int bits); #ifndef OPENSSL_NO_DEPRECATED BIGNUM *bn_dup_expand(const BIGNUM *a, int words); /* unused */ #endif /* Bignum consistency macros * There is one "API" macro, bn_fix_top(), for stripping leading zeroes from * bignum data after direct manipulations on the data. There is also an |
︙ | ︙ | |||
767 768 769 770 771 772 773 774 775 776 777 778 779 780 | #define BN_F_BN_CTX_NEW 106 #define BN_F_BN_CTX_START 129 #define BN_F_BN_DIV 107 #define BN_F_BN_DIV_NO_BRANCH 138 #define BN_F_BN_DIV_RECP 130 #define BN_F_BN_EXP 123 #define BN_F_BN_EXPAND2 108 #define BN_F_BN_EXPAND_INTERNAL 120 #define BN_F_BN_GF2M_MOD 131 #define BN_F_BN_GF2M_MOD_EXP 132 #define BN_F_BN_GF2M_MOD_MUL 133 #define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 #define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 #define BN_F_BN_GF2M_MOD_SQR 136 | > | 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 | #define BN_F_BN_CTX_NEW 106 #define BN_F_BN_CTX_START 129 #define BN_F_BN_DIV 107 #define BN_F_BN_DIV_NO_BRANCH 138 #define BN_F_BN_DIV_RECP 130 #define BN_F_BN_EXP 123 #define BN_F_BN_EXPAND2 108 #define BN_F_BN_GENERATE_PRIME_EX 140 #define BN_F_BN_EXPAND_INTERNAL 120 #define BN_F_BN_GF2M_MOD 131 #define BN_F_BN_GF2M_MOD_EXP 132 #define BN_F_BN_GF2M_MOD_MUL 133 #define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 #define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 #define BN_F_BN_GF2M_MOD_SQR 136 |
︙ | ︙ | |||
796 797 798 799 800 801 802 803 804 805 806 807 808 809 | #define BN_F_BN_RAND_RANGE 122 #define BN_F_BN_USUB 115 /* Reason codes. */ #define BN_R_ARG2_LT_ARG3 100 #define BN_R_BAD_RECIPROCAL 101 #define BN_R_BIGNUM_TOO_LONG 114 #define BN_R_CALLED_WITH_EVEN_MODULUS 102 #define BN_R_DIV_BY_ZERO 103 #define BN_R_ENCODING_ERROR 104 #define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 #define BN_R_INPUT_NOT_REDUCED 110 #define BN_R_INVALID_LENGTH 106 #define BN_R_INVALID_RANGE 115 | > | 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 | #define BN_F_BN_RAND_RANGE 122 #define BN_F_BN_USUB 115 /* Reason codes. */ #define BN_R_ARG2_LT_ARG3 100 #define BN_R_BAD_RECIPROCAL 101 #define BN_R_BIGNUM_TOO_LONG 114 #define BN_R_BITS_TOO_SMALL 117 #define BN_R_CALLED_WITH_EVEN_MODULUS 102 #define BN_R_DIV_BY_ZERO 103 #define BN_R_ENCODING_ERROR 104 #define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 #define BN_R_INPUT_NOT_REDUCED 110 #define BN_R_INVALID_LENGTH 106 #define BN_R_INVALID_RANGE 115 |
︙ | ︙ |
Changes to jni/libressl/include/openssl/chacha.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: chacha.h,v 1.6 2014/07/25 14:04:51 jsing Exp $ */ /* * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> * * 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. * |
︙ | ︙ | |||
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include <openssl/opensslconf.h> #if defined(OPENSSL_NO_CHACHA) #error ChaCha is disabled. #endif #include <stddef.h> #ifdef __cplusplus extern "C" { #endif typedef struct { unsigned int input[16]; unsigned char ks[64]; unsigned char unused; } ChaCha_ctx; void ChaCha_set_key(ChaCha_ctx *ctx, const unsigned char *key, unsigned int keybits); void ChaCha_set_iv(ChaCha_ctx *ctx, const unsigned char *iv, const unsigned char *counter); void ChaCha(ChaCha_ctx *ctx, unsigned char *out, const unsigned char *in, size_t len); void CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t len, | > | | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #include <openssl/opensslconf.h> #if defined(OPENSSL_NO_CHACHA) #error ChaCha is disabled. #endif #include <stddef.h> #include <stdint.h> #ifdef __cplusplus extern "C" { #endif typedef struct { unsigned int input[16]; unsigned char ks[64]; unsigned char unused; } ChaCha_ctx; void ChaCha_set_key(ChaCha_ctx *ctx, const unsigned char *key, unsigned int keybits); void ChaCha_set_iv(ChaCha_ctx *ctx, const unsigned char *iv, const unsigned char *counter); void ChaCha(ChaCha_ctx *ctx, unsigned char *out, const unsigned char *in, size_t len); void CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t len, const unsigned char key[32], const unsigned char iv[8], uint64_t counter); #ifdef __cplusplus } #endif #endif /* HEADER_CHACHA_H */ |
Changes to jni/libressl/include/openssl/crypto.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: crypto.h,v 1.39 2015/09/13 16:56:11 miod Exp $ */ /* ==================================================================== * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * |
︙ | ︙ | |||
110 111 112 113 114 115 116 117 118 119 120 121 122 123 | */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * ECDH support in OpenSSL originally developed by * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. */ #include <stdio.h> #include <stdlib.h> #ifndef HEADER_CRYPTO_H #define HEADER_CRYPTO_H #include <openssl/opensslconf.h> | > | 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * ECDH support in OpenSSL originally developed by * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. */ #include <stdint.h> #include <stdio.h> #include <stdlib.h> #ifndef HEADER_CRYPTO_H #define HEADER_CRYPTO_H #include <openssl/opensslconf.h> |
︙ | ︙ | |||
294 295 296 297 298 299 300 | #define CRYPTO_EX_INDEX_COMP 14 #define CRYPTO_EX_INDEX_STORE 15 /* Dynamically assigned indexes start from this value (don't use directly, use * via CRYPTO_ex_data_new_class). */ #define CRYPTO_EX_INDEX_USER 100 | < < < < | | < < < < < < < < < < < | 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 | #define CRYPTO_EX_INDEX_COMP 14 #define CRYPTO_EX_INDEX_STORE 15 /* Dynamically assigned indexes start from this value (don't use directly, use * via CRYPTO_ex_data_new_class). */ #define CRYPTO_EX_INDEX_USER 100 #define CRYPTO_malloc_init() (0) #define CRYPTO_malloc_debug_init() (0) #if defined CRYPTO_MDEBUG_ALL || defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD # ifndef CRYPTO_MDEBUG /* avoid duplicate #define */ # define CRYPTO_MDEBUG # endif #endif int CRYPTO_mem_ctrl(int mode); int CRYPTO_is_mem_check_on(void); /* for applications */ #define MemCheck_start() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) #define MemCheck_stop() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF) |
︙ | ︙ | |||
449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 | void *CRYPTO_malloc_locked(int num, const char *file, int line); void CRYPTO_free_locked(void *ptr); void *CRYPTO_malloc(int num, const char *file, int line); char *CRYPTO_strdup(const char *str, const char *file, int line); void CRYPTO_free(void *ptr); void *CRYPTO_realloc(void *addr, int num, const char *file, int line); #endif void *CRYPTO_realloc_clean(void *addr, int old_num, int num, const char *file, int line); void *CRYPTO_remalloc(void *addr, int num, const char *file, int line); void OPENSSL_cleanse(void *ptr, size_t len); void CRYPTO_set_mem_debug_options(long bits); long CRYPTO_get_mem_debug_options(void); #define CRYPTO_push_info(info) \ CRYPTO_push_info_(info, __FILE__, __LINE__); int CRYPTO_push_info_(const char *info, const char *file, int line); | > > > | 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 | void *CRYPTO_malloc_locked(int num, const char *file, int line); void CRYPTO_free_locked(void *ptr); void *CRYPTO_malloc(int num, const char *file, int line); char *CRYPTO_strdup(const char *str, const char *file, int line); void CRYPTO_free(void *ptr); void *CRYPTO_realloc(void *addr, int num, const char *file, int line); #endif void *CRYPTO_realloc_clean(void *addr, int old_num, int num, const char *file, int line); void *CRYPTO_remalloc(void *addr, int num, const char *file, int line); #ifndef LIBRESSL_INTERNAL void OPENSSL_cleanse(void *ptr, size_t len); #endif void CRYPTO_set_mem_debug_options(long bits); long CRYPTO_get_mem_debug_options(void); #define CRYPTO_push_info(info) \ CRYPTO_push_info_(info, __FILE__, __LINE__); int CRYPTO_push_info_(const char *info, const char *file, int line); |
︙ | ︙ | |||
502 503 504 505 506 507 508 | typedef void *CRYPTO_MEM_LEAK_CB(unsigned long, const char *, int, int, void *); void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb); /* die if we have to */ void OpenSSLDie(const char *file, int line, const char *assertion); #define OPENSSL_assert(e) (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1)) | | | | 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 | typedef void *CRYPTO_MEM_LEAK_CB(unsigned long, const char *, int, int, void *); void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb); /* die if we have to */ void OpenSSLDie(const char *file, int line, const char *assertion); #define OPENSSL_assert(e) (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1)) uint64_t OPENSSL_cpu_caps(void); int OPENSSL_isservice(void); void OPENSSL_init(void); #ifndef LIBRESSL_INTERNAL /* CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. It * takes an amount of time dependent on |len|, but independent of the contents |
︙ | ︙ |
Changes to jni/libressl/include/openssl/dh.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: dh.h,v 1.16 2014/06/12 15:49:28 deraadt Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
74 75 76 77 78 79 80 | #endif #ifndef OPENSSL_DH_MAX_MODULUS_BITS # define OPENSSL_DH_MAX_MODULUS_BITS 10000 #endif #define DH_FLAG_CACHE_MONT_P 0x01 | < < < < < < < | 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #endif #ifndef OPENSSL_DH_MAX_MODULUS_BITS # define OPENSSL_DH_MAX_MODULUS_BITS 10000 #endif #define DH_FLAG_CACHE_MONT_P 0x01 /* If this flag is set the DH method is FIPS compliant and can be used * in FIPS mode. This is set in the validated module method. If an * application sets this flag in its own methods it is its reposibility * to ensure the result is compliant. */ |
︙ | ︙ |
Changes to jni/libressl/include/openssl/dsa.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: dsa.h,v 1.20 2016/06/21 04:16:53 bcook Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
85 86 87 88 89 90 91 | #endif #ifndef OPENSSL_DSA_MAX_MODULUS_BITS # define OPENSSL_DSA_MAX_MODULUS_BITS 10000 #endif #define DSA_FLAG_CACHE_MONT_P 0x01 | < < < < < < < | 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | #endif #ifndef OPENSSL_DSA_MAX_MODULUS_BITS # define OPENSSL_DSA_MAX_MODULUS_BITS 10000 #endif #define DSA_FLAG_CACHE_MONT_P 0x01 /* If this flag is set the DSA method is FIPS compliant and can be used * in FIPS mode. This is set in the validated module method. If an * application sets this flag in its own methods it is its reposibility * to ensure the result is compliant. */ |
︙ | ︙ | |||
217 218 219 220 221 222 223 | int DSA_verify(int type,const unsigned char *dgst,int dgst_len, const unsigned char *sigbuf, int siglen, DSA *dsa); int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int DSA_set_ex_data(DSA *d, int idx, void *arg); void *DSA_get_ex_data(DSA *d, int idx); | | > > > | > > > | > > < < < | 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 | int DSA_verify(int type,const unsigned char *dgst,int dgst_len, const unsigned char *sigbuf, int siglen, DSA *dsa); int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int DSA_set_ex_data(DSA *d, int idx, void *arg); void *DSA_get_ex_data(DSA *d, int idx); DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); extern const ASN1_ITEM DSAPublicKey_it; DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); extern const ASN1_ITEM DSAPrivateKey_it; DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); int i2d_DSAparams(const DSA *a,unsigned char **pp); extern const ASN1_ITEM DSAparams_it; /* Deprecated version */ #ifndef OPENSSL_NO_DEPRECATED DSA * DSA_generate_parameters(int bits, unsigned char *seed,int seed_len, int *counter_ret, unsigned long *h_ret,void (*callback)(int, int, void *),void *cb_arg); #endif /* !defined(OPENSSL_NO_DEPRECATED) */ /* New version */ int DSA_generate_parameters_ex(DSA *dsa, int bits, const unsigned char *seed,int seed_len, int *counter_ret, unsigned long *h_ret, BN_GENCB *cb); int DSA_generate_key(DSA *a); #ifndef OPENSSL_NO_BIO int DSAparams_print(BIO *bp, const DSA *x); int DSA_print(BIO *bp, const DSA *x, int off); #endif int DSAparams_print_fp(FILE *fp, const DSA *x); int DSA_print_fp(FILE *bp, const DSA *x, int off); |
︙ | ︙ |
Changes to jni/libressl/include/openssl/dso.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: dso.h,v 1.11 2015/02/07 13:19:15 doug Exp $ */ /* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL * project 2000. */ /* ==================================================================== * Copyright (c) 2000 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without |
︙ | ︙ | |||
282 283 284 285 286 287 288 | DSO_METHOD *DSO_METHOD_dlfcn(void); /* This function writes null-terminated pathname of DSO module * containing 'addr' into 'sz' large caller-provided 'path' and * returns the number of characters [including trailing zero] * written to it. If 'sz' is 0 or negative, 'path' is ignored and * required amount of charachers [including trailing zero] to | | | 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 | DSO_METHOD *DSO_METHOD_dlfcn(void); /* This function writes null-terminated pathname of DSO module * containing 'addr' into 'sz' large caller-provided 'path' and * returns the number of characters [including trailing zero] * written to it. If 'sz' is 0 or negative, 'path' is ignored and * required amount of charachers [including trailing zero] to * accommodate pathname is returned. If 'addr' is NULL, then * pathname of cryptolib itself is returned. Negative or zero * return value denotes error. */ int DSO_pathbyaddr(void *addr, char *path, int sz); /* This function should be used with caution! It looks up symbols in * *all* loaded modules and if module gets unloaded by somebody else |
︙ | ︙ |
Changes to jni/libressl/include/openssl/dtls1.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: dtls1.h,v 1.17 2015/02/09 10:53:28 jsing Exp $ */ /* * DTLS implementation written by Nagendra Modadugu * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. */ /* ==================================================================== * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. * |
︙ | ︙ | |||
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_DTLS1_H #define HEADER_DTLS1_H #include <sys/time.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/buffer.h> #ifdef __cplusplus extern "C" { #endif #define DTLS1_VERSION 0xFEFF | > > > > < | 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_DTLS1_H #define HEADER_DTLS1_H #if defined(_WIN32) #include <winsock2.h> #else #include <sys/time.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/buffer.h> #ifdef __cplusplus extern "C" { #endif #define DTLS1_VERSION 0xFEFF /* lengths of messages */ #define DTLS1_COOKIE_LENGTH 256 #define DTLS1_RT_HEADER_LENGTH 13 #define DTLS1_HM_HEADER_LENGTH 12 |
︙ | ︙ |
Deleted jni/libressl/include/openssl/e_os2.h.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/include/openssl/ec.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ec.h,v 1.10 2015/06/20 13:26:08 jsing Exp $ */ /* * Originally written by Bodo Moeller for the OpenSSL project. */ /** * \file crypto/ec/ec.h Include file for the OpenSSL EC functions * \author Originally written by Bodo Moeller for the OpenSSL project */ |
︙ | ︙ | |||
941 942 943 944 945 946 947 | * \param fp file descriptor to which the information is printed * \param key EC_KEY object * \param off line offset * \return 1 on success and 0 if an error occurred */ int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); | | < | 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 | * \param fp file descriptor to which the information is printed * \param key EC_KEY object * \param off line offset * \return 1 on success and 0 if an error occurred */ int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); EC_KEY *ECParameters_dup(EC_KEY *key); #ifndef __cplusplus #if defined(__SUNPRO_C) # if __SUNPRO_C >= 0x520 # pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) # endif # endif |
︙ | ︙ |
Changes to jni/libressl/include/openssl/ecdh.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ecdh.h,v 1.4 2015/09/13 11:49:44 jsing Exp $ */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * * The Elliptic Curve Public-Key Crypto Library (ECC Code) included * herein is developed by SUN MICROSYSTEMS, INC., and is contributed * to the OpenSSL project. * |
︙ | ︙ | |||
17 18 19 20 21 22 23 | * Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright | | | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | * Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this |
︙ | ︙ | |||
83 84 85 86 87 88 89 | #ifdef __cplusplus extern "C" { #endif const ECDH_METHOD *ECDH_OpenSSL(void); | | | > | > | | | > | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | #ifdef __cplusplus extern "C" { #endif const ECDH_METHOD *ECDH_OpenSSL(void); void ECDH_set_default_method(const ECDH_METHOD *); const ECDH_METHOD *ECDH_get_default_method(void); int ECDH_set_method(EC_KEY *, const ECDH_METHOD *); int ECDH_size(const EC_KEY *ecdh); int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh, void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen)); int ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int ECDH_set_ex_data(EC_KEY *d, int idx, void *arg); void *ECDH_get_ex_data(EC_KEY *d, int idx); /* BEGIN ERROR CODES */ /* The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_ECDH_strings(void); /* Error codes for the ECDH functions. */ /* Function codes. */ #define ECDH_F_ECDH_CHECK 102 #define ECDH_F_ECDH_COMPUTE_KEY 100 #define ECDH_F_ECDH_DATA_NEW_METHOD 101 /* Reason codes. */ #define ECDH_R_KDF_FAILED 102 #define ECDH_R_KEY_TRUNCATION 104 #define ECDH_R_NON_FIPS_METHOD 103 #define ECDH_R_NO_PRIVATE_VALUE 100 #define ECDH_R_POINT_ARITHMETIC_FAILURE 101 #ifdef __cplusplus } #endif #endif |
Changes to jni/libressl/include/openssl/evp.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: evp.h,v 1.50 2016/04/28 16:06:53 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 | int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const unsigned char *key, const unsigned char *iv); int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const unsigned char *key, const unsigned char *iv); int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); | > > | > | > | > | > | | 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 | int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const unsigned char *key, const unsigned char *iv); int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); #ifndef LIBRESSL_INTERNAL int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); #endif int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const unsigned char *key, const unsigned char *iv); int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); #ifndef LIBRESSL_INTERNAL int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); #endif int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const unsigned char *key, const unsigned char *iv, int enc); int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc); int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); #ifndef LIBRESSL_INTERNAL int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); #endif int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, EVP_PKEY *pkey); int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, unsigned int siglen, EVP_PKEY *pkey); int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, |
︙ | ︙ | |||
651 652 653 654 655 656 657 | #ifndef OPENSSL_NO_MD4 const EVP_MD *EVP_md4(void); #endif #ifndef OPENSSL_NO_MD5 const EVP_MD *EVP_md5(void); #endif #ifndef OPENSSL_NO_SHA | < | 657 658 659 660 661 662 663 664 665 666 667 668 669 670 | #ifndef OPENSSL_NO_MD4 const EVP_MD *EVP_md4(void); #endif #ifndef OPENSSL_NO_MD5 const EVP_MD *EVP_md5(void); #endif #ifndef OPENSSL_NO_SHA const EVP_MD *EVP_sha1(void); const EVP_MD *EVP_dss(void); const EVP_MD *EVP_dss1(void); const EVP_MD *EVP_ecdsa(void); #endif #ifndef OPENSSL_NO_SHA256 const EVP_MD *EVP_sha224(void); |
︙ | ︙ | |||
1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 | /* EVP_aes_256_gcm is AES-256 in Galois Counter Mode. */ const EVP_AEAD *EVP_aead_aes_256_gcm(void); #endif #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) /* EVP_aead_chacha20_poly1305 is ChaCha20 with a Poly1305 authenticator. */ const EVP_AEAD *EVP_aead_chacha20_poly1305(void); #endif /* EVP_AEAD_key_length returns the length of the keys used. */ size_t EVP_AEAD_key_length(const EVP_AEAD *aead); /* EVP_AEAD_nonce_length returns the length of the per-message nonce. */ size_t EVP_AEAD_nonce_length(const EVP_AEAD *aead); | > | 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 | /* EVP_aes_256_gcm is AES-256 in Galois Counter Mode. */ const EVP_AEAD *EVP_aead_aes_256_gcm(void); #endif #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) /* EVP_aead_chacha20_poly1305 is ChaCha20 with a Poly1305 authenticator. */ const EVP_AEAD *EVP_aead_chacha20_poly1305(void); const EVP_AEAD *EVP_aead_chacha20_poly1305_old(void); #endif /* EVP_AEAD_key_length returns the length of the keys used. */ size_t EVP_AEAD_key_length(const EVP_AEAD *aead); /* EVP_AEAD_nonce_length returns the length of the per-message nonce. */ size_t EVP_AEAD_nonce_length(const EVP_AEAD *aead); |
︙ | ︙ |
Changes to jni/libressl/include/openssl/md4.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD$ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ |
Changes to jni/libressl/include/openssl/ocsp.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ocsp.h,v 1.6 2014/06/12 15:49:30 deraadt Exp $ */ /* Written by Tom Titchener <Tom_Titchener@groove.net> for the OpenSSL * project. */ /* History: This file was transfered to Richard Levitte from CertCo by Kathy Weinhold in mid-spring 2000 to be included in OpenSSL or released as a patch kit. */ |
︙ | ︙ | |||
384 385 386 387 388 389 390 | #define OCSP_BASICRESP_verify(a,r,d) \ ASN1_item_verify(ASN1_ITEM_rptr(OCSP_RESPDATA), \ a->signatureAlgorithm,a->signature,a->tbsResponseData,r) #define ASN1_BIT_STRING_digest(data,type,md,len) \ ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) | | < | | 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 | #define OCSP_BASICRESP_verify(a,r,d) \ ASN1_item_verify(ASN1_ITEM_rptr(OCSP_RESPDATA), \ a->signatureAlgorithm,a->signature,a->tbsResponseData,r) #define ASN1_BIT_STRING_digest(data,type,md,len) \ ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) #define OCSP_CERTSTATUS_dup(cs) \ ASN1_item_dup(&OCSP_CERTSTATUS_it, cs) OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, char *path, OCSP_REQUEST *req); OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, char *path, OCSP_REQUEST *req, int maxline); int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); |
︙ | ︙ |
Changes to jni/libressl/include/openssl/opensslfeatures.h.
︙ | ︙ | |||
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # define OPENSSL_NO_MDC2 # define OPENSSL_NO_PSK # define OPENSSL_NO_RC5 # define OPENSSL_NO_RFC3779 # define OPENSSL_NO_RSAX # define OPENSSL_NO_SCTP # define OPENSSL_NO_SEED # define OPENSSL_NO_SRP # define OPENSSL_NO_SSL2 # define OPENSSL_NO_STORE # define OPENSSL_NO_BUF_FREELISTS # define OPENSSL_NO_HEARTBEATS # define OPENSSL_NO_DYNAMIC_ENGINE # define OPENSSL_THREADS | > > > | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # define OPENSSL_NO_MDC2 # define OPENSSL_NO_PSK # define OPENSSL_NO_RC5 # define OPENSSL_NO_RFC3779 # define OPENSSL_NO_RSAX # define OPENSSL_NO_SCTP # define OPENSSL_NO_SEED # define OPENSSL_NO_SHA0 # define OPENSSL_NO_SRP # define OPENSSL_NO_SSL2 # define OPENSSL_NO_SSL3 # define OPENSSL_NO_SSL3_METHOD # define OPENSSL_NO_STORE # define OPENSSL_NO_BUF_FREELISTS # define OPENSSL_NO_HEARTBEATS # define OPENSSL_NO_DYNAMIC_ENGINE # define OPENSSL_THREADS |
Changes to jni/libressl/include/openssl/opensslv.h.
|
| | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /* $OpenBSD: opensslv.h,v 1.36 2016/06/30 11:10:29 bcook Exp $ */ #ifndef HEADER_OPENSSLV_H #define HEADER_OPENSSLV_H /* These will change with each release of LibreSSL-portable */ #define LIBRESSL_VERSION_NUMBER 0x2040300fL #define LIBRESSL_VERSION_TEXT "LibreSSL 2.4.3" /* These will never change */ #define OPENSSL_VERSION_NUMBER 0x20000000L #define OPENSSL_VERSION_TEXT LIBRESSL_VERSION_TEXT #define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT #define SHLIB_VERSION_HISTORY "" |
︙ | ︙ |
Changes to jni/libressl/include/openssl/ossl_typ.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ossl_typ.h,v 1.12 2014/06/12 15:49:27 deraadt Exp $ */ /* ==================================================================== * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * |
︙ | ︙ | |||
54 55 56 57 58 59 60 | */ #ifndef HEADER_OPENSSL_TYPES_H #define HEADER_OPENSSL_TYPES_H #include <openssl/opensslconf.h> | < < < < < < < < < < < < < < < < < < < < | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | */ #ifndef HEADER_OPENSSL_TYPES_H #define HEADER_OPENSSL_TYPES_H #include <openssl/opensslconf.h> typedef struct asn1_string_st ASN1_INTEGER; typedef struct asn1_string_st ASN1_ENUMERATED; typedef struct asn1_string_st ASN1_BIT_STRING; typedef struct asn1_string_st ASN1_OCTET_STRING; typedef struct asn1_string_st ASN1_PRINTABLESTRING; typedef struct asn1_string_st ASN1_T61STRING; typedef struct asn1_string_st ASN1_IA5STRING; typedef struct asn1_string_st ASN1_GENERALSTRING; typedef struct asn1_string_st ASN1_UNIVERSALSTRING; typedef struct asn1_string_st ASN1_BMPSTRING; typedef struct asn1_string_st ASN1_UTCTIME; typedef struct asn1_string_st ASN1_TIME; typedef struct asn1_string_st ASN1_GENERALIZEDTIME; typedef struct asn1_string_st ASN1_VISIBLESTRING; typedef struct asn1_string_st ASN1_UTF8STRING; typedef struct asn1_string_st ASN1_STRING; typedef int ASN1_BOOLEAN; typedef int ASN1_NULL; typedef struct ASN1_ITEM_st ASN1_ITEM; typedef struct asn1_pctx_st ASN1_PCTX; #if defined(_WIN32) && defined(__WINCRYPT_H__) #ifndef LIBRESSL_INTERNAL #ifdef _MSC_VER |
︙ | ︙ |
Changes to jni/libressl/include/openssl/rc4.h.
|
| | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | /* $OpenBSD: rc4.h,v 1.12 2014/07/10 22:45:57 jsing Exp $ */ /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * 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 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_RC4_H |
︙ | ︙ | |||
67 68 69 70 71 72 73 | #include <stddef.h> #ifdef __cplusplus extern "C" { #endif | | < | | < | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #include <stddef.h> #ifdef __cplusplus extern "C" { #endif typedef struct rc4_key_st { RC4_INT x, y; RC4_INT data[256]; } RC4_KEY; const char *RC4_options(void); void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); void private_RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, unsigned char *outdata); #ifdef __cplusplus } #endif #endif |
Changes to jni/libressl/include/openssl/rsa.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: rsa.h,v 1.27 2015/02/14 15:10:39 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
189 190 191 192 193 194 195 | #define RSA_FLAG_SIGN_VER 0x0040 /* * The built-in RSA implementation uses blinding by default, but other engines * might not need it. */ #define RSA_FLAG_NO_BLINDING 0x0080 | < < < < < < < < < < | 189 190 191 192 193 194 195 196 197 198 199 200 201 202 | #define RSA_FLAG_SIGN_VER 0x0040 /* * The built-in RSA implementation uses blinding by default, but other engines * might not need it. */ #define RSA_FLAG_NO_BLINDING 0x0080 #define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, EVP_PKEY_CTRL_RSA_PADDING, \ pad, NULL) #define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, \ |
︙ | ︙ |
Changes to jni/libressl/include/openssl/sha.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: sha.h,v 1.20 2014/10/20 13:06:54 bcook Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
66 67 68 69 70 71 72 | #include <openssl/opensslconf.h> #ifdef __cplusplus extern "C" { #endif | | | 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #include <openssl/opensslconf.h> #ifdef __cplusplus extern "C" { #endif #if defined(OPENSSL_NO_SHA) || defined(OPENSSL_NO_SHA1) #error SHA is disabled. #endif /* * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! SHA_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
︙ | ︙ | |||
93 94 95 96 97 98 99 | { SHA_LONG h0,h1,h2,h3,h4; SHA_LONG Nl,Nh; SHA_LONG data[SHA_LBLOCK]; unsigned int num; } SHA_CTX; | < < < < < < < < < | 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | { SHA_LONG h0,h1,h2,h3,h4; SHA_LONG Nl,Nh; SHA_LONG data[SHA_LBLOCK]; unsigned int num; } SHA_CTX; #ifndef OPENSSL_NO_SHA1 int SHA1_Init(SHA_CTX *c); int SHA1_Update(SHA_CTX *c, const void *data, size_t len) __attribute__ ((__bounded__(__buffer__,2,3))); int SHA1_Final(unsigned char *md, SHA_CTX *c); unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md) __attribute__ ((__bounded__(__buffer__,1,2))); |
︙ | ︙ |
Changes to jni/libressl/include/openssl/srtp.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: srtp.h,v 1.5 2014/12/14 15:30:50 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
127 128 129 130 131 132 133 | #define SRTP_AES128_F8_SHA1_80 0x0003 #define SRTP_AES128_F8_SHA1_32 0x0004 #define SRTP_NULL_SHA1_80 0x0005 #define SRTP_NULL_SHA1_32 0x0006 int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); int SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles); | < | 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | #define SRTP_AES128_F8_SHA1_80 0x0003 #define SRTP_AES128_F8_SHA1_32 0x0004 #define SRTP_NULL_SHA1_80 0x0005 #define SRTP_NULL_SHA1_32 0x0006 int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); int SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles); STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); #ifdef __cplusplus } #endif #endif |
Changes to jni/libressl/include/openssl/ssl.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ssl.h,v 1.95 2015/10/25 15:58:57 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
298 299 300 301 302 303 304 | #define SSL_TXT_GOST89MAC "GOST89MAC" #define SSL_TXT_SHA256 "SHA256" #define SSL_TXT_SHA384 "SHA384" #define SSL_TXT_STREEBOG256 "STREEBOG256" #define SSL_TXT_STREEBOG512 "STREEBOG512" #define SSL_TXT_DTLS1 "DTLSv1" | < | 298 299 300 301 302 303 304 305 306 307 308 309 310 311 | #define SSL_TXT_GOST89MAC "GOST89MAC" #define SSL_TXT_SHA256 "SHA256" #define SSL_TXT_SHA384 "SHA384" #define SSL_TXT_STREEBOG256 "STREEBOG256" #define SSL_TXT_STREEBOG512 "STREEBOG512" #define SSL_TXT_DTLS1 "DTLSv1" #define SSL_TXT_SSLV2 "SSLv2" #define SSL_TXT_SSLV3 "SSLv3" #define SSL_TXT_TLSV1 "TLSv1" #define SSL_TXT_TLSV1_1 "TLSv1.1" #define SSL_TXT_TLSV1_2 "TLSv1.2" #define SSL_TXT_EXP "EXP" |
︙ | ︙ | |||
531 532 533 534 535 536 537 | /* DTLS options */ #define SSL_OP_NO_QUERY_MTU 0x00001000L /* Turn on Cookie Exchange (on relevant for servers) */ #define SSL_OP_COOKIE_EXCHANGE 0x00002000L /* Don't use RFC4507 ticket extension */ #define SSL_OP_NO_TICKET 0x00004000L | < < < < < < > > > > > < | 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 | /* DTLS options */ #define SSL_OP_NO_QUERY_MTU 0x00001000L /* Turn on Cookie Exchange (on relevant for servers) */ #define SSL_OP_COOKIE_EXCHANGE 0x00002000L /* Don't use RFC4507 ticket extension */ #define SSL_OP_NO_TICKET 0x00004000L /* As server, disallow session resumption on renegotiation */ #define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000L /* If set, always create a new key when using tmp_ecdh parameters */ #define SSL_OP_SINGLE_ECDH_USE 0x00080000L /* If set, always create a new key when using tmp_dh parameters */ #define SSL_OP_SINGLE_DH_USE 0x00100000L /* Set on servers to choose the cipher according to the server's * preferences */ #define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000L /* If set, a server will allow a client to issue a SSLv3.0 version number * as latest version supported in the premaster secret, even when TLSv1.0 * (version 3.1) was announced in the client hello. Normally this is * forbidden to prevent version rollback attacks. */ #define SSL_OP_TLS_ROLLBACK_BUG 0x00800000L #define SSL_OP_NO_TLSv1 0x04000000L #define SSL_OP_NO_TLSv1_2 0x08000000L #define SSL_OP_NO_TLSv1_1 0x10000000L /* Make server add server-hello extension from early version of * cryptopro draft, when GOST ciphersuite is negotiated. * Required for interoperability with CryptoPro CSP 3.x */ #define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000L /* SSL_OP_ALL: various bug workarounds that should be rather harmless. */ #define SSL_OP_ALL \ (SSL_OP_LEGACY_SERVER_CONNECT | \ SSL_OP_TLSEXT_PADDING | \ SSL_OP_CRYPTOPRO_TLSEXT_BUG) /* Obsolete flags kept for compatibility. No sane code should use them. */ #define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x0 #define SSL_OP_CISCO_ANYCONNECT 0x0 #define SSL_OP_EPHEMERAL_RSA 0x0 #define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 #define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 #define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 #define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 #define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 #define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0 #define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 #define SSL_OP_NO_COMPRESSION 0x0 #define SSL_OP_NO_SSLv2 0x0 #define SSL_OP_NO_SSLv3 0x0 #define SSL_OP_PKCS1_CHECK_1 0x0 #define SSL_OP_PKCS1_CHECK_2 0x0 #define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x0 #define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 #define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 #define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 #define SSL_OP_TLS_D5_BUG 0x0 /* Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success * when just a single record has been written): */ #define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001L /* Make it possible to retry SSL_write() with changed buffer location * (buffer contents must stay the same!); this is not the default to avoid * the misconception that non-blocking SSL_write() behaves like |
︙ | ︙ | |||
1672 1673 1674 1675 1676 1677 1678 | int SSL_get_error(const SSL *s, int ret_code); const char *SSL_get_version(const SSL *s); /* This sets the 'default' SSL version that SSL_new() will create */ int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); | < < < < | 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 | int SSL_get_error(const SSL *s, int ret_code); const char *SSL_get_version(const SSL *s); /* This sets the 'default' SSL version that SSL_new() will create */ int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); const SSL_METHOD *SSLv23_method(void); /* SSLv3 or TLSv1.* */ const SSL_METHOD *SSLv23_server_method(void); /* SSLv3 or TLSv1.* */ const SSL_METHOD *SSLv23_client_method(void); /* SSLv3 or TLSv1.* */ const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ const SSL_METHOD *TLSv1_server_method(void); /* TLSv1.0 */ const SSL_METHOD *TLSv1_client_method(void); /* TLSv1.0 */ |
︙ | ︙ |
Changes to jni/libressl/include/openssl/tls1.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: tls1.h,v 1.27 2016/03/07 19:33:26 mmcc Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
176 177 178 179 180 181 182 | #define TLS1_get_client_version(s) \ ((s->client_version >> 8) == TLS1_VERSION_MAJOR ? s->client_version : 0) /* * TLS Alert codes. * | | | 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | #define TLS1_get_client_version(s) \ ((s->client_version >> 8) == TLS1_VERSION_MAJOR ? s->client_version : 0) /* * TLS Alert codes. * * https://www.iana.org/assignments/tls-parameters/#tls-parameters-6 */ #define TLS1_AD_DECRYPTION_FAILED 21 #define TLS1_AD_RECORD_OVERFLOW 22 #define TLS1_AD_UNKNOWN_CA 48 /* fatal */ #define TLS1_AD_ACCESS_DENIED 49 /* fatal */ #define TLS1_AD_DECODE_ERROR 50 /* fatal */ |
︙ | ︙ | |||
205 206 207 208 209 210 211 | #define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 /* Code 115 from RFC 4279. */ #define TLS1_AD_UNKNOWN_PSK_IDENTITY 115 /* fatal */ /* * TLS ExtensionType values. * | | | 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 | #define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 /* Code 115 from RFC 4279. */ #define TLS1_AD_UNKNOWN_PSK_IDENTITY 115 /* fatal */ /* * TLS ExtensionType values. * * https://www.iana.org/assignments/tls-extensiontype-values/ */ /* ExtensionType values from RFC 3546, RFC 4366 and RFC 6066. */ #define TLSEXT_TYPE_server_name 0 #define TLSEXT_TYPE_max_fragment_length 1 #define TLSEXT_TYPE_client_certificate_url 2 #define TLSEXT_TYPE_trusted_ca_keys 3 |
︙ | ︙ | |||
247 248 249 250 251 252 253 | #define TLSEXT_TYPE_heartbeat 15 /* ExtensionType value from RFC 7301. */ #define TLSEXT_TYPE_application_layer_protocol_negotiation 16 /* ExtensionType value for TLS padding extension. * (TEMPORARY - registered 2014-03-12, expires 2015-03-12) | | | 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 | #define TLSEXT_TYPE_heartbeat 15 /* ExtensionType value from RFC 7301. */ #define TLSEXT_TYPE_application_layer_protocol_negotiation 16 /* ExtensionType value for TLS padding extension. * (TEMPORARY - registered 2014-03-12, expires 2015-03-12) * https://tools.ietf.org/html/draft-agl-tls-padding-03 */ #define TLSEXT_TYPE_padding 21 /* ExtensionType value from RFC 4507. */ #define TLSEXT_TYPE_session_ticket 35 /* Temporary extension type */ |
︙ | ︙ | |||
533 534 535 536 537 538 539 | #define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E #define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F #define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030 #define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 #define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 /* ChaCha20-Poly1305 based ciphersuites. */ | | | | > > > | 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 | #define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E #define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F #define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030 #define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 #define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 /* ChaCha20-Poly1305 based ciphersuites. */ #define TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305_OLD 0x0300CC13 #define TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305_OLD 0x0300CC14 #define TLS1_CK_DHE_RSA_CHACHA20_POLY1305_OLD 0x0300CC15 #define TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305 0x0300CCA8 #define TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305 0x0300CCA9 #define TLS1_CK_DHE_RSA_CHACHA20_POLY1305 0x0300CCAA #define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5 "EXP1024-RC4-MD5" #define TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 "EXP1024-RC2-CBC-MD5" #define TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DES-CBC-SHA" #define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DHE-DSS-DES-CBC-SHA" #define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA "EXP1024-RC4-SHA" #define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA "EXP1024-DHE-DSS-RC4-SHA" |
︙ | ︙ | |||
697 698 699 700 701 702 703 704 705 706 707 708 709 710 | #define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 "ECDH-ECDSA-AES256-GCM-SHA384" #define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "ECDHE-RSA-AES128-GCM-SHA256" #define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "ECDHE-RSA-AES256-GCM-SHA384" #define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" #define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" /* ChaCha20-Poly1305 based ciphersuites. */ #define TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305 "ECDHE-RSA-CHACHA20-POLY1305" #define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "ECDHE-ECDSA-CHACHA20-POLY1305" #define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305 "DHE-RSA-CHACHA20-POLY1305" #define TLS_CT_RSA_SIGN 1 #define TLS_CT_DSS_SIGN 2 #define TLS_CT_RSA_FIXED_DH 3 | > > > | 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 | #define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 "ECDH-ECDSA-AES256-GCM-SHA384" #define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "ECDHE-RSA-AES128-GCM-SHA256" #define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "ECDHE-RSA-AES256-GCM-SHA384" #define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" #define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" /* ChaCha20-Poly1305 based ciphersuites. */ #define TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305_OLD "ECDHE-RSA-CHACHA20-POLY1305-OLD" #define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_OLD "ECDHE-ECDSA-CHACHA20-POLY1305-OLD" #define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305_OLD "DHE-RSA-CHACHA20-POLY1305-OLD" #define TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305 "ECDHE-RSA-CHACHA20-POLY1305" #define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "ECDHE-ECDSA-CHACHA20-POLY1305" #define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305 "DHE-RSA-CHACHA20-POLY1305" #define TLS_CT_RSA_SIGN 1 #define TLS_CT_DSS_SIGN 2 #define TLS_CT_RSA_FIXED_DH 3 |
︙ | ︙ |
Changes to jni/libressl/include/openssl/x509_vfy.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: x509_vfy.h,v 1.15 2015/02/07 13:19:15 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
379 380 381 382 383 384 385 | #define X509_V_FLAG_NOTIFY_POLICY 0x800 /* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ #define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 /* Delta CRL support */ #define X509_V_FLAG_USE_DELTAS 0x2000 /* Check selfsigned CA signature */ #define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 | | > | 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 | #define X509_V_FLAG_NOTIFY_POLICY 0x800 /* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ #define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 /* Delta CRL support */ #define X509_V_FLAG_USE_DELTAS 0x2000 /* Check selfsigned CA signature */ #define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 /* Do not check certificate or CRL validity against current time. */ #define X509_V_FLAG_NO_CHECK_TIME 0x200000 #define X509_VP_FLAG_DEFAULT 0x1 #define X509_VP_FLAG_OVERWRITE 0x2 #define X509_VP_FLAG_RESET_FLAGS 0x4 #define X509_VP_FLAG_LOCKED 0x8 #define X509_VP_FLAG_ONCE 0x10 |
︙ | ︙ |
Changes to jni/libressl/include/tls.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: tls.h,v 1.28 2016/04/28 17:05:59 jsing Exp $ */ /* * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> * * 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. * |
︙ | ︙ | |||
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #ifndef HEADER_TLS_H #define HEADER_TLS_H #ifdef __cplusplus extern "C" { #endif #include <stddef.h> #include <stdint.h> #define TLS_API 20141031 #define TLS_PROTOCOL_TLSv1_0 (1 << 1) #define TLS_PROTOCOL_TLSv1_1 (1 << 2) #define TLS_PROTOCOL_TLSv1_2 (1 << 3) #define TLS_PROTOCOL_TLSv1 \ (TLS_PROTOCOL_TLSv1_0|TLS_PROTOCOL_TLSv1_1|TLS_PROTOCOL_TLSv1_2) #define TLS_PROTOCOLS_ALL TLS_PROTOCOL_TLSv1 #define TLS_PROTOCOLS_DEFAULT TLS_PROTOCOL_TLSv1_2 | > > | | > > > > > | | > > > > > > > > | | < > > > > > > > > > > > > | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | #ifndef HEADER_TLS_H #define HEADER_TLS_H #ifdef __cplusplus extern "C" { #endif #include <sys/types.h> #include <stddef.h> #include <stdint.h> #define TLS_API 20141031 #define TLS_PROTOCOL_TLSv1_0 (1 << 1) #define TLS_PROTOCOL_TLSv1_1 (1 << 2) #define TLS_PROTOCOL_TLSv1_2 (1 << 3) #define TLS_PROTOCOL_TLSv1 \ (TLS_PROTOCOL_TLSv1_0|TLS_PROTOCOL_TLSv1_1|TLS_PROTOCOL_TLSv1_2) #define TLS_PROTOCOLS_ALL TLS_PROTOCOL_TLSv1 #define TLS_PROTOCOLS_DEFAULT TLS_PROTOCOL_TLSv1_2 #define TLS_WANT_POLLIN -2 #define TLS_WANT_POLLOUT -3 struct tls; struct tls_config; int tls_init(void); const char *tls_config_error(struct tls_config *_config); const char *tls_error(struct tls *_ctx); struct tls_config *tls_config_new(void); void tls_config_free(struct tls_config *_config); int tls_config_set_ca_file(struct tls_config *_config, const char *_ca_file); int tls_config_set_ca_path(struct tls_config *_config, const char *_ca_path); int tls_config_set_ca_mem(struct tls_config *_config, const uint8_t *_ca, size_t _len); int tls_config_set_cert_file(struct tls_config *_config, const char *_cert_file); int tls_config_set_cert_mem(struct tls_config *_config, const uint8_t *_cert, size_t _len); int tls_config_set_ciphers(struct tls_config *_config, const char *_ciphers); int tls_config_set_dheparams(struct tls_config *_config, const char *_params); int tls_config_set_ecdhecurve(struct tls_config *_config, const char *_name); int tls_config_set_key_file(struct tls_config *_config, const char *_key_file); int tls_config_set_key_mem(struct tls_config *_config, const uint8_t *_key, size_t _len); int tls_config_set_keypair_file(struct tls_config *_config, const char *_cert_file, const char *_key_file); int tls_config_set_keypair_mem(struct tls_config *_config, const uint8_t *_cert, size_t _cert_len, const uint8_t *_key, size_t _key_len); void tls_config_set_protocols(struct tls_config *_config, uint32_t _protocols); void tls_config_set_verify_depth(struct tls_config *_config, int _verify_depth); void tls_config_prefer_ciphers_client(struct tls_config *_config); void tls_config_prefer_ciphers_server(struct tls_config *_config); void tls_config_insecure_noverifycert(struct tls_config *_config); void tls_config_insecure_noverifyname(struct tls_config *_config); void tls_config_insecure_noverifytime(struct tls_config *_config); void tls_config_verify(struct tls_config *_config); void tls_config_verify_client(struct tls_config *_config); void tls_config_verify_client_optional(struct tls_config *_config); void tls_config_clear_keys(struct tls_config *_config); int tls_config_parse_protocols(uint32_t *_protocols, const char *_protostr); struct tls *tls_client(void); struct tls *tls_server(void); int tls_configure(struct tls *_ctx, struct tls_config *_config); void tls_reset(struct tls *_ctx); void tls_free(struct tls *_ctx); int tls_accept_fds(struct tls *_ctx, struct tls **_cctx, int _fd_read, int _fd_write); int tls_accept_socket(struct tls *_ctx, struct tls **_cctx, int _socket); int tls_connect(struct tls *_ctx, const char *_host, const char *_port); int tls_connect_fds(struct tls *_ctx, int _fd_read, int _fd_write, const char *_servername); int tls_connect_servername(struct tls *_ctx, const char *_host, const char *_port, const char *_servername); int tls_connect_socket(struct tls *_ctx, int _s, const char *_servername); int tls_handshake(struct tls *_ctx); ssize_t tls_read(struct tls *_ctx, void *_buf, size_t _buflen); ssize_t tls_write(struct tls *_ctx, const void *_buf, size_t _buflen); int tls_close(struct tls *_ctx); int tls_peer_cert_provided(struct tls *_ctx); int tls_peer_cert_contains_name(struct tls *_ctx, const char *_name); const char *tls_peer_cert_hash(struct tls *_ctx); const char *tls_peer_cert_issuer(struct tls *_ctx); const char *tls_peer_cert_subject(struct tls *_ctx); time_t tls_peer_cert_notbefore(struct tls *_ctx); time_t tls_peer_cert_notafter(struct tls *_ctx); const char *tls_conn_version(struct tls *_ctx); const char *tls_conn_cipher(struct tls *_ctx); uint8_t *tls_load_file(const char *_file, size_t *_len, char *_password); #ifdef __cplusplus } #endif #endif /* HEADER_TLS_H */ |
Changes to jni/libressl/libcrypto.pc.in.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #libcrypto pkg-config source file prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: LibreSSL-libssl Description: Secure Sockets Layer and cryptography libraries Version: @VERSION@ Requires: Conflicts: Libs: -L${libdir} -lcrypto | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #libcrypto pkg-config source file prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: LibreSSL-libssl Description: Secure Sockets Layer and cryptography libraries Version: @VERSION@ Requires: Conflicts: Libs: -L${libdir} -lcrypto Libs.private: @LIBS@ @PLATFORM_LDADD@ Cflags: -I${includedir} |
Changes to jni/libressl/libssl.pc.in.
︙ | ︙ | |||
8 9 10 11 12 13 14 | Name: LibreSSL-libssl Description: Secure Sockets Layer and cryptography libraries Version: @VERSION@ Requires: Requires.private: libcrypto Conflicts: Libs: -L${libdir} -lssl | | | 8 9 10 11 12 13 14 15 16 | Name: LibreSSL-libssl Description: Secure Sockets Layer and cryptography libraries Version: @VERSION@ Requires: Requires.private: libcrypto Conflicts: Libs: -L${libdir} -lssl Libs.private: @LIBS@ -lcrypto @PLATFORM_LDADD@ Cflags: -I${includedir} |
Changes to jni/libressl/libtls.pc.in.
︙ | ︙ | |||
8 9 10 11 12 13 14 | Name: LibreSSL-libtls Description: Secure communications using the TLS socket protocol. Version: @VERSION@ Requires: Requires.private: libcrypto libssl Conflicts: Libs: -L${libdir} -ltls | | | 8 9 10 11 12 13 14 15 16 | Name: LibreSSL-libtls Description: Secure communications using the TLS socket protocol. Version: @VERSION@ Requires: Requires.private: libcrypto libssl Conflicts: Libs: -L${libdir} -ltls Libs.private: @LIBS@ -lcrypto -lssl @PLATFORM_LDADD@ Cflags: -I${includedir} |
Changes to jni/libressl/m4/check-libc.m4.
1 2 | AC_DEFUN([CHECK_LIBC_COMPAT], [ # Check for general libc functions | > > | > | > > > > > > > > | > > > > > > > > > > > > > > > > > > | > | > > | < < > | > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | AC_DEFUN([CHECK_LIBC_COMPAT], [ # Check for libc headers AC_CHECK_HEADERS([err.h readpassphrase.h]) # Check for general libc functions AC_CHECK_FUNCS([asprintf inet_pton memmem readpassphrase reallocarray]) AC_CHECK_FUNCS([strlcat strlcpy strndup strnlen strsep strtonum]) AC_CHECK_FUNCS([timegm _mkgmtime]) AM_CONDITIONAL([HAVE_ASPRINTF], [test "x$ac_cv_func_asprintf" = xyes]) AM_CONDITIONAL([HAVE_INET_PTON], [test "x$ac_cv_func_inet_pton" = xyes]) AM_CONDITIONAL([HAVE_MEMMEM], [test "x$ac_cv_func_memmem" = xyes]) AM_CONDITIONAL([HAVE_READPASSPHRASE], [test "x$ac_cv_func_readpassphrase" = xyes]) AM_CONDITIONAL([HAVE_REALLOCARRAY], [test "x$ac_cv_func_reallocarray" = xyes]) AM_CONDITIONAL([HAVE_STRLCAT], [test "x$ac_cv_func_strlcat" = xyes]) AM_CONDITIONAL([HAVE_STRLCPY], [test "x$ac_cv_func_strlcpy" = xyes]) AM_CONDITIONAL([HAVE_STRNDUP], [test "x$ac_cv_func_strndup" = xyes]) AM_CONDITIONAL([HAVE_STRNLEN], [test "x$ac_cv_func_strnlen" = xyes]) AM_CONDITIONAL([HAVE_STRSEP], [test "x$ac_cv_func_strsep" = xyes]) AM_CONDITIONAL([HAVE_STRTONUM], [test "x$ac_cv_func_strtonum" = xyes]) AM_CONDITIONAL([HAVE_TIMEGM], [test "x$ac_cv_func_timegm" = xyes]) ]) AC_DEFUN([CHECK_SYSCALL_COMPAT], [ AC_CHECK_FUNCS([accept4 pledge poll]) AM_CONDITIONAL([HAVE_ACCEPT4], [test "x$ac_cv_func_accept4" = xyes]) AM_CONDITIONAL([HAVE_PLEDGE], [test "x$ac_cv_func_pledge" = xyes]) AM_CONDITIONAL([HAVE_POLL], [test "x$ac_cv_func_poll" = xyes]) ]) AC_DEFUN([CHECK_B64_NTOP], [ AC_SEARCH_LIBS([b64_ntop],[resolv]) AC_SEARCH_LIBS([__b64_ntop],[resolv]) AC_CACHE_CHECK([for b64_ntop], ac_cv_have_b64_ntop_arg, [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <resolv.h> ]], [[ b64_ntop(NULL, 0, NULL, 0); ]])], [ ac_cv_have_b64_ntop_arg="yes" ], [ ac_cv_have_b64_ntop_arg="no" ]) ]) AM_CONDITIONAL([HAVE_B64_NTOP], [test "x$ac_cv_func_b64_ntop_arg" = xyes]) ]) AC_DEFUN([CHECK_CRYPTO_COMPAT], [ # Check crypto-related libc functions and syscalls AC_CHECK_FUNCS([arc4random arc4random_buf arc4random_uniform]) AC_CHECK_FUNCS([explicit_bzero getauxval getentropy]) AC_CHECK_FUNCS([timingsafe_bcmp timingsafe_memcmp]) AM_CONDITIONAL([HAVE_ARC4RANDOM], [test "x$ac_cv_func_arc4random" = xyes]) AM_CONDITIONAL([HAVE_ARC4RANDOM_BUF], [test "x$ac_cv_func_arc4random_buf" = xyes]) AM_CONDITIONAL([HAVE_ARC4RANDOM_UNIFORM], [test "x$ac_cv_func_arc4random_uniform" = xyes]) AM_CONDITIONAL([HAVE_EXPLICIT_BZERO], [test "x$ac_cv_func_explicit_bzero" = xyes]) AM_CONDITIONAL([HAVE_GETENTROPY], [test "x$ac_cv_func_getentropy" = xyes]) AM_CONDITIONAL([HAVE_TIMINGSAFE_BCMP], [test "x$ac_cv_func_timingsafe_bcmp" = xyes]) AM_CONDITIONAL([HAVE_TIMINGSAFE_MEMCMP], [test "x$ac_cv_func_timingsafe_memcmp" = xyes]) # Override arc4random_buf implementations with known issues AM_CONDITIONAL([HAVE_ARC4RANDOM_BUF], [test "x$USE_BUILTIN_ARC4RANDOM" != xyes \ -a "x$ac_cv_func_arc4random_buf" = xyes]) # Check for getentropy fallback dependencies AC_CHECK_FUNC([getauxval]) AC_SEARCH_LIBS([clock_gettime],[rt posix4]) AC_CHECK_FUNC([clock_gettime]) AC_SEARCH_LIBS([dl_iterate_phdr],[dl]) AC_CHECK_FUNC([dl_iterate_phdr]) ]) AC_DEFUN([CHECK_VA_COPY], [ AC_CACHE_CHECK([whether va_copy exists], ac_cv_have_va_copy, [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <stdarg.h> va_list x,y; |
︙ | ︙ |
Changes to jni/libressl/m4/check-os-options.m4.
|
| < > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | AC_DEFUN([CHECK_OS_OPTIONS], [ CFLAGS="$CFLAGS -Wall -std=gnu99 -fno-strict-aliasing" BUILD_NC=yes case $host_os in *aix*) HOST_OS=aix if test "`echo $CC | cut -d ' ' -f 1`" != "gcc" ; then CFLAGS="-qnoansialias $USER_CFLAGS" fi AC_SUBST([PLATFORM_LDADD], ['-lperfstat -lpthread']) ;; *cygwin*) HOST_OS=cygwin ;; *darwin*) HOST_OS=darwin HOST_ABI=macosx # weak seed on failure to open /dev/random, based on latest # public source: # http://www.opensource.apple.com/source/Libc/Libc-997.90.3/gen/FreeBSD/arc4random.c USE_BUILTIN_ARC4RANDOM=yes ;; *freebsd*) HOST_OS=freebsd HOST_ABI=elf # fork detection missing, weak seed on failure # https://svnweb.freebsd.org/base/head/lib/libc/gen/arc4random.c?revision=268642&view=markup USE_BUILTIN_ARC4RANDOM=yes AC_SUBST([PROG_LDADD], ['-lthr']) ;; *hpux*) HOST_OS=hpux; if test "`echo $CC | cut -d ' ' -f 1`" = "gcc" ; then CFLAGS="$CFLAGS -mlp64" else CFLAGS="-g -O2 +DD64 +Otype_safety=off $USER_CFLAGS" fi CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=600 -D__STRICT_ALIGNMENT" AC_SUBST([PLATFORM_LDADD], ['-lpthread']) ;; *linux*) HOST_OS=linux HOST_ABI=elf CPPFLAGS="$CPPFLAGS -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE" ;; *netbsd*) HOST_OS=netbsd HOST_ABI=elf AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/param.h> #if __NetBSD_Version__ < 700000001 undefined #endif ]], [[]])], [ USE_BUILTIN_ARC4RANDOM=no ], [ USE_BUILTIN_ARC4RANDOM=yes ] ) CPPFLAGS="$CPPFLAGS -D_OPENBSD_SOURCE" ;; *openbsd* | *bitrig*) HOST_OS=openbsd HOST_ABI=elf AC_DEFINE([HAVE_ATTRIBUTE__BOUNDED__], [1], [OpenBSD gcc has bounded]) ;; *mingw*) HOST_OS=win BUILD_NC=no CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_POSIX -D_POSIX_SOURCE -D__USE_MINGW_ANSI_STDIO" CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_POSIX_THREAD_SAFE_FUNCTIONS" CPPFLAGS="$CPPFLAGS -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0501" CPPFLAGS="$CPPFLAGS -DOPENSSL_NO_SPEED" CFLAGS="$CFLAGS -static-libgcc" LDFLAGS="$LDFLAGS -static-libgcc" AC_SUBST([PLATFORM_LDADD], ['-lws2_32']) ;; *solaris*) HOST_OS=solaris HOST_ABI=elf CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__ -D_XOPEN_SOURCE=600 -DBSD_COMP" AC_SUBST([PLATFORM_LDADD], ['-lnsl -lsocket']) ;; *) ;; esac AC_ARG_ENABLE([nc], AS_HELP_STRING([--enable-nc], [Enable installing TLS-enabled nc(1)])) AM_CONDITIONAL([ENABLE_NC], [test "x$enable_nc" = xyes]) AM_CONDITIONAL([BUILD_NC], [test x$BUILD_NC = xyes -o "x$enable_nc" = xyes]) AM_CONDITIONAL([HOST_AIX], [test x$HOST_OS = xaix]) AM_CONDITIONAL([HOST_CYGWIN], [test x$HOST_OS = xcygwin]) AM_CONDITIONAL([HOST_DARWIN], [test x$HOST_OS = xdarwin]) AM_CONDITIONAL([HOST_FREEBSD], [test x$HOST_OS = xfreebsd]) AM_CONDITIONAL([HOST_HPUX], [test x$HOST_OS = xhpux]) AM_CONDITIONAL([HOST_LINUX], [test x$HOST_OS = xlinux]) AM_CONDITIONAL([HOST_NETBSD], [test x$HOST_OS = xnetbsd]) AM_CONDITIONAL([HOST_OPENBSD], [test x$HOST_OS = xopenbsd]) AM_CONDITIONAL([HOST_SOLARIS], [test x$HOST_OS = xsolaris]) AM_CONDITIONAL([HOST_WIN], [test x$HOST_OS = xwin]) ]) |
Changes to jni/libressl/man/ASN1_OBJECT_new.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: September 9 2015 $ .Dt ASN1_OBJECT_NEW 3 .Os .Sh NAME .Nm ASN1_OBJECT_new , .Nm ASN1_OBJECT_free .Nd ASN1 object allocation functions .Sh SYNOPSIS |
︙ | ︙ | |||
43 44 45 46 47 48 49 | If the allocation fails, .Fn ASN1_OBJECT_new returns .Dv NULL and sets an error code that can be obtained by .Xr ERR_get_error 3 . Otherwise it returns a pointer to the newly allocated structure. | < < < | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | If the allocation fails, .Fn ASN1_OBJECT_new returns .Dv NULL and sets an error code that can be obtained by .Xr ERR_get_error 3 . Otherwise it returns a pointer to the newly allocated structure. .Sh SEE ALSO .Xr d2i_ASN1_OBJECT 3 , .Xr ERR_get_error 3 , .Xr OBJ_nid2obj 3 .Sh HISTORY .Fn ASN1_OBJECT_new and .Fn ASN1_OBJECT_free are available in all versions of SSLeay and OpenSSL. |
Changes to jni/libressl/man/ASN1_STRING_length.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: July 17 2014 $ .Dt ASN1_STRING_LENGTH 3 .Os .Sh NAME .Nm ASN1_STRING_cmp , .Nm ASN1_STRING_data , .Nm ASN1_STRING_dup , .Nm ASN1_STRING_length , |
︙ | ︙ |
Changes to jni/libressl/man/ASN1_STRING_new.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: July 17 2014 $ .Dt ASN1_STRING_NEW 3 .Os .Sh NAME .Nm ASN1_STRING_new , .Nm ASN1_STRING_type_new , .Nm ASN1_STRING_free .Nd ASN1_STRING allocation functions |
︙ | ︙ |
Changes to jni/libressl/man/ASN1_STRING_print_ex.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: July 17 2014 $ .Dt ASN1_STRING_PRINT_EX 3 .Os .Sh NAME .Nm ASN1_STRING_print_ex , .Nm ASN1_STRING_print_ex_fp , .Nm ASN1_STRING_print .Nd ASN1_STRING output routines |
︙ | ︙ |
Changes to jni/libressl/man/ASN1_generate_nconf.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: September 9 2015 $ .Dt ASN1_GENERATE_NCONF 3 .Os .Sh NAME .Nm ASN1_generate_nconf , .Nm ASN1_generate_v3 .Nd ASN1 generation functions .Sh SYNOPSIS |
︙ | ︙ | |||
247 248 249 250 251 252 253 | .Dl EXPLICIT:0A,IA5STRING:Hello World .Pp A BITSTRING with bits 1 and 5 set and all others zero: .Pp .Dl FORMAT:BITLIST,BITSTRING:1,5 .Pp A more complex example using a config file to produce a | | | 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 | .Dl EXPLICIT:0A,IA5STRING:Hello World .Pp A BITSTRING with bits 1 and 5 set and all others zero: .Pp .Dl FORMAT:BITLIST,BITSTRING:1,5 .Pp A more complex example using a config file to produce a SEQUENCE consisting of a BOOL an OID and a UTF8String: .Bd -literal -offset indent asn1 = SEQUENCE:seq_section [seq_section] field1 = BOOLEAN:TRUE field2 = OID:commonName |
︙ | ︙ |
Changes to jni/libressl/man/BF_set_key.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: July 17 2014 $ .Dt BF_SET_KEY 3 .Os .Sh NAME .Nm BF_set_key , .Nm BF_encrypt , .Nm BF_decrypt , .Nm BF_ecb_encrypt , |
︙ | ︙ |
Changes to jni/libressl/man/BIO.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: July 17 2014 $ .Dt BIO 3 .Os .Sh NAME .Nm BIO .Nd I/O abstraction .Sh SYNOPSIS .In openssl/bio.h |
︙ | ︙ |
Changes to jni/libressl/man/BIO_ctrl.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: July 17 2014 $ .Dt BIO_CTRL 3 .Os .Sh NAME .Nm BIO_ctrl , .Nm BIO_callback_ctrl , .Nm BIO_ptr_ctrl , .Nm BIO_int_ctrl , |
︙ | ︙ |
Changes to jni/libressl/man/BIO_f_base64.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: July 17 2014 $ .Dt BIO_F_BASE64 3 .Os .Sh NAME .Nm BIO_f_base64 .Nd base64 BIO filter .Sh SYNOPSIS .In openssl/bio.h |
︙ | ︙ |
Changes to jni/libressl/man/BIO_f_buffer.3.
|
| > > | | > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | .\" $OpenBSD$ .\" .Dd $Mdocdate: September 9 2015 $ .Dt BIO_F_BUFFER 3 .Os .Sh NAME .Nm BIO_f_buffer , .Nm BIO_get_buffer_num_lines , .Nm BIO_set_read_buffer_size , .Nm BIO_set_write_buffer_size , .Nm BIO_set_buffer_size , .Nm BIO_set_buffer_read_data .Nd buffering BIO .Sh SYNOPSIS .In openssl/bio.h .Ft BIO_METHOD * .Fo BIO_f_buffer .Fa void .Fc |
︙ | ︙ |
Changes to jni/libressl/man/BIO_f_cipher.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: July 17 2014 $ .Dt BIO_F_CIPHER 3 .Os .Sh NAME .Nm BIO_f_cipher , .Nm BIO_set_cipher , .Nm BIO_get_cipher_status , .Nm BIO_get_cipher_ctx |
︙ | ︙ |
Changes to jni/libressl/man/BIO_f_md.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: July 17 2014 $ .Dt BIO_F_MD 3 .Os .Sh NAME .Nm BIO_f_md , .Nm BIO_set_md , .Nm BIO_get_md , .Nm BIO_get_md_ctx |
︙ | ︙ |
Changes to jni/libressl/man/BIO_f_null.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: July 17 2014 $ .Dt BIO_F_NULL 3 .Os .Sh NAME .Nm BIO_f_null .Nd null filter .Sh SYNOPSIS .In openssl/bio.h |
︙ | ︙ |
Changes to jni/libressl/man/BIO_f_ssl.3.
1 | .\" | | | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | .\" .\" $OpenBSD: BIO_f_ssl.3,v 1.3 2015/06/18 22:51:05 doug Exp $ .\" .Dd $Mdocdate: June 18 2015 $ .Dt BIO_F_SSL 3 .Os .Sh NAME .Nm BIO_f_ssl , .Nm BIO_set_ssl , .Nm BIO_get_ssl , .Nm BIO_set_ssl_mode , .Nm BIO_set_ssl_renegotiate_bytes , .Nm BIO_get_num_renegotiates , .Nm BIO_set_ssl_renegotiate_timeout , .Nm BIO_new_ssl , .Nm BIO_new_ssl_connect , .Nm BIO_new_buffer_ssl_connect , .Nm BIO_ssl_copy_session_id , .Nm BIO_ssl_shutdown , .Nm BIO_do_handshake .Nd SSL BIO .Sh SYNOPSIS .In openssl/bio.h .In openssl/ssl.h .Ft BIO_METHOD * .Fn BIO_f_ssl void .Fd #define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl) |
︙ | ︙ |
Changes to jni/libressl/man/BIO_find_type.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: July 17 2014 $ .Dt BIO_FIND_TYPE 3 .Os .Sh NAME .Nm BIO_find_type , .Nm BIO_next , .Nm BIO_method_type .Nd BIO chain traversal |
︙ | ︙ |
Changes to jni/libressl/man/BIO_new.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: July 17 2014 $ .Dt BIO_NEW 3 .Os .Sh NAME .Nm BIO_new , .Nm BIO_set , .Nm BIO_free , .Nm BIO_vfree , |
︙ | ︙ |
Changes to jni/libressl/man/BIO_new_CMS.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: October 2 2010 $ .Dt BIO_NEW_CMS 3 .Os .Sh NAME .Nm BIO_new_CMS .Nd CMS streaming filter BIO .Sh SYNOPSIS .In openssl/cms.h |
︙ | ︙ |
Changes to jni/libressl/man/BN_add_word.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: February 23 2015 $ .Dt BN_ADD_WORD 3 .Os .Sh NAME .Nm BN_add_word , .Nm BN_sub_word , .Nm BN_mul_word , .Nm BN_div_word , |
︙ | ︙ | |||
71 72 73 74 75 76 77 | and returns the remainder. .Pp .Fn BN_mod_word returns the remainder of .Fa a divided by .Fa w | | > | 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | and returns the remainder. .Pp .Fn BN_mod_word returns the remainder of .Fa a divided by .Fa w .Pq Li a%w or (BN_ULONG)-1 on error. .Pp For .Fn BN_div_word and .Fn BN_mod_word , .Fa w must not be 0. |
︙ | ︙ |
Changes to jni/libressl/man/BUF_MEM_new.3.
|
| | | 1 2 3 4 5 6 7 8 | .Dd $Mdocdate: September 22 2015 $ .Dt BUF_MEM_NEW 3 .Os .Sh NAME .Nm BUF_MEM_new , .Nm BUF_MEM_free , .Nm BUF_MEM_grow , .Nm BUF_strdup |
︙ | ︙ | |||
72 73 74 75 76 77 78 | function, .Fn BUF_strdup will accept a .Dv NULL argument and will return .Dv NULL in that case. | | < < < | 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | function, .Fn BUF_strdup will accept a .Dv NULL argument and will return .Dv NULL in that case. Its use in new programs is discouraged. .Pp The memory allocated from .Fn BUF_strdup should be freed up using the .Xr free 3 function. .Sh RETURN VALUES .Fn BUF_MEM_new returns the buffer or .Dv NULL on error. .Pp .Fn BUF_MEM_grow returns zero on error or the new size (i.e. .Fa len Ns ). .Sh SEE ALSO .Xr bio 3 .Sh HISTORY .Fn BUF_MEM_new , .Fn BUF_MEM_free and .Fn BUF_MEM_grow are available in all versions of SSLeay and OpenSSL. .Fn BUF_strdup was added in SSLeay 0.8. |
Changes to jni/libressl/man/CMS_add0_cert.3.
|
| | > | < | | | | | | | > | < | < | > > | | < < < < < | < < < < < < < < < | | | < < < < < < < < | < < < > | | < < < < < < | < < < < < < | < < < < < < < < < | | < < < > | | | < < < < < < | | > | < | | < | | | > > | > > > > | > | > | > > > > > > > | | > | | > > > | | | | > > > | > | | > > > > > > | > | > > > | | | | | | > > > | | > > > | > | > > | | > | | < < | | > | > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_ADD0_CERT 3 .Os .Sh NAME .Nm CMS_add0_cert , .Nm CMS_add1_cert , .Nm CMS_get1_certs , .Nm CMS_add0_crl , .Nm CMS_add1_crl , .Nm CMS_get1_crls .Nd CMS certificate and CRL utility functions .Sh SYNOPSIS .In openssl/cms.h .Ft int .Fo CMS_add0_cert .Fa "CMS_ContentInfo *cms" .Fa "X509 *cert" .Fc .Ft int .Fo CMS_add1_cert .Fa "CMS_ContentInfo *cms" .Fa "X509 *cert" .Fc .Ft STACK_OF(X509) * .Fo CMS_get1_certs .Fa "CMS_ContentInfo *cms" .Fc .Ft int .Fo CMS_add0_crl .Fa "CMS_ContentInfo *cms" .Fa "X509_CRL *crl" .Fc .Ft int .Fo CMS_add1_crl .Fa "CMS_ContentInfo *cms" .Fa "X509_CRL *crl" .Fc .Ft STACK_OF(X509_CRL) * .Fo CMS_get1_crls .Fa "CMS_ContentInfo *cms" .Fc .Sh DESCRIPTION .Fn CMS_add0_cert and .Fn CMS_add1_cert add certificate .Fa cert to .Fa cms . .Fa cms must be of type signed data or enveloped data. .Pp .Fn CMS_get1_certs returns all certificates in .Fa cms . .Pp .Fn CMS_add0_crl and .Fn CMS_add1_crl add CRL .Fa crl to .Fa cms . .Fn CMS_get1_crls returns any CRLs in .Fa cms . .Sh NOTES The .Vt CMS_ContentInfo structure .Fa cms must be of type signed data or enveloped data or an error will be returned. .Pp For signed data, certificates and CRLs are added to the .Fa certificates and .Fa crls fields of the SignedData structure. For enveloped data, they are added to .Fa OriginatorInfo . .Pp As the .Sq 0 implies, .Fn CMS_add0_cert adds .Fa cert internally to .Fa cms and it must not be freed up after the call, as opposed to .Fn CMS_add1_cert where .Fa cert must be freed up. .Pp The same certificate or CRL must not be added to the same cms structure more than once. .Sh RETURN VALUES .Fn CMS_add0_cert , .Fn CMS_add1_cert , .Fn CMS_add0_crl , and .Fn CMS_add1_crl return 1 for success and 0 for failure. .Pp .Fn CMS_get1_certs and .Fn CMS_get1_crls return the STACK of certificates or CRLs or .Dv NULL if there are none or an error occurs. The only error which will occur in practice is if the .Fa cms type is invalid. .Sh SEE ALSO .Xr CMS_encrypt 3 , .Xr CMS_sign 3 , .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_add0_cert , .Fn CMS_add1_cert , .Fn CMS_get1_certs , .Fn CMS_add0_crl and .Fn CMS_get1_crls were all first added to OpenSSL 0.9.8. |
Changes to jni/libressl/man/CMS_add1_recipient_cert.3.
|
| | > | < | | | | | | | > | > | | < | < | | < < < < < < < | < < < < | | | | < > > > | < < < < > > | < | > | < < | | < < < < > | < > | | < < < | > | < | | < < | | | < < > | < < < < | | > | | < < < < < < < < | < < < | | < < > | < < | > | > > | < | | > > | | > | > > > > > > > > > > | | | | | < < | > > > > | | | < | > > > > | > | | < | | > | < | > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_ADD1_RECIPIENT_CERT 3 .Os .Sh NAME .Nm CMS_add1_recipient_cert , .Nm CMS_add0_recipient_key .Nd add recipients to a CMS enveloped data structure .Sh SYNOPSIS .In openssl/cms.h .Ft CMS_RecipientInfo * .Fo CMS_add1_recipient_cert .Fa "CMS_ContentInfo *cms" .Fa "X509 *recip" .Fa "unsigned int flags" .Fc .Ft CMS_RecipientInfo * .Fo CMS_add0_recipient_key .Fa "CMS_ContentInfo *cms" .Fa "int nid" .Fa "unsigned char *key" .Fa "size_t keylen" .Fa "unsigned char *id" .Fa "size_t idlen" .Fa "ASN1_GENERALIZEDTIME *date" .Fa "ASN1_OBJECT *otherTypeId" .Fa "ASN1_TYPE *otherType" .Fc .Sh DESCRIPTION .Fn CMS_add1_recipient_cert adds recipient .Fa recip to the .Vt CMS_ContentInfo enveloped data structure .Fa cms as a KeyTransRecipientInfo structure. .Pp .Fn CMS_add0_recipient_key adds the symmetric key .Fa key of length .Fa keylen using the wrapping algorithm .Fa nid , identifier .Fa id of length .Fa idlen and optional values .Fa date , .Fa otherTypeId , and .Fa otherType to the .Vt CMS_ContentInfo enveloped data structure .Fa cms as a KEKRecipientInfo structure. .Pp The .Vt CMS_ContentInfo structure should be obtained from an initial call to .Xr CMS_encrypt 3 with the flag .Dv CMS_PARTIAL set. .Sh NOTES The main purpose of this function is to provide finer control over a CMS enveloped data structure where the simpler .Xr CMS_encrypt 3 function defaults are not appropriate. For example if one or more KEKRecipientInfo structures need to be added. New attributes can also be added using the returned .Vt CMS_RecipientInfo structure and the CMS attribute utility functions. .Pp OpenSSL will by default identify recipient certificates using issuer name and serial number. If .Dv CMS_USE_KEYID is set, it will use the subject key identifier value instead. An error occurs if all recipient certificates do not have a subject key identifier extension. .Pp Currently only AES based key wrapping algorithms are supported for .Fa nid , specifically: .Dv NID_id_aes128_wrap , .Dv NID_id_aes192_wrap , and .Dv NID_id_aes256_wrap . If .Fa nid is set to .Dv NID_undef , then an AES wrap algorithm will be used consistent with .Fa keylen . .Sh RETURN VALUES .Fn CMS_add1_recipient_cert and .Fn CMS_add0_recipient_key return an internal pointer to the .Vt CMS_RecipientInfo structure just added or .Dv NULL if an error occurs. .Sh SEE ALSO .Xr CMS_decrypt 3 , .Xr CMS_final 3 , .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_add1_recipient_cert and .Fn CMS_add0_recipient_key were added to OpenSSL 0.9.8. |
Added jni/libressl/man/CMS_add1_signer.3.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_SIGN_ADD1_SIGNER 3 .Os .Sh NAME .Nm CMS_add1_signer , .Nm CMS_SignerInfo_sign .Nd add a signer to a CMS_ContentInfo signed data structure .Sh SYNOPSIS .In openssl/cms.h .Ft CMS_SignerInfo * .Fo CMS_add1_signer .Fa "CMS_ContentInfo *cms" .Fa "X509 *signcert" .Fa "EVP_PKEY *pkey" .Fa "const EVP_MD *md" .Fa "unsigned int flags" .Fc .Ft int .Fo CMS_SignerInfo_sign .Fa "CMS_SignerInfo *si" .Fc .Sh DESCRIPTION .Fn CMS_add1_signer adds a signer with certificate .Fa signcert and private key .Fa pkey using message digest .Fa md to the .Vt CMS_ContentInfo SignedData structure .Fa cms . .Pp The .Vt CMS_ContentInfo structure should be obtained from an initial call to .Xr CMS_sign 3 with the flag .Dv CMS_PARTIAL set or in the case or re-signing a valid .Vt CMS_ContentInfo SignedData structure. .Pp If the .Fa md parameter is .Dv NULL , then the default digest for the public key algorithm will be used. .Pp Unless the .Dv CMS_REUSE_DIGEST flag is set, the returned .Vt CMS_ContentInfo structure is not complete and must be finalized either by streaming (if applicable) or a call to .Xr CMS_final 3 . .Pp The .Fn CMS_SignerInfo_sign function will explicitly sign a .Vt CMS_SignerInfo structure, its main use is when .Dv CMS_REUSE_DIGEST and .Dv CMS_PARTIAL flags are both set. .Sh NOTES The main purpose of .Fn CMS_add1_signer is to provide finer control over a CMS signed data structure where the simpler .Xr CMS_sign 3 function defaults are not appropriate. For example if multiple signers or non default digest algorithms are needed. New attributes can also be added using the returned .Vt CMS_SignerInfo structure and the CMS attribute utility functions or the CMS signed receipt request functions. .Pp Any of the following flags (OR'ed together) can be passed in the .Fa flags parameter. .Pp If .Dv CMS_REUSE_DIGEST is set, then an attempt is made to copy the content digest value from the .Dv CMS_ContentInfo structure: to add a signer to an existing structure. An error occurs if a matching digest value cannot be found to copy. The returned .Dv CMS_ContentInfo structure will be valid and finalized when this flag is set. .Pp If .Dv CMS_PARTIAL is set in addition to .Dv CMS_REUSE_DIGEST then the .Vt CMS_SignerInfo structure will not be finalized so additional attributes can be added. In this case an explicit call to .Fn CMS_SignerInfo_sign is needed to finalize it. .Pp If .Dv CMS_NOCERTS is set, the signer's certificate will not be included in the .Vt CMS_ContentInfo structure, the signer's certificate must still be supplied in the .Fa signcert parameter though. This can reduce the size of the signature if the signers certificate can be obtained by other means: for example a previously signed message. .Pp The SignedData structure includes several CMS signedAttributes including the signing time, the CMS content type and the supported list of ciphers in an SMIMECapabilities attribute. If .Dv CMS_NOATTR is set, then no signedAttributes will be used. If .Dv CMS_NOSMIMECAP is set, then just the SMIMECapabilities are omitted. .Pp OpenSSL will by default identify signing certificates using issuer name and serial number. If .Dv CMS_USE_KEYID is set, it will use the subject key identifier value instead. An error occurs if the signing certificate does not have a subject key identifier extension. .Pp If present, the SMIMECapabilities attribute indicates support for the following algorithms in preference order: 256 bit AES, Gost R3411-94, Gost 28147-89, 192 bit AES, 128 bit AES, triple DES, 128 bit RC2, 64 bit RC2, DES and 40 bit RC2. If any of these algorithms is not available then it will not be included: for example the GOST algorithms will not be included if the GOST ENGINE is not loaded. .Pp .Fn CMS_add1_signer returns an internal pointer to the .Dv CMS_SignerInfo structure just added. This can be used to set additional attributes before it is finalized. .Sh RETURN VALUES .Fn CMS_add1_signer returns an internal pointer to the .Vt CMS_SignerInfo structure just added or .Dv NULL if an error occurs. .Sh SEE ALSO .Xr CMS_final 3 , .Xr CMS_sign 3 , .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_add1_signer was added to OpenSSL 0.9.8. |
Changes to jni/libressl/man/CMS_compress.3.
|
| | > | > | < < | | | | | | > | | < | | > | < | | | | | | | | | | < < < < < < < | | | | | | | | | | < < | > > | | | | < < | | | < < > | < < | < < < < | | < > > | > | < < < < | | < < < < < | < | | | < < < < | > > | < | < | | > | | < > | > > | < > > > < < < < < < < < < < | < < < < < < < < | | > > > | | | | | > | | > > > | > | | | | < > | > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_COMPRESS 3 .Os .Sh NAME .Nm CMS_compress .Nd create a CMS CompressedData structure .Sh SYNOPSIS .In openssl/cms.h .Ft CMS_ContentInfo * .Fo CMS_compress .Fa "BIO *in" .Fa "int comp_nid" .Fa "unsigned int flags" .Fc .Sh DESCRIPTION .Fn CMS_compress creates and returns a CMS CompressedData structure. .Fa comp_nid is the compression algorithm to use or .Dv NID_undef to use the default algorithm (zlib compression). .Fa in is the content to be compressed. .Fa flags is an optional set of flags. .Sh NOTES The only currently supported compression algorithm is zlib using the NID .Dv NID_zlib_compression . .Pp If zlib support is not compiled into OpenSSL then .Fn CMS_compress will return an error. .Pp If the .Dv CMS_TEXT flag is set, MIME headers for type .Sy text/plain are prepended to the data. .Pp Normally the supplied content is translated into MIME canonical format (as required by the S/MIME specifications); if .Dv CMS_BINARY is set, no translation occurs. This option should be used if the supplied data is in binary format; otherwise the translation will corrupt it. If .Dv CMS_BINARY is set then .Dv CMS_TEXT is ignored. .Pp If the .Dv CMS_STREAM flag is set a partial .Vt CMS_ContentInfo structure is returned suitable for streaming I/O: no data is read from the .Vt BIO .Fa in . .Pp The compressed data is included in the .Vt CMS_ContentInfo structure, unless .Dv CMS_DETACHED is set, in which case it is omitted. This is rarely used in practice and is not supported by .Xr SMIME_write_CMS 3 . .Sh NOTES If the flag .Dv CMS_STREAM is set, the returned .Vt CMS_ContentInfo structure is .Em not complete and outputting its contents via a function that does not properly finalize the .Vt CMS_ContentInfo structure will give unpredictable results. .Pp Several functions including .Xr SMIME_write_CMS 3 , .Xr i2d_CMS_bio_stream 3 , .Xr PEM_write_bio_CMS_stream 3 finalize the structure. Alternatively finalization can be performed by obtaining the streaming ASN1 .Vt BIO directly using .Xr BIO_new_CMS 3 . .Pp Additional compression parameters such as the zlib compression level cannot currently be set. .Sh RETURN VALUES .Fn CMS_compress returns either a .Vt CMS_ContentInfo structure or .Dv NULL if an error occurred. The error can be obtained from .Xr ERR_get_error 3 . .Sh SEE ALSO .Xr CMS_uncompress 3 , .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_compress was added to OpenSSL 0.9.8. The .Dv CMS_STREAM flag was first supported in OpenSSL 1.0.0. |
Changes to jni/libressl/man/CMS_decrypt.3.
|
| | > | < | | | > | | < | | | | | | | | | < < < < < < < | < > | < < < < < < > | > | < < | | > | | < | > > | | | | < < < < | > > | < | < < < < > > | < | < < < < < > | | < | > > > > | > > > | | | | | | < < < < < < < | < < < | < < | | < < < | | > | < | > | > > > > > > > | | < > > | > | < > | | | < < < < | | < < < | | < < < | | > > | > > | > > > | | | | | | > | < | > > | > | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_DECRYPT 3 .Os .Sh NAME .Nm CMS_decrypt .Nd decrypt content from a CMS envelopedData structure .Sh SYNOPSIS .In openssl/cms.h .Ft int .Fo CMS_decrypt .Fa "CMS_ContentInfo *cms" .Fa "EVP_PKEY *pkey" .Fa "X509 *cert" .Fa "BIO *dcont" .Fa "BIO *out" .Fa "unsigned int flags" .Fc .Sh DESCRIPTION .Fn CMS_decrypt extracts and decrypts the content from a CMS EnvelopedData structure. .Fa pkey is the private key of the recipient, .Fa cert is the recipient's certificate, .Fa out is a .Vt BIO to write the content to and .Fa flags is an optional set of flags. .Pp The .Fa dcont parameter is used in the rare case where the encrypted content is detached. It will normally be set to .Dv NULL . .Sh NOTES .Xr OpenSSL_add_all_algorithms 3 (or equivalent) should be called before using this function or errors about unknown algorithms will occur. .Pp Although the recipients certificate is not needed to decrypt the data it is needed to locate the appropriate (of possible several) recipients in the CMS structure. .Pp If .Fa cert is set to .Dv NULL , all possible recipients are tried. This case however is problematic. To thwart the MMA attack (Bleichenbacher's attack on PKCS #1 v1.5 RSA padding) all recipients are tried whether they succeed or not. If no recipient succeeds then a random symmetric key is used to decrypt the content: this will typically output garbage and may (but is not guaranteed to) ultimately return a padding error only. If .Fn CMS_decrypt just returned an error when all recipient encrypted keys failed to decrypt an attacker could use this in a timing attack. If the special flag .Dv CMS_DEBUG_DECRYPT is set then the above behaviour is modified and an error .Em is returned if no recipient encrypted key can be decrypted .Em without generating a random content encryption key. Applications should use this flag with .Sy extreme caution especially in automated gateways as it can leave them open to attack. .Pp It is possible to determine the correct recipient key by other means (for example looking them up in a database) and setting them in the CMS structure in advance using the CMS utility functions such as .Xr CMS_set1_pkey 3 . In this case both .Fa cert and .Fa pkey should be set to .Dv NULL . .Pp To process KEKRecipientInfo types .Xr CMS_set1_key 3 or .Xr CMS_RecipientInfo_set0_key 3 and .Xr CMS_ReceipientInfo_decrypt 3 should be called before .Fn CMS_decrypt and .Fa cert and .Fa pkey set to .Dv NULL . .Pp The following flags can be passed in the .Fa flags parameter: .Pp If the .Dv CMS_TEXT flag is set MIME headers for type .Sy text/plain are deleted from the content. If the content is not of type .Sy text/plain then an error is returned. .Sh RETURN VALUES .Fn CMS_decrypt returns either 1 for success or 0 for failure. The error can be obtained from .Xr ERR_get_error 3 . .Sh BUGS The lack of single pass processing and the need to hold all data in memory as mentioned in .Xr CMS_verify 3 also applies to .Fn CMS_decrypt . .Sh SEE ALSO .Xr CMS_encrypt 3 , .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_decrypt was added to OpenSSL 0.9.8. |
Changes to jni/libressl/man/CMS_encrypt.3.
|
| | > | < | | | | | | | > | > | | < | | > | < < < | | | | | | | | | | | | | | | | | | | | | | | | | < < | | > | < < | < | | < < < > | > > > > | < | < < < < | | | < | > > > | < < < > > | | | > > > | < < | | < < | > | < < > | < < < < < < > > | < > | > > > > > | < < | | > > > | < < > | | > | < | | | | > > > | < < < | > | < | | > > | > | < | > > > > > | | < > > > | > | < < | < < < < < < < < | < | < < < < | | > | | | | < > | > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_ENCRYPT 3 .Os .Sh NAME .Nm CMS_encrypt .Nd create a CMS envelopedData structure .Sh SYNOPSIS .In openssl/cms.h .Ft CMS_ContentInfo * .Fo CMS_encrypt .Fa "STACK_OF(X509) *certs" .Fa "BIO *in" .Fa "const EVP_CIPHER *cipher" .Fa "unsigned int flags" .Fc .Sh DESCRIPTION .Fn CMS_encrypt creates and returns a CMS EnvelopedData structure. .Fa certs is a list of recipient certificates. .Fa in is the content to be encrypted. .Fa cipher is the symmetric cipher to use. .Fa flags is an optional set of flags. .Sh NOTES Only certificates carrying RSA keys are supported so the recipient certificates supplied to this function must all contain RSA public keys, though they do not have to be signed using the RSA algorithm. .Pp The algorithm passed in the .Fa cipher parameter must support ASN1 encoding of its parameters. .Pp Many browsers implement a "sign and encrypt" option which is simply an S/MIME envelopedData containing an S/MIME signed message. This can be readily produced by storing the S/MIME signed message in a memory BIO and passing it to .Fn CMS_encrypt . .Pp The following flags can be passed in the .Fa flags parameter: .Pp If the .Dv CMS_TEXT flag is set, MIME headers for type .Sy text/plain are prepended to the data. .Pp Normally the supplied content is translated into MIME canonical format (as required by the S/MIME specifications); if .Dv CMS_BINARY is set, no translation occurs. This option should be used if the supplied data is in binary format; otherwise the translation will corrupt it. If .Dv CMS_BINARY is set then .Dv CMS_TEXT is ignored. .Pp OpenSSL will by default identify recipient certificates using issuer name and serial number. If .Dv CMS_USE_KEYID is set, it will use the subject key identifier value instead. An error occurs if all recipient certificates do not have a subject key identifier extension. .Pp If the .Dv CMS_STREAM flag is set, a partial .Vt CMS_ContentInfo structure is returned suitable for streaming I/O: no data is read from the .Vt BIO .Fa in . .Pp If the .Dv CMS_PARTIAL flag is set, a partial .Vt CMS_ContentInfo structure is returned to which additional recipients and attributes can be added before finalization. .Pp The data being encrypted is included in the .Vt CMS_ContentInfo structure, unless .Dv CMS_DETACHED is set, in which case it is omitted. This is rarely used in practice and is not supported by .Xr SMIME_write_CMS 3 . .Pp If the flag .Dv CMS_STREAM is set, the returned .Vt CMS_ContentInfo structure is .Em not complete and outputting its contents via a function that does not properly finalize the .Vt CMS_ContentInfo structure will give unpredictable results. .Pp Several functions including .Xr SMIME_write_CMS 3 , .Xr i2d_CMS_bio_stream 3 , .Xr PEM_write_bio_CMS_stream 3 finalize the structure. Alternatively finalization can be performed by obtaining the streaming ASN1 .Vt BIO directly using .Xr BIO_new_CMS 3 . .Pp The recipients specified in .Fa certs use a CMS KeyTransRecipientInfo info structure. KEKRecipientInfo is also supported using the flag .Dv CMS_PARTIAL and .Xr CMS_add0_recipient_key 3 . .Pp The parameter .Fa certs may be .Dv NULL if .Dv CMS_PARTIAL is set and recipients are added later using .Xr CMS_add1_recipient_cert 3 or .Xr CMS_add0_recipient_key 3 . .Sh RETURN VALUES .Fn CMS_encrypt returns either a .Vt CMS_ContentInfo structure or .Dv NULL if an error occurred. The error can be obtained from .Xr ERR_get_error 3 . .Sh SEE ALSO .Xr CMS_decrypt 3 , .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_encrypt was added to OpenSSL 0.9.8. The .Dv CMS_STREAM flag was first supported in OpenSSL 1.0.0. |
Changes to jni/libressl/man/CMS_final.3.
|
| | < < < < | < | < > | | | | < | | < < < < < < < < < < < < < < | | | | < < < < < < < < < < < < < < < < < < < < < | | | < < | < | < < < < < > | > | < | < < < < < > | | < < | < < < < | < < < < < | | | | < | > > | | | < > | | < < | > > | < > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_FINAL 3 .Os .Sh NAME .Nm CMS_final .Nd finalise a CMS_ContentInfo structure .Sh SYNOPSIS .In openssl/cms.h .Ft int .Fo CMS_final .Fa "CMS_ContentInfo *cms" .Fa "BIO *data" .Fa "BIO *dcont" .Fa "unsigned int flags" .Fc .Sh DESCRIPTION .Fn CMS_final finalises the structure .Fa cms . Its purpose is to perform any operations necessary on .Fa cms (digest computation for example) and set the appropriate fields. The parameter .Fa data contains the content to be processed. The .Fa dcont parameter contains a .Vt BIO to write content to after processing: this is only used with detached data and will usually be set to .Dv NULL . .Sh NOTES This function will normally be called when the .Dv CMS_PARTIAL flag is used. It should only be used when streaming is not performed because the streaming I/O functions perform finalisation operations internally. .Sh RETURN VALUES .Fn CMS_final returns 1 for success or 0 for failure. .Sh SEE ALSO .Xr CMS_encrypt 3 , .Xr CMS_sign 3 , .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_final was added to OpenSSL 0.9.8. |
Changes to jni/libressl/man/CMS_get0_RecipientInfos.3.
|
| | < < < < | < | > > > > > | > > > | | > | > > > > | < | > > | > > > > > > | < < < < < | > > > | < | < > | < < | | > > | | < | | | | | | | | > > | < < > > > > > | > > | | < < < | < > | > > > > | > > > > | < < < < < > > > > > > > | > > | < < > > | > > > | > | > > > | < | | > > > | < < > > > > | > | < | > > > | > > > > > | < > | < < < > | | < < | < > > > | | | < > | | | < > | > > > | > > > | > > > > > | < < > > | | < < > | > > > > | | < < | < | > | | | < | > | < < < < < < < | < | | < < | < | | | | > > > > > > | < | < | | > > > > > > > > > > > > > | < < < < < | | | > > > > > | | < | > > > > | | | > | > > > | | | > > | | | > | | | | < | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_GET0_RECIPIENTINFOS 3 .Os .Sh NAME .Nm CMS_get0_RecipientInfos , .Nm CMS_RecipientInfo_type , .Nm CMS_RecipientInfo_ktri_get0_signer_id , .Nm CMS_RecipientInfo_ktri_cert_cmp , .Nm CMS_RecipientInfo_set0_pkey , .Nm CMS_RecipientInfo_kekri_get0_id , .Nm CMS_RecipientInfo_kekri_id_cmp , .Nm CMS_RecipientInfo_set0_key , .Nm CMS_RecipientInfo_decrypt , .Nm CMS_RecipientInfo_encrypt .Nd CMS envelopedData RecipientInfo routines .Sh SYNOPSIS .In openssl/cms.h .Ft STACK_OF(CMS_RecipientInfo) * .Fo CMS_get0_RecipientInfos .Fa "CMS_ContentInfo *cms" .Fc .Ft int .Fo CMS_RecipientInfo_type .Fa "CMS_RecipientInfo *ri" .Fc .Ft int .Fo CMS_RecipientInfo_ktri_get0_signer_id .Fa "CMS_RecipientInfo *ri" .Fa "ASN1_OCTET_STRING **keyid" .Fa "X509_NAME **issuer" .Fa "ASN1_INTEGER **sno" .Fc .Ft int .Fo CMS_RecipientInfo_ktri_cert_cmp .Fa "CMS_RecipientInfo *ri" .Fa "X509 *cert" .Fc .Ft int .Fo CMS_RecipientInfo_set0_pkey .Fa "CMS_RecipientInfo *ri" .Fa "EVP_PKEY *pkey" .Fc .Ft int .Fo CMS_RecipientInfo_kekri_get0_id .Fa "CMS_RecipientInfo *ri" .Fa "X509_ALGOR **palg" .Fa "ASN1_OCTET_STRING **pid" .Fa "ASN1_GENERALIZEDTIME **pdate" .Fa "ASN1_OBJECT **potherid" .Fa "ASN1_TYPE **pothertype" .Fc .Ft int .Fo CMS_RecipientInfo_kekri_id_cmp .Fa "CMS_RecipientInfo *ri" .Fa "const unsigned char *id" .Fa "size_t idlen" .Fc .Ft int .Fo CMS_RecipientInfo_set0_key .Fa "CMS_RecipientInfo *ri" .Fa "unsigned char *key" .Fa "size_t keylen" .Fc .Ft int .Fo CMS_RecipientInfo_decrypt .Fa "CMS_ContentInfo *cms" .Fa "CMS_RecipientInfo *ri" .Fc .Sh DESCRIPTION The function .Fn CMS_get0_RecipientInfos returns all the .Vt CMS_RecipientInfo structures associated with a CMS EnvelopedData structure. .Pp .Fn CMS_RecipientInfo_type returns the type of the .Vt CMS_RecipientInfo structure .Fa ri . It will currently return .Dv CMS_RECIPINFO_TRANS , .Dv CMS_RECIPINFO_AGREE , .Dv CMS_RECIPINFO_KEK , .Dv CMS_RECIPINFO_PASS , or .Dv CMS_RECIPINFO_OTHER . .Pp .Fn CMS_RecipientInfo_ktri_get0_signer_id retrieves the certificate recipient identifier associated with a specific .Vt CMS_RecipientInfo structure .Fa ri , which must be of type .Dv CMS_RECIPINFO_TRANS . Either the keyidentifier will be set in .Fa keyid or .Em both issuer name and serial number in .Fa issuer and .Fa sno . .Pp .Fn CMS_RecipientInfo_ktri_cert_cmp compares the certificate .Fa cert against the .Vt CMS_RecipientInfo structure .Fa ri , which must be of type .Dv CMS_RECIPINFO_TRANS . It returns zero if the comparison is successful and non zero if not. .Pp .Fn CMS_RecipientInfo_set0_pkey associates the private key .Fa pkey with the .Vt CMS_RecipientInfo structure .Fa ri , which must be of type .Dv CMS_RECIPINFO_TRANS . .Pp .Fn CMS_RecipientInfo_kekri_get0_id retrieves the key information from the .Vt CMS_RecipientInfo structure .Fa ri which must be of type .Dv CMS_RECIPINFO_KEK . Any of the remaining parameters can be .Dv NULL if the application is not interested in the value of a field. Where a field is optional and absent, .Dv NULL will be written to the corresponding parameter. The .Sy keyEncryptionAlgorithm field is written to .Fa palg , the .Sy keyIdentifier field is written to .Fa pid , the .Sy date field if present is written to .Fa pdate , if the .Sy other field is present the components .Sy keyAttrId and .Sy keyAttr are written to the parameters .Fa potherid and .Fa pothertype . .Pp .Fn CMS_RecipientInfo_kekri_id_cmp compares the ID in the .Fa id and .Fa idlen parameters against the .Sy keyIdentifier .Vt CMS_RecipientInfo structure .Fa ri , which must be of type .Dv CMS_RECIPINFO_KEK . It returns zero if the comparison is successful and non zero if not. .Pp .Fn CMS_RecipientInfo_set0_key associates the symmetric key .Fa key of length .Fa keylen with the .Vt CMS_RecipientInfo structure .Fa ri , which must be of type .Dv CMS_RECIPINFO_KEK . .Pp .Fn CMS_RecipientInfo_decrypt attempts to decrypt the .Vt CMS_RecipientInfo structure .Fa ri in structure .Fa cms . A key must have been associated with the structure first. .Sh NOTES The main purpose of these functions is to enable an application to lookup recipient keys using any appropriate technique when the simpler method of .Xr CMS_decrypt 3 is not appropriate. .Pp In typical usage, an application will retrieve all .Vt CMS_RecipientInfo structures using .Fn CMS_get0_RecipientInfos and check the type of each using .Fn CMS_RecipientInfo_type . Depending on the type, the .Vt CMS_RecipientInfo structure can be ignored or its key identifier data retrieved using an appropriate function. Then if the corresponding secret or private key can be obtained by any appropriate means it can then associated with the structure and .Xr CMS_RecpientInfo_decrypt 3 called. If successful, .Xr CMS_decrypt 3 can be called with a .Dv NULL key to decrypt the enveloped content. .Sh RETURN VALUES .Fn CMS_get0_RecipientInfos returns all .Vt CMS_RecipientInfo structures, or .Dv NULL if an error occurs. .Pp .Fn CMS_RecipientInfo_ktri_get0_signer_id , .Fn CMS_RecipientInfo_set0_pkey , .Fn CMS_RecipientInfo_kekri_get0_id , .Fn CMS_RecipientInfo_set0_key , and .Fn CMS_RecipientInfo_decrypt return 1 for success or 0 if an error occurs. .Pp .Fn CMS_RecipientInfo_ktri_cert_cmp and .Fn CMS_RecipientInfo_kekri_id_cmp return 0 for a successful comparison and non zero otherwise. .Pp Any error can be obtained from .Xr ERR_get_error 3 . .Sh SEE ALSO .Xr CMS_decrypt 3 , .Xr ERR_get_error 3 .Sh HISTORY These functions were first was added to OpenSSL 0.9.8. |
Changes to jni/libressl/man/CMS_get0_SignerInfos.3.
|
| | > | < | | > | < | | | > | | > | < | < | | | < < < < < < < < < < < | | < < < | < < < < | | > | | < < < | < < < < > > | < < | > | < > > > > < < < < | > > > > | | < | > | > | > | < | | < | < < | < < | < < | < < < < < < < < < < < < < < < < < < < | < | > | > > | | < | | > > | | | > > > | | | | | > > | > | > > > > | | > | | < | > > > > | | > | | | | | | > | | > | | | | < | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_GET0_SIGNERINFOS 3 .Os .Sh NAME .Nm CMS_get0_SignerInfos , .Nm CMS_SignerInfo_get0_signer_id , .Nm CMS_SignerInfo_cert_cmp , .Nm CMS_set1_signer_certs .Nd CMS signedData signer functions .Sh SYNOPSIS .In openssl/cms.h .Ft STACK_OF(CMS_SignerInfo) * .Fo CMS_get0_SignerInfos .Fa "CMS_ContentInfo *cms" .Fc .Ft int .Fo CMS_SignerInfo_get0_signer_id .Fa "CMS_SignerInfo *si" .Fa "ASN1_OCTET_STRING **keyid" .Fa "X509_NAME **issuer" .Fa "ASN1_INTEGER **sno" .Fc .Ft int .Fo CMS_SignerInfo_cert_cmp .Fa "CMS_SignerInfo *si" .Fa "X509 *cert" .Fc .Ft void .Fo CMS_SignerInfo_set1_signer_cert .Fa "CMS_SignerInfo *si" .Fa "X509 *signer" .Fc .Sh DESCRIPTION The function .Fn CMS_get0_SignerInfos returns all the .Vt CMS_SignerInfo structures associated with a CMS signedData structure. .Pp .Fn CMS_SignerInfo_get0_signer_id retrieves the certificate signer identifier associated with a specific .Vt CMS_SignerInfo structure .Fa si . Either the keyidentifier will be set in .Fa keyid or .Em both issuer name and serial number in .Fa issuer and .Fa sno . .Pp .Fn CMS_SignerInfo_cert_cmp compares the certificate .Fa cert against the signer identifier .Fa si . It returns zero if the comparison is successful and non zero if not. .Pp .Fn CMS_SignerInfo_set1_signer_cert sets the signers certificate of .Fa si to .Fa signer . .Sh NOTES The main purpose of these functions is to enable an application to lookup signers certificates using any appropriate technique when the simpler method of .Xr CMS_verify 3 is not appropriate. .Pp In typical usage and application will retrieve all .Vt CMS_SignerInfo structures using .Fn CMS_get0_SignerInfo and retrieve the identifier information using CMS. It will then obtain the signer certificate by some unspecified means (or return and error if it cannot be found) and set it using .Fn CMS_SignerInfo_set1_signer_cert . .Pp Once all signer certificates have been set, .Xr CMS_verify 3 can be used. .Pp Although .Fn CMS_get0_SignerInfos can return .Dv NULL if an error occur .Em or if there are no signers, this is not a problem in practice because the only error which can occur is if the .Fa cms structure is not of type signedData due to application error. .Sh RETURN VALUES .Fn CMS_get0_SignerInfos returns all .Vt CMS_SignerInfo structures, or .Dv NULL if there are no signers or an error occurs. .Pp .Fn CMS_SignerInfo_get0_signer_id returns 1 for success and 0 for failure. .Pp .Fn CMS_SignerInfo_cert_cmp returns 0 for a successful comparison and non zero otherwise. .Pp .Fn CMS_SignerInfo_set1_signer_cert does not return a value. .Pp Any error can be obtained from .Xr ERR_get_error 3 . .Sh SEE ALSO .Xr CMS_verify 3 , .Xr ERR_get_error 3 .Sh HISTORY These functions were first was added to OpenSSL 0.9.8. |
Changes to jni/libressl/man/CMS_get0_type.3.
|
| | > | < | | | > > > | > > > | < | > | < > | < | < > > | < < < < < < | < < < < < < < < < | | | | | < > | | | < | > | | | < < < | < | < | | < < < < < < > | < < < > > | | | < < < > | < < < < | < | | < < | | < < | < < < < | < < | < < < | | < < | < < < < | | > | | < < > | | | | | | | | < > > | > > > | > | | > | < | | > | > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_GET0_TYPE 3 .Os .Sh NAME .Nm CMS_get0_type , .Nm CMS_set1_eContentType , .Nm CMS_get0_eContentType .Nd get and set CMS content types .Sh SYNOPSIS .In openssl/cms.h .Ft const ASN1_OBJECT * .Fo CMS_get0_type .Fa "CMS_ContentInfo *cms" .Fc .Ft int .Fo CMS_set1_eContentType .Fa "CMS_ContentInfo *cms" .Fa "const ASN1_OBJECT *oid" .Fc .Ft const ASN1_OBJECT * .Fo CMS_get0_eContentType .Fa "CMS_ContentInfo *cms" .Fc .Sh DESCRIPTION .Fn CMS_get0_type returns the content type of a .Vt CMS_ContentInfo structure as an .Vt ASN1_OBJECT pointer. An application can then decide how to process the .Vt CMS_ContentInfo structure based on this value. .Pp .Fn CMS_set1_eContentType sets the embedded content type of a .Vt CMS_ContentInfo structure. It should be called with CMS functions with the .Dv CMS_PARTIAL flag and .Em before the structure is finalised, otherwise the results are undefined. .Pp .Fn CMS_get0_eContentType returns a pointer to the embedded content type. .Sh NOTES As the .Sq 0 implies, .Fn CMS_get0_type and .Fn CMS_get0_eContentType return internal pointers which should .Em not be freed up. .Fn CMS_set1_eContentType copies the supplied OID and it .Em should be freed up after use. .Pp The .Vt ASN1_OBJECT values returned can be converted to an integer NID value using .Xr OBJ_obj2nid 3 . For the currently supported content types the following values are returned: .Bd -unfilled -offset indent .Dv NID_pkcs7_data .Dv NID_pkcs7_signed .Dv NID_pkcs7_digest .Dv NID_id_smime_ct_compressedData .Dv NID_pkcs7_encrypted .Dv NID_pkcs7_enveloped .Ed .Sh RETURN VALUES .Fn CMS_get0_type and .Fn CMS_get0_eContentType return an .Vt ASN1_OBJECT structure. .Pp .Fn CMS_set1_eContentType returns 1 for success or 0 if an error occurred. The error can be obtained from .Xr ERR_get_error 3 . .Sh SEE ALSO .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_get0_type , .Fn CMS_set1_eContentType , and .Fn CMS_get0_eContentType were all first added to OpenSSL 0.9.8. |
Changes to jni/libressl/man/CMS_get1_ReceiptRequest.3.
|
| | > | > | < < | > > > > | > > > > > > > | < | > | < > | < | < > > > | < < < < < < | < < < < < < > | | | > | < | > | | > > | < | > | < > | < < < > | | | | < | | > | < | | | < > | < | < | < | > > | | > > | | < | < < < | | < > | | | < | < < < | > > > | < > > > > < < < < < < < < < < | | < < < < < | | > > > > > | > | > > > > > | > | < | | | > > | | | < > | > | | > | | > | | | | < | | > | > | < | > > > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_GET1_RECEIPTREQUEST 3 .Os .Sh NAME .Nm CMS_ReceiptRequest_create0 , .Nm CMS_add1_ReceiptRequest , .Nm CMS_get1_ReceiptRequest , .Nm CMS_ReceiptRequest_get0_values .Nd CMS signed receipt request functions .Sh SYNOPSIS .In openssl/cms.h .Ft CMS_ReceiptRequest * .Fo CMS_ReceiptRequest_create0 .Fa "unsigned char *id" .Fa "int idlen" .Fa "int allorfirst" .Fa "STACK_OF(GENERAL_NAMES) *receiptList" .Fa "STACK_OF(GENERAL_NAMES) *receiptsTo" .Fc .Ft int .Fo CMS_add1_ReceiptRequest .Fa "CMS_SignerInfo *si" .Fa "CMS_ReceiptRequest *rr" .Fc .Ft int .Fo CMS_get1_ReceiptRequest .Fa "CMS_SignerInfo *si" .Fa "CMS_ReceiptRequest **prr" .Fc .Ft void .Fo CMS_ReceiptRequest_get0_values .Fa "CMS_ReceiptRequest *rr" .Fa "ASN1_STRING **pcid" .Fa "int *pallorfirst" .Fa "STACK_OF(GENERAL_NAMES) **plist" .Fa "STACK_OF(GENERAL_NAMES) **prto" .Fc .Sh DESCRIPTION .Fn CMS_ReceiptRequest_create0 creates a signed receipt request structure. The .Sy signedContentIdentifier field is set using .Fa id and .Fa idlen , or it is set to 32 bytes of pseudo random data if .Fa id is .Dv NULL . If .Fa receiptList is .Dv NULL , the .Sy allOrFirstTier option in .Sy receiptsFrom is used and set to the value of the .Fa allorfirst parameter. If .Fa receiptList is not .Dv NULL , the .Sy receiptList option in .Sy receiptsFrom is used. The .Fa receiptsTo parameter specifies the .Sy receiptsTo field value. .Pp The .Fn CMS_add1_ReceiptRequest function adds a signed receipt request .Fa rr to the .Vt CMS_SignerInfo structure .Fa si . .Pp .Fn CMS_get1_ReceiptRequest looks for a signed receipt request in .Fa si . If any is found, it is decoded and written to .Fa prr . .Pp .Fn CMS_ReceiptRequest_get0_values retrieves the values of a receipt request. The signedContentIdentifier is copied to .Fa pcid . If the .Sy allOrFirstTier option of .Sy receiptsFrom is used, its value is copied to .Fa pallorfirst ; otherwise the .Sy receiptList field is copied to .Fa plist . The .Sy receiptsTo parameter is copied to .Fa prto . .Sh NOTES For more details of the meaning of the fields see RFC2634. .Pp The contents of a signed receipt should only be considered meaningful if the corresponding .Vt CMS_ContentInfo structure can be successfully verified using .Xr CMS_verify 3 . .Sh RETURN VALUES .Fn CMS_ReceiptRequest_create0 returns a signed receipt request structure or .Dv NULL if an error occurred. .Pp .Fn CMS_add1_ReceiptRequest returns 1 for success or 0 is an error occurred. .Pp .Fn CMS_get1_ReceiptRequest returns 1 is a signed receipt request is found and decoded. It returns 0 if a signed receipt request is not present and -1 if it is present but malformed. .Sh SEE ALSO .Xr CMS_sign 3 , .Xr CMS_sign_receipt 3 , .Xr CMS_verify 3 , .Xr CMS_verify_receipt 3 , .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_ReceiptRequest_create0 , .Fn CMS_add1_ReceiptRequest , .Fn CMS_get1_ReceiptRequest , and .Fn CMS_ReceiptRequest_get0_values were added to OpenSSL 0.9.8. |
Changes to jni/libressl/man/CMS_sign.3.
|
| | < < < < | < | > | > > > | | > | | | | < | > > | < | | | | | | > > > | | > | < | | | | | < | > | | | > | | | < > | < | < | > | | | | > < | > | | | | | | | | > > > | < < < | | | | | > | > > > > > > > | | < < < | > > > | | | | | | < < | | > > | | < < < < | > > > > > > > | | < < < < > > | < < | | | | | < | | | > | | | | | | | | | < | | | > > > > | > > | < > | < < < < > | > | < < < > | < > > | < < < | < < | < < < < < < < < < | < < < < < < < | > | > > > > | > > > > | > | > | | < < < | > | | > > > | > | | | | < > | | > > | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_SIGN 3 .Os .Sh NAME .Nm CMS_sign .Nd create a CMS SignedData structure .Sh SYNOPSIS .In openssl/cms.h .Ft CMS_ContentInfo * .Fo CMS_sign .Fa "X509 *signcert" .Fa "EVP_PKEY *pkey" .Fa "STACK_OF(X509) *certs" .Fa "BIO *data" .Fa "unsigned int flags" .Fc .Sh DESCRIPTION .Fn CMS_sign creates and returns a CMS SignedData structure. .Fa signcert is the certificate to sign with, .Fa pkey is the corresponding private key. .Fa certs is an optional additional set of certificates to include in the CMS structure (for example any intermediate CAs in the chain). Any or all of these parameters can be .Dv NULL , see .Sx NOTES below. .Pp The data to be signed is read from .Fa data . .Pp .Fa flags is an optional set of flags. .Sh NOTES Any of the following flags (OR'ed together) can be passed in the .Fa flags parameter. .Pp Many S/MIME clients expect the signed content to include valid MIME headers. If the .Dv CMS_TEXT flag is set, MIME headers for type .Sy text/plain are prepended to the data. .Pp If .Dv CMS_NOCERTS is set, the signer's certificate will not be included in the .Vt CMS_ContentInfo structure, the signer's certificate must still be supplied in the .Fa signcert parameter though. This can reduce the size of the signature if the signers certificate can be obtained by other means: for example a previously signed message. .Pp The data being signed is included in the .Vt CMS_ContentInfo structure, unless .Dv CMS_DETACHED is set, in which case it is omitted. This is used for .Vt CMS_ContentInfo detached signatures which are used in S/MIME plaintext signed messages for example. .Pp Normally the supplied content is translated into MIME canonical format (as required by the S/MIME specifications); if .Dv CMS_BINARY is set, no translation occurs. This option should be used if the supplied data is in binary format; otherwise the translation will corrupt it. .Pp The SignedData structure includes several CMS signedAttributes including the signing time, the CMS content type and the supported list of ciphers in an SMIMECapabilities attribute. If .Dv CMS_NOATTR is set, then no signedAttributes will be used. If .Dv CMS_NOSMIMECAP is set, then just the SMIMECapabilities are omitted. .Pp If present, the SMIMECapabilities attribute indicates support for the following algorithms in preference order: 256 bit AES, Gost R3411-94, Gost 28147-89, 192 bit AES, 128 bit AES, triple DES, 128 bit RC2, 64 bit RC2, DES and 40 bit RC2. If any of these algorithms is not available, then it will not be included: for example the GOST algorithms will not be included if the GOST ENGINE is not loaded. .Pp OpenSSL will by default identify signing certificates using issuer name and serial number. If .Dv CMS_USE_KEYID is set, it will use the subject key identifier value instead. An error occurs if the signing certificate does not have a subject key identifier extension. .Pp If the flag .Dv CMS_STREAM is set, then the returned .Vt CMS_ContentInfo structure is just initialized ready to perform the signing operation. The signing is however .Em not performed and the data to be signed is not read from the .Fa data parameter. Signing is deferred until after the data has been written. In this way, data can be signed in a single pass. .Pp If the .Dv CMS_PARTIAL flag is set, a partial .Vt CMS_ContentInfo structure is output to which additional signers and capabilities can be added before finalization. .Pp If the flag .Dv CMS_STREAM is set, the returned .Vt CMS_ContentInfo structure is .Em not complete and outputting its contents via a function that does not properly finalize the .Vt CMS_ContentInfo structure will give unpredictable results. .Pp Several functions including .Xr SMIME_write_CMS 3 , .Xr i2d_CMS_bio_stream 3 , .Xr PEM_write_bio_CMS_stream 3 finalize the structure. Alternatively finalization can be performed by obtaining the streaming ASN1 .Vt BIO directly using .Xr BIO_new_CMS 3 . .Pp If a signer is specified, it will use the default digest for the signing algorithm. This is SHA1 for both RSA and DSA keys. .Pp If .Fa signcert and .Fa pkey are .Dv NULL , then a certificates only CMS structure is output. .Pp The function .Fn CMS_sign is a basic CMS signing function whose output will be suitable for many purposes. For finer control of the output format the .Fa certs , .Fa signcert and .Fa pkey parameters can all be .Dv NULL and the .Dv CMS_PARTIAL flag set. Then one or more signers can be added using the function .Xr CMS_sign_add1_signer 3 , non default digests can be used and custom attributes added. .Xr CMS_final 3 must then be called to finalize the structure if streaming is not enabled. .Sh RETURN VALUES .Fn CMS_sign returns either a valid .Vt CMS_ContentInfo structure or .Dv NULL if an error occurred. The error can be obtained from .Xr ERR_get_error 3 . .Sh SEE ALSO .Xr CMS_verify 3 , .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_sign was added to OpenSSL 0.9.8. .Pp The .Dv CMS_STREAM flag is only supported for detached data in OpenSSL 0.9.8. It is supported for embedded data in OpenSSL 1.0.0 and later. .Sh BUGS Some attributes such as counter signatures are not supported. |
Deleted jni/libressl/man/CMS_sign_add1_signer.3.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/man/CMS_sign_receipt.3.
|
| | > | > | < < | | | | | | | | | | < < < < < < < < < < < < < < < < < < < < | < < < < > | < < > | < < | | < < < < > | < | | > | > > < < < < < | < < < < | > | > | < > > | | | < < < | < > > | | < < < < | > | < < < | < < < | | < < < < < < < < < | > | | < | < > | < > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_SIGN_RECEIPT 3 .Os .Sh NAME .Nm CMS_sign_receipt .Nd create a CMS signed receipt .Sh SYNOPSIS .In openssl/cms.h .Ft CMS_ContentInfo * .Fo CMS_sign_receipt .Fa "CMS_SignerInfo *si" .Fa "X509 *signcert" .Fa "EVP_PKEY *pkey" .Fa "STACK_OF(X509) *certs" .Fa "unsigned int flags" .Fc .Sh DESCRIPTION .Fn CMS_sign_receipt creates and returns a CMS signed receipt structure. .Fa si is the .Vt CMS_SignerInfo structure containing the signed receipt request. .Fa signcert is the certificate to sign with, .Fa pkey is the corresponding private key. .Fa certs is an optional additional set of certificates to include in the CMS structure (for example any intermediate CAs in the chain). .Pp .Fa flags is an optional set of flags. .Sh NOTES This functions behaves in a similar way to .Xr CMS_sign 3 except the flag values .Dv CMS_DETACHED , .Dv CMS_BINARY , .Dv CMS_NOATTR , .Dv CMS_TEXT , and .Dv CMS_STREAM are not supported, since they do not make sense in the context of signed receipts. .Sh RETURN VALUES .Fn CMS_sign_receipt returns either a valid .Vt CMS_ContentInfo structure or .Dv NULL if an error occurred. The error can be obtained from .Xr ERR_get_error 3 . .Sh SEE ALSO .Xr CMS_sign 3 , .Xr CMS_verify_receipt 3 , .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_sign_receipt was added to OpenSSL 0.9.8. |
Changes to jni/libressl/man/CMS_uncompress.3.
|
| | > | > | < < | > | | < | | | | < | < | > > | < < < < < | < < | | < < | | | < < | < | < < < < < | < < < > | | < < < < < | > | | < < < < > | | | < < < < < < < < | < | < < | > | < < | | < < < > | < | > | | > < < < < < < < < < < < < < < < < | | < > | | < | < < | | | | < > | > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_UNCOMPRESS 3 .Os .Sh NAME .Nm CMS_uncompress .Nd uncompress a CMS CompressedData structure .Sh SYNOPSIS .In openssl/cms.h .Ft int .Fo CMS_uncompress .Fa "CMS_ContentInfo *cms" .Fa "BIO *dcont" .Fa "BIO *out" .Fa "unsigned int flags" .Fc .Sh DESCRIPTION .Fn CMS_uncompress extracts and uncompresses the content from a CMS CompressedData structure .Fa cms . .Fa data is a .Vt BIO to write the content to and .Fa flags is an optional set of flags. .Pp The .Fa dcont parameter is used in the rare case where the compressed content is detached. It will normally be set to .Dv NULL . .Sh NOTES The only currently supported compression algorithm is zlib: if the structure indicates the use of any other algorithm, an error is returned. .Pp If zlib support is not compiled into OpenSSL, then .Fn CMS_uncompress will always return an error. .Pp The following flags can be passed in the .Fa flags parameter: .Pp If the .Dv CMS_TEXT flag is set, MIME headers for type .Sy text/plain are deleted from the content. If the content is not of type .Sy text/plain , then an error is returned. .Sh RETURN VALUES .Fn CMS_uncompress returns either 1 for success or 0 for failure. The error can be obtained from .Xr ERR_get_error 3 . .Sh SEE ALSO .Xr CMS_compress 3 , .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_uncompress was added to OpenSSL 0.9.8. .Sh BUGS The lack of single pass processing and the need to hold all data in memory as mentioned in .Xr CMS_verify 3 also applies to .Xr CMS_decompress 3 . |
Changes to jni/libressl/man/CMS_verify.3.
|
| | < < < < | < | < | | | < | | | | < < < < < < < < < < < < < > > > | | | | < | < < < < > | < < > | < < < > | < | > | < | < | | > | | | | | | > | | < < < | | | < > > | | > > > | < < < < < < < < < < < < < < < < < < < < < < < < < < < | < | | > > > > | > > | > | | > > | > | > > | | | > | > | > | > | | | > > > | | | | | > | > > | | | > > | > > | > | | > > | > > | > | < < < | > > > > > | | | > > | | > | | | > | | > | | | | | | | > > | | | > > | | | > | | < | | | < | > | > > | | > > > > | > > | | | > | | | < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_VERIFY 3 .Os .Sh NAME .Nm CMS_verify , .Nm CMS_get0_signers .Nd verify a CMS SignedData structure .Sh SYNOPSIS .In openssl/cms.h .Ft int .Fo CMS_verify .Fa "CMS_ContentInfo *cms" .Fa "STACK_OF(X509) *certs" .Fa "X509_STORE *store" .Fa "BIO *indata" .Fa "BIO *out" .Fa "unsigned int flags" .Fc .Ft STACK_OF(X509) * .Fo CMS_get0_signers .Fa "CMS_ContentInfo *cms" .Fc .Sh DESCRIPTION .Fn CMS_verify verifies a CMS SignedData structure. .Fa cms is the .Vt CMS_ContentInfo structure to verify. .Fa certs is a set of certificates in which to search for the signing certificate(s). .Fa store is a trusted certificate store used for chain verification. .Fa indata is the detached content if the content is not present in .Fa cms . The content is written to .Fa out if it is not .Dv NULL . .Pp .Fa flags is an optional set of flags, which can be used to modify the verify operation. .Pp .Fn CMS_get0_signers retrieves the signing certificate(s) from .Fa cms , it must be called after a successful .Fn CMS_verify operation. .Sh VERIFY PROCESS Normally the verify process proceeds as follows. .Pp Initially some sanity checks are performed on .Fa cms . The type of .Fa cms must be SignedData. There must be at least one signature on the data and if the content is detached .Fa indata cannot be .Dv NULL . .Pp An attempt is made to locate all the signing certificate(s), first looking in the .Fa certs parameter (if it is not .Dv NULL ) and then looking in any certificates contained in the .Fa cms structure itself. If no signing certificate can be located, the operation fails. .Pp Each signing certificate is chain verified using the .Sy smimesign purpose and the supplied trusted certificate store. Any internal certificates in the message are used as untrusted CAs. If CRL checking is enabled in .Fa store , any internal CRLs are used in addition to attempting to look them up in .Fa store . If any chain verify fails, an error code is returned. .Pp Finally the signed content is read (and written to .Fa out is it is not .Dv NULL ) and the signature is checked. .Pp If all signatures verify correctly, then the function is successful. .Pp Any of the following flags (OR'ed together) can be passed in the .Fa flags parameter to change the default verify behaviour. .Pp If .Dv CMS_NOINTERN is set, the certificates in the message itself are not searched when locating the signing certificate(s). This means that all the signing certificates must be in the .Fa certs parameter. .Pp If .Dv CMS_NOCRL is set, and CRL checking is enabled in .Fa store , then any CRLs in the message itself are ignored. .Pp If the .Dv CMS_TEXT flag is set, MIME headers for type .Sy text/plain are deleted from the content. If the content is not of type .Sy text/plain , then an error is returned. .Pp If .Dv CMS_NO_SIGNER_CERT_VERIFY is set, the signing certificates are not verified. .Pp If .Dv CMS_NO_ATTR_VERIFY is set, the signed attributes signature is not verified. .Pp If .Dv CMS_NO_CONTENT_VERIFY is set, then the content digest is not checked. .Sh NOTES One application of .Dv CMS_NOINTERN is to only accept messages signed by a small number of certificates. The acceptable certificates would be passed in the .Fa certs parameter. In this case, if the signer is not one of the certificates supplied in .Fa certs , then the verify will fail because the signer cannot be found. .Pp In some cases the standard techniques for looking up and validating certificates are not appropriate: for example an application may wish to lookup certificates in a database or perform customised verification. This can be achieved by setting and verifying the signers certificates manually using the signed data utility functions. .Pp Care should be taken when modifying the default verify behaviour, for example setting .Dv CMS_NO_CONTENT_VERIFY will totally disable all content verification and any modified content will be considered valid. This combination is however useful if one merely wishes to write the content to .Fa out and its validity is not considered important. .Pp Chain verification should arguably be performed using the signing time rather than the current time. However since the signing time is supplied by the signer it cannot be trusted without additional evidence (such as a trusted timestamp). .Sh RETURN VALUES .Fn CMS_verify returns 1 for a successful verification and zero if an error occurred. .Pp .Fn CMS_get0_signers returns all signers or .Dv NULL if an error occurred. .Pp The error can be obtained from .Xr ERR_get_error 3 . .Sh SEE ALSO .Xr CMS_sign 3 , .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_verify was added to OpenSSL 0.9.8. .Sh BUGS The trusted certificate store is not searched for the signing certificate, this is primarily due to the inadequacies of the current .Vt X509_STORE functionality. .Pp The lack of single pass processing means that the signed content must all be held in memory if it is not detached. |
Changes to jni/libressl/man/CMS_verify_receipt.3.
|
| | < < < < | < | < < | < < > | | | | < < < < < < < < < < < < < > | | | | < < < < < < < < < < < < < < < < < < < < < < < < < | < < | < < < < < | < < < | < < < < < < | < < < < < < | < < | > | > | > | < | > | | < | > > | > > > > | > | < > | < | | < < | > | | > | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | .Dd $Mdocdate: March 21 2015 $ .Dt CMS_VERIFY_RECEIPT 3 .Os .Sh NAME .Nm CMS_verify_receipt .Nd verify a CMS signed receipt .Sh SYNOPSIS .In openssl/cms.h .Ft int .Fo CMS_verify_receipt .Fa "CMS_ContentInfo *rcms" .Fa "CMS_ContentInfo *ocms" .Fa "STACK_OF(X509) *certs" .Fa "X509_STORE *store" .Fa "unsigned int flags" .Fc .Sh DESCRIPTION .Fn CMS_verify_receipt verifies a CMS signed receipt. .Fa rcms is the signed receipt to verify. .Fa ocms is the original SignedData structure containing the receipt request. .Fa certs is a set of certificates in which to search for the signing certificate. .Fa store is a trusted certificate store (used for chain verification). .Pp .Fa flags is an optional set of flags, which can be used to modify the verify operation. .Sh NOTES This functions behaves in a similar way to .Xr CMS_verify 3 except the flag values .Dv CMS_DETACHED , .Dv CMS_BINARY , .Dv CMS_TEXT , and .Dv CMS_STREAM are not supported since they do not make sense in the context of signed receipts. .Sh RETURN VALUES .Fn CMS_verify_receipt returns 1 for a successful verification and zero if an error occurred. .Pp The error can be obtained from .Xr ERR_get_error 3 . .Sh SEE ALSO .Xr CMS_sign_receipt 3 , .Xr CMS_verify 3 , .Xr ERR_get_error 3 .Sh HISTORY .Fn CMS_verify_receipt was added to OpenSSL 0.9.8. |
Changes to jni/libressl/man/CONF_modules_free.3.
|
| | > | < | | | > > > | | < | | < | < | > | | < < < < < < | < < < < < < < < | | < < < < < < < < < | < < < | < < < < < | > | | < < < < < < < < < < < < < < < < | > > > | < < < | < | < < < < < < < < < < < < < | > | < < < < | > > | | < | > | | < | < < | > | > | > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | .Dd $Mdocdate: March 21 2015 $ .Dt CONF_MODULES_FREE 3 .Os .Sh NAME .Nm CONF_modules_free , .Nm CONF_modules_finish , .Nm CONF_modules_unload .Nd OpenSSL configuration cleanup functions .Sh SYNOPSIS .In openssl/conf.h .Ft void .Fo CONF_modules_free .Fa void .Fc .Ft void .Fo CONF_modules_finish .Fa void .Fc .Ft void .Fo CONF_modules_unload .Fa "int all" .Fc .Sh DESCRIPTION .Fn CONF_modules_free closes down and frees up all memory allocated by all configuration modules. .Pp .Fn CONF_modules_finish calls the configuration .Sy finish handler of each configuration module to free up any configuration that module may have performed. .Pp .Fn CONF_modules_unload finishes and unloads configuration modules. If .Fa all is set to 0, only modules loaded from DSOs will be unloaded. If .Fa all is 1, all modules, including builtin modules, will be unloaded. .Sh NOTES Normally applications will only call .Fn CONF_modules_free at application to tidy up any configuration performed. .Sh RETURN VALUE None of the functions return a value. .Sh SEE ALSO .Xr CONF_modules_load_file 3 , .Xr OPENSSL_config 3 .Sh HISTORY .Fn CONF_modules_free , .Fn CONF_modules_unload , and .Fn CONF_modules_finish first appeared in OpenSSL 0.9.7. |
Changes to jni/libressl/man/CONF_modules_load_file.3.
|
| | > | < | | | | | | | | > > | | < | < | | < < < < < | < < < < < < | < | | < | < < < < | | < | < > | < > | < < < < > | < > | | < < < | < < | < > > > > < < < < | < < | | > | < < > | | < < < < | < < < < < | > | < < | < | < > > > > > > < < < | < < < < | < < < < < < < | < | | | > | < | > | | | > | | < | < > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | .Dd $Mdocdate: October 09 2015 $ .Dt CONF_MODULES_LOAD_FILE 3 .Os .Sh NAME .Nm CONF_modules_load_file , .Nm CONF_modules_load .Nd OpenSSL configuration functions .Sh SYNOPSIS .In openssl/conf.h .Ft int .Fo CONF_modules_load_file .Fa "const char *filename" .Fa "const char *appname" .Fa "unsigned long flags" .Fc .Ft int .Fo CONF_modules_load .Fa "const CONF *cnf" .Fa "const char *appname" .Fa "unsigned long flags" .Fc .Sh DESCRIPTION The function .Fn CONF_modules_load_file configures OpenSSL using file .Fa filename and application name .Fa appname . If .Fa filename is .Dv NULL , the standard OpenSSL configuration file is used. If .Fa appname is .Dv NULL , the standard OpenSSL application name .Qq openssl_conf is used. The behaviour can be cutomized using .Fa flags . .Pp .Fn CONF_modules_load is idential to .Fn CONF_modules_load_file except it reads configuration information from .Fa cnf . .Pp The following .Fa flags are currently recognized: .Bl -tag -width Ds .It Dv CONF_MFLAGS_IGNORE_ERRORS Ignore errors returned by individual configuration modules. By default, the first module error is considered fatal and no further modules are loaded. .It Dv CONF_MFLAGS_SILENT Do not add any error information. By default, all module errors add error information to the error queue. .It Dv CONF_MFLAGS_NO_DSO Disable loading of configuration modules from DSOs. .It Dv CONF_MFLAGS_IGNORE_MISSING_FILE Let .Fn CONF_modules_load_file ignore missing configuration files. By default, a missing configuration file returns an error. .El .Sh RETURN VALUES These functions return 1 for success and zero or a negative value for failure. If module errors are not ignored, the return code will reflect the return value of the failing module (this will always be zero or negative). .Sh SEE ALSO .Xr CONF_free 3 , .Xr ERR 3 , .Xr OPENSSL_config 3 .Sh HISTORY .Fn CONF_modules_load_file and .Fn CONF_modules_load first appeared in OpenSSL 0.9.7. |
Changes to jni/libressl/man/CRYPTO_set_ex_data.3.
|
| | < < < < < < < < | < < | < < | < < < < < < < < < < < < < < < < | | < > | < < < < > | | < < < < | | < < < < < | < | < < < < < < < < < < < < < < < < < < < < | < < | < < < < < < | < | | | < | > | > | > > > > | > > | > | > | < | > | | > | > | < > | | > | | > > | | | | < | | | | | > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | .Dd $Mdocdate: June 16 2014 $ .Dt CRYPTO_SET_EX_DATA 3 .Os .Sh NAME .Nm CRYPTO_set_ex_data , .Nm CRYPTO_get_ex_data .Nd internal application specific data functions .Sh SYNOPSIS .In openssl/crypto.h .Ft int .Fo CRYPTO_set_ex_data .Fa "CRYPTO_EX_DATA *r" .Fa "int idx" .Fa "void *arg" .Fc .Ft void * .Fo CRYPTO_get_ex_data .Fa "CRYPTO_EX_DATA *r" .Fa "int idx" .Fc .Sh DESCRIPTION Several OpenSSL structures can have application specific data attached to them. These functions are used internally by OpenSSL to manipulate application specific data attached to a specific structure. .Pp These functions should only be used by applications to manipulate .Vt CRYPTO_EX_DATA structures passed to the .Fn new_func , .Fn free_func , and .Fn dup_func callbacks: as passed to .Xr RSA_get_ex_new_index 3 for example. .Pp .Fn CRYPTO_set_ex_data is used to set application specific data, the data is supplied in the .Fa arg parameter and its precise meaning is up to the application. .Pp .Fn CRYPTO_get_ex_data is used to retrieve application specific data. The data is returned to the application, this will be the same value as supplied to a previous .Fn CRYPTO_set_ex_data call. .Sh RETURN VALUES .Fn CRYPTO_set_ex_data returns 1 on success or 0 on failure. .Pp .Fn CRYPTO_get_ex_data returns the application data or 0 on failure. 0 may also be valid application data but currently it can only fail if given an invalid .Fa idx parameter. .Pp On failure an error code can be obtained from .Xr ERR_get_error 3 . .Sh SEE ALSO .Xr DH_get_ex_new_index 3 , .Xr DSA_get_ex_new_index 3 , .Xr RSA_get_ex_new_index 3 .Sh HISTORY .Fn CRYPTO_set_ex_data and .Fn CRYPTO_get_ex_data have been available since SSLeay 0.9.0. |
Changes to jni/libressl/man/CRYPTO_set_locking_callback.3.
|
| | > | < | | > | < | | | | | | | | | | < | | | | | | | > > > | | < < < | | | | | | < | | | | | < > | | | | > | < < < < | > | < | | | | | | | > | | < | | | | < < | > | | > > < < < < < < < < < < < < < < < < < < < < < | < < < < < | > | < < < < < | < > > > | | < > > > | > | > > | | | > > | > | < > > | < > > > | < > > > > > > | < > > > | | | | | | | | | | | | < | | > > | | | > > > > > | | | | > | > | > > > > > > | | > > > | | | > > > | > | > > | > | > > | | | > | | | > > | < > | > | > | | > | | > | | > | > | | | > > | | | > > | | | > | | > > > | | > | | | | > > > > | | | | > > > > > | > > > > > > > > > | | | < < < | > > | | > | > > | | > | > | > > | > | | > > > > | < | | | | | | < > | | > | | | < < < > | | | | | | | | | | < | | | > | | | > | | > | | > | > > | < < < > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 | .Dd $Mdocdate: November 11 2015 $ .Dt CRYPTO_SET_LOCKING_CALLBACK 3 .Os .Sh NAME .Nm CRYPTO_THREADID_set_callback , .Nm CRYPTO_THREADID_get_callback , .Nm CRYPTO_THREADID_current , .Nm CRYPTO_THREADID_cmp , .Nm CRYPTO_THREADID_cpy , .Nm CRYPTO_THREADID_hash , .Nm CRYPTO_set_locking_callback , .Nm CRYPTO_num_locks , .Nm CRYPTO_set_dynlock_create_callback , .Nm CRYPTO_set_dynlock_lock_callback , .Nm CRYPTO_set_dynlock_destroy_callback , .Nm CRYPTO_get_new_dynlockid , .Nm CRYPTO_destroy_dynlockid , .Nm CRYPTO_lock , .Nm CRYPTO_w_lock , .Nm CRYPTO_w_unlock , .Nm CRYPTO_r_lock , .Nm CRYPTO_r_unlock , .Nm CRYPTO_add , .Nm CRYPTO_add_lock , .Nm CRYPTO_set_id_callback .Nd OpenSSL thread support .Sh SYNOPSIS .In openssl/crypto.h .Bd -literal /* Don't use this structure directly. */ typedef struct crypto_threadid_st { void *ptr; unsigned long val; } CRYPTO_THREADID; /* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ .Ed .Pp .Ft void .Fo CRYPTO_THREADID_set_numeric .Fa "CRYPTO_THREADID *id" .Fa "unsigned long val" .Fc .Ft void .Fo CRYPTO_THREADID_set_pointer .Fa "CRYPTO_THREADID *id" .Fa "void *ptr" .Fc .Ft int .Fo CRYPTO_THREADID_set_callback .Fa "void (*threadid_func)(CRYPTO_THREADID *)" .Fc .Ft void .Fo "(*CRYPTO_THREADID_get_callback(void))" .Fa "CRYPTO_THREADID *" .Fc .Ft void .Fo CRYPTO_THREADID_current .Fa "CRYPTO_THREADID *id" .Fc .Ft int .Fo CRYPTO_THREADID_cmp .Fa "const CRYPTO_THREADID *a" .Fa "const CRYPTO_THREADID *b" .Fc .Ft void .Fo CRYPTO_THREADID_cpy .Fa "CRYPTO_THREADID *dest" .Fa "const CRYPTO_THREADID *src" .Fc .Ft unsigned long .Fo CRYPTO_THREADID_hash .Fa "const CRYPTO_THREADID *id" .Fc .Ft int .Fo CRYPTO_num_locks .Fa void .Fc .Bd -literal /* struct CRYPTO_dynlock_value needs to be defined by the user */ struct CRYPTO_dynlock_value; .Ed .Pp .Ft void .Fo CRYPTO_set_dynlock_create_callback .Fa "struct CRYPTO_dynlock_value *" .Fa "(*dyn_create_function)(char *file, int line)" .Fc .Ft void .Fo CRYPTO_set_dynlock_lock_callback .Fa "void (*dyn_lock_function)(int mode, struct CRYPTO_dynlock_value *l,\ const char *file, int line)" .Fc .Ft void .Fo CRYPTO_set_dynlock_destroy_callback .Fa "void (*dyn_destroy_function)(struct CRYPTO_dynlock_value *l,\ const char *file, int line)" .Fc .Ft int .Fo CRYPTO_get_new_dynlockid .Fa void .Fc .Ft void .Fo CRYPTO_destroy_dynlockid .Fa "int i" .Fc .Ft void .Fo CRYPTO_lock .Fa "int mode" .Fa "int n" .Fa "const char *file" .Fa "int line" .Fc .Bd -literal #define CRYPTO_w_lock(type) \e CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE, type, __FILE__, __LINE__) #define CRYPTO_w_unlock(type) \e CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE, type, __FILE__, __LINE__) #define CRYPTO_r_lock(type) \e CRYPTO_lock(CRYPTO_LOCK|CRYPTO_READ, type, __FILE__, __LINE__) #define CRYPTO_r_unlock(type) \e CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_READ, type, __FILE__, __LINE__) #define CRYPTO_add(addr,amount,type) \e CRYPTO_add_lock(addr, amount, type, __FILE__, __LINE__) .Ed .Sh DESCRIPTION OpenSSL can safely be used in multi-threaded applications provided that at least two callback functions are set, .Fn locking_function and .Fn threadid_func . .Pp .Fo locking_function .Fa "int mode" .Fa "int n" .Fa "const char *file" .Fa "int line" .Fc is needed to perform locking on shared data structures. Note that OpenSSL uses a number of global data structures that will be implicitly shared whenever multiple threads use OpenSSL. Multi-threaded applications will crash at random if it is not set. .Pp .Fn locking_function must be able to handle up to .Fn CRYPTO_num_locks different mutex locks. It sets the .Fa n Ns -th lock if .Fa mode includes .Dv CRYPTO_LOCK , and releases it otherwise. .Pp .Fa file and .Fa line are the file number of the function setting the lock. They can be useful for debugging. .Pp .Fo threadid_func .Fa "CRYPTO_THREADID *id" .Fc is needed to record the currently-executing thread's identifier into .Fa id . The implementation of this callback should not fill in .Fa id directly, but should use .Fn CRYPTO_THREADID_set_numeric if thread IDs are numeric, or .Fn CRYPTO_THREADID_set_pointer if they are pointer-based. If the application does not register such a callback using .Fn CRYPTO_THREADID_set_callback , then a default implementation is used - on Windows and BeOS this uses the system's default thread identifying APIs, and on all other platforms it uses the address of .Va errno . The latter is satisfactory for thread-safety if and only if the platform has a thread-local error number facility. .Pp Once .Fn threadid_func is registered, or if the built-in default implementation is to be used, .Bl -bullet .It .Fn CRYPTO_THREADID_current records the currently-executing thread ID into the given .Fa id object. .It .Fn CRYPTO_THREADID_cmp compares two thread IDs (returning zero for equality, i.e. the same semantics as .Xr memcmp 3 ) . .It .Fn CRYPTO_THREADID_cpy duplicates a thread ID value. .It .Fn CRYPTO_THREADID_hash returns a numeric value usable as a hash-table key. This is usually the exact numeric or pointer-based thread ID used internally, however this also handles the unusual case where pointers are larger than .Vt long variables and the platform's thread IDs are pointer-based \(em in this case, mixing is done to attempt to produce a unique numeric value even though it is not as wide as the platform's true thread IDs. .El .Pp Additionally, OpenSSL supports dynamic locks, and sometimes, some parts of OpenSSL need it for better performance. To enable this, the following is required: .Bl -bullet .It Three additional callback functions, .Fn dyn_create_function , .Fn dyn_lock_function , and .Fn dyn_destroy_function . .It A structure defined with the data that each lock needs to handle. .El .Pp .Vt struct CRYPTO_dynlock_value has to be defined to contain whatever structure is needed to handle locks. .Pp .Fo dyn_create_function .Fa "const char *file" .Fa "int line" .Fc is needed to create a lock. Multi-threaded applications might crash at random if it is not set. .Pp .Fo dyn_lock_function .Fa "int mode" .Fa "CRYPTO_dynlock *l" .Fa "const char *file" .Fa "int line" .Fc is needed to perform locking off dynamic lock numbered n. Multi-threaded applications might crash at random if it is not set. .Pp .Fo dyn_destroy_function .Fa "CRYPTO_dynlock *l" .Fa "const char *file" .Fa "int line" .Fc is needed to destroy the lock .Fa l . Multi-threaded applications might crash at random if it is not set. .Pp .Fn CRYPTO_get_new_dynlockid is used to create locks. It will call .Fn dyn_create_function for the actual creation. .Pp .Fn CRYPTO_destroy_dynlockid is used to destroy locks. It will call .Fn dyn_destroy_function for the actual destruction. .Pp .Fn CRYPTO_lock is used to lock and unlock the locks. .Fa mode is a bitfield describing what should be done with the lock. .Fa n is the number of the lock as returned from .Fn CRYPTO_get_new_dynlockid . .Fa mode can be combined from the following values. These values are pairwise exclusive, with undefined behaviour if misused (for example, .Dv CRYPTO_READ and .Dv CRYPTO_WRITE should not be used together): .Bd -literal -offset indent CRYPTO_LOCK 0x01 CRYPTO_UNLOCK 0x02 CRYPTO_READ 0x04 CRYPTO_WRITE 0x08 .Ed .Sh RETURN VALUES .Fn CRYPTO_num_locks returns the required number of locks. .Pp .Fn CRYPTO_get_new_dynlockid returns the index to the newly created lock. .Pp The other functions return no values. .Sh NOTES You can find out if OpenSSL was configured with thread support: .Bd -literal -offset indent #define OPENSSL_THREAD_DEFINES #include <openssl/opensslconf.h> #if defined(OPENSSL_THREADS) /* thread support enabled */ #else /* no thread support */ #endif .Ed .Pp Also, dynamic locks are currently not used internally by OpenSSL, but may do so in the future. .Sh EXAMPLES .Pa crypto/threads/mttest.c shows examples of the callback functions on Solaris, Irix and Win32. .Sh SEE ALSO .Xr crypto 3 .Sh HISTORY .Fn CRYPTO_set_locking_callback is available in all versions of SSLeay and OpenSSL. .Fn CRYPTO_num_locks was added in OpenSSL 0.9.4. All functions dealing with dynamic locks were added in OpenSSL 0.9.5b-dev. .Vt CRYPTO_THREADID and associated functions were introduced in OpenSSL 1.0.0 to replace (actually, deprecate) the previous .Fn CRYPTO_set_id_callback , .Fn CRYPTO_get_id_callback , and .Fn CRYPTO_thread_id functions which assumed thread IDs to always be represented by .Vt unsigned long . |
Changes to jni/libressl/man/DES_set_key.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DES_set_key 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DES_set_key 3" .TH DES_set_key 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DES_random_key, DES_set_key, DES_key_sched, DES_set_key_checked, DES_set_key_unchecked, DES_set_odd_parity, DES_is_weak_key, |
︙ | ︙ |
Changes to jni/libressl/man/DH_generate_key.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DH_generate_key 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DH_generate_key 3" .TH DH_generate_key 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DH_generate_key, DH_compute_key \- perform Diffie\-Hellman key exchange .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/DH_generate_parameters.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DH_generate_parameters 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DH_generate_parameters 3" .TH DH_generate_parameters 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DH_generate_parameters_ex, DH_generate_parameters, DH_check \- generate and check Diffie\-Hellman parameters |
︙ | ︙ |
Changes to jni/libressl/man/DH_get_ex_new_index.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DH_get_ex_new_index 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DH_get_ex_new_index 3" .TH DH_get_ex_new_index 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DH_get_ex_new_index, DH_set_ex_data, DH_get_ex_data \- add application specific data to DH structures |
︙ | ︙ |
Changes to jni/libressl/man/DH_new.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DH_new 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DH_new 3" .TH DH_new 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DH_new, DH_free \- allocate and free DH objects .SH "SYNOPSIS" |
︙ | ︙ | |||
94 95 96 97 98 99 100 | \&\fIDH_free()\fR frees the \fB\s-1DH\s0\fR structure and its components. The values are erased before the memory is returned to the system. .SH "RETURN VALUES" .IX Header "RETURN VALUES" If the allocation fails, \fIDH_new()\fR returns \fB\s-1NULL\s0\fR and sets an error code that can be obtained by \fIERR_get_error\fR\|(3). Otherwise it returns a pointer to the newly allocated structure. | < < | 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | \&\fIDH_free()\fR frees the \fB\s-1DH\s0\fR structure and its components. The values are erased before the memory is returned to the system. .SH "RETURN VALUES" .IX Header "RETURN VALUES" If the allocation fails, \fIDH_new()\fR returns \fB\s-1NULL\s0\fR and sets an error code that can be obtained by \fIERR_get_error\fR\|(3). Otherwise it returns a pointer to the newly allocated structure. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIdh\fR\|(3), \fIERR_get_error\fR\|(3), \&\fIDH_generate_parameters\fR\|(3), \&\fIDH_generate_key\fR\|(3) .SH "HISTORY" .IX Header "HISTORY" \&\fIDH_new()\fR and \fIDH_free()\fR are available in all versions of SSLeay and OpenSSL. |
Changes to jni/libressl/man/DH_set_method.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DH_set_method 3" | | | > > | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DH_set_method 3" .TH DH_set_method 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DH_set_default_method, DH_get_default_method, DH_set_method, DH_new_method, DH_OpenSSL, DH_set_default_openssl_method, DH_get_default_openssl_method \&\- select DH method .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 2 \& #include <openssl/dh.h> \& #include <openssl/engine.h> \& \& void DH_set_default_method(const DH_METHOD *meth); |
︙ | ︙ | |||
158 159 160 161 162 163 164 | \& } DH_METHOD; .Ve .SH "RETURN VALUES" .IX Header "RETURN VALUES" \&\fIDH_OpenSSL()\fR and \fIDH_get_default_method()\fR return pointers to the respective \&\fB\s-1DH_METHOD\s0\fRs. .PP | < < | 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | \& } DH_METHOD; .Ve .SH "RETURN VALUES" .IX Header "RETURN VALUES" \&\fIDH_OpenSSL()\fR and \fIDH_get_default_method()\fR return pointers to the respective \&\fB\s-1DH_METHOD\s0\fRs. .PP \&\fIDH_set_method()\fR returns non-zero if the provided \fBmeth\fR was successfully set as the method for \fBdh\fR (including unloading the \s-1ENGINE\s0 handle if the previous method was supplied by an \s-1ENGINE\s0). .PP \&\fIDH_new_method()\fR returns \s-1NULL\s0 and sets an error code that can be obtained by \&\fIERR_get_error\fR\|(3) if the allocation fails. Otherwise it returns a pointer to the newly allocated structure. |
︙ | ︙ |
Changes to jni/libressl/man/DH_size.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DH_size 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DH_size 3" .TH DH_size 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DH_size \- get Diffie\-Hellman prime size .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/DSA_SIG_new.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_SIG_new 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_SIG_new 3" .TH DSA_SIG_new 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DSA_SIG_new, DSA_SIG_free \- allocate and free DSA signature objects .SH "SYNOPSIS" |
︙ | ︙ | |||
95 96 97 98 99 100 101 | values are erased before the memory is returned to the system. .SH "RETURN VALUES" .IX Header "RETURN VALUES" If the allocation fails, \fIDSA_SIG_new()\fR returns \fB\s-1NULL\s0\fR and sets an error code that can be obtained by \&\fIERR_get_error\fR\|(3). Otherwise it returns a pointer to the newly allocated structure. | < < | 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | values are erased before the memory is returned to the system. .SH "RETURN VALUES" .IX Header "RETURN VALUES" If the allocation fails, \fIDSA_SIG_new()\fR returns \fB\s-1NULL\s0\fR and sets an error code that can be obtained by \&\fIERR_get_error\fR\|(3). Otherwise it returns a pointer to the newly allocated structure. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIdsa\fR\|(3), \fIERR_get_error\fR\|(3), \&\fIDSA_do_sign\fR\|(3) .SH "HISTORY" .IX Header "HISTORY" \&\fIDSA_SIG_new()\fR and \fIDSA_SIG_free()\fR were added in OpenSSL 0.9.3. |
Changes to jni/libressl/man/DSA_do_sign.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_do_sign 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_do_sign 3" .TH DSA_do_sign 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DSA_do_sign, DSA_do_verify \- raw DSA signature operations .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/DSA_dup_DH.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_dup_DH 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_dup_DH 3" .TH DSA_dup_DH 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DSA_dup_DH \- create a DH structure out of DSA structure .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/DSA_generate_key.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_generate_key 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_generate_key 3" .TH DSA_generate_key 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DSA_generate_key \- generate DSA key pair .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/DSA_generate_parameters.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_generate_parameters 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_generate_parameters 3" .TH DSA_generate_parameters 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DSA_generate_parameters_ex, DSA_generate_parameters \- generate DSA parameters .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/DSA_get_ex_new_index.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_get_ex_new_index 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_get_ex_new_index 3" .TH DSA_get_ex_new_index 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DSA_get_ex_new_index, DSA_set_ex_data, DSA_get_ex_data \- add application specific data to DSA structures |
︙ | ︙ |
Changes to jni/libressl/man/DSA_new.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_new 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_new 3" .TH DSA_new 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DSA_new, DSA_free \- allocate and free DSA objects .SH "SYNOPSIS" |
︙ | ︙ | |||
96 97 98 99 100 101 102 | erased before the memory is returned to the system. .SH "RETURN VALUES" .IX Header "RETURN VALUES" If the allocation fails, \fIDSA_new()\fR returns \fB\s-1NULL\s0\fR and sets an error code that can be obtained by \&\fIERR_get_error\fR\|(3). Otherwise it returns a pointer to the newly allocated structure. | < < | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | erased before the memory is returned to the system. .SH "RETURN VALUES" .IX Header "RETURN VALUES" If the allocation fails, \fIDSA_new()\fR returns \fB\s-1NULL\s0\fR and sets an error code that can be obtained by \&\fIERR_get_error\fR\|(3). Otherwise it returns a pointer to the newly allocated structure. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIdsa\fR\|(3), \fIERR_get_error\fR\|(3), \&\fIDSA_generate_parameters\fR\|(3), \&\fIDSA_generate_key\fR\|(3) .SH "HISTORY" .IX Header "HISTORY" \&\fIDSA_new()\fR and \fIDSA_free()\fR are available in all versions of SSLeay and OpenSSL. |
Changes to jni/libressl/man/DSA_set_method.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_set_method 3" | | | > > | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_set_method 3" .TH DSA_set_method 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DSA_set_default_method, DSA_get_default_method, DSA_set_method, DSA_new_method, DSA_OpenSSL, DSA_set_default_openssl_method, DSA_get_default_openssl_method \&\- select DSA method .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 2 \& #include <openssl/dsa.h> \& #include <openssl/engine.h> \& \& void DSA_set_default_method(const DSA_METHOD *meth); |
︙ | ︙ | |||
172 173 174 175 176 177 178 | \& } DSA_METHOD; .Ve .SH "RETURN VALUES" .IX Header "RETURN VALUES" \&\fIDSA_OpenSSL()\fR and \fIDSA_get_default_method()\fR return pointers to the respective \&\fB\s-1DSA_METHOD\s0\fRs. .PP | < < | 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | \& } DSA_METHOD; .Ve .SH "RETURN VALUES" .IX Header "RETURN VALUES" \&\fIDSA_OpenSSL()\fR and \fIDSA_get_default_method()\fR return pointers to the respective \&\fB\s-1DSA_METHOD\s0\fRs. .PP \&\fIDSA_set_method()\fR returns non-zero if the provided \fBmeth\fR was successfully set as the method for \fBdsa\fR (including unloading the \s-1ENGINE\s0 handle if the previous method was supplied by an \s-1ENGINE\s0). .PP \&\fIDSA_new_method()\fR returns \s-1NULL\s0 and sets an error code that can be obtained by \fIERR_get_error\fR\|(3) if the allocation fails. Otherwise it returns a pointer to the newly allocated structure. |
︙ | ︙ |
Changes to jni/libressl/man/DSA_sign.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_sign 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_sign 3" .TH DSA_sign 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DSA_sign, DSA_sign_setup, DSA_verify \- DSA signatures .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/DSA_size.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_size 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DSA_size 3" .TH DSA_size 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DSA_size \- get DSA signature size .SH "SYNOPSIS" |
︙ | ︙ |
Added jni/libressl/man/ECDSA_SIG_new.3.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 | .Dd $Mdocdate: July 17 2014 $ .Dt ECDSA_SIG_NEW 3 .Os .Sh NAME .Nm ECDSA_SIG_new , .Nm ECDSA_SIG_free , .Nm i2d_ECDSA_SIG , .Nm d2i_ECDSA_SIG , .Nm ECDSA_size , .Nm ECDSA_sign_setup , .Nm ECDSA_sign , .Nm ECDSA_sign_ex , .Nm ECDSA_verify , .Nm ECDSA_do_sign , .Nm ECDSA_do_sign_ex , .Nm ECDSA_do_verify , .Nm ECDSA_OpenSSL , .Nm ECDSA_get_default_method , .Nm ECDSA_get_ex_data , .Nm ECDSA_get_ex_new_index , .Nm ECDSA_set_default_method , .Nm ECDSA_set_ex_data , .Nm ECDSA_set_method .Nd Elliptic Curve Digital Signature Algorithm .Sh SYNOPSIS .In openssl/ecdsa.h .Ft ECDSA_SIG* .Fo ECDSA_SIG_new .Fa void .Fc .Ft void .Fo ECDSA_SIG_free .Fa "ECDSA_SIG *sig" .Fc .Ft int .Fo i2d_ECDSA_SIG .Fa "const ECDSA_SIG *sig" .Fa "unsigned char **pp" .Fc .Ft ECDSA_SIG* .Fo d2i_ECDSA_SIG .Fa "ECDSA_SIG **sig" .Fa "const unsigned char **pp" .Fa "long len" .Fc .Ft ECDSA_SIG* .Fo ECDSA_do_sign .Fa "const unsigned char *dgst" .Fa "int dgst_len" .Fa "EC_KEY *eckey" .Fc .Ft ECDSA_SIG* .Fo ECDSA_do_sign_ex .Fa "const unsigned char *dgst" .Fa "int dgstlen" .Fa "const BIGNUM *kinv" .Fa "const BIGNUM *rp" .Fa "EC_KEY *eckey" .Fc .Ft int .Fo ECDSA_do_verify .Fa "const unsigned char *dgst" .Fa "int dgst_len" .Fa "const ECDSA_SIG *sig" .Fa "EC_KEY* eckey" .Fc .Ft int .Fo ECDSA_sign_setup .Fa "EC_KEY *eckey" .Fa "BN_CTX *ctx" .Fa "BIGNUM **kinv" .Fa "BIGNUM **rp" .Fc .Ft int .Fo ECDSA_sign .Fa "int type" .Fa "const unsigned char *dgst" .Fa "int dgstlen" .Fa "unsigned char *sig" .Fa "unsigned int *siglen" .Fa "EC_KEY *eckey" .Fc .Ft int .Fo ECDSA_sign_ex .Fa "int type" .Fa "const unsigned char *dgst" .Fa "int dgstlen" .Fa "unsigned char *sig" .Fa "unsigned int *siglen" .Fa "const BIGNUM *kinv" .Fa "const BIGNUM *rp" .Fa "EC_KEY *eckey" .Fc .Ft int .Fo ECDSA_verify .Fa "int type" .Fa "const unsigned char *dgst" .Fa "int dgstlen" .Fa "const unsigned char *sig" .Fa "int siglen" .Fa "EC_KEY *eckey" .Fc .Ft int .Fo ECDSA_size .Fa "const EC_KEY *eckey" .Fc .Ft const ECDSA_METHOD* .Fo ECDSA_OpenSSL .Fa void .Fc .Ft void .Fo ECDSA_set_default_method .Fa "const ECDSA_METHOD *meth" .Fc .Ft const ECDSA_METHOD* .Fo ECDSA_get_default_method .Fa void .Fc .Ft int .Fo ECDSA_set_method .Fa "EC_KEY *eckey" .Fa "const ECDSA_METHOD *meth" .Fc .Ft int .Fo ECDSA_get_ex_new_index .Fa "long argl" .Fa "void *argp" .Fa "CRYPTO_EX_new *new_func" .Fa "CRYPTO_EX_dup *dup_func" .Fa "CRYPTO_EX_free *free_func" .Fc .Ft int .Fo ECDSA_set_ex_data .Fa "EC_KEY *d" .Fa "int idx" .Fa "void *arg" .Fc .Ft void* .Fo ECDSA_get_ex_data .Fa "EC_KEY *d" .Fa "int idx" .Fc .Sh DESCRIPTION The .Vt ECDSA_SIG structure consists of two .Vt BIGNUM Ns s for the .Fa r and .Fa s value of an ECDSA signature (see X9.62 or FIPS 186-2). .Bd -literal -offset indent struct { BIGNUM *r; BIGNUM *s; } ECDSA_SIG; .Ed .Pp .Fn ECDSA_SIG_new allocates a new .Vt ECDSA_SIG structure (note: this function also allocates the .Vt BIGNUM Ns s ) and initialize it. .Pp .Fn ECDSA_SIG_free frees the .Vt ECDSA_SIG structure .Fa sig . .Pp .Fn i2d_ECDSA_SIG creates the DER encoding of the ECDSA signature .Fa sig and writes the encoded signature to .Fa *pp (note: if .Fa pp is .Dv NULL , .Fn i2d_ECDSA_SIG returns the expected length in bytes of the DER encoded signature). .Fn i2d_ECDSA_SIG returns the length of the DER encoded signature (or 0 on error). .Pp .Fn d2i_ECDSA_SIG decodes a DER encoded ECDSA signature and returns the decoded signature in a newly allocated .Vt ECDSA_SIG structure. .Fa *sig points to the buffer containing the DER encoded signature of size .Fa len . .Pp .Fn ECDSA_size returns the maximum length of a DER encoded ECDSA signature created with the private EC key .Fa eckey . .Pp .Fn ECDSA_sign_setup may be used to precompute parts of the signing operation. .Fa eckey is the private EC key and .Fa ctx is a pointer to a .Vt BN_CTX structure (or .Dv NULL ) . The precomputed values or returned in .Fa kinv and .Fa rp and can be used in a later call to .Fa ECDSA_sign_ex or .Fa ECDSA_do_sign_ex . .Pp .Fn ECDSA_sign is wrapper function for .Fa ECDSA_sign_ex with .Fa kinv and .Fa rp set to .Dv NULL . .Pp .Fn ECDSA_sign_ex computes a digital signature of the .Fa dgstlen bytes hash value .Fa dgst using the private EC key .Fa eckey and the optional pre-computed values .Fa kinv and .Fa rp . The DER encoded signatures is stored in .Fa sig and its length is returned in .Fa siglen . Note: .Fa sig must point to .Fn ECDSA_size bytes of memory. The parameter .Fa type is ignored. .Pp .Fn ECDSA_verify verifies that the signature in .Fa sig of size .Fa siglen is a valid ECDSA signature of the hash value .Fa dgst of size .Fa dgstlen using the public key .Fa eckey . The parameter .Fa type is ignored. .Pp .Fn ECDSA_do_sign is wrapper function for ECDSA_do_sign_ex with .Fa kinv and .Fa rp set to .Dv NULL . .Pp .Fn ECDSA_do_sign_ex computes a digital signature of the .Fa dgst_len bytes hash value .Fa dgst using the private key .Fa eckey and the optional pre-computed values .Fa kinv and .Fa rp . The signature is returned in a newly allocated .Vt ECDSA_SIG structure (or .Dv NULL on error). .Pp .Fn ECDSA_do_verify verifies that the signature .Fa sig is a valid ECDSA signature of the hash value .Fa dgst of size .Fa dgst_len using the public key .Fa eckey . .Sh RETURN VALUES .Fn ECDSA_size returns the maximum length signature or 0 on error. .Pp .Fn ECDSA_sign_setup and .Fn ECDSA_sign return 1 if successful or 0 on error. .Pp .Fn ECDSA_verify and .Fn ECDSA_do_verify return 1 for a valid signature, 0 for an invalid signature and -1 on error. The error codes can be obtained by .Xr ERR_get_error 3 . .Sh EXAMPLES Creating a ECDSA signature of given SHA-1 hash value using the named curve secp192k1. .Pp First step: Create an .Vt EC_KEY object. This part is .Em not ECDSA specific. .Bd -literal -offset indent int ret; ECDSA_SIG *sig; EC_KEY *eckey; eckey = EC_KEY_new_by_curve_name(NID_secp192k1); if (eckey == NULL) { /* error */ } if (!EC_KEY_generate_key(eckey)) { /* error */ } .Ed .Pp Second step: compute the ECDSA signature of a SHA-1 hash value using .Fn ECDSA_do_sign .Bd -literal -offset indent sig = ECDSA_do_sign(digest, 20, eckey); if (sig == NULL) { /* error */ } .Ed .Pp or using .Fn ECDSA_sign .Bd -literal -offset indent unsigned char *buffer, *pp; int buf_len; buf_len = ECDSA_size(eckey); buffer = malloc(buf_len); pp = buffer; if (!ECDSA_sign(0, dgst, dgstlen, pp, &buf_len, eckey) { /* error */ } .Ed .Pp Third step: Verify the created ECDSA signature using .Fn ECDSA_do_verify .Pp .Dl ret = ECDSA_do_verify(digest, 20, sig, eckey); .Pp or using .Fn ECDSA_verify .Pp .Dl ret = ECDSA_verify(0, digest, 20, buffer, buf_len, eckey); .Pp and finally evaluate the return value: .Bd -literal -offset indent if (ret == -1) { /* error */ } else if (ret == 0) { /* incorrect signature */ } else { /* ret == 1 */ /* signature ok */ } .Ed .Sh SEE ALSO .Xr dsa 3 , .Xr rsa 3 .Sh STANDARDS ANSI X9.62, US Federal Information Processing Standard FIPS 186-2 (Digital Signature Standard, DSS) .Sh HISTORY The ecdsa implementation was first introduced in OpenSSL 0.9.8. .Sh AUTHORS .An Nils Larsch for the OpenSSL project. |
Changes to jni/libressl/man/EC_GFp_simple_method.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EC_GFp_simple_method 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EC_GFp_simple_method 3" .TH EC_GFp_simple_method 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EC_GFp_simple_method, EC_GFp_mont_method, EC_GFp_nist_method, EC_GFp_nistp224_method, EC_GFp_nistp256_method, EC_GFp_nistp521_method, EC_GF2m_simple_method, EC_METHOD_get_field_type \- Functions for obtaining EC_METHOD objects. .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/EC_GROUP_copy.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EC_GROUP_copy 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EC_GROUP_copy 3" .TH EC_GROUP_copy 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EC_GROUP_copy, EC_GROUP_dup, EC_GROUP_method_of, EC_GROUP_set_generator, EC_GROUP_get0_generator, EC_GROUP_get_order, EC_GROUP_get_cofactor, EC_GROUP_set_curve_name, EC_GROUP_get_curve_name, EC_GROUP_set_asn1_flag, EC_GROUP_get_asn1_flag, EC_GROUP_set_point_conversion_form, EC_GROUP_get_point_conversion_form, EC_GROUP_get0_seed, EC_GROUP_get_seed_len, EC_GROUP_set_seed, EC_GROUP_get_degree, EC_GROUP_check, EC_GROUP_check_discriminant, EC_GROUP_cmp, EC_GROUP_get_basis_type, EC_GROUP_get_trinomial_basis, EC_GROUP_get_pentanomial_basis \- Functions for manipulating EC_GROUP objects. .SH "SYNOPSIS" |
︙ | ︙ | |||
145 146 147 148 149 150 151 | will return 0. .PP The asn1_flag value on a curve is used to determine whether there is a specific \s-1ASN1 OID\s0 to describe the curve or not. If the asn1_flag is 1 then this is a named curve with an associated \s-1ASN1 OID.\s0 If not then asn1_flag is 0. The functions EC_GROUP_get_asn1_flag and EC_GROUP_set_asn1_flag get and set the status of the asn1_flag for the curve. If set then the curve_name must also be set. .PP | | | 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | will return 0. .PP The asn1_flag value on a curve is used to determine whether there is a specific \s-1ASN1 OID\s0 to describe the curve or not. If the asn1_flag is 1 then this is a named curve with an associated \s-1ASN1 OID.\s0 If not then asn1_flag is 0. The functions EC_GROUP_get_asn1_flag and EC_GROUP_set_asn1_flag get and set the status of the asn1_flag for the curve. If set then the curve_name must also be set. .PP The point_conversion_form for a curve controls how \s-1EC_POINT\s0 data is encoded as \s-1ASN1\s0 as defined in X9.62 (\s-1ECDSA\s0). point_conversion_form_t is an enum defined as follows: .PP .Vb 10 \& typedef enum { \& /** the point is encoded as z||x, where the octet z specifies \& * which solution of the quadratic equation y is */ \& POINT_CONVERSION_COMPRESSED = 2, |
︙ | ︙ | |||
207 208 209 210 211 212 213 | f(x) = x^m + x^k + 1 with m > k >= 1 .PP or a pentanomial of the form: .PP f(x) = x^m + x^k3 + x^k2 + x^k1 + 1 with m > k3 > k2 > k1 >= 1 .PP The function EC_GROUP_get_basis_type returns a \s-1NID\s0 identifying whether a trinomial or pentanomial is in use for the field. The | | | 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | f(x) = x^m + x^k + 1 with m > k >= 1 .PP or a pentanomial of the form: .PP f(x) = x^m + x^k3 + x^k2 + x^k1 + 1 with m > k3 > k2 > k1 >= 1 .PP The function EC_GROUP_get_basis_type returns a \s-1NID\s0 identifying whether a trinomial or pentanomial is in use for the field. The function EC_GROUP_get_trinomial_basis must only be called where f(x) is of the trinomial form, and returns the value of \fBk\fR. Similarly the function EC_GROUP_get_pentanomial_basis must only be called where f(x) is of the pentanomial form, and returns the values of \fBk1\fR, \&\fBk2\fR and \fBk3\fR respectively. .SH "RETURN VALUES" .IX Header "RETURN VALUES" The following functions return 1 on success or 0 on error: EC_GROUP_copy, EC_GROUP_set_generator, EC_GROUP_check, EC_GROUP_check_discriminant, EC_GROUP_get_trinomial_basis and EC_GROUP_get_pentanomial_basis. .PP |
︙ | ︙ |
Changes to jni/libressl/man/EC_GROUP_new.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EC_GROUP_new 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EC_GROUP_new 3" .TH EC_GROUP_new 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EC_GROUP_new, EC_GROUP_free, EC_GROUP_clear_free, EC_GROUP_new_curve_GFp, EC_GROUP_new_curve_GF2m, EC_GROUP_new_by_curve_name, EC_GROUP_set_curve_GFp, EC_GROUP_get_curve_GFp, EC_GROUP_set_curve_GF2m, EC_GROUP_get_curve_GF2m, EC_get_builtin_curves \- Functions for creating and destroying EC_GROUP objects. .SH "SYNOPSIS" |
︙ | ︙ | |||
119 120 121 122 123 124 125 | \&\fIEC_GFp_simple_method\fR\|(3)). It is then necessary to call either EC_GROUP_set_curve_GFp or EC_GROUP_set_curve_GF2m as appropriate to create a curve defined over Fp or over F2^m respectively. .PP EC_GROUP_set_curve_GFp sets the curve parameters \fBp\fR, \fBa\fR and \fBb\fR for a curve over Fp stored in \fBgroup\fR. EC_group_get_curve_GFp obtains the previously set curve parameters. .PP EC_GROUP_set_curve_GF2m sets the equivalent curve parameters for a curve over F2^m. In this case \fBp\fR represents | | | | 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | \&\fIEC_GFp_simple_method\fR\|(3)). It is then necessary to call either EC_GROUP_set_curve_GFp or EC_GROUP_set_curve_GF2m as appropriate to create a curve defined over Fp or over F2^m respectively. .PP EC_GROUP_set_curve_GFp sets the curve parameters \fBp\fR, \fBa\fR and \fBb\fR for a curve over Fp stored in \fBgroup\fR. EC_group_get_curve_GFp obtains the previously set curve parameters. .PP EC_GROUP_set_curve_GF2m sets the equivalent curve parameters for a curve over F2^m. In this case \fBp\fR represents the irreducible polynomial \- each bit represents a term in the polynomial. Therefore there will either be three or five bits set dependent on whether the polynomial is a trinomial or a pentanomial. EC_group_get_curve_GF2m obtains the previously set curve parameters. .PP The functions EC_GROUP_new_curve_GFp and EC_GROUP_new_curve_GF2m are shortcuts for calling EC_GROUP_new and the appropriate EC_group_set_curve function. An appropriate default implementation method will be used. .PP Whilst the library can be used to create any curve using the functions described above, there are also a number of predefined curves that are available. In order to obtain a list of all of the predefined curves, call the function |
︙ | ︙ |
Changes to jni/libressl/man/EC_KEY_new.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EC_KEY_new 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EC_KEY_new 3" .TH EC_KEY_new 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EC_KEY_new, EC_KEY_get_flags, EC_KEY_set_flags, EC_KEY_clear_flags, EC_KEY_new_by_curve_name, EC_KEY_free, EC_KEY_copy, EC_KEY_dup, EC_KEY_up_ref, EC_KEY_get0_group, EC_KEY_set_group, EC_KEY_get0_private_key, EC_KEY_set_private_key, EC_KEY_get0_public_key, EC_KEY_set_public_key, EC_KEY_get_enc_flags, EC_KEY_set_enc_flags, EC_KEY_get_conv_form, EC_KEY_set_conv_form, EC_KEY_get_key_method_data, EC_KEY_insert_key_method_data, EC_KEY_set_asn1_flag, EC_KEY_precompute_mult, EC_KEY_generate_key, EC_KEY_check_key, EC_KEY_set_public_key_affine_coordinates \- Functions for creating, destroying and manipulating EC_KEY objects. .SH "SYNOPSIS" |
︙ | ︙ | |||
111 112 113 114 115 116 117 | \& int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); \& int EC_KEY_generate_key(EC_KEY *key); \& int EC_KEY_check_key(const EC_KEY *key); \& int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, BIGNUM *y); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" | | | 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | \& int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); \& int EC_KEY_generate_key(EC_KEY *key); \& int EC_KEY_check_key(const EC_KEY *key); \& int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, BIGNUM *y); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" An \s-1EC_KEY\s0 represents a public key and (optionally) an associated private key. A new \s-1EC_KEY \s0(with no associated curve) can be constructed by calling EC_KEY_new. The reference count for the newly created \s-1EC_KEY\s0 is initially set to 1. A curve can be associated with the \s-1EC_KEY\s0 by calling EC_KEY_set_group. .PP Alternatively a new \s-1EC_KEY\s0 can be constructed by calling EC_KEY_new_by_curve_name and supplying the nid of the associated curve. Refer to \fIEC_GROUP_new\fR\|(3) for a description of curve names. This function simply wraps calls to EC_KEY_new and EC_GROUP_new_by_curve_name. .PP Calling EC_KEY_free decrements the reference count for the \s-1EC_KEY\s0 object, and if it has dropped to zero then frees the memory associated |
︙ | ︙ | |||
148 149 150 151 152 153 154 | flags currently defined \- \s-1EC_PKEY_NO_PARAMETERS\s0 and \s-1EC_PKEY_NO_PUBKEY. \s0 These flags define the behaviour of how the \fBkey\fR is converted into \s-1ASN1\s0 in a call to i2d_ECPrivateKey. If \s-1EC_PKEY_NO_PARAMETERS\s0 is set then the public parameters for the curve are not encoded along with the private key. If \s-1EC_PKEY_NO_PUBKEY\s0 is set then the public key is not encoded along with the private key. .PP The functions EC_KEY_get_conv_form and EC_KEY_set_conv_form get and set the point_conversion_form for the \fBkey\fR. For a description of point_conversion_forms please refer to \fIEC_POINT_new\fR\|(3). .PP | | | 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | flags currently defined \- \s-1EC_PKEY_NO_PARAMETERS\s0 and \s-1EC_PKEY_NO_PUBKEY. \s0 These flags define the behaviour of how the \fBkey\fR is converted into \s-1ASN1\s0 in a call to i2d_ECPrivateKey. If \s-1EC_PKEY_NO_PARAMETERS\s0 is set then the public parameters for the curve are not encoded along with the private key. If \s-1EC_PKEY_NO_PUBKEY\s0 is set then the public key is not encoded along with the private key. .PP The functions EC_KEY_get_conv_form and EC_KEY_set_conv_form get and set the point_conversion_form for the \fBkey\fR. For a description of point_conversion_forms please refer to \fIEC_POINT_new\fR\|(3). .PP EC_KEY_insert_key_method_data and EC_KEY_get_key_method_data enable the caller to associate arbitrary additional data specific to the elliptic curve scheme being used with the \s-1EC_KEY\s0 object. This data is treated as a \*(L"black box\*(R" by the ec library. The data to be stored by EC_KEY_insert_key_method_data is provided in the \fBdata\fR parameter, which must have associated functions for duplicating, freeing and \*(L"clear_freeing\*(R" the data item. If a subsequent EC_KEY_get_key_method_data call is issued, the functions for duplicating, freeing and \*(L"clear_freeing\*(R" the data item must be provided again, and they must be the same as they were when the data item was inserted. .PP EC_KEY_set_flags sets the flags in the \fBflags\fR parameter on the \s-1EC_KEY\s0 object. Any flags that are already set are left set. The currently defined standard flags are \s-1EC_FLAG_NON_FIPS_ALLOW\s0 and \s-1EC_FLAG_FIPS_CHECKED.\s0 In addition there is the flag \s-1EC_FLAG_COFACTOR_ECDH\s0 which is specific to \s-1ECDH\s0 and is defined in ecdh.h. EC_KEY_get_flags returns the current flags that are set for this \s-1EC_KEY.\s0 EC_KEY_clear_flags clears the flags indicated by the \fBflags\fR parameter. All other flags are left in their existing state. .PP EC_KEY_set_asn1_flag sets the asn1_flag on the underlying \s-1EC_GROUP\s0 object (if set). Refer to \fIEC_GROUP_copy\fR\|(3) for further information on the asn1_flag. .PP EC_KEY_precompute_mult stores multiples of the underlying \s-1EC_GROUP\s0 generator for faster point multiplication. See also \fIEC_POINT_add\fR\|(3). |
︙ | ︙ |
Changes to jni/libressl/man/EC_POINT_add.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EC_POINT_add 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EC_POINT_add 3" .TH EC_POINT_add 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EC_POINT_add, EC_POINT_dbl, EC_POINT_invert, EC_POINT_is_at_infinity, EC_POINT_is_on_curve, EC_POINT_cmp, EC_POINT_make_affine, EC_POINTs_make_affine, EC_POINTs_mul, EC_POINT_mul, EC_GROUP_precompute_mult, EC_GROUP_have_precompute_mult \- Functions for performing mathematical operations and tests on EC_POINT objects. .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/EC_POINT_new.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EC_POINT_new 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EC_POINT_new 3" .TH EC_POINT_new 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EC_POINT_new, EC_POINT_free, EC_POINT_clear_free, EC_POINT_copy, EC_POINT_dup, EC_POINT_method_of, EC_POINT_set_to_infinity, EC_POINT_set_Jprojective_coordinates, EC_POINT_get_Jprojective_coordinates_GFp, EC_POINT_set_affine_coordinates_GFp, EC_POINT_get_affine_coordinates_GFp, EC_POINT_set_compressed_coordinates_GFp, EC_POINT_set_affine_coordinates_GF2m, EC_POINT_get_affine_coordinates_GF2m, EC_POINT_set_compressed_coordinates_GF2m, EC_POINT_point2oct, EC_POINT_oct2point, EC_POINT_point2bn, EC_POINT_bn2point, EC_POINT_point2hex, EC_POINT_hex2point \- Functions for creating, destroying and manipulating EC_POINT objects. .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/ERR.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR 3" .TH ERR 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ERR \- error codes .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/ERR_GET_LIB.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_GET_LIB 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_GET_LIB 3" .TH ERR_GET_LIB 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ERR_GET_LIB, ERR_GET_FUNC, ERR_GET_REASON \- get library, function and reason code |
︙ | ︙ |
Changes to jni/libressl/man/ERR_clear_error.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_clear_error 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_clear_error 3" .TH ERR_clear_error 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ERR_clear_error \- clear the error queue .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/ERR_error_string.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_error_string 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_error_string 3" .TH ERR_error_string 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ERR_error_string, ERR_error_string_n, ERR_lib_error_string, ERR_func_error_string, ERR_reason_error_string \- obtain human\-readable |
︙ | ︙ |
Changes to jni/libressl/man/ERR_get_error.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_get_error 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_get_error 3" .TH ERR_get_error 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ERR_get_error, ERR_peek_error, ERR_peek_last_error, ERR_get_error_line, ERR_peek_error_line, ERR_peek_last_error_line, |
︙ | ︙ |
Changes to jni/libressl/man/ERR_load_crypto_strings.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_load_crypto_strings 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_load_crypto_strings 3" .TH ERR_load_crypto_strings 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ERR_load_crypto_strings, SSL_load_error_strings, ERR_free_strings \- load and free error strings |
︙ | ︙ |
Changes to jni/libressl/man/ERR_load_strings.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_load_strings 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_load_strings 3" .TH ERR_load_strings 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ERR_load_strings, ERR_PACK, ERR_get_next_error_library \- load arbitrary error strings |
︙ | ︙ | |||
110 111 112 113 114 115 116 | .PP The last entry in the array is {0,0}. .PP \&\fIERR_get_next_error_library()\fR can be used to assign library numbers to user libraries at runtime. .SH "RETURN VALUE" .IX Header "RETURN VALUE" | | | 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | .PP The last entry in the array is {0,0}. .PP \&\fIERR_get_next_error_library()\fR can be used to assign library numbers to user libraries at runtime. .SH "RETURN VALUE" .IX Header "RETURN VALUE" \&\s-1\fIERR_PACK\s0()\fR return the error code. \&\fIERR_get_next_error_library()\fR returns a new library number. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIerr\fR\|(3), \fIERR_load_strings\fR\|(3) .SH "HISTORY" .IX Header "HISTORY" \&\fIERR_load_error_strings()\fR and \s-1\fIERR_PACK\s0()\fR are available in all versions of SSLeay and OpenSSL. \fIERR_get_next_error_library()\fR was added in SSLeay 0.9.0. |
Changes to jni/libressl/man/ERR_print_errors.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_print_errors 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_print_errors 3" .TH ERR_print_errors 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ERR_print_errors, ERR_print_errors_fp \- print error messages .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/ERR_put_error.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_put_error 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_put_error 3" .TH ERR_put_error 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ERR_put_error, ERR_add_error_data \- record an error .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/ERR_remove_state.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_remove_state 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_remove_state 3" .TH ERR_remove_state 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ERR_remove_thread_state, ERR_remove_state \- free a thread's error queue .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/ERR_set_mark.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_set_mark 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ERR_set_mark 3" .TH ERR_set_mark 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ERR_set_mark, ERR_pop_to_mark \- set marks and pop errors until mark .SH "SYNOPSIS" |
︙ | ︙ |
Added jni/libressl/man/EVP_AEAD_CTX_init.3.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 | .\" $OpenBSD: EVP_AEAD_CTX_init.3,v 1.2 2015/10/14 09:11:25 schwarze Exp $ .\" .\" Copyright (c) 2014, Google Inc. .\" Parts of the text were written by Adam Langley and David Benjamin. .\" Copyright (c) 2015 Reyk Floeter <reyk@openbsd.org> .\" .\" Permission to use, copy, modify, and/or 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. .\" .Dd $Mdocdate: October 14 2015 $ .Dt EVP_AEAD_CTX_INIT 3 .Os .Sh NAME .Nm EVP_AEAD_CTX_init , .Nm EVP_AEAD_CTX_cleanup , .Nm EVP_AEAD_CTX_open , .Nm EVP_AEAD_CTX_seal , .Nm EVP_AEAD_key_length , .Nm EVP_AEAD_max_overhead , .Nm EVP_AEAD_max_tag_len , .Nm EVP_AEAD_nonce_length , .Nm EVP_aead_aes_128_gcm , .Nm EVP_aead_aes_256_gcm , .Nm EVP_aead_chacha20_poly1305 , .Nm EVP_aead_chacha20_poly1305_ietf .Nd authenticated encryption with additional data .Sh SYNOPSIS .In openssl/evp.h .Ft int .Fo EVP_AEAD_CTX_init .Fa "EVP_AEAD_CTX *ctx" .Fa "const EVP_AEAD *aead" .Fa "const unsigned char *key" .Fa "size_t key_len" .Fa "size_t tag_len" .Fa "ENGINE *impl" .Fc .Ft void .Fo EVP_AEAD_CTX_cleanup .Fa "EVP_AEAD_CTX *ctx" .Fc .Ft int .Fo EVP_AEAD_CTX_open .Fa "const EVP_AEAD_CTX *ctx" .Fa "unsigned char *out" .Fa "size_t *out_len" .Fa "size_t max_out_len" .Fa "const unsigned char *nonce" .Fa "size_t nonce_len" .Fa "const unsigned char *in" .Fa "size_t in_len" .Fa "const unsigned char *ad" .Fa "size_t ad_len" .Fc .Ft int .Fo EVP_AEAD_CTX_seal .Fa "const EVP_AEAD_CTX *ctx" .Fa "unsigned char *out" .Fa "size_t *out_len" .Fa "size_t max_out_len" .Fa "const unsigned char *nonce" .Fa "size_t nonce_len" .Fa "const unsigned char *in" .Fa "size_t in_len" .Fa "const unsigned char *ad" .Fa "size_t ad_len" .Fc .Ft size_t .Fo EVP_AEAD_key_length .Fa "const EVP_AEAD *aead" .Fc .Ft size_t .Fo EVP_AEAD_max_overhead .Fa "const EVP_AEAD *aead" .Fc .Ft size_t .Fo EVP_AEAD_max_tag_len .Fa "const EVP_AEAD *aead" .Fc .Ft size_t .Fo EVP_AEAD_nonce_length .Fa "const EVP_AEAD *aead" .Fc .Ft const EVP_AEAD * .Fo EVP_aead_aes_128_gcm .Fa void .Fc .Ft const EVP_AEAD * .Fo EVP_aead_aes_256_gcm .Fa void .Fc .Ft const EVP_AEAD * .Fo EVP_aead_chacha20_poly1305 .Fa void .Fc .Ft const EVP_AEAD * .Fo EVP_aead_chacha20_poly1305_ietf .Fa void .Fc .Sh DESCRIPTION AEAD (Authenticated Encryption with Additional Data) couples confidentiality and integrity in a single primitive. AEAD algorithms take a key and can then seal and open individual messages. Each message has a unique, per-message nonce and, optionally, additional data which is authenticated but not included in the output. .Pp .Fn EVP_AEAD_CTX_init initializes the context .Fa ctx for the given AEAD algorithm .Fa aead . The .Fa impl argument must be .Dv NULL for the default implementation; other values are currently not supported. Authentication tags may be truncated by passing a tag length. A tag length of zero indicates the default tag length should be used. .Pp .Fn EVP_AEAD_CTX_cleanup frees any data allocated for the context .Fa ctx . .Pp .Fn EVP_AEAD_CTX_open authenticates the input .Fa in and optional additional data .Fa ad , decrypting the input and writing it as output .Fa out . This function may be called (with the same .Vt EVP_AEAD_CTX ) concurrently with itself or with .Fn EVP_AEAD_CTX_seal . At most the number of input bytes are written as output. In order to ensure success, .Fa max_out_len should be at least the same as the input length .Fa in_len . On successful return .Fa out_len is set to the actual number of bytes written. The length of the .Fa nonce specified with .Fa nonce_len must be equal to the result of EVP_AEAD_nonce_length for this AEAD. .Fn EVP_AEAD_CTX_open never results in partial output. If .Fa max_out_len is insufficient, zero will be returned and .Fa out_len will be set to zero. If the input and output are aliased then .Fa out must be <= .Fa in . .Pp .Fn EVP_AEAD_CTX_seal encrypts and authenticates the input and authenticates any additional data provided in .Fa ad , the encrypted input and authentication tag being written as output .Fa out . This function may be called (with the same .Vt EVP_AEAD_CTX ) concurrently with itself or with .Fn EVP_AEAD_CTX_open . At most .Fa max_out_len bytes are written as output and, in order to ensure success, this value should be the .Fa in_len plus the result of .Xr EVP_AEAD_overhead 3 . On successful return, .Fa out_len is set to the actual number of bytes written. The length of the .Fa nonce specified with .Fa nonce_len must be equal to the result of .Fn EVP_AEAD_nonce_length for this AEAD. .Fn EVP_AEAD_CTX_seal never results in a partial output. If .Fa max_out_len is insufficient, zero will be returned and .Fa out_len will be set to zero. If the input and output are aliased then .Fa out must be <= .Fa in . .Pp .Fn EVP_AEAD_key_length , .Fn EVP_AEAD_max_overhead , .Fn EVP_AEAD_max_tag_len , and .Fn EVP_AEAD_nonce_length provide information about the AEAD algorithm .Fa aead . .Pp All cipher algorithms have a fixed key length unless otherwise stated. The following ciphers are available: .Bl -tag -width Ds -offset indent .It Fn EVP_aead_aes_128_gcm AES-128 in Galois Counter Mode. .It Fn EVP_aead_aes_256_gcm AES-256 in Galois Counter Mode. .It Fn EVP_aead_chacha20_poly1305 ChaCha20 with a Poly1305 authenticator. .It Fn EVP_aead_chacha20_poly1305_ietf ChaCha20 with a Poly1305 authenticator for IETF Protocols. The IETF standardised variant of the AEAD is incompatible with the original version. It uses a constant salt that is prepended to the nonce. .El .Pp Where possible the .Sy EVP_AEAD interface to AEAD ciphers should be used in preference to the older .Sy EVP variants or to the low level interfaces. This is because the code then becomes transparent to the AEAD cipher used and much more flexible, it is also safer to use as it prevents common mistakes with the native APIs. .Sh RETURN VALUES .Fn EVP_AEAD_CTX_init , .Fn EVP_AEAD_CTX_open , and .Fn EVP_AEAD_CTX_seal return 1 for success or zero for failure. .Pp .Fn EVP_AEAD_key_length returns the length of the key used for this AEAD. .Pp .Fn EVP_AEAD_max_overhead returns the maximum number of additional bytes added by the act of sealing data with the AEAD. .Pp .Fn EVP_AEAD_max_tag_len returns the maximum tag length when using this AEAD. This is the largest value that can be passed as a tag length to .Fn EVP_AEAD_CTX_init . .Pp .Fn EVP_AEAD_nonce_length returns the length of the per-message nonce. .Sh EXAMPLES Encrypt a string using ChaCha20-Poly1305: .Bd -literal .\" XXX const EVP_AEAD *aead = EVP_aead_chacha20_poly1305(); static const unsigned char nonce[32] = {0}; size_t buf_len, nonce_len; EVP_AEAD_CTX ctx; EVP_AEAD_CTX_init(&ctx, aead, key32, EVP_AEAD_key_length(aead), EVP_AEAD_DEFAULT_TAG_LENGTH, NULL); nonce_len = EVP_AEAD_nonce_length(aead); EVP_AEAD_CTX_seal(&ctx, out, &out_len, BUFSIZE, nonce, nonce_len, in, in_len, NULL, 0); EVP_AEAD_CTX_cleanup(&ctx); .Ed .Sh SEE ALSO .Xr evp 3 .Sh STANDARDS .Rs .%A A. Langley .%A W. Chang .%D November 2013 .%R draft-agl-tls-chacha20poly1305-04 .%T ChaCha20 and Poly1305 based Cipher Suites for TLS .Re .Pp .Rs .%A Y. Nir .%A A. Langley .%D May 2015 .%R RFC 7539 .%T ChaCha20 and Poly1305 for IETF Protocols .Re .Pp .Sh HISTORY AEAD is based on the implementation by .An Adam Langley for Chromium/BoringSSL and first appeared in .Ox 5.6 . |
Changes to jni/libressl/man/EVP_BytesToKey.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_BytesToKey 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_BytesToKey 3" .TH EVP_BytesToKey 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_BytesToKey \- password based encryption routine .SH "SYNOPSIS" |
︙ | ︙ | |||
99 100 101 102 103 104 105 | and \fBiv\fR respectively. .SH "NOTES" .IX Header "NOTES" A typical application of this function is to derive keying material for an encryption algorithm from a password in the \fBdata\fR parameter. .PP Increasing the \fBcount\fR parameter slows down the algorithm which makes it | | | | 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | and \fBiv\fR respectively. .SH "NOTES" .IX Header "NOTES" A typical application of this function is to derive keying material for an encryption algorithm from a password in the \fBdata\fR parameter. .PP Increasing the \fBcount\fR parameter slows down the algorithm which makes it harder for an attacker to perform a brute force attack using a large number of candidate passwords. .PP If the total key and \s-1IV\s0 length is less than the digest length and \&\fB\s-1MD5\s0\fR is used then the derivation algorithm is compatible with PKCS#5 v1.5 otherwise a non standard extension is used to derive the extra data. .PP Newer applications should use more standard algorithms such as \s-1PBKDF2\s0 as defined in PKCS#5v2.1 for key derivation. .SH "KEY DERIVATION ALGORITHM" .IX Header "KEY DERIVATION ALGORITHM" The key and \s-1IV\s0 is derived by concatenating D_1, D_2, etc until enough data is available for the key and \s-1IV.\s0 D_i is defined as: .PP .Vb 1 \& D_i = HASH^count(D_(i\-1) || data || salt) .Ve .PP where || denotes concatenation, D_0 is empty, \s-1HASH\s0 is the digest algorithm in use, HASH^1(data) is simply \s-1HASH\s0(data), HASH^2(data) is \s-1HASH\s0(\s-1HASH\s0(data)) and so on. .PP The initial bytes are used for the key and the subsequent bytes for the \s-1IV.\s0 .SH "RETURN VALUES" .IX Header "RETURN VALUES" |
︙ | ︙ |
Changes to jni/libressl/man/EVP_DigestInit.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_DigestInit 3" | | | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_DigestInit 3" .TH EVP_DigestInit 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_MD_CTX_init, EVP_MD_CTX_create, EVP_DigestInit_ex, EVP_DigestUpdate, EVP_DigestFinal_ex, EVP_MD_CTX_cleanup, EVP_MD_CTX_destroy, EVP_MAX_MD_SIZE, EVP_MD_CTX_copy_ex, EVP_MD_CTX_copy, EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size, EVP_MD_block_size, EVP_MD_CTX_md, EVP_MD_CTX_size, EVP_MD_CTX_block_size, EVP_MD_CTX_type, EVP_md_null, EVP_md2, EVP_md5, EVP_sha1, EVP_sha224, EVP_sha256, EVP_sha384, EVP_sha512, EVP_dss, EVP_dss1, EVP_ripemd160, EVP_get_digestbyname, EVP_get_digestbynid, EVP_get_digestbyobj, EVP_DigestInit, EVP_DigestFinal \- EVP digest routines .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& #include <openssl/evp.h> \& \& void EVP_MD_CTX_init(EVP_MD_CTX *ctx); \& EVP_MD_CTX *EVP_MD_CTX_create(void); |
︙ | ︙ | |||
120 121 122 123 124 125 126 | \& #define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) \& #define EVP_MD_CTX_block_size(e) EVP_MD_block_size((e)\->digest) \& #define EVP_MD_CTX_type(e) EVP_MD_type((e)\->digest) \& \& const EVP_MD *EVP_md_null(void); \& const EVP_MD *EVP_md2(void); \& const EVP_MD *EVP_md5(void); | < | 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | \& #define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) \& #define EVP_MD_CTX_block_size(e) EVP_MD_block_size((e)\->digest) \& #define EVP_MD_CTX_type(e) EVP_MD_type((e)\->digest) \& \& const EVP_MD *EVP_md_null(void); \& const EVP_MD *EVP_md2(void); \& const EVP_MD *EVP_md5(void); \& const EVP_MD *EVP_sha1(void); \& const EVP_MD *EVP_dss(void); \& const EVP_MD *EVP_dss1(void); \& const EVP_MD *EVP_ripemd160(void); \& \& const EVP_MD *EVP_sha224(void); \& const EVP_MD *EVP_sha256(void); |
︙ | ︙ | |||
203 204 205 206 207 208 209 | .PP \&\fIEVP_MD_pkey_type()\fR returns the \s-1NID\s0 of the public key signing algorithm associated with this digest. For example \fIEVP_sha1()\fR is associated with \s-1RSA\s0 so this will return \fBNID_sha1WithRSAEncryption\fR. Since digests and signature algorithms are no longer linked this function is only retained for compatibility reasons. .PP | | | | | | | 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | .PP \&\fIEVP_MD_pkey_type()\fR returns the \s-1NID\s0 of the public key signing algorithm associated with this digest. For example \fIEVP_sha1()\fR is associated with \s-1RSA\s0 so this will return \fBNID_sha1WithRSAEncryption\fR. Since digests and signature algorithms are no longer linked this function is only retained for compatibility reasons. .PP \&\fIEVP_md2()\fR, \fIEVP_md5()\fR, \fIEVP_sha1()\fR, \fIEVP_sha224()\fR, \fIEVP_sha256()\fR, \fIEVP_sha384()\fR, \&\fIEVP_sha512()\fR and \fIEVP_ripemd160()\fR return \fB\s-1EVP_MD\s0\fR structures for the \s-1MD2, MD5, SHA1, SHA224, SHA256, SHA384, SHA512\s0 and \s-1RIPEMD160\s0 digest algorithms respectively. .PP \&\fIEVP_dss()\fR and \fIEVP_dss1()\fR return \fB\s-1EVP_MD\s0\fR structures for \s-1SHA1\s0 digest algorithms but using \s-1DSS \s0(\s-1DSA\s0) for the signature algorithm. Note: there is no need to use these pseudo-digests in OpenSSL 1.0.0 and later, they are however retained for compatibility. .PP \&\fIEVP_md_null()\fR is a \*(L"null\*(R" message digest that does nothing: i.e. the hash it returns is of zero length. .PP |
︙ | ︙ | |||
233 234 235 236 237 238 239 | .PP \&\fIEVP_MD_type()\fR, \fIEVP_MD_pkey_type()\fR and \fIEVP_MD_type()\fR return the \s-1NID\s0 of the corresponding \s-1OBJECT IDENTIFIER\s0 or NID_undef if none exists. .PP \&\fIEVP_MD_size()\fR, \fIEVP_MD_block_size()\fR, \fIEVP_MD_CTX_size()\fR and \&\fIEVP_MD_CTX_block_size()\fR return the digest or block size in bytes. .PP | | | 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 | .PP \&\fIEVP_MD_type()\fR, \fIEVP_MD_pkey_type()\fR and \fIEVP_MD_type()\fR return the \s-1NID\s0 of the corresponding \s-1OBJECT IDENTIFIER\s0 or NID_undef if none exists. .PP \&\fIEVP_MD_size()\fR, \fIEVP_MD_block_size()\fR, \fIEVP_MD_CTX_size()\fR and \&\fIEVP_MD_CTX_block_size()\fR return the digest or block size in bytes. .PP \&\fIEVP_md_null()\fR, \fIEVP_md2()\fR, \fIEVP_md5()\fR, \fIEVP_sha1()\fR, \fIEVP_dss()\fR, \&\fIEVP_dss1()\fR and \fIEVP_ripemd160()\fR return pointers to the corresponding \s-1EVP_MD\s0 structures. .PP \&\fIEVP_get_digestbyname()\fR, \fIEVP_get_digestbynid()\fR and \fIEVP_get_digestbyobj()\fR return either an \fB\s-1EVP_MD\s0\fR structure or \s-1NULL\s0 if an error occurs. .SH "NOTES" .IX Header "NOTES" |
︙ | ︙ | |||
335 336 337 338 339 340 341 | \&\fIEVP_DigestInit()\fR, \fIEVP_DigestUpdate()\fR and \fIEVP_DigestFinal()\fR are available in all versions of SSLeay and OpenSSL. .PP \&\fIEVP_MD_CTX_init()\fR, \fIEVP_MD_CTX_create()\fR, \fIEVP_MD_CTX_copy_ex()\fR, \&\fIEVP_MD_CTX_cleanup()\fR, \fIEVP_MD_CTX_destroy()\fR, \fIEVP_DigestInit_ex()\fR and \fIEVP_DigestFinal_ex()\fR were added in OpenSSL 0.9.7. .PP | | | 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 | \&\fIEVP_DigestInit()\fR, \fIEVP_DigestUpdate()\fR and \fIEVP_DigestFinal()\fR are available in all versions of SSLeay and OpenSSL. .PP \&\fIEVP_MD_CTX_init()\fR, \fIEVP_MD_CTX_create()\fR, \fIEVP_MD_CTX_copy_ex()\fR, \&\fIEVP_MD_CTX_cleanup()\fR, \fIEVP_MD_CTX_destroy()\fR, \fIEVP_DigestInit_ex()\fR and \fIEVP_DigestFinal_ex()\fR were added in OpenSSL 0.9.7. .PP \&\fIEVP_md_null()\fR, \fIEVP_md2()\fR, \fIEVP_md5()\fR, \fIEVP_sha1()\fR, \&\fIEVP_dss()\fR, \fIEVP_dss1()\fR and \fIEVP_ripemd160()\fR were changed to return truely const \s-1EVP_MD\s0 * in OpenSSL 0.9.7. .PP The link between digests and signing algorithms was fixed in OpenSSL 1.0 and later, so now \fIEVP_sha1()\fR can be used with \s-1RSA\s0 and \s-1DSA,\s0 there is no need to use \fIEVP_dss1()\fR any more. .PP OpenSSL 1.0 and later does not include the \s-1MD2\s0 digest algorithm in the default configuration due to its security weaknesses. |
Changes to jni/libressl/man/EVP_DigestSignInit.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_DigestSignInit 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_DigestSignInit 3" .TH EVP_DigestSignInit 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_DigestSignInit, EVP_DigestSignUpdate, EVP_DigestSignFinal \- EVP signing functions |
︙ | ︙ | |||
98 99 100 101 102 103 104 | \&\fIEVP_MD_CTX_init()\fR before calling this function. If \fBpctx\fR is not \s-1NULL\s0 the \&\s-1EVP_PKEY_CTX\s0 of the signing operation will be written to \fB*pctx\fR: this can be used to set alternative signing options. .PP \&\fIEVP_DigestSignUpdate()\fR hashes \fBcnt\fR bytes of data at \fBd\fR into the signature context \fBctx\fR. This function can be called several times on the same \fBctx\fR to include additional data. This function is currently implemented | | | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | \&\fIEVP_MD_CTX_init()\fR before calling this function. If \fBpctx\fR is not \s-1NULL\s0 the \&\s-1EVP_PKEY_CTX\s0 of the signing operation will be written to \fB*pctx\fR: this can be used to set alternative signing options. .PP \&\fIEVP_DigestSignUpdate()\fR hashes \fBcnt\fR bytes of data at \fBd\fR into the signature context \fBctx\fR. This function can be called several times on the same \fBctx\fR to include additional data. This function is currently implemented using a macro. .PP \&\fIEVP_DigestSignFinal()\fR signs the data in \fBctx\fR places the signature in \fBsig\fR. If \fBsig\fR is \fB\s-1NULL\s0\fR then the maximum size of the output buffer is written to the \fBsiglen\fR parameter. If \fBsig\fR is not \fB\s-1NULL\s0\fR then before the call the \&\fBsiglen\fR parameter should contain the length of the \fBsig\fR buffer, if the call is successful the signature is written to \fBsig\fR and the amount of data written to \fBsiglen\fR. |
︙ | ︙ |
Changes to jni/libressl/man/EVP_DigestVerifyInit.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_DigestVerifyInit 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_DigestVerifyInit 3" .TH EVP_DigestVerifyInit 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_DigestVerifyInit, EVP_DigestVerifyUpdate, EVP_DigestVerifyFinal \- EVP signature verification functions |
︙ | ︙ |
Changes to jni/libressl/man/EVP_EncryptInit.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_EncryptInit 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_EncryptInit 3" .TH EVP_EncryptInit 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_CIPHER_CTX_init, EVP_EncryptInit_ex, EVP_EncryptUpdate, EVP_EncryptFinal_ex, EVP_DecryptInit_ex, EVP_DecryptUpdate, |
︙ | ︙ | |||
96 97 98 99 100 101 102 | EVP_des_ede_cfb, EVP_des_ede3_cbc, EVP_des_ede3, EVP_des_ede3_ofb, EVP_des_ede3_cfb, EVP_desx_cbc, EVP_rc4, EVP_rc4_40, EVP_idea_cbc, EVP_idea_ecb, EVP_idea_cfb, EVP_idea_ofb, EVP_idea_cbc, EVP_rc2_cbc, EVP_rc2_ecb, EVP_rc2_cfb, EVP_rc2_ofb, EVP_rc2_40_cbc, EVP_rc2_64_cbc, EVP_bf_cbc, EVP_bf_ecb, EVP_bf_cfb, EVP_bf_ofb, EVP_cast5_cbc, EVP_cast5_ecb, EVP_cast5_cfb, EVP_cast5_ofb, EVP_aes_128_gcm, EVP_aes_192_gcm, EVP_aes_256_gcm, EVP_aes_128_ccm, | | > > | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | EVP_des_ede_cfb, EVP_des_ede3_cbc, EVP_des_ede3, EVP_des_ede3_ofb, EVP_des_ede3_cfb, EVP_desx_cbc, EVP_rc4, EVP_rc4_40, EVP_idea_cbc, EVP_idea_ecb, EVP_idea_cfb, EVP_idea_ofb, EVP_idea_cbc, EVP_rc2_cbc, EVP_rc2_ecb, EVP_rc2_cfb, EVP_rc2_ofb, EVP_rc2_40_cbc, EVP_rc2_64_cbc, EVP_bf_cbc, EVP_bf_ecb, EVP_bf_cfb, EVP_bf_ofb, EVP_cast5_cbc, EVP_cast5_ecb, EVP_cast5_cfb, EVP_cast5_ofb, EVP_aes_128_gcm, EVP_aes_192_gcm, EVP_aes_256_gcm, EVP_aes_128_ccm, EVP_aes_192_ccm, EVP_aes_256_ccm, EVP_rc5_32_12_16_cbc, EVP_rc5_32_12_16_cfb, EVP_rc5_32_12_16_ecb, EVP_rc5_32_12_16_ofb \&\- EVP cipher routines .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& #include <openssl/evp.h> \& \& void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a); \& |
︙ | ︙ | |||
176 177 178 179 180 181 182 | \& int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" The \s-1EVP\s0 cipher routines are a high level interface to certain symmetric ciphers. .PP | | | 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | \& int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" The \s-1EVP\s0 cipher routines are a high level interface to certain symmetric ciphers. .PP \&\fIEVP_CIPHER_CTX_init()\fR initializes cipher context \fBctx\fR. .PP \&\fIEVP_EncryptInit_ex()\fR sets up cipher context \fBctx\fR for encryption with cipher \fBtype\fR from \s-1ENGINE \s0\fBimpl\fR. \fBctx\fR must be initialized before calling this function. \fBtype\fR is normally supplied by a function such as \fIEVP_aes_256_cbc()\fR. If \fBimpl\fR is \s-1NULL\s0 then the default implementation is used. \fBkey\fR is the symmetric key to use and \fBiv\fR is the \s-1IV\s0 to use (if necessary), the actual number of bytes |
︙ | ︙ |
Changes to jni/libressl/man/EVP_OpenInit.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_OpenInit 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_OpenInit 3" .TH EVP_OpenInit 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_OpenInit, EVP_OpenUpdate, EVP_OpenFinal \- EVP envelope decryption .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_CTX_ctrl.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_CTX_ctrl 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_CTX_ctrl 3" .TH EVP_PKEY_CTX_ctrl 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_CTX_ctrl, EVP_PKEY_CTX_ctrl_str, EVP_PKEY_get_default_digest_nid, EVP_PKEY_CTX_set_signature_md, EVP_PKEY_CTX_set_rsa_padding, |
︙ | ︙ | |||
161 162 163 164 165 166 167 | values are supported: \-1 sets the salt length to the digest length. When signing \-2 sets the salt length to the maximum permissible value. When verifying \-2 causes the salt length to be automatically determined based on the \&\fB\s-1PSS\s0\fR block structure. If this macro is not called a salt length value of \-2 is used by default. .PP The \fIEVP_PKEY_CTX_set_rsa_rsa_keygen_bits()\fR macro sets the \s-1RSA\s0 key length for | | | 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | values are supported: \-1 sets the salt length to the digest length. When signing \-2 sets the salt length to the maximum permissible value. When verifying \-2 causes the salt length to be automatically determined based on the \&\fB\s-1PSS\s0\fR block structure. If this macro is not called a salt length value of \-2 is used by default. .PP The \fIEVP_PKEY_CTX_set_rsa_rsa_keygen_bits()\fR macro sets the \s-1RSA\s0 key length for \&\s-1RSA\s0 key generation to \fBbits\fR. If not specified 1024 bits is used. .PP The \fIEVP_PKEY_CTX_set_rsa_keygen_pubexp()\fR macro sets the public exponent value for \s-1RSA\s0 key generation to \fBpubexp\fR currently it should be an odd integer. The \&\fBpubexp\fR pointer is used internally by this function so it should not be modified or free after the call. If this macro is not called then 65537 is used. .PP The macro \fIEVP_PKEY_CTX_set_dsa_paramgen_bits()\fR sets the number of bits used |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_CTX_new.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_CTX_new 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_CTX_new 3" .TH EVP_PKEY_CTX_new 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_CTX_new, EVP_PKEY_CTX_new_id, EVP_PKEY_CTX_dup, EVP_PKEY_CTX_free \- public key algorithm context functions. |
︙ | ︙ | |||
93 94 95 96 97 98 99 | .IX Header "DESCRIPTION" The \fIEVP_PKEY_CTX_new()\fR function allocates public key algorithm context using the algorithm specified in \fBpkey\fR and \s-1ENGINE \s0\fBe\fR. .PP The \fIEVP_PKEY_CTX_new_id()\fR function allocates public key algorithm context using the algorithm specified by \fBid\fR and \s-1ENGINE \s0\fBe\fR. It is normally used when no \fB\s-1EVP_PKEY\s0\fR structure is associated with the operations, for example | | | 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | .IX Header "DESCRIPTION" The \fIEVP_PKEY_CTX_new()\fR function allocates public key algorithm context using the algorithm specified in \fBpkey\fR and \s-1ENGINE \s0\fBe\fR. .PP The \fIEVP_PKEY_CTX_new_id()\fR function allocates public key algorithm context using the algorithm specified by \fBid\fR and \s-1ENGINE \s0\fBe\fR. It is normally used when no \fB\s-1EVP_PKEY\s0\fR structure is associated with the operations, for example during parameter generation of key generation for some algorithms. .PP \&\fIEVP_PKEY_CTX_dup()\fR duplicates the context \fBctx\fR. .PP \&\fIEVP_PKEY_CTX_free()\fR frees up the context \fBctx\fR. .SH "NOTES" .IX Header "NOTES" The \fB\s-1EVP_PKEY_CTX\s0\fR structure is an opaque public key algorithm context used |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_cmp.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_cmp 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_cmp 3" .TH EVP_PKEY_cmp 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_copy_parameters, EVP_PKEY_missing_parameters, EVP_PKEY_cmp_parameters, EVP_PKEY_cmp \- public key parameter and comparison functions |
︙ | ︙ | |||
95 96 97 98 99 100 101 | The function \fIEVP_PKEY_missing_parameters()\fR returns 1 if the public key parameters of \fBpkey\fR are missing and 0 if they are present or the algorithm doesn't use parameters. .PP The function \fIEVP_PKEY_copy_parameters()\fR copies the parameters from key \&\fBfrom\fR to key \fBto\fR. .PP | | | | 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | The function \fIEVP_PKEY_missing_parameters()\fR returns 1 if the public key parameters of \fBpkey\fR are missing and 0 if they are present or the algorithm doesn't use parameters. .PP The function \fIEVP_PKEY_copy_parameters()\fR copies the parameters from key \&\fBfrom\fR to key \fBto\fR. .PP The function \fIEVP_PKEY_cmp_parameters()\fR compares the parameters of keys \&\fBa\fR and \fBb\fR. .PP The function \fIEVP_PKEY_cmp()\fR compares the public key components and parameters (if present) of keys \fBa\fR and \fBb\fR. .SH "NOTES" .IX Header "NOTES" The main purpose of the functions \fIEVP_PKEY_missing_parameters()\fR and \&\fIEVP_PKEY_copy_parameters()\fR is to handle public keys in certificates where the parameters are sometimes omitted from a public key if they are inherited from the \s-1CA\s0 that signed it. |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_decrypt.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_decrypt 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_decrypt 3" .TH EVP_PKEY_decrypt 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_decrypt_init, EVP_PKEY_decrypt \- decrypt using a public key algorithm .SH "SYNOPSIS" |
︙ | ︙ | |||
129 130 131 132 133 134 135 | \& * and that key is an RSA private key \& */ \& ctx = EVP_PKEY_CTX_new(key); \& if (!ctx) \& /* Error occurred */ \& if (EVP_PKEY_decrypt_init(ctx) <= 0) \& /* Error */ | | | 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | \& * and that key is an RSA private key \& */ \& ctx = EVP_PKEY_CTX_new(key); \& if (!ctx) \& /* Error occurred */ \& if (EVP_PKEY_decrypt_init(ctx) <= 0) \& /* Error */ \& if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING) <= 0) \& /* Error */ \& \& /* Determine buffer length */ \& if (EVP_PKEY_decrypt(ctx, NULL, &outlen, in, inlen) <= 0) \& /* Error */ \& \& out = malloc(outlen); |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_derive.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_derive 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_derive 3" .TH EVP_PKEY_derive 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_derive_init, EVP_PKEY_derive_set_peer, EVP_PKEY_derive \- derive public key algorithm shared secret. |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_encrypt.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_encrypt 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_encrypt 3" .TH EVP_PKEY_encrypt 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_encrypt_init, EVP_PKEY_encrypt \- encrypt using a public key algorithm .SH "SYNOPSIS" |
︙ | ︙ | |||
129 130 131 132 133 134 135 | \& * and that key is an RSA public key \& */ \& ctx = EVP_PKEY_CTX_new(key); \& if (!ctx) \& /* Error occurred */ \& if (EVP_PKEY_encrypt_init(ctx) <= 0) \& /* Error */ | | | 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | \& * and that key is an RSA public key \& */ \& ctx = EVP_PKEY_CTX_new(key); \& if (!ctx) \& /* Error occurred */ \& if (EVP_PKEY_encrypt_init(ctx) <= 0) \& /* Error */ \& if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING) <= 0) \& /* Error */ \& \& /* Determine buffer length */ \& if (EVP_PKEY_encrypt(ctx, NULL, &outlen, in, inlen) <= 0) \& /* Error */ \& \& out = malloc(outlen); |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_get_default_digest.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_get_default_digest 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_get_default_digest 3" .TH EVP_PKEY_get_default_digest 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_get_default_digest_nid \- get default signature digest .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_keygen.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_keygen 3" | | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_keygen 3" .TH EVP_PKEY_keygen 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_keygen_init, EVP_PKEY_keygen, EVP_PKEY_paramgen_init, EVP_PKEY_paramgen, EVP_PKEY_CTX_set_cb, EVP_PKEY_CTX_get_cb, EVP_PKEY_CTX_get_keygen_info, EVP_PKEY_CTX_set_app_data, EVP_PKEY_CTX_get_app_data \- key and parameter generation functions .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& #include <openssl/evp.h> \& \& int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); |
︙ | ︙ | |||
100 101 102 103 104 105 106 | \& \& void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); \& void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" The \fIEVP_PKEY_keygen_init()\fR function initializes a public key algorithm | | | | | 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | \& \& void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); \& void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" The \fIEVP_PKEY_keygen_init()\fR function initializes a public key algorithm context using key \fBpkey\fR for a key generation operation. .PP The \fIEVP_PKEY_keygen()\fR function performs a key generation operation, the generated key is written to \fBppkey\fR. .PP The functions \fIEVP_PKEY_paramgen_init()\fR and \fIEVP_PKEY_paramgen()\fR are similar except parameters are generated. .PP The function \fIEVP_PKEY_set_cb()\fR sets the key or parameter generation callback to \fBcb\fR. The function \fIEVP_PKEY_CTX_get_cb()\fR returns the key or parameter generation callback. .PP The function \fIEVP_PKEY_CTX_get_keygen_info()\fR returns parameters associated with the generation operation. If \fBidx\fR is \-1 the total number of parameters available is returned. Any non negative value returns the value of that parameter. \fIEVP_PKEY_CTX_gen_keygen_info()\fR with a non-negative value for \&\fBidx\fR should only be called within the generation callback. .PP If the callback returns 0 then the key generation operation is aborted and an error occurs. This might occur during a time consuming operation where a user clicks on a \*(L"cancel\*(R" button. .PP The functions \fIEVP_PKEY_CTX_set_app_data()\fR and \fIEVP_PKEY_CTX_get_app_data()\fR set and retrieve an opaque pointer. This can be used to set some application defined value which can be retrieved in the callback: for example a handle which is used to update a \*(L"progress dialog\*(R". .SH "NOTES" .IX Header "NOTES" After the call to \fIEVP_PKEY_keygen_init()\fR or \fIEVP_PKEY_paramgen_init()\fR algorithm specific control operations can be performed to set any appropriate parameters for the operation. .PP The functions \fIEVP_PKEY_keygen()\fR and \fIEVP_PKEY_paramgen()\fR can be called more than once on the same context if several operations are performed using the same parameters. .PP The meaning of the parameters passed to the callback will depend on the algorithm and the specific implementation of the algorithm. Some might not give any useful information at all during key or parameter generation. Others might not even call the callback. .PP The operation performed by key or parameter generation depends on the algorithm used. In some cases (e.g. \s-1EC\s0 with a supplied named curve) the \*(L"generation\*(R" option merely sets the appropriate fields in an \s-1EVP_PKEY\s0 structure. .PP |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_new.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_new 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_new 3" .TH EVP_PKEY_new 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_new, EVP_PKEY_free \- private key allocation functions. .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_print_private.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_print_private 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_print_private 3" .TH EVP_PKEY_print_private 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_print_public, EVP_PKEY_print_private, EVP_PKEY_print_params \- public key algorithm printing routines. |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_set1_RSA.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_set1_RSA 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_set1_RSA 3" .TH EVP_PKEY_set1_RSA 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_set1_RSA, EVP_PKEY_set1_DSA, EVP_PKEY_set1_DH, EVP_PKEY_set1_EC_KEY, EVP_PKEY_get1_RSA, EVP_PKEY_get1_DSA, EVP_PKEY_get1_DH, EVP_PKEY_get1_EC_KEY, |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_sign.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_sign 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_sign 3" .TH EVP_PKEY_sign 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_sign_init, EVP_PKEY_sign \- sign using a public key algorithm .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_verify.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_verify 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_verify 3" .TH EVP_PKEY_verify 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_verify_init, EVP_PKEY_verify \- signature verification using a public key algorithm |
︙ | ︙ |
Changes to jni/libressl/man/EVP_PKEY_verify_recover.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_verify_recover 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_PKEY_verify_recover 3" .TH EVP_PKEY_verify_recover 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_PKEY_verify_recover_init, EVP_PKEY_verify_recover \- recover signature using a public key algorithm |
︙ | ︙ |
Changes to jni/libressl/man/EVP_SealInit.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_SealInit 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_SealInit 3" .TH EVP_SealInit 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_SealInit, EVP_SealUpdate, EVP_SealFinal \- EVP envelope encryption .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/EVP_SignInit.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_SignInit 3" | | | > | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_SignInit 3" .TH EVP_SignInit 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_SignInit, EVP_SignUpdate, EVP_SignFinal, EVP_PKEY_size \&\- EVP signing functions .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& #include <openssl/evp.h> \& \& int EVP_SignInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); \& int EVP_SignUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt); |
︙ | ︙ |
Changes to jni/libressl/man/EVP_VerifyInit.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_VerifyInit 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "EVP_VerifyInit 3" .TH EVP_VerifyInit 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EVP_VerifyInit, EVP_VerifyUpdate, EVP_VerifyFinal \- EVP signature verification functions |
︙ | ︙ |
Changes to jni/libressl/man/HMAC.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "HMAC 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "HMAC 3" .TH HMAC 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" HMAC, HMAC_Init, HMAC_Update, HMAC_Final, HMAC_cleanup \- HMAC message authentication code |
︙ | ︙ |
Changes to jni/libressl/man/MD5.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "MD5 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "MD5 3" .TH MD5 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" MD2, MD4, MD5, MD2_Init, MD2_Update, MD2_Final, MD4_Init, MD4_Update, MD4_Final, MD5_Init, MD5_Update, MD5_Final \- MD2, MD4, and MD5 hash functions |
︙ | ︙ |
Changes to jni/libressl/man/Makefile.am.
1 2 | EXTRA_DIST = CMakeLists.txt dist_man_MANS = | < | 1 2 3 4 5 6 7 8 9 | EXTRA_DIST = CMakeLists.txt dist_man_MANS = dist_man_MANS += tls_init.3 dist_man_MANS += BIO_f_ssl.3 dist_man_MANS += SSL_CIPHER_get_name.3 dist_man_MANS += SSL_COMP_add_compression_method.3 dist_man_MANS += SSL_CTX_add_extra_chain_cert.3 dist_man_MANS += SSL_CTX_add_session.3 dist_man_MANS += SSL_CTX_ctrl.3 |
︙ | ︙ | |||
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | dist_man_MANS += BN_rand.3 dist_man_MANS += BN_set_bit.3 dist_man_MANS += BN_swap.3 dist_man_MANS += BN_zero.3 dist_man_MANS += BUF_MEM_new.3 dist_man_MANS += CMS_add0_cert.3 dist_man_MANS += CMS_add1_recipient_cert.3 dist_man_MANS += CMS_compress.3 dist_man_MANS += CMS_decrypt.3 dist_man_MANS += CMS_encrypt.3 dist_man_MANS += CMS_final.3 dist_man_MANS += CMS_get0_RecipientInfos.3 dist_man_MANS += CMS_get0_SignerInfos.3 dist_man_MANS += CMS_get0_type.3 dist_man_MANS += CMS_get1_ReceiptRequest.3 dist_man_MANS += CMS_sign.3 | > < > > > > > > > > | 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | dist_man_MANS += BN_rand.3 dist_man_MANS += BN_set_bit.3 dist_man_MANS += BN_swap.3 dist_man_MANS += BN_zero.3 dist_man_MANS += BUF_MEM_new.3 dist_man_MANS += CMS_add0_cert.3 dist_man_MANS += CMS_add1_recipient_cert.3 dist_man_MANS += CMS_add1_signer.3 dist_man_MANS += CMS_compress.3 dist_man_MANS += CMS_decrypt.3 dist_man_MANS += CMS_encrypt.3 dist_man_MANS += CMS_final.3 dist_man_MANS += CMS_get0_RecipientInfos.3 dist_man_MANS += CMS_get0_SignerInfos.3 dist_man_MANS += CMS_get0_type.3 dist_man_MANS += CMS_get1_ReceiptRequest.3 dist_man_MANS += CMS_sign.3 dist_man_MANS += CMS_sign_receipt.3 dist_man_MANS += CMS_uncompress.3 dist_man_MANS += CMS_verify.3 dist_man_MANS += CMS_verify_receipt.3 dist_man_MANS += CONF_modules_free.3 dist_man_MANS += CONF_modules_load_file.3 dist_man_MANS += CRYPTO_set_ex_data.3 dist_man_MANS += CRYPTO_set_locking_callback.3 dist_man_MANS += ECDSA_SIG_new.3 dist_man_MANS += EVP_AEAD_CTX_init.3 dist_man_MANS += UI_new.3 dist_man_MANS += bn_dump.3 dist_man_MANS += crypto.3 dist_man_MANS += d2i_PKCS8PrivateKey_bio.3 dist_man_MANS += des_read_pw.3 dist_man_MANS += lh_new.3 dist_man_MANS += DES_set_key.3 dist_man_MANS += DH_generate_key.3 dist_man_MANS += DH_generate_parameters.3 dist_man_MANS += DH_get_ex_new_index.3 dist_man_MANS += DH_new.3 dist_man_MANS += DH_set_method.3 dist_man_MANS += DH_size.3 |
︙ | ︙ | |||
262 263 264 265 266 267 268 | dist_man_MANS += X509_STORE_CTX_new.3 dist_man_MANS += X509_STORE_CTX_set_verify_cb.3 dist_man_MANS += X509_STORE_set_verify_cb_func.3 dist_man_MANS += X509_VERIFY_PARAM_set_flags.3 dist_man_MANS += X509_new.3 dist_man_MANS += X509_verify_cert.3 dist_man_MANS += bn.3 | < < < < < < < | 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 | dist_man_MANS += X509_STORE_CTX_new.3 dist_man_MANS += X509_STORE_CTX_set_verify_cb.3 dist_man_MANS += X509_STORE_set_verify_cb_func.3 dist_man_MANS += X509_VERIFY_PARAM_set_flags.3 dist_man_MANS += X509_new.3 dist_man_MANS += X509_verify_cert.3 dist_man_MANS += bn.3 dist_man_MANS += d2i_ASN1_OBJECT.3 dist_man_MANS += d2i_DHparams.3 dist_man_MANS += d2i_DSAPublicKey.3 dist_man_MANS += d2i_ECPKParameters.3 dist_man_MANS += d2i_RSAPublicKey.3 dist_man_MANS += d2i_X509.3 dist_man_MANS += d2i_X509_ALGOR.3 dist_man_MANS += d2i_X509_CRL.3 dist_man_MANS += d2i_X509_NAME.3 dist_man_MANS += d2i_X509_REQ.3 dist_man_MANS += d2i_X509_SIG.3 dist_man_MANS += dh.3 dist_man_MANS += dsa.3 dist_man_MANS += ec.3 dist_man_MANS += engine.3 dist_man_MANS += evp.3 dist_man_MANS += i2d_CMS_bio_stream.3 dist_man_MANS += i2d_PKCS7_bio_stream.3 dist_man_MANS += lh_stats.3 dist_man_MANS += rsa.3 dist_man_MANS += x509.3 install-data-hook: ln -sf ASN1_OBJECT_new.3 $(DESTDIR)$(mandir)/man3/ASN1_OBJECT_free.3 ln -sf ASN1_STRING_length.3 $(DESTDIR)$(mandir)/man3/ASN1_STRING_cmp.3 ln -sf ASN1_STRING_length.3 $(DESTDIR)$(mandir)/man3/ASN1_STRING_data.3 ln -sf ASN1_STRING_length.3 $(DESTDIR)$(mandir)/man3/ASN1_STRING_dup.3 ln -sf ASN1_STRING_length.3 $(DESTDIR)$(mandir)/man3/ASN1_STRING_length_set.3 |
︙ | ︙ | |||
522 523 524 525 526 527 528 529 530 531 532 533 534 535 | ln -sf CRYPTO_set_ex_data.3 $(DESTDIR)$(mandir)/man3/CRYPTO_get_ex_data.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cmp.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cpy.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_current.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_get_callback.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_hash.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_callback.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_add.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_add_lock.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_destroy_dynlockid.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_get_new_dynlockid.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_lock.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_num_locks.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_r_lock.3 | > > | 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 | ln -sf CRYPTO_set_ex_data.3 $(DESTDIR)$(mandir)/man3/CRYPTO_get_ex_data.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cmp.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cpy.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_current.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_get_callback.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_hash.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_callback.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_numeric.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_pointer.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_add.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_add_lock.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_destroy_dynlockid.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_get_new_dynlockid.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_lock.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_num_locks.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_r_lock.3 |
︙ | ︙ | |||
593 594 595 596 597 598 599 600 601 602 603 604 605 606 | ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_get_default_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_get_default_openssl_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_new_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_set_default_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_set_default_openssl_method.3 ln -sf DSA_sign.3 $(DESTDIR)$(mandir)/man3/DSA_sign_setup.3 ln -sf DSA_sign.3 $(DESTDIR)$(mandir)/man3/DSA_verify.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GF2m_simple_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_mont_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nist_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nistp224_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nistp256_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nistp521_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_METHOD_get_field_type.3 | > > > > > > > > > > > > > > > > > > | 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 | ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_get_default_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_get_default_openssl_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_new_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_set_default_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_set_default_openssl_method.3 ln -sf DSA_sign.3 $(DESTDIR)$(mandir)/man3/DSA_sign_setup.3 ln -sf DSA_sign.3 $(DESTDIR)$(mandir)/man3/DSA_verify.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_OpenSSL.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_SIG_free.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_do_sign.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_do_sign_ex.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_do_verify.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_get_default_method.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_get_ex_data.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_get_ex_new_index.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_set_default_method.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_set_ex_data.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_set_method.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_sign.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_sign_ex.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_sign_setup.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_size.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_verify.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/d2i_ECDSA_SIG.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/i2d_ECDSA_SIG.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GF2m_simple_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_mont_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nist_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nistp224_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nistp256_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nistp521_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_METHOD_get_field_type.3 |
︙ | ︙ | |||
710 711 712 713 714 715 716 717 718 719 720 721 722 723 | ln -sf ERR_load_crypto_strings.3 $(DESTDIR)$(mandir)/man3/SSL_load_error_strings.3 ln -sf ERR_load_strings.3 $(DESTDIR)$(mandir)/man3/ERR_PACK.3 ln -sf ERR_load_strings.3 $(DESTDIR)$(mandir)/man3/ERR_get_next_error_library.3 ln -sf ERR_print_errors.3 $(DESTDIR)$(mandir)/man3/ERR_print_errors_fp.3 ln -sf ERR_put_error.3 $(DESTDIR)$(mandir)/man3/ERR_add_error_data.3 ln -sf ERR_remove_state.3 $(DESTDIR)$(mandir)/man3/ERR_remove_thread_state.3 ln -sf ERR_set_mark.3 $(DESTDIR)$(mandir)/man3/ERR_pop_to_mark.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestFinal.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestFinal_ex.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestInit_ex.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestUpdate.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_MAX_MD_SIZE.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_block_size.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_cleanup.3 | > > > > > > > > > > > | 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 | ln -sf ERR_load_crypto_strings.3 $(DESTDIR)$(mandir)/man3/SSL_load_error_strings.3 ln -sf ERR_load_strings.3 $(DESTDIR)$(mandir)/man3/ERR_PACK.3 ln -sf ERR_load_strings.3 $(DESTDIR)$(mandir)/man3/ERR_get_next_error_library.3 ln -sf ERR_print_errors.3 $(DESTDIR)$(mandir)/man3/ERR_print_errors_fp.3 ln -sf ERR_put_error.3 $(DESTDIR)$(mandir)/man3/ERR_add_error_data.3 ln -sf ERR_remove_state.3 $(DESTDIR)$(mandir)/man3/ERR_remove_thread_state.3 ln -sf ERR_set_mark.3 $(DESTDIR)$(mandir)/man3/ERR_pop_to_mark.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_CTX_cleanup.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_CTX_open.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_CTX_seal.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_key_length.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_max_overhead.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_max_tag_len.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_nonce_length.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_aead_aes_128_gcm.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_aead_aes_256_gcm.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_aead_chacha20_poly1305.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_aead_chacha20_poly1305_ietf.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestFinal.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestFinal_ex.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestInit_ex.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestUpdate.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_MAX_MD_SIZE.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_block_size.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_cleanup.3 |
︙ | ︙ | |||
738 739 740 741 742 743 744 | ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_get_digestbyname.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_get_digestbynid.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_get_digestbyobj.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_md2.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_md5.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_md_null.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_ripemd160.3 | < | 769 770 771 772 773 774 775 776 777 778 779 780 781 782 | ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_get_digestbyname.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_get_digestbynid.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_get_digestbyobj.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_md2.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_md5.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_md_null.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_ripemd160.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_sha1.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_sha224.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_sha256.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_sha384.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_sha512.3 ln -sf EVP_DigestSignInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestSignFinal.3 ln -sf EVP_DigestSignInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestSignUpdate.3 |
︙ | ︙ | |||
845 846 847 848 849 850 851 | ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_dsa_paramgen_bits.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_ec_paramgen_curve_nid.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_keygen_pubexp.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_padding.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_pss_saltlen.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_rsa_keygen_bits.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_signature_md.3 | < < | 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 | ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_dsa_paramgen_bits.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_ec_paramgen_curve_nid.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_keygen_pubexp.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_padding.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_pss_saltlen.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_rsa_keygen_bits.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_signature_md.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_get_default_digest_nid.3 ln -sf EVP_PKEY_CTX_new.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_dup.3 ln -sf EVP_PKEY_CTX_new.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_free.3 ln -sf EVP_PKEY_CTX_new.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_new_id.3 ln -sf EVP_PKEY_cmp.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_cmp_parameters.3 ln -sf EVP_PKEY_cmp.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_copy_parameters.3 ln -sf EVP_PKEY_cmp.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_missing_parameters.3 ln -sf EVP_PKEY_decrypt.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_decrypt_init.3 ln -sf EVP_PKEY_derive.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_derive_init.3 ln -sf EVP_PKEY_derive.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_derive_set_peer.3 ln -sf EVP_PKEY_encrypt.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_encrypt_init.3 ln -sf EVP_PKEY_get_default_digest.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_get_default_digest_nid.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_get_app_data.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_get_cb.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_get_keygen_info.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_app_data.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_cb.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_keygen_init.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_paramgen.3 |
︙ | ︙ | |||
1029 1030 1031 1032 1033 1034 1035 | ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSA_print.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSA_print_fp.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSAparams_print.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSAparams_print_fp.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/RSA_print_fp.3 ln -sf RSA_private_encrypt.3 $(DESTDIR)$(mandir)/man3/RSA_public_decrypt.3 ln -sf RSA_public_encrypt.3 $(DESTDIR)$(mandir)/man3/RSA_private_decrypt.3 | < | 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 | ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSA_print.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSA_print_fp.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSAparams_print.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSAparams_print_fp.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/RSA_print_fp.3 ln -sf RSA_private_encrypt.3 $(DESTDIR)$(mandir)/man3/RSA_public_decrypt.3 ln -sf RSA_public_encrypt.3 $(DESTDIR)$(mandir)/man3/RSA_private_decrypt.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_PKCS1_SSLeay.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_flags.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_get_default_method.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_get_default_openssl_method.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_get_method.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_new_method.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_null_method.3 |
︙ | ︙ | |||
1089 1090 1091 1092 1093 1094 1095 | ln -sf SSL_CTX_sess_number.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_misses.3 ln -sf SSL_CTX_sess_number.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_timeouts.3 ln -sf SSL_CTX_sess_set_cache_size.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_cache_size.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_get_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_new_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_remove_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_set_new_cb.3 | < | 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 | ln -sf SSL_CTX_sess_number.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_misses.3 ln -sf SSL_CTX_sess_number.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_timeouts.3 ln -sf SSL_CTX_sess_set_cache_size.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_cache_size.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_get_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_new_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_remove_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_set_new_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_set_remove_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/get_session_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/new_session_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/remove_session_cb.3 ln -sf SSL_CTX_set_cert_store.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_get_cert_store.3 ln -sf SSL_CTX_set_cipher_list.3 $(DESTDIR)$(mandir)/man3/SSL_set_cipher_list.3 ln -sf SSL_CTX_set_client_CA_list.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_add_client_CA.3 |
︙ | ︙ | |||
1115 1116 1117 1118 1119 1120 1121 | ln -sf SSL_CTX_set_max_cert_list.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_get_max_cert_list.3 ln -sf SSL_CTX_set_max_cert_list.3 $(DESTDIR)$(mandir)/man3/SSL_get_max_cert_list.3 ln -sf SSL_CTX_set_max_cert_list.3 $(DESTDIR)$(mandir)/man3/SSL_set_max_cert_list.3 ln -sf SSL_CTX_set_mode.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_get_mode.3 ln -sf SSL_CTX_set_mode.3 $(DESTDIR)$(mandir)/man3/SSL_get_mode.3 ln -sf SSL_CTX_set_mode.3 $(DESTDIR)$(mandir)/man3/SSL_set_mode.3 ln -sf SSL_CTX_set_msg_callback.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_set_msg_callback_arg.3 | < | 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 | ln -sf SSL_CTX_set_max_cert_list.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_get_max_cert_list.3 ln -sf SSL_CTX_set_max_cert_list.3 $(DESTDIR)$(mandir)/man3/SSL_get_max_cert_list.3 ln -sf SSL_CTX_set_max_cert_list.3 $(DESTDIR)$(mandir)/man3/SSL_set_max_cert_list.3 ln -sf SSL_CTX_set_mode.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_get_mode.3 ln -sf SSL_CTX_set_mode.3 $(DESTDIR)$(mandir)/man3/SSL_get_mode.3 ln -sf SSL_CTX_set_mode.3 $(DESTDIR)$(mandir)/man3/SSL_set_mode.3 ln -sf SSL_CTX_set_msg_callback.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_set_msg_callback_arg.3 ln -sf SSL_CTX_set_msg_callback.3 $(DESTDIR)$(mandir)/man3/SSL_set_msg_callback.3 ln -sf SSL_CTX_set_msg_callback.3 $(DESTDIR)$(mandir)/man3/SSL_set_msg_callback_arg.3 ln -sf SSL_CTX_set_options.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_clear_options.3 ln -sf SSL_CTX_set_options.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_get_options.3 ln -sf SSL_CTX_set_options.3 $(DESTDIR)$(mandir)/man3/SSL_clear_options.3 ln -sf SSL_CTX_set_options.3 $(DESTDIR)$(mandir)/man3/SSL_get_options.3 ln -sf SSL_CTX_set_options.3 $(DESTDIR)$(mandir)/man3/SSL_get_secure_renegotiation_support.3 |
︙ | ︙ | |||
1199 1200 1201 1202 1203 1204 1205 | ln -sf SSL_get_psk_identity.3 $(DESTDIR)$(mandir)/man3/SSL_get_psk_identity_hint.3 ln -sf SSL_get_rbio.3 $(DESTDIR)$(mandir)/man3/SSL_get_wbio.3 ln -sf SSL_get_session.3 $(DESTDIR)$(mandir)/man3/SSL_get0_session.3 ln -sf SSL_get_session.3 $(DESTDIR)$(mandir)/man3/SSL_get1_session.3 ln -sf SSL_library_init.3 $(DESTDIR)$(mandir)/man3/OpenSSL_add_ssl_algorithms.3 ln -sf SSL_library_init.3 $(DESTDIR)$(mandir)/man3/SSLeay_add_ssl_algorithms.3 ln -sf SSL_rstate_string.3 $(DESTDIR)$(mandir)/man3/SSL_rstate_string_long.3 | < > > > > > > > > > > > > > > > > > > > > > > > > | 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 | ln -sf SSL_get_psk_identity.3 $(DESTDIR)$(mandir)/man3/SSL_get_psk_identity_hint.3 ln -sf SSL_get_rbio.3 $(DESTDIR)$(mandir)/man3/SSL_get_wbio.3 ln -sf SSL_get_session.3 $(DESTDIR)$(mandir)/man3/SSL_get0_session.3 ln -sf SSL_get_session.3 $(DESTDIR)$(mandir)/man3/SSL_get1_session.3 ln -sf SSL_library_init.3 $(DESTDIR)$(mandir)/man3/OpenSSL_add_ssl_algorithms.3 ln -sf SSL_library_init.3 $(DESTDIR)$(mandir)/man3/SSLeay_add_ssl_algorithms.3 ln -sf SSL_rstate_string.3 $(DESTDIR)$(mandir)/man3/SSL_rstate_string_long.3 ln -sf SSL_set_connect_state.3 $(DESTDIR)$(mandir)/man3/SSL_set_accept_state.3 ln -sf SSL_set_fd.3 $(DESTDIR)$(mandir)/man3/SSL_set_rfd.3 ln -sf SSL_set_fd.3 $(DESTDIR)$(mandir)/man3/SSL_set_wfd.3 ln -sf SSL_set_shutdown.3 $(DESTDIR)$(mandir)/man3/SSL_get_shutdown.3 ln -sf SSL_state_string.3 $(DESTDIR)$(mandir)/man3/SSL_state_string_long.3 ln -sf SSL_want.3 $(DESTDIR)$(mandir)/man3/SSL_want_nothing.3 ln -sf SSL_want.3 $(DESTDIR)$(mandir)/man3/SSL_want_read.3 ln -sf SSL_want.3 $(DESTDIR)$(mandir)/man3/SSL_want_write.3 ln -sf SSL_want.3 $(DESTDIR)$(mandir)/man3/SSL_want_x509_lookup.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/ERR_load_UI_strings.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_OpenSSL.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_add_error_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_add_info_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_add_input_boolean.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_add_input_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_add_user_data.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_add_verify_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_construct_prompt.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_ctrl.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_dup_error_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_dup_info_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_dup_input_boolean.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_dup_input_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_dup_verify_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_free.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_get0_result.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_get0_user_data.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_get_default_method.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_get_method.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_new_method.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_process.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_set_default_method.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_set_method.3 ln -sf X509_NAME_ENTRY_get_object.3 $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_create_by_NID.3 ln -sf X509_NAME_ENTRY_get_object.3 $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_create_by_OBJ.3 ln -sf X509_NAME_ENTRY_get_object.3 $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_create_by_txt.3 ln -sf X509_NAME_ENTRY_get_object.3 $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_get_data.3 ln -sf X509_NAME_ENTRY_get_object.3 $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_set_data.3 ln -sf X509_NAME_ENTRY_get_object.3 $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_set_object.3 ln -sf X509_NAME_add_entry_by_txt.3 $(DESTDIR)$(mandir)/man3/X509_NAME_add_entry.3 |
︙ | ︙ | |||
1255 1256 1257 1258 1259 1260 1261 | ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_get_flags.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set1_policies.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_depth.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_purpose.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_time.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_trust.3 ln -sf X509_new.3 $(DESTDIR)$(mandir)/man3/X509_free.3 | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 | ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_get_flags.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set1_policies.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_depth.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_purpose.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_time.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_trust.3 ln -sf X509_new.3 $(DESTDIR)$(mandir)/man3/X509_free.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_add_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_check_top.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_cmp_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_div_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_expand.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_expand2.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_fix_top.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_add_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_comba4.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_comba8.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_high.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_low_normal.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_low_recursive.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_normal.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_part_recursive.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_recursive.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_print.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_set_high.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_set_low.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_set_max.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_sqr_comba4.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_sqr_comba8.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_sqr_normal.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_sqr_recursive.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_sqr_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_sub_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_wexpand.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/mul.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/mul_add.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/sqr.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_dispatch.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_done.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_freereq.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_freesession.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_get_driverid.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_getreq.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_newsession.3 |
︙ | ︙ | |||
1314 1315 1316 1317 1318 1319 1320 | ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/ECPKParameters_print.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/ECPKParameters_print_fp.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_bio.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_fp.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_bio.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_fp.3 | < | | | | | | 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 | ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/ECPKParameters_print.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/ECPKParameters_print_fp.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_bio.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_fp.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_bio.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_fp.3 ln -sf d2i_PKCS8PrivateKey_bio.3 $(DESTDIR)$(mandir)/man3/d2i_PKCS8PrivateKey_fp.3 ln -sf d2i_PKCS8PrivateKey_bio.3 $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_bio.3 ln -sf d2i_PKCS8PrivateKey_bio.3 $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_fp.3 ln -sf d2i_PKCS8PrivateKey_bio.3 $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_nid_bio.3 ln -sf d2i_PKCS8PrivateKey_bio.3 $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_nid_fp.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/d2i_Netscape_RSA.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/d2i_RSAPrivateKey.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/d2i_RSA_PUBKEY.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/i2d_Netscape_RSA.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/i2d_RSAPrivateKey.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/i2d_RSAPublicKey.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/i2d_RSA_PUBKEY.3 |
︙ | ︙ | |||
1346 1347 1348 1349 1350 1351 1352 | ln -sf d2i_X509_NAME.3 $(DESTDIR)$(mandir)/man3/i2d_X509_NAME.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_bio.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_fp.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/i2d_X509_REQ.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_bio.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_fp.3 ln -sf d2i_X509_SIG.3 $(DESTDIR)$(mandir)/man3/i2d_X509_SIG.3 | < < < < < < < < < < < < | < < | < | < > > > > > > > > > > > > < < < < < < < < > > > > > > > | | | | | < | < < < < < < < | < < < < < | | < < | | | | < < < < < < | 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 | ln -sf d2i_X509_NAME.3 $(DESTDIR)$(mandir)/man3/i2d_X509_NAME.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_bio.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_fp.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/i2d_X509_REQ.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_bio.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_fp.3 ln -sf d2i_X509_SIG.3 $(DESTDIR)$(mandir)/man3/i2d_X509_SIG.3 ln -sf des_read_pw.3 $(DESTDIR)$(mandir)/man3/des_read_2passwords.3 ln -sf des_read_pw.3 $(DESTDIR)$(mandir)/man3/des_read_password.3 ln -sf des_read_pw.3 $(DESTDIR)$(mandir)/man3/des_read_pw_string.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_add.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_by_id.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_finish.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_get_first.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_get_last.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_get_next.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_get_prev.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_init.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_load_builtin_engines.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_remove.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/DECLARE_LHASH_OF.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/LHASH_COMP_FN_TYPE.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/LHASH_DOALL_ARG_FN_TYPE.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/LHASH_DOALL_FN_TYPE.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/LHASH_HASH_FN_TYPE.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_delete.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_doall.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_doall_arg.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_error.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_free.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_insert.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_retrieve.3 ln -sf lh_stats.3 $(DESTDIR)$(mandir)/man3/lh_node_stats.3 ln -sf lh_stats.3 $(DESTDIR)$(mandir)/man3/lh_node_stats_bio.3 ln -sf lh_stats.3 $(DESTDIR)$(mandir)/man3/lh_node_usage_stats.3 ln -sf lh_stats.3 $(DESTDIR)$(mandir)/man3/lh_node_usage_stats_bio.3 ln -sf lh_stats.3 $(DESTDIR)$(mandir)/man3/lh_stats_bio.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_accept_fds.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_accept_socket.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_client.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_close.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_clear_keys.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_free.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_insecure_noverifycert.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_insecure_noverifyname.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_insecure_noverifytime.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_new.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_parse_protocols.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_prefer_ciphers_client.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_prefer_ciphers_server.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_ca_file.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_ca_mem.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_ca_path.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_cert_file.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_cert_mem.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_ciphers.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_dheparams.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_ecdhecurve.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_key_file.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_key_mem.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_protocols.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_verify_depth.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_verify.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_verify_client.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_verify_client_optional.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_configure.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_conn_cipher.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_conn_version.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_connect.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_connect_fds.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_connect_servername.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_connect_socket.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_error.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_free.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_handshake.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_load_file.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_contains_name.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_hash.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_issuer.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_notafter.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_notbefore.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_provided.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_subject.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_read.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_reset.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_server.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_write.3 uninstall-local: -rm -f $(DESTDIR)$(mandir)/man3/ASN1_OBJECT_free.3 -rm -f $(DESTDIR)$(mandir)/man3/ASN1_STRING_cmp.3 -rm -f $(DESTDIR)$(mandir)/man3/ASN1_STRING_data.3 -rm -f $(DESTDIR)$(mandir)/man3/ASN1_STRING_dup.3 -rm -f $(DESTDIR)$(mandir)/man3/ASN1_STRING_length_set.3 |
︙ | ︙ | |||
1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 | -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_get_ex_data.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cmp.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cpy.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_current.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_get_callback.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_hash.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_callback.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_add.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_add_lock.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_destroy_dynlockid.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_get_new_dynlockid.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_lock.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_num_locks.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_r_lock.3 | > > | 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 | -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_get_ex_data.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cmp.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cpy.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_current.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_get_callback.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_hash.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_callback.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_numeric.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_pointer.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_add.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_add_lock.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_destroy_dynlockid.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_get_new_dynlockid.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_lock.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_num_locks.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_r_lock.3 |
︙ | ︙ | |||
1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 | -rm -f $(DESTDIR)$(mandir)/man3/DSA_get_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_get_default_openssl_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_new_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_set_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_set_default_openssl_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_sign_setup.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_verify.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GF2m_simple_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_mont_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nist_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nistp224_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nistp256_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nistp521_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_METHOD_get_field_type.3 | > > > > > > > > > > > > > > > > > > | 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 | -rm -f $(DESTDIR)$(mandir)/man3/DSA_get_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_get_default_openssl_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_new_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_set_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_set_default_openssl_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_sign_setup.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_verify.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_OpenSSL.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_SIG_free.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_do_sign.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_do_sign_ex.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_do_verify.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_get_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_get_ex_data.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_get_ex_new_index.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_set_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_set_ex_data.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_set_method.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_sign.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_sign_ex.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_sign_setup.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_size.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_verify.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_ECDSA_SIG.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECDSA_SIG.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GF2m_simple_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_mont_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nist_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nistp224_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nistp256_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nistp521_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_METHOD_get_field_type.3 |
︙ | ︙ | |||
1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_load_error_strings.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_PACK.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_get_next_error_library.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_print_errors_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_add_error_data.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_remove_thread_state.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_pop_to_mark.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestFinal.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestFinal_ex.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestInit_ex.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestUpdate.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_MAX_MD_SIZE.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_block_size.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_cleanup.3 | > > > > > > > > > > > | 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_load_error_strings.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_PACK.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_get_next_error_library.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_print_errors_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_add_error_data.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_remove_thread_state.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_pop_to_mark.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_CTX_cleanup.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_CTX_open.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_CTX_seal.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_key_length.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_max_overhead.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_max_tag_len.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_nonce_length.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_aead_aes_128_gcm.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_aead_aes_256_gcm.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_aead_chacha20_poly1305.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_aead_chacha20_poly1305_ietf.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestFinal.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestFinal_ex.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestInit_ex.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestUpdate.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_MAX_MD_SIZE.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_block_size.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_cleanup.3 |
︙ | ︙ | |||
1901 1902 1903 1904 1905 1906 1907 | -rm -f $(DESTDIR)$(mandir)/man3/EVP_get_digestbyname.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_get_digestbynid.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_get_digestbyobj.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_md2.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_md5.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_md_null.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_ripemd160.3 | < | 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 | -rm -f $(DESTDIR)$(mandir)/man3/EVP_get_digestbyname.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_get_digestbynid.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_get_digestbyobj.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_md2.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_md5.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_md_null.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_ripemd160.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_sha1.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_sha224.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_sha256.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_sha384.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_sha512.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestSignFinal.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestSignUpdate.3 |
︙ | ︙ | |||
2008 2009 2010 2011 2012 2013 2014 | -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_dsa_paramgen_bits.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_ec_paramgen_curve_nid.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_keygen_pubexp.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_padding.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_pss_saltlen.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_rsa_keygen_bits.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_signature_md.3 | < < | 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 | -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_dsa_paramgen_bits.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_ec_paramgen_curve_nid.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_keygen_pubexp.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_padding.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_pss_saltlen.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_rsa_keygen_bits.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_signature_md.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_get_default_digest_nid.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_dup.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_free.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_new_id.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_cmp_parameters.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_copy_parameters.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_missing_parameters.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_decrypt_init.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_derive_init.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_derive_set_peer.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_encrypt_init.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_get_default_digest_nid.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_get_app_data.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_get_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_get_keygen_info.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_app_data.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_keygen_init.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_paramgen.3 |
︙ | ︙ | |||
2192 2193 2194 2195 2196 2197 2198 | -rm -f $(DESTDIR)$(mandir)/man3/DSA_print.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/DSAparams_print.3 -rm -f $(DESTDIR)$(mandir)/man3/DSAparams_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_public_decrypt.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_private_decrypt.3 | < | 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 | -rm -f $(DESTDIR)$(mandir)/man3/DSA_print.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/DSAparams_print.3 -rm -f $(DESTDIR)$(mandir)/man3/DSAparams_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_public_decrypt.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_private_decrypt.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_PKCS1_SSLeay.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_flags.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_get_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_get_default_openssl_method.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_get_method.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_new_method.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_null_method.3 |
︙ | ︙ | |||
2252 2253 2254 2255 2256 2257 2258 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_misses.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_timeouts.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_cache_size.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_get_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_new_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_remove_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_set_new_cb.3 | < | 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_misses.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_timeouts.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_cache_size.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_get_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_new_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_remove_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_set_new_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_set_remove_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/get_session_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/new_session_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/remove_session_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_get_cert_store.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_cipher_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_add_client_CA.3 |
︙ | ︙ | |||
2278 2279 2280 2281 2282 2283 2284 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_get_max_cert_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_max_cert_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_max_cert_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_get_mode.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_mode.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_mode.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_set_msg_callback_arg.3 | < | 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_get_max_cert_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_max_cert_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_max_cert_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_get_mode.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_mode.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_mode.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_set_msg_callback_arg.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_msg_callback.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_msg_callback_arg.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_clear_options.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_get_options.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_clear_options.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_options.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_secure_renegotiation_support.3 |
︙ | ︙ | |||
2362 2363 2364 2365 2366 2367 2368 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_psk_identity_hint.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_wbio.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get0_session.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get1_session.3 -rm -f $(DESTDIR)$(mandir)/man3/OpenSSL_add_ssl_algorithms.3 -rm -f $(DESTDIR)$(mandir)/man3/SSLeay_add_ssl_algorithms.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_rstate_string_long.3 | < > > > > > > > > > > > > > > > > > > > > > > > > | 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_psk_identity_hint.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_wbio.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get0_session.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get1_session.3 -rm -f $(DESTDIR)$(mandir)/man3/OpenSSL_add_ssl_algorithms.3 -rm -f $(DESTDIR)$(mandir)/man3/SSLeay_add_ssl_algorithms.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_rstate_string_long.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_accept_state.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_rfd.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_wfd.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_shutdown.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_state_string_long.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_want_nothing.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_want_read.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_want_write.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_want_x509_lookup.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_load_UI_strings.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_OpenSSL.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_add_error_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_add_info_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_add_input_boolean.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_add_input_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_add_user_data.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_add_verify_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_construct_prompt.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_ctrl.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_dup_error_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_dup_info_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_dup_input_boolean.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_dup_input_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_dup_verify_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_free.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_get0_result.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_get0_user_data.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_get_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_get_method.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_new_method.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_process.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_set_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_set_method.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_create_by_NID.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_create_by_OBJ.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_create_by_txt.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_get_data.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_set_data.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_set_object.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_add_entry.3 |
︙ | ︙ | |||
2422 2423 2424 2425 2426 2427 2428 | -rm -f $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_time.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_trust.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_free.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_add_words.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_check_top.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_cmp_words.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_div_words.3 | < | 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 | -rm -f $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_time.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_trust.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_free.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_add_words.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_check_top.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_cmp_words.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_div_words.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_expand.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_expand2.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_fix_top.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_mul_add_words.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_mul_comba4.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_mul_comba8.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_mul_high.3 |
︙ | ︙ | |||
2477 2478 2479 2480 2481 2482 2483 | -rm -f $(DESTDIR)$(mandir)/man3/ECPKParameters_print.3 -rm -f $(DESTDIR)$(mandir)/man3/ECPKParameters_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_fp.3 | < | 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 | -rm -f $(DESTDIR)$(mandir)/man3/ECPKParameters_print.3 -rm -f $(DESTDIR)$(mandir)/man3/ECPKParameters_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_PKCS8PrivateKey_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_nid_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_nid_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_Netscape_RSA.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_RSAPrivateKey.3 |
︙ | ︙ | |||
2509 2510 2511 2512 2513 2514 2515 | -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_NAME.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_REQ.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_SIG.3 | | | | < < < < < < < < < < < < < < < < | | | | | | > | > > > > > > > > > > | | | | | < | < < < < < < < | < < < < < | < < < < < < | | | | | < < | 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 | -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_NAME.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_REQ.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_SIG.3 -rm -f $(DESTDIR)$(mandir)/man3/des_read_2passwords.3 -rm -f $(DESTDIR)$(mandir)/man3/des_read_password.3 -rm -f $(DESTDIR)$(mandir)/man3/des_read_pw_string.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_add.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_by_id.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_finish.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_get_first.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_get_last.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_get_next.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_get_prev.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_init.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_load_builtin_engines.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_remove.3 -rm -f $(DESTDIR)$(mandir)/man3/DECLARE_LHASH_OF.3 -rm -f $(DESTDIR)$(mandir)/man3/LHASH_COMP_FN_TYPE.3 -rm -f $(DESTDIR)$(mandir)/man3/LHASH_DOALL_ARG_FN_TYPE.3 -rm -f $(DESTDIR)$(mandir)/man3/LHASH_DOALL_FN_TYPE.3 -rm -f $(DESTDIR)$(mandir)/man3/LHASH_HASH_FN_TYPE.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_delete.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_doall.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_doall_arg.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_error.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_free.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_insert.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_retrieve.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_node_stats.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_node_stats_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_node_usage_stats.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_node_usage_stats_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_stats_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_accept_fds.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_accept_socket.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_client.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_close.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_clear_keys.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_free.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_insecure_noverifycert.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_insecure_noverifyname.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_insecure_noverifytime.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_new.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_parse_protocols.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_prefer_ciphers_client.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_prefer_ciphers_server.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_ca_file.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_ca_mem.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_ca_path.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_cert_file.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_cert_mem.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_ciphers.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_dheparams.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_ecdhecurve.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_key_file.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_key_mem.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_protocols.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_verify_depth.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_verify.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_verify_client.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_verify_client_optional.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_configure.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_conn_cipher.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_conn_version.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_connect.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_connect_fds.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_connect_servername.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_connect_socket.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_error.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_free.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_handshake.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_load_file.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_contains_name.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_hash.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_issuer.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_notafter.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_notbefore.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_provided.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_subject.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_read.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_reset.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_server.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_write.3 |
Changes to jni/libressl/man/Makefile.in.
︙ | ︙ | |||
144 145 146 147 148 149 150 | sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } | | | < | 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man3dir = $(mandir)/man3 am__installdirs = "$(DESTDIR)$(man3dir)" NROFF = nroff MANS = $(dist_man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ |
︙ | ︙ | |||
276 277 278 279 280 281 282 | srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = CMakeLists.txt | | | 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 | srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = CMakeLists.txt dist_man_MANS = tls_init.3 BIO_f_ssl.3 SSL_CIPHER_get_name.3 \ SSL_COMP_add_compression_method.3 \ SSL_CTX_add_extra_chain_cert.3 SSL_CTX_add_session.3 \ SSL_CTX_ctrl.3 SSL_CTX_flush_sessions.3 SSL_CTX_free.3 \ SSL_CTX_get_ex_new_index.3 SSL_CTX_get_verify_mode.3 \ SSL_CTX_load_verify_locations.3 SSL_CTX_new.3 \ SSL_CTX_sess_number.3 SSL_CTX_sess_set_cache_size.3 \ SSL_CTX_sess_set_get_cb.3 SSL_CTX_sessions.3 \ |
︙ | ︙ | |||
324 325 326 327 328 329 330 | BIO_s_null.3 BIO_s_socket.3 BIO_set_callback.3 \ BIO_should_retry.3 BN_BLINDING_new.3 BN_CTX_new.3 \ BN_CTX_start.3 BN_add.3 BN_add_word.3 BN_bn2bin.3 BN_cmp.3 \ BN_copy.3 BN_generate_prime.3 BN_mod_inverse.3 \ BN_mod_mul_montgomery.3 BN_mod_mul_reciprocal.3 BN_new.3 \ BN_num_bytes.3 BN_rand.3 BN_set_bit.3 BN_swap.3 BN_zero.3 \ BUF_MEM_new.3 CMS_add0_cert.3 CMS_add1_recipient_cert.3 \ | | | | | | > > | | | | | | | | | | | | | | | | | | | | | | < | | | 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 | BIO_s_null.3 BIO_s_socket.3 BIO_set_callback.3 \ BIO_should_retry.3 BN_BLINDING_new.3 BN_CTX_new.3 \ BN_CTX_start.3 BN_add.3 BN_add_word.3 BN_bn2bin.3 BN_cmp.3 \ BN_copy.3 BN_generate_prime.3 BN_mod_inverse.3 \ BN_mod_mul_montgomery.3 BN_mod_mul_reciprocal.3 BN_new.3 \ BN_num_bytes.3 BN_rand.3 BN_set_bit.3 BN_swap.3 BN_zero.3 \ BUF_MEM_new.3 CMS_add0_cert.3 CMS_add1_recipient_cert.3 \ CMS_add1_signer.3 CMS_compress.3 CMS_decrypt.3 CMS_encrypt.3 \ CMS_final.3 CMS_get0_RecipientInfos.3 CMS_get0_SignerInfos.3 \ CMS_get0_type.3 CMS_get1_ReceiptRequest.3 CMS_sign.3 \ CMS_sign_receipt.3 CMS_uncompress.3 CMS_verify.3 \ CMS_verify_receipt.3 CONF_modules_free.3 \ CONF_modules_load_file.3 CRYPTO_set_ex_data.3 \ CRYPTO_set_locking_callback.3 ECDSA_SIG_new.3 \ EVP_AEAD_CTX_init.3 UI_new.3 bn_dump.3 crypto.3 \ d2i_PKCS8PrivateKey_bio.3 des_read_pw.3 lh_new.3 DES_set_key.3 \ DH_generate_key.3 DH_generate_parameters.3 \ DH_get_ex_new_index.3 DH_new.3 DH_set_method.3 DH_size.3 \ DSA_SIG_new.3 DSA_do_sign.3 DSA_dup_DH.3 DSA_generate_key.3 \ DSA_generate_parameters.3 DSA_get_ex_new_index.3 DSA_new.3 \ DSA_set_method.3 DSA_sign.3 DSA_size.3 EC_GFp_simple_method.3 \ EC_GROUP_copy.3 EC_GROUP_new.3 EC_KEY_new.3 EC_POINT_add.3 \ EC_POINT_new.3 ERR.3 ERR_GET_LIB.3 ERR_clear_error.3 \ ERR_error_string.3 ERR_get_error.3 ERR_load_crypto_strings.3 \ ERR_load_strings.3 ERR_print_errors.3 ERR_put_error.3 \ ERR_remove_state.3 ERR_set_mark.3 EVP_BytesToKey.3 \ EVP_DigestInit.3 EVP_DigestSignInit.3 EVP_DigestVerifyInit.3 \ EVP_EncryptInit.3 EVP_OpenInit.3 EVP_PKEY_CTX_ctrl.3 \ EVP_PKEY_CTX_new.3 EVP_PKEY_cmp.3 EVP_PKEY_decrypt.3 \ EVP_PKEY_derive.3 EVP_PKEY_encrypt.3 \ EVP_PKEY_get_default_digest.3 EVP_PKEY_keygen.3 EVP_PKEY_new.3 \ EVP_PKEY_print_private.3 EVP_PKEY_set1_RSA.3 EVP_PKEY_sign.3 \ EVP_PKEY_verify.3 EVP_PKEY_verify_recover.3 EVP_SealInit.3 \ EVP_SignInit.3 EVP_VerifyInit.3 HMAC.3 MD5.3 OBJ_nid2obj.3 \ OPENSSL_VERSION_NUMBER.3 OPENSSL_config.3 \ OPENSSL_load_builtin_modules.3 OpenSSL_add_all_algorithms.3 \ PEM_read_bio_PrivateKey.3 PEM_write_bio_CMS_stream.3 \ PEM_write_bio_PKCS7_stream.3 PKCS12_create.3 PKCS12_parse.3 \ PKCS5_PBKDF2_HMAC.3 PKCS7_decrypt.3 PKCS7_encrypt.3 \ PKCS7_sign.3 PKCS7_sign_add_signer.3 PKCS7_verify.3 RAND.3 \ RAND_add.3 RAND_bytes.3 RAND_cleanup.3 RAND_load_file.3 \ RAND_set_rand_method.3 RC4.3 RIPEMD160.3 RSA_blinding_on.3 \ RSA_check_key.3 RSA_generate_key.3 RSA_get_ex_new_index.3 \ RSA_new.3 RSA_padding_add_PKCS1_type_1.3 RSA_print.3 \ RSA_private_encrypt.3 RSA_public_encrypt.3 RSA_set_method.3 \ RSA_sign.3 RSA_sign_ASN1_OCTET_STRING.3 RSA_size.3 SHA1.3 \ SMIME_read_CMS.3 SMIME_read_PKCS7.3 SMIME_write_CMS.3 \ SMIME_write_PKCS7.3 X509_NAME_ENTRY_get_object.3 \ X509_NAME_add_entry_by_txt.3 X509_NAME_get_index_by_NID.3 \ X509_NAME_print_ex.3 X509_STORE_CTX_get_error.3 \ X509_STORE_CTX_get_ex_new_index.3 X509_STORE_CTX_new.3 \ X509_STORE_CTX_set_verify_cb.3 X509_STORE_set_verify_cb_func.3 \ X509_VERIFY_PARAM_set_flags.3 X509_new.3 X509_verify_cert.3 \ bn.3 d2i_ASN1_OBJECT.3 d2i_DHparams.3 d2i_DSAPublicKey.3 \ d2i_ECPKParameters.3 d2i_RSAPublicKey.3 d2i_X509.3 \ d2i_X509_ALGOR.3 d2i_X509_CRL.3 d2i_X509_NAME.3 d2i_X509_REQ.3 \ d2i_X509_SIG.3 dh.3 dsa.3 ec.3 engine.3 evp.3 \ i2d_CMS_bio_stream.3 i2d_PKCS7_bio_stream.3 lh_stats.3 rsa.3 \ x509.3 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ |
︙ | ︙ | |||
413 414 415 416 417 418 419 | $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 413 414 415 416 417 418 419 420 421 422 423 424 425 426 | $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man3: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man3dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ |
︙ | ︙ | |||
540 541 542 543 544 545 546 | || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: | | | 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 | || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man3dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am |
︙ | ︙ | |||
610 611 612 613 614 615 616 | install-html-am: install-info: install-info-am install-info-am: | | | 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 | install-html-am: install-info: install-info-am install-info-am: install-man: install-man3 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am |
︙ | ︙ | |||
640 641 642 643 644 645 646 | ps: ps-am ps-am: uninstall-am: uninstall-local uninstall-man | | | | | | | | < | 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 | ps: ps-am ps-am: uninstall-am: uninstall-local uninstall-man uninstall-man: uninstall-man3 .MAKE: install-am install-data-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-hook install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man3 install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-local uninstall-man uninstall-man3 .PRECIOUS: Makefile install-data-hook: ln -sf ASN1_OBJECT_new.3 $(DESTDIR)$(mandir)/man3/ASN1_OBJECT_free.3 ln -sf ASN1_STRING_length.3 $(DESTDIR)$(mandir)/man3/ASN1_STRING_cmp.3 ln -sf ASN1_STRING_length.3 $(DESTDIR)$(mandir)/man3/ASN1_STRING_data.3 |
︙ | ︙ | |||
892 893 894 895 896 897 898 899 900 901 902 903 904 905 | ln -sf CRYPTO_set_ex_data.3 $(DESTDIR)$(mandir)/man3/CRYPTO_get_ex_data.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cmp.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cpy.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_current.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_get_callback.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_hash.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_callback.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_add.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_add_lock.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_destroy_dynlockid.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_get_new_dynlockid.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_lock.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_num_locks.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_r_lock.3 | > > | 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 | ln -sf CRYPTO_set_ex_data.3 $(DESTDIR)$(mandir)/man3/CRYPTO_get_ex_data.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cmp.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cpy.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_current.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_get_callback.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_hash.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_callback.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_numeric.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_pointer.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_add.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_add_lock.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_destroy_dynlockid.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_get_new_dynlockid.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_lock.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_num_locks.3 ln -sf CRYPTO_set_locking_callback.3 $(DESTDIR)$(mandir)/man3/CRYPTO_r_lock.3 |
︙ | ︙ | |||
963 964 965 966 967 968 969 970 971 972 973 974 975 976 | ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_get_default_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_get_default_openssl_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_new_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_set_default_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_set_default_openssl_method.3 ln -sf DSA_sign.3 $(DESTDIR)$(mandir)/man3/DSA_sign_setup.3 ln -sf DSA_sign.3 $(DESTDIR)$(mandir)/man3/DSA_verify.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GF2m_simple_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_mont_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nist_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nistp224_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nistp256_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nistp521_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_METHOD_get_field_type.3 | > > > > > > > > > > > > > > > > > > | 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 | ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_get_default_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_get_default_openssl_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_new_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_set_default_method.3 ln -sf DSA_set_method.3 $(DESTDIR)$(mandir)/man3/DSA_set_default_openssl_method.3 ln -sf DSA_sign.3 $(DESTDIR)$(mandir)/man3/DSA_sign_setup.3 ln -sf DSA_sign.3 $(DESTDIR)$(mandir)/man3/DSA_verify.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_OpenSSL.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_SIG_free.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_do_sign.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_do_sign_ex.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_do_verify.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_get_default_method.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_get_ex_data.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_get_ex_new_index.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_set_default_method.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_set_ex_data.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_set_method.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_sign.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_sign_ex.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_sign_setup.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_size.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/ECDSA_verify.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/d2i_ECDSA_SIG.3 ln -sf ECDSA_SIG_new.3 $(DESTDIR)$(mandir)/man3/i2d_ECDSA_SIG.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GF2m_simple_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_mont_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nist_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nistp224_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nistp256_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_GFp_nistp521_method.3 ln -sf EC_GFp_simple_method.3 $(DESTDIR)$(mandir)/man3/EC_METHOD_get_field_type.3 |
︙ | ︙ | |||
1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 | ln -sf ERR_load_crypto_strings.3 $(DESTDIR)$(mandir)/man3/SSL_load_error_strings.3 ln -sf ERR_load_strings.3 $(DESTDIR)$(mandir)/man3/ERR_PACK.3 ln -sf ERR_load_strings.3 $(DESTDIR)$(mandir)/man3/ERR_get_next_error_library.3 ln -sf ERR_print_errors.3 $(DESTDIR)$(mandir)/man3/ERR_print_errors_fp.3 ln -sf ERR_put_error.3 $(DESTDIR)$(mandir)/man3/ERR_add_error_data.3 ln -sf ERR_remove_state.3 $(DESTDIR)$(mandir)/man3/ERR_remove_thread_state.3 ln -sf ERR_set_mark.3 $(DESTDIR)$(mandir)/man3/ERR_pop_to_mark.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestFinal.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestFinal_ex.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestInit_ex.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestUpdate.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_MAX_MD_SIZE.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_block_size.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_cleanup.3 | > > > > > > > > > > > | 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 | ln -sf ERR_load_crypto_strings.3 $(DESTDIR)$(mandir)/man3/SSL_load_error_strings.3 ln -sf ERR_load_strings.3 $(DESTDIR)$(mandir)/man3/ERR_PACK.3 ln -sf ERR_load_strings.3 $(DESTDIR)$(mandir)/man3/ERR_get_next_error_library.3 ln -sf ERR_print_errors.3 $(DESTDIR)$(mandir)/man3/ERR_print_errors_fp.3 ln -sf ERR_put_error.3 $(DESTDIR)$(mandir)/man3/ERR_add_error_data.3 ln -sf ERR_remove_state.3 $(DESTDIR)$(mandir)/man3/ERR_remove_thread_state.3 ln -sf ERR_set_mark.3 $(DESTDIR)$(mandir)/man3/ERR_pop_to_mark.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_CTX_cleanup.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_CTX_open.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_CTX_seal.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_key_length.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_max_overhead.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_max_tag_len.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_AEAD_nonce_length.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_aead_aes_128_gcm.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_aead_aes_256_gcm.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_aead_chacha20_poly1305.3 ln -sf EVP_AEAD_CTX_init.3 $(DESTDIR)$(mandir)/man3/EVP_aead_chacha20_poly1305_ietf.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestFinal.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestFinal_ex.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestInit_ex.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestUpdate.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_MAX_MD_SIZE.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_block_size.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_cleanup.3 |
︙ | ︙ | |||
1108 1109 1110 1111 1112 1113 1114 | ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_get_digestbyname.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_get_digestbynid.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_get_digestbyobj.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_md2.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_md5.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_md_null.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_ripemd160.3 | < | 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 | ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_get_digestbyname.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_get_digestbynid.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_get_digestbyobj.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_md2.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_md5.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_md_null.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_ripemd160.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_sha1.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_sha224.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_sha256.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_sha384.3 ln -sf EVP_DigestInit.3 $(DESTDIR)$(mandir)/man3/EVP_sha512.3 ln -sf EVP_DigestSignInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestSignFinal.3 ln -sf EVP_DigestSignInit.3 $(DESTDIR)$(mandir)/man3/EVP_DigestSignUpdate.3 |
︙ | ︙ | |||
1215 1216 1217 1218 1219 1220 1221 | ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_dsa_paramgen_bits.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_ec_paramgen_curve_nid.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_keygen_pubexp.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_padding.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_pss_saltlen.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_rsa_keygen_bits.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_signature_md.3 | < < | 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 | ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_dsa_paramgen_bits.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_ec_paramgen_curve_nid.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_keygen_pubexp.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_padding.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_pss_saltlen.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_rsa_keygen_bits.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_signature_md.3 ln -sf EVP_PKEY_CTX_ctrl.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_get_default_digest_nid.3 ln -sf EVP_PKEY_CTX_new.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_dup.3 ln -sf EVP_PKEY_CTX_new.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_free.3 ln -sf EVP_PKEY_CTX_new.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_new_id.3 ln -sf EVP_PKEY_cmp.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_cmp_parameters.3 ln -sf EVP_PKEY_cmp.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_copy_parameters.3 ln -sf EVP_PKEY_cmp.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_missing_parameters.3 ln -sf EVP_PKEY_decrypt.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_decrypt_init.3 ln -sf EVP_PKEY_derive.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_derive_init.3 ln -sf EVP_PKEY_derive.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_derive_set_peer.3 ln -sf EVP_PKEY_encrypt.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_encrypt_init.3 ln -sf EVP_PKEY_get_default_digest.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_get_default_digest_nid.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_get_app_data.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_get_cb.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_get_keygen_info.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_app_data.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_cb.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_keygen_init.3 ln -sf EVP_PKEY_keygen.3 $(DESTDIR)$(mandir)/man3/EVP_PKEY_paramgen.3 |
︙ | ︙ | |||
1399 1400 1401 1402 1403 1404 1405 | ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSA_print.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSA_print_fp.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSAparams_print.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSAparams_print_fp.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/RSA_print_fp.3 ln -sf RSA_private_encrypt.3 $(DESTDIR)$(mandir)/man3/RSA_public_decrypt.3 ln -sf RSA_public_encrypt.3 $(DESTDIR)$(mandir)/man3/RSA_private_decrypt.3 | < | 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 | ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSA_print.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSA_print_fp.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSAparams_print.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/DSAparams_print_fp.3 ln -sf RSA_print.3 $(DESTDIR)$(mandir)/man3/RSA_print_fp.3 ln -sf RSA_private_encrypt.3 $(DESTDIR)$(mandir)/man3/RSA_public_decrypt.3 ln -sf RSA_public_encrypt.3 $(DESTDIR)$(mandir)/man3/RSA_private_decrypt.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_PKCS1_SSLeay.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_flags.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_get_default_method.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_get_default_openssl_method.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_get_method.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_new_method.3 ln -sf RSA_set_method.3 $(DESTDIR)$(mandir)/man3/RSA_null_method.3 |
︙ | ︙ | |||
1459 1460 1461 1462 1463 1464 1465 | ln -sf SSL_CTX_sess_number.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_misses.3 ln -sf SSL_CTX_sess_number.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_timeouts.3 ln -sf SSL_CTX_sess_set_cache_size.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_cache_size.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_get_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_new_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_remove_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_set_new_cb.3 | < | 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 | ln -sf SSL_CTX_sess_number.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_misses.3 ln -sf SSL_CTX_sess_number.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_timeouts.3 ln -sf SSL_CTX_sess_set_cache_size.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_cache_size.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_get_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_new_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_remove_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_set_new_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_set_remove_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/get_session_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/new_session_cb.3 ln -sf SSL_CTX_sess_set_get_cb.3 $(DESTDIR)$(mandir)/man3/remove_session_cb.3 ln -sf SSL_CTX_set_cert_store.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_get_cert_store.3 ln -sf SSL_CTX_set_cipher_list.3 $(DESTDIR)$(mandir)/man3/SSL_set_cipher_list.3 ln -sf SSL_CTX_set_client_CA_list.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_add_client_CA.3 |
︙ | ︙ | |||
1485 1486 1487 1488 1489 1490 1491 | ln -sf SSL_CTX_set_max_cert_list.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_get_max_cert_list.3 ln -sf SSL_CTX_set_max_cert_list.3 $(DESTDIR)$(mandir)/man3/SSL_get_max_cert_list.3 ln -sf SSL_CTX_set_max_cert_list.3 $(DESTDIR)$(mandir)/man3/SSL_set_max_cert_list.3 ln -sf SSL_CTX_set_mode.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_get_mode.3 ln -sf SSL_CTX_set_mode.3 $(DESTDIR)$(mandir)/man3/SSL_get_mode.3 ln -sf SSL_CTX_set_mode.3 $(DESTDIR)$(mandir)/man3/SSL_set_mode.3 ln -sf SSL_CTX_set_msg_callback.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_set_msg_callback_arg.3 | < | 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 | ln -sf SSL_CTX_set_max_cert_list.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_get_max_cert_list.3 ln -sf SSL_CTX_set_max_cert_list.3 $(DESTDIR)$(mandir)/man3/SSL_get_max_cert_list.3 ln -sf SSL_CTX_set_max_cert_list.3 $(DESTDIR)$(mandir)/man3/SSL_set_max_cert_list.3 ln -sf SSL_CTX_set_mode.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_get_mode.3 ln -sf SSL_CTX_set_mode.3 $(DESTDIR)$(mandir)/man3/SSL_get_mode.3 ln -sf SSL_CTX_set_mode.3 $(DESTDIR)$(mandir)/man3/SSL_set_mode.3 ln -sf SSL_CTX_set_msg_callback.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_set_msg_callback_arg.3 ln -sf SSL_CTX_set_msg_callback.3 $(DESTDIR)$(mandir)/man3/SSL_set_msg_callback.3 ln -sf SSL_CTX_set_msg_callback.3 $(DESTDIR)$(mandir)/man3/SSL_set_msg_callback_arg.3 ln -sf SSL_CTX_set_options.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_clear_options.3 ln -sf SSL_CTX_set_options.3 $(DESTDIR)$(mandir)/man3/SSL_CTX_get_options.3 ln -sf SSL_CTX_set_options.3 $(DESTDIR)$(mandir)/man3/SSL_clear_options.3 ln -sf SSL_CTX_set_options.3 $(DESTDIR)$(mandir)/man3/SSL_get_options.3 ln -sf SSL_CTX_set_options.3 $(DESTDIR)$(mandir)/man3/SSL_get_secure_renegotiation_support.3 |
︙ | ︙ | |||
1569 1570 1571 1572 1573 1574 1575 | ln -sf SSL_get_psk_identity.3 $(DESTDIR)$(mandir)/man3/SSL_get_psk_identity_hint.3 ln -sf SSL_get_rbio.3 $(DESTDIR)$(mandir)/man3/SSL_get_wbio.3 ln -sf SSL_get_session.3 $(DESTDIR)$(mandir)/man3/SSL_get0_session.3 ln -sf SSL_get_session.3 $(DESTDIR)$(mandir)/man3/SSL_get1_session.3 ln -sf SSL_library_init.3 $(DESTDIR)$(mandir)/man3/OpenSSL_add_ssl_algorithms.3 ln -sf SSL_library_init.3 $(DESTDIR)$(mandir)/man3/SSLeay_add_ssl_algorithms.3 ln -sf SSL_rstate_string.3 $(DESTDIR)$(mandir)/man3/SSL_rstate_string_long.3 | < > > > > > > > > > > > > > > > > > > > > > > > > | 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 | ln -sf SSL_get_psk_identity.3 $(DESTDIR)$(mandir)/man3/SSL_get_psk_identity_hint.3 ln -sf SSL_get_rbio.3 $(DESTDIR)$(mandir)/man3/SSL_get_wbio.3 ln -sf SSL_get_session.3 $(DESTDIR)$(mandir)/man3/SSL_get0_session.3 ln -sf SSL_get_session.3 $(DESTDIR)$(mandir)/man3/SSL_get1_session.3 ln -sf SSL_library_init.3 $(DESTDIR)$(mandir)/man3/OpenSSL_add_ssl_algorithms.3 ln -sf SSL_library_init.3 $(DESTDIR)$(mandir)/man3/SSLeay_add_ssl_algorithms.3 ln -sf SSL_rstate_string.3 $(DESTDIR)$(mandir)/man3/SSL_rstate_string_long.3 ln -sf SSL_set_connect_state.3 $(DESTDIR)$(mandir)/man3/SSL_set_accept_state.3 ln -sf SSL_set_fd.3 $(DESTDIR)$(mandir)/man3/SSL_set_rfd.3 ln -sf SSL_set_fd.3 $(DESTDIR)$(mandir)/man3/SSL_set_wfd.3 ln -sf SSL_set_shutdown.3 $(DESTDIR)$(mandir)/man3/SSL_get_shutdown.3 ln -sf SSL_state_string.3 $(DESTDIR)$(mandir)/man3/SSL_state_string_long.3 ln -sf SSL_want.3 $(DESTDIR)$(mandir)/man3/SSL_want_nothing.3 ln -sf SSL_want.3 $(DESTDIR)$(mandir)/man3/SSL_want_read.3 ln -sf SSL_want.3 $(DESTDIR)$(mandir)/man3/SSL_want_write.3 ln -sf SSL_want.3 $(DESTDIR)$(mandir)/man3/SSL_want_x509_lookup.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/ERR_load_UI_strings.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_OpenSSL.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_add_error_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_add_info_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_add_input_boolean.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_add_input_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_add_user_data.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_add_verify_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_construct_prompt.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_ctrl.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_dup_error_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_dup_info_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_dup_input_boolean.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_dup_input_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_dup_verify_string.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_free.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_get0_result.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_get0_user_data.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_get_default_method.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_get_method.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_new_method.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_process.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_set_default_method.3 ln -sf UI_new.3 $(DESTDIR)$(mandir)/man3/UI_set_method.3 ln -sf X509_NAME_ENTRY_get_object.3 $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_create_by_NID.3 ln -sf X509_NAME_ENTRY_get_object.3 $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_create_by_OBJ.3 ln -sf X509_NAME_ENTRY_get_object.3 $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_create_by_txt.3 ln -sf X509_NAME_ENTRY_get_object.3 $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_get_data.3 ln -sf X509_NAME_ENTRY_get_object.3 $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_set_data.3 ln -sf X509_NAME_ENTRY_get_object.3 $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_set_object.3 ln -sf X509_NAME_add_entry_by_txt.3 $(DESTDIR)$(mandir)/man3/X509_NAME_add_entry.3 |
︙ | ︙ | |||
1625 1626 1627 1628 1629 1630 1631 | ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_get_flags.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set1_policies.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_depth.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_purpose.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_time.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_trust.3 ln -sf X509_new.3 $(DESTDIR)$(mandir)/man3/X509_free.3 | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 | ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_get_flags.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set1_policies.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_depth.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_purpose.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_time.3 ln -sf X509_VERIFY_PARAM_set_flags.3 $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_trust.3 ln -sf X509_new.3 $(DESTDIR)$(mandir)/man3/X509_free.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_add_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_check_top.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_cmp_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_div_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_expand.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_expand2.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_fix_top.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_add_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_comba4.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_comba8.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_high.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_low_normal.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_low_recursive.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_normal.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_part_recursive.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_recursive.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_mul_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_print.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_set_high.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_set_low.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_set_max.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_sqr_comba4.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_sqr_comba8.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_sqr_normal.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_sqr_recursive.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_sqr_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_sub_words.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/bn_wexpand.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/mul.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/mul_add.3 ln -sf bn_dump.3 $(DESTDIR)$(mandir)/man3/sqr.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_dispatch.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_done.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_freereq.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_freesession.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_get_driverid.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_getreq.3 ln -sf crypto.3 $(DESTDIR)$(mandir)/man3/crypto_newsession.3 |
︙ | ︙ | |||
1684 1685 1686 1687 1688 1689 1690 | ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/ECPKParameters_print.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/ECPKParameters_print_fp.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_bio.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_fp.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_bio.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_fp.3 | < | | | | | | 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 | ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/ECPKParameters_print.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/ECPKParameters_print_fp.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_bio.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_fp.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_bio.3 ln -sf d2i_ECPKParameters.3 $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_fp.3 ln -sf d2i_PKCS8PrivateKey_bio.3 $(DESTDIR)$(mandir)/man3/d2i_PKCS8PrivateKey_fp.3 ln -sf d2i_PKCS8PrivateKey_bio.3 $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_bio.3 ln -sf d2i_PKCS8PrivateKey_bio.3 $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_fp.3 ln -sf d2i_PKCS8PrivateKey_bio.3 $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_nid_bio.3 ln -sf d2i_PKCS8PrivateKey_bio.3 $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_nid_fp.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/d2i_Netscape_RSA.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/d2i_RSAPrivateKey.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/d2i_RSA_PUBKEY.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/i2d_Netscape_RSA.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/i2d_RSAPrivateKey.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/i2d_RSAPublicKey.3 ln -sf d2i_RSAPublicKey.3 $(DESTDIR)$(mandir)/man3/i2d_RSA_PUBKEY.3 |
︙ | ︙ | |||
1716 1717 1718 1719 1720 1721 1722 | ln -sf d2i_X509_NAME.3 $(DESTDIR)$(mandir)/man3/i2d_X509_NAME.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_bio.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_fp.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/i2d_X509_REQ.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_bio.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_fp.3 ln -sf d2i_X509_SIG.3 $(DESTDIR)$(mandir)/man3/i2d_X509_SIG.3 | < < < < < < < < < < < < | < < | < | < > > > > > > > > > > > > < < < < < < < < > > > > > > > | | | | | < | < < < < < < < | < < < < < | | < < | | | | < < < < < < | 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 | ln -sf d2i_X509_NAME.3 $(DESTDIR)$(mandir)/man3/i2d_X509_NAME.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_bio.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_fp.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/i2d_X509_REQ.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_bio.3 ln -sf d2i_X509_REQ.3 $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_fp.3 ln -sf d2i_X509_SIG.3 $(DESTDIR)$(mandir)/man3/i2d_X509_SIG.3 ln -sf des_read_pw.3 $(DESTDIR)$(mandir)/man3/des_read_2passwords.3 ln -sf des_read_pw.3 $(DESTDIR)$(mandir)/man3/des_read_password.3 ln -sf des_read_pw.3 $(DESTDIR)$(mandir)/man3/des_read_pw_string.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_add.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_by_id.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_finish.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_get_first.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_get_last.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_get_next.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_get_prev.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_init.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_load_builtin_engines.3 ln -sf engine.3 $(DESTDIR)$(mandir)/man3/ENGINE_remove.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/DECLARE_LHASH_OF.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/LHASH_COMP_FN_TYPE.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/LHASH_DOALL_ARG_FN_TYPE.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/LHASH_DOALL_FN_TYPE.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/LHASH_HASH_FN_TYPE.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_delete.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_doall.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_doall_arg.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_error.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_free.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_insert.3 ln -sf lh_new.3 $(DESTDIR)$(mandir)/man3/lh_retrieve.3 ln -sf lh_stats.3 $(DESTDIR)$(mandir)/man3/lh_node_stats.3 ln -sf lh_stats.3 $(DESTDIR)$(mandir)/man3/lh_node_stats_bio.3 ln -sf lh_stats.3 $(DESTDIR)$(mandir)/man3/lh_node_usage_stats.3 ln -sf lh_stats.3 $(DESTDIR)$(mandir)/man3/lh_node_usage_stats_bio.3 ln -sf lh_stats.3 $(DESTDIR)$(mandir)/man3/lh_stats_bio.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_accept_fds.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_accept_socket.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_client.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_close.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_clear_keys.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_free.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_insecure_noverifycert.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_insecure_noverifyname.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_insecure_noverifytime.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_new.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_parse_protocols.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_prefer_ciphers_client.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_prefer_ciphers_server.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_ca_file.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_ca_mem.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_ca_path.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_cert_file.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_cert_mem.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_ciphers.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_dheparams.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_ecdhecurve.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_key_file.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_key_mem.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_protocols.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_set_verify_depth.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_verify.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_verify_client.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_config_verify_client_optional.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_configure.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_conn_cipher.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_conn_version.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_connect.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_connect_fds.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_connect_servername.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_connect_socket.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_error.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_free.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_handshake.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_load_file.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_contains_name.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_hash.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_issuer.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_notafter.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_notbefore.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_provided.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_peer_cert_subject.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_read.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_reset.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_server.3 ln -sf tls_init.3 $(DESTDIR)$(mandir)/man3/tls_write.3 uninstall-local: -rm -f $(DESTDIR)$(mandir)/man3/ASN1_OBJECT_free.3 -rm -f $(DESTDIR)$(mandir)/man3/ASN1_STRING_cmp.3 -rm -f $(DESTDIR)$(mandir)/man3/ASN1_STRING_data.3 -rm -f $(DESTDIR)$(mandir)/man3/ASN1_STRING_dup.3 -rm -f $(DESTDIR)$(mandir)/man3/ASN1_STRING_length_set.3 |
︙ | ︙ | |||
2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 | -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_get_ex_data.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cmp.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cpy.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_current.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_get_callback.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_hash.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_callback.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_add.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_add_lock.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_destroy_dynlockid.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_get_new_dynlockid.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_lock.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_num_locks.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_r_lock.3 | > > | 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 | -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_get_ex_data.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cmp.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_cpy.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_current.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_get_callback.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_hash.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_callback.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_numeric.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_THREADID_set_pointer.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_add.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_add_lock.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_destroy_dynlockid.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_get_new_dynlockid.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_lock.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_num_locks.3 -rm -f $(DESTDIR)$(mandir)/man3/CRYPTO_r_lock.3 |
︙ | ︙ | |||
2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 | -rm -f $(DESTDIR)$(mandir)/man3/DSA_get_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_get_default_openssl_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_new_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_set_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_set_default_openssl_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_sign_setup.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_verify.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GF2m_simple_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_mont_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nist_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nistp224_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nistp256_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nistp521_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_METHOD_get_field_type.3 | > > > > > > > > > > > > > > > > > > | 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 | -rm -f $(DESTDIR)$(mandir)/man3/DSA_get_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_get_default_openssl_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_new_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_set_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_set_default_openssl_method.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_sign_setup.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_verify.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_OpenSSL.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_SIG_free.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_do_sign.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_do_sign_ex.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_do_verify.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_get_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_get_ex_data.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_get_ex_new_index.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_set_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_set_ex_data.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_set_method.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_sign.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_sign_ex.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_sign_setup.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_size.3 -rm -f $(DESTDIR)$(mandir)/man3/ECDSA_verify.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_ECDSA_SIG.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECDSA_SIG.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GF2m_simple_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_mont_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nist_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nistp224_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nistp256_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_GFp_nistp521_method.3 -rm -f $(DESTDIR)$(mandir)/man3/EC_METHOD_get_field_type.3 |
︙ | ︙ | |||
2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_load_error_strings.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_PACK.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_get_next_error_library.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_print_errors_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_add_error_data.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_remove_thread_state.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_pop_to_mark.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestFinal.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestFinal_ex.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestInit_ex.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestUpdate.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_MAX_MD_SIZE.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_block_size.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_cleanup.3 | > > > > > > > > > > > | 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_load_error_strings.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_PACK.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_get_next_error_library.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_print_errors_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_add_error_data.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_remove_thread_state.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_pop_to_mark.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_CTX_cleanup.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_CTX_open.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_CTX_seal.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_key_length.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_max_overhead.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_max_tag_len.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_AEAD_nonce_length.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_aead_aes_128_gcm.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_aead_aes_256_gcm.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_aead_chacha20_poly1305.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_aead_chacha20_poly1305_ietf.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestFinal.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestFinal_ex.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestInit_ex.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestUpdate.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_MAX_MD_SIZE.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_block_size.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_MD_CTX_cleanup.3 |
︙ | ︙ | |||
2271 2272 2273 2274 2275 2276 2277 | -rm -f $(DESTDIR)$(mandir)/man3/EVP_get_digestbyname.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_get_digestbynid.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_get_digestbyobj.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_md2.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_md5.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_md_null.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_ripemd160.3 | < | 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 | -rm -f $(DESTDIR)$(mandir)/man3/EVP_get_digestbyname.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_get_digestbynid.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_get_digestbyobj.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_md2.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_md5.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_md_null.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_ripemd160.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_sha1.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_sha224.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_sha256.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_sha384.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_sha512.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestSignFinal.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_DigestSignUpdate.3 |
︙ | ︙ | |||
2378 2379 2380 2381 2382 2383 2384 | -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_dsa_paramgen_bits.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_ec_paramgen_curve_nid.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_keygen_pubexp.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_padding.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_pss_saltlen.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_rsa_keygen_bits.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_signature_md.3 | < < | 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 | -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_dsa_paramgen_bits.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_ec_paramgen_curve_nid.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_keygen_pubexp.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_padding.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_pss_saltlen.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_rsa_rsa_keygen_bits.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_signature_md.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_get_default_digest_nid.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_dup.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_free.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_new_id.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_cmp_parameters.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_copy_parameters.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_missing_parameters.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_decrypt_init.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_derive_init.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_derive_set_peer.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_encrypt_init.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_get_default_digest_nid.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_get_app_data.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_get_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_get_keygen_info.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_app_data.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_CTX_set_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_keygen_init.3 -rm -f $(DESTDIR)$(mandir)/man3/EVP_PKEY_paramgen.3 |
︙ | ︙ | |||
2562 2563 2564 2565 2566 2567 2568 | -rm -f $(DESTDIR)$(mandir)/man3/DSA_print.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/DSAparams_print.3 -rm -f $(DESTDIR)$(mandir)/man3/DSAparams_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_public_decrypt.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_private_decrypt.3 | < | 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 | -rm -f $(DESTDIR)$(mandir)/man3/DSA_print.3 -rm -f $(DESTDIR)$(mandir)/man3/DSA_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/DSAparams_print.3 -rm -f $(DESTDIR)$(mandir)/man3/DSAparams_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_public_decrypt.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_private_decrypt.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_PKCS1_SSLeay.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_flags.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_get_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_get_default_openssl_method.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_get_method.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_new_method.3 -rm -f $(DESTDIR)$(mandir)/man3/RSA_null_method.3 |
︙ | ︙ | |||
2622 2623 2624 2625 2626 2627 2628 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_misses.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_timeouts.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_cache_size.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_get_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_new_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_remove_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_set_new_cb.3 | < | 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_misses.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_timeouts.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_cache_size.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_get_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_new_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_get_remove_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_set_new_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_sess_set_remove_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/get_session_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/new_session_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/remove_session_cb.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_get_cert_store.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_cipher_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_add_client_CA.3 |
︙ | ︙ | |||
2648 2649 2650 2651 2652 2653 2654 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_get_max_cert_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_max_cert_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_max_cert_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_get_mode.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_mode.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_mode.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_set_msg_callback_arg.3 | < | 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_get_max_cert_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_max_cert_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_max_cert_list.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_get_mode.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_mode.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_mode.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_set_msg_callback_arg.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_msg_callback.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_msg_callback_arg.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_clear_options.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_CTX_get_options.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_clear_options.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_options.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_secure_renegotiation_support.3 |
︙ | ︙ | |||
2732 2733 2734 2735 2736 2737 2738 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_psk_identity_hint.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_wbio.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get0_session.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get1_session.3 -rm -f $(DESTDIR)$(mandir)/man3/OpenSSL_add_ssl_algorithms.3 -rm -f $(DESTDIR)$(mandir)/man3/SSLeay_add_ssl_algorithms.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_rstate_string_long.3 | < > > > > > > > > > > > > > > > > > > > > > > > > | 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 | -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_psk_identity_hint.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_wbio.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get0_session.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get1_session.3 -rm -f $(DESTDIR)$(mandir)/man3/OpenSSL_add_ssl_algorithms.3 -rm -f $(DESTDIR)$(mandir)/man3/SSLeay_add_ssl_algorithms.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_rstate_string_long.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_accept_state.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_rfd.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_set_wfd.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_get_shutdown.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_state_string_long.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_want_nothing.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_want_read.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_want_write.3 -rm -f $(DESTDIR)$(mandir)/man3/SSL_want_x509_lookup.3 -rm -f $(DESTDIR)$(mandir)/man3/ERR_load_UI_strings.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_OpenSSL.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_add_error_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_add_info_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_add_input_boolean.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_add_input_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_add_user_data.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_add_verify_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_construct_prompt.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_ctrl.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_dup_error_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_dup_info_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_dup_input_boolean.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_dup_input_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_dup_verify_string.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_free.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_get0_result.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_get0_user_data.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_get_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_get_method.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_new_method.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_process.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_set_default_method.3 -rm -f $(DESTDIR)$(mandir)/man3/UI_set_method.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_create_by_NID.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_create_by_OBJ.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_create_by_txt.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_get_data.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_set_data.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_ENTRY_set_object.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_NAME_add_entry.3 |
︙ | ︙ | |||
2792 2793 2794 2795 2796 2797 2798 | -rm -f $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_time.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_trust.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_free.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_add_words.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_check_top.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_cmp_words.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_div_words.3 | < | 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 | -rm -f $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_time.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_VERIFY_PARAM_set_trust.3 -rm -f $(DESTDIR)$(mandir)/man3/X509_free.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_add_words.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_check_top.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_cmp_words.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_div_words.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_expand.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_expand2.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_fix_top.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_mul_add_words.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_mul_comba4.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_mul_comba8.3 -rm -f $(DESTDIR)$(mandir)/man3/bn_mul_high.3 |
︙ | ︙ | |||
2847 2848 2849 2850 2851 2852 2853 | -rm -f $(DESTDIR)$(mandir)/man3/ECPKParameters_print.3 -rm -f $(DESTDIR)$(mandir)/man3/ECPKParameters_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_fp.3 | < | 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 | -rm -f $(DESTDIR)$(mandir)/man3/ECPKParameters_print.3 -rm -f $(DESTDIR)$(mandir)/man3/ECPKParameters_print_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_ECPKParameters_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_ECPKParameters_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_PKCS8PrivateKey_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_nid_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_PKCS8PrivateKey_nid_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_Netscape_RSA.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_RSAPrivateKey.3 |
︙ | ︙ | |||
2879 2880 2881 2882 2883 2884 2885 | -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_NAME.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_REQ.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_SIG.3 | | | | < < < < < < < < < < < < < < < < | | | | | | > | > > > > > > > > > > | | | | | < | < < < < < < < | < < < < < | < < < < < < | | | | | < < | 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 | -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_NAME.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/d2i_X509_REQ_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_REQ.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_REQ_fp.3 -rm -f $(DESTDIR)$(mandir)/man3/i2d_X509_SIG.3 -rm -f $(DESTDIR)$(mandir)/man3/des_read_2passwords.3 -rm -f $(DESTDIR)$(mandir)/man3/des_read_password.3 -rm -f $(DESTDIR)$(mandir)/man3/des_read_pw_string.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_add.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_by_id.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_finish.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_get_first.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_get_last.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_get_next.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_get_prev.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_init.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_load_builtin_engines.3 -rm -f $(DESTDIR)$(mandir)/man3/ENGINE_remove.3 -rm -f $(DESTDIR)$(mandir)/man3/DECLARE_LHASH_OF.3 -rm -f $(DESTDIR)$(mandir)/man3/LHASH_COMP_FN_TYPE.3 -rm -f $(DESTDIR)$(mandir)/man3/LHASH_DOALL_ARG_FN_TYPE.3 -rm -f $(DESTDIR)$(mandir)/man3/LHASH_DOALL_FN_TYPE.3 -rm -f $(DESTDIR)$(mandir)/man3/LHASH_HASH_FN_TYPE.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_delete.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_doall.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_doall_arg.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_error.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_free.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_insert.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_retrieve.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_node_stats.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_node_stats_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_node_usage_stats.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_node_usage_stats_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/lh_stats_bio.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_accept_fds.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_accept_socket.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_client.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_close.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_clear_keys.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_free.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_insecure_noverifycert.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_insecure_noverifyname.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_insecure_noverifytime.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_new.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_parse_protocols.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_prefer_ciphers_client.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_prefer_ciphers_server.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_ca_file.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_ca_mem.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_ca_path.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_cert_file.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_cert_mem.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_ciphers.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_dheparams.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_ecdhecurve.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_key_file.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_key_mem.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_protocols.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_set_verify_depth.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_verify.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_verify_client.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_config_verify_client_optional.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_configure.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_conn_cipher.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_conn_version.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_connect.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_connect_fds.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_connect_servername.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_connect_socket.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_error.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_free.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_handshake.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_load_file.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_contains_name.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_hash.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_issuer.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_notafter.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_notbefore.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_provided.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_peer_cert_subject.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_read.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_reset.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_server.3 -rm -f $(DESTDIR)$(mandir)/man3/tls_write.3 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: |
Changes to jni/libressl/man/OBJ_nid2obj.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "OBJ_nid2obj 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "OBJ_nid2obj 3" .TH OBJ_nid2obj 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" OBJ_nid2obj, OBJ_nid2ln, OBJ_nid2sn, OBJ_obj2nid, OBJ_txt2nid, OBJ_ln2nid, OBJ_sn2nid, OBJ_cmp, OBJ_dup, OBJ_txt2obj, OBJ_obj2txt, OBJ_create, OBJ_cleanup |
︙ | ︙ | |||
114 115 116 117 118 119 120 | or \fB\s-1NULL\s0\fR is an error occurred. .PP \&\fIOBJ_obj2nid()\fR, \fIOBJ_ln2nid()\fR, \fIOBJ_sn2nid()\fR return the corresponding \s-1NID\s0 for the object \fBo\fR, the long name <ln> or the short name <sn> respectively or NID_undef if an error occurred. .PP \&\fIOBJ_txt2nid()\fR returns \s-1NID\s0 corresponding to text string <s>. \fBs\fR can be | | | 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | or \fB\s-1NULL\s0\fR is an error occurred. .PP \&\fIOBJ_obj2nid()\fR, \fIOBJ_ln2nid()\fR, \fIOBJ_sn2nid()\fR return the corresponding \s-1NID\s0 for the object \fBo\fR, the long name <ln> or the short name <sn> respectively or NID_undef if an error occurred. .PP \&\fIOBJ_txt2nid()\fR returns \s-1NID\s0 corresponding to text string <s>. \fBs\fR can be a long name, a short name or the numerical representation of an object. .PP \&\fIOBJ_txt2obj()\fR converts the text string \fBs\fR into an \s-1ASN1_OBJECT\s0 structure. If \fBno_name\fR is 0 then long names and short names will be interpreted as well as numerical forms. If \fBno_name\fR is 1 only the numerical form is acceptable. .PP \&\fIOBJ_obj2txt()\fR converts the \fB\s-1ASN1_OBJECT\s0\fR \fBa\fR into a textual representation. |
︙ | ︙ |
Changes to jni/libressl/man/OPENSSL_VERSION_NUMBER.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "OPENSSL_VERSION_NUMBER 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "OPENSSL_VERSION_NUMBER 3" .TH OPENSSL_VERSION_NUMBER 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" OPENSSL_VERSION_NUMBER, SSLeay, SSLeay_version \- get OpenSSL version number .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/OPENSSL_config.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "OPENSSL_config 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "OPENSSL_config 3" .TH OPENSSL_config 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" OPENSSL_config, OPENSSL_no_config \- simple OpenSSL configuration functions .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/OPENSSL_load_builtin_modules.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "OPENSSL_load_builtin_modules 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "OPENSSL_load_builtin_modules 3" .TH OPENSSL_load_builtin_modules 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" OPENSSL_load_builtin_modules, ASN1_add_oid_module, ENGINE_add_conf_module \- add standard configuration modules .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/OpenSSL_add_all_algorithms.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "OpenSSL_add_all_algorithms 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "OpenSSL_add_all_algorithms 3" .TH OpenSSL_add_all_algorithms 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" OpenSSL_add_all_algorithms, OpenSSL_add_all_ciphers, OpenSSL_add_all_digests, EVP_cleanup \- add algorithms to internal table |
︙ | ︙ |
Changes to jni/libressl/man/PEM_read_bio_PrivateKey.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PEM_read_bio_PrivateKey 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PEM_read_bio_PrivateKey 3" .TH PEM_read_bio_PrivateKey 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" PEM, PEM_read_bio_PrivateKey, PEM_read_PrivateKey, PEM_write_bio_PrivateKey, PEM_write_PrivateKey, PEM_write_bio_PKCS8PrivateKey, PEM_write_PKCS8PrivateKey, |
︙ | ︙ |
Changes to jni/libressl/man/PEM_write_bio_CMS_stream.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PEM_write_bio_CMS_stream 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PEM_write_bio_CMS_stream 3" .TH PEM_write_bio_CMS_stream 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" PEM_write_bio_CMS_stream \- output CMS_ContentInfo structure in PEM format. .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/PEM_write_bio_PKCS7_stream.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PEM_write_bio_PKCS7_stream 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PEM_write_bio_PKCS7_stream 3" .TH PEM_write_bio_PKCS7_stream 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" PEM_write_bio_PKCS7_stream \- output PKCS7 structure in PEM format. .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/PKCS12_create.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS12_create 3" | | | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS12_create 3" .TH PKCS12_create 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" PKCS12_create \- create a PKCS#12 structure .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& #include <openssl/pkcs12.h> \& \& PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, \& X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, \& int iter, int mac_iter, int keytype); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fIPKCS12_create()\fR creates a PKCS#12 structure. .PP \&\fBpass\fR is the passphrase to use. \fBname\fR is the \fBfriendlyName\fR to use for the supplied certificate and key. \fBpkey\fR is the private key to include in the structure and \fBcert\fR its corresponding certificates. \fBca\fR is an optional set of certificates to also include in the structure. Either \fBpkey\fR, \fBcert\fR or both can be \fB\s-1NULL\s0\fR to indicate that no key or certificate is required. .PP \&\fBnid_key\fR and \fBnid_cert\fR are the encryption algorithms that should be used for the key and certificate respectively. If either \fBnid_key\fR or \fBnid_cert\fR is set to \-1, no encryption will be used. .PP \&\fBiter\fR is the encryption algorithm iteration count to use and \fBmac_iter\fR is the \s-1MAC\s0 iteration count to use. If \fBmac_iter\fR is set to \-1, the \s-1MAC\s0 will be |
︙ | ︙ |
Changes to jni/libressl/man/PKCS12_parse.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS12_parse 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS12_parse 3" .TH PKCS12_parse 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" PKCS12_parse \- parse a PKCS#12 structure .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/PKCS5_PBKDF2_HMAC.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS5_PBKDF2_HMAC 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS5_PBKDF2_HMAC 3" .TH PKCS5_PBKDF2_HMAC 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" PKCS5_PBKDF2_HMAC, PKCS5_PBKDF2_HMAC_SHA1 \- password based derivation routines with salt and iteration count .SH "SYNOPSIS" |
︙ | ︙ | |||
119 120 121 122 123 124 125 | .SH "NOTES" .IX Header "NOTES" A typical application of this function is to derive keying material for an encryption algorithm from a password in the \fBpass\fR, a salt in \fBsalt\fR, and an iteration count. .PP Increasing the \fBiter\fR parameter slows down the algorithm which makes it | | | 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | .SH "NOTES" .IX Header "NOTES" A typical application of this function is to derive keying material for an encryption algorithm from a password in the \fBpass\fR, a salt in \fBsalt\fR, and an iteration count. .PP Increasing the \fBiter\fR parameter slows down the algorithm which makes it harder for an attacker to perform a brute force attack using a large number of candidate passwords. .SH "RETURN VALUES" .IX Header "RETURN VALUES" \&\s-1\fIPKCS5_PBKDF2_HMAC\s0()\fR and \s-1\fIPBKCS5_PBKDF2_HMAC_SHA1\s0()\fR return 1 on success or 0 on error. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIevp\fR\|(3), \fIrand\fR\|(3), \&\fIEVP_BytesToKey\fR\|(3) |
Changes to jni/libressl/man/PKCS7_decrypt.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS7_decrypt 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS7_decrypt 3" .TH PKCS7_decrypt 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" PKCS7_decrypt \- decrypt content from a PKCS#7 envelopedData structure .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/PKCS7_encrypt.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS7_encrypt 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS7_encrypt 3" .TH PKCS7_encrypt 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" PKCS7_encrypt \- create a PKCS#7 envelopedData structure .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/PKCS7_sign.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS7_sign 3" | | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS7_sign 3" .TH PKCS7_sign 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" PKCS7_sign \- create a PKCS#7 signedData structure .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& #include <openssl/pkcs7.h> \& \& PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, int flags); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fIPKCS7_sign()\fR creates and returns a PKCS#7 signedData structure. \fBsigncert\fR is the certificate to sign with, \fBpkey\fR is the corresponding private key. \&\fBcerts\fR is an optional additional set of certificates to include in the PKCS#7 structure (for example any intermediate CAs in the chain). .PP The data to be signed is read from \s-1BIO \s0\fBdata\fR. .PP \&\fBflags\fR is an optional set of flags. .SH "NOTES" |
︙ | ︙ | |||
116 117 118 119 120 121 122 | example. .PP Normally the supplied content is translated into \s-1MIME\s0 canonical format (as required by the S/MIME specifications) if \fB\s-1PKCS7_BINARY\s0\fR is set no translation occurs. This option should be used if the supplied data is in binary format otherwise the translation will corrupt it. .PP | | | 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | example. .PP Normally the supplied content is translated into \s-1MIME\s0 canonical format (as required by the S/MIME specifications) if \fB\s-1PKCS7_BINARY\s0\fR is set no translation occurs. This option should be used if the supplied data is in binary format otherwise the translation will corrupt it. .PP The signedData structure includes several PKCS#7 authenticatedAttributes including the signing time, the PKCS#7 content type and the supported list of ciphers in an SMIMECapabilities attribute. If \fB\s-1PKCS7_NOATTR\s0\fR is set then no authenticatedAttributes will be used. If \fB\s-1PKCS7_NOSMIMECAP\s0\fR is set then just the SMIMECapabilities are omitted. .PP If present the SMIMECapabilities attribute indicates support for the following algorithms: triple \s-1DES, 128\s0 bit \s-1RC2, 64\s0 bit \s-1RC2, DES\s0 and 40 bit \s-1RC2.\s0 If any of |
︙ | ︙ |
Changes to jni/libressl/man/PKCS7_sign_add_signer.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS7_sign_add_signer 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS7_sign_add_signer 3" .TH PKCS7_sign_add_signer 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" PKCS7_sign_add_signer \- add a signer PKCS7 signed data structure. .SH "SYNOPSIS" |
︙ | ︙ | |||
108 109 110 111 112 113 114 | not appropriate. For example if multiple signers or non default digest algorithms are needed. .PP Any of the following flags (ored together) can be passed in the \fBflags\fR parameter. .PP If \fB\s-1PKCS7_REUSE_DIGEST\s0\fR is set then an attempt is made to copy the content | | | | 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | not appropriate. For example if multiple signers or non default digest algorithms are needed. .PP Any of the following flags (ored together) can be passed in the \fBflags\fR parameter. .PP If \fB\s-1PKCS7_REUSE_DIGEST\s0\fR is set then an attempt is made to copy the content digest value from the \s-1PKCS7\s0 structure: to add a signer to an existing structure. An error occurs if a matching digest value cannot be found to copy. The returned \s-1PKCS7\s0 structure will be valid and finalized when this flag is set. .PP If \fB\s-1PKCS7_PARTIAL\s0\fR is set in addition to \fB\s-1PKCS7_REUSE_DIGEST\s0\fR then the \&\fB\s-1PKCS7_SIGNER_INO\s0\fR structure will not be finalized so additional attributes can be added. In this case an explicit call to \fIPKCS7_SIGNER_INFO_sign()\fR is needed to finalize it. .PP If \fB\s-1PKCS7_NOCERTS\s0\fR is set the signer's certificate will not be included in the \&\s-1PKCS7\s0 structure, the signer's certificate must still be supplied in the \&\fBsigncert\fR parameter though. This can reduce the size of the signature if the signers certificate can be obtained by other means: for example a previously signed message. .PP The signedData structure includes several PKCS#7 authenticatedAttributes including the signing time, the PKCS#7 content type and the supported list of ciphers in an SMIMECapabilities attribute. If \fB\s-1PKCS7_NOATTR\s0\fR is set then no authenticatedAttributes will be used. If \fB\s-1PKCS7_NOSMIMECAP\s0\fR is set then just the SMIMECapabilities are omitted. .PP If present the SMIMECapabilities attribute indicates support for the following algorithms: triple \s-1DES, 128\s0 bit \s-1RC2, 64\s0 bit \s-1RC2, DES\s0 and 40 bit \s-1RC2.\s0 If any of |
︙ | ︙ |
Changes to jni/libressl/man/PKCS7_verify.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS7_verify 3" | | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PKCS7_verify 3" .TH PKCS7_verify 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" PKCS7_verify, PKCS7_get0_signers \- verify a PKCS#7 signedData structure .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& #include <openssl/pkcs7.h> \& \& int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, BIO *indata, BIO *out, int flags); \& \& STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fIPKCS7_verify()\fR verifies a PKCS#7 signedData structure. \fBp7\fR is the \s-1PKCS7\s0 structure to verify. \fBcerts\fR is a set of certificates in which to search for the signer's certificate. \fBstore\fR is a trusted certificate store (used for chain verification). \fBindata\fR is the signed data if the content is not present in \fBp7\fR (that is it is detached). The content is written to \fBout\fR if it is not \s-1NULL.\s0 .PP \&\fBflags\fR is an optional set of flags, which can be used to modify the verify operation. .PP |
︙ | ︙ |
Changes to jni/libressl/man/RAND.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RAND 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RAND 3" .TH RAND 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RAND \- pseudo\-random number generator .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/RAND_add.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RAND_add 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RAND_add 3" .TH RAND_add 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RAND_add, RAND_seed, RAND_status \- add entropy to the PRNG (DEPRECATED) .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/RAND_bytes.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RAND_bytes 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RAND_bytes 3" .TH RAND_bytes 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RAND_bytes, RAND_pseudo_bytes \- generate random data .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/RAND_cleanup.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RAND_cleanup 3" | | < < < | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RAND_cleanup 3" .TH RAND_cleanup 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RAND_cleanup \- erase the PRNG state .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& #include <openssl/rand.h> \& \& void RAND_cleanup(void); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fIRAND_cleanup()\fR erases the memory used by the \s-1PRNG.\s0 .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIrand\fR\|(3) .SH "HISTORY" .IX Header "HISTORY" \&\fIRAND_cleanup()\fR is available in all versions of SSLeay and OpenSSL. |
Changes to jni/libressl/man/RAND_load_file.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RAND_load_file 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RAND_load_file 3" .TH RAND_load_file 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RAND_load_file, RAND_write_file, RAND_file_name \- PRNG seed file .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/RAND_set_rand_method.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RAND_set_rand_method 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RAND_set_rand_method 3" .TH RAND_set_rand_method 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RAND_set_rand_method, RAND_get_rand_method, RAND_SSLeay \- select RAND method .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/RC4.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RC4 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RC4 3" .TH RC4 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RC4_set_key, RC4 \- RC4 encryption .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/RIPEMD160.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RIPEMD160 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RIPEMD160 3" .TH RIPEMD160 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RIPEMD160, RIPEMD160_Init, RIPEMD160_Update, RIPEMD160_Final \- RIPEMD\-160 hash function |
︙ | ︙ |
Changes to jni/libressl/man/RSA_blinding_on.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_blinding_on 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_blinding_on 3" .TH RSA_blinding_on 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RSA_blinding_on, RSA_blinding_off \- protect the RSA operation from timing attacks |
︙ | ︙ | |||
99 100 101 102 103 104 105 | initialized \fB\s-1BN_CTX\s0\fR. .PP \&\fIRSA_blinding_off()\fR turns blinding off and frees the memory used for the blinding factor. .SH "RETURN VALUES" .IX Header "RETURN VALUES" \&\fIRSA_blinding_on()\fR returns 1 on success, and 0 if an error occurred. | < < | 99 100 101 102 103 104 105 106 107 108 109 110 111 | initialized \fB\s-1BN_CTX\s0\fR. .PP \&\fIRSA_blinding_off()\fR turns blinding off and frees the memory used for the blinding factor. .SH "RETURN VALUES" .IX Header "RETURN VALUES" \&\fIRSA_blinding_on()\fR returns 1 on success, and 0 if an error occurred. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIrsa\fR\|(3), \fIrand\fR\|(3) .SH "HISTORY" .IX Header "HISTORY" \&\fIRSA_blinding_on()\fR and \fIRSA_blinding_off()\fR appeared in SSLeay 0.9.0. |
Changes to jni/libressl/man/RSA_check_key.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_check_key 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_check_key 3" .TH RSA_check_key 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RSA_check_key \- validate private RSA keys .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/RSA_generate_key.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_generate_key 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_generate_key 3" .TH RSA_generate_key 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RSA_generate_key_ex, RSA_generate_key \- generate RSA key pair .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/RSA_get_ex_new_index.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_get_ex_new_index 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_get_ex_new_index 3" .TH RSA_get_ex_new_index 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RSA_get_ex_new_index, RSA_set_ex_data, RSA_get_ex_data \- add application specific data to RSA structures |
︙ | ︙ |
Changes to jni/libressl/man/RSA_new.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_new 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_new 3" .TH RSA_new 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RSA_new, RSA_free \- allocate and free RSA objects .SH "SYNOPSIS" |
︙ | ︙ | |||
95 96 97 98 99 100 101 | \&\fIRSA_free()\fR frees the \fB\s-1RSA\s0\fR structure and its components. The key is erased before the memory is returned to the system. .SH "RETURN VALUES" .IX Header "RETURN VALUES" If the allocation fails, \fIRSA_new()\fR returns \fB\s-1NULL\s0\fR and sets an error code that can be obtained by \fIERR_get_error\fR\|(3). Otherwise it returns a pointer to the newly allocated structure. | < < | 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | \&\fIRSA_free()\fR frees the \fB\s-1RSA\s0\fR structure and its components. The key is erased before the memory is returned to the system. .SH "RETURN VALUES" .IX Header "RETURN VALUES" If the allocation fails, \fIRSA_new()\fR returns \fB\s-1NULL\s0\fR and sets an error code that can be obtained by \fIERR_get_error\fR\|(3). Otherwise it returns a pointer to the newly allocated structure. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIERR_get_error\fR\|(3), \fIrsa\fR\|(3), \&\fIRSA_generate_key\fR\|(3), \&\fIRSA_new_method\fR\|(3) .SH "HISTORY" .IX Header "HISTORY" \&\fIRSA_new()\fR and \fIRSA_free()\fR are available in all versions of SSLeay and OpenSSL. |
Changes to jni/libressl/man/RSA_padding_add_PKCS1_type_1.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_padding_add_PKCS1_type_1 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_padding_add_PKCS1_type_1 3" .TH RSA_padding_add_PKCS1_type_1 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RSA_padding_add_PKCS1_type_1, RSA_padding_check_PKCS1_type_1, RSA_padding_add_PKCS1_type_2, RSA_padding_check_PKCS1_type_2, |
︙ | ︙ |
Changes to jni/libressl/man/RSA_print.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_print 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_print 3" .TH RSA_print 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RSA_print, RSA_print_fp, DSAparams_print, DSAparams_print_fp, DSA_print, DSA_print_fp, |
︙ | ︙ |
Changes to jni/libressl/man/RSA_private_encrypt.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_private_encrypt 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_private_encrypt 3" .TH RSA_private_encrypt 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RSA_private_encrypt, RSA_public_decrypt \- low level signature operations .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/RSA_public_encrypt.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_public_encrypt 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_public_encrypt 3" .TH RSA_public_encrypt 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RSA_public_encrypt, RSA_private_decrypt \- RSA public key cryptography .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/RSA_set_method.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_set_method 3" | | > | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_set_method 3" .TH RSA_set_method 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RSA_set_default_method, RSA_get_default_method, RSA_set_method, RSA_get_method, RSA_PKCS1_SSLeay, RSA_null_method, RSA_flags, RSA_new_method, RSA_get_default_openssl_method, RSA_set_default_openssl_method \- select RSA method .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& #include <openssl/rsa.h> \& \& void RSA_set_default_method(const RSA_METHOD *meth); \& |
︙ | ︙ | |||
212 213 214 215 216 217 218 | \& } RSA_METHOD; .Ve .SH "RETURN VALUES" .IX Header "RETURN VALUES" \&\fIRSA_PKCS1_SSLeay()\fR, \fIRSA_PKCS1_null_method()\fR, \fIRSA_get_default_method()\fR and \fIRSA_get_method()\fR return pointers to the respective RSA_METHODs. .PP | < < | 213 214 215 216 217 218 219 220 221 222 223 224 225 226 | \& } RSA_METHOD; .Ve .SH "RETURN VALUES" .IX Header "RETURN VALUES" \&\fIRSA_PKCS1_SSLeay()\fR, \fIRSA_PKCS1_null_method()\fR, \fIRSA_get_default_method()\fR and \fIRSA_get_method()\fR return pointers to the respective RSA_METHODs. .PP \&\fIRSA_set_method()\fR returns a pointer to the old \s-1RSA_METHOD\s0 implementation that was replaced. However, this return value should probably be ignored because if it was supplied by an \s-1ENGINE,\s0 the pointer could be invalidated at any time if the \s-1ENGINE\s0 is unloaded (in fact it could be unloaded as a result of the \fIRSA_set_method()\fR function releasing its handle to the \&\s-1ENGINE\s0). For this reason, the return type may be replaced with a \fBvoid\fR declaration in a future release. |
︙ | ︙ |
Changes to jni/libressl/man/RSA_sign.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_sign 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_sign 3" .TH RSA_sign 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RSA_sign, RSA_verify \- RSA signatures .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/RSA_sign_ASN1_OCTET_STRING.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_sign_ASN1_OCTET_STRING 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_sign_ASN1_OCTET_STRING 3" .TH RSA_sign_ASN1_OCTET_STRING 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RSA_sign_ASN1_OCTET_STRING, RSA_verify_ASN1_OCTET_STRING \- RSA signatures .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/RSA_size.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_size 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "RSA_size 3" .TH RSA_size 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" RSA_size \- get RSA modulus size .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/SHA1.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "SHA1 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "SHA1 3" .TH SHA1 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" SHA1, SHA1_Init, SHA1_Update, SHA1_Final \- Secure Hash Algorithm .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/SMIME_read_CMS.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "SMIME_read_CMS 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "SMIME_read_CMS 3" .TH SMIME_read_CMS 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" .Vb 1 \& SMIME_read_CMS \- parse S/MIME message. |
︙ | ︙ |
Changes to jni/libressl/man/SMIME_read_PKCS7.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "SMIME_read_PKCS7 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "SMIME_read_PKCS7 3" .TH SMIME_read_PKCS7 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" SMIME_read_PKCS7 \- parse S/MIME message. .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/SMIME_write_CMS.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "SMIME_write_CMS 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "SMIME_write_CMS 3" .TH SMIME_write_CMS 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" .Vb 1 \& SMIME_write_CMS \- convert CMS structure to S/MIME format. |
︙ | ︙ |
Changes to jni/libressl/man/SMIME_write_PKCS7.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "SMIME_write_PKCS7 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "SMIME_write_PKCS7 3" .TH SMIME_write_PKCS7 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" SMIME_write_PKCS7 \- convert PKCS#7 structure to S/MIME format. .SH "SYNOPSIS" |
︙ | ︙ | |||
110 111 112 113 114 115 116 | \&\fIPKCS7_sign()\fR or \fB\f(BIPKCS7_encrypt()\fB\fR. .PP If cleartext signing is being used and \fB\s-1PKCS7_STREAM\s0\fR not set then the data must be read twice: once to compute the signature in \fIPKCS7_sign()\fR and once to output the S/MIME message. .PP If streaming is performed the content is output in \s-1BER\s0 format using indefinite | | | 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | \&\fIPKCS7_sign()\fR or \fB\f(BIPKCS7_encrypt()\fB\fR. .PP If cleartext signing is being used and \fB\s-1PKCS7_STREAM\s0\fR not set then the data must be read twice: once to compute the signature in \fIPKCS7_sign()\fR and once to output the S/MIME message. .PP If streaming is performed the content is output in \s-1BER\s0 format using indefinite length constructed encoding except in the case of signed data with detached content where the content is absent and \s-1DER\s0 format is used. .SH "BUGS" .IX Header "BUGS" \&\fISMIME_write_PKCS7()\fR always base64 encodes PKCS#7 structures, there should be an option to disable this. .SH "RETURN VALUES" .IX Header "RETURN VALUES" |
︙ | ︙ |
Changes to jni/libressl/man/SSL_CTX_free.3.
1 | .\" | | | > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | .\" .\" $OpenBSD: SSL_CTX_free.3,v 1.2 2014/12/02 14:11:01 jmc Exp $ .\" .Dd $Mdocdate: December 2 2014 $ .Dt SSL_CTX_FREE 3 .Os .Sh NAME .Nm SSL_CTX_free .Nd free an allocated SSL_CTX object .Sh SYNOPSIS .In openssl/ssl.h .Ft void .Fn SSL_CTX_free "SSL_CTX *ctx" .Sh DESCRIPTION .Fn SSL_CTX_free decrements the reference count of .Fa ctx , and removes the .Vt SSL_CTX object pointed to by .Fa ctx and frees up the allocated memory if the reference count has reached 0. If .Fa ctx is a .Dv NULL pointer, no action occurs. .Pp It also calls the .Xr free 3 Ns ing procedures for indirectly affected items, if applicable: the session cache, the list of ciphers, the list of Client CAs, the certificates and keys. .Sh WARNINGS |
︙ | ︙ |
Changes to jni/libressl/man/SSL_CTX_get_ex_new_index.3.
1 | .\" | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | .\" .\" $OpenBSD: SSL_CTX_get_ex_new_index.3,v 1.2 2014/12/02 14:11:01 jmc Exp $ .\" .Dd $Mdocdate: December 2 2014 $ .Dt SSL_CTX_GET_EX_NEW_INDEX 3 .Os .Sh NAME .Nm SSL_CTX_get_ex_new_index , .Nm SSL_CTX_set_ex_data , .Nm SSL_CTX_get_ex_data .Nd internal application specific data functions .Sh SYNOPSIS .In openssl/ssl.h .Ft int .Fo SSL_CTX_get_ex_new_index .Fa "long argl" .Fa "void *argp" .Fa "CRYPTO_EX_new *new_func" .Fa "CRYPTO_EX_dup *dup_func" .Fa "CRYPTO_EX_free *free_func" .Fc .Ft int .Fn SSL_CTX_set_ex_data "SSL_CTX *ctx" "int idx" "void *arg" .Ft void * .Fn SSL_CTX_get_ex_data "const SSL_CTX *ctx" "int idx" .Bd -literal typedef int new_func(void *parent, void *ptr, CRYPTO_EX_DATA *ad, |
︙ | ︙ |
Changes to jni/libressl/man/SSL_CTX_sessions.3.
1 | .\" | | | < | > > | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | .\" .\" $OpenBSD: SSL_CTX_sessions.3,v 1.2 2014/12/02 14:11:01 jmc Exp $ .\" .Dd $Mdocdate: December 2 2014 $ .Dt SSL_CTX_SESSIONS 3 .Os .Sh NAME .Nm SSL_CTX_sessions .Nd access internal session cache .Sh SYNOPSIS .In openssl/ssl.h .Ft struct lhash_st * .Fn SSL_CTX_sessions "SSL_CTX *ctx" .Sh DESCRIPTION .Fn SSL_CTX_sessions returns a pointer to the lhash databases containing the internal session cache for .Fa ctx . .Sh NOTES The sessions in the internal session cache are kept in an lhash-type database (see .Xr lh_new 3 ) . It is possible to directly access this database, e.g., for searching. In parallel, the sessions form a linked list which is maintained separately from the lhash operations, so that the database must not be modified directly but by using the .Xr SSL_CTX_add_session 3 family of functions. .Sh SEE ALSO .Xr lh_new 3 , .Xr ssl 3 , .Xr SSL_CTX_add_session 3 , .Xr SSL_CTX_set_session_cache_mode 3 |
Changes to jni/libressl/man/SSL_CTX_set_max_cert_list.3.
1 | .\" | | | | 1 2 3 4 5 6 7 8 9 10 11 | .\" .\" $OpenBSD: SSL_CTX_set_max_cert_list.3,v 1.2 2014/12/02 14:11:01 jmc Exp $ .\" .Dd $Mdocdate: December 2 2014 $ .Dt SSL_CTX_SET_MAX_CERT_LIST 3 .Os .Sh NAME .Nm SSL_CTX_set_max_cert_list , .Nm SSL_CTX_get_max_cert_list , .Nm SSL_set_max_cert_list , .Nm SSL_get_max_cert_list |
︙ | ︙ | |||
70 71 72 73 74 75 76 | For special applications it can be necessary to extend the maximum certificate chain size allowed to be sent by the peer. See for example the work on .%T "Internet X.509 Public Key Infrastructure Proxy Certificate Profile" and .%T "TLS Delegation Protocol" at | | | 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | For special applications it can be necessary to extend the maximum certificate chain size allowed to be sent by the peer. See for example the work on .%T "Internet X.509 Public Key Infrastructure Proxy Certificate Profile" and .%T "TLS Delegation Protocol" at .Lk https://www.ietf.org/ and .Lk http://www.globus.org/ . .Pp Under normal conditions it should never be necessary to set a value smaller than the default, as the buffer is handled dynamically and only uses the memory actually required by the data sent by the peer. .Pp |
︙ | ︙ |
Changes to jni/libressl/man/SSL_CTX_set_msg_callback.3.
1 | .\" | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | .\" .\" $OpenBSD: SSL_CTX_set_msg_callback.3,v 1.2 2014/12/02 14:11:01 jmc Exp $ .\" .Dd $Mdocdate: December 2 2014 $ .Dt SSL_CTX_SET_MSG_CALLBACK 3 .Os .Sh NAME .Nm SSL_CTX_set_msg_callback , .Nm SSL_CTX_set_msg_callback_arg , .Nm SSL_set_msg_callback , .Nm SSL_set_msg_callback_arg .Nd install callback for observing protocol messages .Sh SYNOPSIS .In openssl/ssl.h .Ft void .Fo SSL_CTX_set_msg_callback .Fa "SSL_CTX *ctx" .Fa "void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)" |
︙ | ︙ | |||
127 128 129 130 131 132 133 | .Xr ssl 3 , .Xr SSL_new 3 .Sh HISTORY .Fn SSL_CTX_set_msg_callback , .Fn SSL_CTX_set_msg_callback_arg , .Fn SSL_set_msg_callback and | | | 127 128 129 130 131 132 133 134 135 | .Xr ssl 3 , .Xr SSL_new 3 .Sh HISTORY .Fn SSL_CTX_set_msg_callback , .Fn SSL_CTX_set_msg_callback_arg , .Fn SSL_set_msg_callback and .Fn SSL_set_msg_callback_arg were added in OpenSSL 0.9.7. |
Changes to jni/libressl/man/SSL_CTX_set_session_id_context.3.
1 | .\" | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" .\" $OpenBSD: SSL_CTX_set_session_id_context.3,v 1.2 2014/12/02 14:11:01 jmc Exp $ .\" .Dd $Mdocdate: December 2 2014 $ .Dt SSL_CTX_SET_SESSION_ID_CONTEXT 3 .Os .Sh NAME .Nm SSL_CTX_set_session_id_context , .Nm SSL_set_session_id_context .Nd set context within which session can be reused (server side only) .Sh SYNOPSIS .In openssl/ssl.h .Ft int .Fo SSL_CTX_set_session_id_context .Fa "SSL_CTX *ctx" .Fa "const unsigned char *sid_ctx" .Fa "unsigned int sid_ctx_len" .Fc .Ft int .Fo SSL_set_session_id_context .Fa "SSL *ssl" .Fa "const unsigned char *sid_ctx" .Fa "unsigned int sid_ctx_len" .Fc .Sh DESCRIPTION .Fn SSL_CTX_set_session_id_context sets the context .Fa sid_ctx of length |
︙ | ︙ |
Changes to jni/libressl/man/SSL_SESSION_free.3.
1 | .\" | | | > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | .\" .\" $OpenBSD: SSL_SESSION_free.3,v 1.2 2014/12/02 14:11:01 jmc Exp $ .\" .Dd $Mdocdate: December 2 2014 $ .Dt SSL_SESSION_FREE 3 .Os .Sh NAME .Nm SSL_SESSION_free .Nd free an allocated SSL_SESSION structure .Sh SYNOPSIS .In openssl/ssl.h .Ft void .Fn SSL_SESSION_free "SSL_SESSION *session" .Sh DESCRIPTION .Fn SSL_SESSION_free decrements the reference count of .Fa session and removes the .Vt SSL_SESSION structure pointed to by .Fa session and frees up the allocated memory, if the reference count has reached 0. If .Fa session is a .Dv NULL pointer, no action occurs. .Sh NOTES .Vt SSL_SESSION objects are allocated when a TLS/SSL handshake operation is successfully completed. Depending on the settings, see .Xr SSL_CTX_set_session_cache_mode 3 , the |
︙ | ︙ |
Changes to jni/libressl/man/SSL_SESSION_get_time.3.
1 | .\" | | | | > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | .\" .\" $OpenBSD: SSL_SESSION_get_time.3,v 1.2 2014/12/02 14:11:01 jmc Exp $ .\" .Dd $Mdocdate: December 2 2014 $ .Dt SSL_SESSION_GET_TIME 3 .Os .Sh NAME .Nm SSL_SESSION_get_time , .Nm SSL_SESSION_set_time , .Nm SSL_SESSION_get_timeout , .Nm SSL_SESSION_set_timeout , .Nm SSL_get_time , .Nm SSL_set_time , .Nm SSL_get_timeout , .Nm SSL_set_timeout .Nd retrieve and manipulate session time and timeout settings .Sh SYNOPSIS .In openssl/ssl.h .Ft long .Fn SSL_SESSION_get_time "const SSL_SESSION *s" .Ft long .Fn SSL_SESSION_set_time "SSL_SESSION *s" "long tm" |
︙ | ︙ |
Changes to jni/libressl/man/SSL_alert_type_string.3.
1 | .\" | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | .\" .\" $OpenBSD: SSL_alert_type_string.3,v 1.2 2014/12/02 14:11:01 jmc Exp $ .\" .Dd $Mdocdate: December 2 2014 $ .Dt SSL_ALERT_TYPE_STRING.POD 3 .Os .Sh NAME .Nm SSL_alert_type_string , .Nm SSL_alert_type_string_long , .Nm SSL_alert_desc_string , .Nm SSL_alert_desc_string_long .Nd get textual description of alert information .Sh SYNOPSIS .In openssl/ssl.h .Ft const char * .Fn SSL_alert_type_string "int value" .Ft const char * .Fn SSL_alert_type_string_long "int value" .Ft const char * .Fn SSL_alert_desc_string "int value" .Ft const char * .Fn SSL_alert_desc_string_long "int value" .Sh DESCRIPTION .Fn SSL_alert_type_string returns a one letter string indicating the type of the alert specified by .Fa value . .Pp .Fn SSL_alert_type_string_long |
︙ | ︙ |
Changes to jni/libressl/man/SSL_free.3.
1 | .\" | | | > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | .\" .\" $OpenBSD: SSL_free.3,v 1.2 2014/12/02 14:11:01 jmc Exp $ .\" .Dd $Mdocdate: December 2 2014 $ .Dt SSL_FREE 3 .Os .Sh NAME .Nm SSL_free .Nd free an allocated SSL structure .Sh SYNOPSIS .In openssl/ssl.h .Ft void .Fn SSL_free "SSL *ssl" .Sh DESCRIPTION .Fn SSL_free decrements the reference count of .Fa ssl , and removes the .Vt SSL structure pointed to by .Fa ssl and frees up the allocated memory if the reference count has reached 0. If .Fa ssl is a .Dv NULL pointer, no action occurs. .Sh NOTES .Fn SSL_free also calls the .Xr free 3 Ns ing procedures for indirectly affected items, if applicable: the buffering .Vt BIO , the read and write |
︙ | ︙ |
Changes to jni/libressl/man/SSL_set_connect_state.3.
1 | .\" | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | .\" .\" $OpenBSD: SSL_set_connect_state.3,v 1.2 2014/12/02 14:11:01 jmc Exp $ .\" .Dd $Mdocdate: December 2 2014 $ .Dt SSL_SET_CONNECT_STATE 3 .Os .Sh NAME .Nm SSL_set_connect_state , .Nm SSL_set_accept_state .Nd prepare SSL object to work in client or server mode .Sh SYNOPSIS .In openssl/ssl.h .Ft void .Fn SSL_set_connect_state "SSL *ssl" .Ft void .Fn SSL_set_accept_state "SSL *ssl" |
︙ | ︙ |
Changes to jni/libressl/man/SSL_set_session.3.
1 | .\" | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | .\" .\" $OpenBSD: SSL_set_session.3,v 1.2 2014/12/02 14:11:01 jmc Exp $ .\" .Dd $Mdocdate: December 2 2014 $ .Dt SSL_SET_SESSION 3 .Os .Sh NAME .Nm SSL_set_session .Nd set a TLS/SSL session to be used during TLS/SSL connect .Sh SYNOPSIS .In openssl/ssl.h .Ft int .Fn SSL_set_session "SSL *ssl" "SSL_SESSION *session" .Sh DESCRIPTION .Fn SSL_set_session sets .Fa session to be used when the TLS/SSL connection is to be established. .Fn SSL_set_session is only useful for TLS/SSL clients. |
︙ | ︙ |
Added jni/libressl/man/UI_new.3.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 | .Dd $Mdocdate: November 12 2015 $ .Dt UI_NEW 3 .Os .Sh NAME .Nm UI_new , .Nm UI_new_method , .Nm UI_free , .Nm UI_add_input_string , .Nm UI_dup_input_string , .Nm UI_add_verify_string , .Nm UI_dup_verify_string , .Nm UI_add_input_boolean , .Nm UI_dup_input_boolean , .Nm UI_add_info_string , .Nm UI_dup_info_string , .Nm UI_add_error_string , .Nm UI_dup_error_string , .Nm UI_construct_prompt , .Nm UI_add_user_data , .Nm UI_get0_user_data , .Nm UI_get0_result , .Nm UI_process , .Nm UI_ctrl , .Nm UI_set_default_method , .Nm UI_get_default_method , .Nm UI_get_method , .Nm UI_set_method , .Nm UI_OpenSSL , .Nm ERR_load_UI_strings .Nd New User Interface .Sh SYNOPSIS .In openssl/ui.h .Fd typedef struct ui_st UI; .Fd typedef struct ui_method_st UI_METHOD; .Ft UI * .Fn UI_new void .Ft UI * .Fo UI_new_method .Fa "const UI_METHOD *method" .Fc .Ft void .Fo UI_free .Fa "UI *ui" .Fc .Ft int .Fo UI_add_input_string .Fa "UI *ui" .Fa "const char *prompt" .Fa "int flags" .Fa "char *result_buf" .Fa "int minsize" .Fa "int maxsize" .Fc .Ft int .Fo UI_dup_input_string .Fa "UI *ui" .Fa "const char *prompt" .Fa "int flags" .Fa "char *result_buf" .Fa "int minsize" .Fa "int maxsize" .Fc .Ft int .Fo UI_add_verify_string .Fa "UI *ui" .Fa "const char *prompt" .Fa "int flags" .Fa "char *result_buf" .Fa "int minsize" .Fa "int maxsize" .Fa "const char *test_buf" .Fc .Ft int .Fo UI_dup_verify_string .Fa "UI *ui" .Fa "const char *prompt" .Fa "int flags" .Fa "char *result_buf" .Fa "int minsize" .Fa "int maxsize" .Fa "const char *test_buf" .Fc .Ft int .Fo UI_add_input_boolean .Fa "UI *ui" .Fa "const char *prompt" .Fa "const char *action_desc" .Fa "const char *ok_chars" .Fa "const char *cancel_chars" .Fa "int flags" .Fa "char *result_buf" .Fc .Ft int .Fo UI_dup_input_boolean .Fa "UI *ui" .Fa "const char *prompt" .Fa "const char *action_desc" .Fa "const char *ok_chars" .Fa "const char *cancel_chars" .Fa "int flags" .Fa "char *result_buf" .Fc .Ft int .Fo UI_add_info_string .Fa "UI *ui" .Fa "const char *text" .Fc .Ft int .Fo UI_dup_info_string .Fa "UI *ui" .Fa "const char *text" .Fc .Ft int .Fo UI_add_error_string .Fa "UI *ui" .Fa "const char *text" .Fc .Ft int .Fo UI_dup_error_string .Fa "UI *ui" .Fa "const char *text" .Fc .Fd /* These are the possible flags. They can be OR'ed together. */ .Fd #define UI_INPUT_FLAG_ECHO 0x01 .Fd #define UI_INPUT_FLAG_DEFAULT_PWD 0x02 .Ft char * .Fo UI_construct_prompt .Fa "UI *ui_method" .Fa "const char *object_desc" .Fa "const char *object_name" .Fc .Ft void * .Fo UI_add_user_data .Fa "UI *ui" .Fa "void *user_data" .Fc .Ft void * .Fo UI_get0_user_data .Fa "UI *ui" .Fc .Ft const char * .Fo UI_get0_result .Fa "UI *ui" .Fa "int i" .Fc .Ft int .Fo UI_process .Fa "UI *ui" .Fc .Ft int .Fo UI_ctrl .Fa "UI *ui" .Fa "int cmd" .Fa "long i" .Fa "void *p" .Fa "void (*f)()" .Fc .Fd #define UI_CTRL_PRINT_ERRORS 1 .Fd #define UI_CTRL_IS_REDOABLE 2 .Ft void .Fo UI_set_default_method .Fa "const UI_METHOD *meth" .Fc .Ft const UI_METHOD * .Fo UI_get_default_method .Fa void .Fc .Ft const UI_METHOD * .Fo UI_get_method .Fa "UI *ui" .Fc .Ft const UI_METHOD * .Fo UI_set_method .Fa "UI *ui" .Fa "const UI_METHOD *meth" .Fc .Ft UI_METHOD * .Fo UI_OpenSSL .Fa void .Fc .Sh DESCRIPTION UI stands for User Interface, and is general purpose set of routines to prompt the user for text-based information. Through user-written methods (see .Xr ui_create 3 Ns ), prompting can be done in any way imaginable, be it plain text prompting, through dialog boxes or from a cell phone. .Pp All the functions work through a context of the type .Vt UI . This context contains all the information needed to prompt correctly as well as a reference to a .Vt UI_METHOD , which is an ordered vector of functions that carry out the actual prompting. .Pp The first thing to do is to create a .Vt UI with .Fn UI_new or .Fn UI_new_method , then add information to it with the .Fn UI_add_* or .Fn UI_dup_* functions. Also, user-defined random data can be passed down to the underlying method through calls to .Fn UI_add_user_data . The default UI method doesn't care about these data, but other methods might. Finally, use .Fn UI_process to actually perform the prompting and .Fn UI_get0_result to find the result to the prompt. .Pp A .Vt UI can contain more than one prompt, which are performed in the given sequence. Each prompt gets an index number which is returned by the .Fn UI_add_* and .Fn UI_dup_* functions, and has to be used to get the corresponding result with .Fn UI_get0_result . .Pp The functions are as follows: .Pp .Fn UI_new creates a new .Vt UI using the default UI method. When done with this UI, it should be freed using .Fn UI_free . .Pp .Fn UI_new_method creates a new .Vt UI using the given UI method. When done with this UI, it should be freed using .Fn UI_free . .Pp .Fn UI_OpenSSL returns the built-in UI method (note: not the default one, since the default can be changed. See further on). This method is the most machine/OS dependent part of OpenSSL and normally generates the most problems when porting. .Pp .Fn UI_free removes .Fa ui from memory, along with all other pieces of memory that are connected to it, like duplicated input strings, results and others. .Pp .Fn UI_add_input_string and .Fn UI_add_verify_string add a prompt to .Fa ui , as well as flags and a result buffer and the desired minimum and maximum sizes of the result. The given information is used to prompt for information, for example a password, and to verify a password (i.e. having the user enter it twice and check that the same string was entered twice). .Fn UI_add_verify_string takes and extra argument that should be a pointer to the result buffer of the input string that it's supposed to verify, or verification will fail. .Pp .Fn UI_add_input_boolean adds a prompt to .Fa ui that's supposed to be answered in a boolean way, with a single character for yes and a different character for no. A set of characters that can be used to cancel the prompt is given as well. The prompt itself is really divided in two, one part being the descriptive text (given through the .Fa prompt argument) and one describing the possible answers (given through the .Fa action_desc argument). .Pp .Fn UI_add_info_string and .Fn UI_add_error_string add strings that are shown at the same time as the prompt for extra information or to show an error string. The difference between the two is only conceptual. With the builtin method, there's no technical difference between them. Other methods may make a difference between them, however. .Pp The flags currently supported are .Dv UI_INPUT_FLAG_ECHO, which is relevant for .Fn UI_add_input_string and will have the users response be echoed (when prompting for a password, this flag should obviously not be used), and .Dv UI_INPUT_FLAG_DEFAULT_PWD , which means that a default password of some sort will be used (completely depending on the application and the UI method). .Pp .Fn UI_dup_input_string , .Fn UI_dup_verify_string , .Fn UI_dup_input_boolean , .Fn UI_dup_info_string , and .Fn UI_dup_error_string are basically the same as their .Fn UI_add_* counterparts, except that they make their own copies of all strings. .Pp .Fn UI_construct_prompt is a helper function that can be used to create a prompt from two pieces of information: an description and a name. The default constructor (if there is none provided by the method used) creates a string "Enter .Em description for .Em name Ns :". With the description "pass phrase" and the file name "foo.key", that becomes "Enter pass phrase for foo.key:". Other methods may create whatever string and may include encodings that will be processed by the other method functions. .Pp .Fn UI_add_user_data adds a piece of memory for the method to use at any time. The builtin UI method doesn't care about this info. Note that several calls to this function doesn't add data, it replaces the previous blob with the one given as argument. .Pp .Fn UI_get0_user_data retrieves the data that has last been given to the .Fa ui with .Fn UI_add_user_data . .Pp .Fn UI_get0_result returns a pointer to the result buffer associated with the information indexed by .Fa i . .Pp .Fn UI_process goes through the information given so far, does all the printing and prompting and returns. .Pp .Fn UI_ctrl adds extra control for the application author. For now, it understands two commands: .Dv UI_CTRL_PRINT_ERRORS , which makes .Fn UI_process print the OpenSSL error stack as part of processing the .Fa ui , and .Dv UI_CTRL_IS_REDOABLE , which returns a flag saying if the used .Fa ui can be used again or not. .Pp .Fn UI_set_default_method changes the default UI method to the one given. .Pp .Fn UI_get_default_method returns a pointer to the current default UI method. .Pp .Fn UI_get_method returns the UI method associated with a given .Fa ui . .Pp .Fn UI_set_method changes the UI method associated with a given .Fa ui . .Sh SEE ALSO .Xr des_read_pw 3 .Sh HISTORY The UI section was first introduced in OpenSSL 0.9.7. .Sh AUTHORS .An Richard Levitte Aq Mt richard@levitte.org for the OpenSSL project. |
Changes to jni/libressl/man/X509_NAME_ENTRY_get_object.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_NAME_ENTRY_get_object 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_NAME_ENTRY_get_object 3" .TH X509_NAME_ENTRY_get_object 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" X509_NAME_ENTRY_get_object, X509_NAME_ENTRY_get_data, X509_NAME_ENTRY_set_object, X509_NAME_ENTRY_set_data, |
︙ | ︙ |
Changes to jni/libressl/man/X509_NAME_add_entry_by_txt.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_NAME_add_entry_by_txt 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_NAME_add_entry_by_txt 3" .TH X509_NAME_add_entry_by_txt 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" X509_NAME_add_entry_by_txt, X509_NAME_add_entry_by_OBJ, X509_NAME_add_entry_by_NID, X509_NAME_add_entry, X509_NAME_delete_entry \- |
︙ | ︙ | |||
115 116 117 118 119 120 121 | the call. .PP \&\fIX509_NAME_delete_entry()\fR deletes an entry from \fBname\fR at position \&\fBloc\fR. The deleted entry is returned and must be freed up. .SH "NOTES" .IX Header "NOTES" The use of string types such as \fB\s-1MBSTRING_ASC\s0\fR or \fB\s-1MBSTRING_UTF8\s0\fR | | | 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | the call. .PP \&\fIX509_NAME_delete_entry()\fR deletes an entry from \fBname\fR at position \&\fBloc\fR. The deleted entry is returned and must be freed up. .SH "NOTES" .IX Header "NOTES" The use of string types such as \fB\s-1MBSTRING_ASC\s0\fR or \fB\s-1MBSTRING_UTF8\s0\fR is strongly recommended for the \fBtype\fR parameter. This allows the internal code to correctly determine the type of the field and to apply length checks according to the relevant standards. This is done using \fIASN1_STRING_set_by_NID()\fR. .PP If instead an \s-1ASN1\s0 type is used no checks are performed and the supplied data in \fBbytes\fR is used directly. .PP |
︙ | ︙ |
Changes to jni/libressl/man/X509_NAME_get_index_by_NID.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_NAME_get_index_by_NID 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_NAME_get_index_by_NID 3" .TH X509_NAME_get_index_by_NID 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" X509_NAME_get_index_by_NID, X509_NAME_get_index_by_OBJ, X509_NAME_get_entry, X509_NAME_entry_count, X509_NAME_get_text_by_NID, X509_NAME_get_text_by_OBJ \- |
︙ | ︙ | |||
121 122 123 124 125 126 127 | of space needed in \fBbuf\fR (excluding the final null) is returned. .SH "NOTES" .IX Header "NOTES" \&\fIX509_NAME_get_text_by_NID()\fR and \fIX509_NAME_get_text_by_OBJ()\fR are legacy functions which have various limitations which make them of minimal use in practice. They can only find the first matching entry and will copy the contents of the field verbatim: this can | | | 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | of space needed in \fBbuf\fR (excluding the final null) is returned. .SH "NOTES" .IX Header "NOTES" \&\fIX509_NAME_get_text_by_NID()\fR and \fIX509_NAME_get_text_by_OBJ()\fR are legacy functions which have various limitations which make them of minimal use in practice. They can only find the first matching entry and will copy the contents of the field verbatim: this can be highly confusing if the target is a multicharacter string type like a BMPString or a UTF8String. .PP For a more general solution \fIX509_NAME_get_index_by_NID()\fR or \&\fIX509_NAME_get_index_by_OBJ()\fR should be used followed by \&\fIX509_NAME_get_entry()\fR on any matching indices and then the various \fBX509_NAME_ENTRY\fR utility functions on the result. .SH "EXAMPLES" |
︙ | ︙ |
Changes to jni/libressl/man/X509_NAME_print_ex.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_NAME_print_ex 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_NAME_print_ex 3" .TH X509_NAME_print_ex 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" X509_NAME_print_ex, X509_NAME_print_ex_fp, X509_NAME_print, X509_NAME_oneline \- X509_NAME printing routines. |
︙ | ︙ |
Changes to jni/libressl/man/X509_STORE_CTX_get_error.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_STORE_CTX_get_error 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_STORE_CTX_get_error 3" .TH X509_STORE_CTX_get_error 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" X509_STORE_CTX_get_error, X509_STORE_CTX_set_error, X509_STORE_CTX_get_error_depth, X509_STORE_CTX_get_current_cert, |
︙ | ︙ | |||
106 107 108 109 110 111 112 | .PP \&\fIX509_STORE_CTX_set_error()\fR sets the error code of \fBctx\fR to \fBs\fR. For example it might be used in a verification callback to set an error based on additional checks. .PP \&\fIX509_STORE_CTX_get_error_depth()\fR returns the \fBdepth\fR of the error. This is a non-negative integer representing where in the certificate chain the error | | | 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | .PP \&\fIX509_STORE_CTX_set_error()\fR sets the error code of \fBctx\fR to \fBs\fR. For example it might be used in a verification callback to set an error based on additional checks. .PP \&\fIX509_STORE_CTX_get_error_depth()\fR returns the \fBdepth\fR of the error. This is a non-negative integer representing where in the certificate chain the error occurred. If it is zero it occurred in the end entity certificate, one if it is the certificate which signed the end entity certificate and so on. .PP \&\fIX509_STORE_CTX_get_current_cert()\fR returns the certificate in \fBctx\fR which caused the error or \fB\s-1NULL\s0\fR if no certificate is relevant. .PP \&\fIX509_STORE_CTX_get1_chain()\fR returns a complete validate chain if a previous call to \fIX509_verify_cert()\fR is successful. If the call to \fIX509_verify_cert()\fR |
︙ | ︙ | |||
130 131 132 133 134 135 136 | verification error \fBn\fR. .SH "RETURN VALUES" .IX Header "RETURN VALUES" \&\fIX509_STORE_CTX_get_error()\fR returns \fBX509_V_OK\fR or an error code. .PP \&\fIX509_STORE_CTX_get_error_depth()\fR returns a non-negative error depth. .PP | | | 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | verification error \fBn\fR. .SH "RETURN VALUES" .IX Header "RETURN VALUES" \&\fIX509_STORE_CTX_get_error()\fR returns \fBX509_V_OK\fR or an error code. .PP \&\fIX509_STORE_CTX_get_error_depth()\fR returns a non-negative error depth. .PP \&\fIX509_STORE_CTX_get_current_cert()\fR returns the certificate which caused the error or \fB\s-1NULL\s0\fR if no certificate is relevant to the error. .PP \&\fIX509_verify_cert_error_string()\fR returns a human readable error string for verification error \fBn\fR. .SH "ERROR CODES" .IX Header "ERROR CODES" A list of error codes and messages is shown below. Some of the |
︙ | ︙ | |||
280 281 282 283 284 285 286 | .IX Item "X509_V_ERR_DIFFERENT_CRL_SCOPE: Different CRL scope" The only CRLs that could be found did not match the scope of the certificate. .IP "\fBX509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE: Unsupported extension feature\fR" 4 .IX Item "X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE: Unsupported extension feature" Some feature of a certificate extension is not supported. Unused. .IP "\fBX509_V_ERR_PERMITTED_VIOLATION: permitted subtree violation\fR" 4 .IX Item "X509_V_ERR_PERMITTED_VIOLATION: permitted subtree violation" | | | | | 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 | .IX Item "X509_V_ERR_DIFFERENT_CRL_SCOPE: Different CRL scope" The only CRLs that could be found did not match the scope of the certificate. .IP "\fBX509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE: Unsupported extension feature\fR" 4 .IX Item "X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE: Unsupported extension feature" Some feature of a certificate extension is not supported. Unused. .IP "\fBX509_V_ERR_PERMITTED_VIOLATION: permitted subtree violation\fR" 4 .IX Item "X509_V_ERR_PERMITTED_VIOLATION: permitted subtree violation" A name constraint violation occurred in the permitted subtrees. .IP "\fBX509_V_ERR_EXCLUDED_VIOLATION: excluded subtree violation\fR" 4 .IX Item "X509_V_ERR_EXCLUDED_VIOLATION: excluded subtree violation" A name constraint violation occurred in the excluded subtrees. .IP "\fBX509_V_ERR_SUBTREE_MINMAX: name constraints minimum and maximum not supported\fR" 4 .IX Item "X509_V_ERR_SUBTREE_MINMAX: name constraints minimum and maximum not supported" A certificate name constraints extension included a minimum or maximum field: this is not supported. .IP "\fBX509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE: unsupported name constraint type\fR" 4 .IX Item "X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE: unsupported name constraint type" An unsupported name constraint type was encountered. OpenSSL currently only supports directory name, \s-1DNS\s0 name, email and \s-1URI\s0 types. .IP "\fBX509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: unsupported or invalid name constraint syntax\fR" 4 .IX Item "X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: unsupported or invalid name constraint syntax" The format of the name constraint is not recognised: for example an email address format of a form not mentioned in \s-1RFC3280.\s0 This could be caused by a garbage extension or some new feature not currently supported. .IP "\fBX509_V_ERR_CRL_PATH_VALIDATION_ERROR: \s-1CRL\s0 path validation error\fR" 4 .IX Item "X509_V_ERR_CRL_PATH_VALIDATION_ERROR: CRL path validation error" An error occurred when attempting to verify the \s-1CRL\s0 path. This error can only happen if extended \s-1CRL\s0 checking is enabled. .IP "\fBX509_V_ERR_APPLICATION_VERIFICATION: application verification failure\fR" 4 .IX Item "X509_V_ERR_APPLICATION_VERIFICATION: application verification failure" an application specific error. This will never be returned unless explicitly set by an application. .SH "NOTES" .IX Header "NOTES" |
︙ | ︙ |
Changes to jni/libressl/man/X509_STORE_CTX_get_ex_new_index.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_STORE_CTX_get_ex_new_index 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_STORE_CTX_get_ex_new_index 3" .TH X509_STORE_CTX_get_ex_new_index 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" X509_STORE_CTX_get_ex_new_index, X509_STORE_CTX_set_ex_data, X509_STORE_CTX_get_ex_data \- add application specific data to X509_STORE_CTX |
︙ | ︙ |
Changes to jni/libressl/man/X509_STORE_CTX_new.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_STORE_CTX_new 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_STORE_CTX_new 3" .TH X509_STORE_CTX_new 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" X509_STORE_CTX_new, X509_STORE_CTX_cleanup, X509_STORE_CTX_free, X509_STORE_CTX_init, X509_STORE_CTX_trusted_stack, X509_STORE_CTX_set_cert, |
︙ | ︙ | |||
123 124 125 126 127 128 129 | will be untrusted but may be used to build the chain) in \fBchain\fR. Any or all of the \fBstore\fR, \fBx509\fR and \fBchain\fR parameters can be \fB\s-1NULL\s0\fR. .PP \&\fIX509_STORE_CTX_trusted_stack()\fR sets the set of trusted certificates of \fBctx\fR to \fBsk\fR. This is an alternative way of specifying trusted certificates instead of using an \fBX509_STORE\fR. .PP | | | | | 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | will be untrusted but may be used to build the chain) in \fBchain\fR. Any or all of the \fBstore\fR, \fBx509\fR and \fBchain\fR parameters can be \fB\s-1NULL\s0\fR. .PP \&\fIX509_STORE_CTX_trusted_stack()\fR sets the set of trusted certificates of \fBctx\fR to \fBsk\fR. This is an alternative way of specifying trusted certificates instead of using an \fBX509_STORE\fR. .PP \&\fIX509_STORE_CTX_set_cert()\fR sets the certificate to be verified in \fBctx\fR to \&\fBx\fR. .PP \&\fIX509_STORE_CTX_set_chain()\fR sets the additional certificate chain used by \fBctx\fR to \fBsk\fR. .PP \&\fIX509_STORE_CTX_set0_crls()\fR sets a set of CRLs to use to aid certificate verification to \fBsk\fR. These CRLs will only be used if \s-1CRL\s0 verification is enabled in the associated \fBX509_VERIFY_PARAM\fR structure. This might be used where additional \*(L"useful\*(R" CRLs are supplied as part of a protocol, for example in a PKCS#7 structure. .PP X509_VERIFY_PARAM *\fIX509_STORE_CTX_get0_param()\fR retrieves an internal pointer to the verification parameters associated with \fBctx\fR. .PP \&\fIX509_STORE_CTX_set0_param()\fR sets the internal verification parameter pointer to \fBparam\fR. After this call \fBparam\fR should not be used. .PP \&\fIX509_STORE_CTX_set_default()\fR looks up and sets the default verification method to \fBname\fR. This uses the function \fIX509_VERIFY_PARAM_lookup()\fR to find an appropriate set of parameters from \fBname\fR. .SH "NOTES" .IX Header "NOTES" |
︙ | ︙ |
Changes to jni/libressl/man/X509_STORE_CTX_set_verify_cb.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_STORE_CTX_set_verify_cb 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_STORE_CTX_set_verify_cb 3" .TH X509_STORE_CTX_set_verify_cb 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" X509_STORE_CTX_set_verify_cb \- set verification callback .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/X509_STORE_set_verify_cb_func.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_STORE_set_verify_cb_func 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_STORE_set_verify_cb_func 3" .TH X509_STORE_set_verify_cb_func 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" X509_STORE_set_verify_cb_func, X509_STORE_set_verify_cb \- set verification callback |
︙ | ︙ |
Changes to jni/libressl/man/X509_VERIFY_PARAM_set_flags.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_VERIFY_PARAM_set_flags 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_VERIFY_PARAM_set_flags 3" .TH X509_VERIFY_PARAM_set_flags 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" X509_VERIFY_PARAM_set_flags, X509_VERIFY_PARAM_clear_flags, X509_VERIFY_PARAM_get_flags, X509_VERIFY_PARAM_set_purpose, |
︙ | ︙ | |||
173 174 175 176 177 178 179 | .PP THe \fBX509_V_FLAG_X509_STRICT\fR flag disables workarounds for some broken certificates and makes the verification strictly apply \fBX509\fR rules. .PP \&\fBX509_V_FLAG_ALLOW_PROXY_CERTS\fR enables proxy certificate verification. .PP \&\fBX509_V_FLAG_POLICY_CHECK\fR enables certificate policy checking, by default | | | 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | .PP THe \fBX509_V_FLAG_X509_STRICT\fR flag disables workarounds for some broken certificates and makes the verification strictly apply \fBX509\fR rules. .PP \&\fBX509_V_FLAG_ALLOW_PROXY_CERTS\fR enables proxy certificate verification. .PP \&\fBX509_V_FLAG_POLICY_CHECK\fR enables certificate policy checking, by default no policy checking is performed. Additional information is sent to the verification callback relating to policy checking. .PP \&\fBX509_V_FLAG_EXPLICIT_POLICY\fR, \fBX509_V_FLAG_INHIBIT_ANY\fR and \&\fBX509_V_FLAG_INHIBIT_MAP\fR set the \fBrequire explicit policy\fR, \fBinhibit any policy\fR and \fBinhibit policy mapping\fR flags respectively as defined in \&\fB\s-1RFC3280\s0\fR. Policy checking is automatically enabled if any of these flags are set. |
︙ | ︙ | |||
195 196 197 198 199 200 201 | different keys are disabled. If \fBX509_V_FLAG_EXTENDED_CRL_SUPPORT\fR is set they are enabled. .PP If \fBX509_V_FLAG_USE_DELTAS\fR ise set delta CRLs (if present) are used to determine certificate status. If not set deltas are ignored. .PP \&\fBX509_V_FLAG_CHECK_SS_SIGNATURE\fR enables checking of the root \s-1CA\s0 self signed | | | 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | different keys are disabled. If \fBX509_V_FLAG_EXTENDED_CRL_SUPPORT\fR is set they are enabled. .PP If \fBX509_V_FLAG_USE_DELTAS\fR ise set delta CRLs (if present) are used to determine certificate status. If not set deltas are ignored. .PP \&\fBX509_V_FLAG_CHECK_SS_SIGNATURE\fR enables checking of the root \s-1CA\s0 self signed certificate signature. By default this check is disabled because it doesn't add any additional security but in some cases applications might want to check the signature anyway. A side effect of not checking the root \s-1CA\s0 signature is that disabled or unsupported message digests on the root \s-1CA\s0 are not treated as fatal errors. .PP The \fBX509_V_FLAG_CB_ISSUER_CHECK\fR flag enables debugging of certificate issuer checks. It is \fBnot\fR needed unless you are logging certificate |
︙ | ︙ |
Changes to jni/libressl/man/X509_new.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_new 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_new 3" .TH X509_new 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" X509_new, X509_free \- X509 certificate ASN1 allocation functions .SH "SYNOPSIS" |
︙ | ︙ | |||
90 91 92 93 94 95 96 97 98 99 100 101 | .IX Header "DESCRIPTION" The X509 \s-1ASN1\s0 allocation routines, allocate and free an X509 structure, which represents an X509 certificate. .PP \&\fIX509_new()\fR allocates and initializes a X509 structure. .PP \&\fIX509_free()\fR frees up the \fBX509\fR structure \fBa\fR. .SH "RETURN VALUES" .IX Header "RETURN VALUES" If the allocation fails, \fIX509_new()\fR returns \fB\s-1NULL\s0\fR and sets an error code that can be obtained by \fIERR_get_error\fR\|(3). Otherwise it returns a pointer to the newly allocated structure. | > < < | 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | .IX Header "DESCRIPTION" The X509 \s-1ASN1\s0 allocation routines, allocate and free an X509 structure, which represents an X509 certificate. .PP \&\fIX509_new()\fR allocates and initializes a X509 structure. .PP \&\fIX509_free()\fR frees up the \fBX509\fR structure \fBa\fR. If \fBa\fR is a \fB\s-1NULL\s0\fR pointer, no action occurs. .SH "RETURN VALUES" .IX Header "RETURN VALUES" If the allocation fails, \fIX509_new()\fR returns \fB\s-1NULL\s0\fR and sets an error code that can be obtained by \fIERR_get_error\fR\|(3). Otherwise it returns a pointer to the newly allocated structure. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIERR_get_error\fR\|(3), \fId2i_X509\fR\|(3) .SH "HISTORY" .IX Header "HISTORY" \&\fIX509_new()\fR and \fIX509_free()\fR are available in all versions of SSLeay and OpenSSL. |
Changes to jni/libressl/man/X509_verify_cert.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_verify_cert 3" | | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "X509_verify_cert 3" .TH X509_verify_cert 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" X509_verify_cert \- discover and verify X509 certificate chain .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& #include <openssl/x509.h> \& \& int X509_verify_cert(X509_STORE_CTX *ctx); .Ve |
︙ | ︙ | |||
108 109 110 111 112 113 114 | certificate is set in \fBctx\fR (due to a programming error) or if a retry operation is requested during internal lookups (which never happens with standard lookup methods). It is however recommended that application check for <= 0 return value on error. .SH "BUGS" .IX Header "BUGS" This function uses the header \fBx509.h\fR as opposed to most chain verification | | | 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | certificate is set in \fBctx\fR (due to a programming error) or if a retry operation is requested during internal lookups (which never happens with standard lookup methods). It is however recommended that application check for <= 0 return value on error. .SH "BUGS" .IX Header "BUGS" This function uses the header \fBx509.h\fR as opposed to most chain verification functions which use \fBx509_vfy.h\fR. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIX509_STORE_CTX_get_error\fR\|(3) .SH "HISTORY" .IX Header "HISTORY" \&\fIX509_verify_cert()\fR is available in all versions of SSLeay and OpenSSL. |
Changes to jni/libressl/man/bn.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "bn 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "bn 3" .TH bn 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" bn \- multiprecision integer arithmetics .SH "SYNOPSIS" |
︙ | ︙ | |||
236 237 238 239 240 241 242 | Comparison is described in \fIBN_cmp\fR\|(3); \fIBN_zero\fR\|(3) describes certain assignments, \fIBN_rand\fR\|(3) the generation of random numbers, \fIBN_generate_prime\fR\|(3) deals with prime numbers and \fIBN_set_bit\fR\|(3) with bit operations. The conversion of \fB\s-1BIGNUM\s0\fRs to external formats is described in \fIBN_bn2bin\fR\|(3). .SH "SEE ALSO" .IX Header "SEE ALSO" | | | 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | Comparison is described in \fIBN_cmp\fR\|(3); \fIBN_zero\fR\|(3) describes certain assignments, \fIBN_rand\fR\|(3) the generation of random numbers, \fIBN_generate_prime\fR\|(3) deals with prime numbers and \fIBN_set_bit\fR\|(3) with bit operations. The conversion of \fB\s-1BIGNUM\s0\fRs to external formats is described in \fIBN_bn2bin\fR\|(3). .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIbn_dump\fR\|(3), \fIdh\fR\|(3), \fIerr\fR\|(3), \&\fIrand\fR\|(3), \fIrsa\fR\|(3), \fIBN_new\fR\|(3), \&\fIBN_CTX_new\fR\|(3), \fIBN_copy\fR\|(3), \&\fIBN_swap\fR\|(3), \fIBN_num_bytes\fR\|(3), \&\fIBN_add\fR\|(3), \fIBN_add_word\fR\|(3), \&\fIBN_cmp\fR\|(3), \fIBN_zero\fR\|(3), \fIBN_rand\fR\|(3), \&\fIBN_generate_prime\fR\|(3), \fIBN_set_bit\fR\|(3), \&\fIBN_bn2bin\fR\|(3), \fIBN_mod_inverse\fR\|(3), \&\fIBN_mod_mul_reciprocal\fR\|(3), \&\fIBN_mod_mul_montgomery\fR\|(3), \&\fIBN_BLINDING_new\fR\|(3) |
Added jni/libressl/man/bn_dump.3.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 | .\" $OpenBSD$ .\" .Dd $Mdocdate: November 12 2015 $ .Dt BN_DUMP 3 .Os .Sh NAME .Nm bn_mul_words , .Nm bn_mul_add_words , .Nm bn_sqr_words , .Nm bn_div_words , .Nm bn_add_words , .Nm bn_sub_words , .Nm bn_mul_comba4 , .Nm bn_mul_comba8 , .Nm bn_sqr_comba4 , .Nm bn_sqr_comba8 , .Nm bn_cmp_words , .Nm bn_mul_normal , .Nm bn_mul_low_normal , .Nm bn_mul_recursive , .Nm bn_mul_part_recursive , .Nm bn_mul_low_recursive , .Nm bn_mul_high , .Nm bn_sqr_normal , .Nm bn_sqr_recursive , .Nm bn_expand , .Nm bn_wexpand , .Nm bn_expand2 , .Nm bn_fix_top , .Nm bn_check_top , .Nm bn_print , .Nm bn_dump , .Nm bn_set_max , .Nm bn_set_high , .Nm bn_set_low , .Nm mul , .Nm mul_add , .Nm sqr .Nd BIGNUM library internal functions .Sh SYNOPSIS .In openssl/bn.h .Ft BN_ULONG .Fo bn_mul_words .Fa "BN_ULONG *rp" .Fa "BN_ULONG *ap" .Fa "int num" .Fa "BN_ULONG w" .Fc .Ft BN_ULONG .Fo bn_mul_add_words .Fa "BN_ULONG *rp" .Fa "BN_ULONG *ap" .Fa "int num" .Fa "BN_ULONG w" .Fc .Ft void .Fo bn_sqr_words .Fa "BN_ULONG *rp" .Fa "BN_ULONG *ap" .Fa "int num" .Fc .Ft BN_ULONG .Fo bn_div_words .Fa "BN_ULONG h" .Fa "BN_ULONG l" .Fa "BN_ULONG d" .Fc .Ft BN_ULONG .Fo bn_add_words .Fa "BN_ULONG *rp" .Fa "BN_ULONG *ap" .Fa "BN_ULONG *bp" .Fa "int num" .Fc .Ft BN_ULONG .Fo bn_sub_words .Fa "BN_ULONG *rp" .Fa "BN_ULONG *ap" .Fa "BN_ULONG *bp" .Fa "int num" .Fc .Ft void .Fo bn_mul_comba4 .Fa "BN_ULONG *r" .Fa "BN_ULONG *a" .Fa "BN_ULONG *b" .Fc .Ft void .Fo bn_mul_comba8 .Fa "BN_ULONG *r" .Fa "BN_ULONG *a" .Fa "BN_ULONG *b" .Fc .Ft void .Fo bn_sqr_comba4 .Fa "BN_ULONG *r" .Fa "BN_ULONG *a" .Fc .Ft void .Fo bn_sqr_comba8 .Fa "BN_ULONG *r" .Fa "BN_ULONG *a" .Fc .Ft int .Fo bn_cmp_words .Fa "BN_ULONG *a" .Fa "BN_ULONG *b" .Fa "int n" .Fc .Ft void .Fo bn_mul_normal .Fa "BN_ULONG *r" .Fa "BN_ULONG *a" .Fa "int na" .Fa "BN_ULONG *b" .Fa "int nb" .Fc .Ft void .Fo bn_mul_low_normal .Fa "BN_ULONG *r" .Fa "BN_ULONG *a" .Fa "BN_ULONG *b" .Fa "int n" .Fc .Ft void .Fo bn_mul_recursive .Fa "BN_ULONG *r" .Fa "BN_ULONG *a" .Fa "BN_ULONG *b" .Fa "int n2" .Fa "int dna" .Fa "int dnb" .Fa "BN_ULONG *tmp" .Fc .Ft void .Fo bn_mul_part_recursive .Fa "BN_ULONG *r" .Fa "BN_ULONG *a" .Fa "BN_ULONG *b" .Fa "int n" .Fa "int tna" .Fa "int tnb" .Fa "BN_ULONG *tmp" .Fc .Ft void .Fo bn_mul_low_recursive .Fa "BN_ULONG *r" .Fa "BN_ULONG *a" .Fa "BN_ULONG *b" .Fa "int n2" .Fa "BN_ULONG *tmp" .Fc .Ft void .Fo bn_mul_high .Fa "BN_ULONG *r" .Fa "BN_ULONG *a" .Fa "BN_ULONG *b" .Fa "BN_ULONG *l" .Fa "int n2" .Fa "BN_ULONG *tmp" .Fc .Ft void .Fo bn_sqr_normal .Fa "BN_ULONG *r" .Fa "BN_ULONG *a" .Fa "int n" .Fa "BN_ULONG *tmp" .Fc .Ft void .Fo bn_sqr_recursive .Fa "BN_ULONG *r" .Fa "BN_ULONG *a" .Fa "int n2" .Fa "BN_ULONG *tmp" .Fc .Ft void .Fo mul .Fa "BN_ULONG r" .Fa "BN_ULONG a" .Fa "BN_ULONG w" .Fa "BN_ULONG c" .Fc .Ft void .Fo mul_add .Fa "BN_ULONG r" .Fa "BN_ULONG a" .Fa "BN_ULONG w" .Fa "BN_ULONG c" .Fc .Ft void .Fo sqr .Fa "BN_ULONG r0" .Fa "BN_ULONG r1" .Fa "BN_ULONG a" .Fc .Ft BIGNUM * .Fo bn_expand .Fa "BIGNUM *a" .Fa "int bits" .Fc .Ft BIGNUM * .Fo bn_wexpand .Fa "BIGNUM *a" .Fa "int n" .Fc .Ft BIGNUM * .Fo bn_expand2 .Fa "BIGNUM *a" .Fa "int n" .Fc .Ft void .Fo bn_fix_top .Fa "BIGNUM *a" .Fc .Ft void .Fo bn_check_top .Fa "BIGNUM *a" .Fc .Ft void .Fo bn_print .Fa "BIGNUM *a" .Fc .Ft void .Fo bn_dump .Fa "BN_ULONG *d" .Fa "int n" .Fc .Ft void .Fo bn_set_max .Fa "BIGNUM *a" .Fc .Ft void .Fo bn_set_high .Fa "BIGNUM *r" .Fa "BIGNUM *a" .Fa "int n" .Fc .Ft void .Fo bn_set_low .Fa "BIGNUM *r" .Fa "BIGNUM *a" .Fa "int n" .Fc .Sh DESCRIPTION This page documents the internal functions used by the OpenSSL .Vt BIGNUM implementation. They are described here to facilitate debugging and extending the library. They are .Em not to be used by applications. .Ss The BIGNUM structure .Bd -literal typedef struct bignum_st BIGNUM; struct bignum_st { BN_ULONG *d; /* Pointer to an array of 'BN_BITS2' bit chunks. */ int top; /* Index of last used d +1. */ /* The next are internal book keeping for bn_expand. */ int dmax; /* Size of the d array. */ int neg; /* one if the number is negative */ int flags; }; .Ed .Pp The integer value is stored in .Fa d , a .Xr malloc 3 Ap ed array of words .Pq Vt BN_ULONG , least significant word first. A .Vt BN_ULONG can be either 16, 32 or 64 bits in size, depending on the 'number of bits' .Pq Dv BITS2 specified in .In openssl/bn.h . .Pp .Fa dmax is the size of the .Fa d array that has been allocated. .Fa top is the number of words being used, so for a value of 4, bn.d[0]=4 and bn.top=1. .Fa neg is 1 if the number is negative. When a .Vt BIGNUM is 0, the .Fa d field can be .Dv NULL and .Fa top == 0. .Pp .Fa flags is a bit field of flags which are defined in .In openssl/bn.h . The flags begin with .Dv BN_FLG_ . The macros .Fn BN_set_flags b n and .Fn BN_get_flags b n exist to enable or fetch flag(s) .Fa n from a .Vt BIGNUM structure .Fa b . .Pp Various routines in this library require the use of temporary .Vt BIGNUM variables during their execution. Since dynamic memory allocation to create .Vt BIGNUM Ns s is rather expensive when used in conjunction with repeated subroutine calls, the .Vt BN_CTX structure is used. This structure contains BN_CTX_NUM .Vt BIGNUM Ns s, see .Xr BN_CTX_start 3 . .Ss Low-level arithmetic operations These functions are implemented in C and for several platforms in assembly language: .Pp .Fn bn_mul_words rp ap num w operates on the .Fa num word arrays .Fa rp and .Fa ap . It computes .Fa ap * .Fa w , places the result in .Fa rp , and returns the high word (carry). .Pp .Fn bn_mul_add_words rp ap num w operates on the .Fa num word arrays .Fa rp and .Fa ap . It computes .Fa ap * .Fa w + .Fa rp , places the result in .Fa rp , and returns the high word (carry). .Pp .Fn bn_sqr_words rp ap num operates on the .Fa num word array .Fa ap and the .Pf 2* Fa num word array .Fa ap . It computes .Fa ap * .Fa ap word-wise, and places the low and high bytes of the result in .Fa rp . .Pp .Fn bn_div_words h l d divides the two word number .Pq Fa h , Fa l by .Fa d and returns the result. .Pp .Fn bn_add_words rp ap bp num operates on the .Fa num word arrays .Fa ap , .Fa bp and .Fa rp . It computes .Fa ap + .Fa bp , places the result in .Fa rp , and returns the high word (carry). .Pp .Fn bn_sub_words rp ap bp num operates on the .Fa num word arrays .Fa ap , .Fa bp and .Fa rp . It computes .Fa ap - .Fa bp , places the result in .Fa rp , and returns the carry (1 if .Fa bp \(ra .Fa ap , 0 otherwise). .Pp .Fn bn_mul_comba4 r a b operates on the 4 word arrays .Fa a and .Fa b and the 8 word array .Fa r . It computes .Fa a Ns * Ns Fa b and places the result in .Fa r . .Pp .Fn bn_mul_comba8 r a b operates on the 8 word arrays .Fa a and .Fa b and the 16 word array .Fa r . It computes .Fa a Ns * Ns Fa b and places the result in .Fa r . .Pp .Fn bn_sqr_comba4 r a b operates on the 4 word arrays .Fa a and .Fa b and the 8 word array .Fa r . .Pp .Fn bn_sqr_comba8 r a b operates on the 8 word arrays .Fa a and .Fa b and the 16 word array .Fa r . .Pp The following functions are implemented in C: .Pp .Fn bn_cmp_words a b n operates on the .Fa n word arrays .Fa a and .Fa b . It returns 1, 0 and -1 if .Fa a is greater than, equal and less than .Fa b . .Pp .Fn bn_mul_normal r a na b nb operates on the .Fa na word array .Fa a , the .Fa nb word array .Fa b and the .Fa na Ns + Ns Fa nb word array .Fa r . It computes .Fa a Ns * Ns Fa b and places the result in .Fa r . .Pp .Fn bn_mul_low_normal r a b n operates on the .Fa n word arrays .Fa r , .Fa a and .Fa b . It computes the .Fa n low words of .Fa a Ns * Ns Fa b and places the result in .Fa r . .Pp .Fn bn_mul_recursive r a b n2 dna dnb t operates on the word arrays .Fa a and .Fa b of length .Fa n2 Ns + Ns Fa dna and .Fa n2 Ns + Ns Fa dnb .Pf ( Fa dna and .Fa dnb are currently allowed to be 0 or negative) and the .Pf 2* Fa n2 word arrays .Fa r and .Sy t . .Fa n2 must be a power of 2. It computes .Fa a Ns * Ns Fa b and places the result in .Fa r . .Pp .Fn bn_mul_part_recursive r a b n tna tnb tmp operates on the word arrays .Fa a and .Fa b of length .Fa n Ns + Ns Fa tna and .Fa n Ns + Ns Fa tnb and the .Pf 4* Fa n word arrays .Fa r and .Fa tmp . .Pp .Fn bn_mul_low_recursive r a b n2 tmp operates on the .Fa n2 word arrays .Fa r and .Fa tmp and the .Fa n2 Ns /2 word arrays .Fa a and .Fa b . .Pp .Fn bn_mul_high r a b l n2 tmp operates on the .Fa n2 word arrays .Fa r , .Fa a , .Fa b and .Fa l (?) and the .Pf 3* Fa n2 word array .Fa tmp . .Pp .Xr BN_mul 3 calls .Fn bn_mul_normal , or an optimized implementation if the factors have the same size: .Fn bn_mul_comba8 is used if they are 8 words long, .Fn bn_mul_recursive if they are larger than .Dv BN_MULL_SIZE_NORMAL and the size is an exact multiple of the word size, and .Fn bn_mul_part_recursive for others that are larger than .Dv BN_MULL_SIZE_NORMAL . .Pp .Fn bn_sqr_normal r a n tmp operates on the .Fa n word array .Fa a and the .Pf 2* Fa n word arrays .Fa tmp and .Fa r . .Pp The implementations use the following macros which, depending on the architecture, may use .Vt long long C operations or inline assembler. They are defined in .Pa bn_lcl.h . .Pp .Fn mul r a w c computes .Fa w Ns * Ns Fa a Ns + Ns Fa c and places the low word of the result in .Fa r and the high word in .Fa c . .Pp .Fn mul_add r a w c computes .Fa w Ns * Ns Fa a Ns + Ns Fa r Ns + Ns Fa c and places the low word of the result in .Fa r and the high word in .Fa c . .Pp .Fn sqr r0 r1 a computes .Fa a Ns * Ns Fa a and places the low word of the result in .Fa r0 and the high word in .Fa r1 . .Ss Size changes .Fn bn_expand ensures that .Fa b has enough space for a .Fa bits bit number. .Fn bn_wexpand ensures that .Fa b has enough space for an .Fa n word number. If the number has to be expanded, both macros call .Fn bn_expand2 , which allocates a new .Fa d array and copies the data. They return .Dv NULL on error, .Fa b otherwise. .Pp The .Fn bn_fix_top macro reduces .Fa a Ns -> Ns Fa top to point to the most significant non-zero word plus one when .Fa a has shrunk. .Ss Debugging .Fn bn_check_top verifies that .Ql ((a)-\(ratop \(ra= 0 && (a)-\(ratop \(la= (a)-\(radmax) . A violation will cause the program to abort. .Pp .Fn bn_print prints .Fa a to .Dv stderr . .Fn bn_dump prints .Fa n words at .Fa d (in reverse order, i.e. most significant word first) to .Dv stderr . .Pp .Fn bn_set_max makes .Fa a a static number with a .Fa dmax of its current size. This is used by .Fn bn_set_low and .Fn bn_set_high to make .Fa r a read-only .Vt BIGNUM that contains the .Fa n low or high words of .Fa a . .Pp If .Dv BN_DEBUG is not defined, .Fn bn_check_top , .Fn bn_print , .Fn bn_dump and .Fn bn_set_max are defined as empty macros. .Sh SEE ALSO .Xr bn 3 |
Deleted jni/libressl/man/bn_internal.3.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/man/crypto.3.
|
| | < < < < < < < < | < < | < | | > | < < < > | < < > > > | < > > | < < < < < | | | | | | | < < | | < < < < < < < < < < < < | > | | < < < > | < | < | > | < > | | | < | | < < < | | < < < < | < < < < < < | | < < < < < < < < < < < < < < < < < < < < < < < | | < | | > > > > | < | > | > > | > | | | > > > | | | | > > > > > | > > | | > > | | | > > > > | > > | | > > > | | < | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | .Dd $Mdocdate: November 11 2015 $ .Dt CRYPTO 3 .Os .Sh NAME .Nm crypto .Nd OpenSSL cryptographic library .Sh DESCRIPTION The OpenSSL crypto library implements a wide range of cryptographic algorithms used in various Internet standards. The services provided by this library are used by the OpenSSL implementations of SSL, TLS and S/MIME, and they have also been used to implement SSH, OpenPGP, and other cryptographic standards. .Sh OVERVIEW .Sy libcrypto consists of a number of sub-libraries that implement the individual algorithms. .Pp The functionality includes symmetric encryption, public key cryptography and key agreement, certificate handling, cryptographic hash functions and a cryptographic pseudo-random number generator. .Bl -tag -width Ds .It SYMMETRIC CIPHERS .Xr blowfish 3 , cast, .Xr des 3 , idea, rc2, .Xr rc4 3 , rc5 .It PUBLIC KEY CRYPTOGRAPHY AND KEY AGREEMENT .Xr dsa 3 , .Xr dh 3 , .Xr rsa 3 .It CERTIFICATES .Xr x509 3 , x509v3 .It AUTHENTICATION CODES, HASH FUNCTIONS .Xr hmac 3 , .Xr MD2 3 , .Xr MD4 3 , .Xr MD5 3 , .Xr ripemd 3 , .Xr sha 3 .It AUXILIARY FUNCTIONS .Xr ERR 3 , .Xr threads 3 , .Xr rand 3 , .Xr OPENSSL_VERSION_NUMBER 3 .It INPUT/OUTPUT, DATA ENCODING asn1, .Xr bio 3 , .Xr evp 3 , .Xr pem 3 , pkcs7, pkcs12 .It INTERNAL FUNCTIONS .Xr bn 3 , .Xr buffer 3 , .Xr ec 3 , .Xr lh_new 3 , objects, stack, txt_db .El .Sh NOTES Some of the newer functions follow a naming convention using the numbers .Sq 0 and .Sq 1 . For example the functions: .Pp .Ft int .Fo X509_CRL_add0_revoked .Fa "X509_CRL *crl" .Fa "X509_REVOKED *rev" .Fc .br .Ft int .Fo X509_add1_trust_object .Fa "X509 *x" .Fa "ASN1_OBJECT *obj" .Fc .Pp The .Sq 0 version uses the supplied structure pointer directly in the parent and it will be freed up when the parent is freed. In the above example .Fa crl would be freed but .Fa rev would not. .Pp The .Sq 1 function uses a copy of the supplied structure pointer (or in some cases increases its link count) in the parent and so both .Pf ( Fa x and .Fa obj above) should be freed up. .Sh SEE ALSO .Xr openssl 1 , .Xr ssl 3 |
Changes to jni/libressl/man/d2i_ASN1_OBJECT.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_ASN1_OBJECT 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_ASN1_OBJECT 3" .TH d2i_ASN1_OBJECT 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" d2i_ASN1_OBJECT, i2d_ASN1_OBJECT \- ASN1 OBJECT IDENTIFIER functions .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/d2i_DHparams.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_DHparams 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_DHparams 3" .TH d2i_DHparams 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" d2i_DHparams, i2d_DHparams \- PKCS#3 DH parameter functions. .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/d2i_DSAPublicKey.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_DSAPublicKey 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_DSAPublicKey 3" .TH d2i_DSAPublicKey 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" d2i_DSAPublicKey, i2d_DSAPublicKey, d2i_DSAPrivateKey, i2d_DSAPrivateKey, d2i_DSA_PUBKEY, i2d_DSA_PUBKEY, d2i_DSAparams, i2d_DSAparams, d2i_DSA_SIG, i2d_DSA_SIG \- DSA key encoding |
︙ | ︙ | |||
138 139 140 141 142 143 144 | .PP The \fBDSAPublicKey\fR functions use an non standard format the actual data encoded depends on the value of the \fBwrite_params\fR field of the \fBa\fR key parameter. If \fBwrite_params\fR is zero then only the \fBpub_key\fR field is encoded as an \&\fB\s-1INTEGER\s0\fR. If \fBwrite_params\fR is 1 then a \fB\s-1SEQUENCE\s0\fR consisting of the \&\fBp\fR, \fBq\fR, \fBg\fR and \fBpub_key\fR respectively fields are encoded. .PP | | | 138 139 140 141 142 143 144 145 146 147 148 149 150 | .PP The \fBDSAPublicKey\fR functions use an non standard format the actual data encoded depends on the value of the \fBwrite_params\fR field of the \fBa\fR key parameter. If \fBwrite_params\fR is zero then only the \fBpub_key\fR field is encoded as an \&\fB\s-1INTEGER\s0\fR. If \fBwrite_params\fR is 1 then a \fB\s-1SEQUENCE\s0\fR consisting of the \&\fBp\fR, \fBq\fR, \fBg\fR and \fBpub_key\fR respectively fields are encoded. .PP The \fBDSAPrivateKey\fR functions also use a non standard structure consisting consisting of a \s-1SEQUENCE\s0 containing the \fBp\fR, \fBq\fR, \fBg\fR and \fBpub_key\fR and \&\fBpriv_key\fR fields respectively. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fId2i_X509\fR\|(3) |
Changes to jni/libressl/man/d2i_ECPKParameters.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_ECPKParameters 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_ECPKParameters 3" .TH d2i_ECPKParameters 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" d2i_ECPKParameters, i2d_ECPKParameters, d2i_ECPKParameters_bio, i2d_ECPKParameters_bio, d2i_ECPKParameters_fp, i2d_ECPKParameters_fp, ECPKParameters_print, ECPKParameters_print_fp \- Functions for decoding and encoding ASN1 representations of elliptic curve entities .SH "SYNOPSIS" |
︙ | ︙ |
Deleted jni/libressl/man/d2i_PKCS8PrivateKey.3.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added jni/libressl/man/d2i_PKCS8PrivateKey_bio.3.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | .Dd $Mdocdate: June 16 2014 $ .Dt D2I_PKCS8PRIVATEKEY_BIO 3 .Os .Sh NAME .Nm d2i_PKCS8PrivateKey_bio , .Nm d2i_PKCS8PrivateKey_fp , .Nm i2d_PKCS8PrivateKey_bio , .Nm i2d_PKCS8PrivateKey_fp , .Nm i2d_PKCS8PrivateKey_nid_bio , .Nm i2d_PKCS8PrivateKey_nid_fp .Nd PKCS#8 format private key functions .Sh SYNOPSIS .In openssl/evp.h .Ft EVP_PKEY * .Fo d2i_PKCS8PrivateKey_bio .Fa "BIO *bp" .Fa "EVP_PKEY **x" .Fa "pem_password_cb *cb" .Fa "void *u" .Fc .Ft EVP_PKEY * .Fo d2i_PKCS8PrivateKey_fp .Fa "FILE *fp" .Fa "EVP_PKEY **x" .Fa "pem_password_cb *cb" .Fa "void *u" .Fc .Ft int .Fo i2d_PKCS8PrivateKey_bio .Fa "BIO *bp" .Fa "EVP_PKEY *x" .Fa "const EVP_CIPHER *enc" .Fa "char *kstr" .Fa "int klen" .Fa "pem_password_cb *cb" .Fa "void *u" .Fc .Ft int .Fo i2d_PKCS8PrivateKey_fp .Fa "FILE *fp" .Fa "EVP_PKEY *x" .Fa "const EVP_CIPHER *enc" .Fa "char *kstr" .Fa "int klen" .Fa "pem_password_cb *cb" .Fa "void *u" .Fc .Ft int .Fo i2d_PKCS8PrivateKey_nid_bio .Fa "BIO *bp" .Fa "EVP_PKEY *x" .Fa "int nid" .Fa "char *kstr" .Fa "int klen" .Fa "pem_password_cb *cb" .Fa "void *u" .Fc .Ft int .Fo i2d_PKCS8PrivateKey_nid_fp .Fa "FILE *fp" .Fa "EVP_PKEY *x" .Fa "int nid" .Fa "char *kstr" .Fa "int klen" .Fa "pem_password_cb *cb" .Fa "void *u" .Fc .Sh DESCRIPTION The PKCS#8 functions encode and decode private keys in PKCS#8 format using both PKCS#5 v1.5 and PKCS#5 v2.0 password based encryption algorithms. .Pp Other than the use of DER as opposed to PEM these functions are identical to the corresponding .Xr pem 3 functions. .Sh NOTES Before using these functions, .Xr OpenSSL_add_all_algorithms 3 should be called to initialize the internal algorithm lookup tables. Otherwise errors about unknown algorithms will occur if an attempt is made to decrypt a private key. .Pp These functions are currently the only way to store encrypted private keys using DER format. .Pp Currently all the functions use .Vt BIO or .Vt FILE pointers, there are no functions which work directly on memory: this can be readily worked around by converting the buffers to memory BIOs, see .Xr BIO_s_mem 3 for details. .Sh SEE ALSO .Xr pem 3 |
Changes to jni/libressl/man/d2i_RSAPublicKey.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_RSAPublicKey 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_RSAPublicKey 3" .TH d2i_RSAPublicKey 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" d2i_RSAPublicKey, i2d_RSAPublicKey, d2i_RSAPrivateKey, i2d_RSAPrivateKey, d2i_RSA_PUBKEY, i2d_RSA_PUBKEY, i2d_Netscape_RSA, |
︙ | ︙ |
Changes to jni/libressl/man/d2i_X509.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_X509 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_X509 3" .TH d2i_X509 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" d2i_X509, i2d_X509, d2i_X509_bio, d2i_X509_fp, i2d_X509_bio, i2d_X509_fp \- X509 encode and decode functions |
︙ | ︙ |
Changes to jni/libressl/man/d2i_X509_ALGOR.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_X509_ALGOR 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_X509_ALGOR 3" .TH d2i_X509_ALGOR 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" d2i_X509_ALGOR, i2d_X509_ALGOR \- AlgorithmIdentifier functions. .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/d2i_X509_CRL.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_X509_CRL 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_X509_CRL 3" .TH d2i_X509_CRL 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" d2i_X509_CRL, i2d_X509_CRL, d2i_X509_CRL_bio, d2i_X509_CRL_fp, i2d_X509_CRL_bio, i2d_X509_CRL_fp \- PKCS#10 certificate request functions. |
︙ | ︙ |
Changes to jni/libressl/man/d2i_X509_NAME.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_X509_NAME 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_X509_NAME 3" .TH d2i_X509_NAME 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" d2i_X509_NAME, i2d_X509_NAME \- X509_NAME encoding functions .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/d2i_X509_REQ.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_X509_REQ 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_X509_REQ 3" .TH d2i_X509_REQ 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" d2i_X509_REQ, i2d_X509_REQ, d2i_X509_REQ_bio, d2i_X509_REQ_fp, i2d_X509_REQ_bio, i2d_X509_REQ_fp \- PKCS#10 certificate request functions. |
︙ | ︙ |
Changes to jni/libressl/man/d2i_X509_SIG.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_X509_SIG 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "d2i_X509_SIG 3" .TH d2i_X509_SIG 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" d2i_X509_SIG, i2d_X509_SIG \- DigestInfo functions. .SH "SYNOPSIS" |
︙ | ︙ |
Added jni/libressl/man/des_read_pw.3.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | .Dd $Mdocdate: November 12 2015 $ .Dt DES_READ_PW 3 .Os .Sh NAME .Nm des_read_password , .Nm des_read_2passwords , .Nm des_read_pw_string , .Nm des_read_pw .Nd Compatibility user interface functions .Sh SYNOPSIS .In openssl/des_old.h .Ft int .Fo des_read_password .Fa "DES_cblock *key" .Fa "const char *prompt" .Fa "int verify" .Fc .Ft int .Fo des_read_2passwords .Fa "DES_cblock *key1" .Fa "DES_cblock *key2" .Fa "const char *prompt" .Fa "int verify" .Fc .Ft int .Fo des_read_pw_string .Fa "char *buf" .Fa "int length" .Fa "const char *prompt" .Fa "int verify" .Fc .Ft int .Fo des_read_pw .Fa "char *buf" .Fa "char *buff" .Fa "int size" .Fa "const char *prompt" .Fa "int verify" .Fc .Sh DESCRIPTION The DES library contained a few routines to prompt for passwords. These aren't necessarily dependent on DES, and have therefore become part of the UI compatibility library. .Pp .Fn des_read_pw writes the string specified by .Fa prompt to standard output turns echo off and reads an input string from the terminal. The string is returned in .Fa buf , which must have space for at least .Fa size bytes. If .Fa verify is set, the user is asked for the password twice and unless the two copies match, an error is returned. The second password is stored in .Fa buff , which must therefore also be at least .Fa size bytes. A return code of -1 indicates a system error, 1 failure due to use interaction, and 0 is success. All other functions described here use .Fn des_read_pw to do the work. .Pp .Fn des_read_pw_string is a variant of .Fn des_read_pw that provides a buffer for you if .Fa verify is set. .Pp .Fn des_read_password calls .Fn des_read_pw and converts the password to a DES key by calling .Xr DES_string_to_key 3 ; .Fn des_read_2passwords operates in the same way as .Fn des_read_password except that it generates two keys by using the .Xr DES_string_to_2key 3 function. .Sh NOTES .Fn des_read_pw_string is available in the MIT Kerberos library as well, and is also available under the name .Xr EVP_read_pw_string 3 . .Sh SEE ALSO .Xr UI_new 3 .Sh AUTHORS .An Richard Levitte Aq Mt richard@levitte.org for the OpenSSL project. |
Changes to jni/libressl/man/dh.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "dh 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "dh 3" .TH dh 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" dh \- Diffie\-Hellman key agreement .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/dsa.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "dsa 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "dsa 3" .TH dsa 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" dsa \- Digital Signature Algorithm .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/ec.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ec 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ec 3" .TH ec 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ec \- Elliptic Curve functions .SH "SYNOPSIS" |
︙ | ︙ | |||
229 230 231 232 233 234 235 | \& \& EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); \& int i2o_ECPublicKey(EC_KEY *key, unsigned char **out); \& int ECParameters_print(BIO *bp, const EC_KEY *key); \& int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); \& int ECParameters_print_fp(FILE *fp, const EC_KEY *key); \& int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); | | | 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | \& \& EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); \& int i2o_ECPublicKey(EC_KEY *key, unsigned char **out); \& int ECParameters_print(BIO *bp, const EC_KEY *key); \& int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); \& int ECParameters_print_fp(FILE *fp, const EC_KEY *key); \& int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); \& EC_KEY *ECParameters_dup(EC_KEY *key); \& #define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \e \& EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, EVP_PKEY_OP_PARAMGEN, \e \& EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This library provides an extensive set of functions for performing operations on elliptic curves over finite fields. |
︙ | ︙ |
Deleted jni/libressl/man/ecdsa.3.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/man/engine.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "engine 3" | | > > > | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "engine 3" .TH engine 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ENGINE_add, ENGINE_by_id, ENGINE_finish, ENGINE_get_first, ENGINE_get_last, ENGINE_get_next, ENGINE_get_prev, ENGINE_init, ENGINE_load_builtin_engines, ENGINE_remove \&\- ENGINE cryptographic module support .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& #include <openssl/engine.h> \& \& ENGINE *ENGINE_get_first(void); \& ENGINE *ENGINE_get_last(void); |
︙ | ︙ | |||
253 254 255 256 257 258 259 | \&\s-1ENGINE\s0 objects have two levels of reference-counting to match the way in which the objects are used. At the most basic level, each \s-1ENGINE\s0 pointer is inherently a \fBstructural\fR reference \- a structural reference is required to use the pointer value at all, as this kind of reference is a guarantee that the structure can not be deallocated until the reference is released. .PP However, a structural reference provides no guarantee that the \s-1ENGINE\s0 is | | | 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | \&\s-1ENGINE\s0 objects have two levels of reference-counting to match the way in which the objects are used. At the most basic level, each \s-1ENGINE\s0 pointer is inherently a \fBstructural\fR reference \- a structural reference is required to use the pointer value at all, as this kind of reference is a guarantee that the structure can not be deallocated until the reference is released. .PP However, a structural reference provides no guarantee that the \s-1ENGINE\s0 is initialised and able to use any of its cryptographic implementations. Indeed it's quite possible that most ENGINEs will not initialise at all in typical environments, as ENGINEs are typically used to support specialised hardware. To use an \s-1ENGINE\s0's functionality, you need a \&\fBfunctional\fR reference. This kind of reference can be considered a specialised form of structural reference, because each functional reference implicitly contains a structural reference as well \- however to avoid difficult-to-find programming bugs, it is recommended to treat the two |
︙ | ︙ | |||
658 659 660 661 662 663 664 | If the \s-1ENGINE_CMD_FLAG_INTERNAL\s0 flag is set, then any other flags are purely informational to the caller \- this flag will prevent the command being usable for any higher-level \s-1ENGINE\s0 functions such as \fIENGINE_ctrl_cmd_string()\fR. \&\*(L"\s-1INTERNAL\*(R"\s0 commands are not intended to be exposed to text-based configuration by applications, administrations, users, etc. These can support arbitrary operations via \fIENGINE_ctrl()\fR, including passing to and/or from the control commands data of any arbitrary type. These commands are supported in the | | | 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 | If the \s-1ENGINE_CMD_FLAG_INTERNAL\s0 flag is set, then any other flags are purely informational to the caller \- this flag will prevent the command being usable for any higher-level \s-1ENGINE\s0 functions such as \fIENGINE_ctrl_cmd_string()\fR. \&\*(L"\s-1INTERNAL\*(R"\s0 commands are not intended to be exposed to text-based configuration by applications, administrations, users, etc. These can support arbitrary operations via \fIENGINE_ctrl()\fR, including passing to and/or from the control commands data of any arbitrary type. These commands are supported in the discovery mechanisms simply allow applications to determine if an \s-1ENGINE\s0 supports certain specific commands it might want to use (eg. application \*(L"foo\*(R" might query various ENGINEs to see if they implement \*(L"\s-1FOO_GET_VENDOR_LOGO_GIF\*(R" \-\s0 and \s-1ENGINE\s0 could therefore decide whether or not to support this \*(L"foo\*(R"\-specific extension). .SS "Future developments" .IX Subsection "Future developments" The \s-1ENGINE API\s0 and internal architecture is currently being reviewed. Slated for |
︙ | ︙ |
Changes to jni/libressl/man/evp.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "evp 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "evp 3" .TH evp 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" evp \- high\-level cryptographic functions .SH "SYNOPSIS" |
︙ | ︙ | |||
95 96 97 98 99 100 101 102 103 104 105 106 107 108 | \&\fBEVP_DigestVerify\fR\fI...\fR functions implement digital signatures and Message Authentication Codes (MACs). Also see the older \&\fBEVP_Sign\fR\fI...\fR and \fBEVP_Verify\fR\fI...\fR functions. .PP Symmetric encryption is available with the \fBEVP_Encrypt\fR\fI...\fR functions. The \fBEVP_Digest\fR\fI...\fR functions provide message digests. .PP The \fB\s-1EVP_PKEY\s0\fR\fI...\fR functions provide a high level interface to asymmetric algorithms. To create a new \s-1EVP_PKEY\s0 see \&\fIEVP_PKEY_new\fR\|(3). EVP_PKEYs can be associated with a private key of a particular algorithm by using the functions described on the \fIEVP_PKEY_set1_RSA\fR\|(3) page, or new keys can be generated using \fIEVP_PKEY_keygen\fR\|(3). | > > > | 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | \&\fBEVP_DigestVerify\fR\fI...\fR functions implement digital signatures and Message Authentication Codes (MACs). Also see the older \&\fBEVP_Sign\fR\fI...\fR and \fBEVP_Verify\fR\fI...\fR functions. .PP Symmetric encryption is available with the \fBEVP_Encrypt\fR\fI...\fR functions. The \fBEVP_Digest\fR\fI...\fR functions provide message digests. .PP Authenticated encryption with additional data (\s-1AEAD\s0) is available with the \fB\s-1EVP_AEAD\s0\fR\fI...\fR functions. .PP The \fB\s-1EVP_PKEY\s0\fR\fI...\fR functions provide a high level interface to asymmetric algorithms. To create a new \s-1EVP_PKEY\s0 see \&\fIEVP_PKEY_new\fR\|(3). EVP_PKEYs can be associated with a private key of a particular algorithm by using the functions described on the \fIEVP_PKEY_set1_RSA\fR\|(3) page, or new keys can be generated using \fIEVP_PKEY_keygen\fR\|(3). |
︙ | ︙ | |||
140 141 142 143 144 145 146 147 148 149 150 151 152 153 | Also makes code harder to adapt to new algorithms and some options are not cleanly supported at the low level and some operations are more efficient using the high level interface. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIEVP_DigestInit\fR\|(3), \&\fIEVP_EncryptInit\fR\|(3), \&\fIEVP_OpenInit\fR\|(3), \&\fIEVP_SealInit\fR\|(3), \&\fIEVP_DigestSignInit\fR\|(3), \&\fIEVP_SignInit\fR\|(3), \&\fIEVP_VerifyInit\fR\|(3), \&\fIEVP_PKEY_new\fR\|(3), \&\fIEVP_PKEY_set1_RSA\fR\|(3), | > | 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | Also makes code harder to adapt to new algorithms and some options are not cleanly supported at the low level and some operations are more efficient using the high level interface. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIEVP_DigestInit\fR\|(3), \&\fIEVP_EncryptInit\fR\|(3), \&\fIEVP_AEAD_CTX_init\fR\|(3), \&\fIEVP_OpenInit\fR\|(3), \&\fIEVP_SealInit\fR\|(3), \&\fIEVP_DigestSignInit\fR\|(3), \&\fIEVP_SignInit\fR\|(3), \&\fIEVP_VerifyInit\fR\|(3), \&\fIEVP_PKEY_new\fR\|(3), \&\fIEVP_PKEY_set1_RSA\fR\|(3), |
︙ | ︙ |
Changes to jni/libressl/man/i2d_CMS_bio_stream.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "i2d_CMS_bio_stream 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "i2d_CMS_bio_stream 3" .TH i2d_CMS_bio_stream 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" .Vb 1 \& i2d_CMS_bio_stream \- output CMS_ContentInfo structure in BER format. |
︙ | ︙ |
Changes to jni/libressl/man/i2d_PKCS7_bio_stream.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "i2d_PKCS7_bio_stream 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "i2d_PKCS7_bio_stream 3" .TH i2d_PKCS7_bio_stream 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" i2d_PKCS7_bio_stream \- output PKCS7 structure in BER format. .SH "SYNOPSIS" |
︙ | ︙ |
Added jni/libressl/man/lh_new.3.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 | .Dd $Mdocdate: June 16 2014 $ .Dt LH_NEW 3 .Os .Sh NAME .Nm lh_new , .Nm lh_free , .Nm lh_insert , .Nm lh_delete , .Nm lh_retrieve , .Nm lh_doall , .Nm lh_doall_arg , .Nm lh_error .Nd dynamic hash table .Sh SYNOPSIS .In openssl/lhash.h .Fn DECLARE_LHASH_OF <type> .Ft LHASH * .Fn lh_<type>_new void .Ft void .Fo lh_<type>_free .Fa "LHASH_OF(<type>) *table" .Fc .Ft <type> * .Fo lh_<type>_insert .Fa "LHASH_OF(<type>) *table" .Fa "<type> *data" .Fc .Ft <type> * .Fo lh_<type>_delete .Fa "LHASH_OF(<type>) *table" .Fa "<type> *data" .Fc .Ft <type> * .Fo lh_<type>_retrieve .Fa "LHASH_OF<type>) *table" .Fa "<type> *data" .Fc .Ft void .Fo lh_<type>_doall .Fa "LHASH_OF(<type>) *table" .Fa "LHASH_DOALL_FN_TYPE func" .Fc .Ft void .Fo lh_<type>_doall_arg .Fa "LHASH_OF(<type>) *table" .Fa "LHASH_DOALL_ARG_FN_TYPE func" .Fa "<type2>" .Fa "<type2> *arg" .Fc .Ft int .Fo lh_<type>_error .Fa "LHASH_OF(<type>) *table" .Fc .Ft typedef int .Fo (*LHASH_COMP_FN_TYPE) .Fa "const void *" .Fa "const void *" .Fc .Ft typedef unsigned long .Fo (*LHASH_HASH_FN_TYPE) .Fa "const void *" .Fc .Ft typedef void .Fo (*LHASH_DOALL_FN_TYPE) .Fa "const void *" .Fc .Ft typedef void .Fo (*LHASH_DOALL_ARG_FN_TYPE) .Fa "const void *" .Fa "const void *" .Fc .Sh DESCRIPTION This library implements type-checked dynamic hash tables. The hash table entries can be arbitrary structures. Usually they consist of key and value fields. .Pp .Fn lh_<type>_new creates a new .Vt LHASH_OF(<type>) structure to store arbitrary data entries, and provides the hash and compare callbacks to be used in organising the table's entries. The hash callback takes a pointer to a table entry as its argument and returns an unsigned long hash value for its key field. The hash value is normally truncated to a power of 2, so make sure that your hash function returns well mixed low order bits. The compare callback takes two arguments (pointers to two hash table entries), and returns 0 if their keys are equal, non-zero otherwise. If your hash table will contain items of some particular type and the hash and compare callbacks hash and compare these types, then the .Fn DECLARE_LHASH_HASH_FN and .Fn IMPLEMENT_LHASH_COMP_FN macros can be used to create callback wrappers of the prototypes required by .Fn lh_<type>_new . These provide per-variable casts before calling the type-specific callbacks written by the application author. These macros, as well as those used for the doall callbacks, are defined as; .Bd -literal -offset 2n #define DECLARE_LHASH_HASH_FN(name, o_type) \e unsigned long name##_LHASH_HASH(const void *); #define IMPLEMENT_LHASH_HASH_FN(name, o_type) \e unsigned long name##_LHASH_HASH(const void *arg) { \e const o_type *a = arg; \e return name##_hash(a); } #define LHASH_HASH_FN(name) name##_LHASH_HASH #define DECLARE_LHASH_COMP_FN(name, o_type) \e int name##_LHASH_COMP(const void *, const void *); #define IMPLEMENT_LHASH_COMP_FN(name, o_type) \e int name##_LHASH_COMP(const void *arg1, const void *arg2) { \e const o_type *a = arg1; \e const o_type *b = arg2; \e return name##_cmp(a,b); } #define LHASH_COMP_FN(name) name##_LHASH_COMP #define DECLARE_LHASH_DOALL_FN(name, o_type) \e void name##_LHASH_DOALL(void *); #define IMPLEMENT_LHASH_DOALL_FN(name, o_type) \e void name##_LHASH_DOALL(void *arg) { \e o_type *a = arg; \e name##_doall(a); } #define LHASH_DOALL_FN(name) name##_LHASH_DOALL #define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \e void name##_LHASH_DOALL_ARG(void *, void *); #define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \e void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \e o_type *a = arg1; \e a_type *b = arg2; \e name##_doall_arg(a, b); } #define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG .Ed .Pp An example of a hash table storing (pointers to) structures of type \&'STUFF' could be defined as follows; .Bd -literal -offset 2n /* Calculate the hash value of 'tohash' (implemented elsewhere) */ unsigned long STUFF_hash(const STUFF *tohash); /* Order 'arg1' and 'arg2' (implemented elsewhere) */ int stuff_cmp(const STUFF *arg1, const STUFF *arg2); /* Create type-safe wrapper functions for use in the LHASH internals */ static IMPLEMENT_LHASH_HASH_FN(stuff, STUFF); static IMPLEMENT_LHASH_COMP_FN(stuff, STUFF); /* ... */ int main(int argc, char *argv[]) { /* Create the new hash table using the hash/compare wrappers */ LHASH_OF(STUFF) *hashtable = lh_STUFF_new(LHASH_HASH_FN(STUFF_hash), LHASH_COMP_FN(STUFF_cmp)); /* ... */ } .Ed .Pp .Fn lh_<type>_free frees the .Vt LHASH_OF(<type>) structure .Fa table . Allocated hash table entries will not be freed; consider using .Fn lh_<type>_doall to deallocate any remaining entries in the hash table (see below). .Pp .Fn lh_<type>_insert inserts the structure pointed to by .Fa data into .Fa table . If there already is an entry with the same key, the old value is replaced. Note that .Fn lh_<type>_insert stores pointers, the data are not copied. .Pp .Fn lh_<type>_delete deletes an entry from .Fa table . .Pp .Fn lh_<type>_retrieve looks up an entry in .Fa table . Normally, .Fa data is a structure with the key field(s) set; the function will return a pointer to a fully populated structure. .Pp .Fn lh_<type>_doall will, for every entry in the hash table, call .Fa func with the data item as its parameter. For .Fn lh_<type>_doall and .Fn lh_<type>_doall_arg , function pointer casting should be avoided in the callbacks (see .Sx NOTES ) \(em instead use the declare/implement macros to create type-checked wrappers that cast variables prior to calling your type-specific callbacks. An example of this is illustrated here where the callback is used to cleanup resources for items in the hash table prior to the hashtable itself being deallocated: .Bd -literal -offset 2n /* Clean up resources belonging to 'a' (this is implemented elsewhere) */ void STUFF_cleanup_doall(STUFF *a); /* Implement a prototype-compatible wrapper for "STUFF_cleanup" */ IMPLEMENT_LHASH_DOALL_FN(STUFF_cleanup, STUFF) /* ... then later in the code ... */ /* So to run "STUFF_cleanup" against all items in a hash table ... */ lh_STUFF_doall(hashtable, LHASH_DOALL_FN(STUFF_cleanup)); /* Then the hash table itself can be deallocated */ lh_STUFF_free(hashtable); .Ed .Pp When doing this, be careful if you delete entries from the hash table in your callbacks: the table may decrease in size, moving the item that you are currently on down lower in the hash table \(em this could cause some entries to be skipped during the iteration. The second best solution to this problem is to set hash->down_load=0 before you start (which will stop the hash table ever decreasing in size). The best solution is probably to avoid deleting items from the hash table inside a doall callback! .Pp .Fn lh_<type>_doall_arg is the same as .Fn lh_<type>_doall except that .Fa func will be called with .Fa arg as the second argument and .Fa func should be of type .Vt LHASH_DOALL_ARG_FN_TYPE (a callback prototype that is passed both the table entry and an extra argument). As with .Fn lh_<type>_doall , you can instead choose to declare your callback with a prototype matching the types you are dealing with and use the declare/implement macros to create compatible wrappers that cast variables before calling your type-specific callbacks. An example of this is demonstrated here (printing all hash table entries to a BIO that is provided by the caller): .Bd -literal -offset 2n /* Print item 'a' to 'output_bio' (this is implemented elsewhere) */ void STUFF_print_doall_arg(const STUFF *a, BIO *output_bio); /* Implement a prototype-compatible wrapper for "STUFF_print" */ static IMPLEMENT_LHASH_DOALL_ARG_FN(STUFF, const STUFF, BIO) /* ... then later in the code ... */ /* Print out the entire hashtable to a particular BIO */ lh_STUFF_doall_arg(hashtable, LHASH_DOALL_ARG_FN(STUFF_print), BIO, logging_bio); .Ed .Pp .Fn lh_<type>_error can be used to determine if an error occurred in the last operation. .Fn lh_<type>_error is a macro. .Sh RETURN VALUES .Fn lh_<type>_new returns .Dv NULL on error, otherwise a pointer to the new .Vt LHASH structure. .Pp When a hash table entry is replaced, .Fn lh_<type>_insert returns the value being replaced. .Dv NULL is returned on normal operation and on error. .Pp .Fn lh_<type>_delete returns the entry being deleted. .Dv NULL is returned if there is no such value in the hash table. .Pp .Fn lh_<type>_retrieve returns the hash table entry if it has been found, or .Dv NULL otherwise. .Pp .Fn lh_<type>_error returns 1 if an error occurred in the last operation, or 0 otherwise. .Pp .Fn lh_<type>_free , .Fn lh_<type>_doall , and .Fn lh_<type>_doall_arg return no values. .Sh NOTES The various LHASH macros and callback types exist to make it possible to write type-checked code without resorting to function-prototype casting \(em an evil that makes application code much harder to audit/verify and also opens the window of opportunity for stack corruption and other hard-to-find bugs. It also, apparently, violates ANSI-C. .Pp The LHASH code regards table entries as constant data. As such, it internally represents .Fn lh_<type>_insert Ap ed items with a .Vt const void * pointer type. This is why callbacks such as those used by .Fn lh_<type>_doall and .Fn lh_<type>_doall_arg declare their prototypes with "const", even for the parameters that pass back the table items' data pointers \(em for consistency, user-provided data is "const" at all times as far as the LHASH code is concerned. However, as callers are themselves providing these pointers, they can choose whether they too should be treating all such parameters as constant. .Pp As an example, a hash table may be maintained by code that, for reasons of encapsulation, has only "const" access to the data being indexed in the hash table (i.e. it is returned as "const" from elsewhere in their code) \(em in this case the LHASH prototypes are appropriate as-is. Conversely, if the caller is responsible for the life-time of the data in question, then they may well wish to make modifications to table item passed back in the .Fn lh_<type>_doall or .Fn lh_<type>_doall_arg callbacks (see the "STUFF_cleanup" example above). If so, the caller can either cast the "const" away (if they're providing the raw callbacks themselves) or use the macros to declare/implement the wrapper functions without "const" types. .Pp Callers that only have "const" access to data they are indexing in a table, yet declare callbacks without constant types (or cast the "const" away themselves), are therefore creating their own risks/bugs without being encouraged to do so by the API. On a related note, those auditing code should pay special attention to any instances of DECLARE/IMPLEMENT_LHASH_DOALL_[ARG_]_FN macros that provide types without any "const" qualifiers. .Sh INTERNALS The following description is based on the SSLeay documentation: .Pp The lhash library implements a hash table described in the .Em Communications of the ACM in 1991. What makes this hash table different is that as the table fills, the hash table is increased (or decreased) in size via .Xr OPENSSL_realloc 3 . When a 'resize' is done, instead of all hashes being redistributed over twice as many 'buckets', one bucket is split. So when an 'expand' is done, there is only a minimal cost to redistribute some values. Subsequent inserts will cause more single 'bucket' redistributions but there will never be a sudden large cost due to redistributing all the \&'buckets'. .Pp The state for a particular hash table is kept in the .Vt LHASH structure. The decision to increase or decrease the hash table size is made depending on the 'load' of the hash table. The load is the number of items in the hash table divided by the size of the hash table. The default values are as follows. If (hash->up_load < load) => expand. if (hash->down_load > load) => contract. The .Fa up_load has a default value of 1 and .Fa down_load has a default value of 2. These numbers can be modified by the application by just playing with the .Fa up_load and .Fa down_load variables. The 'load' is kept in a form which is multiplied by 256. So hash->up_load=8*256 will cause a load of 8 to be set. .Pp If you are interested in performance the field to watch is .Fa num_comp_calls . The hash library keeps track of the 'hash' value for each item so when a lookup is done, the 'hashes' are compared, if there is a match, then a full compare is done, and hash->num_comp_calls is incremented. If num_comp_calls is not equal to num_delete plus num_retrieve it means that your hash function is generating hashes that are the same for different values. It is probably worth changing your hash function if this is the case because even if your hash table has 10 items in a 'bucket', it can be searched with 10 .Vt unsigned long compares and 10 linked list traverses. This will be much less expensive that 10 calls to your compare function. .Pp .Fn lh_strhash is a demo string hashing function: .Pp .Dl unsigned long lh_strhash(const char *c); .Pp Since the LHASH routines would normally be passed structures, this routine would not normally be passed to .Fn lh_<type>_new , rather it would be used in the function passed to .Fn lh_<type>_new . .Sh SEE ALSO .Xr lh_stats 3 .Sh HISTORY The lhash library is available in all versions of SSLeay and OpenSSL. .Fn lh_<type>_error was added in SSLeay 0.9.1b. .Pp In OpenSSL 0.9.7, all lhash functions that were passed function pointers were changed for better type safety, and the function types .Vt LHASH_COMP_FN_TYPE , .Vt LHASH_HASH_FN_TYPE , .Vt LHASH_DOALL_FN_TYPE , and .Vt LHASH_DOALL_ARG_FN_TYPE became available. .Pp In OpenSSL 1.0.0, the lhash interface was revamped for even better type checking. .Sh BUGS .Fn lh_<type>_insert returns .Dv NULL both for success and error. |
Changes to jni/libressl/man/lh_stats.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "lh_stats 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "lh_stats 3" .TH lh_stats 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" lh_stats, lh_node_stats, lh_node_usage_stats, lh_stats_bio, lh_node_stats_bio, lh_node_usage_stats_bio \- LHASH statistics |
︙ | ︙ | |||
118 119 120 121 122 123 124 | \&\fIlh_stats_bio()\fR, \fIlh_node_stats_bio()\fR and \fIlh_node_usage_stats_bio()\fR are the same as the above, except that the output goes to a \fB\s-1BIO\s0\fR. .SH "RETURN VALUES" .IX Header "RETURN VALUES" These functions do not return values. .SH "SEE ALSO" .IX Header "SEE ALSO" | | | 118 119 120 121 122 123 124 125 126 127 128 129 130 | \&\fIlh_stats_bio()\fR, \fIlh_node_stats_bio()\fR and \fIlh_node_usage_stats_bio()\fR are the same as the above, except that the output goes to a \fB\s-1BIO\s0\fR. .SH "RETURN VALUES" .IX Header "RETURN VALUES" These functions do not return values. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIbio\fR\|(3), \fIlh_new\fR\|(3) .SH "HISTORY" .IX Header "HISTORY" These functions are available in all versions of SSLeay and OpenSSL. .PP This manpage is derived from the SSLeay documentation. |
Deleted jni/libressl/man/lhash.3.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/man/openssl.1.
more than 10,000 changes
Changes to jni/libressl/man/rsa.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "rsa 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "rsa 3" .TH rsa 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" rsa \- RSA public key cryptosystem .SH "SYNOPSIS" |
︙ | ︙ |
Changes to jni/libressl/man/ssl.3.
1 | .\" | | | | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | .\" .\" $OpenBSD: ssl.3,v 1.3 2015/09/10 18:04:50 schwarze Exp $ .\" .Dd $Mdocdate: September 10 2015 $ .Dt SSL 3 .Os .Sh NAME .Nm ssl .Nd OpenSSL SSL/TLS library .Sh DESCRIPTION The OpenSSL .Nm ssl library implements the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols. It provides a rich API which is documented here. .Pp |
︙ | ︙ |
Changes to jni/libressl/man/tls_init.3.
|
| | | > > > > > > > > > > > > > > > > > < > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < < > > > | | | > > < < | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 | .\" $OpenBSD: tls_init.3,v 1.61 2016/05/27 11:25:57 sthen Exp $ .\" .\" Copyright (c) 2014 Ted Unangst <tedu@openbsd.org> .\" .\" 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. .\" .Dd $Mdocdate: May 27 2016 $ .Dt TLS_INIT 3 .Os .Sh NAME .Nm tls_init , .Nm tls_config_error , .Nm tls_error , .Nm tls_config_new , .Nm tls_config_free , .Nm tls_config_parse_protocols , .Nm tls_config_set_ca_file , .Nm tls_config_set_ca_path , .Nm tls_config_set_ca_mem , .Nm tls_config_set_cert_file , .Nm tls_config_set_cert_mem , .Nm tls_config_set_ciphers , .Nm tls_config_set_dheparams , .Nm tls_config_set_ecdhecurve , .Nm tls_config_set_key_file , .Nm tls_config_set_key_mem , .Nm tls_config_set_keypair_file , .Nm tls_config_set_keypair_mem , .Nm tls_config_set_protocols , .Nm tls_config_set_verify_depth , .Nm tls_config_prefer_ciphers_client , .Nm tls_config_prefer_ciphers_server , .Nm tls_config_clear_keys , .Nm tls_config_insecure_noverifycert , .Nm tls_config_insecure_noverifyname , .Nm tls_config_insecure_noverifytime , .Nm tls_config_verify , .Nm tls_config_verify_client , .Nm tls_config_verify_client_optional , .Nm tls_peer_cert_provided , .Nm tls_peer_cert_contains_name , .Nm tls_peer_cert_issuer , .Nm tls_peer_cert_subject , .Nm tls_peer_cert_hash , .Nm tls_peer_cert_notbefore , .Nm tls_peer_cert_notafter , .Nm tls_conn_version , .Nm tls_conn_cipher , .Nm tls_load_file , .Nm tls_client , .Nm tls_server , .Nm tls_configure , .Nm tls_reset , .Nm tls_free , .Nm tls_connect , .Nm tls_connect_fds , .Nm tls_connect_servername , .Nm tls_connect_socket , .Nm tls_accept_fds , .Nm tls_accept_socket , .Nm tls_handshake , .Nm tls_read , .Nm tls_write , .Nm tls_close .Nd TLS client and server API .Sh SYNOPSIS .In tls.h .Ft "int" .Fn tls_init "void" .Ft "const char *" .Fn tls_config_error "struct tls_config *config" .Ft "const char *" .Fn tls_error "struct tls *ctx" .Ft "struct tls_config *" .Fn tls_config_new "void" .Ft "void" .Fn tls_config_free "struct tls_config *config" .Ft "int" .Fn tls_config_parse_protocols "uint32_t *protocols" "const char *protostr" .Ft "int" .Fn tls_config_set_ca_file "struct tls_config *config" "const char *ca_file" .Ft "int" .Fn tls_config_set_ca_path "struct tls_config *config" "const char *ca_path" .Ft "int" .Fn tls_config_set_ca_mem "struct tls_config *config" "const uint8_t *cert" "size_t len" .Ft "int" .Fn tls_config_set_cert_file "struct tls_config *config" "const char *cert_file" .Ft "int" .Fn tls_config_set_cert_mem "struct tls_config *config" "const uint8_t *cert" "size_t len" .Ft "int" .Fn tls_config_set_ciphers "struct tls_config *config" "const char *ciphers" .Ft "int" .Fn tls_config_set_dheparams "struct tls_config *config" "const char *params" .Ft "int" .Fn tls_config_set_ecdhecurve "struct tls_config *config" "const char *name" .Ft "int" .Fn tls_config_set_key_file "struct tls_config *config" "const char *key_file" .Ft "int" .Fn tls_config_set_key_mem "struct tls_config *config" "const uint8_t *key" "size_t len" .Ft "int" .Fn tls_config_set_keypair_file "struct tls_config *config" "const char *cert_file" "const char *key_file" .Ft "int" .Fn tls_config_set_keypair_mem "struct tls_config *config" "const uint8_t *cert" "size_t cert_len" "const uint8_t *key" "size_t key_len" .Ft "void" .Fn tls_config_set_protocols "struct tls_config *config" "uint32_t protocols" .Ft "void" .Fn tls_config_set_verify_depth "struct tls_config *config" "int verify_depth" .Ft "void" .Fn tls_config_prefer_ciphers_client "struct tls_config *config" .Ft "void" .Fn tls_config_prefer_ciphers_server "struct tls_config *config" .Ft "void" .Fn tls_config_clear_keys "struct tls_config *config" .Ft "void" .Fn tls_config_insecure_noverifycert "struct tls_config *config" .Ft "void" .Fn tls_config_insecure_noverifyname "struct tls_config *config" .Ft "void" .Fn tls_config_insecure_noverifytime "struct tls_config *config" .Ft "void" .Fn tls_config_verify "struct tls_config *config" .Ft "void" .Fn tls_config_verify_client "struct tls_config *config" .Ft "void" .Fn tls_config_verify_client_optional "struct tls_config *config" .Ft "int" .Fn tls_peer_cert_provided "struct tls *ctx" .Ft "int" .Fn tls_peer_cert_contains_name "struct tls *ctx" "const char *name" .Ft "const char *" .Fn tls_peer_cert_issuer "struct tls *ctx" .Ft "const char *" .Fn tls_peer_cert_subject "struct tls *ctx" .Ft "const char *" .Fn tls_peer_cert_hash "struct tls *ctx" .Ft "time_t" .Fn tls_peer_cert_notbefore "struct tls *ctx" .Ft "time_t" .Fn tls_peer_cert_notafter "struct tls *ctx" .Ft "const char *" .Fn tls_conn_version "struct tls *ctx" .Ft "const char *" .Fn tls_conn_cipher "struct tls *ctx" .Ft "uint8_t *" .Fn tls_load_file "const char *file" "size_t *len" "char *password" .Ft "struct tls *" .Fn tls_client void .Ft "struct tls *" .Fn tls_server void .Ft "int" .Fn tls_configure "struct tls *ctx" "struct tls_config *config" .Ft "void" .Fn tls_reset "struct tls *ctx" .Ft "void" .Fn tls_free "struct tls *ctx" .Ft "int" .Fn tls_connect "struct tls *ctx" "const char *host" "const char *port" .Ft "int" .Fn tls_connect_fds "struct tls *ctx" "int fd_read" "int fd_write" "const char *servername" .Ft "int" .Fn tls_connect_servername "struct tls *ctx" "const char *host" "const char *port" "const char *servername" .Ft "int" .Fn tls_connect_socket "struct tls *ctx" "int s" "const char *servername" .Ft "int" .Fn tls_accept_fds "struct tls *tls" "struct tls **cctx" "int fd_read" "int fd_write" .Ft "int" .Fn tls_accept_socket "struct tls *tls" "struct tls **cctx" "int socket" .Ft "int" .Fn tls_handshake "struct tls *ctx" .Ft "ssize_t" .Fn tls_read "struct tls *ctx" "void *buf" "size_t buflen" .Ft "ssize_t" .Fn tls_write "struct tls *ctx" "const void *buf" "size_t buflen" .Ft "int" .Fn tls_close "struct tls *ctx" .Sh DESCRIPTION The .Nm tls family of functions establishes a secure communications channel using the TLS socket protocol. Both clients and servers are supported. .Pp The .Fn tls_init function should be called once before any function is used. It may be called more than once, but not concurrently. .Pp Before a connection is created, a configuration must be created. The .Fn tls_config_new function returns a new default configuration that can be used for future connections. Several functions exist to change the options of the configuration; see below. .Pp A TLS connection is represented as a .Em context . A new .Em context is created by either the .Fn tls_client or .Fn tls_server |
︙ | ︙ | |||
183 184 185 186 187 188 189 190 191 192 193 194 | A server can accept a new client connection by calling .Fn tls_accept_socket on an already established socket connection. Alternatively, a new client connection can be accepted over a pair of existing file descriptors by calling .Fn tls_accept_fds . .Pp Two functions are provided for input and output, .Fn tls_read and .Fn tls_write . .Pp | > > > > | | 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 | A server can accept a new client connection by calling .Fn tls_accept_socket on an already established socket connection. Alternatively, a new client connection can be accepted over a pair of existing file descriptors by calling .Fn tls_accept_fds . .Pp The TLS handshake can be completed by calling .Fn tls_handshake . Two functions are provided for input and output, .Fn tls_read and .Fn tls_write . Both of these functions will result in the TLS handshake being performed if it has not already completed. .Pp After use, a TLS .Em context should be closed with .Fn tls_close , and then freed by calling .Fn tls_free . When no more contexts are to be created, the .Em tls_config |
︙ | ︙ | |||
237 238 239 240 241 242 243 | The following functions modify a configuration by setting parameters. Configuration options may apply to only clients or only servers or both. .Bl -bullet -offset four .It .Fn tls_config_set_ca_file sets the filename used to load a file containing the root certificates. | | | | > > > > > > > > > > > > > > > | | > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | < < < < < < < | | 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 | The following functions modify a configuration by setting parameters. Configuration options may apply to only clients or only servers or both. .Bl -bullet -offset four .It .Fn tls_config_set_ca_file sets the filename used to load a file containing the root certificates. .Em (Client and Server) .It .Fn tls_config_set_ca_path sets the path (directory) which should be searched for root certificates. .Em (Client and Server) .It .Fn tls_config_set_ca_mem sets the root certificates directly from memory. .Em (Client and Server) .It .Fn tls_config_set_cert_file sets file from which the public certificate will be read. .Em (Client and server) .It .Fn tls_config_set_cert_mem sets the public certificate directly from memory. .Em (Client and server) .It .Fn tls_config_set_ciphers sets the list of ciphers that may be used. Lists of ciphers are specified by name, and the permitted names are: .Pp .Bl -tag -width "insecure" -offset indent -compact .It Dv "secure" (or alias "default") .It Dv "compat" .It Dv "legacy" .It Dv "insecure" (or alias "all") .El .Pp Alternatively, libssl cipher strings can be specified. See the CIPHERS section of .Xr openssl 1 for further information. .Pp .Em (Client and server) .It .Fn tls_config_set_key_file sets the file from which the private key will be read. .Em (Client and server) .It .Fn tls_config_set_key_mem directly sets the private key from memory. .Em (Client and server) .It .Fn tls_config_set_keypair_file sets the files from which the public certificate and private key will be read. .Em (Client and server) .It .Fn tls_config_set_keypair_mem directly sets the public certificate and private key from memory. .Em (Client and server) .It .Fn tls_config_set_protocols sets which versions of the protocol may be used. Possible values are the bitwise OR of: .Pp .Bl -tag -width "TLS_PROTOCOL_TLSv1_2" -offset indent -compact .It Dv TLS_PROTOCOL_TLSv1_0 .It Dv TLS_PROTOCOL_TLSv1_1 .It Dv TLS_PROTOCOL_TLSv1_2 .El .Pp Additionally, the values .Dv TLS_PROTOCOL_TLSv1 (TLSv1.0, TLSv1.1 and TLSv1.2), .Dv TLS_PROTOCOLS_ALL (all supported protocols) and .Dv TLS_PROTOCOLS_DEFAULT (TLSv1.2 only) may be used. .Em (Client and server) .It .Fn tls_config_prefer_ciphers_client prefers ciphers in the client's cipher list when selecting a cipher suite. This is considered to be less secure than preferring the server's list. .Em (Server) .It .Fn tls_config_prefer_ciphers_server prefers ciphers in the server's cipher list when selecting a cipher suite. This is considered to be more secure than preferring the client's list and is the default. .Em (Server) .It .Fn tls_config_clear_keys clears any secret keys from memory. .Em (Server) .It .Fn tls_config_insecure_noverifycert disables certificate verification. Be extremely careful when using this option. .Em (Client and server) .It .Fn tls_config_insecure_noverifyname disables server name verification. Be careful when using this option. .Em (Client) .It .Fn tls_config_insecure_noverifytime disables validity checking of certificates. Be careful when using this option. .Em (Client and server) .It .Fn tls_config_verify reenables server name and certificate verification. .Em (Client) .It .Fn tls_config_verify_client enables client certificate verification, requiring the client to send a certificate. .Em (Server) .It .Fn tls_config_verify_client_optional enables client certificate verification, without requiring the client to send a certificate. .Em (Server) .It .Fn tls_peer_cert_provided checks if the peer of .Ar ctx has provided a certificate. .Fn tls_peer_cert_provided can only succeed after the handshake is complete. .Em (Server and client) .It .Fn tls_peer_cert_contains_name checks if the peer of a TLS .Ar ctx has provided a certificate that contains a SAN or CN that matches .Ar name . .Fn tls_peer_cert_contains_name can only succeed after the handshake is complete. .Em (Server and client) .It .Fn tls_peer_cert_subject returns a string corresponding to the subject of the peer certificate from .Ar ctx . .Fn tls_peer_cert_subject will only succeed after the handshake is complete. .Em (Server and client) .It .Fn tls_peer_cert_issuer returns a string corresponding to the issuer of the peer certificate from .Ar ctx . .Fn tls_peer_cert_issuer will only succeed after the handshake is complete. .Em (Server and client) .It .Fn tls_peer_cert_hash returns a string corresponding to a hash of the raw peer certificate from .Ar ctx prefixed by a hash name followed by a colon. The hash currently used is SHA256, though this could change in the future. The hash string for a certificate in file .Ar mycert.crt can be generated using the commands: .Bd -literal -offset indent h=$(openssl x509 -outform der -in mycert.crt | sha256) printf "SHA256:${h}\\n" .Ed .It .Fn tls_peer_cert_notbefore returns the time corresponding to the start of the validity period of the peer certificate from .Ar ctx . .Fn tls_peer_cert_notbefore will only succeed after the handshake is complete. .Em (Server and client) .It .Fn tls_peer_cert_notafter returns the time corresponding to the end of the validity period of the peer certificate from .Ar ctx . .Fn tls_peer_cert_notafter will only succeed after the handshake is complete. .Em (Server and client) .It .Fn tls_conn_version returns a string corresponding to a TLS version negotiated with the peer connected to .Ar ctx . .Fn tls_conn_version will only succeed after the handshake is complete. .It .Fn tls_conn_cipher returns a string corresponding to the cipher suite negotiated with the peer connected to .Ar ctx . .Fn tls_conn_cipher will only succeed after the handshake is complete. .Em (Server and client) .It .Fn tls_load_file loads a certificate or key from disk into memory to be loaded with .Fn tls_config_set_ca_mem , .Fn tls_config_set_cert_mem or .Fn tls_config_set_key_mem . A private key will be decrypted if the optional .Ar password argument is specified. .Em (Client and server) .El .Pp The following functions create, prepare, and free a connection context. .Bl -bullet -offset four .It .Fn tls_client creates a new TLS context for client connections. .It .Fn tls_server creates a new TLS context for server connections. .It .Fn tls_configure readies a TLS context for use by applying the configuration options. .It .Fn tls_free frees a TLS context after use. .El .Pp The following functions initiate a connection and perform input and output operations. .Bl -bullet -offset four .It .Fn tls_connect |
︙ | ︙ | |||
364 365 366 367 368 369 370 | connects a client context to an already established socket connection. .It .Fn tls_accept_fds creates a new context suitable for reading and writing on an existing pair of file descriptors and returns it in .Fa *cctx . A configured server context should be passed in | | < < < | > > > > > > | < > | < | > | > > > > > > > > > > > | > > > > > > | < < < < < < < < > > > > > > | | | | | | | < | > > > > > | < | > | < < < < | < < | | > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > | < > > > | < > | | | > > > | | | 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 | connects a client context to an already established socket connection. .It .Fn tls_accept_fds creates a new context suitable for reading and writing on an existing pair of file descriptors and returns it in .Fa *cctx . A configured server context should be passed in .Fa ctx . .It .Fn tls_accept_socket creates a new context suitable for reading and writing on an already established socket connection and returns it in .Fa *cctx . A configured server context should be passed in .Fa ctx . .It .Fn tls_handshake performs the TLS handshake. It is only necessary to call this function if you need to guarantee that the handshake has completed, as both .Fn tls_read and .Fn tls_write will perform the TLS handshake if necessary. .It .Fn tls_read reads .Fa buflen bytes of data from the socket into .Fa buf . It returns the amount of data read. .It .Fn tls_write writes .Fa buflen bytes of data from .Fa buf to the socket. It returns the amount of data written. .It .Fn tls_close closes a connection after use. Only the TLS layer will be shut down and the caller is responsible for closing the file descriptors, unless the connection was established using .Fn tls_connect or .Fn tls_connect_servername . .El .Sh RETURN VALUES The .Fn tls_peer_cert_provided and .Fn tls_peer_cert_contains_name functions return 1 if the check succeeds, and 0 if it does not. Functions that return a .Vt time_t will return a time in epoch-seconds on success, and -1 on error. Functions that return a .Vt ssize_t will return a size on success, and -1 on error. All other functions that return .Vt int will return 0 on success and -1 on error. Functions that return a pointer will return NULL on error, which indicates an out of memory condition. .Pp The .Fn tls_handshake , .Fn tls_read , .Fn tls_write , and .Fn tls_close functions have two special return values: .Pp .Bl -tag -width "TLS_WANT_POLLOUT" -offset indent -compact .It Dv TLS_WANT_POLLIN The underlying read file descriptor needs to be readable in order to continue. .It Dv TLS_WANT_POLLOUT The underlying write file descriptor needs to be writeable in order to continue. .El .Pp In the case of blocking file descriptors, the same function call should be repeated immediately. In the case of non-blocking file descriptors, the same function call should be repeated when the required condition has been met. .Pp Callers of these functions cannot rely on the value of the global .Ar errno . To prevent mishandling of error conditions, .Fn tls_handshake , .Fn tls_read , .Fn tls_write , and .Fn tls_close all explicitly clear .Ar errno . .Sh EXAMPLES The following example demonstrates how to handle TLS writes on a blocking file descriptor: .Bd -literal -offset indent \&... while (len > 0) { ssize_t ret; ret = tls_write(ctx, buf, len); if (ret == TLS_WANT_POLLIN || ret == TLS_WANT_POLLOUT) continue; if (ret < 0) err(1, "tls_write: %s", tls_error(ctx)); buf += ret; len -= ret; } \&... .Ed .Pp The following example demonstrates how to handle TLS writes on a non-blocking file descriptor using .Xr poll 2 : .Bd -literal -offset indent \&... pfd[0].fd = fd; pfd[0].events = POLLIN|POLLOUT; while (len > 0) { nready = poll(pfd, 1, 0); if (nready == -1) err(1, "poll"); if ((pfd[0].revents & (POLLERR|POLLNVAL))) errx(1, "bad fd %d", pfd[0].fd); if ((pfd[0].revents & (pfd[0].events|POLLHUP))) { ssize_t ret; ret = tls_write(ctx, buf, len); if (ret == TLS_WANT_POLLIN) pfd[0].events = POLLIN; else if (ret == TLS_WANT_POLLOUT) pfd[0].events = POLLOUT; else if (ret < 0) err(1, "tls_write: %s", tls_error(ctx)); else { buf += ret; len -= ret; } } } \&... .Ed .Sh ERRORS The .Fn tls_config_error and .Fn tls_error functions may be used to retrieve a string containing more information about the most recent error relating to a configuration or context. .\" .Sh SEE ALSO .Sh HISTORY The .Nm tls API first appeared in .Ox 5.6 as a response to the unnecessary challenges other APIs present in order to use them safely. |
Deleted jni/libressl/man/ui.3.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/libressl/man/ui_compat.3.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/man/x509.3.
︙ | ︙ | |||
67 68 69 70 71 72 73 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "x509 3" | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "x509 3" .TH x509 3 "2016-09-23" "LibreSSL " "LibreSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" x509 \- X.509 certificate handling .SH "SYNOPSIS" |
︙ | ︙ |
Added jni/libressl/scripts/config.guess.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 | #! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-12-14' # 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 program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR 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/>. # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to <config-patches@gnu.org>. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include <features.h> #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || \ echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; *:Sortix:*:*) echo ${UNAME_MACHINE}-unknown-sortix exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <sys/systemcfg.h> main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include <stdlib.h> #include <unistd.h> int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <unistd.h> int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; k1om:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` echo ${UNAME_MACHINE}-pc-isc$UNAME_REL elif /bin/uname -X 2>/dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says <Richard.M.Bartel@ccMail.Census.GOV> echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes <hewes@openmarket.com>. # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac cat >&2 <<EOF $0: unable to guess system type This script, last modified $timestamp, has failed to recognize the operating system you are using. It is advised that you download the most up to date version of the config scripts from http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD and http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run ($0) is already up to date, please send the following data and any information you think might be pertinent to <config-patches@gnu.org> in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: |
Added jni/libressl/scripts/config.sub.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 | #! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-12-14' # 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 program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR 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/>. # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to <config-patches@gnu.org>. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: |
Changes to jni/libressl/scripts/travis.
1 2 3 4 5 6 7 8 | #!/bin/sh set -e ./autogen.sh if [ "x$ARCH" = "xnative" ]; then # test autotools ./configure | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #!/bin/sh set -e ./autogen.sh if [ "x$ARCH" = "xnative" ]; then # test autotools ./configure make -j 4 distcheck # make distribution make dist tar zxvf libressl-*.tar.gz cd libressl-* mkdir build cd build # test cmake and ninja if [ `uname` = "Darwin" ]; then cmake .. make make test else sudo apt-get update sudo apt-get install -y python-software-properties sudo apt-add-repository -y ppa:kalakris/cmake sudo apt-get update sudo apt-get install -y cmake ninja-build cmake -GNinja .. ninja ninja test fi else CPU=i686 if [ "x$ARCH" = "xmingw64" ]; then CPU=x86_64 fi export CC=$CPU-w64-mingw32-gcc |
︙ | ︙ |
Changes to jni/libressl/ssl/CMakeLists.txt.
︙ | ︙ | |||
17 18 19 20 21 22 23 | d1_meth.c d1_pkt.c d1_srtp.c d1_srvr.c pqueue.c s23_clnt.c s23_lib.c | < < < | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | d1_meth.c d1_pkt.c d1_srtp.c d1_srvr.c pqueue.c s23_clnt.c s23_lib.c s23_pkt.c s23_srvr.c s3_both.c s3_cbc.c s3_clnt.c s3_lib.c s3_pkt.c s3_srvr.c ssl_algs.c ssl_asn1.c ssl_cert.c ssl_ciph.c ssl_err.c |
︙ | ︙ | |||
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | t1_srvr.c ) if (BUILD_SHARED) add_library(ssl-objects OBJECT ${SSL_SRC}) add_library(ssl STATIC $<TARGET_OBJECTS:ssl-objects>) add_library(ssl-shared SHARED $<TARGET_OBJECTS:ssl-objects>) set_target_properties(ssl-shared PROPERTIES OUTPUT_NAME ssl) set_target_properties(ssl-shared PROPERTIES VERSION ${SSL_VERSION} SOVERSION ${SSL_MAJOR_VERSION}) install(TARGETS ssl ssl-shared DESTINATION lib) else() add_library(ssl STATIC ${SSL_SRC}) install(TARGETS ssl DESTINATION lib) endif() | > > > | 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | t1_srvr.c ) if (BUILD_SHARED) add_library(ssl-objects OBJECT ${SSL_SRC}) add_library(ssl STATIC $<TARGET_OBJECTS:ssl-objects>) add_library(ssl-shared SHARED $<TARGET_OBJECTS:ssl-objects>) if (MSVC) target_link_libraries(ssl-shared crypto-shared Ws2_32.lib) endif() set_target_properties(ssl-shared PROPERTIES OUTPUT_NAME ssl) set_target_properties(ssl-shared PROPERTIES VERSION ${SSL_VERSION} SOVERSION ${SSL_MAJOR_VERSION}) install(TARGETS ssl ssl-shared DESTINATION lib) else() add_library(ssl STATIC ${SSL_SRC}) install(TARGETS ssl DESTINATION lib) endif() |
Changes to jni/libressl/ssl/Makefile.am.
1 2 3 4 5 6 7 8 | include $(top_srcdir)/Makefile.am.common lib_LTLIBRARIES = libssl.la EXTRA_DIST = VERSION EXTRA_DIST += CMakeLists.txt libssl_la_LDFLAGS = -version-info @LIBSSL_VERSION@ -no-undefined | | < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | include $(top_srcdir)/Makefile.am.common lib_LTLIBRARIES = libssl.la EXTRA_DIST = VERSION EXTRA_DIST += CMakeLists.txt libssl_la_LDFLAGS = -version-info @LIBSSL_VERSION@ -no-undefined libssl_la_LIBADD = $(abs_top_builddir)/crypto/libcrypto.la libssl_la_SOURCES = bio_ssl.c libssl_la_SOURCES += bs_ber.c libssl_la_SOURCES += bs_cbb.c libssl_la_SOURCES += bs_cbs.c libssl_la_SOURCES += d1_both.c libssl_la_SOURCES += d1_clnt.c libssl_la_SOURCES += d1_enc.c libssl_la_SOURCES += d1_lib.c libssl_la_SOURCES += d1_meth.c libssl_la_SOURCES += d1_pkt.c libssl_la_SOURCES += d1_srtp.c libssl_la_SOURCES += d1_srvr.c libssl_la_SOURCES += pqueue.c libssl_la_SOURCES += s23_clnt.c libssl_la_SOURCES += s23_lib.c libssl_la_SOURCES += s23_pkt.c libssl_la_SOURCES += s23_srvr.c libssl_la_SOURCES += s3_both.c libssl_la_SOURCES += s3_cbc.c libssl_la_SOURCES += s3_clnt.c libssl_la_SOURCES += s3_lib.c libssl_la_SOURCES += s3_pkt.c libssl_la_SOURCES += s3_srvr.c libssl_la_SOURCES += ssl_algs.c libssl_la_SOURCES += ssl_asn1.c libssl_la_SOURCES += ssl_cert.c libssl_la_SOURCES += ssl_ciph.c libssl_la_SOURCES += ssl_err.c |
︙ | ︙ |
Changes to jni/libressl/ssl/Makefile.in.
︙ | ︙ | |||
130 131 132 133 134 135 136 | test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) | | | | | | | < | 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libssl_la_DEPENDENCIES = $(abs_top_builddir)/crypto/libcrypto.la am_libssl_la_OBJECTS = bio_ssl.lo bs_ber.lo bs_cbb.lo bs_cbs.lo \ d1_both.lo d1_clnt.lo d1_enc.lo d1_lib.lo d1_meth.lo d1_pkt.lo \ d1_srtp.lo d1_srvr.lo pqueue.lo s23_clnt.lo s23_lib.lo \ s23_pkt.lo s23_srvr.lo s3_both.lo s3_cbc.lo s3_clnt.lo \ s3_lib.lo s3_pkt.lo s3_srvr.lo ssl_algs.lo ssl_asn1.lo \ ssl_cert.lo ssl_ciph.lo ssl_err.lo ssl_err2.lo ssl_lib.lo \ ssl_rsa.lo ssl_sess.lo ssl_stat.lo ssl_txt.lo t1_clnt.lo \ t1_enc.lo t1_lib.lo t1_meth.lo t1_reneg.lo t1_srvr.lo libssl_la_OBJECTS = $(am_libssl_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libssl_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ |
︙ | ︙ | |||
340 341 342 343 344 345 346 | top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat -DLIBRESSL_INTERNAL lib_LTLIBRARIES = libssl.la EXTRA_DIST = VERSION CMakeLists.txt libssl_la_LDFLAGS = -version-info @LIBSSL_VERSION@ -no-undefined | | | | | | | < | 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 | top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat -DLIBRESSL_INTERNAL lib_LTLIBRARIES = libssl.la EXTRA_DIST = VERSION CMakeLists.txt libssl_la_LDFLAGS = -version-info @LIBSSL_VERSION@ -no-undefined libssl_la_LIBADD = $(abs_top_builddir)/crypto/libcrypto.la libssl_la_SOURCES = bio_ssl.c bs_ber.c bs_cbb.c bs_cbs.c d1_both.c \ d1_clnt.c d1_enc.c d1_lib.c d1_meth.c d1_pkt.c d1_srtp.c \ d1_srvr.c pqueue.c s23_clnt.c s23_lib.c s23_pkt.c s23_srvr.c \ s3_both.c s3_cbc.c s3_clnt.c s3_lib.c s3_pkt.c s3_srvr.c \ ssl_algs.c ssl_asn1.c ssl_cert.c ssl_ciph.c ssl_err.c \ ssl_err2.c ssl_lib.c ssl_rsa.c ssl_sess.c ssl_stat.c ssl_txt.c \ t1_clnt.c t1_enc.c t1_lib.c t1_meth.c t1_reneg.c t1_srvr.c noinst_HEADERS = srtp.h ssl_locl.h bytestring.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps) @for dep in $?; do \ |
︙ | ︙ | |||
444 445 446 447 448 449 450 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/d1_meth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/d1_pkt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/d1_srtp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/d1_srvr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pqueue.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s23_clnt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s23_lib.Plo@am__quote@ | < < < | 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/d1_meth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/d1_pkt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/d1_srtp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/d1_srvr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pqueue.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s23_clnt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s23_lib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s23_pkt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s23_srvr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s3_both.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s3_cbc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s3_clnt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s3_lib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s3_pkt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s3_srvr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssl_algs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssl_asn1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssl_cert.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssl_ciph.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssl_err.Plo@am__quote@ |
︙ | ︙ |
Changes to jni/libressl/ssl/VERSION.
|
| | | 1 | 39:0:0 |
Changes to jni/libressl/ssl/bio_ssl.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bio_ssl.c,v 1.21 2014/11/16 14:12:47 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
76 77 78 79 80 81 82 | typedef struct bio_ssl_st { SSL *ssl; /* The ssl handle :-) */ /* re-negotiate every time the total number of bytes is this size */ int num_renegotiates; unsigned long renegotiate_count; unsigned long byte_count; unsigned long renegotiate_timeout; | | | 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | typedef struct bio_ssl_st { SSL *ssl; /* The ssl handle :-) */ /* re-negotiate every time the total number of bytes is this size */ int num_renegotiates; unsigned long renegotiate_count; unsigned long byte_count; unsigned long renegotiate_timeout; time_t last_time; } BIO_SSL; static BIO_METHOD methods_sslp = { .type = BIO_TYPE_SSL, .name = "ssl", .bwrite = ssl_write, .bread = ssl_read, |
︙ | ︙ | |||
165 166 167 168 169 170 171 | sb->byte_count = 0; sb->num_renegotiates++; SSL_renegotiate(ssl); r = 1; } } if ((sb->renegotiate_timeout > 0) && (!r)) { | | | | 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | sb->byte_count = 0; sb->num_renegotiates++; SSL_renegotiate(ssl); r = 1; } } if ((sb->renegotiate_timeout > 0) && (!r)) { time_t tm; tm = time(NULL); if (tm > sb->last_time + sb->renegotiate_timeout) { sb->last_time = tm; sb->num_renegotiates++; SSL_renegotiate(ssl); } } |
︙ | ︙ | |||
238 239 240 241 242 243 244 | bs->byte_count = 0; bs->num_renegotiates++; SSL_renegotiate(ssl); r = 1; } } if ((bs->renegotiate_timeout > 0) && (!r)) { | | | | 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 | bs->byte_count = 0; bs->num_renegotiates++; SSL_renegotiate(ssl); r = 1; } } if ((bs->renegotiate_timeout > 0) && (!r)) { time_t tm; tm = time(NULL); if (tm > bs->last_time + bs->renegotiate_timeout) { bs->last_time = tm; bs->num_renegotiates++; SSL_renegotiate(ssl); } } break; |
︙ | ︙ | |||
315 316 317 318 319 320 321 | SSL_set_accept_state(ssl); break; case BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT: ret = bs->renegotiate_timeout; if (num < 60) num = 5; bs->renegotiate_timeout = (unsigned long)num; | | | 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 | SSL_set_accept_state(ssl); break; case BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT: ret = bs->renegotiate_timeout; if (num < 60) num = 5; bs->renegotiate_timeout = (unsigned long)num; bs->last_time = time(NULL); break; case BIO_C_SET_SSL_RENEGOTIATE_BYTES: ret = bs->renegotiate_count; if ((long)num >=512) bs->renegotiate_count = (unsigned long)num; break; case BIO_C_GET_SSL_NUM_RENEGOTIATES: |
︙ | ︙ |
Changes to jni/libressl/ssl/bs_cbb.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bs_cbb.c,v 1.12 2015/06/18 23:25:07 doug Exp $ */ /* * Copyright (c) 2014, Google Inc. * * Permission to use, copy, modify, and/or 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. * |
︙ | ︙ | |||
32 33 34 35 36 37 38 | return 0; base->buf = buf; base->len = 0; base->cap = cap; base->can_resize = 1; | < > > > > > > > | 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | return 0; base->buf = buf; base->len = 0; base->cap = cap; base->can_resize = 1; cbb->base = base; cbb->is_top_level = 1; return 1; } int CBB_init(CBB *cbb, size_t initial_capacity) { uint8_t *buf = NULL; memset(cbb, 0, sizeof(*cbb)); if (initial_capacity > 0) { if ((buf = malloc(initial_capacity)) == NULL) return 0; } if (!cbb_init(cbb, buf, initial_capacity)) { free(buf); return 0; } return 1; } int CBB_init_fixed(CBB *cbb, uint8_t *buf, size_t len) { memset(cbb, 0, sizeof(*cbb)); if (!cbb_init(cbb, buf, len)) return 0; cbb->base->can_resize = 0; return 1; } void CBB_cleanup(CBB *cbb) { if (cbb->base) { |
︙ | ︙ |
Changes to jni/libressl/ssl/d1_both.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: d1_both.c,v 1.38 2015/09/11 18:08:21 jsing Exp $ */ /* * DTLS implementation written by Nagendra Modadugu * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. */ /* ==================================================================== * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. * |
︙ | ︙ | |||
342 343 344 345 346 347 348 | * but in that case we'll ignore the result * anyway */ unsigned char *p = (unsigned char *)&s->init_buf->data[s->init_off]; const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr; int xlen; | | < | | 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 | * but in that case we'll ignore the result * anyway */ unsigned char *p = (unsigned char *)&s->init_buf->data[s->init_off]; const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr; int xlen; if (frag_off == 0) { /* * Reconstruct message header is if it * is being sent in single fragment */ *p++ = msg_hdr->type; l2n3(msg_hdr->msg_len, p); s2n (msg_hdr->seq, p); l2n3(0, p); l2n3(msg_hdr->msg_len, p); p -= DTLS1_HM_HEADER_LENGTH; xlen = ret; } else { p += DTLS1_HM_HEADER_LENGTH; xlen = ret - DTLS1_HM_HEADER_LENGTH; } tls1_finish_mac(s, p, xlen); } if (ret == s->init_num) { if (s->msg_callback) s->msg_callback(1, s->version, type, s->init_buf->data, (size_t)(s->init_off + s->init_num), |
︙ | ︙ | |||
437 438 439 440 441 442 443 | /* reconstruct message header */ *(p++) = msg_hdr->type; l2n3(msg_len, p); s2n (msg_hdr->seq, p); l2n3(0, p); l2n3(msg_len, p); | | | | | < | | 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 | /* reconstruct message header */ *(p++) = msg_hdr->type; l2n3(msg_len, p); s2n (msg_hdr->seq, p); l2n3(0, p); l2n3(msg_len, p); p -= DTLS1_HM_HEADER_LENGTH; msg_len += DTLS1_HM_HEADER_LENGTH; tls1_finish_mac(s, p, msg_len); if (s->msg_callback) s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, msg_len, s, s->msg_callback_arg); memset(msg_hdr, 0x00, sizeof(struct hm_header_st)); /* Don't change sequence numbers while listening */ |
︙ | ︙ | |||
900 901 902 903 904 905 906 | ssl3_send_alert(s, SSL3_AL_FATAL, al); s->init_num = 0; *ok = 0; return (-1); } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 | ssl3_send_alert(s, SSL3_AL_FATAL, al); s->init_num = 0; *ok = 0; return (-1); } /* * for these 2 messages, we need to * ssl->enc_read_ctx re-init * ssl->s3->read_sequence zero * ssl->s3->read_mac_secret re-init * ssl->session->read_sym_enc assign * ssl->session->read_hash assign */ int dtls1_send_change_cipher_spec(SSL *s, int a, int b) { unsigned char *p; if (s->state == a) { p = (unsigned char *)s->init_buf->data; *p++=SSL3_MT_CCS; s->d1->handshake_write_seq = s->d1->next_handshake_write_seq; s->init_num = DTLS1_CCS_HEADER_LENGTH; s->init_off = 0; dtls1_set_message_header_int(s, SSL3_MT_CCS, 0, s->d1->handshake_write_seq, 0, 0); /* buffer the message to handle re-xmits */ dtls1_buffer_message(s, 1); |
︙ | ︙ | |||
1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 | return (l); } int dtls1_read_failed(SSL *s, int code) { if (code > 0) { fprintf(stderr, "invalid state reached %s:%d", __FILE__, __LINE__); return 1; } if (!dtls1_is_timer_expired(s)) { /* * not a timeout, none of our business, let higher layers * handle this. in fact it's probably an error | > > | 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 | return (l); } int dtls1_read_failed(SSL *s, int code) { if (code > 0) { #ifdef DEBUG fprintf(stderr, "invalid state reached %s:%d", __FILE__, __LINE__); #endif return 1; } if (!dtls1_is_timer_expired(s)) { /* * not a timeout, none of our business, let higher layers * handle this. in fact it's probably an error |
︙ | ︙ | |||
1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 | for (item = pqueue_next(&iter); item != NULL; item = pqueue_next(&iter)) { frag = (hm_fragment *)item->data; if (dtls1_retransmit_message(s, (unsigned short)dtls1_get_queue_priority( frag->msg_header.seq, frag->msg_header.is_ccs), 0, &found) <= 0 && found) { fprintf(stderr, "dtls1_retransmit_message() failed\n"); return -1; } } return 1; } | > > | 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 | for (item = pqueue_next(&iter); item != NULL; item = pqueue_next(&iter)) { frag = (hm_fragment *)item->data; if (dtls1_retransmit_message(s, (unsigned short)dtls1_get_queue_priority( frag->msg_header.seq, frag->msg_header.is_ccs), 0, &found) <= 0 && found) { #ifdef DEBUG fprintf(stderr, "dtls1_retransmit_message() failed\n"); #endif return -1; } } return 1; } |
︙ | ︙ | |||
1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 | /* XDTLS: the requested message ought to be found, otherwise error */ memset(seq64be, 0, sizeof(seq64be)); seq64be[6] = (unsigned char)(seq >> 8); seq64be[7] = (unsigned char)seq; item = pqueue_find(s->d1->sent_messages, seq64be); if (item == NULL) { fprintf(stderr, "retransmit: message %d non-existant\n", seq); *found = 0; return 0; } *found = 1; frag = (hm_fragment *)item->data; | > > | 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 | /* XDTLS: the requested message ought to be found, otherwise error */ memset(seq64be, 0, sizeof(seq64be)); seq64be[6] = (unsigned char)(seq >> 8); seq64be[7] = (unsigned char)seq; item = pqueue_find(s->d1->sent_messages, seq64be); if (item == NULL) { #ifdef DEBUG fprintf(stderr, "retransmit: message %d non-existant\n", seq); #endif *found = 0; return 0; } *found = 1; frag = (hm_fragment *)item->data; |
︙ | ︙ |
Changes to jni/libressl/ssl/d1_clnt.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: d1_clnt.c,v 1.55 2015/09/12 16:10:07 doug Exp $ */ /* * DTLS implementation written by Nagendra Modadugu * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. */ /* ==================================================================== * Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved. * |
︙ | ︙ | |||
167 168 169 170 171 172 173 | { return &DTLSv1_client_method_data; } static const SSL_METHOD * dtls1_get_client_method(int ver) { | | | 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | { return &DTLSv1_client_method_data; } static const SSL_METHOD * dtls1_get_client_method(int ver) { if (ver == DTLS1_VERSION) return (DTLSv1_client_method()); return (NULL); } int dtls1_connect(SSL *s) { |
︙ | ︙ | |||
210 211 212 213 214 215 216 | case SSL_ST_BEFORE|SSL_ST_CONNECT: case SSL_ST_OK|SSL_ST_CONNECT: s->server = 0; if (cb != NULL) cb(s, SSL_CB_HANDSHAKE_START, 1); | | < | 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 | case SSL_ST_BEFORE|SSL_ST_CONNECT: case SSL_ST_OK|SSL_ST_CONNECT: s->server = 0; if (cb != NULL) cb(s, SSL_CB_HANDSHAKE_START, 1); if ((s->version & 0xff00 ) != (DTLS1_VERSION & 0xff00)) { SSLerr(SSL_F_DTLS1_CONNECT, ERR_R_INTERNAL_ERROR); ret = -1; goto end; } /* s->version=SSL3_VERSION; */ |
︙ | ︙ | |||
253 254 255 256 257 258 259 | case SSL3_ST_CW_CLNT_HELLO_A: case SSL3_ST_CW_CLNT_HELLO_B: s->shutdown = 0; /* every DTLS ClientHello resets Finished MAC */ | | | | | | > | 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 | case SSL3_ST_CW_CLNT_HELLO_A: case SSL3_ST_CW_CLNT_HELLO_B: s->shutdown = 0; /* every DTLS ClientHello resets Finished MAC */ if (!tls1_init_finished_mac(s)) { ret = -1; goto end; } dtls1_start_timer(s); ret = ssl3_client_hello(s); if (ret <= 0) goto end; if (s->d1->send_cookie) { s->state = SSL3_ST_CW_FLUSH; s->s3->tmp.next_state = SSL3_ST_CR_SRVR_HELLO_A; } else s->state = SSL3_ST_CR_SRVR_HELLO_A; s->init_num = 0; /* turn on buffering for the next lot of output */ if (s->bbio != s->wbio) s->wbio = BIO_push(s->bbio, s->wbio); break; case SSL3_ST_CR_SRVR_HELLO_A: case SSL3_ST_CR_SRVR_HELLO_B: ret = ssl3_get_server_hello(s); if (ret <= 0) goto end; |
︙ | ︙ | |||
372 373 374 375 376 377 378 | goto end; dtls1_stop_timer(s); if (s->s3->tmp.cert_req) s->s3->tmp.next_state = SSL3_ST_CW_CERT_A; else s->s3->tmp.next_state = SSL3_ST_CW_KEY_EXCH_A; s->init_num = 0; | < | | < | | | 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 | goto end; dtls1_stop_timer(s); if (s->s3->tmp.cert_req) s->s3->tmp.next_state = SSL3_ST_CW_CERT_A; else s->s3->tmp.next_state = SSL3_ST_CW_KEY_EXCH_A; s->init_num = 0; s->state = s->s3->tmp.next_state; break; case SSL3_ST_CW_CERT_A: case SSL3_ST_CW_CERT_B: case SSL3_ST_CW_CERT_C: case SSL3_ST_CW_CERT_D: dtls1_start_timer(s); ret = dtls1_send_client_certificate(s); if (ret <= 0) goto end; s->state = SSL3_ST_CW_KEY_EXCH_A; s->init_num = 0; break; case SSL3_ST_CW_KEY_EXCH_A: case SSL3_ST_CW_KEY_EXCH_B: dtls1_start_timer(s); ret = ssl3_send_client_key_exchange(s); if (ret <= 0) goto end; /* EAY EAY EAY need to check for DH fix cert * sent back */ /* For TLS, cert_req is set to 2, so a cert chain * of nothing is sent, but no verify packet is sent */ if (s->s3->tmp.cert_req == 1) { s->state = SSL3_ST_CW_CERT_VRFY_A; } else { s->state = SSL3_ST_CW_CHANGE_A; s->s3->change_cipher_spec = 0; } s->init_num = 0; break; case SSL3_ST_CW_CERT_VRFY_A: case SSL3_ST_CW_CERT_VRFY_B: dtls1_start_timer(s); ret = ssl3_send_client_verify(s); if (ret <= 0) goto end; s->state = SSL3_ST_CW_CHANGE_A; s->init_num = 0; s->s3->change_cipher_spec = 0; break; |
︙ | ︙ | |||
453 454 455 456 457 458 459 | dtls1_reset_seq_numbers(s, SSL3_CC_WRITE); break; case SSL3_ST_CW_FINISHED_A: case SSL3_ST_CW_FINISHED_B: if (!s->hit) dtls1_start_timer(s); | | | 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 | dtls1_reset_seq_numbers(s, SSL3_CC_WRITE); break; case SSL3_ST_CW_FINISHED_A: case SSL3_ST_CW_FINISHED_B: if (!s->hit) dtls1_start_timer(s); ret = ssl3_send_finished(s, SSL3_ST_CW_FINISHED_A, SSL3_ST_CW_FINISHED_B, s->method->ssl3_enc->client_finished_label, s->method->ssl3_enc->client_finished_label_len); if (ret <= 0) goto end; s->state = SSL3_ST_CW_FLUSH; |
︙ | ︙ | |||
537 538 539 540 541 542 543 | } s->rwstate = SSL_NOTHING; s->state = s->s3->tmp.next_state; break; case SSL_ST_OK: /* clean a few things up */ | | | 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 | } s->rwstate = SSL_NOTHING; s->state = s->s3->tmp.next_state; break; case SSL_ST_OK: /* clean a few things up */ tls1_cleanup_key_block(s); /* If we are not 'joining' the last two packets, * remove the buffering now */ if (!(s->s3->flags & SSL3_FLAGS_POP_BUFFER)) ssl_free_wbio_buffer(s); /* else do it later in ssl3_write */ |
︙ | ︙ | |||
599 600 601 602 603 604 605 | s->in_handshake--; if (cb != NULL) cb(s, SSL_CB_CONNECT_EXIT, ret); return (ret); } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 597 598 599 600 601 602 603 604 605 606 607 608 609 610 | s->in_handshake--; if (cb != NULL) cb(s, SSL_CB_CONNECT_EXIT, ret); return (ret); } static int dtls1_get_hello_verify(SSL *s) { long n; int al, ok = 0; size_t cookie_len; uint16_t ssl_version; |
︙ | ︙ | |||
750 751 752 753 754 755 756 | truncated: al = SSL_AD_DECODE_ERROR; f_err: ssl3_send_alert(s, SSL3_AL_FATAL, al); return -1; } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 654 655 656 657 658 659 660 661 662 663 664 665 666 667 | truncated: al = SSL_AD_DECODE_ERROR; f_err: ssl3_send_alert(s, SSL3_AL_FATAL, al); return -1; } int dtls1_send_client_certificate(SSL *s) { X509 *x509 = NULL; EVP_PKEY *pkey = NULL; int i; unsigned long l; |
︙ | ︙ | |||
1120 1121 1122 1123 1124 1125 1126 | i = 0; } else if (i == 1) { i = 0; SSLerr(SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE, SSL_R_BAD_DATA_RETURNED_BY_CALLBACK); } | < | | < < < < < < | < < | 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 | i = 0; } else if (i == 1) { i = 0; SSLerr(SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE, SSL_R_BAD_DATA_RETURNED_BY_CALLBACK); } X509_free(x509); EVP_PKEY_free(pkey); if (i == 0) s->s3->tmp.cert_req = 2; /* Ok, we have a cert */ s->state = SSL3_ST_CW_CERT_C; } if (s->state == SSL3_ST_CW_CERT_C) { s->state = SSL3_ST_CW_CERT_D; |
︙ | ︙ |
Changes to jni/libressl/ssl/d1_enc.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: d1_enc.c,v 1.10 2015/07/17 07:04:40 doug Exp $ */ /* * DTLS implementation written by Nagendra Modadugu * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. */ /* ==================================================================== * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. * |
︙ | ︙ | |||
146 147 148 149 150 151 152 | } ds = s->enc_write_ctx; rec = &(s->s3->wrec); if (s->enc_write_ctx == NULL) enc = NULL; else { enc = EVP_CIPHER_CTX_cipher(s->enc_write_ctx); | | > > | | 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | } ds = s->enc_write_ctx; rec = &(s->s3->wrec); if (s->enc_write_ctx == NULL) enc = NULL; else { enc = EVP_CIPHER_CTX_cipher(s->enc_write_ctx); if (rec->data != rec->input) { #ifdef DEBUG /* we can't write into the input stream */ fprintf(stderr, "%s:%d: rec->data != rec->input\n", __FILE__, __LINE__); #endif } else if (EVP_CIPHER_block_size(ds->cipher) > 1) { arc4random_buf(rec->input, EVP_CIPHER_block_size(ds->cipher)); } } } else { if (EVP_MD_CTX_md(s->read_hash)) { mac_size = EVP_MD_CTX_size(s->read_hash); |
︙ | ︙ |
Changes to jni/libressl/ssl/d1_lib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: d1_lib.c,v 1.32 2015/10/07 13:20:48 bcook Exp $ */ /* * DTLS implementation written by Nagendra Modadugu * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. */ /* ==================================================================== * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. * |
︙ | ︙ | |||
55 56 57 58 59 60 61 62 63 64 65 66 67 68 | * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> #include <openssl/objects.h> | > | 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <sys/types.h> #include <sys/socket.h> #include <sys/time.h> #include <netinet/in.h> #include <stdio.h> #include <openssl/objects.h> |
︙ | ︙ | |||
120 121 122 123 124 125 126 | if (s->server) { d1->cookie_len = sizeof(s->d1->cookie); } if (!d1->unprocessed_rcds.q || !d1->processed_rcds.q || !d1->buffered_messages || !d1->sent_messages || !d1->buffered_app_data.q) { | < | < | < | < | < | | 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | if (s->server) { d1->cookie_len = sizeof(s->d1->cookie); } if (!d1->unprocessed_rcds.q || !d1->processed_rcds.q || !d1->buffered_messages || !d1->sent_messages || !d1->buffered_app_data.q) { pqueue_free(d1->unprocessed_rcds.q); pqueue_free(d1->processed_rcds.q); pqueue_free(d1->buffered_messages); pqueue_free(d1->sent_messages); pqueue_free(d1->buffered_app_data.q); free(d1); ssl3_free(s); return (0); } s->d1 = d1; s->method->ssl_clear(s); |
︙ | ︙ | |||
199 200 201 202 203 204 205 | pqueue_free(s->d1->unprocessed_rcds.q); pqueue_free(s->d1->processed_rcds.q); pqueue_free(s->d1->buffered_messages); pqueue_free(s->d1->sent_messages); pqueue_free(s->d1->buffered_app_data.q); | | | 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | pqueue_free(s->d1->unprocessed_rcds.q); pqueue_free(s->d1->processed_rcds.q); pqueue_free(s->d1->buffered_messages); pqueue_free(s->d1->sent_messages); pqueue_free(s->d1->buffered_app_data.q); explicit_bzero(s->d1, sizeof *s->d1); free(s->d1); s->d1 = NULL; } void dtls1_clear(SSL *s) { |
︙ | ︙ | |||
242 243 244 245 246 247 248 | s->d1->processed_rcds.q = processed_rcds; s->d1->buffered_messages = buffered_messages; s->d1->sent_messages = sent_messages; s->d1->buffered_app_data.q = buffered_app_data; } ssl3_clear(s); | | < < | | 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | s->d1->processed_rcds.q = processed_rcds; s->d1->buffered_messages = buffered_messages; s->d1->sent_messages = sent_messages; s->d1->buffered_app_data.q = buffered_app_data; } ssl3_clear(s); s->version = DTLS1_VERSION; } long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg) { int ret = 0; |
︙ | ︙ |
Changes to jni/libressl/ssl/d1_pkt.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: d1_pkt.c,v 1.47 2015/09/10 17:57:50 jsing Exp $ */ /* * DTLS implementation written by Nagendra Modadugu * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. */ /* ==================================================================== * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. * |
︙ | ︙ | |||
967 968 969 970 971 972 973 | if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC) { struct ccs_header_st ccs_hdr; unsigned int ccs_hdr_len = DTLS1_CCS_HEADER_LENGTH; dtls1_get_ccs_header(rr->data, &ccs_hdr); | < < < | 967 968 969 970 971 972 973 974 975 976 977 978 979 980 | if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC) { struct ccs_header_st ccs_hdr; unsigned int ccs_hdr_len = DTLS1_CCS_HEADER_LENGTH; dtls1_get_ccs_header(rr->data, &ccs_hdr); /* 'Change Cipher Spec' is just a single byte, so we know * exactly what the record payload has to look like */ /* XDTLS: check that epoch is consistent */ if ((rr->length != ccs_hdr_len) || (rr->off != 0) || (rr->data[0] != SSL3_MT_CCS)) { i = SSL_AD_ILLEGAL_PARAMETER; SSLerr(SSL_F_DTLS1_READ_BYTES, SSL_R_BAD_CHANGE_CIPHER_SPEC); |
︙ | ︙ | |||
1001 1002 1003 1004 1005 1006 1007 | s->s3->change_cipher_spec = 1; if (!ssl3_do_change_cipher_spec(s)) goto err; /* do this whenever CCS is processed */ dtls1_reset_seq_numbers(s, SSL3_CC_READ); | < < < < | 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 | s->s3->change_cipher_spec = 1; if (!ssl3_do_change_cipher_spec(s)) goto err; /* do this whenever CCS is processed */ dtls1_reset_seq_numbers(s, SSL3_CC_READ); goto start; } /* Unexpected handshake message (Client Hello, or protocol violation) */ if ((s->d1->handshake_fragment_len >= DTLS1_HM_HEADER_LENGTH) && !s->in_handshake) { |
︙ | ︙ | |||
1322 1323 1324 1325 1326 1327 1328 | /* we should now have * wr->data pointing to the encrypted data, which is * wr->length long */ wr->type=type; /* not needed but helps for debugging */ wr->length += DTLS1_RT_HEADER_LENGTH; | | | 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 | /* we should now have * wr->data pointing to the encrypted data, which is * wr->length long */ wr->type=type; /* not needed but helps for debugging */ wr->length += DTLS1_RT_HEADER_LENGTH; tls1_record_sequence_increment(s->s3->write_sequence); /* now let's set up wb */ wb->left = prefix_len + wr->length; wb->offset = 0; /* memorize arguments so that ssl3_write_pending can detect bad write retries later */ s->s3->wpend_tot = len; |
︙ | ︙ |
Changes to jni/libressl/ssl/d1_srvr.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: d1_srvr.c,v 1.66 2015/09/12 20:51:33 jsing Exp $ */ /* * DTLS implementation written by Nagendra Modadugu * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. */ /* ==================================================================== * Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved. * |
︙ | ︙ | |||
198 199 200 201 202 203 204 | if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); s->d1->listen = listen; if (s->cert == NULL) { SSLerr(SSL_F_DTLS1_ACCEPT, SSL_R_NO_CERTIFICATE_SET); | | > | 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 | if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); s->d1->listen = listen; if (s->cert == NULL) { SSLerr(SSL_F_DTLS1_ACCEPT, SSL_R_NO_CERTIFICATE_SET); ret = -1; goto end; } for (;;) { state = s->state; switch (s->state) { case SSL_ST_RENEGOTIATE: |
︙ | ︙ | |||
220 221 222 223 224 225 226 | s->server = 1; if (cb != NULL) cb(s, SSL_CB_HANDSHAKE_START, 1); if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00)) { SSLerr(SSL_F_DTLS1_ACCEPT, ERR_R_INTERNAL_ERROR); | | > | 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | s->server = 1; if (cb != NULL) cb(s, SSL_CB_HANDSHAKE_START, 1); if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00)) { SSLerr(SSL_F_DTLS1_ACCEPT, ERR_R_INTERNAL_ERROR); ret = -1; goto end; } s->type = SSL_ST_ACCEPT; if (!ssl3_setup_init_buffer(s)) { ret = -1; goto end; } |
︙ | ︙ | |||
245 246 247 248 249 250 251 | * ...but not with SCTP :-) */ if (!ssl_init_wbio_buffer(s, 1)) { ret = -1; goto end; } | | | 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 | * ...but not with SCTP :-) */ if (!ssl_init_wbio_buffer(s, 1)) { ret = -1; goto end; } if (!tls1_init_finished_mac(s)) { ret = -1; goto end; } s->state = SSL3_ST_SR_CLNT_HELLO_A; s->ctx->stats.sess_accept++; } else { |
︙ | ︙ | |||
267 268 269 270 271 272 273 | case SSL3_ST_SW_HELLO_REQ_A: case SSL3_ST_SW_HELLO_REQ_B: s->shutdown = 0; dtls1_clear_record_buffer(s); dtls1_start_timer(s); | | | | 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 | case SSL3_ST_SW_HELLO_REQ_A: case SSL3_ST_SW_HELLO_REQ_B: s->shutdown = 0; dtls1_clear_record_buffer(s); dtls1_start_timer(s); ret = ssl3_send_hello_request(s); if (ret <= 0) goto end; s->s3->tmp.next_state = SSL3_ST_SR_CLNT_HELLO_A; s->state = SSL3_ST_SW_FLUSH; s->init_num = 0; if (!tls1_init_finished_mac(s)) { ret = -1; goto end; } break; case SSL3_ST_SW_HELLO_REQ_C: s->state = SSL_ST_OK; |
︙ | ︙ | |||
331 332 333 334 335 336 337 | ret = dtls1_send_hello_verify_request(s); if (ret <= 0) goto end; s->state = SSL3_ST_SW_FLUSH; s->s3->tmp.next_state = SSL3_ST_SR_CLNT_HELLO_A; /* HelloVerifyRequest resets Finished MAC */ | < | | | < | | 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 | ret = dtls1_send_hello_verify_request(s); if (ret <= 0) goto end; s->state = SSL3_ST_SW_FLUSH; s->s3->tmp.next_state = SSL3_ST_SR_CLNT_HELLO_A; /* HelloVerifyRequest resets Finished MAC */ if (!tls1_init_finished_mac(s)) { ret = -1; goto end; } break; case SSL3_ST_SW_SRVR_HELLO_A: case SSL3_ST_SW_SRVR_HELLO_B: s->renegotiate = 2; dtls1_start_timer(s); ret = ssl3_send_server_hello(s); if (ret <= 0) goto end; if (s->hit) { if (s->tlsext_ticket_expected) s->state = SSL3_ST_SW_SESSION_TICKET_A; else |
︙ | ︙ | |||
385 386 387 388 389 390 391 | case SSL3_ST_SW_KEY_EXCH_A: case SSL3_ST_SW_KEY_EXCH_B: alg_k = s->s3->tmp.new_cipher->algorithm_mkey; /* Only send if using a DH key exchange. */ if (alg_k & (SSL_kDHE|SSL_kECDHE)) { dtls1_start_timer(s); | | | 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 | case SSL3_ST_SW_KEY_EXCH_A: case SSL3_ST_SW_KEY_EXCH_B: alg_k = s->s3->tmp.new_cipher->algorithm_mkey; /* Only send if using a DH key exchange. */ if (alg_k & (SSL_kDHE|SSL_kECDHE)) { dtls1_start_timer(s); ret = ssl3_send_server_key_exchange(s); if (ret <= 0) goto end; } else skip = 1; s->state = SSL3_ST_SW_CERT_REQ_A; s->init_num = 0; |
︙ | ︙ | |||
427 428 429 430 431 432 433 | /* no cert request */ skip = 1; s->s3->tmp.cert_request = 0; s->state = SSL3_ST_SW_SRVR_DONE_A; } else { s->s3->tmp.cert_request = 1; dtls1_start_timer(s); | | | | 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 | /* no cert request */ skip = 1; s->s3->tmp.cert_request = 0; s->state = SSL3_ST_SW_SRVR_DONE_A; } else { s->s3->tmp.cert_request = 1; dtls1_start_timer(s); ret = ssl3_send_certificate_request(s); if (ret <= 0) goto end; s->state = SSL3_ST_SW_SRVR_DONE_A; s->init_num = 0; } break; case SSL3_ST_SW_SRVR_DONE_A: case SSL3_ST_SW_SRVR_DONE_B: dtls1_start_timer(s); ret = ssl3_send_server_done(s); if (ret <= 0) goto end; s->s3->tmp.next_state = SSL3_ST_SR_CERT_A; s->state = SSL3_ST_SW_FLUSH; s->init_num = 0; break; |
︙ | ︙ | |||
490 491 492 493 494 495 496 497 498 499 500 501 502 503 | /* For the ECDH ciphersuites when * the client sends its ECDH pub key in * a certificate, the CertificateVerify * message is not sent. */ s->state = SSL3_ST_SR_FINISHED_A; s->init_num = 0; } else { s->state = SSL3_ST_SR_CERT_VRFY_A; s->init_num = 0; /* We need to get hashes here so if there is * a client cert, it can be verified */ s->method->ssl3_enc->cert_verify_mac(s, | > > > > > > > > > > > > > > > > > > > > > | 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 | /* For the ECDH ciphersuites when * the client sends its ECDH pub key in * a certificate, the CertificateVerify * message is not sent. */ s->state = SSL3_ST_SR_FINISHED_A; s->init_num = 0; } else if (SSL_USE_SIGALGS(s)) { s->state = SSL3_ST_SR_CERT_VRFY_A; s->init_num = 0; if (!s->session->peer) break; /* * For sigalgs freeze the handshake buffer * at this point and digest cached records. */ if (!s->s3->handshake_buffer) { SSLerr(SSL_F_SSL3_ACCEPT, ERR_R_INTERNAL_ERROR); ret = -1; goto end; } s->s3->flags |= TLS1_FLAGS_KEEP_HANDSHAKE; if (!tls1_digest_cached_records(s)) { ret = -1; goto end; } } else { s->state = SSL3_ST_SR_CERT_VRFY_A; s->init_num = 0; /* We need to get hashes here so if there is * a client cert, it can be verified */ s->method->ssl3_enc->cert_verify_mac(s, |
︙ | ︙ | |||
535 536 537 538 539 540 541 | else s->state = SSL3_ST_SW_CHANGE_A; s->init_num = 0; break; case SSL3_ST_SW_SESSION_TICKET_A: case SSL3_ST_SW_SESSION_TICKET_B: | | | 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 | else s->state = SSL3_ST_SW_CHANGE_A; s->init_num = 0; break; case SSL3_ST_SW_SESSION_TICKET_A: case SSL3_ST_SW_SESSION_TICKET_B: ret = ssl3_send_newsession_ticket(s); if (ret <= 0) goto end; s->state = SSL3_ST_SW_CHANGE_A; s->init_num = 0; break; case SSL3_ST_SW_CERT_STATUS_A: |
︙ | ︙ | |||
582 583 584 585 586 587 588 | } dtls1_reset_seq_numbers(s, SSL3_CC_WRITE); break; case SSL3_ST_SW_FINISHED_A: case SSL3_ST_SW_FINISHED_B: | | | | 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 | } dtls1_reset_seq_numbers(s, SSL3_CC_WRITE); break; case SSL3_ST_SW_FINISHED_A: case SSL3_ST_SW_FINISHED_B: ret = ssl3_send_finished(s, SSL3_ST_SW_FINISHED_A, SSL3_ST_SW_FINISHED_B, s->method->ssl3_enc->server_finished_label, s->method->ssl3_enc->server_finished_label_len); if (ret <= 0) goto end; s->state = SSL3_ST_SW_FLUSH; if (s->hit) { s->s3->tmp.next_state = SSL3_ST_SR_FINISHED_A; } else { s->s3->tmp.next_state = SSL_ST_OK; } s->init_num = 0; break; case SSL_ST_OK: /* clean a few things up */ tls1_cleanup_key_block(s); /* remove buffering on output */ ssl_free_wbio_buffer(s); s->init_num = 0; if (s->renegotiate == 2) /* skipped if we just sent a HelloRequest */ |
︙ | ︙ | |||
661 662 663 664 665 666 667 | end: /* BIO_flush(s->wbio); */ s->in_handshake--; if (cb != NULL) cb(s, SSL_CB_ACCEPT_EXIT, ret); | < | < < < < < < < < < < < < | | 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 | end: /* BIO_flush(s->wbio); */ s->in_handshake--; if (cb != NULL) cb(s, SSL_CB_ACCEPT_EXIT, ret); return (ret); } int dtls1_send_hello_verify_request(SSL *s) { unsigned char *d, *p; |
︙ | ︙ | |||
711 712 713 714 715 716 717 | s->state = DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B; } /* s->state = DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B */ return (ssl3_handshake_write(s)); } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 719 720 721 722 723 724 725 726 727 728 729 730 731 732 | s->state = DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B; } /* s->state = DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B */ return (ssl3_handshake_write(s)); } int dtls1_send_server_certificate(SSL *s) { unsigned long l; X509 *x; if (s->state == SSL3_ST_SW_CERT_A) { |
︙ | ︙ | |||
1214 1215 1216 1217 1218 1219 1220 1221 1222 | s->init_off = 0; /* buffer the message to handle re-xmits */ dtls1_buffer_message(s, 0); } /* SSL3_ST_SW_CERT_B */ return (dtls1_do_write(s, SSL3_RT_HANDSHAKE)); } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 743 744 745 746 747 748 749 750 751 | s->init_off = 0; /* buffer the message to handle re-xmits */ dtls1_buffer_message(s, 0); } /* SSL3_ST_SW_CERT_B */ return (dtls1_do_write(s, SSL3_RT_HANDSHAKE)); } |
Changes to jni/libressl/ssl/s23_clnt.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: s23_clnt.c,v 1.45 2015/09/11 14:39:05 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
113 114 115 116 117 118 119 | #include "ssl_locl.h" #include <openssl/buffer.h> #include <openssl/evp.h> #include <openssl/objects.h> | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | #include "ssl_locl.h" #include <openssl/buffer.h> #include <openssl/evp.h> #include <openssl/objects.h> static int ssl23_client_hello(SSL *s); static int ssl23_get_server_hello(SSL *s); int ssl23_connect(SSL *s) { void (*cb)(const SSL *ssl, int type, int val) = NULL; int ret = -1; int new_state, state; |
︙ | ︙ | |||
251 252 253 254 255 256 257 | ret = -1; goto end; } if (!ssl3_setup_buffers(s)) { ret = -1; goto end; } | | | 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | ret = -1; goto end; } if (!ssl3_setup_buffers(s)) { ret = -1; goto end; } if (!tls1_init_finished_mac(s)) { ret = -1; goto end; } s->state = SSL23_ST_CW_CLNT_HELLO_A; s->ctx->stats.sess_connect++; s->init_num = 0; |
︙ | ︙ | |||
327 328 329 330 331 332 333 | * SSL_OP_NO_X disables all protocols above X *if* there are * some protocols below X enabled. This is required in order * to maintain "version capability" vector contiguous. So * that if application wants to disable TLS1.0 in favour of * TLS1>=1, it would be insufficient to pass SSL_NO_TLSv1, the * answer is SSL_OP_NO_TLSv1|SSL_OP_NO_SSLv3|SSL_OP_NO_SSLv2. */ | | < < < < < < | > | | 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 | * SSL_OP_NO_X disables all protocols above X *if* there are * some protocols below X enabled. This is required in order * to maintain "version capability" vector contiguous. So * that if application wants to disable TLS1.0 in favour of * TLS1>=1, it would be insufficient to pass SSL_NO_TLSv1, the * answer is SSL_OP_NO_TLSv1|SSL_OP_NO_SSLv3|SSL_OP_NO_SSLv2. */ mask = SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1; version = TLS1_2_VERSION; if ((options & SSL_OP_NO_TLSv1_2) && (options & mask) != mask) version = TLS1_1_VERSION; mask &= ~SSL_OP_NO_TLSv1_1; if ((options & SSL_OP_NO_TLSv1_1) && (options & mask) != mask) version = TLS1_VERSION; mask &= ~SSL_OP_NO_TLSv1; buf = (unsigned char *)s->init_buf->data; if (s->state == SSL23_ST_CW_CLNT_HELLO_A) { arc4random_buf(s->s3->client_random, SSL3_RANDOM_SIZE); if (version == TLS1_2_VERSION) { version_major = TLS1_2_VERSION_MAJOR; version_minor = TLS1_2_VERSION_MINOR; } else if (version == TLS1_1_VERSION) { version_major = TLS1_1_VERSION_MAJOR; version_minor = TLS1_1_VERSION_MINOR; } else if (version == TLS1_VERSION) { version_major = TLS1_VERSION_MAJOR; version_minor = TLS1_VERSION_MINOR; } else { SSLerr(SSL_F_SSL23_CLIENT_HELLO, SSL_R_NO_PROTOCOLS_AVAILABLE); return (-1); } s->client_version = version; /* create Client Hello in SSL 3.0/TLS 1.0 format */ /* * Do the record header (5 bytes) and handshake * message header (4 bytes) last */ d = p = &(buf[SSL3_RT_HEADER_LENGTH + SSL3_HM_HEADER_LENGTH]); *(p++) = version_major; *(p++) = version_minor; /* Random stuff */ memcpy(p, s->s3->client_random, SSL3_RANDOM_SIZE); p += SSL3_RANDOM_SIZE; |
︙ | ︙ | |||
397 398 399 400 401 402 403 | /* add in (no) COMPRESSION */ *(p++) = 1; /* Add the NULL method */ *(p++) = 0; /* TLS extensions*/ | < < < < < | | 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 | /* add in (no) COMPRESSION */ *(p++) = 1; /* Add the NULL method */ *(p++) = 0; /* TLS extensions*/ if ((p = ssl_add_clienthello_tlsext(s, p, buf + SSL3_RT_MAX_PLAIN_LENGTH)) == NULL) { SSLerr(SSL_F_SSL23_CLIENT_HELLO, ERR_R_INTERNAL_ERROR); return -1; } l = p - d; /* fill in 4-byte handshake header */ d = &(buf[SSL3_RT_HEADER_LENGTH]); *(d++) = SSL3_MT_CLIENT_HELLO; l2n3(l, d); l += 4; if (l > SSL3_RT_MAX_PLAIN_LENGTH) { SSLerr(SSL_F_SSL23_CLIENT_HELLO, ERR_R_INTERNAL_ERROR); |
︙ | ︙ | |||
441 442 443 444 445 446 447 | *(d++) = version_minor; s2n((int)l, d); /* number of bytes to write */ s->init_num = p - buf; s->init_off = 0; | | > | 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 | *(d++) = version_minor; s2n((int)l, d); /* number of bytes to write */ s->init_num = p - buf; s->init_off = 0; tls1_finish_mac(s, &(buf[SSL3_RT_HEADER_LENGTH]), s->init_num - SSL3_RT_HEADER_LENGTH); s->state = SSL23_ST_CW_CLNT_HELLO_B; s->init_off = 0; } /* SSL3_ST_CW_CLNT_HELLO_B */ ret = ssl23_write_bytes(s); |
︙ | ︙ | |||
490 491 492 493 494 495 496 | if (p[1] == SSL3_VERSION_MAJOR && p[2] <= TLS1_2_VERSION_MINOR && ((p[0] == SSL3_RT_HANDSHAKE && p[5] == SSL3_MT_SERVER_HELLO) || (p[0] == SSL3_RT_ALERT && p[3] == 0 && p[4] == 2))) { /* we have sslv3 or tls1 (server hello or alert) */ | < < < < | | 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 | if (p[1] == SSL3_VERSION_MAJOR && p[2] <= TLS1_2_VERSION_MINOR && ((p[0] == SSL3_RT_HANDSHAKE && p[5] == SSL3_MT_SERVER_HELLO) || (p[0] == SSL3_RT_ALERT && p[3] == 0 && p[4] == 2))) { /* we have sslv3 or tls1 (server hello or alert) */ if ((p[2] == TLS1_VERSION_MINOR) && !(s->options & SSL_OP_NO_TLSv1)) { s->version = TLS1_VERSION; s->method = TLSv1_client_method(); } else if ((p[2] == TLS1_1_VERSION_MINOR) && !(s->options & SSL_OP_NO_TLSv1_1)) { s->version = TLS1_1_VERSION; s->method = TLSv1_1_client_method(); |
︙ | ︙ | |||
574 575 576 577 578 579 580 | if (!ssl_get_new_session(s, 0)) goto err; return (SSL_connect(s)); err: return (-1); } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 474 475 476 477 478 479 480 | if (!ssl_get_new_session(s, 0)) goto err; return (SSL_connect(s)); err: return (-1); } |
Deleted jni/libressl/ssl/s23_meth.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/ssl/s23_srvr.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: s23_srvr.c,v 1.46 2015/10/25 15:49:04 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
113 114 115 116 117 118 119 | #include "ssl_locl.h" #include <openssl/buffer.h> #include <openssl/evp.h> #include <openssl/objects.h> | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | #include "ssl_locl.h" #include <openssl/buffer.h> #include <openssl/evp.h> #include <openssl/objects.h> int ssl23_get_client_hello(SSL *s); int ssl23_accept(SSL *s) { void (*cb)(const SSL *ssl, int type, int val) = NULL; int ret = -1; int new_state, state; |
︙ | ︙ | |||
240 241 242 243 244 245 246 | /* s->version=SSL3_VERSION; */ s->type = SSL_ST_ACCEPT; if (!ssl3_setup_init_buffer(s)) { ret = -1; goto end; } | | | 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | /* s->version=SSL3_VERSION; */ s->type = SSL_ST_ACCEPT; if (!ssl3_setup_init_buffer(s)) { ret = -1; goto end; } if (!tls1_init_finished_mac(s)) { ret = -1; goto end; } s->state = SSL23_ST_SR_CLNT_HELLO_A; s->ctx->stats.sess_accept++; s->init_num = 0; |
︙ | ︙ | |||
329 330 331 332 333 334 335 | memcpy(buf, p, n); if ((p[0] & 0x80) && (p[2] == SSL2_MT_CLIENT_HELLO)) { /* * SSLv2 header */ if ((p[3] == 0x00) && (p[4] == 0x02)) { | < < | > | < | > | | < < < < | | < < < < > | | 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 | memcpy(buf, p, n); if ((p[0] & 0x80) && (p[2] == SSL2_MT_CLIENT_HELLO)) { /* * SSLv2 header */ if ((p[3] == 0x00) && (p[4] == 0x02)) { /* SSLv2 support has been removed */ goto unsupported; } else if (p[3] == SSL3_VERSION_MAJOR) { v[0] = p[3]; v[1] = p[4]; /* SSLv3/TLS */ if (p[4] >= TLS1_VERSION_MINOR) { if (p[4] >= TLS1_2_VERSION_MINOR && !(s->options & SSL_OP_NO_TLSv1_2)) { s->version = TLS1_2_VERSION; s->state = SSL23_ST_SR_CLNT_HELLO_B; } else if (p[4] >= TLS1_1_VERSION_MINOR && !(s->options & SSL_OP_NO_TLSv1_1)) { s->version = TLS1_1_VERSION; /* type=2; */ /* done later to survive restarts */ s->state = SSL23_ST_SR_CLNT_HELLO_B; } else if (!(s->options & SSL_OP_NO_TLSv1)) { s->version = TLS1_VERSION; /* type=2; */ /* done later to survive restarts */ s->state = SSL23_ST_SR_CLNT_HELLO_B; } else { goto unsupported; } } else { /* SSLv3 support has been removed */ goto unsupported; } } } else if ((p[0] == SSL3_RT_HANDSHAKE) && (p[1] == SSL3_VERSION_MAJOR) && (p[5] == SSL3_MT_CLIENT_HELLO) && ((p[3] == 0 && p[4] < 5 /* silly record length? */) || (p[9] >= p[1]))) { /* |
︙ | ︙ | |||
411 412 413 414 415 416 417 | } else if (v[1] >= TLS1_1_VERSION_MINOR && !(s->options & SSL_OP_NO_TLSv1_1)) { s->version = TLS1_1_VERSION; type = 3; } else if (!(s->options & SSL_OP_NO_TLSv1)) { s->version = TLS1_VERSION; type = 3; | | | < < < | < | > > > > > > > > > > | 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 | } else if (v[1] >= TLS1_1_VERSION_MINOR && !(s->options & SSL_OP_NO_TLSv1_1)) { s->version = TLS1_1_VERSION; type = 3; } else if (!(s->options & SSL_OP_NO_TLSv1)) { s->version = TLS1_VERSION; type = 3; } else { goto unsupported; } } else { /* SSLv3 */ if (!(s->options & SSL_OP_NO_TLSv1)) { /* we won't be able to use TLS of course, * but this will send an appropriate alert */ s->version = TLS1_VERSION; type = 3; } else { goto unsupported; } } } else if ((strncmp("GET ", (char *)p, 4) == 0) || (strncmp("POST ",(char *)p, 5) == 0) || (strncmp("HEAD ",(char *)p, 5) == 0) || (strncmp("PUT ", (char *)p, 4) == 0)) { SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO, SSL_R_HTTP_REQUEST); return -1; } else if (strncmp("CONNECT", (char *)p, 7) == 0) { SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO, SSL_R_HTTPS_PROXY_REQUEST); return -1; } } if (s->state == SSL23_ST_SR_CLNT_HELLO_B) { /* we have SSLv3/TLSv1 in an SSLv2 header * (other cases skip this state) */ /* * Limit the support of "backward compatible" headers * only to "backward" versions of TLS. If we have moved * on to modernity, just say no. */ if (s->options & SSL_OP_NO_TLSv1) goto unsupported; type = 2; p = s->packet; v[0] = p[3]; /* == SSL3_VERSION_MAJOR */ v[1] = p[4]; /* An SSLv3/TLSv1 backwards-compatible CLIENT-HELLO in an SSLv2 * header is sent directly on the wire, not wrapped as a TLS |
︙ | ︙ | |||
476 477 478 479 480 481 482 | return -1; } j = ssl23_read_bytes(s, n + 2); if (j != n + 2) return -1; | | | 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 | return -1; } j = ssl23_read_bytes(s, n + 2); if (j != n + 2) return -1; tls1_finish_mac(s, s->packet + 2, s->packet_length - 2); if (s->msg_callback) s->msg_callback(0, SSL2_VERSION, 0, s->packet + 2, s->packet_length - 2, s, s->msg_callback_arg); p = s->packet; p += 5; n2s(p, csl); |
︙ | ︙ | |||
547 548 549 550 551 552 553 | s->s3->tmp.message_type = SSL3_MT_CLIENT_HELLO; s->s3->tmp.message_size = i; } /* imaginary new state (for program structure): */ /* s->state = SSL23_SR_CLNT_HELLO_C */ | | < < < < < | 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 | s->s3->tmp.message_type = SSL3_MT_CLIENT_HELLO; s->s3->tmp.message_size = i; } /* imaginary new state (for program structure): */ /* s->state = SSL23_SR_CLNT_HELLO_C */ if (type == 2 || type == 3) { /* we have SSLv3/TLSv1 (type 2: SSL2 style, type 3: SSL3/TLS style) */ if (!ssl_init_wbio_buffer(s, 1)) return -1; /* we are in this state */ s->state = SSL3_ST_SR_CLNT_HELLO_A; |
︙ | ︙ | |||
586 587 588 589 590 591 592 | if (s->version == TLS1_2_VERSION) s->method = TLSv1_2_server_method(); else if (s->version == TLS1_1_VERSION) s->method = TLSv1_1_server_method(); else if (s->version == TLS1_VERSION) s->method = TLSv1_server_method(); else | | < | < | | < < < < < | < < < < | < < < < < < < < < < < < < < < < < | 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 | if (s->version == TLS1_2_VERSION) s->method = TLSv1_2_server_method(); else if (s->version == TLS1_1_VERSION) s->method = TLSv1_1_server_method(); else if (s->version == TLS1_VERSION) s->method = TLSv1_server_method(); else goto unsupported; s->handshake_func = s->method->ssl_accept; } else { /* bad, very bad */ SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO, SSL_R_UNKNOWN_PROTOCOL); return -1; } s->init_num = 0; return (SSL_accept(s)); unsupported: SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO, SSL_R_UNSUPPORTED_PROTOCOL); return -1; } |
Changes to jni/libressl/ssl/s3_both.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: s3_both.c,v 1.47 2015/09/11 18:08:21 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
123 124 125 126 127 128 129 | #include <openssl/buffer.h> #include <openssl/evp.h> #include <openssl/objects.h> #include <openssl/x509.h> #include "bytestring.h" | > | > > | > > | | > > | | > > > > | < | | < < < < < | | < | < | > | > > > > | > | > | < | | | 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 | #include <openssl/buffer.h> #include <openssl/evp.h> #include <openssl/objects.h> #include <openssl/x509.h> #include "bytestring.h" /* * Send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or * SSL3_RT_CHANGE_CIPHER_SPEC). */ int ssl3_do_write(SSL *s, int type) { int ret; ret = ssl3_write_bytes(s, type, &s->init_buf->data[s->init_off], s->init_num); if (ret < 0) return (-1); if (type == SSL3_RT_HANDSHAKE) /* * Should not be done for 'Hello Request's, but in that case * we'll ignore the result anyway. */ tls1_finish_mac(s, (unsigned char *)&s->init_buf->data[s->init_off], ret); if (ret == s->init_num) { if (s->msg_callback) s->msg_callback(1, s->version, type, s->init_buf->data, (size_t)(s->init_off + s->init_num), s, s->msg_callback_arg); return (1); } s->init_off += ret; s->init_num -= ret; return (0); } int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) { unsigned char *p; int md_len; if (s->state == a) { md_len = s->method->ssl3_enc->finish_mac_length; OPENSSL_assert(md_len <= EVP_MAX_MD_SIZE); if (s->method->ssl3_enc->final_finish_mac(s, sender, slen, s->s3->tmp.finish_md) != md_len) return (0); s->s3->tmp.finish_md_len = md_len; /* Copy finished so we can use it for renegotiation checks. */ if (s->type == SSL_ST_CONNECT) { memcpy(s->s3->previous_client_finished, s->s3->tmp.finish_md, md_len); s->s3->previous_client_finished_len = md_len; } else { memcpy(s->s3->previous_server_finished, s->s3->tmp.finish_md, md_len); s->s3->previous_server_finished_len = md_len; } p = ssl3_handshake_msg_start(s, SSL3_MT_FINISHED); memcpy(p, s->s3->tmp.finish_md, md_len); ssl3_handshake_msg_finish(s, md_len); s->state = b; } return (ssl3_handshake_write(s)); } /* * ssl3_take_mac calculates the Finished MAC for the handshakes messages seen * so far. */ static void ssl3_take_mac(SSL *s) { const char *sender; int slen; /* * If no new cipher setup return immediately: other functions will * set the appropriate error. */ if (s->s3->tmp.new_cipher == NULL) return; if (s->state & SSL_ST_CONNECT) { sender = s->method->ssl3_enc->server_finished_label; slen = s->method->ssl3_enc->server_finished_label_len; } else { sender = s->method->ssl3_enc->client_finished_label; slen = s->method->ssl3_enc->client_finished_label_len; } s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, sender, slen, s->s3->tmp.peer_finish_md); } int ssl3_get_finished(SSL *s, int a, int b) { int al, ok, md_len; long n; CBS cbs; /* should actually be 36+4 :-) */ n = s->method->ssl_get_message(s, a, b, SSL3_MT_FINISHED, 64, &ok); if (!ok) return ((int)n); /* If this occurs, we have missed a message */ if (!s->s3->change_cipher_spec) { al = SSL_AD_UNEXPECTED_MESSAGE; SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_GOT_A_FIN_BEFORE_A_CCS); |
︙ | ︙ | |||
313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 | unsigned char *p; n = i2d_X509(x, NULL); if (!BUF_MEM_grow_clean(buf, n + (*l) + 3)) { SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF, ERR_R_BUF_LIB); return (-1); } p = (unsigned char *)&(buf->data[*l]); l2n3(n, p); i2d_X509(x, &p); *l += n + 3; return (0); } unsigned long ssl3_output_cert_chain(SSL *s, X509 *x) { unsigned char *p; | > < | > | | > | > > | < | | > | | > > | < | 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 | unsigned char *p; n = i2d_X509(x, NULL); if (!BUF_MEM_grow_clean(buf, n + (*l) + 3)) { SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF, ERR_R_BUF_LIB); return (-1); } /* XXX */ p = (unsigned char *)&(buf->data[*l]); l2n3(n, p); i2d_X509(x, &p); *l += n + 3; return (0); } unsigned long ssl3_output_cert_chain(SSL *s, X509 *x) { unsigned char *p; unsigned long l = ssl3_handshake_msg_hdr_len(s) + 3; BUF_MEM *buf; int no_chain; int i; if ((s->mode & SSL_MODE_NO_AUTO_CHAIN) || s->ctx->extra_certs) no_chain = 1; else no_chain = 0; /* TLSv1 sends a chain with nothing in it, instead of an alert */ buf = s->init_buf; if (!BUF_MEM_grow_clean(buf, ssl3_handshake_msg_hdr_len(s) + 6)) { SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_BUF_LIB); return (0); } if (x != NULL) { if (no_chain) { if (ssl3_add_cert_to_buf(buf, &l, x)) return (0); } else { X509_STORE_CTX xs_ctx; if (!X509_STORE_CTX_init(&xs_ctx, s->ctx->cert_store, x, NULL)) { SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_X509_LIB); return (0); } X509_verify_cert(&xs_ctx); /* Don't leave errors in the queue. */ ERR_clear_error(); for (i = 0; i < sk_X509_num(xs_ctx.chain); i++) { x = sk_X509_value(xs_ctx.chain, i); if (ssl3_add_cert_to_buf(buf, &l, x)) { X509_STORE_CTX_cleanup(&xs_ctx); return 0; } } X509_STORE_CTX_cleanup(&xs_ctx); } } /* Thawte special :-) */ for (i = 0; i < sk_X509_num(s->ctx->extra_certs); i++) { x = sk_X509_value(s->ctx->extra_certs, i); if (ssl3_add_cert_to_buf(buf, &l, x)) return (0); } l -= ssl3_handshake_msg_hdr_len(s) + 3; p = (unsigned char *)&(buf->data[4]); l2n3(l, p); l += 3; p = (unsigned char *)&(buf->data[0]); *(p++) = SSL3_MT_CERTIFICATE; l2n3(l, p); l += 4; /* XXX */ return (l); } /* * Obtain handshake message of message type 'mt' (any if mt == -1), * maximum acceptable body length 'max'. * The first four bytes (msg_type and length) are read in state 'st1', * the body is read in state 'stn'. */ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) { unsigned char *p; uint32_t l; long n; int i, al; CBS cbs; uint8_t u8; if (s->s3->tmp.reuse_message) { s->s3->tmp.reuse_message = 0; if ((mt >= 0) && (s->s3->tmp.message_type != mt)) { al = SSL_AD_UNEXPECTED_MESSAGE; SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); goto f_err; } *ok = 1; s->init_msg = s->init_buf->data + 4; s->init_num = (int)s->s3->tmp.message_size; return s->init_num; } p = (unsigned char *)s->init_buf->data; /* s->init_num < 4 */ if (s->state == st1) { int skip_message; do { while (s->init_num < 4) { i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, &p[s->init_num], 4 - s->init_num, 0); |
︙ | ︙ | |||
444 445 446 447 448 449 450 | * correct. Does not count for 'Finished' MAC. */ if (p[1] == 0 && p[2] == 0 &&p[3] == 0) { s->init_num = 0; skip_message = 1; if (s->msg_callback) | | > > < | > | > | 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 | * correct. Does not count for 'Finished' MAC. */ if (p[1] == 0 && p[2] == 0 &&p[3] == 0) { s->init_num = 0; skip_message = 1; if (s->msg_callback) s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, 4, s, s->msg_callback_arg); } } } while (skip_message); /* s->init_num == 4 */ if ((mt >= 0) && (*p != mt)) { al = SSL_AD_UNEXPECTED_MESSAGE; SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); goto f_err; } /* XXX remove call to n2l3 */ CBS_init(&cbs, p, 4); if (!CBS_get_u8(&cbs, &u8) || !CBS_get_u24(&cbs, &l)) { SSLerr(SSL_F_SSL3_GET_MESSAGE, ERR_R_BUF_LIB); goto err; } s->s3->tmp.message_type = u8; if (l > (unsigned long)max) { al = SSL_AD_ILLEGAL_PARAMETER; SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE); goto f_err; } if (l && !BUF_MEM_grow_clean(s->init_buf, l + 4)) { SSLerr(SSL_F_SSL3_GET_MESSAGE, ERR_R_BUF_LIB); goto err; } s->s3->tmp.message_size = l; |
︙ | ︙ | |||
504 505 506 507 508 509 510 | /* If receiving Finished, record MAC of prior handshake messages for * Finished verification. */ if (*s->init_buf->data == SSL3_MT_FINISHED) ssl3_take_mac(s); /* Feed this message into MAC computation. */ | | | > > > | > | 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 | /* If receiving Finished, record MAC of prior handshake messages for * Finished verification. */ if (*s->init_buf->data == SSL3_MT_FINISHED) ssl3_take_mac(s); /* Feed this message into MAC computation. */ tls1_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4); if (s->msg_callback) s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->init_buf->data, (size_t)s->init_num + 4, s, s->msg_callback_arg); *ok = 1; return (s->init_num); f_err: ssl3_send_alert(s, SSL3_AL_FATAL, al); err: *ok = 0; return (-1); } |
︙ | ︙ | |||
534 535 536 537 538 539 540 | goto err; i = pk->type; if (i == EVP_PKEY_RSA) { ret = SSL_PKEY_RSA_ENC; } else if (i == EVP_PKEY_DSA) { ret = SSL_PKEY_DSA_SIGN; | < | | > > | 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 | goto err; i = pk->type; if (i == EVP_PKEY_RSA) { ret = SSL_PKEY_RSA_ENC; } else if (i == EVP_PKEY_DSA) { ret = SSL_PKEY_DSA_SIGN; } else if (i == EVP_PKEY_EC) { ret = SSL_PKEY_ECC; } else if (i == NID_id_GostR3410_2001 || i == NID_id_GostR3410_2001_cc) { ret = SSL_PKEY_GOST01; } err: if (!pkey) EVP_PKEY_free(pk); return (ret); } int |
︙ | ︙ |
Changes to jni/libressl/ssl/s3_cbc.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: s3_cbc.c,v 1.11 2015/09/11 17:17:44 jsing Exp $ */ /* ==================================================================== * Copyright (c) 2012 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * |
︙ | ︙ | |||
97 98 99 100 101 102 103 | constant_time_eq_8(unsigned a, unsigned b) { unsigned c = a ^ b; c--; return DUPLICATE_MSB_TO_ALL_8(c); } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | constant_time_eq_8(unsigned a, unsigned b) { unsigned c = a ^ b; c--; return DUPLICATE_MSB_TO_ALL_8(c); } /* tls1_cbc_remove_padding removes the CBC padding from the decrypted, TLS, CBC * record in |rec| in constant time and returns 1 if the padding is valid and * -1 otherwise. It also removes any explicit IV from the start of the record * without leaking any timing about whether there was enough space after the * padding was removed. * * block_size: the block size of the cipher used to encrypt the record. |
︙ | ︙ | |||
627 628 629 630 631 632 633 | is_past_c = is_block_a & constant_time_ge(j, c); is_past_cp1 = is_block_a & constant_time_ge(j, c + 1); /* If this is the block containing the end of the * application data, and we are at the offset for the * 0x80 value, then overwrite b with 0x80. */ b = (b&~is_past_c) | (0x80&is_past_c); | | | 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 | is_past_c = is_block_a & constant_time_ge(j, c); is_past_cp1 = is_block_a & constant_time_ge(j, c + 1); /* If this is the block containing the end of the * application data, and we are at the offset for the * 0x80 value, then overwrite b with 0x80. */ b = (b&~is_past_c) | (0x80&is_past_c); /* If this is the block containing the end of the * application data and we're past the 0x80 value then * just write zero. */ b = b&~is_past_cp1; /* If this is index_b (the final block), but not * index_a (the end of the data), then the 64-bit * length didn't fit into index_a and we're having to * add an extra block of zeros. */ |
︙ | ︙ |
Changes to jni/libressl/ssl/s3_clnt.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: s3_clnt.c,v 1.137 2016/03/11 07:08:45 mmcc Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
166 167 168 169 170 171 172 | #endif #ifndef OPENSSL_NO_GOST #include <openssl/gost.h> #endif #include "bytestring.h" | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | #endif #ifndef OPENSSL_NO_GOST #include <openssl/gost.h> #endif #include "bytestring.h" static int ca_dn_cmp(const X509_NAME * const *a, const X509_NAME * const *b); int ssl3_connect(SSL *s) { void (*cb)(const SSL *ssl, int type, int val) = NULL; int ret = -1; int new_state, state, skip = 0; |
︙ | ︙ | |||
283 284 285 286 287 288 289 | if (!ssl_init_wbio_buffer(s, 0)) { ret = -1; goto end; } /* don't push the buffering BIO quite yet */ | | | 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 | if (!ssl_init_wbio_buffer(s, 0)) { ret = -1; goto end; } /* don't push the buffering BIO quite yet */ if (!tls1_init_finished_mac(s)) { ret = -1; goto end; } s->state = SSL3_ST_CW_CLNT_HELLO_A; s->ctx->stats.sess_connect++; s->init_num = 0; |
︙ | ︙ | |||
566 567 568 569 570 571 572 | } s->rwstate = SSL_NOTHING; s->state = s->s3->tmp.next_state; break; case SSL_ST_OK: /* clean a few things up */ | | | 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 | } s->rwstate = SSL_NOTHING; s->state = s->s3->tmp.next_state; break; case SSL_ST_OK: /* clean a few things up */ tls1_cleanup_key_block(s); if (s->init_buf != NULL) { BUF_MEM_free(s->init_buf); s->init_buf = NULL; } /* |
︙ | ︙ | |||
633 634 635 636 637 638 639 | s->in_handshake--; if (cb != NULL) cb(s, SSL_CB_CONNECT_EXIT, ret); return (ret); } | < > > > > > > | | 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 | s->in_handshake--; if (cb != NULL) cb(s, SSL_CB_CONNECT_EXIT, ret); return (ret); } int ssl3_client_hello(SSL *s) { unsigned char *bufend, *p, *d; int i; if (s->state == SSL3_ST_CW_CLNT_HELLO_A) { SSL_SESSION *sess = s->session; if ((sess == NULL) || (sess->ssl_version != s->version) || (!sess->session_id_length && !sess->tlsext_tick) || (sess->not_resumable)) { if (!ssl_get_new_session(s, 0)) goto err; } /* else use the pre-loaded session */ /* * If a DTLS ClientHello message is being resent after a * HelloVerifyRequest, we must retain the original client * random value. */ if (!SSL_IS_DTLS(s) || s->d1->send_cookie == 0) arc4random_buf(s->s3->client_random, SSL3_RANDOM_SIZE); d = p = ssl3_handshake_msg_start(s, SSL3_MT_CLIENT_HELLO); /* * Version indicates the negotiated version: for example from * an SSLv2/v3 compatible client hello). The client_version * field is the maximum version we permit and it is also |
︙ | ︙ | |||
708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 | SSLerr(SSL_F_SSL3_CLIENT_HELLO, ERR_R_INTERNAL_ERROR); goto err; } memcpy(p, s->session->session_id, i); p += i; } /* Ciphers supported */ i = ssl_cipher_list_to_bytes(s, SSL_get_ciphers(s), &p[2]); if (i == 0) { SSLerr(SSL_F_SSL3_CLIENT_HELLO, SSL_R_NO_CIPHERS_AVAILABLE); goto err; } s2n(i, p); p += i; /* add in (no) COMPRESSION */ *(p++) = 1; *(p++) = 0; /* Add the NULL method */ /* TLS extensions*/ | > > > > > > > > > > > > < < < < < | | | 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 | SSLerr(SSL_F_SSL3_CLIENT_HELLO, ERR_R_INTERNAL_ERROR); goto err; } memcpy(p, s->session->session_id, i); p += i; } /* DTLS Cookie. */ if (SSL_IS_DTLS(s)) { if (s->d1->cookie_len > sizeof(s->d1->cookie)) { SSLerr(SSL_F_DTLS1_CLIENT_HELLO, ERR_R_INTERNAL_ERROR); goto err; } *(p++) = s->d1->cookie_len; memcpy(p, s->d1->cookie, s->d1->cookie_len); p += s->d1->cookie_len; } /* Ciphers supported */ i = ssl_cipher_list_to_bytes(s, SSL_get_ciphers(s), &p[2]); if (i == 0) { SSLerr(SSL_F_SSL3_CLIENT_HELLO, SSL_R_NO_CIPHERS_AVAILABLE); goto err; } s2n(i, p); p += i; /* add in (no) COMPRESSION */ *(p++) = 1; *(p++) = 0; /* Add the NULL method */ /* TLS extensions*/ bufend = (unsigned char *)s->init_buf->data + SSL3_RT_MAX_PLAIN_LENGTH; if ((p = ssl_add_clienthello_tlsext(s, p, bufend)) == NULL) { SSLerr(SSL_F_SSL3_CLIENT_HELLO, ERR_R_INTERNAL_ERROR); goto err; } ssl3_handshake_msg_finish(s, p - d); s->state = SSL3_ST_CW_CLNT_HELLO_B; } /* SSL3_ST_CW_CLNT_HELLO_B */ return (ssl3_handshake_write(s)); err: return (-1); |
︙ | ︙ | |||
832 833 834 835 836 837 838 | q = p + j; n2s(q, cipher_value); /* * Check if we want to resume the session based on external * pre-shared secret */ | | | 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 | q = p + j; n2s(q, cipher_value); /* * Check if we want to resume the session based on external * pre-shared secret */ if (s->tls_session_secret_cb) { SSL_CIPHER *pref_cipher = NULL; s->session->master_key_length = sizeof(s->session->master_key); if (s->tls_session_secret_cb(s, s->session->master_key, &s->session->master_key_length, NULL, &pref_cipher, s->tls_session_secret_cb_arg)) { s->session->cipher = pref_cipher ? pref_cipher : ssl3_get_cipher_by_value(cipher_value); |
︙ | ︙ | |||
922 923 924 925 926 927 928 | s->s3->tmp.new_cipher = c; /* * Don't digest cached records if no sigalgs: we may need them for * client authentication. */ alg_k = s->s3->tmp.new_cipher->algorithm_mkey; if (!(SSL_USE_SIGALGS(s) || (alg_k & SSL_kGOST)) && | | < | | | < | | < | | < | < | 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 | s->s3->tmp.new_cipher = c; /* * Don't digest cached records if no sigalgs: we may need them for * client authentication. */ alg_k = s->s3->tmp.new_cipher->algorithm_mkey; if (!(SSL_USE_SIGALGS(s) || (alg_k & SSL_kGOST)) && !tls1_digest_cached_records(s)) { al = SSL_AD_INTERNAL_ERROR; goto f_err; } /* lets get the compression algorithm */ /* COMPRESSION */ if (p + 1 - d > n) goto truncated; if (*(p++) != 0) { al = SSL_AD_ILLEGAL_PARAMETER; SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM); goto f_err; } /* TLS extensions*/ if (!ssl_parse_serverhello_tlsext(s, &p, d, n, &al)) { /* 'al' set by ssl_parse_serverhello_tlsext */ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, SSL_R_PARSE_TLSEXT); goto f_err; } if (ssl_check_serverhello_tlsext(s) <= 0) { SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, SSL_R_SERVERHELLO_TLSEXT); goto err; } if (p != d + n) goto truncated; return (1); |
︙ | ︙ | |||
1105 1106 1107 1108 1109 1110 1111 | sc->peer_cert_type = i; CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); /* * Why would the following ever happen? * We just created sc a couple of lines ago. */ | < | < | | 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 | sc->peer_cert_type = i; CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); /* * Why would the following ever happen? * We just created sc a couple of lines ago. */ X509_free(sc->peer_pkeys[i].x509); sc->peer_pkeys[i].x509 = x; sc->peer_key = &(sc->peer_pkeys[i]); X509_free(s->session->peer); CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); s->session->peer = x; s->session->verify_result = s->verify_result; x = NULL; ret = 1; |
︙ | ︙ | |||
1561 1562 1563 1564 1565 1566 1567 | if (s->s3->tmp.message_type == SSL3_MT_SERVER_DONE) { s->s3->tmp.reuse_message = 1; /* * If we get here we don't need any cached handshake records * as we wont be doing client auth. */ if (s->s3->handshake_buffer) { | | < | | < | | | < | 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 | if (s->s3->tmp.message_type == SSL3_MT_SERVER_DONE) { s->s3->tmp.reuse_message = 1; /* * If we get here we don't need any cached handshake records * as we wont be doing client auth. */ if (s->s3->handshake_buffer) { if (!tls1_digest_cached_records(s)) goto err; } return (1); } if (s->s3->tmp.message_type != SSL3_MT_CERTIFICATE_REQUEST) { ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE); SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST, SSL_R_WRONG_MESSAGE_TYPE); goto err; } /* TLS does not like anon-DH with client cert */ if (s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL) { ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE); SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST, SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER); goto err; } if (n < 0) goto truncated; CBS_init(&cert_request, s->init_msg, n); if ((ca_sk = sk_X509_NAME_new(ca_dn_cmp)) == NULL) { |
︙ | ︙ | |||
1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 | goto err; } if (!sk_X509_NAME_push(ca_sk, xn)) { SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST, ERR_R_MALLOC_FAILURE); goto err; } } /* we should setup a certificate to return.... */ s->s3->tmp.cert_req = 1; s->s3->tmp.ctype_num = ctype_num; if (s->s3->tmp.ca_names != NULL) sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); s->s3->tmp.ca_names = ca_sk; ca_sk = NULL; ret = 1; if (0) { truncated: SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST, SSL_R_BAD_PACKET_LENGTH); } err: if (ca_sk != NULL) sk_X509_NAME_pop_free(ca_sk, X509_NAME_free); return (ret); } static int ca_dn_cmp(const X509_NAME * const *a, const X509_NAME * const *b) | > > | 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 | goto err; } if (!sk_X509_NAME_push(ca_sk, xn)) { SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST, ERR_R_MALLOC_FAILURE); goto err; } xn = NULL; /* avoid free in err block */ } /* we should setup a certificate to return.... */ s->s3->tmp.cert_req = 1; s->s3->tmp.ctype_num = ctype_num; if (s->s3->tmp.ca_names != NULL) sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); s->s3->tmp.ca_names = ca_sk; ca_sk = NULL; ret = 1; if (0) { truncated: SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST, SSL_R_BAD_PACKET_LENGTH); } err: X509_NAME_free(xn); if (ca_sk != NULL) sk_X509_NAME_pop_free(ca_sk, X509_NAME_free); return (ret); } static int ca_dn_cmp(const X509_NAME * const *a, const X509_NAME * const *b) |
︙ | ︙ | |||
1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR); SSLerr(SSL_F_SSL3_GET_SERVER_DONE, SSL_R_LENGTH_MISMATCH); return (-1); } ret = 1; return (ret); } int ssl3_send_client_key_exchange(SSL *s) { | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | < | < < < < | < | | < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | < < < < | 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR); SSLerr(SSL_F_SSL3_GET_SERVER_DONE, SSL_R_LENGTH_MISMATCH); return (-1); } ret = 1; return (ret); } static int ssl3_send_client_kex_rsa(SSL *s, SESS_CERT *sess_cert, unsigned char *p, int *outlen) { unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH]; EVP_PKEY *pkey = NULL; unsigned char *q; int ret = -1; int n; pkey = X509_get_pubkey(sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].x509); if (pkey == NULL || pkey->type != EVP_PKEY_RSA || pkey->pkey.rsa == NULL) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR); goto err; } tmp_buf[0] = s->client_version >> 8; tmp_buf[1] = s->client_version & 0xff; arc4random_buf(&tmp_buf[2], sizeof(tmp_buf) - 2); s->session->master_key_length = sizeof(tmp_buf); q = p; p += 2; n = RSA_public_encrypt(sizeof(tmp_buf), tmp_buf, p, pkey->pkey.rsa, RSA_PKCS1_PADDING); if (n <= 0) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, SSL_R_BAD_RSA_ENCRYPT); goto err; } s2n(n, q); n += 2; s->session->master_key_length = s->method->ssl3_enc->generate_master_secret(s, s->session->master_key, tmp_buf, sizeof(tmp_buf)); *outlen = n; ret = 1; err: explicit_bzero(tmp_buf, sizeof(tmp_buf)); EVP_PKEY_free(pkey); return (ret); } static int ssl3_send_client_kex_dhe(SSL *s, SESS_CERT *sess_cert, unsigned char *p, int *outlen) { DH *dh_srvr = NULL, *dh_clnt = NULL; unsigned char *key = NULL; int key_size, n; int ret = -1; /* Ensure that we have an ephemeral key for DHE. */ if (sess_cert->peer_dh_tmp == NULL) { ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, SSL_R_UNABLE_TO_FIND_DH_PARAMETERS); goto err; } dh_srvr = sess_cert->peer_dh_tmp; /* Generate a new random key. */ if ((dh_clnt = DHparams_dup(dh_srvr)) == NULL) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_DH_LIB); goto err; } if (!DH_generate_key(dh_clnt)) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_DH_LIB); goto err; } key_size = DH_size(dh_clnt); if ((key = malloc(key_size)) == NULL) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE); goto err; } n = DH_compute_key(key, dh_srvr->pub_key, dh_clnt); if (n <= 0) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_DH_LIB); goto err; } /* Generate master key from the result. */ s->session->master_key_length = s->method->ssl3_enc->generate_master_secret(s, s->session->master_key, key, n); /* Send off the data. */ n = BN_num_bytes(dh_clnt->pub_key); s2n(n, p); BN_bn2bin(dh_clnt->pub_key, p); n += 2; *outlen = n; ret = 1; err: DH_free(dh_clnt); if (key != NULL) explicit_bzero(key, key_size); free(key); return (ret); } static int ssl3_send_client_kex_ecdh(SSL *s, SESS_CERT *sess_cert, unsigned char *p, int *outlen) { EC_KEY *tkey, *clnt_ecdh = NULL; const EC_GROUP *srvr_group = NULL; const EC_POINT *srvr_ecpoint = NULL; EVP_PKEY *srvr_pub_pkey = NULL; BN_CTX *bn_ctx = NULL; unsigned char *encodedPoint = NULL; unsigned char *key = NULL; unsigned long alg_k; int encoded_pt_len = 0; int key_size, n; int ret = -1; alg_k = s->s3->tmp.new_cipher->algorithm_mkey; /* Ensure that we have an ephemeral key for ECDHE. */ if ((alg_k & SSL_kECDHE) && sess_cert->peer_ecdh_tmp == NULL) { ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR); goto err; } tkey = sess_cert->peer_ecdh_tmp; if (alg_k & (SSL_kECDHr|SSL_kECDHe)) { /* Get the Server Public Key from certificate. */ srvr_pub_pkey = X509_get_pubkey( sess_cert->peer_pkeys[SSL_PKEY_ECC].x509); if (srvr_pub_pkey != NULL && srvr_pub_pkey->type == EVP_PKEY_EC) tkey = srvr_pub_pkey->pkey.ec; } if (tkey == NULL) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR); goto err; } srvr_group = EC_KEY_get0_group(tkey); srvr_ecpoint = EC_KEY_get0_public_key(tkey); if (srvr_group == NULL || srvr_ecpoint == NULL) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR); goto err; } if ((clnt_ecdh = EC_KEY_new()) == NULL) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE); goto err; } if (!EC_KEY_set_group(clnt_ecdh, srvr_group)) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_EC_LIB); goto err; } /* Generate a new ECDH key pair. */ if (!(EC_KEY_generate_key(clnt_ecdh))) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_ECDH_LIB); goto err; } key_size = ECDH_size(clnt_ecdh); if (key_size <= 0) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_ECDH_LIB); goto err; } if ((key = malloc(key_size)) == NULL) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE); } n = ECDH_compute_key(key, key_size, srvr_ecpoint, clnt_ecdh, NULL); if (n <= 0) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_ECDH_LIB); goto err; } /* Generate master key from the result. */ s->session->master_key_length = s->method->ssl3_enc->generate_master_secret(s, s->session->master_key, key, n); /* * First check the size of encoding and allocate memory accordingly. */ encoded_pt_len = EC_POINT_point2oct(srvr_group, EC_KEY_get0_public_key(clnt_ecdh), POINT_CONVERSION_UNCOMPRESSED, NULL, 0, NULL); bn_ctx = BN_CTX_new(); encodedPoint = malloc(encoded_pt_len); if (encodedPoint == NULL || bn_ctx == NULL) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE); goto err; } /* Encode the public key */ n = EC_POINT_point2oct(srvr_group, EC_KEY_get0_public_key(clnt_ecdh), POINT_CONVERSION_UNCOMPRESSED, encodedPoint, encoded_pt_len, bn_ctx); *p = n; /* length of encoded point */ /* Encoded point will be copied here */ p += 1; /* copy the point */ memcpy((unsigned char *)p, encodedPoint, n); /* increment n to account for length field */ n += 1; *outlen = n; ret = 1; err: if (key != NULL) explicit_bzero(key, key_size); free(key); BN_CTX_free(bn_ctx); free(encodedPoint); EC_KEY_free(clnt_ecdh); EVP_PKEY_free(srvr_pub_pkey); return (ret); } static int ssl3_send_client_kex_gost(SSL *s, SESS_CERT *sess_cert, unsigned char *p, int *outlen) { unsigned char premaster_secret[32], shared_ukm[32], tmp[256]; EVP_PKEY *pub_key = NULL; EVP_PKEY_CTX *pkey_ctx; X509 *peer_cert; size_t msglen; unsigned int md_len; EVP_MD_CTX *ukm_hash; int ret = -1; int nid; int n; /* Get server sertificate PKEY and create ctx from it */ peer_cert = sess_cert->peer_pkeys[SSL_PKEY_GOST01].x509; if (peer_cert == NULL) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER); goto err; } pub_key = X509_get_pubkey(peer_cert); pkey_ctx = EVP_PKEY_CTX_new(pub_key, NULL); /* * If we have send a certificate, and certificate key parameters match * those of server certificate, use certificate key for key exchange. * Otherwise, generate ephemeral key pair. */ EVP_PKEY_encrypt_init(pkey_ctx); /* Generate session key. */ arc4random_buf(premaster_secret, 32); /* * If we have client certificate, use its secret as peer key. */ if (s->s3->tmp.cert_req && s->cert->key->privatekey) { if (EVP_PKEY_derive_set_peer(pkey_ctx, s->cert->key->privatekey) <=0) { /* * If there was an error - just ignore it. * Ephemeral key would be used. */ ERR_clear_error(); } } /* * Compute shared IV and store it in algorithm-specific context data. */ ukm_hash = EVP_MD_CTX_create(); if (ukm_hash == NULL) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE); goto err; } if (ssl_get_algorithm2(s) & SSL_HANDSHAKE_MAC_GOST94) nid = NID_id_GostR3411_94; else nid = NID_id_tc26_gost3411_2012_256; if (!EVP_DigestInit(ukm_hash, EVP_get_digestbynid(nid))) goto err; EVP_DigestUpdate(ukm_hash, s->s3->client_random, SSL3_RANDOM_SIZE); EVP_DigestUpdate(ukm_hash, s->s3->server_random, SSL3_RANDOM_SIZE); EVP_DigestFinal_ex(ukm_hash, shared_ukm, &md_len); EVP_MD_CTX_destroy(ukm_hash); if (EVP_PKEY_CTX_ctrl(pkey_ctx, -1, EVP_PKEY_OP_ENCRYPT, EVP_PKEY_CTRL_SET_IV, 8, shared_ukm) < 0) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, SSL_R_LIBRARY_BUG); goto err; } /* * Make GOST keytransport blob message, encapsulate it into sequence. */ *(p++) = V_ASN1_SEQUENCE | V_ASN1_CONSTRUCTED; msglen = 255; if (EVP_PKEY_encrypt(pkey_ctx, tmp, &msglen, premaster_secret, 32) < 0) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, SSL_R_LIBRARY_BUG); goto err; } if (msglen >= 0x80) { *(p++) = 0x81; *(p++) = msglen & 0xff; n = msglen + 3; } else { *(p++) = msglen & 0xff; n = msglen + 2; } memcpy(p, tmp, msglen); /* Check if pubkey from client certificate was used. */ if (EVP_PKEY_CTX_ctrl(pkey_ctx, -1, -1, EVP_PKEY_CTRL_PEER_KEY, 2, NULL) > 0) { /* Set flag "skip certificate verify". */ s->s3->flags |= TLS1_FLAGS_SKIP_CERT_VERIFY; } EVP_PKEY_CTX_free(pkey_ctx); s->session->master_key_length = s->method->ssl3_enc->generate_master_secret(s, s->session->master_key, premaster_secret, 32); *outlen = n; ret = 1; err: explicit_bzero(premaster_secret, sizeof(premaster_secret)); EVP_PKEY_free(pub_key); return (ret); } int ssl3_send_client_key_exchange(SSL *s) { SESS_CERT *sess_cert; unsigned long alg_k; unsigned char *p; int n = 0; if (s->state == SSL3_ST_CW_KEY_EXCH_A) { p = ssl3_handshake_msg_start(s, SSL3_MT_CLIENT_KEY_EXCHANGE); alg_k = s->s3->tmp.new_cipher->algorithm_mkey; if ((sess_cert = s->session->sess_cert) == NULL) { ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE); SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR); goto err; } if (alg_k & SSL_kRSA) { if (ssl3_send_client_kex_rsa(s, sess_cert, p, &n) != 1) goto err; } else if (alg_k & SSL_kDHE) { if (ssl3_send_client_kex_dhe(s, sess_cert, p, &n) != 1) goto err; } else if (alg_k & (SSL_kECDHE|SSL_kECDHr|SSL_kECDHe)) { if (ssl3_send_client_kex_ecdh(s, sess_cert, p, &n) != 1) goto err; } else if (alg_k & SSL_kGOST) { if (ssl3_send_client_kex_gost(s, sess_cert, p, &n) != 1) goto err; } else { ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR); goto err; } ssl3_handshake_msg_finish(s, n); s->state = SSL3_ST_CW_KEY_EXCH_B; } /* SSL3_ST_CW_KEY_EXCH_B */ return (ssl3_handshake_write(s)); err: return (-1); } int ssl3_send_client_verify(SSL *s) { unsigned char *p; |
︙ | ︙ | |||
2346 2347 2348 2349 2350 2351 2352 | !EVP_SignFinal(&mctx, p + 2, &u, pkey)) { SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, ERR_R_EVP_LIB); goto err; } s2n(u, p); n = u + 4; | | | 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 | !EVP_SignFinal(&mctx, p + 2, &u, pkey)) { SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, ERR_R_EVP_LIB); goto err; } s2n(u, p); n = u + 4; if (!tls1_digest_cached_records(s)) goto err; } else if (pkey->type == EVP_PKEY_RSA) { s->method->ssl3_enc->cert_verify_mac( s, NID_md5, &(data[0])); if (RSA_sign(NID_md5_sha1, data, MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH, &(p[2]), &u, pkey->pkey.rsa) <= 0 ) { |
︙ | ︙ | |||
2418 2419 2420 2421 2422 2423 2424 | NULL) <= 0) || (EVP_PKEY_sign(pctx, &(p[2]), &sigsize, signbuf, u) <= 0)) { SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, ERR_R_EVP_LIB); goto err; } | | | 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 | NULL) <= 0) || (EVP_PKEY_sign(pctx, &(p[2]), &sigsize, signbuf, u) <= 0)) { SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, ERR_R_EVP_LIB); goto err; } if (!tls1_digest_cached_records(s)) goto err; j = sigsize; s2n(j, p); n = j + 2; #endif } else { SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, |
︙ | ︙ | |||
2486 2487 2488 2489 2490 2491 2492 | i = 0; } else if (i == 1) { i = 0; SSLerr(SSL_F_SSL3_SEND_CLIENT_CERTIFICATE, SSL_R_BAD_DATA_RETURNED_BY_CALLBACK); } | < | | < < < < < < | < < | 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 | i = 0; } else if (i == 1) { i = 0; SSLerr(SSL_F_SSL3_SEND_CLIENT_CERTIFICATE, SSL_R_BAD_DATA_RETURNED_BY_CALLBACK); } X509_free(x509); EVP_PKEY_free(pkey); if (i == 0) s->s3->tmp.cert_req = 2; /* Ok, we have a cert */ s->state = SSL3_ST_CW_CERT_C; } if (s->state == SSL3_ST_CW_CERT_C) { s->state = SSL3_ST_CW_CERT_D; |
︙ | ︙ |
Deleted jni/libressl/ssl/s3_enc.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/ssl/s3_lib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: s3_lib.c,v 1.107 2016/01/27 02:06:16 beck Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
1806 1807 1808 1809 1810 1811 1812 | .alg_bits = 256, }, #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) /* Cipher CC13 */ { .valid = 1, | | | | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 | .alg_bits = 256, }, #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) /* Cipher CC13 */ { .valid = 1, .name = TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305_OLD, .id = TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305_OLD, .algorithm_mkey = SSL_kECDHE, .algorithm_auth = SSL_aRSA, .algorithm_enc = SSL_CHACHA20POLY1305_OLD, .algorithm_mac = SSL_AEAD, .algorithm_ssl = SSL_TLSV1_2, .algo_strength = SSL_HIGH, .algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256| SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0), .strength_bits = 256, .alg_bits = 256, }, /* Cipher CC14 */ { .valid = 1, .name = TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_OLD, .id = TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305_OLD, .algorithm_mkey = SSL_kECDHE, .algorithm_auth = SSL_aECDSA, .algorithm_enc = SSL_CHACHA20POLY1305_OLD, .algorithm_mac = SSL_AEAD, .algorithm_ssl = SSL_TLSV1_2, .algo_strength = SSL_HIGH, .algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256| SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0), .strength_bits = 256, .alg_bits = 256, }, /* Cipher CC15 */ { .valid = 1, .name = TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305_OLD, .id = TLS1_CK_DHE_RSA_CHACHA20_POLY1305_OLD, .algorithm_mkey = SSL_kDHE, .algorithm_auth = SSL_aRSA, .algorithm_enc = SSL_CHACHA20POLY1305_OLD, .algorithm_mac = SSL_AEAD, .algorithm_ssl = SSL_TLSV1_2, .algo_strength = SSL_HIGH, .algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256| SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0), .strength_bits = 256, .alg_bits = 256, }, /* Cipher CCA8 */ { .valid = 1, .name = TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305, .id = TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305, .algorithm_mkey = SSL_kECDHE, .algorithm_auth = SSL_aRSA, .algorithm_enc = SSL_CHACHA20POLY1305, .algorithm_mac = SSL_AEAD, .algorithm_ssl = SSL_TLSV1_2, .algo_strength = SSL_HIGH, .algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256| SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(12), .strength_bits = 256, .alg_bits = 256, }, /* Cipher CCA9 */ { .valid = 1, .name = TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, .id = TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305, .algorithm_mkey = SSL_kECDHE, .algorithm_auth = SSL_aECDSA, .algorithm_enc = SSL_CHACHA20POLY1305, .algorithm_mac = SSL_AEAD, .algorithm_ssl = SSL_TLSV1_2, .algo_strength = SSL_HIGH, .algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256| SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(12), .strength_bits = 256, .alg_bits = 256, }, /* Cipher CCAA */ { .valid = 1, .name = TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305, .id = TLS1_CK_DHE_RSA_CHACHA20_POLY1305, .algorithm_mkey = SSL_kDHE, .algorithm_auth = SSL_aRSA, .algorithm_enc = SSL_CHACHA20POLY1305, .algorithm_mac = SSL_AEAD, .algorithm_ssl = SSL_TLSV1_2, .algo_strength = SSL_HIGH, .algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256| SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(12), .strength_bits = 256, .alg_bits = 256, }, #endif /* Cipher FF85 FIXME IANA */ { |
︙ | ︙ | |||
1892 1893 1894 1895 1896 1897 1898 | .alg_bits = 0 }, /* end of list */ }; | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 | .alg_bits = 0 }, /* end of list */ }; int ssl3_num_ciphers(void) { return (SSL3_NUM_CIPHERS); } const SSL_CIPHER * |
︙ | ︙ | |||
1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 | { if (s->rstate == SSL_ST_READ_BODY) return 0; return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; } unsigned char * ssl3_handshake_msg_start(SSL *s, uint8_t msg_type) { unsigned char *d, *p; | > > > > > > > < < < < | < < < < | | 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 | { if (s->rstate == SSL_ST_READ_BODY) return 0; return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; } int ssl3_handshake_msg_hdr_len(SSL *s) { return (SSL_IS_DTLS(s) ? DTLS1_HM_HEADER_LENGTH : SSL3_HM_HEADER_LENGTH); } unsigned char * ssl3_handshake_msg_start(SSL *s, uint8_t msg_type) { unsigned char *d, *p; d = p = (unsigned char *)s->init_buf->data; /* Handshake message type and length. */ *(p++) = msg_type; l2n3(0, p); return (d + ssl3_handshake_msg_hdr_len(s)); } void ssl3_handshake_msg_finish(SSL *s, unsigned int len) { unsigned char *d, *p; uint8_t msg_type; d = p = (unsigned char *)s->init_buf->data; /* Handshake message length. */ msg_type = *(p++); l2n3(len, p); s->init_num = ssl3_handshake_msg_hdr_len(s) + (int)len; s->init_off = 0; if (SSL_IS_DTLS(s)) { dtls1_set_message_header(s, d, msg_type, len, 0, len); dtls1_buffer_message(s, 0); } } |
︙ | ︙ | |||
2049 2050 2051 2052 2053 2054 2055 | void ssl3_free(SSL *s) { if (s == NULL) return; | | | | | | | | 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 | void ssl3_free(SSL *s) { if (s == NULL) return; tls1_cleanup_key_block(s); ssl3_release_read_buffer(s); ssl3_release_write_buffer(s); DH_free(s->s3->tmp.dh); EC_KEY_free(s->s3->tmp.ecdh); if (s->s3->tmp.ca_names != NULL) sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); BIO_free(s->s3->handshake_buffer); tls1_free_digest_list(s); free(s->s3->alpn_selected); explicit_bzero(s->s3, sizeof *s->s3); free(s->s3); s->s3 = NULL; } void ssl3_clear(SSL *s) { unsigned char *rp, *wp; size_t rlen, wlen; tls1_cleanup_key_block(s); if (s->s3->tmp.ca_names != NULL) sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); DH_free(s->s3->tmp.dh); s->s3->tmp.dh = NULL; EC_KEY_free(s->s3->tmp.ecdh); s->s3->tmp.ecdh = NULL; rp = s->s3->rbuf.buf; wp = s->s3->wbuf.buf; rlen = s->s3->rbuf.len; wlen = s->s3->wbuf.len; BIO_free(s->s3->handshake_buffer); s->s3->handshake_buffer = NULL; tls1_free_digest_list(s); free(s->s3->alpn_selected); s->s3->alpn_selected = NULL; memset(s->s3, 0, sizeof *s->s3); s->s3->rbuf.buf = rp; s->s3->wbuf.buf = wp; s->s3->rbuf.len = rlen; s->s3->wbuf.len = wlen; ssl_free_wbio_buffer(s); s->packet_length = 0; s->s3->renegotiate = 0; s->s3->total_renegotiations = 0; s->s3->num_renegotiations = 0; s->s3->in_read_app_data = 0; s->version = TLS1_VERSION; free(s->next_proto_negotiated); s->next_proto_negotiated = NULL; s->next_proto_negotiated_len = 0; } |
︙ | ︙ | |||
2609 2610 2611 2612 2613 2614 2615 | { int ret = 0; unsigned long alg_k; alg_k = s->s3->tmp.new_cipher->algorithm_mkey; #ifndef OPENSSL_NO_GOST | | < < < < | < | | | 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 | { int ret = 0; unsigned long alg_k; alg_k = s->s3->tmp.new_cipher->algorithm_mkey; #ifndef OPENSSL_NO_GOST if ((alg_k & SSL_kGOST)) { p[ret++] = TLS_CT_GOST94_SIGN; p[ret++] = TLS_CT_GOST01_SIGN; p[ret++] = TLS_CT_GOST12_256_SIGN; p[ret++] = TLS_CT_GOST12_512_SIGN; } #endif if (alg_k & SSL_kDHE) { p[ret++] = SSL3_CT_RSA_FIXED_DH; p[ret++] = SSL3_CT_DSS_FIXED_DH; } p[ret++] = SSL3_CT_RSA_SIGN; p[ret++] = SSL3_CT_DSS_SIGN; if ((alg_k & (SSL_kECDHr|SSL_kECDHe))) { p[ret++] = TLS_CT_RSA_FIXED_ECDH; p[ret++] = TLS_CT_ECDSA_FIXED_ECDH; } /* * ECDSA certs can be used with RSA cipher suites as well * so we don't need to check for SSL_kECDH or SSL_kECDHE */ p[ret++] = TLS_CT_ECDSA_SIGN; return (ret); } int ssl3_shutdown(SSL *s) { int ret; |
︙ | ︙ |
Deleted jni/libressl/ssl/s3_meth.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/ssl/s3_pkt.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: s3_pkt.c,v 1.57 2015/09/12 16:10:07 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
952 953 954 955 956 957 958 959 960 961 962 963 964 965 | if ((unsigned int)len > rr->length) n = rr->length; else n = (unsigned int)len; memcpy(buf, &(rr->data[rr->off]), n); if (!peek) { rr->length -= n; rr->off += n; if (rr->length == 0) { s->rstate = SSL_ST_READ_HEADER; rr->off = 0; if (s->mode & SSL_MODE_RELEASE_BUFFERS && s->s3->rbuf.left == 0) | > | 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 | if ((unsigned int)len > rr->length) n = rr->length; else n = (unsigned int)len; memcpy(buf, &(rr->data[rr->off]), n); if (!peek) { memset(&(rr->data[rr->off]), 0, n); rr->length -= n; rr->off += n; if (rr->length == 0) { s->rstate = SSL_ST_READ_HEADER; rr->off = 0; if (s->mode & SSL_MODE_RELEASE_BUFFERS && s->s3->rbuf.left == 0) |
︙ | ︙ | |||
1070 1071 1072 1073 1074 1075 1076 | /* If we are a server and get a client hello when renegotiation isn't * allowed send back a no renegotiation alert and carry on. * WARNING: experimental code, needs reviewing (steve) */ if (s->server && SSL_is_init_finished(s) && !s->s3->send_connection_binding && | < | 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 | /* If we are a server and get a client hello when renegotiation isn't * allowed send back a no renegotiation alert and carry on. * WARNING: experimental code, needs reviewing (steve) */ if (s->server && SSL_is_init_finished(s) && !s->s3->send_connection_binding && (s->s3->handshake_fragment_len >= 4) && (s->s3->handshake_fragment[0] == SSL3_MT_CLIENT_HELLO) && (s->session != NULL) && (s->session->cipher != NULL)) { /*s->s3->handshake_fragment_len = 0;*/ rr->length = 0; ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_NO_RENEGOTIATION); goto start; |
︙ | ︙ | |||
1335 1336 1337 1338 1339 1340 1341 | } int ssl3_send_alert(SSL *s, int level, int desc) { /* Map tls/ssl alert value to correct one */ desc = s->method->ssl3_enc->alert_value(desc); | < < < < | 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 | } int ssl3_send_alert(SSL *s, int level, int desc) { /* Map tls/ssl alert value to correct one */ desc = s->method->ssl3_enc->alert_value(desc); if (desc < 0) return -1; /* If a fatal one, remove from cache */ if ((level == 2) && (s->session != NULL)) SSL_CTX_remove_session(s->ctx, s->session); s->s3->alert_dispatch = 1; |
︙ | ︙ |
Changes to jni/libressl/ssl/s3_srvr.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: s3_srvr.c,v 1.125 2016/03/11 07:08:45 mmcc Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
162 163 164 165 166 167 168 | #include <openssl/hmac.h> #include <openssl/md5.h> #include <openssl/objects.h> #include <openssl/x509.h> #include "bytestring.h" | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | #include <openssl/hmac.h> #include <openssl/md5.h> #include <openssl/objects.h> #include <openssl/x509.h> #include "bytestring.h" int ssl3_accept(SSL *s) { unsigned long alg_k; void (*cb)(const SSL *ssl, int type, int val) = NULL; int ret = -1; int new_state, state, skip = 0; |
︙ | ︙ | |||
238 239 240 241 242 243 244 | /* init things to blank */ s->in_handshake++; if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); if (s->cert == NULL) { | | < | > | < | > | 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 | /* init things to blank */ s->in_handshake++; if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); if (s->cert == NULL) { SSLerr(SSL_F_SSL3_ACCEPT, SSL_R_NO_CERTIFICATE_SET); ret = -1; goto end; } for (;;) { state = s->state; switch (s->state) { case SSL_ST_RENEGOTIATE: s->renegotiate = 1; /* s->state=SSL_ST_ACCEPT; */ case SSL_ST_BEFORE: case SSL_ST_ACCEPT: case SSL_ST_BEFORE|SSL_ST_ACCEPT: case SSL_ST_OK|SSL_ST_ACCEPT: s->server = 1; if (cb != NULL) cb(s, SSL_CB_HANDSHAKE_START, 1); if ((s->version >> 8) != 3) { SSLerr(SSL_F_SSL3_ACCEPT, ERR_R_INTERNAL_ERROR); ret = -1; goto end; } s->type = SSL_ST_ACCEPT; if (!ssl3_setup_init_buffer(s)) { ret = -1; goto end; } |
︙ | ︙ | |||
289 290 291 292 293 294 295 | * TCP likes :-) */ if (!ssl_init_wbio_buffer(s, 1)) { ret = -1; goto end; } | | | 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 | * TCP likes :-) */ if (!ssl_init_wbio_buffer(s, 1)) { ret = -1; goto end; } if (!tls1_init_finished_mac(s)) { ret = -1; goto end; } s->state = SSL3_ST_SR_CLNT_HELLO_A; s->ctx->stats.sess_accept++; } else if (!s->s3->send_connection_binding) { |
︙ | ︙ | |||
329 330 331 332 333 334 335 | ret = ssl3_send_hello_request(s); if (ret <= 0) goto end; s->s3->tmp.next_state = SSL3_ST_SW_HELLO_REQ_C; s->state = SSL3_ST_SW_FLUSH; s->init_num = 0; | | | 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 | ret = ssl3_send_hello_request(s); if (ret <= 0) goto end; s->s3->tmp.next_state = SSL3_ST_SW_HELLO_REQ_C; s->state = SSL3_ST_SW_FLUSH; s->init_num = 0; if (!tls1_init_finished_mac(s)) { ret = -1; goto end; } break; case SSL3_ST_SW_HELLO_REQ_C: s->state = SSL_ST_OK; |
︙ | ︙ | |||
442 443 444 445 446 447 448 | ((s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL) && !(s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT))) { /* No cert request */ skip = 1; s->s3->tmp.cert_request = 0; s->state = SSL3_ST_SW_SRVR_DONE_A; | | | | > > > | 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 | ((s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL) && !(s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT))) { /* No cert request */ skip = 1; s->s3->tmp.cert_request = 0; s->state = SSL3_ST_SW_SRVR_DONE_A; if (s->s3->handshake_buffer) { if (!tls1_digest_cached_records(s)) { ret = -1; goto end; } } } else { s->s3->tmp.cert_request = 1; ret = ssl3_send_certificate_request(s); if (ret <= 0) goto end; s->state = SSL3_ST_SW_SRVR_DONE_A; s->init_num = 0; |
︙ | ︙ | |||
532 533 534 535 536 537 538 | /* * For sigalgs freeze the handshake buffer * at this point and digest cached records. */ if (!s->s3->handshake_buffer) { SSLerr(SSL_F_SSL3_ACCEPT, ERR_R_INTERNAL_ERROR); | | > | | > > | | | > > > | 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 | /* * For sigalgs freeze the handshake buffer * at this point and digest cached records. */ if (!s->s3->handshake_buffer) { SSLerr(SSL_F_SSL3_ACCEPT, ERR_R_INTERNAL_ERROR); ret = -1; goto end; } s->s3->flags |= TLS1_FLAGS_KEEP_HANDSHAKE; if (!tls1_digest_cached_records(s)) { ret = -1; goto end; } } else { int offset = 0; int dgst_num; s->state = SSL3_ST_SR_CERT_VRFY_A; s->init_num = 0; /* * We need to get hashes here so if there is * a client cert, it can be verified * FIXME - digest processing for * CertificateVerify should be generalized. * But it is next step */ if (s->s3->handshake_buffer) { if (!tls1_digest_cached_records(s)) { ret = -1; goto end; } } for (dgst_num = 0; dgst_num < SSL_MAX_DIGEST; dgst_num++) if (s->s3->handshake_dgst[dgst_num]) { int dgst_size; s->method->ssl3_enc->cert_verify_mac(s, EVP_MD_CTX_type( |
︙ | ︙ | |||
683 684 685 686 687 688 689 | } else s->s3->tmp.next_state = SSL_ST_OK; s->init_num = 0; break; case SSL_ST_OK: /* clean a few things up */ | | | 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 | } else s->s3->tmp.next_state = SSL_ST_OK; s->init_num = 0; break; case SSL_ST_OK: /* clean a few things up */ tls1_cleanup_key_block(s); BUF_MEM_free(s->init_buf); s->init_buf = NULL; /* remove buffering on output */ ssl_free_wbio_buffer(s); |
︙ | ︙ | |||
992 993 994 995 996 997 998 | al = SSL_AD_DECODE_ERROR; SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_NO_COMPRESSION_SPECIFIED); goto f_err; } /* TLS extensions*/ | < | | | < | < | | 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 | al = SSL_AD_DECODE_ERROR; SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_NO_COMPRESSION_SPECIFIED); goto f_err; } /* TLS extensions*/ if (!ssl_parse_clienthello_tlsext(s, &p, d, n, &al)) { /* 'al' set by ssl_parse_clienthello_tlsext */ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_PARSE_TLSEXT); goto f_err; } if (ssl_check_clienthello_tlsext_early(s) <= 0) { SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_CLIENTHELLO_TLSEXT); goto err; } /* * Check if we want to use external pre-shared secret for this * handshake for not reused session only. We need to generate * server_random before calling tls_session_secret_cb in order to allow * SessionTicket processing to use it in key derivation. */ arc4random_buf(s->s3->server_random, SSL3_RANDOM_SIZE); if (!s->hit && s->tls_session_secret_cb) { SSL_CIPHER *pref_cipher = NULL; s->session->master_key_length = sizeof(s->session->master_key); if (s->tls_session_secret_cb(s, s->session->master_key, &s->session->master_key_length, ciphers, &pref_cipher, s->tls_session_secret_cb_arg)) { s->hit = 1; |
︙ | ︙ | |||
1085 1086 1087 1088 1089 1090 1091 | } else { s->s3->tmp.new_cipher = s->session->cipher; } alg_k = s->s3->tmp.new_cipher->algorithm_mkey; if (!(SSL_USE_SIGALGS(s) || (alg_k & SSL_kGOST)) || !(s->verify_mode & SSL_VERIFY_PEER)) { | | < | | < | < | 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 | } else { s->s3->tmp.new_cipher = s->session->cipher; } alg_k = s->s3->tmp.new_cipher->algorithm_mkey; if (!(SSL_USE_SIGALGS(s) || (alg_k & SSL_kGOST)) || !(s->verify_mode & SSL_VERIFY_PEER)) { if (!tls1_digest_cached_records(s)) { al = SSL_AD_INTERNAL_ERROR; goto f_err; } } /* * We now have the following setup. * client_random * cipher_list - our prefered list of ciphers * ciphers - the clients prefered list of ciphers * compression - basically ignored right now * ssl version is set - sslv3 * s->session - The ssl session has been setup. * s->hit - session reuse flag * s->tmp.new_cipher - the new cipher to use. */ /* Handles TLS extensions that we couldn't check earlier */ if (ssl_check_clienthello_tlsext_late(s) <= 0) { SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_CLIENTHELLO_TLSEXT); goto err; } if (ret < 0) ret = 1; if (0) { truncated: al = SSL_AD_DECODE_ERROR; |
︙ | ︙ | |||
1182 1183 1184 1185 1186 1187 1188 | /* put the cipher */ s2n(ssl3_cipher_get_value(s->s3->tmp.new_cipher), p); /* put the compression method */ *(p++) = 0; | < < < < < | 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 | /* put the cipher */ s2n(ssl3_cipher_get_value(s->s3->tmp.new_cipher), p); /* put the compression method */ *(p++) = 0; bufend = (unsigned char *)s->init_buf->data + SSL3_RT_MAX_PLAIN_LENGTH; if ((p = ssl_add_serverhello_tlsext(s, p, bufend)) == NULL) { SSLerr(SSL_F_SSL3_SEND_SERVER_HELLO, ERR_R_INTERNAL_ERROR); return (-1); } |
︙ | ︙ | |||
1296 1297 1298 1299 1300 1301 1302 | SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, ERR_R_DH_LIB); goto err; } r[0] = dh->p; r[1] = dh->g; r[2] = dh->pub_key; | < | | 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 | SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, ERR_R_DH_LIB); goto err; } r[0] = dh->p; r[1] = dh->g; r[2] = dh->pub_key; } else if (type & SSL_kECDHE) { const EC_GROUP *group; ecdhp = cert->ecdh_tmp; if (s->cert->ecdh_tmp_auto != 0) { int nid = tls1_get_shared_curve(s); if (nid != NID_undef) ecdhp = EC_KEY_new_by_curve_name(nid); |
︙ | ︙ | |||
1439 1440 1441 1442 1443 1444 1445 | } kn = EVP_PKEY_size(pkey); } else { pkey = NULL; kn = 0; } | | > | | > | 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 | } kn = EVP_PKEY_size(pkey); } else { pkey = NULL; kn = 0; } if (!BUF_MEM_grow_clean(buf, ssl3_handshake_msg_hdr_len(s) + n + kn)) { SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, ERR_LIB_BUF); goto err; } d = p = ssl3_handshake_msg_start(s, SSL3_MT_SERVER_KEY_EXCHANGE); for (i = 0; i < 4 && r[i] != NULL; i++) { s2n(nr[i], p); BN_bn2bin(r[i], p); p += nr[i]; } |
︙ | ︙ | |||
1498 1499 1500 1501 1502 1503 1504 | goto err; EVP_DigestUpdate(&md_ctx, s->s3->client_random, SSL3_RANDOM_SIZE); EVP_DigestUpdate(&md_ctx, s->s3->server_random, SSL3_RANDOM_SIZE); | | | 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 | goto err; EVP_DigestUpdate(&md_ctx, s->s3->client_random, SSL3_RANDOM_SIZE); EVP_DigestUpdate(&md_ctx, s->s3->server_random, SSL3_RANDOM_SIZE); EVP_DigestUpdate(&md_ctx, d, n); EVP_DigestFinal_ex(&md_ctx, q, (unsigned int *)&i); q += i; j += i; } if (RSA_sign(NID_md5_sha1, md_buf, j, &(p[2]), &u, pkey->pkey.rsa) <= 0) { |
︙ | ︙ | |||
1533 1534 1535 1536 1537 1538 1539 | EVP_SignInit_ex(&md_ctx, md, NULL); EVP_SignUpdate(&md_ctx, s->s3->client_random, SSL3_RANDOM_SIZE); EVP_SignUpdate(&md_ctx, s->s3->server_random, SSL3_RANDOM_SIZE); | | < < | < < < | > > | 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 | EVP_SignInit_ex(&md_ctx, md, NULL); EVP_SignUpdate(&md_ctx, s->s3->client_random, SSL3_RANDOM_SIZE); EVP_SignUpdate(&md_ctx, s->s3->server_random, SSL3_RANDOM_SIZE); EVP_SignUpdate(&md_ctx, d, n); if (!EVP_SignFinal(&md_ctx, &p[2], (unsigned int *)&i, pkey)) { SSLerr( SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, ERR_LIB_EVP); goto err; } s2n(i, p); n += i + 2; if (SSL_USE_SIGALGS(s)) n += 2; } else { /* Is this error check actually needed? */ al = SSL_AD_HANDSHAKE_FAILURE; SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, SSL_R_UNKNOWN_PKEY_TYPE); goto f_err; } } ssl3_handshake_msg_finish(s, n); } s->state = SSL3_ST_SW_KEY_EXCH_B; EVP_MD_CTX_cleanup(&md_ctx); return (ssl3_handshake_write(s)); f_err: ssl3_send_alert(s, SSL3_AL_FATAL, al); err: free(encodedPoint); BN_CTX_free(bn_ctx); EVP_MD_CTX_cleanup(&md_ctx); return (-1); |
︙ | ︙ | |||
1586 1587 1588 1589 1590 1591 1592 | STACK_OF(X509_NAME) *sk = NULL; X509_NAME *name; BUF_MEM *buf; if (s->state == SSL3_ST_SW_CERT_REQ_A) { buf = s->init_buf; | | > | 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 | STACK_OF(X509_NAME) *sk = NULL; X509_NAME *name; BUF_MEM *buf; if (s->state == SSL3_ST_SW_CERT_REQ_A) { buf = s->init_buf; d = p = ssl3_handshake_msg_start(s, SSL3_MT_CERTIFICATE_REQUEST); /* get the list of acceptable cert types */ p++; n = ssl3_get_req_cert_type(s, p); d[0] = n; p += n; n++; |
︙ | ︙ | |||
1612 1613 1614 1615 1616 1617 1618 | sk = SSL_get_client_CA_list(s); nl = 0; if (sk != NULL) { for (i = 0; i < sk_X509_NAME_num(sk); i++) { name = sk_X509_NAME_value(sk, i); j = i2d_X509_NAME(name, NULL); | | > > | > > | < < < | < < < | | 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 | sk = SSL_get_client_CA_list(s); nl = 0; if (sk != NULL) { for (i = 0; i < sk_X509_NAME_num(sk); i++) { name = sk_X509_NAME_value(sk, i); j = i2d_X509_NAME(name, NULL); if (!BUF_MEM_grow_clean(buf, ssl3_handshake_msg_hdr_len(s) + n + j + 2)) { SSLerr( SSL_F_SSL3_SEND_CERTIFICATE_REQUEST, ERR_R_BUF_LIB); goto err; } p = ssl3_handshake_msg_start(s, SSL3_MT_CERTIFICATE_REQUEST) + n; s2n(j, p); i2d_X509_NAME(name, &p); n += 2 + j; nl += 2 + j; } } /* else no CA names */ p = ssl3_handshake_msg_start(s, SSL3_MT_CERTIFICATE_REQUEST) + off; s2n(nl, p); ssl3_handshake_msg_finish(s, n); s->state = SSL3_ST_SW_CERT_REQ_B; } /* SSL3_ST_SW_CERT_REQ_B */ return (ssl3_handshake_write(s)); err: return (-1); } int ssl3_get_client_key_exchange(SSL *s) { |
︙ | ︙ | |||
1689 1690 1691 1692 1693 1694 1695 | al = SSL_AD_HANDSHAKE_FAILURE; SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, SSL_R_MISSING_RSA_CERTIFICATE); goto f_err; } rsa = pkey->pkey.rsa; | < < | | | | | | | | | < | 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 | al = SSL_AD_HANDSHAKE_FAILURE; SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, SSL_R_MISSING_RSA_CERTIFICATE); goto f_err; } rsa = pkey->pkey.rsa; if (2 > n) goto truncated; n2s(p, i); if (n != i + 2) { SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG); goto err; } else n = i; i = RSA_private_decrypt((int)n, p, p, rsa, RSA_PKCS1_PADDING); ERR_clear_error(); al = -1; |
︙ | ︙ | |||
1765 1766 1767 1768 1769 1770 1771 | p = fakekey; } s->session->master_key_length = s->method->ssl3_enc->generate_master_secret(s, s->session->master_key, p, i); | | | 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 | p = fakekey; } s->session->master_key_length = s->method->ssl3_enc->generate_master_secret(s, s->session->master_key, p, i); explicit_bzero(p, i); } else if (alg_k & SSL_kDHE) { if (2 > n) goto truncated; n2s(p, i); if (n != i + 2) { SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG); |
︙ | ︙ | |||
1816 1817 1818 1819 1820 1821 1822 | s->s3->tmp.dh = NULL; BN_clear_free(pub); pub = NULL; s->session->master_key_length = s->method->ssl3_enc->generate_master_secret( s, s->session->master_key, p, i); | | | | 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 | s->s3->tmp.dh = NULL; BN_clear_free(pub); pub = NULL; s->session->master_key_length = s->method->ssl3_enc->generate_master_secret( s, s->session->master_key, p, i); explicit_bzero(p, i); } else if (alg_k & (SSL_kECDHE|SSL_kECDHr|SSL_kECDHe)) { int ret = 1; int key_size; const EC_KEY *tkey; const EC_GROUP *group; const BIGNUM *priv_key; /* Initialize structures for server's ECDH key pair. */ if ((srvr_ecdh = EC_KEY_new()) == NULL) { SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, |
︙ | ︙ | |||
1934 1935 1936 1937 1938 1939 1940 | * p is pointing to somewhere in the buffer * currently, so set it to the start. */ p = (unsigned char *)s->init_buf->data; } /* Compute the shared pre-master secret */ | | | | | | | 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 | * p is pointing to somewhere in the buffer * currently, so set it to the start. */ p = (unsigned char *)s->init_buf->data; } /* Compute the shared pre-master secret */ key_size = ECDH_size(srvr_ecdh); if (key_size <= 0) { SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, ERR_R_ECDH_LIB); goto err; } i = ECDH_compute_key(p, key_size, clnt_ecpoint, srvr_ecdh, NULL); if (i <= 0) { SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, ERR_R_ECDH_LIB); goto err; } EVP_PKEY_free(clnt_pub_pkey); EC_POINT_free(clnt_ecpoint); EC_KEY_free(srvr_ecdh); BN_CTX_free(bn_ctx); EC_KEY_free(s->s3->tmp.ecdh); s->s3->tmp.ecdh = NULL; /* Compute the master secret */ s->session->master_key_length = s->method->ssl3_enc-> \ generate_master_secret(s, s->session->master_key, p, i); explicit_bzero(p, i); return (ret); } else if (alg_k & SSL_kGOST) { int ret = 0; EVP_PKEY_CTX *pkey_ctx; EVP_PKEY *client_pub_pkey = NULL, *pk = NULL; unsigned char premaster_secret[32], *start; |
︙ | ︙ | |||
2343 2344 2345 2346 2347 2348 2349 | al = SSL_AD_HANDSHAKE_FAILURE; goto f_err; } /* * If tls asked for a client cert, * the client must return a 0 list. */ | | | 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 | al = SSL_AD_HANDSHAKE_FAILURE; goto f_err; } /* * If tls asked for a client cert, * the client must return a 0 list. */ if (s->s3->tmp.cert_request) { SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE, SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST ); al = SSL_AD_UNEXPECTED_MESSAGE; goto f_err; } s->s3->tmp.reuse_message = 1; |
︙ | ︙ | |||
2408 2409 2410 2411 2412 2413 2414 | ERR_R_MALLOC_FAILURE); goto err; } x = NULL; } if (sk_X509_num(sk) <= 0) { | > | < < < < < < | > | | < | | 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 | ERR_R_MALLOC_FAILURE); goto err; } x = NULL; } if (sk_X509_num(sk) <= 0) { /* * TLS does not mind 0 certs returned. * Fail for TLS only if we required a certificate. */ if ((s->verify_mode & SSL_VERIFY_PEER) && (s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT)) { SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE, SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE); al = SSL_AD_HANDSHAKE_FAILURE; goto f_err; } /* No client certificate so digest cached records */ if (s->s3->handshake_buffer && !tls1_digest_cached_records(s)) { al = SSL_AD_INTERNAL_ERROR; goto f_err; } } else { i = ssl_verify_cert_chain(s, sk); if (i <= 0) { al = ssl_verify_alarm_type(s->verify_result); SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE, SSL_R_NO_CERTIFICATE_RETURNED); goto f_err; } } X509_free(s->session->peer); s->session->peer = sk_X509_shift(sk); s->session->verify_result = s->verify_result; /* * With the current implementation, sess_cert will always be NULL * when we arrive here */ |
︙ | ︙ | |||
2476 2477 2478 2479 2480 2481 2482 | al = SSL_AD_DECODE_ERROR; SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE, SSL_R_BAD_PACKET_LENGTH); f_err: ssl3_send_alert(s, SSL3_AL_FATAL, al); } err: | < | | 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 | al = SSL_AD_DECODE_ERROR; SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE, SSL_R_BAD_PACKET_LENGTH); f_err: ssl3_send_alert(s, SSL3_AL_FATAL, al); } err: X509_free(x); if (sk != NULL) sk_X509_pop_free(sk, X509_free); return (ret); } int ssl3_send_server_certificate(SSL *s) |
︙ | ︙ | |||
2504 2505 2506 2507 2508 2509 2510 | l = ssl3_output_cert_chain(s, x); s->state = SSL3_ST_SW_CERT_B; s->init_num = (int)l; s->init_off = 0; } /* SSL3_ST_SW_CERT_B */ | | | | 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 | l = ssl3_output_cert_chain(s, x); s->state = SSL3_ST_SW_CERT_B; s->init_num = (int)l; s->init_off = 0; } /* SSL3_ST_SW_CERT_B */ return (ssl3_handshake_write(s)); } /* send a new session ticket (not necessarily for a new session) */ int ssl3_send_newsession_ticket(SSL *s) { if (s->state == SSL3_ST_SW_SESSION_TICKET_A) { unsigned char *d, *p, *senc, *macstart; const unsigned char *const_p; int len, slen_full, slen; SSL_SESSION *sess; unsigned int hlen; EVP_CIPHER_CTX ctx; HMAC_CTX hctx; SSL_CTX *tctx = s->initial_ctx; |
︙ | ︙ | |||
2569 2570 2571 2572 2573 2574 2575 | * Grow buffer if need be: the length calculation is as * follows 1 (size of message name) + 3 (message length * bytes) + 4 (ticket lifetime hint) + 2 (ticket length) + * 16 (key name) + max_iv_len (iv length) + * session_length + max_enc_block_size (max encrypted session * length) + max_md_size (HMAC). */ | | | < < | | < > | 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 | * Grow buffer if need be: the length calculation is as * follows 1 (size of message name) + 3 (message length * bytes) + 4 (ticket lifetime hint) + 2 (ticket length) + * 16 (key name) + max_iv_len (iv length) + * session_length + max_enc_block_size (max encrypted session * length) + max_md_size (HMAC). */ if (!BUF_MEM_grow(s->init_buf, ssl3_handshake_msg_hdr_len(s) + 22 + EVP_MAX_IV_LENGTH + EVP_MAX_BLOCK_LENGTH + EVP_MAX_MD_SIZE + slen)) { free(senc); return (-1); } d = p = ssl3_handshake_msg_start(s, SSL3_MT_NEWSESSION_TICKET); EVP_CIPHER_CTX_init(&ctx); HMAC_CTX_init(&hctx); /* * Initialize HMAC and cipher contexts. If callback present * it does all the work otherwise use generated values * from parent ctx. */ if (tctx->tlsext_ticket_key_cb) { if (tctx->tlsext_ticket_key_cb(s, key_name, iv, &ctx, |
︙ | ︙ | |||
2624 2625 2626 2627 2628 2629 2630 | p += 16; /* output IV */ memcpy(p, iv, EVP_CIPHER_CTX_iv_length(&ctx)); p += EVP_CIPHER_CTX_iv_length(&ctx); /* Encrypt session data */ EVP_EncryptUpdate(&ctx, p, &len, senc, slen); p += len; | | < > | | | | | | > < < | | | 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 | p += 16; /* output IV */ memcpy(p, iv, EVP_CIPHER_CTX_iv_length(&ctx)); p += EVP_CIPHER_CTX_iv_length(&ctx); /* Encrypt session data */ EVP_EncryptUpdate(&ctx, p, &len, senc, slen); p += len; EVP_EncryptFinal_ex(&ctx, p, &len); p += len; EVP_CIPHER_CTX_cleanup(&ctx); HMAC_Update(&hctx, macstart, p - macstart); HMAC_Final(&hctx, p, &hlen); HMAC_CTX_cleanup(&hctx); p += hlen; /* Now write out lengths: p points to end of data written */ /* Total length */ len = p - d; /* Skip ticket lifetime hint. */ p = d + 4; s2n(len - 6, p); /* Message length */ ssl3_handshake_msg_finish(s, len); s->state = SSL3_ST_SW_SESSION_TICKET_B; free(senc); } /* SSL3_ST_SW_SESSION_TICKET_B */ return (ssl3_handshake_write(s)); } int ssl3_send_cert_status(SSL *s) { unsigned char *p; |
︙ | ︙ |
Changes to jni/libressl/ssl/srtp.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: srtp.h,v 1.5 2014/12/14 15:30:50 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
127 128 129 130 131 132 133 | #define SRTP_AES128_F8_SHA1_80 0x0003 #define SRTP_AES128_F8_SHA1_32 0x0004 #define SRTP_NULL_SHA1_80 0x0005 #define SRTP_NULL_SHA1_32 0x0006 int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); int SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles); | < | 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | #define SRTP_AES128_F8_SHA1_80 0x0003 #define SRTP_AES128_F8_SHA1_32 0x0004 #define SRTP_NULL_SHA1_80 0x0005 #define SRTP_NULL_SHA1_32 0x0006 int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); int SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles); STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); #ifdef __cplusplus } #endif #endif |
Changes to jni/libressl/ssl/ssl_asn1.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ssl_asn1.c,v 1.40 2014/12/14 15:30:50 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
445 446 447 448 449 450 451 | free(ai.data); ai.data = NULL; ai.length = 0; } else ret->timeout = 3; /* 3 - Peer (X509). */ | < | | | | 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 | free(ai.data); ai.data = NULL; ai.length = 0; } else ret->timeout = 3; /* 3 - Peer (X509). */ X509_free(ret->peer); ret->peer = NULL; if (c.slen != 0L && *c.p == (V_ASN1_CONSTRUCTED | V_ASN1_CONTEXT_SPECIFIC | 3)) { c.q = c.p; Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); if (Tinf & 0x80) { SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_BAD_ASN1_OBJECT_HEADER); |
︙ | ︙ |
Changes to jni/libressl/ssl/ssl_cert.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ssl_cert.c,v 1.51 2015/09/11 17:37:47 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
304 305 306 307 308 309 310 | return (ret); err: DH_free(ret->dh_tmp); EC_KEY_free(ret->ecdh_tmp); for (i = 0; i < SSL_PKEY_NUM; i++) { | < | | 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 | return (ret); err: DH_free(ret->dh_tmp); EC_KEY_free(ret->ecdh_tmp); for (i = 0; i < SSL_PKEY_NUM; i++) { X509_free(ret->pkeys[i].x509); EVP_PKEY_free(ret->pkeys[i].privatekey); } free (ret); return NULL; } |
︙ | ︙ | |||
329 330 331 332 333 334 335 | if (i > 0) return; DH_free(c->dh_tmp); EC_KEY_free(c->ecdh_tmp); for (i = 0; i < SSL_PKEY_NUM; i++) { | < | | 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 | if (i > 0) return; DH_free(c->dh_tmp); EC_KEY_free(c->ecdh_tmp); for (i = 0; i < SSL_PKEY_NUM; i++) { X509_free(c->pkeys[i].x509); EVP_PKEY_free(c->pkeys[i].privatekey); } free(c); } int |
︙ | ︙ | |||
396 397 398 399 400 401 402 | i = CRYPTO_add(&sc->references, -1, CRYPTO_LOCK_SSL_SESS_CERT); if (i > 0) return; /* i == 0 */ if (sc->cert_chain != NULL) sk_X509_pop_free(sc->cert_chain, X509_free); | | < | < < < < < < < < | 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 | i = CRYPTO_add(&sc->references, -1, CRYPTO_LOCK_SSL_SESS_CERT); if (i > 0) return; /* i == 0 */ if (sc->cert_chain != NULL) sk_X509_pop_free(sc->cert_chain, X509_free); for (i = 0; i < SSL_PKEY_NUM; i++) X509_free(sc->peer_pkeys[i].x509); DH_free(sc->peer_dh_tmp); EC_KEY_free(sc->peer_ecdh_tmp); free(sc); } int ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk) { X509_STORE_CTX ctx; X509 *x; int ret; |
︙ | ︙ | |||
623 624 625 626 627 628 629 | if (ret != NULL) sk_X509_NAME_pop_free(ret, X509_NAME_free); ret = NULL; } if (sk != NULL) sk_X509_NAME_free(sk); BIO_free(in); | < | | 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 | if (ret != NULL) sk_X509_NAME_pop_free(ret, X509_NAME_free); ret = NULL; } if (sk != NULL) sk_X509_NAME_free(sk); BIO_free(in); X509_free(x); if (ret != NULL) ERR_clear_error(); return (ret); } /*! * Add a file of certs to a stack. |
︙ | ︙ | |||
682 683 684 685 686 687 688 | ERR_clear_error(); if (0) { err: ret = 0; } BIO_free(in); | < | | 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 | ERR_clear_error(); if (0) { err: ret = 0; } BIO_free(in); X509_free(x); (void)sk_X509_NAME_set_cmp_func(stack, oldcmp); return ret; } /*! |
︙ | ︙ |
Changes to jni/libressl/ssl/ssl_ciph.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ssl_ciph.c,v 1.85 2016/04/28 16:06:53 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
410 411 412 413 414 415 416 | }, { .name = SSL_TXT_CAMELLIA, .algorithm_enc = SSL_CAMELLIA128|SSL_CAMELLIA256, }, { .name = SSL_TXT_CHACHA20, | | | 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 | }, { .name = SSL_TXT_CAMELLIA, .algorithm_enc = SSL_CAMELLIA128|SSL_CAMELLIA256, }, { .name = SSL_TXT_CHACHA20, .algorithm_enc = SSL_CHACHA20POLY1305|SSL_CHACHA20POLY1305_OLD, }, /* MAC aliases */ { .name = SSL_TXT_AEAD, .algorithm_mac = SSL_AEAD, }, |
︙ | ︙ | |||
729 730 731 732 733 734 735 736 737 738 739 740 741 742 | *aead = EVP_aead_aes_256_gcm(); return 1; #endif #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) case SSL_CHACHA20POLY1305: *aead = EVP_aead_chacha20_poly1305(); return 1; #endif default: break; } return 0; } | > > > | 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 | *aead = EVP_aead_aes_256_gcm(); return 1; #endif #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) case SSL_CHACHA20POLY1305: *aead = EVP_aead_chacha20_poly1305(); return 1; case SSL_CHACHA20POLY1305_OLD: *aead = EVP_aead_chacha20_poly1305_old(); return 1; #endif default: break; } return 0; } |
︙ | ︙ | |||
1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 | } if (*l == '\0') break; /* done */ } return (retval); } STACK_OF(SSL_CIPHER) * ssl_create_cipher_list(const SSL_METHOD *ssl_method, STACK_OF(SSL_CIPHER) **cipher_list, STACK_OF(SSL_CIPHER) **cipher_list_by_id, const char *rule_str) { | > > > > > > > > > > | 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 | } if (*l == '\0') break; /* done */ } return (retval); } static inline int ssl_aes_is_accelerated(void) { #if defined(__i386__) || defined(__x86_64__) return ((OPENSSL_cpu_caps() & (1ULL << 57)) != 0); #else return (0); #endif } STACK_OF(SSL_CIPHER) * ssl_create_cipher_list(const SSL_METHOD *ssl_method, STACK_OF(SSL_CIPHER) **cipher_list, STACK_OF(SSL_CIPHER) **cipher_list_by_id, const char *rule_str) { |
︙ | ︙ | |||
1402 1403 1404 1405 1406 1407 1408 | /* Now arrange all ciphers by preference: */ /* Everything else being equal, prefer ephemeral ECDH over other key exchange mechanisms */ ssl_cipher_apply_rule(0, SSL_kECDHE, 0, 0, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); ssl_cipher_apply_rule(0, SSL_kECDHE, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head, &tail); | > | > > > > > > > > > > > | | | | > > > | > > | | 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 | /* Now arrange all ciphers by preference: */ /* Everything else being equal, prefer ephemeral ECDH over other key exchange mechanisms */ ssl_cipher_apply_rule(0, SSL_kECDHE, 0, 0, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); ssl_cipher_apply_rule(0, SSL_kECDHE, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head, &tail); if (ssl_aes_is_accelerated() == 1) { /* * We have hardware assisted AES - prefer AES as a symmetric * cipher, with CHACHA20 second. */ ssl_cipher_apply_rule(0, 0, 0, SSL_AES, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); ssl_cipher_apply_rule(0, 0, 0, SSL_CHACHA20POLY1305, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); ssl_cipher_apply_rule(0, 0, 0, SSL_CHACHA20POLY1305_OLD, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); } else { /* * CHACHA20 is fast and safe on all hardware and is thus our * preferred symmetric cipher, with AES second. */ ssl_cipher_apply_rule(0, 0, 0, SSL_CHACHA20POLY1305, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); ssl_cipher_apply_rule(0, 0, 0, SSL_CHACHA20POLY1305_OLD, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); ssl_cipher_apply_rule(0, 0, 0, SSL_AES, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); } /* Temporarily enable everything else for sorting */ ssl_cipher_apply_rule(0, 0, 0, 0, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); /* Low priority for MD5 */ ssl_cipher_apply_rule(0, 0, 0, 0, SSL_MD5, 0, 0, CIPHER_ORD, -1, &head, &tail); /* Move anonymous ciphers to the end. Usually, these will remain disabled. * (For applications that allow them, they aren't too bad, but we prefer * authenticated ciphers.) */ ssl_cipher_apply_rule(0, 0, SSL_aNULL, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); /* Move ciphers without forward secrecy to the end */ ssl_cipher_apply_rule(0, 0, SSL_aECDH, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); ssl_cipher_apply_rule(0, SSL_kRSA, 0, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); /* RC4 is sort of broken - move it to the end */ ssl_cipher_apply_rule(0, 0, 0, SSL_RC4, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); /* Now sort by symmetric encryption strength. The above ordering remains * in force within each class */ if (!ssl_cipher_strength_sort(&head, &tail)) { free(co_list); return NULL; |
︙ | ︙ | |||
1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 | break; case SSL_CAMELLIA256: enc = "Camellia(256)"; break; case SSL_CHACHA20POLY1305: enc = "ChaCha20-Poly1305"; break; case SSL_eGOST2814789CNT: enc = "GOST-28178-89-CNT"; break; default: enc = "unknown"; break; } | > > > | 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 | break; case SSL_CAMELLIA256: enc = "Camellia(256)"; break; case SSL_CHACHA20POLY1305: enc = "ChaCha20-Poly1305"; break; case SSL_CHACHA20POLY1305_OLD: enc = "ChaCha20-Poly1305-Old"; break; case SSL_eGOST2814789CNT: enc = "GOST-28178-89-CNT"; break; default: enc = "unknown"; break; } |
︙ | ︙ |
Changes to jni/libressl/ssl/ssl_lib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ssl_lib.c,v 1.116 2015/10/25 15:52:49 doug Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
262 263 264 265 266 267 268 | SSL * SSL_new(SSL_CTX *ctx) { SSL *s; if (ctx == NULL) { | | < | < | 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 | SSL * SSL_new(SSL_CTX *ctx) { SSL *s; if (ctx == NULL) { SSLerr(SSL_F_SSL_NEW, SSL_R_NULL_SSL_CTX); return (NULL); } if (ctx->method == NULL) { SSLerr(SSL_F_SSL_NEW, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION); return (NULL); } s = calloc(1, sizeof(SSL)); if (s == NULL) goto err; |
︙ | ︙ | |||
357 358 359 360 361 362 363 | s->references = 1; s->server = (ctx->method->ssl_accept == ssl_undefined_function) ? 0 : 1; SSL_clear(s); CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data); | < > < < < < | < | < | 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 | s->references = 1; s->server = (ctx->method->ssl_accept == ssl_undefined_function) ? 0 : 1; SSL_clear(s); CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data); return (s); err: SSL_free(s); SSLerr(SSL_F_SSL_NEW, ERR_R_MALLOC_FAILURE); return (NULL); } int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx, unsigned int sid_ctx_len) { |
︙ | ︙ | |||
506 507 508 509 510 511 512 | /* If the buffering BIO is in place, pop it off */ if (s->bbio == s->wbio) { s->wbio = BIO_pop(s->wbio); } BIO_free(s->bbio); s->bbio = NULL; } | > | < | | 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 | /* If the buffering BIO is in place, pop it off */ if (s->bbio == s->wbio) { s->wbio = BIO_pop(s->wbio); } BIO_free(s->bbio); s->bbio = NULL; } if (s->rbio != s->wbio) BIO_free_all(s->rbio); BIO_free_all(s->wbio); if (s->init_buf != NULL) BUF_MEM_free(s->init_buf); /* add extra stuff */ if (s->cipher_list != NULL) sk_SSL_CIPHER_free(s->cipher_list); |
︙ | ︙ | |||
575 576 577 578 579 580 581 | /* If the output buffering BIO is still in place, remove it */ if (s->bbio != NULL) { if (s->wbio == s->bbio) { s->wbio = s->wbio->next_bio; s->bbio->next_bio = NULL; } } | > | | | 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 | /* If the output buffering BIO is still in place, remove it */ if (s->bbio != NULL) { if (s->wbio == s->bbio) { s->wbio = s->wbio->next_bio; s->bbio->next_bio = NULL; } } if (s->rbio != rbio && s->rbio != s->wbio) BIO_free_all(s->rbio); if (s->wbio != wbio) BIO_free_all(s->wbio); s->rbio = rbio; s->wbio = wbio; } BIO * SSL_get_rbio(const SSL *s) |
︙ | ︙ | |||
636 637 638 639 640 641 642 | { int ret = 0; BIO *bio = NULL; bio = BIO_new(BIO_s_socket()); if (bio == NULL) { | | < | < | 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 | { int ret = 0; BIO *bio = NULL; bio = BIO_new(BIO_s_socket()); if (bio == NULL) { SSLerr(SSL_F_SSL_SET_FD, ERR_R_BUF_LIB); goto err; } BIO_set_fd(bio, fd, BIO_NOCLOSE); SSL_set_bio(s, bio, bio); ret = 1; err: return (ret); } int SSL_set_wfd(SSL *s, int fd) { int ret = 0; BIO *bio = NULL; if ((s->rbio == NULL) || (BIO_method_type(s->rbio) != BIO_TYPE_SOCKET) || ((int)BIO_get_fd(s->rbio, NULL) != fd)) { bio = BIO_new(BIO_s_socket()); if (bio == NULL) { SSLerr(SSL_F_SSL_SET_WFD, ERR_R_BUF_LIB); goto err; } BIO_set_fd(bio, fd, BIO_NOCLOSE); SSL_set_bio(s, SSL_get_rbio(s), bio); } else SSL_set_bio(s, SSL_get_rbio(s), SSL_get_rbio(s)); ret = 1; |
︙ | ︙ | |||
682 683 684 685 686 687 688 | BIO *bio = NULL; if ((s->wbio == NULL) || (BIO_method_type(s->wbio) != BIO_TYPE_SOCKET) || ((int)BIO_get_fd(s->wbio, NULL) != fd)) { bio = BIO_new(BIO_s_socket()); if (bio == NULL) { | | < | 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 | BIO *bio = NULL; if ((s->wbio == NULL) || (BIO_method_type(s->wbio) != BIO_TYPE_SOCKET) || ((int)BIO_get_fd(s->wbio, NULL) != fd)) { bio = BIO_new(BIO_s_socket()); if (bio == NULL) { SSLerr(SSL_F_SSL_SET_RFD, ERR_R_BUF_LIB); goto err; } BIO_set_fd(bio, fd, BIO_NOCLOSE); SSL_set_bio(s, bio, SSL_get_wbio(s)); } else SSL_set_bio(s, SSL_get_wbio(s), SSL_get_wbio(s)); ret = 1; |
︙ | ︙ | |||
923 924 925 926 927 928 929 | return (X509_check_private_key(ssl->cert->key->x509, ssl->cert->key->privatekey)); } int SSL_accept(SSL *s) { | | | | | < | | < | | < | < | | < | 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 | return (X509_check_private_key(ssl->cert->key->x509, ssl->cert->key->privatekey)); } int SSL_accept(SSL *s) { if (s->handshake_func == NULL) SSL_set_accept_state(s); /* Not properly initialized yet */ return (s->method->ssl_accept(s)); } int SSL_connect(SSL *s) { if (s->handshake_func == NULL) SSL_set_connect_state(s); /* Not properly initialized yet */ return (s->method->ssl_connect(s)); } long SSL_get_default_timeout(const SSL *s) { return (s->method->get_timeout()); } int SSL_read(SSL *s, void *buf, int num) { if (s->handshake_func == NULL) { SSLerr(SSL_F_SSL_READ, SSL_R_UNINITIALIZED); return (-1); } if (s->shutdown & SSL_RECEIVED_SHUTDOWN) { s->rwstate = SSL_NOTHING; return (0); } return (s->method->ssl_read(s, buf, num)); } int SSL_peek(SSL *s, void *buf, int num) { if (s->handshake_func == NULL) { SSLerr(SSL_F_SSL_PEEK, SSL_R_UNINITIALIZED); return (-1); } if (s->shutdown & SSL_RECEIVED_SHUTDOWN) { return (0); } return (s->method->ssl_peek(s, buf, num)); } int SSL_write(SSL *s, const void *buf, int num) { if (s->handshake_func == NULL) { SSLerr(SSL_F_SSL_WRITE, SSL_R_UNINITIALIZED); return (-1); } if (s->shutdown & SSL_SENT_SHUTDOWN) { s->rwstate = SSL_NOTHING; SSLerr(SSL_F_SSL_WRITE, SSL_R_PROTOCOL_IS_SHUTDOWN); return (-1); } return (s->method->ssl_write(s, buf, num)); } int SSL_shutdown(SSL *s) { /* * Note that this function behaves differently from what one might * expect. Return values are 0 for no success (yet), * 1 for success; but calling it once is usually not enough, * even if blocking I/O is used (see ssl3_shutdown). */ if (s->handshake_func == NULL) { SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_UNINITIALIZED); return (-1); } if ((s != NULL) && !SSL_in_init(s)) return (s->method->ssl_shutdown(s)); else return (1); |
︙ | ︙ | |||
1315 1316 1317 1318 1319 1320 1321 | * ssl_create_cipher_list is concerned, and hence * ctx->cipher_list and ctx->cipher_list_by_id has been * updated. */ if (sk == NULL) return (0); else if (sk_SSL_CIPHER_num(sk) == 0) { | | < | < | 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 | * ssl_create_cipher_list is concerned, and hence * ctx->cipher_list and ctx->cipher_list_by_id has been * updated. */ if (sk == NULL) return (0); else if (sk_SSL_CIPHER_num(sk) == 0) { SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH); return (0); } return (1); } /* Specify the ciphers to be used by the SSL. */ int SSL_set_cipher_list(SSL *s, const char *str) { STACK_OF(SSL_CIPHER) *sk; sk = ssl_create_cipher_list(s->ctx->method, &s->cipher_list, &s->cipher_list_by_id, str); /* see comment in SSL_CTX_set_cipher_list */ if (sk == NULL) return (0); else if (sk_SSL_CIPHER_num(sk) == 0) { SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH); return (0); } return (1); } /* works well for SSLv2, not so good for SSLv3 */ char * |
︙ | ︙ | |||
1727 1728 1729 1730 1731 1732 1733 | } int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, const char *label, size_t llen, const unsigned char *p, size_t plen, int use_context) { | < < < | 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 | } int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, const char *label, size_t llen, const unsigned char *p, size_t plen, int use_context) { return (s->method->ssl3_enc->export_keying_material(s, out, olen, label, llen, p, plen, use_context)); } static unsigned long ssl_session_hash(const SSL_SESSION *a) { |
︙ | ︙ | |||
1783 1784 1785 1786 1787 1788 1789 | SSL_CTX * SSL_CTX_new(const SSL_METHOD *meth) { SSL_CTX *ret = NULL; if (meth == NULL) { | | < | 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 | SSL_CTX * SSL_CTX_new(const SSL_METHOD *meth) { SSL_CTX *ret = NULL; if (meth == NULL) { SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_NULL_SSL_METHOD_PASSED); return (NULL); } if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) { SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS); goto err; |
︙ | ︙ | |||
1850 1851 1852 1853 1854 1855 1856 | if (ret->cert_store == NULL) goto err; ssl_create_cipher_list(ret->method, &ret->cipher_list, &ret->cipher_list_by_id, SSL_DEFAULT_CIPHER_LIST); if (ret->cipher_list == NULL || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) { | | < | 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 | if (ret->cert_store == NULL) goto err; ssl_create_cipher_list(ret->method, &ret->cipher_list, &ret->cipher_list_by_id, SSL_DEFAULT_CIPHER_LIST); if (ret->cipher_list == NULL || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) { SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS); goto err2; } ret->param = X509_VERIFY_PARAM_new(); if (!ret->param) goto err; |
︙ | ︙ | |||
1918 1919 1920 1921 1922 1923 1924 | #endif /* * Default is to connect to non-RI servers. When RI is more widely * deployed might change this. */ ret->options |= SSL_OP_LEGACY_SERVER_CONNECT; | < < < | < | 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 | #endif /* * Default is to connect to non-RI servers. When RI is more widely * deployed might change this. */ ret->options |= SSL_OP_LEGACY_SERVER_CONNECT; return (ret); err: SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE); err2: SSL_CTX_free(ret); return (NULL); } void SSL_CTX_free(SSL_CTX *a) |
︙ | ︙ | |||
2462 2463 2464 2465 2466 2467 2468 | int SSL_do_handshake(SSL *s) { int ret = 1; if (s->handshake_func == NULL) { | | < | 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 | int SSL_do_handshake(SSL *s) { int ret = 1; if (s->handshake_func == NULL) { SSLerr(SSL_F_SSL_DO_HANDSHAKE, SSL_R_CONNECTION_TYPE_NOT_SET); return (-1); } s->method->ssl_renegotiate_check(s); if (SSL_in_init(s) || SSL_in_before(s)) { ret = s->handshake_func(s); |
︙ | ︙ | |||
2529 2530 2531 2532 2533 2534 2535 | ssl_undefined_const_function(const SSL *s) { SSLerr(SSL_F_SSL_UNDEFINED_CONST_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); return (0); } | < < < < < < < < < < < < | 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 | ssl_undefined_const_function(const SSL *s) { SSLerr(SSL_F_SSL_UNDEFINED_CONST_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); return (0); } const char * ssl_version_string(int ver) { switch (ver) { case DTLS1_VERSION: return (SSL_TXT_DTLS1); case TLS1_VERSION: return (SSL_TXT_TLSV1); case TLS1_1_VERSION: return (SSL_TXT_TLSV1_1); case TLS1_2_VERSION: return (SSL_TXT_TLSV1_2); default: |
︙ | ︙ | |||
2587 2588 2589 2590 2591 2592 2593 | return (TLS1_2_VERSION); if ((s->options & SSL_OP_NO_TLSv1_1) == 0 && max_version >= TLS1_1_VERSION) return (TLS1_1_VERSION); if ((s->options & SSL_OP_NO_TLSv1) == 0 && max_version >= TLS1_VERSION) return (TLS1_VERSION); | < < < | 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 | return (TLS1_2_VERSION); if ((s->options & SSL_OP_NO_TLSv1_1) == 0 && max_version >= TLS1_1_VERSION) return (TLS1_1_VERSION); if ((s->options & SSL_OP_NO_TLSv1) == 0 && max_version >= TLS1_VERSION) return (TLS1_VERSION); return (0); } SSL * SSL_dup(SSL *s) { |
︙ | ︙ | |||
2804 2805 2806 2807 2808 2809 2810 | bbio = s->bbio; if (s->bbio == s->wbio) s->wbio = BIO_pop(s->wbio); } (void)BIO_reset(bbio); /* if (!BIO_set_write_buffer_size(bbio,16*1024)) */ if (!BIO_set_read_buffer_size(bbio, 1)) { | | < | 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 | bbio = s->bbio; if (s->bbio == s->wbio) s->wbio = BIO_pop(s->wbio); } (void)BIO_reset(bbio); /* if (!BIO_set_write_buffer_size(bbio,16*1024)) */ if (!BIO_set_read_buffer_size(bbio, 1)) { SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER, ERR_R_BUF_LIB); return (0); } if (push) { if (s->wbio != bbio) s->wbio = BIO_push(bbio, s->wbio); } else { if (s->wbio == bbio) |
︙ | ︙ | |||
2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 | { return (ssl->ctx); } SSL_CTX * SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx) { if (ssl->ctx == ctx) return (ssl->ctx); if (ctx == NULL) ctx = ssl->initial_ctx; | > > > | > > > > | < > | 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 | { return (ssl->ctx); } SSL_CTX * SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx) { CERT *ocert = ssl->cert; if (ssl->ctx == ctx) return (ssl->ctx); if (ctx == NULL) ctx = ssl->initial_ctx; ssl->cert = ssl_cert_dup(ctx->cert); if (ocert != NULL) { int i; /* Copy negotiated digests from original certificate. */ for (i = 0; i < SSL_PKEY_NUM; i++) ssl->cert->pkeys[i].digest = ocert->pkeys[i].digest; ssl_cert_free(ocert); } CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX); SSL_CTX_free(ssl->ctx); /* decrement reference count */ ssl->ctx = ctx; return (ssl->ctx); } int |
︙ | ︙ | |||
3078 3079 3080 3081 3082 3083 3084 | void SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)) { SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); } | < < < < < < < < < < < < < < < < < < < < | 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 | void SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)) { SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); } void ssl_clear_hash_ctx(EVP_MD_CTX **hash) { if (*hash) EVP_MD_CTX_destroy(*hash); *hash = NULL; } |
︙ | ︙ |
Changes to jni/libressl/ssl/ssl_locl.h.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ssl_locl.h,v 1.128 2015/09/12 15:08:54 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
283 284 285 286 287 288 289 290 291 292 293 294 295 296 | #define SSL_AES256 0x00000040L #define SSL_CAMELLIA128 0x00000080L #define SSL_CAMELLIA256 0x00000100L #define SSL_eGOST2814789CNT 0x00000200L #define SSL_AES128GCM 0x00000400L #define SSL_AES256GCM 0x00000800L #define SSL_CHACHA20POLY1305 0x00001000L #define SSL_AES (SSL_AES128|SSL_AES256|SSL_AES128GCM|SSL_AES256GCM) #define SSL_CAMELLIA (SSL_CAMELLIA128|SSL_CAMELLIA256) /* Bits for algorithm_mac (symmetric authentication) */ | > | 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 | #define SSL_AES256 0x00000040L #define SSL_CAMELLIA128 0x00000080L #define SSL_CAMELLIA256 0x00000100L #define SSL_eGOST2814789CNT 0x00000200L #define SSL_AES128GCM 0x00000400L #define SSL_AES256GCM 0x00000800L #define SSL_CHACHA20POLY1305 0x00001000L #define SSL_CHACHA20POLY1305_OLD 0x00002000L #define SSL_AES (SSL_AES128|SSL_AES256|SSL_AES128GCM|SSL_AES256GCM) #define SSL_CAMELLIA (SSL_CAMELLIA128|SSL_CAMELLIA256) /* Bits for algorithm_mac (symmetric authentication) */ |
︙ | ︙ | |||
529 530 531 532 533 534 535 | */ struct ssl_aead_ctx_st { EVP_AEAD_CTX ctx; /* * fixed_nonce contains any bytes of the nonce that are fixed for all * records. */ | | > < > < < < | 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 | */ struct ssl_aead_ctx_st { EVP_AEAD_CTX ctx; /* * fixed_nonce contains any bytes of the nonce that are fixed for all * records. */ unsigned char fixed_nonce[12]; unsigned char fixed_nonce_len; unsigned char variable_nonce_len; unsigned char xor_fixed_nonce; unsigned char tag_len; /* * variable_nonce_in_record is non-zero if the variable nonce * for a record is included as a prefix before the ciphertext. */ char variable_nonce_in_record; }; extern SSL3_ENC_METHOD ssl3_undef_enc_method; extern SSL_CIPHER ssl3_ciphers[]; const char *ssl_version_string(int ver); uint16_t ssl_max_server_version(SSL *s); extern SSL3_ENC_METHOD DTLSv1_enc_data; extern SSL3_ENC_METHOD TLSv1_enc_data; extern SSL3_ENC_METHOD TLSv1_1_enc_data; extern SSL3_ENC_METHOD TLSv1_2_enc_data; void ssl_clear_cipher_ctx(SSL *s); int ssl_clear_bad_session(SSL *s); CERT *ssl_cert_new(void); CERT *ssl_cert_dup(CERT *cert); int ssl_cert_inst(CERT **o); void ssl_cert_free(CERT *c); SESS_CERT *ssl_sess_cert_new(void); void ssl_sess_cert_free(SESS_CERT *sc); int ssl_get_new_session(SSL *s, int session); int ssl_get_prev_session(SSL *s, unsigned char *session, int len, const unsigned char *limit); int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b); DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id); int ssl_cipher_ptr_id_cmp(const SSL_CIPHER * const *ap, const SSL_CIPHER * const *bp); |
︙ | ︙ | |||
598 599 600 601 602 603 604 | void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher); STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s); int ssl_verify_alarm_type(long type); void ssl_load_ciphers(void); const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p); int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p); | < < < < < < < < < < < < < < > | < < | 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 | void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher); STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s); int ssl_verify_alarm_type(long type); void ssl_load_ciphers(void); const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p); int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p); int ssl3_send_server_certificate(SSL *s); int ssl3_send_newsession_ticket(SSL *s); int ssl3_send_cert_status(SSL *s); int ssl3_get_finished(SSL *s, int state_a, int state_b); int ssl3_send_change_cipher_spec(SSL *s, int state_a, int state_b); int ssl3_do_write(SSL *s, int type); int ssl3_send_alert(SSL *s, int level, int desc); int ssl3_get_req_cert_type(SSL *s, unsigned char *p); long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok); int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen); int ssl3_num_ciphers(void); const SSL_CIPHER *ssl3_get_cipher(unsigned int u); const SSL_CIPHER *ssl3_get_cipher_by_id(unsigned int id); const SSL_CIPHER *ssl3_get_cipher_by_value(uint16_t value); uint16_t ssl3_cipher_get_value(const SSL_CIPHER *c); int ssl3_renegotiate(SSL *ssl); int ssl3_renegotiate_check(SSL *ssl); int ssl3_dispatch_alert(SSL *s); int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek); int ssl3_write_bytes(SSL *s, int type, const void *buf, int len); unsigned long ssl3_output_cert_chain(SSL *s, X509 *x); SSL_CIPHER *ssl3_choose_cipher(SSL *ssl, STACK_OF(SSL_CIPHER) *clnt, STACK_OF(SSL_CIPHER) *srvr); int ssl3_setup_buffers(SSL *s); int ssl3_setup_init_buffer(SSL *s); int ssl3_setup_read_buffer(SSL *s); int ssl3_setup_write_buffer(SSL *s); int ssl3_release_read_buffer(SSL *s); int ssl3_release_write_buffer(SSL *s); int ssl3_new(SSL *s); void ssl3_free(SSL *s); int ssl3_accept(SSL *s); int ssl3_connect(SSL *s); int ssl3_read(SSL *s, void *buf, int len); int ssl3_peek(SSL *s, void *buf, int len); int ssl3_write(SSL *s, const void *buf, int len); int ssl3_shutdown(SSL *s); void ssl3_clear(SSL *s); long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg); long ssl3_ctx_ctrl(SSL_CTX *s, int cmd, long larg, void *parg); long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)); long ssl3_ctx_callback_ctrl(SSL_CTX *s, int cmd, void (*fp)(void)); int ssl3_pending(const SSL *s); int ssl3_handshake_msg_hdr_len(SSL *s); unsigned char *ssl3_handshake_msg_start(SSL *s, uint8_t htype); void ssl3_handshake_msg_finish(SSL *s, unsigned int len); int ssl3_handshake_write(SSL *s); void tls1_record_sequence_increment(unsigned char *seq); int ssl3_do_change_cipher_spec(SSL *ssl); int ssl23_read(SSL *s, void *buf, int len); int ssl23_peek(SSL *s, void *buf, int len); int ssl23_write(SSL *s, const void *buf, int len); long ssl23_default_timeout(void); long tls1_default_timeout(void); int dtls1_do_write(SSL *s, int type); int ssl3_read_n(SSL *s, int n, int max, int extend); int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek); int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, unsigned int len); unsigned char *dtls1_set_message_header(SSL *s, unsigned char *p, unsigned char mt, unsigned long len, unsigned long frag_off, unsigned long frag_len); int dtls1_write_app_data_bytes(SSL *s, int type, const void *buf, int len); int dtls1_write_bytes(SSL *s, int type, const void *buf, int len); int dtls1_send_change_cipher_spec(SSL *s, int a, int b); unsigned long dtls1_output_cert_chain(SSL *s, X509 *x); int dtls1_read_failed(SSL *s, int code); int dtls1_buffer_message(SSL *s, int ccs); int dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off, int *found); int dtls1_get_queue_priority(unsigned short seq, int is_ccs); int dtls1_retransmit_buffered_messages(SSL *s); |
︙ | ︙ | |||
709 710 711 712 713 714 715 | int dtls1_check_timeout_num(SSL *s); int dtls1_handle_timeout(SSL *s); const SSL_CIPHER *dtls1_get_cipher(unsigned int u); void dtls1_start_timer(SSL *s); void dtls1_stop_timer(SSL *s); int dtls1_is_timer_expired(SSL *s); void dtls1_double_timeout(SSL *s); | < < < < < < < < < < < | 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 | int dtls1_check_timeout_num(SSL *s); int dtls1_handle_timeout(SSL *s); const SSL_CIPHER *dtls1_get_cipher(unsigned int u); void dtls1_start_timer(SSL *s); void dtls1_stop_timer(SSL *s); int dtls1_is_timer_expired(SSL *s); void dtls1_double_timeout(SSL *s); unsigned int dtls1_min_mtu(void); /* some client-only functions */ int ssl3_client_hello(SSL *s); int ssl3_get_server_hello(SSL *s); int ssl3_get_certificate_request(SSL *s); int ssl3_get_new_session_ticket(SSL *s); int ssl3_get_cert_status(SSL *s); int ssl3_get_server_done(SSL *s); int ssl3_send_client_verify(SSL *s); int ssl3_send_client_certificate(SSL *s); int ssl_do_client_cert_cb(SSL *s, X509 **px509, EVP_PKEY **ppkey); int ssl3_send_client_key_exchange(SSL *s); int ssl3_get_key_exchange(SSL *s); int ssl3_get_server_certificate(SSL *s); int ssl3_check_cert_and_algorithm(SSL *s); int ssl3_check_finished(SSL *s); int ssl3_send_next_proto(SSL *s); int dtls1_send_client_certificate(SSL *s); /* some server-only functions */ int ssl3_get_client_hello(SSL *s); int ssl3_send_server_hello(SSL *s); int ssl3_send_hello_request(SSL *s); int ssl3_send_server_key_exchange(SSL *s); int ssl3_send_certificate_request(SSL *s); int ssl3_send_server_done(SSL *s); int ssl3_get_client_certificate(SSL *s); int ssl3_get_client_key_exchange(SSL *s); int ssl3_get_cert_verify(SSL *s); int ssl3_get_next_proto(SSL *s); int dtls1_send_server_certificate(SSL *s); int ssl23_accept(SSL *s); int ssl23_connect(SSL *s); int ssl23_read_bytes(SSL *s, int n); int ssl23_write_bytes(SSL *s); int tls1_new(SSL *s); void tls1_free(SSL *s); void tls1_clear(SSL *s); long tls1_ctrl(SSL *s, int cmd, long larg, void *parg); long tls1_callback_ctrl(SSL *s, int cmd, void (*fp)(void)); |
︙ | ︙ | |||
784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 | unsigned int len); int dtls1_dispatch_alert(SSL *s); int dtls1_enc(SSL *s, int snd); int ssl_init_wbio_buffer(SSL *s, int push); void ssl_free_wbio_buffer(SSL *s); int tls1_change_cipher_state(SSL *s, int which); int tls1_setup_key_block(SSL *s); int tls1_enc(SSL *s, int snd); int tls1_final_finish_mac(SSL *s, const char *str, int slen, unsigned char *p); int tls1_cert_verify_mac(SSL *s, int md_nid, unsigned char *p); int tls1_mac(SSL *ssl, unsigned char *md, int snd); int tls1_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p, int len); int tls1_export_keying_material(SSL *s, unsigned char *out, size_t olen, const char *label, size_t llen, const unsigned char *p, size_t plen, int use_context); int tls1_alert_code(int code); | > > > > > < | 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 | unsigned int len); int dtls1_dispatch_alert(SSL *s); int dtls1_enc(SSL *s, int snd); int ssl_init_wbio_buffer(SSL *s, int push); void ssl_free_wbio_buffer(SSL *s); int tls1_init_finished_mac(SSL *s); void tls1_finish_mac(SSL *s, const unsigned char *buf, int len); void tls1_free_digest_list(SSL *s); void tls1_cleanup_key_block(SSL *s); int tls1_digest_cached_records(SSL *s); int tls1_change_cipher_state(SSL *s, int which); int tls1_setup_key_block(SSL *s); int tls1_enc(SSL *s, int snd); int tls1_final_finish_mac(SSL *s, const char *str, int slen, unsigned char *p); int tls1_cert_verify_mac(SSL *s, int md_nid, unsigned char *p); int tls1_mac(SSL *ssl, unsigned char *md, int snd); int tls1_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p, int len); int tls1_export_keying_material(SSL *s, unsigned char *out, size_t olen, const char *label, size_t llen, const unsigned char *p, size_t plen, int use_context); int tls1_alert_code(int code); int ssl_ok(SSL *s); int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s); SSL_COMP *ssl3_comp_find(STACK_OF(SSL_COMP) *sk, int n); int tls1_ec_curve_id2nid(uint16_t curve_id); |
︙ | ︙ | |||
818 819 820 821 822 823 824 | unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned char *limit); int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al); int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al); | < < < | 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 | unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned char *limit); int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al); int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al); int ssl_check_clienthello_tlsext_early(SSL *s); int ssl_check_clienthello_tlsext_late(SSL *s); int ssl_check_serverhello_tlsext(SSL *s); #define tlsext_tick_md EVP_sha256 int tls1_process_ticket(SSL *s, const unsigned char *session_id, int len, const unsigned char *limit, SSL_SESSION **ret); int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk, const EVP_MD *md); int tls12_get_sigid(const EVP_PKEY *pk); const EVP_MD *tls12_get_hash(unsigned char hash_alg); void ssl_clear_hash_ctx(EVP_MD_CTX **hash); int ssl_add_serverhello_renegotiate_ext(SSL *s, unsigned char *p, int *len, int maxlen); int ssl_parse_serverhello_renegotiate_ext(SSL *s, const unsigned char *d, int len, int *al); int ssl_add_clienthello_renegotiate_ext(SSL *s, unsigned char *p, int *len, int maxlen); |
︙ | ︙ | |||
861 862 863 864 865 866 867 | int *len, int maxlen); int ssl_parse_serverhello_use_srtp_ext(SSL *s, const unsigned char *d, int len, int *al); /* s3_cbc.c */ void ssl3_cbc_copy_mac(unsigned char *out, const SSL3_RECORD *rec, unsigned md_size, unsigned orig_len); | < < | 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 | int *len, int maxlen); int ssl_parse_serverhello_use_srtp_ext(SSL *s, const unsigned char *d, int len, int *al); /* s3_cbc.c */ void ssl3_cbc_copy_mac(unsigned char *out, const SSL3_RECORD *rec, unsigned md_size, unsigned orig_len); int tls1_cbc_remove_padding(const SSL *s, SSL3_RECORD *rec, unsigned block_size, unsigned mac_size); char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx); int ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, unsigned char *md_out, size_t *md_out_size, const unsigned char header[13], const unsigned char *data, size_t data_plus_mac_size, size_t data_plus_mac_plus_padding_size, const unsigned char *mac_secret, unsigned mac_secret_length, char is_sslv3); #endif |
Changes to jni/libressl/ssl/ssl_rsa.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ssl_rsa.c,v 1.20 2015/02/06 01:37:11 reyk Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
118 119 120 121 122 123 124 | if (x == NULL) { SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE, j); goto end; } ret = SSL_use_certificate(ssl, x); end: | < | | 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | if (x == NULL) { SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE, j); goto end; } ret = SSL_use_certificate(ssl, x); end: X509_free(x); BIO_free(in); return (ret); } int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len) { |
︙ | ︙ | |||
405 406 407 408 409 410 411 | /* clear error queue */ ERR_clear_error(); } } EVP_PKEY_free(pkey); | < | | 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 | /* clear error queue */ ERR_clear_error(); } } EVP_PKEY_free(pkey); X509_free(c->pkeys[i].x509); CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); c->pkeys[i].x509 = x; c->key = &(c->pkeys[i]); c->valid = 0; return (1); } |
︙ | ︙ | |||
452 453 454 455 456 457 458 | if (x == NULL) { SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE, j); goto end; } ret = SSL_CTX_use_certificate(ctx, x); end: | < | | 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 | if (x == NULL) { SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE, j); goto end; } ret = SSL_CTX_use_certificate(ctx, x); end: X509_free(x); BIO_free(in); return (ret); } int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d) { |
︙ | ︙ | |||
702 703 704 705 706 707 708 | ERR_GET_REASON(err) == PEM_R_NO_START_LINE) ERR_clear_error(); else ret = 0; /* some real error */ } end: | < | | 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 | ERR_GET_REASON(err) == PEM_R_NO_START_LINE) ERR_clear_error(); else ret = 0; /* some real error */ } end: X509_free(x); return (ret); } int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file) { BIO *in; |
︙ | ︙ |
Changes to jni/libressl/ssl/ssl_sess.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: ssl_sess.c,v 1.48 2015/09/10 17:57:50 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
296 297 298 299 300 301 302 | if (s->session != NULL) { SSL_SESSION_free(s->session); s->session = NULL; } if (session) { switch (s->version) { | < < | 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 | if (s->session != NULL) { SSL_SESSION_free(s->session); s->session = NULL; } if (session) { switch (s->version) { case TLS1_VERSION: case TLS1_1_VERSION: case TLS1_2_VERSION: case DTLS1_VERSION: ss->ssl_version = s->version; ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; break; default: SSLerr(SSL_F_SSL_GET_NEW_SESSION, SSL_R_UNSUPPORTED_SSL_VERSION); |
︙ | ︙ | |||
691 692 693 694 695 696 697 | i = CRYPTO_add(&ss->references, -1, CRYPTO_LOCK_SSL_SESSION); if (i > 0) return; CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data); | | | < | | | 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 | i = CRYPTO_add(&ss->references, -1, CRYPTO_LOCK_SSL_SESSION); if (i > 0) return; CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data); explicit_bzero(ss->master_key, sizeof ss->master_key); explicit_bzero(ss->session_id, sizeof ss->session_id); if (ss->sess_cert != NULL) ssl_sess_cert_free(ss->sess_cert); X509_free(ss->peer); if (ss->ciphers != NULL) sk_SSL_CIPHER_free(ss->ciphers); free(ss->tlsext_hostname); free(ss->tlsext_tick); ss->tlsext_ecpointformatlist_length = 0; free(ss->tlsext_ecpointformatlist); ss->tlsext_ellipticcurvelist_length = 0; free(ss->tlsext_ellipticcurvelist); explicit_bzero(ss, sizeof(*ss)); free(ss); } int SSL_set_session(SSL *s, SSL_SESSION *session) { int ret = 0; |
︙ | ︙ |
Changes to jni/libressl/ssl/ssl_txt.c.
︙ | ︙ | |||
78 79 80 81 82 83 84 85 86 87 88 89 90 91 | * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR * OTHERWISE. */ #include <stdio.h> #include <openssl/buffer.h> #include "ssl_locl.h" int | > | 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR * OTHERWISE. */ #include <inttypes.h> #include <stdio.h> #include <openssl/buffer.h> #include "ssl_locl.h" int |
︙ | ︙ | |||
159 160 161 162 163 164 165 | if (BIO_puts(bp, "\n TLS session ticket:\n") <= 0) goto err; if (BIO_dump_indent(bp, (char *)x->tlsext_tick, x->tlsext_ticklen, 4) <= 0) goto err; } if (x->time != 0) { | < < < < | < | 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | if (BIO_puts(bp, "\n TLS session ticket:\n") <= 0) goto err; if (BIO_dump_indent(bp, (char *)x->tlsext_tick, x->tlsext_ticklen, 4) <= 0) goto err; } if (x->time != 0) { if (BIO_printf(bp, "\n Start Time: %"PRId64, (int64_t)x->time) <= 0) goto err; } if (x->timeout != 0L) { if (BIO_printf(bp, "\n Timeout : %ld (sec)", x->timeout) <= 0) goto err; } if (BIO_puts(bp, "\n") <= 0) goto err; |
︙ | ︙ |
Changes to jni/libressl/ssl/t1_clnt.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: t1_clnt.c,v 1.17 2015/02/06 08:30:23 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #include "ssl_locl.h" #include <openssl/buffer.h> #include <openssl/evp.h> #include <openssl/objects.h> static const SSL_METHOD *tls1_get_client_method(int ver); const SSL_METHOD TLSv1_client_method_data = { .version = TLS1_VERSION, .ssl_new = tls1_new, .ssl_clear = tls1_clear, .ssl_free = tls1_free, .ssl_accept = ssl_undefined_function, | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | #include "ssl_locl.h" #include <openssl/buffer.h> #include <openssl/evp.h> #include <openssl/objects.h> static const SSL_METHOD *tls1_get_client_method(int ver); const SSL_METHOD TLS_client_method_data = { .version = TLS1_2_VERSION, .ssl_new = tls1_new, .ssl_clear = tls1_clear, .ssl_free = tls1_free, .ssl_accept = ssl_undefined_function, .ssl_connect = ssl23_connect, .ssl_read = ssl23_read, .ssl_peek = ssl23_peek, .ssl_write = ssl23_write, .ssl_shutdown = ssl_undefined_function, .ssl_renegotiate = ssl_undefined_function, .ssl_renegotiate_check = ssl_ok, .ssl_get_message = ssl3_get_message, .ssl_read_bytes = ssl3_read_bytes, .ssl_write_bytes = ssl3_write_bytes, .ssl_dispatch_alert = ssl3_dispatch_alert, .ssl_ctrl = ssl3_ctrl, .ssl_ctx_ctrl = ssl3_ctx_ctrl, .get_cipher_by_char = ssl3_get_cipher_by_char, .put_cipher_by_char = ssl3_put_cipher_by_char, .ssl_pending = ssl_undefined_const_function, .num_ciphers = ssl3_num_ciphers, .get_cipher = ssl3_get_cipher, .get_ssl_method = tls1_get_client_method, .get_timeout = ssl23_default_timeout, .ssl3_enc = &ssl3_undef_enc_method, .ssl_version = ssl_undefined_void_function, .ssl_callback_ctrl = ssl3_callback_ctrl, .ssl_ctx_callback_ctrl = ssl3_ctx_callback_ctrl, }; const SSL_METHOD TLSv1_client_method_data = { .version = TLS1_VERSION, .ssl_new = tls1_new, .ssl_clear = tls1_clear, .ssl_free = tls1_free, .ssl_accept = ssl_undefined_function, |
︙ | ︙ | |||
158 159 160 161 162 163 164 | .get_timeout = tls1_default_timeout, .ssl3_enc = &TLSv1_2_enc_data, .ssl_version = ssl_undefined_void_function, .ssl_callback_ctrl = ssl3_callback_ctrl, .ssl_ctx_callback_ctrl = ssl3_ctx_callback_ctrl, }; | < < < < < < < < < < < < < < < < < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 | .get_timeout = tls1_default_timeout, .ssl3_enc = &TLSv1_2_enc_data, .ssl_version = ssl_undefined_void_function, .ssl_callback_ctrl = ssl3_callback_ctrl, .ssl_ctx_callback_ctrl = ssl3_ctx_callback_ctrl, }; static const SSL_METHOD * tls1_get_client_method(int ver) { if (ver == TLS1_2_VERSION) return (TLSv1_2_client_method()); if (ver == TLS1_1_VERSION) return (TLSv1_1_client_method()); if (ver == TLS1_VERSION) return (TLSv1_client_method()); return (NULL); } const SSL_METHOD * SSLv23_client_method(void) { return (TLS_client_method()); } const SSL_METHOD * TLS_client_method(void) { return (&TLS_client_method_data); } const SSL_METHOD * TLSv1_client_method(void) { return (&TLSv1_client_method_data); } const SSL_METHOD * TLSv1_1_client_method(void) { return (&TLSv1_1_client_method_data); } const SSL_METHOD * TLSv1_2_client_method(void) { return (&TLSv1_2_client_method_data); } |
Changes to jni/libressl/ssl/t1_enc.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: t1_enc.c,v 1.84 2016/03/06 14:52:15 beck Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
138 139 140 141 142 143 144 145 146 147 148 149 150 151 | #include <stdio.h> #include "ssl_locl.h" #include <openssl/evp.h> #include <openssl/hmac.h> #include <openssl/md5.h> /* seed1 through seed5 are virtually concatenated */ static int tls1_P_hash(const EVP_MD *md, const unsigned char *sec, int sec_len, const void *seed1, int seed1_len, const void *seed2, int seed2_len, const void *seed3, int seed3_len, const void *seed4, int seed4_len, const void *seed5, int seed5_len, unsigned char *out, int olen) | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 | #include <stdio.h> #include "ssl_locl.h" #include <openssl/evp.h> #include <openssl/hmac.h> #include <openssl/md5.h> void tls1_cleanup_key_block(SSL *s) { if (s->s3->tmp.key_block != NULL) { explicit_bzero(s->s3->tmp.key_block, s->s3->tmp.key_block_length); free(s->s3->tmp.key_block); s->s3->tmp.key_block = NULL; } s->s3->tmp.key_block_length = 0; } int tls1_init_finished_mac(SSL *s) { BIO_free(s->s3->handshake_buffer); tls1_free_digest_list(s); s->s3->handshake_buffer = BIO_new(BIO_s_mem()); if (s->s3->handshake_buffer == NULL) return (0); (void)BIO_set_close(s->s3->handshake_buffer, BIO_CLOSE); return (1); } void tls1_free_digest_list(SSL *s) { int i; if (s == NULL) return; if (s->s3->handshake_dgst == NULL) return; for (i = 0; i < SSL_MAX_DIGEST; i++) { if (s->s3->handshake_dgst[i]) EVP_MD_CTX_destroy(s->s3->handshake_dgst[i]); } free(s->s3->handshake_dgst); s->s3->handshake_dgst = NULL; } void tls1_finish_mac(SSL *s, const unsigned char *buf, int len) { if (s->s3->handshake_buffer && !(s->s3->flags & TLS1_FLAGS_KEEP_HANDSHAKE)) { BIO_write(s->s3->handshake_buffer, (void *)buf, len); } else { int i; for (i = 0; i < SSL_MAX_DIGEST; i++) { if (s->s3->handshake_dgst[i]!= NULL) EVP_DigestUpdate(s->s3->handshake_dgst[i], buf, len); } } } int tls1_digest_cached_records(SSL *s) { int i; long mask; const EVP_MD *md; long hdatalen; void *hdata; tls1_free_digest_list(s); s->s3->handshake_dgst = calloc(SSL_MAX_DIGEST, sizeof(EVP_MD_CTX *)); if (s->s3->handshake_dgst == NULL) { SSLerr(SSL_F_SSL3_DIGEST_CACHED_RECORDS, ERR_R_MALLOC_FAILURE); return 0; } hdatalen = BIO_get_mem_data(s->s3->handshake_buffer, &hdata); if (hdatalen <= 0) { SSLerr(SSL_F_SSL3_DIGEST_CACHED_RECORDS, SSL_R_BAD_HANDSHAKE_LENGTH); return 0; } /* Loop through bits of the algorithm2 field and create MD contexts. */ for (i = 0; ssl_get_handshake_digest(i, &mask, &md); i++) { if ((mask & ssl_get_algorithm2(s)) && md) { s->s3->handshake_dgst[i] = EVP_MD_CTX_create(); if (s->s3->handshake_dgst[i] == NULL) { SSLerr(SSL_F_SSL3_DIGEST_CACHED_RECORDS, ERR_R_MALLOC_FAILURE); return 0; } if (!EVP_DigestInit_ex(s->s3->handshake_dgst[i], md, NULL)) { EVP_MD_CTX_destroy(s->s3->handshake_dgst[i]); return 0; } if (!EVP_DigestUpdate(s->s3->handshake_dgst[i], hdata, hdatalen)) return 0; } } if (!(s->s3->flags & TLS1_FLAGS_KEEP_HANDSHAKE)) { BIO_free(s->s3->handshake_buffer); s->s3->handshake_buffer = NULL; } return 1; } void tls1_record_sequence_increment(unsigned char *seq) { int i; for (i = SSL3_SEQUENCE_SIZE - 1; i >= 0; i--) { if (++seq[i] != 0) break; } } /* seed1 through seed5 are virtually concatenated */ static int tls1_P_hash(const EVP_MD *md, const unsigned char *sec, int sec_len, const void *seed1, int seed1_len, const void *seed2, int seed2_len, const void *seed3, int seed3_len, const void *seed4, int seed4_len, const void *seed5, int seed5_len, unsigned char *out, int olen) |
︙ | ︙ | |||
222 223 224 225 226 227 228 | } ret = 1; err: EVP_PKEY_free(mac_key); EVP_MD_CTX_cleanup(&ctx); EVP_MD_CTX_cleanup(&ctx_tmp); | | | 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 | } ret = 1; err: EVP_PKEY_free(mac_key); EVP_MD_CTX_cleanup(&ctx); EVP_MD_CTX_cleanup(&ctx_tmp); explicit_bzero(A1, sizeof(A1)); return ret; } /* seed1 through seed5 are virtually concatenated */ static int tls1_PRF(long digest_mask, const void *seed1, int seed1_len, const void *seed2, int seed2_len, const void *seed3, int seed3_len, const void *seed4, |
︙ | ︙ | |||
345 346 347 348 349 350 351 | } memcpy(aead_ctx->fixed_nonce, iv, iv_len); aead_ctx->fixed_nonce_len = iv_len; aead_ctx->variable_nonce_len = 8; /* always the case, currently. */ aead_ctx->variable_nonce_in_record = (s->s3->tmp.new_cipher->algorithm2 & SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_IN_RECORD) != 0; | > > > > > > > > > > > > | | | | | | < > | 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 | } memcpy(aead_ctx->fixed_nonce, iv, iv_len); aead_ctx->fixed_nonce_len = iv_len; aead_ctx->variable_nonce_len = 8; /* always the case, currently. */ aead_ctx->variable_nonce_in_record = (s->s3->tmp.new_cipher->algorithm2 & SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_IN_RECORD) != 0; aead_ctx->xor_fixed_nonce = s->s3->tmp.new_cipher->algorithm_enc == SSL_CHACHA20POLY1305; aead_ctx->tag_len = EVP_AEAD_max_overhead(aead); if (aead_ctx->xor_fixed_nonce) { if (aead_ctx->fixed_nonce_len != EVP_AEAD_nonce_length(aead) || aead_ctx->variable_nonce_len > EVP_AEAD_nonce_length(aead)) { SSLerr(SSL_F_TLS1_CHANGE_CIPHER_STATE_AEAD, ERR_R_INTERNAL_ERROR); return (0); } } else { if (aead_ctx->variable_nonce_len + aead_ctx->fixed_nonce_len != EVP_AEAD_nonce_length(aead)) { SSLerr(SSL_F_TLS1_CHANGE_CIPHER_STATE_AEAD, ERR_R_INTERNAL_ERROR); return (0); } } return (1); } /* * tls1_change_cipher_state_cipher performs the work needed to switch cipher * states when using EVP_CIPHER. The argument is_read is true iff this function |
︙ | ︙ | |||
612 613 614 615 616 617 618 | s->s3->tmp.new_aead = aead; s->s3->tmp.new_sym_enc = cipher; s->s3->tmp.new_hash = mac; s->s3->tmp.new_mac_pkey_type = mac_type; s->s3->tmp.new_mac_secret_size = mac_secret_size; | | | 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 | s->s3->tmp.new_aead = aead; s->s3->tmp.new_sym_enc = cipher; s->s3->tmp.new_hash = mac; s->s3->tmp.new_mac_pkey_type = mac_type; s->s3->tmp.new_mac_secret_size = mac_secret_size; tls1_cleanup_key_block(s); if ((key_block = reallocarray(NULL, mac_secret_size + key_len + iv_len, 2)) == NULL) { SSLerr(SSL_F_TLS1_SETUP_KEY_BLOCK, ERR_R_MALLOC_FAILURE); goto err; } key_block_len = (mac_secret_size + key_len + iv_len) * 2; |
︙ | ︙ | |||
655 656 657 658 659 660 661 | } } ret = 1; err: if (tmp_block) { | | | 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 | } } ret = 1; err: if (tmp_block) { explicit_bzero(tmp_block, key_block_len); free(tmp_block); } return (ret); } /* tls1_enc encrypts/decrypts the record in |s->wrec| / |s->rrec|, respectively. * |
︙ | ︙ | |||
693 694 695 696 697 698 699 | aead = s->aead_read_ctx; rec = &s->s3->rrec; seq = s->s3->read_sequence; } if (aead) { unsigned char ad[13], *in, *out, nonce[16]; | > | < | > > > > > | | > > > > | | | < < > | > > > > > > > > > > > > | | | > | < > | | | > | | | > > > > > > > > > > > > > > > > > > | | | | > | | < < | | > > | | 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 | aead = s->aead_read_ctx; rec = &s->s3->rrec; seq = s->s3->read_sequence; } if (aead) { unsigned char ad[13], *in, *out, nonce[16]; size_t out_len, pad_len = 0; unsigned int nonce_used; if (SSL_IS_DTLS(s)) { dtls1_build_sequence_number(ad, seq, send ? s->d1->w_epoch : s->d1->r_epoch); } else { memcpy(ad, seq, SSL3_SEQUENCE_SIZE); tls1_record_sequence_increment(seq); } ad[8] = rec->type; ad[9] = (unsigned char)(s->version >> 8); ad[10] = (unsigned char)(s->version); if (aead->variable_nonce_len > 8 || aead->variable_nonce_len > sizeof(nonce)) return -1; if (aead->xor_fixed_nonce) { if (aead->fixed_nonce_len > sizeof(nonce) || aead->variable_nonce_len > aead->fixed_nonce_len) return -1; /* Should never happen. */ pad_len = aead->fixed_nonce_len - aead->variable_nonce_len; } else { if (aead->fixed_nonce_len + aead->variable_nonce_len > sizeof(nonce)) return -1; /* Should never happen. */ } if (send) { size_t len = rec->length; size_t eivlen = 0; in = rec->input; out = rec->data; if (aead->xor_fixed_nonce) { /* * The sequence number is left zero * padded, then xored with the fixed * nonce. */ memset(nonce, 0, pad_len); memcpy(nonce + pad_len, ad, aead->variable_nonce_len); for (i = 0; i < aead->fixed_nonce_len; i++) nonce[i] ^= aead->fixed_nonce[i]; nonce_used = aead->fixed_nonce_len; } else { /* * When sending we use the sequence number as * the variable part of the nonce. */ memcpy(nonce, aead->fixed_nonce, aead->fixed_nonce_len); nonce_used = aead->fixed_nonce_len; memcpy(nonce + nonce_used, ad, aead->variable_nonce_len); nonce_used += aead->variable_nonce_len; } /* * In do_ssl3_write, rec->input is moved forward by * variable_nonce_len in order to leave space for the * variable nonce. Thus we can copy the sequence number * bytes into place without overwriting any of the * plaintext. */ if (aead->variable_nonce_in_record) { memcpy(out, ad, aead->variable_nonce_len); len -= aead->variable_nonce_len; eivlen = aead->variable_nonce_len; } ad[11] = len >> 8; ad[12] = len & 0xff; if (!EVP_AEAD_CTX_seal(&aead->ctx, out + eivlen, &out_len, len + aead->tag_len, nonce, nonce_used, in + eivlen, len, ad, sizeof(ad))) return -1; if (aead->variable_nonce_in_record) out_len += aead->variable_nonce_len; } else { /* receive */ size_t len = rec->length; if (rec->data != rec->input) return -1; /* internal error - should never happen. */ out = in = rec->input; if (len < aead->variable_nonce_len) return 0; if (aead->xor_fixed_nonce) { /* * The sequence number is left zero * padded, then xored with the fixed * nonce. */ memset(nonce, 0, pad_len); memcpy(nonce + pad_len, ad, aead->variable_nonce_len); for (i = 0; i < aead->fixed_nonce_len; i++) nonce[i] ^= aead->fixed_nonce[i]; nonce_used = aead->fixed_nonce_len; } else { memcpy(nonce, aead->fixed_nonce, aead->fixed_nonce_len); nonce_used = aead->fixed_nonce_len; memcpy(nonce + nonce_used, aead->variable_nonce_in_record ? in : ad, aead->variable_nonce_len); nonce_used += aead->variable_nonce_len; } if (aead->variable_nonce_in_record) { in += aead->variable_nonce_len; len -= aead->variable_nonce_len; out += aead->variable_nonce_len; } if (len < aead->tag_len) return 0; len -= aead->tag_len; ad[11] = len >> 8; ad[12] = len & 0xff; if (!EVP_AEAD_CTX_open(&aead->ctx, out, &out_len, len, nonce, nonce_used, in, len + aead->tag_len, ad, sizeof(ad))) return -1; rec->data = rec->input = out; } rec->length = out_len; return 1; } if (send) { if (EVP_MD_CTX_md(s->write_hash)) { int n = EVP_MD_CTX_size(s->write_hash); OPENSSL_assert(n >= 0); } ds = s->enc_write_ctx; if (s->enc_write_ctx == NULL) enc = NULL; else { int ivlen = 0; enc = EVP_CIPHER_CTX_cipher(s->enc_write_ctx); if (SSL_USE_EXPLICIT_IV(s) && EVP_CIPHER_mode(enc) == EVP_CIPH_CBC_MODE) ivlen = EVP_CIPHER_iv_length(enc); if (ivlen > 1) { if (rec->data != rec->input) { #ifdef DEBUG /* we can't write into the input stream: * Can this ever happen?? (steve) */ fprintf(stderr, "%s:%d: rec->data != rec->input\n", __FILE__, __LINE__); #endif } else arc4random_buf(rec->input, ivlen); } } } else { if (EVP_MD_CTX_md(s->read_hash)) { int n = EVP_MD_CTX_size(s->read_hash); OPENSSL_assert(n >= 0); |
︙ | ︙ | |||
851 852 853 854 855 856 857 | unsigned char buf[13]; if (SSL_IS_DTLS(s)) { dtls1_build_sequence_number(buf, seq, send ? s->d1->w_epoch : s->d1->r_epoch); } else { memcpy(buf, seq, SSL3_SEQUENCE_SIZE); | | | 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 | unsigned char buf[13]; if (SSL_IS_DTLS(s)) { dtls1_build_sequence_number(buf, seq, send ? s->d1->w_epoch : s->d1->r_epoch); } else { memcpy(buf, seq, SSL3_SEQUENCE_SIZE); tls1_record_sequence_increment(seq); } buf[8] = rec->type; buf[9] = (unsigned char)(s->version >> 8); buf[10] = (unsigned char)(s->version); buf[11] = rec->length >> 8; buf[12] = rec->length & 0xff; |
︙ | ︙ | |||
911 912 913 914 915 916 917 | tls1_cert_verify_mac(SSL *s, int md_nid, unsigned char *out) { EVP_MD_CTX ctx, *d = NULL; unsigned int ret; int i; if (s->s3->handshake_buffer) | | | 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 | tls1_cert_verify_mac(SSL *s, int md_nid, unsigned char *out) { EVP_MD_CTX ctx, *d = NULL; unsigned int ret; int i; if (s->s3->handshake_buffer) if (!tls1_digest_cached_records(s)) return 0; for (i = 0; i < SSL_MAX_DIGEST; i++) { if (s->s3->handshake_dgst[i] && EVP_MD_CTX_type(s->s3->handshake_dgst[i]) == md_nid) { d = s->s3->handshake_dgst[i]; break; |
︙ | ︙ | |||
950 951 952 953 954 955 956 | long mask; int err = 0; const EVP_MD *md; q = buf; if (s->s3->handshake_buffer) | | | 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 | long mask; int err = 0; const EVP_MD *md; q = buf; if (s->s3->handshake_buffer) if (!tls1_digest_cached_records(s)) return 0; EVP_MD_CTX_init(&ctx); for (idx = 0; ssl_get_handshake_digest(idx, &mask, &md); idx++) { if (ssl_get_algorithm2(s) & mask) { int hashsize = EVP_MD_size(md); |
︙ | ︙ | |||
1064 1065 1066 1067 1068 1069 1070 | OPENSSL_assert(t > 0); } if (!stream_mac) EVP_MD_CTX_cleanup(&hmac); if (!SSL_IS_DTLS(ssl)) | | | 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 | OPENSSL_assert(t > 0); } if (!stream_mac) EVP_MD_CTX_cleanup(&hmac); if (!SSL_IS_DTLS(ssl)) tls1_record_sequence_increment(seq); return (md_size); } int tls1_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p, int len) |
︙ | ︙ |
Changes to jni/libressl/ssl/t1_lib.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: t1_lib.c,v 1.87 2016/05/30 13:42:54 beck Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
655 656 657 658 659 660 661 | (alg_a & SSL_aECDSA))) { using_ecc = 1; break; } } } | < < < < < | 655 656 657 658 659 660 661 662 663 664 665 666 667 668 | (alg_a & SSL_aECDSA))) { using_ecc = 1; break; } } } ret += 2; if (ret >= limit) return NULL; /* this really never occurs, but ... */ if (s->tlsext_hostname != NULL) { /* Add TLS extension servername to the Client Hello message */ |
︙ | ︙ | |||
775 776 777 778 779 780 781 | } s2n(TLSEXT_TYPE_elliptic_curves, ret); s2n((curveslen * 2) + 2, ret); /* NB: draft-ietf-tls-ecc-12.txt uses a one-byte prefix for * elliptic_curve_list, but the examples use two bytes. | | | 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 | } s2n(TLSEXT_TYPE_elliptic_curves, ret); s2n((curveslen * 2) + 2, ret); /* NB: draft-ietf-tls-ecc-12.txt uses a one-byte prefix for * elliptic_curve_list, but the examples use two bytes. * https://www1.ietf.org/mail-archive/web/tls/current/msg00538.html * resolves this to two bytes. */ s2n(curveslen * 2, ret); for (i = 0; i < curveslen; i++) s2n(curves[i], ret); } |
︙ | ︙ | |||
969 970 971 972 973 974 975 | alg_a = s->s3->tmp.new_cipher->algorithm_auth; alg_k = s->s3->tmp.new_cipher->algorithm_mkey; using_ecc = (alg_k & (SSL_kECDHE|SSL_kECDHr|SSL_kECDHe) || alg_a & SSL_aECDSA) && s->session->tlsext_ecpointformatlist != NULL; | < < < < | 964 965 966 967 968 969 970 971 972 973 974 975 976 977 | alg_a = s->s3->tmp.new_cipher->algorithm_auth; alg_k = s->s3->tmp.new_cipher->algorithm_mkey; using_ecc = (alg_k & (SSL_kECDHE|SSL_kECDHr|SSL_kECDHe) || alg_a & SSL_aECDSA) && s->session->tlsext_ecpointformatlist != NULL; ret += 2; if (ret >= limit) return NULL; /* this really never occurs, but ... */ if (!s->hit && s->servername_done == 1 && s->session->tlsext_hostname != NULL) { if ((size_t)(limit - ret) < 4) |
︙ | ︙ | |||
1443 1444 1445 1446 1447 1448 1449 | size--; if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp) { const unsigned char *sdata; int dsize; /* Read in responder_id_list */ n2s(data, dsize); size -= 2; | | > > > > > > > > > > > > > > > > > > | 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 | size--; if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp) { const unsigned char *sdata; int dsize; /* Read in responder_id_list */ n2s(data, dsize); size -= 2; if (dsize > size) { *al = SSL_AD_DECODE_ERROR; return 0; } /* * We remove any OCSP_RESPIDs from a * previous handshake to prevent * unbounded memory growth. */ sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids, OCSP_RESPID_free); s->tlsext_ocsp_ids = NULL; if (dsize > 0) { s->tlsext_ocsp_ids = sk_OCSP_RESPID_new_null(); if (s->tlsext_ocsp_ids == NULL) { *al = SSL_AD_INTERNAL_ERROR; return 0; } } while (dsize > 0) { OCSP_RESPID *id; int idsize; if (dsize < 4) { *al = SSL_AD_DECODE_ERROR; return 0; } |
︙ | ︙ | |||
1474 1475 1476 1477 1478 1479 1480 | return 0; } if (data != sdata) { OCSP_RESPID_free(id); *al = SSL_AD_DECODE_ERROR; return 0; } | < < < < < < < | 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 | return 0; } if (data != sdata) { OCSP_RESPID_free(id); *al = SSL_AD_DECODE_ERROR; return 0; } if (!sk_OCSP_RESPID_push( s->tlsext_ocsp_ids, id)) { OCSP_RESPID_free(id); *al = SSL_AD_INTERNAL_ERROR; return 0; } } |
︙ | ︙ | |||
1825 1826 1827 1828 1829 1830 1831 | SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED); return 0; } return 1; } | < < < < < < < < < < < < | 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 | SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED); return 0; } return 1; } int ssl_check_clienthello_tlsext_early(SSL *s) { int ret = SSL_TLSEXT_ERR_NOACK; int al = SSL_AD_UNRECOGNIZED_NAME; /* The handling of the ECPointFormats extension is done elsewhere, namely in |
︙ | ︙ | |||
2056 2057 2058 2059 2060 2061 2062 | s->tlsext_ticket_expected = 0; /* If tickets disabled behave as if no ticket present * to permit stateful resumption. */ if (SSL_get_options(s) & SSL_OP_NO_TICKET) return 0; | | | 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 | s->tlsext_ticket_expected = 0; /* If tickets disabled behave as if no ticket present * to permit stateful resumption. */ if (SSL_get_options(s) & SSL_OP_NO_TICKET) return 0; if (!limit) return 0; if (limit < session) return -1; CBS_init(&session_id, session, limit - session); |
︙ | ︙ | |||
2216 2217 2218 2219 2220 2221 2222 | eticklen -= 16 + EVP_CIPHER_CTX_iv_length(&ctx); sdec = malloc(eticklen); if (!sdec) { EVP_CIPHER_CTX_cleanup(&ctx); return -1; } EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen); | | | 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 | eticklen -= 16 + EVP_CIPHER_CTX_iv_length(&ctx); sdec = malloc(eticklen); if (!sdec) { EVP_CIPHER_CTX_cleanup(&ctx); return -1; } EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen); if (EVP_DecryptFinal_ex(&ctx, sdec + slen, &mlen) <= 0) { free(sdec); EVP_CIPHER_CTX_cleanup(&ctx); return 2; } slen += mlen; EVP_CIPHER_CTX_cleanup(&ctx); p = sdec; |
︙ | ︙ |
Changes to jni/libressl/ssl/t1_meth.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: t1_meth.c,v 1.16 2015/02/06 08:30:23 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include <stdio.h> #include <openssl/objects.h> #include "ssl_locl.h" static const SSL_METHOD *tls1_get_method(int ver); const SSL_METHOD TLSv1_method_data = { .version = TLS1_VERSION, .ssl_new = tls1_new, .ssl_clear = tls1_clear, .ssl_free = tls1_free, .ssl_accept = ssl3_accept, | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | #include <stdio.h> #include <openssl/objects.h> #include "ssl_locl.h" static const SSL_METHOD *tls1_get_method(int ver); const SSL_METHOD TLS_method_data = { .version = TLS1_2_VERSION, .ssl_new = tls1_new, .ssl_clear = tls1_clear, .ssl_free = tls1_free, .ssl_accept = ssl23_accept, .ssl_connect = ssl23_connect, .ssl_read = ssl23_read, .ssl_peek = ssl23_peek, .ssl_write = ssl23_write, .ssl_shutdown = ssl_undefined_function, .ssl_renegotiate = ssl_undefined_function, .ssl_renegotiate_check = ssl_ok, .ssl_get_message = ssl3_get_message, .ssl_read_bytes = ssl3_read_bytes, .ssl_write_bytes = ssl3_write_bytes, .ssl_dispatch_alert = ssl3_dispatch_alert, .ssl_ctrl = ssl3_ctrl, .ssl_ctx_ctrl = ssl3_ctx_ctrl, .get_cipher_by_char = ssl3_get_cipher_by_char, .put_cipher_by_char = ssl3_put_cipher_by_char, .ssl_pending = ssl_undefined_const_function, .num_ciphers = ssl3_num_ciphers, .get_cipher = ssl3_get_cipher, .get_ssl_method = tls1_get_method, .get_timeout = ssl23_default_timeout, .ssl3_enc = &ssl3_undef_enc_method, .ssl_version = ssl_undefined_void_function, .ssl_callback_ctrl = ssl3_callback_ctrl, .ssl_ctx_callback_ctrl = ssl3_ctx_callback_ctrl, }; const SSL_METHOD TLSv1_method_data = { .version = TLS1_VERSION, .ssl_new = tls1_new, .ssl_clear = tls1_clear, .ssl_free = tls1_free, .ssl_accept = ssl3_accept, |
︙ | ︙ | |||
156 157 158 159 160 161 162 | .get_timeout = tls1_default_timeout, .ssl3_enc = &TLSv1_2_enc_data, .ssl_version = ssl_undefined_void_function, .ssl_callback_ctrl = ssl3_callback_ctrl, .ssl_ctx_callback_ctrl = ssl3_ctx_callback_ctrl, }; | < < < < < < < < < < < < < < < < < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 | .get_timeout = tls1_default_timeout, .ssl3_enc = &TLSv1_2_enc_data, .ssl_version = ssl_undefined_void_function, .ssl_callback_ctrl = ssl3_callback_ctrl, .ssl_ctx_callback_ctrl = ssl3_ctx_callback_ctrl, }; static const SSL_METHOD * tls1_get_method(int ver) { if (ver == TLS1_2_VERSION) return (TLSv1_2_method()); if (ver == TLS1_1_VERSION) return (TLSv1_1_method()); if (ver == TLS1_VERSION) return (TLSv1_method()); return (NULL); } const SSL_METHOD * SSLv23_method(void) { return (TLS_method()); } const SSL_METHOD * TLS_method(void) { return &TLS_method_data; } const SSL_METHOD * TLSv1_method(void) { return (&TLSv1_method_data); } const SSL_METHOD * TLSv1_1_method(void) { return (&TLSv1_1_method_data); } const SSL_METHOD * TLSv1_2_method(void) { return (&TLSv1_2_method_data); } |
Changes to jni/libressl/ssl/t1_srvr.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: t1_srvr.c,v 1.18 2015/02/06 08:30:23 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * |
︙ | ︙ | |||
62 63 64 65 66 67 68 69 70 71 72 73 74 75 | #include <openssl/buffer.h> #include <openssl/evp.h> #include <openssl/objects.h> #include <openssl/x509.h> static const SSL_METHOD *tls1_get_server_method(int ver); const SSL_METHOD TLSv1_server_method_data = { .version = TLS1_VERSION, .ssl_new = tls1_new, .ssl_clear = tls1_clear, .ssl_free = tls1_free, .ssl_accept = ssl3_accept, | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | #include <openssl/buffer.h> #include <openssl/evp.h> #include <openssl/objects.h> #include <openssl/x509.h> static const SSL_METHOD *tls1_get_server_method(int ver); const SSL_METHOD TLS_server_method_data = { .version = TLS1_2_VERSION, .ssl_new = tls1_new, .ssl_clear = tls1_clear, .ssl_free = tls1_free, .ssl_accept = ssl23_accept, .ssl_connect = ssl_undefined_function, .ssl_read = ssl23_read, .ssl_peek = ssl23_peek, .ssl_write = ssl23_write, .ssl_shutdown = ssl_undefined_function, .ssl_renegotiate = ssl_undefined_function, .ssl_renegotiate_check = ssl_ok, .ssl_get_message = ssl3_get_message, .ssl_read_bytes = ssl3_read_bytes, .ssl_write_bytes = ssl3_write_bytes, .ssl_dispatch_alert = ssl3_dispatch_alert, .ssl_ctrl = ssl3_ctrl, .ssl_ctx_ctrl = ssl3_ctx_ctrl, .get_cipher_by_char = ssl3_get_cipher_by_char, .put_cipher_by_char = ssl3_put_cipher_by_char, .ssl_pending = ssl_undefined_const_function, .num_ciphers = ssl3_num_ciphers, .get_cipher = ssl3_get_cipher, .get_ssl_method = tls1_get_server_method, .get_timeout = ssl23_default_timeout, .ssl3_enc = &ssl3_undef_enc_method, .ssl_version = ssl_undefined_void_function, .ssl_callback_ctrl = ssl3_callback_ctrl, .ssl_ctx_callback_ctrl = ssl3_ctx_callback_ctrl, }; const SSL_METHOD TLSv1_server_method_data = { .version = TLS1_VERSION, .ssl_new = tls1_new, .ssl_clear = tls1_clear, .ssl_free = tls1_free, .ssl_accept = ssl3_accept, |
︙ | ︙ | |||
159 160 161 162 163 164 165 | .get_timeout = tls1_default_timeout, .ssl3_enc = &TLSv1_2_enc_data, .ssl_version = ssl_undefined_void_function, .ssl_callback_ctrl = ssl3_callback_ctrl, .ssl_ctx_callback_ctrl = ssl3_ctx_callback_ctrl, }; | < < < < < < < < < < < < < < < < < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 | .get_timeout = tls1_default_timeout, .ssl3_enc = &TLSv1_2_enc_data, .ssl_version = ssl_undefined_void_function, .ssl_callback_ctrl = ssl3_callback_ctrl, .ssl_ctx_callback_ctrl = ssl3_ctx_callback_ctrl, }; static const SSL_METHOD * tls1_get_server_method(int ver) { if (ver == TLS1_2_VERSION) return (TLSv1_2_server_method()); if (ver == TLS1_1_VERSION) return (TLSv1_1_server_method()); if (ver == TLS1_VERSION) return (TLSv1_server_method()); return (NULL); } const SSL_METHOD * SSLv23_server_method(void) { return (TLS_server_method()); } const SSL_METHOD * TLS_server_method(void) { return (&TLS_server_method_data); } const SSL_METHOD * TLSv1_server_method(void) { return (&TLSv1_server_method_data); } const SSL_METHOD * TLSv1_1_server_method(void) { return (&TLSv1_1_server_method_data); } const SSL_METHOD * TLSv1_2_server_method(void) { return (&TLSv1_2_server_method_data); } |
Added jni/libressl/tap-driver.sh.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 | #! /bin/sh # Copyright (C) 2011-2014 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 <http://www.gnu.org/licenses/>. # 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. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. scriptversion=2013-12-23.17; # UTC # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u me=tap-driver.sh fatal () { echo "$me: fatal: $*" >&2 exit 1 } usage_error () { echo "$me: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <<END Usage: tap-driver.sh --test-name=NAME --log-file=PATH --trs-file=PATH [--expect-failure={yes|no}] [--color-tests={yes|no}] [--enable-hard-errors={yes|no}] [--ignore-exit] [--diagnostic-string=STRING] [--merge|--no-merge] [--comments|--no-comments] [--] TEST-COMMAND The '--test-name', '-log-file' and '--trs-file' options are mandatory. END } # TODO: better error handling in option parsing (in particular, ensure # TODO: $log_file, $trs_file and $test_name are defined). test_name= # Used for reporting. log_file= # Where to save the result and output of the test script. trs_file= # Where to save the metadata of the test run. expect_failure=0 color_tests=0 merge=0 ignore_exit=0 comments=0 diag_string='#' while test $# -gt 0; do case $1 in --help) print_usage; exit $?;; --version) echo "$me $scriptversion"; exit $?;; --test-name) test_name=$2; shift;; --log-file) log_file=$2; shift;; --trs-file) trs_file=$2; shift;; --color-tests) color_tests=$2; shift;; --expect-failure) expect_failure=$2; shift;; --enable-hard-errors) shift;; # No-op. --merge) merge=1;; --no-merge) merge=0;; --ignore-exit) ignore_exit=1;; --comments) comments=1;; --no-comments) comments=0;; --diagnostic-string) diag_string=$2; shift;; --) shift; break;; -*) usage_error "invalid option: '$1'";; esac shift done test $# -gt 0 || usage_error "missing test command" case $expect_failure in yes) expect_failure=1;; *) expect_failure=0;; esac if test $color_tests = yes; then init_colors=' color_map["red"]="[0;31m" # Red. color_map["grn"]="[0;32m" # Green. color_map["lgn"]="[1;32m" # Light green. color_map["blu"]="[1;34m" # Blue. color_map["mgn"]="[0;35m" # Magenta. color_map["std"]="[m" # No color. color_for_result["ERROR"] = "mgn" color_for_result["PASS"] = "grn" color_for_result["XPASS"] = "red" color_for_result["FAIL"] = "red" color_for_result["XFAIL"] = "lgn" color_for_result["SKIP"] = "blu"' else init_colors='' fi # :; is there to work around a bug in bash 3.2 (and earlier) which # does not always set '$?' properly on redirection failure. # See the Autoconf manual for more details. :;{ ( # Ignore common signals (in this subshell only!), to avoid potential # problems with Korn shells. Some Korn shells are known to propagate # to themselves signals that have killed a child process they were # waiting for; this is done at least for SIGINT (and usually only for # it, in truth). Without the `trap' below, such a behaviour could # cause a premature exit in the current subshell, e.g., in case the # test command it runs gets terminated by a SIGINT. Thus, the awk # script we are piping into would never seen the exit status it # expects on its last input line (which is displayed below by the # last `echo $?' statement), and would thus die reporting an internal # error. # For more information, see the Autoconf manual and the threads: # <http://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html> # <http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-February/004121.html> trap : 1 3 2 13 15 if test $merge -gt 0; then exec 2>&1 else exec 2>&3 fi "$@" echo $? ) | LC_ALL=C ${AM_TAP_AWK-awk} \ -v me="$me" \ -v test_script_name="$test_name" \ -v log_file="$log_file" \ -v trs_file="$trs_file" \ -v expect_failure="$expect_failure" \ -v merge="$merge" \ -v ignore_exit="$ignore_exit" \ -v comments="$comments" \ -v diag_string="$diag_string" \ ' # TODO: the usages of "cat >&3" below could be optimized when using # GNU awk, and/on on systems that supports /dev/fd/. # Implementation note: in what follows, `result_obj` will be an # associative array that (partly) simulates a TAP result object # from the `TAP::Parser` perl module. ## ----------- ## ## FUNCTIONS ## ## ----------- ## function fatal(msg) { print me ": " msg | "cat >&2" exit 1 } function abort(where) { fatal("internal error " where) } # Convert a boolean to a "yes"/"no" string. function yn(bool) { return bool ? "yes" : "no"; } function add_test_result(result) { if (!test_results_index) test_results_index = 0 test_results_list[test_results_index] = result test_results_index += 1 test_results_seen[result] = 1; } # Whether the test script should be re-run by "make recheck". function must_recheck() { for (k in test_results_seen) if (k != "XFAIL" && k != "PASS" && k != "SKIP") return 1 return 0 } # Whether the content of the log file associated to this test should # be copied into the "global" test-suite.log. function copy_in_global_log() { for (k in test_results_seen) if (k != "PASS") return 1 return 0 } function get_global_test_result() { if ("ERROR" in test_results_seen) return "ERROR" if ("FAIL" in test_results_seen || "XPASS" in test_results_seen) return "FAIL" all_skipped = 1 for (k in test_results_seen) if (k != "SKIP") all_skipped = 0 if (all_skipped) return "SKIP" return "PASS"; } function stringify_result_obj(result_obj) { if (result_obj["is_unplanned"] || result_obj["number"] != testno) return "ERROR" if (plan_seen == LATE_PLAN) return "ERROR" if (result_obj["directive"] == "TODO") return result_obj["is_ok"] ? "XPASS" : "XFAIL" if (result_obj["directive"] == "SKIP") return result_obj["is_ok"] ? "SKIP" : COOKED_FAIL; if (length(result_obj["directive"])) abort("in function stringify_result_obj()") return result_obj["is_ok"] ? COOKED_PASS : COOKED_FAIL } function decorate_result(result) { color_name = color_for_result[result] if (color_name) return color_map[color_name] "" result "" color_map["std"] # If we are not using colorized output, or if we do not know how # to colorize the given result, we should return it unchanged. return result } function report(result, details) { if (result ~ /^(X?(PASS|FAIL)|SKIP|ERROR)/) { msg = ": " test_script_name add_test_result(result) } else if (result == "#") { msg = " " test_script_name ":" } else { abort("in function report()") } if (length(details)) msg = msg " " details # Output on console might be colorized. print decorate_result(result) msg # Log the result in the log file too, to help debugging (this is # especially true when said result is a TAP error or "Bail out!"). print result msg | "cat >&3"; } function testsuite_error(error_message) { report("ERROR", "- " error_message) } function handle_tap_result() { details = result_obj["number"]; if (length(result_obj["description"])) details = details " " result_obj["description"] if (plan_seen == LATE_PLAN) { details = details " # AFTER LATE PLAN"; } else if (result_obj["is_unplanned"]) { details = details " # UNPLANNED"; } else if (result_obj["number"] != testno) { details = sprintf("%s # OUT-OF-ORDER (expecting %d)", details, testno); } else if (result_obj["directive"]) { details = details " # " result_obj["directive"]; if (length(result_obj["explanation"])) details = details " " result_obj["explanation"] } report(stringify_result_obj(result_obj), details) } # `skip_reason` should be empty whenever planned > 0. function handle_tap_plan(planned, skip_reason) { planned += 0 # Avoid getting confused if, say, `planned` is "00" if (length(skip_reason) && planned > 0) abort("in function handle_tap_plan()") if (plan_seen) { # Error, only one plan per stream is acceptable. testsuite_error("multiple test plans") return; } planned_tests = planned # The TAP plan can come before or after *all* the TAP results; we speak # respectively of an "early" or a "late" plan. If we see the plan line # after at least one TAP result has been seen, assume we have a late # plan; in this case, any further test result seen after the plan will # be flagged as an error. plan_seen = (testno >= 1 ? LATE_PLAN : EARLY_PLAN) # If testno > 0, we have an error ("too many tests run") that will be # automatically dealt with later, so do not worry about it here. If # $plan_seen is true, we have an error due to a repeated plan, and that # has already been dealt with above. Otherwise, we have a valid "plan # with SKIP" specification, and should report it as a particular kind # of SKIP result. if (planned == 0 && testno == 0) { if (length(skip_reason)) skip_reason = "- " skip_reason; report("SKIP", skip_reason); } } function extract_tap_comment(line) { if (index(line, diag_string) == 1) { # Strip leading `diag_string` from `line`. line = substr(line, length(diag_string) + 1) # And strip any leading and trailing whitespace left. sub("^[ \t]*", "", line) sub("[ \t]*$", "", line) # Return what is left (if any). return line; } return ""; } # When this function is called, we know that line is a TAP result line, # so that it matches the (perl) RE "^(not )?ok\b". function setup_result_obj(line) { # Get the result, and remove it from the line. result_obj["is_ok"] = (substr(line, 1, 2) == "ok" ? 1 : 0) sub("^(not )?ok[ \t]*", "", line) # If the result has an explicit number, get it and strip it; otherwise, # automatically assing the next progresive number to it. if (line ~ /^[0-9]+$/ || line ~ /^[0-9]+[^a-zA-Z0-9_]/) { match(line, "^[0-9]+") # The final `+ 0` is to normalize numbers with leading zeros. result_obj["number"] = substr(line, 1, RLENGTH) + 0 line = substr(line, RLENGTH + 1) } else { result_obj["number"] = testno } if (plan_seen == LATE_PLAN) # No further test results are acceptable after a "late" TAP plan # has been seen. result_obj["is_unplanned"] = 1 else if (plan_seen && testno > planned_tests) result_obj["is_unplanned"] = 1 else result_obj["is_unplanned"] = 0 # Strip trailing and leading whitespace. sub("^[ \t]*", "", line) sub("[ \t]*$", "", line) # This will have to be corrected if we have a "TODO"/"SKIP" directive. result_obj["description"] = line result_obj["directive"] = "" result_obj["explanation"] = "" if (index(line, "#") == 0) return # No possible directive, nothing more to do. # Directives are case-insensitive. rx = "[ \t]*#[ \t]*([tT][oO][dD][oO]|[sS][kK][iI][pP])[ \t]*" # See whether we have the directive, and if yes, where. pos = match(line, rx "$") if (!pos) pos = match(line, rx "[^a-zA-Z0-9_]") # If there was no TAP directive, we have nothing more to do. if (!pos) return # Let`s now see if the TAP directive has been escaped. For example: # escaped: ok \# SKIP # not escaped: ok \\# SKIP # escaped: ok \\\\\# SKIP # not escaped: ok \ # SKIP if (substr(line, pos, 1) == "#") { bslash_count = 0 for (i = pos; i > 1 && substr(line, i - 1, 1) == "\\"; i--) bslash_count += 1 if (bslash_count % 2) return # Directive was escaped. } # Strip the directive and its explanation (if any) from the test # description. result_obj["description"] = substr(line, 1, pos - 1) # Now remove the test description from the line, that has been dealt # with already. line = substr(line, pos) # Strip the directive, and save its value (normalized to upper case). sub("^[ \t]*#[ \t]*", "", line) result_obj["directive"] = toupper(substr(line, 1, 4)) line = substr(line, 5) # Now get the explanation for the directive (if any), with leading # and trailing whitespace removed. sub("^[ \t]*", "", line) sub("[ \t]*$", "", line) result_obj["explanation"] = line } function get_test_exit_message(status) { if (status == 0) return "" if (status !~ /^[1-9][0-9]*$/) abort("getting exit status") if (status < 127) exit_details = "" else if (status == 127) exit_details = " (command not found?)" else if (status >= 128 && status <= 255) exit_details = sprintf(" (terminated by signal %d?)", status - 128) else if (status > 256 && status <= 384) # We used to report an "abnormal termination" here, but some Korn # shells, when a child process die due to signal number n, can leave # in $? an exit status of 256+n instead of the more standard 128+n. # Apparently, both behaviours are allowed by POSIX (2008), so be # prepared to handle them both. See also Austing Group report ID # 0000051 <http://www.austingroupbugs.net/view.php?id=51> exit_details = sprintf(" (terminated by signal %d?)", status - 256) else # Never seen in practice. exit_details = " (abnormal termination)" return sprintf("exited with status %d%s", status, exit_details) } function write_test_results() { print ":global-test-result: " get_global_test_result() > trs_file print ":recheck: " yn(must_recheck()) > trs_file print ":copy-in-global-log: " yn(copy_in_global_log()) > trs_file for (i = 0; i < test_results_index; i += 1) print ":test-result: " test_results_list[i] > trs_file close(trs_file); } BEGIN { ## ------- ## ## SETUP ## ## ------- ## '"$init_colors"' # Properly initialized once the TAP plan is seen. planned_tests = 0 COOKED_PASS = expect_failure ? "XPASS": "PASS"; COOKED_FAIL = expect_failure ? "XFAIL": "FAIL"; # Enumeration-like constants to remember which kind of plan (if any) # has been seen. It is important that NO_PLAN evaluates "false" as # a boolean. NO_PLAN = 0 EARLY_PLAN = 1 LATE_PLAN = 2 testno = 0 # Number of test results seen so far. bailed_out = 0 # Whether a "Bail out!" directive has been seen. # Whether the TAP plan has been seen or not, and if yes, which kind # it is ("early" is seen before any test result, "late" otherwise). plan_seen = NO_PLAN ## --------- ## ## PARSING ## ## --------- ## is_first_read = 1 while (1) { # Involutions required so that we are able to read the exit status # from the last input line. st = getline if (st < 0) # I/O error. fatal("I/O error while reading from input stream") else if (st == 0) # End-of-input { if (is_first_read) abort("in input loop: only one input line") break } if (is_first_read) { is_first_read = 0 nextline = $0 continue } else { curline = nextline nextline = $0 $0 = curline } # Copy any input line verbatim into the log file. print | "cat >&3" # Parsing of TAP input should stop after a "Bail out!" directive. if (bailed_out) continue # TAP test result. if ($0 ~ /^(not )?ok$/ || $0 ~ /^(not )?ok[^a-zA-Z0-9_]/) { testno += 1 setup_result_obj($0) handle_tap_result() } # TAP plan (normal or "SKIP" without explanation). else if ($0 ~ /^1\.\.[0-9]+[ \t]*$/) { # The next two lines will put the number of planned tests in $0. sub("^1\\.\\.", "") sub("[^0-9]*$", "") handle_tap_plan($0, "") continue } # TAP "SKIP" plan, with an explanation. else if ($0 ~ /^1\.\.0+[ \t]*#/) { # The next lines will put the skip explanation in $0, stripping # any leading and trailing whitespace. This is a little more # tricky in truth, since we want to also strip a potential leading # "SKIP" string from the message. sub("^[^#]*#[ \t]*(SKIP[: \t][ \t]*)?", "") sub("[ \t]*$", ""); handle_tap_plan(0, $0) } # "Bail out!" magic. # Older versions of prove and TAP::Harness (e.g., 3.17) did not # recognize a "Bail out!" directive when preceded by leading # whitespace, but more modern versions (e.g., 3.23) do. So we # emulate the latter, "more modern" behaviour. else if ($0 ~ /^[ \t]*Bail out!/) { bailed_out = 1 # Get the bailout message (if any), with leading and trailing # whitespace stripped. The message remains stored in `$0`. sub("^[ \t]*Bail out![ \t]*", ""); sub("[ \t]*$", ""); # Format the error message for the bailout_message = "Bail out!" if (length($0)) bailout_message = bailout_message " " $0 testsuite_error(bailout_message) } # Maybe we have too look for dianogtic comments too. else if (comments != 0) { comment = extract_tap_comment($0); if (length(comment)) report("#", comment); } } ## -------- ## ## FINISH ## ## -------- ## # A "Bail out!" directive should cause us to ignore any following TAP # error, as well as a non-zero exit status from the TAP producer. if (!bailed_out) { if (!plan_seen) { testsuite_error("missing test plan") } else if (planned_tests != testno) { bad_amount = testno > planned_tests ? "many" : "few" testsuite_error(sprintf("too %s tests run (expected %d, got %d)", bad_amount, planned_tests, testno)) } if (!ignore_exit) { # Fetch exit status from the last line. exit_message = get_test_exit_message(nextline) if (exit_message) testsuite_error(exit_message) } } write_test_results() exit 0 } # End of "BEGIN" block. ' # TODO: document that we consume the file descriptor 3 :-( } 3>"$log_file" test $? -eq 0 || fatal "I/O or internal error" # Local Variables: # mode: shell-script # sh-indentation: 2 # 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: |
Changes to jni/libressl/tests/CMakeLists.txt.
1 2 3 4 5 6 7 | include_directories( . ../include ../include/compat ../crypto/modes ../crypto/asn1 ../ssl | | > < < | | | | < | > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | include_directories( . ../include ../include/compat ../crypto/modes ../crypto/asn1 ../ssl ../apps/openssl ../apps/openssl/compat ) # aeadtest add_executable(aeadtest aeadtest.c) target_link_libraries(aeadtest ${OPENSSL_LIBS}) add_test(aeadtest ${CMAKE_CURRENT_SOURCE_DIR}/aeadtest.sh) set_tests_properties(aeadtest PROPERTIES ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") # aes_wrap add_executable(aes_wrap aes_wrap.c) target_link_libraries(aes_wrap ${OPENSSL_LIBS}) add_test(aes_wrap aes_wrap) # arc4randomforktest # Windows/mingw does not have fork, but Cygwin does. if(NOT CMAKE_HOST_WIN32 AND NOT CMAKE_SYSTEM_NAME MATCHES "MINGW") add_executable(arc4randomforktest arc4randomforktest.c) target_link_libraries(arc4randomforktest ${OPENSSL_LIBS}) add_test(arc4randomforktest ${CMAKE_CURRENT_SOURCE_DIR}/arc4randomforktest.sh) endif() # asn1test add_executable(asn1test asn1test.c) target_link_libraries(asn1test ${OPENSSL_LIBS}) add_test(asn1test asn1test) # asn1time add_executable(asn1time asn1time.c) target_link_libraries(asn1time ${OPENSSL_LIBS}) add_test(asn1time asn1time) # base64test add_executable(base64test base64test.c) target_link_libraries(base64test ${OPENSSL_LIBS}) add_test(base64test base64test) # bftest add_executable(bftest bftest.c) target_link_libraries(bftest ${OPENSSL_LIBS}) add_test(bftest bftest) # biotest # the BIO tests rely on resolver results that are OS and environment-specific if(ENABLE_EXTRATESTS) add_executable(biotest biotest.c) target_link_libraries(biotest ${OPENSSL_LIBS}) add_test(biotest biotest) endif() # bntest add_executable(bntest bntest.c) target_link_libraries(bntest ${OPENSSL_LIBS}) add_test(bntest bntest) # bytestringtest |
︙ | ︙ | |||
71 72 73 74 75 76 77 78 79 80 81 82 83 84 | add_test(cipher_list cipher_list) # cipherstest add_executable(cipherstest cipherstest.c) target_link_libraries(cipherstest ${OPENSSL_LIBS}) add_test(cipherstest cipherstest) # cts128test add_executable(cts128test cts128test.c) target_link_libraries(cts128test ${OPENSSL_LIBS}) add_test(cts128test cts128test) # destest add_executable(destest destest.c) | > > > > > | 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | add_test(cipher_list cipher_list) # cipherstest add_executable(cipherstest cipherstest.c) target_link_libraries(cipherstest ${OPENSSL_LIBS}) add_test(cipherstest cipherstest) # clienttest add_executable(clienttest clienttest.c) target_link_libraries(clienttest ${OPENSSL_LIBS}) add_test(clienttest clienttest) # cts128test add_executable(cts128test cts128test.c) target_link_libraries(cts128test ${OPENSSL_LIBS}) add_test(cts128test cts128test) # destest add_executable(destest destest.c) |
︙ | ︙ | |||
112 113 114 115 116 117 118 | # enginetest add_executable(enginetest enginetest.c) target_link_libraries(enginetest ${OPENSSL_LIBS}) add_test(enginetest enginetest) # evptest | | | | > > | > > > < < < | 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | # enginetest add_executable(enginetest enginetest.c) target_link_libraries(enginetest ${OPENSSL_LIBS}) add_test(enginetest enginetest) # evptest add_executable(evptest evptest.c) target_link_libraries(evptest ${OPENSSL_LIBS}) add_test(evptest ${CMAKE_CURRENT_SOURCE_DIR}/evptest.sh) set_tests_properties(evptest PROPERTIES ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") # explicit_bzero # explicit_bzero relies on SA_ONSTACK, which is unavailable on Windows if(NOT CMAKE_HOST_WIN32) if(HAVE_MEMMEM) add_executable(explicit_bzero explicit_bzero.c) else() add_executable(explicit_bzero explicit_bzero.c memmem.c) endif() target_link_libraries(explicit_bzero ${OPENSSL_LIBS}) add_test(explicit_bzero explicit_bzero) endif() # exptest add_executable(exptest exptest.c) target_link_libraries(exptest ${OPENSSL_LIBS}) add_test(exptest exptest) |
︙ | ︙ | |||
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 | target_link_libraries(md5test ${OPENSSL_LIBS}) add_test(md5test md5test) # mont add_executable(mont mont.c) target_link_libraries(mont ${OPENSSL_LIBS}) add_test(mont mont) # optionstest add_executable(optionstest optionstest.c) target_link_libraries(optionstest ${OPENSSL_LIBS}) add_test(optionstest optionstest) # pbkdf2 add_executable(pbkdf2 pbkdf2.c) target_link_libraries(pbkdf2 ${OPENSSL_LIBS}) add_test(pbkdf2 pbkdf2) # pkcs7test add_executable(pkcs7test pkcs7test.c) target_link_libraries(pkcs7test ${OPENSSL_LIBS}) add_test(pkcs7test pkcs7test) # poly1305test add_executable(poly1305test poly1305test.c) target_link_libraries(poly1305test ${OPENSSL_LIBS}) add_test(poly1305test poly1305test) # pq_test | > > > > > > > > > > > > > > > > > > > > > > | | | > > > > > > > > > > | 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | target_link_libraries(md5test ${OPENSSL_LIBS}) add_test(md5test md5test) # mont add_executable(mont mont.c) target_link_libraries(mont ${OPENSSL_LIBS}) add_test(mont mont) # ocsp_test if(ENABLE_EXTRATESTS) if(NOT "${OPENSSLDIR}" STREQUAL "") add_definitions(-D_PATH_SSL_CA_FILE=\"${OPENSSLDIR}/cert.pem\") else() add_definitions(-D_PATH_SSL_CA_FILE=\"${CMAKE_INSTALL_PREFIX}/etc/ssl/cert.pem\") endif() add_executable(ocsp_test ocsp_test.c) target_link_libraries(ocsp_test ${OPENSSL_LIBS}) add_test(ocsptest ${CMAKE_CURRENT_SOURCE_DIR}/ocsptest.sh) set_tests_properties(ocsptest PROPERTIES ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") endif() # optionstest add_executable(optionstest optionstest.c) target_link_libraries(optionstest ${OPENSSL_LIBS}) add_test(optionstest optionstest) # pbkdf2 add_executable(pbkdf2 pbkdf2.c) target_link_libraries(pbkdf2 ${OPENSSL_LIBS}) add_test(pbkdf2 pbkdf2) # pidwraptest # pidwraptest relies on an OS-specific way to give out pids and is generally # awkward on systems with slow fork if(ENABLE_EXTRATESTS) add_executable(pidwraptest pidwraptest.c) target_link_libraries(pidwraptest ${OPENSSL_LIBS}) add_test(pidwraptest ${CMAKE_CURRENT_SOURCE_DIR}/pidwraptest.sh) endif() # pkcs7test add_executable(pkcs7test pkcs7test.c) target_link_libraries(pkcs7test ${OPENSSL_LIBS}) add_test(pkcs7test pkcs7test) # poly1305test add_executable(poly1305test poly1305test.c) target_link_libraries(poly1305test ${OPENSSL_LIBS}) add_test(poly1305test poly1305test) # pq_test add_executable(pq_test pq_test.c) target_link_libraries(pq_test ${OPENSSL_LIBS}) add_test(pq_test ${CMAKE_CURRENT_SOURCE_DIR}/pq_test.sh) set_tests_properties(pq_test PROPERTIES ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") # randtest add_executable(randtest randtest.c) target_link_libraries(randtest ${OPENSSL_LIBS}) add_test(randtest randtest) # rc2test add_executable(rc2test rc2test.c) target_link_libraries(rc2test ${OPENSSL_LIBS}) add_test(rc2test rc2test) # rc4test add_executable(rc4test rc4test.c) target_link_libraries(rc4test ${OPENSSL_LIBS}) add_test(rc4test rc4test) # rfc5280time add_executable(rfc5280time rfc5280time.c) target_link_libraries(rfc5280time ${OPENSSL_LIBS}) if(SMALL_TIME_T) add_test(rfc5280time ${CMAKE_CURRENT_SOURCE_DIR}/rfc5280time_small.test) else() add_test(rfc5280time rfc5280time) endif() # rmdtest add_executable(rmdtest rmdtest.c) target_link_libraries(rmdtest ${OPENSSL_LIBS}) add_test(rmdtest rmdtest) # sha1test |
︙ | ︙ | |||
232 233 234 235 236 237 238 | add_test(sha256test sha256test) # sha512test add_executable(sha512test sha512test.c) target_link_libraries(sha512test ${OPENSSL_LIBS}) add_test(sha512test sha512test) | < < < < < | | | > | > > | > > > > > > | 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 | add_test(sha256test sha256test) # sha512test add_executable(sha512test sha512test.c) target_link_libraries(sha512test ${OPENSSL_LIBS}) add_test(sha512test sha512test) # ssltest add_executable(ssltest ssltest.c) target_link_libraries(ssltest ${OPENSSL_LIBS}) add_test(ssltest ${CMAKE_CURRENT_SOURCE_DIR}/ssltest.sh) set_tests_properties(ssltest PROPERTIES ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") # testdsa add_test(testdsa ${CMAKE_CURRENT_SOURCE_DIR}/testdsa.sh) set_tests_properties(testdsa PROPERTIES ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") # testenc add_test(testenc ${CMAKE_CURRENT_SOURCE_DIR}/testenc.sh) set_tests_properties(testenc PROPERTIES ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") # testrsa add_test(testrsa ${CMAKE_CURRENT_SOURCE_DIR}/testrsa.sh) set_tests_properties(testrsa PROPERTIES ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") # timingsafe add_executable(timingsafe timingsafe.c) target_link_libraries(timingsafe ${OPENSSL_LIBS}) add_test(timingsafe timingsafe) # utf8test add_executable(utf8test utf8test.c) target_link_libraries(utf8test ${OPENSSL_LIBS}) add_test(utf8test utf8test) # verifytest add_executable(verifytest verifytest.c) target_link_libraries(verifytest tls ${OPENSSL_LIBS}) add_test(verifytest verifytest) |
Changes to jni/libressl/tests/Makefile.am.
1 2 3 4 5 | include $(top_srcdir)/Makefile.am.common AM_CPPFLAGS += -I $(top_srcdir)/crypto/modes AM_CPPFLAGS += -I $(top_srcdir)/crypto/asn1 AM_CPPFLAGS += -I $(top_srcdir)/ssl | | > | | > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | include $(top_srcdir)/Makefile.am.common AM_CPPFLAGS += -I $(top_srcdir)/crypto/modes AM_CPPFLAGS += -I $(top_srcdir)/crypto/asn1 AM_CPPFLAGS += -I $(top_srcdir)/ssl AM_CPPFLAGS += -I $(top_srcdir)/apps/openssl AM_CPPFLAGS += -I $(top_srcdir)/apps/openssl/compat LDADD = $(PLATFORM_LDADD) $(PROG_LDADD) LDADD += $(abs_top_builddir)/ssl/libssl.la LDADD += $(abs_top_builddir)/crypto/libcrypto.la LDADD += $(abs_top_builddir)/tls/libtls.la TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/tap-driver.sh TESTS = check_PROGRAMS = EXTRA_DIST = CMakeLists.txt DISTCLEANFILES = pidwraptest.txt # aeadtest |
︙ | ︙ | |||
36 37 38 39 40 41 42 43 44 45 46 47 48 49 | EXTRA_DIST += arc4randomforktest.sh # asn1test TESTS += asn1test check_PROGRAMS += asn1test asn1test_SOURCES = asn1test.c # base64test TESTS += base64test check_PROGRAMS += base64test base64test_SOURCES = base64test.c # bftest TESTS += bftest | > > > > > | 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | EXTRA_DIST += arc4randomforktest.sh # asn1test TESTS += asn1test check_PROGRAMS += asn1test asn1test_SOURCES = asn1test.c # asn1time TESTS += asn1time check_PROGRAMS += asn1time asn1time_SOURCES = asn1time.c # base64test TESTS += base64test check_PROGRAMS += base64test base64test_SOURCES = base64test.c # bftest TESTS += bftest |
︙ | ︙ | |||
85 86 87 88 89 90 91 92 93 94 95 96 97 98 | noinst_HEADERS = tests.h # cipherstest TESTS += cipherstest check_PROGRAMS += cipherstest cipherstest_SOURCES = cipherstest.c # cts128test TESTS += cts128test check_PROGRAMS += cts128test cts128test_SOURCES = cts128test.c # destest TESTS += destest | > > > > > | 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | noinst_HEADERS = tests.h # cipherstest TESTS += cipherstest check_PROGRAMS += cipherstest cipherstest_SOURCES = cipherstest.c # clienttest TESTS += clienttest check_PROGRAMS += clienttest clienttest_SOURCES = clienttest.c # cts128test TESTS += cts128test check_PROGRAMS += cts128test cts128test_SOURCES = cts128test.c # destest TESTS += destest |
︙ | ︙ | |||
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | md5test_SOURCES = md5test.c # mont TESTS += mont check_PROGRAMS += mont mont_SOURCES = mont.c # optionstest TESTS += optionstest check_PROGRAMS += optionstest optionstest_SOURCES = optionstest.c # pbkdf2 TESTS += pbkdf2 check_PROGRAMS += pbkdf2 pbkdf2_SOURCES = pbkdf2.c # pidwraptest # pidwraptest relies on an OS-specific way to give out pids and is generally # awkward on systems with slow fork if ENABLE_EXTRATESTS | > > > > > > > > | > | 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 | md5test_SOURCES = md5test.c # mont TESTS += mont check_PROGRAMS += mont mont_SOURCES = mont.c # ocsp_test if ENABLE_EXTRATESTS TESTS += ocsptest.sh check_PROGRAMS += ocsp_test ocsp_test_SOURCES = ocsp_test.c endif EXTRA_DIST += ocsptest.sh # optionstest TESTS += optionstest check_PROGRAMS += optionstest optionstest_SOURCES = optionstest.c # pbkdf2 TESTS += pbkdf2 check_PROGRAMS += pbkdf2 pbkdf2_SOURCES = pbkdf2.c # pidwraptest # pidwraptest relies on an OS-specific way to give out pids and is generally # awkward on systems with slow fork if ENABLE_EXTRATESTS TESTS += pidwraptest.sh check_PROGRAMS += pidwraptest pidwraptest_SOURCES = pidwraptest.c endif EXTRA_DIST += pidwraptest.sh # pkcs7test TESTS += pkcs7test check_PROGRAMS += pkcs7test pkcs7test_SOURCES = pkcs7test.c # poly1305test |
︙ | ︙ | |||
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 | rc2test_SOURCES = rc2test.c # rc4test TESTS += rc4test check_PROGRAMS += rc4test rc4test_SOURCES = rc4test.c # rmdtest TESTS += rmdtest check_PROGRAMS += rmdtest rmdtest_SOURCES = rmdtest.c # sha1test TESTS += sha1test check_PROGRAMS += sha1test sha1test_SOURCES = sha1test.c # sha256test TESTS += sha256test check_PROGRAMS += sha256test sha256test_SOURCES = sha256test.c # sha512test TESTS += sha512test check_PROGRAMS += sha512test sha512test_SOURCES = sha512test.c | > > > > > > > > > > < < < < < | 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 | rc2test_SOURCES = rc2test.c # rc4test TESTS += rc4test check_PROGRAMS += rc4test rc4test_SOURCES = rc4test.c # rfc5280time check_PROGRAMS += rfc5280time rfc5280time_SOURCES = rfc5280time.c if SMALL_TIME_T TESTS += rfc5280time_small.test else TESTS += rfc5280time endif EXTRA_DIST += rfc5280time_small.test # rmdtest TESTS += rmdtest check_PROGRAMS += rmdtest rmdtest_SOURCES = rmdtest.c # sha1test TESTS += sha1test check_PROGRAMS += sha1test sha1test_SOURCES = sha1test.c # sha256test TESTS += sha256test check_PROGRAMS += sha256test sha256test_SOURCES = sha256test.c # sha512test TESTS += sha512test check_PROGRAMS += sha512test sha512test_SOURCES = sha512test.c # ssltest TESTS += ssltest.sh check_PROGRAMS += ssltest ssltest_SOURCES = ssltest.c EXTRA_DIST += ssltest.sh EXTRA_DIST += testssl ca.pem server.pem |
︙ | ︙ | |||
296 297 298 299 300 301 302 | timingsafe_SOURCES = timingsafe.c # utf8test TESTS += utf8test check_PROGRAMS += utf8test utf8test_SOURCES = utf8test.c | > > > > | 324 325 326 327 328 329 330 331 332 333 334 | timingsafe_SOURCES = timingsafe.c # utf8test TESTS += utf8test check_PROGRAMS += utf8test utf8test_SOURCES = utf8test.c # verifytest TESTS += verifytest check_PROGRAMS += verifytest verifytest_SOURCES = verifytest.c |
Changes to jni/libressl/tests/Makefile.in.
︙ | ︙ | |||
85 86 87 88 89 90 91 | POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ TESTS = aeadtest.sh aes_wrap$(EXEEXT) $(am__append_1) \ | | | | > | | | < | | | | | | > | | | | | > | | | | | | | | | | | | > > > > | | > > | > | | > | | > | | > | | > > > > > > > > | | > | | > | | > | | > | | > | | > | | > | | > | | > > > > > > > > | | > | | > | | > | | > | | > | | > | | > | | > | | > | | > | | > | | > | | > | | > | | > | | > | | > | | > | | > > > > > > > > > | | > | | > | | > | | > | | > | | > | | > | | > | | > > > > > > > > | | > | | > | | > | | < < < < | < | | > | | > | | > > > > > > > > | 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 | POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ TESTS = aeadtest.sh aes_wrap$(EXEEXT) $(am__append_1) \ asn1test$(EXEEXT) asn1time$(EXEEXT) base64test$(EXEEXT) \ bftest$(EXEEXT) $(am__EXEEXT_2) bntest$(EXEEXT) \ bytestringtest$(EXEEXT) casttest$(EXEEXT) chachatest$(EXEEXT) \ cipher_list$(EXEEXT) cipherstest$(EXEEXT) clienttest$(EXEEXT) \ cts128test$(EXEEXT) destest$(EXEEXT) dhtest$(EXEEXT) \ dsatest$(EXEEXT) ecdhtest$(EXEEXT) ecdsatest$(EXEEXT) \ ectest$(EXEEXT) enginetest$(EXEEXT) evptest.sh $(am__EXEEXT_3) \ exptest$(EXEEXT) gcm128test$(EXEEXT) gost2814789t$(EXEEXT) \ hmactest$(EXEEXT) ideatest$(EXEEXT) igetest$(EXEEXT) \ md4test$(EXEEXT) md5test$(EXEEXT) mont$(EXEEXT) \ $(am__append_8) optionstest$(EXEEXT) pbkdf2$(EXEEXT) \ $(am__append_10) pkcs7test$(EXEEXT) poly1305test$(EXEEXT) \ pq_test.sh randtest$(EXEEXT) rc2test$(EXEEXT) rc4test$(EXEEXT) \ $(am__append_12) $(am__EXEEXT_6) rmdtest$(EXEEXT) \ sha1test$(EXEEXT) sha256test$(EXEEXT) sha512test$(EXEEXT) \ ssltest.sh testdsa.sh testenc.sh testrsa.sh \ timingsafe$(EXEEXT) utf8test$(EXEEXT) verifytest$(EXEEXT) check_PROGRAMS = aeadtest$(EXEEXT) aes_wrap$(EXEEXT) $(am__EXEEXT_1) \ asn1test$(EXEEXT) asn1time$(EXEEXT) base64test$(EXEEXT) \ bftest$(EXEEXT) $(am__EXEEXT_2) bntest$(EXEEXT) \ bytestringtest$(EXEEXT) casttest$(EXEEXT) chachatest$(EXEEXT) \ cipher_list$(EXEEXT) cipherstest$(EXEEXT) clienttest$(EXEEXT) \ cts128test$(EXEEXT) destest$(EXEEXT) dhtest$(EXEEXT) \ dsatest$(EXEEXT) ecdhtest$(EXEEXT) ecdsatest$(EXEEXT) \ ectest$(EXEEXT) enginetest$(EXEEXT) evptest$(EXEEXT) \ $(am__EXEEXT_3) exptest$(EXEEXT) gcm128test$(EXEEXT) \ gost2814789t$(EXEEXT) hmactest$(EXEEXT) ideatest$(EXEEXT) \ igetest$(EXEEXT) md4test$(EXEEXT) md5test$(EXEEXT) \ mont$(EXEEXT) $(am__EXEEXT_4) optionstest$(EXEEXT) \ pbkdf2$(EXEEXT) $(am__EXEEXT_5) pkcs7test$(EXEEXT) \ poly1305test$(EXEEXT) pq_test$(EXEEXT) randtest$(EXEEXT) \ rc2test$(EXEEXT) rc4test$(EXEEXT) rfc5280time$(EXEEXT) \ rmdtest$(EXEEXT) sha1test$(EXEEXT) sha256test$(EXEEXT) \ sha512test$(EXEEXT) ssltest$(EXEEXT) timingsafe$(EXEEXT) \ utf8test$(EXEEXT) verifytest$(EXEEXT) # arc4randomforktest # Windows/mingw does not have fork, but Cygwin does. @HOST_WIN_FALSE@am__append_1 = arc4randomforktest.sh @HOST_WIN_FALSE@am__append_2 = arc4randomforktest # biotest # the BIO tests rely on resolver results that are OS and environment-specific @ENABLE_EXTRATESTS_TRUE@am__append_3 = biotest @ENABLE_EXTRATESTS_TRUE@am__append_4 = biotest # explicit_bzero # explicit_bzero relies on SA_ONSTACK, which is unavailable on Windows @HOST_CYGWIN_FALSE@@HOST_WIN_FALSE@am__append_5 = explicit_bzero @HOST_CYGWIN_FALSE@@HOST_WIN_FALSE@am__append_6 = explicit_bzero @HAVE_MEMMEM_FALSE@@HOST_CYGWIN_FALSE@@HOST_WIN_FALSE@am__append_7 = memmem.c # ocsp_test @ENABLE_EXTRATESTS_TRUE@am__append_8 = ocsptest.sh @ENABLE_EXTRATESTS_TRUE@am__append_9 = ocsp_test # pidwraptest # pidwraptest relies on an OS-specific way to give out pids and is generally # awkward on systems with slow fork @ENABLE_EXTRATESTS_TRUE@am__append_10 = pidwraptest.sh @ENABLE_EXTRATESTS_TRUE@am__append_11 = pidwraptest @SMALL_TIME_T_TRUE@am__append_12 = rfc5280time_small.test @SMALL_TIME_T_FALSE@am__append_13 = rfc5280time subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/check-hardening-options.m4 \ $(top_srcdir)/m4/check-libc.m4 \ $(top_srcdir)/m4/check-os-options.m4 \ $(top_srcdir)/m4/disable-compiler-warnings.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = @HOST_WIN_FALSE@am__EXEEXT_1 = arc4randomforktest$(EXEEXT) @ENABLE_EXTRATESTS_TRUE@am__EXEEXT_2 = biotest$(EXEEXT) @HOST_CYGWIN_FALSE@@HOST_WIN_FALSE@am__EXEEXT_3 = \ @HOST_CYGWIN_FALSE@@HOST_WIN_FALSE@ explicit_bzero$(EXEEXT) @ENABLE_EXTRATESTS_TRUE@am__EXEEXT_4 = ocsp_test$(EXEEXT) @ENABLE_EXTRATESTS_TRUE@am__EXEEXT_5 = pidwraptest$(EXEEXT) am_aeadtest_OBJECTS = aeadtest.$(OBJEXT) aeadtest_OBJECTS = $(am_aeadtest_OBJECTS) aeadtest_LDADD = $(LDADD) am__DEPENDENCIES_1 = aeadtest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_aes_wrap_OBJECTS = aes_wrap.$(OBJEXT) aes_wrap_OBJECTS = $(am_aes_wrap_OBJECTS) aes_wrap_LDADD = $(LDADD) aes_wrap_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am__arc4randomforktest_SOURCES_DIST = arc4randomforktest.c @HOST_WIN_FALSE@am_arc4randomforktest_OBJECTS = \ @HOST_WIN_FALSE@ arc4randomforktest.$(OBJEXT) arc4randomforktest_OBJECTS = $(am_arc4randomforktest_OBJECTS) arc4randomforktest_LDADD = $(LDADD) arc4randomforktest_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_asn1test_OBJECTS = asn1test.$(OBJEXT) asn1test_OBJECTS = $(am_asn1test_OBJECTS) asn1test_LDADD = $(LDADD) asn1test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_asn1time_OBJECTS = asn1time.$(OBJEXT) asn1time_OBJECTS = $(am_asn1time_OBJECTS) asn1time_LDADD = $(LDADD) asn1time_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_base64test_OBJECTS = base64test.$(OBJEXT) base64test_OBJECTS = $(am_base64test_OBJECTS) base64test_LDADD = $(LDADD) base64test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_bftest_OBJECTS = bftest.$(OBJEXT) bftest_OBJECTS = $(am_bftest_OBJECTS) bftest_LDADD = $(LDADD) bftest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am__biotest_SOURCES_DIST = biotest.c @ENABLE_EXTRATESTS_TRUE@am_biotest_OBJECTS = biotest.$(OBJEXT) biotest_OBJECTS = $(am_biotest_OBJECTS) biotest_LDADD = $(LDADD) biotest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_bntest_OBJECTS = bntest.$(OBJEXT) bntest_OBJECTS = $(am_bntest_OBJECTS) bntest_LDADD = $(LDADD) bntest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_bytestringtest_OBJECTS = bytestringtest.$(OBJEXT) bytestringtest_OBJECTS = $(am_bytestringtest_OBJECTS) bytestringtest_LDADD = $(LDADD) bytestringtest_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_casttest_OBJECTS = casttest.$(OBJEXT) casttest_OBJECTS = $(am_casttest_OBJECTS) casttest_LDADD = $(LDADD) casttest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_chachatest_OBJECTS = chachatest.$(OBJEXT) chachatest_OBJECTS = $(am_chachatest_OBJECTS) chachatest_LDADD = $(LDADD) chachatest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_cipher_list_OBJECTS = cipher_list.$(OBJEXT) cipher_list_OBJECTS = $(am_cipher_list_OBJECTS) cipher_list_LDADD = $(LDADD) cipher_list_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_cipherstest_OBJECTS = cipherstest.$(OBJEXT) cipherstest_OBJECTS = $(am_cipherstest_OBJECTS) cipherstest_LDADD = $(LDADD) cipherstest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_clienttest_OBJECTS = clienttest.$(OBJEXT) clienttest_OBJECTS = $(am_clienttest_OBJECTS) clienttest_LDADD = $(LDADD) clienttest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_cts128test_OBJECTS = cts128test.$(OBJEXT) cts128test_OBJECTS = $(am_cts128test_OBJECTS) cts128test_LDADD = $(LDADD) cts128test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_destest_OBJECTS = destest.$(OBJEXT) destest_OBJECTS = $(am_destest_OBJECTS) destest_LDADD = $(LDADD) destest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_dhtest_OBJECTS = dhtest.$(OBJEXT) dhtest_OBJECTS = $(am_dhtest_OBJECTS) dhtest_LDADD = $(LDADD) dhtest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_dsatest_OBJECTS = dsatest.$(OBJEXT) dsatest_OBJECTS = $(am_dsatest_OBJECTS) dsatest_LDADD = $(LDADD) dsatest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_ecdhtest_OBJECTS = ecdhtest.$(OBJEXT) ecdhtest_OBJECTS = $(am_ecdhtest_OBJECTS) ecdhtest_LDADD = $(LDADD) ecdhtest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_ecdsatest_OBJECTS = ecdsatest.$(OBJEXT) ecdsatest_OBJECTS = $(am_ecdsatest_OBJECTS) ecdsatest_LDADD = $(LDADD) ecdsatest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_ectest_OBJECTS = ectest.$(OBJEXT) ectest_OBJECTS = $(am_ectest_OBJECTS) ectest_LDADD = $(LDADD) ectest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_enginetest_OBJECTS = enginetest.$(OBJEXT) enginetest_OBJECTS = $(am_enginetest_OBJECTS) enginetest_LDADD = $(LDADD) enginetest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_evptest_OBJECTS = evptest.$(OBJEXT) evptest_OBJECTS = $(am_evptest_OBJECTS) evptest_LDADD = $(LDADD) evptest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am__explicit_bzero_SOURCES_DIST = explicit_bzero.c memmem.c @HAVE_MEMMEM_FALSE@@HOST_CYGWIN_FALSE@@HOST_WIN_FALSE@am__objects_1 = memmem.$(OBJEXT) @HOST_CYGWIN_FALSE@@HOST_WIN_FALSE@am_explicit_bzero_OBJECTS = \ @HOST_CYGWIN_FALSE@@HOST_WIN_FALSE@ explicit_bzero.$(OBJEXT) \ @HOST_CYGWIN_FALSE@@HOST_WIN_FALSE@ $(am__objects_1) explicit_bzero_OBJECTS = $(am_explicit_bzero_OBJECTS) explicit_bzero_LDADD = $(LDADD) explicit_bzero_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_exptest_OBJECTS = exptest.$(OBJEXT) exptest_OBJECTS = $(am_exptest_OBJECTS) exptest_LDADD = $(LDADD) exptest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_gcm128test_OBJECTS = gcm128test.$(OBJEXT) gcm128test_OBJECTS = $(am_gcm128test_OBJECTS) gcm128test_LDADD = $(LDADD) gcm128test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_gost2814789t_OBJECTS = gost2814789t.$(OBJEXT) gost2814789t_OBJECTS = $(am_gost2814789t_OBJECTS) gost2814789t_LDADD = $(LDADD) gost2814789t_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_hmactest_OBJECTS = hmactest.$(OBJEXT) hmactest_OBJECTS = $(am_hmactest_OBJECTS) hmactest_LDADD = $(LDADD) hmactest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_ideatest_OBJECTS = ideatest.$(OBJEXT) ideatest_OBJECTS = $(am_ideatest_OBJECTS) ideatest_LDADD = $(LDADD) ideatest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_igetest_OBJECTS = igetest.$(OBJEXT) igetest_OBJECTS = $(am_igetest_OBJECTS) igetest_LDADD = $(LDADD) igetest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_md4test_OBJECTS = md4test.$(OBJEXT) md4test_OBJECTS = $(am_md4test_OBJECTS) md4test_LDADD = $(LDADD) md4test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_md5test_OBJECTS = md5test.$(OBJEXT) md5test_OBJECTS = $(am_md5test_OBJECTS) md5test_LDADD = $(LDADD) md5test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_mont_OBJECTS = mont.$(OBJEXT) mont_OBJECTS = $(am_mont_OBJECTS) mont_LDADD = $(LDADD) mont_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am__ocsp_test_SOURCES_DIST = ocsp_test.c @ENABLE_EXTRATESTS_TRUE@am_ocsp_test_OBJECTS = ocsp_test.$(OBJEXT) ocsp_test_OBJECTS = $(am_ocsp_test_OBJECTS) ocsp_test_LDADD = $(LDADD) ocsp_test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_optionstest_OBJECTS = optionstest.$(OBJEXT) optionstest_OBJECTS = $(am_optionstest_OBJECTS) optionstest_LDADD = $(LDADD) optionstest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_pbkdf2_OBJECTS = pbkdf2.$(OBJEXT) pbkdf2_OBJECTS = $(am_pbkdf2_OBJECTS) pbkdf2_LDADD = $(LDADD) pbkdf2_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am__pidwraptest_SOURCES_DIST = pidwraptest.c @ENABLE_EXTRATESTS_TRUE@am_pidwraptest_OBJECTS = \ @ENABLE_EXTRATESTS_TRUE@ pidwraptest.$(OBJEXT) pidwraptest_OBJECTS = $(am_pidwraptest_OBJECTS) pidwraptest_LDADD = $(LDADD) pidwraptest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_pkcs7test_OBJECTS = pkcs7test.$(OBJEXT) pkcs7test_OBJECTS = $(am_pkcs7test_OBJECTS) pkcs7test_LDADD = $(LDADD) pkcs7test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_poly1305test_OBJECTS = poly1305test.$(OBJEXT) poly1305test_OBJECTS = $(am_poly1305test_OBJECTS) poly1305test_LDADD = $(LDADD) poly1305test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_pq_test_OBJECTS = pq_test.$(OBJEXT) pq_test_OBJECTS = $(am_pq_test_OBJECTS) pq_test_LDADD = $(LDADD) pq_test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_randtest_OBJECTS = randtest.$(OBJEXT) randtest_OBJECTS = $(am_randtest_OBJECTS) randtest_LDADD = $(LDADD) randtest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_rc2test_OBJECTS = rc2test.$(OBJEXT) rc2test_OBJECTS = $(am_rc2test_OBJECTS) rc2test_LDADD = $(LDADD) rc2test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_rc4test_OBJECTS = rc4test.$(OBJEXT) rc4test_OBJECTS = $(am_rc4test_OBJECTS) rc4test_LDADD = $(LDADD) rc4test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_rfc5280time_OBJECTS = rfc5280time.$(OBJEXT) rfc5280time_OBJECTS = $(am_rfc5280time_OBJECTS) rfc5280time_LDADD = $(LDADD) rfc5280time_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_rmdtest_OBJECTS = rmdtest.$(OBJEXT) rmdtest_OBJECTS = $(am_rmdtest_OBJECTS) rmdtest_LDADD = $(LDADD) rmdtest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_sha1test_OBJECTS = sha1test.$(OBJEXT) sha1test_OBJECTS = $(am_sha1test_OBJECTS) sha1test_LDADD = $(LDADD) sha1test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_sha256test_OBJECTS = sha256test.$(OBJEXT) sha256test_OBJECTS = $(am_sha256test_OBJECTS) sha256test_LDADD = $(LDADD) sha256test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_sha512test_OBJECTS = sha512test.$(OBJEXT) sha512test_OBJECTS = $(am_sha512test_OBJECTS) sha512test_LDADD = $(LDADD) sha512test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_ssltest_OBJECTS = ssltest.$(OBJEXT) ssltest_OBJECTS = $(am_ssltest_OBJECTS) ssltest_LDADD = $(LDADD) ssltest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_timingsafe_OBJECTS = timingsafe.$(OBJEXT) timingsafe_OBJECTS = $(am_timingsafe_OBJECTS) timingsafe_LDADD = $(LDADD) timingsafe_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_utf8test_OBJECTS = utf8test.$(OBJEXT) utf8test_OBJECTS = $(am_utf8test_OBJECTS) utf8test_LDADD = $(LDADD) utf8test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la am_verifytest_OBJECTS = verifytest.$(OBJEXT) verifytest_OBJECTS = $(am_verifytest_OBJECTS) verifytest_LDADD = $(LDADD) verifytest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; |
︙ | ︙ | |||
505 506 507 508 509 510 511 | $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(aeadtest_SOURCES) $(aes_wrap_SOURCES) \ $(arc4randomforktest_SOURCES) $(asn1test_SOURCES) \ | | | | | | | > | | | | | | | | | | | | | | > | | | | | 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 | $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(aeadtest_SOURCES) $(aes_wrap_SOURCES) \ $(arc4randomforktest_SOURCES) $(asn1test_SOURCES) \ $(asn1time_SOURCES) $(base64test_SOURCES) $(bftest_SOURCES) \ $(biotest_SOURCES) $(bntest_SOURCES) $(bytestringtest_SOURCES) \ $(casttest_SOURCES) $(chachatest_SOURCES) \ $(cipher_list_SOURCES) $(cipherstest_SOURCES) \ $(clienttest_SOURCES) $(cts128test_SOURCES) $(destest_SOURCES) \ $(dhtest_SOURCES) $(dsatest_SOURCES) $(ecdhtest_SOURCES) \ $(ecdsatest_SOURCES) $(ectest_SOURCES) $(enginetest_SOURCES) \ $(evptest_SOURCES) $(explicit_bzero_SOURCES) \ $(exptest_SOURCES) $(gcm128test_SOURCES) \ $(gost2814789t_SOURCES) $(hmactest_SOURCES) \ $(ideatest_SOURCES) $(igetest_SOURCES) $(md4test_SOURCES) \ $(md5test_SOURCES) $(mont_SOURCES) $(ocsp_test_SOURCES) \ $(optionstest_SOURCES) $(pbkdf2_SOURCES) \ $(pidwraptest_SOURCES) $(pkcs7test_SOURCES) \ $(poly1305test_SOURCES) $(pq_test_SOURCES) $(randtest_SOURCES) \ $(rc2test_SOURCES) $(rc4test_SOURCES) $(rfc5280time_SOURCES) \ $(rmdtest_SOURCES) $(sha1test_SOURCES) $(sha256test_SOURCES) \ $(sha512test_SOURCES) $(ssltest_SOURCES) $(timingsafe_SOURCES) \ $(utf8test_SOURCES) $(verifytest_SOURCES) DIST_SOURCES = $(aeadtest_SOURCES) $(aes_wrap_SOURCES) \ $(am__arc4randomforktest_SOURCES_DIST) $(asn1test_SOURCES) \ $(asn1time_SOURCES) $(base64test_SOURCES) $(bftest_SOURCES) \ $(am__biotest_SOURCES_DIST) $(bntest_SOURCES) \ $(bytestringtest_SOURCES) $(casttest_SOURCES) \ $(chachatest_SOURCES) $(cipher_list_SOURCES) \ $(cipherstest_SOURCES) $(clienttest_SOURCES) \ $(cts128test_SOURCES) $(destest_SOURCES) $(dhtest_SOURCES) \ $(dsatest_SOURCES) $(ecdhtest_SOURCES) $(ecdsatest_SOURCES) \ $(ectest_SOURCES) $(enginetest_SOURCES) $(evptest_SOURCES) \ $(am__explicit_bzero_SOURCES_DIST) $(exptest_SOURCES) \ $(gcm128test_SOURCES) $(gost2814789t_SOURCES) \ $(hmactest_SOURCES) $(ideatest_SOURCES) $(igetest_SOURCES) \ $(md4test_SOURCES) $(md5test_SOURCES) $(mont_SOURCES) \ $(am__ocsp_test_SOURCES_DIST) $(optionstest_SOURCES) \ $(pbkdf2_SOURCES) $(am__pidwraptest_SOURCES_DIST) \ $(pkcs7test_SOURCES) $(poly1305test_SOURCES) \ $(pq_test_SOURCES) $(randtest_SOURCES) $(rc2test_SOURCES) \ $(rc4test_SOURCES) $(rfc5280time_SOURCES) $(rmdtest_SOURCES) \ $(sha1test_SOURCES) $(sha256test_SOURCES) \ $(sha512test_SOURCES) $(ssltest_SOURCES) $(timingsafe_SOURCES) \ $(utf8test_SOURCES) $(verifytest_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) |
︙ | ︙ | |||
753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 | # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) | > < | 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 | # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck @SMALL_TIME_T_FALSE@am__EXEEXT_6 = rfc5280time$(EXEEXT) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.common $(top_srcdir)/depcomp \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ |
︙ | ︙ | |||
904 905 906 907 908 909 910 | top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat \ -DLIBRESSL_INTERNAL -I $(top_srcdir)/crypto/modes -I \ $(top_srcdir)/crypto/asn1 -I $(top_srcdir)/ssl -I \ | | > | > | > > | > | > > | 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 | top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat \ -DLIBRESSL_INTERNAL -I $(top_srcdir)/crypto/modes -I \ $(top_srcdir)/crypto/asn1 -I $(top_srcdir)/ssl -I \ $(top_srcdir)/apps/openssl -I \ $(top_srcdir)/apps/openssl/compat LDADD = $(PLATFORM_LDADD) $(PROG_LDADD) \ $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la \ $(abs_top_builddir)/tls/libtls.la TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/tap-driver.sh EXTRA_DIST = CMakeLists.txt aeadtest.sh aeadtests.txt \ arc4randomforktest.sh evptest.sh evptests.txt ocsptest.sh \ pidwraptest.sh pq_test.sh pq_expected.txt \ rfc5280time_small.test ssltest.sh testssl ca.pem server.pem \ testdsa.sh openssl.cnf testenc.sh testrsa.sh DISTCLEANFILES = pidwraptest.txt aeadtest_SOURCES = aeadtest.c aes_wrap_SOURCES = aes_wrap.c @HOST_WIN_FALSE@arc4randomforktest_SOURCES = arc4randomforktest.c asn1test_SOURCES = asn1test.c asn1time_SOURCES = asn1time.c base64test_SOURCES = base64test.c bftest_SOURCES = bftest.c @ENABLE_EXTRATESTS_TRUE@biotest_SOURCES = biotest.c bntest_SOURCES = bntest.c bytestringtest_SOURCES = bytestringtest.c casttest_SOURCES = casttest.c chachatest_SOURCES = chachatest.c cipher_list_SOURCES = cipher_list.c noinst_HEADERS = tests.h cipherstest_SOURCES = cipherstest.c clienttest_SOURCES = clienttest.c cts128test_SOURCES = cts128test.c destest_SOURCES = destest.c dhtest_SOURCES = dhtest.c dsatest_SOURCES = dsatest.c ecdhtest_SOURCES = ecdhtest.c ecdsatest_SOURCES = ecdsatest.c ectest_SOURCES = ectest.c |
︙ | ︙ | |||
947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 | gost2814789t_SOURCES = gost2814789t.c hmactest_SOURCES = hmactest.c ideatest_SOURCES = ideatest.c igetest_SOURCES = igetest.c md4test_SOURCES = md4test.c md5test_SOURCES = md5test.c mont_SOURCES = mont.c optionstest_SOURCES = optionstest.c pbkdf2_SOURCES = pbkdf2.c @ENABLE_EXTRATESTS_TRUE@pidwraptest_SOURCES = pidwraptest.c pkcs7test_SOURCES = pkcs7test.c poly1305test_SOURCES = poly1305test.c pq_test_SOURCES = pq_test.c randtest_SOURCES = randtest.c rc2test_SOURCES = rc2test.c rc4test_SOURCES = rc4test.c rmdtest_SOURCES = rmdtest.c sha1test_SOURCES = sha1test.c sha256test_SOURCES = sha256test.c sha512test_SOURCES = sha512test.c | > > < > | 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 | gost2814789t_SOURCES = gost2814789t.c hmactest_SOURCES = hmactest.c ideatest_SOURCES = ideatest.c igetest_SOURCES = igetest.c md4test_SOURCES = md4test.c md5test_SOURCES = md5test.c mont_SOURCES = mont.c @ENABLE_EXTRATESTS_TRUE@ocsp_test_SOURCES = ocsp_test.c optionstest_SOURCES = optionstest.c pbkdf2_SOURCES = pbkdf2.c @ENABLE_EXTRATESTS_TRUE@pidwraptest_SOURCES = pidwraptest.c pkcs7test_SOURCES = pkcs7test.c poly1305test_SOURCES = poly1305test.c pq_test_SOURCES = pq_test.c randtest_SOURCES = randtest.c rc2test_SOURCES = rc2test.c rc4test_SOURCES = rc4test.c rfc5280time_SOURCES = rfc5280time.c rmdtest_SOURCES = rmdtest.c sha1test_SOURCES = sha1test.c sha256test_SOURCES = sha256test.c sha512test_SOURCES = sha512test.c ssltest_SOURCES = ssltest.c timingsafe_SOURCES = timingsafe.c utf8test_SOURCES = utf8test.c verifytest_SOURCES = verifytest.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ |
︙ | ︙ | |||
1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 | arc4randomforktest$(EXEEXT): $(arc4randomforktest_OBJECTS) $(arc4randomforktest_DEPENDENCIES) $(EXTRA_arc4randomforktest_DEPENDENCIES) @rm -f arc4randomforktest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(arc4randomforktest_OBJECTS) $(arc4randomforktest_LDADD) $(LIBS) asn1test$(EXEEXT): $(asn1test_OBJECTS) $(asn1test_DEPENDENCIES) $(EXTRA_asn1test_DEPENDENCIES) @rm -f asn1test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(asn1test_OBJECTS) $(asn1test_LDADD) $(LIBS) base64test$(EXEEXT): $(base64test_OBJECTS) $(base64test_DEPENDENCIES) $(EXTRA_base64test_DEPENDENCIES) @rm -f base64test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(base64test_OBJECTS) $(base64test_LDADD) $(LIBS) bftest$(EXEEXT): $(bftest_OBJECTS) $(bftest_DEPENDENCIES) $(EXTRA_bftest_DEPENDENCIES) @rm -f bftest$(EXEEXT) | > > > > | 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 | arc4randomforktest$(EXEEXT): $(arc4randomforktest_OBJECTS) $(arc4randomforktest_DEPENDENCIES) $(EXTRA_arc4randomforktest_DEPENDENCIES) @rm -f arc4randomforktest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(arc4randomforktest_OBJECTS) $(arc4randomforktest_LDADD) $(LIBS) asn1test$(EXEEXT): $(asn1test_OBJECTS) $(asn1test_DEPENDENCIES) $(EXTRA_asn1test_DEPENDENCIES) @rm -f asn1test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(asn1test_OBJECTS) $(asn1test_LDADD) $(LIBS) asn1time$(EXEEXT): $(asn1time_OBJECTS) $(asn1time_DEPENDENCIES) $(EXTRA_asn1time_DEPENDENCIES) @rm -f asn1time$(EXEEXT) $(AM_V_CCLD)$(LINK) $(asn1time_OBJECTS) $(asn1time_LDADD) $(LIBS) base64test$(EXEEXT): $(base64test_OBJECTS) $(base64test_DEPENDENCIES) $(EXTRA_base64test_DEPENDENCIES) @rm -f base64test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(base64test_OBJECTS) $(base64test_LDADD) $(LIBS) bftest$(EXEEXT): $(bftest_OBJECTS) $(bftest_DEPENDENCIES) $(EXTRA_bftest_DEPENDENCIES) @rm -f bftest$(EXEEXT) |
︙ | ︙ | |||
1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 | cipher_list$(EXEEXT): $(cipher_list_OBJECTS) $(cipher_list_DEPENDENCIES) $(EXTRA_cipher_list_DEPENDENCIES) @rm -f cipher_list$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cipher_list_OBJECTS) $(cipher_list_LDADD) $(LIBS) cipherstest$(EXEEXT): $(cipherstest_OBJECTS) $(cipherstest_DEPENDENCIES) $(EXTRA_cipherstest_DEPENDENCIES) @rm -f cipherstest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cipherstest_OBJECTS) $(cipherstest_LDADD) $(LIBS) cts128test$(EXEEXT): $(cts128test_OBJECTS) $(cts128test_DEPENDENCIES) $(EXTRA_cts128test_DEPENDENCIES) @rm -f cts128test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cts128test_OBJECTS) $(cts128test_LDADD) $(LIBS) destest$(EXEEXT): $(destest_OBJECTS) $(destest_DEPENDENCIES) $(EXTRA_destest_DEPENDENCIES) @rm -f destest$(EXEEXT) | > > > > | 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 | cipher_list$(EXEEXT): $(cipher_list_OBJECTS) $(cipher_list_DEPENDENCIES) $(EXTRA_cipher_list_DEPENDENCIES) @rm -f cipher_list$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cipher_list_OBJECTS) $(cipher_list_LDADD) $(LIBS) cipherstest$(EXEEXT): $(cipherstest_OBJECTS) $(cipherstest_DEPENDENCIES) $(EXTRA_cipherstest_DEPENDENCIES) @rm -f cipherstest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cipherstest_OBJECTS) $(cipherstest_LDADD) $(LIBS) clienttest$(EXEEXT): $(clienttest_OBJECTS) $(clienttest_DEPENDENCIES) $(EXTRA_clienttest_DEPENDENCIES) @rm -f clienttest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(clienttest_OBJECTS) $(clienttest_LDADD) $(LIBS) cts128test$(EXEEXT): $(cts128test_OBJECTS) $(cts128test_DEPENDENCIES) $(EXTRA_cts128test_DEPENDENCIES) @rm -f cts128test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cts128test_OBJECTS) $(cts128test_LDADD) $(LIBS) destest$(EXEEXT): $(destest_OBJECTS) $(destest_DEPENDENCIES) $(EXTRA_destest_DEPENDENCIES) @rm -f destest$(EXEEXT) |
︙ | ︙ | |||
1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 | md5test$(EXEEXT): $(md5test_OBJECTS) $(md5test_DEPENDENCIES) $(EXTRA_md5test_DEPENDENCIES) @rm -f md5test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(md5test_OBJECTS) $(md5test_LDADD) $(LIBS) mont$(EXEEXT): $(mont_OBJECTS) $(mont_DEPENDENCIES) $(EXTRA_mont_DEPENDENCIES) @rm -f mont$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mont_OBJECTS) $(mont_LDADD) $(LIBS) optionstest$(EXEEXT): $(optionstest_OBJECTS) $(optionstest_DEPENDENCIES) $(EXTRA_optionstest_DEPENDENCIES) @rm -f optionstest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(optionstest_OBJECTS) $(optionstest_LDADD) $(LIBS) pbkdf2$(EXEEXT): $(pbkdf2_OBJECTS) $(pbkdf2_DEPENDENCIES) $(EXTRA_pbkdf2_DEPENDENCIES) @rm -f pbkdf2$(EXEEXT) | > > > > | 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 | md5test$(EXEEXT): $(md5test_OBJECTS) $(md5test_DEPENDENCIES) $(EXTRA_md5test_DEPENDENCIES) @rm -f md5test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(md5test_OBJECTS) $(md5test_LDADD) $(LIBS) mont$(EXEEXT): $(mont_OBJECTS) $(mont_DEPENDENCIES) $(EXTRA_mont_DEPENDENCIES) @rm -f mont$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mont_OBJECTS) $(mont_LDADD) $(LIBS) ocsp_test$(EXEEXT): $(ocsp_test_OBJECTS) $(ocsp_test_DEPENDENCIES) $(EXTRA_ocsp_test_DEPENDENCIES) @rm -f ocsp_test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ocsp_test_OBJECTS) $(ocsp_test_LDADD) $(LIBS) optionstest$(EXEEXT): $(optionstest_OBJECTS) $(optionstest_DEPENDENCIES) $(EXTRA_optionstest_DEPENDENCIES) @rm -f optionstest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(optionstest_OBJECTS) $(optionstest_LDADD) $(LIBS) pbkdf2$(EXEEXT): $(pbkdf2_OBJECTS) $(pbkdf2_DEPENDENCIES) $(EXTRA_pbkdf2_DEPENDENCIES) @rm -f pbkdf2$(EXEEXT) |
︙ | ︙ | |||
1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 | rc2test$(EXEEXT): $(rc2test_OBJECTS) $(rc2test_DEPENDENCIES) $(EXTRA_rc2test_DEPENDENCIES) @rm -f rc2test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rc2test_OBJECTS) $(rc2test_LDADD) $(LIBS) rc4test$(EXEEXT): $(rc4test_OBJECTS) $(rc4test_DEPENDENCIES) $(EXTRA_rc4test_DEPENDENCIES) @rm -f rc4test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rc4test_OBJECTS) $(rc4test_LDADD) $(LIBS) rmdtest$(EXEEXT): $(rmdtest_OBJECTS) $(rmdtest_DEPENDENCIES) $(EXTRA_rmdtest_DEPENDENCIES) @rm -f rmdtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rmdtest_OBJECTS) $(rmdtest_LDADD) $(LIBS) sha1test$(EXEEXT): $(sha1test_OBJECTS) $(sha1test_DEPENDENCIES) $(EXTRA_sha1test_DEPENDENCIES) @rm -f sha1test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sha1test_OBJECTS) $(sha1test_LDADD) $(LIBS) sha256test$(EXEEXT): $(sha256test_OBJECTS) $(sha256test_DEPENDENCIES) $(EXTRA_sha256test_DEPENDENCIES) @rm -f sha256test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sha256test_OBJECTS) $(sha256test_LDADD) $(LIBS) sha512test$(EXEEXT): $(sha512test_OBJECTS) $(sha512test_DEPENDENCIES) $(EXTRA_sha512test_DEPENDENCIES) @rm -f sha512test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sha512test_OBJECTS) $(sha512test_LDADD) $(LIBS) | > > > > < < < < > > > > > > > > < > | 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 | rc2test$(EXEEXT): $(rc2test_OBJECTS) $(rc2test_DEPENDENCIES) $(EXTRA_rc2test_DEPENDENCIES) @rm -f rc2test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rc2test_OBJECTS) $(rc2test_LDADD) $(LIBS) rc4test$(EXEEXT): $(rc4test_OBJECTS) $(rc4test_DEPENDENCIES) $(EXTRA_rc4test_DEPENDENCIES) @rm -f rc4test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rc4test_OBJECTS) $(rc4test_LDADD) $(LIBS) rfc5280time$(EXEEXT): $(rfc5280time_OBJECTS) $(rfc5280time_DEPENDENCIES) $(EXTRA_rfc5280time_DEPENDENCIES) @rm -f rfc5280time$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rfc5280time_OBJECTS) $(rfc5280time_LDADD) $(LIBS) rmdtest$(EXEEXT): $(rmdtest_OBJECTS) $(rmdtest_DEPENDENCIES) $(EXTRA_rmdtest_DEPENDENCIES) @rm -f rmdtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rmdtest_OBJECTS) $(rmdtest_LDADD) $(LIBS) sha1test$(EXEEXT): $(sha1test_OBJECTS) $(sha1test_DEPENDENCIES) $(EXTRA_sha1test_DEPENDENCIES) @rm -f sha1test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sha1test_OBJECTS) $(sha1test_LDADD) $(LIBS) sha256test$(EXEEXT): $(sha256test_OBJECTS) $(sha256test_DEPENDENCIES) $(EXTRA_sha256test_DEPENDENCIES) @rm -f sha256test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sha256test_OBJECTS) $(sha256test_LDADD) $(LIBS) sha512test$(EXEEXT): $(sha512test_OBJECTS) $(sha512test_DEPENDENCIES) $(EXTRA_sha512test_DEPENDENCIES) @rm -f sha512test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sha512test_OBJECTS) $(sha512test_LDADD) $(LIBS) ssltest$(EXEEXT): $(ssltest_OBJECTS) $(ssltest_DEPENDENCIES) $(EXTRA_ssltest_DEPENDENCIES) @rm -f ssltest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ssltest_OBJECTS) $(ssltest_LDADD) $(LIBS) timingsafe$(EXEEXT): $(timingsafe_OBJECTS) $(timingsafe_DEPENDENCIES) $(EXTRA_timingsafe_DEPENDENCIES) @rm -f timingsafe$(EXEEXT) $(AM_V_CCLD)$(LINK) $(timingsafe_OBJECTS) $(timingsafe_LDADD) $(LIBS) utf8test$(EXEEXT): $(utf8test_OBJECTS) $(utf8test_DEPENDENCIES) $(EXTRA_utf8test_DEPENDENCIES) @rm -f utf8test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(utf8test_OBJECTS) $(utf8test_LDADD) $(LIBS) verifytest$(EXEEXT): $(verifytest_OBJECTS) $(verifytest_DEPENDENCIES) $(EXTRA_verifytest_DEPENDENCIES) @rm -f verifytest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(verifytest_OBJECTS) $(verifytest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aeadtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aes_wrap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arc4randomforktest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bftest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/biotest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bntest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bytestringtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/casttest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chachatest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher_list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipherstest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clienttest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cts128test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/destest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dhtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsatest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecdhtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecdsatest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ectest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enginetest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evptest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/explicit_bzero.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exptest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcm128test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gost2814789t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmactest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ideatest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/igetest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md4test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memmem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mont.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ocsp_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/optionstest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pbkdf2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pidwraptest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkcs7test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poly1305test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pq_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rc2test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rc4test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rfc5280time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmdtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha256test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha512test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssltest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timingsafe.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/verifytest.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
︙ | ︙ | |||
1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 | asn1test.log: asn1test$(EXEEXT) @p='asn1test$(EXEEXT)'; \ b='asn1test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) base64test.log: base64test$(EXEEXT) @p='base64test$(EXEEXT)'; \ b='base64test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) | > > > > > > > | 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 | asn1test.log: asn1test$(EXEEXT) @p='asn1test$(EXEEXT)'; \ b='asn1test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) asn1time.log: asn1time$(EXEEXT) @p='asn1time$(EXEEXT)'; \ b='asn1time'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) base64test.log: base64test$(EXEEXT) @p='base64test$(EXEEXT)'; \ b='base64test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) |
︙ | ︙ | |||
1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 | $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) cipherstest.log: cipherstest$(EXEEXT) @p='cipherstest$(EXEEXT)'; \ b='cipherstest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) cts128test.log: cts128test$(EXEEXT) @p='cts128test$(EXEEXT)'; \ b='cts128test'; \ | > > > > > > > | 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 | $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) cipherstest.log: cipherstest$(EXEEXT) @p='cipherstest$(EXEEXT)'; \ b='cipherstest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) clienttest.log: clienttest$(EXEEXT) @p='clienttest$(EXEEXT)'; \ b='clienttest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) cts128test.log: cts128test$(EXEEXT) @p='cts128test$(EXEEXT)'; \ b='cts128test'; \ |
︙ | ︙ | |||
1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 | mont.log: mont$(EXEEXT) @p='mont$(EXEEXT)'; \ b='mont'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) optionstest.log: optionstest$(EXEEXT) @p='optionstest$(EXEEXT)'; \ b='optionstest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) pbkdf2.log: pbkdf2$(EXEEXT) @p='pbkdf2$(EXEEXT)'; \ b='pbkdf2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) | > > > > > > > | | | | 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 | mont.log: mont$(EXEEXT) @p='mont$(EXEEXT)'; \ b='mont'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ocsptest.sh.log: ocsptest.sh @p='ocsptest.sh'; \ b='ocsptest.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) optionstest.log: optionstest$(EXEEXT) @p='optionstest$(EXEEXT)'; \ b='optionstest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) pbkdf2.log: pbkdf2$(EXEEXT) @p='pbkdf2$(EXEEXT)'; \ b='pbkdf2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) pidwraptest.sh.log: pidwraptest.sh @p='pidwraptest.sh'; \ b='pidwraptest.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) pkcs7test.log: pkcs7test$(EXEEXT) @p='pkcs7test$(EXEEXT)'; \ b='pkcs7test'; \ |
︙ | ︙ | |||
1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 | rc4test.log: rc4test$(EXEEXT) @p='rc4test$(EXEEXT)'; \ b='rc4test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) rmdtest.log: rmdtest$(EXEEXT) @p='rmdtest$(EXEEXT)'; \ b='rmdtest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) | > > > > > > > | 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 | rc4test.log: rc4test$(EXEEXT) @p='rc4test$(EXEEXT)'; \ b='rc4test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) rfc5280time.log: rfc5280time$(EXEEXT) @p='rfc5280time$(EXEEXT)'; \ b='rfc5280time'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) rmdtest.log: rmdtest$(EXEEXT) @p='rmdtest$(EXEEXT)'; \ b='rmdtest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) |
︙ | ︙ | |||
1795 1796 1797 1798 1799 1800 1801 | $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) sha512test.log: sha512test$(EXEEXT) @p='sha512test$(EXEEXT)'; \ b='sha512test'; \ | < < < < < < < | 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 | $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) sha512test.log: sha512test$(EXEEXT) @p='sha512test$(EXEEXT)'; \ b='sha512test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ssltest.sh.log: ssltest.sh @p='ssltest.sh'; \ b='ssltest.sh'; \ |
︙ | ︙ | |||
1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 | $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) utf8test.log: utf8test$(EXEEXT) @p='utf8test$(EXEEXT)'; \ b='utf8test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ | > > > > > > > | 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 | $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) utf8test.log: utf8test$(EXEEXT) @p='utf8test$(EXEEXT)'; \ b='utf8test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) verifytest.log: verifytest$(EXEEXT) @p='verifytest$(EXEEXT)'; \ b='verifytest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ |
︙ | ︙ |
Changes to jni/libressl/tests/aeadtest.c.
︙ | ︙ | |||
130 131 132 133 134 135 136 137 138 139 140 141 142 143 | #endif } else if (strcmp(name, "chacha20-poly1305") == 0) { #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) *aead = EVP_aead_chacha20_poly1305(); #else fprintf(stderr, "No chacha20-poly1305 support.\n"); #endif } else { fprintf(stderr, "Unknown AEAD: %s\n", name); return -1; } if (*aead == NULL) return 0; | > > > > > > | 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | #endif } else if (strcmp(name, "chacha20-poly1305") == 0) { #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) *aead = EVP_aead_chacha20_poly1305(); #else fprintf(stderr, "No chacha20-poly1305 support.\n"); #endif } else if (strcmp(name, "chacha20-poly1305-old") == 0) { #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) *aead = EVP_aead_chacha20_poly1305_old(); #else fprintf(stderr, "No chacha20-poly1305-old support.\n"); #endif } else { fprintf(stderr, "Unknown AEAD: %s\n", name); return -1; } if (*aead == NULL) return 0; |
︙ | ︙ | |||
188 189 190 191 192 193 194 195 196 197 198 199 200 201 | } if (out_len2 != lengths[IN]) { fprintf(stderr, "Bad decrypt on line %u: %zu\n", line_no, out_len2); return 0; } out[0] ^= 0x80; if (EVP_AEAD_CTX_open(&ctx, out2, &out_len2, lengths[IN], bufs[NONCE], lengths[NONCE], out, out_len, bufs[AD], lengths[AD])) { fprintf(stderr, "Decrypted bad data on line %u\n", line_no); return 0; } | > > > > > | 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 | } if (out_len2 != lengths[IN]) { fprintf(stderr, "Bad decrypt on line %u: %zu\n", line_no, out_len2); return 0; } if (memcmp(out2, bufs[IN], out_len2) != 0) { fprintf(stderr, "Plaintext mismatch on line %u\n", line_no); return 0; } out[0] ^= 0x80; if (EVP_AEAD_CTX_open(&ctx, out2, &out_len2, lengths[IN], bufs[NONCE], lengths[NONCE], out, out_len, bufs[AD], lengths[AD])) { fprintf(stderr, "Decrypted bad data on line %u\n", line_no); return 0; } |
︙ | ︙ |
Changes to jni/libressl/tests/aeadtests.txt.
︙ | ︙ | |||
37 38 39 40 41 42 43 | AD: 68F2E77696CE7AE8E2CA4EC588E54D002E58495C CT: BA8AE31BC506486D6873E4FCE460E7DC57591FF00611F31C3834FE1C04AD80B66803AFCF5B27E6333FA67C99DA47C2F0CED68D531BD741A943CFF7A6713BD0 TAG: 2611CD7DAA01D61C5C886DC1A8170107 # # Test vector from draft-agl-tls-chacha20poly1305-04 section 7. # | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 | AD: 68F2E77696CE7AE8E2CA4EC588E54D002E58495C CT: BA8AE31BC506486D6873E4FCE460E7DC57591FF00611F31C3834FE1C04AD80B66803AFCF5B27E6333FA67C99DA47C2F0CED68D531BD741A943CFF7A6713BD0 TAG: 2611CD7DAA01D61C5C886DC1A8170107 # # Test vector from draft-agl-tls-chacha20poly1305-04 section 7. # AEAD: chacha20-poly1305-old KEY: 4290bcb154173531f314af57f3be3b5006da371ece272afa1b5dbdd1100a1007 NONCE: cd7cf67be39c794a IN: 86d09974840bded2a5ca AD: 87e229d4500845a079c0 CT: e3e446f7ede9a19b62a4677dabf4e3d24b876bb284753896e1d6 # # The following are ChaCha20-Poly1305 test vectors from: # https://code.google.com/p/chromium/issues/detail?id=341598 # AEAD: chacha20-poly1305-old KEY: 9a97f65b9b4c721b960a672145fca8d4e32e67f9111ea979ce9c4826806aeee6 NONCE: 3de9c0da2bd7f91e IN: AD: CT: TAG: 5a6e21f4ba6dbee57380e79e79c30def AEAD: chacha20-poly1305-old KEY: bcb2639bf989c6251b29bf38d39a9bdce7c55f4b2ac12a39c8a37b5d0a5cc2b5 NONCE: 1e8b4c510f5ca083 IN: 8c8419bc27 AD: 34ab88c265 CT: 1a7c2f33f5 TAG: 2875c659d0f2808de3a40027feff91a4 AEAD: chacha20-poly1305-old KEY: 4290bcb154173531f314af57f3be3b5006da371ece272afa1b5dbdd1100a1007 NONCE: cd7cf67be39c794a IN: 86d09974840bded2a5ca AD: 87e229d4500845a079c0 CT: e3e446f7ede9a19b62a4 TAG: 677dabf4e3d24b876bb284753896e1d6 AEAD: chacha20-poly1305-old KEY: 422a5355b56dcf2b436aa8152858106a88d9ba23cdfe087b5e74e817a52388b3 NONCE: 1d12d6d91848f2ea IN: 537a645387f22d6f6dbbea568d3feb AD: bef267c99aec8af56bc238612bfea6 CT: 281a366705c5a24b94e56146681e44 TAG: 38f2b8ee3be44abba3c010d9cab6e042 AEAD: chacha20-poly1305-old KEY: ec7b864a078c3d05d970b6ea3ba6d33d6bb73dfa64c622a4727a96ede876f685 NONCE: 2bca0e59e39508d3 IN: b76733895c871edd728a45ed1a21f15a9597d49d AD: cc1243ea54272db602fb0853c8e7027c56338b6c CT: 1fb9b2958fce47a5cada9d895fbb0c00d3569858 TAG: 042ad5042c89ebc1aad57d3fb703d314 AEAD: chacha20-poly1305-old KEY: 2c4c0fdb611df2d4d5e7898c6af0022795364adb8749155e2c68776a090e7d5c NONCE: 13ce7382734c4a71 IN: 0dc6ff21a346e1337dd0db81d8f7d9f6fd1864418b98aadcdb AD: 0115edcb176ab8bfa947d1f7c3a86a845d310bf6706c59a8f9 CT: dad65e4244a1a17ce59d88b00af4f7434bd7830ffdd4c5558f TAG: ac1437b45d8eacf9c0fe547c84fb82a2 AEAD: chacha20-poly1305-old KEY: c66e89fbab01208f6a60847f4f34b38d27b554c119cf8d9e0b118aa7266ab865 NONCE: 5d9856060c54ab06 IN: f9e3e9b5ed07b2080db8c1ffc37e4a6cb3cd544608921e18610d00b17c6e AD: 85c112a1efe0a20ef3a550526a7afbc98f6367ebbede4e703099abd78f51 CT: b5cc754f6dd19ef2d66f90e6bc9a322ddf216ef248cbe76b5ab6dd53bc36 TAG: 6dd98710d8a889dceea0d0a936f98617 AEAD: chacha20-poly1305-old KEY: a8b9766f404dea8cf7d7dfaf5822f53df9ccd092e332a57f007b301b507d5e14 NONCE: c7f2f7a233104a2d IN: 4d6faeaee39179a7c892faae3719656cc614c7e6ecd8fcb570a3b82c4dace969090338 AD: c6d83b6a56408a356e68d0494d4eff150530b09551d008373d6dee2b8d6b5619d67fdb CT: a15443f083316eef627a371f4c9ac654d0dd75255d8a303125e9f51af4233ff4ceb7fe TAG: 52504e880f6792a60708cc6db72eae42 AEAD: chacha20-poly1305-old KEY: 5e8d0e5f1467f7a750c55144d0c670f7d91075f386795b230c9bf1c04ba250bc NONCE: 88049f44ba61b88f IN: 51a1eebcc348e0582196a0bce16ed1f8ac2e91c3e8a690e04a9f4b5cf63313d7ad08d1efbff85c89 AD: 5d09bf0be90026f9fc51f73418d6d864b6d197ea030b3de072bd2c2f5cab5860a342abbd29dba9dc CT: 35aa4bd4537aa611fd7578fc227df50ebcb00c692a1cf6f02e50ed9270bd93af3bc68f4c75b96638 TAG: ccea1cbbc83944cc66df4dbf6fb7fc46 AEAD: chacha20-poly1305-old KEY: 21a9f07ec891d488805e9b92bb1b2286f3f0410c323b07fee1dc6f7379e22e48 NONCE: 066215be6567377a IN: c1b0affaf2b8d7ef51cca9aacf7969f92f928c2e3cc7db2e15f47ee1f65023910d09f209d007b7436ee898133d AD: dfdfdf4d3a68b47ad0d48828dc17b2585da9c81c3a8d71d826b5fa8020fee002397e91fc9658e9d61d728b93eb CT: 8ff4ceb600e7d45696d02467f8e30df0d33864a040a41ffb9e4c2da09b92e88b6f6b850e9f7258d827b9aaf346 TAG: 4eeddc99784011f0758ba5ebfba61827 AEAD: chacha20-poly1305-old KEY: 54c93db9aa0e00d10b45041c7a7e41ee9f90ab78ae4c1bba18d673c3b370abde NONCE: 3f2d44e7b352360f IN: 1241e7d6fbe5eef5d8af9c2fb8b516e0f1dd49aa4ebe5491205194fe5aea3704efaf30d392f44cc99e0925b84460d4873344 AD: f1d1b08dd6fe96c46578c1d1ad38881840b10cb5eae41e5f05fe5287223fa72242aea48cb374a80be937b541f9381efa66bb CT: 027b86865b80b4c4da823a7d3dbcf5845bf57d58ee334eb357e82369cc628979e2947830d9d4817efd3d0bc4779f0b388943 TAG: 4303fa0174ac2b9916bf89c593baee37 AEAD: chacha20-poly1305-old KEY: 808e0e73e9bcd274d4c6f65df2fe957822a602f039d4752616ba29a28926ef4a NONCE: 1b9cd73d2fc3cb8e IN: 3436c7b5be2394af7e88320c82326a6db37887ff9de41961c7d654dd22dd1f7d40444d48f5c663b86ff41f3e15b5c8ca1337f97635858f AD: d57cfbe5f2538044282e53b2f0bb4e86ea2233041fb36adb8338ded092148f8c2e894ef8766a7ec2dd02c6ac5dbab0c3703c5e9119e37c CT: 9b950b3caf7d25eaf5fca6fa3fe12ed077d80dcd5579851233c766bb8bb613ec91d925a939bb52fb88d5eda803cfe2a8cda2e055b962fd TAG: 6bf5b718f5bbe1395a5fdfcbbef752f5 AEAD: chacha20-poly1305-old KEY: 4adfe1a26c5636536cd7cb72aa5bded0b1aa64487ad0e4078f311e8782768e97 NONCE: d69e54badec11560 IN: 19b3f9411ce875fcb684cbdc07938c4c1347e164f9640d37b22f975b4b9a373c4302ae0e7dfdeba1e0d00ced446e338f4c5bc01b4becef5115825276 AD: bda1b0f6c2f4eb8121dcbd2eebd91a03ae1d6e0523b9b6f34b6f16ceca0d086654fb0552bfd5c8e1887730e1449ea02d7f647ae835bc2dab4bbc65b9 CT: ea765a829d961e08bacaed801237ef4067df38ad3737b7c6de4db587a102a86fc4abbaabea0ee97c95ca7f571c7bab6f38cbae60cd6e6a4ce3c7a320 TAG: b425cdf10cd0123a7e64b347c6b4b1f0 AEAD: chacha20-poly1305-old KEY: eb3db86c14b7cc2e494345d0dfb4841bbd3aa1e2bc640cca0c6c405520685639 NONCE: 88b54b28d6da8c81 IN: f75c0a357271430b1ecff07a307b6c29325c6e66935046704a19845e629f87a9e3b8aa6c1df55dd426a487d533bb333e46f0d3418464ac1bef059231f8e87e6284 AD: 34b08bb0df821c573dcb56f5b8b4a9920465067f3b5bf3e3254ea1da1a7fc9847fd38bdfe6b30927945263a91fa288c7cf1bee0fddb0fadf5948c5d83eb4623575 CT: 146ec84f5dc1c9fe9de3307a9182dbaa75965bf85f5e64563e68d039a5b659aa8863b89228edb93ff3d8c3323ab0d03300476aa4aca206d4626a6b269b2078912d TAG: 0058a8dff32c29935c62210c359bd281 AEAD: chacha20-poly1305-old KEY: dd5b49b5953e04d926d664da3b65ebcffbbf06abbe93a3819dfc1abbecbaab13 NONCE: c5c8009459b9e31a IN: f21f6706a4dc33a361362c214defd56d353bcb29811e5819ab3c5c2c13950c7aa0000b9d1fe69bb46454514dcce88a4a5eda097c281b81e51d6a4dba47c80326ba6cea8e2bab AD: fe6f4cbb00794adea59e9de8b03c7fdf482e46f6c47a35f96997669c735ed5e729a49416b42468777e6a8d7aa173c18b8177418ded600124a98cbb65489f9c24a04f1e7127ce CT: 911ead61b2aa81d00c5eff53aeea3ab713709ed571765890d558fb59d3993b45f598a39e5eff4be844c4d4bd1ef9622e60412b21140007d54dcf31b2c0e3e98cf33a00fd27f0 TAG: d38d672665e2c8c4a07954b10ecff7d9 AEAD: chacha20-poly1305-old KEY: 3b319e40148a67dc0bb19271d9272b327bc5eee087173d3d134ad56c8c7dc020 NONCE: ce5cf6fef84d0010 IN: 27b5627b17a2de31ad00fc2ecb347da0a399bb75cc6eadd4d6ee02de8fbd6a2168d4763ba9368ba982e97a2db8126df0343cdad06d2bc7d7e12eec731d130f8b8745c1954bfd1d717b4ea2 AD: a026b6638f2939ec9cc28d935fb7113157f3b5b7e26c12f8f25b36412b0cd560b7f11b62788a76bd171342e2ae858bcecb8266ff8482bbaed593afe818b9829e05e8e2b281ae7799580142 CT: 368fb69892447b75778f1c5236e1e9d5d89255c3d68d565a5bba4f524d6ad27de13087f301e2ef4c08f5e2c6128b1d3e26de845c4ac4869e4c8bd8858ad0d26dec3b5d61a9e3666a3911ba TAG: 2e70564c3999c448d92cc6df29d095c4 AEAD: chacha20-poly1305-old KEY: 43bf97407a82d0f684bb85342380d66b85fcc81c3e22f1c0d972cd5bfdf407f4 NONCE: 8b6ba494c540fba4 IN: 4b4c7e292a357f56fdf567c32fc0f33608110d7ce5c69112987d7b5a0bd46d8627a721b0aed070b54ea9726084188c518cba829f3920365afc9382c6a5eb0dd332b84612366735be2479b63c9efc7ff5 AD: 1e0acf4070e8d6758b60d81b6d289a4ecdc30e3de4f9090c13691d5b93d5bbcef984f90956de53c5cf44be6c70440661fa58e65dec2734ff51d6d03f57bddda1f47807247e3194e2f7ddd5f3cafd250f CT: d0076c88ad4bc12d77eb8ae8d9b5bf3a2c5888a8d4c15297b38ece5d64f673191dc81547240a0cbe066c9c563f5c3424809971b5a07dcc70b107305561ce85aecb0b0ea0e8b4ff4d1e4f84836955a945 TAG: 75c9347425b459af6d99b17345c61ff7 AEAD: chacha20-poly1305-old KEY: 12fc0bc94104ed8150bde1e56856ce3c57cd1cf633954d22552140e1f4e7c65d NONCE: d3875d1b6c808353 IN: 24592082d6e73eb65c409b26ceae032e57f6877514947fc45eb007b8a6034494dde5563ac586ea081dc12fa6cda32266be858e4748be40bb20f71320711bf84c3f0e2783a63ad6e25a63b44c373a99af845cdf452c AD: b8be08463e84a909d071f5ff87213391b7da889dc56fd2f1e3cf86a0a03e2c8eaa2f539bf73f90f5298c26f27ef4a673a12784833acb4d0861562142c974ee37b09ae7708a19f14d1ad8c402bd1ecf5ea280fab280 CT: 9d9ae6328711fb897a88462d20b8aa1b278134cdf7b23e1f1c809fa408b68a7bfc2be61a790008edaa98823381f45ae65f71042689d88acfa5f63332f0fba737c4772c972eba266640056452903d6522cefd3f264e TAG: e9c982d4ade7397bcfaa1e4c5a6cd578 AEAD: chacha20-poly1305-old KEY: 7b6300f7dc21c9fddeaa71f439d53b553a7bf3e69ff515b5cb6495d652a0f99c NONCE: 40b32e3fdc646453 IN: 572f60d98c8becc8ba80dd6b8d2d0f7b7bbfd7e4abc235f374abd44d9035c7650a79d1dd545fa2f6fb0b5eba271779913e5c5eb450528e4128909a96d11a652bf3f7ae9d0d17adbf612ec9ca32e73ef6e87d7f4e21fe3412ce14 AD: 9ff377545a35cf1bfb77c734ad900c703aee6c3174fdb3736664863036a3a9d09163c2992f093e2408911b8751f001e493decc41e4eeeed04f698b6daed48452a7e1a74ec3b4f3dcf2151ca249fa568aa084c8428a41f20be5fd CT: 229da76844426639e2fd3ef253a195e0a93f08452ba37219b6773f103134f3f87b1345f9b4bf8cfc11277c311780a2b6e19a363b6ac2efe6c4cc54a39b144e29c94b9ebbde6fd094c30f59d1b770ebf9fcad2a5c695dc003bf51 TAG: b72acab50131a29558d56ae7b9d48e4e AEAD: chacha20-poly1305-old KEY: 4aeb62f024e187606ee7cc9f5865c391c43df1963f459c87ba00e44bb163a866 NONCE: 9559bd08718b75af IN: c5d586ceece6f41812c969bcf1e727fe6ff8d1ae8c8c52367c612caa7cdf50e0662f5dffc5ea7d3cc39400dfe3dc1897905f6490fd7747b5f5f9842739c67d07ce7c339a5b3997a7fb4cd0d8e4817ff8916b251c11ef919167f858e41504b9 AD: 51f5b503b73a5de8b96534c2a3f2d859ece0bd063ea6dfa486a7eec99f6c020983f7148cccb86202cf9685cc1cc266930f04e536ad8bc26094252baa4606d883bd2aeed6b430152202e9b6cc797ff24fc365315ed67391374c1357c9a845f2 CT: 252ea42b6e5740306816974a4fe67b66e793ebe0914778ef485d55288eb6c9c45fa34ac853dc7a39252520514c3cb34c72b973b14b32bc257687d398f36f64cc2a668faffa7305ab240171343b5f9f49b6c2197e4fbe187b10540d7cdcfa37 TAG: 711ff33ef8d2b067a1b85c64f32f1814 AEAD: chacha20-poly1305-old KEY: 9a19e72f005cae1ae78b8e350d7aabe59fc8845999e8c52fad545b942c225eaf NONCE: d9dae2ea8d2ffc31 IN: 2110378d856ded07eb2be8e8f43308e0c75bc8a3fcc7b1773b0725b7de49f6a166c4528e64120bdf7c9776615d3ce6feeb03de964a7b919206a77392f80437faceb6745845cafc166e1c13b68e70ca2a1d00c71737b8fcbbbd50902565c32159e05fcd23 AD: 1cd73b72c4e103afbefd7c777e0480f3f5e68c60b85bd2e71ef5caebb175d7fc6535d39f38f92c24f2eb0fe97d878ed3d5967c0bb4394a5d41f7d34cda6e1523d3848f049cde554a7d31e1afeab5d3e6150f85858335cbd28c8a7f87d528058df50eea06 CT: 5f009fbce4ec8e4ca9d8d42258b1a3e4e920b2fbad33d5e9f07557d9595e841025193b521ba440110dd83958e8ee30219d952b418e98a6c624894aa248aedc0678f2d263e7bfaf54ca379fef6c5d2f7ac422ea4b4369408b82d6225a7a2cf9a9f46fd4ef TAG: aa0a5fa7d3cf717a4704a59973b1cd15 AEAD: chacha20-poly1305-old KEY: ba1d0b3329ecc009f1da0fab4c854b00ad944870fdca561838e38bad364da507 NONCE: 8a81c92b37221f2f IN: 6289944ffa3ccea4bf25cd601b271f64e6deb0eba77d65efb4d69ca93e01996e4727168b6f74f3ccf17bd44715f23ceb8fc030c0e035e77f53263db025021fd2d04b87a1b54b12229c5e860481452a80a125cb0693a2ba1b47e28ee7cbaf9e683c178232c7f6d34f97 AD: e57883961b8d041d9b9eeaddcfd61fa9f59213f66571fadffffdd1498b9b014f1ef2e7e56c3044d7f9fa7a1403a1169e86430a2a782137093f5456e142aad03a5f7a66d38009dd01b7fc02c9cf61642dedaf7cc8d46066c281ee17780674c3a36eae66c58d2d765075 CT: 9c44d9135db0dbf81c862c1f69bec55a279794cdd29a58e61909aa29ec4c120c9c5a508d856b9e56138095714a4bb58402a1ad06774cf4ecdf2273839c0007cb88b5444b25c76f6d2424281101d043fc6369ebb3b2ff63cdb0f11a6ea1b8a7dafc80cdaef2813fa661 TAG: 65c746f659bcbdcd054e768c57c848c9 AEAD: chacha20-poly1305-old KEY: 0cf8c73a6cffc1b8b2f5d320da1d859d314374e4a9468db7fd42c8d270b7613a NONCE: 3c4c6f0281841aff IN: 4434728d234603c916e2faa06b25d83bad3348990ecde2344368d1a7af1309bd04251bb2e0b72044948f8dea33cce2618283b6af742073a9586b26c1089335fe735141e099785a1235810a3a67ff309e2f0ce68220ba0077ad1a5dc1a4aef898a3b9ff8f5ad7fe60149bd0bd6d83 AD: a38d09a4f1c9241623c639b7688d8d35345ea5824080c9d74e4352919db63c74d318f19e1cbb9b14eebd7c74b0ad0119247651911f3551583e749ea50ff648858dcaaa789b7419d9e93a5bf6c8167188dbac2f36804380db325201982b8b06597efeb7684546b272642941591e92 CT: bdfbfea261b1f4c134445321db9e6e40476e2dd2f4e4dbe86e31d6a116d25830762e065b07b11a3799aab93a94b4f98c31c0faeb77ec52c02048e9579257e67f5a6bae9bc65210c25b37fc16ee93bda88fd5f30a533e470b6188c6ce5739fa3e90f77120b490fc1027964f277f40 TAG: 4993ee9582f58eabdb26b98c4d56a244 AEAD: chacha20-poly1305-old KEY: 69f4e5788d486a75adf9207df1bd262dd2fe3dd3a0236420390d16e2a3040466 NONCE: 6255bf5c71bb27d1 IN: c15048ca2941ef9600e767a5045aa98ac615225b805a9fbda3ac6301cd5a66aef611400fa3bc04838ead9924d382bef8251a47f1e487d2f3ca4bccd3476a6ca7f13e94fd639a259ef23cc2f8b8d248a471d30ac9219631c3e6985100dc45e0b59b8fc62046309165ddb6f092da3a4f067c8a44 AD: 0c83039504c8464b49d63b7f944802f0d39c85e9f3745e250f10119fa2c960490f75ae4dced8503b156d072a69f20400e9494ab2fa58446c255d82ff0be4b7e43046580bc1cf34060c6f076c72ea455c3687381a3b908e152b10c95c7b94155b0b4b303b7764a8a27d1db0a885f1040d5dbcc3 CT: f0bb2b73d94f2a7cef70fe77e054f206998eacf2b86c05c4fa3f40f2b8cebf034fe17bcbee4dea821f51c18c0aa85b160f8508bd1dc455cc7f49668b1fb25557cdae147bf2399e07fcacaca18eccded741e026ef25365a6b0f44a6b3dd975ee6bb580f5fccd040b73c18b0fbf8f63199ba10fe TAG: 4236a8750f0cafee3c4a06a577a85cb3 AEAD: chacha20-poly1305-old KEY: ad7b9409147a896648a2a2fe2128f79022a70d96dc482730cd85c70db492b638 NONCE: a28a6dedf3f2b01a IN: 791d293ff0a3b8510b4d494b30f50b38a01638bf130e58c7601904f12cb8900871e8cf3d50abd4d34fda122c76dfee5b7f82cd6e8590647535c915ae08714e427da52f80aef09f40040036034ca52718ea68313c534e7a045cd51745ec52f2e1b59463db07de7ca401c6f6453841d247f370341b2dbc1212 AD: 9a6defddb9b8d5c24a26dd8096f5b8c3af7a89e1f7d886f560fabbe64f14db838d6eb9d6879f4f0b769fe1f9eebf67fcd47b6f9ceb4840b2dba7587e98dc5cae186ef2a0f8601060e8058d9dda812d91387c583da701d2ba3347f285c5d44385a2b0bf07150cbc95e7fcfa8ae07132849a023c98817c03d2 CT: c2f109d6d94f77a7289c8a2ab33bc6a98d976554721b0c726cbf4121069473e62ba36e7090e02414f3edc25c5d83ac80b49ad528cda1e3ad815b5a8c8ae9ad0753de725319df236983abd3f69ab4465d9b806c075b1896d40bdba72d73ba84c4a530896eb94ffccf5fb67eb59119e66a1861872218f928cf TAG: e48dc0153d5b0f7edb76fc97a0224987 AEAD: chacha20-poly1305-old KEY: 48470da98228c9b53f58747673504f74ca1737d7d4bb6dbf7c0cba6ca42f80b9 NONCE: 56fb4923a97e9320 IN: bc6626d651e2b237f22ee51608ddcffeba5f31c26df72f443f701f2b085d6f34f806e29673584cb21522179edb62a82427d946acabce065b88b2878e9eb87ed1004e55ef58f51ec46375ac542c5782725ff013136cb506fcf99496e13fcd224b8a74a971cc8ddb8b393ccc6ac910bd1906ea9f2ed8a5d066dc639c20cd AD: df8ab634d3dca14e2e091b15ecc78f91e229a1a13cba5edd6526d182525ec575aa45bc70fb6193ffcd59bad3c347159099c4f139c323c30a230753d070018786b2e59b758dd4a97d1a88e8f672092bef780b451fd66ba7431cbb5660ea7816cdf26e19a6ebb9aadc3088e6923f29f53f877a6758068f79a6f2a182b4bf CT: a62e313ecf258cc9087cbb94fcc12643eb722d255c3f98c39f130e10058a375f0809662442c7b18044feb1602d89be40facae8e89ca967015f0b7f8c2e4e4a3855dbb46a066e49abf9cef67e6036400c8ff46b241fc99ba1974ba3ba6ea20dc52ec6753f6fc7697adbccd02b0bbea1df8352629b03b43cc3d632576787 TAG: 675287f8143b9b976e50a80f8531bd39 AEAD: chacha20-poly1305-old KEY: b62fb85c1decd0faf242ce662140ad1b82975e99a3fa01666cac2385ab91da54 NONCE: 2f4a5ca096a4faf8 IN: 03b14f13c0065e4a4421de62ab1d842bffb80f3da30bf47d115c09857f5bdd5756fd7c9ac3d9af1c9fb94f2640f7f4386cfba74db468e5288dbe4dd78bfe4f69e41480ca6138e8beacc6eaa3374157c713cfa900c07dd836eaecc8827fa3e70e052ae09e8473e2ae1a10b1bb669ef60a8dd957f6553daa8114918e17371f2ac327bd AD: cfe3b7ab7550b0e8e2e8235fa0dcef95647ce6814abd3dc3f5a3bd7d6d282504660c34ad8341e4d11402c7d46c83a494d7ddb105e1002979023e0e3dc2978c9ae53e10eb8567e7a02b60e51e945c7040d832ca900d132b4205a35034fed939a1b7965183c25654931a9b744401c4649c945710b0d9733b87451348b32ba81de30ea7 CT: 8965db3d3ae4fb483208f147276e7d81b71a86e7202ffc9b1eaade009bc016838dc09ca4bcf30887b2f4243fbd652cd90ebed1ceef8151ff17ea70518d03b0f2a24960aa7de9b30fa65c2e2d57360061aae6d9376e984e9fcd5e5dd0911a4bc8deca832ffb76f252bd7da523076593ba6b174f7d9fb0377e066ecbb6638036241e86 TAG: 3d0fc53e9058c2be32aa0850e0fab5a6 AEAD: chacha20-poly1305-old KEY: de9c657258774d4ebc09d109a0fc79d66493ae578797cac4eb8830a6a4b547e0 NONCE: b5e35fe3398efa34 IN: 4d68fb683aa4f4c7a16ba1114fc0b1b8d8898610fa2763e435ded8771b3651078bef73d4dfd14e76a34cd5eb9ef4db4ead4da9e83f4ce50fe059977b2d17d687c29335a04d87389d211f8215449749969f7652dc1935a0f9a94538dc81dc9a39af63446a6517609076987920547d0098a9c6766cf5e704883ea32feaea1889b1554b5eb0ce5ecc AD: 436ea5a5fee8293b93e4e8488116c94d3269c19f1d5050def23d280515457b931bbed64a542b317cc5023d648330a4b7adca14dd6f3783207b94f86ccaa0a0ac39b7db00ac87a99e3cd8a764ed9c75da8454479636ab2b29e770b166a5b75cacc425c919bf1ce9ac34afe6b4425c3d9fd2e48bc81e7d15516d60e592bfcc2ebefb660f0995f2b5 CT: 97a97b8f0f5420845ae8d57567f9bba693d30e6db916fad0b971f553ad7d993f806f27ab8b458d8046062ced4778c004b4f958a4436141637c6039963308dea2f54008b7feab79650295ed41bf9e65e1a2d75ab1c7b2a70ebb9e9f38d07a9a672d3e95ea78afe9ac02f2566b48b0251aef6eeeca8bd15bd8d43b559426aa9d15d960ee35cb3edf TAG: e55dbb21851e8a5b365f86d02518331c AEAD: chacha20-poly1305-old KEY: 6885bd333c336c7672db8ebdf24c1a1b605c5a4ae279f0f698162f47e6c73401 NONCE: f0c4a213a6168aab IN: fa905a2bfa5b5bad767239fb070a7bc0b303d1503ecd2b429418cc8feba843e5444ed89022fdb379c3b155a0f9ceab2979000a0f60292a631771f2fde4ef065aa746426609082969530a9c70ad145308c30ba389ea122fd766081511a031ce3a0bd9f9f583c7000b333b79ac004fbde6ec3eb2d905977ff95dcff77858e3c424fe8932a6a12139e6ec8d5e98 AD: 8ded368f919efb522bb6a9ad009e02ffbc6a16536e34d95cdb34f1153d7cb7b0f3c2b13dd05cedae27cfe68ec3aca8047e0930a29c9d0770c1b83c234dcb0385deae7ae85da73a5f8de3dfb28612a001f4e552c4f67ae0e2ec53853289b7017a58591fd6f70b0e954876bb2f7ec33001e298856a64bb16181017ba924648c09fc63c62eff262c80d614679bd CT: 0cb3d6c31e0f4029eca5524f951244df042fc637c4162511fea512a52d3f7581af097eb642e79e48666cb1086edbd38c4777c535a20945fabc23e7c9277e2b960aac46865f1026eb6da82759108b9baece5da930ccfc1052b1656b0eadaa120ed0c45ad04b24ae8cdb22ceab76c5f180b46a392ab45b1b99c612546e6b947f4d5c06ad5abee92ff96345ad43 TAG: d3b541ac446c84626daf800c0172eec6 AEAD: chacha20-poly1305-old KEY: fbc978abb1240a6937ccc16735b8d6ed5411cdbc1897214165a174e16f4e699b NONCE: 7968379a8ce88117 IN: 1a8196cd4a1389ec916ef8b7da5078a2afa8e9f1081223fa72f6524ac0a1a8019e44a09563a953615587429295052cc904b89f778ef446ed341430d7d8f747cf2db4308478524639f44457253ae5a4451c7efca8ae0b6c5c051aaa781e9c505489b381a6dcba87b157edc7f820a8fbaf2a52e484dc121f33d9d8b9ac59d4901d6ed8996ed4f62d9d4d82274c449cd74efa AD: 3913cd01299b8a4e507f067d887d7e9a6ded16dd9f9bb3115c5779aa14239fd33ee9f25756d45262dc3011069356425b5c81a4729594e17c9747119f81463e85625d5603d05e00f568b0c800bb181eb717be8d7a93166a504ce1bc817e15530c5bd2b3df1d4222245ea78a38bc10f66c5cf68d661503131f11af885c8a910b6dce70bc3a7448dfae00595beb707fe054d3 CT: d152bcb4c24c3711b0fad28548dc4db605bbc89237cdbea7dbf956b8855d1161a0781f27bd56d798141e2ace339955efb98fe05d9b44cd011e645106bf47726183958cb6df34ce5766695f60bc70b6fe0fabb9afa009a8ef043dbf75f861881368fa07726625448fe608d578cdc48277f2dc53eaaf1bdc075269a42f9302a57cad387a82c6969608acacda20e1cac4596c TAG: 945dca73cf2f007ae243991c4fbe0479 AEAD: chacha20-poly1305-old KEY: 77d1a857fbadfe01aba7974eea2dfb3dc7bf41de73686aece403993e5016c714 NONCE: fdd913a321c40eb0 IN: db8915bfe651e2ecb3ce0b27d99a6bfa7a7c507cfcb2987293018636c365a459c6a138b4428be538413db15bda69e697cbb92b154b7f4d2cbb07965225aa6865d7dcd1ba2c17c484b00b1986fed63e889f25a4966dc3ed4273f1577768f665362d7d3e824484f0dded7f82b8be8797ad951719719365e45abbf76324bc7d657799d4d4f4bb1dba67d96ab1c88519a5bee704f7214814 AD: 3cb2c06c20cb0832bbacebfc205d77393ca1816346ea2681de4d3ab1fadb774ad273e4713290454496f5281ebc65e04cfe84ed37cd0aedc4bbe3decbd8d79d04a4e434876650e0d64309e336bfb10e924066a64acb92260b2dbd96735d03af03909aa6a80a6e89fda81037257aec21fe9be7e91a64e88e0a58fa38ecba4c4c4cffb61958f3c486cbb0b1d0b0014a2d1d3df248eec1ca CT: acb825e6023b44b03b2efc265603e887954e8612b2ee134bdcb61501cfb9492952bf67be597c3a005b09af74d9e421a576d2c65e98104780feab838d8cb1bd135452ea39dc8907a4c1a6a9161805e4fa3e16989e6a418a7eea2582bf895da967028eab7c95d846a6de4b9980785814cf00484baa2f6de609912fff689bce6e854261ffe866bd8e63274605c7c5ad677bd7897ade543e TAG: 938478a41a3223a2199f9276d116210f AEAD: chacha20-poly1305-old KEY: b7e9b90dc02b5cd6df5df7283ef293ed4dc07513d9e67331b606f4d42dec7d29 NONCE: a6c191f6d1818f8e IN: 2ada0e3c7ca6db1f780ce8c79472af4e8e951ddc828e0d6e8a67df520638ff5f14a2f95a5e5931749ae2c4e9946ae4d5eb5de42fb5b77d2236e2e2bd817df51be40b1b8a6c21015a7c79fe06dba4a08b34013dfa02747b5f03930268404c455dc54a74d9c6e35485e10026da573cb41cd50b64cfafe4cfcdf3c9684ef877e45d84e22bd5e15fa6c8fd5be921366ff0dc6fe2df45f7252972c9b303 AD: 0f4269ed5ef0bfff7be39946a4e86e8bf79f84b70cd0b14fecb7be3c071316ce86de3d99d6871e0ba5667d9d7bba7dcaba10cb2a36668b6c3e2fb6c102938b75008bb9c213ebf9b85b5e91a802df0d31d7f11d764b2289f6225212694ab6b7c0e3ff36e84245d9f4f43fc5f98e654dea7ba9bd918658879c5bb4a1642af0d83113e3cf935d3c0d5208318f66f654eb17d8c28a602543e77ad3e815 CT: 22586fe7338e99cdaad9f85bd724ba4cfe6249b8a71399f9a3707b5c4323b8d96679568dfc8d230aefb453df596e13eb3e8a439249bd64bc93a58f95089a62b94f6562b821c83d91f56c55147381e9de4beb4ae81bd6fe7caef7e7e9a2078f2fba8f3e70d4910da9accc92b8e81a61b0fefbece4bd89443e66e8ddda8e47a66a62f17fd0e7d0a4852ce1a4d43d72a0b5e8914bbec698f060f2b092 TAG: c082470297da8c5f682a169d28bc0239 AEAD: chacha20-poly1305-old KEY: 6b2cb2678d1102f2fbbd028794a79f14585c223d405e1ae904c0361e9b241e99 NONCE: 7b3ae31f8f938251 IN: b3cb745930e05f3ab8c926c0a343a6eb14809fd21b8390a6fcc58adb5579e5432021765b2d249a0ecf6ba678634c4f53f71495865f031ee97aa159f9ead3a3fcb823ee5238bdf12706a9c6137d236e2e7110ce650c321e41daf0afd62bab2a8fe55d7018de49a14efe6d83a15b2f256d595e998d25309f23633360f5745c50c4e5af8ccc9a8a2cb47064105a023e919c7795d2dc331d3f2afb8c42e5c0bcc26d AD: 1c32fd3df22b3e440e2a3c7a7624990194cb16a5f74af36f87fd6ca7d410ce9064316a2d091945deef7d9b35ceec8396069307caced2b80afd7d53ec479c35cedf2dfd4c95c3dd8400f71ad34028c6e4f8681d93d0774064ba38f3fb9b0c1dfa1f5f0c7d20676a5911d999fb6a1d41367a8e99d852bf3d3b7b3f4c233249ed1ca135389a674ff48232ded3f6800a97b6d409c40e6cd70d09bf9d2ad25d9b9485 CT: ef70c7de98ab1d4ad817024a970be463443640eb0cd7ff234bdd00e653074a77a1d5749e698bd526dc709f82df06f4c0e64046b3dc5f3c7044aef53aebb807d32239d0652dd990362c44ec25bf5aeae641e27bf716e0c4a1c9fbd37bbf602bb0d0c35b0638be20dd5d5891d446137e842f92c0ee075c68225e4dbacb63cc6fb32442b4bcda5e62cb500a4df2741a4059034d2ccb71b0b8b0112bf1c4ca6eec74 TAG: 393ae233848034248c191ac0e36b6123 AEAD: chacha20-poly1305-old KEY: 4dbc80a402c9fceaa755e1105dc49ef6489016776883e06fcf3aed93bf7f6af7 NONCE: 2358ae0ce3fb8e9f IN: 197c06403eb896d2fa6465e4d64426d24cc7476aa1ae4127cd2bd8a48ce2c99c16b1cbf3064856e84073b6cf12e7406698ef3dd1240c026cbd1ab04ee603e1e6e735c9b7551fd0d355202b4f64b482dd4a7c7d82c4fe2eb494d0d5e17788982d704c1356c41a94655530deda23118cba281d0f717e149fbeb2c59b22d0c0574c1a2e640afad1a6ceb92e1bf1dde71752a1c991e9a5517fe98688a16b073dbf6884cfde61ac AD: cf6ce7b899fb700a90d2a5466d54d31358ecf0562e02b330a27ba0138006b342b7ed6349d73c4c5c6d29bde75a25089b11dac5b27adea7e7640ca1a7ceb050e3aae84a47e11640a6e485bd54ae9fdb547edc7313d24a0328429fcffd8b18f39880edd616447344ebeec9eadb2dcb1fa7e67179e7f913c194ebd8f5a58aea73b0c5d1133561245b6d9c5cfd8bb0c25b38ffb37db5e2de5cdded6b57355e9d215cb095b8731f CT: aa87f9a83048b6919c8f2b050315db4e2adae4a9c2ca0109b81961b520e63299dcb028cec0b9d3249a945ee67dd029b40f361245c740f004f8cf0d2214fcfa65e6124a3e74b78aa94345c46fdc158d34823ed249ee550431eaae9218367321cdd6e6a477650469bb3cc137a8f48d9cf27934b16703608b383d2145659922fb83bb2e7ee2ef938a90f2ff846a4a949129b1fb74dde55c5ae013c2f285de84f7dac7d1662f23 TAG: 06b4318ac7f65d556f781428a0514ffe AEAD: chacha20-poly1305-old KEY: 9e4a62016dae4b3223fed1d01d0787e31d30694f79e8142224fe4c4735248a83 NONCE: 263a2fc06a2872e7 IN: 5a46946601f93a0cee5993c69575e599cc24f51aafa2d7c28d816a5b9b4decda2e59c111075fb60a903d701ad2680bb14aeda14af2ae9c07a759d8388b30446f28b85f0a05cd150050bd2e715ff550ebbd24da3ebb1eac15aba23d448659de34be962ab3ab31cb1758db76c468b5bb8ce44b06c4e4db9bd2f0615b1e727f053f6b4ffb6358d248f022bcad6ca973044bed23d3920906a89a9a9c5d8024ec67d7f061f64529a955ce16b3 AD: 4cd65f68f9f88c0516231f2a425c8f8a287de47d409d5ecde3ad151e906b3839fb01bb91a456f20ea9d394d4b06604ab1f9009ef29019af7968d965d1643161ab33a5354cda2fdc9f1d21ec9cb71c325c65964a14f9b26eb16560beb9792075a1597394000fd5f331bd8b7d20d88e5f89cf8d0b33e4e78e4904bb59c9c8d5d31ac86b893e4a0667af1be85fdb77f7ec3e2594a68048d20c2fb9422f5879078772ee26a1c560cbcbb2113 CT: e944bb2ab06d138ad633c16ce82706ecf0ef5d119be1f3460c9ce101d9c4e04ef1677707fca40d1f8ca181e07273707b06624d6d7063c3b7b0bb0151b757b3e5237fb8004c161233d8bc7e5f28ea1c18da1874b3d54c5ad6ff0835eed35c8853704585cf83996e5e7cec68180af414e04f08134d3b0384ebdf0393c9310b55d8698fe10cb362defc0995e9a13b48b42cff61ffd9fe4c3c8c6dab355713b88f6e98a02e7231a0c6644ec4 TAG: 27de0d4ca7648f6396d5419a7b1243b7 AEAD: chacha20-poly1305-old KEY: 18ca3ea3e8baeed1b341189297d33cef7f4e0a2fab40ec3b6bb67385d0969cfe NONCE: b6aef34c75818e7c IN: ef6d1bb4094782f602fcf41561cba4970679661c63befe35ff2ca7ad1a280bf6b1e7f153fa848edfeffe25153f540b71253e8baba9aeb719a02752cda60ea5938aab339eead5aabf81b19b0fc5c1ed556be6ad8970ea43c303d3046205b12c419dea71c4245cfedd0a31b0f4150b5a9fe80052790188529ab32f5e61d8ccde5973ed30bdf290cbfbd5f073c0c6a020eac0332fced17a9a08cef6f9217bd6bef68c1505d6eed40953e15508d87f08fc AD: f40f03beaa023db6311bad9b4d5d0d66a58d978e0bcbbf78acebde1f4eb9a284095628955a0b15afc454152f962ec3ea2b9a3b089b99658e68ede4dee5acd56672025eb7323bcbc6ba5d91c94310f18c918e3914bbbf869e1b8721476f9def31b9d32c471a54132481aa89f6c735ab193369496d8dbeb49b130d85fbff3f9cb7dccea4c1da7a2846eef5e6929d9009a9149e39c6c8ec150c9ab49a09c18c4749a0a9fcba77057cdea6efd4d142256c CT: c531633c0c98230dcf059c1081d1d69c96bab71c3143ae60f9fc2b9cd18762314496ab6e90bf6796252cb9f667a1f08da47fc2b0eecda813228cae00d4c0d71f5e01b6ce762fa636efffe55d0e89fdc89ba42521cc019ab9d408fcd79c14914e8bbf0ea44d8a1d35743ad628327e432fdcfeb0b6679ddca8c92b998473732abd55dba54eefff83c78488eee5f92b145a74b6866531476fc46279d4fde24d049c1ce2b42358ff3ab2ba3a8866e547af TAG: a0a5242759a6d9b1aa5baf9a4ef895a2 AEAD: chacha20-poly1305-old KEY: 95fdd2d3d4296069055b6b79e5d1387628254a7be647baafdf99dd8af354d817 NONCE: cd7ed9e70f608613 IN: 0248284acffa4b2c46636bdf8cc70028dd151a6d8e7a5a5bc2d39acc1020e736885031b252bfe9f96490921f41d1e174bf1ac03707bc2ae5088a1208a7c664583835e8bb93c787b96dea9fc4b884930c57799e7b7a6649c61340376d042b9f5faee8956c70a63cf1cff4fc2c7cb8535c10214e73cec6b79669d824f23ff8c8a2ca1c05974dd6189cfee484d0906df487b6bd85671ce2b23825052e44b84803e2839a96391abc25945cb867b527cdd9b373fbfb83 AD: 24a45a3a0076a5bcfd5afe1c54f7b77496117d29f4c0909f1e6940b81dde3abacb71ec71f0f4db8a7e540bd4c2c60faee21dd3ce72963855be1b0ce54fb20ad82dbc45be20cd6c171e2bebb79e65e7d01567ad0eeb869883e4e814c93688607a12b3b732c1703b09566c308d29ce676a5c762a85700639b70d82aaef408cf98821a372c6a0614a73ba9918a7951ea8b2bb77cd9896d26988086d8586d72edc92af2042ff5e5f1429a22f61065e03cfcd7edc2a93 CT: 40c6318d9e383e107cdd3e1c8951562193c3ef64ee442432a63e2edefc78f32ab07772aeac172cb67ecf4d21f8b448423527bbeb9d8ddd0b46bdb27f74096ceb24e41963b4cdca176676a75bdbe3abc270b349ac0c6cbd9c3a5cd5bce20202fc5cc0c1bdd4fd25e121e0a24bd7bbeb9b19b1912467bf5338ee2ce88aa383c082b42cc399c9654ca325f35523e81438beb3f8926be79c378822d7c8f785614408a5f7cac49e4543188725643e6c1a70b46d0ec400 TAG: 5801e84192c7267f66b0e04607a39a3e AEAD: chacha20-poly1305-old KEY: 6ae1102f84ed4dc114bb9d63f4dc78d7dbb1ab63f1659dd95f47940a7b7a811f NONCE: c965d578ba91d227 IN: b82a8a9209618f1f5be9c2c32aba3dc45b4947007b14c851cd694456b303ad59a465662803006705673d6c3e29f1d3510dfc0405463c03414e0e07e359f1f1816c68b2434a19d3eee0464873e23c43f3ab60a3f606a0e5be81e3ab4aa27fb7707a57b949f00d6cd3a11ae4827d4889dd455a0b6d39e99012fd40db23fb50e79e11f8a6451669beb2fbd913effd49ad1b43926311f6e13a6e7a09cf4bebb1c0bf63ce59cd5a08e4b8d8dbf9d002e8a3d9e80c7995bb0b485280 AD: dfd4ac3e80b2904623ff79ea8ee87862268939decf5306c07a175b6b9da0eb13ac209b4d164755929e03240a0fe26599f136fb2afdffd12bb20354aa1d20e5799839abb68ae46d50c8974e13e361d87ef550fe6d82e8b5b172cf5cd08482efdef793ede3530d24667faf3a1e96348867c2942641f4c036981b83f50236b8e8a10b83ebf6909aad0076302f1083f72de4cf4a1a3183fe6ec6bfe2e73e2af8e1e8c9d85079083fd179ccc2ee9ff002f213dbd7333053a46c5e43 CT: a9aeb8f0a2b3ca141ac71a808dcc0c9798ac117c5d2bd09b3cfe622693a9f8ca62e841b58bddb2042f888e3099b53638b88dfc930b7a6ee4272d77e4b1d7e442bab6afbde96ab0b432f0092d9ca50eef42f63c60c09e7b8de019b32ebe4030c37b8183cc1e3b913b0ce4ee4d744398fa03f9af1c070bed8cdafd65b3a84140cb4deadc70184de757332ce3780af84353f540755227e886a8d7ad980f3dd6fd68263d82e93f883381dec888bc9f4f48349aa2b4c342cb9f48c6 TAG: f26b3af8a45c416291ce66330733b2f8 AEAD: chacha20-poly1305-old KEY: 405bb7b94715b875df068655f00513cb1ae23ffaac977ce273e57d3f83b43663 NONCE: 5c6da1259451119a IN: f9f143c0c52c94b4ba7b0608b144156a49e7b5d27c97315743d171911e3645ab7957c80924e3c6b9c22ab7a1cac4b7e9c0de84e49fd5e4a2d1ab51d764fc5670318688ec942f7ab34c331dce8f90fea6972e07f0dadec29d8eb3b7b6521ddd678a6527a962f4d8af78c077e27f7a0b2ef7eabd19e92b7f8c1e8fb166d4763ce9c40c888cf49aa9cdfc3e997c8fe1cce3fe802441bbd698de269ff316f31c196e62d12c6bb5cd93fb3c79ca6369f8c1ac9102daf818975ea7f513bb38576a AD: 6fe6446505677bf08b385e2f6d83ef70e1547712208d9cebc010cba8c16ea4ece058d73c72273eed650afdc9f954f35aa1bdf90f1118b1173368acbc8d38d93ebf85bd30d6dc6d1b90913790c3efa55f34d31531f70c958759b2ba6f956c6fcdd289b58cb4c26e9515bf550f0fd71ab8527f062c9505cbb16e8e037d34de1756bef02a133dbf4a9c00ac03befc3fb7f137af04e12595ce9560f98b612480fcdba3b8be01db56ebec40f9deae532c3b0370b5c23a2a6b02a4de69efa8900c CT: 1a4b073881922c6366680cc9c2a127b26f264148651b29abb0c388cf6c9b1865dba5a991e1f8309efbdb91bce44b278772c58fd41273526c33fec84beb53d1689b9da8483f71be6db73a73417069bb4cd3f195236e8d0a00d124eed3a6b6f89415b19a27fbe35774f6a1a6ee4bd4350b252b975f0db2d2eea82f4836350850d6290901e726e8af13644e2d98bc1d569c20800521e6affe976bd407049a2e6d9dd23f88d52e651391ecd2fc45b864310824aaadfa203762a77c1d64562dae TAG: 0060026d3efc120f11c0739959ae0066 AEAD: chacha20-poly1305-old KEY: 8c602bd94c630cd00c7a9c508067a5a9f133d12f06d9f6fe2a7b68dce4786d8a NONCE: 760de0f7b7cb67e2 IN: c3ff559cf1d6ba6c0cc793ca09a0ba573a28359386a6ec93e1bacd8e630209e0b477a20aedec3c9cbf513ee6a1e3887112218d6155b9875f7e6c4bbba2c31972e905d19f529f4f0f9502996199f94f8728ba8d6424bb15f87fcacd88bb42c63fcc513759712bd0172b1e87c9da122f1993ffb7efd3a5c34b240dd3db89dddea36dbeb2836d9f8648f8e7cd428c0f948097af753b35f9876059e7702027bb00dc69071206e785f48fcbf81b39cc0343974ac70784a2e60c0df93b40379bea4ad8cac625 AD: 9e14907c3a8e96c2636db1f3d78eb1f673d6ef043cbbb349467f1fe29bf60f23d5d5d1c3b133a8ad72065d822347541c13d1574baf737eb3cc3382fb479e6d5193b9c8e7d2444c66971ef099dc7f37f6cd97b9f7959d46e2cf25e8a5b3111b4d9e2ef906d905f0ee2d17587f7082d7c8e9a51509bde03d3d64338e1838d71700f1b4fcb100b5e0402969da462f26f974b4f9e766121f8fd54be99fc10beb9a606e13fbb1f960062815d19e67f80093360324013095719273c65542b0e31b1a2a3d928f CT: 2794e6e133f6892f23837fff60cf7c28ee9942f8982ef8089db117903d0143293fdf12ea1cc014bcd8806fb83c19570eed7af522db0de489bbc87133a13434518bcfb9cda4d9f6d832a69209657a447abf8afd816ae15f313c7ea95ec4bc694efc2386cdd8d915dc475e8fadf3421fbb0319a3c0b3b6dfa80ca3bb22c7aab07fe14a3fea5f0aee17ab1302338eeac010a04e505e20096a95f3347dc2b4510f62d6a4c1fae6b36939503a6ac22780a62d72f2fc3849d4ef21267fffdef23196d88fbb9b TAG: 457cce6e075ffdb180765ab2e105c707 AEAD: chacha20-poly1305-old KEY: bd68ff5eb296c71cfe6bc903c14907f7726bcb1331f0c75f7801cd1b7948f3a1 NONCE: 65a748004b352ba6 IN: 52bf78c00f6e5dca2fc60e2e9a52e827df97808e9cf727773860cafc89f4b64178a19b30b46ed813fe00c8f09b25a6a1b6e350d5b005122934a59bfbd5e6e0c635c84a5226c3f2f7dcf951560f18ac220453d583015fdb2e446c69c6e6fdecf2e595e04fab1b0c506e3c6bd5e4414a35f15021e97f447aa334f54a8f1ef942dec6273511b5668b696fca97188ff15ed84b2f46145cce031c1a7f00bd88bb83d90797edc46161b3fda7a2299173496d73b812139556e8b4eb318078b9eb2ae5046e83b79dd3d45950 AD: 5557b08a5010cbc9f46bb140c2505f68684eb24889324bff44b27234fd7a95a99cfb4ff90a8f9982085b725f78ac42eca6ce7f3314e457dc41f404008681a9d29ba765660de2e05bb679d65b81f5e797d8417b94eb9aabbd0576b5c57f86eae25f6050a7918e4c8021a85b47f7a83b4c8446898441c5cc4e0229776ef3e809cb085d71f3c75ec03378730cb066150f07e60f96aec983c0e7e72bf6bf87ae42228dfda195f97855fcdf4e6d1c4479d978abcfa276d16ed60ecbfbfc664041335ce65a40a2ca3424df CT: a5c8cf42287d4760fca755e2111817b981c47e85b0047de270ec301ca5f7b3679f4749210892b6ea6568f3a6a4344734a0efc0120ffedecf212d55cbcbb67815ac964875af45f735b70092a8f8435f52fc01b981ae971d486026fb69a9c3927acfe1f2eab0340ae95f8dbee41b2548e400805ece191db5fd1f0804053f1dbfaf7f8d6fded3874cb92d99a2729d3faaa60522060cf0b8101b463b3eb35b380fcddb6406c027d73fe701a5090c8dd531c203ce979e26b9ced3431e2b726a7244a20d9377bd62951bf5 TAG: 4579fa1fdb4c674cc3cd232b8da52a97 AEAD: chacha20-poly1305-old KEY: 934fd043c32d16a88fad01c3506469b077cb79d258b5664fa55ad8521afdcaa2 NONCE: c7091f6afbbeb360 IN: 2bdd1fc4f011ef97ea52ec643819941c7e0fb39023c2f3c7683804a0ddee14a5d1784a5246966d533b3538edc7d8742d27061c3cab88df0318ab242102de3a54d03632eeb871b72c7e8f8065b49f4a91e95e15f3f46b29fd76b8fcea0d23570c5530e3bbb8a6aafa9ae32c1b3eac653c5ed5fdb2da5a986075808f6385870c85b1913e26042a9d8e78f5bc2ea6de5a64f8aeafa22adcffc7f6932d543c29bb3a04614783f948680e433a71573568d2ce984d249fb4fc06a9f358c76aa3e64a357f4eae924c1356bd5baccf7e0f AD: f737dd85638eb324dd3891219c5eef7c2dd053cfd055d447a411eba304a4b27dce981d112c4540590933c153d603022c91ebd2b4a58069d27e6ca17a462ef822ca41bffa80b43a68b1b564644cb3c5a7f0fddf7a13a30ff24437fddd8ef93c6f6f205d054f81890d982bd4d4ece0b1563677e843fe48c1f54e9a57ed4da66061482712e710a401073be5080d5b8b96525bffa67de5af31d50385fbbf1a87c21bf0e0a1fdff69ec32c7b7103e0b8ee6c844245e0fc84b9f89fcce62966cea68e2871d3b82e8df424c76309fc88d CT: dd13fbf22c8d18354d774bcd18f7eb814e9b528e9e424abc4e3f2463195e8018576565d16ab48845d11c9277f2865ebb4dc412fd5b27078f8325eadf971e6944c66542e34d9dda971e2aba70dbd3e94a1e638d521477a027776b52acf90520ca229ebc760b73128879475d1cbe1f70fc598b549cd92d8a9ac6833e500c138c56474db84cb3d70b7aa4f293a4c2b4d818b0ff9fd85918dc590a12a8c0e375c4d98b7fc87596547eb960676aad5559834588f00f251a9d53f95c47af4df3c4299175d5211779c148cfc988a5e9d9 TAG: 476616ea15190c1093fdc4a087643cae AEAD: chacha20-poly1305-old KEY: f9f6eb9ad736a8f66e7459fef5ec2890188dc26baf34a95f6f0384e79f5c6559 NONCE: 7858dfc084fe4b0f IN: a644ca6e7cc076e87eb2929fd257693fce0f6fb64fd632f7f07c648ebd03696c8e262e6a810d7b7c4e5eef8c65b5323c99dbba50a70b4a9e5c2a9e7315973cd67f35d8052ce9a85a206416dd3031929f4f929b13d0a5fb10cb73c65f6c0ace019da146b51c5274a099f44e3669d26add6f2ff081e886f3cf952fe0dbbe6b0534c23e307574bd35fbd657f5fcbd5dc19fb382a1dc0a2dc8285a0350f71554e4c601497749e35567dd4a273cddc9a48ce53a5f1d297fd8baf8d1b9feb35d9151114345abada4d90db947bb9a743c175f5653d1 AD: 2048d1c2ddfb5ec385b201832c7a993f229ba72ec16d6ebf723ef0c5032b9966209a9e8a63151b40412e96b82f86728ea6588c7e8e11ac71cc8eabab8c4b54de866658d9c5011def61fb3dbe4e630158a45ea41a2ed55ebd1efb1abeda7637de6fa5fd2f151c6d2f385bf6cd002ca8b4a2896e0d65944ee913e3c784669dd201b1985ef3577f7f123a5f9bcffa176c8f557c4f729133cac518642f27d9b22ca9b97faaafe5b669a10b79ace4a7d5727df146c77ce681357d69f9c2d65b4401bd73cd113387e3b3a05d897adad7a24c485e7b CT: 4146faffd7313f5d9f625370d20413cc62ab65f4acfa3c7ee1125b937dd7a39f638fc46c8ed004fb525698de5d8620ec153435571817c3de257b0d0e648ebb92940c86a98262d54e764f28cbdd4f7d9bea970291f2110414f62064d7229c6332236c507b3dac742e651d85a2a22fb243c0cc7cc2d016e5bea38f33f9a9ce048944a5fe8b078d71d23168e12dfe5a0f0b829771edc7073fb96032b7be471337a37aca0cf7c0cdd543eed686cd34934717fd79a3f18492eef72f9f450b880aa7e2e1b65e3b04c22e72301338b43aa32ceec2e6 TAG: 10ffaf2be316676da02d7473a9df87b9 AEAD: chacha20-poly1305-old KEY: 29b19636cdd32507fd98ec4ee26caab1a917646fb8f05b0dc01728a9f4a127f0 NONCE: 06699d245916686d IN: 5fdf913aceab1d6dbaf7d9a29352fa8a3eb22718043a79cffa2fe8c35c820aec7c07644b8785dcf7a433b4189abb257fb12b06fae0662641011a069873c3e3c5ccc78e7358184a62c2005c44b8a92254958eb5ff460d73cd80284d6daba22c3faba046c5426fe8b7cacec64b235a8f8d3e2641e5bc378830594bcfb27c177aea745951ee5780a63705727ef42c4ad3abf556d88e3830f3db6b09e93edd09485cbf907f79de61f8dc5cb5fb7665ffa0ef53cb48702f6a81d8ad421cef20c1dbdf402b8fafed56a5361b2f93f914a2380fdd0557faf1f4de AD: 39116c49cc13adb065b92cb7635f73d5f6bf6b5ccbf72a3f65a5df6bd4a661105015358d9e69f42e98aed795e8161282bc113058b7ef3b9e23fcd8eeab34a392e03f4d6329c112cb968385ec52a7afc98bb8695785af6b27b700973cc952630b7247ce226b4fbb99b8a486370bf6345d4516c52c64e33f407c4f2d1ba90545c88732d98bbd97972ac5e94c694624a9b3782b0099824651cb7567914d25b3e13181a791dbcd40e76e836b3350d310a52151bf835d3c357c9871482c2928e8404c6e533406d4d6fa8f63366f2c4ed828141f1ff00f01a536 CT: 01e237220b619054a1f3670928fe67d40484b5af40fbd04d032500aac5acaa3b4584dd99a58c390627636a50de5d744f76a56a33205f9e3b00e16162eb47ff3333e1e208ca200f1a5338a86e17bd92dd2d16af8bb022a7dc05b923d019e05247f1a0d0b4bfcfce58dd6d83830705707676d55739abee89fcd5cb94b8fde006a5da02df64b00a467f45970b5ca440f22319b9735a55d454b9fba0588fef0c59d3d83823eba6e0601a96e10233826c5adeea6b2a51d386a07a9e047ad405b23d4c3d89f30c31e3199f0c8f927bfac43ceea1f969de0a8c0f TAG: 092f9f3c5d4f2570c9946c87967f4579 AEAD: chacha20-poly1305-old KEY: bae06b9b5456707551c7b0e207aae02a19b4848ad8ca4ce40705bf8c856a6e52 NONCE: 9c27065c3ef2d522 IN: 50cdd88137ff428a88e87b5845be4924f6387537bb5c0b654c80107ab5698db75b2e131848e7aec156d31aed0766d31c379fece4095d38264c6d5945974d25f729c3b0ba11ea853e9cebdb6f03bb670fce08adff74d0a8f02d633fb34e0fb7337a8e66e1c12084d914fb6173b8105684db822752c6751a372bb16690284d661b8b8bc6a6dfbddf45ebc2219596f9f2f878c118df69030de38b4d99dde43b9b9e20a3dab691645dd518342f49b06a0fe0a397adf261e99f07af5b0b3798b1022ba0939c42a54d3b93641cffa3c2e174bce9ab7ad7e7c7924308d1a77a AD: 5d5590db1bd316eb7a0e30e4c7a6dfdbef9d3287fdb8d824389599c3c2ee262b2192eb5b9708e66e22dbc7eca83fa1a995da3ce64c86fe5aa08b826d476dc439497e2d12e2702c63c8d27aa7f09fedee816dc8bffe1351d53271a34d4292b613b7efcedb7e3cf3e6ad389eef12471e9e20e38e7ae22a323abbadfe8f2e84271bffb1819feb4f77b82843cb8757cfae293631bc6d39669107e7015c85d7343ffa6fc1bbe6f5ab4de30cd752a281e03061ea89de2a3f5e90e20da22fd6e8525c100738667f42212b2cf45fcb23bbb54b21c117484b22c6e514685314df CT: 66b7f69ac49fab4e5975aeb6fa9287d8eac02ac312c4de78f77f59da16cbcf87274e66801c4b862c33ea79cdc76528862bb2956c06db8b8acfac4794ebf39e35ac03cc73a4351a4ff762f681a48d6f25cad36e2814c9b5c40b9ae92509e58429106847789454d376836936bebc7a80e6c66e7aa52936d6b361378a41f849ad4e48f9ee2d3e92217a908fa8eb35736ac8ada7d32ae05391f2d807be3512543c36138a5fe660dd4cd4cd184bb43b6ba6bc0bae634e2fa9669304cd510ed5103f630068ff76d3375738de60a381842b421477e25a490cdd6894b2704125 TAG: c9998a677dfb0e91924aec9de0afd585 AEAD: chacha20-poly1305-old KEY: 2cb374cb048c168f2e43597f028d9e73cade1b458284ffc260d4fc6b9011c414 NONCE: 9fb909169bc9f4e9 IN: 39eb929482784b463546f5d84f80510f2019923d465b99d194246d68c7ae343f91971d8f7059cebb86aa5dd099289aa648248b8c5ca04e66ac5e9bf06776e3883495397618a0227f035666806e636836b47d3d2d255a49db79866cf00d9ddabda259c4f968a1e01e651c7811cebbee2ee71803ea1d9d23487eb221f2d9555756800aba5e6abbefd6fb72b3151cc99ced599cd86df2a9b1ce94f89f347eeb124d9e7f0d9cc48d3dedd819e6d3dbac57ecee199547b266116a2035c9acc4c8ca3271ac74952372897c4a5f2cb84e2d81817fec9d6774f6d8a5b2021684132db4fca3 AD: 0c7bd4f3a30ee944ccf9489181e6911684dcffad4593a9b65a67dfc80718c69b35897d01281016b7731e12c15cad8482e79458e08a755622e3f3f22a23ef6c8487a36ad1771ba06c641f06f85de0db3776cc6df06ad8fe3b4d60d58508de943083f17cbb9dc0d390ac94d8429e8c6fcfe063f424fbde0f62f6a7f91a626d195dc498a6e69bd93109c4e9ba13e7330aba456d710a4b0cc279d4045660406e26d61dff70d4a33c4f1052869f9248024e7a0f85f1effb32f6f7ccb1f860f3ef04e8f7b29096e6bcf9d4b3e0ce703e9bf228fdf515c2ff9cbabd16987be0f9babd3d8a CT: 91ddadb86b7ebef798ddaa59da51d71316fcf6c9678143178227d778750dc9827fc6cc21e605c505023e6db25849df7fb6fc1ca4d223aa215f8c85b724643c83bf8218815a9f9e2952384e0ca6a80a3760b39daf91a3c6154c4728c2371fd181fa3764753d0b0c23808a82cd8f0497246e3a0f17f8906a07c725d2891ce968a9d432c2b102d85c05510b28e715bb60d0403a77490e7f18be81218bc4f39287b9bb09f50227dd2f55e4fb70c4438da8ba3c8ffbced87d90155913faa9979fc57e6cbeddfaba3d3ab4163c0eebc7d94279c27d3ed56338893dba542eaefba30f8c3b TAG: 728e60f8124effbac234f70da925881c AEAD: chacha20-poly1305-old KEY: f0f16b6f12b3840bbd1c4a6a0811eef237f1521b45de9986daec9f28fca6485c NONCE: 7ac93e754e290323 IN: 0530556424d823f90a7f1c524c4baa706aad2807e289e9479301e3e7a71f2a5e14e6232ea785f339c669af2e6d25f1d5a261096a548d23864945c3a589b67b09b0304a784d61b42b2419139485242e0d51fcbe9e8fed996d214de8717e6a71f8987ccad65eb92e66707034a5ae38e6486e26eb4374c565aad5df949dab209f7f7bcd8eb6fc52761a26cfe5d01fd349e59f4042e6dbe6b232f9301b971dee121d8aa1e62d40f043a42f3aa859d867eb809b1ced5ae1ec62cacf94a69fafd0631a8b5dfd66d855900fb295eec90ae5fcbf77beae267a79d24081bb322d8c4e0630fed252541b36 AD: 13bfcc17b810099cda31ca53a1323db9b07633ceb2088a42263a4cbd6a4d47978776005c9a20203319c3a3ae434e9a26fb541047dc9df38dc36c095267272e203d0b24d119a70a7e96041b6d82b7c4d5570e1e4a1cf2f6e44ae63fe005a1f5b900778c482f7bd89e2e02305e35b8f61b7bb2c78a13aebfce0145d1c5aa0bf1d10d23616d5a3a446de550302f56f81dc56fe4f3700f14242688d9b92d8a427979b403c8de8c493a2cde510eaf6b285e6675b173aa0314a386b635c7577d5aff0d868a0cb3f73c8d2005f8c7c9dab5a060ef80102c9d4a4af988838afe87aff04c0689e8c3c7f9 CT: 2c14c3931e98e84507c4c165c2ed47ad4a178f0e216cd7ac2453bbbf9f85dd06bd8ef54a9ff1fd3dd8e0cafb635d8f2de861a0db5b14d03f17aaea8c89b3010797c71c13a0e666899d7ff6e53c4f08be8ddb3e37688b5afa088079b6c7519b833e16560073e699530302028a3496e05edddec01a23a4c7983956250e8d9e616f7b940856955cde81c1efabf6b7b92f153d03f4cd17e7f7d2907670cfc84d45c1d7936775a3fce47968504278ffaecacea0871b227f250e2979516f6fa310fec0d8df1af7872e5a534e82870aa05f43ef0a455846b93ce938064fa33e92de262e4156dae56775 TAG: d95d73bf9aeb71eba9042396f3725424 AEAD: chacha20-poly1305-old KEY: 3792943c0396f1840496917ce8ad89608385007e796febeea3805f3f4cbeccf7 NONCE: 23b2f9068b2c4c85 IN: be6b67eb943ee7b5c785cd882f653e73a8f75b4a41a2a7c56ae5a10f729caf39948fe48ad0e51240e2e7aa43193c7ec6ce7f4909fc94c9f99e38e6a0ad7e98eb29c5c2e61c99e9cbe890f154185cec213a74725d23c1a4e4d0cb9b1a36b78c87e5eee20d2aa29aae80d4759eb0c51c5dc3a95bdbbf7e14eb434419a6c88a954ac03d0c98739f4211b8732acd71c297f578b8cb64ccac45f7235ddc7f2a3f5f997525c1ed39dc550126cdf9cedaf55425489085e91b170be6205a5a395f2dd4084a3e8dbc4fd8b13252f7effae067b571cb94a1e54aba45b1b9841308db0cc75b03cfce4ddafe89ce20f2d1 AD: 7eb6d7b7bbaaa3c202a4f0f1de2263767169eb4a64853240d48c0f8d5d31b08d5baf42977614a57aad99426cde76d242cb37d2956d8c77dc4fd62a3abf30e8ac6cd58c8ef35e67497022960138c57787818892460f3bfc16e37ff388b1edc6ce2bc53c22717edc7a03d4c78b0dbbe9121c7fd8a3e3993b87a4fe389bff13bdae3b349de0b6db561602c53f746022aeb4483c723b67825042f4af20b7dd1e6031cf54215266295c524ac8e1370424c5c5e607fb3e23e97c8eebe64656775edf616422a8b974e1acf13ab45c9a367a7dd9b2d62f48bbc05819b65eccb813ca813f57b22ee4c280dbb5a9d8d5 CT: 0b316ab2bcf5359900fa4082d5d253b49ad94b70e3fab544f98bd111cbcef6766cf953deec08cae1f489fe12f7acc0032db8a6b0c0eee0c206ea5fb973feaebf90f690e840094db5e13fdd7157ba127368c995b426529435a1bcdd1f14ce9125b8a0e4c96b6ec09e3c36a180adf81941c002d19c19d53c2009be803b987504606b7d43bdee5e0b32ff23c466b6cccfcd0d4e88fd1332e73712b5ab725c1a383e584f34f80daff29d285ae5e43cf1d0cc7a828e75c25daced3a581a93d7a50f313b33f38dddfaa23cd5b9914797db820ee2400d52bf5fa982277fe9b5881ac42981633b3957b0e935051828 TAG: 01973ee2e81cef22751a6a8831d752ef AEAD: chacha20-poly1305-old KEY: fe4be6054773f634356ac328591fbc6f833b0d1beeb38dd5b6feb7481b4489d4 NONCE: 0b3f16f898a5a7d5 IN: 76ced1ade6d1ef4069afddb32e7432d4ff2fd06685121f7b16464e7a72d365744f547d2ccf53486310e38b42d8bacaf711e54c5458d2d68c4dbcc8de31ab6732f4430e88a64565f5b287640775aaa2af1cc461d3e415bb275c6246b1b58517aa72667eae291a2982eda175d1b22c5a58e6fec2b3743d55712f201ca24ba5c0ae8c25724871b2ec2fb914a8da5a52670ab9b43a83b8568ce74db5c634061cb80530c8070c38b8f48c33ba136cb9f2158ee7eda8b65f2192fc94d1291f182f101795b7190c74b319d2d3e02a97c824d9c9471a83797e4936310b207e3a1e0bcf75f7c3e3ee48a747641cdc4377f2d55082 AD: 834cd775cbefe4b33a3ca53a00c06a3c4a666983e4115a029f15729460daa45d1505e95172d3695625a186b28b8be173a925af04665f209267b3c5123e8be13da447ee1ae856bb0925f35aaa76e04a7bca8460f76c2024de2149f38a8cfba81694b854885d72568105571b6b213a0bc188a44cc7fe13153cbf261401b238cf12a95e23cb56f240114f16e2f1e3a514615aab4449c0c49e4d900b0e17d1a8dabb53d43dca32fa052d576b73dd9b40856b515d6d7efc2a5c17e0ebcb17bd59dc86f22ce909301a2652f134e82ef0e4519487ed12d51536024f2ae8f75d937c42d003076e5dea8de0c684cda1f34253d8fc CT: f8defb6fe95dfec499b909996a1f75a198a90e4d6c6464d00a357a555311c42fe92dbbc4b79c935e4f0b1a95e44fdbc1380bebabca28db4dd0d2870daaafc38ef27908c3509e945714801cc51f1a07b2430c74fa64f2a7c2f7fd1551d258c9c3be020873fc1bf19f33ab6c660911dcf2317195d0efee82d20ec26d22611f9cf86c51a64e28b3a1f344500018e0855c88dae3c07acaeaa10b60388484dce93e16e6e1a6e69e899806648a92568c8780e9f4baacd98cbb353ac2f908e775d92303cfab843f15be0e0c322a958802fb1a60fcc7631f151f4c2b8cb965d2d296acef250275a2fecc0cea803ce7c058b12dd2 TAG: ade515091930dd7861b27f78a87ef60c AEAD: chacha20-poly1305-old KEY: a288b11ce5382ec724ce4ab2d7efa8e777e91ebd04367935e15f9dac483e9596 NONCE: 874144dbf648b325 IN: 4c9195280a79a509919af4947e9e07231695fd7c5088539f23936ce88770ce07d9ad3ae4a463b3a57d0634d3a77ceaadf347a334682b04be8e58b8e86fb94a1f93255132b8cdb0df86f5bea354eea4e8315fea83e3fdf6e58aa9f26e93caa08e5e2551a94bd916a51fed29ec16f66800cda6a0aa24ec308bf5fb885afba272685de27c1edcdd3668048ef07b06e90d464a8aa28664903cac45e154e8e1e39c257e1ff506b9d95cef4f300bb73b899e7828602c3c1d290b8cf55ee5fd72ecce9e6efc9293aebf674a70e2a7673e75629c12950622dff71d3ec0992e57776c788c6927d30b4e24b749191c3ce8017f0ada6276e43720 AD: 04abe8588c8c8c39a182092e5e7840442bd1c1149da102c4ee412bd8b82baa5087ef7291b5cd077c177c42770b0023e0e462b06e7553f191bcb0315a34918dcdbffe2b99c3e011b4220cc1775debcc0db55fa60df9b52234f3d3fa9606508badc26f30b47cdb4f1c0f4708d417b6853e66c2f1f67f6200daf760ceb64ffc43db27f057ad3ee973e31d7e5d5deb050315c1c687980c0c148ee1a492d47acfcd6132334176c11258c89b19ba02e6acc55d852f87b6a2169ed34a6147caa60906ac8c0813c0f05522af7b7f0faddb4bc297405e28ecf5a0f6aac6258422d29cfe250d61402840f3c27d0ce39b3e2d5f1e520541d2965e CT: 0afce770a12f15d67ac104ba0640aab95922390607473cbda71321156a5559906be933fb0980da56f27e89796eaa1054f5aacf1668d9f273cc69071b9e8e22af6a205a6a88f7ad918e22f616bddbb07c78913c7e056e769e6fcf91c7600c2740212e3a176e4110cac9e361a59a773457064d2dc652dd115d04f1c3756c0e1d39f6737a16b4508663e310934c49c58058b3c7b9af7bb2334c8a163608c42499658986927cda365e2aead3ac29de16e47e954383ea566f8fb245a4e5a934c767bb3bf7e0eb8a477fd0e1f61bcb238462a0d19c5cea9293ca58ade76829413216a7882cd2846323046694f78cd8b0347792ebb75abdc1 TAG: 973e58b1b8adb176a6f1e5c963bfdc5c AEAD: chacha20-poly1305-old KEY: 65b63ed53750c88c508c44881ae59e6fff69c66288f3c14cfec503391262cafc NONCE: 7f5e560a1de434ba IN: 845ef27b6615fb699d37971db6b597930a7ef1e6f90054791eb04ddfe7252b5f88fd60eba5af469bc09661c0987a496fa540621afeec51bebda786826800943d977039dee76235248112ff8b743f25ed5f3cb0d3307f5e118d84fdbb9c3f5531bc177fb84549c994ea4496c65e5249da987dd755d46dc1788f582410266a10f291c1474f732183a2a39afe603771bb9c423fe3e8906f2be44a0c9a7c3f0ceb09d1d0f92d942383a875c0567c7869f045e56dd1a4d6e90c58d44fe0c5760bb4fd01de55439db52b56831e5a26a47de14249453a4f8e7da3cb3282c6622916197ebfaad85dd65c61e7d2d3ba626276366746f396394c1bf75f51ce AD: 51a3588398808e1d6a98505c6e5601ae2a2766f1f28f8f69d1ccbcad18038c157b41525be58ae4527a073748b7a04809e52a5df0c7988417607738e63d7ead47db795a346b04e740186e73ccad79f725b58ee22dc6e30d1f0a218eda1791e2229b253d4ab2b963a43e12318c8b0785c20fca3abcf220c08745d9f9602f0ece544a05736d76b12d249699c9e3e99f3f13cf4e5dc13a04125c949a5b30d034b23cb364c8781964bc6c30e5e5ca9673d517ef5f35965d8a8cf1be017e343df97b6bee37b30638b154286d1f36d2f9a0eaa23cc484eac5a05b15d9efc537d989dbc8b3106c0dc1a56e97e6aec2eff54a82cf7ae9df2af46b4c860f83 CT: 027b14197b4012256b133b78ddc94e72fb4d724fefa4ae329f5a5fa3fa784fe6d7e1e805e3f7a75557de64de506d38237b467fa577efb59e7cfe2356bed6655c5aa4e238dcfeb75c16549a0917268768a96acb5e20546a1fb7e3a7cff887f49f2cd7a135f72a98a779150f3207bf733e88861fd79eadbf77fa3bfe97bfe8b6a991cb3bcc2cde8287f7e89384846561934b0f3e05e0646e0e1907770df67a7594161a4d0763faa6fa844080932159999d528ee0558710058ce16f97d13ac9fd9bf5044191188bbfb598d0fafbdf790b61ce0781ecc04218a30ded45efd498cc9ba03562ed2b4a993ee98876b3ab7a9bc07829f1c4ca6ead98c06b TAG: e4d18a701b8308697b5e79141ed783c1 AEAD: chacha20-poly1305-old KEY: 4986fd62d6cb86b2eaf219174bec681bebcdef86c8be291f27d3e5dc69e2feba NONCE: d08d486620ed2e84 IN: 3a22ad5de387db4fdd5d62a1b728c23a8dddc50b1e89f54f6198b90499f9da3122ebeb38ebf5fdfe30309734f79aff01e3de1e196b35bffa33bae451f31f74b8aec03763f9e0861a34fe5db0b40c76e57c7fc582bfa19c94ee25b5e168270f379bf9f8a0a18bed05de256f8f0dd7c23ba2ff1c7f721409462f04cc611ad9bd4c3c9acf30742acfb9518a6375cbb15d65a1bc6993ea434894f93d4f6e05996ebc1bd56579296309a2c6b8fde95072168b5fd31927c4c0abaa056bcd16221d5f220be47591f43255013a262dce439817f534830ba82155347e5fe3101f8011b89365a6568214ed0661914e8cb3431d6c8f2347dfc1209a3eca4aaf0a111f47fe AD: 7dd3f656a03c001b45ca0680bc3ac9d68c6e96b591d3c69eb8c65e489009d845cb331c98b82e627e06d5bf01e74c573df268c2386f12628c019951d42f55991ff20d72a7b2c45f41d0be7af428c92f324aaab8df70d900301cdf09a3d93eb711c919d34a86fff9cb078322ee2e0ad48dbdf3b7884f0f2dc5c36262c59bcfd75ac6200f59c6fcd0ce10ff5005fef5df8f0432377dfbfc1db8f559e27e1aeef3380ea3864867d36a25a18654779a751586cad3b8a46b90864ee697b08605673b8d2123433c020a21c4db243dde2420c12fd4d54a2704a0c8c376454a1b5e80fd6db89aabd56d9b421f29649e474824dfa56cb5c673c504d10be52b53751709fe CT: c40180afd53001663ff4834110f56e6b0f178cd3c0e7f7de5d0089ee41d8403ffb98e84922706544a344d7e2625b12cf66b9c966f9f57d7b94e3e4b34e6f0aaed1763ce012782e2f5e1682e6c343fc7961fedddd0919d0b910e9923c17e36406979b256b85aec24ee352f03b48c1302eab419c83dccc5372cc059e9de596224fa70098eb32fc9579e97917b923914fa2efc30ab29b457bf14e45583b3771486bdc0876f3ea6e1a646746c4f8c5cb2641a1557c8473e6ea67d4811a67485ae9a678ff3a2408ca845c3b51957e189eef47dfc1d46bde4b9d754d7df13f828ddadb06e4ebddb5f0dafbdb28de4c5e6078926f20cdf9e97ecd58e309e640f74f06 TAG: fd5e29332832a14a31a9ce2ca8568498 AEAD: chacha20-poly1305-old KEY: 7d28a60810e43d3dfa32e97c07957ec069fc80cc6a50061830aa29b3aa777dfc NONCE: 47738ac8f10f2c3a IN: b50278ae0f0fa2f918bb9a5ed3a0797c328e452974d33cbf26a1e213aa20c03d0d89490869754abf84dbbe231d7bccdced77d53fd4527356d8e02b681fc89a535ae87308bf7fbc26197a5ea85bdb3aa033b8da5cd197ea6d72f96f63b03f4ecc7adedf399a5043776cdb32c08f30b77f34df85f8adb8e02649a04b020b03e17d445ca63e4ed73ae432c481392e031eba2f9d2f7f981d1e50917822bd6ff71c239d33444ada3523a59dfbce5457eadec1ab926c9e6c5299c7521e3f204b96901a712504fcc782e8cea80ba12a7f7e71cec3d0871899b6ca059061da037715f7d13fed01c9cade1e687b4fbb1f4ac4b040db3b43800f112fb900e4f772d61b921cbce4da6f AD: 324292813b7df15bc070cc5d8a4bf74ead036430be63abc43304cf653959a24a91c7de5a671c50fa8a87e21bb82b069999aadfb6895d8bda4c3083d17b8ca55b9ab1511ed8c4b39d8c28c11a22ef90c08a983e3fe2d988df9e02b16a20b24f39ddb28429625f511db08298c4dc321f6c268fc836a6191df6232f51c463a397a8d8b33374abe94e62c0f5c322387e1fc4a1c1980a04a1a3c2c31b32f183a11c3268c6dca521149dc16af120a78be6627210e8ddbc44472bc24d66ce3681c7579b3d9a425212a704a4f5105cb80f0d18ee860953d10b59c114826779bbc368d7a0eece9f223e47cd8e5fd453607d101d9d9c2bd9a658d6520b87d7b4263f6d845a524a36e4 CT: 2c217e969c04740a1acfa30117eb5b32dc573df3354f4cc3bf8f696ff905f1e640f3b2c250473b376622e0c9bda13b94640521be1ef0fc660b4c10dbe2bfc093030753e04f6aaecf813b43b61f960455974b8bb8a9b461d1e8fd3802315e863c00448f24dd38deb90e135493274eb14ccbde15c50dcad734ed815a806be6622492a84cd062e3ba567b909a205a1d0d2bedd40169697d261c7b6c2e0b1f069853fd470e8f364a142c386c439a6dbe192ded5a3d0fbf73799f588c59e58c60249d980ddcf0d9693631cd9b3f972509c3a77123d38d9e267ecad06e1208e3f1c0a69fbca7c3bb1a48fda19493d0f8f48398820057b94120f3ef97d87e9e8a1b301a2534c68f TAG: 1fdd2dcd935f55822bf7231a516ca841 AEAD: chacha20-poly1305-old KEY: a76e9b916f5a67b78a5949651c8c3a9741a1bc3c41cdf85fd2c8f3e9a0616098 NONCE: 0808da8292dc14e0 IN: 9c149eeb09345c3c22462b03e49eb4dba6bc98b269b1086d752bcd8eea53b8977b238a04a994baf915591686baab90b79a3bf7d9adb2c6c2e31acd3e72f0813fb745aa5fb2e3da408f78001c9c09bd26a1a2646011b6120aaa2bbacc4a16c39fb5257b9b2ea2ad8bf70bcc9855cf11841116c2767310cf3cd49d1aa44cd505f079761e064d5bc7cea4a7173b086882a77d3fc179efc86fc4db8a373491d2ed81eabc63c950e832db17d09f474d4ec46bde47830caf26fabaa0372b81fccc449c0e19ccd630caf693a7b43bb1c408a54e03f50c44280a05ad89fb6e8f01d8ac278edf556e5d86ceb4b614fb2ef133819c6e1ff6abb86c54a135256204b5cd400b93624d3932e7c2b046 AD: 6aeb7031e4a2e23eea93f05fdc562aa2bf43b8998bea7344377aaddc60fbdb7bcb1491d379ed0cb613ee757cfb66490db61bb431d2fad34b38ddd55bc5b22aa6c4773b9992f34b878c5663f6e8cdb5f80a17f4d312bf342492e48d1ce4c6d754076a634fece61500acf8168d47381af4faf980c6cac2bfd5da8c09b6edb0f543bf0fe02643e38d73fa37d8ae87fb66193f22e57faf4393c007d48c8631a685d520578f8f89db684fb371ea02f3a58b1e2168f0216321139472e0d03b6d90ba8aab65402e1c1ac4f9172a60e27e3d997b9b05e2f672120d6c87bcafa6d4c9b4cf8ba8a82932d92840368fc53dc5b48526103dcab5f1531038aabe89171327ac559b98a3cf4ea70bf051 CT: 9c3faab9261a63cea9477b3269007283995b06ba77ef83d9e693f7e4ee9855550eef94855be39a7a435b6a3584b202973777c7b2482376ba47b49311947a64983b60236756ee4455d4cfada8c36af8eb06b06ba2f6b79ffb1185c89f2b2a831cfaa3855fc1841d8910908be5078352011168a67d36372d851a3217cabf593ea462dcd325cf9a4f67e85418fd5c924e9b92ab026cbee4e7ab1067066cb5949dfc699a68fe539e1abb13cec33904e5207e6963d24f5a0b770613b8b00014e791bfff88f9c25ca126127a2f8d1d1e9794efd28dce98b53e228073faae8d5047530d502184fc341321c3f55fcbf41187fc31262c325b97f519959b6a29b36c71f76f60196bb1457b77c8bb TAG: b45df119043d29008fcef36a169ef886 AEAD: chacha20-poly1305-old KEY: 98cd2477a7a072c69f375b88d09ed9d7b9c3df3f87e36ce621726f76e3b41a1d NONCE: 77d185aaf715aa48 IN: 42b31eefdacab0f03ef6060156000c8195adb0976cabbe1a42bfcc09f85659c60b98638401f2d2e2facfb9a97a62926bb0cecaf3af0180a01bfb6e576babf7fc43331937a92abd30cddfa3e450f895e9dd914dea3fafd759c136d685310ebce28ac0613ccdbf30115946c9634b67510b77d0e37f07714b2ddac9d7095b8d4bd887c132c4a9127eb01c8dedb4c39c87b98a741316656f9a8d5a5b0c0ac84789aa2347a5f99ca5ad55cd1bcf98f703eb4b00badb8a8555f38b3b368db8ba7ceea94e8b219f51edce75d84166b5602156ed5962a93a51db73c59d87e906179d7a74a2a2a69d8ad99f323225c87e475d3f771b4a203a2e2b03b458401044649fa6536dfab24d7037807dcbf6518e6578 AD: f5bb1496052a4361dddf72a288e36953a3d815d6876c013f1d6ba839e127f721b052b1f7d8ca20c7dc0386a7d459ebd7eb9fc8cb08941e6ca9ddb980f3115f65bc1928a414d441ae71dcb879d5bfe0cde0562bc37f8fde0d5291ad405c92fcbb860c43b55ac0fe663b54b3d0616aca13a5c82b7b5d34125a05c2acb5530141030e6f2aa0c8322b2c8fa307e7518918e550e9f48921c6168f094d8758e16b9f815fd0458095c4143f0922adb1840d0e685636825a9c90ee90ee537f4b8dceecbc4287c82dc9a00d7e51671e37ea284ee3ca501b1b2596459d3f592f70186f41125739e342c9f6be9241973b1414dfe5fb8cba1af82e679278cfcf95420df0c5364af4d7e72ad57d5c871fcbc35462 CT: 7a3bf3e3ad5ae3ab71fb1f7121c3d8fb511099484b50af7ca128ee0337ed4b828dc4cde0b88dc1e8089101fa82c9beb3eb48fdcf0f5b16da441f5a3fce9a590022af95a94aed6a3e71e505f60f303c78c356f274ea85a55354078530664ecda32c80e77dc20974b3b38f4825b8fbee8c3970769a2f42c5181608a8d7d76ef4d093961b665ee42b9708fcafe2c82d3a307173e2a25ad2528c3bf83352b9265e45b70722d7cf8c9b80826d21335234ee3db69d0d37871c83222365900c96c17a7e9f5742d0bfe383be24d0d44590d4b0f29f7abe0c65daaffb968b3f2657b1eb300534eacb52ec7a6b6f9f57a50a91b1799f491361cf613c934b7f520dc4eeeb40ffc45e10be0a95e76f366d4eac14 TAG: f613b65226afb64c614fe60d9c71ed74 AEAD: chacha20-poly1305-old KEY: 2f0f4631ab1c1bcf8f3ad0559c818d50e0af7d8cd63faa357f2069f30881d9cb NONCE: 7d0ced2fdb1c9173 IN: 6516ba1d29357144eebfa486d21decf223da3aa76ec29bbfcbe7f1eeaf4a847710e5080177f7e5a7c8b4752c219b1cc70aef4db861ba67d0fa6222d9f4a1dc756a0ba44e62906f9374a960c16198866d867854d88f528a60e212eb91645787e75685b2e215c0a41990abc344a77236ec0186ba63a664592938cc5a8ac1d3eb99c95ce00e19fbe249263083d85b052d48bfdffc01585dc57bb2a2c6c4a819604c1ec0548c6f0f78dc05e4418b36277dc07233c7532f9c289d6aed0cc6bc7df4fd0a536c497b982e2dad2c30d2db1c6545a845c5dfa83a4ac49ef06fc9c919079d3e299e31b5c3be370814ae5022ae469d3ee55246a41bd0dc4e64351cc38c3c09af0a1aee3b388a6892deff0df3f93cd92d722b AD: 1ccfa1ececc8de1e200d0ecc19dcf67b7c96bea3a282c2bccba61035db5c14776387b8b8f58e5757deb0129d4e5e315f64df354a5985d2e47ebbbeafe0c914f7cf1d63dd0311ace19e69a8b6ff0ab25cc8df0408d22132205e89e5eb679268d82b2913e64e3f885bbf4a6d379b760b94590e3140dd7275ab4713cb56d0b716e2718f11316640cb394802862d39e77a46d0c065af3caf7dec14e887039d8aa8c3d3a8ac1ee06026f49d00b2f59d971b54735e95a51f199389a93a4fc24ebaba1f7a2eef7412f61febf79084fbf481afc6fb6b204084e5ef5df71f30506459dea074f11fc055cd2a8c0fc922c4811a849984352a56a15659b7d07a4cc90b88623638ea00c4c8bc13884df2237b359f2877aa41d6 CT: e580093789ba17ffb46672dc326f09278aca08598d3e5458eaa53e6ed45d5c71a396e35b5ea3fe7b7c0496a734d24f1c75420694be2ff095d5172fd3407794e4b99fd7c374fbe8d1564a048614d3f355bfb5866de1a53e1a51f9f5e8312253cfd82f36efaa1898c850ca0d975ad1e8b0d9597a5a9e6516fe2a3c92efb7495557a8afc3da15b0d3e2ba58f612519836946cf2d15b898320d16a026c8c00a1be2e35f0ebe68f28d91c6c45d24c3f3c157cb132fa659b7794df883d90741fa2d2afcc4f27858e13ecd41b154a35d24947ae7361170060c107d8ecacb393ea67104b60457278a392fdf1794bab97d3b02b71a4eb015eaa38a4b4c944c2bc7cd5e329da4a1ab2937a6af81a6caa5fce752331fdefd4 TAG: 0fd7419c54bc84265ed310a3411a3f2e AEAD: chacha20-poly1305-old KEY: a48b9b6df475e566aba7671fbd76772cb0eff0b12499967978ce3e25fac92feb NONCE: 2ccbf0d6c40cb302 IN: 09da1cacd001dce4f7573a065a4406fe0da04ab367a2d87780a2762e168957a88d3fa78f0a4b6978d449026e5a801d32884b6e14fdaaaf864214f928ebc03dead081fee96683ebb032362d5088c4c2a3b1e242f055f2604919f4dd551db777a258cf9da6d95a2bde249247812b9efc7985cf08707620808524d6dd3079b0b63bf0f71ea5de834ccb8b7c6a97125fd6ca49148e866d3134bbf1d8a6b714e9a80fe549c8bfefe342f41be2ba2300e0028f78cefab65274632dfdbe70bf7d655ec4036df561f2d4fc4d56a482bbe2f9f2ae279b3aa216b39afee75e53602de319484db89a51e844f38c361634e474f8f1f01c340f3f3594860d671346449c6d08ee38de22d246309bc7e4a252a29c86aa6d94b5b4fa58904c70 AD: 1c2503d5aa1aad193f0da12874074ea0432bb76a61cd43a3017061514da0759846a0f3ae3a49fdb0b6d29f713de665beacb6568f2694112ca380d13f3c1698316866a7a7f87f1d7503a92176ab84fc08977b46ba664508a858e7525753c45511b3d2f407d5e993c6ede77f13d12975707e5195704970a89f71fc30828049f92f944f3aa93d6a5297e678e08952919beb7eac5919df1919cab3c3da6aa696a1eeab6371f310f7e81143e7d240b0213ae554524b52000306160dd4877bf13ba0f13bbe867da7c7d707f31335eef4cd942938ac890a0829ec66bd30ae01a2188a6e5ea0f17cd7dc875e17f03c0ab5dd18e36db8a1fc1f72859ee046b62368f168b3bea2234e0432c07b7d8e1b9277f21e692c513b9e816e6860 CT: 7d35cfe4be56bd6e0e09dedcd01735b915bc1891a4d1f6a541abc4bcd0ebe89dcb8e365e5813742e8ec65777b6159422fada747da99394252baf8a046fc1b60ad79755f545f4448627b7acaf403000894f5641e78d3f946dfca29ec617f0660dcd6e8d8827e67e1022a245c595d86e60fbd176bf721b171bbe5ecaf4ae671b9f3dd3920146e6ad431bd8fc431820e19454b6ca209723d80fdbee187fca9c937c979206ae97be55f6ba7366a5608770a11d537396485eb0a66586385f4d4cf3905d1fc90831c3e136d5d513fa22be285193142994a3ed477145bacdcbdd791e8b3b88b0d4f1d18b27382550a818c4fd8884bf36f677c6c3ff5677406e510911e696af75e5b3f859bef699bdd16e6215fdb98d874025eada50 TAG: 2aabff35611b3e0013f6ae0df130799b AEAD: chacha20-poly1305-old KEY: 923d4b086b9e43b986f7b65e4cea6113a3d8aabefa89323c5e4d5b6f158bb7e0 NONCE: a0f73297b87f5deb IN: 21435e8d5c8edf0684f58c2cba4070c10b4801adf46b6c4d322eb3990a38a9ad338ad704b9df6597f3e68d66cd5b56290c8466db2231e56d6bcb9c44e1bd081f42ca2a894dad369df2bd0d2c63d6c881732d6ea22bb22b5bc9a62eaffa1b094d0845f6b966d2cb095e7b3b8bcbc15e707449d35c8df4aea30c3b7243e977fffd59c80f1c5c9af4bb5a54b9c786fbbe8d21b2b906a87a786caed841a34a3e0cc0ac3209d83c58afba19edd63622dd261532d2cfb0b49d527d8eaa0887a087f5129d897f665264b229f860363d71a88b7d49c8dc6360182b357b0662391bb41337f46010ac32b9fada2d60a2efcb99365d3b27b7ac396900d1c821d0df8b86cc9cc1f2673259a33efea610bf8e1d00d7e9db2afea21da8f58c55f799999d AD: c853a8b39c0dc597d562f123cd221e4104b65423a062a4f4ba890ba344feb84290f61817e23330c365f58c3583ce08360d3c1171982ead5496d525ac878f23a57480a6ee39d4e65afd6268245bb982a2545fa1195427cdbbcd404cdad5198f55cce2a5a028fae435f71b15921d066e8d43766c32b2f2c3f57c0674e129607dcd3703eca529414adaee79d81fed432153cceb6f3fc53404810d8ec878f7d94be5d379d0e0e1aa9bc404b4b5d396038a9d76a5ce53c9f3759b8e50fb331858ca58cee81bfc3ee58baef5d19c402a3dc8b36370ec1ace5a4aa2527fb94b4f933a4ab8ccaaf6a5af5a779eae5667c2a24ab027e781c8d4f30c377aa5885a2fdaf6507d18cd824a847c35368b4ea984d2c3c3824a5b8ba3042e1852504a21a3 CT: f2e21052eebbb86a4f5e803360855d8632aa727dca6f5e79dd74d7aff106e442001928d113005b030f8446f8eff2ee951db663978abe43090dd5ad2c51ba97a0ecf988c607d95e486d02524f690fa3c28d5c48c1f75c1f555e7b43fe7e46f2ca2b9fdb408ec4ba18b6cdde2af673183cb7b1a3c23ae77eddd4cac75e1ea14743fc571f8d31ce2e96787524cd48aadaa474181c096a032184574ddc25a6e0ac8441c212bc36298708e33c963ae931e6c6241d1affeef7b6ef759495df44b6ab647447693cf703569e69aa72f1def9a342b8978c1edea9703a421ca75b92cac4de14b88c693200022b8a2ed22b1c4678b99f4d695e080dd1196d7168e14f0d0f8ff880d742e97b9f6d00af1f7118e10b77c5ef3ea6c52f84a20fd6ea46dc TAG: fa8ee13400fb3f63b899df582f2fec45 AEAD: chacha20-poly1305-old KEY: df73adab2768559ea983cce85453fe81d79be3b3c57f202b31b94d6635cf2e4b NONCE: e7a87e6bf6b5a354 IN: 0032a37abf661faa18c587fd2aa88885c061deeba81105dd221969bed5d59c7204b09b1a8c4c8de3b9f748c7fc70626ebeaca060233a57b102221b1bf0f3d9fdaaad3d2b1439c24d08f9c67f49f3c47128f92ee530abf4c4f4573bc60ae4b38109f55bca3ca9e1ba9f9fd6e34ba0d174892977a53356e1f5c88c614fe3ff3b3dd0818e7a2285412e3b37444bbe8a80942efcfd03958809a6966cda9430b2f0c9e552f4bced6e19eb3e85fc5758bd7b588297ccbed37ed94c3adc8c08ea8b058462aac9d57a939ec711bc4ecfec944d2b653b7cfc7b02a65d7057c9fdadd51b9da8cc4a3c68dae9da8b9c5319c1a2baa3d6c891c5ac4a39461484b5a01abc64df447ada24c04a4363e605eaccf339a9aa515e724206206da6d22bbd2f52e64cd7c895 AD: f833e5ab4f8bc89167f80f576b1d6b22cdd0e30721f5f735799746cf645b6eff531d4c7b03584f3dfcb73cbd35ac42736216dc7f0de098a4f42c61ceb4b227ee288e47d697a0a76afc762f084e8fdbf9351c28340c324771c109a469341ab10ca10483ed2af5e878d7d3dc2bced2f72da3d1a25852b103ee9878e8158eb4309c1ce528f3a178ace153b6d3ae0af0d577cb3cb1540489e80427f792217ad8a09b84f027fca7ceb651b4264e98e94b4cb8a37b133390897233e8ba9103628d05b9609e8552c4a4b11e3f2fa8d56af36957390e88cba44656be3edace798cf8cdf7771bac338a256bc3cba6df97728f222f423ca7c6d149c9372d66163a98f79a234b00d4b75fb2ec860dcc2d1998105e4b9c01d68f079f3e0aa21cc534047fc7b858f8 CT: b842eadfdf431c135bd6581d3eccae54e2267d8890036aa33dfe2d2d9715c44625441210a3a0d666d708d30588fe851ec36e10d8fa3584ed77b095149494b7c54379d62c8935e1d2b9a8f47e4759ad0b3437fdf2cc2fb6c5ea25ad10e0bdc9dc5b0517fc237eb783cc461c46665e2b1d1a5b8008dbf409ea2a63fea0276de23a32c99d92a498807a0f95e208fc6262321a78aafaf0cc3f833fff37bd4efa66f6023a25cdc6702cee3912799563d908a5183c9956a06aa71085d855dc7c809ed6e2889592b361ab3ab39060f8e419152187a794a19c2a1128882201900ea2cd597860674bf78d9720643df8701676718fd201baed4935a88e50558daf86edd08a9ab227ac7afae55c974b68de8dacad4a4d79b13ed6dfe74017a4cb9148e033436fb6 TAG: 184095b7a8190abec08bb72d19eeb103 AEAD: chacha20-poly1305-old KEY: 55a4be2448b464c2ea52a2f2664ed6aba865c14ea1fea77f4689331fd105c8d4 NONCE: db37c0a405b4626d IN: d266e66272e5d3462081b004cb42429c8b9741e9f678153754d726f6f9aa513464763c5e793b482fe512fece97585f1426120d4cefb3d0a8cc0a8db4bde93fc72c78f44d4fecca14650c660d3e285b327e7cdd813063e7e867b8a2d059a41bab70432b7f857199894da90dca3fe5272bae1ec694a1a07b60b05df275784d4975637e4673109f3ba846dfd1a048b202ed8e89973be608b91ee4743b1e759900f1443038951fe6189e806638985f3c16338c3c60695df58e621154d79bb973859c4558e9dca90470f77c73f004443ad5db0717abbe43266f90e57397b83ac34d1fef2e897e2483d5bcdcb627abd64b0d1aef525835f25e76d6e9158232cdde6dce970b59f58de8a98e653be32fb58edabbcefa5065d73afdf1c9c4fbf50c1022bd22bfcb98e4b422 AD: fd6a3fdd879f8880843eac20ae01c1b9dc3487d270a806572088ef2ddc1f1e0de495e71d4813bf5c501ad31e5d791c4b5b3a0a71b63fdddcc8de4b056064ef467989ecccc5d0160d403bf3a025d4892b3b1de3e062bc3581d4410f273338311eb4637529e4a680a6e4a5e26e308630a5b6d49ead6d543f8f2bf9050aa94ce091318721e1d8b96e279f34b9759b65037bec4bf6ccda6929705aeeeebe49e327e4d7a916620c9faf3765120658af34c53fbb97ec07657b3f088fcbdc401aa7949ddeda34d885018c2c23f4f0bb8218bf0d4fc90643658b4d8834f4a8c08e590c2a790995baa9e77627c342d283e454f84fcc05be15e9627a2d9be340c9d72f222bbdfc47905f56616cd9f936d49e4732f319f020513340fb8b22828db251b102b6b137c9533936d6 CT: bd11ed07b7b4b30eeaf25d6a41a549cca0a5aee71f990ac566a37265d7af2ce3c03703427ee0b2755c2bdfc29f9d826aec6ee4ad28af48079ac23db16580b97424f3a4e35cc23625d39f95699d9ff5143e9a2bc26fcfee4f125f5aa2d968ccfc2faaf9db3c28850f6757f735cbc50c94c498bcde4f23bffafa8dd5f70d1a011e35eb26e905d4e68848fedebeb197be595c085ba33f11ba8398258445051751888e9bba111f800f31b37c447074ca6dce6d54b4dfad6cee5138643d4f6ac045e8047248924e88ea4294c7878bc22c9b41924ce301f22693c33733107bf1ba85e34806c5e4366ea66fc52a5f89dd9bf213239158b3d4d2600dde696c61d76c398b9bf10de9118e812e891c8f3355c0ecc6405f79bc32a58905e37888a1d8395fbedc3ac54eca569f TAG: f7d3b58a34a86e99267e5db206f17bbe KEY: 3304e4917ad7777b86c26a636292c9cc4c10d32003c49e07209eb0ef8505031a NONCE: 4d572d116fbd8c4d IN: 2f242c2ba33790ecef862b0e077ff8b15eb9d10cf2ff621ed65902494431dcbd AD: e699bbf250cdd93d229d0740e433897e2d19132e2b722df8b69bb6a7c2cf3b93 CT: fb81e30436e437c7f686f86b1b65c73549a9d09db810d320785c3634934150b3 TAG: 8b AEAD: chacha20-poly1305-old KEY: ed6057bb163f1609ff28b938122f495e3d5ae4ec3dbd7456c9b5c82e28e952dc NONCE: e6ff6852f3a3afde IN: 3c50edc967eb0b3b2355f6400e0a036e796c8b7d72c5e583a86e820d53e76c43 AD: 2441db55148e14e9e241d68296eb60d529408f0534143089671bce546db96d88 CT: 6ecabccee31519374d4bed11296e7483d1cb759bea3f4446a96bda8b4ca6d7ac TAG: 355f AEAD: chacha20-poly1305-old KEY: 73568183c1f9725af30e0f2067606ce802c3fe3ab5cff8d02b3db8c35176ee0d NONCE: 0bc9e19321b3d00a IN: ec2590af5ccd226a32ff750c1b029c11e3dd76c469a5579da9418e4c3fdc0d41 AD: df30160ae0cbf2cf8992221bd62dffe691dd602afa784ca691479e957af3acf1 CT: 9e8d8ac30626f8b831448d6976933aa5bb8c6dbc794e1f4b7eeb0e4a59342c07 TAG: 9fd36a AEAD: chacha20-poly1305-old KEY: 273bcb3f8c067da4ec3418799ad40e7e4aee74ad7e629499d646df4a7e585025 NONCE: f60be3eb894b4030 IN: 697498ba964d5ef401da4d94844fab1efc635e7157d0831a325bb5a4cf1fbd34 AD: 9129715deab14f02c76ba8172571b1fa9d50365cd795bfccdfc28e7e7b4f66fc CT: bd4cd5af83be1c13933302675d9fcaf1c4cacdf269f6ff441d1ea2211c54e7ed TAG: 7ab12a37 AEAD: chacha20-poly1305-old KEY: ad39610c2e6a6d0961207390e076e972c2edadca885c92965fa648b2ce34fdbf NONCE: a90db690bba83b78 IN: 31c49e3cd3d80a82e6b90316dfb94b38b8a23042519bf40c8181fec873c99002 AD: ddbd7d821d18d44c66295abf245b227b5cf4366811b7b34c07679600abdbfc29 CT: 94628fc303a0546edd51e966f2bd87968f37800c607d5e5a91f727fc1fec406f TAG: c22ec4e4c8 AEAD: chacha20-poly1305-old KEY: 29984954060ba06ece1bcfc0e50195f4632c6df48da1e02ae6c14f7065668971 NONCE: cce53a25aeeaf747 IN: b9b87433a9894f3c9ca8212623d62369a565a2edcddd276e07d611eda3597426 AD: 19fa9aa59697559d8b46d9cd49c3b763c0b73b26b9e334a3eeac2c86fdbaca8d CT: b68c83397770c36f073710882fa86d43b0e54e8efef0ff75075604d0d7ec4e1b TAG: 40d4ab752f3d AEAD: chacha20-poly1305-old KEY: 5c3b838b84100b2a818c0842e9fe19a7c50cf5f3ea73364c816ef588e500ff3f NONCE: fdf6b0229e4bcc2a IN: 2ba91904c143be99297b39f52856904af41705c176c8c6554b6bc89bddffbcc1 AD: 3539d9dd821f004f4ced1637071f4be6abd7fe98f017f0a8ce3f49dc8d496f46 CT: ff9d6d924e737a1df8c2bd3047e40ab401f903aa0e5b51acb991bac38ac2cc4d TAG: 1bcaa415a6a3c7 AEAD: chacha20-poly1305-old KEY: 6d65e627cab6d5eb1a088b25bd6c3a8a004a7a19cccae909d62fed3559c812f7 NONCE: 7ff00a8798b792de IN: 6848ee4ac820291a2e1dc3baad97f1ad8b7160dfeaa1bc83b2700ae42b5a366b AD: d2437b1306bf0ea211449fac863ca0d1074d84caee9009c5d54b9e9bdc8de6b1 CT: 2da0abe2a71e1c0b1ab309c160a8cebe45c6e16170aa5561806484ba2b5b9a9a TAG: 566003e1f78d2a90 AEAD: chacha20-poly1305-old KEY: 63401046a96efbc8c6483a2c396b2a593d3fae0db565525b85999fae13a46b6a NONCE: 051393d775e635ee IN: 2b4b6477580382aae782f8b5772c0948a444d8d95caacd85c0856c7e4393fe09 AD: 3d84d2e70e9c062d1f511eb685a9a90c8d5fa50eadf8455c7148666b3e7155e0 CT: 880c1123e54fd8ffb3c293720dd174913572e619ef46504cdaa64fc451b0ec1c TAG: 339274339c88d50ac0 AEAD: chacha20-poly1305-old KEY: 291fccfce0782f1787d62d4b9293d2ada4c04d37a8288ba9ba9aae0d31aad204 NONCE: 7450bbd62e4aba7b IN: adc251e793181e5d4c4bd983b853eb13f2096ccb340996b6eca4cd2157efcec7 AD: 4c598f6deedc8c1d97da33654763495cca3517430eec4edb006b10c95e031ae6 CT: 28bda22e4922cd8ff6739cd8a6bdafce036d9c61a145a65ca1b86f6d4d3206a1 TAG: d98fd43fe7ac74d4b016 AEAD: chacha20-poly1305-old KEY: fa3a9674d4a0eb36b2f7547c956443d09e6b4e4acfc9deda838eb7ebdb999a8d NONCE: 0a2572592c3bbbf6 IN: ae27f70fda9f5a5be0f704a27f0b8a9c04ce83d3c2e0d7ec152da25f473b0c8a AD: 6ee8705a9a3655d198497ad410da02005872ecbe397824851b80f4050bfdd311 CT: f356cbd88e4e2aff62d91e3f914032085388955bbba995fde013758b8702e38f TAG: 00324c76fecd3f50e1e3b8 AEAD: chacha20-poly1305-old KEY: 471ec87b992b104d369748d96856b5f66149cb45ca05c17f29d24eb9526fe6db NONCE: 23a2df9ed0b47439 IN: 2b9452bca0f48e5519ec3d0736597608df6ad9ce799eba913cff71573d79c092 AD: a56722ddfaee5f1b64398c225ee8bcdcfde5c2127101c363bfac52bc409c1082 CT: 7bbc464aac5dd29c25262fe0b116c176d827c2cc8dd63428393b0a9110f3c194 TAG: 2e87f4a6663a62e47c7e197f AEAD: chacha20-poly1305-old KEY: a29d1cfd4ccdc18803fbca9500f4bb29ce99cfcbf8acc41b8208dae4b7ee5d64 NONCE: 634f99e88e237ef0 IN: 09ee5982c5743f396d0c29c13e3fbb8fb89f61705da05466291e010effd51a5c AD: 564dddfcc3227b413244f1105b610f192decf15c4cfa067f4d7fcd6bd7af11b8 CT: 32916b67a6f32733623344c98c49773f3e721dc2ded105fb245799525bc9c84c TAG: ff463c07e7ef831321d3fd775f AEAD: chacha20-poly1305-old KEY: 08ba23616d911188f91da063278bef1237dcbf17f52585e53c2c4b6cf3ac9f0d NONCE: 989ae593eddd3874 IN: 749152c9478944c8271c0c11e07bc1c569eec01493e65b3b94842a1bf5d721f8 AD: a12d1a45b7c9b91ab08751a70b753714052ad24e0b2619fe8c3be303c65f2dbc CT: 34c40538ee1d22ddf8ac290dd7d423dfc622b5cf8f3412a5343e277822aea713 TAG: 014c7c678e0949e88071d1fe3531 AEAD: chacha20-poly1305-old KEY: c2ba8bed8634156afc6bfe3754c91744d4131de39d059f3a866399f916553b5c NONCE: 80fbf7b433a4cd9c IN: 419be6623e7964f9f26068dd969e4a139617e67c5ffb269b3013c433fe771c77 AD: 3937592db78a61ff469691b6800792019bc2b3d42512f23c1b1a66a8274495cb CT: 9d5bd1c7e766763eb00684c038043111d8c6390a8d6e17a15ef97c02ab16f09c TAG: a64d0eeb4a01481ec0cee8c1c357e3 AEAD: chacha20-poly1305-old KEY: b23d7afdb317ab79cda4522612be9f7c18d9d9d03619d5cb30204e9f74aaf881 NONCE: 0000000000000006 IN: 80030001010002490000000100000000800038EAE3C6A7C202A52A5076B2821608C2C0421218FC25C57AE9F9F9E939A97AC9E0F282DD0A91AADD5D43C03A0A12C16517234000E903041058BE185852E6828BD38C929202506AE7B0C29EC81125B91722E4B087055A8859835C6C090DD1F2D4A4021D2D7D2DB0A005F65A40102370B0570D7CA979BAA1C1C020811BC606CB748CF200011410E4EA66EBE9629B6A966A91689962966660916C6C69686EE5E6666B6015E26B6B686C6964606A61686962E5E36B6B686C6964606A61686962156CEB9751EC54E2ED62E417EF15561E1811660D10802078DB4110040000FA2BFD001BDABC3DF8D0B41994C446EBF6E288921C1A129AE2D777CE8AA03C0DA354C2CBE0BFAE9F5D59C753E2EB5AC102FFE85792739E34A6D10F1BE79355F0CEEC4667B3279E9409D911CA036C59F95E84590FADB3DCEBF81260E5F60ACDC558F6F6A0DD51B52709AB0000AE23B354D90D24DB7044FD5FC506E5C195F1A6A699D60001A4E0EE18106C6B68159F6D985596EA91951E1C641C915F5E99E69AE9911C999CEA9D919CEA996E959555E164E958151E60949B1854E6186A0D10400AEE8E3E11B67996E5E6EE61A61E198916000184515C4EF4CDAFCACCC949D437D53350D0F0C9CC2BADB05670CC4B29CACF4C5130D133D133B2560876F40D0EF573D70D76F7D0F534373157702ACDCC49D1F7F60F31B1F4D004E65660DE0E4F4DF2CE2CD1373536D7333653D0F0F608F1F5D151C8C9CC4E55704F4DCECED75470CE00D666A9FAC6C67A067AA0724BCF1C94759380853C30A3A6251665423503000000FFFF AD: 00000000000000061703030251 CT: d62561a166e0319d21dc9fd813b00343602fa8ac58cd0b6077dcc786af12c532478b14b5524f5f38feb24f05688d569ecdca190d330a7843ddd75928c67653c0e6742182ec214fc7b84e892c26a3aa9caea181c90b1c0e5f89e57151daeb6309b231dca9c3396b25b5c6d1cae376164aac5b392a4421f56d2fe6c7c109a562a533900c4d998127824b7b2066af5b2ab287f3a3751395d96bb0a81b2745543ccee1a806e5a623c8a088ec27f0346b9d01accf8192556c56fd3bee85d6fcef7f09383637f2e8d7fd3adf3d2d9f1c1eccde05b3b17eb6c99b1ca8be260ae1154e5658a5cd1e9e27d61915db081c2888fc37faa4a75294236b51c449f78881198c3bb702d4d3797b3cd958911060d606280f9ef74b7eef47517f1485291bfec5587d3dbae51fa26ea6f119e24ee72fc2e4e9db5c65aa20209492f504ad657333a7b29cb5ec6ff975ed7cbff20938bb02382276de32b8a21966946b8dcf297c3aacd25cf8903d3060aafd00ad19043e24cf17b404898d3f4aac02727d436a1e5bad07e6c07c88eb12664c1e38dfdf6e280347554629c8903ceb7703ad72eda21354bd963b9bdf05b4c126dc0e5f8d74dd2c45036fd0219e7f32124f27ab26e1d66d87a3c6e873a9c78505a5209265aa90b4a5f4acafe1443dcd3810c0455fa5c471e22a4d9623d34902abf310d414036b7773c8725534b4e03b6261d92346509a70b08e94eac0906d8e26e669a7dea38dfe2532af1167a133b75b4193acbef193dead0c08d65f2cfe7012afd9ee5452d714c6f1a2f810cd13ac2f36b6a1a4580154831a1098aa7ed3c506bebc24de46d7a03f6e TAG: 1df6f94253edb794e81221d3bc838599 # Test vector from RFC7539 2.8.2 AEAD: chacha20-poly1305 KEY: 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f NONCE: 070000004041424344454647 IN: 4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e AD: 50515253c0c1c2c3c4c5c6c7 CT: d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116 TAG: 1ae10b594f09e26a7e902ecbd0600691 # Test vector from RFC7539 Appendix A.5 AEAD: chacha20-poly1305 KEY: 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0 NONCE: 000000000102030405060708 IN: 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d AD: f33388860000000000004e91 CT: 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b TAG: eead9d67890cbb22392336fea1851f38 # Test vector from RFC7634 Appendix A AEAD: chacha20-poly1305 KEY: 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f NONCE: a0a1a2a31011121314151617 IN: 45000054a6f200004001e778c6336405c000020508005b7a3a080000553bec100007362708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363701020204 AD: 0102030400000005 CT: 24039428b97f417e3c13753a4f05087b67c352e6a7fab1b982d466ef407ae5c614ee8099d52844eb61aa95dfab4c02f72aa71e7c4c4f64c9befe2facc638e8f3cbec163fac469b502773f6fb94e664da9165b82829f641e0 TAG: 76aaa8266b7fb0f7b11b369907e1ad43 # Test vector from RFC7634 Appendix B AEAD: chacha20-poly1305 KEY: 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f NONCE: a0a1a2a31011121314151617 IN: 0000000c000040010000000a00 AD: c0c1c2c3c4c5c6c7d0d1d2d3d4d5d6d72e202500000000090000004529000029 CT: 610394701f8d017f7c12924889 TAG: 6b71bfe25236efd7cdc67066906315b2 |
Changes to jni/libressl/tests/arc4randomforktest.c.
︙ | ︙ | |||
19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <assert.h> #include <err.h> #include <errno.h> #include <signal.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #define CHECK(x) assert(x) #define CHECK_EQ(a, b) assert((a) == (b)) #define CHECK_NE(a, b) assert((a) != (b)) #define CHECK_GE(a, b) assert((a) >= (b)) #define CHECK_LE(a, b) assert((a) <= (b)) | > | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <assert.h> #include <err.h> #include <errno.h> #include <signal.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <stdint.h> #define CHECK(x) assert(x) #define CHECK_EQ(a, b) assert((a) == (b)) #define CHECK_NE(a, b) assert((a) != (b)) #define CHECK_GE(a, b) assert((a) >= (b)) #define CHECK_LE(a, b) assert((a) <= (b)) |
︙ | ︙ |
Added jni/libressl/tests/asn1time.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 | /* $OpenBSD: asn1time.c,v 1.7 2015/10/25 11:59:37 miod Exp $ */ /* * Copyright (c) 2015 Joel Sing <jsing@openbsd.org> * * 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. */ #include <openssl/asn1.h> #include <err.h> #include <stdio.h> #include <string.h> struct asn1_time_test { const char *str; const char *data; const unsigned char der[32]; time_t time; }; struct asn1_time_test asn1_invtime_tests[] = { { .str = "", }, { .str = "2015", }, { .str = "201509", }, { .str = "20150923", }, { .str = "20150923032700", }, { .str = "20150923032700.Z", }, { .str = "20150923032700.123", }, { .str = "20150923032700+1.09", }, { .str = "20150923032700+1100Z", }, { .str = "20150923032700-11001", }, { /* UTC time cannot have fractional seconds. */ .str = "150923032700.123Z", }, { .str = "aaaaaaaaaaaaaaZ", }, }; struct asn1_time_test asn1_gentime_tests[] = { { .str = "19700101000000Z", .data = "19700101000000Z", .time = 0, .der = { 0x18, 0x0f, 0x31, 0x39, 0x37, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, }, }, { .str = "20150923032700Z", .data = "20150923032700Z", .time = 1442978820, .der = { 0x18, 0x0f, 0x32, 0x30, 0x31, 0x35, 0x30, 0x39, 0x32, 0x33, 0x30, 0x33, 0x32, 0x37, 0x30, 0x30, 0x5a, }, }, }; struct asn1_time_test asn1_utctime_tests[] = { { .str = "700101000000Z", .data = "700101000000Z", .time = 0, .der = { 0x17, 0x0d, 0x37, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, }, }, { .str = "150923032700Z", .data = "150923032700Z", .time = 1442978820, .der = { 0x17, 0x0d, 0x31, 0x35, 0x30, 0x39, 0x32, 0x33, 0x30, 0x33, 0x32, 0x37, 0x30, 0x30, 0x5a, }, }, { .str = "140524144512Z", .data = "140524144512Z", .time = 1400942712, .der = { 0x17, 0x0d, 0x31, 0x34, 0x30, 0x35, 0x32, 0x34, 0x31, 0x34, 0x34, 0x35, 0x31, 0x32, 0x5a, }, }, { .str = "240401144512Z", .data = "240401144512Z", .time = 1711982712, .der = { 0x17, 0x0d, 0x32, 0x34, 0x30, 0x34, 0x30, 0x31, 0x31, 0x34, 0x34, 0x35, 0x31, 0x32, 0x5a }, }, }; #define N_INVTIME_TESTS \ (sizeof(asn1_invtime_tests) / sizeof(*asn1_invtime_tests)) #define N_GENTIME_TESTS \ (sizeof(asn1_gentime_tests) / sizeof(*asn1_gentime_tests)) #define N_UTCTIME_TESTS \ (sizeof(asn1_utctime_tests) / sizeof(*asn1_utctime_tests)) static void hexdump(const unsigned char *buf, size_t len) { size_t i; for (i = 1; i <= len; i++) fprintf(stderr, " 0x%02hhx,%s", buf[i - 1], i % 8 ? "" : "\n"); fprintf(stderr, "\n"); } static int asn1_compare_bytes(int test_no, const unsigned char *d1, const unsigned char *d2, int len1, int len2) { if (len1 != len2) { fprintf(stderr, "FAIL: test %i - byte lengths differ " "(%i != %i)\n", test_no, len1, len2); return (1); } if (memcmp(d1, d2, len1) != 0) { fprintf(stderr, "FAIL: test %i - bytes differ\n", test_no); fprintf(stderr, "Got:\n"); hexdump(d1, len1); fprintf(stderr, "Want:\n"); hexdump(d2, len2); } return (0); } static int asn1_compare_str(int test_no, struct asn1_string_st *asn1str, const char *str) { int length = strlen(str); if (asn1str->length != length) { fprintf(stderr, "FAIL: test %i - string lengths differ " "(%i != %i)\n", test_no, asn1str->length, length); return (1); } if (strncmp(asn1str->data, str, length) != 0) { fprintf(stderr, "FAIL: test %i - strings differ " "('%s' != '%s')\n", test_no, asn1str->data, str); return (1); } return (0); } static int asn1_invtime_test(int test_no, struct asn1_time_test *att) { ASN1_GENERALIZEDTIME *gt = NULL; ASN1_UTCTIME *ut = NULL; ASN1_TIME *t = NULL; int failure = 1; if ((gt = ASN1_GENERALIZEDTIME_new()) == NULL) goto done; if ((ut = ASN1_UTCTIME_new()) == NULL) goto done; if ((t = ASN1_TIME_new()) == NULL) goto done; if (ASN1_GENERALIZEDTIME_set_string(gt, att->str) != 0) { fprintf(stderr, "FAIL: test %i - successfully set " "GENERALIZEDTIME string '%s'\n", test_no, att->str); goto done; } if (ASN1_UTCTIME_set_string(ut, att->str) != 0) { fprintf(stderr, "FAIL: test %i - successfully set UTCTIME " "string '%s'\n", test_no, att->str); goto done; } if (ASN1_TIME_set_string(t, att->str) != 0) { fprintf(stderr, "FAIL: test %i - successfully set TIME " "string '%s'\n", test_no, att->str); goto done; } failure = 0; done: ASN1_GENERALIZEDTIME_free(gt); ASN1_UTCTIME_free(ut); ASN1_TIME_free(t); return (failure); } static int asn1_gentime_test(int test_no, struct asn1_time_test *att) { const unsigned char *der; unsigned char *p = NULL; ASN1_GENERALIZEDTIME *gt = NULL; int failure = 1; int len; if (ASN1_GENERALIZEDTIME_set_string(NULL, att->str) != 1) { fprintf(stderr, "FAIL: test %i - failed to set string '%s'\n", test_no, att->str); goto done; } if ((gt = ASN1_GENERALIZEDTIME_new()) == NULL) goto done; if (ASN1_GENERALIZEDTIME_set_string(gt, att->str) != 1) { fprintf(stderr, "FAIL: test %i - failed to set string '%s'\n", test_no, att->str); goto done; } if (asn1_compare_str(test_no, gt, att->str) != 0) goto done; if ((len = i2d_ASN1_GENERALIZEDTIME(gt, &p)) <= 0) { fprintf(stderr, "FAIL: test %i - i2d_ASN1_GENERALIZEDTIME " "failed\n", test_no); goto done; } der = att->der; if (asn1_compare_bytes(test_no, p, der, len, strlen(der)) != 0) goto done; len = strlen(att->der); if (d2i_ASN1_GENERALIZEDTIME(>, &der, len) == NULL) { fprintf(stderr, "FAIL: test %i - d2i_ASN1_GENERALIZEDTIME " "failed\n", test_no); goto done; } if (asn1_compare_str(test_no, gt, att->str) != 0) goto done; ASN1_GENERALIZEDTIME_free(gt); if ((gt = ASN1_GENERALIZEDTIME_set(NULL, att->time)) == NULL) { fprintf(stderr, "FAIL: test %i - failed to set time %lli\n", test_no, (long long)att->time); goto done; } if (asn1_compare_str(test_no, gt, att->data) != 0) goto done; failure = 0; done: ASN1_GENERALIZEDTIME_free(gt); free(p); return (failure); } static int asn1_utctime_test(int test_no, struct asn1_time_test *att) { const unsigned char *der; unsigned char *p = NULL; ASN1_UTCTIME *ut = NULL; int failure = 1; int len; if (ASN1_UTCTIME_set_string(NULL, att->str) != 1) { fprintf(stderr, "FAIL: test %i - failed to set string '%s'\n", test_no, att->str); goto done; } if ((ut = ASN1_UTCTIME_new()) == NULL) goto done; if (ASN1_UTCTIME_set_string(ut, att->str) != 1) { fprintf(stderr, "FAIL: test %i - failed to set string '%s'\n", test_no, att->str); goto done; } if (asn1_compare_str(test_no, ut, att->str) != 0) goto done; if ((len = i2d_ASN1_UTCTIME(ut, &p)) <= 0) { fprintf(stderr, "FAIL: test %i - i2d_ASN1_UTCTIME failed\n", test_no); goto done; } der = att->der; if (asn1_compare_bytes(test_no, p, der, len, strlen(der)) != 0) goto done; len = strlen(att->der); if (d2i_ASN1_UTCTIME(&ut, &der, len) == NULL) { fprintf(stderr, "FAIL: test %i - d2i_ASN1_UTCTIME failed\n", test_no); goto done; } if (asn1_compare_str(test_no, ut, att->str) != 0) goto done; ASN1_UTCTIME_free(ut); if ((ut = ASN1_UTCTIME_set(NULL, att->time)) == NULL) { fprintf(stderr, "FAIL: test %i - failed to set time %lli\n", test_no, (long long)att->time); goto done; } if (asn1_compare_str(test_no, ut, att->data) != 0) goto done; failure = 0; done: ASN1_UTCTIME_free(ut); free(p); return (failure); } static int asn1_time_test(int test_no, struct asn1_time_test *att, int type) { ASN1_TIME *t = NULL; int failure = 1; if (ASN1_TIME_set_string(NULL, att->str) != 1) { fprintf(stderr, "FAIL: test %i - failed to set string '%s'\n", test_no, att->str); goto done; } if ((t = ASN1_TIME_new()) == NULL) goto done; if (ASN1_TIME_set_string(t, att->str) != 1) { fprintf(stderr, "FAIL: test %i - failed to set string '%s'\n", test_no, att->str); goto done; } if (t->type != type) { fprintf(stderr, "FAIL: test %i - got type %i, want %i\n", test_no, t->type, type); goto done; } failure = 0; done: ASN1_TIME_free(t); return (failure); } int main(int argc, char **argv) { struct asn1_time_test *att; int failed = 0; size_t i; fprintf(stderr, "Invalid time tests...\n"); for (i = 0; i < N_INVTIME_TESTS; i++) { att = &asn1_invtime_tests[i]; failed |= asn1_invtime_test(i, att); } fprintf(stderr, "GENERALIZEDTIME tests...\n"); for (i = 0; i < N_GENTIME_TESTS; i++) { att = &asn1_gentime_tests[i]; failed |= asn1_gentime_test(i, att); } fprintf(stderr, "UTCTIME tests...\n"); for (i = 0; i < N_UTCTIME_TESTS; i++) { att = &asn1_utctime_tests[i]; failed |= asn1_utctime_test(i, att); } fprintf(stderr, "TIME tests...\n"); for (i = 0; i < N_UTCTIME_TESTS; i++) { att = &asn1_utctime_tests[i]; failed |= asn1_time_test(i, att, V_ASN1_UTCTIME); } for (i = 0; i < N_GENTIME_TESTS; i++) { att = &asn1_gentime_tests[i]; failed |= asn1_time_test(i, att, V_ASN1_GENERALIZEDTIME); } return (failed); } |
Changes to jni/libressl/tests/base64test.c.
︙ | ︙ | |||
16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <openssl/bio.h> #include <openssl/evp.h> #include <err.h> #include <stdio.h> #include <string.h> #define BUF_SIZE 128 struct base64_test { const unsigned char in[BUF_SIZE]; const ssize_t in_len; const unsigned char out[BUF_SIZE]; | > | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <openssl/bio.h> #include <openssl/evp.h> #include <err.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #define BUF_SIZE 128 struct base64_test { const unsigned char in[BUF_SIZE]; const ssize_t in_len; const unsigned char out[BUF_SIZE]; |
︙ | ︙ |
Changes to jni/libressl/tests/bntest.c.
︙ | ︙ | |||
510 511 512 513 514 515 516 | BIO_printf(bp, BN_HEX_FMT1, w); } int test_div_word(BIO *bp) { BIGNUM a, b; | | | | > > > | > > > > > > > > > > > > > > > > | 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 | BIO_printf(bp, BN_HEX_FMT1, w); } int test_div_word(BIO *bp) { BIGNUM a, b; BN_ULONG r, rmod, s = 0; int i; int rc = 1; BN_init(&a); BN_init(&b); for (i = 0; i < num0; i++) { do { if (!BN_bntest_rand(&a, 512, -1, 0) || !BN_bntest_rand(&b, BN_BITS2, -1, 0)) { rc = 0; break; } s = b.d[0]; } while (!s); if (!BN_copy(&b, &a)) { rc = 0; break; } rmod = BN_mod_word(&b, s); r = BN_div_word(&b, s); if (r == (BN_ULONG)-1 || rmod == (BN_ULONG)-1) { rc = 0; break; } if (rmod != r) { fprintf(stderr, "Mod (word) test failed!\n"); rc = 0; break; } if (bp != NULL) { if (!results) { BN_print(bp, &a); BIO_puts(bp, " / "); print_word(bp, s); BIO_puts(bp, " - "); |
︙ | ︙ | |||
717 718 719 720 721 722 723 | if (!BN_is_zero(d) || !BN_is_zero(e)) { fprintf(stderr, "Square test failed!\n"); goto err; } } /* Regression test for a BN_sqr overflow bug. */ | | | > > > | | > > > | 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 | if (!BN_is_zero(d) || !BN_is_zero(e)) { fprintf(stderr, "Square test failed!\n"); goto err; } } /* Regression test for a BN_sqr overflow bug. */ if (!BN_hex2bn(&a, "80000000000000008000000000000001" "FFFFFFFFFFFFFFFE0000000000000000")) { fprintf(stderr, "BN_hex2bn failed\n"); goto err; } BN_sqr(c, a, ctx); if (bp != NULL) { if (!results) { BN_print(bp, a); BIO_puts(bp, " * "); BN_print(bp, a); BIO_puts(bp, " - "); } BN_print(bp, c); BIO_puts(bp, "\n"); } BN_mul(d, a, a, ctx); if (BN_cmp(c, d)) { fprintf(stderr, "Square test failed: BN_sqr and BN_mul produce " "different results!\n"); goto err; } /* Regression test for a BN_sqr overflow bug. */ if (!BN_hex2bn(&a, "80000000000000000000000080000001" "FFFFFFFE000000000000000000000000")) { fprintf(stderr, "BN_hex2bn failed\n"); goto err; } BN_sqr(c, a, ctx); if (bp != NULL) { if (!results) { BN_print(bp, a); BIO_puts(bp, " * "); BN_print(bp, a); BIO_puts(bp, " - "); |
︙ | ︙ |
Changes to jni/libressl/tests/bytestringtest.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: bytestringtest.c,v 1.9 2015/07/18 21:57:00 bcook Exp $ */ /* * Copyright (c) 2014, Google Inc. * * Permission to use, copy, modify, and/or 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. * |
︙ | ︙ | |||
134 135 136 137 138 139 140 | static int test_get_asn1(void) { static const uint8_t kData1[] = {0x30, 2, 1, 2}; static const uint8_t kData2[] = {0x30, 3, 1, 2}; static const uint8_t kData3[] = {0x30, 0x80}; static const uint8_t kData4[] = {0x30, 0x81, 1, 1}; | | | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | static int test_get_asn1(void) { static const uint8_t kData1[] = {0x30, 2, 1, 2}; static const uint8_t kData2[] = {0x30, 3, 1, 2}; static const uint8_t kData3[] = {0x30, 0x80}; static const uint8_t kData4[] = {0x30, 0x81, 1, 1}; static const uint8_t kData5[4 + 0x80] = {0x30, 0x82, 0, 0x80}; static const uint8_t kData6[] = {0xa1, 3, 0x4, 1, 1}; static const uint8_t kData7[] = {0xa1, 3, 0x4, 2, 1}; static const uint8_t kData8[] = {0xa1, 3, 0x2, 1, 1}; static const uint8_t kData9[] = {0xa1, 3, 0x2, 1, 0xff}; CBS data, contents; int present; |
︙ | ︙ |
Changes to jni/libressl/tests/cipherstest.c.
︙ | ︙ | |||
83 84 85 86 87 88 89 | { int failed = 0; failed |= get_put_test("SSLv23", SSLv23_method()); failed |= get_put_test("SSLv23_client", SSLv23_client_method()); failed |= get_put_test("SSLv23_server", SSLv23_server_method()); | < < < < | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | { int failed = 0; failed |= get_put_test("SSLv23", SSLv23_method()); failed |= get_put_test("SSLv23_client", SSLv23_client_method()); failed |= get_put_test("SSLv23_server", SSLv23_server_method()); failed |= get_put_test("TLSv1", TLSv1_method()); failed |= get_put_test("TLSv1_client", TLSv1_client_method()); failed |= get_put_test("TLSv1_server", TLSv1_server_method()); failed |= get_put_test("TLSv1_1", TLSv1_1_method()); failed |= get_put_test("TLSv1_1_client", TLSv1_1_client_method()); failed |= get_put_test("TLSv1_1_server", TLSv1_1_server_method()); |
︙ | ︙ |
Added jni/libressl/tests/clienttest.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 | /* * Copyright (c) 2015 Joel Sing <jsing@openbsd.org> * * 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. */ #include <openssl/ssl.h> #include <openssl/dtls1.h> #include <openssl/ssl3.h> #include <err.h> #include <stdio.h> #include <string.h> #define DTLS_HM_OFFSET (DTLS1_RT_HEADER_LENGTH + DTLS1_HM_HEADER_LENGTH) #define DTLS_RANDOM_OFFSET (DTLS_HM_OFFSET + 2) #define DTLS_CIPHER_OFFSET (DTLS_HM_OFFSET + 38) #define SSL3_HM_OFFSET (SSL3_RT_HEADER_LENGTH + SSL3_HM_HEADER_LENGTH) #define SSL3_RANDOM_OFFSET (SSL3_HM_OFFSET + 2) #define SSL3_CIPHER_OFFSET (SSL3_HM_OFFSET + 37) static unsigned char cipher_list_dtls1[] = { 0xc0, 0x14, 0xc0, 0x0a, 0x00, 0x39, 0x00, 0x38, 0xff, 0x85, 0x00, 0x88, 0x00, 0x87, 0x00, 0x81, 0xc0, 0x0f, 0xc0, 0x05, 0x00, 0x35, 0x00, 0x84, 0xc0, 0x13, 0xc0, 0x09, 0x00, 0x33, 0x00, 0x32, 0x00, 0x45, 0x00, 0x44, 0xc0, 0x0e, 0xc0, 0x04, 0x00, 0x2f, 0x00, 0x41, 0x00, 0x07, 0xc0, 0x12, 0xc0, 0x08, 0x00, 0x16, 0x00, 0x13, 0xc0, 0x0d, 0xc0, 0x03, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x12, 0x00, 0x09, 0x00, 0xff, }; static unsigned char client_hello_dtls1[] = { 0x16, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x01, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xfe, 0xff, 0xc3, 0xd6, 0x19, 0xf8, 0x5d, 0x6a, 0xe3, 0x6d, 0x16, 0x4a, 0xf7, 0x8f, 0x8e, 0x4a, 0x12, 0x87, 0xcf, 0x07, 0x99, 0xa7, 0x92, 0x40, 0xbd, 0x06, 0x9f, 0xe9, 0xd2, 0x68, 0x84, 0xff, 0x6f, 0xe8, 0x00, 0x00, 0x00, 0x44, 0xc0, 0x14, 0xc0, 0x0a, 0x00, 0x39, 0x00, 0x38, 0xff, 0x85, 0x00, 0x88, 0x00, 0x87, 0x00, 0x81, 0xc0, 0x0f, 0xc0, 0x05, 0x00, 0x35, 0x00, 0x84, 0xc0, 0x13, 0xc0, 0x09, 0x00, 0x33, 0x00, 0x32, 0x00, 0x45, 0x00, 0x44, 0xc0, 0x0e, 0xc0, 0x04, 0x00, 0x2f, 0x00, 0x41, 0x00, 0x07, 0xc0, 0x12, 0xc0, 0x08, 0x00, 0x16, 0x00, 0x13, 0xc0, 0x0d, 0xc0, 0x03, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x12, 0x00, 0x09, 0x00, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, }; static unsigned char cipher_list_tls10[] = { 0xc0, 0x14, 0xc0, 0x0a, 0x00, 0x39, 0x00, 0x38, 0xff, 0x85, 0x00, 0x88, 0x00, 0x87, 0x00, 0x81, 0xc0, 0x0f, 0xc0, 0x05, 0x00, 0x35, 0x00, 0x84, 0xc0, 0x13, 0xc0, 0x09, 0x00, 0x33, 0x00, 0x32, 0x00, 0x45, 0x00, 0x44, 0xc0, 0x0e, 0xc0, 0x04, 0x00, 0x2f, 0x00, 0x41, 0x00, 0x07, 0xc0, 0x11, 0xc0, 0x07, 0xc0, 0x0c, 0xc0, 0x02, 0x00, 0x05, 0x00, 0x04, 0xc0, 0x12, 0xc0, 0x08, 0x00, 0x16, 0x00, 0x13, 0xc0, 0x0d, 0xc0, 0x03, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x12, 0x00, 0x09, 0x00, 0xff, }; static unsigned char client_hello_tls10[] = { 0x16, 0x03, 0x01, 0x00, 0xc7, 0x01, 0x00, 0x00, 0xc3, 0x03, 0x01, 0x06, 0x6a, 0x3f, 0x0f, 0xf5, 0x19, 0x64, 0x2d, 0xfd, 0xb1, 0x4a, 0x91, 0xcd, 0x65, 0x37, 0xf8, 0x51, 0x92, 0xf9, 0xbf, 0xe9, 0x46, 0x41, 0x2e, 0x0a, 0x4d, 0xb1, 0xa8, 0x0c, 0x88, 0xec, 0x03, 0x00, 0x00, 0x50, 0xc0, 0x14, 0xc0, 0x0a, 0x00, 0x39, 0x00, 0x38, 0xff, 0x85, 0x00, 0x88, 0x00, 0x87, 0x00, 0x81, 0xc0, 0x0f, 0xc0, 0x05, 0x00, 0x35, 0x00, 0x84, 0xc0, 0x13, 0xc0, 0x09, 0x00, 0x33, 0x00, 0x32, 0x00, 0x45, 0x00, 0x44, 0xc0, 0x0e, 0xc0, 0x04, 0x00, 0x2f, 0x00, 0x41, 0x00, 0x07, 0xc0, 0x11, 0xc0, 0x07, 0xc0, 0x0c, 0xc0, 0x02, 0x00, 0x05, 0x00, 0x04, 0xc0, 0x12, 0xc0, 0x08, 0x00, 0x16, 0x00, 0x13, 0xc0, 0x0d, 0xc0, 0x03, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x12, 0x00, 0x09, 0x00, 0xff, 0x01, 0x00, 0x00, 0x4a, 0x00, 0x0b, 0x00, 0x04, 0x03, 0x00, 0x01, 0x02, 0x00, 0x0a, 0x00, 0x3a, 0x00, 0x38, 0x00, 0x0e, 0x00, 0x0d, 0x00, 0x19, 0x00, 0x1c, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x1b, 0x00, 0x18, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x1a, 0x00, 0x16, 0x00, 0x17, 0x00, 0x08, 0x00, 0x06, 0x00, 0x07, 0x00, 0x14, 0x00, 0x15, 0x00, 0x04, 0x00, 0x05, 0x00, 0x12, 0x00, 0x13, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x10, 0x00, 0x11, 0x00, 0x23, 0x00, 0x00, }; static unsigned char cipher_list_tls11[] = { 0xc0, 0x14, 0xc0, 0x0a, 0x00, 0x39, 0x00, 0x38, 0xff, 0x85, 0x00, 0x88, 0x00, 0x87, 0x00, 0x81, 0xc0, 0x0f, 0xc0, 0x05, 0x00, 0x35, 0x00, 0x84, 0xc0, 0x13, 0xc0, 0x09, 0x00, 0x33, 0x00, 0x32, 0x00, 0x45, 0x00, 0x44, 0xc0, 0x0e, 0xc0, 0x04, 0x00, 0x2f, 0x00, 0x41, 0x00, 0x07, 0xc0, 0x11, 0xc0, 0x07, 0xc0, 0x0c, 0xc0, 0x02, 0x00, 0x05, 0x00, 0x04, 0xc0, 0x12, 0xc0, 0x08, 0x00, 0x16, 0x00, 0x13, 0xc0, 0x0d, 0xc0, 0x03, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x12, 0x00, 0x09, 0x00, 0xff, }; static unsigned char client_hello_tls11[] = { 0x16, 0x03, 0x01, 0x00, 0xc7, 0x01, 0x00, 0x00, 0xc3, 0x03, 0x02, 0x2f, 0x93, 0x9c, 0x37, 0x16, 0x88, 0x53, 0xa1, 0xba, 0xb2, 0x36, 0xc9, 0xdf, 0xa4, 0x5f, 0x80, 0x6a, 0x8b, 0xfe, 0x00, 0x52, 0xd3, 0xd2, 0x68, 0x2a, 0xae, 0xca, 0x72, 0xae, 0x70, 0x77, 0x84, 0x00, 0x00, 0x50, 0xc0, 0x14, 0xc0, 0x0a, 0x00, 0x39, 0x00, 0x38, 0xff, 0x85, 0x00, 0x88, 0x00, 0x87, 0x00, 0x81, 0xc0, 0x0f, 0xc0, 0x05, 0x00, 0x35, 0x00, 0x84, 0xc0, 0x13, 0xc0, 0x09, 0x00, 0x33, 0x00, 0x32, 0x00, 0x45, 0x00, 0x44, 0xc0, 0x0e, 0xc0, 0x04, 0x00, 0x2f, 0x00, 0x41, 0x00, 0x07, 0xc0, 0x11, 0xc0, 0x07, 0xc0, 0x0c, 0xc0, 0x02, 0x00, 0x05, 0x00, 0x04, 0xc0, 0x12, 0xc0, 0x08, 0x00, 0x16, 0x00, 0x13, 0xc0, 0x0d, 0xc0, 0x03, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x12, 0x00, 0x09, 0x00, 0xff, 0x01, 0x00, 0x00, 0x4a, 0x00, 0x0b, 0x00, 0x04, 0x03, 0x00, 0x01, 0x02, 0x00, 0x0a, 0x00, 0x3a, 0x00, 0x38, 0x00, 0x0e, 0x00, 0x0d, 0x00, 0x19, 0x00, 0x1c, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x1b, 0x00, 0x18, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x1a, 0x00, 0x16, 0x00, 0x17, 0x00, 0x08, 0x00, 0x06, 0x00, 0x07, 0x00, 0x14, 0x00, 0x15, 0x00, 0x04, 0x00, 0x05, 0x00, 0x12, 0x00, 0x13, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x10, 0x00, 0x11, 0x00, 0x23, 0x00, 0x00, }; static unsigned char cipher_list_tls12_aes[] = { 0xc0, 0x30, 0xc0, 0x2c, 0xc0, 0x28, 0xc0, 0x24, 0xc0, 0x14, 0xc0, 0x0a, 0x00, 0xa3, 0x00, 0x9f, 0x00, 0x6b, 0x00, 0x6a, 0x00, 0x39, 0x00, 0x38, 0xcc, 0xa9, 0xcc, 0xa8, 0xcc, 0xaa, 0xcc, 0x14, 0xcc, 0x13, 0xcc, 0x15, 0xff, 0x85, 0x00, 0xc4, 0x00, 0xc3, 0x00, 0x88, 0x00, 0x87, 0x00, 0x81, 0xc0, 0x32, 0xc0, 0x2e, 0xc0, 0x2a, 0xc0, 0x26, 0xc0, 0x0f, 0xc0, 0x05, 0x00, 0x9d, 0x00, 0x3d, 0x00, 0x35, 0x00, 0xc0, 0x00, 0x84, 0xc0, 0x2f, 0xc0, 0x2b, 0xc0, 0x27, 0xc0, 0x23, 0xc0, 0x13, 0xc0, 0x09, 0x00, 0xa2, 0x00, 0x9e, 0x00, 0x67, 0x00, 0x40, 0x00, 0x33, 0x00, 0x32, 0x00, 0xbe, 0x00, 0xbd, 0x00, 0x45, 0x00, 0x44, 0xc0, 0x31, 0xc0, 0x2d, 0xc0, 0x29, 0xc0, 0x25, 0xc0, 0x0e, 0xc0, 0x04, 0x00, 0x9c, 0x00, 0x3c, 0x00, 0x2f, 0x00, 0xba, 0x00, 0x41, 0x00, 0x07, 0xc0, 0x11, 0xc0, 0x07, 0xc0, 0x0c, 0xc0, 0x02, 0x00, 0x05, 0x00, 0x04, 0xc0, 0x12, 0xc0, 0x08, 0x00, 0x16, 0x00, 0x13, 0xc0, 0x0d, 0xc0, 0x03, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x12, 0x00, 0x09, 0x00, 0xff, }; static unsigned char cipher_list_tls12_chacha[] = { 0xcc, 0xa9, 0xcc, 0xa8, 0xcc, 0xaa, 0xcc, 0x14, 0xcc, 0x13, 0xcc, 0x15, 0xc0, 0x30, 0xc0, 0x2c, 0xc0, 0x28, 0xc0, 0x24, 0xc0, 0x14, 0xc0, 0x0a, 0x00, 0xa3, 0x00, 0x9f, 0x00, 0x6b, 0x00, 0x6a, 0x00, 0x39, 0x00, 0x38, 0xff, 0x85, 0x00, 0xc4, 0x00, 0xc3, 0x00, 0x88, 0x00, 0x87, 0x00, 0x81, 0xc0, 0x32, 0xc0, 0x2e, 0xc0, 0x2a, 0xc0, 0x26, 0xc0, 0x0f, 0xc0, 0x05, 0x00, 0x9d, 0x00, 0x3d, 0x00, 0x35, 0x00, 0xc0, 0x00, 0x84, 0xc0, 0x2f, 0xc0, 0x2b, 0xc0, 0x27, 0xc0, 0x23, 0xc0, 0x13, 0xc0, 0x09, 0x00, 0xa2, 0x00, 0x9e, 0x00, 0x67, 0x00, 0x40, 0x00, 0x33, 0x00, 0x32, 0x00, 0xbe, 0x00, 0xbd, 0x00, 0x45, 0x00, 0x44, 0xc0, 0x31, 0xc0, 0x2d, 0xc0, 0x29, 0xc0, 0x25, 0xc0, 0x0e, 0xc0, 0x04, 0x00, 0x9c, 0x00, 0x3c, 0x00, 0x2f, 0x00, 0xba, 0x00, 0x41, 0x00, 0x07, 0xc0, 0x11, 0xc0, 0x07, 0xc0, 0x0c, 0xc0, 0x02, 0x00, 0x05, 0x00, 0x04, 0xc0, 0x12, 0xc0, 0x08, 0x00, 0x16, 0x00, 0x13, 0xc0, 0x0d, 0xc0, 0x03, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x12, 0x00, 0x09, 0x00, 0xff, }; static unsigned char client_hello_tls12[] = { 0x16, 0x03, 0x01, 0x01, 0x41, 0x01, 0x00, 0x01, 0x3d, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xcc, 0xa9, 0xcc, 0xa8, 0xcc, 0xaa, 0xcc, 0x14, 0xcc, 0x13, 0xcc, 0x15, 0xc0, 0x30, 0xc0, 0x2c, 0xc0, 0x28, 0xc0, 0x24, 0xc0, 0x14, 0xc0, 0x0a, 0x00, 0xa3, 0x00, 0x9f, 0x00, 0x6b, 0x00, 0x6a, 0x00, 0x39, 0x00, 0x38, 0xff, 0x85, 0x00, 0xc4, 0x00, 0xc3, 0x00, 0x88, 0x00, 0x87, 0x00, 0x81, 0xc0, 0x32, 0xc0, 0x2e, 0xc0, 0x2a, 0xc0, 0x26, 0xc0, 0x0f, 0xc0, 0x05, 0x00, 0x9d, 0x00, 0x3d, 0x00, 0x35, 0x00, 0xc0, 0x00, 0x84, 0xc0, 0x2f, 0xc0, 0x2b, 0xc0, 0x27, 0xc0, 0x23, 0xc0, 0x13, 0xc0, 0x09, 0x00, 0xa2, 0x00, 0x9e, 0x00, 0x67, 0x00, 0x40, 0x00, 0x33, 0x00, 0x32, 0x00, 0xbe, 0x00, 0xbd, 0x00, 0x45, 0x00, 0x44, 0xc0, 0x31, 0xc0, 0x2d, 0xc0, 0x29, 0xc0, 0x25, 0xc0, 0x0e, 0xc0, 0x04, 0x00, 0x9c, 0x00, 0x3c, 0x00, 0x2f, 0x00, 0xba, 0x00, 0x41, 0x00, 0x07, 0xc0, 0x11, 0xc0, 0x07, 0xc0, 0x0c, 0xc0, 0x02, 0x00, 0x05, 0x00, 0x04, 0xc0, 0x12, 0xc0, 0x08, 0x00, 0x16, 0x00, 0x13, 0xc0, 0x0d, 0xc0, 0x03, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x12, 0x00, 0x09, 0x00, 0xff, 0x01, 0x00, 0x00, 0x74, 0x00, 0x0b, 0x00, 0x04, 0x03, 0x00, 0x01, 0x02, 0x00, 0x0a, 0x00, 0x3a, 0x00, 0x38, 0x00, 0x0e, 0x00, 0x0d, 0x00, 0x19, 0x00, 0x1c, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x1b, 0x00, 0x18, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x1a, 0x00, 0x16, 0x00, 0x17, 0x00, 0x08, 0x00, 0x06, 0x00, 0x07, 0x00, 0x14, 0x00, 0x15, 0x00, 0x04, 0x00, 0x05, 0x00, 0x12, 0x00, 0x13, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x10, 0x00, 0x11, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x26, 0x00, 0x24, 0x06, 0x01, 0x06, 0x02, 0x06, 0x03, 0xef, 0xef, 0x05, 0x01, 0x05, 0x02, 0x05, 0x03, 0x04, 0x01, 0x04, 0x02, 0x04, 0x03, 0xee, 0xee, 0xed, 0xed, 0x03, 0x01, 0x03, 0x02, 0x03, 0x03, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, }; struct client_hello_test { const unsigned char *desc; const int protocol; const size_t random_start; const SSL_METHOD *(*ssl_method)(void); const long ssl_options; }; static struct client_hello_test client_hello_tests[] = { { .desc = "DTLSv1 client", .protocol = DTLS1_VERSION, .random_start = DTLS_RANDOM_OFFSET, .ssl_method = DTLSv1_client_method, }, { .desc = "TLSv1 client", .protocol = TLS1_VERSION, .random_start = SSL3_RANDOM_OFFSET, .ssl_method = TLSv1_client_method, }, { .desc = "TLSv1_1 client", .protocol = TLS1_1_VERSION, .random_start = SSL3_RANDOM_OFFSET, .ssl_method = TLSv1_1_client_method, }, { .desc = "TLSv1_2 client", .protocol = TLS1_2_VERSION, .random_start = SSL3_RANDOM_OFFSET, .ssl_method = TLSv1_2_client_method, }, { .desc = "SSLv23 default", .protocol = TLS1_2_VERSION, .random_start = SSL3_RANDOM_OFFSET, .ssl_method = SSLv23_client_method, .ssl_options = 0, }, { .desc = "SSLv23 (no TLSv1.2)", .protocol = TLS1_1_VERSION, .random_start = SSL3_RANDOM_OFFSET, .ssl_method = SSLv23_client_method, .ssl_options = SSL_OP_NO_TLSv1_2, }, { .desc = "SSLv23 (no TLSv1.1)", .protocol = TLS1_VERSION, .random_start = SSL3_RANDOM_OFFSET, .ssl_method = SSLv23_client_method, .ssl_options = SSL_OP_NO_TLSv1_1, }, { .desc = "TLS default", .protocol = TLS1_2_VERSION, .random_start = SSL3_RANDOM_OFFSET, .ssl_method = TLS_client_method, .ssl_options = 0, }, { .desc = "TLS (no TLSv1.2)", .protocol = TLS1_1_VERSION, .random_start = SSL3_RANDOM_OFFSET, .ssl_method = TLS_client_method, .ssl_options = SSL_OP_NO_TLSv1_2, }, { .desc = "TLS (no TLSv1.1)", .protocol = TLS1_VERSION, .random_start = SSL3_RANDOM_OFFSET, .ssl_method = TLS_client_method, .ssl_options = SSL_OP_NO_TLSv1_1, }, { .desc = "TLS (no TLSv1.0, no TLSv1.1)", .protocol = TLS1_2_VERSION, .random_start = SSL3_RANDOM_OFFSET, .ssl_method = TLS_client_method, .ssl_options = SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1, }, }; #define N_CLIENT_HELLO_TESTS \ (sizeof(client_hello_tests) / sizeof(*client_hello_tests)) static void hexdump(const unsigned char *buf, size_t len) { size_t i; for (i = 1; i <= len; i++) fprintf(stderr, " 0x%02hhx,%s", buf[i - 1], i % 8 ? "" : "\n"); fprintf(stderr, "\n"); } static inline int ssl_aes_is_accelerated(void) { #if defined(__i386__) || defined(__x86_64__) return ((OPENSSL_cpu_caps() & (1ULL << 57)) != 0); #else return (0); #endif } static int make_client_hello(int protocol, char **out, size_t *outlen) { size_t client_hello_len, cipher_list_len, cipher_list_offset; const char *client_hello, *cipher_list; char *p; *out = NULL; *outlen = 0; switch (protocol) { case DTLS1_VERSION: client_hello = client_hello_dtls1; client_hello_len = sizeof(client_hello_dtls1); cipher_list = cipher_list_dtls1; cipher_list_len = sizeof(cipher_list_dtls1); cipher_list_offset = DTLS_CIPHER_OFFSET; break; case TLS1_VERSION: client_hello = client_hello_tls10; client_hello_len = sizeof(client_hello_tls10); cipher_list = cipher_list_tls10; cipher_list_len = sizeof(cipher_list_tls10); cipher_list_offset = SSL3_CIPHER_OFFSET; break; case TLS1_1_VERSION: client_hello = client_hello_tls11; client_hello_len = sizeof(client_hello_tls11); cipher_list = cipher_list_tls11; cipher_list_len = sizeof(cipher_list_tls11); cipher_list_offset = SSL3_CIPHER_OFFSET; break; case TLS1_2_VERSION: client_hello = client_hello_tls12; client_hello_len = sizeof(client_hello_tls12); if (ssl_aes_is_accelerated() == 1) cipher_list = cipher_list_tls12_aes; else cipher_list = cipher_list_tls12_chacha; cipher_list_len = sizeof(cipher_list_tls12_chacha); cipher_list_offset = SSL3_CIPHER_OFFSET; break; default: return (-1); } if ((p = malloc(client_hello_len)) == NULL) return (-1); memcpy(p, client_hello, client_hello_len); memcpy(p + cipher_list_offset, cipher_list, cipher_list_len); *out = p; *outlen = client_hello_len; return (0); } static int client_hello_test(int testno, struct client_hello_test *cht) { BIO *rbio = NULL, *wbio = NULL; SSL_CTX *ssl_ctx = NULL; SSL *ssl = NULL; char *client_hello = NULL; size_t client_hello_len; char *wbuf, rbuf[1]; int ret = 1; size_t i; long len; fprintf(stderr, "Test %i - %s\n", testno, cht->desc); /* Providing a small buf causes *_get_server_hello() to return. */ if ((rbio = BIO_new_mem_buf(rbuf, sizeof(rbuf))) == NULL) { fprintf(stderr, "Failed to setup rbio\n"); goto failure; } if ((wbio = BIO_new(BIO_s_mem())) == NULL) { fprintf(stderr, "Failed to setup wbio\n"); goto failure; } if ((ssl_ctx = SSL_CTX_new(cht->ssl_method())) == NULL) { fprintf(stderr, "SSL_CTX_new() returned NULL\n"); goto failure; } SSL_CTX_set_options(ssl_ctx, cht->ssl_options); if ((ssl = SSL_new(ssl_ctx)) == NULL) { fprintf(stderr, "SSL_new() returned NULL\n"); goto failure; } rbio->references = 2; wbio->references = 2; SSL_set_bio(ssl, rbio, wbio); if (SSL_connect(ssl) != 0) { fprintf(stderr, "SSL_connect() returned non-zero\n"); goto failure; } len = BIO_get_mem_data(wbio, &wbuf); if (make_client_hello(cht->protocol, &client_hello, &client_hello_len) != 0) goto failure; if ((size_t)len != client_hello_len) { fprintf(stderr, "FAIL: test returned ClientHello length %li, " "want %zu\n", len, client_hello_len); fprintf(stderr, "received:\n"); hexdump(wbuf, len); goto failure; } /* We expect the client random to differ. */ i = cht->random_start + SSL3_RANDOM_SIZE; if (memcmp(client_hello, wbuf, cht->random_start) != 0 || memcmp(&client_hello[cht->random_start], &wbuf[cht->random_start], SSL3_RANDOM_SIZE) == 0 || memcmp(&client_hello[i], &wbuf[i], len - i) != 0) { fprintf(stderr, "FAIL: ClientHello differs:\n"); fprintf(stderr, "received:\n"); hexdump(wbuf, len); fprintf(stderr, "test data:\n"); hexdump(client_hello, client_hello_len); fprintf(stderr, "\n"); goto failure; } ret = 0; failure: SSL_CTX_free(ssl_ctx); SSL_free(ssl); rbio->references = 1; wbio->references = 1; BIO_free(rbio); BIO_free(wbio); free(client_hello); return (ret); } int main(int argc, char **argv) { int failed = 0; size_t i; SSL_library_init(); for (i = 0; i < N_CLIENT_HELLO_TESTS; i++) failed |= client_hello_test(i, &client_hello_tests[i]); return (failed); } |
Changes to jni/libressl/tests/destest.c.
︙ | ︙ | |||
730 731 732 733 734 735 736 | (unsigned long)lqret[3],0x501c2c26UL); err=1; } printf("input word alignment test"); for (i=0; i<4; i++) { | | | | 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 | (unsigned long)lqret[3],0x501c2c26UL); err=1; } printf("input word alignment test"); for (i=0; i<4; i++) { printf(" %u",i); DES_ncbc_encrypt(&(cbc_out[i]),cbc_in, strlen((char *)cbc_data)+1,&ks, &cbc_iv,DES_ENCRYPT); } printf("\noutput word alignment test"); for (i=0; i<4; i++) { printf(" %u",i); DES_ncbc_encrypt(cbc_out,&(cbc_in[i]), strlen((char *)cbc_data)+1,&ks, &cbc_iv,DES_ENCRYPT); } printf("\n"); printf("fast crypt test "); str=crypt("testing","ef"); |
︙ | ︙ |
Changes to jni/libressl/tests/dhtest.c.
︙ | ︙ | |||
69 70 71 72 73 74 75 | #include <openssl/crypto.h> #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/dh.h> | | | > > > > > > > > > > > > > > > | < | | | | | > < < < < < < < < < < < | > < < < < < < < | | < | < < < | < < < < < < < < < < | < | | | < < < < < < < < < < < < < | 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | #include <openssl/crypto.h> #include <openssl/bio.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/dh.h> static int cb(int p, int n, BN_GENCB *arg) { char c='*'; if (p == 0) c='.'; if (p == 1) c='+'; if (p == 2) c='*'; if (p == 3) c='\n'; BIO_write(arg->arg,&c,1); (void)BIO_flush(arg->arg); return 1; } int main(int argc, char *argv[]) { BN_GENCB _cb; DH *a; char buf[12]; unsigned char *abuf=NULL; int i,alen,aout,ret=1; BIO *out; out=BIO_new(BIO_s_file()); if (out == NULL) exit(1); BIO_set_fp(out,stdout,BIO_NOCLOSE); BN_GENCB_set(&_cb, &cb, out); if (((a = DH_new()) == NULL) || !DH_generate_parameters_ex(a, 64, DH_GENERATOR_5, &_cb)) goto err; if (!DH_check(a, &i)) goto err; if (i & DH_CHECK_P_NOT_PRIME) BIO_puts(out, "p value is not prime\n"); if (i & DH_CHECK_P_NOT_SAFE_PRIME) BIO_puts(out, "p value is not a safe prime\n"); if (i & DH_UNABLE_TO_CHECK_GENERATOR) BIO_puts(out, "unable to check the generator value\n"); if (i & DH_NOT_SUITABLE_GENERATOR) BIO_puts(out, "the g value is not a generator\n"); BIO_puts(out,"\np ="); BN_print(out,a->p); BIO_puts(out,"\ng ="); BN_print(out,a->g); BIO_puts(out,"\n"); if (!DH_generate_key(a)) goto err; BIO_puts(out,"pri 1="); BN_print(out,a->priv_key); BIO_puts(out,"\npub 1="); BN_print(out,a->pub_key); BIO_puts(out,"\n"); alen=DH_size(a); abuf=malloc(alen); aout=DH_compute_key(abuf,a->pub_key,a); BIO_puts(out,"key1 ="); for (i=0; i<aout; i++) { snprintf(buf,sizeof buf,"%02X",abuf[i]); BIO_puts(out,buf); } BIO_puts(out,"\n"); if (aout < 4) { fprintf(stderr,"Error in DH routines\n"); ret=1; } else ret=0; err: ERR_print_errors_fp(stderr); free(abuf); if (a != NULL) DH_free(a); BIO_free(out); exit(ret); } |
Changes to jni/libressl/tests/dsatest.c.
︙ | ︙ | |||
178 179 180 181 182 183 184 | j=sizeof(out_g); if ((i != j) || (memcmp(buf,out_g,i) != 0)) { BIO_printf(bio_err,"g value is wrong\n"); goto end; } | < < < < < < < | 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | j=sizeof(out_g); if ((i != j) || (memcmp(buf,out_g,i) != 0)) { BIO_printf(bio_err,"g value is wrong\n"); goto end; } DSA_generate_key(dsa); DSA_sign(0, str1, 20, sig, &siglen, dsa); if (DSA_verify(0, str1, 20, sig, siglen, dsa) == 1) ret=1; end: if (!ret) |
︙ | ︙ |
Changes to jni/libressl/tests/ecdhtest.c.
︙ | ︙ | |||
17 18 19 20 21 22 23 | * Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright | | | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | * Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this |
︙ | ︙ | |||
78 79 80 81 82 83 84 | #include <openssl/sha.h> #include <openssl/err.h> #include <openssl/ec.h> #include <openssl/ecdh.h> static const int KDF1_SHA1_len = 20; | > | | | > | | > | | < | > < < < | > | > | > | > | | | > | | < > | | | < | | | | > | < > | | | | < | | | | | | | > | | | | > | | < | < | | < | | | | < | < | | > | | | | | | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | | < > > | < | < | | < < > > | | > | | | | | | | | > | < < < < < | < | > > > > > | > | | | | | | > | | > | > > | > | > > | > | > | > > | > > | > > | > > | > > | > > | > > | > > | > > | > > | | | 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 | #include <openssl/sha.h> #include <openssl/err.h> #include <openssl/ec.h> #include <openssl/ecdh.h> static const int KDF1_SHA1_len = 20; static void * KDF1_SHA1(const void *in, size_t inlen, void *out, size_t *outlen) { #ifndef OPENSSL_NO_SHA if (*outlen < SHA_DIGEST_LENGTH) return NULL; else *outlen = SHA_DIGEST_LENGTH; return SHA1(in, inlen, out); #else return NULL; #endif } static int test_ecdh_curve(int nid, const char *text, BN_CTX *ctx, BIO *out) { BIGNUM *x_a = NULL, *y_a = NULL, *x_b = NULL, *y_b = NULL; EC_KEY *a = NULL, *b = NULL; const EC_GROUP *group; unsigned char *abuf = NULL, *bbuf = NULL; int i, alen, blen, aout, bout, ret = 0; char buf[12]; a = EC_KEY_new_by_curve_name(nid); b = EC_KEY_new_by_curve_name(nid); if (a == NULL || b == NULL) goto err; group = EC_KEY_get0_group(a); if ((x_a = BN_new()) == NULL) goto err; if ((y_a = BN_new()) == NULL) goto err; if ((x_b = BN_new()) == NULL) goto err; if ((y_b = BN_new()) == NULL) goto err; BIO_puts(out, "Testing key generation with "); BIO_puts(out, text); (void)BIO_flush(out); if (!EC_KEY_generate_key(a)) goto err; if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) == NID_X9_62_prime_field) { if (!EC_POINT_get_affine_coordinates_GFp(group, EC_KEY_get0_public_key(a), x_a, y_a, ctx)) goto err; } #ifndef OPENSSL_NO_EC2M else { if (!EC_POINT_get_affine_coordinates_GF2m(group, EC_KEY_get0_public_key(a), x_a, y_a, ctx)) goto err; } #endif BIO_printf(out, " ."); (void)BIO_flush(out); if (!EC_KEY_generate_key(b)) goto err; if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) == NID_X9_62_prime_field) { if (!EC_POINT_get_affine_coordinates_GFp(group, EC_KEY_get0_public_key(b), x_b, y_b, ctx)) goto err; } #ifndef OPENSSL_NO_EC2M else { if (!EC_POINT_get_affine_coordinates_GF2m(group, EC_KEY_get0_public_key(b), x_b, y_b, ctx)) goto err; } #endif BIO_printf(out, "."); (void)BIO_flush(out); alen = KDF1_SHA1_len; abuf = malloc(alen); aout = ECDH_compute_key(abuf, alen, EC_KEY_get0_public_key(b), a, KDF1_SHA1); BIO_printf(out, "."); (void)BIO_flush(out); blen = KDF1_SHA1_len; bbuf = malloc(blen); bout = ECDH_compute_key(bbuf, blen, EC_KEY_get0_public_key(a), b, KDF1_SHA1); BIO_printf(out, "."); (void)BIO_flush(out); if ((aout < 4) || (bout != aout) || (memcmp(abuf, bbuf, aout) != 0)) { BIO_printf(out, " failed\n\n"); BIO_printf(out, "key a:\n"); BIO_printf(out, "private key: "); BN_print(out, EC_KEY_get0_private_key(a)); BIO_printf(out, "\n"); BIO_printf(out, "public key (x,y): "); BN_print(out, x_a); BIO_printf(out, ","); BN_print(out, y_a); BIO_printf(out, "\nkey b:\n"); BIO_printf(out, "private key: "); BN_print(out, EC_KEY_get0_private_key(b)); BIO_printf(out, "\n"); BIO_printf(out, "public key (x,y): "); BN_print(out, x_b); BIO_printf(out, ","); BN_print(out, y_b); BIO_printf(out, "\n"); BIO_printf(out, "generated key a: "); for (i = 0; i < bout; i++) { snprintf(buf, sizeof buf, "%02X", bbuf[i]); BIO_puts(out, buf); } BIO_printf(out, "\n"); BIO_printf(out, "generated key b: "); for (i = 0; i < aout; i++) { snprintf(buf, sizeof buf, "%02X", abuf[i]); BIO_puts(out, buf); } BIO_printf(out, "\n"); fprintf(stderr, "Error in ECDH routines\n"); ret = 0; } else { BIO_printf(out, " ok\n"); ret = 1; } err: ERR_print_errors_fp(stderr); free(abuf); free(bbuf); BN_free(x_a); BN_free(y_a); BN_free(x_b); BN_free(y_b); EC_KEY_free(b); EC_KEY_free(a); return (ret); } /* Keys and shared secrets from RFC 7027 */ static const unsigned char bp256_da[] = { 0x81, 0xDB, 0x1E, 0xE1, 0x00, 0x15, 0x0F, 0xF2, 0xEA, 0x33, 0x8D, 0x70, 0x82, 0x71, 0xBE, 0x38, 0x30, 0x0C, 0xB5, 0x42, 0x41, 0xD7, 0x99, 0x50, 0xF7, 0x7B, 0x06, 0x30, 0x39, 0x80, 0x4F, 0x1D }; static const unsigned char bp256_db[] = { 0x55, 0xE4, 0x0B, 0xC4, 0x1E, 0x37, 0xE3, 0xE2, 0xAD, 0x25, 0xC3, 0xC6, 0x65, 0x45, 0x11, 0xFF, 0xA8, 0x47, 0x4A, 0x91, 0xA0, 0x03, 0x20, 0x87, 0x59, 0x38, 0x52, 0xD3, 0xE7, 0xD7, 0x6B, 0xD3 }; static const unsigned char bp256_Z[] = { 0x89, 0xAF, 0xC3, 0x9D, 0x41, 0xD3, 0xB3, 0x27, 0x81, 0x4B, 0x80, 0x94, 0x0B, 0x04, 0x25, 0x90, 0xF9, 0x65, 0x56, 0xEC, 0x91, 0xE6, 0xAE, 0x79, 0x39, 0xBC, 0xE3, 0x1F, 0x3A, 0x18, 0xBF, 0x2B }; static const unsigned char bp384_da[] = { 0x1E, 0x20, 0xF5, 0xE0, 0x48, 0xA5, 0x88, 0x6F, 0x1F, 0x15, 0x7C, 0x74, 0xE9, 0x1B, 0xDE, 0x2B, 0x98, 0xC8, 0xB5, 0x2D, 0x58, 0xE5, 0x00, 0x3D, 0x57, 0x05, 0x3F, 0xC4, 0xB0, 0xBD, 0x65, 0xD6, 0xF1, 0x5E, 0xB5, 0xD1, 0xEE, 0x16, 0x10, 0xDF, 0x87, 0x07, 0x95, 0x14, 0x36, 0x27, 0xD0, 0x42 }; static const unsigned char bp384_db[] = { 0x03, 0x26, 0x40, 0xBC, 0x60, 0x03, 0xC5, 0x92, 0x60, 0xF7, 0x25, 0x0C, 0x3D, 0xB5, 0x8C, 0xE6, 0x47, 0xF9, 0x8E, 0x12, 0x60, 0xAC, 0xCE, 0x4A, 0xCD, 0xA3, 0xDD, 0x86, 0x9F, 0x74, 0xE0, 0x1F, 0x8B, 0xA5, 0xE0, 0x32, 0x43, 0x09, 0xDB, 0x6A, 0x98, 0x31, 0x49, 0x7A, 0xBA, 0xC9, 0x66, 0x70 }; static const unsigned char bp384_Z[] = { 0x0B, 0xD9, 0xD3, 0xA7, 0xEA, 0x0B, 0x3D, 0x51, 0x9D, 0x09, 0xD8, 0xE4, 0x8D, 0x07, 0x85, 0xFB, 0x74, 0x4A, 0x6B, 0x35, 0x5E, 0x63, 0x04, 0xBC, 0x51, 0xC2, 0x29, 0xFB, 0xBC, 0xE2, 0x39, 0xBB, 0xAD, 0xF6, 0x40, 0x37, 0x15, 0xC3, 0x5D, 0x4F, 0xB2, 0xA5, 0x44, 0x4F, 0x57, 0x5D, 0x4F, 0x42 }; static const unsigned char bp512_da[] = { 0x16, 0x30, 0x2F, 0xF0, 0xDB, 0xBB, 0x5A, 0x8D, 0x73, 0x3D, 0xAB, 0x71, 0x41, 0xC1, 0xB4, 0x5A, 0xCB, 0xC8, 0x71, 0x59, 0x39, 0x67, 0x7F, 0x6A, 0x56, 0x85, 0x0A, 0x38, 0xBD, 0x87, 0xBD, 0x59, 0xB0, 0x9E, 0x80, 0x27, 0x96, 0x09, 0xFF, 0x33, 0x3E, 0xB9, 0xD4, 0xC0, 0x61, 0x23, 0x1F, 0xB2, 0x6F, 0x92, 0xEE, 0xB0, 0x49, 0x82, 0xA5, 0xF1, 0xD1, 0x76, 0x4C, 0xAD, 0x57, 0x66, 0x54, 0x22 }; static const unsigned char bp512_db[] = { 0x23, 0x0E, 0x18, 0xE1, 0xBC, 0xC8, 0x8A, 0x36, 0x2F, 0xA5, 0x4E, 0x4E, 0xA3, 0x90, 0x20, 0x09, 0x29, 0x2F, 0x7F, 0x80, 0x33, 0x62, 0x4F, 0xD4, 0x71, 0xB5, 0xD8, 0xAC, 0xE4, 0x9D, 0x12, 0xCF, 0xAB, 0xBC, 0x19, 0x96, 0x3D, 0xAB, 0x8E, 0x2F, 0x1E, 0xBA, 0x00, 0xBF, 0xFB, 0x29, 0xE4, 0xD7, 0x2D, 0x13, 0xF2, 0x22, 0x45, 0x62, 0xF4, 0x05, 0xCB, 0x80, 0x50, 0x36, 0x66, 0xB2, 0x54, 0x29 }; static const unsigned char bp512_Z[] = { 0xA7, 0x92, 0x70, 0x98, 0x65, 0x5F, 0x1F, 0x99, 0x76, 0xFA, 0x50, 0xA9, 0xD5, 0x66, 0x86, 0x5D, 0xC5, 0x30, 0x33, 0x18, 0x46, 0x38, 0x1C, 0x87, 0x25, 0x6B, 0xAF, 0x32, 0x26, 0x24, 0x4B, 0x76, 0xD3, 0x64, 0x03, 0xC0, 0x24, 0xD7, 0xBB, 0xF0, 0xAA, 0x08, 0x03, 0xEA, 0xFF, 0x40, 0x5D, 0x3D, 0x24, 0xF1, 0x1A, 0x9B, 0x5C, 0x0B, 0xEF, 0x67, 0x9F, 0xE1, 0x45, 0x4B, 0x21, 0xC4, 0xCD, 0x1F }; /* Given private value and NID, create EC_KEY structure */ static EC_KEY * mk_eckey(int nid, const unsigned char *p, size_t plen) { EC_KEY *k = NULL; BIGNUM *priv = NULL; EC_POINT *pub = NULL; const EC_GROUP *grp; int ok = 0; k = EC_KEY_new_by_curve_name(nid); if (!k) goto err; priv = BN_bin2bn(p, plen, NULL); if (!priv) goto err; if (!EC_KEY_set_private_key(k, priv)) goto err; grp = EC_KEY_get0_group(k); pub = EC_POINT_new(grp); if (!pub) goto err; if (!EC_POINT_mul(grp, pub, priv, NULL, NULL, NULL)) goto err; if (!EC_KEY_set_public_key(k, pub)) goto err; ok = 1; err: BN_clear_free(priv); EC_POINT_free(pub); if (!ok) { EC_KEY_free(k); k = NULL; } return (k); } /* Known answer test: compute shared secret and check it matches * expected value. */ static int ecdh_kat(BIO *out, const char *cname, int nid, const unsigned char *k1, size_t k1_len, const unsigned char *k2, size_t k2_len, const unsigned char *Z, size_t Zlen) { int rv = 0; EC_KEY *key1 = NULL, *key2 = NULL; unsigned char *Ztmp = NULL; size_t Ztmplen; BIO_puts(out, "Testing ECDH shared secret with "); BIO_puts(out, cname); key1 = mk_eckey(nid, k1, k1_len); key2 = mk_eckey(nid, k2, k2_len); if (!key1 || !key2) goto err; Ztmplen = ECDH_size(key1); if (Ztmplen != Zlen) goto err; Ztmp = malloc(Ztmplen); if (!ECDH_compute_key(Ztmp, Ztmplen, EC_KEY_get0_public_key(key2), key1, 0)) goto err; if (memcmp(Ztmp, Z, Zlen)) goto err; memset(Ztmp, 0, Zlen); if (!ECDH_compute_key(Ztmp, Ztmplen, EC_KEY_get0_public_key(key1), key2, 0)) goto err; if (memcmp(Ztmp, Z, Zlen)) goto err; rv = 1; err: if (rv) BIO_puts(out, " ok\n"); else { fprintf(stderr, "Error in ECDH routines\n"); ERR_print_errors_fp(stderr); } EC_KEY_free(key1); EC_KEY_free(key2); free(Ztmp); return rv; } #define test_ecdh_kat(bio, curve, bits) \ ecdh_kat(bio, curve, NID_brainpoolP##bits##r1, \ bp##bits##_da, sizeof(bp##bits##_da), \ bp##bits##_db, sizeof(bp##bits##_db), \ bp##bits##_Z, sizeof(bp##bits##_Z)) int main(int argc, char *argv[]) { BN_CTX *ctx = NULL; int ret = 1; BIO *out; out = BIO_new(BIO_s_file()); if (out == NULL) exit(1); BIO_set_fp(out, stdout, BIO_NOCLOSE); if ((ctx = BN_CTX_new()) == NULL) goto err; /* NIST PRIME CURVES TESTS */ if (!test_ecdh_curve(NID_X9_62_prime192v1, "NIST Prime-Curve P-192", ctx, out)) goto err; if (!test_ecdh_curve(NID_secp224r1, "NIST Prime-Curve P-224", ctx, out)) goto err; if (!test_ecdh_curve(NID_X9_62_prime256v1, "NIST Prime-Curve P-256", ctx, out)) goto err; if (!test_ecdh_curve(NID_secp384r1, "NIST Prime-Curve P-384", ctx, out)) goto err; if (!test_ecdh_curve(NID_secp521r1, "NIST Prime-Curve P-521", ctx, out)) goto err; #ifndef OPENSSL_NO_EC2M /* NIST BINARY CURVES TESTS */ if (!test_ecdh_curve(NID_sect163k1, "NIST Binary-Curve K-163", ctx, out)) goto err; if (!test_ecdh_curve(NID_sect163r2, "NIST Binary-Curve B-163", ctx, out)) goto err; if (!test_ecdh_curve(NID_sect233k1, "NIST Binary-Curve K-233", ctx, out)) goto err; if (!test_ecdh_curve(NID_sect233r1, "NIST Binary-Curve B-233", ctx, out)) goto err; if (!test_ecdh_curve(NID_sect283k1, "NIST Binary-Curve K-283", ctx, out)) goto err; if (!test_ecdh_curve(NID_sect283r1, "NIST Binary-Curve B-283", ctx, out)) goto err; if (!test_ecdh_curve(NID_sect409k1, "NIST Binary-Curve K-409", ctx, out)) goto err; if (!test_ecdh_curve(NID_sect409r1, "NIST Binary-Curve B-409", ctx, out)) goto err; if (!test_ecdh_curve(NID_sect571k1, "NIST Binary-Curve K-571", ctx, out)) goto err; if (!test_ecdh_curve(NID_sect571r1, "NIST Binary-Curve B-571", ctx, out)) goto err; #endif if (!test_ecdh_kat(out, "Brainpool Prime-Curve brainpoolP256r1", 256)) goto err; if (!test_ecdh_kat(out, "Brainpool Prime-Curve brainpoolP384r1", 384)) goto err; if (!test_ecdh_kat(out, "Brainpool Prime-Curve brainpoolP512r1", 512)) goto err; ret = 0; err: ERR_print_errors_fp(stderr); BN_CTX_free(ctx); BIO_free(out); CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); CRYPTO_mem_leaks_fp(stderr); exit(ret); } |
Changes to jni/libressl/tests/ectest.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* crypto/ec/ectest.c */ /* * Originally written by Bodo Moeller for the OpenSSL project. */ /* ==================================================================== * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* crypto/ec/ectest.c */ /* * Originally written by Bodo Moeller for the OpenSSL project. */ /* ==================================================================== * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this |
︙ | ︙ | |||
54 55 56 57 58 59 60 | * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * | | | | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * * Portions of the attached software ("Contribution") are developed by * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. * * The Contribution is licensed pursuant to the OpenSSL open source * license provided above. * * The elliptic curve binary polynomial software is originally written by * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. * */ #include <stdio.h> #include <stdlib.h> #include <string.h> |
︙ | ︙ | |||
92 93 94 95 96 97 98 | } while (0) #define TIMING_BASE_PT 0 #define TIMING_RAND_PT 1 #define TIMING_SIMUL 2 /* test multiplication with group order, long and negative scalars */ | > | | | > > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | | | | > | > | > | > | > | | > | > | > | > | | > | > | | > | > | > | > | > | > | > | > | < | > | | | > | < | > | | | > | > | | > | | > | > | > | > | > | | | > | > | > | | | > | > | > | | > | > | > | | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | | > | > | | > | > | > | > | > | > | > | > | > | > | > | > | > | > | | > | > | | > | > | > | > | > | > | > | > | > | > | > | > | > | | > | | > | > | | > | > | > | > | > | > | > | > | | > | > | > | > | | > | | > | > | | | > | | | > | | > | > | | > | > | | > | | > | > | > | | | | > | | | | | > | | | > | > | | | > | > | | | > | | > | | > | > | > | > | > | > | > | > | | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > > | > > > | > | > | > | > | > | | | | 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 | } while (0) #define TIMING_BASE_PT 0 #define TIMING_RAND_PT 1 #define TIMING_SIMUL 2 /* test multiplication with group order, long and negative scalars */ static void group_order_tests(EC_GROUP *group) { BIGNUM *n1, *n2, *order; EC_POINT *P = EC_POINT_new(group); EC_POINT *Q = EC_POINT_new(group); BN_CTX *ctx = BN_CTX_new(); n1 = BN_new(); n2 = BN_new(); order = BN_new(); fprintf(stdout, "verify group order ..."); fflush(stdout); if (!EC_GROUP_get_order(group, order, ctx)) ABORT; if (!EC_POINT_mul(group, Q, order, NULL, NULL, ctx)) ABORT; if (!EC_POINT_is_at_infinity(group, Q)) ABORT; fprintf(stdout, "."); fflush(stdout); if (!EC_GROUP_precompute_mult(group, ctx)) ABORT; if (!EC_POINT_mul(group, Q, order, NULL, NULL, ctx)) ABORT; if (!EC_POINT_is_at_infinity(group, Q)) ABORT; fprintf(stdout, " ok\n"); fprintf(stdout, "long/negative scalar tests ... "); if (!BN_one(n1)) ABORT; /* n1 = 1 - order */ if (!BN_sub(n1, n1, order)) ABORT; if (!EC_POINT_mul(group, Q, NULL, P, n1, ctx)) ABORT; if (0 != EC_POINT_cmp(group, Q, P, ctx)) ABORT; /* n2 = 1 + order */ if (!BN_add(n2, order, BN_value_one())) ABORT; if (!EC_POINT_mul(group, Q, NULL, P, n2, ctx)) ABORT; if (0 != EC_POINT_cmp(group, Q, P, ctx)) ABORT; /* n2 = (1 - order) * (1 + order) */ if (!BN_mul(n2, n1, n2, ctx)) ABORT; if (!EC_POINT_mul(group, Q, NULL, P, n2, ctx)) ABORT; if (0 != EC_POINT_cmp(group, Q, P, ctx)) ABORT; fprintf(stdout, "ok\n"); EC_POINT_free(P); EC_POINT_free(Q); BN_free(n1); BN_free(n2); BN_free(order); BN_CTX_free(ctx); } static void prime_field_tests(void) { BN_CTX *ctx = NULL; BIGNUM *p, *a, *b; EC_GROUP *group; EC_GROUP *P_160 = NULL, *P_192 = NULL, *P_224 = NULL, *P_256 = NULL, *P_384 = NULL, *P_521 = NULL; EC_POINT *P, *Q, *R; BIGNUM *x, *y, *z; unsigned char buf[100]; size_t i, len; int k; #if 1 /* optional */ ctx = BN_CTX_new(); if (!ctx) ABORT; #endif p = BN_new(); a = BN_new(); b = BN_new(); if (!p || !a || !b) ABORT; if (!BN_hex2bn(&p, "17")) ABORT; if (!BN_hex2bn(&a, "1")) ABORT; if (!BN_hex2bn(&b, "1")) ABORT; group = EC_GROUP_new(EC_GFp_mont_method()); /* applications should use EC_GROUP_new_curve_GFp * so that the library gets to choose the EC_METHOD */ if (!group) ABORT; if (!EC_GROUP_set_curve_GFp(group, p, a, b, ctx)) ABORT; { EC_GROUP *tmp; tmp = EC_GROUP_new(EC_GROUP_method_of(group)); if (!tmp) ABORT; if (!EC_GROUP_copy(tmp, group)) ABORT; EC_GROUP_free(group); group = tmp; } if (!EC_GROUP_get_curve_GFp(group, p, a, b, ctx)) ABORT; fprintf(stdout, "Curve defined by Weierstrass equation\n y^2 = x^3 + a*x + b (mod 0x"); BN_print_fp(stdout, p); fprintf(stdout, ")\n a = 0x"); BN_print_fp(stdout, a); fprintf(stdout, "\n b = 0x"); BN_print_fp(stdout, b); fprintf(stdout, "\n"); P = EC_POINT_new(group); Q = EC_POINT_new(group); R = EC_POINT_new(group); if (!P || !Q || !R) ABORT; if (!EC_POINT_set_to_infinity(group, P)) ABORT; if (!EC_POINT_is_at_infinity(group, P)) ABORT; buf[0] = 0; if (!EC_POINT_oct2point(group, Q, buf, 1, ctx)) ABORT; if (!EC_POINT_add(group, P, P, Q, ctx)) ABORT; if (!EC_POINT_is_at_infinity(group, P)) ABORT; x = BN_new(); y = BN_new(); z = BN_new(); if (!x || !y || !z) ABORT; if (!BN_hex2bn(&x, "D")) ABORT; if (!EC_POINT_set_compressed_coordinates_GFp(group, Q, x, 1, ctx)) ABORT; if (!EC_POINT_is_on_curve(group, Q, ctx)) { if (!EC_POINT_get_affine_coordinates_GFp(group, Q, x, y, ctx)) ABORT; fprintf(stderr, "Point is not on curve: x = 0x"); BN_print_fp(stderr, x); fprintf(stderr, ", y = 0x"); BN_print_fp(stderr, y); fprintf(stderr, "\n"); ABORT; } fprintf(stdout, "A cyclic subgroup:\n"); k = 100; do { if (k-- == 0) ABORT; if (EC_POINT_is_at_infinity(group, P)) fprintf(stdout, " point at infinity\n"); else { if (!EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx)) ABORT; fprintf(stdout, " x = 0x"); BN_print_fp(stdout, x); fprintf(stdout, ", y = 0x"); BN_print_fp(stdout, y); fprintf(stdout, "\n"); } if (!EC_POINT_copy(R, P)) ABORT; if (!EC_POINT_add(group, P, P, Q, ctx)) ABORT; #if 0 /* optional */ { EC_POINT *points[3]; points[0] = R; points[1] = Q; points[2] = P; if (!EC_POINTs_make_affine(group, 2, points, ctx)) ABORT; } #endif } while (!EC_POINT_is_at_infinity(group, P)); if (!EC_POINT_add(group, P, Q, R, ctx)) ABORT; if (!EC_POINT_is_at_infinity(group, P)) ABORT; len = EC_POINT_point2oct(group, Q, POINT_CONVERSION_COMPRESSED, buf, sizeof buf, ctx); if (len == 0) ABORT; if (!EC_POINT_oct2point(group, P, buf, len, ctx)) ABORT; if (0 != EC_POINT_cmp(group, P, Q, ctx)) ABORT; fprintf(stdout, "Generator as octet string, compressed form:\n "); for (i = 0; i < len; i++) fprintf(stdout, "%02X", buf[i]); len = EC_POINT_point2oct(group, Q, POINT_CONVERSION_UNCOMPRESSED, buf, sizeof buf, ctx); if (len == 0) ABORT; if (!EC_POINT_oct2point(group, P, buf, len, ctx)) ABORT; if (0 != EC_POINT_cmp(group, P, Q, ctx)) ABORT; fprintf(stdout, "\nGenerator as octet string, uncompressed form:\n "); for (i = 0; i < len; i++) fprintf(stdout, "%02X", buf[i]); len = EC_POINT_point2oct(group, Q, POINT_CONVERSION_HYBRID, buf, sizeof buf, ctx); if (len == 0) ABORT; if (!EC_POINT_oct2point(group, P, buf, len, ctx)) ABORT; if (0 != EC_POINT_cmp(group, P, Q, ctx)) ABORT; fprintf(stdout, "\nGenerator as octet string, hybrid form:\n "); for (i = 0; i < len; i++) fprintf(stdout, "%02X", buf[i]); if (!EC_POINT_get_Jprojective_coordinates_GFp(group, R, x, y, z, ctx)) ABORT; fprintf(stdout, "\nA representation of the inverse of that generator in\nJacobian projective coordinates:\n X = 0x"); BN_print_fp(stdout, x); fprintf(stdout, ", Y = 0x"); BN_print_fp(stdout, y); fprintf(stdout, ", Z = 0x"); BN_print_fp(stdout, z); fprintf(stdout, "\n"); if (!EC_POINT_invert(group, P, ctx)) ABORT; if (0 != EC_POINT_cmp(group, P, R, ctx)) ABORT; /* Curve secp160r1 (Certicom Research SEC 2 Version 1.0, section 2.4.2, 2000) * -- not a NIST curve, but commonly used */ if (!BN_hex2bn(&p, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF")) ABORT; if (1 != BN_is_prime_ex(p, BN_prime_checks, ctx, NULL)) ABORT; if (!BN_hex2bn(&a, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC")) ABORT; if (!BN_hex2bn(&b, "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45")) ABORT; if (!EC_GROUP_set_curve_GFp(group, p, a, b, ctx)) ABORT; if (!BN_hex2bn(&x, "4A96B5688EF573284664698968C38BB913CBFC82")) ABORT; if (!BN_hex2bn(&y, "23a628553168947d59dcc912042351377ac5fb32")) ABORT; if (!EC_POINT_set_affine_coordinates_GFp(group, P, x, y, ctx)) ABORT; if (!EC_POINT_is_on_curve(group, P, ctx)) ABORT; if (!BN_hex2bn(&z, "0100000000000000000001F4C8F927AED3CA752257")) ABORT; if (!EC_GROUP_set_generator(group, P, z, BN_value_one())) ABORT; if (!EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx)) ABORT; fprintf(stdout, "\nSEC2 curve secp160r1 -- Generator:\n x = 0x"); BN_print_fp(stdout, x); fprintf(stdout, "\n y = 0x"); BN_print_fp(stdout, y); fprintf(stdout, "\n"); /* G_y value taken from the standard: */ if (!BN_hex2bn(&z, "23a628553168947d59dcc912042351377ac5fb32")) ABORT; if (0 != BN_cmp(y, z)) ABORT; fprintf(stdout, "verify degree ..."); if (EC_GROUP_get_degree(group) != 160) ABORT; fprintf(stdout, " ok\n"); group_order_tests(group); if (!(P_160 = EC_GROUP_new(EC_GROUP_method_of(group)))) ABORT; if (!EC_GROUP_copy(P_160, group)) ABORT; /* Curve P-192 (FIPS PUB 186-2, App. 6) */ if (!BN_hex2bn(&p, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF")) ABORT; if (1 != BN_is_prime_ex(p, BN_prime_checks, ctx, NULL)) ABORT; if (!BN_hex2bn(&a, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC")) ABORT; if (!BN_hex2bn(&b, "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1")) ABORT; if (!EC_GROUP_set_curve_GFp(group, p, a, b, ctx)) ABORT; if (!BN_hex2bn(&x, "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012")) ABORT; if (!EC_POINT_set_compressed_coordinates_GFp(group, P, x, 1, ctx)) ABORT; if (!EC_POINT_is_on_curve(group, P, ctx)) ABORT; if (!BN_hex2bn(&z, "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831")) ABORT; if (!EC_GROUP_set_generator(group, P, z, BN_value_one())) ABORT; if (!EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx)) ABORT; fprintf(stdout, "\nNIST curve P-192 -- Generator:\n x = 0x"); BN_print_fp(stdout, x); fprintf(stdout, "\n y = 0x"); BN_print_fp(stdout, y); fprintf(stdout, "\n"); /* G_y value taken from the standard: */ if (!BN_hex2bn(&z, "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811")) ABORT; if (0 != BN_cmp(y, z)) ABORT; fprintf(stdout, "verify degree ..."); if (EC_GROUP_get_degree(group) != 192) ABORT; fprintf(stdout, " ok\n"); group_order_tests(group); if (!(P_192 = EC_GROUP_new(EC_GROUP_method_of(group)))) ABORT; if (!EC_GROUP_copy(P_192, group)) ABORT; /* Curve P-224 (FIPS PUB 186-2, App. 6) */ if (!BN_hex2bn(&p, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001")) ABORT; if (1 != BN_is_prime_ex(p, BN_prime_checks, ctx, NULL)) ABORT; if (!BN_hex2bn(&a, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE")) ABORT; if (!BN_hex2bn(&b, "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4")) ABORT; if (!EC_GROUP_set_curve_GFp(group, p, a, b, ctx)) ABORT; if (!BN_hex2bn(&x, "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21")) ABORT; if (!EC_POINT_set_compressed_coordinates_GFp(group, P, x, 0, ctx)) ABORT; if (!EC_POINT_is_on_curve(group, P, ctx)) ABORT; if (!BN_hex2bn(&z, "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D")) ABORT; if (!EC_GROUP_set_generator(group, P, z, BN_value_one())) ABORT; if (!EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx)) ABORT; fprintf(stdout, "\nNIST curve P-224 -- Generator:\n x = 0x"); BN_print_fp(stdout, x); fprintf(stdout, "\n y = 0x"); BN_print_fp(stdout, y); fprintf(stdout, "\n"); /* G_y value taken from the standard: */ if (!BN_hex2bn(&z, "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34")) ABORT; if (0 != BN_cmp(y, z)) ABORT; fprintf(stdout, "verify degree ..."); if (EC_GROUP_get_degree(group) != 224) ABORT; fprintf(stdout, " ok\n"); group_order_tests(group); if (!(P_224 = EC_GROUP_new(EC_GROUP_method_of(group)))) ABORT; if (!EC_GROUP_copy(P_224, group)) ABORT; /* Curve P-256 (FIPS PUB 186-2, App. 6) */ if (!BN_hex2bn(&p, "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF")) ABORT; if (1 != BN_is_prime_ex(p, BN_prime_checks, ctx, NULL)) ABORT; if (!BN_hex2bn(&a, "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC")) ABORT; if (!BN_hex2bn(&b, "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B")) ABORT; if (!EC_GROUP_set_curve_GFp(group, p, a, b, ctx)) ABORT; if (!BN_hex2bn(&x, "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296")) ABORT; if (!EC_POINT_set_compressed_coordinates_GFp(group, P, x, 1, ctx)) ABORT; if (!EC_POINT_is_on_curve(group, P, ctx)) ABORT; if (!BN_hex2bn(&z, "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E" "84F3B9CAC2FC632551")) ABORT; if (!EC_GROUP_set_generator(group, P, z, BN_value_one())) ABORT; if (!EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx)) ABORT; fprintf(stdout, "\nNIST curve P-256 -- Generator:\n x = 0x"); BN_print_fp(stdout, x); fprintf(stdout, "\n y = 0x"); BN_print_fp(stdout, y); fprintf(stdout, "\n"); /* G_y value taken from the standard: */ if (!BN_hex2bn(&z, "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5")) ABORT; if (0 != BN_cmp(y, z)) ABORT; fprintf(stdout, "verify degree ..."); if (EC_GROUP_get_degree(group) != 256) ABORT; fprintf(stdout, " ok\n"); group_order_tests(group); if (!(P_256 = EC_GROUP_new(EC_GROUP_method_of(group)))) ABORT; if (!EC_GROUP_copy(P_256, group)) ABORT; /* Curve P-384 (FIPS PUB 186-2, App. 6) */ if (!BN_hex2bn(&p, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF")) ABORT; if (1 != BN_is_prime_ex(p, BN_prime_checks, ctx, NULL)) ABORT; if (!BN_hex2bn(&a, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC")) ABORT; if (!BN_hex2bn(&b, "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141" "120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF")) ABORT; if (!EC_GROUP_set_curve_GFp(group, p, a, b, ctx)) ABORT; if (!BN_hex2bn(&x, "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B" "9859F741E082542A385502F25DBF55296C3A545E3872760AB7")) ABORT; if (!EC_POINT_set_compressed_coordinates_GFp(group, P, x, 1, ctx)) ABORT; if (!EC_POINT_is_on_curve(group, P, ctx)) ABORT; if (!BN_hex2bn(&z, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973")) ABORT; if (!EC_GROUP_set_generator(group, P, z, BN_value_one())) ABORT; if (!EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx)) ABORT; fprintf(stdout, "\nNIST curve P-384 -- Generator:\n x = 0x"); BN_print_fp(stdout, x); fprintf(stdout, "\n y = 0x"); BN_print_fp(stdout, y); fprintf(stdout, "\n"); /* G_y value taken from the standard: */ if (!BN_hex2bn(&z, "3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A14" "7CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F")) ABORT; if (0 != BN_cmp(y, z)) ABORT; fprintf(stdout, "verify degree ..."); if (EC_GROUP_get_degree(group) != 384) ABORT; fprintf(stdout, " ok\n"); group_order_tests(group); if (!(P_384 = EC_GROUP_new(EC_GROUP_method_of(group)))) ABORT; if (!EC_GROUP_copy(P_384, group)) ABORT; /* Curve P-521 (FIPS PUB 186-2, App. 6) */ if (!BN_hex2bn(&p, "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFF")) ABORT; if (1 != BN_is_prime_ex(p, BN_prime_checks, ctx, NULL)) ABORT; if (!BN_hex2bn(&a, "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFC")) ABORT; if (!BN_hex2bn(&b, "051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B" "315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573" "DF883D2C34F1EF451FD46B503F00")) ABORT; if (!EC_GROUP_set_curve_GFp(group, p, a, b, ctx)) ABORT; if (!BN_hex2bn(&x, "C6858E06B70404E9CD9E3ECB662395B4429C648139053F" "B521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B" "3C1856A429BF97E7E31C2E5BD66")) ABORT; if (!EC_POINT_set_compressed_coordinates_GFp(group, P, x, 0, ctx)) ABORT; if (!EC_POINT_is_on_curve(group, P, ctx)) ABORT; if (!BN_hex2bn(&z, "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5" "C9B8899C47AEBB6FB71E91386409")) ABORT; if (!EC_GROUP_set_generator(group, P, z, BN_value_one())) ABORT; if (!EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx)) ABORT; fprintf(stdout, "\nNIST curve P-521 -- Generator:\n x = 0x"); BN_print_fp(stdout, x); fprintf(stdout, "\n y = 0x"); BN_print_fp(stdout, y); fprintf(stdout, "\n"); /* G_y value taken from the standard: */ if (!BN_hex2bn(&z, "11839296A789A3BC0045C8A5FB42C7D1BD998F54449579" "B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C" "7086A272C24088BE94769FD16650")) ABORT; if (0 != BN_cmp(y, z)) ABORT; fprintf(stdout, "verify degree ..."); if (EC_GROUP_get_degree(group) != 521) ABORT; fprintf(stdout, " ok\n"); group_order_tests(group); if (!(P_521 = EC_GROUP_new(EC_GROUP_method_of(group)))) ABORT; if (!EC_GROUP_copy(P_521, group)) ABORT; /* more tests using the last curve */ if (!EC_POINT_copy(Q, P)) ABORT; if (EC_POINT_is_at_infinity(group, Q)) ABORT; if (!EC_POINT_dbl(group, P, P, ctx)) ABORT; if (!EC_POINT_is_on_curve(group, P, ctx)) ABORT; if (!EC_POINT_invert(group, Q, ctx)) ABORT; /* P = -2Q */ if (!EC_POINT_add(group, R, P, Q, ctx)) ABORT; if (!EC_POINT_add(group, R, R, Q, ctx)) ABORT; if (!EC_POINT_is_at_infinity(group, R)) ABORT; /* R = P + 2Q */ { const EC_POINT *points[4]; const BIGNUM *scalars[4]; BIGNUM scalar3; if (EC_POINT_is_at_infinity(group, Q)) ABORT; points[0] = Q; points[1] = Q; points[2] = Q; points[3] = Q; if (!EC_GROUP_get_order(group, z, ctx)) ABORT; if (!BN_add(y, z, BN_value_one())) ABORT; if (BN_is_odd(y)) ABORT; if (!BN_rshift1(y, y)) ABORT; scalars[0] = y; /* (group order + 1)/2, so y*Q + y*Q = Q */ scalars[1] = y; fprintf(stdout, "combined multiplication ..."); fflush(stdout); /* z is still the group order */ if (!EC_POINTs_mul(group, P, NULL, 2, points, scalars, ctx)) ABORT; if (!EC_POINTs_mul(group, R, z, 2, points, scalars, ctx)) ABORT; if (0 != EC_POINT_cmp(group, P, R, ctx)) ABORT; if (0 != EC_POINT_cmp(group, R, Q, ctx)) ABORT; fprintf(stdout, "."); fflush(stdout); if (!BN_pseudo_rand(y, BN_num_bits(y), 0, 0)) ABORT; if (!BN_add(z, z, y)) ABORT; BN_set_negative(z, 1); scalars[0] = y; scalars[1] = z; /* z = -(order + y) */ if (!EC_POINTs_mul(group, P, NULL, 2, points, scalars, ctx)) ABORT; if (!EC_POINT_is_at_infinity(group, P)) ABORT; fprintf(stdout, "."); fflush(stdout); if (!BN_pseudo_rand(x, BN_num_bits(y) - 1, 0, 0)) ABORT; if (!BN_add(z, x, y)) ABORT; BN_set_negative(z, 1); scalars[0] = x; scalars[1] = y; scalars[2] = z; /* z = -(x+y) */ BN_init(&scalar3); BN_zero(&scalar3); scalars[3] = &scalar3; if (!EC_POINTs_mul(group, P, NULL, 4, points, scalars, ctx)) ABORT; if (!EC_POINT_is_at_infinity(group, P)) ABORT; fprintf(stdout, " ok\n\n"); BN_free(&scalar3); } if (ctx) BN_CTX_free(ctx); BN_free(p); BN_free(a); BN_free(b); EC_GROUP_free(group); EC_POINT_free(P); EC_POINT_free(Q); EC_POINT_free(R); BN_free(x); BN_free(y); BN_free(z); if (P_160) EC_GROUP_free(P_160); if (P_192) EC_GROUP_free(P_192); if (P_224) EC_GROUP_free(P_224); if (P_256) EC_GROUP_free(P_256); if (P_384) EC_GROUP_free(P_384); if (P_521) EC_GROUP_free(P_521); } /* Change test based on whether binary point compression is enabled or not. */ #ifdef OPENSSL_EC_BIN_PT_COMP #define CHAR2_CURVE_TEST_INTERNAL(_name, _p, _a, _b, _x, _y, _y_bit, _order, _cof, _degree, _variable) \ if (!BN_hex2bn(&x, _x)) ABORT; \ if (!EC_POINT_set_compressed_coordinates_GF2m(group, P, x, _y_bit, ctx)) ABORT; \ if (!EC_POINT_is_on_curve(group, P, ctx)) ABORT; \ if (!BN_hex2bn(&z, _order)) ABORT; \ if (!BN_hex2bn(&cof, _cof)) ABORT; \ if (!EC_GROUP_set_generator(group, P, z, cof)) ABORT; \ if (!EC_POINT_get_affine_coordinates_GF2m(group, P, x, y, ctx)) ABORT; \ fprintf(stdout, "\n%s -- Generator:\n x = 0x", _name); \ BN_print_fp(stdout, x); \ fprintf(stdout, "\n y = 0x"); \ BN_print_fp(stdout, y); \ fprintf(stdout, "\n"); \ /* G_y value taken from the standard: */ \ if (!BN_hex2bn(&z, _y)) ABORT; \ if (0 != BN_cmp(y, z)) ABORT; #else #define CHAR2_CURVE_TEST_INTERNAL(_name, _p, _a, _b, _x, _y, _y_bit, _order, _cof, _degree, _variable) \ if (!BN_hex2bn(&x, _x)) ABORT; \ if (!BN_hex2bn(&y, _y)) ABORT; \ if (!EC_POINT_set_affine_coordinates_GF2m(group, P, x, y, ctx)) ABORT; \ if (!EC_POINT_is_on_curve(group, P, ctx)) ABORT; \ if (!BN_hex2bn(&z, _order)) ABORT; \ if (!BN_hex2bn(&cof, _cof)) ABORT; \ |
︙ | ︙ | |||
656 657 658 659 660 661 662 | fprintf(stdout, " ok\n"); \ group_order_tests(group); \ if (!(_variable = EC_GROUP_new(EC_GROUP_method_of(group)))) ABORT; \ if (!EC_GROUP_copy(_variable, group)) ABORT; \ #ifndef OPENSSL_NO_EC2M | | | | | > | > | > | > | > | | > | > | > | > | | > | > | | > | > | > | > | > | > | > | > | > | > | < | > | | | > | < | > | | | > | > | | > | > | > | > | > | | | > | > | > | | | > | > | > | | | > | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | > | > | > | > | > | | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > > | > > > > | > | > | > | > | > | > | > | > | > | | > | | | < | | | < | < | | | < | | | | < | | | < | | < < | | | | | | | | | > | | | > | > > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | | | < | | > | | | | | 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 | fprintf(stdout, " ok\n"); \ group_order_tests(group); \ if (!(_variable = EC_GROUP_new(EC_GROUP_method_of(group)))) ABORT; \ if (!EC_GROUP_copy(_variable, group)) ABORT; \ #ifndef OPENSSL_NO_EC2M static void char2_field_tests(void) { BN_CTX *ctx = NULL; BIGNUM *p, *a, *b; EC_GROUP *group; EC_GROUP *C2_K163 = NULL, *C2_K233 = NULL, *C2_K283 = NULL, *C2_K409 = NULL, *C2_K571 = NULL; EC_GROUP *C2_B163 = NULL, *C2_B233 = NULL, *C2_B283 = NULL, *C2_B409 = NULL, *C2_B571 = NULL; EC_POINT *P, *Q, *R; BIGNUM *x, *y, *z, *cof; unsigned char buf[100]; size_t i, len; int k; #if 1 /* optional */ ctx = BN_CTX_new(); if (!ctx) ABORT; #endif p = BN_new(); a = BN_new(); b = BN_new(); if (!p || !a || !b) ABORT; if (!BN_hex2bn(&p, "13")) ABORT; if (!BN_hex2bn(&a, "3")) ABORT; if (!BN_hex2bn(&b, "1")) ABORT; group = EC_GROUP_new(EC_GF2m_simple_method()); /* applications should use EC_GROUP_new_curve_GF2m * so that the library gets to choose the EC_METHOD */ if (!group) ABORT; if (!EC_GROUP_set_curve_GF2m(group, p, a, b, ctx)) ABORT; { EC_GROUP *tmp; tmp = EC_GROUP_new(EC_GROUP_method_of(group)); if (!tmp) ABORT; if (!EC_GROUP_copy(tmp, group)) ABORT; EC_GROUP_free(group); group = tmp; } if (!EC_GROUP_get_curve_GF2m(group, p, a, b, ctx)) ABORT; fprintf(stdout, "Curve defined by Weierstrass equation\n y^2 + x*y = x^3 + a*x^2 + b (mod 0x"); BN_print_fp(stdout, p); fprintf(stdout, ")\n a = 0x"); BN_print_fp(stdout, a); fprintf(stdout, "\n b = 0x"); BN_print_fp(stdout, b); fprintf(stdout, "\n(0x... means binary polynomial)\n"); P = EC_POINT_new(group); Q = EC_POINT_new(group); R = EC_POINT_new(group); if (!P || !Q || !R) ABORT; if (!EC_POINT_set_to_infinity(group, P)) ABORT; if (!EC_POINT_is_at_infinity(group, P)) ABORT; buf[0] = 0; if (!EC_POINT_oct2point(group, Q, buf, 1, ctx)) ABORT; if (!EC_POINT_add(group, P, P, Q, ctx)) ABORT; if (!EC_POINT_is_at_infinity(group, P)) ABORT; x = BN_new(); y = BN_new(); z = BN_new(); cof = BN_new(); if (!x || !y || !z || !cof) ABORT; if (!BN_hex2bn(&x, "6")) ABORT; /* Change test based on whether binary point compression is enabled or not. */ #ifdef OPENSSL_EC_BIN_PT_COMP if (!EC_POINT_set_compressed_coordinates_GF2m(group, Q, x, 1, ctx)) ABORT; #else if (!BN_hex2bn(&y, "8")) ABORT; if (!EC_POINT_set_affine_coordinates_GF2m(group, Q, x, y, ctx)) ABORT; #endif if (!EC_POINT_is_on_curve(group, Q, ctx)) { /* Change test based on whether binary point compression is enabled or not. */ #ifdef OPENSSL_EC_BIN_PT_COMP if (!EC_POINT_get_affine_coordinates_GF2m(group, Q, x, y, ctx)) ABORT; #endif fprintf(stderr, "Point is not on curve: x = 0x"); BN_print_fp(stderr, x); fprintf(stderr, ", y = 0x"); BN_print_fp(stderr, y); fprintf(stderr, "\n"); ABORT; } fprintf(stdout, "A cyclic subgroup:\n"); k = 100; do { if (k-- == 0) ABORT; if (EC_POINT_is_at_infinity(group, P)) fprintf(stdout, " point at infinity\n"); else { if (!EC_POINT_get_affine_coordinates_GF2m(group, P, x, y, ctx)) ABORT; fprintf(stdout, " x = 0x"); BN_print_fp(stdout, x); fprintf(stdout, ", y = 0x"); BN_print_fp(stdout, y); fprintf(stdout, "\n"); } if (!EC_POINT_copy(R, P)) ABORT; if (!EC_POINT_add(group, P, P, Q, ctx)) ABORT; } while (!EC_POINT_is_at_infinity(group, P)); if (!EC_POINT_add(group, P, Q, R, ctx)) ABORT; if (!EC_POINT_is_at_infinity(group, P)) ABORT; /* Change test based on whether binary point compression is enabled or not. */ #ifdef OPENSSL_EC_BIN_PT_COMP len = EC_POINT_point2oct(group, Q, POINT_CONVERSION_COMPRESSED, buf, sizeof buf, ctx); if (len == 0) ABORT; if (!EC_POINT_oct2point(group, P, buf, len, ctx)) ABORT; if (0 != EC_POINT_cmp(group, P, Q, ctx)) ABORT; fprintf(stdout, "Generator as octet string, compressed form:\n "); for (i = 0; i < len; i++) fprintf(stdout, "%02X", buf[i]); #endif len = EC_POINT_point2oct(group, Q, POINT_CONVERSION_UNCOMPRESSED, buf, sizeof buf, ctx); if (len == 0) ABORT; if (!EC_POINT_oct2point(group, P, buf, len, ctx)) ABORT; if (0 != EC_POINT_cmp(group, P, Q, ctx)) ABORT; fprintf(stdout, "\nGenerator as octet string, uncompressed form:\n "); for (i = 0; i < len; i++) fprintf(stdout, "%02X", buf[i]); /* Change test based on whether binary point compression is enabled or not. */ #ifdef OPENSSL_EC_BIN_PT_COMP len = EC_POINT_point2oct(group, Q, POINT_CONVERSION_HYBRID, buf, sizeof buf, ctx); if (len == 0) ABORT; if (!EC_POINT_oct2point(group, P, buf, len, ctx)) ABORT; if (0 != EC_POINT_cmp(group, P, Q, ctx)) ABORT; fprintf(stdout, "\nGenerator as octet string, hybrid form:\n "); for (i = 0; i < len; i++) fprintf(stdout, "%02X", buf[i]); #endif fprintf(stdout, "\n"); if (!EC_POINT_invert(group, P, ctx)) ABORT; if (0 != EC_POINT_cmp(group, P, R, ctx)) ABORT; /* Curve K-163 (FIPS PUB 186-2, App. 6) */ CHAR2_CURVE_TEST ( "NIST curve K-163", "0800000000000000000000000000000000000000C9", "1", "1", "02FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE8", "0289070FB05D38FF58321F2E800536D538CCDAA3D9", 1, "04000000000000000000020108A2E0CC0D99F8A5EF", "2", 163, C2_K163 ); /* Curve B-163 (FIPS PUB 186-2, App. 6) */ CHAR2_CURVE_TEST ( "NIST curve B-163", "0800000000000000000000000000000000000000C9", "1", "020A601907B8C953CA1481EB10512F78744A3205FD", "03F0EBA16286A2D57EA0991168D4994637E8343E36", "00D51FBC6C71A0094FA2CDD545B11C5C0C797324F1", 1, "040000000000000000000292FE77E70C12A4234C33", "2", 163, C2_B163 ); /* Curve K-233 (FIPS PUB 186-2, App. 6) */ CHAR2_CURVE_TEST ( "NIST curve K-233", "020000000000000000000000000000000000000004000000000000000001", "0", "1", "017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD6126", "01DB537DECE819B7F70F555A67C427A8CD9BF18AEB9B56E0C11056FAE6A3", 0, "008000000000000000000000000000069D5BB915BCD46EFB1AD5F173ABDF", "4", 233, C2_K233 ); /* Curve B-233 (FIPS PUB 186-2, App. 6) */ CHAR2_CURVE_TEST ( "NIST curve B-233", "020000000000000000000000000000000000000004000000000000000001", "000000000000000000000000000000000000000000000000000000000001", "0066647EDE6C332C7F8C0923BB58213B333B20E9CE4281FE115F7D8F90AD", "00FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B", "01006A08A41903350678E58528BEBF8A0BEFF867A7CA36716F7E01F81052", 1, "01000000000000000000000000000013E974E72F8A6922031D2603CFE0D7", "2", 233, C2_B233 ); /* Curve K-283 (FIPS PUB 186-2, App. 6) */ CHAR2_CURVE_TEST ( "NIST curve K-283", "0800000000000000000000000000000000000000000000000000000000000000000010A1", "0", "1", "0503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836", "01CCDA380F1C9E318D90F95D07E5426FE87E45C0E8184698E45962364E34116177DD2259", 0, "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9AE2ED07577265DFF7F94451E061E163C61", "4", 283, C2_K283 ); /* Curve B-283 (FIPS PUB 186-2, App. 6) */ CHAR2_CURVE_TEST ( "NIST curve B-283", "0800000000000000000000000000000000000000000000000000000000000000000010A1", "000000000000000000000000000000000000000000000000000000000000000000000001", "027B680AC8B8596DA5A4AF8A19A0303FCA97FD7645309FA2A581485AF6263E313B79A2F5", "05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053", "03676854FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4", 1, "03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307", "2", 283, C2_B283 ); /* Curve K-409 (FIPS PUB 186-2, App. 6) */ CHAR2_CURVE_TEST ( "NIST curve K-409", "02000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000001", "0", "1", "0060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746", "01E369050B7C4E42ACBA1DACBF04299C3460782F918EA427E6325165E9EA10E3DA5F6C42E9C55215AA9CA27A5863EC48D8E0286B", 1, "007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F83B2D4EA20400EC4557D5ED3E3E7CA5B4B5C83B8E01E5FCF", "4", 409, C2_K409 ); /* Curve B-409 (FIPS PUB 186-2, App. 6) */ CHAR2_CURVE_TEST ( "NIST curve B-409", "02000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000001", "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", "0021A5C2C8EE9FEB5C4B9A753B7B476B7FD6422EF1F3DD674761FA99D6AC27C8A9A197B272822F6CD57A55AA4F50AE317B13545F", "015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7", "0061B1CFAB6BE5F32BBFA78324ED106A7636B9C5A7BD198D0158AA4F5488D08F38514F1FDF4B4F40D2181B3681C364BA0273C706", 1, "010000000000000000000000000000000000000000000000000001E2AAD6A612F33307BE5FA47C3C9E052F838164CD37D9A21173", "2", 409, C2_B409 ); /* Curve K-571 (FIPS PUB 186-2, App. 6) */ CHAR2_CURVE_TEST ( "NIST curve K-571", "80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425", "0", "1", "026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA44370958493B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972", "0349DC807F4FBF374F4AEADE3BCA95314DD58CEC9F307A54FFC61EFC006D8A2C9D4979C0AC44AEA74FBEBBB9F772AEDCB620B01A7BA7AF1B320430C8591984F601CD4C143EF1C7A3", 0, "020000000000000000000000000000000000000000000000000000000000000000000000131850E1F19A63E4B391A8DB917F4138B630D84BE5D639381E91DEB45CFE778F637C1001", "4", 571, C2_K571 ); /* Curve B-571 (FIPS PUB 186-2, App. 6) */ CHAR2_CURVE_TEST ( "NIST curve B-571", "80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425", "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", "02F40E7E2221F295DE297117B7F3D62F5C6A97FFCB8CEFF1CD6BA8CE4A9A18AD84FFABBD8EFA59332BE7AD6756A66E294AFD185A78FF12AA520E4DE739BACA0C7FFEFF7F2955727A", "0303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19", "037BF27342DA639B6DCCFFFEB73D69D78C6C27A6009CBBCA1980F8533921E8A684423E43BAB08A576291AF8F461BB2A8B3531D2F0485C19B16E2F1516E23DD3C1A4827AF1B8AC15B", 1, "03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE661CE18FF55987308059B186823851EC7DD9CA1161DE93D5174D66E8382E9BB2FE84E47", "2", 571, C2_B571 ); /* more tests using the last curve */ if (!EC_POINT_copy(Q, P)) ABORT; if (EC_POINT_is_at_infinity(group, Q)) ABORT; if (!EC_POINT_dbl(group, P, P, ctx)) ABORT; if (!EC_POINT_is_on_curve(group, P, ctx)) ABORT; if (!EC_POINT_invert(group, Q, ctx)) ABORT; /* P = -2Q */ if (!EC_POINT_add(group, R, P, Q, ctx)) ABORT; if (!EC_POINT_add(group, R, R, Q, ctx)) ABORT; if (!EC_POINT_is_at_infinity(group, R)) ABORT; /* R = P + 2Q */ { const EC_POINT *points[3]; const BIGNUM *scalars[3]; if (EC_POINT_is_at_infinity(group, Q)) ABORT; points[0] = Q; points[1] = Q; points[2] = Q; if (!BN_add(y, z, BN_value_one())) ABORT; if (BN_is_odd(y)) ABORT; if (!BN_rshift1(y, y)) ABORT; scalars[0] = y; /* (group order + 1)/2, so y*Q + y*Q = Q */ scalars[1] = y; fprintf(stdout, "combined multiplication ..."); fflush(stdout); /* z is still the group order */ if (!EC_POINTs_mul(group, P, NULL, 2, points, scalars, ctx)) ABORT; if (!EC_POINTs_mul(group, R, z, 2, points, scalars, ctx)) ABORT; if (0 != EC_POINT_cmp(group, P, R, ctx)) ABORT; if (0 != EC_POINT_cmp(group, R, Q, ctx)) ABORT; fprintf(stdout, "."); fflush(stdout); if (!BN_pseudo_rand(y, BN_num_bits(y), 0, 0)) ABORT; if (!BN_add(z, z, y)) ABORT; BN_set_negative(z, 1); scalars[0] = y; scalars[1] = z; /* z = -(order + y) */ if (!EC_POINTs_mul(group, P, NULL, 2, points, scalars, ctx)) ABORT; if (!EC_POINT_is_at_infinity(group, P)) ABORT; fprintf(stdout, "."); fflush(stdout); if (!BN_pseudo_rand(x, BN_num_bits(y) - 1, 0, 0)) ABORT; if (!BN_add(z, x, y)) ABORT; BN_set_negative(z, 1); scalars[0] = x; scalars[1] = y; scalars[2] = z; /* z = -(x+y) */ if (!EC_POINTs_mul(group, P, NULL, 3, points, scalars, ctx)) ABORT; if (!EC_POINT_is_at_infinity(group, P)) ABORT; fprintf(stdout, " ok\n\n"); } if (ctx) BN_CTX_free(ctx); BN_free(p); BN_free(a); BN_free(b); EC_GROUP_free(group); EC_POINT_free(P); EC_POINT_free(Q); EC_POINT_free(R); BN_free(x); BN_free(y); BN_free(z); BN_free(cof); if (C2_K163) EC_GROUP_free(C2_K163); if (C2_B163) EC_GROUP_free(C2_B163); if (C2_K233) EC_GROUP_free(C2_K233); if (C2_B233) EC_GROUP_free(C2_B233); if (C2_K283) EC_GROUP_free(C2_K283); if (C2_B283) EC_GROUP_free(C2_B283); if (C2_K409) EC_GROUP_free(C2_K409); if (C2_B409) EC_GROUP_free(C2_B409); if (C2_K571) EC_GROUP_free(C2_K571); if (C2_B571) EC_GROUP_free(C2_B571); } #endif static void internal_curve_test(void) { EC_builtin_curve *curves = NULL; size_t crv_len = 0, n = 0; int ok = 1; crv_len = EC_get_builtin_curves(NULL, 0); curves = reallocarray(NULL, sizeof(EC_builtin_curve), crv_len); if (curves == NULL) return; if (!EC_get_builtin_curves(curves, crv_len)) { free(curves); return; } fprintf(stdout, "testing internal curves: "); for (n = 0; n < crv_len; n++) { EC_GROUP *group = NULL; int nid = curves[n].nid; if ((group = EC_GROUP_new_by_curve_name(nid)) == NULL) { ok = 0; fprintf(stdout, "\nEC_GROUP_new_curve_name() failed with" " curve %s\n", OBJ_nid2sn(nid)); /* try next curve */ continue; } if (!EC_GROUP_check(group, NULL)) { ok = 0; fprintf(stdout, "\nEC_GROUP_check() failed with" " curve %s\n", OBJ_nid2sn(nid)); EC_GROUP_free(group); /* try the next curve */ continue; } fprintf(stdout, "."); fflush(stdout); EC_GROUP_free(group); } if (ok) fprintf(stdout, " ok\n\n"); else { fprintf(stdout, " failed\n\n"); ABORT; } free(curves); return; } #ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 /* nistp_test_params contains magic numbers for testing our optimized * implementations of several NIST curves with characteristic > 3. */ struct nistp_test_params { const EC_METHOD* (*meth) (); int degree; /* Qx, Qy and D are taken from * http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/ECDSA_Prime.pdf * Otherwise, values are standard curve parameters from FIPS 180-3 */ const char *p, *a, *b, *Qx, *Qy, *Gx, *Gy, *order, *d; }; static const struct nistp_test_params nistp_tests_params[] = { { /* P-224 */ EC_GFp_nistp224_method, 224, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", /* p */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE", /* a */ "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4", /* b */ "E84FB0B8E7000CB657D7973CF6B42ED78B301674276DF744AF130B3E", /* Qx */ "4376675C6FC5612C21A0FF2D2A89D2987DF7A2BC52183B5982298555", /* Qy */ "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21", /* Gx */ "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34", /* Gy */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D", /* order */ "3F0C488E987C80BE0FEE521F8D90BE6034EC69AE11CA72AA777481E8", /* d */ }, { /* P-256 */ EC_GFp_nistp256_method, 256, "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", /* p */ "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", /* a */ "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", /* b */ "b7e08afdfe94bad3f1dc8c734798ba1c62b3a0ad1e9ea2a38201cd0889bc7a19", /* Qx */ "3603f747959dbf7a4bb226e41928729063adc7ae43529e61b563bbc606cc5e09", /* Qy */ "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", /* Gx */ "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", /* Gy */ "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", /* order */ "c477f9f65c22cce20657faa5b2d1d8122336f851a508a1ed04e479c34985bf96", /* d */ }, { /* P-521 */ EC_GFp_nistp521_method, 521, "1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", /* p */ "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc", /* a */ "051953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00", /* b */ "0098e91eef9a68452822309c52fab453f5f117c1da8ed796b255e9ab8f6410cca16e59df403a6bdc6ca467a37056b1e54b3005d8ac030decfeb68df18b171885d5c4", /* Qx */ "0164350c321aecfc1cca1ba4364c9b15656150b4b78d6a48d7d28e7f31985ef17be8554376b72900712c4b83ad668327231526e313f5f092999a4632fd50d946bc2e", /* Qy */ "c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", /* Gx */ "11839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", /* Gy */ "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", /* order */ "0100085f47b8e1b8b11b7eb33028c0b2888e304bfc98501955b45bba1478dc184eeedf09b86a5f7c21994406072787205e69a63709fe35aa93ba333514b24f961722", /* d */ }, }; void nistp_single_test(const struct nistp_test_params *test) { BN_CTX *ctx; BIGNUM *p, *a, *b, *x, *y, *n, *m, *order; EC_GROUP *NISTP; EC_POINT *G, *P, *Q, *Q_CHECK; fprintf(stdout, "\nNIST curve P-%d (optimised implementation):\n", test->degree); ctx = BN_CTX_new(); p = BN_new(); a = BN_new(); b = BN_new(); x = BN_new(); y = BN_new(); m = BN_new(); n = BN_new(); order = BN_new(); NISTP = EC_GROUP_new(test->meth()); if (!NISTP) ABORT; if (!BN_hex2bn(&p, test->p)) ABORT; if (1 != BN_is_prime_ex(p, BN_prime_checks, ctx, NULL)) ABORT; if (!BN_hex2bn(&a, test->a)) ABORT; if (!BN_hex2bn(&b, test->b)) ABORT; if (!EC_GROUP_set_curve_GFp(NISTP, p, a, b, ctx)) ABORT; G = EC_POINT_new(NISTP); P = EC_POINT_new(NISTP); Q = EC_POINT_new(NISTP); Q_CHECK = EC_POINT_new(NISTP); if (!BN_hex2bn(&x, test->Qx)) ABORT; if (!BN_hex2bn(&y, test->Qy)) ABORT; if (!EC_POINT_set_affine_coordinates_GFp(NISTP, Q_CHECK, x, y, ctx)) ABORT; if (!BN_hex2bn(&x, test->Gx)) ABORT; if (!BN_hex2bn(&y, test->Gy)) ABORT; if (!EC_POINT_set_affine_coordinates_GFp(NISTP, G, x, y, ctx)) ABORT; if (!BN_hex2bn(&order, test->order)) ABORT; if (!EC_GROUP_set_generator(NISTP, G, order, BN_value_one())) ABORT; fprintf(stdout, "verify degree ... "); if (EC_GROUP_get_degree(NISTP) != test->degree) ABORT; fprintf(stdout, "ok\n"); fprintf(stdout, "NIST test vectors ... "); if (!BN_hex2bn(&n, test->d)) ABORT; /* fixed point multiplication */ EC_POINT_mul(NISTP, Q, n, NULL, NULL, ctx); if (0 != EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx)) ABORT; /* random point multiplication */ EC_POINT_mul(NISTP, Q, NULL, G, n, ctx); if (0 != EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx)) ABORT; /* set generator to P = 2*G, where G is the standard generator */ if (!EC_POINT_dbl(NISTP, P, G, ctx)) ABORT; if (!EC_GROUP_set_generator(NISTP, P, order, BN_value_one())) ABORT; /* set the scalar to m=n/2, where n is the NIST test scalar */ if (!BN_rshift(m, n, 1)) ABORT; /* test the non-standard generator */ /* fixed point multiplication */ EC_POINT_mul(NISTP, Q, m, NULL, NULL, ctx); if (0 != EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx)) ABORT; /* random point multiplication */ EC_POINT_mul(NISTP, Q, NULL, P, m, ctx); if (0 != EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx)) ABORT; /* now repeat all tests with precomputation */ if (!EC_GROUP_precompute_mult(NISTP, ctx)) ABORT; /* fixed point multiplication */ EC_POINT_mul(NISTP, Q, m, NULL, NULL, ctx); if (0 != EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx)) ABORT; /* random point multiplication */ EC_POINT_mul(NISTP, Q, NULL, P, m, ctx); if (0 != EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx)) ABORT; /* reset generator */ if (!EC_GROUP_set_generator(NISTP, G, order, BN_value_one())) ABORT; /* fixed point multiplication */ EC_POINT_mul(NISTP, Q, n, NULL, NULL, ctx); if (0 != EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx)) ABORT; /* random point multiplication */ EC_POINT_mul(NISTP, Q, NULL, G, n, ctx); if (0 != EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx)) ABORT; fprintf(stdout, "ok\n"); group_order_tests(NISTP); EC_GROUP_free(NISTP); EC_POINT_free(G); EC_POINT_free(P); EC_POINT_free(Q); EC_POINT_free(Q_CHECK); BN_free(n); BN_free(m); BN_free(p); BN_free(a); BN_free(b); BN_free(x); BN_free(y); BN_free(order); BN_CTX_free(ctx); } void nistp_tests() { unsigned i; for (i = 0; i < sizeof(nistp_tests_params) / sizeof(struct nistp_test_params); i++) { nistp_single_test(&nistp_tests_params[i]); } } #endif int main(int argc, char *argv[]) { ERR_load_crypto_strings(); prime_field_tests(); puts(""); #ifndef OPENSSL_NO_EC2M char2_field_tests(); #endif #ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 nistp_tests(); #endif /* test the internal curves */ internal_curve_test(); #ifndef OPENSSL_NO_ENGINE ENGINE_cleanup(); #endif CRYPTO_cleanup_all_ex_data(); ERR_free_strings(); ERR_remove_thread_state(NULL); CRYPTO_mem_leaks_fp(stderr); return 0; } |
Changes to jni/libressl/tests/enginetest.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* crypto/engine/enginetest.c */ /* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL * project 2000. */ /* ==================================================================== * Copyright (c) 1999-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* crypto/engine/enginetest.c */ /* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL * project 2000. */ /* ==================================================================== * Copyright (c) 1999-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this |
︙ | ︙ | |||
54 55 56 57 58 59 60 | * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <string.h> | < < < < < < < < | | < | | > > | | > | | | | | | | | | | | | | | < | > | < | | < | | < | | < | | < | | < < | | < < | | < | | < | > | | > | | < | > < | > | < | > | > > | | | < | < | | < | > | < | | < | > | < | < | < | | | < | | | | | | | | | < | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 | * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include <stdio.h> #include <string.h> #include <openssl/buffer.h> #include <openssl/crypto.h> #include <openssl/engine.h> #include <openssl/err.h> static void display_engine_list(void) { ENGINE *h; int loop; h = ENGINE_get_first(); loop = 0; printf("listing available engine types\n"); while (h) { printf("engine %i, id = \"%s\", name = \"%s\"\n", loop++, ENGINE_get_id(h), ENGINE_get_name(h)); h = ENGINE_get_next(h); } printf("end of list\n"); /* * ENGINE_get_first() increases the struct_ref counter, so we must call * ENGINE_free() to decrease it again */ ENGINE_free(h); } int main(int argc, char *argv[]) { ENGINE *block[512]; char *id, *name; ENGINE *ptr; int loop; int to_return = 1; ENGINE *new_h1 = NULL; ENGINE *new_h2 = NULL; ENGINE *new_h3 = NULL; ENGINE *new_h4 = NULL; ERR_load_crypto_strings(); memset(block, 0, 512 * sizeof(ENGINE *)); if (((new_h1 = ENGINE_new()) == NULL) || !ENGINE_set_id(new_h1, "test_id0") || !ENGINE_set_name(new_h1, "First test item") || ((new_h2 = ENGINE_new()) == NULL) || !ENGINE_set_id(new_h2, "test_id1") || !ENGINE_set_name(new_h2, "Second test item") || ((new_h3 = ENGINE_new()) == NULL) || !ENGINE_set_id(new_h3, "test_id2") || !ENGINE_set_name(new_h3, "Third test item") || ((new_h4 = ENGINE_new()) == NULL) || !ENGINE_set_id(new_h4, "test_id3") || !ENGINE_set_name(new_h4, "Fourth test item")) { printf("Couldn't set up test ENGINE structures\n"); goto end; } printf("\nenginetest beginning\n\n"); display_engine_list(); if (!ENGINE_add(new_h1)) { printf("Add failed!\n"); goto end; } display_engine_list(); ptr = ENGINE_get_first(); if (!ENGINE_remove(ptr)) { printf("Remove failed!\n"); goto end; } if (ptr) ENGINE_free(ptr); display_engine_list(); if (!ENGINE_add(new_h3) || !ENGINE_add(new_h2)) { printf("Add failed!\n"); goto end; } display_engine_list(); if (!ENGINE_remove(new_h2)) { printf("Remove failed!\n"); goto end; } display_engine_list(); if (!ENGINE_add(new_h4)) { printf("Add failed!\n"); goto end; } display_engine_list(); if (ENGINE_add(new_h3)) { printf("Add *should* have failed but didn't!\n"); goto end; } else printf("Add that should fail did.\n"); ERR_clear_error(); if (ENGINE_remove(new_h2)) { printf("Remove *should* have failed but didn't!\n"); goto end; } else printf("Remove that should fail did.\n"); ERR_clear_error(); if (!ENGINE_remove(new_h3)) { printf("Remove failed!\n"); goto end; } display_engine_list(); if (!ENGINE_remove(new_h4)) { printf("Remove failed!\n"); goto end; } display_engine_list(); /* * Depending on whether there's any hardware support compiled * in, this remove may be destined to fail. */ ptr = ENGINE_get_first(); if (ptr) if (!ENGINE_remove(ptr)) printf("Remove failed!i - probably no hardware " "support present.\n"); if (ptr) ENGINE_free(ptr); display_engine_list(); if (!ENGINE_add(new_h1) || !ENGINE_remove(new_h1)) { printf("Couldn't add and remove to an empty list!\n"); goto end; } else printf("Successfully added and removed to an empty list!\n"); printf("About to beef up the engine-type list\n"); for (loop = 0; loop < 512; loop++) { if (asprintf(&id, "id%i", loop) == -1) goto end; if (asprintf(&name, "Fake engine type %i", loop) == -1) goto end; if (((block[loop] = ENGINE_new()) == NULL) || !id || !ENGINE_set_id(block[loop], id) || !name || !ENGINE_set_name(block[loop], name)) { printf("Couldn't create block of ENGINE structures.\n"); goto end; } } for (loop = 0; loop < 512; loop++) { if (!ENGINE_add(block[loop])) { printf("\nAdding stopped at %i, (%s,%s)\n", loop, ENGINE_get_id(block[loop]), ENGINE_get_name(block[loop])); break; } printf("."); fflush(stdout); } printf("\nAbout to empty the engine-type list\n"); while ((ptr = ENGINE_get_first()) != NULL) { if (!ENGINE_remove(ptr)) { printf("\nRemove failed!\n"); goto end; } ENGINE_free(ptr); printf("."); fflush(stdout); } for (loop = 0; loop < 512; loop++) { free((void *)ENGINE_get_id(block[loop])); free((void *)ENGINE_get_name(block[loop])); } printf("\nTests completed happily\n"); to_return = 0; end: if (to_return) ERR_print_errors_fp(stderr); if (new_h1) ENGINE_free(new_h1); if (new_h2) ENGINE_free(new_h2); if (new_h3) ENGINE_free(new_h3); if (new_h4) ENGINE_free(new_h4); for (loop = 0; loop < 512; loop++) if (block[loop]) ENGINE_free(block[loop]); ENGINE_cleanup(); CRYPTO_cleanup_all_ex_data(); ERR_free_strings(); ERR_remove_thread_state(NULL); CRYPTO_mem_leaks_fp(stderr); return to_return; } |
Changes to jni/libressl/tests/memmem.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: memmem.c,v 1.3 2013/05/30 01:10:45 ajacoutot Exp $ */ /*- * Copyright (c) 2005 Pascal Gloor <pascal.gloor@spale.com> * * 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 |
︙ | ︙ |
Added jni/libressl/tests/ocsp_test.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | #include <stdio.h> #include <netdb.h> #include <stdlib.h> #include <unistd.h> #include <err.h> #include <sys/socket.h> #include <openssl/ssl.h> #include <openssl/ocsp.h> static int tcp_connect(char *host, char *port) { int error, sd = -1; struct addrinfo hints, *res, *r; memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; error = getaddrinfo(host, port, &hints, &res); if (error != 0) { perror("getaddrinfo()"); exit(-1); } for (r = res; r != NULL; r = r->ai_next) { sd = socket(r->ai_family, r->ai_socktype, r->ai_protocol); if (sd == -1) continue; if (connect(sd, r->ai_addr, r->ai_addrlen) == 0) break; close(sd); } freeaddrinfo(res); return sd; } int main(int argc, char *argv[]) { int sd, ocsp_status; const unsigned char *p; long len; OCSP_RESPONSE *rsp = NULL; OCSP_BASICRESP *br = NULL; X509_STORE *st = NULL; STACK_OF(X509) *ch = NULL; char *host, *port; #ifdef _PATH_SSL_CA_FILE char *cafile = _PATH_SSL_CA_FILE; #else char *cafile = "/etc/ssl/cert.pem"; #endif SSL *ssl; SSL_CTX *ctx; SSL_library_init(); SSL_load_error_strings(); ctx = SSL_CTX_new(SSLv23_client_method()); if (!SSL_CTX_load_verify_locations(ctx, cafile, NULL)) { printf("failed to load %s\n", cafile); exit(-1); } if (argc != 3) errx(-1, "need a host and port to connect to"); else { host = argv[1]; port = argv[2]; } sd = tcp_connect(host, port); ssl = SSL_new(ctx); SSL_set_fd(ssl, (int) sd); SSL_set_tlsext_status_type(ssl, TLSEXT_STATUSTYPE_ocsp); if (SSL_connect(ssl) <= 0) { printf("SSL connect error\n"); exit(-1); } if (SSL_get_verify_result(ssl) != X509_V_OK) { printf("Certificate doesn't verify from host %s port %s\n", host, port); exit(-1); } /* ==== VERIFY OCSP RESPONSE ==== */ len = SSL_get_tlsext_status_ocsp_resp(ssl, &p); if (!p) { printf("No OCSP response received for %s port %s\n", host, port); exit(-1); } rsp = d2i_OCSP_RESPONSE(NULL, &p, len); if (!rsp) { puts("Invalid OCSP response"); exit(-1); } ocsp_status = OCSP_response_status(rsp); if (ocsp_status != OCSP_RESPONSE_STATUS_SUCCESSFUL) { printf("Invalid OCSP response status: %s (%d)", OCSP_response_status_str(ocsp_status), ocsp_status); exit(-1); } br = OCSP_response_get1_basic(rsp); if (!br) { puts("Invalid OCSP response"); exit(-1); } ch = SSL_get_peer_cert_chain(ssl); st = SSL_CTX_get_cert_store(ctx); if (OCSP_basic_verify(br, ch, st, 0) <= 0) { puts("OCSP response verification failed"); exit(-1); } printf("OCSP validated from %s %s\n", host, port); return 0; } |
Added jni/libressl/tests/ocsptest.sh.
> > > > > > > > | 1 2 3 4 5 6 7 8 | #!/bin/sh set -e TEST=./ocsp_test if [ -e ./ocsp_test.exe ]; then TEST=./ocsp_test.exe fi $TEST www.amazon.com 443 $TEST cloudflare.com 443 |
Added jni/libressl/tests/pidwraptest.sh.
> > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 | #!/bin/sh ./pidwraptest > pidwraptest.txt while read a b; do if [ "$a" = "$b" ]; then echo "FAIL: $a = $b" return 2 else echo "PASS: $a != $b" fi done < pidwraptest.txt |
Added jni/libressl/tests/rfc5280time.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 | /* $OpenBSD: rfc5280time.c,v 1.3 2015/10/22 14:01:19 jsing Exp $ */ /* * Copyright (c) 2015 Joel Sing <jsing@openbsd.org> * Copyright (c) 2015 Bob Beck <beck@opebsd.org> * * 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. */ #include <openssl/asn1.h> #include <openssl/x509.h> #include <err.h> #include <stdio.h> #include <string.h> struct rfc5280_time_test { const char *str; const char *data; time_t time; }; struct rfc5280_time_test rfc5280_invtime_tests[] = { { .str = "", }, { .str = "2015", }, { .str = "201509", }, { .str = "20150923", }, { .str = "20150923032700", }, { /* UTC time must have seconds */ .str = "7001010000Z", }, { .str = "201509230327Z", }, { .str = "20150923032700.Z", }, { .str = "20150923032700.123", }, { .str = "20150923032700+1100Z", }, { .str = "20150923032700-11001", }, { /* UTC time cannot have fractional seconds. */ .str = "150923032700.123Z", }, { /* Gen time cannot have +- TZ. */ .str = "20150923032712+1115", }, { /* Gen time cannot have fractional seconds */ .str = "20150923032712.123Z", }, { .str = "aaaaaaaaaaaaaaZ", }, { /* Must be a UTC time per RFC 5280 */ .str = "19700101000000Z", .data = "19700101000000Z", .time = 0, }, { /* (times before 2050 must be UTCTIME) Per RFC 5280 4.1.2.5 */ .str = "20150923032700Z", .data = "20150923032700Z", .time = 1442978820, }, #if SIZEOF_TIME_T == 8 { /* (times before 2050 must be UTCTIME) Per RFC 5280 4.1.2.5 */ .str = "00000101000000Z", .data = "00000101000000Z", .time = -62167219200LL, }, { /* (times before 2050 must be UTCTIME) Per RFC 5280 4.1.2.5 */ .str = "20491231235959Z", .data = "20491231235959Z", .time = 2524607999LL, }, #endif { /* (times before 2050 must be UTCTIME) Per RFC 5280 4.1.2.5 */ .str = "19500101000000Z", .data = "19500101000000Z", .time = -631152000LL, }, }; struct rfc5280_time_test rfc5280_gentime_tests[] = { #if SIZEOF_TIME_T == 8 { /* Biggest RFC 5280 time */ .str = "99991231235959Z", .data = "99991231235959Z", .time = 253402300799LL, }, { .str = "21600218104000Z", .data = "21600218104000Z", .time = 6000000000LL, }, { /* Smallest RFC 5280 gen time */ .str = "20500101000000Z", .data = "20500101000000Z", .time = 2524608000LL, }, #endif }; struct rfc5280_time_test rfc5280_utctime_tests[] = { { .str = "500101000000Z", .data = "500101000000Z", .time = -631152000, }, { .str = "540226230640Z", .data = "540226230640Z", .time = -500000000, }, #if SIZEOF_TIME_T == 8 { .str = "491231235959Z", .data = "491231235959Z", .time = 2524607999LL, }, #endif { .str = "700101000000Z", .data = "700101000000Z", .time = 0, }, { .str = "150923032700Z", .data = "150923032700Z", .time = 1442978820, }, { .str = "150923102700Z", .data = "150923102700Z", .time = 1443004020, }, { .str = "150922162712Z", .data = "150922162712Z", .time = 1442939232, }, { .str = "140524144512Z", .data = "140524144512Z", .time = 1400942712, }, { .str = "240401144512Z", .data = "240401144512Z", .time = 1711982712, }, }; #define N_INVTIME_TESTS \ (sizeof(rfc5280_invtime_tests) / sizeof(*rfc5280_invtime_tests)) #define N_GENTIME_TESTS \ (sizeof(rfc5280_gentime_tests) / sizeof(*rfc5280_gentime_tests)) #define N_UTCTIME_TESTS \ (sizeof(rfc5280_utctime_tests) / sizeof(*rfc5280_utctime_tests)) static int asn1_compare_str(int test_no, struct asn1_string_st *asn1str, const char *str) { int length = strlen(str); if (asn1str->length != length) { fprintf(stderr, "FAIL: test %i - string lengths differ " "(%i != %i)\n", test_no, asn1str->length, length); return (1); } if (strncmp(asn1str->data, str, length) != 0) { fprintf(stderr, "FAIL: test %i - strings differ " "('%s' != '%s')\n", test_no, asn1str->data, str); return (1); } return (0); } static int rfc5280_invtime_test(int test_no, struct rfc5280_time_test *att) { ASN1_GENERALIZEDTIME *gt = NULL; ASN1_UTCTIME *ut = NULL; ASN1_TIME *t = NULL; int failure = 1; time_t now = time(NULL); if ((gt = ASN1_GENERALIZEDTIME_new()) == NULL) goto done; if ((ut = ASN1_UTCTIME_new()) == NULL) goto done; if ((t = ASN1_TIME_new()) == NULL) goto done; if (ASN1_GENERALIZEDTIME_set_string(gt, att->str) != 0) { if (X509_cmp_time(gt, &now) != 0) { fprintf(stderr, "FAIL: test %i - successfully parsed as GENTIME " "string '%s'\n", test_no, att->str); goto done; } } if (ASN1_UTCTIME_set_string(ut, att->str) != 0) { if (X509_cmp_time(ut, &now) != 0) { fprintf(stderr, "FAIL: test %i - successfully parsed as UTCTIME " "string '%s'\n", test_no, att->str); goto done; } } if (ASN1_TIME_set_string(t, att->str) != 0) { if (X509_cmp_time(t, &now) != 0) { fprintf(stderr, "FAIL: test %i - successfully parsed as UTCTIME " "string '%s'\n", test_no, att->str); goto done; } } failure = 0; done: ASN1_GENERALIZEDTIME_free(gt); ASN1_UTCTIME_free(ut); ASN1_TIME_free(t); return (failure); } static int rfc5280_gentime_test(int test_no, struct rfc5280_time_test *att) { unsigned char *p = NULL; ASN1_GENERALIZEDTIME *gt; int failure = 1; int i; if ((gt = ASN1_GENERALIZEDTIME_new()) == NULL) goto done; if (ASN1_GENERALIZEDTIME_set_string(gt, att->str) != 1) { fprintf(stderr, "FAIL: test %i - failed to set string '%s'\n", test_no, att->str); goto done; } if (asn1_compare_str(test_no, gt, att->str) != 0) goto done; if ((i = X509_cmp_time(gt, &att->time)) != -1) { fprintf(stderr, "FAIL: test %i - X509_cmp_time failed - returned %d compared to %lld\n", test_no, i, (long long)att->time); goto done; } att->time--; if ((i = X509_cmp_time(gt, &att->time)) != 1) { fprintf(stderr, "FAIL: test %i - X509_cmp_time failed - returned %d compared to %lld\n", test_no, i, (long long)att->time); goto done; } att->time++; ASN1_GENERALIZEDTIME_free(gt); if ((gt = ASN1_GENERALIZEDTIME_set(NULL, att->time)) == NULL) { fprintf(stderr, "FAIL: test %i - failed to set time %lli\n", test_no, (long long)att->time); goto done; } if (asn1_compare_str(test_no, gt, att->data) != 0) goto done; failure = 0; done: ASN1_GENERALIZEDTIME_free(gt); free(p); return (failure); } static int rfc5280_utctime_test(int test_no, struct rfc5280_time_test *att) { unsigned char *p = NULL; ASN1_UTCTIME *ut; int failure = 1; int i; if ((ut = ASN1_UTCTIME_new()) == NULL) goto done; if (ASN1_UTCTIME_set_string(ut, att->str) != 1) { fprintf(stderr, "FAIL: test %i - failed to set string '%s'\n", test_no, att->str); goto done; } if (asn1_compare_str(test_no, ut, att->str) != 0) goto done; if ((i = X509_cmp_time(ut, &att->time)) != -1) { fprintf(stderr, "FAIL: test %i - X509_cmp_time failed - returned %d compared to %lld\n", test_no, i, (long long)att->time); goto done; } att->time--; if ((i = X509_cmp_time(ut, &att->time)) != 1) { fprintf(stderr, "FAIL: test %i - X509_cmp_time failed - returned %d compared to %lld\n", test_no, i, (long long)att->time); goto done; } att->time++; ASN1_UTCTIME_free(ut); if ((ut = ASN1_UTCTIME_set(NULL, att->time)) == NULL) { fprintf(stderr, "FAIL: test %i - failed to set time %lli\n", test_no, (long long)att->time); goto done; } if (asn1_compare_str(test_no, ut, att->data) != 0) goto done; failure = 0; done: ASN1_UTCTIME_free(ut); free(p); return (failure); } int main(int argc, char **argv) { struct rfc5280_time_test *att; int failed = 0; size_t i; fprintf(stderr, "RFC5280 Invalid time tests...\n"); for (i = 0; i < N_INVTIME_TESTS; i++) { att = &rfc5280_invtime_tests[i]; failed |= rfc5280_invtime_test(i, att); } fprintf(stderr, "RFC5280 GENERALIZEDTIME tests...\n"); for (i = 0; i < N_GENTIME_TESTS; i++) { att = &rfc5280_gentime_tests[i]; failed |= rfc5280_gentime_test(i, att); } fprintf(stderr, "RFC5280 UTCTIME tests...\n"); for (i = 0; i < N_UTCTIME_TESTS; i++) { att = &rfc5280_utctime_tests[i]; failed |= rfc5280_utctime_test(i, att); } return (failed); } |
Added jni/libressl/tests/rfc5280time_small.test.
> > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 | #!/bin/sh set -e echo 1..2 TEST=./rfc5280time if [ -e ./rfc5280time.exe ]; then TEST=./rfc5280time.exe fi $TEST echo "ok 1" echo "ok 2 - rfc5280time_64-bit # SKIP this system is unable to represent times past 2038" |
Changes to jni/libressl/tests/sha1test.c.
︙ | ︙ | |||
59 60 61 62 63 64 65 | #include <stdio.h> #include <string.h> #include <stdlib.h> #include <openssl/evp.h> #include <openssl/sha.h> | < < < < < < < < < < < < < | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include <stdio.h> #include <string.h> #include <stdlib.h> #include <openssl/evp.h> #include <openssl/sha.h> static char *test[]={ "abc", "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", NULL, }; static char *ret[]={ "a9993e364706816aba3e25717850c26c9cd0d89d", "84983e441c3bd26ebaae4aa1f95129e5e54670f1", }; static char *bigret= "34aa973cd4c4daa4f61eeb2bdbad27316534016f"; static char *pt(unsigned char *md); int main(int argc, char *argv[]) { int i,err=0; char **P,**R; static unsigned char buf[1000]; |
︙ | ︙ |
Deleted jni/libressl/tests/shatest.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/libressl/tests/ssltest.c.
︙ | ︙ | |||
157 158 159 160 161 162 163 | #include <string.h> #include <time.h> #include <unistd.h> #include <ctype.h> #include <openssl/opensslconf.h> | < | 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | #include <string.h> #include <time.h> #include <unistd.h> #include <ctype.h> #include <openssl/opensslconf.h> #include <openssl/bio.h> #include <openssl/crypto.h> #include <openssl/evp.h> #include <openssl/x509.h> #include <openssl/x509v3.h> #include <openssl/ssl.h> #ifndef OPENSSL_NO_ENGINE |
︙ | ︙ | |||
427 428 429 430 431 432 433 | fprintf(stderr, " -reuse - use session-id reuse\n"); fprintf(stderr, " -num <val> - number of connections to perform\n"); fprintf(stderr, " -bytes <val> - number of bytes to swap between client/server\n"); fprintf(stderr, " -dhe1024dsa - use 1024 bit key (with 160-bit subprime) for DHE\n"); fprintf(stderr, " -no_dhe - disable DHE\n"); fprintf(stderr, " -no_ecdhe - disable ECDHE\n"); fprintf(stderr, " -dtls1 - use DTLSv1\n"); | < | 426 427 428 429 430 431 432 433 434 435 436 437 438 439 | fprintf(stderr, " -reuse - use session-id reuse\n"); fprintf(stderr, " -num <val> - number of connections to perform\n"); fprintf(stderr, " -bytes <val> - number of bytes to swap between client/server\n"); fprintf(stderr, " -dhe1024dsa - use 1024 bit key (with 160-bit subprime) for DHE\n"); fprintf(stderr, " -no_dhe - disable DHE\n"); fprintf(stderr, " -no_ecdhe - disable ECDHE\n"); fprintf(stderr, " -dtls1 - use DTLSv1\n"); fprintf(stderr, " -tls1 - use TLSv1\n"); fprintf(stderr, " -CApath arg - PEM format directory of CA's\n"); fprintf(stderr, " -CAfile arg - PEM format file of CA's\n"); fprintf(stderr, " -cert arg - Server certificate file\n"); fprintf(stderr, " -key arg - Server key file (default: same as -cert)\n"); fprintf(stderr, " -c_cert arg - Client certificate file\n"); fprintf(stderr, " -c_key arg - Client key file (default: same as -c_cert)\n"); |
︙ | ︙ | |||
546 547 548 549 550 551 552 | int main(int argc, char *argv[]) { char *CApath = NULL, *CAfile = NULL; int badop = 0; int bio_pair = 0; int force = 0; | | | 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 | int main(int argc, char *argv[]) { char *CApath = NULL, *CAfile = NULL; int badop = 0; int bio_pair = 0; int force = 0; int tls1 = 0, dtls1 = 0, ret = 1; int client_auth = 0; int server_auth = 0, i; struct app_verify_arg app_verify_arg = { APP_CALLBACK_STRING, 0, 0, NULL, NULL }; char *server_cert = TEST_SERVER_CERT; char *server_key = NULL; char *client_cert = TEST_CLIENT_CERT; |
︙ | ︙ | |||
614 615 616 617 618 619 620 | dhe1024dsa = 1; } else if (strcmp(*argv, "-no_dhe") == 0) no_dhe = 1; else if (strcmp(*argv, "-no_ecdhe") == 0) no_ecdhe = 1; else if (strcmp(*argv, "-dtls1") == 0) dtls1 = 1; | < < | 612 613 614 615 616 617 618 619 620 621 622 623 624 625 | dhe1024dsa = 1; } else if (strcmp(*argv, "-no_dhe") == 0) no_dhe = 1; else if (strcmp(*argv, "-no_ecdhe") == 0) no_ecdhe = 1; else if (strcmp(*argv, "-dtls1") == 0) dtls1 = 1; else if (strcmp(*argv, "-tls1") == 0) tls1 = 1; else if (strncmp(*argv, "-num", 4) == 0) { if (--argc < 1) goto bad; number = atoi(*(++argv)); if (number == 0) |
︙ | ︙ | |||
729 730 731 732 733 734 735 | /* ensure that the cipher list are correctly sorted and exit */ if (do_test_cipherlist() == 0) exit(1); ret = 0; goto end; } | | | | 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 | /* ensure that the cipher list are correctly sorted and exit */ if (do_test_cipherlist() == 0) exit(1); ret = 0; goto end; } if (!dtls1 && !tls1 && number > 1 && !reuse && !force) { fprintf(stderr, "This case cannot work. Use -f to perform " "the test anyway (and\n-d to see what happens), " "or add one of -dtls1, -tls1, -reuse\n" "to avoid protocol mismatch.\n"); exit(1); } if (print_time) { if (!bio_pair) { fprintf(stderr, "Using BIO pair (-bio_pair)\n"); |
︙ | ︙ | |||
757 758 759 760 761 762 763 | SSL_library_init(); SSL_load_error_strings(); if (dtls1) meth = DTLSv1_method(); else if (tls1) meth = TLSv1_method(); | < < | 753 754 755 756 757 758 759 760 761 762 763 764 765 766 | SSL_library_init(); SSL_load_error_strings(); if (dtls1) meth = DTLSv1_method(); else if (tls1) meth = TLSv1_method(); else meth = SSLv23_method(); c_ctx = SSL_CTX_new(meth); s_ctx = SSL_CTX_new(meth); if ((c_ctx == NULL) || (s_ctx == NULL)) { ERR_print_errors(bio_err); |
︙ | ︙ | |||
2165 2166 2167 2168 2169 2170 2171 | static int do_test_cipherlist(void) { int i = 0; const SSL_METHOD *meth; const SSL_CIPHER *ci, *tci = NULL; | < < < < < < < < < < < < < < | 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 | static int do_test_cipherlist(void) { int i = 0; const SSL_METHOD *meth; const SSL_CIPHER *ci, *tci = NULL; fprintf(stderr, "testing TLSv1 cipher list order: "); meth = TLSv1_method(); tci = NULL; while ((ci = meth->get_cipher(i++)) != NULL) { if (tci != NULL) { if (ci->id >= tci->id) { fprintf(stderr, |
︙ | ︙ |
Changes to jni/libressl/tests/ssltest.sh.
1 2 3 4 5 6 7 8 | #!/bin/sh set -e ssltest_bin=./ssltest if [ -e ./ssltest.exe ]; then ssltest_bin=./ssltest.exe fi | > > > > > > | | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/bin/sh set -e ssltest_bin=./ssltest if [ -e ./ssltest.exe ]; then ssltest_bin=./ssltest.exe fi if [ -d ../apps/openssl ]; then openssl_bin=../apps/openssl/openssl if [ -e ../apps/openssl/openssl.exe ]; then openssl_bin=../apps/openssl/openssl.exe fi else openssl_bin=../apps/openssl if [ -e ../apps/openssl.exe ]; then openssl_bin=../apps/openssl.exe fi fi if [ -z $srcdir ]; then srcdir=. fi $srcdir/testssl $srcdir/server.pem $srcdir/server.pem $srcdir/ca.pem \ |
︙ | ︙ |
Changes to jni/libressl/tests/testdsa.sh.
1 2 3 4 5 6 | #!/bin/sh # $OpenBSD: testdsa.sh,v 1.1 2014/08/26 17:50:07 jsing Exp $ #Test DSA certificate generation of openssl | > > > > > > | | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/bin/sh # $OpenBSD: testdsa.sh,v 1.1 2014/08/26 17:50:07 jsing Exp $ #Test DSA certificate generation of openssl if [ -d ../apps/openssl ]; then cmd=../apps/openssl/openssl if [ -e ../apps/openssl/openssl.exe ]; then cmd=../apps/openssl/openssl.exe fi else cmd=../apps/openssl if [ -e ../apps/openssl.exe ]; then cmd=../apps/openssl.exe fi fi if [ -z $srcdir ]; then srcdir=. fi # Generate DSA paramter set |
︙ | ︙ |
Changes to jni/libressl/tests/testenc.sh.
1 2 3 4 | #!/bin/sh # $OpenBSD: testenc.sh,v 1.1 2014/08/26 17:50:07 jsing Exp $ test=p | > > > > > > | | | | > > > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #!/bin/sh # $OpenBSD: testenc.sh,v 1.1 2014/08/26 17:50:07 jsing Exp $ test=p if [ -d ../apps/openssl ]; then cmd=../apps/openssl/openssl if [ -e ../apps/openssl/openssl.exe ]; then cmd=../apps/openssl/openssl.exe fi else cmd=../apps/openssl if [ -e ../apps/openssl.exe ]; then cmd=../apps/openssl.exe fi fi if [ -z $srcdir ]; then srcdir=. fi cat $srcdir/openssl.cnf >$test; echo cat $cmd enc < $test > $test.cipher $cmd enc < $test.cipher >$test.clear cmp $test $test.clear if [ $? != 0 ] then |
︙ | ︙ |
Changes to jni/libressl/tests/testrsa.sh.
1 2 3 4 5 6 | #!/bin/sh # $OpenBSD: testrsa.sh,v 1.1 2014/08/26 17:50:07 jsing Exp $ #Test RSA certificate generation of openssl | > > > > > > | | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/bin/sh # $OpenBSD: testrsa.sh,v 1.1 2014/08/26 17:50:07 jsing Exp $ #Test RSA certificate generation of openssl if [ -d ../apps/openssl ]; then cmd=../apps/openssl/openssl if [ -e ../apps/openssl/openssl.exe ]; then cmd=../apps/openssl/openssl.exe fi else cmd=../apps/openssl if [ -e ../apps/openssl.exe ]; then cmd=../apps/openssl.exe fi fi if [ -z $srcdir ]; then srcdir=. fi # Generate RSA private key |
︙ | ︙ |
Changes to jni/libressl/tests/testssl.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/bin/sh key="$1" cert="$2" CA="-CAfile $3" ssltest="${4-./ssltest} -key $key -cert $cert -c_key $key -c_cert $cert" openssl=${5-openssl} extra="$6" if $openssl x509 -in $cert -text -noout | fgrep 'DSA Public Key' >/dev/null; then dsa_cert=YES else dsa_cert=NO fi ############################################################################# | > > < < < < < < < < < < < < < < < < < < < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #!/bin/sh key="$1" cert="$2" CA="-CAfile $3" ssltest="${4-./ssltest} -key $key -cert $cert -c_key $key -c_cert $cert" openssl=${5-openssl} extra="$6" $openssl version || exit 1 if $openssl x509 -in $cert -text -noout | fgrep 'DSA Public Key' >/dev/null; then dsa_cert=YES else dsa_cert=NO fi ############################################################################# echo test sslv2/sslv3 $ssltest $extra || exit 1 echo test sslv2/sslv3 with server authentication $ssltest -server_auth $CA $extra || exit 1 echo test sslv2/sslv3 with client authentication $ssltest -client_auth $CA $extra || exit 1 echo test sslv2/sslv3 with both client and server authentication $ssltest -server_auth -client_auth $CA $extra || exit 1 echo test sslv2/sslv3 via BIO pair $ssltest $extra || exit 1 if [ $dsa_cert = NO ]; then echo 'test sslv2/sslv3 w/o (EC)DHE via BIO pair' $ssltest -bio_pair -no_dhe -no_ecdhe $extra || exit 1 fi |
︙ | ︙ | |||
71 72 73 74 75 76 77 | echo test sslv2/sslv3 with both client and server authentication via BIO pair $ssltest -bio_pair -server_auth -client_auth $CA $extra || exit 1 echo test sslv2/sslv3 with both client and server authentication via BIO pair and app verify $ssltest -bio_pair -server_auth -client_auth -app_verify $CA $extra || exit 1 echo "Testing ciphersuites" | | < < < < | | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | echo test sslv2/sslv3 with both client and server authentication via BIO pair $ssltest -bio_pair -server_auth -client_auth $CA $extra || exit 1 echo test sslv2/sslv3 with both client and server authentication via BIO pair and app verify $ssltest -bio_pair -server_auth -client_auth -app_verify $CA $extra || exit 1 echo "Testing ciphersuites" for protocol in TLSv1.2; do echo "Testing ciphersuites for $protocol" for cipher in `$openssl ciphers "$protocol+aRSA" | tr ':' ' '`; do echo "Testing $cipher" $ssltest -cipher $cipher if [ $? -ne 0 ] ; then echo "Failed $cipher" exit 1 fi done done |
︙ | ︙ |
Added jni/libressl/tests/verifytest.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | /* $OpenBSD: verifytest.c,v 1.4 2015/09/11 12:57:24 beck Exp $ */ /* * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> * * 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. */ #include <err.h> #include <stdio.h> #include <stdlib.h> #include <openssl/x509v3.h> #include <tls.h> extern int tls_check_name(struct tls *ctx, X509 *cert, const char *name); struct verify_test { const char common_name[128]; const char alt_name[128]; int alt_name_len; int alt_name_type; const char name[128]; int want; }; struct verify_test verify_tests[] = { { .common_name = "www.openbsd.org", .name = "www.openbsd.org", .want = 0, }, { .common_name = "www.openbsd.org", .name = "", .want = -1, }, { .common_name = "*.openbsd.org", .name = "www.openbsd.org", .want = 0, }, { .common_name = "www.openbsdfoundation.org", .name = "www.openbsd.org", .want = -1, }, { .common_name = "w*.openbsd.org", .name = "www.openbsd.org", .want = -1, }, { .common_name = "www.*.org", .name = "www.openbsd.org", .want = -1, }, { .common_name = "www.openbsd.*", .name = "www.openbsd.org", .want = -1, }, { .common_name = "*", .name = "www.openbsd.org", .want = -1, }, { .common_name = "*.org", .name = "www.openbsd.org", .want = -1, }, { .common_name = "*.org", .name = "openbsd.org", .want = -1, }, { .common_name = "1.2.3.4", .name = "1.2.3.4", .want = 0, }, { .common_name = "*.2.3.4", .name = "1.2.3.4", .want = -1, }, { .common_name = "cafe::beef", .name = "cafe::beef", .want = 0, }, { .common_name = "www.openbsd.org", .alt_name = "ftp.openbsd.org", .alt_name_len = -1, .alt_name_type = GEN_DNS, .name = "ftp.openbsd.org", .want = 0, }, { .common_name = "www.openbsdfoundation.org", .alt_name = "*.openbsd.org", .alt_name_len = -1, .alt_name_type = GEN_DNS, .name = "www.openbsd.org", .want = 0, }, { .common_name = "www.openbsdfoundation.org", .alt_name = "*.org", .alt_name_len = -1, .alt_name_type = GEN_DNS, .name = "www.openbsd.org", .want = -1, }, { .common_name = "www.openbsd.org", .alt_name = "1.2.3.4", .alt_name_len = -1, .alt_name_type = GEN_DNS, .name = "1.2.3.4", .want = -1, }, { .common_name = "www.openbsd.org", .alt_name = {0x1, 0x2, 0x3, 0x4}, .alt_name_len = 4, .alt_name_type = GEN_IPADD, .name = "1.2.3.4", .want = 0, }, { .common_name = "www.openbsd.org", .alt_name = { 0xca, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xef, }, .alt_name_len = 16, .alt_name_type = GEN_IPADD, .name = "cafe::beef", .want = 0, }, { .common_name = "*.openbsd.org", .name = ".openbsd.org", .want = -1, }, }; #define N_VERIFY_TESTS \ (sizeof(verify_tests) / sizeof(*verify_tests)) static int do_verify_test(int test_no, struct verify_test *vt) { STACK_OF(GENERAL_NAME) *alt_name_stack = NULL; ASN1_STRING *alt_name_str; GENERAL_NAME *alt_name; X509_NAME *name; X509 *cert; struct tls *tls; /* Build certificate structure. */ if ((cert = X509_new()) == NULL) errx(1, "failed to malloc X509"); if ((name = X509_NAME_new()) == NULL) errx(1, "failed to malloc X509_NAME"); if (X509_NAME_add_entry_by_NID(name, NID_commonName, MBSTRING_ASC, (unsigned char *)vt->common_name, -1, -1, 0) == 0) errx(1, "failed to add name entry"); if (X509_set_subject_name(cert, name) == 0) errx(1, "failed to set subject name"); X509_NAME_free(name); if ((tls = tls_client()) == NULL) errx(1, "failed to malloc tls_client"); if (vt->alt_name_type != 0) { if ((alt_name_stack = sk_GENERAL_NAME_new_null()) == NULL) errx(1, "failed to malloc sk_GENERAL_NAME"); if ((alt_name = GENERAL_NAME_new()) == NULL) errx(1, "failed to malloc GENERAL_NAME"); alt_name->type = vt->alt_name_type; if ((alt_name_str = ASN1_STRING_new()) == NULL) errx(1, "failed to malloc alt name"); if (ASN1_STRING_set(alt_name_str, vt->alt_name, vt->alt_name_len) == 0) errx(1, "failed to set alt name"); switch (alt_name->type) { case GEN_DNS: alt_name->d.dNSName = alt_name_str; break; case GEN_IPADD: alt_name->d.iPAddress = alt_name_str; break; default: errx(1, "unknown alt name type (%i)", alt_name->type); } if (sk_GENERAL_NAME_push(alt_name_stack, alt_name) == 0) errx(1, "failed to push alt_name"); if (X509_add1_ext_i2d(cert, NID_subject_alt_name, alt_name_stack, 0, 0) == 0) errx(1, "failed to set subject alt name"); sk_GENERAL_NAME_pop_free(alt_name_stack, GENERAL_NAME_free); } if (tls_check_name(tls, cert, vt->name) != vt->want) { fprintf(stderr, "FAIL: test %i failed with common name " "'%s', alt name '%s' and name '%s'\n", test_no, vt->common_name, vt->alt_name, vt->name); return (1); } X509_free(cert); return (0); } int main(int argc, char **argv) { int failed = 0; size_t i; for (i = 0; i < N_VERIFY_TESTS; i++) failed += do_verify_test(i, &verify_tests[i]); return (failed); } |
Changes to jni/libressl/tls/CMakeLists.txt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | include_directories( . ../include ../include/compat ) set( TLS_SRC tls.c tls_client.c tls_config.c tls_server.c tls_util.c tls_verify.c ) | > > | > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | include_directories( . ../include ../include/compat ) set( TLS_SRC tls.c tls_client.c tls_config.c tls_conninfo.c tls_server.c tls_peer.c tls_util.c tls_verify.c ) if(NOT HAVE_STRSEP) set(TLS_SRC ${TLS_SRC} strsep.c) endif() if(NOT "${OPENSSLDIR}" STREQUAL "") add_definitions(-D_PATH_SSL_CA_FILE=\"${OPENSSLDIR}/cert.pem\") else() add_definitions(-D_PATH_SSL_CA_FILE=\"${CMAKE_INSTALL_PREFIX}/etc/ssl/cert.pem\") endif() if (BUILD_SHARED) add_library(tls-objects OBJECT ${TLS_SRC}) add_library(tls STATIC $<TARGET_OBJECTS:tls-objects>) add_library(tls-shared SHARED $<TARGET_OBJECTS:tls-objects>) if (MSVC) target_link_libraries(tls-shared ssl-shared crypto-shared Ws2_32.lib) endif() set_target_properties(tls-shared PROPERTIES OUTPUT_NAME tls) set_target_properties(tls-shared PROPERTIES VERSION ${TLS_VERSION} SOVERSION ${TLS_MAJOR_VERSION}) install(TARGETS tls tls-shared DESTINATION lib) else() add_library(tls STATIC ${TLS_SRC}) install(TARGETS tls DESTINATION lib) |
︙ | ︙ |
Changes to jni/libressl/tls/Makefile.am.
1 2 3 4 5 6 7 8 | include $(top_srcdir)/Makefile.am.common lib_LTLIBRARIES = libtls.la EXTRA_DIST = VERSION EXTRA_DIST += CMakeLists.txt libtls_la_LDFLAGS = -version-info @LIBTLS_VERSION@ -no-undefined | > > > | > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | include $(top_srcdir)/Makefile.am.common lib_LTLIBRARIES = libtls.la EXTRA_DIST = VERSION EXTRA_DIST += CMakeLists.txt libtls_la_LDFLAGS = -version-info @LIBTLS_VERSION@ -no-undefined libtls_la_LIBADD = $(abs_top_builddir)/ssl/libssl.la libtls_la_LIBADD += $(abs_top_builddir)/crypto/libcrypto.la libtls_la_LIBADD += $(PLATFORM_LDADD) libtls_la_CPPFLAGS = $(AM_CPPFLAGS) if OPENSSLDIR_DEFINED libtls_la_CPPFLAGS += -D_PATH_SSL_CA_FILE=\"@OPENSSLDIR@/cert.pem\" else libtls_la_CPPFLAGS += -D_PATH_SSL_CA_FILE=\"$(sysconfdir)/ssl/cert.pem\" endif libtls_la_SOURCES = tls.c libtls_la_SOURCES += tls_client.c libtls_la_SOURCES += tls_config.c libtls_la_SOURCES += tls_conninfo.c libtls_la_SOURCES += tls_server.c libtls_la_SOURCES += tls_peer.c libtls_la_SOURCES += tls_util.c libtls_la_SOURCES += tls_verify.c noinst_HEADERS = tls_internal.h if !HAVE_STRSEP libtls_la_SOURCES += strsep.c endif |
Changes to jni/libressl/tls/Makefile.in.
︙ | ︙ | |||
85 86 87 88 89 90 91 | PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ | > > | | 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @OPENSSLDIR_DEFINED_TRUE@am__append_1 = -D_PATH_SSL_CA_FILE=\"@OPENSSLDIR@/cert.pem\" @OPENSSLDIR_DEFINED_FALSE@am__append_2 = -D_PATH_SSL_CA_FILE=\"$(sysconfdir)/ssl/cert.pem\" @HAVE_STRSEP_FALSE@am__append_3 = strsep.c subdir = tls ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/check-hardening-options.m4 \ $(top_srcdir)/m4/check-libc.m4 \ $(top_srcdir)/m4/check-os-options.m4 \ $(top_srcdir)/m4/disable-compiler-warnings.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ |
︙ | ︙ | |||
132 133 134 135 136 137 138 | || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = | | | | > | | > > | | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libtls_la_DEPENDENCIES = $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la $(am__DEPENDENCIES_1) am__libtls_la_SOURCES_DIST = tls.c tls_client.c tls_config.c \ tls_conninfo.c tls_server.c tls_peer.c tls_util.c tls_verify.c \ strsep.c @HAVE_STRSEP_FALSE@am__objects_1 = libtls_la-strsep.lo am_libtls_la_OBJECTS = libtls_la-tls.lo libtls_la-tls_client.lo \ libtls_la-tls_config.lo libtls_la-tls_conninfo.lo \ libtls_la-tls_server.lo libtls_la-tls_peer.lo \ libtls_la-tls_util.lo libtls_la-tls_verify.lo $(am__objects_1) libtls_la_OBJECTS = $(am_libtls_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libtls_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ |
︙ | ︙ | |||
339 340 341 342 343 344 345 | top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat -DLIBRESSL_INTERNAL lib_LTLIBRARIES = libtls.la EXTRA_DIST = VERSION CMakeLists.txt libtls_la_LDFLAGS = -version-info @LIBTLS_VERSION@ -no-undefined | > | > | | > | 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 | top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat -DLIBRESSL_INTERNAL lib_LTLIBRARIES = libtls.la EXTRA_DIST = VERSION CMakeLists.txt libtls_la_LDFLAGS = -version-info @LIBTLS_VERSION@ -no-undefined libtls_la_LIBADD = $(abs_top_builddir)/ssl/libssl.la \ $(abs_top_builddir)/crypto/libcrypto.la $(PLATFORM_LDADD) libtls_la_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_1) $(am__append_2) libtls_la_SOURCES = tls.c tls_client.c tls_config.c tls_conninfo.c \ tls_server.c tls_peer.c tls_util.c tls_verify.c \ $(am__append_3) noinst_HEADERS = tls_internal.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps) @for dep in $?; do \ |
︙ | ︙ | |||
422 423 424 425 426 427 428 | mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c | | | | | > | > | | | 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 | mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtls_la-strsep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtls_la-tls.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtls_la-tls_client.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtls_la-tls_config.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtls_la-tls_conninfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtls_la-tls_peer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtls_la-tls_server.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtls_la-tls_util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtls_la-tls_verify.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
︙ | ︙ | |||
454 455 456 457 458 459 460 461 462 463 464 465 466 467 | @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 | @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libtls_la-tls.lo: tls.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtls_la-tls.lo -MD -MP -MF $(DEPDIR)/libtls_la-tls.Tpo -c -o libtls_la-tls.lo `test -f 'tls.c' || echo '$(srcdir)/'`tls.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtls_la-tls.Tpo $(DEPDIR)/libtls_la-tls.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tls.c' object='libtls_la-tls.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtls_la-tls.lo `test -f 'tls.c' || echo '$(srcdir)/'`tls.c libtls_la-tls_client.lo: tls_client.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtls_la-tls_client.lo -MD -MP -MF $(DEPDIR)/libtls_la-tls_client.Tpo -c -o libtls_la-tls_client.lo `test -f 'tls_client.c' || echo '$(srcdir)/'`tls_client.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtls_la-tls_client.Tpo $(DEPDIR)/libtls_la-tls_client.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tls_client.c' object='libtls_la-tls_client.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtls_la-tls_client.lo `test -f 'tls_client.c' || echo '$(srcdir)/'`tls_client.c libtls_la-tls_config.lo: tls_config.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtls_la-tls_config.lo -MD -MP -MF $(DEPDIR)/libtls_la-tls_config.Tpo -c -o libtls_la-tls_config.lo `test -f 'tls_config.c' || echo '$(srcdir)/'`tls_config.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtls_la-tls_config.Tpo $(DEPDIR)/libtls_la-tls_config.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tls_config.c' object='libtls_la-tls_config.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtls_la-tls_config.lo `test -f 'tls_config.c' || echo '$(srcdir)/'`tls_config.c libtls_la-tls_conninfo.lo: tls_conninfo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtls_la-tls_conninfo.lo -MD -MP -MF $(DEPDIR)/libtls_la-tls_conninfo.Tpo -c -o libtls_la-tls_conninfo.lo `test -f 'tls_conninfo.c' || echo '$(srcdir)/'`tls_conninfo.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtls_la-tls_conninfo.Tpo $(DEPDIR)/libtls_la-tls_conninfo.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tls_conninfo.c' object='libtls_la-tls_conninfo.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtls_la-tls_conninfo.lo `test -f 'tls_conninfo.c' || echo '$(srcdir)/'`tls_conninfo.c libtls_la-tls_server.lo: tls_server.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtls_la-tls_server.lo -MD -MP -MF $(DEPDIR)/libtls_la-tls_server.Tpo -c -o libtls_la-tls_server.lo `test -f 'tls_server.c' || echo '$(srcdir)/'`tls_server.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtls_la-tls_server.Tpo $(DEPDIR)/libtls_la-tls_server.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tls_server.c' object='libtls_la-tls_server.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtls_la-tls_server.lo `test -f 'tls_server.c' || echo '$(srcdir)/'`tls_server.c libtls_la-tls_peer.lo: tls_peer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtls_la-tls_peer.lo -MD -MP -MF $(DEPDIR)/libtls_la-tls_peer.Tpo -c -o libtls_la-tls_peer.lo `test -f 'tls_peer.c' || echo '$(srcdir)/'`tls_peer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtls_la-tls_peer.Tpo $(DEPDIR)/libtls_la-tls_peer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tls_peer.c' object='libtls_la-tls_peer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtls_la-tls_peer.lo `test -f 'tls_peer.c' || echo '$(srcdir)/'`tls_peer.c libtls_la-tls_util.lo: tls_util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtls_la-tls_util.lo -MD -MP -MF $(DEPDIR)/libtls_la-tls_util.Tpo -c -o libtls_la-tls_util.lo `test -f 'tls_util.c' || echo '$(srcdir)/'`tls_util.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtls_la-tls_util.Tpo $(DEPDIR)/libtls_la-tls_util.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tls_util.c' object='libtls_la-tls_util.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtls_la-tls_util.lo `test -f 'tls_util.c' || echo '$(srcdir)/'`tls_util.c libtls_la-tls_verify.lo: tls_verify.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtls_la-tls_verify.lo -MD -MP -MF $(DEPDIR)/libtls_la-tls_verify.Tpo -c -o libtls_la-tls_verify.lo `test -f 'tls_verify.c' || echo '$(srcdir)/'`tls_verify.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtls_la-tls_verify.Tpo $(DEPDIR)/libtls_la-tls_verify.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tls_verify.c' object='libtls_la-tls_verify.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtls_la-tls_verify.lo `test -f 'tls_verify.c' || echo '$(srcdir)/'`tls_verify.c libtls_la-strsep.lo: strsep.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtls_la-strsep.lo -MD -MP -MF $(DEPDIR)/libtls_la-strsep.Tpo -c -o libtls_la-strsep.lo `test -f 'strsep.c' || echo '$(srcdir)/'`strsep.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtls_la-strsep.Tpo $(DEPDIR)/libtls_la-strsep.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strsep.c' object='libtls_la-strsep.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtls_la-strsep.lo `test -f 'strsep.c' || echo '$(srcdir)/'`strsep.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) |
︙ | ︙ |
Changes to jni/libressl/tls/VERSION.
|
| | | 1 | 11:0:0 |
Changes to jni/libressl/tls/strsep.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: strsep.c,v 1.7 2014/02/05 20:42:32 stsp Exp $ */ /*- * Copyright (c) 1990, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions |
︙ | ︙ |
Changes to jni/libressl/tls/tls.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: tls.c,v 1.40 2016/07/06 16:16:36 jsing Exp $ */ /* * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> * * 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. * |
︙ | ︙ | |||
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | static int tls_initialised = 0; if (tls_initialised) return (0); SSL_load_error_strings(); SSL_library_init(); if ((tls_config_default = tls_config_new()) == NULL) return (-1); tls_initialised = 1; return (0); } const char * tls_error(struct tls *ctx) { | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > < < < < | | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | static int tls_initialised = 0; if (tls_initialised) return (0); SSL_load_error_strings(); SSL_library_init(); if (BIO_sock_init() != 1) return (-1); if ((tls_config_default = tls_config_new()) == NULL) return (-1); tls_initialised = 1; return (0); } const char * tls_error(struct tls *ctx) { return ctx->error.msg; } static int tls_error_vset(struct tls_error *error, int errnum, const char *fmt, va_list ap) { char *errmsg = NULL; int rv = -1; free(error->msg); error->msg = NULL; error->num = errnum; if (vasprintf(&errmsg, fmt, ap) == -1) { errmsg = NULL; goto err; } if (errnum == -1) { error->msg = errmsg; return (0); } if (asprintf(&error->msg, "%s: %s", errmsg, strerror(errnum)) == -1) { error->msg = NULL; goto err; } rv = 0; err: free(errmsg); return (rv); } int tls_error_set(struct tls_error *error, const char *fmt, ...) { va_list ap; int errnum, rv; errnum = errno; va_start(ap, fmt); rv = tls_error_vset(error, errnum, fmt, ap); va_end(ap); return (rv); } int tls_error_setx(struct tls_error *error, const char *fmt, ...) { va_list ap; int rv; va_start(ap, fmt); rv = tls_error_vset(error, -1, fmt, ap); va_end(ap); return (rv); } int tls_config_set_error(struct tls_config *config, const char *fmt, ...) { va_list ap; int errnum, rv; errnum = errno; va_start(ap, fmt); rv = tls_error_vset(&config->error, errnum, fmt, ap); va_end(ap); return (rv); } int tls_config_set_errorx(struct tls_config *config, const char *fmt, ...) { va_list ap; int rv; va_start(ap, fmt); rv = tls_error_vset(&config->error, -1, fmt, ap); va_end(ap); return (rv); } int tls_set_error(struct tls *ctx, const char *fmt, ...) { va_list ap; int errnum, rv; errnum = errno; va_start(ap, fmt); rv = tls_error_vset(&ctx->error, errnum, fmt, ap); va_end(ap); return (rv); } int tls_set_errorx(struct tls *ctx, const char *fmt, ...) { va_list ap; int rv; va_start(ap, fmt); rv = tls_error_vset(&ctx->error, -1, fmt, ap); va_end(ap); return (rv); } struct tls * tls_new(void) |
︙ | ︙ | |||
101 102 103 104 105 106 107 | if ((ctx->flags & TLS_SERVER) != 0) return (tls_configure_server(ctx)); return (0); } int | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | | | | | 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | if ((ctx->flags & TLS_SERVER) != 0) return (tls_configure_server(ctx)); return (0); } int tls_configure_keypair(struct tls *ctx, SSL_CTX *ssl_ctx, struct tls_keypair *keypair, int required) { EVP_PKEY *pkey = NULL; X509 *cert = NULL; BIO *bio = NULL; if (!required && keypair->cert_mem == NULL && keypair->key_mem == NULL && keypair->cert_file == NULL && keypair->key_file == NULL) return(0); if (keypair->cert_mem != NULL) { if (keypair->cert_len > INT_MAX) { tls_set_errorx(ctx, "certificate too long"); goto err; } if (SSL_CTX_use_certificate_chain_mem(ssl_ctx, keypair->cert_mem, keypair->cert_len) != 1) { tls_set_errorx(ctx, "failed to load certificate"); goto err; } cert = NULL; } if (keypair->key_mem != NULL) { if (keypair->key_len > INT_MAX) { tls_set_errorx(ctx, "key too long"); goto err; } if ((bio = BIO_new_mem_buf(keypair->key_mem, keypair->key_len)) == NULL) { tls_set_errorx(ctx, "failed to create buffer"); goto err; } if ((pkey = PEM_read_bio_PrivateKey(bio, NULL, NULL, NULL)) == NULL) { tls_set_errorx(ctx, "failed to read private key"); goto err; } if (SSL_CTX_use_PrivateKey(ssl_ctx, pkey) != 1) { tls_set_errorx(ctx, "failed to load private key"); goto err; } BIO_free(bio); bio = NULL; EVP_PKEY_free(pkey); pkey = NULL; } if (keypair->cert_file != NULL) { if (SSL_CTX_use_certificate_chain_file(ssl_ctx, keypair->cert_file) != 1) { tls_set_errorx(ctx, "failed to load certificate file"); goto err; } } if (keypair->key_file != NULL) { if (SSL_CTX_use_PrivateKey_file(ssl_ctx, keypair->key_file, SSL_FILETYPE_PEM) != 1) { tls_set_errorx(ctx, "failed to load private key file"); goto err; } } if (SSL_CTX_check_private_key(ssl_ctx) != 1) { tls_set_errorx(ctx, "private/public key mismatch"); goto err; } return (0); err: EVP_PKEY_free(pkey); X509_free(cert); BIO_free(bio); return (1); } |
︙ | ︙ | |||
199 200 201 202 203 204 205 | SSL_CTX_set_options(ctx->ssl_ctx, SSL_OP_NO_TLSv1_1); if ((ctx->config->protocols & TLS_PROTOCOL_TLSv1_2) == 0) SSL_CTX_set_options(ctx->ssl_ctx, SSL_OP_NO_TLSv1_2); if (ctx->config->ciphers != NULL) { if (SSL_CTX_set_cipher_list(ctx->ssl_ctx, ctx->config->ciphers) != 1) { | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > | > > | | | | > > > > | | | | | | | | | > > > | > > > > | > > > > > | > > | | | > | > > | > > > | > > > > | | > > > > > > > > > > > > > > | > > > > > > | | > | < | | > | | > | > > > > > > > | | > > > > > > > > | 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 | SSL_CTX_set_options(ctx->ssl_ctx, SSL_OP_NO_TLSv1_1); if ((ctx->config->protocols & TLS_PROTOCOL_TLSv1_2) == 0) SSL_CTX_set_options(ctx->ssl_ctx, SSL_OP_NO_TLSv1_2); if (ctx->config->ciphers != NULL) { if (SSL_CTX_set_cipher_list(ctx->ssl_ctx, ctx->config->ciphers) != 1) { tls_set_errorx(ctx, "failed to set ciphers"); goto err; } } if (ctx->config->verify_time == 0) { X509_VERIFY_PARAM_set_flags(ctx->ssl_ctx->param, X509_V_FLAG_NO_CHECK_TIME); } return (0); err: return (-1); } int tls_configure_ssl_verify(struct tls *ctx, int verify) { SSL_CTX_set_verify(ctx->ssl_ctx, verify, NULL); if (ctx->config->ca_mem != NULL) { /* XXX do this in set. */ if (ctx->config->ca_len > INT_MAX) { tls_set_errorx(ctx, "ca too long"); goto err; } if (SSL_CTX_load_verify_mem(ctx->ssl_ctx, ctx->config->ca_mem, ctx->config->ca_len) != 1) { tls_set_errorx(ctx, "ssl verify memory setup failure"); goto err; } } else if (SSL_CTX_load_verify_locations(ctx->ssl_ctx, ctx->config->ca_file, ctx->config->ca_path) != 1) { tls_set_errorx(ctx, "ssl verify setup failure"); goto err; } if (ctx->config->verify_depth >= 0) SSL_CTX_set_verify_depth(ctx->ssl_ctx, ctx->config->verify_depth); return (0); err: return (-1); } void tls_free(struct tls *ctx) { if (ctx == NULL) return; tls_reset(ctx); free(ctx); } void tls_reset(struct tls *ctx) { SSL_CTX_free(ctx->ssl_ctx); SSL_free(ctx->ssl_conn); X509_free(ctx->ssl_peer_cert); ctx->ssl_conn = NULL; ctx->ssl_ctx = NULL; ctx->ssl_peer_cert = NULL; ctx->socket = -1; ctx->state = 0; free(ctx->servername); ctx->servername = NULL; free(ctx->error.msg); ctx->error.msg = NULL; ctx->error.num = -1; tls_free_conninfo(ctx->conninfo); free(ctx->conninfo); ctx->conninfo = NULL; } int tls_ssl_error(struct tls *ctx, SSL *ssl_conn, int ssl_ret, const char *prefix) { const char *errstr = "unknown error"; unsigned long err; int ssl_err; ssl_err = SSL_get_error(ssl_conn, ssl_ret); switch (ssl_err) { case SSL_ERROR_NONE: case SSL_ERROR_ZERO_RETURN: return (0); case SSL_ERROR_WANT_READ: return (TLS_WANT_POLLIN); case SSL_ERROR_WANT_WRITE: return (TLS_WANT_POLLOUT); case SSL_ERROR_SYSCALL: if ((err = ERR_peek_error()) != 0) { errstr = ERR_error_string(err, NULL); } else if (ssl_ret == 0) { if ((ctx->state & TLS_HANDSHAKE_COMPLETE) != 0) { ctx->state |= TLS_EOF_NO_CLOSE_NOTIFY; return (0); } errstr = "unexpected EOF"; } else if (ssl_ret == -1) { errstr = strerror(errno); } tls_set_errorx(ctx, "%s failed: %s", prefix, errstr); return (-1); case SSL_ERROR_SSL: if ((err = ERR_peek_error()) != 0) { errstr = ERR_error_string(err, NULL); } tls_set_errorx(ctx, "%s failed: %s", prefix, errstr); return (-1); case SSL_ERROR_WANT_CONNECT: case SSL_ERROR_WANT_ACCEPT: case SSL_ERROR_WANT_X509_LOOKUP: default: tls_set_errorx(ctx, "%s failed (%i)", prefix, ssl_err); return (-1); } } int tls_handshake(struct tls *ctx) { int rv = -1; if ((ctx->flags & (TLS_CLIENT | TLS_SERVER_CONN)) == 0) { tls_set_errorx(ctx, "invalid operation for context"); goto out; } if (ctx->conninfo == NULL && (ctx->conninfo = calloc(1, sizeof(*ctx->conninfo))) == NULL) goto out; if ((ctx->flags & TLS_CLIENT) != 0) rv = tls_handshake_client(ctx); else if ((ctx->flags & TLS_SERVER_CONN) != 0) rv = tls_handshake_server(ctx); if (rv == 0) { ctx->ssl_peer_cert = SSL_get_peer_certificate(ctx->ssl_conn); if (tls_get_conninfo(ctx) == -1) rv = -1; } out: /* Prevent callers from performing incorrect error handling */ errno = 0; return (rv); } ssize_t tls_read(struct tls *ctx, void *buf, size_t buflen) { ssize_t rv = -1; int ssl_ret; if ((ctx->state & TLS_HANDSHAKE_COMPLETE) == 0) { if ((rv = tls_handshake(ctx)) != 0) goto out; } if (buflen > INT_MAX) { tls_set_errorx(ctx, "buflen too long"); goto out; } ERR_clear_error(); if ((ssl_ret = SSL_read(ctx->ssl_conn, buf, buflen)) > 0) { rv = (ssize_t)ssl_ret; goto out; } rv = (ssize_t)tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "read"); out: /* Prevent callers from performing incorrect error handling */ errno = 0; return (rv); } ssize_t tls_write(struct tls *ctx, const void *buf, size_t buflen) { ssize_t rv = -1; int ssl_ret; if ((ctx->state & TLS_HANDSHAKE_COMPLETE) == 0) { if ((rv = tls_handshake(ctx)) != 0) goto out; } if (buflen > INT_MAX) { tls_set_errorx(ctx, "buflen too long"); goto out; } ERR_clear_error(); if ((ssl_ret = SSL_write(ctx->ssl_conn, buf, buflen)) > 0) { rv = (ssize_t)ssl_ret; goto out; } rv = (ssize_t)tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "write"); out: /* Prevent callers from performing incorrect error handling */ errno = 0; return (rv); } int tls_close(struct tls *ctx) { int ssl_ret; int rv = 0; if ((ctx->flags & (TLS_CLIENT | TLS_SERVER_CONN)) == 0) { tls_set_errorx(ctx, "invalid operation for context"); rv = -1; goto out; } if (ctx->ssl_conn != NULL) { ERR_clear_error(); ssl_ret = SSL_shutdown(ctx->ssl_conn); if (ssl_ret < 0) { rv = tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "shutdown"); if (rv == TLS_WANT_POLLIN || rv == TLS_WANT_POLLOUT) goto out; } } if (ctx->socket != -1) { if (shutdown(ctx->socket, SHUT_RDWR) != 0) { if (rv == 0 && errno != ENOTCONN && errno != ECONNRESET) { tls_set_error(ctx, "shutdown"); rv = -1; } } if (close(ctx->socket) != 0) { if (rv == 0) { tls_set_error(ctx, "close"); rv = -1; } } ctx->socket = -1; } if ((ctx->state & TLS_EOF_NO_CLOSE_NOTIFY) != 0) { tls_set_errorx(ctx, "EOF without close notify"); rv = -1; } out: /* Prevent callers from performing incorrect error handling */ errno = 0; return (rv); } |
Changes to jni/libressl/tls/tls_client.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: tls_client.c,v 1.32 2015/10/09 04:13:34 deraadt Exp $ */ /* * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> * * 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. * |
︙ | ︙ | |||
17 18 19 20 21 22 23 | #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> | < > | | > > > | > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > > | | > > > > > > | | | | > > > > > < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < > > | < < | < | < < < | | > > | > > > > > | > > | | | < < < < | | | < < | < | | < < < < < < < < < | < | | | > | > > > | > > > > | > | | > | | > > > > < | > | | | | < > | | | | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 | #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <netdb.h> #include <stdlib.h> #include <unistd.h> #include <openssl/err.h> #include <openssl/x509.h> #include <tls.h> #include "tls_internal.h" struct tls * tls_client(void) { struct tls *ctx; if ((ctx = tls_new()) == NULL) return (NULL); ctx->flags |= TLS_CLIENT; return (ctx); } int tls_connect(struct tls *ctx, const char *host, const char *port) { return tls_connect_servername(ctx, host, port, NULL); } int tls_connect_servername(struct tls *ctx, const char *host, const char *port, const char *servername) { struct addrinfo hints, *res, *res0; const char *h = NULL, *p = NULL; char *hs = NULL, *ps = NULL; int rv = -1, s = -1, ret; if ((ctx->flags & TLS_CLIENT) == 0) { tls_set_errorx(ctx, "not a client context"); goto err; } if (host == NULL) { tls_set_errorx(ctx, "host not specified"); goto err; } /* * If port is NULL try to extract a port from the specified host, * otherwise use the default. */ if ((p = (char *)port) == NULL) { ret = tls_host_port(host, &hs, &ps); if (ret == -1) { tls_set_errorx(ctx, "memory allocation failure"); goto err; } if (ret != 0) { tls_set_errorx(ctx, "no port provided"); goto err; } } h = (hs != NULL) ? hs : host; p = (ps != NULL) ? ps : port; /* * First check if the host is specified as a numeric IP address, * either IPv4 or IPv6, before trying to resolve the host. * The AI_ADDRCONFIG resolver option will not return IPv4 or IPv6 * records if it is not configured on an interface; not considering * loopback addresses. Checking the numeric addresses first makes * sure that connection attempts to numeric addresses and especially * 127.0.0.1 or ::1 loopback addresses are always possible. */ memset(&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_STREAM; /* try as an IPv4 literal */ hints.ai_family = AF_INET; hints.ai_flags = AI_NUMERICHOST; if (getaddrinfo(h, p, &hints, &res0) != 0) { /* try again as an IPv6 literal */ hints.ai_family = AF_INET6; if (getaddrinfo(h, p, &hints, &res0) != 0) { /* last try, with name resolution and save the error */ hints.ai_family = AF_UNSPEC; hints.ai_flags = AI_ADDRCONFIG; if ((s = getaddrinfo(h, p, &hints, &res0)) != 0) { tls_set_error(ctx, "%s", gai_strerror(s)); goto err; } } } /* It was resolved somehow; now try connecting to what we got */ s = -1; for (res = res0; res; res = res->ai_next) { s = socket(res->ai_family, res->ai_socktype, res->ai_protocol); if (s == -1) { tls_set_error(ctx, "socket"); continue; } if (connect(s, res->ai_addr, res->ai_addrlen) == -1) { tls_set_error(ctx, "connect"); close(s); s = -1; continue; } break; /* Connected. */ } freeaddrinfo(res0); if (s == -1) goto err; if (servername == NULL) servername = h; if (tls_connect_socket(ctx, s, servername) != 0) { close(s); goto err; } ctx->socket = s; rv = 0; err: free(hs); free(ps); return (rv); } int tls_connect_socket(struct tls *ctx, int s, const char *servername) { return tls_connect_fds(ctx, s, s, servername); } int tls_connect_fds(struct tls *ctx, int fd_read, int fd_write, const char *servername) { union tls_addr addrbuf; int rv = -1; if ((ctx->flags & TLS_CLIENT) == 0) { tls_set_errorx(ctx, "not a client context"); goto err; } if (fd_read < 0 || fd_write < 0) { tls_set_errorx(ctx, "invalid file descriptors"); goto err; } if (servername != NULL) { if ((ctx->servername = strdup(servername)) == NULL) { tls_set_errorx(ctx, "out of memory"); goto err; } } if ((ctx->ssl_ctx = SSL_CTX_new(SSLv23_client_method())) == NULL) { tls_set_errorx(ctx, "ssl context failure"); goto err; } if (tls_configure_ssl(ctx) != 0) goto err; if (tls_configure_keypair(ctx, ctx->ssl_ctx, ctx->config->keypair, 0) != 0) goto err; if (ctx->config->verify_name) { if (servername == NULL) { tls_set_errorx(ctx, "server name not specified"); goto err; } } if (ctx->config->verify_cert && (tls_configure_ssl_verify(ctx, SSL_VERIFY_PEER) == -1)) goto err; if ((ctx->ssl_conn = SSL_new(ctx->ssl_ctx)) == NULL) { tls_set_errorx(ctx, "ssl connection failure"); goto err; } if (SSL_set_app_data(ctx->ssl_conn, ctx) != 1) { tls_set_errorx(ctx, "ssl application data failure"); goto err; } if (SSL_set_rfd(ctx->ssl_conn, fd_read) != 1 || SSL_set_wfd(ctx->ssl_conn, fd_write) != 1) { tls_set_errorx(ctx, "ssl file descriptor failure"); goto err; } /* * RFC4366 (SNI): Literal IPv4 and IPv6 addresses are not * permitted in "HostName". */ if (servername != NULL && inet_pton(AF_INET, servername, &addrbuf) != 1 && inet_pton(AF_INET6, servername, &addrbuf) != 1) { if (SSL_set_tlsext_host_name(ctx->ssl_conn, servername) == 0) { tls_set_errorx(ctx, "server name indication failure"); goto err; } } rv = 0; err: return (rv); } int tls_handshake_client(struct tls *ctx) { X509 *cert = NULL; int ssl_ret; int rv = -1; if ((ctx->flags & TLS_CLIENT) == 0) { tls_set_errorx(ctx, "not a client context"); goto err; } ERR_clear_error(); if ((ssl_ret = SSL_connect(ctx->ssl_conn)) != 1) { rv = tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "handshake"); goto err; } if (ctx->config->verify_name) { cert = SSL_get_peer_certificate(ctx->ssl_conn); if (cert == NULL) { tls_set_errorx(ctx, "no server certificate"); goto err; } if ((rv = tls_check_name(ctx, cert, ctx->servername)) != 0) { if (rv != -2) tls_set_errorx(ctx, "name `%s' not present in" " server certificate", ctx->servername); goto err; } } ctx->state |= TLS_HANDSHAKE_COMPLETE; rv = 0; err: X509_free(cert); return (rv); } |
Changes to jni/libressl/tls/tls_config.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: tls_config.c,v 1.21 2016/07/07 14:09:03 jsing Exp $ */ /* * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> * * 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. * |
︙ | ︙ | |||
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | *destlen = 0; if (src != NULL) if ((*dest = memdup(src, srclen)) == NULL) return -1; *destlen = srclen; return 0; } struct tls_config * tls_config_new(void) { struct tls_config *config; if ((config = calloc(1, sizeof(*config))) == NULL) return (NULL); /* * Default configuration. */ if (tls_config_set_ca_file(config, _PATH_SSL_CA_FILE) != 0) goto err; if (tls_config_set_dheparams(config, "none") != 0) goto err; if (tls_config_set_ecdhecurve(config, "auto") != 0) goto err; if (tls_config_set_ciphers(config, "secure") != 0) goto err; tls_config_set_protocols(config, TLS_PROTOCOLS_DEFAULT); tls_config_set_verify_depth(config, 6); | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | > > > > > > | > | | < < < > > > > > > > | > > | | | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | *destlen = 0; if (src != NULL) if ((*dest = memdup(src, srclen)) == NULL) return -1; *destlen = srclen; return 0; } static struct tls_keypair * tls_keypair_new() { return calloc(1, sizeof(struct tls_keypair)); } static int tls_keypair_set_cert_file(struct tls_keypair *keypair, const char *cert_file) { return set_string(&keypair->cert_file, cert_file); } static int tls_keypair_set_cert_mem(struct tls_keypair *keypair, const uint8_t *cert, size_t len) { return set_mem(&keypair->cert_mem, &keypair->cert_len, cert, len); } static int tls_keypair_set_key_file(struct tls_keypair *keypair, const char *key_file) { return set_string(&keypair->key_file, key_file); } static int tls_keypair_set_key_mem(struct tls_keypair *keypair, const uint8_t *key, size_t len) { if (keypair->key_mem != NULL) explicit_bzero(keypair->key_mem, keypair->key_len); return set_mem(&keypair->key_mem, &keypair->key_len, key, len); } static void tls_keypair_clear(struct tls_keypair *keypair) { tls_keypair_set_cert_mem(keypair, NULL, 0); tls_keypair_set_key_mem(keypair, NULL, 0); } static void tls_keypair_free(struct tls_keypair *keypair) { if (keypair == NULL) return; tls_keypair_clear(keypair); free((char *)keypair->cert_file); free(keypair->cert_mem); free((char *)keypair->key_file); free(keypair->key_mem); free(keypair); } struct tls_config * tls_config_new(void) { struct tls_config *config; if ((config = calloc(1, sizeof(*config))) == NULL) return (NULL); if ((config->keypair = tls_keypair_new()) == NULL) goto err; /* * Default configuration. */ if (tls_config_set_ca_file(config, _PATH_SSL_CA_FILE) != 0) goto err; if (tls_config_set_dheparams(config, "none") != 0) goto err; if (tls_config_set_ecdhecurve(config, "auto") != 0) goto err; if (tls_config_set_ciphers(config, "secure") != 0) goto err; tls_config_set_protocols(config, TLS_PROTOCOLS_DEFAULT); tls_config_set_verify_depth(config, 6); tls_config_prefer_ciphers_server(config); tls_config_verify(config); return (config); err: tls_config_free(config); return (NULL); } void tls_config_free(struct tls_config *config) { struct tls_keypair *kp, *nkp; if (config == NULL) return; for (kp = config->keypair; kp != NULL; kp = nkp) { nkp = kp->next; tls_keypair_free(kp); } free(config->error.msg); free((char *)config->ca_file); free((char *)config->ca_mem); free((char *)config->ca_path); free((char *)config->ciphers); free(config); } const char * tls_config_error(struct tls_config *config) { return config->error.msg; } void tls_config_clear_keys(struct tls_config *config) { struct tls_keypair *kp; for (kp = config->keypair; kp != NULL; kp = kp->next) tls_keypair_clear(kp); tls_config_set_ca_mem(config, NULL, 0); } int tls_config_parse_protocols(uint32_t *protocols, const char *protostr) { uint32_t proto, protos = 0; char *s, *p, *q; |
︙ | ︙ | |||
191 192 193 194 195 196 197 | { return set_mem(&config->ca_mem, &config->ca_len, ca, len); } int tls_config_set_cert_file(struct tls_config *config, const char *cert_file) { | | | > > | > | | > > > > > > > > > > > > > > > > > | > > | > > | > > | > > > > > > > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 | { return set_mem(&config->ca_mem, &config->ca_len, ca, len); } int tls_config_set_cert_file(struct tls_config *config, const char *cert_file) { return tls_keypair_set_cert_file(config->keypair, cert_file); } int tls_config_set_cert_mem(struct tls_config *config, const uint8_t *cert, size_t len) { return tls_keypair_set_cert_mem(config->keypair, cert, len); } int tls_config_set_ciphers(struct tls_config *config, const char *ciphers) { SSL_CTX *ssl_ctx = NULL; if (ciphers == NULL || strcasecmp(ciphers, "default") == 0 || strcasecmp(ciphers, "secure") == 0) ciphers = TLS_CIPHERS_DEFAULT; else if (strcasecmp(ciphers, "compat") == 0) ciphers = TLS_CIPHERS_COMPAT; else if (strcasecmp(ciphers, "legacy") == 0) ciphers = TLS_CIPHERS_LEGACY; else if (strcasecmp(ciphers, "all") == 0 || strcasecmp(ciphers, "insecure") == 0) ciphers = TLS_CIPHERS_ALL; if ((ssl_ctx = SSL_CTX_new(SSLv23_method())) == NULL) { tls_config_set_errorx(config, "out of memory"); goto fail; } if (SSL_CTX_set_cipher_list(ssl_ctx, ciphers) != 1) { tls_config_set_errorx(config, "no ciphers for '%s'", ciphers); goto fail; } SSL_CTX_free(ssl_ctx); return set_string(&config->ciphers, ciphers); fail: SSL_CTX_free(ssl_ctx); return -1; } int tls_config_set_dheparams(struct tls_config *config, const char *params) { int keylen; if (params == NULL || strcasecmp(params, "none") == 0) keylen = 0; else if (strcasecmp(params, "auto") == 0) keylen = -1; else if (strcasecmp(params, "legacy") == 0) keylen = 1024; else { tls_config_set_errorx(config, "invalid dhe param '%s'", params); return (-1); } config->dheparams = keylen; return (0); } int tls_config_set_ecdhecurve(struct tls_config *config, const char *name) { int nid; if (name == NULL || strcasecmp(name, "none") == 0) nid = NID_undef; else if (strcasecmp(name, "auto") == 0) nid = -1; else if ((nid = OBJ_txt2nid(name)) == NID_undef) { tls_config_set_errorx(config, "invalid ecdhe curve '%s'", name); return (-1); } config->ecdhecurve = nid; return (0); } int tls_config_set_key_file(struct tls_config *config, const char *key_file) { return tls_keypair_set_key_file(config->keypair, key_file); } int tls_config_set_key_mem(struct tls_config *config, const uint8_t *key, size_t len) { return tls_keypair_set_key_mem(config->keypair, key, len); } int tls_config_set_keypair_file(struct tls_config *config, const char *cert_file, const char *key_file) { if (tls_config_set_cert_file(config, cert_file) != 0) return (-1); if (tls_config_set_key_file(config, key_file) != 0) return (-1); return (0); } int tls_config_set_keypair_mem(struct tls_config *config, const uint8_t *cert, size_t cert_len, const uint8_t *key, size_t key_len) { if (tls_config_set_cert_mem(config, cert, cert_len) != 0) return (-1); if (tls_config_set_key_mem(config, key, key_len) != 0) return (-1); return (0); } void tls_config_set_protocols(struct tls_config *config, uint32_t protocols) { config->protocols = protocols; } void tls_config_set_verify_depth(struct tls_config *config, int verify_depth) { config->verify_depth = verify_depth; } void tls_config_prefer_ciphers_client(struct tls_config *config) { config->ciphers_server = 0; } void tls_config_prefer_ciphers_server(struct tls_config *config) { config->ciphers_server = 1; } void tls_config_insecure_noverifycert(struct tls_config *config) { config->verify_cert = 0; } void tls_config_insecure_noverifyname(struct tls_config *config) { config->verify_name = 0; } void tls_config_insecure_noverifytime(struct tls_config *config) { config->verify_time = 0; } void tls_config_verify(struct tls_config *config) { config->verify_cert = 1; config->verify_name = 1; config->verify_time = 1; } void tls_config_verify_client(struct tls_config *config) { config->verify_client = 1; } void tls_config_verify_client_optional(struct tls_config *config) { config->verify_client = 2; } |
Added jni/libressl/tls/tls_conninfo.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | /* $OpenBSD: tls_conninfo.c,v 1.4 2015/10/07 23:25:45 beck Exp $ */ /* * Copyright (c) 2015 Joel Sing <jsing@openbsd.org> * Copyright (c) 2015 Bob Beck <beck@openbsd.org> * * 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. */ #include <stdio.h> #include <openssl/x509.h> #include <tls.h> #include "tls_internal.h" static int tls_hex_string(const unsigned char *in, size_t inlen, char **out, size_t *outlen) { static const char hex[] = "0123456789abcdef"; size_t i, len; char *p; if (outlen != NULL) *outlen = 0; if (inlen >= SIZE_MAX) return (-1); if ((*out = reallocarray(NULL, inlen + 1, 2)) == NULL) return (-1); p = *out; len = 0; for (i = 0; i < inlen; i++) { p[len++] = hex[(in[i] >> 4) & 0x0f]; p[len++] = hex[in[i] & 0x0f]; } p[len++] = 0; if (outlen != NULL) *outlen = len; return (0); } static int tls_get_peer_cert_hash(struct tls *ctx, char **hash) { char d[EVP_MAX_MD_SIZE], *dhex = NULL; int dlen, rv = -1; *hash = NULL; if (ctx->ssl_peer_cert == NULL) return (0); if (X509_digest(ctx->ssl_peer_cert, EVP_sha256(), d, &dlen) != 1) { tls_set_errorx(ctx, "digest failed"); goto err; } if (tls_hex_string(d, dlen, &dhex, NULL) != 0) { tls_set_errorx(ctx, "digest hex string failed"); goto err; } if (asprintf(hash, "SHA256:%s", dhex) == -1) { tls_set_errorx(ctx, "out of memory"); *hash = NULL; goto err; } rv = 0; err: free(dhex); return (rv); } static int tls_get_peer_cert_issuer(struct tls *ctx, char **issuer) { X509_NAME *name = NULL; *issuer = NULL; if (ctx->ssl_peer_cert == NULL) return (-1); if ((name = X509_get_issuer_name(ctx->ssl_peer_cert)) == NULL) return (-1); *issuer = X509_NAME_oneline(name, 0, 0); if (*issuer == NULL) return (-1); return (0); } static int tls_get_peer_cert_subject(struct tls *ctx, char **subject) { X509_NAME *name = NULL; *subject = NULL; if (ctx->ssl_peer_cert == NULL) return (-1); if ((name = X509_get_subject_name(ctx->ssl_peer_cert)) == NULL) return (-1); *subject = X509_NAME_oneline(name, 0, 0); if (*subject == NULL) return (-1); return (0); } static int tls_get_peer_cert_times(struct tls *ctx, time_t *notbefore, time_t *notafter) { struct tm before_tm, after_tm; ASN1_TIME *before, *after; int rv = -1; memset(&before_tm, 0, sizeof(before_tm)); memset(&after_tm, 0, sizeof(after_tm)); if (ctx->ssl_peer_cert != NULL) { if ((before = X509_get_notBefore(ctx->ssl_peer_cert)) == NULL) goto err; if ((after = X509_get_notAfter(ctx->ssl_peer_cert)) == NULL) goto err; if (asn1_time_parse(before->data, before->length, &before_tm, 0) == -1) goto err; if (asn1_time_parse(after->data, after->length, &after_tm, 0) == -1) goto err; if ((*notbefore = timegm(&before_tm)) == -1) goto err; if ((*notafter = timegm(&after_tm)) == -1) goto err; } rv = 0; err: return (rv); } int tls_get_conninfo(struct tls *ctx) { const char * tmp; if (ctx->ssl_peer_cert != NULL) { if (tls_get_peer_cert_hash(ctx, &ctx->conninfo->hash) == -1) goto err; if (tls_get_peer_cert_subject(ctx, &ctx->conninfo->subject) == -1) goto err; if (tls_get_peer_cert_issuer(ctx, &ctx->conninfo->issuer) == -1) goto err; if (tls_get_peer_cert_times(ctx, &ctx->conninfo->notbefore, &ctx->conninfo->notafter) == -1) goto err; } if ((tmp = SSL_get_version(ctx->ssl_conn)) == NULL) goto err; ctx->conninfo->version = strdup(tmp); if (ctx->conninfo->version == NULL) goto err; if ((tmp = SSL_get_cipher(ctx->ssl_conn)) == NULL) goto err; ctx->conninfo->cipher = strdup(tmp); if (ctx->conninfo->cipher == NULL) goto err; return (0); err: tls_free_conninfo(ctx->conninfo); return (-1); } void tls_free_conninfo(struct tls_conninfo *conninfo) { if (conninfo != NULL) { free(conninfo->hash); conninfo->hash = NULL; free(conninfo->subject); conninfo->subject = NULL; free(conninfo->issuer); conninfo->issuer = NULL; free(conninfo->version); conninfo->version = NULL; free(conninfo->cipher); conninfo->cipher = NULL; } } const char * tls_conn_cipher(struct tls *ctx) { if (ctx->conninfo == NULL) return (NULL); return (ctx->conninfo->cipher); } const char * tls_conn_version(struct tls *ctx) { if (ctx->conninfo == NULL) return (NULL); return (ctx->conninfo->version); } |
Changes to jni/libressl/tls/tls_internal.h.
|
| | | > < > > > > | > | > > > > > > > > > > > > > > > > > > > > > > > | < < | < | < > > > > > > > > > > > > > > > > | | | | > > > | | > > > > > > > > > > > > > > > > > | > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | /* $OpenBSD: tls_internal.h,v 1.31 2016/07/07 14:09:03 jsing Exp $ */ /* * Copyright (c) 2014 Jeremie Courreges-Anglas <jca@openbsd.org> * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> * * 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. */ #ifndef HEADER_TLS_INTERNAL_H #define HEADER_TLS_INTERNAL_H #include <arpa/inet.h> #include <netinet/in.h> #include <openssl/ssl.h> #ifndef _PATH_SSL_CA_FILE #define _PATH_SSL_CA_FILE "/etc/ssl/cert.pem" #endif #define TLS_CIPHERS_DEFAULT "TLSv1.2+AEAD+ECDHE:TLSv1.2+AEAD+DHE" #define TLS_CIPHERS_COMPAT "HIGH:!aNULL" #define TLS_CIPHERS_LEGACY "HIGH:MEDIUM:!aNULL" #define TLS_CIPHERS_ALL "ALL:!aNULL:!eNULL" union tls_addr { struct in_addr ip4; struct in6_addr ip6; }; struct tls_error { char *msg; int num; }; struct tls_keypair { struct tls_keypair *next; const char *cert_file; char *cert_mem; size_t cert_len; const char *key_file; char *key_mem; size_t key_len; }; struct tls_config { struct tls_error error; const char *ca_file; const char *ca_path; char *ca_mem; size_t ca_len; const char *ciphers; int ciphers_server; int dheparams; int ecdhecurve; struct tls_keypair *keypair; uint32_t protocols; int verify_cert; int verify_client; int verify_depth; int verify_name; int verify_time; }; struct tls_conninfo { char *issuer; char *subject; char *hash; char *serial; char *fingerprint; char *version; char *cipher; time_t notbefore; time_t notafter; }; #define TLS_CLIENT (1 << 0) #define TLS_SERVER (1 << 1) #define TLS_SERVER_CONN (1 << 2) #define TLS_EOF_NO_CLOSE_NOTIFY (1 << 0) #define TLS_HANDSHAKE_COMPLETE (1 << 1) struct tls { struct tls_config *config; struct tls_error error; uint32_t flags; uint32_t state; char *servername; int socket; SSL *ssl_conn; SSL_CTX *ssl_ctx; X509 *ssl_peer_cert; struct tls_conninfo *conninfo; }; struct tls *tls_new(void); struct tls *tls_server_conn(struct tls *ctx); int tls_check_name(struct tls *ctx, X509 *cert, const char *servername); int tls_configure_keypair(struct tls *ctx, SSL_CTX *ssl_ctx, struct tls_keypair *keypair, int required); int tls_configure_server(struct tls *ctx); int tls_configure_ssl(struct tls *ctx); int tls_configure_ssl_verify(struct tls *ctx, int verify); int tls_handshake_client(struct tls *ctx); int tls_handshake_server(struct tls *ctx); int tls_host_port(const char *hostport, char **host, char **port); int tls_error_set(struct tls_error *error, const char *fmt, ...) __attribute__((__format__ (printf, 2, 3))) __attribute__((__nonnull__ (2))); int tls_error_setx(struct tls_error *error, const char *fmt, ...) __attribute__((__format__ (printf, 2, 3))) __attribute__((__nonnull__ (2))); int tls_config_set_error(struct tls_config *cfg, const char *fmt, ...) __attribute__((__format__ (printf, 2, 3))) __attribute__((__nonnull__ (2))); int tls_config_set_errorx(struct tls_config *cfg, const char *fmt, ...) __attribute__((__format__ (printf, 2, 3))) __attribute__((__nonnull__ (2))); int tls_set_error(struct tls *ctx, const char *fmt, ...) __attribute__((__format__ (printf, 2, 3))) __attribute__((__nonnull__ (2))); int tls_set_errorx(struct tls *ctx, const char *fmt, ...) __attribute__((__format__ (printf, 2, 3))) __attribute__((__nonnull__ (2))); int tls_ssl_error(struct tls *ctx, SSL *ssl_conn, int ssl_ret, const char *prefix); int tls_get_conninfo(struct tls *ctx); void tls_free_conninfo(struct tls_conninfo *conninfo); int asn1_time_parse(const char *, size_t, struct tm *, int); #endif /* HEADER_TLS_INTERNAL_H */ |
Added jni/libressl/tls/tls_peer.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | /* $OpenBSD: tls_peer.c,v 1.4 2015/09/12 21:00:38 beck Exp $ */ /* * Copyright (c) 2015 Joel Sing <jsing@openbsd.org> * Copyright (c) 2015 Bob Beck <beck@openbsd.org> * * 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. */ #include <stdio.h> #include <openssl/x509.h> #include <tls.h> #include "tls_internal.h" const char * tls_peer_cert_hash(struct tls *ctx) { if (ctx->conninfo) return (ctx->conninfo->hash); return NULL; } const char * tls_peer_cert_issuer(struct tls *ctx) { if (ctx->conninfo) return (ctx->conninfo->issuer); return NULL; } const char * tls_peer_cert_subject(struct tls *ctx) { if (ctx->conninfo) return (ctx->conninfo->subject); return NULL; } int tls_peer_cert_provided(struct tls *ctx) { return (ctx->ssl_peer_cert != NULL); } int tls_peer_cert_contains_name(struct tls *ctx, const char *name) { if (ctx->ssl_peer_cert == NULL) return (0); return (tls_check_name(ctx, ctx->ssl_peer_cert, name) == 0); } time_t tls_peer_cert_notbefore(struct tls *ctx) { if (ctx->ssl_peer_cert == NULL) return (-1); if (ctx->conninfo == NULL) return (-1); return (ctx->conninfo->notbefore); } time_t tls_peer_cert_notafter(struct tls *ctx) { if (ctx->ssl_peer_cert == NULL) return (-1); if (ctx->conninfo == NULL) return (-1); return (ctx->conninfo->notafter); } |
Changes to jni/libressl/tls/tls_server.c.
|
| | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /* $OpenBSD: tls_server.c,v 1.18 2015/09/29 10:17:04 deraadt Exp $ */ /* * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> * * 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. */ #include <openssl/ec.h> #include <openssl/err.h> #include <openssl/ssl.h> #include <tls.h> #include "tls_internal.h" struct tls * tls_server(void) |
︙ | ︙ | |||
50 51 52 53 54 55 56 | int tls_configure_server(struct tls *ctx) { EC_KEY *ecdh_key; unsigned char sid[SSL_MAX_SSL_SESSION_ID_LENGTH]; if ((ctx->ssl_ctx = SSL_CTX_new(SSLv23_server_method())) == NULL) { | | | > > > > > > > | > > > > | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < > > > | > | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > | > > > > > > > > > > > > > > > > > > > > > > | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | int tls_configure_server(struct tls *ctx) { EC_KEY *ecdh_key; unsigned char sid[SSL_MAX_SSL_SESSION_ID_LENGTH]; if ((ctx->ssl_ctx = SSL_CTX_new(SSLv23_server_method())) == NULL) { tls_set_errorx(ctx, "ssl context failure"); goto err; } if (tls_configure_ssl(ctx) != 0) goto err; if (tls_configure_keypair(ctx, ctx->ssl_ctx, ctx->config->keypair, 1) != 0) goto err; if (ctx->config->verify_client != 0) { int verify = SSL_VERIFY_PEER; if (ctx->config->verify_client == 1) verify |= SSL_VERIFY_FAIL_IF_NO_PEER_CERT; if (tls_configure_ssl_verify(ctx, verify) == -1) goto err; } if (ctx->config->dheparams == -1) SSL_CTX_set_dh_auto(ctx->ssl_ctx, 1); else if (ctx->config->dheparams == 1024) SSL_CTX_set_dh_auto(ctx->ssl_ctx, 2); if (ctx->config->ecdhecurve == -1) { SSL_CTX_set_ecdh_auto(ctx->ssl_ctx, 1); } else if (ctx->config->ecdhecurve != NID_undef) { if ((ecdh_key = EC_KEY_new_by_curve_name( ctx->config->ecdhecurve)) == NULL) { tls_set_errorx(ctx, "failed to set ECDHE curve"); goto err; } SSL_CTX_set_options(ctx->ssl_ctx, SSL_OP_SINGLE_ECDH_USE); SSL_CTX_set_tmp_ecdh(ctx->ssl_ctx, ecdh_key); EC_KEY_free(ecdh_key); } if (ctx->config->ciphers_server == 1) SSL_CTX_set_options(ctx->ssl_ctx, SSL_OP_CIPHER_SERVER_PREFERENCE); /* * Set session ID context to a random value. We don't support * persistent caching of sessions so it is OK to set a temporary * session ID context that is valid during run time. */ arc4random_buf(sid, sizeof(sid)); if (!SSL_CTX_set_session_id_context(ctx->ssl_ctx, sid, sizeof(sid))) { tls_set_errorx(ctx, "failed to set session id context"); goto err; } return (0); err: return (-1); } int tls_accept_socket(struct tls *ctx, struct tls **cctx, int socket) { return (tls_accept_fds(ctx, cctx, socket, socket)); } int tls_accept_fds(struct tls *ctx, struct tls **cctx, int fd_read, int fd_write) { struct tls *conn_ctx = NULL; if ((ctx->flags & TLS_SERVER) == 0) { tls_set_errorx(ctx, "not a server context"); goto err; } if ((conn_ctx = tls_server_conn(ctx)) == NULL) { tls_set_errorx(ctx, "connection context failure"); goto err; } if ((conn_ctx->ssl_conn = SSL_new(ctx->ssl_ctx)) == NULL) { tls_set_errorx(ctx, "ssl failure"); goto err; } if (SSL_set_app_data(conn_ctx->ssl_conn, conn_ctx) != 1) { tls_set_errorx(ctx, "ssl application data failure"); goto err; } if (SSL_set_rfd(conn_ctx->ssl_conn, fd_read) != 1 || SSL_set_wfd(conn_ctx->ssl_conn, fd_write) != 1) { tls_set_errorx(ctx, "ssl file descriptor failure"); goto err; } *cctx = conn_ctx; return (0); err: tls_free(conn_ctx); *cctx = NULL; return (-1); } int tls_handshake_server(struct tls *ctx) { int ssl_ret; int rv = -1; if ((ctx->flags & TLS_SERVER_CONN) == 0) { tls_set_errorx(ctx, "not a server connection context"); goto err; } ERR_clear_error(); if ((ssl_ret = SSL_accept(ctx->ssl_conn)) != 1) { rv = tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "handshake"); goto err; } ctx->state |= TLS_HANDSHAKE_COMPLETE; rv = 0; err: return (rv); } |
Changes to jni/libressl/tls/tls_util.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: tls_util.c,v 1.2 2015/02/07 23:25:37 reyk Exp $ */ /* * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> * Copyright (c) 2015 Reyk Floeter <reyk@openbsd.org> * * 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. |
︙ | ︙ | |||
69 70 71 72 73 74 75 | goto fail; if (asprintf(port, "%s", p) == -1) goto fail; rv = 0; goto done; | | | | 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | goto fail; if (asprintf(port, "%s", p) == -1) goto fail; rv = 0; goto done; fail: free(*host); *host = NULL; free(*port); *port = NULL; rv = -1; done: free(s); return (rv); } static int tls_password_cb(char *buf, int size, int rwflag, void *u) |
︙ | ︙ |
Changes to jni/libressl/tls/tls_verify.c.
|
| | | 1 2 3 4 5 6 7 8 | /* $OpenBSD: tls_verify.c,v 1.14 2015/09/29 10:17:04 deraadt Exp $ */ /* * Copyright (c) 2014 Jeremie Courreges-Anglas <jca@openbsd.org> * * 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. * |
︙ | ︙ | |||
22 23 24 25 26 27 28 | #include <string.h> #include <openssl/x509v3.h> #include "tls_internal.h" | | | > | | | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include <string.h> #include <openssl/x509v3.h> #include "tls_internal.h" static int tls_match_name(const char *cert_name, const char *name); static int tls_check_subject_altname(struct tls *ctx, X509 *cert, const char *name); static int tls_check_common_name(struct tls *ctx, X509 *cert, const char *name); static int tls_match_name(const char *cert_name, const char *name) { const char *cert_domain, *domain, *next_dot; if (strcasecmp(cert_name, name) == 0) return 0; |
︙ | ︙ | |||
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | return -1; /* Disallow "*.bar.." */ if (next_dot[1] == '.') return -1; domain = strchr(name, '.'); /* No wildcard match against a name with no domain part. */ if (domain == NULL || strlen(domain) == 1) return -1; if (strcasecmp(cert_domain, domain) == 0) return 0; } return -1; } /* See RFC 5280 section 4.2.1.6 for SubjectAltName details. */ | > > > | | | 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | return -1; /* Disallow "*.bar.." */ if (next_dot[1] == '.') return -1; domain = strchr(name, '.'); /* No wildcard match against a name with no host part. */ if (name[0] == '.') return -1; /* No wildcard match against a name with no domain part. */ if (domain == NULL || strlen(domain) == 1) return -1; if (strcasecmp(cert_domain, domain) == 0) return 0; } return -1; } /* See RFC 5280 section 4.2.1.6 for SubjectAltName details. */ static int tls_check_subject_altname(struct tls *ctx, X509 *cert, const char *name) { STACK_OF(GENERAL_NAME) *altname_stack = NULL; union tls_addr addrbuf; int addrlen, type; int count, i; int rv = -1; altname_stack = X509_get_ext_d2i(cert, NID_subject_alt_name, NULL, NULL); if (altname_stack == NULL) |
︙ | ︙ | |||
120 121 122 123 124 125 126 | format = ASN1_STRING_type(altname->d.dNSName); if (format == V_ASN1_IA5STRING) { data = ASN1_STRING_data(altname->d.dNSName); len = ASN1_STRING_length(altname->d.dNSName); if (len < 0 || len != strlen(data)) { | | | 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | format = ASN1_STRING_type(altname->d.dNSName); if (format == V_ASN1_IA5STRING) { data = ASN1_STRING_data(altname->d.dNSName); len = ASN1_STRING_length(altname->d.dNSName); if (len < 0 || len != strlen(data)) { tls_set_errorx(ctx, "error verifying name '%s': " "NUL byte in subjectAltName, " "probably a malicious certificate", name); rv = -2; break; } |
︙ | ︙ | |||
163 164 165 166 167 168 169 | unsigned char *data; int datalen; datalen = ASN1_STRING_length(altname->d.iPAddress); data = ASN1_STRING_data(altname->d.iPAddress); if (datalen < 0) { | | | 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | unsigned char *data; int datalen; datalen = ASN1_STRING_length(altname->d.iPAddress); data = ASN1_STRING_data(altname->d.iPAddress); if (datalen < 0) { tls_set_errorx(ctx, "Unexpected negative length for an " "IP address: %d", datalen); rv = -2; break; } /* |
︙ | ︙ | |||
186 187 188 189 190 191 192 | } } sk_GENERAL_NAME_pop_free(altname_stack, GENERAL_NAME_free); return rv; } | | > < | | 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | } } sk_GENERAL_NAME_pop_free(altname_stack, GENERAL_NAME_free); return rv; } static int tls_check_common_name(struct tls *ctx, X509 *cert, const char *name) { X509_NAME *subject_name; char *common_name = NULL; union tls_addr addrbuf; int common_name_len; int rv = -1; subject_name = X509_get_subject_name(cert); if (subject_name == NULL) goto out; common_name_len = X509_NAME_get_text_by_NID(subject_name, NID_commonName, NULL, 0); if (common_name_len < 0) goto out; common_name = calloc(common_name_len + 1, 1); if (common_name == NULL) goto out; X509_NAME_get_text_by_NID(subject_name, NID_commonName, common_name, common_name_len + 1); /* NUL bytes in CN? */ if (common_name_len != strlen(common_name)) { tls_set_errorx(ctx, "error verifying name '%s': " "NUL byte in Common Name field, " "probably a malicious certificate", name); rv = -2; goto out; } if (inet_pton(AF_INET, name, &addrbuf) == 1 || |
︙ | ︙ | |||
235 236 237 238 239 240 241 | else rv = -1; goto out; } if (tls_match_name(common_name, name) == 0) rv = 0; | | | | | | 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 | else rv = -1; goto out; } if (tls_match_name(common_name, name) == 0) rv = 0; out: free(common_name); return rv; } int tls_check_name(struct tls *ctx, X509 *cert, const char *name) { int rv; rv = tls_check_subject_altname(ctx, cert, name); if (rv == 0 || rv == -2) return rv; return tls_check_common_name(ctx, cert, name); } |