From ee4384daeb0b95e0fa1fcd9baf8a9f440b10bb65 Mon Sep 17 00:00:00 2001 From: Zhi Guan Date: Sun, 29 May 2016 00:22:33 +0200 Subject: [PATCH] SKF Wrapper --- MINFO | 396 ++++++--- Makefile | 2 +- Makefile.bak | 681 -------------- Makefile.org | 2 +- apps/Makefile | 888 ++++++++++--------- crypto/asn1/Makefile | 489 +++++----- crypto/cbcmac/Makefile | 85 +- crypto/cbcmac/cbcmac.c | 13 +- crypto/cbcmac/cbcmac.h | 20 +- crypto/cbcmac/cbcmac_err.c | 96 ++ crypto/cmac/Makefile | 9 +- crypto/cms/Makefile | 222 ++--- crypto/conf/Makefile | 24 +- crypto/cpk/Makefile | 87 ++ crypto/cpk/cpk.h | 532 ++--------- crypto/cpk/cpk_asn1.c | 84 -- crypto/cpk/cpk_err.c | 158 ++-- crypto/cpk/cpk_err2.c | 126 +++ crypto/cpk/cpk_lib.c | 121 +-- crypto/dh/Makefile | 38 +- crypto/dsa/Makefile | 31 +- crypto/ec/Makefile | 27 +- crypto/ec/ec.h | 43 +- crypto/ec/ec_curve.c | 38 +- crypto/ec/ec_err.c | 26 +- crypto/ec/ec_pmeth.c | 24 +- crypto/ecdh/Makefile | 17 +- crypto/ecdsa/Makefile | 26 +- crypto/ecies/Makefile | 117 ++- crypto/ecies/ecies.h | 41 +- crypto/ecies/ecies_err.c | 86 +- crypto/ecies/ecies_lib.c | 13 +- crypto/engine/Makefile | 285 +++--- crypto/err/Makefile | 29 +- crypto/err/err.c | 4 + crypto/err/err.h | 23 +- crypto/err/err_all.c | 12 + crypto/err/openssl.ec | 6 +- crypto/evp/Makefile | 514 ++++++----- crypto/evp/e_sms4.c | 2 +- crypto/evp/p_dec.c | 1 - crypto/hmac/Makefile | 9 +- crypto/kdf/Makefile | 86 ++ crypto/{ecies => kdf}/kdf.h | 0 crypto/{ecies => kdf}/kdf_x9_63.c | 38 +- crypto/{ecies => kdf}/kdftest.c | 0 crypto/objects/obj_dat.h | 15 +- crypto/objects/obj_mac.h | 4 + crypto/objects/obj_mac.num | 1 + crypto/objects/objects.txt | 2 + crypto/ocsp/Makefile | 97 +- crypto/otp/Makefile | 21 +- crypto/otp/a.out | Bin 1623516 -> 0 bytes crypto/otp/otp.c | 14 +- crypto/otp/otp.h | 20 +- crypto/otp/otp_err.c | 94 ++ engines/e_skf.h => crypto/paillier/pai_lib.c | 0 crypto/paillier/paillier.h | 3 +- crypto/pem/Makefile | 175 ++-- crypto/pem/pem_sm2.c | 270 ------ crypto/pkcs12/Makefile | 190 ++-- crypto/pkcs7/Makefile | 55 +- crypto/rand/Makefile | 6 +- crypto/rsa/Makefile | 58 +- crypto/skf/Makefile | 244 +++++ crypto/skf/skf.h | 88 +- crypto/skf/skf_dev.c | 135 +++ crypto/skf/skf_dgst.c | 235 +++++ crypto/skf/skf_ec.c | 690 ++++++++++++++ crypto/skf/skf_enc.c | 310 +++++++ crypto/skf/skf_err.c | 238 +++++ crypto/skf/skf_err2.c | 133 --- crypto/skf/skf_errstr.c | 123 +++ crypto/skf/skf_ex.h | 237 +++++ crypto/skf/skf_gmssl.c | 722 --------------- crypto/skf/skf_handle.c | 206 +++++ crypto/skf/skf_lcl.h | 109 +-- crypto/skf/skf_mac.c | 179 ++++ crypto/skf/skf_rand.c | 83 ++ crypto/skf/skf_rsa.c | 377 ++++++++ crypto/skf/skf_sesskey.c | 98 ++ crypto/skf/skf_token.c | 394 ++++++++ crypto/skf/skf_types.c | 285 ------ crypto/sm1/Makefile | 81 ++ crypto/sm1/sm1.h | 1 + crypto/sm1/sm1test.c | 54 -- crypto/sm2/Makefile | 87 ++ crypto/sm2/sm2.h | 106 ++- crypto/sm2/sm2_enc.c | 7 +- crypto/sm2/sm2_err.c | 137 +-- crypto/sm2/sm2_err2.c | 119 +++ crypto/sm2/sm2_kap.c | 8 - crypto/sm2/sm2_lib.c | 2 - crypto/sm2/sm2_sign.c | 88 +- crypto/sm2/sm2test.c | 71 +- crypto/sm3/Makefile | 3 +- crypto/sm3/hmac_sm3.c | 2 - crypto/sm3/sm3test.c | 23 + crypto/sm9/Makefile | 90 ++ crypto/sm9/sm9.h | 34 +- crypto/sm9/sm9_err.c | 101 +++ crypto/sm9/sm9_lcl.h | 12 +- crypto/sm9/sm9_lib.c | 118 +++ crypto/sm9/sm9test.c | 57 ++ crypto/sms4/Makefile | 27 +- crypto/sms4/sms4.h | 1 + crypto/ssf33/Makefile | 81 ++ crypto/ssf33/ssf33.h | 1 + crypto/ts/Makefile | 128 +-- crypto/x509/Makefile | 259 +++--- crypto/x509v3/Makefile | 518 ++++++----- crypto/zuc/Makefile | 14 +- crypto/zuc/zuctest.c | 3 + demos/ectool.c | 261 ++++++ doc/apps/openssl.pod | 19 +- engines/Makefile | 211 +++-- engines/ccgost/Makefile | 67 +- engines/ccgost/libgost.dylib | Bin 128312 -> 97408 bytes engines/e_skf.c | 74 +- engines/e_skf.ec | 1 + engines/e_skf_err.c | 297 ++++--- engines/e_skf_err.h | 143 +-- {crypto => engines}/skf/skf_dummy.c | 0 {crypto => engines}/skf/skftest.c | 0 include/openssl/ffx.h | 1 - include/openssl/kdf.h | 2 +- include/openssl/skf.h | 1 + include/openssl/skf_ex.h | 1 + include/openssl/sm9.h | 1 + ssl/Makefile | 397 +++++++-- test/Makefile | 288 +++--- test/asn1test.c | 22 +- test/igetest.c | 485 +--------- test/jpaketest.c | 58 +- test/kdftest.c | 1 + test/md2test.c | 58 +- test/newkey.pem | 28 - test/rc5test.c | 58 +- test/sm9test.c | 1 + test/testkey.pem | 16 - test/testreq.pem | 12 - test/zuctest.c | 1 + 142 files changed, 9469 insertions(+), 6750 deletions(-) delete mode 100644 Makefile.bak create mode 100644 crypto/cbcmac/cbcmac_err.c create mode 100644 crypto/cpk/cpk_err2.c create mode 100644 crypto/kdf/Makefile rename crypto/{ecies => kdf}/kdf.h (100%) rename crypto/{ecies => kdf}/kdf_x9_63.c (90%) rename crypto/{ecies => kdf}/kdftest.c (100%) delete mode 100755 crypto/otp/a.out create mode 100644 crypto/otp/otp_err.c rename engines/e_skf.h => crypto/paillier/pai_lib.c (100%) delete mode 100644 crypto/pem/pem_sm2.c create mode 100644 crypto/skf/Makefile create mode 100644 crypto/skf/skf_dev.c create mode 100644 crypto/skf/skf_dgst.c create mode 100644 crypto/skf/skf_ec.c create mode 100644 crypto/skf/skf_enc.c create mode 100644 crypto/skf/skf_err.c delete mode 100644 crypto/skf/skf_err2.c create mode 100644 crypto/skf/skf_errstr.c create mode 100644 crypto/skf/skf_ex.h delete mode 100644 crypto/skf/skf_gmssl.c create mode 100644 crypto/skf/skf_handle.c create mode 100644 crypto/skf/skf_mac.c create mode 100644 crypto/skf/skf_rand.c create mode 100644 crypto/skf/skf_rsa.c create mode 100644 crypto/skf/skf_sesskey.c create mode 100644 crypto/skf/skf_token.c delete mode 100644 crypto/skf/skf_types.c create mode 100644 crypto/sm1/Makefile delete mode 100644 crypto/sm1/sm1test.c create mode 100644 crypto/sm2/sm2_err2.c create mode 100644 crypto/sm9/Makefile create mode 100644 crypto/sm9/sm9_err.c create mode 100644 crypto/sm9/sm9_lib.c create mode 100644 crypto/sm9/sm9test.c create mode 100644 crypto/ssf33/Makefile create mode 100755 crypto/zuc/zuctest.c create mode 100644 demos/ectool.c rename {crypto => engines}/skf/skf_dummy.c (100%) mode change 100644 => 100755 rename {crypto => engines}/skf/skftest.c (100%) delete mode 120000 include/openssl/ffx.h create mode 120000 include/openssl/skf.h create mode 120000 include/openssl/skf_ex.h create mode 120000 include/openssl/sm9.h mode change 100755 => 120000 test/asn1test.c mode change 100644 => 120000 test/igetest.c mode change 100644 => 120000 test/jpaketest.c create mode 120000 test/kdftest.c mode change 100644 => 120000 test/md2test.c delete mode 100644 test/newkey.pem mode change 100644 => 120000 test/rc5test.c create mode 120000 test/sm9test.c delete mode 100644 test/testkey.pem delete mode 100644 test/testreq.pem create mode 120000 test/zuctest.c diff --git a/MINFO b/MINFO index c6102169..c37dac80 100644 --- a/MINFO +++ b/MINFO @@ -1,27 +1,27 @@ RELATIVE_DIRECTORY=. -AES_ENC=aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o aesni-sha256-x86_64.o aesni-mb-x86_64.o +AES_ENC=aes-586.o vpaes-x86.o aesni-x86.o AR=ar r ARFLAGS= AS=cc -c -ASFLAG=-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM +ASFLAG=-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM BASEADDR=0xFB00000 -BASENAME=openssl -BF_ENC=bf_enc.o -BN_ASM=x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o rsaz_exp.o rsaz-x86_64.o rsaz-avx2.o -BUILDENV=PLATFORM='darwin64-x86_64-cc' PROCESSOR='' CC='cc' CFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM' AS='cc' ASFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -c' AR='ar r' NM='nm' RANLIB='/opt/local/bin/ranlib' CROSS_COMPILE='' PERL='/opt/local/bin/perl5' ENGDIRS='ccgost' SDIRS='objects md4 md5 sha mdc2 hmac ripemd whrlpool sm3 des aes rc2 rc4 idea bf cast camellia seed modes sms4 zuc bn ec rsa dsa ecdsa dh ecdh ecies dso engine buffer bio stack lhash rand err evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 cms pqueue ts srp cmac' LIBRPATH='/usr/local/lib' INSTALL_PREFIX='' INSTALLTOP='/usr/local' OPENSSLDIR='/usr/local/openssl' LIBDIR='lib' MAKEDEPEND='$$$./util/domd $$$. -MD makedepend' DEPFLAG='-DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST' MAKEDEPPROG='makedepend' SHARED_LDFLAGS='-arch x86_64 -dynamiclib' KRB5_INCLUDES='' LIBKRB5='' ZLIB_INCLUDE='' LIBZLIB='' EXE_EXT='' SHARED_LIBS='' SHLIB_EXT='.1.0.0.dylib' SHLIB_TARGET='darwin-shared' PEX_LIBS='-Wl,-search_paths_first' EX_LIBS='' CPUID_OBJ='x86_64cpuid.o' BN_ASM='x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o rsaz_exp.o rsaz-x86_64.o rsaz-avx2.o' EC_ASM='ecp_nistz256.o ecp_nistz256-x86_64.o' DES_ENC='des_enc.o fcrypt_b.o' AES_ENC='aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o aesni-sha256-x86_64.o aesni-mb-x86_64.o' CMLL_ENC='cmll-x86_64.o cmll_misc.o' BF_ENC='bf_enc.o' CAST_ENC='c_enc.o' RC4_ENC='rc4_enc.o rc4_skey.o' RC5_ENC='rc5_enc.o' SHA1_ASM_OBJ='sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o sha1-mb-x86_64.o sha256-mb-x86_64.o' MD5_ASM_OBJ='md5-x86_64.o' RMD160_ASM_OBJ='' WP_ASM_OBJ='wp-x86_64.o' MODES_ASM_OBJ='ghash-x86_64.o aesni-gcm-x86_64.o' ENGINES_ASM_OBJ='' PERLASM_SCHEME='macosx' FIPSLIBDIR='' FIPSDIR='/usr/local/ssl/fips-2.0' FIPSCANLIB="$}" THIS=$ MAKEFILE=Makefile MAKEOVERRIDES= -BUILD_CMD=if [ -d "$$dir" ]; then ( cd $$dir && echo "making $$target in $$dir..." && TOP= && unset TOP $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ && -e PLATFORM='darwin64-x86_64-cc' PROCESSOR='' CC='cc' CFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM' AS='cc' ASFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -c' AR='ar r' NM='nm' RANLIB='/opt/local/bin/ranlib' CROSS_COMPILE='' PERL='/opt/local/bin/perl5' ENGDIRS='ccgost' SDIRS='objects md4 md5 sha mdc2 hmac ripemd whrlpool sm3 des aes rc2 rc4 idea bf cast camellia seed modes sms4 zuc bn ec rsa dsa ecdsa dh ecdh ecies dso engine buffer bio stack lhash rand err evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 cms pqueue ts srp cmac' LIBRPATH='/usr/local/lib' INSTALL_PREFIX='' INSTALLTOP='/usr/local' OPENSSLDIR='/usr/local/openssl' LIBDIR='lib' MAKEDEPEND='$$$./util/domd $$$. -MD makedepend' DEPFLAG='-DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST' MAKEDEPPROG='makedepend' SHARED_LDFLAGS='-arch x86_64 -dynamiclib' KRB5_INCLUDES='' LIBKRB5='' ZLIB_INCLUDE='' LIBZLIB='' EXE_EXT='' SHARED_LIBS='' SHLIB_EXT='.1.0.0.dylib' SHLIB_TARGET='darwin-shared' PEX_LIBS='-Wl,-search_paths_first' EX_LIBS='' CPUID_OBJ='x86_64cpuid.o' BN_ASM='x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o rsaz_exp.o rsaz-x86_64.o rsaz-avx2.o' EC_ASM='ecp_nistz256.o ecp_nistz256-x86_64.o' DES_ENC='des_enc.o fcrypt_b.o' AES_ENC='aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o aesni-sha256-x86_64.o aesni-mb-x86_64.o' CMLL_ENC='cmll-x86_64.o cmll_misc.o' BF_ENC='bf_enc.o' CAST_ENC='c_enc.o' RC4_ENC='rc4_enc.o rc4_skey.o' RC5_ENC='rc5_enc.o' SHA1_ASM_OBJ='sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o sha1-mb-x86_64.o sha256-mb-x86_64.o' MD5_ASM_OBJ='md5-x86_64.o' RMD160_ASM_OBJ='' WP_ASM_OBJ='wp-x86_64.o' MODES_ASM_OBJ='ghash-x86_64.o aesni-gcm-x86_64.o' ENGINES_ASM_OBJ='' PERLASM_SCHEME='macosx' FIPSLIBDIR='' FIPSDIR='/usr/local/ssl/fips-2.0' FIPSCANLIB="$}" THIS=$ MAKEFILE=Makefile MAKEOVERRIDES= TOP=.. DIR=$$dir $$target ) || exit 1; fi -BUILD_ONE_CMD=if expr " crypto ssl engines apps test tools " : ".* $$dir " >/dev/null 2>&1; then if [ -d "$$dir" ]; then ( cd $$dir && echo "making $$target in $$dir..." && TOP= && unset TOP $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ && -e PLATFORM='darwin64-x86_64-cc' PROCESSOR='' CC='cc' CFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM' AS='cc' ASFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -c' AR='ar r' NM='nm' RANLIB='/opt/local/bin/ranlib' CROSS_COMPILE='' PERL='/opt/local/bin/perl5' ENGDIRS='ccgost' SDIRS='objects md4 md5 sha mdc2 hmac ripemd whrlpool sm3 des aes rc2 rc4 idea bf cast camellia seed modes sms4 zuc bn ec rsa dsa ecdsa dh ecdh ecies dso engine buffer bio stack lhash rand err evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 cms pqueue ts srp cmac' LIBRPATH='/usr/local/lib' INSTALL_PREFIX='' INSTALLTOP='/usr/local' OPENSSLDIR='/usr/local/openssl' LIBDIR='lib' MAKEDEPEND='$$$./util/domd $$$. -MD makedepend' DEPFLAG='-DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST' MAKEDEPPROG='makedepend' SHARED_LDFLAGS='-arch x86_64 -dynamiclib' KRB5_INCLUDES='' LIBKRB5='' ZLIB_INCLUDE='' LIBZLIB='' EXE_EXT='' SHARED_LIBS='' SHLIB_EXT='.1.0.0.dylib' SHLIB_TARGET='darwin-shared' PEX_LIBS='-Wl,-search_paths_first' EX_LIBS='' CPUID_OBJ='x86_64cpuid.o' BN_ASM='x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o rsaz_exp.o rsaz-x86_64.o rsaz-avx2.o' EC_ASM='ecp_nistz256.o ecp_nistz256-x86_64.o' DES_ENC='des_enc.o fcrypt_b.o' AES_ENC='aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o aesni-sha256-x86_64.o aesni-mb-x86_64.o' CMLL_ENC='cmll-x86_64.o cmll_misc.o' BF_ENC='bf_enc.o' CAST_ENC='c_enc.o' RC4_ENC='rc4_enc.o rc4_skey.o' RC5_ENC='rc5_enc.o' SHA1_ASM_OBJ='sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o sha1-mb-x86_64.o sha256-mb-x86_64.o' MD5_ASM_OBJ='md5-x86_64.o' RMD160_ASM_OBJ='' WP_ASM_OBJ='wp-x86_64.o' MODES_ASM_OBJ='ghash-x86_64.o aesni-gcm-x86_64.o' ENGINES_ASM_OBJ='' PERLASM_SCHEME='macosx' FIPSLIBDIR='' FIPSDIR='/usr/local/ssl/fips-2.0' FIPSCANLIB="$}" THIS=$ MAKEFILE=Makefile MAKEOVERRIDES= TOP=.. DIR=$$dir $$target ) || exit 1; fi; fi +BASENAME=gmssl +BF_ENC=bf-586.o +BN_ASM=bn-586.o co-586.o x86-mont.o x86-gf2m.o +BUILDENV=PLATFORM='darwin-i386-cc' PROCESSOR='' CC='cc' CFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM' AS='cc' ASFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -c' AR='ar r' NM='nm' RANLIB='/usr/bin/ranlib' CROSS_COMPILE='' PERL='/usr/bin/perl' ENGDIRS='ccgost' SDIRS='objects md4 md5 sha mdc2 hmac ripemd whrlpool des aes rc2 rc4 idea bf cast camellia seed modes bn ec rsa dsa ecdsa dh ecdh ecies dso engine buffer bio stack lhash rand err evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 cms pqueue ts srp cmac sm2 sm3 sms4 ecies cpk zuc cbcmac otp skf kdf' LIBRPATH='/usr/local/ssl/lib' INSTALL_PREFIX='' INSTALLTOP='/usr/local/ssl' OPENSSLDIR='/usr/local/ssl' LIBDIR='lib' MAKEDEPEND='$$$./util/domd $$$. -MD makedepend' DEPFLAG='-DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST' MAKEDEPPROG='makedepend' SHARED_LDFLAGS='-arch i386 -dynamiclib' KRB5_INCLUDES='' LIBKRB5='' ZLIB_INCLUDE='' LIBZLIB='' EXE_EXT='' SHARED_LIBS='' SHLIB_EXT='.1.0.0.dylib' SHLIB_TARGET='darwin-shared' PEX_LIBS='-Wl,-search_paths_first' EX_LIBS='' CPUID_OBJ='x86cpuid.o' BN_ASM='bn-586.o co-586.o x86-mont.o x86-gf2m.o' EC_ASM='' DES_ENC='des-586.o crypt586.o' AES_ENC='aes-586.o vpaes-x86.o aesni-x86.o' CMLL_ENC='cmll-x86.o' BF_ENC='bf-586.o' CAST_ENC='c_enc.o' RC4_ENC='rc4-586.o' RC5_ENC='rc5-586.o' SHA1_ASM_OBJ='sha1-586.o sha256-586.o sha512-586.o' MD5_ASM_OBJ='md5-586.o' RMD160_ASM_OBJ='rmd-586.o' WP_ASM_OBJ='wp_block.o wp-mmx.o' MODES_ASM_OBJ='ghash-x86.o' ENGINES_ASM_OBJ='' PERLASM_SCHEME='macosx' FIPSLIBDIR='' FIPSDIR='/usr/local/ssl/fips-2.0' FIPSCANLIB="$}" THIS=$ MAKEFILE=Makefile MAKEOVERRIDES= +BUILD_CMD=if [ -d "$$dir" ]; then ( cd $$dir && echo "making $$target in $$dir..." && TOP= && unset TOP $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ && -e PLATFORM='darwin-i386-cc' PROCESSOR='' CC='cc' CFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM' AS='cc' ASFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -c' AR='ar r' NM='nm' RANLIB='/usr/bin/ranlib' CROSS_COMPILE='' PERL='/usr/bin/perl' ENGDIRS='ccgost' SDIRS='objects md4 md5 sha mdc2 hmac ripemd whrlpool des aes rc2 rc4 idea bf cast camellia seed modes bn ec rsa dsa ecdsa dh ecdh ecies dso engine buffer bio stack lhash rand err evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 cms pqueue ts srp cmac sm2 sm3 sms4 ecies cpk zuc cbcmac otp skf kdf' LIBRPATH='/usr/local/ssl/lib' INSTALL_PREFIX='' INSTALLTOP='/usr/local/ssl' OPENSSLDIR='/usr/local/ssl' LIBDIR='lib' MAKEDEPEND='$$$./util/domd $$$. -MD makedepend' DEPFLAG='-DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST' MAKEDEPPROG='makedepend' SHARED_LDFLAGS='-arch i386 -dynamiclib' KRB5_INCLUDES='' LIBKRB5='' ZLIB_INCLUDE='' LIBZLIB='' EXE_EXT='' SHARED_LIBS='' SHLIB_EXT='.1.0.0.dylib' SHLIB_TARGET='darwin-shared' PEX_LIBS='-Wl,-search_paths_first' EX_LIBS='' CPUID_OBJ='x86cpuid.o' BN_ASM='bn-586.o co-586.o x86-mont.o x86-gf2m.o' EC_ASM='' DES_ENC='des-586.o crypt586.o' AES_ENC='aes-586.o vpaes-x86.o aesni-x86.o' CMLL_ENC='cmll-x86.o' BF_ENC='bf-586.o' CAST_ENC='c_enc.o' RC4_ENC='rc4-586.o' RC5_ENC='rc5-586.o' SHA1_ASM_OBJ='sha1-586.o sha256-586.o sha512-586.o' MD5_ASM_OBJ='md5-586.o' RMD160_ASM_OBJ='rmd-586.o' WP_ASM_OBJ='wp_block.o wp-mmx.o' MODES_ASM_OBJ='ghash-x86.o' ENGINES_ASM_OBJ='' PERLASM_SCHEME='macosx' FIPSLIBDIR='' FIPSDIR='/usr/local/ssl/fips-2.0' FIPSCANLIB="$}" THIS=$ MAKEFILE=Makefile MAKEOVERRIDES= TOP=.. DIR=$$dir $$target ) || exit 1; fi +BUILD_ONE_CMD=if expr " crypto ssl engines apps test tools " : ".* $$dir " >/dev/null 2>&1; then if [ -d "$$dir" ]; then ( cd $$dir && echo "making $$target in $$dir..." && TOP= && unset TOP $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ && -e PLATFORM='darwin-i386-cc' PROCESSOR='' CC='cc' CFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM' AS='cc' ASFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -c' AR='ar r' NM='nm' RANLIB='/usr/bin/ranlib' CROSS_COMPILE='' PERL='/usr/bin/perl' ENGDIRS='ccgost' SDIRS='objects md4 md5 sha mdc2 hmac ripemd whrlpool des aes rc2 rc4 idea bf cast camellia seed modes bn ec rsa dsa ecdsa dh ecdh ecies dso engine buffer bio stack lhash rand err evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 cms pqueue ts srp cmac sm2 sm3 sms4 ecies cpk zuc cbcmac otp skf kdf' LIBRPATH='/usr/local/ssl/lib' INSTALL_PREFIX='' INSTALLTOP='/usr/local/ssl' OPENSSLDIR='/usr/local/ssl' LIBDIR='lib' MAKEDEPEND='$$$./util/domd $$$. -MD makedepend' DEPFLAG='-DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST' MAKEDEPPROG='makedepend' SHARED_LDFLAGS='-arch i386 -dynamiclib' KRB5_INCLUDES='' LIBKRB5='' ZLIB_INCLUDE='' LIBZLIB='' EXE_EXT='' SHARED_LIBS='' SHLIB_EXT='.1.0.0.dylib' SHLIB_TARGET='darwin-shared' PEX_LIBS='-Wl,-search_paths_first' EX_LIBS='' CPUID_OBJ='x86cpuid.o' BN_ASM='bn-586.o co-586.o x86-mont.o x86-gf2m.o' EC_ASM='' DES_ENC='des-586.o crypt586.o' AES_ENC='aes-586.o vpaes-x86.o aesni-x86.o' CMLL_ENC='cmll-x86.o' BF_ENC='bf-586.o' CAST_ENC='c_enc.o' RC4_ENC='rc4-586.o' RC5_ENC='rc5-586.o' SHA1_ASM_OBJ='sha1-586.o sha256-586.o sha512-586.o' MD5_ASM_OBJ='md5-586.o' RMD160_ASM_OBJ='rmd-586.o' WP_ASM_OBJ='wp_block.o wp-mmx.o' MODES_ASM_OBJ='ghash-x86.o' ENGINES_ASM_OBJ='' PERLASM_SCHEME='macosx' FIPSLIBDIR='' FIPSDIR='/usr/local/ssl/fips-2.0' FIPSCANLIB="$}" THIS=$ MAKEFILE=Makefile MAKEOVERRIDES= TOP=.. DIR=$$dir $$target ) || exit 1; fi; fi CAST_ENC=c_enc.o CC=cc -CFLAG=-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM +CFLAG=-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM CLEARENV=TOP= && unset TOP $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ -CMLL_ENC=cmll-x86_64.o cmll_misc.o -CONFIGURE_ARGS=darwin64-x86_64-cc --prefix=/usr/local --openssldir=/usr/local/openssl -CPUID_OBJ=x86_64cpuid.o +CMLL_ENC=cmll-x86.o +CONFIGURE_ARGS=darwin-i386-cc +CPUID_OBJ=x86cpuid.o DEPFLAG=-DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST -DES_ENC=des_enc.o fcrypt_b.o +DES_ENC=des-586.o crypt586.o DIRS=crypto ssl engines apps test tools -EC_ASM=ecp_nistz256.o ecp_nistz256-x86_64.o +EC_ASM= EDIRS=times doc bugs util include certs ms shlib mt demos perl sf dep VMS ENGDIRS=ccgost ENGINES_ASM_OBJ= @@ -34,9 +34,9 @@ FIPSLIBDIR= GENERAL=Makefile HEADER=e_os.h HERE=. -HTMLDIR=/usr/local/openssl/html +HTMLDIR=/usr/local/ssl/html HTMLSUFFIX=html -INSTALLTOP=/usr/local +INSTALLTOP=/usr/local/ssl INSTALL_PREFIX= KRB5_INCLUDES= LIBDIR=lib @@ -48,30 +48,30 @@ MAKEDEPPROG=makedepend MAKEFILE=Makefile MAN1=1 MAN3=3 -MANDIR=/usr/local/openssl/man +MANDIR=/usr/local/ssl/man MANSUFFIX= -MD5_ASM_OBJ=md5-x86_64.o +MD5_ASM_OBJ=md5-586.o MINOR=0.2 -MODES_ASM_OBJ=ghash-x86_64.o aesni-gcm-x86_64.o -NAME=openssl-1.0.2d +MODES_ASM_OBJ=ghash-x86.o +NAME=gmssl-1.0.2d-fips NM=nm ONEDIRS=out tmp -OPENSSLDIR=/usr/local/openssl -OPTIONS=--prefix=/usr/local --openssldir=/usr/local/openssl no-ec_nistp_64_gcc_128 no-gmp no-jpake no-krb5 no-libunbound no-md2 no-rc5 no-rfc3779 no-sctp no-shared no-ssl-trace no-store no-unit-test no-zlib no-zlib-dynamic static-engine -PERL=/opt/local/bin/perl5 +OPENSSLDIR=/usr/local/ssl +OPTIONS=no-ec_nistp_64_gcc_128 no-gmp no-jpake no-krb5 no-libunbound no-md2 no-rc5 no-rfc3779 no-sctp no-shared no-ssl-trace no-store no-unit-test no-zlib no-zlib-dynamic static-engine +PERL=/usr/bin/perl PERLASM_SCHEME=macosx PEX_LIBS=-Wl,-search_paths_first -PLATFORM=darwin64-x86_64-cc +PLATFORM=darwin-i386-cc PROCESSOR= -RANLIB=/opt/local/bin/ranlib -RC4_ENC=rc4_enc.o rc4_skey.o -RC5_ENC=rc5_enc.o -RECURSIVE_BUILD_CMD=for dir in crypto ssl engines apps test tools; do if [ -d "$$dir" ]; then ( cd $$dir && echo "making $$target in $$dir..." && TOP= && unset TOP $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ && -e PLATFORM='darwin64-x86_64-cc' PROCESSOR='' CC='cc' CFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM' AS='cc' ASFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -c' AR='ar r' NM='nm' RANLIB='/opt/local/bin/ranlib' CROSS_COMPILE='' PERL='/opt/local/bin/perl5' ENGDIRS='ccgost' SDIRS='objects md4 md5 sha mdc2 hmac ripemd whrlpool sm3 des aes rc2 rc4 idea bf cast camellia seed modes sms4 zuc bn ec rsa dsa ecdsa dh ecdh ecies dso engine buffer bio stack lhash rand err evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 cms pqueue ts srp cmac' LIBRPATH='/usr/local/lib' INSTALL_PREFIX='' INSTALLTOP='/usr/local' OPENSSLDIR='/usr/local/openssl' LIBDIR='lib' MAKEDEPEND='$$$./util/domd $$$. -MD makedepend' DEPFLAG='-DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST' MAKEDEPPROG='makedepend' SHARED_LDFLAGS='-arch x86_64 -dynamiclib' KRB5_INCLUDES='' LIBKRB5='' ZLIB_INCLUDE='' LIBZLIB='' EXE_EXT='' SHARED_LIBS='' SHLIB_EXT='.1.0.0.dylib' SHLIB_TARGET='darwin-shared' PEX_LIBS='-Wl,-search_paths_first' EX_LIBS='' CPUID_OBJ='x86_64cpuid.o' BN_ASM='x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o rsaz_exp.o rsaz-x86_64.o rsaz-avx2.o' EC_ASM='ecp_nistz256.o ecp_nistz256-x86_64.o' DES_ENC='des_enc.o fcrypt_b.o' AES_ENC='aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o aesni-sha256-x86_64.o aesni-mb-x86_64.o' CMLL_ENC='cmll-x86_64.o cmll_misc.o' BF_ENC='bf_enc.o' CAST_ENC='c_enc.o' RC4_ENC='rc4_enc.o rc4_skey.o' RC5_ENC='rc5_enc.o' SHA1_ASM_OBJ='sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o sha1-mb-x86_64.o sha256-mb-x86_64.o' MD5_ASM_OBJ='md5-x86_64.o' RMD160_ASM_OBJ='' WP_ASM_OBJ='wp-x86_64.o' MODES_ASM_OBJ='ghash-x86_64.o aesni-gcm-x86_64.o' ENGINES_ASM_OBJ='' PERLASM_SCHEME='macosx' FIPSLIBDIR='' FIPSDIR='/usr/local/ssl/fips-2.0' FIPSCANLIB="$}" THIS=$ MAKEFILE=Makefile MAKEOVERRIDES= TOP=.. DIR=$$dir $$target ) || exit 1; fi; done -RMD160_ASM_OBJ= -SDIRS=objects md4 md5 sha mdc2 hmac ripemd whrlpool sm3 des aes rc2 rc4 idea bf cast camellia seed modes sms4 zuc bn ec rsa dsa ecdsa dh ecdh ecies dso engine buffer bio stack lhash rand err evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 cms pqueue ts srp cmac -SHA1_ASM_OBJ=sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o sha1-mb-x86_64.o sha256-mb-x86_64.o +RANLIB=/usr/bin/ranlib +RC4_ENC=rc4-586.o +RC5_ENC=rc5-586.o +RECURSIVE_BUILD_CMD=for dir in crypto ssl engines apps test tools; do if [ -d "$$dir" ]; then ( cd $$dir && echo "making $$target in $$dir..." && TOP= && unset TOP $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ && -e PLATFORM='darwin-i386-cc' PROCESSOR='' CC='cc' CFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM' AS='cc' ASFLAG='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -c' AR='ar r' NM='nm' RANLIB='/usr/bin/ranlib' CROSS_COMPILE='' PERL='/usr/bin/perl' ENGDIRS='ccgost' SDIRS='objects md4 md5 sha mdc2 hmac ripemd whrlpool des aes rc2 rc4 idea bf cast camellia seed modes bn ec rsa dsa ecdsa dh ecdh ecies dso engine buffer bio stack lhash rand err evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 cms pqueue ts srp cmac sm2 sm3 sms4 ecies cpk zuc cbcmac otp skf kdf' LIBRPATH='/usr/local/ssl/lib' INSTALL_PREFIX='' INSTALLTOP='/usr/local/ssl' OPENSSLDIR='/usr/local/ssl' LIBDIR='lib' MAKEDEPEND='$$$./util/domd $$$. -MD makedepend' DEPFLAG='-DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST' MAKEDEPPROG='makedepend' SHARED_LDFLAGS='-arch i386 -dynamiclib' KRB5_INCLUDES='' LIBKRB5='' ZLIB_INCLUDE='' LIBZLIB='' EXE_EXT='' SHARED_LIBS='' SHLIB_EXT='.1.0.0.dylib' SHLIB_TARGET='darwin-shared' PEX_LIBS='-Wl,-search_paths_first' EX_LIBS='' CPUID_OBJ='x86cpuid.o' BN_ASM='bn-586.o co-586.o x86-mont.o x86-gf2m.o' EC_ASM='' DES_ENC='des-586.o crypt586.o' AES_ENC='aes-586.o vpaes-x86.o aesni-x86.o' CMLL_ENC='cmll-x86.o' BF_ENC='bf-586.o' CAST_ENC='c_enc.o' RC4_ENC='rc4-586.o' RC5_ENC='rc5-586.o' SHA1_ASM_OBJ='sha1-586.o sha256-586.o sha512-586.o' MD5_ASM_OBJ='md5-586.o' RMD160_ASM_OBJ='rmd-586.o' WP_ASM_OBJ='wp_block.o wp-mmx.o' MODES_ASM_OBJ='ghash-x86.o' ENGINES_ASM_OBJ='' PERLASM_SCHEME='macosx' FIPSLIBDIR='' FIPSDIR='/usr/local/ssl/fips-2.0' FIPSCANLIB="$}" THIS=$ MAKEFILE=Makefile MAKEOVERRIDES= TOP=.. DIR=$$dir $$target ) || exit 1; fi; done +RMD160_ASM_OBJ=rmd-586.o +SDIRS=objects md4 md5 sha mdc2 hmac ripemd whrlpool des aes rc2 rc4 idea bf cast camellia seed modes bn ec rsa dsa ecdsa dh ecdh ecies dso engine buffer bio stack lhash rand err evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 cms pqueue ts srp cmac sm2 sm3 sms4 ecies cpk zuc cbcmac otp skf kdf +SHA1_ASM_OBJ=sha1-586.o sha256-586.o sha512-586.o SHARED_CRYPTO=libcrypto.1.0.0.dylib -SHARED_LDFLAGS=-arch x86_64 -dynamiclib +SHARED_LDFLAGS=-arch i386 -dynamiclib SHARED_LIBS= SHARED_LIBS_LINK_EXTS=.1.dylib .dylib SHARED_SSL=libssl.1.0.0.dylib @@ -84,14 +84,14 @@ SHLIB_TARGET=darwin-shared SHLIB_VERSION_HISTORY= SHLIB_VERSION_NUMBER=1.0.0 TAR=tar -TARFILE=openssl-1.0.2d.tar +TARFILE=gmssl-1.0.2d-fips.tar TARFLAGS=--no-recursion TESTS=alltests TOP=. -VERSION=1.0.2d +VERSION=1.0.2d-fips WDIRS=windows -WP_ASM_OBJ=wp-x86_64.o -WTARFILE=openssl-1.0.2d-win.tar +WP_ASM_OBJ=wp_block.o wp-mmx.o +WTARFILE=gmssl-1.0.2d-fips-win.tar ZLIB_INCLUDE= RELATIVE_DIRECTORY= RELATIVE_DIRECTORY=crypto @@ -102,7 +102,7 @@ ASFLAGS=-I. -I.. -I../include CC=cc CFLAG=-g CFLAGS=-I. -I.. -I../include -g -CPUID_OBJ=x86_64cpuid.o +CPUID_OBJ=x86cpuid.o DIR=crypto EXHEADER=crypto.h opensslv.h opensslconf.h ebcdic.h symhacks.h ossl_typ.h EX_LIBS= @@ -111,7 +111,7 @@ HEADER=cryptlib.h buildinf.h md32_common.h o_time.h o_str.h o_dir.h constant_tim INCLUDE=-I. -I.. -I../include INCLUDES=-I.. -I../.. -I../modes -I../asn1 -I../evp -I../../include LIB=../libcrypto.a -LIBOBJ=cryptlib.o mem.o mem_dbg.o cversion.o ex_data.o cpt_err.o ebcdic.o uid.o o_time.o o_str.o o_dir.o o_fips.o o_init.o fips_ers.o x86_64cpuid.o +LIBOBJ=cryptlib.o mem.o mem_dbg.o cversion.o ex_data.o cpt_err.o ebcdic.o uid.o o_time.o o_str.o o_dir.o o_fips.o o_init.o fips_ers.o x86cpuid.o LIBS= LIBSRC=cryptlib.c mem.c mem_clr.c mem_dbg.c cversion.c ex_data.c cpt_err.c ebcdic.c uid.c o_time.c o_str.c o_dir.c o_fips.c o_init.c fips_ers.c MAKEDEPEND=../util/domd .. -MD makedepend @@ -303,30 +303,6 @@ TEST=wp_test.c TOP=../.. WP_ASM_OBJ=wp_block.o RELATIVE_DIRECTORY= -RELATIVE_DIRECTORY=crypto/sm3 -AFLAGS=-I.. -I../.. -I../../include -ALL=Makefile sm3.c byteorder.h sm3.h -APPS= -AR=ar r -ASFLAGS=-I.. -I../.. -I../../include -CC=cc -CFLAG=-g -CFLAGS=-I.. -I../.. -I../../include -g -CPP=cc -E -DIR=sm3 -EXHEADER=sm3.h -GENERAL=Makefile -HEADER=byteorder.h sm3.h -INCLUDES=-I.. -I../.. -I../../include -LIB=../../libcrypto.a -LIBOBJ=sm3.o -LIBSRC=sm3.c -MAKEFILE=Makefile -SM3_ASM_OBJ= -SRC=sm3.c -TEST=sm3test.c -TOP=../.. -RELATIVE_DIRECTORY= RELATIVE_DIRECTORY=crypto/des AFLAGS=-I../.. -I../../include ALL=Makefile cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c ecb3_enc.c ecb_enc.c enc_read.c enc_writ.c fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c qud_cksm.c rand_key.c rpc_enc.c set_key.c des_enc.c fcrypt_b.c xcbc_enc.c str2key.c cfb64ede.c ofb64ede.c ede_cbcm_enc.c des_old.c des_old2.c read2pwd.c des_locl.h rpc_des.h spr.h des_ver.h des.h des_old.h @@ -353,7 +329,7 @@ TEST=destest.c TOP=../.. RELATIVE_DIRECTORY= RELATIVE_DIRECTORY=crypto/aes -AES_ENC=aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o aesni-sha256-x86_64.o aesni-mb-x86_64.o +AES_ENC=aes-586.o vpaes-x86.o aesni-x86.o AFLAGS= ALL=Makefile aes_core.c aes_misc.c aes_ecb.c aes_cbc.c aes_cfb.c aes_ofb.c aes_ctr.c aes_ige.c aes_wrap.c aes_locl.h aes.h APPS= @@ -369,7 +345,7 @@ GENERAL=Makefile HEADER=aes_locl.h aes.h INCLUDES= LIB=../../libcrypto.a -LIBOBJ=aes_misc.o aes_ecb.o aes_cfb.o aes_ofb.o aes_ctr.o aes_ige.o aes_wrap.o aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o aesni-sha256-x86_64.o aesni-mb-x86_64.o +LIBOBJ=aes_misc.o aes_ecb.o aes_cfb.o aes_ofb.o aes_ctr.o aes_ige.o aes_wrap.o aes-586.o vpaes-x86.o aesni-x86.o LIBSRC=aes_core.c aes_misc.c aes_ecb.c aes_cbc.c aes_cfb.c aes_ofb.c aes_ctr.c aes_ige.c aes_wrap.c MAKEFILE=Makefile SRC=aes_core.c aes_misc.c aes_ecb.c aes_cbc.c aes_cfb.c aes_ofb.c aes_ctr.c aes_ige.c aes_wrap.c @@ -412,9 +388,9 @@ GENERAL=Makefile HEADER=rc4.h rc4_locl.h INCLUDES= LIB=../../libcrypto.a -LIBOBJ=rc4_enc.o rc4_skey.o rc4_utl.o +LIBOBJ=rc4-586.o rc4_utl.o LIBSRC=rc4_skey.c rc4_enc.c rc4_utl.c -RC4_ENC=rc4_enc.o rc4_skey.o +RC4_ENC=rc4-586.o SRC=rc4_skey.c rc4_enc.c rc4_utl.c TEST=rc4test.c TOP=../.. @@ -554,50 +530,6 @@ SRC=cbc128.c ctr128.c cts128.c cfb128.c ofb128.c gcm128.c ccm128.c xts128.c wrap TEST= TOP=../.. RELATIVE_DIRECTORY= -RELATIVE_DIRECTORY=crypto/sms4 -ALL=Makefile sms4_cbc.c sms4_cfb.c sms4_ecb.c sms4_ofb.c sms4.c ../../include/openssl/modes.h sms4.h -APPS= -AR=ar r -CC=cc -CFLAG=-g -CFLAGS= -g -DIR=sms4 -EXHEADER=sms4.h -GENERAL=Makefile -HEADER=../../include/openssl/modes.h sms4.h -INCLUDES= -LIB=../../libcrypto.a -LIBOBJ=sms4_cbc.o sms4_cfb.o sms4_ecb.o sms4_ofb.o sms4.o -LIBSRC=sms4_cbc.c sms4_cfb.c sms4_ecb.c sms4_ofb.c sms4.c -MAKEFILE=Makefile -SRC=sms4_cbc.c sms4_cfb.c sms4_ecb.c sms4_ofb.c sms4.c -TEST= -TOP=../.. -RELATIVE_DIRECTORY= -RELATIVE_DIRECTORY=crypto/zuc -AFLAGS= -ALL=Makefile zuc.c zuc.h -APPS= -AR=ar r -ASFLAGS= -CC=cc -CFLAG=-g -CFLAGS= -g -CPP=cc -E -DIR=zuc -EXHEADER=zuc.h -GENERAL=Makefile -HEADER=zuc.h -INCLUDES= -LIB=../../libcrypto.a -LIBOBJ=zuc.o -LIBSRC=zuc.c -RC4_ENC=rc4_enc.o rc4_skey.o -SRC=zuc.c -TEST= -TOP=../.. -ZUC_ENC=zuc.o -RELATIVE_DIRECTORY= RELATIVE_DIRECTORY=crypto/bn AFLAGS=-I.. -I../.. -I../../include ALL=Makefile bn_add.c bn_div.c bn_exp.c bn_lib.c bn_ctx.c bn_mul.c bn_mod.c bn_print.c bn_rand.c bn_shift.c bn_word.c bn_blind.c bn_kron.c bn_sqrt.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c bn_asm.c bn_recp.c bn_mont.c bn_mpi.c bn_exp2.c bn_gf2m.c bn_nist.c bn_depr.c bn_const.c bn_x931p.c bn_lcl.h bn_prime.h bn.h @@ -745,22 +677,22 @@ TEST=ecdhtest.c TOP=../.. RELATIVE_DIRECTORY= RELATIVE_DIRECTORY=crypto/ecies -ALL=Makefile ecies_lib.c ecies_asn1.c ecies_err.c kdf_x9_63.c ecies_locl.h ecies.h kdf.h +ALL=Makefile ecies_lib.c ecies_asn1.c ecies_err.c ecies_locl.h ecies.h APPS= AR=ar r CC=cc CFLAG=-g -Wall CFLAGS=-I.. -I../.. -I../../include -g -Wall DIR=ecies -EXHEADER=ecies.h kdf.h +EXHEADER=ecies.h GENERAL=Makefile -HEADER=ecies_locl.h ecies.h kdf.h +HEADER=ecies_locl.h ecies.h INCLUDES=-I.. -I../.. -I../../include LIB=../../libcrypto.a -LIBOBJ=ecies_lib.o ecies_asn1.o ecies_err.o kdf_x9_63.o -LIBSRC=ecies_lib.c ecies_asn1.c ecies_err.c kdf_x9_63.c +LIBOBJ=ecies_lib.o ecies_asn1.o ecies_err.o +LIBSRC=ecies_lib.c ecies_asn1.c ecies_err.c MAKEFILE=Makefile -SRC=ecies_lib.c ecies_asn1.c ecies_err.c kdf_x9_63.c +SRC=ecies_lib.c ecies_asn1.c ecies_err.c TEST=eciestest.c TOP=../.. RELATIVE_DIRECTORY= @@ -966,7 +898,7 @@ TEST= TOP=../.. RELATIVE_DIRECTORY= RELATIVE_DIRECTORY=crypto/pem -ALL=Makefile pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c pem_x509.c pem_xaux.c pem_oth.c pem_pk8.c pem_pkey.c pvkfmt.c pem.h pem2.h +ALL=Makefile pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c pem_x509.c pem_xaux.c pem_oth.c pem_pk8.c pem_pkey.c pvkfmt.c pem_sm2.c pem.h pem2.h APPS= AR=ar r CC=cc @@ -978,10 +910,10 @@ GENERAL=Makefile HEADER=pem.h pem2.h INCLUDES=-I.. -I../.. -I../../include LIB=../../libcrypto.a -LIBOBJ=pem_sign.o pem_seal.o pem_info.o pem_lib.o pem_all.o pem_err.o pem_x509.o pem_xaux.o pem_oth.o pem_pk8.o pem_pkey.o pvkfmt.o -LIBSRC=pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c pem_x509.c pem_xaux.c pem_oth.c pem_pk8.c pem_pkey.c pvkfmt.c +LIBOBJ=pem_sign.o pem_seal.o pem_info.o pem_lib.o pem_all.o pem_err.o pem_x509.o pem_xaux.o pem_oth.o pem_pk8.o pem_pkey.o pvkfmt.o pem_sm2.o +LIBSRC=pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c pem_x509.c pem_xaux.c pem_oth.c pem_pk8.c pem_pkey.c pvkfmt.c pem_sm2.c MAKEFILE=Makefile -SRC=pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c pem_x509.c pem_xaux.c pem_oth.c pem_pk8.c pem_pkey.c pvkfmt.c +SRC=pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c pem_x509.c pem_xaux.c pem_oth.c pem_pk8.c pem_pkey.c pvkfmt.c pem_sm2.c TEST= TOP=../.. RELATIVE_DIRECTORY= @@ -1301,25 +1233,237 @@ SRC=cmac.c cm_ameth.c cm_pmeth.c TEST= TOP=../.. RELATIVE_DIRECTORY= +RELATIVE_DIRECTORY=crypto/sm2 +ALL=Makefile sm2_lib.c sm2_asn1.c sm2_err.c sm2_sign.c sm2_enc.c sm2_kap.c sm2.h +APPS= +AR=ar r +CC=cc +CFLAG=-g -Wall +CFLAGS=-I.. -I../.. -I../../include -g -Wall +DIR=sm2 +EXHEADER=sm2.h +GENERAL=Makefile +HEADER=sm2.h +INCLUDES=-I.. -I../.. -I../../include +LIB=../../libcrypto.a +LIBOBJ=sm2_lib.o sm2_asn1.o sm2_err.o sm2_sign.o sm2_enc.o sm2_kap.o +LIBSRC=sm2_lib.c sm2_asn1.c sm2_err.c sm2_sign.c sm2_enc.c sm2_kap.c +MAKEFILE=Makefile +SRC=sm2_lib.c sm2_asn1.c sm2_err.c sm2_sign.c sm2_enc.c sm2_kap.c +TEST=sm2test.c +TOP=../.. +RELATIVE_DIRECTORY= +RELATIVE_DIRECTORY=crypto/sm3 +AFLAGS=-I.. -I../.. -I../../include +ALL=Makefile sm3.c byteorder.h sm3.h +APPS= +AR=ar r +ASFLAGS=-I.. -I../.. -I../../include +CC=cc +CFLAG=-g +CFLAGS=-I.. -I../.. -I../../include -g +CPP=cc -E +DIR=sm3 +EXHEADER=sm3.h +GENERAL=Makefile +HEADER=byteorder.h sm3.h +INCLUDES=-I.. -I../.. -I../../include +LIB=../../libcrypto.a +LIBOBJ=sm3.o +LIBSRC=sm3.c +MAKEFILE=Makefile +SM3_ASM_OBJ= +SRC=sm3.c +TEST=sm3test.c +TOP=../.. +RELATIVE_DIRECTORY= +RELATIVE_DIRECTORY=crypto/sms4 +ALL=Makefile sms4_cbc.c sms4_cfb.c sms4_ecb.c sms4_ofb.c sms4_ctr.c sms4_wrap.c sms4_common.c sms4_setkey.c sms4_enc.c ../../include/openssl/modes.h sms4_lcl.h sms4.h +APPS= +AR=ar r +CC=cc +CFLAG=-g +CFLAGS= -g +DIR=sms4 +EXHEADER=sms4.h +GENERAL=Makefile +HEADER=../../include/openssl/modes.h sms4_lcl.h sms4.h +INCLUDES= +LIB=../../libcrypto.a +LIBOBJ=sms4_cbc.o sms4_cfb.o sms4_ecb.o sms4_ofb.o sms4_ctr.o sms4_wrap.o sms4_common.o sms4_setkey.o sms4_enc.o +LIBSRC=sms4_cbc.c sms4_cfb.c sms4_ecb.c sms4_ofb.c sms4_ctr.c sms4_wrap.c sms4_common.c sms4_setkey.c sms4_enc.c +MAKEFILE=Makefile +SRC=sms4_cbc.c sms4_cfb.c sms4_ecb.c sms4_ofb.c sms4_ctr.c sms4_wrap.c sms4_common.c sms4_setkey.c sms4_enc.c +TEST= +TOP=../.. +RELATIVE_DIRECTORY= +RELATIVE_DIRECTORY=crypto/ecies +ALL=Makefile ecies_lib.c ecies_asn1.c ecies_err.c ecies_locl.h ecies.h +APPS= +AR=ar r +CC=cc +CFLAG=-g -Wall +CFLAGS=-I.. -I../.. -I../../include -g -Wall +DIR=ecies +EXHEADER=ecies.h +GENERAL=Makefile +HEADER=ecies_locl.h ecies.h +INCLUDES=-I.. -I../.. -I../../include +LIB=../../libcrypto.a +LIBOBJ=ecies_lib.o ecies_asn1.o ecies_err.o +LIBSRC=ecies_lib.c ecies_asn1.c ecies_err.c +MAKEFILE=Makefile +SRC=ecies_lib.c ecies_asn1.c ecies_err.c +TEST=eciestest.c +TOP=../.. +RELATIVE_DIRECTORY= +RELATIVE_DIRECTORY=crypto/cpk +ALL=Makefile cpk_lib.c cpk_map.c cpk_kap.c cpk_asn1.c cpk_prn.c cpk_err.c cpk.h +APPS= +AR=ar r +CC=cc +CFLAG=-g -Wall +CFLAGS=-I.. -I../.. -I../../include -g -Wall +DIR=cpk +EXHEADER=cpk.h +GENERAL=Makefile +HEADER=cpk.h +INCLUDES=-I.. -I../.. -I../../include +LIB=../../libcrypto.a +LIBOBJ=cpk_lib.o cpk_map.o cpk_kap.o cpk_asn1.o cpk_prn.o cpk_err.o +LIBSRC=cpk_lib.c cpk_map.c cpk_kap.c cpk_asn1.c cpk_prn.c cpk_err.c +MAKEFILE=Makefile +SRC=cpk_lib.c cpk_map.c cpk_kap.c cpk_asn1.c cpk_prn.c cpk_err.c +TEST=cpktest.c +TOP=../.. +RELATIVE_DIRECTORY= +RELATIVE_DIRECTORY=crypto/zuc +AFLAGS= +ALL=Makefile zuc.c zuc.h +APPS= +AR=ar r +ASFLAGS= +CC=cc +CFLAG=-g +CFLAGS= -g +CPP=cc -E +DIR=zuc +EXHEADER=zuc.h +GENERAL=Makefile +HEADER=zuc.h +INCLUDES= +LIB=../../libcrypto.a +LIBOBJ=zuc.o +LIBSRC=zuc.c +RC4_ENC=rc4-586.o +SRC=zuc.c +TEST= +TOP=../.. +ZUC_ENC=zuc.o +RELATIVE_DIRECTORY= +RELATIVE_DIRECTORY=crypto/cbcmac +ALL=Makefile cbcmac.c cbcmac_err.c cbcm_ameth.c cbcm_pmeth.c cbcmac.h +APPS= +AR=ar r +CC=cc +CFLAG=-g +CFLAGS= -g +DIR=cbcmac +EXHEADER=cbcmac.h +GENERAL=Makefile +HEADER=cbcmac.h +INCLUDES= +LIB=../../libcrypto.a +LIBOBJ=cbcmac.o cbcmac_err.o cbcm_ameth.o cbcm_pmeth.o +LIBSRC=cbcmac.c cbcmac_err.c cbcm_ameth.c cbcm_pmeth.c +MAKEFILE=Makefile +SRC=cbcmac.c cbcmac_err.c cbcm_ameth.c cbcm_pmeth.c +TEST= +TOP=../.. +RELATIVE_DIRECTORY= +RELATIVE_DIRECTORY=crypto/otp +AFLAGS=-I.. -I../.. -I../../include +ALL=Makefile otp.c otp.h +APPS= +AR=ar r +ASFLAGS=-I.. -I../.. -I../../include +CC=cc +CFLAG=-g +CFLAGS=-I.. -I../.. -I../../include -g +CPP=cc -E +DIR=otp +EXHEADER=otp.h +GENERAL=Makefile +HEADER=otp.h +INCLUDES=-I.. -I../.. -I../../include +LIB=../../libcrypto.a +LIBOBJ=otp.o +LIBSRC=otp.c +MAKEFILE=Makefile +SM3_ASM_OBJ= +SRC=otp.c +TEST=otptest.c +TOP=../.. +RELATIVE_DIRECTORY= +RELATIVE_DIRECTORY=crypto/skf +ALL=Makefile skf_dev.c skf_token.c skf_dgst.c skf_ec.c skf_enc.c skf_err.c skf_errstr.c skf_handle.c skf_mac.c skf_rand.c skf_rsa.c skf_sesskey.c skf_types.c skf_lcl.h skf.h +APPS= +AR=ar r +CC=cc +CFLAG=-g +CFLAGS= -g +DIR=skf +EXHEADER=skf.h +GENERAL=Makefile +HEADER=skf_lcl.h skf.h +INCLUDES= +LIB=../../libcrypto.a +LIBOBJ=skf_dev.o skf_token.o skf_dgst.o skf_ec.o skf_enc.o skf_err.o skf_errstr.o skf_handle.o skf_mac.o skf_rand.o skf_rsa.o skf_sesskey.o skf_types.o +LIBSRC=skf_dev.c skf_token.c skf_dgst.c skf_ec.c skf_enc.c skf_err.c skf_errstr.c skf_handle.c skf_mac.c skf_rand.c skf_rsa.c skf_sesskey.c skf_types.c +MAKEFILE=Makefile +SRC=skf_dev.c skf_token.c skf_dgst.c skf_ec.c skf_enc.c skf_err.c skf_errstr.c skf_handle.c skf_mac.c skf_rand.c skf_rsa.c skf_sesskey.c skf_types.c +TEST= +TOP=../.. +RELATIVE_DIRECTORY= +RELATIVE_DIRECTORY=crypto/kdf +ALL=Makefile kdf_x9_63.c kdf.h +APPS= +AR=ar r +CC=cc +CFLAG=-g -Wall +CFLAGS=-I.. -I../.. -I../../include -g -Wall +DIR=kdf +EXHEADER=kdf.h +GENERAL=Makefile +HEADER=kdf.h +INCLUDES=-I.. -I../.. -I../../include +LIB=../../libcrypto.a +LIBOBJ=kdf_x9_63.o +LIBSRC=kdf_x9_63.c +MAKEFILE=Makefile +SRC=kdf_x9_63.c +TEST=kdftest.c +TOP=../.. +RELATIVE_DIRECTORY= RELATIVE_DIRECTORY=ssl -ALL=Makefile README ssl-lib.com install.com s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s3_cbc.c s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c t1_ext.c d1_meth.c d1_srvr.c d1_clnt.c d1_lib.c d1_pkt.c d1_both.c d1_srtp.c ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c ssl_algs.c ssl_conf.c bio_ssl.c ssl_err.c kssl.c t1_reneg.c tls_srp.c t1_trce.c ssl_utst.c ssl.h ssl2.h ssl3.h ssl23.h tls1.h dtls1.h kssl.h srtp.h ssl_locl.h kssl_lcl.h +ALL=Makefile README ssl-lib.com install.com s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s3_cbc.c s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c t1_ext.c d1_meth.c d1_srvr.c d1_clnt.c d1_lib.c d1_pkt.c d1_both.c d1_srtp.c gm_meth.c gm_srvr.c gm_clnt.c gm_lib.c gm_enc.c ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c ssl_algs.c ssl_conf.c bio_ssl.c ssl_err.c kssl.c t1_reneg.c tls_srp.c t1_trce.c ssl_utst.c ssl.h ssl2.h ssl3.h ssl23.h tls1.h dtls1.h gmssl1.h kssl.h srtp.h ssl_locl.h kssl_lcl.h APPS= AR=ar r CC=cc CFLAG=-g CFLAGS=-I../crypto -I.. -I../include -g DIR=ssl -EXHEADER=ssl.h ssl2.h ssl3.h ssl23.h tls1.h dtls1.h kssl.h srtp.h +EXHEADER=ssl.h ssl2.h ssl3.h ssl23.h tls1.h dtls1.h gmssl1.h kssl.h srtp.h GENERAL=Makefile README ssl-lib.com install.com -HEADER=ssl.h ssl2.h ssl3.h ssl23.h tls1.h dtls1.h kssl.h srtp.h ssl_locl.h kssl_lcl.h +HEADER=ssl.h ssl2.h ssl3.h ssl23.h tls1.h dtls1.h gmssl1.h kssl.h srtp.h ssl_locl.h kssl_lcl.h INCLUDES=-I../crypto -I.. -I../include KRB5_INCLUDES= LIB=../libssl.a -LIBOBJ=s2_meth.o s2_srvr.o s2_clnt.o s2_lib.o s2_enc.o s2_pkt.o s3_meth.o s3_srvr.o s3_clnt.o s3_lib.o s3_enc.o s3_pkt.o s3_both.o s3_cbc.o s23_meth.o s23_srvr.o s23_clnt.o s23_lib.o s23_pkt.o t1_meth.o t1_srvr.o t1_clnt.o t1_lib.o t1_enc.o t1_ext.o d1_meth.o d1_srvr.o d1_clnt.o d1_lib.o d1_pkt.o d1_both.o d1_srtp.o ssl_lib.o ssl_err2.o ssl_cert.o ssl_sess.o ssl_ciph.o ssl_stat.o ssl_rsa.o ssl_asn1.o ssl_txt.o ssl_algs.o ssl_conf.o bio_ssl.o ssl_err.o kssl.o t1_reneg.o tls_srp.o t1_trce.o ssl_utst.o -LIBSRC=s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s3_cbc.c s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c t1_ext.c d1_meth.c d1_srvr.c d1_clnt.c d1_lib.c d1_pkt.c d1_both.c d1_srtp.c ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c ssl_algs.c ssl_conf.c bio_ssl.c ssl_err.c kssl.c t1_reneg.c tls_srp.c t1_trce.c ssl_utst.c +LIBOBJ=s2_meth.o s2_srvr.o s2_clnt.o s2_lib.o s2_enc.o s2_pkt.o s3_meth.o s3_srvr.o s3_clnt.o s3_lib.o s3_enc.o s3_pkt.o s3_both.o s3_cbc.o s23_meth.o s23_srvr.o s23_clnt.o s23_lib.o s23_pkt.o t1_meth.o t1_srvr.o t1_clnt.o t1_lib.o t1_enc.o t1_ext.o d1_meth.o d1_srvr.o d1_clnt.o d1_lib.o d1_pkt.o d1_both.o d1_srtp.o gm_meth.o gm_srvr.o gm_clnt.o gm_lib.o gm_enc.o ssl_lib.o ssl_err2.o ssl_cert.o ssl_sess.o ssl_ciph.o ssl_stat.o ssl_rsa.o ssl_asn1.o ssl_txt.o ssl_algs.o ssl_conf.o bio_ssl.o ssl_err.o kssl.o t1_reneg.o tls_srp.o t1_trce.o ssl_utst.o +LIBSRC=s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s3_cbc.c s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c t1_ext.c d1_meth.c d1_srvr.c d1_clnt.c d1_lib.c d1_pkt.c d1_both.c d1_srtp.c gm_meth.c gm_srvr.c gm_clnt.c gm_lib.c gm_enc.c ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c ssl_algs.c ssl_conf.c bio_ssl.c ssl_err.c kssl.c t1_reneg.c tls_srp.c t1_trce.c ssl_utst.c MAKEFILE=Makefile SHARED_LIB=libssl -SRC=s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s3_cbc.c s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c t1_ext.c d1_meth.c d1_srvr.c d1_clnt.c d1_lib.c d1_pkt.c d1_both.c d1_srtp.c ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c ssl_algs.c ssl_conf.c bio_ssl.c ssl_err.c kssl.c t1_reneg.c tls_srp.c t1_trce.c ssl_utst.c +SRC=s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s3_cbc.c s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c t1_ext.c d1_meth.c d1_srvr.c d1_clnt.c d1_lib.c d1_pkt.c d1_both.c d1_srtp.c gm_meth.c gm_srvr.c gm_clnt.c gm_lib.c gm_enc.c ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c ssl_algs.c ssl_conf.c bio_ssl.c ssl_err.c kssl.c t1_reneg.c tls_srp.c t1_trce.c ssl_utst.c TEST=ssltest.c heartbeat_test.c TOP=.. RELATIVE_DIRECTORY= diff --git a/Makefile b/Makefile index ba331f45..508b92a3 100644 --- a/Makefile +++ b/Makefile @@ -151,7 +151,7 @@ SDIRS= \ buffer bio stack lhash rand err \ evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \ cms pqueue ts srp cmac \ - sm2 sm3 sms4 ecies cpk zuc cbcmac otp + sm2 sm3 sms4 sm9 ecies cpk zuc cbcmac otp skf kdf # keep in mind that the above list is adjusted by ./Configure # according to no-xxx arguments... diff --git a/Makefile.bak b/Makefile.bak deleted file mode 100644 index 3b155926..00000000 --- a/Makefile.bak +++ /dev/null @@ -1,681 +0,0 @@ -### Generated automatically from Makefile.org by Configure. - -## -## Makefile for OpenSSL -## - -VERSION=1.0.2d-fips -MAJOR=1 -MINOR=0.2 -SHLIB_VERSION_NUMBER=1.0.0 -SHLIB_VERSION_HISTORY= -SHLIB_MAJOR=1 -SHLIB_MINOR=0.0 -SHLIB_EXT= -PLATFORM=dist -OPTIONS= no-ec_nistp_64_gcc_128 no-gmp no-jpake no-krb5 no-libunbound no-md2 no-rc5 no-rfc3779 no-sctp no-shared no-ssl-trace no-store no-unit-test no-zlib no-zlib-dynamic static-engine -CONFIGURE_ARGS=dist -SHLIB_TARGET= - -# HERE indicates where this Makefile lives. This can be used to indicate -# where sub-Makefiles are expected to be. Currently has very limited usage, -# and should probably not be bothered with at all. -HERE=. - -# INSTALL_PREFIX is for package builders so that they can configure -# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/. -# Normally it is left empty. -INSTALL_PREFIX= -INSTALLTOP=/usr/local/ssl - -# Do not edit this manually. Use Configure --openssldir=DIR do change this! -OPENSSLDIR=/usr/local/ssl - -# NO_IDEA - Define to build without the IDEA algorithm -# NO_RC4 - Define to build without the RC4 algorithm -# NO_RC2 - Define to build without the RC2 algorithm -# THREADS - Define when building with threads, you will probably also need any -# system defines as well, i.e. _REENTERANT for Solaris 2.[34] -# TERMIO - Define the termio terminal subsystem, needed if sgtty is missing. -# TERMIOS - Define the termios terminal subsystem, Silicon Graphics. -# LONGCRYPT - Define to use HPUX 10.x's long password modification to crypt(3). -# DEVRANDOM - Give this the value of the 'random device' if your OS supports -# one. 32 bytes will be read from this when the random -# number generator is initalised. -# SSL_FORBID_ENULL - define if you want the server to be not able to use the -# NULL encryption ciphers. -# -# LOCK_DEBUG - turns on lots of lock debug output :-) -# REF_CHECK - turn on some xyz_free() assertions. -# REF_PRINT - prints some stuff on structure free. -# CRYPTO_MDEBUG - turns on my 'memory leak' detecting stuff -# MFUNC - Make all Malloc/Free/Realloc calls call -# CRYPTO_malloc/CRYPTO_free/CRYPTO_realloc which can be setup to -# call application defined callbacks via CRYPTO_set_mem_functions() -# MD5_ASM needs to be defined to use the x86 assembler for MD5 -# SHA1_ASM needs to be defined to use the x86 assembler for SHA1 -# RMD160_ASM needs to be defined to use the x86 assembler for RIPEMD160 -# Do not define B_ENDIAN or L_ENDIAN if 'unsigned long' == 8. It must -# equal 4. -# PKCS1_CHECK - pkcs1 tests. - -CC= cc -CFLAG= -O -DEPFLAG= -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST -PEX_LIBS= -EX_LIBS= -EXE_EXT= -ARFLAGS= -AR= ar $(ARFLAGS) r -RANLIB= /usr/bin/ranlib -NM= nm -PERL= /usr/bin/perl -TAR= tar -TARFLAGS= --no-recursion -MAKEDEPPROG=makedepend -LIBDIR=lib - -# We let the C compiler driver to take care of .s files. This is done in -# order to be excused from maintaining a separate set of architecture -# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC -# gcc, then the driver will automatically translate it to -xarch=v8plus -# and pass it down to assembler. -AS=$(CC) -c -ASFLAG=$(CFLAG) - -# For x86 assembler: Set PROCESSOR to 386 if you want to support -# the 80386. -PROCESSOR= - -# CPUID module collects small commonly used assembler snippets -CPUID_OBJ= mem_clr.o -BN_ASM= bn_asm.o -EC_ASM= -DES_ENC= des_enc.o fcrypt_b.o -AES_ENC= aes_core.o aes_cbc.o -BF_ENC= bf_enc.o -CAST_ENC= c_enc.o -RC4_ENC= rc4_enc.o rc4_skey.o -RC5_ENC= rc5_enc.o -MD5_ASM_OBJ= -SHA1_ASM_OBJ= -RMD160_ASM_OBJ= -WP_ASM_OBJ= wp_block.o -CMLL_ENC= camellia.o cmll_misc.o cmll_cbc.o -MODES_ASM_OBJ= -ENGINES_ASM_OBJ= -PERLASM_SCHEME= - -# KRB5 stuff -KRB5_INCLUDES= -LIBKRB5= - -# Zlib stuff -ZLIB_INCLUDE= -LIBZLIB= - -# TOP level FIPS install directory. -FIPSDIR=/usr/local/ssl/fips-2.0 - -# This is the location of fipscanister.o and friends. -# The FIPS module build will place it $(INSTALLTOP)/lib -# but since $(INSTALLTOP) can only take the default value -# when the module is built it will be in /usr/local/ssl/lib -# $(INSTALLTOP) for this build may be different so hard -# code the path. - -FIPSLIBDIR= - -# The location of the library which contains fipscanister.o -# normally it will be libcrypto unless fipsdso is set in which -# case it will be libfips. If not compiling in FIPS mode at all -# this is empty making it a useful test for a FIPS compile. - -FIPSCANLIB= - -# Shared library base address. Currently only used on Windows. -# - -BASEADDR=0xFB00000 - -DIRS= crypto ssl engines apps test tools -ENGDIRS= ccgost -SHLIBDIRS= crypto ssl - -# dirs in crypto to build -SDIRS= \ - objects \ - md4 md5 sha mdc2 hmac ripemd whrlpool \ - des aes rc2 rc4 idea bf cast camellia seed modes \ - bn ec rsa dsa ecdsa dh ecdh ecies dso engine \ - buffer bio stack lhash rand err \ - evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \ - cms pqueue ts srp cmac \ - sm2 sm3 sms4 ecies cpk zuc cbcmac otp - -# keep in mind that the above list is adjusted by ./Configure -# according to no-xxx arguments... - -# tests to perform. "alltests" is a special word indicating that all tests -# should be performed. -TESTS = alltests - -MAKEFILE= Makefile - -MANDIR=$(OPENSSLDIR)/man -MAN1=1 -MAN3=3 -MANSUFFIX= -HTMLSUFFIX=html -HTMLDIR=$(OPENSSLDIR)/html -SHELL=/bin/sh - -TOP= . -ONEDIRS=out tmp -EDIRS= times doc bugs util include certs ms shlib mt demos perl sf dep VMS -WDIRS= windows -LIBS= libcrypto.a libssl.a -SHARED_CRYPTO=libcrypto$(SHLIB_EXT) -SHARED_SSL=libssl$(SHLIB_EXT) -SHARED_LIBS= -SHARED_LIBS_LINK_EXTS= -SHARED_LDFLAGS= - -GENERAL= Makefile -BASENAME= gmssl -NAME= $(BASENAME)-$(VERSION) -TARFILE= $(NAME).tar -WTARFILE= $(NAME)-win.tar -EXHEADER= e_os2.h -HEADER= e_os.h - -all: Makefile build_all - -# as we stick to -e, CLEARENV ensures that local variables in lower -# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn -# shell, which [annoyingly enough] terminates unset with error if VAR -# is not present:-( TOP= && unset TOP is tribute to HP-UX /bin/sh, -# which terminates unset with error if no variable was present:-( -CLEARENV= TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS} \ - $${INCLUDE+INCLUDE} $${INCLUDES+INCLUDES} \ - $${DIR+DIR} $${DIRS+DIRS} $${SRC+SRC} \ - $${LIBSRC+LIBSRC} $${LIBOBJ+LIBOBJ} $${ALL+ALL} \ - $${EXHEADER+EXHEADER} $${HEADER+HEADER} \ - $${GENERAL+GENERAL} $${CFLAGS+CFLAGS} \ - $${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS} \ - $${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS} $${SCRIPTS+SCRIPTS} \ - $${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS} \ - $${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS} - -BUILDENV= PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \ - CC='$(CC)' CFLAG='$(CFLAG)' \ - AS='$(CC)' ASFLAG='$(CFLAG) -c' \ - AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)' \ - CROSS_COMPILE='$(CROSS_COMPILE)' \ - PERL='$(PERL)' ENGDIRS='$(ENGDIRS)' \ - SDIRS='$(SDIRS)' LIBRPATH='$(INSTALLTOP)/$(LIBDIR)' \ - INSTALL_PREFIX='$(INSTALL_PREFIX)' \ - INSTALLTOP='$(INSTALLTOP)' OPENSSLDIR='$(OPENSSLDIR)' \ - LIBDIR='$(LIBDIR)' \ - MAKEDEPEND='$$$${TOP}/util/domd $$$${TOP} -MD $(MAKEDEPPROG)' \ - DEPFLAG='-DOPENSSL_NO_DEPRECATED $(DEPFLAG)' \ - MAKEDEPPROG='$(MAKEDEPPROG)' \ - SHARED_LDFLAGS='$(SHARED_LDFLAGS)' \ - KRB5_INCLUDES='$(KRB5_INCLUDES)' LIBKRB5='$(LIBKRB5)' \ - ZLIB_INCLUDE='$(ZLIB_INCLUDE)' LIBZLIB='$(LIBZLIB)' \ - EXE_EXT='$(EXE_EXT)' SHARED_LIBS='$(SHARED_LIBS)' \ - SHLIB_EXT='$(SHLIB_EXT)' SHLIB_TARGET='$(SHLIB_TARGET)' \ - PEX_LIBS='$(PEX_LIBS)' EX_LIBS='$(EX_LIBS)' \ - CPUID_OBJ='$(CPUID_OBJ)' BN_ASM='$(BN_ASM)' \ - EC_ASM='$(EC_ASM)' DES_ENC='$(DES_ENC)' \ - AES_ENC='$(AES_ENC)' CMLL_ENC='$(CMLL_ENC)' \ - BF_ENC='$(BF_ENC)' CAST_ENC='$(CAST_ENC)' \ - RC4_ENC='$(RC4_ENC)' RC5_ENC='$(RC5_ENC)' \ - SHA1_ASM_OBJ='$(SHA1_ASM_OBJ)' \ - MD5_ASM_OBJ='$(MD5_ASM_OBJ)' \ - RMD160_ASM_OBJ='$(RMD160_ASM_OBJ)' \ - WP_ASM_OBJ='$(WP_ASM_OBJ)' \ - MODES_ASM_OBJ='$(MODES_ASM_OBJ)' \ - ENGINES_ASM_OBJ='$(ENGINES_ASM_OBJ)' \ - PERLASM_SCHEME='$(PERLASM_SCHEME)' \ - FIPSLIBDIR='${FIPSLIBDIR}' \ - FIPSDIR='${FIPSDIR}' \ - FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}" \ - THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES= -# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors, -# which in turn eliminates ambiguities in variable treatment with -e. - -# BUILD_CMD is a generic macro to build a given target in a given -# subdirectory. The target must be given through the shell variable -# `target' and the subdirectory to build in must be given through `dir'. -# This macro shouldn't be used directly, use RECURSIVE_BUILD_CMD or -# BUILD_ONE_CMD instead. -# -# BUILD_ONE_CMD is a macro to build a given target in a given -# subdirectory if that subdirectory is part of $(DIRS). It requires -# exactly the same shell variables as BUILD_CMD. -# -# RECURSIVE_BUILD_CMD is a macro to build a given target in all -# subdirectories defined in $(DIRS). It requires that the target -# is given through the shell variable `target'. -BUILD_CMD= if [ -d "$$dir" ]; then \ - ( cd $$dir && echo "making $$target in $$dir..." && \ - $(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. DIR=$$dir $$target \ - ) || exit 1; \ - fi -RECURSIVE_BUILD_CMD=for dir in $(DIRS); do $(BUILD_CMD); done -BUILD_ONE_CMD=\ - if expr " $(DIRS) " : ".* $$dir " >/dev/null 2>&1; then \ - $(BUILD_CMD); \ - fi - -reflect: - @[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV) - -sub_all: build_all - -build_all: build_libs build_apps build_tests build_tools - -build_libs: build_libcrypto build_libssl openssl.pc - -build_libcrypto: build_crypto build_engines libcrypto.pc -build_libssl: build_ssl libssl.pc - -build_crypto: - @dir=crypto; target=all; $(BUILD_ONE_CMD) -build_ssl: build_crypto - @dir=ssl; target=all; $(BUILD_ONE_CMD) -build_engines: build_crypto - @dir=engines; target=all; $(BUILD_ONE_CMD) -build_apps: build_libs - @dir=apps; target=all; $(BUILD_ONE_CMD) -build_tests: build_libs - @dir=test; target=all; $(BUILD_ONE_CMD) -build_tools: build_libs - @dir=tools; target=all; $(BUILD_ONE_CMD) - -all_testapps: build_libs build_testapps -build_testapps: - @dir=crypto; target=testapps; $(BUILD_ONE_CMD) - -fips_premain_dso$(EXE_EXT): libcrypto.a - [ -z "$(FIPSCANLIB)" ] || $(CC) $(CFLAG) -Iinclude \ - -DFINGERPRINT_PREMAIN_DSO_LOAD -o $@ \ - $(FIPSLIBDIR)fips_premain.c $(FIPSLIBDIR)fipscanister.o \ - libcrypto.a $(EX_LIBS) - -libcrypto$(SHLIB_EXT): libcrypto.a fips_premain_dso$(EXE_EXT) - @if [ "$(SHLIB_TARGET)" != "" ]; then \ - if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \ - FIPSLD_LIBCRYPTO=libcrypto.a ; \ - FIPSLD_CC="$(CC)"; CC=$(FIPSDIR)/bin/fipsld; \ - export CC FIPSLD_CC FIPSLD_LIBCRYPTO; \ - fi; \ - $(MAKE) -e SHLIBDIRS=crypto CC="$${CC:-$(CC)}" build-shared && \ - (touch -c fips_premain_dso$(EXE_EXT) || :); \ - else \ - echo "There's no support for shared libraries on this platform" >&2; \ - exit 1; \ - fi - -libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a - @if [ "$(SHLIB_TARGET)" != "" ]; then \ - $(MAKE) SHLIBDIRS=ssl SHLIBDEPS='-lcrypto' build-shared; \ - else \ - echo "There's no support for shared libraries on this platform" >&2; \ - exit 1; \ - fi - -clean-shared: - @set -e; for i in $(SHLIBDIRS); do \ - if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \ - tmp="$(SHARED_LIBS_LINK_EXTS)"; \ - for j in $${tmp:-x}; do \ - ( set -x; rm -f lib$$i$$j ); \ - done; \ - fi; \ - ( set -x; rm -f lib$$i$(SHLIB_EXT) ); \ - if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \ - ( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \ - fi; \ - done - -link-shared: - @ set -e; for i in $(SHLIBDIRS); do \ - $(MAKE) -f $(HERE)/Makefile.shared -e $(BUILDENV) \ - LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \ - LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \ - symlink.$(SHLIB_TARGET); \ - libs="$$libs -l$$i"; \ - done - -build-shared: do_$(SHLIB_TARGET) link-shared - -do_$(SHLIB_TARGET): - @ set -e; libs='-L. $(SHLIBDEPS)'; for i in $(SHLIBDIRS); do \ - if [ "$$i" = "ssl" -a -n "$(LIBKRB5)" ]; then \ - libs="$(LIBKRB5) $$libs"; \ - fi; \ - $(CLEARENV) && $(MAKE) -f Makefile.shared -e $(BUILDENV) \ - LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \ - LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \ - LIBDEPS="$$libs $(EX_LIBS)" \ - link_a.$(SHLIB_TARGET); \ - libs="-l$$i $$libs"; \ - done - -libcrypto.pc: Makefile - @ ( echo 'prefix=$(INSTALLTOP)'; \ - echo 'exec_prefix=$${prefix}'; \ - echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \ - echo 'includedir=$${prefix}/include'; \ - echo ''; \ - echo 'Name: OpenSSL-libcrypto'; \ - echo 'Description: OpenSSL cryptography library'; \ - echo 'Version: '$(VERSION); \ - echo 'Requires: '; \ - echo 'Libs: -L$${libdir} -lcrypto'; \ - echo 'Libs.private: $(EX_LIBS)'; \ - echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc - -libssl.pc: Makefile - @ ( echo 'prefix=$(INSTALLTOP)'; \ - echo 'exec_prefix=$${prefix}'; \ - echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \ - echo 'includedir=$${prefix}/include'; \ - echo ''; \ - echo 'Name: OpenSSL-libssl'; \ - echo 'Description: Secure Sockets Layer and cryptography libraries'; \ - echo 'Version: '$(VERSION); \ - echo 'Requires.private: libcrypto'; \ - echo 'Libs: -L$${libdir} -lssl'; \ - echo 'Libs.private: $(EX_LIBS)'; \ - echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc - -openssl.pc: Makefile - @ ( echo 'prefix=$(INSTALLTOP)'; \ - echo 'exec_prefix=$${prefix}'; \ - echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \ - echo 'includedir=$${prefix}/include'; \ - echo ''; \ - echo 'Name: OpenSSL'; \ - echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \ - echo 'Version: '$(VERSION); \ - echo 'Requires: libssl libcrypto' ) > openssl.pc - -Makefile: Makefile.org Configure config - @echo "Makefile is older than Makefile.org, Configure or config." - @echo "Reconfigure the source tree (via './config' or 'perl Configure'), please." - @false - -libclean: - rm -f *.map *.so *.so.* *.dylib *.dll engines/*.so engines/*.dll engines/*.dylib *.a engines/*.a */lib */*/lib - -clean: libclean - rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c - @set -e; target=clean; $(RECURSIVE_BUILD_CMD) - rm -f $(LIBS) - rm -f openssl.pc libssl.pc libcrypto.pc - rm -f speed.* .pure - rm -f $(TARFILE) - @set -e; for i in $(ONEDIRS) ;\ - do \ - rm -fr $$i/*; \ - done - -makefile.one: files - $(PERL) util/mk1mf.pl >makefile.one; \ - sh util/do_ms.sh - -files: - $(PERL) $(TOP)/util/files.pl Makefile > $(TOP)/MINFO - @set -e; target=files; $(RECURSIVE_BUILD_CMD) - -links: - @$(PERL) $(TOP)/util/mkdir-p.pl include/openssl - @$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER) - @set -e; target=links; $(RECURSIVE_BUILD_CMD) - -gentests: - @(cd test && echo "generating dummy tests (if needed)..." && \ - $(CLEARENV) && $(MAKE) -e $(BUILDENV) TESTS='$(TESTS)' OPENSSL_DEBUG_MEMORY=on generate ); - -dclean: - rm -rf *.bak include/openssl certs/.0 - @set -e; target=dclean; $(RECURSIVE_BUILD_CMD) - -rehash: rehash.time -rehash.time: certs apps - @if [ -z "$(CROSS_COMPILE)" ]; then \ - (OPENSSL="`pwd`/util/opensslwrap.sh"; \ - [ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe" || :; \ - OPENSSL_DEBUG_MEMORY=on; \ - export OPENSSL OPENSSL_DEBUG_MEMORY; \ - $(PERL) tools/c_rehash certs/demo) && \ - touch rehash.time; \ - else :; fi - -test: tests - -tests: rehash - @(cd test && echo "testing..." && \ - $(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. TESTS='$(TESTS)' OPENSSL_DEBUG_MEMORY=on OPENSSL_CONF=../apps/openssl.cnf tests ); - OPENSSL_CONF=apps/openssl.cnf util/opensslwrap.sh version -a - -report: - @$(PERL) util/selftest.pl - -update: errors stacks util/libeay.num util/ssleay.num TABLE - @set -e; target=update; $(RECURSIVE_BUILD_CMD) - -depend: - @set -e; target=depend; $(RECURSIVE_BUILD_CMD) - -lint: - @set -e; target=lint; $(RECURSIVE_BUILD_CMD) - -tags: - rm -f TAGS - find . -name '[^.]*.[ch]' | xargs etags -a - -errors: - $(PERL) util/ck_errf.pl -strict */*.c */*/*.c - $(PERL) util/mkerr.pl -recurse -write - (cd engines; $(MAKE) PERL=$(PERL) errors) - -stacks: - $(PERL) util/mkstack.pl -write - -util/libeay.num:: - $(PERL) util/mkdef.pl crypto update - -util/ssleay.num:: - $(PERL) util/mkdef.pl ssl update - -TABLE: Configure - (echo 'Output of `Configure TABLE'"':"; \ - $(PERL) Configure TABLE) > TABLE - -# Build distribution tar-file. As the list of files returned by "find" is -# pretty long, on several platforms a "too many arguments" error or similar -# would occur. Therefore the list of files is temporarily stored into a file -# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal -# tar does not support the --files-from option. -tar: - find . -type d -print | xargs chmod 755 - find . -type f -print | xargs chmod a+r - find . -type f -perm -0100 -print | xargs chmod a+x - find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | sort > ../$(TARFILE).list; \ - $(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \ - tardy --user_number=0 --user_name=openssl \ - --group_number=0 --group_name=openssl \ - --prefix=openssl-$(VERSION) - |\ - gzip --best >../$(TARFILE).gz; \ - rm -f ../$(TARFILE).list; \ - ls -l ../$(TARFILE).gz - -tar-snap: - @$(TAR) $(TARFLAGS) -cvf - \ - `find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \! -name '*.so' \! -name '*.so.*' \! -name 'openssl' \! -name '*test' \! -name '.#*' \! -name '*~' | sort` |\ - tardy --user_number=0 --user_name=openssl \ - --group_number=0 --group_name=openssl \ - --prefix=openssl-$(VERSION) - > ../$(TARFILE);\ - ls -l ../$(TARFILE) - -dist: - $(PERL) Configure dist - @$(MAKE) dist_pem_h - @$(MAKE) SDIRS='$(SDIRS)' clean - @$(MAKE) TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' tar - -dist_pem_h: - (cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean) - -install: all install_docs install_sw - -install_sw: - @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \ - $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \ - $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \ - $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig \ - $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \ - $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \ - $(INSTALL_PREFIX)$(OPENSSLDIR)/certs \ - $(INSTALL_PREFIX)$(OPENSSLDIR)/private - @set -e; headerlist="$(EXHEADER)"; for i in $$headerlist;\ - do \ - (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \ - chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \ - done; - @set -e; target=install; $(RECURSIVE_BUILD_CMD) - @set -e; liblist="$(LIBS)"; for i in $$liblist ;\ - do \ - if [ -f "$$i" ]; then \ - ( echo installing $$i; \ - cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ - $(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ - chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ - mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i ); \ - fi; \ - done; - @set -e; if [ -n "$(SHARED_LIBS)" ]; then \ - tmp="$(SHARED_LIBS)"; \ - for i in $${tmp:-x}; \ - do \ - if [ -f "$$i" -o -f "$$i.a" ]; then \ - ( echo installing $$i; \ - if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \ - c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \ - cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \ - chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \ - mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \ - cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ - chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ - mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \ - else \ - cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ - chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ - mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \ - fi ); \ - if expr $(PLATFORM) : 'mingw' > /dev/null; then \ - ( case $$i in \ - *crypto*) i=libeay32.dll;; \ - *ssl*) i=ssleay32.dll;; \ - esac; \ - echo installing $$i; \ - cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \ - chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \ - mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i ); \ - fi; \ - fi; \ - done; \ - ( here="`pwd`"; \ - cd $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR); \ - $(MAKE) -f $$here/Makefile HERE="$$here" link-shared ); \ - if [ "$(INSTALLTOP)" != "/usr" ]; then \ - echo 'OpenSSL shared libraries have been installed in:'; \ - echo ' $(INSTALLTOP)'; \ - echo ''; \ - sed -e '1,/^$$/d' doc/openssl-shared.txt; \ - fi; \ - fi - cp libcrypto.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig - chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc - cp libssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig - chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc - cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig - chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc - -install_html_docs: - here="`pwd`"; \ - filecase=; \ - case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \ - filecase=-i; \ - esac; \ - for subdir in apps crypto ssl; do \ - mkdir -p $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \ - for i in doc/$$subdir/*.pod; do \ - fn=`basename $$i .pod`; \ - echo "installing html/$$fn.$(HTMLSUFFIX)"; \ - cat $$i \ - | sed -r 's/L<([^)]*)(\([0-9]\))?\|([^)]*)(\([0-9]\))?>/L<\1|\3>/g' \ - | pod2html --podroot=doc --htmlroot=.. --podpath=apps:crypto:ssl \ - | sed -r 's/ $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir/$$fn.$(HTMLSUFFIX); \ - $(PERL) util/extract-names.pl < $$i | \ - grep -v $$filecase "^$$fn\$$" | \ - (cd $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \ - while read n; do \ - PLATFORM=$(PLATFORM) $$here/util/point.sh $$fn.$(HTMLSUFFIX) "$$n".$(HTMLSUFFIX); \ - done); \ - done; \ - done - -install_docs: - @$(PERL) $(TOP)/util/mkdir-p.pl \ - $(INSTALL_PREFIX)$(MANDIR)/man1 \ - $(INSTALL_PREFIX)$(MANDIR)/man3 \ - $(INSTALL_PREFIX)$(MANDIR)/man5 \ - $(INSTALL_PREFIX)$(MANDIR)/man7 - @pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \ - here="`pwd`"; \ - filecase=; \ - case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \ - filecase=-i; \ - esac; \ - set -e; for i in doc/apps/*.pod; do \ - fn=`basename $$i .pod`; \ - sec=`$(PERL) util/extract-section.pl 1 < $$i`; \ - echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \ - (cd `$(PERL) util/dirname.pl $$i`; \ - sh -c "$$pod2man \ - --section=$$sec --center=OpenSSL \ - --release=$(VERSION) `basename $$i`") \ - > $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \ - $(PERL) util/extract-names.pl < $$i | \ - (grep -v $$filecase "^$$fn\$$"; true) | \ - (grep -v "[ ]"; true) | \ - (cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \ - while read n; do \ - PLATFORM=$(PLATFORM) $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \ - done); \ - done; \ - set -e; for i in doc/crypto/*.pod doc/ssl/*.pod; do \ - fn=`basename $$i .pod`; \ - sec=`$(PERL) util/extract-section.pl 3 < $$i`; \ - echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \ - (cd `$(PERL) util/dirname.pl $$i`; \ - sh -c "$$pod2man \ - --section=$$sec --center=OpenSSL \ - --release=$(VERSION) `basename $$i`") \ - > $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \ - $(PERL) util/extract-names.pl < $$i | \ - (grep -v $$filecase "^$$fn\$$"; true) | \ - (grep -v "[ ]"; true) | \ - (cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \ - while read n; do \ - PLATFORM=$(PLATFORM) $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \ - done); \ - done - -# DO NOT DELETE THIS LINE -- make depend depends on it. diff --git a/Makefile.org b/Makefile.org index a47bc222..42478f40 100644 --- a/Makefile.org +++ b/Makefile.org @@ -149,7 +149,7 @@ SDIRS= \ buffer bio stack lhash rand err \ evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \ cms pqueue ts jpake srp store cmac \ - sm2 sm3 sms4 ecies cpk zuc cbcmac otp + sm2 sm3 sms4 sm9 ecies cpk zuc cbcmac otp skf kdf # keep in mind that the above list is adjusted by ./Configure # according to no-xxx arguments... diff --git a/apps/Makefile b/apps/Makefile index f1477494..e3bac424 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -177,12 +177,14 @@ app_rand.o: ../include/openssl/buffer.h ../include/openssl/conf.h app_rand.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h app_rand.o: ../include/openssl/ec.h ../include/openssl/ecdh.h app_rand.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h -app_rand.o: ../include/openssl/evp.h ../include/openssl/lhash.h +app_rand.o: ../include/openssl/err.h ../include/openssl/evp.h +app_rand.o: ../include/openssl/kdf.h ../include/openssl/lhash.h app_rand.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h app_rand.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h app_rand.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h app_rand.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h app_rand.o: ../include/openssl/safestack.h ../include/openssl/sha.h +app_rand.o: ../include/openssl/sm2.h ../include/openssl/sm3.h app_rand.o: ../include/openssl/stack.h ../include/openssl/symhacks.h app_rand.o: ../include/openssl/txt_db.h ../include/openssl/x509.h app_rand.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h @@ -193,49 +195,53 @@ apps.o: ../include/openssl/conf.h ../include/openssl/crypto.h apps.o: ../include/openssl/e_os2.h ../include/openssl/ec.h apps.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h apps.o: ../include/openssl/engine.h ../include/openssl/err.h -apps.o: ../include/openssl/evp.h ../include/openssl/lhash.h -apps.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -apps.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -apps.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -apps.o: ../include/openssl/pem.h ../include/openssl/pem2.h -apps.o: ../include/openssl/pkcs12.h ../include/openssl/pkcs7.h -apps.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -apps.o: ../include/openssl/sha.h ../include/openssl/stack.h -apps.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h -apps.o: ../include/openssl/ui.h ../include/openssl/x509.h -apps.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.c apps.h +apps.o: ../include/openssl/evp.h ../include/openssl/kdf.h +apps.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +apps.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +apps.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +apps.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +apps.o: ../include/openssl/pem2.h ../include/openssl/pkcs12.h +apps.o: ../include/openssl/pkcs7.h ../include/openssl/rsa.h +apps.o: ../include/openssl/safestack.h ../include/openssl/sha.h +apps.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +apps.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +apps.o: ../include/openssl/txt_db.h ../include/openssl/ui.h +apps.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +apps.o: ../include/openssl/x509v3.h apps.c apps.h asn1pars.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h asn1pars.o: ../include/openssl/buffer.h ../include/openssl/conf.h asn1pars.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h asn1pars.o: ../include/openssl/ec.h ../include/openssl/ecdh.h asn1pars.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h asn1pars.o: ../include/openssl/err.h ../include/openssl/evp.h -asn1pars.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -asn1pars.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -asn1pars.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -asn1pars.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -asn1pars.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -asn1pars.o: ../include/openssl/safestack.h ../include/openssl/sha.h -asn1pars.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -asn1pars.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -asn1pars.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h -asn1pars.o: asn1pars.c +asn1pars.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +asn1pars.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +asn1pars.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +asn1pars.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +asn1pars.o: ../include/openssl/pem.h ../include/openssl/pem2.h +asn1pars.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +asn1pars.o: ../include/openssl/sha.h ../include/openssl/sm2.h +asn1pars.o: ../include/openssl/sm3.h ../include/openssl/stack.h +asn1pars.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +asn1pars.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +asn1pars.o: ../include/openssl/x509v3.h apps.h asn1pars.c ca.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h ca.o: ../include/openssl/bn.h ../include/openssl/buffer.h ca.o: ../include/openssl/conf.h ../include/openssl/crypto.h ca.o: ../include/openssl/e_os2.h ../include/openssl/ec.h ca.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h ca.o: ../include/openssl/engine.h ../include/openssl/err.h -ca.o: ../include/openssl/evp.h ../include/openssl/lhash.h -ca.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -ca.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -ca.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -ca.o: ../include/openssl/pem.h ../include/openssl/pem2.h -ca.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h -ca.o: ../include/openssl/sha.h ../include/openssl/stack.h -ca.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h -ca.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -ca.o: ../include/openssl/x509v3.h apps.h ca.c +ca.o: ../include/openssl/evp.h ../include/openssl/kdf.h +ca.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +ca.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +ca.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +ca.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +ca.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +ca.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ca.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +ca.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +ca.o: ../include/openssl/txt_db.h ../include/openssl/x509.h +ca.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h ca.c ciphers.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h ciphers.o: ../include/openssl/buffer.h ../include/openssl/comp.h ciphers.o: ../include/openssl/conf.h ../include/openssl/crypto.h @@ -243,14 +249,16 @@ ciphers.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h ciphers.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ciphers.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h ciphers.o: ../include/openssl/err.h ../include/openssl/evp.h -ciphers.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +ciphers.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +ciphers.o: ../include/openssl/kdf.h ../include/openssl/kssl.h ciphers.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h ciphers.o: ../include/openssl/objects.h ../include/openssl/ocsp.h ciphers.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h ciphers.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h ciphers.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h ciphers.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h -ciphers.o: ../include/openssl/sha.h ../include/openssl/srtp.h +ciphers.o: ../include/openssl/sha.h ../include/openssl/sm2.h +ciphers.o: ../include/openssl/sm3.h ../include/openssl/srtp.h ciphers.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h ciphers.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h ciphers.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -263,63 +271,68 @@ cms.o: ../include/openssl/conf.h ../include/openssl/crypto.h cms.o: ../include/openssl/e_os2.h ../include/openssl/ec.h cms.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h cms.o: ../include/openssl/engine.h ../include/openssl/err.h -cms.o: ../include/openssl/evp.h ../include/openssl/lhash.h -cms.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -cms.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -cms.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -cms.o: ../include/openssl/pem.h ../include/openssl/pem2.h -cms.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h -cms.o: ../include/openssl/sha.h ../include/openssl/stack.h -cms.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h -cms.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -cms.o: ../include/openssl/x509v3.h apps.h cms.c +cms.o: ../include/openssl/evp.h ../include/openssl/kdf.h +cms.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +cms.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +cms.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +cms.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +cms.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +cms.o: ../include/openssl/safestack.h ../include/openssl/sha.h +cms.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +cms.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +cms.o: ../include/openssl/txt_db.h ../include/openssl/x509.h +cms.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h cms.c crl.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h crl.o: ../include/openssl/buffer.h ../include/openssl/conf.h crl.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h crl.o: ../include/openssl/ec.h ../include/openssl/ecdh.h crl.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h crl.o: ../include/openssl/err.h ../include/openssl/evp.h -crl.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -crl.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -crl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -crl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -crl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -crl.o: ../include/openssl/safestack.h ../include/openssl/sha.h -crl.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -crl.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -crl.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h crl.c +crl.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +crl.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +crl.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +crl.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +crl.o: ../include/openssl/pem.h ../include/openssl/pem2.h +crl.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +crl.o: ../include/openssl/sha.h ../include/openssl/sm2.h +crl.o: ../include/openssl/sm3.h ../include/openssl/stack.h +crl.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +crl.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +crl.o: ../include/openssl/x509v3.h apps.h crl.c crl2p7.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h crl2p7.o: ../include/openssl/buffer.h ../include/openssl/conf.h crl2p7.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h crl2p7.o: ../include/openssl/ec.h ../include/openssl/ecdh.h crl2p7.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h crl2p7.o: ../include/openssl/err.h ../include/openssl/evp.h -crl2p7.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -crl2p7.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -crl2p7.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -crl2p7.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -crl2p7.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -crl2p7.o: ../include/openssl/safestack.h ../include/openssl/sha.h -crl2p7.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -crl2p7.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -crl2p7.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h -crl2p7.o: crl2p7.c +crl2p7.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +crl2p7.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +crl2p7.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +crl2p7.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +crl2p7.o: ../include/openssl/pem.h ../include/openssl/pem2.h +crl2p7.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +crl2p7.o: ../include/openssl/sha.h ../include/openssl/sm2.h +crl2p7.o: ../include/openssl/sm3.h ../include/openssl/stack.h +crl2p7.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +crl2p7.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +crl2p7.o: ../include/openssl/x509v3.h apps.h crl2p7.c dgst.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h dgst.o: ../include/openssl/buffer.h ../include/openssl/conf.h dgst.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h dgst.o: ../include/openssl/ec.h ../include/openssl/ecdh.h dgst.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h dgst.o: ../include/openssl/err.h ../include/openssl/evp.h -dgst.o: ../include/openssl/hmac.h ../include/openssl/lhash.h -dgst.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -dgst.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -dgst.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -dgst.o: ../include/openssl/pem.h ../include/openssl/pem2.h -dgst.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h -dgst.o: ../include/openssl/sha.h ../include/openssl/stack.h -dgst.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h -dgst.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -dgst.o: ../include/openssl/x509v3.h apps.h dgst.c +dgst.o: ../include/openssl/hmac.h ../include/openssl/kdf.h +dgst.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +dgst.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +dgst.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +dgst.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +dgst.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +dgst.o: ../include/openssl/safestack.h ../include/openssl/sha.h +dgst.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +dgst.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +dgst.o: ../include/openssl/txt_db.h ../include/openssl/x509.h +dgst.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h dgst.c dh.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h dh.o: ../include/openssl/bn.h ../include/openssl/buffer.h dh.o: ../include/openssl/conf.h ../include/openssl/crypto.h @@ -327,28 +340,32 @@ dh.o: ../include/openssl/dh.h ../include/openssl/e_os2.h dh.o: ../include/openssl/ec.h ../include/openssl/ecdh.h dh.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h dh.o: ../include/openssl/err.h ../include/openssl/evp.h -dh.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -dh.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -dh.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -dh.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -dh.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -dh.o: ../include/openssl/safestack.h ../include/openssl/sha.h -dh.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -dh.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -dh.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h dh.c +dh.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +dh.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +dh.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +dh.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +dh.o: ../include/openssl/pem.h ../include/openssl/pem2.h +dh.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +dh.o: ../include/openssl/sha.h ../include/openssl/sm2.h +dh.o: ../include/openssl/sm3.h ../include/openssl/stack.h +dh.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +dh.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +dh.o: ../include/openssl/x509v3.h apps.h dh.c dsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h dsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h dsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h -dsa.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h -dsa.o: ../include/openssl/ec.h ../include/openssl/ecdh.h -dsa.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h -dsa.o: ../include/openssl/err.h ../include/openssl/evp.h +dsa.o: ../include/openssl/dh.h ../include/openssl/dsa.h +dsa.o: ../include/openssl/e_os2.h ../include/openssl/ec.h +dsa.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h +dsa.o: ../include/openssl/engine.h ../include/openssl/err.h +dsa.o: ../include/openssl/evp.h ../include/openssl/kdf.h dsa.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h dsa.o: ../include/openssl/objects.h ../include/openssl/ocsp.h dsa.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h dsa.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h dsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h dsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h +dsa.o: ../include/openssl/sm2.h ../include/openssl/sm3.h dsa.o: ../include/openssl/stack.h ../include/openssl/symhacks.h dsa.o: ../include/openssl/txt_db.h ../include/openssl/x509.h dsa.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h dsa.c @@ -359,16 +376,16 @@ dsaparam.o: ../include/openssl/dh.h ../include/openssl/dsa.h dsaparam.o: ../include/openssl/e_os2.h ../include/openssl/ec.h dsaparam.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h dsaparam.o: ../include/openssl/engine.h ../include/openssl/err.h -dsaparam.o: ../include/openssl/evp.h ../include/openssl/lhash.h -dsaparam.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -dsaparam.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -dsaparam.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -dsaparam.o: ../include/openssl/pem.h ../include/openssl/pem2.h -dsaparam.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h -dsaparam.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -dsaparam.o: ../include/openssl/sha.h ../include/openssl/stack.h -dsaparam.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h -dsaparam.o: ../include/openssl/ui.h ../include/openssl/x509.h +dsaparam.o: ../include/openssl/evp.h ../include/openssl/kdf.h +dsaparam.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +dsaparam.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +dsaparam.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +dsaparam.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +dsaparam.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +dsaparam.o: ../include/openssl/safestack.h ../include/openssl/sha.h +dsaparam.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +dsaparam.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +dsaparam.o: ../include/openssl/txt_db.h ../include/openssl/x509.h dsaparam.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h dsaparam.o: dsaparam.c ec.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h @@ -377,47 +394,53 @@ ec.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h ec.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ec.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h ec.o: ../include/openssl/err.h ../include/openssl/evp.h -ec.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -ec.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -ec.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -ec.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -ec.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -ec.o: ../include/openssl/safestack.h ../include/openssl/sha.h -ec.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -ec.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -ec.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h ec.c +ec.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +ec.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +ec.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +ec.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +ec.o: ../include/openssl/pem.h ../include/openssl/pem2.h +ec.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +ec.o: ../include/openssl/sha.h ../include/openssl/sm2.h +ec.o: ../include/openssl/sm3.h ../include/openssl/stack.h +ec.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +ec.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +ec.o: ../include/openssl/x509v3.h apps.h ec.c ecparam.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h ecparam.o: ../include/openssl/bn.h ../include/openssl/buffer.h ecparam.o: ../include/openssl/conf.h ../include/openssl/crypto.h ecparam.o: ../include/openssl/e_os2.h ../include/openssl/ec.h ecparam.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h ecparam.o: ../include/openssl/engine.h ../include/openssl/err.h -ecparam.o: ../include/openssl/evp.h ../include/openssl/lhash.h -ecparam.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -ecparam.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -ecparam.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -ecparam.o: ../include/openssl/pem.h ../include/openssl/pem2.h -ecparam.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h -ecparam.o: ../include/openssl/sha.h ../include/openssl/stack.h -ecparam.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h -ecparam.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -ecparam.o: ../include/openssl/x509v3.h apps.h ecparam.c +ecparam.o: ../include/openssl/evp.h ../include/openssl/kdf.h +ecparam.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +ecparam.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +ecparam.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +ecparam.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +ecparam.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +ecparam.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ecparam.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +ecparam.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +ecparam.o: ../include/openssl/txt_db.h ../include/openssl/x509.h +ecparam.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h +ecparam.o: ecparam.c enc.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h enc.o: ../include/openssl/buffer.h ../include/openssl/comp.h enc.o: ../include/openssl/conf.h ../include/openssl/crypto.h enc.o: ../include/openssl/e_os2.h ../include/openssl/ec.h enc.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h enc.o: ../include/openssl/engine.h ../include/openssl/err.h -enc.o: ../include/openssl/evp.h ../include/openssl/lhash.h -enc.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -enc.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -enc.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -enc.o: ../include/openssl/pem.h ../include/openssl/pem2.h -enc.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h -enc.o: ../include/openssl/safestack.h ../include/openssl/sha.h -enc.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -enc.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -enc.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h enc.c +enc.o: ../include/openssl/evp.h ../include/openssl/kdf.h +enc.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +enc.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +enc.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +enc.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +enc.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +enc.o: ../include/openssl/rand.h ../include/openssl/safestack.h +enc.o: ../include/openssl/sha.h ../include/openssl/sm2.h +enc.o: ../include/openssl/sm3.h ../include/openssl/stack.h +enc.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +enc.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +enc.o: ../include/openssl/x509v3.h apps.h enc.c engine.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h engine.o: ../include/openssl/buffer.h ../include/openssl/comp.h engine.o: ../include/openssl/conf.h ../include/openssl/crypto.h @@ -425,14 +448,16 @@ engine.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h engine.o: ../include/openssl/ec.h ../include/openssl/ecdh.h engine.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h engine.o: ../include/openssl/err.h ../include/openssl/evp.h -engine.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +engine.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +engine.o: ../include/openssl/kdf.h ../include/openssl/kssl.h engine.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h engine.o: ../include/openssl/objects.h ../include/openssl/ocsp.h engine.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h engine.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h engine.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h engine.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h -engine.o: ../include/openssl/sha.h ../include/openssl/srtp.h +engine.o: ../include/openssl/sha.h ../include/openssl/sm2.h +engine.o: ../include/openssl/sm3.h ../include/openssl/srtp.h engine.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h engine.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h engine.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -446,14 +471,16 @@ errstr.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h errstr.o: ../include/openssl/ec.h ../include/openssl/ecdh.h errstr.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h errstr.o: ../include/openssl/err.h ../include/openssl/evp.h -errstr.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +errstr.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +errstr.o: ../include/openssl/kdf.h ../include/openssl/kssl.h errstr.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h errstr.o: ../include/openssl/objects.h ../include/openssl/ocsp.h errstr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h errstr.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h errstr.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h errstr.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h -errstr.o: ../include/openssl/sha.h ../include/openssl/srtp.h +errstr.o: ../include/openssl/sha.h ../include/openssl/sm2.h +errstr.o: ../include/openssl/sm3.h ../include/openssl/srtp.h errstr.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h errstr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h errstr.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -463,35 +490,37 @@ errstr.o: ../include/openssl/x509v3.h apps.h errstr.c gendh.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h gendh.o: ../include/openssl/bn.h ../include/openssl/buffer.h gendh.o: ../include/openssl/conf.h ../include/openssl/crypto.h -gendh.o: ../include/openssl/dh.h ../include/openssl/dsa.h -gendh.o: ../include/openssl/e_os2.h ../include/openssl/ec.h -gendh.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h -gendh.o: ../include/openssl/engine.h ../include/openssl/err.h -gendh.o: ../include/openssl/evp.h ../include/openssl/lhash.h +gendh.o: ../include/openssl/dh.h ../include/openssl/e_os2.h +gendh.o: ../include/openssl/ec.h ../include/openssl/ecdh.h +gendh.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h +gendh.o: ../include/openssl/err.h ../include/openssl/evp.h +gendh.o: ../include/openssl/kdf.h ../include/openssl/lhash.h gendh.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h gendh.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h gendh.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h gendh.o: ../include/openssl/pem.h ../include/openssl/pem2.h gendh.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h -gendh.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -gendh.o: ../include/openssl/sha.h ../include/openssl/stack.h -gendh.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h -gendh.o: ../include/openssl/ui.h ../include/openssl/x509.h +gendh.o: ../include/openssl/safestack.h ../include/openssl/sha.h +gendh.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +gendh.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +gendh.o: ../include/openssl/txt_db.h ../include/openssl/x509.h gendh.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h gendh.o: gendh.c gendsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h gendsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h gendsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h -gendsa.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h -gendsa.o: ../include/openssl/ec.h ../include/openssl/ecdh.h -gendsa.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h -gendsa.o: ../include/openssl/err.h ../include/openssl/evp.h +gendsa.o: ../include/openssl/dh.h ../include/openssl/dsa.h +gendsa.o: ../include/openssl/e_os2.h ../include/openssl/ec.h +gendsa.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h +gendsa.o: ../include/openssl/engine.h ../include/openssl/err.h +gendsa.o: ../include/openssl/evp.h ../include/openssl/kdf.h gendsa.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h gendsa.o: ../include/openssl/objects.h ../include/openssl/ocsp.h gendsa.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h gendsa.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h gendsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h gendsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h +gendsa.o: ../include/openssl/sm2.h ../include/openssl/sm3.h gendsa.o: ../include/openssl/stack.h ../include/openssl/symhacks.h gendsa.o: ../include/openssl/txt_db.h ../include/openssl/x509.h gendsa.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h @@ -502,50 +531,77 @@ genpkey.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h genpkey.o: ../include/openssl/ec.h ../include/openssl/ecdh.h genpkey.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h genpkey.o: ../include/openssl/err.h ../include/openssl/evp.h -genpkey.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -genpkey.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -genpkey.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -genpkey.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -genpkey.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -genpkey.o: ../include/openssl/safestack.h ../include/openssl/sha.h -genpkey.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -genpkey.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -genpkey.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h -genpkey.o: genpkey.c +genpkey.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +genpkey.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +genpkey.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +genpkey.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +genpkey.o: ../include/openssl/pem.h ../include/openssl/pem2.h +genpkey.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +genpkey.o: ../include/openssl/sha.h ../include/openssl/sm2.h +genpkey.o: ../include/openssl/sm3.h ../include/openssl/stack.h +genpkey.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +genpkey.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +genpkey.o: ../include/openssl/x509v3.h apps.h genpkey.c genrsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h genrsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h genrsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h -genrsa.o: ../include/openssl/dh.h ../include/openssl/dsa.h genrsa.o: ../include/openssl/e_os2.h ../include/openssl/ec.h genrsa.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h genrsa.o: ../include/openssl/engine.h ../include/openssl/err.h -genrsa.o: ../include/openssl/evp.h ../include/openssl/lhash.h -genrsa.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -genrsa.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -genrsa.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -genrsa.o: ../include/openssl/pem.h ../include/openssl/pem2.h -genrsa.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h -genrsa.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -genrsa.o: ../include/openssl/sha.h ../include/openssl/stack.h -genrsa.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h -genrsa.o: ../include/openssl/ui.h ../include/openssl/x509.h +genrsa.o: ../include/openssl/evp.h ../include/openssl/kdf.h +genrsa.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +genrsa.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +genrsa.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +genrsa.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +genrsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +genrsa.o: ../include/openssl/rand.h ../include/openssl/rsa.h +genrsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h +genrsa.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +genrsa.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +genrsa.o: ../include/openssl/txt_db.h ../include/openssl/x509.h genrsa.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h genrsa.o: genrsa.c +gmssl.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h +gmssl.o: ../include/openssl/buffer.h ../include/openssl/comp.h +gmssl.o: ../include/openssl/conf.h ../include/openssl/crypto.h +gmssl.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h +gmssl.o: ../include/openssl/ec.h ../include/openssl/ecdh.h +gmssl.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h +gmssl.o: ../include/openssl/err.h ../include/openssl/evp.h +gmssl.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +gmssl.o: ../include/openssl/kdf.h ../include/openssl/kssl.h +gmssl.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +gmssl.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +gmssl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +gmssl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +gmssl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +gmssl.o: ../include/openssl/pqueue.h ../include/openssl/rand.h +gmssl.o: ../include/openssl/safestack.h ../include/openssl/sha.h +gmssl.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +gmssl.o: ../include/openssl/srtp.h ../include/openssl/ssl.h +gmssl.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h +gmssl.o: ../include/openssl/ssl3.h ../include/openssl/stack.h +gmssl.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h +gmssl.o: ../include/openssl/txt_db.h ../include/openssl/x509.h +gmssl.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h +gmssl.o: gmssl.c progs.h s_apps.h nseq.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h nseq.o: ../include/openssl/buffer.h ../include/openssl/conf.h nseq.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h nseq.o: ../include/openssl/ec.h ../include/openssl/ecdh.h nseq.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h nseq.o: ../include/openssl/err.h ../include/openssl/evp.h -nseq.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -nseq.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -nseq.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -nseq.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -nseq.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -nseq.o: ../include/openssl/safestack.h ../include/openssl/sha.h -nseq.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -nseq.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -nseq.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h nseq.c +nseq.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +nseq.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +nseq.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +nseq.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +nseq.o: ../include/openssl/pem.h ../include/openssl/pem2.h +nseq.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +nseq.o: ../include/openssl/sha.h ../include/openssl/sm2.h +nseq.o: ../include/openssl/sm3.h ../include/openssl/stack.h +nseq.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +nseq.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +nseq.o: ../include/openssl/x509v3.h apps.h nseq.c ocsp.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h ocsp.o: ../include/openssl/bn.h ../include/openssl/buffer.h ocsp.o: ../include/openssl/comp.h ../include/openssl/conf.h @@ -553,7 +609,8 @@ ocsp.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h ocsp.o: ../include/openssl/e_os2.h ../include/openssl/ec.h ocsp.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h ocsp.o: ../include/openssl/engine.h ../include/openssl/err.h -ocsp.o: ../include/openssl/evp.h ../include/openssl/hmac.h +ocsp.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +ocsp.o: ../include/openssl/hmac.h ../include/openssl/kdf.h ocsp.o: ../include/openssl/kssl.h ../include/openssl/lhash.h ocsp.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h ocsp.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h @@ -561,34 +618,13 @@ ocsp.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h ocsp.o: ../include/openssl/pem.h ../include/openssl/pem2.h ocsp.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h ocsp.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ocsp.o: ../include/openssl/sm2.h ../include/openssl/sm3.h ocsp.o: ../include/openssl/srtp.h ../include/openssl/ssl.h ocsp.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h ocsp.o: ../include/openssl/ssl3.h ../include/openssl/stack.h ocsp.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h ocsp.o: ../include/openssl/txt_db.h ../include/openssl/x509.h ocsp.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h ocsp.c -openssl.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h -openssl.o: ../include/openssl/buffer.h ../include/openssl/comp.h -openssl.o: ../include/openssl/conf.h ../include/openssl/crypto.h -openssl.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h -openssl.o: ../include/openssl/ec.h ../include/openssl/ecdh.h -openssl.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h -openssl.o: ../include/openssl/err.h ../include/openssl/evp.h -openssl.o: ../include/openssl/hmac.h ../include/openssl/kssl.h -openssl.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -openssl.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -openssl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -openssl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -openssl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -openssl.o: ../include/openssl/pqueue.h ../include/openssl/rand.h -openssl.o: ../include/openssl/safestack.h ../include/openssl/sha.h -openssl.o: ../include/openssl/srtp.h ../include/openssl/ssl.h -openssl.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h -openssl.o: ../include/openssl/ssl3.h ../include/openssl/stack.h -openssl.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h -openssl.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -openssl.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h -openssl.o: openssl.c progs.h s_apps.h passwd.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h passwd.o: ../include/openssl/buffer.h ../include/openssl/conf.h passwd.o: ../include/openssl/crypto.h ../include/openssl/des.h @@ -596,123 +632,135 @@ passwd.o: ../include/openssl/des_old.h ../include/openssl/e_os2.h passwd.o: ../include/openssl/ec.h ../include/openssl/ecdh.h passwd.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h passwd.o: ../include/openssl/err.h ../include/openssl/evp.h -passwd.o: ../include/openssl/lhash.h ../include/openssl/md5.h -passwd.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -passwd.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -passwd.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -passwd.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h -passwd.o: ../include/openssl/safestack.h ../include/openssl/sha.h -passwd.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -passwd.o: ../include/openssl/txt_db.h ../include/openssl/ui.h -passwd.o: ../include/openssl/ui_compat.h ../include/openssl/x509.h -passwd.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h -passwd.o: passwd.c +passwd.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +passwd.o: ../include/openssl/md5.h ../include/openssl/obj_mac.h +passwd.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +passwd.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +passwd.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h +passwd.o: ../include/openssl/rand.h ../include/openssl/safestack.h +passwd.o: ../include/openssl/sha.h ../include/openssl/sm2.h +passwd.o: ../include/openssl/sm3.h ../include/openssl/stack.h +passwd.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +passwd.o: ../include/openssl/ui.h ../include/openssl/ui_compat.h +passwd.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +passwd.o: ../include/openssl/x509v3.h apps.h passwd.c pkcs12.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h pkcs12.o: ../include/openssl/buffer.h ../include/openssl/conf.h pkcs12.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h pkcs12.o: ../include/openssl/ec.h ../include/openssl/ecdh.h pkcs12.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h pkcs12.o: ../include/openssl/err.h ../include/openssl/evp.h -pkcs12.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -pkcs12.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -pkcs12.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -pkcs12.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -pkcs12.o: ../include/openssl/pem2.h ../include/openssl/pkcs12.h -pkcs12.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h -pkcs12.o: ../include/openssl/sha.h ../include/openssl/stack.h -pkcs12.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h -pkcs12.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -pkcs12.o: ../include/openssl/x509v3.h apps.h pkcs12.c +pkcs12.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +pkcs12.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +pkcs12.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +pkcs12.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +pkcs12.o: ../include/openssl/pem.h ../include/openssl/pem2.h +pkcs12.o: ../include/openssl/pkcs12.h ../include/openssl/pkcs7.h +pkcs12.o: ../include/openssl/safestack.h ../include/openssl/sha.h +pkcs12.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +pkcs12.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +pkcs12.o: ../include/openssl/txt_db.h ../include/openssl/x509.h +pkcs12.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h +pkcs12.o: pkcs12.c pkcs7.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h pkcs7.o: ../include/openssl/buffer.h ../include/openssl/conf.h pkcs7.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h pkcs7.o: ../include/openssl/ec.h ../include/openssl/ecdh.h pkcs7.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h pkcs7.o: ../include/openssl/err.h ../include/openssl/evp.h -pkcs7.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -pkcs7.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -pkcs7.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -pkcs7.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -pkcs7.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -pkcs7.o: ../include/openssl/safestack.h ../include/openssl/sha.h -pkcs7.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -pkcs7.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -pkcs7.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h -pkcs7.o: pkcs7.c +pkcs7.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +pkcs7.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +pkcs7.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +pkcs7.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +pkcs7.o: ../include/openssl/pem.h ../include/openssl/pem2.h +pkcs7.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +pkcs7.o: ../include/openssl/sha.h ../include/openssl/sm2.h +pkcs7.o: ../include/openssl/sm3.h ../include/openssl/stack.h +pkcs7.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +pkcs7.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +pkcs7.o: ../include/openssl/x509v3.h apps.h pkcs7.c pkcs8.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h pkcs8.o: ../include/openssl/buffer.h ../include/openssl/conf.h pkcs8.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h pkcs8.o: ../include/openssl/ec.h ../include/openssl/ecdh.h pkcs8.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h pkcs8.o: ../include/openssl/err.h ../include/openssl/evp.h -pkcs8.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -pkcs8.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -pkcs8.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -pkcs8.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -pkcs8.o: ../include/openssl/pem2.h ../include/openssl/pkcs12.h -pkcs8.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h -pkcs8.o: ../include/openssl/sha.h ../include/openssl/stack.h -pkcs8.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h -pkcs8.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -pkcs8.o: ../include/openssl/x509v3.h apps.h pkcs8.c +pkcs8.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +pkcs8.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +pkcs8.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +pkcs8.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +pkcs8.o: ../include/openssl/pem.h ../include/openssl/pem2.h +pkcs8.o: ../include/openssl/pkcs12.h ../include/openssl/pkcs7.h +pkcs8.o: ../include/openssl/safestack.h ../include/openssl/sha.h +pkcs8.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +pkcs8.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +pkcs8.o: ../include/openssl/txt_db.h ../include/openssl/x509.h +pkcs8.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h +pkcs8.o: pkcs8.c pkey.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h pkey.o: ../include/openssl/buffer.h ../include/openssl/conf.h pkey.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h pkey.o: ../include/openssl/ec.h ../include/openssl/ecdh.h pkey.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h pkey.o: ../include/openssl/err.h ../include/openssl/evp.h -pkey.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -pkey.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -pkey.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -pkey.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -pkey.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -pkey.o: ../include/openssl/safestack.h ../include/openssl/sha.h -pkey.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -pkey.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -pkey.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h pkey.c +pkey.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +pkey.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +pkey.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +pkey.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +pkey.o: ../include/openssl/pem.h ../include/openssl/pem2.h +pkey.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +pkey.o: ../include/openssl/sha.h ../include/openssl/sm2.h +pkey.o: ../include/openssl/sm3.h ../include/openssl/stack.h +pkey.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +pkey.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +pkey.o: ../include/openssl/x509v3.h apps.h pkey.c pkeyparam.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h pkeyparam.o: ../include/openssl/buffer.h ../include/openssl/conf.h pkeyparam.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h pkeyparam.o: ../include/openssl/ec.h ../include/openssl/ecdh.h pkeyparam.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h pkeyparam.o: ../include/openssl/err.h ../include/openssl/evp.h -pkeyparam.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -pkeyparam.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -pkeyparam.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -pkeyparam.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -pkeyparam.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -pkeyparam.o: ../include/openssl/safestack.h ../include/openssl/sha.h -pkeyparam.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -pkeyparam.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -pkeyparam.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h -pkeyparam.o: pkeyparam.c +pkeyparam.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +pkeyparam.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +pkeyparam.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +pkeyparam.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +pkeyparam.o: ../include/openssl/pem.h ../include/openssl/pem2.h +pkeyparam.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +pkeyparam.o: ../include/openssl/sha.h ../include/openssl/sm2.h +pkeyparam.o: ../include/openssl/sm3.h ../include/openssl/stack.h +pkeyparam.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +pkeyparam.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +pkeyparam.o: ../include/openssl/x509v3.h apps.h pkeyparam.c pkeyutl.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h pkeyutl.o: ../include/openssl/buffer.h ../include/openssl/conf.h pkeyutl.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h pkeyutl.o: ../include/openssl/ec.h ../include/openssl/ecdh.h pkeyutl.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h pkeyutl.o: ../include/openssl/err.h ../include/openssl/evp.h -pkeyutl.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -pkeyutl.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -pkeyutl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -pkeyutl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -pkeyutl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -pkeyutl.o: ../include/openssl/safestack.h ../include/openssl/sha.h -pkeyutl.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -pkeyutl.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -pkeyutl.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h -pkeyutl.o: pkeyutl.c +pkeyutl.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +pkeyutl.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +pkeyutl.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +pkeyutl.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +pkeyutl.o: ../include/openssl/pem.h ../include/openssl/pem2.h +pkeyutl.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +pkeyutl.o: ../include/openssl/sha.h ../include/openssl/sm2.h +pkeyutl.o: ../include/openssl/sm3.h ../include/openssl/stack.h +pkeyutl.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +pkeyutl.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +pkeyutl.o: ../include/openssl/x509v3.h apps.h pkeyutl.c prime.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h prime.o: ../include/openssl/bn.h ../include/openssl/buffer.h prime.o: ../include/openssl/conf.h ../include/openssl/crypto.h prime.o: ../include/openssl/e_os2.h ../include/openssl/ec.h prime.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h -prime.o: ../include/openssl/engine.h ../include/openssl/evp.h +prime.o: ../include/openssl/engine.h ../include/openssl/err.h +prime.o: ../include/openssl/evp.h ../include/openssl/kdf.h prime.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h prime.o: ../include/openssl/objects.h ../include/openssl/ocsp.h prime.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h prime.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h prime.o: ../include/openssl/safestack.h ../include/openssl/sha.h +prime.o: ../include/openssl/sm2.h ../include/openssl/sm3.h prime.o: ../include/openssl/stack.h ../include/openssl/symhacks.h prime.o: ../include/openssl/txt_db.h ../include/openssl/x509.h prime.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h @@ -723,15 +771,16 @@ rand.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h rand.o: ../include/openssl/ec.h ../include/openssl/ecdh.h rand.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h rand.o: ../include/openssl/err.h ../include/openssl/evp.h -rand.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -rand.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -rand.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -rand.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h -rand.o: ../include/openssl/rand.h ../include/openssl/safestack.h -rand.o: ../include/openssl/sha.h ../include/openssl/stack.h -rand.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h -rand.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -rand.o: ../include/openssl/x509v3.h apps.h rand.c +rand.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +rand.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +rand.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +rand.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +rand.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h +rand.o: ../include/openssl/safestack.h ../include/openssl/sha.h +rand.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +rand.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +rand.o: ../include/openssl/txt_db.h ../include/openssl/x509.h +rand.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h rand.c req.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h req.o: ../include/openssl/bn.h ../include/openssl/buffer.h req.o: ../include/openssl/conf.h ../include/openssl/crypto.h @@ -739,46 +788,51 @@ req.o: ../include/openssl/dh.h ../include/openssl/dsa.h req.o: ../include/openssl/e_os2.h ../include/openssl/ec.h req.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h req.o: ../include/openssl/engine.h ../include/openssl/err.h -req.o: ../include/openssl/evp.h ../include/openssl/lhash.h -req.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -req.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -req.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -req.o: ../include/openssl/pem.h ../include/openssl/pem2.h -req.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h +req.o: ../include/openssl/evp.h ../include/openssl/kdf.h +req.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +req.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +req.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +req.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +req.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h req.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -req.o: ../include/openssl/sha.h ../include/openssl/stack.h +req.o: ../include/openssl/sha.h ../include/openssl/sm2.h +req.o: ../include/openssl/sm3.h ../include/openssl/stack.h req.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h -req.o: ../include/openssl/ui.h ../include/openssl/x509.h -req.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h req.c +req.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +req.o: ../include/openssl/x509v3.h apps.h req.c rsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h rsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h rsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h rsa.o: ../include/openssl/e_os2.h ../include/openssl/ec.h rsa.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h rsa.o: ../include/openssl/engine.h ../include/openssl/err.h -rsa.o: ../include/openssl/evp.h ../include/openssl/lhash.h -rsa.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -rsa.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -rsa.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -rsa.o: ../include/openssl/pem.h ../include/openssl/pem2.h -rsa.o: ../include/openssl/pkcs7.h ../include/openssl/rsa.h -rsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h -rsa.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -rsa.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -rsa.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h rsa.c +rsa.o: ../include/openssl/evp.h ../include/openssl/kdf.h +rsa.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +rsa.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +rsa.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +rsa.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +rsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +rsa.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +rsa.o: ../include/openssl/sha.h ../include/openssl/sm2.h +rsa.o: ../include/openssl/sm3.h ../include/openssl/stack.h +rsa.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +rsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +rsa.o: ../include/openssl/x509v3.h apps.h rsa.c rsautl.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h -rsautl.o: ../include/openssl/buffer.h ../include/openssl/conf.h -rsautl.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h -rsautl.o: ../include/openssl/ec.h ../include/openssl/ecdh.h -rsautl.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h -rsautl.o: ../include/openssl/err.h ../include/openssl/evp.h +rsautl.o: ../include/openssl/bn.h ../include/openssl/buffer.h +rsautl.o: ../include/openssl/conf.h ../include/openssl/crypto.h +rsautl.o: ../include/openssl/e_os2.h ../include/openssl/ec.h +rsautl.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h +rsautl.o: ../include/openssl/engine.h ../include/openssl/err.h +rsautl.o: ../include/openssl/evp.h ../include/openssl/kdf.h rsautl.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h rsautl.o: ../include/openssl/objects.h ../include/openssl/ocsp.h rsautl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h rsautl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h rsautl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h rsautl.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -rsautl.o: ../include/openssl/sha.h ../include/openssl/stack.h +rsautl.o: ../include/openssl/sha.h ../include/openssl/sm2.h +rsautl.o: ../include/openssl/sm3.h ../include/openssl/stack.h rsautl.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h rsautl.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h rsautl.o: ../include/openssl/x509v3.h apps.h rsautl.c @@ -789,7 +843,8 @@ s_cb.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s_cb.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s_cb.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h s_cb.o: ../include/openssl/err.h ../include/openssl/evp.h -s_cb.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +s_cb.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +s_cb.o: ../include/openssl/kdf.h ../include/openssl/kssl.h s_cb.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h s_cb.o: ../include/openssl/objects.h ../include/openssl/ocsp.h s_cb.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -797,6 +852,7 @@ s_cb.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s_cb.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s_cb.o: ../include/openssl/pqueue.h ../include/openssl/rand.h s_cb.o: ../include/openssl/safestack.h ../include/openssl/sha.h +s_cb.o: ../include/openssl/sm2.h ../include/openssl/sm3.h s_cb.o: ../include/openssl/srtp.h ../include/openssl/ssl.h s_cb.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h s_cb.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -811,7 +867,8 @@ s_client.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h s_client.o: ../include/openssl/e_os2.h ../include/openssl/ec.h s_client.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h s_client.o: ../include/openssl/engine.h ../include/openssl/err.h -s_client.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s_client.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s_client.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s_client.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s_client.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s_client.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h @@ -819,7 +876,8 @@ s_client.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h s_client.o: ../include/openssl/pem.h ../include/openssl/pem2.h s_client.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h s_client.o: ../include/openssl/rand.h ../include/openssl/safestack.h -s_client.o: ../include/openssl/sha.h ../include/openssl/srp.h +s_client.o: ../include/openssl/sha.h ../include/openssl/sm2.h +s_client.o: ../include/openssl/sm3.h ../include/openssl/srp.h s_client.o: ../include/openssl/srtp.h ../include/openssl/ssl.h s_client.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h s_client.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -831,25 +889,26 @@ s_server.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h s_server.o: ../include/openssl/bn.h ../include/openssl/buffer.h s_server.o: ../include/openssl/comp.h ../include/openssl/conf.h s_server.o: ../include/openssl/crypto.h ../include/openssl/dh.h -s_server.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h -s_server.o: ../include/openssl/e_os2.h ../include/openssl/ec.h -s_server.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h -s_server.o: ../include/openssl/engine.h ../include/openssl/err.h -s_server.o: ../include/openssl/evp.h ../include/openssl/hmac.h -s_server.o: ../include/openssl/kssl.h ../include/openssl/lhash.h -s_server.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -s_server.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -s_server.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -s_server.o: ../include/openssl/pem.h ../include/openssl/pem2.h -s_server.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h -s_server.o: ../include/openssl/rand.h ../include/openssl/rsa.h -s_server.o: ../include/openssl/safestack.h ../include/openssl/sha.h -s_server.o: ../include/openssl/srp.h ../include/openssl/srtp.h -s_server.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h -s_server.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h -s_server.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -s_server.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h -s_server.o: ../include/openssl/ui.h ../include/openssl/x509.h +s_server.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h +s_server.o: ../include/openssl/ec.h ../include/openssl/ecdh.h +s_server.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h +s_server.o: ../include/openssl/err.h ../include/openssl/evp.h +s_server.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +s_server.o: ../include/openssl/kdf.h ../include/openssl/kssl.h +s_server.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +s_server.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +s_server.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +s_server.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +s_server.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +s_server.o: ../include/openssl/pqueue.h ../include/openssl/rand.h +s_server.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +s_server.o: ../include/openssl/sha.h ../include/openssl/sm2.h +s_server.o: ../include/openssl/sm3.h ../include/openssl/srp.h +s_server.o: ../include/openssl/srtp.h ../include/openssl/ssl.h +s_server.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h +s_server.o: ../include/openssl/ssl3.h ../include/openssl/stack.h +s_server.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h +s_server.o: ../include/openssl/txt_db.h ../include/openssl/x509.h s_server.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h s_server.o: s_apps.h s_server.c timeouts.h s_socket.o: ../e_os.h ../e_os2.h ../include/openssl/asn1.h @@ -858,21 +917,24 @@ s_socket.o: ../include/openssl/comp.h ../include/openssl/conf.h s_socket.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h s_socket.o: ../include/openssl/e_os2.h ../include/openssl/ec.h s_socket.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h -s_socket.o: ../include/openssl/engine.h ../include/openssl/evp.h -s_socket.o: ../include/openssl/hmac.h ../include/openssl/kssl.h -s_socket.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -s_socket.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -s_socket.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -s_socket.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -s_socket.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -s_socket.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h -s_socket.o: ../include/openssl/sha.h ../include/openssl/srtp.h -s_socket.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h -s_socket.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h -s_socket.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -s_socket.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h -s_socket.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -s_socket.o: ../include/openssl/x509v3.h apps.h s_apps.h s_socket.c +s_socket.o: ../include/openssl/engine.h ../include/openssl/err.h +s_socket.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s_socket.o: ../include/openssl/hmac.h ../include/openssl/kdf.h +s_socket.o: ../include/openssl/kssl.h ../include/openssl/lhash.h +s_socket.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +s_socket.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +s_socket.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +s_socket.o: ../include/openssl/pem.h ../include/openssl/pem2.h +s_socket.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h +s_socket.o: ../include/openssl/safestack.h ../include/openssl/sha.h +s_socket.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +s_socket.o: ../include/openssl/srtp.h ../include/openssl/ssl.h +s_socket.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h +s_socket.o: ../include/openssl/ssl3.h ../include/openssl/stack.h +s_socket.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h +s_socket.o: ../include/openssl/txt_db.h ../include/openssl/x509.h +s_socket.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h +s_socket.o: s_apps.h s_socket.c s_time.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h s_time.o: ../include/openssl/buffer.h ../include/openssl/comp.h s_time.o: ../include/openssl/conf.h ../include/openssl/crypto.h @@ -880,14 +942,16 @@ s_time.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s_time.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s_time.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h s_time.o: ../include/openssl/err.h ../include/openssl/evp.h -s_time.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +s_time.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +s_time.o: ../include/openssl/kdf.h ../include/openssl/kssl.h s_time.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h s_time.o: ../include/openssl/objects.h ../include/openssl/ocsp.h s_time.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h s_time.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s_time.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s_time.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h -s_time.o: ../include/openssl/sha.h ../include/openssl/srtp.h +s_time.o: ../include/openssl/sha.h ../include/openssl/sm2.h +s_time.o: ../include/openssl/sm3.h ../include/openssl/srtp.h s_time.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h s_time.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h s_time.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -901,14 +965,16 @@ sess_id.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h sess_id.o: ../include/openssl/ec.h ../include/openssl/ecdh.h sess_id.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h sess_id.o: ../include/openssl/err.h ../include/openssl/evp.h -sess_id.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +sess_id.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +sess_id.o: ../include/openssl/kdf.h ../include/openssl/kssl.h sess_id.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h sess_id.o: ../include/openssl/objects.h ../include/openssl/ocsp.h sess_id.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h sess_id.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h sess_id.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h sess_id.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h -sess_id.o: ../include/openssl/sha.h ../include/openssl/srtp.h +sess_id.o: ../include/openssl/sha.h ../include/openssl/sm2.h +sess_id.o: ../include/openssl/sm3.h ../include/openssl/srtp.h sess_id.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h sess_id.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h sess_id.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -921,32 +987,31 @@ smime.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h smime.o: ../include/openssl/ec.h ../include/openssl/ecdh.h smime.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h smime.o: ../include/openssl/err.h ../include/openssl/evp.h -smime.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -smime.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -smime.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -smime.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -smime.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -smime.o: ../include/openssl/safestack.h ../include/openssl/sha.h -smime.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -smime.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -smime.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h -smime.o: smime.c +smime.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +smime.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +smime.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +smime.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +smime.o: ../include/openssl/pem.h ../include/openssl/pem2.h +smime.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +smime.o: ../include/openssl/sha.h ../include/openssl/sm2.h +smime.o: ../include/openssl/sm3.h ../include/openssl/stack.h +smime.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +smime.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +smime.o: ../include/openssl/x509v3.h apps.h smime.c speed.o: ../e_os.h ../include/openssl/aes.h ../include/openssl/asn1.h speed.o: ../include/openssl/bio.h ../include/openssl/blowfish.h speed.o: ../include/openssl/bn.h ../include/openssl/buffer.h speed.o: ../include/openssl/camellia.h ../include/openssl/cast.h speed.o: ../include/openssl/conf.h ../include/openssl/crypto.h speed.o: ../include/openssl/des.h ../include/openssl/des_old.h -speed.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h -speed.o: ../include/openssl/ec.h ../include/openssl/ecdh.h -speed.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h -speed.o: ../include/openssl/err.h ../include/openssl/evp.h -speed.o: ../include/openssl/hmac.h ../include/openssl/idea.h +speed.o: ../include/openssl/dh.h ../include/openssl/dsa.h +speed.o: ../include/openssl/e_os2.h ../include/openssl/ec.h +speed.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h +speed.o: ../include/openssl/engine.h ../include/openssl/err.h +speed.o: ../include/openssl/evp.h ../include/openssl/hmac.h +speed.o: ../include/openssl/idea.h ../include/openssl/kdf.h speed.o: ../include/openssl/lhash.h ../include/openssl/md4.h speed.o: ../include/openssl/md5.h ../include/openssl/mdc2.h -speed.o: ../include/openssl/sm3.h ../include/openssl/sms4.h -speed.o: ../include/openssl/zuc.h -speed.o: ../include/openssl/cpk.h speed.o: ../include/openssl/modes.h ../include/openssl/obj_mac.h speed.o: ../include/openssl/objects.h ../include/openssl/ocsp.h speed.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -955,6 +1020,7 @@ speed.o: ../include/openssl/rand.h ../include/openssl/rc2.h speed.o: ../include/openssl/rc4.h ../include/openssl/ripemd.h speed.o: ../include/openssl/rsa.h ../include/openssl/safestack.h speed.o: ../include/openssl/seed.h ../include/openssl/sha.h +speed.o: ../include/openssl/sm2.h ../include/openssl/sm3.h speed.o: ../include/openssl/stack.h ../include/openssl/symhacks.h speed.o: ../include/openssl/txt_db.h ../include/openssl/ui.h speed.o: ../include/openssl/ui_compat.h ../include/openssl/whrlpool.h @@ -966,31 +1032,34 @@ spkac.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h spkac.o: ../include/openssl/ec.h ../include/openssl/ecdh.h spkac.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h spkac.o: ../include/openssl/err.h ../include/openssl/evp.h -spkac.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -spkac.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -spkac.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -spkac.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -spkac.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -spkac.o: ../include/openssl/safestack.h ../include/openssl/sha.h -spkac.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -spkac.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -spkac.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h -spkac.o: spkac.c +spkac.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +spkac.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +spkac.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +spkac.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +spkac.o: ../include/openssl/pem.h ../include/openssl/pem2.h +spkac.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +spkac.o: ../include/openssl/sha.h ../include/openssl/sm2.h +spkac.o: ../include/openssl/sm3.h ../include/openssl/stack.h +spkac.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +spkac.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +spkac.o: ../include/openssl/x509v3.h apps.h spkac.c srp.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h srp.o: ../include/openssl/bn.h ../include/openssl/buffer.h srp.o: ../include/openssl/conf.h ../include/openssl/crypto.h srp.o: ../include/openssl/e_os2.h ../include/openssl/ec.h srp.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h srp.o: ../include/openssl/engine.h ../include/openssl/err.h -srp.o: ../include/openssl/evp.h ../include/openssl/lhash.h -srp.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -srp.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -srp.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -srp.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h -srp.o: ../include/openssl/sha.h ../include/openssl/srp.h -srp.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -srp.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -srp.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h srp.c +srp.o: ../include/openssl/evp.h ../include/openssl/kdf.h +srp.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +srp.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +srp.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +srp.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h +srp.o: ../include/openssl/safestack.h ../include/openssl/sha.h +srp.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +srp.o: ../include/openssl/srp.h ../include/openssl/stack.h +srp.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +srp.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +srp.o: ../include/openssl/x509v3.h apps.h srp.c ts.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h ts.o: ../include/openssl/bn.h ../include/openssl/buffer.h ts.o: ../include/openssl/conf.h ../include/openssl/crypto.h @@ -998,33 +1067,36 @@ ts.o: ../include/openssl/dh.h ../include/openssl/dsa.h ts.o: ../include/openssl/e_os2.h ../include/openssl/ec.h ts.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h ts.o: ../include/openssl/engine.h ../include/openssl/err.h -ts.o: ../include/openssl/evp.h ../include/openssl/lhash.h -ts.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -ts.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h -ts.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -ts.o: ../include/openssl/pem.h ../include/openssl/pem2.h -ts.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h -ts.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -ts.o: ../include/openssl/sha.h ../include/openssl/stack.h -ts.o: ../include/openssl/symhacks.h ../include/openssl/ts.h -ts.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -ts.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h ts.c +ts.o: ../include/openssl/evp.h ../include/openssl/kdf.h +ts.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +ts.o: ../include/openssl/objects.h ../include/openssl/ocsp.h +ts.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +ts.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +ts.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +ts.o: ../include/openssl/rand.h ../include/openssl/rsa.h +ts.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ts.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +ts.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +ts.o: ../include/openssl/ts.h ../include/openssl/txt_db.h +ts.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +ts.o: ../include/openssl/x509v3.h apps.h ts.c verify.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h verify.o: ../include/openssl/buffer.h ../include/openssl/conf.h verify.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h verify.o: ../include/openssl/ec.h ../include/openssl/ecdh.h verify.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h verify.o: ../include/openssl/err.h ../include/openssl/evp.h -verify.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -verify.o: ../include/openssl/objects.h ../include/openssl/ocsp.h -verify.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -verify.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -verify.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -verify.o: ../include/openssl/safestack.h ../include/openssl/sha.h -verify.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -verify.o: ../include/openssl/txt_db.h ../include/openssl/x509.h -verify.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h -verify.o: verify.c +verify.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +verify.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +verify.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h +verify.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +verify.o: ../include/openssl/pem.h ../include/openssl/pem2.h +verify.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +verify.o: ../include/openssl/sha.h ../include/openssl/sm2.h +verify.o: ../include/openssl/sm3.h ../include/openssl/stack.h +verify.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h +verify.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +verify.o: ../include/openssl/x509v3.h apps.h verify.c version.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h version.o: ../include/openssl/blowfish.h ../include/openssl/bn.h version.o: ../include/openssl/buffer.h ../include/openssl/conf.h @@ -1032,13 +1104,15 @@ version.o: ../include/openssl/crypto.h ../include/openssl/des.h version.o: ../include/openssl/des_old.h ../include/openssl/e_os2.h version.o: ../include/openssl/ec.h ../include/openssl/ecdh.h version.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h -version.o: ../include/openssl/evp.h ../include/openssl/idea.h +version.o: ../include/openssl/err.h ../include/openssl/evp.h +version.o: ../include/openssl/idea.h ../include/openssl/kdf.h version.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h version.o: ../include/openssl/objects.h ../include/openssl/ocsp.h version.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h version.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h version.o: ../include/openssl/rc4.h ../include/openssl/safestack.h -version.o: ../include/openssl/sha.h ../include/openssl/stack.h +version.o: ../include/openssl/sha.h ../include/openssl/sm2.h +version.o: ../include/openssl/sm3.h ../include/openssl/stack.h version.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h version.o: ../include/openssl/ui.h ../include/openssl/ui_compat.h version.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h @@ -1046,17 +1120,19 @@ version.o: ../include/openssl/x509v3.h apps.h version.c x509.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h x509.o: ../include/openssl/bn.h ../include/openssl/buffer.h x509.o: ../include/openssl/conf.h ../include/openssl/crypto.h -x509.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h -x509.o: ../include/openssl/ec.h ../include/openssl/ecdh.h -x509.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h -x509.o: ../include/openssl/err.h ../include/openssl/evp.h +x509.o: ../include/openssl/dh.h ../include/openssl/dsa.h +x509.o: ../include/openssl/e_os2.h ../include/openssl/ec.h +x509.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h +x509.o: ../include/openssl/engine.h ../include/openssl/err.h +x509.o: ../include/openssl/evp.h ../include/openssl/kdf.h x509.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h x509.o: ../include/openssl/objects.h ../include/openssl/ocsp.h x509.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h x509.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h x509.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h x509.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -x509.o: ../include/openssl/sha.h ../include/openssl/stack.h +x509.o: ../include/openssl/sha.h ../include/openssl/sm2.h +x509.o: ../include/openssl/sm3.h ../include/openssl/stack.h x509.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h x509.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h x509.o: ../include/openssl/x509v3.h apps.h x509.c diff --git a/crypto/asn1/Makefile b/crypto/asn1/Makefile index 330fe81b..d2ca2522 100644 --- a/crypto/asn1/Makefile +++ b/crypto/asn1/Makefile @@ -146,12 +146,13 @@ a_digest.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h a_digest.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h a_digest.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h a_digest.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -a_digest.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -a_digest.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -a_digest.o: ../../include/openssl/opensslconf.h +a_digest.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +a_digest.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +a_digest.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h a_digest.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h a_digest.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -a_digest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +a_digest.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +a_digest.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h a_digest.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h a_digest.o: ../../include/openssl/x509_vfy.h ../cryptlib.h a_digest.c a_dup.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h @@ -239,27 +240,29 @@ a_sign.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h a_sign.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h a_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h a_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -a_sign.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -a_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -a_sign.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -a_sign.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -a_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -a_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -a_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -a_sign.o: ../cryptlib.h a_sign.c asn1_locl.h +a_sign.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +a_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +a_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +a_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +a_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +a_sign.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +a_sign.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +a_sign.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +a_sign.o: ../../include/openssl/x509_vfy.h ../cryptlib.h a_sign.c asn1_locl.h a_strex.o: ../../e_os.h ../../include/openssl/asn1.h a_strex.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h a_strex.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h a_strex.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h a_strex.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -a_strex.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -a_strex.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -a_strex.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -a_strex.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -a_strex.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -a_strex.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -a_strex.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -a_strex.o: ../cryptlib.h a_strex.c charmap.h +a_strex.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +a_strex.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +a_strex.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +a_strex.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +a_strex.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +a_strex.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +a_strex.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +a_strex.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +a_strex.o: ../../include/openssl/x509_vfy.h ../cryptlib.h a_strex.c charmap.h a_strnid.o: ../../e_os.h ../../include/openssl/asn1.h a_strnid.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h a_strnid.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h @@ -308,11 +311,13 @@ a_verify.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h a_verify.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h a_verify.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h a_verify.o: ../../include/openssl/err.h ../../include/openssl/evp.h -a_verify.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -a_verify.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +a_verify.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +a_verify.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +a_verify.o: ../../include/openssl/opensslconf.h a_verify.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h a_verify.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -a_verify.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +a_verify.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +a_verify.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h a_verify.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h a_verify.o: ../../include/openssl/x509_vfy.h ../cryptlib.h a_verify.c a_verify.o: asn1_locl.h @@ -322,12 +327,14 @@ ameth_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h ameth_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ameth_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ameth_lib.o: ../../include/openssl/engine.h ../../include/openssl/err.h -ameth_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -ameth_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +ameth_lib.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +ameth_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ameth_lib.o: ../../include/openssl/objects.h ameth_lib.o: ../../include/openssl/opensslconf.h ameth_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h ameth_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -ameth_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ameth_lib.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ameth_lib.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ameth_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h ameth_lib.o: ../../include/openssl/x509_vfy.h ../cryptlib.h ameth_lib.c ameth_lib.o: asn1_locl.h @@ -344,11 +351,13 @@ asn1_gen.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h asn1_gen.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h asn1_gen.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h asn1_gen.o: ../../include/openssl/err.h ../../include/openssl/evp.h -asn1_gen.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -asn1_gen.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +asn1_gen.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +asn1_gen.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +asn1_gen.o: ../../include/openssl/opensslconf.h asn1_gen.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h asn1_gen.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -asn1_gen.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +asn1_gen.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +asn1_gen.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h asn1_gen.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h asn1_gen.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h asn1_gen.o: ../cryptlib.h asn1_gen.c @@ -375,11 +384,13 @@ asn_mime.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h asn_mime.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h asn_mime.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h asn_mime.o: ../../include/openssl/err.h ../../include/openssl/evp.h -asn_mime.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -asn_mime.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +asn_mime.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +asn_mime.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +asn_mime.o: ../../include/openssl/opensslconf.h asn_mime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h asn_mime.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h asn_mime.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +asn_mime.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h asn_mime.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h asn_mime.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h asn_mime.o: ../cryptlib.h asn1_locl.h asn_mime.c @@ -389,12 +400,13 @@ asn_moid.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h asn_moid.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h asn_moid.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h asn_moid.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -asn_moid.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -asn_moid.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -asn_moid.o: ../../include/openssl/opensslconf.h +asn_moid.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +asn_moid.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +asn_moid.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h asn_moid.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h asn_moid.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -asn_moid.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +asn_moid.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +asn_moid.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h asn_moid.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h asn_moid.o: ../../include/openssl/x509_vfy.h ../cryptlib.h asn_moid.c asn_pack.o: ../../e_os.h ../../include/openssl/asn1.h @@ -424,13 +436,15 @@ d2i_pr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h d2i_pr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h d2i_pr.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h d2i_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h -d2i_pr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -d2i_pr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -d2i_pr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -d2i_pr.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -d2i_pr.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -d2i_pr.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -d2i_pr.o: ../../include/openssl/x509_vfy.h ../cryptlib.h asn1_locl.h d2i_pr.c +d2i_pr.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +d2i_pr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +d2i_pr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +d2i_pr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +d2i_pr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +d2i_pr.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +d2i_pr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +d2i_pr.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +d2i_pr.o: ../cryptlib.h asn1_locl.h d2i_pr.c d2i_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h d2i_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h d2i_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h @@ -477,13 +491,15 @@ i2d_pr.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h i2d_pr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h i2d_pr.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h i2d_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h -i2d_pr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -i2d_pr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -i2d_pr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -i2d_pr.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -i2d_pr.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -i2d_pr.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -i2d_pr.o: ../../include/openssl/x509_vfy.h ../cryptlib.h asn1_locl.h i2d_pr.c +i2d_pr.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +i2d_pr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +i2d_pr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +i2d_pr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +i2d_pr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +i2d_pr.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +i2d_pr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +i2d_pr.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +i2d_pr.o: ../cryptlib.h asn1_locl.h i2d_pr.c i2d_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h i2d_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h i2d_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h @@ -501,24 +517,28 @@ n_pkey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h n_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h n_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h n_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -n_pkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -n_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -n_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -n_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -n_pkey.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -n_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -n_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -n_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h n_pkey.c +n_pkey.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +n_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +n_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +n_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +n_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h +n_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +n_pkey.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +n_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +n_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +n_pkey.o: ../cryptlib.h n_pkey.c nsseq.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h nsseq.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h nsseq.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h nsseq.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h -nsseq.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h +nsseq.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h +nsseq.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h nsseq.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h nsseq.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h nsseq.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h nsseq.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -nsseq.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +nsseq.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +nsseq.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h nsseq.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h nsseq.o: ../../include/openssl/x509_vfy.h nsseq.c p5_pbe.o: ../../e_os.h ../../include/openssl/asn1.h @@ -527,25 +547,28 @@ p5_pbe.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h p5_pbe.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h p5_pbe.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h p5_pbe.o: ../../include/openssl/err.h ../../include/openssl/evp.h -p5_pbe.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p5_pbe.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -p5_pbe.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -p5_pbe.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h -p5_pbe.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -p5_pbe.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -p5_pbe.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -p5_pbe.o: ../cryptlib.h p5_pbe.c +p5_pbe.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p5_pbe.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p5_pbe.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +p5_pbe.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +p5_pbe.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h +p5_pbe.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +p5_pbe.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +p5_pbe.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +p5_pbe.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p5_pbe.c p5_pbev2.o: ../../e_os.h ../../include/openssl/asn1.h p5_pbev2.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h p5_pbev2.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h p5_pbev2.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h p5_pbev2.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h p5_pbev2.o: ../../include/openssl/err.h ../../include/openssl/evp.h -p5_pbev2.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p5_pbev2.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +p5_pbev2.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p5_pbev2.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p5_pbev2.o: ../../include/openssl/opensslconf.h p5_pbev2.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h p5_pbev2.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h p5_pbev2.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p5_pbev2.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h p5_pbev2.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h p5_pbev2.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h p5_pbev2.o: ../cryptlib.h p5_pbev2.c @@ -555,41 +578,45 @@ p8_pkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h p8_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h p8_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h p8_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h -p8_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p8_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -p8_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -p8_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -p8_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -p8_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -p8_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p8_pkey.c +p8_pkey.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p8_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p8_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +p8_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +p8_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p8_pkey.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +p8_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +p8_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +p8_pkey.o: ../cryptlib.h p8_pkey.c t_bitst.o: ../../e_os.h ../../include/openssl/asn1.h t_bitst.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h t_bitst.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h t_bitst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h t_bitst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h t_bitst.o: ../../include/openssl/err.h ../../include/openssl/evp.h -t_bitst.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -t_bitst.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -t_bitst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -t_bitst.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -t_bitst.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -t_bitst.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -t_bitst.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -t_bitst.o: ../cryptlib.h t_bitst.c +t_bitst.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +t_bitst.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +t_bitst.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +t_bitst.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +t_bitst.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +t_bitst.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +t_bitst.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +t_bitst.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +t_bitst.o: ../../include/openssl/x509v3.h ../cryptlib.h t_bitst.c t_crl.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h t_crl.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h t_crl.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h t_crl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h t_crl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h t_crl.o: ../../include/openssl/err.h ../../include/openssl/evp.h -t_crl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -t_crl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -t_crl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -t_crl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -t_crl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -t_crl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -t_crl.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -t_crl.o: ../cryptlib.h t_crl.c +t_crl.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +t_crl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +t_crl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +t_crl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +t_crl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +t_crl.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +t_crl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +t_crl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +t_crl.o: ../../include/openssl/x509v3.h ../cryptlib.h t_crl.c t_pkey.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h t_pkey.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h t_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h @@ -605,57 +632,61 @@ t_req.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h t_req.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h t_req.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h t_req.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -t_req.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -t_req.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -t_req.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -t_req.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -t_req.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -t_req.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -t_req.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -t_req.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -t_req.o: ../cryptlib.h t_req.c +t_req.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +t_req.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +t_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +t_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +t_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h +t_req.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +t_req.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +t_req.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +t_req.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +t_req.o: ../../include/openssl/x509v3.h ../cryptlib.h t_req.c t_spki.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h t_spki.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h t_spki.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h t_spki.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h t_spki.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h t_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h -t_spki.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -t_spki.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -t_spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -t_spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h -t_spki.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -t_spki.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -t_spki.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -t_spki.o: ../cryptlib.h t_spki.c +t_spki.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +t_spki.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +t_spki.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +t_spki.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +t_spki.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h +t_spki.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +t_spki.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +t_spki.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +t_spki.o: ../../include/openssl/x509_vfy.h ../cryptlib.h t_spki.c t_x509.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h t_x509.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h t_x509.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h t_x509.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h t_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h t_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -t_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -t_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -t_x509.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -t_x509.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -t_x509.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -t_x509.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -t_x509.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -t_x509.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -t_x509.o: ../cryptlib.h asn1_locl.h t_x509.c +t_x509.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +t_x509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +t_x509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +t_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +t_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h +t_x509.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +t_x509.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +t_x509.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +t_x509.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +t_x509.o: ../../include/openssl/x509v3.h ../cryptlib.h asn1_locl.h t_x509.c t_x509a.o: ../../e_os.h ../../include/openssl/asn1.h t_x509a.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h t_x509a.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h t_x509a.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h t_x509a.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -t_x509a.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -t_x509a.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -t_x509a.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -t_x509a.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -t_x509a.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -t_x509a.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -t_x509a.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -t_x509a.o: ../cryptlib.h t_x509a.c +t_x509a.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +t_x509a.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +t_x509a.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +t_x509a.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +t_x509a.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +t_x509a.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +t_x509a.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +t_x509a.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +t_x509a.o: ../../include/openssl/x509_vfy.h ../cryptlib.h t_x509a.c tasn_dec.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h tasn_dec.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h tasn_dec.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h @@ -695,12 +726,13 @@ tasn_prn.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h tasn_prn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h tasn_prn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h tasn_prn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -tasn_prn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -tasn_prn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -tasn_prn.o: ../../include/openssl/opensslconf.h +tasn_prn.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +tasn_prn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +tasn_prn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h tasn_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h tasn_prn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -tasn_prn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +tasn_prn.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +tasn_prn.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h tasn_prn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h tasn_prn.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h tasn_prn.o: ../cryptlib.h asn1_locl.h tasn_prn.c @@ -722,12 +754,14 @@ x_algor.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h x_algor.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x_algor.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x_algor.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h -x_algor.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h +x_algor.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h +x_algor.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h x_algor.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h x_algor.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x_algor.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x_algor.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x_algor.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x_algor.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x_algor.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x_algor.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x_algor.o: ../../include/openssl/x509_vfy.h x_algor.c x_attrib.o: ../../e_os.h ../../include/openssl/asn1.h @@ -736,11 +770,13 @@ x_attrib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h x_attrib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x_attrib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x_attrib.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x_attrib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x_attrib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +x_attrib.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x_attrib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x_attrib.o: ../../include/openssl/opensslconf.h x_attrib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x_attrib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x_attrib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x_attrib.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x_attrib.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x_attrib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x_attrib.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_attrib.c x_bignum.o: ../../e_os.h ../../include/openssl/asn1.h @@ -758,24 +794,28 @@ x_crl.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h x_crl.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x_crl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x_crl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x_crl.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x_crl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x_crl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -x_crl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -x_crl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -x_crl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -x_crl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -x_crl.o: ../../include/openssl/x509v3.h ../cryptlib.h asn1_locl.h x_crl.c +x_crl.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x_crl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x_crl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +x_crl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +x_crl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +x_crl.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x_crl.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +x_crl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +x_crl.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +x_crl.o: ../cryptlib.h asn1_locl.h x_crl.c x_exten.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h x_exten.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x_exten.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x_exten.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h -x_exten.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h +x_exten.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h +x_exten.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h x_exten.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h x_exten.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x_exten.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x_exten.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x_exten.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x_exten.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x_exten.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x_exten.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x_exten.o: ../../include/openssl/x509_vfy.h x_exten.c x_info.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h @@ -783,13 +823,15 @@ x_info.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h x_info.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x_info.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x_info.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x_info.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -x_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -x_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x_info.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -x_info.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -x_info.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_info.c +x_info.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x_info.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x_info.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +x_info.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +x_info.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +x_info.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +x_info.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +x_info.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +x_info.o: ../cryptlib.h x_info.c x_long.o: ../../e_os.h ../../include/openssl/asn1.h x_long.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h x_long.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h @@ -805,23 +847,27 @@ x_name.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h x_name.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x_name.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x_name.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x_name.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x_name.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -x_name.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -x_name.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x_name.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -x_name.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -x_name.o: ../../include/openssl/x509_vfy.h ../cryptlib.h asn1_locl.h x_name.c +x_name.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x_name.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x_name.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +x_name.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +x_name.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +x_name.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +x_name.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +x_name.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +x_name.o: ../cryptlib.h asn1_locl.h x_name.c x_nx509.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h x_nx509.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x_nx509.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x_nx509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h -x_nx509.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h +x_nx509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h +x_nx509.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h x_nx509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h x_nx509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x_nx509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x_nx509.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x_nx509.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x_nx509.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x_nx509.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x_nx509.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x_nx509.o: ../../include/openssl/x509_vfy.h x_nx509.c x_pkey.o: ../../e_os.h ../../include/openssl/asn1.h @@ -830,25 +876,28 @@ x_pkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h x_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -x_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -x_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -x_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -x_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_pkey.c +x_pkey.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +x_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +x_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +x_pkey.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +x_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +x_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +x_pkey.o: ../cryptlib.h x_pkey.c x_pubkey.o: ../../e_os.h ../../include/openssl/asn1.h x_pubkey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h x_pubkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h x_pubkey.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h x_pubkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x_pubkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x_pubkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x_pubkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x_pubkey.o: ../../include/openssl/opensslconf.h +x_pubkey.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x_pubkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x_pubkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x_pubkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x_pubkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h x_pubkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +x_pubkey.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h x_pubkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h x_pubkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h x_pubkey.o: ../cryptlib.h asn1_locl.h x_pubkey.c @@ -858,76 +907,88 @@ x_req.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h x_req.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x_req.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x_req.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x_req.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -x_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -x_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x_req.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -x_req.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -x_req.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_req.c +x_req.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x_req.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x_req.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +x_req.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +x_req.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +x_req.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +x_req.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +x_req.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +x_req.o: ../cryptlib.h x_req.c x_sig.o: ../../e_os.h ../../include/openssl/asn1.h x_sig.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h x_sig.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h x_sig.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x_sig.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x_sig.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x_sig.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x_sig.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -x_sig.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -x_sig.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x_sig.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -x_sig.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -x_sig.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_sig.c +x_sig.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x_sig.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x_sig.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +x_sig.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +x_sig.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +x_sig.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +x_sig.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +x_sig.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +x_sig.o: ../cryptlib.h x_sig.c x_spki.o: ../../e_os.h ../../include/openssl/asn1.h x_spki.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h x_spki.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h x_spki.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x_spki.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x_spki.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x_spki.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -x_spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -x_spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x_spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -x_spki.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -x_spki.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_spki.c +x_spki.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x_spki.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x_spki.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +x_spki.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +x_spki.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +x_spki.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +x_spki.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +x_spki.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +x_spki.o: ../cryptlib.h x_spki.c x_val.o: ../../e_os.h ../../include/openssl/asn1.h x_val.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h x_val.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h x_val.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x_val.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x_val.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x_val.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x_val.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -x_val.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -x_val.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x_val.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -x_val.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -x_val.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_val.c +x_val.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x_val.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x_val.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +x_val.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +x_val.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +x_val.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +x_val.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +x_val.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +x_val.o: ../cryptlib.h x_val.c x_x509.o: ../../e_os.h ../../include/openssl/asn1.h x_x509.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h x_x509.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h x_x509.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x_x509.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -x_x509.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -x_x509.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -x_x509.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -x_x509.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -x_x509.o: ../../include/openssl/x509v3.h ../cryptlib.h x_x509.c +x_x509.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x_x509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x_x509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +x_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +x_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +x_x509.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x_x509.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +x_x509.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +x_x509.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +x_x509.o: ../cryptlib.h x_x509.c x_x509a.o: ../../e_os.h ../../include/openssl/asn1.h x_x509a.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h x_x509a.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h x_x509a.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x_x509a.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x_x509a.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x_x509a.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x_x509a.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -x_x509a.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -x_x509a.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x_x509a.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -x_x509a.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -x_x509a.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_x509a.c +x_x509a.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x_x509a.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x_x509a.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +x_x509a.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +x_x509a.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +x_x509a.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +x_x509a.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +x_x509a.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +x_x509a.o: ../cryptlib.h x_x509a.c diff --git a/crypto/cbcmac/Makefile b/crypto/cbcmac/Makefile index f550139a..2b6ec686 100644 --- a/crypto/cbcmac/Makefile +++ b/crypto/cbcmac/Makefile @@ -17,8 +17,8 @@ TEST= APPS= LIB=$(TOP)/libcrypto.a -LIBSRC=cbcmac.c cbcm_ameth.c cbcm_pmeth.c -LIBOBJ=cbcmac.o cbcm_ameth.o cbcm_pmeth.o +LIBSRC=cbcmac.c cbcmac_err.c cbcm_ameth.c cbcm_pmeth.c +LIBOBJ=cbcmac.o cbcmac_err.o cbcm_ameth.o cbcm_pmeth.o SRC= $(LIBSRC) @@ -76,38 +76,49 @@ clean: # DO NOT DELETE THIS LINE -- make depend depends on it. -cm_ameth.o: ../../e_os.h ../../include/openssl/asn1.h -cm_ameth.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h -cm_ameth.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h -cm_ameth.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h -cm_ameth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -cm_ameth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -cm_ameth.o: ../../include/openssl/opensslconf.h -cm_ameth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -cm_ameth.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h -cm_ameth.o: ../../include/openssl/symhacks.h ../asn1/asn1_locl.h ../cryptlib.h -cm_ameth.o: cm_ameth.c -cm_pmeth.o: ../../e_os.h ../../include/openssl/asn1.h -cm_pmeth.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h -cm_pmeth.o: ../../include/openssl/cmac.h ../../include/openssl/conf.h -cm_pmeth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h -cm_pmeth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h -cm_pmeth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -cm_pmeth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -cm_pmeth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -cm_pmeth.o: ../../include/openssl/opensslconf.h -cm_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -cm_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -cm_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -cm_pmeth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -cm_pmeth.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -cm_pmeth.o: ../cryptlib.h ../evp/evp_locl.h cm_pmeth.c -cmac.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h -cmac.o: ../../include/openssl/buffer.h ../../include/openssl/cmac.h -cmac.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h -cmac.o: ../../include/openssl/err.h ../../include/openssl/evp.h -cmac.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -cmac.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -cmac.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -cmac.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h -cmac.o: ../../include/openssl/symhacks.h ../cryptlib.h cmac.c +cbcm_ameth.o: ../../e_os.h ../../include/openssl/asn1.h +cbcm_ameth.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h +cbcm_ameth.o: ../../include/openssl/cbcmac.h ../../include/openssl/crypto.h +cbcm_ameth.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h +cbcm_ameth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +cbcm_ameth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +cbcm_ameth.o: ../../include/openssl/opensslconf.h +cbcm_ameth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +cbcm_ameth.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h +cbcm_ameth.o: ../../include/openssl/symhacks.h ../asn1/asn1_locl.h +cbcm_ameth.o: ../cryptlib.h cbcm_ameth.c +cbcm_pmeth.o: ../../e_os.h ../../include/openssl/asn1.h +cbcm_pmeth.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h +cbcm_pmeth.o: ../../include/openssl/cbcmac.h ../../include/openssl/conf.h +cbcm_pmeth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h +cbcm_pmeth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h +cbcm_pmeth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h +cbcm_pmeth.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +cbcm_pmeth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +cbcm_pmeth.o: ../../include/openssl/objects.h +cbcm_pmeth.o: ../../include/openssl/opensslconf.h +cbcm_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +cbcm_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +cbcm_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cbcm_pmeth.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +cbcm_pmeth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +cbcm_pmeth.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +cbcm_pmeth.o: ../cryptlib.h ../evp/evp_locl.h cbcm_pmeth.c +cbcmac.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +cbcmac.o: ../../include/openssl/cbcmac.h ../../include/openssl/crypto.h +cbcmac.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h +cbcmac.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +cbcmac.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +cbcmac.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +cbcmac.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h +cbcmac.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +cbcmac.o: cbcmac.c +cbcmac_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +cbcmac_err.o: ../../include/openssl/cbcmac.h ../../include/openssl/crypto.h +cbcmac_err.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h +cbcmac_err.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +cbcmac_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +cbcmac_err.o: ../../include/openssl/opensslconf.h +cbcmac_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +cbcmac_err.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h +cbcmac_err.o: ../../include/openssl/symhacks.h cbcmac_err.c diff --git a/crypto/cbcmac/cbcmac.c b/crypto/cbcmac/cbcmac.c index a57ba2e3..2e769f4a 100644 --- a/crypto/cbcmac/cbcmac.c +++ b/crypto/cbcmac/cbcmac.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -55,10 +56,12 @@ int CBCMAC_Init(CBCMAC_CTX *ctx, const void *key, size_t keylen, { int i, block_size; - if (!EVP_EncryptInit_ex(&ctx->cipher_ctx, cipher, key, NULL, eng)) { + if (!EVP_EncryptInit_ex(&ctx->cipher_ctx, cipher, eng, key, NULL)) { + CBCMACerr(CBCMAC_F_CBCMAC_INIT, CBCMAC_R_CIPHER_CTX_INIT_FAILED); return 0; } if (EVP_CIPHER_CTX_mode(&ctx->cipher_ctx) != EVP_CIPH_ECB_MODE) { + CBCMACerr(CBCMAC_F_CBCMAC_INIT, CBCMAC_R_CIPHER_NOT_ECB_MODE); return 0; } ctx->worklen = 0; @@ -90,6 +93,7 @@ int CBCMAC_Update(CBCMAC_CTX *ctx, const void *data, size_t datalen) } if (!EVP_EncryptUpdate(&ctx->cipher_ctx, ctx->cbcstate, &len, ctx->workspace, block_size)) { + CBCMACerr(CBCMAC_F_CBCMAC_UPDATE, ERR_R_EVP_LIB); return 0; } } @@ -127,7 +131,10 @@ int CBCMAC_Final(CBCMAC_CTX *ctx, unsigned char *out, size_t *outlen) for (i = ctx->worklen; i < block_size; i++) { ctx->workspace[i] = ctx->cbcstate[i]; } - EVP_EncryptUpdate(&(ctx->cipher_ctx), out, outlen, ctx->workspace, block_size); + if (!EVP_EncryptUpdate(&(ctx->cipher_ctx), out, outlen, ctx->workspace, block_size)) { + CBCMACerr(CBCMAC_F_CBCMAC_FINAL, ERR_R_EVP_LIB); + return 0; + } } else { for (i = 0; i < block_size; i++) { @@ -135,7 +142,7 @@ int CBCMAC_Final(CBCMAC_CTX *ctx, unsigned char *out, size_t *outlen) } } - return 0; + return 1; } int CBCMAC_resume(CBCMAC_CTX *ctx) diff --git a/crypto/cbcmac/cbcmac.h b/crypto/cbcmac/cbcmac.h index bc718a79..9eda2e40 100644 --- a/crypto/cbcmac/cbcmac.h +++ b/crypto/cbcmac/cbcmac.h @@ -53,6 +53,7 @@ * 2. the message length should be multiple of block size * 3. the implementation do not add padding */ + #ifndef HEADER_CBCMAC_H #define HEADER_CBCMAC_H @@ -77,8 +78,25 @@ int CBCMAC_Update(CBCMAC_CTX *ctx, const void *data, size_t datalen); int CBCMAC_Final(CBCMAC_CTX *ctx, unsigned char *out, size_t *outlen); int CBCMAC_resume(CBCMAC_CTX *ctx); +/* 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_CBCMAC_strings(void); + +/* Error codes for the CBCMAC functions. */ + +/* Function codes. */ +# define CBCMAC_F_CBCMAC_FINAL 100 +# define CBCMAC_F_CBCMAC_INIT 101 +# define CBCMAC_F_CBCMAC_UPDATE 102 + +/* Reason codes. */ +# define CBCMAC_R_CIPHER_CTX_INIT_FAILED 100 +# define CBCMAC_R_CIPHER_NOT_ECB_MODE 101 + #ifdef __cplusplus } #endif #endif - diff --git a/crypto/cbcmac/cbcmac_err.c b/crypto/cbcmac/cbcmac_err.c new file mode 100644 index 00000000..4b163d72 --- /dev/null +++ b/crypto/cbcmac/cbcmac_err.c @@ -0,0 +1,96 @@ +/* crypto/cbcmac/cbcmac_err.c */ +/* ==================================================================== + * Copyright (c) 1999-2016 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). + * + */ + +/* + * NOTE: this file was auto generated by the mkerr.pl script: any changes + * made to it will be overwritten when the script next updates this file, + * only reason strings will be preserved. + */ + +#include +#include +#include + +/* BEGIN ERROR CODES */ +#ifndef OPENSSL_NO_ERR + +# define ERR_FUNC(func) ERR_PACK(ERR_LIB_CBCMAC,func,0) +# define ERR_REASON(reason) ERR_PACK(ERR_LIB_CBCMAC,0,reason) + +static ERR_STRING_DATA CBCMAC_str_functs[] = { + {ERR_FUNC(CBCMAC_F_CBCMAC_FINAL), "CBCMAC_Final"}, + {ERR_FUNC(CBCMAC_F_CBCMAC_INIT), "CBCMAC_Init"}, + {ERR_FUNC(CBCMAC_F_CBCMAC_UPDATE), "CBCMAC_Update"}, + {0, NULL} +}; + +static ERR_STRING_DATA CBCMAC_str_reasons[] = { + {ERR_REASON(CBCMAC_R_CIPHER_CTX_INIT_FAILED), "cipher ctx init failed"}, + {ERR_REASON(CBCMAC_R_CIPHER_NOT_ECB_MODE), "cipher not ecb mode"}, + {0, NULL} +}; + +#endif + +void ERR_load_CBCMAC_strings(void) +{ +#ifndef OPENSSL_NO_ERR + + if (ERR_func_error_string(CBCMAC_str_functs[0].error) == NULL) { + ERR_load_strings(0, CBCMAC_str_functs); + ERR_load_strings(0, CBCMAC_str_reasons); + } +#endif +} diff --git a/crypto/cmac/Makefile b/crypto/cmac/Makefile index 6a284086..1386e3f4 100644 --- a/crypto/cmac/Makefile +++ b/crypto/cmac/Makefile @@ -93,12 +93,13 @@ cm_pmeth.o: ../../include/openssl/cmac.h ../../include/openssl/conf.h cm_pmeth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h cm_pmeth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h cm_pmeth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -cm_pmeth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -cm_pmeth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -cm_pmeth.o: ../../include/openssl/opensslconf.h +cm_pmeth.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +cm_pmeth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +cm_pmeth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h cm_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h cm_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -cm_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +cm_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cm_pmeth.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h cm_pmeth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h cm_pmeth.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h cm_pmeth.o: ../cryptlib.h ../evp/evp_locl.h cm_pmeth.c diff --git a/crypto/cms/Makefile b/crypto/cms/Makefile index 6f3a8320..8f7fcaa8 100644 --- a/crypto/cms/Makefile +++ b/crypto/cms/Makefile @@ -87,13 +87,15 @@ cms_asn1.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h cms_asn1.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h cms_asn1.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h cms_asn1.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h -cms_asn1.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +cms_asn1.o: ../../include/openssl/err.h ../../include/openssl/evp.h +cms_asn1.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h cms_asn1.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h cms_asn1.o: ../../include/openssl/opensslconf.h cms_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h cms_asn1.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h cms_asn1.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -cms_asn1.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +cms_asn1.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cms_asn1.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h cms_asn1.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h cms_asn1.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h cms_asn1.o: cms.h cms_asn1.c cms_lcl.h @@ -103,15 +105,16 @@ cms_att.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h cms_att.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h cms_att.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h cms_att.o: ../../include/openssl/err.h ../../include/openssl/evp.h -cms_att.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -cms_att.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -cms_att.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -cms_att.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h -cms_att.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -cms_att.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -cms_att.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -cms_att.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -cms_att.o: cms.h cms_att.c cms_lcl.h +cms_att.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +cms_att.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +cms_att.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +cms_att.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h +cms_att.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h +cms_att.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +cms_att.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +cms_att.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +cms_att.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +cms_att.o: ../../include/openssl/x509v3.h cms.h cms_att.c cms_lcl.h cms_cd.o: ../../e_os.h ../../include/openssl/asn1.h cms_cd.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h cms_cd.o: ../../include/openssl/buffer.h ../../include/openssl/cms.h @@ -119,15 +122,17 @@ cms_cd.o: ../../include/openssl/comp.h ../../include/openssl/conf.h cms_cd.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h cms_cd.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h cms_cd.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -cms_cd.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -cms_cd.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -cms_cd.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -cms_cd.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h -cms_cd.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h -cms_cd.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -cms_cd.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -cms_cd.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -cms_cd.o: ../../include/openssl/x509v3.h ../cryptlib.h cms_cd.c cms_lcl.h +cms_cd.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +cms_cd.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +cms_cd.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +cms_cd.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +cms_cd.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h +cms_cd.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +cms_cd.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cms_cd.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +cms_cd.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +cms_cd.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +cms_cd.o: ../cryptlib.h cms_cd.c cms_lcl.h cms_dd.o: ../../e_os.h ../../include/openssl/asn1.h cms_dd.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h cms_dd.o: ../../include/openssl/buffer.h ../../include/openssl/cms.h @@ -135,15 +140,16 @@ cms_dd.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h cms_dd.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h cms_dd.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h cms_dd.o: ../../include/openssl/err.h ../../include/openssl/evp.h -cms_dd.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -cms_dd.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -cms_dd.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -cms_dd.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h -cms_dd.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -cms_dd.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -cms_dd.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -cms_dd.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -cms_dd.o: ../cryptlib.h cms_dd.c cms_lcl.h +cms_dd.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +cms_dd.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +cms_dd.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +cms_dd.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h +cms_dd.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h +cms_dd.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +cms_dd.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +cms_dd.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +cms_dd.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +cms_dd.o: ../../include/openssl/x509v3.h ../cryptlib.h cms_dd.c cms_lcl.h cms_enc.o: ../../e_os.h ../../include/openssl/asn1.h cms_enc.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h cms_enc.o: ../../include/openssl/buffer.h ../../include/openssl/cms.h @@ -151,15 +157,17 @@ cms_enc.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h cms_enc.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h cms_enc.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h cms_enc.o: ../../include/openssl/err.h ../../include/openssl/evp.h -cms_enc.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -cms_enc.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -cms_enc.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -cms_enc.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h -cms_enc.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h -cms_enc.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -cms_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -cms_enc.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -cms_enc.o: ../../include/openssl/x509v3.h ../cryptlib.h cms_enc.c cms_lcl.h +cms_enc.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +cms_enc.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +cms_enc.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +cms_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h +cms_enc.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h +cms_enc.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h +cms_enc.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cms_enc.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +cms_enc.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +cms_enc.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +cms_enc.o: ../cryptlib.h cms_enc.c cms_lcl.h cms_env.o: ../../e_os.h ../../include/openssl/aes.h cms_env.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h cms_env.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h @@ -167,29 +175,32 @@ cms_env.o: ../../include/openssl/cms.h ../../include/openssl/conf.h cms_env.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h cms_env.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h cms_env.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -cms_env.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -cms_env.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -cms_env.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -cms_env.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h -cms_env.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h -cms_env.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h -cms_env.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -cms_env.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -cms_env.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -cms_env.o: ../asn1/asn1_locl.h ../cryptlib.h cms_env.c cms_lcl.h +cms_env.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +cms_env.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +cms_env.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +cms_env.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +cms_env.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h +cms_env.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h +cms_env.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +cms_env.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +cms_env.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +cms_env.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +cms_env.o: ../../include/openssl/x509v3.h ../asn1/asn1_locl.h ../cryptlib.h +cms_env.o: cms_env.c cms_lcl.h cms_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h cms_err.o: ../../include/openssl/buffer.h ../../include/openssl/cms.h cms_err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h cms_err.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h cms_err.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -cms_err.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -cms_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -cms_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -cms_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -cms_err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -cms_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -cms_err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -cms_err.o: cms_err.c +cms_err.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +cms_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +cms_err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +cms_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +cms_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +cms_err.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cms_err.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +cms_err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +cms_err.o: ../../include/openssl/x509_vfy.h cms_err.c cms_ess.o: ../../e_os.h ../../include/openssl/asn1.h cms_ess.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h cms_ess.o: ../../include/openssl/buffer.h ../../include/openssl/cms.h @@ -197,29 +208,32 @@ cms_ess.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h cms_ess.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h cms_ess.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h cms_ess.o: ../../include/openssl/err.h ../../include/openssl/evp.h -cms_ess.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -cms_ess.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -cms_ess.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -cms_ess.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h -cms_ess.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h -cms_ess.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -cms_ess.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -cms_ess.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -cms_ess.o: ../../include/openssl/x509v3.h ../cryptlib.h cms_ess.c cms_lcl.h +cms_ess.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +cms_ess.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +cms_ess.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +cms_ess.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h +cms_ess.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h +cms_ess.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h +cms_ess.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cms_ess.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +cms_ess.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +cms_ess.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +cms_ess.o: ../cryptlib.h cms_ess.c cms_lcl.h cms_io.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h cms_io.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h cms_io.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h cms_io.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h cms_io.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -cms_io.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -cms_io.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -cms_io.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -cms_io.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h -cms_io.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h -cms_io.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -cms_io.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -cms_io.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h cms.h -cms_io.o: cms_io.c cms_lcl.h +cms_io.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +cms_io.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +cms_io.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +cms_io.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +cms_io.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h +cms_io.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +cms_io.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cms_io.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +cms_io.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +cms_io.o: ../../include/openssl/x509_vfy.h cms.h cms_io.c cms_lcl.h cms_kari.o: ../../e_os.h ../../include/openssl/aes.h cms_kari.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h cms_kari.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h @@ -227,13 +241,14 @@ cms_kari.o: ../../include/openssl/cms.h ../../include/openssl/conf.h cms_kari.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h cms_kari.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h cms_kari.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -cms_kari.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -cms_kari.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -cms_kari.o: ../../include/openssl/opensslconf.h +cms_kari.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +cms_kari.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +cms_kari.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h cms_kari.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h cms_kari.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h cms_kari.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h cms_kari.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +cms_kari.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h cms_kari.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h cms_kari.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h cms_kari.o: ../../include/openssl/x509v3.h ../asn1/asn1_locl.h ../cryptlib.h @@ -244,15 +259,16 @@ cms_lib.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h cms_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h cms_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h cms_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h -cms_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -cms_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -cms_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -cms_lib.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h -cms_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -cms_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -cms_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -cms_lib.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -cms_lib.o: cms.h cms_lcl.h cms_lib.c +cms_lib.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +cms_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +cms_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +cms_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h +cms_lib.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h +cms_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +cms_lib.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +cms_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +cms_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +cms_lib.o: ../../include/openssl/x509v3.h cms.h cms_lcl.h cms_lib.c cms_pwri.o: ../../e_os.h ../../include/openssl/aes.h cms_pwri.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h cms_pwri.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h @@ -260,13 +276,14 @@ cms_pwri.o: ../../include/openssl/cms.h ../../include/openssl/conf.h cms_pwri.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h cms_pwri.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h cms_pwri.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -cms_pwri.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -cms_pwri.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -cms_pwri.o: ../../include/openssl/opensslconf.h +cms_pwri.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +cms_pwri.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +cms_pwri.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h cms_pwri.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h cms_pwri.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h cms_pwri.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h cms_pwri.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +cms_pwri.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h cms_pwri.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h cms_pwri.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h cms_pwri.o: ../../include/openssl/x509v3.h ../asn1/asn1_locl.h ../cryptlib.h @@ -278,15 +295,17 @@ cms_sd.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h cms_sd.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h cms_sd.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h cms_sd.o: ../../include/openssl/err.h ../../include/openssl/evp.h -cms_sd.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -cms_sd.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -cms_sd.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -cms_sd.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h -cms_sd.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -cms_sd.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -cms_sd.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -cms_sd.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -cms_sd.o: ../asn1/asn1_locl.h ../cryptlib.h cms_lcl.h cms_sd.c +cms_sd.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +cms_sd.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +cms_sd.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +cms_sd.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h +cms_sd.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h +cms_sd.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +cms_sd.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +cms_sd.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +cms_sd.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +cms_sd.o: ../../include/openssl/x509v3.h ../asn1/asn1_locl.h ../cryptlib.h +cms_sd.o: cms_lcl.h cms_sd.c cms_smime.o: ../../e_os.h ../../include/openssl/asn1.h cms_smime.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h cms_smime.o: ../../include/openssl/buffer.h ../../include/openssl/cms.h @@ -294,12 +313,13 @@ cms_smime.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h cms_smime.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h cms_smime.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h cms_smime.o: ../../include/openssl/err.h ../../include/openssl/evp.h -cms_smime.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -cms_smime.o: ../../include/openssl/objects.h +cms_smime.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +cms_smime.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h cms_smime.o: ../../include/openssl/opensslconf.h cms_smime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h cms_smime.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -cms_smime.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +cms_smime.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cms_smime.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h cms_smime.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h cms_smime.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h cms_smime.o: ../asn1/asn1_locl.h ../cryptlib.h cms_lcl.h cms_smime.c diff --git a/crypto/conf/Makefile b/crypto/conf/Makefile index d5f5c582..2e7337aa 100644 --- a/crypto/conf/Makefile +++ b/crypto/conf/Makefile @@ -116,12 +116,13 @@ conf_mall.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h conf_mall.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h conf_mall.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h conf_mall.o: ../../include/openssl/err.h ../../include/openssl/evp.h -conf_mall.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -conf_mall.o: ../../include/openssl/objects.h +conf_mall.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +conf_mall.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h conf_mall.o: ../../include/openssl/opensslconf.h conf_mall.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h conf_mall.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -conf_mall.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +conf_mall.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +conf_mall.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h conf_mall.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h conf_mall.o: ../../include/openssl/x509_vfy.h ../cryptlib.h conf_mall.c conf_mod.o: ../../e_os.h ../../include/openssl/asn1.h @@ -130,12 +131,13 @@ conf_mod.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h conf_mod.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h conf_mod.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h conf_mod.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -conf_mod.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -conf_mod.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -conf_mod.o: ../../include/openssl/opensslconf.h +conf_mod.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +conf_mod.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +conf_mod.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h conf_mod.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h conf_mod.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -conf_mod.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +conf_mod.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +conf_mod.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h conf_mod.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h conf_mod.o: ../../include/openssl/x509_vfy.h ../cryptlib.h conf_mod.c conf_sap.o: ../../e_os.h ../../include/openssl/asn1.h @@ -145,10 +147,12 @@ conf_sap.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h conf_sap.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h conf_sap.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h conf_sap.o: ../../include/openssl/err.h ../../include/openssl/evp.h -conf_sap.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -conf_sap.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +conf_sap.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +conf_sap.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +conf_sap.o: ../../include/openssl/opensslconf.h conf_sap.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h conf_sap.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -conf_sap.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +conf_sap.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +conf_sap.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h conf_sap.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h conf_sap.o: ../../include/openssl/x509_vfy.h ../cryptlib.h conf_sap.c diff --git a/crypto/cpk/Makefile b/crypto/cpk/Makefile index 00972229..3c43eb92 100644 --- a/crypto/cpk/Makefile +++ b/crypto/cpk/Makefile @@ -76,3 +76,90 @@ clean: # DO NOT DELETE THIS LINE -- make depend depends on it. +cpk_asn1.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h +cpk_asn1.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h +cpk_asn1.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h +cpk_asn1.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h +cpk_asn1.o: ../../include/openssl/ecdsa.h ../../include/openssl/ecies.h +cpk_asn1.o: ../../include/openssl/err.h ../../include/openssl/evp.h +cpk_asn1.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +cpk_asn1.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +cpk_asn1.o: ../../include/openssl/opensslconf.h +cpk_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +cpk_asn1.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +cpk_asn1.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cpk_asn1.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +cpk_asn1.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +cpk_asn1.o: ../../include/openssl/x509_vfy.h cpk.h cpk_asn1.c +cpk_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +cpk_err.o: ../../include/openssl/buffer.h ../../include/openssl/cpk.h +cpk_err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h +cpk_err.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h +cpk_err.o: ../../include/openssl/ecdsa.h ../../include/openssl/ecies.h +cpk_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h +cpk_err.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +cpk_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +cpk_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +cpk_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +cpk_err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +cpk_err.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +cpk_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +cpk_err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +cpk_err.o: cpk_err.c +cpk_kap.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +cpk_kap.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +cpk_kap.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +cpk_kap.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +cpk_kap.o: ../../include/openssl/ecies.h ../../include/openssl/err.h +cpk_kap.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +cpk_kap.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +cpk_kap.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +cpk_kap.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +cpk_kap.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +cpk_kap.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cpk_kap.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +cpk_kap.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +cpk_kap.o: ../../include/openssl/x509_vfy.h cpk.h cpk_kap.c +cpk_lib.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h +cpk_lib.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h +cpk_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h +cpk_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h +cpk_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/ecies.h +cpk_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h +cpk_lib.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +cpk_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +cpk_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +cpk_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +cpk_lib.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h +cpk_lib.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cpk_lib.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +cpk_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +cpk_lib.o: ../../include/openssl/x509_vfy.h cpk.h cpk_lib.c +cpk_map.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +cpk_map.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +cpk_map.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +cpk_map.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +cpk_map.o: ../../include/openssl/ecies.h ../../include/openssl/err.h +cpk_map.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +cpk_map.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +cpk_map.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +cpk_map.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +cpk_map.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +cpk_map.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cpk_map.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +cpk_map.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +cpk_map.o: ../../include/openssl/x509_vfy.h cpk.h cpk_map.c +cpk_prn.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +cpk_prn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +cpk_prn.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +cpk_prn.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +cpk_prn.o: ../../include/openssl/ecies.h ../../include/openssl/err.h +cpk_prn.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +cpk_prn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +cpk_prn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +cpk_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +cpk_prn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +cpk_prn.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +cpk_prn.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +cpk_prn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +cpk_prn.o: ../../include/openssl/x509_vfy.h cpk.h cpk_prn.c diff --git a/crypto/cpk/cpk.h b/crypto/cpk/cpk.h index 3ca0af9d..cee2d3d9 100644 --- a/crypto/cpk/cpk.h +++ b/crypto/cpk/cpk.h @@ -61,152 +61,38 @@ extern "C" { #endif -#define CPK_LIB_VERSION "0.9" #define CPK_MAX_ID_LENGTH 64 -/** - * @struct CPK_MASTER_SECRET - * @brief The in-memory structure to represent a cpk master secret. - */ typedef struct cpk_master_secret_st { - long version; /**< The version of the master secret.*/ - X509_NAME *id; /**< The id of the master secret.*/ - X509_ALGOR *pkey_algor; /**< The public key algorithm used in the master secret.*/ - X509_ALGOR *map_algor; /**< The map algorithm used in the master secret.*/ - ASN1_OCTET_STRING *secret_factors; /**< The secret factors of the master secret.*/ + long version; + X509_NAME *id; + X509_ALGOR *pkey_algor; + X509_ALGOR *map_algor; + ASN1_OCTET_STRING *secret_factors; } CPK_MASTER_SECRET; -/** - * @def - * @brief Declare 4 basic ASN1 functions of CPK_MASTER_SECRET and a pointer - * to an ASN1_ITEM with detail information of the fields of - * CPK_MASTER_SECRET in it. - * - * The macro would generate following 4 function declarations and 1 pointer:\n - * CPK_MASTER_SECRET *CPK_MASTER_SECRET_new(void): alloc a new instance of CPK_MASTER_SECRET.\n - * void CPK_MASTER_SECRET_free(CPK_MASTER_SECRET* a): free the instance a.\n - * CPK_MASTER_SECRET *d2i_CPK_MASTER_SECRET(CPK_MASTER_SECRET **a, const unsigned char **in, long len): - * convert the CPK_MASTER_SECRET instance from the DER format to the internal format.\n - * int i2d_CPK_MASTER_SECRET(CPK_MASTER_SECRET *a, unsigned char* out): convert an CPK_MASTER_SECRET - * to the DER format.\n - * ASN1_ITEM* CPK_MASTER_SECRET_it: a pointer to a instance of ASN1_ITEM struct which contains - * information on the conversion between DER and internal.\n - */ -DECLARE_ASN1_FUNCTIONS(CPK_MASTER_SECRET) -/** - * @struct CPK_PUBLIC_PARAMS - * @brief The in-memory structure to represent a set of cpk public parameters. - */ + typedef struct cpk_public_params_st { - long version; /**< The version of the public parameters.*/ - X509_NAME *id; /**< The id of the public parameters.*/ - X509_ALGOR *pkey_algor; /**< The public key algorithm used in the public parameters.*/ - X509_ALGOR *map_algor; /**< The map algorithm used in the public parameters.*/ - ASN1_OCTET_STRING *public_factors;/**< The public factors of the public parameters.*/ + long version; + X509_NAME *id; + X509_ALGOR *pkey_algor; + X509_ALGOR *map_algor; + ASN1_OCTET_STRING *public_factors; } CPK_PUBLIC_PARAMS; -/** - * @brief Declare 4 basic ASN1 functions of CPK_PUBLIC_PARAMS and a pointer to an ASN1_ITEM - * with detail information of the fields of CPK_PUBLIC_PARAMS in it. - * - * The macro would generate following 4 function declarations and 1 pointer:\n - * CPK_PUBLIC_PARAMS *CPK_PUBLIC_PARAMS_new(void): alloc a new instance of CPK_PUBLIC_PARAMS.\n - * void CPK_PUBLIC_PARAMS_free(CPK_PUBLIC_PARAMS* a): free the instance a.\n - * CPK_PUBLIC_PARAMS *d2i_CPK_PUBLIC_PARAMS(CPK_PUBLIC_PARAMS **a, const unsigned char **in, long len): - * convert the CPK_PUBLIC_PARAMS instance from the DER format to the internal format.\n - * int i2d_CPK_PUBLIC_PARAMS(CPK_PUBLIC_PARAMS *a, unsigned char* out): convert a CPK_PUBLIC_PARAMS - * to the DER format.\n - * ASN1_ITEM* CPK_PUBLIC_PARAMS_it: a pointer to a instance of ASN1_ITEM struct which contains - * information on the conversion between DER and internal.\n - */ -DECLARE_ASN1_FUNCTIONS(CPK_PUBLIC_PARAMS) -/** - * @brief Get a new default map algorithm. - * - * @return Returns a pointer to a new instance of the default map algorithm of the type X509_ALGOR. - */ -X509_ALGOR *CPK_MAP_new_default(); -/** - * @brief Check if the given map algorithm is valid. - * - * @param[in] algor The pointer to the algorithm to check. - * @return Returns 1 if the given algorithm is valid. - */ +X509_ALGOR *CPK_MAP_new_default(void); int CPK_MAP_is_valid(const X509_ALGOR *algor); - -/** - * @brief Get the number of factors of the given algorithm. - * - * @param[in] algor The pointer to the algorithm. - * @return Returns the number of factors of the algorithm. - */ int CPK_MAP_num_factors(const X509_ALGOR *algor); - -/** - * @brief Get the number of indexes of the given algorithm. - * - * @param[in] algor The pointer to the algorithm. - * @return Returns the number of indexes of the algorithm. - */ int CPK_MAP_num_indexes(const X509_ALGOR *algor); - -/** - * @brief Convert the string to the index vector. - * - * @param[in] algor The pointer to the algorithm to do the map function. - * @param[in] str The pointer to a string in the memory, ended by '\0'. - * @param[out] index The pointer to a array which will receive the index. - * @return Returns 1 on success. - */ int CPK_MAP_str2index(const X509_ALGOR *algor, const char *str, int *index); - -/** - * @brief Print the parameters of the map algortihm. - * - * @param[out] out A IO abstraction to receive the output stream. - * @param[in] indent The amount of the indentation in the output stream. - * @param[in] flags The flag set to control the ouput. - * @return Returns 1 on success. - */ int CPK_MAP_print(BIO *out, X509_ALGOR *map, int indent, unsigned long flags); -/** - * @brief Create a master secret with the given domain id, public key algorithm and map algorithm. - * - * @param[in] domain_id The domain identifier of the master secret. - * @param[in] pkey The pointer to the public key algorithm of the master secret. - * @param[in] map_algor The pointer to the map algorithm of the master secret. - * @return Returns a poniter to the created master secret on success, or NULL on failure. - */ CPK_MASTER_SECRET *CPK_MASTER_SECRET_create(const char *domain_id, EVP_PKEY *pkey, X509_ALGOR *map_algor); - -/** - * @brief Extract the public parameters from the master secret. - * - * @param[in] master The master secret to extract from. - * @return Returns the pointer to the extracted public parameters on success, or NULL on failure. - */ CPK_PUBLIC_PARAMS *CPK_MASTER_SECRET_extract_public_params(CPK_MASTER_SECRET *master); - -/** - * @brief Extract the private key of a given identifier from the master secret. - * - * @param[in] master The master secret to extract from. - * @param[in] id The identifier which is used to maps to the private key. - * @return Returns the pointer to the extracted private key on success, or NULL on failure. - */ EVP_PKEY *CPK_MASTER_SECRET_extract_private_key(CPK_MASTER_SECRET *master, const char *id); - -/** - * @brief Extract the public key of a given identifier from the public parameters. - * - * @param[in] params The public parameters to extract from. - * @param[in] id The identifier which is used to maps to the public key. - * @return Returns the pointer to the extracted public key EVP_PKEY on success, or NULL on failure. - */ EVP_PKEY *CPK_PUBLIC_PARAMS_extract_public_key(CPK_PUBLIC_PARAMS *params, const char *id); @@ -216,374 +102,74 @@ int CPK_PUBLIC_PARAMS_compute_share_key(CPK_PUBLIC_PARAMS *params, char *CPK_MASTER_SECRET_get_name(CPK_MASTER_SECRET *master, char *buf, int size); char *CPK_PUBLIC_PARAMS_get_name(CPK_PUBLIC_PARAMS *params); - -/** - * @brief Generate the message digest of the given master secret with the given parameters. - * - * This function takes the secret_factors field of the given parameter of CPK_MASTER_SECRET as - * the input and the parameter type of EVP_MD as the message digest - * algorithm to compute the message digest, and put the result in the parameter md, the length - * of the result in the paramter len. - * @param[in] master The master secret to compute the digest. - * @param[in] type The message digest algorithm to use to comput the digest. - * @param[out] md The buffer to receive the result of the computation of message digest. - * @param[out] len If len is not null, the variable it point to will be assigned the length of - * the message digest. - * @return Returns 1 on success, 0 on failure. - */ int CPK_MASTER_SECRET_digest(CPK_MASTER_SECRET *master, const EVP_MD *type, unsigned char *md, unsigned int *len); - -/** - * @brief Generate the message digest of the given public parameters with the given parameters. - * - * This function takes the secret_factors field of the given parameter of CPK_PUBLIC_PARAMS as - * the input and the parameter type of EVP_MD as the message digest - * algorithm to compute the message digest, and put the result in the parameter md, the length - * of the result in the paramter len. - * @param[in] params The public parameters to compute the digest. - * @param[in] type The message digest algorithm to use to comput the digest. - * @param[out] md The buffer to receive the result of the computation of message digest. - * @param[out] len If len is not null, the variable it point to will be assigned the length of - * the message digest. - * @return Returns 1 on success, 0 on failure. - */ int CPK_PUBLIC_PARAMS_digest(CPK_PUBLIC_PARAMS *params, const EVP_MD *type, unsigned char *md, unsigned int *len); - -/** - * @brief Print the master secret to a BIO, including the version, the domain uri, the public - * algorithm and the map algorithm. - * - * @param[out] out A IO abstraction to receive the output stream. - * @param[in] master The CPK_MASTER_SECRET instance to print. - * @param[in] indent The amount of the indentation. - * @param[in] flags The flag set to control the ouput. - * @return Returns 1 on success, 0 on failure. - */ int CPK_MASTER_SECRET_print(BIO *out, CPK_MASTER_SECRET *master, int indent, unsigned long flags); - -/** - * @brief Print the public parameters to a BIO. - * - * @param[out] out A IO abstraction to receive the output stream. - * @param[in] params The CPK_PUBLIC_PARAMS instance to print. - * @param[in] indent The amount of the indentation. - * @param[in] flags The flag set to control the ouput. - * @return Returns 1 on success, 0 on failure. - */ int CPK_PUBLIC_PARAMS_print(BIO *out, CPK_PUBLIC_PARAMS *params, int indent, unsigned long flags); - -/** - * @brief Validate the public parameters with the given master secret. - * - * @param[in] master The master secret used for the validation. - * @param[in] params The public parameters to validate. - * @return Returns 1 if the public parameter is valid, returns 0 otherwise. - */ int CPK_MASTER_SECRET_validate_public_params(CPK_MASTER_SECRET *master, CPK_PUBLIC_PARAMS *params); - -/** - * @brief Validate the private key with the given public parameters. - * - * @param[in] params The public parameter used for the validation. - * @param[in] id the identifier of the private key owner. - * @param[in] pkey pkey The private key to validate. - * @return Returns 1 if the private key is valid, returns a integer less or equal than 0 otherwise. - */ int CPK_PUBLIC_PARAMS_validate_private_key(CPK_PUBLIC_PARAMS *params, const char *id, const EVP_PKEY *pkey); - -/** - * @brief Convert the master secret in DER format in the IO abstraction to an instance of CPK_MASTER_SECRET. - * - * @param[in] bp A pointer to the IO abstraction which ocntaints the master secret in DER format. - * @param[out] master A pointer to receive the pointer to the converted master secret of the type CPK_MASTER_SECRET. - * @return Returns the pointer to the converted master secret of the type CPK_MASTER_SECRET on success, - * or null on failure. - */ CPK_MASTER_SECRET *d2i_CPK_MASTER_SECRET_bio(BIO *bp, CPK_MASTER_SECRET **master); - -/** - * @brief Convert the master key from CPK_MASTER_SECRET to a byte stream in DER format, and write - * the stream to an IO abstraction. - * - * @param[out] bp A pointer to the IO abstraction which receives the stream. - * @param[in] master A pointer to the master key of the type CPK_MASTER_SECRET. - * @return Returns the size of the output stream on success, of an integer less or equal than 0 - * indicating an error. - */ int i2d_CPK_MASTER_SECRET_bio(BIO *bp, CPK_MASTER_SECRET *master); - -/** - * @brief Convert the public parameters in DER format in the IO abstraction to an instance of CPK_PUBLIC_PARAMS. - * - * @param[in] bp A pointer to the IO abstraction which ocntaints the public parameters in DER format. - * @param[out] params A pointer to receive the pointer to the converted public parameters of the type CPK_PUBLIC_PARAMS. - * @return Returns the pointer to the converted public parameters of the type CPK_PUBLIC_PARAMS on success, - * or null on failure. - */ CPK_PUBLIC_PARAMS *d2i_CPK_PUBLIC_PARAMS_bio(BIO *bp, CPK_PUBLIC_PARAMS **params); - -/** - * @brief Convert the public parameters from CPK_PUBLIC_PARAMS to a byte stream in DER format, - * and write the stream to an IO abstraction. - * - * @param[out] bp A pointer to the IO abstraction which receives the stream. - * @param[in] master A pointer to the public parameters of the type CPK_PUBLIC_PARAMS. - * @return Returns the size of the output stream on success, of an integer less or equal than 0 - * indicating an error. - */ int i2d_CPK_PUBLIC_PARAMS_bio(BIO *bp, CPK_PUBLIC_PARAMS *params); +/* BEGIN ERROR CODES */ /* - * SignerInfo ::= SEQUENCE { - * version INTEGER {1}, - * signer IssuerAndSerialNumber, - * digestAlgor DigestAlgorithmIdentifier, - * signedAttrs [0] IMPLICIT Attributes OPTIONAL, - * signingAlgor SigningAlgorithmIdentifier, - * signature OCTET STRING {{ECDSASigValue}}, - * unsignedAttrs [1] IMPLICIT Attributes OPTIONAL - * } + * 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. */ -typedef struct cpk_signer_info_st { - long version; - X509_NAME *signer; - X509_ALGOR *digest_algor; - STACK_OF(X509_ATTRIBUTE) *signed_attr; - X509_ALGOR *sign_algor; - ASN1_OCTET_STRING *signature; - STACK_OF(X509_ATTRIBTE) *unsigned_attr; - EVP_PKEY *_privkey; /* private member */ -} CPK_SIGNER_INFO; -DECLARE_STACK_OF(CPK_SIGNER_INFO) -DECLARE_ASN1_SET_OF(CPK_SIGNER_INFO) -DECLARE_ASN1_FUNCTIONS(CPK_SIGNER_INFO) - -int CPK_SIGNER_INFO_set(CPK_SIGNER_INFO *si, const EVP_MD *sign_alg, const EVP_PKEY *sign_key); -int CPK_SIGNER_INFO_add_attr(CPK_SIGNER_INFO *si, int nid, int atrtype, void *value); -int CPK_SIGNER_INFO_add_signed_attr(CPK_SIGNER_INFO *si, int nid, int atrtype, void *value); -int CPK_SIGNER_INFO_add_signed_time(CPK_SIGNER_INFO *si); -int CPK_SIGNER_INFO_add_signed_digest(CPK_SIGNER_INFO *si, const EVP_MD_CTX *ctx); -ASN1_TYPE *CPK_SIGNER_INFO_get_attr(CPK_SIGNER_INFO *si, int nid); -ASN1_TYPE *CPK_SIGNER_INFO_get_signed_attr(CPK_SIGNER_INFO *si, int nid); -ASN1_UTCTIME *CPK_SIGNER_INFO_get_signed_time(CPK_SIGNER_INFO *si); - -int CPK_SIGNER_INFO_do_sign(CPK_SIGNER_INFO *si, EVP_MD_CTX *md_ctx); -int CPK_SIGNER_INFO_do_verify(const CPK_SIGNER_INFO *si, EVP_MD_CTX *ctx, const CPK_PUBLIC_PARAMS *params); - -/* - * RecipientInfo ::= SEQUENCE { - * version INTEGER {0}, - * recipient IssuerAndSerialNumber, - * keyEncryptionAlgor EncryptionAlgorithmIdentifier, - * encryptedKey OCTET STRING - * } - * RecipientInfos ::= SET OF RecipientInfo - */ -typedef struct cpk_recip_info_st { - long version; - X509_NAME *recipient; - X509_ALGOR *enc_algor; - ASN1_OCTET_STRING *enc_data; - /* private */ - EVP_PKEY *_pubkey; -} CPK_RECIP_INFO; -DECLARE_STACK_OF(CPK_RECIP_INFO) -DECLARE_ASN1_SET_OF(CPK_RECIP_INFO) -DECLARE_ASN1_FUNCTIONS(CPK_RECIP_INFO) - -int CPK_RECIP_INFO_set(CPK_RECIP_INFO *ri, const X509_NAME *recipient, const ECIES_PARAMS *ecies); -int CPK_RECIP_INFO_do_encrypt(CPK_RECIP_INFO *ri, const unsigned char *in, size_t inlen); -int CPK_RECIP_INFO_do_decrypt(CPK_RECIP_INFO *ri, const EVP_PKEY *pkey, unsigned char *out, size_t *outlen); - - -/* - * SingerInfos ::= SET OF SignerInfo - * - * SignedData ::= SEQUENCE { - * version INTEGER, - * digestAlgors DigestAlgorithmIdentifiers, - * contentInfo ContentInfo, - * signerInfos SignerInfos, - * } - */ -typedef struct cpk_signed_st { - long version; - STACK_OF(X509_ALGOR) *digest_algors; - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ - STACK_OF(CPK_SIGINFO) *signer_infos; - struct CPK_CMS_st *contents; -} CPK_SIGNED; -DECLARE_ASN1_FUNCTIONS(CPK_SIGNED) - -typedef struct cpk_enc_content_st { - ASN1_OBJECT *content_type; - X509_ALGOR *enc_algor; - ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ - /* private */ - const EVP_CIPHER *cipher; -} CPK_ENC_CONTENT; -DECLARE_ASN1_FUNCTIONS(CPK_ENC_CONTENT) - -typedef struct cpk_envelope_st { - long version; - STACK_OF(CPK_RECIP_INFO) *recip_infos; - CPK_ENC_CONTENT *enc_data; -} CPK_ENVELOPE; -DECLARE_ASN1_FUNCTIONS(CPK_ENVELOPE) - -typedef struct cpk_sign_envelope_st { - long version; - STACK_OF(X509_ALGOR) *digest_algors; - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ - STACK_OF(CPK_SIGNER_INFO) *signer_infos; - CPK_ENC_CONTENT *enc_data; - STACK_OF(CPK_RECIP_INFO) *recip_infos; -} CPK_SIGN_ENVELOPE; -DECLARE_ASN1_FUNCTIONS(CPK_SIGN_ENVELOPE) - -typedef struct cpk_cms_st { - int state; /* used during processing */ - int detached; - - ASN1_OBJECT *type; - union { - char *ptr; - - /* NID_pkcs7_data */ - ASN1_OCTET_STRING *data; - - /* NID_pkcs7_signed */ - CPK_SIGNED *sign; - - /* NID_pkcs7_enveloped */ - CPK_ENVELOPE *enveloped; - - /* NID_pkcs7_signedAndEnveloped */ - CPK_SIGN_ENVELOPE *signed_and_enveloped; - - /* Anything else */ - ASN1_TYPE *other; - } d; -} CPK_CMS; -DECLARE_STACK_OF(CPK_CMS) -DECLARE_ASN1_SET_OF(CPK_CMS) -DECLARE_PKCS12_STACK_OF(CPK_CMS) -DECLARE_ASN1_FUNCTIONS(CPK_CMS) - -DECLARE_ASN1_ITEM(CPK_CMS_ATTR_SIGN) -DECLARE_ASN1_ITEM(CPK_CMS_ATTR_VERIFY) -DECLARE_ASN1_NDEF_FUNCTION(CPK_CMS) - - - -#define CPK_CMS_OP_SET_DETACHED_SIGNATURE 1 -#define CPK_CMS_OP_GET_DETACHED_SIGNATURE 2 - -#define CPK_CMS_get_signed_attributes(si) ((si)->auth_attr) -#define CPK_CMS_get_attributes(si) ((si)->unauth_attr) - -#define CPK_CMS_type_is_signed(a) \ - (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) -#define CPK_CMS_type_is_enveloped(a) \ - (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) -#define CPK_CMS_type_is_signedAndEnveloped(a) \ - (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) -#define CPK_CMS_type_is_data(a) \ - (OBJ_obj2nid((a)->type) == NID_pkcs7_data) -#define CPK_CMS_set_detached(p,v) \ - CPK_CMS_ctrl(p,CPK_CMS_OP_SET_DETACHED_SIGNATURE,v,NULL) -#define CPK_CMS_get_detached(p) \ - CPK_CMS_ctrl(p,CPK_CMS_OP_GET_DETACHED_SIGNATURE,0,NULL) -#define CPK_CMS_is_detached(p7) \ - (CPK_CMS_type_is_signed(p7) && CPK_CMS_get_detached(p7)) - -long CPK_CMS_ctrl(CPK_CMS *p7, int cmd, long larg, char *parg); -int CPK_CMS_set_type(CPK_CMS *p7, int type); -int CPK_CMS_set_cipher(CPK_CMS *p7, const EVP_CIPHER *cipher); -int CPK_CMS_set_content(CPK_CMS *p7, CPK_CMS *p7_data); -int CPK_CMS_content_new(CPK_CMS *p7, int type); -int CPK_CMS_add_signer(CPK_CMS *p7, const EVP_MD *sign_alg, const EVP_PKEY *sign_key); -int CPK_CMS_add_recipient(CPK_CMS *p7, const X509_NAME *id, const ECIES_PARAMS *params); - - -BIO *CPK_CMS_dataInit(CPK_CMS *p7, BIO *bio); -BIO *CPK_CMS_dataDecode(CPK_CMS *p7, BIO *in_bio, const EVP_PKEY *keyinfo); -int CPK_CMS_dataUpdate(CPK_CMS *p7, BIO *bio, const unsigned char *data, int len); -int CPK_CMS_dataFinal(CPK_CMS *p7, BIO *bio); -STACK_OF(CPK_SIGNER_INFO) *CPK_CMS_get_signer_infos(CPK_CMS *p7); -int CPK_CMS_dataVerify(CPK_PUBLIC_PARAMS *params, BIO *bio, CPK_CMS *p7, CPK_SIGNER_INFO *si); - - - -/* ERR function (should in openssl/err.h) begin */ -#define ERR_LIB_CPK 130 -#define ERR_R_CPK_LIB ERR_LIB_CPK -#define CPKerr(f,r) ERR_PUT_error(ERR_LIB_CPK,(f),(r),__FILE__,__LINE__) -/* end */ - - void ERR_load_CPK_strings(void); -/** - * @defgroup error_cpk Definations to handle errors of cpk runtime. - * @{ - */ -/* Error codes for the ECIES functions. */ +/* Error codes for the CPK functions. */ /* Function codes. */ -#define CPK_F_CPK_MASTER_SECRET_CREATE 100 -#define CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS 101 -#define CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY 102 -#define CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY 103 -#define CPK_F_CPK_PUBLIC_PARAMS_COMPUTE_SHARE_KEY 116 -#define CPK_F_CPK_MASTER_SECRET_DIGEST 104 -#define CPK_F_CPK_PUBLIC_PARAMS_DIGEST 105 -#define CPK_F_CPK_MASTER_SECRET_PRINT 106 -#define CPK_F_CPK_PUBLIC_PARAMS_PRINT 107 -#define CPK_F_CPK_MASTER_SECRET_VALIDATE_PUBLIC_PARAMS 108 -#define CPK_F_CPK_PUBLIC_PARAMS_VALIDATE_PRIVATE_KEY 109 -#define CPK_F_CPK_MAP_NEW_DEFAULT 110 -#define CPK_F_CPK_MAP_NUM_FACTORS 111 -#define CPK_F_CPK_MAP_NUM_INDEXES 112 -#define CPK_F_CPK_MAP_STR2INDEX 113 -#define CPK_F_X509_ALGOR_GET1_EC_KEY 114 -#define CPK_F_X509_ALGOR_GET1_DSA 115 +# define CPK_F_CPK_MAP_NEW_DEFAULT 100 +# define CPK_F_CPK_MAP_NUM_FACTORS 101 +# define CPK_F_CPK_MAP_NUM_INDEXES 102 +# define CPK_F_CPK_MAP_STR2INDEX 103 +# define CPK_F_CPK_MASTER_SECRET_CREATE 104 +# define CPK_F_CPK_MASTER_SECRET_DIGEST 105 +# define CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY 106 +# define CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS 107 +# define CPK_F_CPK_MASTER_SECRET_PRINT 108 +# define CPK_F_CPK_MASTER_SECRET_VALIDATE_PUBLIC_PARAMS 109 +# define CPK_F_CPK_PUBLIC_PARAMS_COMPUTE_SHARE_KEY 110 +# define CPK_F_CPK_PUBLIC_PARAMS_DIGEST 111 +# define CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY 112 +# define CPK_F_CPK_PUBLIC_PARAMS_PRINT 113 +# define CPK_F_CPK_PUBLIC_PARAMS_VALIDATE_PRIVATE_KEY 114 +# define CPK_F_X509_ALGOR_GET1_DSA 115 +# define CPK_F_X509_ALGOR_GET1_EC_KEY 116 /* Reason codes. */ -#define CPK_R_BAD_ARGUMENT 100 -#define CPK_R_UNKNOWN_DIGEST_TYPE 101 -#define CPK_R_UNKNOWN_CIPHER_TYPE 102 -#define CPK_R_UNKNOWN_MAP_TYPE 103 -#define CPK_R_UNKNOWN_CURVE 104 -#define CPK_R_STACK_ERROR 105 -#define CPK_R_DERIVE_KEY_FAILED 106 -#define CPK_R_ECIES_ENCRYPT_FAILED 107 -#define CPK_R_ECIES_DECRYPT_FAILED 108 -#define CPK_R_DER_DECODE_FAILED 109 -#define CPK_R_UNSUPPORTED_PKCS7_CONTENT_TYPE 110 -#define CPK_R_SET_SIGNER 111 -#define CPK_R_SET_RECIP_INFO 112 -#define CPK_R_UNABLE_TO_FIND_MESSAGE_DIGEST 113 -#define CPK_R_BAD_DATA 114 -#define CPK_R_MAP_FAILED 115 -#define CPK_R_ADD_SIGNING_TIME 116 -#define CPK_R_VERIFY_FAILED 117 -#define CPK_R_UNKNOWN_ECDH_TYPE 118 -#define CPK_R_DIGEST_FAILED 119 -#define CPK_R_WITHOUT_DECRYPT_KEY 120 -#define CPK_R_UNKNOWN_PKCS7_TYPE 121 -#define CPK_R_INVALID_ID_LENGTH 122 -#define CPK_R_INVALID_PKEY_TYPE 123 -#define CPK_R_INVALID_MAP_ALGOR 124 -#define CPK_R_PKEY_TYPE_NOT_MATCH 125 +# define CPK_R_ADD_SIGNING_TIME 100 +# define CPK_R_BAD_ARGUMENT 101 +# define CPK_R_BAD_DATA 102 +# define CPK_R_DERIVE_KEY_FAILED 103 +# define CPK_R_DER_DECODE_FAILED 104 +# define CPK_R_DIGEST_FAILED 105 +# define CPK_R_ECIES_DECRYPT_FAILED 106 +# define CPK_R_ECIES_ENCRYPT_FAILED 107 +# define CPK_R_INVALID_ID_LENGTH 108 +# define CPK_R_INVALID_MAP_ALGOR 109 +# define CPK_R_INVALID_PKEY_TYPE 110 +# define CPK_R_MAP_FAILED 111 +# define CPK_R_PKEY_TYPE_NOT_MATCH 112 +# define CPK_R_SET_RECIP_INFO 113 +# define CPK_R_SET_SIGNER 114 +# define CPK_R_STACK_ERROR 115 +# define CPK_R_UNABLE_TO_FIND_MESSAGE_DIGEST 116 +# define CPK_R_UNKNOWN_CIPHER_TYPE 117 +# define CPK_R_UNKNOWN_CURVE 118 +# define CPK_R_UNKNOWN_DIGEST_TYPE 119 +# define CPK_R_UNKNOWN_ECDH_TYPE 120 +# define CPK_R_UNKNOWN_MAP_TYPE 121 +# define CPK_R_UNKNOWN_PKCS7_TYPE 122 +# define CPK_R_UNSUPPORTED_PKCS7_CONTENT_TYPE 123 +# define CPK_R_VERIFY_FAILED 124 +# define CPK_R_WITHOUT_DECRYPT_KEY 125 -/** - * @} - */ - #ifdef __cplusplus } #endif diff --git a/crypto/cpk/cpk_asn1.c b/crypto/cpk/cpk_asn1.c index b745e5d3..e92073a2 100644 --- a/crypto/cpk/cpk_asn1.c +++ b/crypto/cpk/cpk_asn1.c @@ -89,87 +89,3 @@ int i2d_CPK_PUBLIC_PARAMS_bio(BIO *bp, CPK_PUBLIC_PARAMS *params) { return ASN1_item_i2d_bio(ASN1_ITEM_rptr(CPK_PUBLIC_PARAMS), bp, params); } -#if 0 - -/* This is the ANY DEFINED BY table for the top level PKCS#7 structure */ -ASN1_ADB_TEMPLATE(cpkcmsdefault) = ASN1_EXP_OPT(CPK_CMS, d.other, ASN1_ANY, 0); - -ASN1_ADB(CPK_CMS) = { - ADB_ENTRY(NID_pkcs7_data, ASN1_NDEF_EXP_OPT(CPK_CMS, d.data, ASN1_OCTET_STRING_NDEF, 0)), - ADB_ENTRY(NID_pkcs7_signed, ASN1_NDEF_EXP_OPT(CPK_CMS, d.sign, CPK_SIGNED, 0)), - ADB_ENTRY(NID_pkcs7_enveloped, ASN1_NDEF_EXP_OPT(CPK_CMS, d.enveloped, CPK_ENVELOPE, 0)), - ADB_ENTRY(NID_pkcs7_signedAndEnveloped, - ASN1_NDEF_EXP_OPT(CPK_CMS, d.signed_and_enveloped, CPK_SIGN_ENVELOPE, 0)), -} ASN1_ADB_END(CPK_CMS, 0, type, 0, &cpkcmsdefault_tt, NULL); - - -ASN1_NDEF_SEQUENCE(CPK_CMS) = { - ASN1_SIMPLE(CPK_CMS, type, ASN1_OBJECT), - ASN1_ADB_OBJECT(CPK_CMS) -}ASN1_NDEF_SEQUENCE_END(CPK_CMS) -IMPLEMENT_ASN1_FUNCTIONS(CPK_CMS) -IMPLEMENT_ASN1_NDEF_FUNCTION(CPK_CMS) -IMPLEMENT_ASN1_DUP_FUNCTION(CPK_CMS) - - -ASN1_NDEF_SEQUENCE(CPK_SIGNED) = { - ASN1_SIMPLE(CPK_SIGNED, version, LONG), - ASN1_SET_OF(CPK_SIGNED, digest_algors, X509_ALGOR), - ASN1_SIMPLE(CPK_SIGNED, contents, CPK_CMS), - ASN1_IMP_SEQUENCE_OF_OPT(CPK_SIGNED, cert, X509, 0), - ASN1_IMP_SET_OF_OPT(CPK_SIGNED, crl, X509_CRL, 1), - ASN1_SET_OF(CPK_SIGNED, signer_infos, CPK_SIGNER_INFO) -} ASN1_NDEF_SEQUENCE_END(CPK_SIGNED) -IMPLEMENT_ASN1_FUNCTIONS(CPK_SIGNED) - - -ASN1_SEQUENCE(CPK_SIGNER_INFO) = { - ASN1_SIMPLE(CPK_SIGNER_INFO, version, LONG), - ASN1_SIMPLE(CPK_SIGNER_INFO, signer, X509_NAME), - ASN1_SIMPLE(CPK_SIGNER_INFO, digest_algor, X509_ALGOR), - ASN1_IMP_SEQUENCE_OF_OPT(CPK_SIGNER_INFO, signed_attr, X509_ATTRIBUTE, 0), - ASN1_SIMPLE(CPK_SIGNER_INFO, sign_algor, X509_ALGOR), - ASN1_SIMPLE(CPK_SIGNER_INFO, signature, ASN1_OCTET_STRING), - ASN1_IMP_SET_OF_OPT(CPK_SIGNER_INFO, unsigned_attr, X509_ATTRIBUTE, 1) -} ASN1_SEQUENCE_END(CPK_SIGNER_INFO) -IMPLEMENT_ASN1_FUNCTIONS(CPK_SIGNER_INFO) -IMPLEMENT_ASN1_DUP_FUNCTION(CPK_SIGNER_INFO) - - -ASN1_NDEF_SEQUENCE(CPK_ENVELOPE) = { - ASN1_SIMPLE(CPK_ENVELOPE, version, LONG), - ASN1_SET_OF(CPK_ENVELOPE, recip_infos, CPK_RECIP_INFO), - ASN1_SIMPLE(CPK_ENVELOPE, enc_data, CPK_ENC_CONTENT) -} ASN1_NDEF_SEQUENCE_END(CPK_ENVELOPE) -IMPLEMENT_ASN1_FUNCTIONS(CPK_ENVELOPE) - - -ASN1_SEQUENCE(CPK_RECIP_INFO) = { - ASN1_SIMPLE(CPK_RECIP_INFO, version, LONG), - ASN1_SIMPLE(CPK_RECIP_INFO, recipient, X509_NAME), - ASN1_SIMPLE(CPK_RECIP_INFO, enc_algor, X509_ALGOR), - ASN1_SIMPLE(CPK_RECIP_INFO, enc_data, ASN1_OCTET_STRING) -} ASN1_SEQUENCE_END(CPK_RECIP_INFO) -IMPLEMENT_ASN1_FUNCTIONS(CPK_RECIP_INFO) -IMPLEMENT_ASN1_DUP_FUNCTION(CPK_RECIP_INFO) - - -ASN1_NDEF_SEQUENCE(CPK_ENC_CONTENT) = { - ASN1_SIMPLE(CPK_ENC_CONTENT, content_type, ASN1_OBJECT), - ASN1_SIMPLE(CPK_ENC_CONTENT, enc_algor, X509_ALGOR), - ASN1_IMP_OPT(CPK_ENC_CONTENT, enc_data, ASN1_OCTET_STRING, 0) -} ASN1_NDEF_SEQUENCE_END(CPK_ENC_CONTENT) -IMPLEMENT_ASN1_FUNCTIONS(CPK_ENC_CONTENT) - - -ASN1_NDEF_SEQUENCE(CPK_SIGN_ENVELOPE) = { - ASN1_SIMPLE(CPK_SIGN_ENVELOPE, version, LONG), - ASN1_SET_OF(CPK_SIGN_ENVELOPE, recip_infos, CPK_RECIP_INFO), - ASN1_SET_OF(CPK_SIGN_ENVELOPE, digest_algors, X509_ALGOR), - ASN1_SIMPLE(CPK_SIGN_ENVELOPE, enc_data, CPK_ENC_CONTENT), - ASN1_IMP_SET_OF_OPT(CPK_SIGN_ENVELOPE, cert, X509, 0), - ASN1_IMP_SET_OF_OPT(CPK_SIGN_ENVELOPE, crl, X509_CRL, 1), - ASN1_SET_OF(CPK_SIGN_ENVELOPE, signer_infos, CPK_SIGNER_INFO) -} ASN1_NDEF_SEQUENCE_END(CPK_SIGN_ENVELOPE) -IMPLEMENT_ASN1_FUNCTIONS(CPK_SIGN_ENVELOPE) -#endif diff --git a/crypto/cpk/cpk_err.c b/crypto/cpk/cpk_err.c index 5abc0244..6bacffd8 100644 --- a/crypto/cpk/cpk_err.c +++ b/crypto/cpk/cpk_err.c @@ -1,6 +1,6 @@ /* crypto/cpk/cpk_err.c */ /* ==================================================================== - * Copyright (c) 2007 - 2015 The GmSSL Project. All rights reserved. + * Copyright (c) 1999-2016 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 @@ -16,27 +16,27 @@ * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: - * "This product includes software developed by the GmSSL Project. - * (http://gmssl.org/)" + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * - * 4. The name "GmSSL Project" must not be used to endorse or promote - * products derived from this software without prior written - * permission. For written permission, please contact - * guanzhi1980@gmail.com. + * 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 "GmSSL" - * nor may "GmSSL" appear in their names without prior written - * permission of the GmSSL 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 GmSSL Project - * (http://gmssl.org/)" + * "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 GmSSL PROJECT ``AS IS'' AND ANY + * 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 GmSSL PROJECT OR + * 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; @@ -47,68 +47,85 @@ * 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). + * */ +/* + * NOTE: this file was auto generated by the mkerr.pl script: any changes + * made to it will be overwritten when the script next updates this file, + * only reason strings will be preserved. + */ + +#include #include -#include "cpk.h" +#include /* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -#define ERR_FUNC(func) ERR_PACK(ERR_LIB_CPK,func,0) -#define ERR_REASON(reason) ERR_PACK(ERR_LIB_CPK,0,reason) +# define ERR_FUNC(func) ERR_PACK(ERR_LIB_CPK,func,0) +# define ERR_REASON(reason) ERR_PACK(ERR_LIB_CPK,0,reason) -static ERR_STRING_DATA CPK_str_functs[] = -{ - {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_CREATE), "CPK_MASTER_SECRET_create"}, - {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS), "CPK_MASTER_SECRET_extract_public_params"}, - {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY), "CPK_MASTER_SECRET_extract_private_key"}, - {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY), "CPK_PUBLIC_PARAMS_extract_public_key"}, - {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_COMPUTE_SHARE_KEY), "CPK_PUBLIC_PARAMS_compute_share_key"}, - {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_DIGEST), "CPK_F_CPK_MASTER_SECRET_digest"}, - {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_DIGEST), "CPK_F_CPK_PUBLIC_PARAMS_digest"}, - {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_PRINT), "CPK_F_CPK_MASTER_SECRET_print"}, - {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_PRINT), "CPK_F_CPK_PUBLIC_PARAMS_print"}, - {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_VALIDATE_PUBLIC_PARAMS), "CPK_F_CPK_MASTER_SECRET_validate_public_params"}, - {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_VALIDATE_PRIVATE_KEY), "CPK_F_CPK_PUBLIC_PARAMS_validate_private_key"}, - {ERR_FUNC(CPK_F_CPK_MAP_NEW_DEFAULT), "CPK_F_CPK_MAP_new_default"}, - {ERR_FUNC(CPK_F_CPK_MAP_NUM_FACTORS), "CPK_F_CPK_MAP_num_factors"}, - {ERR_FUNC(CPK_F_CPK_MAP_NUM_INDEXES), "CPK_F_CPK_MAP_num_indexes"}, - {ERR_FUNC(CPK_F_CPK_MAP_STR2INDEX), "CPK_F_CPK_MAP_STR2INDEX"}, - {ERR_FUNC(CPK_F_X509_ALGOR_GET1_EC_KEY), "X509_ALGOR_get1_ec_key"}, - {ERR_FUNC(CPK_F_X509_ALGOR_GET1_DSA), "X509_ALGOR_get1_dsa"}, - {0, NULL} +static ERR_STRING_DATA CPK_str_functs[] = { + {ERR_FUNC(CPK_F_CPK_MAP_NEW_DEFAULT), "CPK_MAP_new_default"}, + {ERR_FUNC(CPK_F_CPK_MAP_NUM_FACTORS), "CPK_MAP_num_factors"}, + {ERR_FUNC(CPK_F_CPK_MAP_NUM_INDEXES), "CPK_MAP_num_indexes"}, + {ERR_FUNC(CPK_F_CPK_MAP_STR2INDEX), "CPK_MAP_str2index"}, + {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_CREATE), "CPK_MASTER_SECRET_create"}, + {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_DIGEST), "CPK_MASTER_SECRET_digest"}, + {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY), + "CPK_MASTER_SECRET_extract_private_key"}, + {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS), + "CPK_MASTER_SECRET_extract_public_params"}, + {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_PRINT), "CPK_MASTER_SECRET_print"}, + {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_VALIDATE_PUBLIC_PARAMS), + "CPK_MASTER_SECRET_validate_public_params"}, + {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_COMPUTE_SHARE_KEY), + "CPK_PUBLIC_PARAMS_compute_share_key"}, + {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_DIGEST), "CPK_PUBLIC_PARAMS_digest"}, + {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY), + "CPK_PUBLIC_PARAMS_extract_public_key"}, + {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_PRINT), "CPK_PUBLIC_PARAMS_print"}, + {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_VALIDATE_PRIVATE_KEY), + "CPK_PUBLIC_PARAMS_validate_private_key"}, + {ERR_FUNC(CPK_F_X509_ALGOR_GET1_DSA), "X509_ALGOR_GET1_DSA"}, + {ERR_FUNC(CPK_F_X509_ALGOR_GET1_EC_KEY), "X509_ALGOR_GET1_EC_KEY"}, + {0, NULL} }; -static ERR_STRING_DATA CPK_str_reasons[] = -{ - {ERR_REASON(CPK_R_BAD_ARGUMENT), "bad argument"}, - {ERR_REASON(CPK_R_UNKNOWN_DIGEST_TYPE), "unknown digest algorithm"}, - {ERR_REASON(CPK_R_UNKNOWN_CIPHER_TYPE), "unknown cipher algorithm"}, - {ERR_REASON(CPK_R_UNKNOWN_MAP_TYPE), "unknown cpk map algorithm"}, - {ERR_REASON(CPK_R_UNKNOWN_CURVE), "unknown elliptic curve"}, - {ERR_REASON(CPK_R_STACK_ERROR), "stack error"}, - {ERR_REASON(CPK_R_DERIVE_KEY_FAILED), "derive key failed"}, - {ERR_REASON(CPK_R_ECIES_ENCRYPT_FAILED), "ecies encryption failed"}, - {ERR_REASON(CPK_R_ECIES_DECRYPT_FAILED), "ecies decryption failed"}, - {ERR_REASON(CPK_R_DER_DECODE_FAILED), "DER decode failed"}, - {ERR_REASON(CPK_R_UNSUPPORTED_PKCS7_CONTENT_TYPE),"CPK_R_UNSUPPORTED_PKCS7_CONTENT_TYPE"}, - {ERR_REASON(CPK_R_SET_SIGNER), "CPK_R_SET_SIGNER"}, - {ERR_REASON(CPK_R_SET_RECIP_INFO), "CPK_R_SET_RECIP_INFO"}, - {ERR_REASON(CPK_R_UNABLE_TO_FIND_MESSAGE_DIGEST),"CPK_R_UNABLE_TO_FIND_MESSAGE_DIGEST"}, - {ERR_REASON(CPK_R_BAD_DATA), "bad data"}, - {ERR_REASON(CPK_R_MAP_FAILED), "CPK_R_MAP_FAILED"}, - {ERR_REASON(CPK_R_ADD_SIGNING_TIME), "CPK_R_ADD_SIGNING_TIME"}, - {ERR_REASON(CPK_R_VERIFY_FAILED), "CPK_R_VERIFY_FAILED"}, - {ERR_REASON(CPK_R_UNKNOWN_ECDH_TYPE), "CPK_R_UNKNOWN_ECDH_TYPE"}, - {ERR_REASON(CPK_R_DIGEST_FAILED), "CPK_R_DIGEST_FAILED"}, - {ERR_REASON(CPK_R_WITHOUT_DECRYPT_KEY), "CPK_R_WITHOUT_DECRYPT_KEY"}, - {ERR_REASON(CPK_R_UNKNOWN_PKCS7_TYPE), "CPK_R_UNKNOWN_PKCS7_TYPE"}, - {ERR_REASON(CPK_R_INVALID_ID_LENGTH), "invalid identity length"}, - {ERR_REASON(CPK_R_INVALID_PKEY_TYPE), "invalid public key type"}, - {ERR_REASON(CPK_R_INVALID_MAP_ALGOR), "invalid map algorithm"}, - {ERR_REASON(CPK_R_PKEY_TYPE_NOT_MATCH), "public key type not match"}, - {0, NULL} +static ERR_STRING_DATA CPK_str_reasons[] = { + {ERR_REASON(CPK_R_ADD_SIGNING_TIME), "add signing time"}, + {ERR_REASON(CPK_R_BAD_ARGUMENT), "bad argument"}, + {ERR_REASON(CPK_R_BAD_DATA), "bad data"}, + {ERR_REASON(CPK_R_DERIVE_KEY_FAILED), "derive key failed"}, + {ERR_REASON(CPK_R_DER_DECODE_FAILED), "der decode failed"}, + {ERR_REASON(CPK_R_DIGEST_FAILED), "digest failed"}, + {ERR_REASON(CPK_R_ECIES_DECRYPT_FAILED), "ecies decrypt failed"}, + {ERR_REASON(CPK_R_ECIES_ENCRYPT_FAILED), "ecies encrypt failed"}, + {ERR_REASON(CPK_R_INVALID_ID_LENGTH), "invalid id length"}, + {ERR_REASON(CPK_R_INVALID_MAP_ALGOR), "invalid map algor"}, + {ERR_REASON(CPK_R_INVALID_PKEY_TYPE), "invalid pkey type"}, + {ERR_REASON(CPK_R_MAP_FAILED), "map failed"}, + {ERR_REASON(CPK_R_PKEY_TYPE_NOT_MATCH), "pkey type not match"}, + {ERR_REASON(CPK_R_SET_RECIP_INFO), "set recip info"}, + {ERR_REASON(CPK_R_SET_SIGNER), "set signer"}, + {ERR_REASON(CPK_R_STACK_ERROR), "stack error"}, + {ERR_REASON(CPK_R_UNABLE_TO_FIND_MESSAGE_DIGEST), + "unable to find message digest"}, + {ERR_REASON(CPK_R_UNKNOWN_CIPHER_TYPE), "unknown cipher type"}, + {ERR_REASON(CPK_R_UNKNOWN_CURVE), "unknown curve"}, + {ERR_REASON(CPK_R_UNKNOWN_DIGEST_TYPE), "unknown digest type"}, + {ERR_REASON(CPK_R_UNKNOWN_ECDH_TYPE), "unknown ecdh type"}, + {ERR_REASON(CPK_R_UNKNOWN_MAP_TYPE), "unknown map type"}, + {ERR_REASON(CPK_R_UNKNOWN_PKCS7_TYPE), "unknown pkcs7 type"}, + {ERR_REASON(CPK_R_UNSUPPORTED_PKCS7_CONTENT_TYPE), + "unsupported pkcs7 content type"}, + {ERR_REASON(CPK_R_VERIFY_FAILED), "verify failed"}, + {ERR_REASON(CPK_R_WITHOUT_DECRYPT_KEY), "without decrypt key"}, + {0, NULL} }; #endif @@ -117,10 +134,9 @@ void ERR_load_CPK_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(CPK_str_functs[0].error) == NULL) { - ERR_load_strings(0, CPK_str_functs); - ERR_load_strings(0, CPK_str_reasons); - } - + if (ERR_func_error_string(CPK_str_functs[0].error) == NULL) { + ERR_load_strings(0, CPK_str_functs); + ERR_load_strings(0, CPK_str_reasons); + } #endif } diff --git a/crypto/cpk/cpk_err2.c b/crypto/cpk/cpk_err2.c new file mode 100644 index 00000000..5abc0244 --- /dev/null +++ b/crypto/cpk/cpk_err2.c @@ -0,0 +1,126 @@ +/* crypto/cpk/cpk_err.c */ +/* ==================================================================== + * Copyright (c) 2007 - 2015 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 +#include "cpk.h" + +/* BEGIN ERROR CODES */ +#ifndef OPENSSL_NO_ERR + +#define ERR_FUNC(func) ERR_PACK(ERR_LIB_CPK,func,0) +#define ERR_REASON(reason) ERR_PACK(ERR_LIB_CPK,0,reason) + +static ERR_STRING_DATA CPK_str_functs[] = +{ + {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_CREATE), "CPK_MASTER_SECRET_create"}, + {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS), "CPK_MASTER_SECRET_extract_public_params"}, + {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY), "CPK_MASTER_SECRET_extract_private_key"}, + {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY), "CPK_PUBLIC_PARAMS_extract_public_key"}, + {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_COMPUTE_SHARE_KEY), "CPK_PUBLIC_PARAMS_compute_share_key"}, + {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_DIGEST), "CPK_F_CPK_MASTER_SECRET_digest"}, + {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_DIGEST), "CPK_F_CPK_PUBLIC_PARAMS_digest"}, + {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_PRINT), "CPK_F_CPK_MASTER_SECRET_print"}, + {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_PRINT), "CPK_F_CPK_PUBLIC_PARAMS_print"}, + {ERR_FUNC(CPK_F_CPK_MASTER_SECRET_VALIDATE_PUBLIC_PARAMS), "CPK_F_CPK_MASTER_SECRET_validate_public_params"}, + {ERR_FUNC(CPK_F_CPK_PUBLIC_PARAMS_VALIDATE_PRIVATE_KEY), "CPK_F_CPK_PUBLIC_PARAMS_validate_private_key"}, + {ERR_FUNC(CPK_F_CPK_MAP_NEW_DEFAULT), "CPK_F_CPK_MAP_new_default"}, + {ERR_FUNC(CPK_F_CPK_MAP_NUM_FACTORS), "CPK_F_CPK_MAP_num_factors"}, + {ERR_FUNC(CPK_F_CPK_MAP_NUM_INDEXES), "CPK_F_CPK_MAP_num_indexes"}, + {ERR_FUNC(CPK_F_CPK_MAP_STR2INDEX), "CPK_F_CPK_MAP_STR2INDEX"}, + {ERR_FUNC(CPK_F_X509_ALGOR_GET1_EC_KEY), "X509_ALGOR_get1_ec_key"}, + {ERR_FUNC(CPK_F_X509_ALGOR_GET1_DSA), "X509_ALGOR_get1_dsa"}, + {0, NULL} +}; + +static ERR_STRING_DATA CPK_str_reasons[] = +{ + {ERR_REASON(CPK_R_BAD_ARGUMENT), "bad argument"}, + {ERR_REASON(CPK_R_UNKNOWN_DIGEST_TYPE), "unknown digest algorithm"}, + {ERR_REASON(CPK_R_UNKNOWN_CIPHER_TYPE), "unknown cipher algorithm"}, + {ERR_REASON(CPK_R_UNKNOWN_MAP_TYPE), "unknown cpk map algorithm"}, + {ERR_REASON(CPK_R_UNKNOWN_CURVE), "unknown elliptic curve"}, + {ERR_REASON(CPK_R_STACK_ERROR), "stack error"}, + {ERR_REASON(CPK_R_DERIVE_KEY_FAILED), "derive key failed"}, + {ERR_REASON(CPK_R_ECIES_ENCRYPT_FAILED), "ecies encryption failed"}, + {ERR_REASON(CPK_R_ECIES_DECRYPT_FAILED), "ecies decryption failed"}, + {ERR_REASON(CPK_R_DER_DECODE_FAILED), "DER decode failed"}, + {ERR_REASON(CPK_R_UNSUPPORTED_PKCS7_CONTENT_TYPE),"CPK_R_UNSUPPORTED_PKCS7_CONTENT_TYPE"}, + {ERR_REASON(CPK_R_SET_SIGNER), "CPK_R_SET_SIGNER"}, + {ERR_REASON(CPK_R_SET_RECIP_INFO), "CPK_R_SET_RECIP_INFO"}, + {ERR_REASON(CPK_R_UNABLE_TO_FIND_MESSAGE_DIGEST),"CPK_R_UNABLE_TO_FIND_MESSAGE_DIGEST"}, + {ERR_REASON(CPK_R_BAD_DATA), "bad data"}, + {ERR_REASON(CPK_R_MAP_FAILED), "CPK_R_MAP_FAILED"}, + {ERR_REASON(CPK_R_ADD_SIGNING_TIME), "CPK_R_ADD_SIGNING_TIME"}, + {ERR_REASON(CPK_R_VERIFY_FAILED), "CPK_R_VERIFY_FAILED"}, + {ERR_REASON(CPK_R_UNKNOWN_ECDH_TYPE), "CPK_R_UNKNOWN_ECDH_TYPE"}, + {ERR_REASON(CPK_R_DIGEST_FAILED), "CPK_R_DIGEST_FAILED"}, + {ERR_REASON(CPK_R_WITHOUT_DECRYPT_KEY), "CPK_R_WITHOUT_DECRYPT_KEY"}, + {ERR_REASON(CPK_R_UNKNOWN_PKCS7_TYPE), "CPK_R_UNKNOWN_PKCS7_TYPE"}, + {ERR_REASON(CPK_R_INVALID_ID_LENGTH), "invalid identity length"}, + {ERR_REASON(CPK_R_INVALID_PKEY_TYPE), "invalid public key type"}, + {ERR_REASON(CPK_R_INVALID_MAP_ALGOR), "invalid map algorithm"}, + {ERR_REASON(CPK_R_PKEY_TYPE_NOT_MATCH), "public key type not match"}, + {0, NULL} +}; + +#endif + +void ERR_load_CPK_strings(void) +{ +#ifndef OPENSSL_NO_ERR + + if (ERR_func_error_string(CPK_str_functs[0].error) == NULL) { + ERR_load_strings(0, CPK_str_functs); + ERR_load_strings(0, CPK_str_reasons); + } + +#endif +} diff --git a/crypto/cpk/cpk_lib.c b/crypto/cpk/cpk_lib.c index 548d9788..4da54860 100644 --- a/crypto/cpk/cpk_lib.c +++ b/crypto/cpk/cpk_lib.c @@ -250,7 +250,7 @@ CPK_PUBLIC_PARAMS *CPK_MASTER_SECRET_extract_public_params(CPK_MASTER_SECRET *ma break; default: - CPKerr(CPK_F_CPK_MASTER_SECRET_CREATE, CPK_R_INVALID_PKEY_TYPE); + CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, CPK_R_INVALID_PKEY_TYPE); goto err; } return param; @@ -562,34 +562,24 @@ static int extract_dsa_params(CPK_MASTER_SECRET *master, CPK_PUBLIC_PARAMS *para unsigned char *pub_ptr; if (!pri || !pub || !ctx) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - ERR_R_MALLOC_FAILURE); goto err; } if (!(dsa = (DSA *)X509_ALGOR_get1_DSA(master->pkey_algor))) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - CPK_R_BAD_DATA); goto err; } pri_size = BN_num_bytes(dsa->q); pub_size = BN_num_bytes(dsa->p); if ((num_factors = CPK_MAP_num_factors(master->map_algor)) <= 0) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - CPK_R_INVALID_MAP_ALGOR); goto err; } if (M_ASN1_STRING_length(master->secret_factors) != pri_size * num_factors) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - CPK_R_BAD_DATA); goto err; } ASN1_STRING_free(param->public_factors); if (!ASN1_STRING_set(param->public_factors, NULL, pub_size * num_factors)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - ERR_R_MALLOC_FAILURE); goto err; } @@ -600,24 +590,16 @@ static int extract_dsa_params(CPK_MASTER_SECRET *master, CPK_PUBLIC_PARAMS *para for (i = 0; i < num_factors; i++) { if (!BN_bin2bn(pri_ptr, pri_size, pri)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - ERR_R_BN_LIB); goto err; } if (BN_is_zero(pri) || BN_cmp(pri, dsa->q) >= 0) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - CPK_R_BAD_DATA); goto err; } if (!BN_mod_exp(pub, dsa->g, pri, dsa->p, ctx)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - ERR_R_BN_LIB); goto err; } if (!BN_bn2bin(pub, pub_ptr + pub_size - BN_num_bytes(pub))) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - ERR_R_BN_LIB); goto err; } @@ -646,35 +628,23 @@ static DSA *extract_dsa_priv_key(CPK_MASTER_SECRET *master, const char *id) if (!bn || !ctx) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - ERR_R_MALLOC_FAILURE); goto err; } if (!(dsa = X509_ALGOR_get1_DSA(master->pkey_algor))) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - CPK_R_BAD_DATA); goto err; } if ((num_indexes = CPK_MAP_num_indexes(master->map_algor)) <= 0) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - CPK_R_INVALID_MAP_ALGOR); goto err; } if (!(index = OPENSSL_malloc(sizeof(int) * num_indexes))) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - CPK_R_INVALID_MAP_ALGOR); goto err; } if (!CPK_MAP_str2index(master->map_algor, id, index)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - CPK_R_INVALID_MAP_ALGOR); goto err; } if (!dsa->priv_key) { if (!(dsa->priv_key = BN_new())) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - ERR_R_MALLOC_FAILURE); goto err; } } @@ -684,30 +654,21 @@ static DSA *extract_dsa_priv_key(CPK_MASTER_SECRET *master, const char *id) for (i = 0; i < num_indexes; i++) { p = M_ASN1_STRING_data(master->secret_factors) + bn_size * index[i]; if (!BN_bin2bn(p, bn_size, bn)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - ERR_R_BN_LIB); goto err; } if (BN_is_zero(bn) || BN_cmp(bn, dsa->q) >= 0) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - CPK_R_BAD_DATA); goto err; } if (!BN_mod_add(dsa->priv_key, dsa->priv_key, bn, dsa->q, ctx)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - ERR_R_X509_LIB); goto err; } } if (!(dsa->pub_key)) if (!(dsa->pub_key = BN_new())) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - ERR_R_MALLOC_FAILURE); goto err; } if (!BN_mod_exp(dsa->pub_key, dsa->g, dsa->priv_key, dsa->p, ctx)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, ERR_R_BN_LIB); goto err; } e = 0; @@ -735,35 +696,23 @@ static DSA *extract_dsa_pub_key(CPK_PUBLIC_PARAMS *param, const char *id) if (!bn || !ctx) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - ERR_R_MALLOC_FAILURE); goto err; } if (!(dsa = X509_ALGOR_get1_DSA(param->pkey_algor))) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - CPK_R_BAD_DATA); goto err; } if ((num_indexes = CPK_MAP_num_indexes(param->map_algor)) <= 0) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - CPK_R_INVALID_MAP_ALGOR); goto err; } if (!(index = OPENSSL_malloc(sizeof(int) * num_indexes))) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - CPK_R_INVALID_MAP_ALGOR); goto err; } if (!CPK_MAP_str2index(param->map_algor, id, index)) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - CPK_R_INVALID_MAP_ALGOR); goto err; } if (!dsa->pub_key) { if (!(dsa->pub_key = BN_new())) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - ERR_R_MALLOC_FAILURE); goto err; } } @@ -773,18 +722,12 @@ static DSA *extract_dsa_pub_key(CPK_PUBLIC_PARAMS *param, const char *id) for (i = 0; i < num_indexes; i++) { p = M_ASN1_STRING_data(param->public_factors) + bn_size * index[i]; if (!BN_bin2bn(p, bn_size, bn)) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - ERR_R_BN_LIB); goto err; } if (BN_is_zero(bn) || BN_cmp(bn, dsa->p) >= 0) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - CPK_R_BAD_DATA); goto err; } if (!BN_mod_add(dsa->pub_key, dsa->pub_key, bn, dsa->p, ctx)) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - ERR_R_X509_LIB); goto err; } } @@ -860,35 +803,26 @@ static int extract_ec_params(CPK_MASTER_SECRET *master, CPK_PUBLIC_PARAMS *param unsigned char *pt_ptr; if (!bn || !order || !ctx) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - ERR_R_MALLOC_FAILURE); goto err; } if (!(ec_key = X509_ALGOR_get1_EC_KEY(master->pkey_algor))) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, CPK_R_BAD_DATA); goto err; } ec_group = EC_KEY_get0_group(ec_key); if (!(EC_GROUP_get_order(ec_group, order, ctx))) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, ERR_R_EC_LIB); goto err; } bn_size = BN_num_bytes(order); pt_size = bn_size + 1; if ((num_factors = CPK_MAP_num_factors(master->map_algor)) <= 0) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - CPK_R_INVALID_MAP_ALGOR); goto err; } if (M_ASN1_STRING_length(master->secret_factors) != bn_size * num_factors) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, CPK_R_BAD_DATA); goto err; } if (!ASN1_STRING_set(param->public_factors, NULL, pt_size * num_factors)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - ERR_R_MALLOC_FAILURE); goto err; } @@ -897,30 +831,21 @@ static int extract_ec_params(CPK_MASTER_SECRET *master, CPK_PUBLIC_PARAMS *param memset(pt_ptr, 0, M_ASN1_STRING_length(param->public_factors)); if (!(pt = EC_POINT_new(ec_group))) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, ERR_R_X509_LIB); goto err; } for (i = 0; i < num_factors; i++) { if (!BN_bin2bn(bn_ptr, bn_size, bn)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - ERR_R_BN_LIB); goto err; } if (BN_is_zero(bn) || BN_cmp(bn, order) >= 0) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - CPK_R_BAD_DATA); goto err; } if (!EC_POINT_mul(ec_group, pt, bn, NULL, NULL, ctx)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - ERR_R_EC_LIB); goto err; } if (!EC_POINT_point2oct(ec_group, pt, POINT_CONVERSION_COMPRESSED, pt_ptr, pt_size, ctx)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PUBLIC_PARAMS, - ERR_R_EC_LIB); goto err; } bn_ptr += bn_size; @@ -954,41 +879,29 @@ static EC_KEY *extract_ec_priv_key(CPK_MASTER_SECRET *master, const char *id) if (!priv_key || !bn || !order || !ctx) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - ERR_R_MALLOC_FAILURE); goto err; } if (!(ec_key = X509_ALGOR_get1_EC_KEY(master->pkey_algor))) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, ERR_R_CPK_LIB); goto err; } ec_group = EC_KEY_get0_group(ec_key); if (!(pub_key = EC_POINT_new(ec_group))) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - ERR_R_MALLOC_FAILURE); goto err; } if ((num_indexes = CPK_MAP_num_indexes(master->map_algor)) <= 0) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - CPK_R_INVALID_MAP_ALGOR); goto err; } if (!(index = OPENSSL_malloc(sizeof(int) * num_indexes))) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - CPK_R_INVALID_MAP_ALGOR); goto err; } if (!CPK_MAP_str2index(master->map_algor, id, index)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - CPK_R_INVALID_MAP_ALGOR); goto err; } BN_zero(priv_key); if (!(EC_GROUP_get_order(EC_KEY_get0_group(ec_key), order, ctx))) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, ERR_R_EC_LIB); goto err; } bn_size = BN_num_bytes(order); @@ -999,33 +912,23 @@ static EC_KEY *extract_ec_priv_key(CPK_MASTER_SECRET *master, const char *id) bn_size * index[i]; if (!BN_bin2bn(p, bn_size, bn)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, ERR_R_BN_LIB); goto err; } if (BN_is_zero(bn) || BN_cmp(bn, order) >= 0) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - CPK_R_BAD_DATA); goto err; } if (!BN_mod_add(priv_key, priv_key, bn, order, ctx)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, ERR_R_BN_LIB); goto err; } } if (!EC_KEY_set_private_key(ec_key, priv_key)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - ERR_R_EC_LIB); goto err; } if (!EC_POINT_mul(ec_group, pub_key, priv_key, NULL, NULL, ctx)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - ERR_R_EC_LIB); goto err; } if (!EC_KEY_set_public_key(ec_key, pub_key)) { - CPKerr(CPK_F_CPK_MASTER_SECRET_EXTRACT_PRIVATE_KEY, - ERR_R_EC_LIB); goto err; } e = 0; @@ -1058,55 +961,39 @@ static EC_KEY *extract_ec_pub_key(CPK_PUBLIC_PARAMS *param, const char *id) int i, bn_size, pt_size, num_indexes, num_factors; if (!(ec_key = X509_ALGOR_get1_EC_KEY(param->pkey_algor))) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - ERR_R_CPK_LIB); goto err; } ec_group = EC_KEY_get0_group(ec_key); if (!(pub_key = EC_POINT_new(ec_group))) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, ERR_R_EC_LIB); goto err; } if (!(pt = EC_POINT_new(ec_group))) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, ERR_R_EC_LIB); goto err; } if (!EC_GROUP_get_order(ec_group, order, ctx)) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, ERR_R_EC_LIB); goto err; } bn_size = BN_num_bytes(order); pt_size = bn_size + 1; if ((num_factors = CPK_MAP_num_factors(param->map_algor)) <= 0) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - ERR_R_CPK_LIB); goto err; } if (M_ASN1_STRING_length(param->public_factors) != pt_size * num_factors) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - CPK_R_BAD_DATA); goto err; } if ((num_indexes = CPK_MAP_num_indexes(param->map_algor)) <= 0) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - CPK_R_INVALID_MAP_ALGOR); goto err; } if (!(index = OPENSSL_malloc(sizeof(int) * num_indexes))) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - CPK_R_INVALID_MAP_ALGOR); goto err; } if (!CPK_MAP_str2index(param->map_algor, id, index)) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - CPK_R_INVALID_MAP_ALGOR); goto err; } if (!EC_POINT_set_to_infinity(ec_group, pub_key)) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, ERR_R_EC_LIB); goto err; } for (i = 0; i < num_indexes; i++) { @@ -1115,20 +1002,14 @@ static EC_KEY *extract_ec_pub_key(CPK_PUBLIC_PARAMS *param, const char *id) pt_size * index[i]; if (!EC_POINT_oct2point(ec_group, pt, p, pt_size, ctx)) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - CPK_R_BAD_DATA); goto err; } if (!EC_POINT_add(ec_group, pub_key, pub_key, pt, ctx)) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - ERR_R_EC_LIB); goto err; } } if (!EC_KEY_set_public_key(ec_key, pub_key)) { - CPKerr(CPK_F_CPK_PUBLIC_PARAMS_EXTRACT_PUBLIC_KEY, - ERR_R_EC_LIB); goto err; } e = 0; diff --git a/crypto/dh/Makefile b/crypto/dh/Makefile index 46fa5ac5..6cdc99f4 100644 --- a/crypto/dh/Makefile +++ b/crypto/dh/Makefile @@ -85,11 +85,13 @@ dh_ameth.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h dh_ameth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h dh_ameth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h dh_ameth.o: ../../include/openssl/err.h ../../include/openssl/evp.h -dh_ameth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -dh_ameth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +dh_ameth.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +dh_ameth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +dh_ameth.o: ../../include/openssl/opensslconf.h dh_ameth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h dh_ameth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -dh_ameth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +dh_ameth.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +dh_ameth.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h dh_ameth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h dh_ameth.o: ../../include/openssl/x509_vfy.h ../asn1/asn1_locl.h ../cryptlib.h dh_ameth.o: dh_ameth.c @@ -139,11 +141,13 @@ dh_kdf.o: ../../include/openssl/buffer.h ../../include/openssl/cms.h dh_kdf.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h dh_kdf.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h dh_kdf.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h -dh_kdf.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +dh_kdf.o: ../../include/openssl/err.h ../../include/openssl/evp.h +dh_kdf.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h dh_kdf.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h dh_kdf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h dh_kdf.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h dh_kdf.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +dh_kdf.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h dh_kdf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h dh_kdf.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h dh_kdf.o: dh_kdf.c @@ -161,14 +165,15 @@ dh_lib.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h dh_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h dh_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h dh_lib.o: ../../include/openssl/engine.h ../../include/openssl/err.h -dh_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -dh_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -dh_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -dh_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -dh_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -dh_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -dh_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -dh_lib.o: ../cryptlib.h dh_lib.c +dh_lib.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +dh_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +dh_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +dh_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +dh_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +dh_lib.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +dh_lib.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +dh_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +dh_lib.o: ../../include/openssl/x509_vfy.h ../cryptlib.h dh_lib.c dh_pmeth.o: ../../e_os.h ../../include/openssl/asn1.h dh_pmeth.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h dh_pmeth.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h @@ -176,12 +181,13 @@ dh_pmeth.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h dh_pmeth.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h dh_pmeth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h dh_pmeth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -dh_pmeth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -dh_pmeth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -dh_pmeth.o: ../../include/openssl/opensslconf.h +dh_pmeth.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +dh_pmeth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +dh_pmeth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h dh_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h dh_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -dh_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +dh_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +dh_pmeth.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h dh_pmeth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h dh_pmeth.o: ../../include/openssl/x509_vfy.h ../cryptlib.h ../evp/evp_locl.h dh_pmeth.o: dh_pmeth.c diff --git a/crypto/dsa/Makefile b/crypto/dsa/Makefile index 81092013..ff538d52 100644 --- a/crypto/dsa/Makefile +++ b/crypto/dsa/Makefile @@ -85,12 +85,13 @@ dsa_ameth.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h dsa_ameth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h dsa_ameth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h dsa_ameth.o: ../../include/openssl/err.h ../../include/openssl/evp.h -dsa_ameth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -dsa_ameth.o: ../../include/openssl/objects.h +dsa_ameth.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +dsa_ameth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h dsa_ameth.o: ../../include/openssl/opensslconf.h dsa_ameth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h dsa_ameth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -dsa_ameth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +dsa_ameth.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +dsa_ameth.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h dsa_ameth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h dsa_ameth.o: ../../include/openssl/x509_vfy.h ../asn1/asn1_locl.h ../cryptlib.h dsa_ameth.o: dsa_ameth.c @@ -148,14 +149,15 @@ dsa_lib.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h dsa_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h dsa_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h dsa_lib.o: ../../include/openssl/engine.h ../../include/openssl/err.h -dsa_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -dsa_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -dsa_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -dsa_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -dsa_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -dsa_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -dsa_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -dsa_lib.o: ../cryptlib.h dsa_lib.c +dsa_lib.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +dsa_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +dsa_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +dsa_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +dsa_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +dsa_lib.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +dsa_lib.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +dsa_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +dsa_lib.o: ../../include/openssl/x509_vfy.h ../cryptlib.h dsa_lib.c dsa_ossl.o: ../../e_os.h ../../include/openssl/asn1.h dsa_ossl.o: ../../include/openssl/bio.h ../../include/openssl/bn.h dsa_ossl.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h @@ -173,12 +175,13 @@ dsa_pmeth.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h dsa_pmeth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h dsa_pmeth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h dsa_pmeth.o: ../../include/openssl/err.h ../../include/openssl/evp.h -dsa_pmeth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -dsa_pmeth.o: ../../include/openssl/objects.h +dsa_pmeth.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +dsa_pmeth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h dsa_pmeth.o: ../../include/openssl/opensslconf.h dsa_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h dsa_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -dsa_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +dsa_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +dsa_pmeth.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h dsa_pmeth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h dsa_pmeth.o: ../../include/openssl/x509_vfy.h ../cryptlib.h ../evp/evp_locl.h dsa_pmeth.o: dsa_locl.h dsa_pmeth.c diff --git a/crypto/ec/Makefile b/crypto/ec/Makefile index 6749a875..6227bda8 100644 --- a/crypto/ec/Makefile +++ b/crypto/ec/Makefile @@ -124,11 +124,13 @@ ec_ameth.o: ../../include/openssl/cms.h ../../include/openssl/crypto.h ec_ameth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ec_ameth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ec_ameth.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ec_ameth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ec_ameth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +ec_ameth.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +ec_ameth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +ec_ameth.o: ../../include/openssl/opensslconf.h ec_ameth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h ec_ameth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -ec_ameth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ec_ameth.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ec_ameth.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ec_ameth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h ec_ameth.o: ../../include/openssl/x509_vfy.h ../asn1/asn1_locl.h ../cryptlib.h ec_ameth.o: ec_ameth.c @@ -136,11 +138,12 @@ ec_asn1.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h ec_asn1.o: ../../include/openssl/bio.h ../../include/openssl/bn.h ec_asn1.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h ec_asn1.o: ../../include/openssl/ec.h ../../include/openssl/err.h -ec_asn1.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ec_asn1.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -ec_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -ec_asn1.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h -ec_asn1.o: ../../include/openssl/symhacks.h ec_asn1.c ec_lcl.h +ec_asn1.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +ec_asn1.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +ec_asn1.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +ec_asn1.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h +ec_asn1.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +ec_asn1.o: ec_asn1.c ec_lcl.h ec_check.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h ec_check.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h ec_check.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h @@ -209,13 +212,15 @@ ec_pmeth.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h ec_pmeth.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h ec_pmeth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h ec_pmeth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h -ec_pmeth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -ec_pmeth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +ec_pmeth.o: ../../include/openssl/ecdsa.h ../../include/openssl/ecies.h +ec_pmeth.o: ../../include/openssl/err.h ../../include/openssl/evp.h +ec_pmeth.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h ec_pmeth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h ec_pmeth.o: ../../include/openssl/opensslconf.h ec_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h ec_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -ec_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ec_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ec_pmeth.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ec_pmeth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h ec_pmeth.o: ../../include/openssl/x509_vfy.h ../cryptlib.h ../evp/evp_locl.h ec_pmeth.o: ec_lcl.h ec_pmeth.c diff --git a/crypto/ec/ec.h b/crypto/ec/ec.h index a7333a89..4f7904e4 100644 --- a/crypto/ec/ec.h +++ b/crypto/ec/ec.h @@ -1264,32 +1264,31 @@ void ERR_load_EC_strings(void); # define EC_F_OLD_EC_PRIV_DECODE 222 # define EC_F_PKEY_EC_CTRL 197 # define EC_F_PKEY_EC_CTRL_STR 198 +# define EC_F_PKEY_EC_DECRYPT 301 # define EC_F_PKEY_EC_DERIVE 217 +# define EC_F_PKEY_EC_ENCRYPT 300 # define EC_F_PKEY_EC_KEYGEN 199 # define EC_F_PKEY_EC_PARAMGEN 219 # define EC_F_PKEY_EC_SIGN 218 - -# ifndef OPENSSL_NO_GMSSL -# define EC_F_PKEY_EC_ENCRYPT 300 -# define EC_F_PKEY_EC_DECRYPT 301 -# define EC_F_PKEY_SM2_INIT 302 -# define EC_F_PKEY_SM2_COPY 303 -# define EC_F_PKEY_SM2_CLEANUP 304 -# define EC_F_PKEY_SM2_PARAMGEN 305 -# define EC_F_PKEY_SM2_KEYGEN 306 -# define EC_F_PKEY_SM2_SIGN 307 -# define EC_F_PKEY_SM2_VERIFY 308 -# define EC_F_PKEY_SM2_SIGNCTX_INIT 309 -# define EC_F_PKEY_SM2_SIGNCTX 310 -# define EC_F_PKEY_SM2_VERIFYCTX_INIT 311 -# define EC_F_PKEY_SM2_VERIFYCTX 312 -# define EC_F_PKEY_SM2_ENCRYPT 313 -# define EC_F_PKEY_SM2_DECRYPT 314 -# define EC_F_PKEY_SM2_DERIVE_INIT 315 -# define EC_F_PKEY_SM2_DERIVE 316 -# define EC_F_PKEY_SM2_CTRL 317 -# define EC_F_PKEY_SM2_CTRL_STR 318 -# endif +# define EC_F_PKEY_EC_SIGNCTX 246 +# define EC_F_PKEY_EC_SIGNCTX_INIT 247 +# define EC_F_PKEY_SM2_CLEANUP 304 +# define EC_F_PKEY_SM2_COPY 303 +# define EC_F_PKEY_SM2_CTRL 317 +# define EC_F_PKEY_SM2_CTRL_STR 318 +# define EC_F_PKEY_SM2_DECRYPT 314 +# define EC_F_PKEY_SM2_DERIVE 316 +# define EC_F_PKEY_SM2_DERIVE_INIT 315 +# define EC_F_PKEY_SM2_ENCRYPT 313 +# define EC_F_PKEY_SM2_INIT 302 +# define EC_F_PKEY_SM2_KEYGEN 306 +# define EC_F_PKEY_SM2_PARAMGEN 305 +# define EC_F_PKEY_SM2_SIGN 307 +# define EC_F_PKEY_SM2_SIGNCTX 310 +# define EC_F_PKEY_SM2_SIGNCTX_INIT 309 +# define EC_F_PKEY_SM2_VERIFY 308 +# define EC_F_PKEY_SM2_VERIFYCTX 312 +# define EC_F_PKEY_SM2_VERIFYCTX_INIT 311 /* Reason codes. */ # define EC_R_ASN1_ERROR 115 diff --git a/crypto/ec/ec_curve.c b/crypto/ec/ec_curve.c index 09c5187a..620318b3 100644 --- a/crypto/ec/ec_curve.c +++ b/crypto/ec/ec_curve.c @@ -2835,7 +2835,7 @@ static const struct { } }; -#ifndef OPENSSL_NO_SM2 +#ifndef OPENSSL_NO_GMSSL static const struct { EC_CURVE_DATA h; unsigned char data[0 + 32 * 6]; @@ -2865,12 +2865,42 @@ static const struct { 0xBC, 0x37, 0x36, 0xA2, 0xF4, 0xF6, 0x77, 0x9C, 0x59, 0xBD, 0xCE, 0xE3, 0x6B, 0x69, 0x21, 0x53, 0xD0, 0xA9, 0x87, 0x7C, 0xC6, 0x2A, 0x47, 0x40, 0x02, 0xDF, 0x32, 0xE5, 0x21, 0x39, 0xF0, 0xA0, - /* order */ + /* order */ 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x72, 0x03, 0xDF, 0x6B, 0x21, 0xC6, 0x05, 0x2B, 0x53, 0xBB, 0xF4, 0x09, 0x39, 0xD5, 0x41, 0x23 } }; + +static const struct { + EC_CURVE_DATA h; + unsigned char data[0 + 24 * 6]; +} _EC_WAPI_PRIME_192V1 = { + { + NID_X9_62_prime_field, 0, 24, 1 + }, + { + /* no seed */ + /* p */ + 0xBD, 0xB6, 0xF4, 0xFE, 0x3E, 0x8B, 0x1D, 0x9E, 0x0D, 0xA8, 0xC0, 0xD4, + 0x6F, 0x4C, 0x31, 0x8C, 0xEF, 0xE4, 0xAF, 0xE3, 0xB6, 0xB8, 0x55, 0x1F, + /* a */ + 0xBB, 0x8E, 0x5E, 0x8F, 0xBC, 0x11, 0x5E, 0x13, 0x9F, 0xE6, 0xA8, 0x14, + 0xFE, 0x48, 0xAA, 0xA6, 0xF0, 0xAD, 0xA1, 0xAA, 0x5D, 0xF9, 0x19, 0x85, + /* b */ + 0x18, 0x54, 0xBE, 0xBD, 0xC3, 0x1B, 0x21, 0xB7, 0xAE, 0xFC, 0x80, 0xAB, + 0x0E, 0xCD, 0x10, 0xD5, 0xB1, 0xB3, 0x30, 0x8E, 0x6D, 0xBF, 0x11, 0xC1, + /* x */ + 0x4A, 0xD5, 0xF7, 0x04, 0x8D, 0xE7, 0x09, 0xAD, 0x51, 0x23, 0x6D, 0xE6, + 0x5E, 0x4D, 0x4B, 0x48, 0x2C, 0x83, 0x6D, 0xC6, 0xE4, 0x10, 0x66, 0x40, + /* y */ + 0x02, 0xBB, 0x3A, 0x02, 0xD4, 0xAA, 0xAD, 0xAC, 0xAE, 0x24, 0x81, 0x7A, + 0x4C, 0xA3, 0xA1, 0xB0, 0x14, 0xB5, 0x27, 0x04, 0x32, 0xDB, 0x27, 0xD2, + /* order */ + 0xBD, 0xB6, 0xF4, 0xFE, 0x3E, 0x8B, 0x1D, 0x9E, 0x0D, 0xA8, 0xC0, 0xD4, + 0x0F, 0xC9, 0x62, 0x19, 0x5D, 0xFA, 0xE7, 0x6F, 0x56, 0x56, 0x46, 0x77, + } +}; #endif typedef struct _ec_list_element_st { @@ -3082,9 +3112,11 @@ static const ec_list_element curve_list[] = { "RFC 5639 curve over a 512 bit prime field"}, {NID_brainpoolP512t1, &_EC_brainpoolP512t1.h, 0, "RFC 5639 curve over a 512 bit prime field"}, -#ifndef OPENSSL_NO_SM2 +#ifndef OPENSSL_NO_GMSSL {NID_sm2p256v1, &_EC_SM2_PRIME_256V1.h, 0, "SM2 curve over a 256 bit prime field"}, + {NID_wapip192v1, &_EC_WAPI_PRIME_192V1.h, 0, + "WAPI curve over a 192 bit prime field"}, #endif }; diff --git a/crypto/ec/ec_err.c b/crypto/ec/ec_err.c index 395742cb..9d64d209 100644 --- a/crypto/ec/ec_err.c +++ b/crypto/ec/ec_err.c @@ -1,6 +1,6 @@ /* crypto/ec/ec_err.c */ /* ==================================================================== - * Copyright (c) 1999-2015 The OpenSSL Project. All rights reserved. + * Copyright (c) 1999-2016 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 @@ -250,15 +250,31 @@ static ERR_STRING_DATA EC_str_functs[] = { {ERR_FUNC(EC_F_OLD_EC_PRIV_DECODE), "OLD_EC_PRIV_DECODE"}, {ERR_FUNC(EC_F_PKEY_EC_CTRL), "PKEY_EC_CTRL"}, {ERR_FUNC(EC_F_PKEY_EC_CTRL_STR), "PKEY_EC_CTRL_STR"}, + {ERR_FUNC(EC_F_PKEY_EC_DECRYPT), "PKEY_EC_DECRYPT"}, {ERR_FUNC(EC_F_PKEY_EC_DERIVE), "PKEY_EC_DERIVE"}, + {ERR_FUNC(EC_F_PKEY_EC_ENCRYPT), "PKEY_EC_ENCRYPT"}, {ERR_FUNC(EC_F_PKEY_EC_KEYGEN), "PKEY_EC_KEYGEN"}, {ERR_FUNC(EC_F_PKEY_EC_PARAMGEN), "PKEY_EC_PARAMGEN"}, {ERR_FUNC(EC_F_PKEY_EC_SIGN), "PKEY_EC_SIGN"}, - {ERR_FUNC(EC_F_PKEY_EC_ENCRYPT), "PKEY_EC_ENCRYPT"}, - {ERR_FUNC(EC_F_PKEY_EC_DECRYPT), "PKEY_EC_DECRYPT"}, - {ERR_FUNC(EC_F_PKEY_SM2_SIGN), "PKEY_SM2_SIGN"}, - {ERR_FUNC(EC_F_PKEY_SM2_ENCRYPT), "PKEY_SM2_ENCRYPT"}, + {ERR_FUNC(EC_F_PKEY_EC_SIGNCTX), "PKEY_EC_SIGNCTX"}, + {ERR_FUNC(EC_F_PKEY_EC_SIGNCTX_INIT), "PKEY_EC_SIGNCTX_INIT"}, + {ERR_FUNC(EC_F_PKEY_SM2_CLEANUP), "PKEY_SM2_CLEANUP"}, + {ERR_FUNC(EC_F_PKEY_SM2_COPY), "PKEY_SM2_COPY"}, + {ERR_FUNC(EC_F_PKEY_SM2_CTRL), "PKEY_SM2_CTRL"}, + {ERR_FUNC(EC_F_PKEY_SM2_CTRL_STR), "PKEY_SM2_CTRL_STR"}, {ERR_FUNC(EC_F_PKEY_SM2_DECRYPT), "PKEY_SM2_DECRYPT"}, + {ERR_FUNC(EC_F_PKEY_SM2_DERIVE), "PKEY_SM2_DERIVE"}, + {ERR_FUNC(EC_F_PKEY_SM2_DERIVE_INIT), "PKEY_SM2_DERIVE_INIT"}, + {ERR_FUNC(EC_F_PKEY_SM2_ENCRYPT), "PKEY_SM2_ENCRYPT"}, + {ERR_FUNC(EC_F_PKEY_SM2_INIT), "PKEY_SM2_INIT"}, + {ERR_FUNC(EC_F_PKEY_SM2_KEYGEN), "PKEY_SM2_KEYGEN"}, + {ERR_FUNC(EC_F_PKEY_SM2_PARAMGEN), "PKEY_SM2_PARAMGEN"}, + {ERR_FUNC(EC_F_PKEY_SM2_SIGN), "PKEY_SM2_SIGN"}, + {ERR_FUNC(EC_F_PKEY_SM2_SIGNCTX), "PKEY_SM2_SIGNCTX"}, + {ERR_FUNC(EC_F_PKEY_SM2_SIGNCTX_INIT), "PKEY_SM2_SIGNCTX_INIT"}, + {ERR_FUNC(EC_F_PKEY_SM2_VERIFY), "PKEY_SM2_VERIFY"}, + {ERR_FUNC(EC_F_PKEY_SM2_VERIFYCTX), "PKEY_SM2_VERIFYCTX"}, + {ERR_FUNC(EC_F_PKEY_SM2_VERIFYCTX_INIT), "PKEY_SM2_VERIFYCTX_INIT"}, {0, NULL} }; diff --git a/crypto/ec/ec_pmeth.c b/crypto/ec/ec_pmeth.c index 3770b0ea..8c62c70c 100644 --- a/crypto/ec/ec_pmeth.c +++ b/crypto/ec/ec_pmeth.c @@ -177,7 +177,7 @@ static void pkey_ec_cleanup(EVP_PKEY_CTX *ctx) static int pkey_ec_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, const unsigned char *dgst, size_t dgstlen) { - int ret; + int ret = 0; EC_PKEY_CTX *dctx = ctx->data; EC_KEY *ec_key = ctx->pkey->pkey.ec; int type; @@ -209,6 +209,8 @@ static int pkey_ec_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, ret = ECDSA_sign(type, dgst, dgstlen, sig, &len, ec_key); } else if (dctx->sign_type == NID_sm_scheme) { ret = SM2_sign(type, dgst, dgstlen, sig, &len, ec_key); + } else { + //error } if (ret <= 0) @@ -239,14 +241,12 @@ static int pkey_ec_verify(EVP_PKEY_CTX *ctx, return ret; } -#if 0 static int int_update(EVP_MD_CTX *ctx, const void *data, size_t count) { if (!EVP_DigestUpdate(ctx, data, count)) return 0; return 1; } -#endif static int pkey_ec_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx) { @@ -256,23 +256,22 @@ static int pkey_ec_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx) unsigned char zid[EVP_MAX_MD_SIZE]; unsigned int zidlen = sizeof(zid); - // the reason might be we need to init mctx->udpate if (dctx->sign_type == NID_sm_scheme) { - /* if (!SM2_compute_id_digest(md, zid, &zidlen, ec_key)) { - ECerr(EC_F_PKEY_SM2_SIGNCTX_INIT, ERR_R_SM2_LIB); + ECerr(EC_F_PKEY_EC_SIGNCTX_INIT, ERR_R_SM2_LIB); return 0; } + + mctx->update = int_update; + if (!mctx->update(mctx, zid, zidlen)) { - ECerr(EC_F_PKEY_SM2_SIGNCTX_INIT, ERR_R_EVP_LIB); + ECerr(EC_F_PKEY_EC_SIGNCTX_INIT, ERR_R_EVP_LIB); return 0; } - */ } - //ctx->update = int_update; return 1; } @@ -280,7 +279,7 @@ static int pkey_ec_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx) static int pkey_ec_signctx(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, EVP_MD_CTX *mctx) { - int ret; + int ret = 0; unsigned int len; EC_PKEY_CTX *dctx = ctx->data; EC_KEY *ec_key = ctx->pkey->pkey.ec; @@ -292,15 +291,16 @@ static int pkey_ec_signctx(EVP_PKEY_CTX *ctx, *siglen = SM2_signature_size(ec_key); return 1; } else if (*siglen < (size_t)SM2_signature_size(ec_key)) { - ECerr(EC_F_PKEY_SM2_SIGNCTX, EC_R_BUFFER_TOO_SMALL); + ECerr(EC_F_PKEY_EC_SIGNCTX, EC_R_BUFFER_TOO_SMALL); return 0; } if (!EVP_DigestFinal_ex(mctx, dgst, &dgstlen)) { - ECerr(EC_F_PKEY_SM2_SIGNCTX, ERR_R_EVP_LIB); + ECerr(EC_F_PKEY_EC_SIGNCTX, ERR_R_EVP_LIB); return 0; } + len = *siglen; if (dctx->sign_type == NID_sm_scheme) ret = SM2_sign(type, dgst, dgstlen, sig, &len, ec_key); else if (dctx->sign_type == NID_secg_scheme) diff --git a/crypto/ecdh/Makefile b/crypto/ecdh/Makefile index 1b31ba1f..706e8c5e 100644 --- a/crypto/ecdh/Makefile +++ b/crypto/ecdh/Makefile @@ -105,14 +105,15 @@ ech_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h ech_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ech_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ech_lib.o: ../../include/openssl/engine.h ../../include/openssl/err.h -ech_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -ech_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -ech_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -ech_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -ech_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -ech_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -ech_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -ech_lib.o: ech_lib.c ech_locl.h +ech_lib.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +ech_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ech_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +ech_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +ech_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +ech_lib.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ech_lib.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +ech_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +ech_lib.o: ../../include/openssl/x509_vfy.h ech_lib.c ech_locl.h ech_ossl.o: ../../e_os.h ../../include/openssl/asn1.h ech_ossl.o: ../../include/openssl/bio.h ../../include/openssl/bn.h ech_ossl.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h diff --git a/crypto/ecdsa/Makefile b/crypto/ecdsa/Makefile index 4ce00e8f..ce2b10d7 100644 --- a/crypto/ecdsa/Makefile +++ b/crypto/ecdsa/Makefile @@ -99,13 +99,15 @@ ecs_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h ecs_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h ecs_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h ecs_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ecs_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ecs_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -ecs_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -ecs_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -ecs_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -ecs_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -ecs_lib.o: ../../include/openssl/x509_vfy.h ecs_lib.c ecs_locl.h +ecs_lib.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +ecs_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +ecs_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +ecs_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +ecs_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +ecs_lib.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +ecs_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +ecs_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +ecs_lib.o: ecs_lib.c ecs_locl.h ecs_ossl.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h ecs_ossl.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h ecs_ossl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h @@ -119,12 +121,14 @@ ecs_sign.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h ecs_sign.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h ecs_sign.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ecs_sign.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h -ecs_sign.o: ../../include/openssl/engine.h ../../include/openssl/evp.h +ecs_sign.o: ../../include/openssl/engine.h ../../include/openssl/err.h +ecs_sign.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h ecs_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h ecs_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h ecs_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h ecs_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h ecs_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +ecs_sign.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h ecs_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h ecs_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h ecs_sign.o: ecs_locl.h ecs_sign.c @@ -132,11 +136,13 @@ ecs_vrf.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h ecs_vrf.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h ecs_vrf.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ecs_vrf.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h -ecs_vrf.o: ../../include/openssl/engine.h ../../include/openssl/evp.h +ecs_vrf.o: ../../include/openssl/engine.h ../../include/openssl/err.h +ecs_vrf.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h ecs_vrf.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h ecs_vrf.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h ecs_vrf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h ecs_vrf.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -ecs_vrf.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ecs_vrf.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ecs_vrf.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ecs_vrf.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h ecs_vrf.o: ../../include/openssl/x509_vfy.h ecs_locl.h ecs_vrf.c diff --git a/crypto/ecies/Makefile b/crypto/ecies/Makefile index 5c448c61..e5add24e 100644 --- a/crypto/ecies/Makefile +++ b/crypto/ecies/Makefile @@ -17,13 +17,12 @@ TEST=eciestest.c APPS= LIB=$(TOP)/libcrypto.a -LIBSRC= ecies_lib.c ecies_asn1.c ecies_err.c kdf_x9_63.c - -LIBOBJ= ecies_lib.o ecies_asn1.o ecies_err.o kdf_x9_63.o +LIBSRC= ecies_lib.c ecies_asn1.c ecies_err.c +LIBOBJ= ecies_lib.o ecies_asn1.o ecies_err.o SRC= $(LIBSRC) -EXHEADER= ecies.h kdf.h +EXHEADER= ecies.h HEADER= ecies_locl.h $(EXHEADER) ALL= $(GENERAL) $(SRC) $(HEADER) @@ -77,66 +76,50 @@ clean: # DO NOT DELETE THIS LINE -- make depend depends on it. -ecs_asn1.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h -ecs_asn1.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h -ecs_asn1.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h -ecs_asn1.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -ecs_asn1.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h -ecs_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -ecs_asn1.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h -ecs_asn1.o: ../../include/openssl/symhacks.h ecs_asn1.c ecs_locl.h -ecs_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h -ecs_err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h -ecs_err.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h -ecs_err.o: ../../include/openssl/err.h ../../include/openssl/lhash.h -ecs_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -ecs_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h -ecs_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -ecs_err.o: ecs_err.c -ecs_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h -ecs_lib.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h -ecs_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h -ecs_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h -ecs_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h -ecs_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ecs_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ecs_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -ecs_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -ecs_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -ecs_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -ecs_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -ecs_lib.o: ../../include/openssl/x509_vfy.h ecs_lib.c ecs_locl.h -ecs_ossl.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h -ecs_ossl.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h -ecs_ossl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h -ecs_ossl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -ecs_ossl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ecs_ossl.o: ../../include/openssl/opensslconf.h -ecs_ossl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -ecs_ossl.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h -ecs_ossl.o: ../../include/openssl/symhacks.h ecs_locl.h ecs_ossl.c -ecs_sign.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h -ecs_sign.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h -ecs_sign.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h -ecs_sign.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h -ecs_sign.o: ../../include/openssl/engine.h ../../include/openssl/evp.h -ecs_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ecs_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -ecs_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -ecs_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h -ecs_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -ecs_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -ecs_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -ecs_sign.o: ecs_locl.h ecs_sign.c -ecs_vrf.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h -ecs_vrf.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h -ecs_vrf.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h -ecs_vrf.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h -ecs_vrf.o: ../../include/openssl/engine.h ../../include/openssl/evp.h -ecs_vrf.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ecs_vrf.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -ecs_vrf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -ecs_vrf.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -ecs_vrf.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -ecs_vrf.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -ecs_vrf.o: ../../include/openssl/x509_vfy.h ecs_locl.h ecs_vrf.c +ecies_asn1.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h +ecies_asn1.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h +ecies_asn1.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h +ecies_asn1.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h +ecies_asn1.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h +ecies_asn1.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +ecies_asn1.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ecies_asn1.o: ../../include/openssl/objects.h +ecies_asn1.o: ../../include/openssl/opensslconf.h +ecies_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +ecies_asn1.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +ecies_asn1.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ecies_asn1.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +ecies_asn1.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +ecies_asn1.o: ../../include/openssl/x509_vfy.h ecies.h ecies_asn1.c +ecies_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +ecies_err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +ecies_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +ecies_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +ecies_err.o: ../../include/openssl/ecies.h ../../include/openssl/err.h +ecies_err.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +ecies_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ecies_err.o: ../../include/openssl/objects.h +ecies_err.o: ../../include/openssl/opensslconf.h +ecies_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +ecies_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +ecies_err.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ecies_err.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +ecies_err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +ecies_err.o: ../../include/openssl/x509_vfy.h ecies_err.c +ecies_lib.o: ../../include/openssl/aes.h ../../include/openssl/asn1.h +ecies_lib.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h +ecies_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h +ecies_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h +ecies_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/ecies.h +ecies_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h +ecies_lib.o: ../../include/openssl/hmac.h ../../include/openssl/kdf.h +ecies_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ecies_lib.o: ../../include/openssl/objects.h +ecies_lib.o: ../../include/openssl/opensslconf.h +ecies_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +ecies_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h +ecies_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +ecies_lib.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +ecies_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +ecies_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +ecies_lib.o: ecies_lib.c diff --git a/crypto/ecies/ecies.h b/crypto/ecies/ecies.h index d2528bf2..bac41690 100644 --- a/crypto/ecies/ecies.h +++ b/crypto/ecies/ecies.h @@ -142,31 +142,34 @@ int ECIES_decrypt_with_recommended(unsigned char *out, size_t *outlen, void ERR_load_ECIES_strings(void); + +/* 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_ECIES_strings(void); + /* Error codes for the ECIES functions. */ /* Function codes. */ -#define ECIES_F_I2D_ECIESPARAMETERS 100 -#define ECIES_F_D2I_ECIESPARAMETERS 101 -#define ECIES_F_ECIES_SET_PARAMETERS 102 -#define ECIES_F_ECIES_GET_PARAMETERS 103 -#define ECIES_F_ECIES_DO_ENCRYPT 104 -#define ECIES_F_ECIES_DO_DECRYPT 105 -#define ECIES_F_ECIES_ENCRYPT 106 -#define ECIES_F_ECIES_DECRYPT 107 +# define ECIES_F_D2I_ECIESPARAMETERS 100 +# define ECIES_F_ECIES_DECRYPT 101 +# define ECIES_F_ECIES_DO_DECRYPT 102 +# define ECIES_F_ECIES_DO_ENCRYPT 103 +# define ECIES_F_ECIES_ENCRYPT 104 +# define ECIES_F_I2D_ECIESPARAMETERS 105 /* Reason codes. */ -#define ECIES_R_BAD_DATA 100 -#define ECIES_R_UNKNOWN_CIPHER_TYPE 101 -#define ECIES_R_ENCRYPT_FAILED 102 -#define ECIES_R_DECRYPT_FAILED 103 -#define ECIES_R_UNKNOWN_MAC_TYPE 104 -#define ECIES_R_GEN_MAC_FAILED 105 -#define ECIES_R_VERIFY_MAC_FAILED 106 -#define ECIES_R_ECDH_FAILED 107 -#define ECIES_R_BUFFER_TOO_SMALL 108 +# define ECIES_R_BAD_DATA 100 +# define ECIES_R_BUFFER_TOO_SMALL 101 +# define ECIES_R_DECRYPT_FAILED 102 +# define ECIES_R_ECDH_FAILED 103 +# define ECIES_R_ENCRYPT_FAILED 104 +# define ECIES_R_GEN_MAC_FAILED 105 +# define ECIES_R_VERIFY_MAC_FAILED 106 -#ifdef __cplusplus +#ifdef __cplusplus } #endif #endif - diff --git a/crypto/ecies/ecies_err.c b/crypto/ecies/ecies_err.c index 88d0c22a..68db7f10 100644 --- a/crypto/ecies/ecies_err.c +++ b/crypto/ecies/ecies_err.c @@ -1,6 +1,6 @@ /* crypto/ecies/ecies_err.c */ /* ==================================================================== - * Copyright (c) 2007 - 2015 The GmSSL Project. All rights reserved. + * Copyright (c) 1999-2016 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 @@ -16,27 +16,27 @@ * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: - * "This product includes software developed by the GmSSL Project. - * (http://gmssl.org/)" + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * - * 4. The name "GmSSL Project" must not be used to endorse or promote - * products derived from this software without prior written - * permission. For written permission, please contact - * guanzhi1980@gmail.com. + * 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 "GmSSL" - * nor may "GmSSL" appear in their names without prior written - * permission of the GmSSL 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 GmSSL Project - * (http://gmssl.org/)" + * "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 GmSSL PROJECT ``AS IS'' AND ANY + * 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 GmSSL PROJECT OR + * 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; @@ -47,40 +47,47 @@ * 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). + * */ +/* + * NOTE: this file was auto generated by the mkerr.pl script: any changes + * made to it will be overwritten when the script next updates this file, + * only reason strings will be preserved. + */ #include #include -#include "ecies.h" +#include +/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -#define ERR_FUNC(func) ERR_PACK(ERR_LIB_ECIES,func,0) -#define ERR_REASON(reason) ERR_PACK(ERR_LIB_ECIES,0,reason) - +# define ERR_FUNC(func) ERR_PACK(ERR_LIB_ECIES,func,0) +# define ERR_REASON(reason) ERR_PACK(ERR_LIB_ECIES,0,reason) static ERR_STRING_DATA ECIES_str_functs[] = { - {ERR_FUNC(ECIES_F_ECIES_SET_PARAMETERS),"ECIES_set_parameters"}, - {ERR_FUNC(ECIES_F_ECIES_GET_PARAMETERS),"ECIES_get_parameters"}, - {ERR_FUNC(ECIES_F_ECIES_DO_ENCRYPT), "ECIES_do_encrypt"}, - {ERR_FUNC(ECIES_F_ECIES_DO_DECRYPT), "ECIES_do_decrypt"}, - {ERR_FUNC(ECIES_F_ECIES_ENCRYPT), "ECIES_encrypt"}, - {ERR_FUNC(ECIES_F_ECIES_DECRYPT), "ECIES_decrypt"}, - {0,NULL} + {ERR_FUNC(ECIES_F_D2I_ECIESPARAMETERS), "d2i_ECIESParameters"}, + {ERR_FUNC(ECIES_F_ECIES_DECRYPT), "ECIES_decrypt"}, + {ERR_FUNC(ECIES_F_ECIES_DO_DECRYPT), "ECIES_do_decrypt"}, + {ERR_FUNC(ECIES_F_ECIES_DO_ENCRYPT), "ECIES_do_encrypt"}, + {ERR_FUNC(ECIES_F_ECIES_ENCRYPT), "ECIES_encrypt"}, + {ERR_FUNC(ECIES_F_I2D_ECIESPARAMETERS), "i2d_ECIESParameters"}, + {0, NULL} }; static ERR_STRING_DATA ECIES_str_reasons[] = { - {ERR_REASON(ECIES_R_BAD_DATA), "bad data"}, - {ERR_REASON(ECIES_R_UNKNOWN_CIPHER_TYPE),"unknown cipher type"}, - {ERR_REASON(ECIES_R_ENCRYPT_FAILED), "encrypt failed"}, - {ERR_REASON(ECIES_R_DECRYPT_FAILED), "decrypt failed"}, - {ERR_REASON(ECIES_R_UNKNOWN_MAC_TYPE), "unknown MAC type"}, - {ERR_REASON(ECIES_R_GEN_MAC_FAILED), "MAC generation failed"}, - {ERR_REASON(ECIES_R_VERIFY_MAC_FAILED), "MAC verification failed"}, - {ERR_REASON(ECIES_R_ECDH_FAILED), "ECDH failed"}, - {ERR_REASON(ECIES_R_BUFFER_TOO_SMALL), "buffer too small"}, - {0,NULL} + {ERR_REASON(ECIES_R_BAD_DATA), "bad data"}, + {ERR_REASON(ECIES_R_BUFFER_TOO_SMALL), "buffer too small"}, + {ERR_REASON(ECIES_R_DECRYPT_FAILED), "decrypt failed"}, + {ERR_REASON(ECIES_R_ECDH_FAILED), "ECDH failed"}, + {ERR_REASON(ECIES_R_ENCRYPT_FAILED), "encrypt failed"}, + {ERR_REASON(ECIES_R_GEN_MAC_FAILED), "MAC generation failed"}, + {ERR_REASON(ECIES_R_VERIFY_MAC_FAILED), "MAC verification failed"}, + {0, NULL} }; #endif @@ -89,10 +96,9 @@ void ERR_load_ECIES_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(ECIES_str_functs[0].error) == NULL) { - ERR_load_strings(0,ECIES_str_functs); - ERR_load_strings(0,ECIES_str_reasons); - } + if (ERR_func_error_string(ECIES_str_functs[0].error) == NULL) { + ERR_load_strings(0, ECIES_str_functs); + ERR_load_strings(0, ECIES_str_reasons); + } #endif } - diff --git a/crypto/ecies/ecies_lib.c b/crypto/ecies/ecies_lib.c index 80f94265..d7fdfd0f 100644 --- a/crypto/ecies/ecies_lib.c +++ b/crypto/ecies/ecies_lib.c @@ -57,8 +57,8 @@ #include #include #include -#include "ecies.h" -#include "kdf.h" +#include +#include static void *ecies_data_dup(void *data) { @@ -342,7 +342,7 @@ int ECIES_do_decrypt(const ECIES_CIPHERTEXT_VALUE *cv, } if (!(ephem_point = EC_POINT_new(EC_KEY_get0_group(pri_key)))) { - ECIESerr(ECIES_F_ECIES_DO_ENCRYPT, ERR_R_MALLOC_FAILURE); + ECIESerr(ECIES_F_ECIES_DO_DECRYPT, ERR_R_MALLOC_FAILURE); goto err; } if (!EC_POINT_oct2point(EC_KEY_get0_group(pri_key), ephem_point, @@ -397,7 +397,7 @@ int ECIES_do_decrypt(const ECIES_CIPHERTEXT_VALUE *cv, ECIESerr(ECIES_F_ECIES_DO_DECRYPT, ECIES_R_VERIFY_MAC_FAILED); goto err; } - if (memcmp(cv->mactag->data, mac, len)) + if (OPENSSL_memcmp(cv->mactag->data, mac, len)) { ECIESerr(ECIES_F_ECIES_DO_DECRYPT, ECIES_R_VERIFY_MAC_FAILED); goto err; @@ -507,12 +507,12 @@ int ECIES_decrypt(const ECIES_PARAMS *param, const unsigned char *p = in; if (!(cv = d2i_ECIES_CIPHERTEXT_VALUE(NULL, &p, (long)inlen))) { - ECIESerr(ECIES_F_ECIES_ENCRYPT, ECIES_R_ENCRYPT_FAILED); + ECIESerr(ECIES_F_ECIES_DECRYPT, ECIES_R_ENCRYPT_FAILED); return 0; } if (!ECIES_do_decrypt(cv, param, out, outlen, ec_key)) { - ECIESerr(ECIES_F_ECIES_ENCRYPT, ECIES_R_ENCRYPT_FAILED); + ECIESerr(ECIES_F_ECIES_DECRYPT, ECIES_R_ENCRYPT_FAILED); goto end; } @@ -554,4 +554,3 @@ int ECIES_decrypt_with_recommended(unsigned char *out, size_t *outlen, return ECIES_decrypt(¶m, out, outlen, in, inlen, ec_key); } - diff --git a/crypto/engine/Makefile b/crypto/engine/Makefile index 426388e9..af432cce 100644 --- a/crypto/engine/Makefile +++ b/crypto/engine/Makefile @@ -92,39 +92,44 @@ eng_all.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h eng_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h eng_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h eng_all.o: ../../include/openssl/err.h ../../include/openssl/evp.h -eng_all.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -eng_all.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -eng_all.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -eng_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -eng_all.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -eng_all.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -eng_all.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_all.c eng_int.h +eng_all.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +eng_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +eng_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +eng_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +eng_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +eng_all.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +eng_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +eng_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +eng_all.o: ../cryptlib.h eng_all.c eng_int.h eng_cnf.o: ../../e_os.h ../../include/openssl/asn1.h eng_cnf.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h eng_cnf.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h eng_cnf.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h eng_cnf.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h eng_cnf.o: ../../include/openssl/engine.h ../../include/openssl/err.h -eng_cnf.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -eng_cnf.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -eng_cnf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -eng_cnf.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -eng_cnf.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -eng_cnf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -eng_cnf.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -eng_cnf.o: ../cryptlib.h eng_cnf.c eng_int.h +eng_cnf.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +eng_cnf.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +eng_cnf.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +eng_cnf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +eng_cnf.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +eng_cnf.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +eng_cnf.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +eng_cnf.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +eng_cnf.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_cnf.c eng_int.h eng_cryptodev.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h eng_cryptodev.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h eng_cryptodev.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h eng_cryptodev.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h eng_cryptodev.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h -eng_cryptodev.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +eng_cryptodev.o: ../../include/openssl/err.h ../../include/openssl/evp.h +eng_cryptodev.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h eng_cryptodev.o: ../../include/openssl/obj_mac.h eng_cryptodev.o: ../../include/openssl/objects.h eng_cryptodev.o: ../../include/openssl/opensslconf.h eng_cryptodev.o: ../../include/openssl/opensslv.h eng_cryptodev.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h eng_cryptodev.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +eng_cryptodev.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h eng_cryptodev.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h eng_cryptodev.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h eng_cryptodev.o: eng_cryptodev.c @@ -134,11 +139,13 @@ eng_ctrl.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h eng_ctrl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h eng_ctrl.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h eng_ctrl.o: ../../include/openssl/err.h ../../include/openssl/evp.h -eng_ctrl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -eng_ctrl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +eng_ctrl.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +eng_ctrl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +eng_ctrl.o: ../../include/openssl/opensslconf.h eng_ctrl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h eng_ctrl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -eng_ctrl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +eng_ctrl.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +eng_ctrl.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h eng_ctrl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h eng_ctrl.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_ctrl.c eng_int.h eng_dyn.o: ../../e_os.h ../../include/openssl/asn1.h @@ -147,52 +154,57 @@ eng_dyn.o: ../../include/openssl/crypto.h ../../include/openssl/dso.h eng_dyn.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h eng_dyn.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h eng_dyn.o: ../../include/openssl/engine.h ../../include/openssl/err.h -eng_dyn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -eng_dyn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -eng_dyn.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -eng_dyn.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -eng_dyn.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -eng_dyn.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -eng_dyn.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -eng_dyn.o: ../cryptlib.h eng_dyn.c eng_int.h +eng_dyn.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +eng_dyn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +eng_dyn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +eng_dyn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +eng_dyn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +eng_dyn.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +eng_dyn.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +eng_dyn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +eng_dyn.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_dyn.c eng_int.h eng_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h eng_err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h eng_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h eng_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h eng_err.o: ../../include/openssl/engine.h ../../include/openssl/err.h -eng_err.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -eng_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -eng_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -eng_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -eng_err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -eng_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -eng_err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -eng_err.o: eng_err.c +eng_err.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +eng_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +eng_err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +eng_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +eng_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +eng_err.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +eng_err.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +eng_err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +eng_err.o: ../../include/openssl/x509_vfy.h eng_err.c eng_fat.o: ../../e_os.h ../../include/openssl/asn1.h eng_fat.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h eng_fat.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h eng_fat.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h eng_fat.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h eng_fat.o: ../../include/openssl/engine.h ../../include/openssl/err.h -eng_fat.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -eng_fat.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -eng_fat.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -eng_fat.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -eng_fat.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -eng_fat.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -eng_fat.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -eng_fat.o: ../cryptlib.h eng_fat.c eng_int.h +eng_fat.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +eng_fat.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +eng_fat.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +eng_fat.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +eng_fat.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +eng_fat.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +eng_fat.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +eng_fat.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +eng_fat.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_fat.c eng_int.h eng_init.o: ../../e_os.h ../../include/openssl/asn1.h eng_init.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h eng_init.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h eng_init.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h eng_init.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h eng_init.o: ../../include/openssl/err.h ../../include/openssl/evp.h -eng_init.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -eng_init.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +eng_init.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +eng_init.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +eng_init.o: ../../include/openssl/opensslconf.h eng_init.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h eng_init.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -eng_init.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +eng_init.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +eng_init.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h eng_init.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h eng_init.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_init.c eng_int.h eng_lib.o: ../../e_os.h ../../include/openssl/asn1.h @@ -201,25 +213,28 @@ eng_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h eng_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h eng_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h eng_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h -eng_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -eng_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -eng_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -eng_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h -eng_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -eng_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -eng_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -eng_lib.o: ../cryptlib.h eng_int.h eng_lib.c +eng_lib.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +eng_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +eng_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +eng_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +eng_lib.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h +eng_lib.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +eng_lib.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +eng_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +eng_lib.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h eng_lib.c eng_list.o: ../../e_os.h ../../include/openssl/asn1.h eng_list.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h eng_list.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h eng_list.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h eng_list.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h eng_list.o: ../../include/openssl/err.h ../../include/openssl/evp.h -eng_list.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -eng_list.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +eng_list.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +eng_list.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +eng_list.o: ../../include/openssl/opensslconf.h eng_list.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h eng_list.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -eng_list.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +eng_list.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +eng_list.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h eng_list.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h eng_list.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h eng_list.c eng_openssl.o: ../../e_os.h ../../include/openssl/asn1.h @@ -229,15 +244,17 @@ eng_openssl.o: ../../include/openssl/dsa.h ../../include/openssl/dso.h eng_openssl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h eng_openssl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h eng_openssl.o: ../../include/openssl/engine.h ../../include/openssl/err.h -eng_openssl.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -eng_openssl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +eng_openssl.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +eng_openssl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +eng_openssl.o: ../../include/openssl/objects.h eng_openssl.o: ../../include/openssl/opensslconf.h eng_openssl.o: ../../include/openssl/opensslv.h eng_openssl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h eng_openssl.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h eng_openssl.o: ../../include/openssl/rand.h ../../include/openssl/rc4.h eng_openssl.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -eng_openssl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +eng_openssl.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +eng_openssl.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h eng_openssl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h eng_openssl.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_openssl.c eng_pkey.o: ../../e_os.h ../../include/openssl/asn1.h @@ -246,11 +263,13 @@ eng_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h eng_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h eng_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h eng_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h -eng_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -eng_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +eng_pkey.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +eng_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +eng_pkey.o: ../../include/openssl/opensslconf.h eng_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h eng_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -eng_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +eng_pkey.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +eng_pkey.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h eng_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h eng_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h eng_pkey.c eng_rdrand.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h @@ -258,12 +277,14 @@ eng_rdrand.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h eng_rdrand.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h eng_rdrand.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h eng_rdrand.o: ../../include/openssl/engine.h ../../include/openssl/err.h -eng_rdrand.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -eng_rdrand.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +eng_rdrand.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +eng_rdrand.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +eng_rdrand.o: ../../include/openssl/objects.h eng_rdrand.o: ../../include/openssl/opensslconf.h eng_rdrand.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h eng_rdrand.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h eng_rdrand.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +eng_rdrand.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h eng_rdrand.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h eng_rdrand.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h eng_rdrand.o: eng_rdrand.c @@ -273,12 +294,13 @@ eng_table.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h eng_table.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h eng_table.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h eng_table.o: ../../include/openssl/err.h ../../include/openssl/evp.h -eng_table.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -eng_table.o: ../../include/openssl/objects.h +eng_table.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +eng_table.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h eng_table.o: ../../include/openssl/opensslconf.h eng_table.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h eng_table.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -eng_table.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +eng_table.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +eng_table.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h eng_table.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h eng_table.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h eng_table.o: eng_table.c @@ -288,12 +310,13 @@ tb_asnmth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h tb_asnmth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h tb_asnmth.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h tb_asnmth.o: ../../include/openssl/err.h ../../include/openssl/evp.h -tb_asnmth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -tb_asnmth.o: ../../include/openssl/objects.h +tb_asnmth.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +tb_asnmth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h tb_asnmth.o: ../../include/openssl/opensslconf.h tb_asnmth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h tb_asnmth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -tb_asnmth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +tb_asnmth.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +tb_asnmth.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h tb_asnmth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h tb_asnmth.o: ../../include/openssl/x509_vfy.h ../asn1/asn1_locl.h ../cryptlib.h tb_asnmth.o: eng_int.h tb_asnmth.c @@ -303,12 +326,13 @@ tb_cipher.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h tb_cipher.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h tb_cipher.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h tb_cipher.o: ../../include/openssl/err.h ../../include/openssl/evp.h -tb_cipher.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -tb_cipher.o: ../../include/openssl/objects.h +tb_cipher.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +tb_cipher.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h tb_cipher.o: ../../include/openssl/opensslconf.h tb_cipher.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h tb_cipher.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -tb_cipher.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +tb_cipher.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +tb_cipher.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h tb_cipher.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h tb_cipher.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h tb_cipher.o: tb_cipher.c @@ -317,26 +341,28 @@ tb_dh.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h tb_dh.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h tb_dh.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h tb_dh.o: ../../include/openssl/engine.h ../../include/openssl/err.h -tb_dh.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -tb_dh.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -tb_dh.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -tb_dh.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -tb_dh.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -tb_dh.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -tb_dh.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -tb_dh.o: ../cryptlib.h eng_int.h tb_dh.c +tb_dh.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +tb_dh.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +tb_dh.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +tb_dh.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +tb_dh.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +tb_dh.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +tb_dh.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +tb_dh.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +tb_dh.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h tb_dh.c tb_digest.o: ../../e_os.h ../../include/openssl/asn1.h tb_digest.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h tb_digest.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h tb_digest.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h tb_digest.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h tb_digest.o: ../../include/openssl/err.h ../../include/openssl/evp.h -tb_digest.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -tb_digest.o: ../../include/openssl/objects.h +tb_digest.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +tb_digest.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h tb_digest.o: ../../include/openssl/opensslconf.h tb_digest.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h tb_digest.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -tb_digest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +tb_digest.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +tb_digest.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h tb_digest.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h tb_digest.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h tb_digest.o: tb_digest.c @@ -345,38 +371,43 @@ tb_dsa.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h tb_dsa.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h tb_dsa.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h tb_dsa.o: ../../include/openssl/engine.h ../../include/openssl/err.h -tb_dsa.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -tb_dsa.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -tb_dsa.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -tb_dsa.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -tb_dsa.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -tb_dsa.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -tb_dsa.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -tb_dsa.o: ../cryptlib.h eng_int.h tb_dsa.c +tb_dsa.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +tb_dsa.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +tb_dsa.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +tb_dsa.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +tb_dsa.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +tb_dsa.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +tb_dsa.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +tb_dsa.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +tb_dsa.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h tb_dsa.c tb_ecdh.o: ../../e_os.h ../../include/openssl/asn1.h tb_ecdh.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h tb_ecdh.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h tb_ecdh.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h tb_ecdh.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h tb_ecdh.o: ../../include/openssl/err.h ../../include/openssl/evp.h -tb_ecdh.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -tb_ecdh.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -tb_ecdh.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -tb_ecdh.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -tb_ecdh.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -tb_ecdh.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -tb_ecdh.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h tb_ecdh.c +tb_ecdh.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +tb_ecdh.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +tb_ecdh.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +tb_ecdh.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +tb_ecdh.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +tb_ecdh.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +tb_ecdh.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +tb_ecdh.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +tb_ecdh.o: ../cryptlib.h eng_int.h tb_ecdh.c tb_ecdsa.o: ../../e_os.h ../../include/openssl/asn1.h tb_ecdsa.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h tb_ecdsa.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h tb_ecdsa.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h tb_ecdsa.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h tb_ecdsa.o: ../../include/openssl/err.h ../../include/openssl/evp.h -tb_ecdsa.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -tb_ecdsa.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +tb_ecdsa.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +tb_ecdsa.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +tb_ecdsa.o: ../../include/openssl/opensslconf.h tb_ecdsa.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h tb_ecdsa.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -tb_ecdsa.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +tb_ecdsa.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +tb_ecdsa.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h tb_ecdsa.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h tb_ecdsa.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h tb_ecdsa.c tb_pkmeth.o: ../../e_os.h ../../include/openssl/asn1.h @@ -385,12 +416,13 @@ tb_pkmeth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h tb_pkmeth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h tb_pkmeth.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h tb_pkmeth.o: ../../include/openssl/err.h ../../include/openssl/evp.h -tb_pkmeth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -tb_pkmeth.o: ../../include/openssl/objects.h +tb_pkmeth.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +tb_pkmeth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h tb_pkmeth.o: ../../include/openssl/opensslconf.h tb_pkmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h tb_pkmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -tb_pkmeth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +tb_pkmeth.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +tb_pkmeth.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h tb_pkmeth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h tb_pkmeth.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h tb_pkmeth.o: tb_pkmeth.c @@ -400,36 +432,41 @@ tb_rand.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h tb_rand.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h tb_rand.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h tb_rand.o: ../../include/openssl/err.h ../../include/openssl/evp.h -tb_rand.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -tb_rand.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -tb_rand.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -tb_rand.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -tb_rand.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -tb_rand.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -tb_rand.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h tb_rand.c +tb_rand.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +tb_rand.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +tb_rand.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +tb_rand.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +tb_rand.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +tb_rand.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +tb_rand.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +tb_rand.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +tb_rand.o: ../cryptlib.h eng_int.h tb_rand.c tb_rsa.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h tb_rsa.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h tb_rsa.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h tb_rsa.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h tb_rsa.o: ../../include/openssl/engine.h ../../include/openssl/err.h -tb_rsa.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -tb_rsa.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -tb_rsa.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -tb_rsa.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -tb_rsa.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -tb_rsa.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -tb_rsa.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -tb_rsa.o: ../cryptlib.h eng_int.h tb_rsa.c +tb_rsa.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +tb_rsa.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +tb_rsa.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +tb_rsa.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +tb_rsa.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +tb_rsa.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +tb_rsa.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +tb_rsa.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +tb_rsa.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h tb_rsa.c tb_store.o: ../../e_os.h ../../include/openssl/asn1.h tb_store.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h tb_store.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h tb_store.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h tb_store.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h tb_store.o: ../../include/openssl/err.h ../../include/openssl/evp.h -tb_store.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -tb_store.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +tb_store.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +tb_store.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +tb_store.o: ../../include/openssl/opensslconf.h tb_store.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h tb_store.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -tb_store.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +tb_store.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +tb_store.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h tb_store.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h tb_store.o: ../../include/openssl/x509_vfy.h ../cryptlib.h eng_int.h tb_store.c diff --git a/crypto/err/Makefile b/crypto/err/Makefile index b6f3ef17..cbb06782 100644 --- a/crypto/err/Makefile +++ b/crypto/err/Makefile @@ -85,24 +85,29 @@ err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h err.o: ../cryptlib.h err.c err_all.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h err_all.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h -err_all.o: ../../include/openssl/cms.h ../../include/openssl/comp.h -err_all.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h +err_all.o: ../../include/openssl/cbcmac.h ../../include/openssl/cms.h +err_all.o: ../../include/openssl/comp.h ../../include/openssl/conf.h +err_all.o: ../../include/openssl/cpk.h ../../include/openssl/crypto.h err_all.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h err_all.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h err_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h -err_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h -err_all.o: ../../include/openssl/err.h ../../include/openssl/evp.h +err_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/ecies.h +err_all.o: ../../include/openssl/engine.h ../../include/openssl/err.h +err_all.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h err_all.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h err_all.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h err_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -err_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem2.h -err_all.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h -err_all.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h -err_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -err_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -err_all.o: ../../include/openssl/ts.h ../../include/openssl/ui.h -err_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -err_all.o: ../../include/openssl/x509v3.h err_all.c +err_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/otp.h +err_all.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h +err_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h +err_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h +err_all.o: ../../include/openssl/sha.h ../../include/openssl/skf.h +err_all.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +err_all.o: ../../include/openssl/sm9.h ../../include/openssl/stack.h +err_all.o: ../../include/openssl/symhacks.h ../../include/openssl/ts.h +err_all.o: ../../include/openssl/ui.h ../../include/openssl/x509.h +err_all.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +err_all.o: err_all.c err_prn.o: ../../e_os.h ../../include/openssl/bio.h err_prn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h err_prn.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h diff --git a/crypto/err/err.c b/crypto/err/err.c index 40cbbc0a..6175ec69 100644 --- a/crypto/err/err.c +++ b/crypto/err/err.c @@ -157,8 +157,12 @@ static ERR_STRING_DATA ERR_str_libraries[] = { {ERR_PACK(ERR_LIB_HMAC, 0, 0), "HMAC routines"}, # ifndef OPENSSL_NO_GMSSL {ERR_PACK(ERR_LIB_ECIES, 0, 0), "ECIES routines"}, + {ERR_PACK(ERR_LIB_CPK, 0, 0), "CPK routines"}, {ERR_PACK(ERR_LIB_SM2, 0, 0), "SM2 routines"}, {ERR_PACK(ERR_LIB_SKF, 0, 0), "SKF routines"}, + {ERR_PACK(ERR_LIB_CBCMAC, 0, 0), "CBCMAC routines"}, + {ERR_PACK(ERR_LIB_OTP, 0, 0), "OTP routines"}, + {ERR_PACK(ERR_LIB_SM9, 0, 0), "SM9 routines"}, # endif {0, NULL}, }; diff --git a/crypto/err/err.h b/crypto/err/err.h index 3bf1b5aa..29d4409f 100644 --- a/crypto/err/err.h +++ b/crypto/err/err.h @@ -197,10 +197,15 @@ typedef struct err_state_st { # define ERR_LIB_TS 47 # define ERR_LIB_HMAC 48 # define ERR_LIB_JPAKE 49 + # ifndef OPENSSL_NO_GMSSL # define ERR_LIB_ECIES 50 -# define ERR_LIB_SM2 51 -# define ERR_LIB_SKF 52 +# define ERR_LIB_CPK 51 +# define ERR_LIB_SM2 52 +# define ERR_LIB_SKF 53 +# define ERR_LIB_CBCMAC 54 +# define ERR_LIB_OTP 55 +# define ERR_LIB_SM9 56 # endif # define ERR_LIB_USER 128 @@ -238,10 +243,15 @@ typedef struct err_state_st { # define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),__FILE__,__LINE__) # define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),__FILE__,__LINE__) # define JPAKEerr(f,r) ERR_PUT_error(ERR_LIB_JPAKE,(f),(r),__FILE__,__LINE__) + # ifndef OPENSSL_NO_GMSSL # define ECIESerr(f,r) ERR_PUT_error(ERR_LIB_ECIES,(f),(r),__FILE__,__LINE__) +# define CPKerr(f,r) ERR_PUT_error(ERR_LIB_CPK,(f),(r),__FILE__,__LINE__) # define SM2err(f,r) ERR_PUT_error(ERR_LIB_SM2,(f),(r),__FILE__,__LINE__) # define SKFerr(f,r) ERR_PUT_error(ERR_LIB_SKF,(f),(r),__FILE__,__LINE__) +# define CBCMACerr(f,r) ERR_PUT_error(ERR_LIB_CBCMAC,(f),(r),__FILE__,__LINE__); +# define OTPerr(f,r) ERR_PUT_error(ERR_LIB_OTP,(f),(r),__FILE__,__LINE__); +# define SM9err(f,r) ERR_PUT_error(ERR_LIB_SM9,(f),(r),__FILE__,__LINE__); # endif /* @@ -299,10 +309,15 @@ typedef struct err_state_st { # define ERR_R_ECDH_LIB ERR_LIB_ECDH/* 43 */ # define ERR_R_STORE_LIB ERR_LIB_STORE/* 44 */ # define ERR_R_TS_LIB ERR_LIB_TS/* 45 */ + # ifndef OPENSSL_NO_GMSSL # define ERR_R_ECIES_LIB ERR_LIB_ECIES/* 50 */ -# define ERR_R_SM2_LIB ERR_LIB_SM2/* 51 */ -# define ERR_R_SKF_LIB ERR_LIB_SKF/* 52 */ +# define ERR_R_CPK_LIB ERR_LIB_CPK/* 51 */ +# define ERR_R_SM2_LIB ERR_LIB_SM2/* 52 */ +# define ERR_R_SKF_LIB ERR_LIB_SKF/* 53 */ +# define ERR_R_CBCMAC_LIB ERR_LIB_CBCMAC/* 54 */ +# define ERR_R_OTP_LIB ERR_LIB_CBCMAC/* 55 */ +# define ERR_R_SM9_LIB ERR_LIB_SM9/* 56 */ # endif # define ERR_R_NESTED_ASN1_ERROR 58 diff --git a/crypto/err/err_all.c b/crypto/err/err_all.c index 4f8aca65..07aa6edf 100644 --- a/crypto/err/err_all.c +++ b/crypto/err/err_all.c @@ -107,8 +107,15 @@ #ifndef OPENSSL_NO_JPAKE # include #endif + #ifndef OPENSSL_NO_GMSSL # include +# include +# include +# include +# include +# include +# include #endif void ERR_load_crypto_strings(void) @@ -169,7 +176,12 @@ void ERR_load_crypto_strings(void) # endif # ifndef OPENSSL_NO_GMSSL ERR_load_ECIES_strings(); + ERR_load_CPK_strings(); ERR_load_SM2_strings(); + ERR_load_SKF_strings(); + ERR_load_CBCMAC_strings(); + ERR_load_OTP_strings(); + ERR_load_SM9_strings(); # endif #endif } diff --git a/crypto/err/openssl.ec b/crypto/err/openssl.ec index 6323d840..6183700e 100644 --- a/crypto/err/openssl.ec +++ b/crypto/err/openssl.ec @@ -37,7 +37,11 @@ L CMS crypto/cms/cms.h crypto/cms/cms_err.c L JPAKE crypto/jpake/jpake.h crypto/jpake/jpake_err.c L ECIES crypto/ecies/ecies.h crypto/ecies/ecies_err.c L SM2 crypto/sm2/sm2.h crypto/sm2/sm2_err.c -L SKF crypto/skf/skf.h crypto/skf/skf_err.c +L SKF crypto/skf/skf_ex.h crypto/skf/skf_err.c +L CPK crypto/cpk/cpk.h crypto/cpk/cpk_err.c +L CBCMAC crypto/cbcmac/cbcmac.h crypto/cbcmac/cbcmac_err.c +L OTP crypto/otp/otp.h crypto/otp/otp_err.c +L SM9 crypto/sm9/sm9.h crypto/sm9/sm9_err.c # additional header files to be scanned for function names L NONE crypto/x509/x509_vfy.h NONE diff --git a/crypto/evp/Makefile b/crypto/evp/Makefile index f06345db..d4096e71 100644 --- a/crypto/evp/Makefile +++ b/crypto/evp/Makefile @@ -144,53 +144,57 @@ c_all.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h c_all.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h c_all.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h c_all.o: ../../include/openssl/engine.h ../../include/openssl/err.h -c_all.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -c_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -c_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -c_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -c_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -c_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -c_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -c_all.o: ../cryptlib.h c_all.c +c_all.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +c_all.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +c_all.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +c_all.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +c_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +c_all.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +c_all.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +c_all.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +c_all.o: ../../include/openssl/x509_vfy.h ../cryptlib.h c_all.c c_allc.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h c_allc.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h c_allc.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h c_allc.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h c_allc.o: ../../include/openssl/err.h ../../include/openssl/evp.h -c_allc.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -c_allc.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -c_allc.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -c_allc.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h -c_allc.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -c_allc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -c_allc.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -c_allc.o: ../cryptlib.h c_allc.c +c_allc.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +c_allc.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +c_allc.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +c_allc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h +c_allc.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +c_allc.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +c_allc.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +c_allc.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +c_allc.o: ../../include/openssl/x509_vfy.h ../cryptlib.h c_allc.c c_alld.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h c_alld.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h c_alld.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h c_alld.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h c_alld.o: ../../include/openssl/err.h ../../include/openssl/evp.h -c_alld.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -c_alld.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -c_alld.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -c_alld.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h -c_alld.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -c_alld.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -c_alld.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -c_alld.o: ../cryptlib.h c_alld.c +c_alld.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +c_alld.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +c_alld.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +c_alld.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h +c_alld.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +c_alld.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +c_alld.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +c_alld.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +c_alld.o: ../../include/openssl/x509_vfy.h ../cryptlib.h c_alld.c digest.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h digest.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h digest.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h digest.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h digest.o: ../../include/openssl/engine.h ../../include/openssl/err.h -digest.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -digest.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -digest.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -digest.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -digest.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -digest.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -digest.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -digest.o: ../cryptlib.h digest.c +digest.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +digest.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +digest.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +digest.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +digest.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +digest.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +digest.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +digest.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +digest.o: ../../include/openssl/x509_vfy.h ../cryptlib.h digest.c e_aes.o: ../../include/openssl/aes.h ../../include/openssl/asn1.h e_aes.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h e_aes.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h @@ -306,7 +310,6 @@ e_null.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h e_null.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h e_null.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h e_null.o: ../cryptlib.h e_null.c -e_old.o: e_old.c e_rc2.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h e_rc2.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h e_rc2.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h @@ -343,27 +346,6 @@ e_rc5.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h e_rc5.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h e_rc5.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h e_rc5.o: ../../include/openssl/symhacks.h ../cryptlib.h e_rc5.c - -e_sms4.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h -e_sms4.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h -e_sms4.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h -e_sms4.o: ../../include/openssl/evp.h ../../include/openssl/sms4.h -e_sms4.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -e_sms4.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -e_sms4.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -e_sms4.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h -e_sms4.o: ../../include/openssl/symhacks.h ../cryptlib.h e_sms4.c evp_locl.h - -e_zuc.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h -e_zuc.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h -e_zuc.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h -#e_zuc.o: ../../include/openssl/evp.h ../../include/openssl/zuc.h -e_zuc.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -e_zuc.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -e_zuc.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -e_zuc.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h -e_zuc.o: ../../include/openssl/symhacks.h ../cryptlib.h e_zuc.c evp_locl.h - e_seed.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h e_seed.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h e_seed.o: ../../include/openssl/err.h ../../include/openssl/evp.h @@ -373,6 +355,16 @@ e_seed.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h e_seed.o: ../../include/openssl/safestack.h ../../include/openssl/seed.h e_seed.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h e_seed.o: e_seed.c evp_locl.h +e_sms4.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h +e_sms4.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +e_sms4.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h +e_sms4.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +e_sms4.o: ../../include/openssl/modes.h ../../include/openssl/obj_mac.h +e_sms4.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +e_sms4.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +e_sms4.o: ../../include/openssl/safestack.h ../../include/openssl/sms4.h +e_sms4.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +e_sms4.o: ../cryptlib.h ../modes/modes_lcl.h e_sms4.c evp_locl.h e_xcbc_d.o: ../../e_os.h ../../include/openssl/asn1.h e_xcbc_d.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h e_xcbc_d.o: ../../include/openssl/crypto.h ../../include/openssl/des.h @@ -385,6 +377,15 @@ e_xcbc_d.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h e_xcbc_d.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h e_xcbc_d.o: ../../include/openssl/ui_compat.h ../cryptlib.h e_xcbc_d.c e_xcbc_d.o: evp_locl.h +e_zuc.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h +e_zuc.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +e_zuc.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h +e_zuc.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +e_zuc.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +e_zuc.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +e_zuc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h +e_zuc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +e_zuc.o: ../../include/openssl/zuc.h ../cryptlib.h e_zuc.c evp_locl.h encode.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h encode.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h encode.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h @@ -410,28 +411,31 @@ evp_cnf.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h evp_cnf.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h evp_cnf.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h evp_cnf.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -evp_cnf.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -evp_cnf.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -evp_cnf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -evp_cnf.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -evp_cnf.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -evp_cnf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -evp_cnf.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -evp_cnf.o: ../../include/openssl/x509v3.h ../cryptlib.h evp_cnf.c +evp_cnf.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +evp_cnf.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +evp_cnf.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +evp_cnf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +evp_cnf.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +evp_cnf.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +evp_cnf.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +evp_cnf.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +evp_cnf.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +evp_cnf.o: ../cryptlib.h evp_cnf.c evp_enc.o: ../../e_os.h ../../include/openssl/asn1.h evp_enc.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h evp_enc.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h evp_enc.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h evp_enc.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h evp_enc.o: ../../include/openssl/err.h ../../include/openssl/evp.h -evp_enc.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -evp_enc.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -evp_enc.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -evp_enc.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h -evp_enc.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -evp_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -evp_enc.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -evp_enc.o: ../cryptlib.h evp_enc.c evp_locl.h +evp_enc.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +evp_enc.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +evp_enc.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +evp_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +evp_enc.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h +evp_enc.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +evp_enc.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +evp_enc.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +evp_enc.o: ../../include/openssl/x509_vfy.h ../cryptlib.h evp_enc.c evp_locl.h evp_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h evp_err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h evp_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h @@ -445,14 +449,16 @@ evp_key.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h evp_key.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h evp_key.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h evp_key.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -evp_key.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -evp_key.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -evp_key.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -evp_key.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -evp_key.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -evp_key.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -evp_key.o: ../../include/openssl/ui.h ../../include/openssl/x509.h -evp_key.o: ../../include/openssl/x509_vfy.h ../cryptlib.h evp_key.c +evp_key.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +evp_key.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +evp_key.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +evp_key.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +evp_key.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +evp_key.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +evp_key.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +evp_key.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h +evp_key.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +evp_key.o: ../cryptlib.h evp_key.c evp_lib.o: ../../e_os.h ../../include/openssl/asn1.h evp_lib.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h evp_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h @@ -467,25 +473,28 @@ evp_pbe.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h evp_pbe.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h evp_pbe.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h evp_pbe.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -evp_pbe.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -evp_pbe.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -evp_pbe.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -evp_pbe.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h -evp_pbe.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -evp_pbe.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -evp_pbe.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -evp_pbe.o: ../../include/openssl/x509_vfy.h ../cryptlib.h evp_locl.h evp_pbe.c +evp_pbe.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +evp_pbe.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +evp_pbe.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +evp_pbe.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +evp_pbe.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h +evp_pbe.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +evp_pbe.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +evp_pbe.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +evp_pbe.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +evp_pbe.o: ../cryptlib.h evp_locl.h evp_pbe.c evp_pkey.o: ../../e_os.h ../../include/openssl/asn1.h evp_pkey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h evp_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h evp_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h evp_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -evp_pkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -evp_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -evp_pkey.o: ../../include/openssl/opensslconf.h +evp_pkey.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +evp_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +evp_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h evp_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h evp_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h evp_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +evp_pkey.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h evp_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h evp_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h evp_pkey.o: ../asn1/asn1_locl.h ../cryptlib.h evp_pkey.c @@ -514,14 +523,15 @@ m_ecdsa.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h m_ecdsa.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h m_ecdsa.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h m_ecdsa.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -m_ecdsa.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -m_ecdsa.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -m_ecdsa.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -m_ecdsa.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -m_ecdsa.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -m_ecdsa.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -m_ecdsa.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -m_ecdsa.o: ../cryptlib.h m_ecdsa.c +m_ecdsa.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +m_ecdsa.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +m_ecdsa.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +m_ecdsa.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +m_ecdsa.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +m_ecdsa.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +m_ecdsa.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +m_ecdsa.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +m_ecdsa.o: ../../include/openssl/x509_vfy.h ../cryptlib.h m_ecdsa.c m_md2.o: ../../e_os.h ../../include/openssl/bio.h m_md2.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h m_md2.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h @@ -534,76 +544,75 @@ m_md4.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h m_md4.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h m_md4.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h m_md4.o: ../../include/openssl/err.h ../../include/openssl/evp.h -m_md4.o: ../../include/openssl/lhash.h ../../include/openssl/md4.h -m_md4.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -m_md4.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -m_md4.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -m_md4.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -m_md4.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -m_md4.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -m_md4.o: ../../include/openssl/x509_vfy.h ../cryptlib.h evp_locl.h m_md4.c +m_md4.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +m_md4.o: ../../include/openssl/md4.h ../../include/openssl/obj_mac.h +m_md4.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +m_md4.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +m_md4.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h +m_md4.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +m_md4.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +m_md4.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +m_md4.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +m_md4.o: ../cryptlib.h evp_locl.h m_md4.c m_md5.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h m_md5.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h m_md5.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h m_md5.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h m_md5.o: ../../include/openssl/err.h ../../include/openssl/evp.h -m_md5.o: ../../include/openssl/lhash.h ../../include/openssl/md5.h -m_md5.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -m_md5.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -m_md5.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -m_md5.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -m_md5.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -m_md5.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -m_md5.o: ../../include/openssl/x509_vfy.h ../cryptlib.h evp_locl.h m_md5.c +m_md5.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +m_md5.o: ../../include/openssl/md5.h ../../include/openssl/obj_mac.h +m_md5.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +m_md5.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +m_md5.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h +m_md5.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +m_md5.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +m_md5.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +m_md5.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +m_md5.o: ../cryptlib.h evp_locl.h m_md5.c m_mdc2.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h m_mdc2.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h m_mdc2.o: ../../include/openssl/des.h ../../include/openssl/des_old.h m_mdc2.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h m_mdc2.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h m_mdc2.o: ../../include/openssl/err.h ../../include/openssl/evp.h -m_mdc2.o: ../../include/openssl/lhash.h ../../include/openssl/mdc2.h -m_mdc2.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -m_mdc2.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -m_mdc2.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -m_mdc2.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -m_mdc2.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -m_mdc2.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h -m_mdc2.o: ../../include/openssl/ui_compat.h ../../include/openssl/x509.h -m_mdc2.o: ../../include/openssl/x509_vfy.h ../cryptlib.h evp_locl.h m_mdc2.c -m_sm3.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h -m_sm3.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h -m_sm3.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h -m_sm3.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -m_sm3.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -m_sm3.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -m_sm3.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h -m_sm3.o: ../../include/openssl/safestack.h ../../include/openssl/sm3.h -m_sm3.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -m_sm3.o: ../cryptlib.h m_sm3.c +m_mdc2.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +m_mdc2.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h +m_mdc2.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +m_mdc2.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +m_mdc2.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h +m_mdc2.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +m_mdc2.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +m_mdc2.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +m_mdc2.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h +m_mdc2.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +m_mdc2.o: ../cryptlib.h evp_locl.h m_mdc2.c m_null.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h m_null.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h m_null.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h m_null.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h m_null.o: ../../include/openssl/err.h ../../include/openssl/evp.h -m_null.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -m_null.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -m_null.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -m_null.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -m_null.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -m_null.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -m_null.o: ../../include/openssl/x509_vfy.h ../cryptlib.h m_null.c +m_null.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +m_null.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +m_null.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +m_null.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +m_null.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +m_null.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +m_null.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +m_null.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +m_null.o: ../cryptlib.h m_null.c m_ripemd.o: ../../e_os.h ../../include/openssl/asn1.h m_ripemd.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h m_ripemd.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h m_ripemd.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h m_ripemd.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -m_ripemd.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -m_ripemd.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -m_ripemd.o: ../../include/openssl/opensslconf.h +m_ripemd.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +m_ripemd.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +m_ripemd.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h m_ripemd.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h m_ripemd.o: ../../include/openssl/pkcs7.h ../../include/openssl/ripemd.h m_ripemd.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -m_ripemd.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +m_ripemd.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +m_ripemd.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h m_ripemd.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h m_ripemd.o: ../../include/openssl/x509_vfy.h ../cryptlib.h evp_locl.h m_ripemd.o: m_ripemd.c @@ -612,14 +621,15 @@ m_sha.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h m_sha.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h m_sha.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h m_sha.o: ../../include/openssl/err.h ../../include/openssl/evp.h -m_sha.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -m_sha.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -m_sha.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -m_sha.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h -m_sha.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -m_sha.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -m_sha.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -m_sha.o: ../cryptlib.h evp_locl.h m_sha.c +m_sha.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +m_sha.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +m_sha.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +m_sha.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +m_sha.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h +m_sha.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +m_sha.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +m_sha.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +m_sha.o: ../../include/openssl/x509_vfy.h ../cryptlib.h evp_locl.h m_sha.c m_sha1.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h m_sha1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h m_sha1.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h @@ -635,64 +645,85 @@ m_sigver.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h m_sigver.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h m_sigver.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h m_sigver.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -m_sigver.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -m_sigver.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -m_sigver.o: ../../include/openssl/opensslconf.h +m_sigver.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +m_sigver.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +m_sigver.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h m_sigver.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h m_sigver.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -m_sigver.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +m_sigver.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +m_sigver.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h m_sigver.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h m_sigver.o: ../../include/openssl/x509_vfy.h ../cryptlib.h evp_locl.h m_sigver.o: m_sigver.c +m_sm3.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h +m_sm3.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +m_sm3.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +m_sm3.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +m_sm3.o: ../../include/openssl/err.h ../../include/openssl/evp.h +m_sm3.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +m_sm3.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +m_sm3.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +m_sm3.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +m_sm3.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +m_sm3.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +m_sm3.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +m_sm3.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +m_sm3.o: ../cryptlib.h m_sm3.c m_wp.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h m_wp.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h m_wp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h m_wp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h m_wp.o: ../../include/openssl/err.h ../../include/openssl/evp.h -m_wp.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -m_wp.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -m_wp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -m_wp.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -m_wp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -m_wp.o: ../../include/openssl/symhacks.h ../../include/openssl/whrlpool.h -m_wp.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -m_wp.o: ../cryptlib.h evp_locl.h m_wp.c +m_wp.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +m_wp.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +m_wp.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +m_wp.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +m_wp.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +m_wp.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +m_wp.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +m_wp.o: ../../include/openssl/whrlpool.h ../../include/openssl/x509.h +m_wp.o: ../../include/openssl/x509_vfy.h ../cryptlib.h evp_locl.h m_wp.c names.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h names.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h names.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h names.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h names.o: ../../include/openssl/err.h ../../include/openssl/evp.h -names.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -names.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -names.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -names.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -names.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -names.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -names.o: ../../include/openssl/x509_vfy.h ../cryptlib.h names.c +names.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +names.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +names.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +names.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +names.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +names.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +names.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +names.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +names.o: ../cryptlib.h names.c p5_crpt.o: ../../e_os.h ../../include/openssl/asn1.h p5_crpt.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h p5_crpt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p5_crpt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p5_crpt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -p5_crpt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -p5_crpt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -p5_crpt.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -p5_crpt.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -p5_crpt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -p5_crpt.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -p5_crpt.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -p5_crpt.o: ../cryptlib.h p5_crpt.c +p5_crpt.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +p5_crpt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +p5_crpt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +p5_crpt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +p5_crpt.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +p5_crpt.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +p5_crpt.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +p5_crpt.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +p5_crpt.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p5_crpt.c p5_crpt2.o: ../../e_os.h ../../include/openssl/asn1.h p5_crpt2.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h p5_crpt2.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p5_crpt2.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p5_crpt2.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h p5_crpt2.o: ../../include/openssl/evp.h ../../include/openssl/hmac.h -p5_crpt2.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p5_crpt2.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +p5_crpt2.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p5_crpt2.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p5_crpt2.o: ../../include/openssl/opensslconf.h p5_crpt2.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h p5_crpt2.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -p5_crpt2.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +p5_crpt2.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +p5_crpt2.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h p5_crpt2.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h p5_crpt2.o: ../../include/openssl/x509_vfy.h ../cryptlib.h evp_locl.h p5_crpt2.o: p5_crpt2.c @@ -701,27 +732,31 @@ p_dec.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h p_dec.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h p_dec.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h p_dec.o: ../../include/openssl/err.h ../../include/openssl/evp.h -p_dec.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p_dec.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -p_dec.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -p_dec.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h -p_dec.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -p_dec.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -p_dec.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -p_dec.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p_dec.c +p_dec.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p_dec.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p_dec.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +p_dec.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +p_dec.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h +p_dec.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p_dec.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +p_dec.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +p_dec.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +p_dec.o: ../cryptlib.h p_dec.c p_enc.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h p_enc.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h p_enc.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h p_enc.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h p_enc.o: ../../include/openssl/err.h ../../include/openssl/evp.h -p_enc.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p_enc.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -p_enc.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -p_enc.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h -p_enc.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -p_enc.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -p_enc.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -p_enc.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p_enc.c +p_enc.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p_enc.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p_enc.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +p_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +p_enc.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h +p_enc.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p_enc.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +p_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +p_enc.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +p_enc.o: ../cryptlib.h p_enc.c p_lib.o: ../../e_os.h ../../include/openssl/asn1.h p_lib.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h p_lib.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h @@ -730,63 +765,71 @@ p_lib.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h p_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h p_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h -p_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -p_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -p_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h -p_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -p_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -p_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -p_lib.o: ../asn1/asn1_locl.h ../cryptlib.h p_lib.c +p_lib.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +p_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +p_lib.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h +p_lib.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +p_lib.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +p_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +p_lib.o: ../../include/openssl/x509_vfy.h ../asn1/asn1_locl.h ../cryptlib.h +p_lib.o: p_lib.c p_open.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h p_open.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h p_open.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h p_open.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h p_open.o: ../../include/openssl/err.h ../../include/openssl/evp.h -p_open.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p_open.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -p_open.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -p_open.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h -p_open.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -p_open.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -p_open.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -p_open.o: ../cryptlib.h p_open.c +p_open.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p_open.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p_open.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +p_open.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +p_open.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h +p_open.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +p_open.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +p_open.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +p_open.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p_open.c p_seal.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h p_seal.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h p_seal.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h p_seal.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h p_seal.o: ../../include/openssl/err.h ../../include/openssl/evp.h -p_seal.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p_seal.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -p_seal.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -p_seal.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h -p_seal.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -p_seal.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -p_seal.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -p_seal.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p_seal.c +p_seal.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p_seal.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p_seal.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +p_seal.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +p_seal.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h +p_seal.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p_seal.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +p_seal.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +p_seal.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +p_seal.o: ../cryptlib.h p_seal.c p_sign.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h p_sign.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h p_sign.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h p_sign.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h p_sign.o: ../../include/openssl/err.h ../../include/openssl/evp.h -p_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -p_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -p_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -p_sign.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -p_sign.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -p_sign.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p_sign.c +p_sign.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p_sign.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +p_sign.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +p_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p_sign.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +p_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +p_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +p_sign.o: ../cryptlib.h p_sign.c p_verify.o: ../../e_os.h ../../include/openssl/asn1.h p_verify.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h p_verify.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p_verify.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p_verify.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -p_verify.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -p_verify.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -p_verify.o: ../../include/openssl/opensslconf.h +p_verify.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +p_verify.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +p_verify.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h p_verify.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h p_verify.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -p_verify.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +p_verify.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +p_verify.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h p_verify.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h p_verify.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p_verify.c pmeth_fn.o: ../../e_os.h ../../include/openssl/asn1.h @@ -816,12 +859,13 @@ pmeth_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h pmeth_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h pmeth_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h pmeth_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pmeth_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pmeth_lib.o: ../../include/openssl/objects.h +pmeth_lib.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pmeth_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h pmeth_lib.o: ../../include/openssl/opensslconf.h pmeth_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pmeth_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -pmeth_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +pmeth_lib.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pmeth_lib.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h pmeth_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h pmeth_lib.o: ../../include/openssl/x509_vfy.h ../asn1/asn1_locl.h ../cryptlib.h pmeth_lib.o: evp_locl.h pmeth_lib.c diff --git a/crypto/evp/e_sms4.c b/crypto/evp/e_sms4.c index 3c94a185..7a2a3e7f 100644 --- a/crypto/evp/e_sms4.c +++ b/crypto/evp/e_sms4.c @@ -348,7 +348,7 @@ const EVP_CIPHER *EVP_sms4_wrap(void) //TODO: EVP_sms4_256_xxx(); - +//TODO: EVP_sms4_ctr_avx2() #endif diff --git a/crypto/evp/p_dec.c b/crypto/evp/p_dec.c index 4e270316..eda21ba0 100644 --- a/crypto/evp/p_dec.c +++ b/crypto/evp/p_dec.c @@ -74,7 +74,6 @@ static int ossl_EVP_PKEY_decrypt_old(unsigned char *key, const unsigned char *ek #ifndef OPENSSL_NO_RSA if (priv->type != EVP_PKEY_RSA) { #endif - EVPerr(EVP_F_EVP_PKEY_DECRYPT_OLD, EVP_R_PUBLIC_KEY_NOT_RSA); #ifndef OPENSSL_NO_RSA goto err; } diff --git a/crypto/hmac/Makefile b/crypto/hmac/Makefile index 52e39e58..e027f67b 100644 --- a/crypto/hmac/Makefile +++ b/crypto/hmac/Makefile @@ -92,12 +92,13 @@ hm_pmeth.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h hm_pmeth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h hm_pmeth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h hm_pmeth.o: ../../include/openssl/err.h ../../include/openssl/evp.h -hm_pmeth.o: ../../include/openssl/hmac.h ../../include/openssl/lhash.h -hm_pmeth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -hm_pmeth.o: ../../include/openssl/opensslconf.h +hm_pmeth.o: ../../include/openssl/hmac.h ../../include/openssl/kdf.h +hm_pmeth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +hm_pmeth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h hm_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h hm_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -hm_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +hm_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +hm_pmeth.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h hm_pmeth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h hm_pmeth.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h hm_pmeth.o: ../cryptlib.h ../evp/evp_locl.h hm_pmeth.c diff --git a/crypto/kdf/Makefile b/crypto/kdf/Makefile new file mode 100644 index 00000000..7c99c6a5 --- /dev/null +++ b/crypto/kdf/Makefile @@ -0,0 +1,86 @@ +# +# crypto/kdf/Makefile +# + +DIR= kdf +TOP= ../.. +CC= cc +INCLUDES= -I.. -I$(TOP) -I../../include +CFLAG=-g -Wall +MAKEFILE= Makefile +AR= ar r + +CFLAGS= $(INCLUDES) $(CFLAG) + +GENERAL=Makefile +TEST=kdftest.c +APPS= + +LIB=$(TOP)/libcrypto.a +LIBSRC= kdf_x9_63.c +LIBOBJ= kdf_x9_63.o + +SRC= $(LIBSRC) + +EXHEADER= kdf.h +HEADER= $(EXHEADER) + +ALL= $(GENERAL) $(SRC) $(HEADER) + +top: + (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all) + +all: lib + +lib: $(LIBOBJ) + $(AR) $(LIB) $(LIBOBJ) + $(RANLIB) $(LIB) || echo Never mind. + @touch lib + +files: + $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO + +links: + @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER) + @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST) + @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS) + +install: + @[ -n "$(INSTALLTOP)" ] # should be set by top Makefile... + @headerlist="$(EXHEADER)"; for i in $$headerlist; \ + do \ + (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \ + chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \ + done; + +tags: + ctags $(SRC) + +tests: + +lint: + lint -DLINT $(INCLUDES) $(SRC)>fluff + +update: depend + +depend: + @[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile... + $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC) + +dclean: + $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new + mv -f Makefile.new $(MAKEFILE) + +clean: + rm -f *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff + +# DO NOT DELETE THIS LINE -- make depend depends on it. + +kdf_x9_63.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +kdf_x9_63.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h +kdf_x9_63.o: ../../include/openssl/evp.h ../../include/openssl/obj_mac.h +kdf_x9_63.o: ../../include/openssl/objects.h +kdf_x9_63.o: ../../include/openssl/opensslconf.h +kdf_x9_63.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +kdf_x9_63.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h +kdf_x9_63.o: ../../include/openssl/symhacks.h kdf.h kdf_x9_63.c diff --git a/crypto/ecies/kdf.h b/crypto/kdf/kdf.h similarity index 100% rename from crypto/ecies/kdf.h rename to crypto/kdf/kdf.h diff --git a/crypto/ecies/kdf_x9_63.c b/crypto/kdf/kdf_x9_63.c similarity index 90% rename from crypto/ecies/kdf_x9_63.c rename to crypto/kdf/kdf_x9_63.c index 505857a7..5170a852 100644 --- a/crypto/ecies/kdf_x9_63.c +++ b/crypto/kdf/kdf_x9_63.c @@ -1,4 +1,4 @@ -/* crypto/ecies/kdf_x9_63.c */ +/* crypto/kdf/kdf_x9_63.c */ /* ==================================================================== * Copyright (c) 2007 - 2015 The GmSSL Project. All rights reserved. * @@ -76,7 +76,6 @@ static void *x963_kdf(const EVP_MD *md, const void *in, size_t inlen, EVP_MD_CTX_init(&ctx); - //FIXME: it might be wrong while (rlen > 0) { counter_be = cpu_to_be32(counter); counter++; @@ -138,32 +137,47 @@ static void *x963_sha512kdf(const void *in, size_t inlen, return x963_kdf(EVP_sha512(), in, inlen, out, outlen); } +static void *x963_whirlpoolkdf(const void *in, size_t inlen, + void *out, size_t *outlen) +{ + return x963_kdf(EVP_whirlpool(), in, inlen, out, outlen); +} + static void *x963_sm3kdf(const void *in, size_t inlen, void *out, size_t *outlen) { return x963_kdf(EVP_sm3(), in, inlen, out, outlen); } -//FIXME: whirlpool - KDF_FUNC KDF_get_x9_63(const EVP_MD *md) { - if (md == EVP_md5()) + if (md == EVP_md5()) { return x963_md5kdf; - else if (md == EVP_ripemd160()) + + } else if (md == EVP_ripemd160()) { return x963_rmd160kdf; - else if (md == EVP_sha1()) + + } else if (md == EVP_sha1()) { return x963_sha1kdf; - else if (md == EVP_sha224()) + + } else if (md == EVP_sha224()) { return x963_sha224kdf; - else if (md == EVP_sha256()) + + } else if (md == EVP_sha256()) { return x963_sha256kdf; - else if (md == EVP_sha384()) + + } else if (md == EVP_sha384()) { return x963_sha384kdf; - else if (md == EVP_sha512()) + + } else if (md == EVP_sha512()) { return x963_sha512kdf; - else if (md == EVP_sm3()) + + } else if (md == EVP_whirlpool()) { + return x963_whirlpoolkdf; + + } else if (md == EVP_sm3()) { return x963_sm3kdf; + } return NULL; } diff --git a/crypto/ecies/kdftest.c b/crypto/kdf/kdftest.c similarity index 100% rename from crypto/ecies/kdftest.c rename to crypto/kdf/kdftest.c diff --git a/crypto/objects/obj_dat.h b/crypto/objects/obj_dat.h index c4772768..85718a43 100644 --- a/crypto/objects/obj_dat.h +++ b/crypto/objects/obj_dat.h @@ -62,12 +62,12 @@ * [including the GNU Public Licence.] */ -#define NUM_NID 1044 -#define NUM_SN 1020 -#define NUM_LN 1020 -#define NUM_OBJ 958 +#define NUM_NID 1045 +#define NUM_SN 1021 +#define NUM_LN 1021 +#define NUM_OBJ 959 -static const unsigned char lvalues[6753]={ +static const unsigned char lvalues[6762]={ 0x2A,0x86,0x48,0x86,0xF7,0x0D, /* [ 0] OBJ_rsadsi */ 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01, /* [ 6] OBJ_pkcs */ 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x02,0x02, /* [ 13] OBJ_md2 */ @@ -1020,6 +1020,7 @@ static const unsigned char lvalues[6753]={ 0x2A,0x81,0x1C,0xCF,0x55,0x01,0x83,0x79, /* [6728] OBJ_sm2sign_with_sha224 */ 0x2A,0x81,0x1C,0xCF,0x55,0x01,0x83,0x7A, /* [6736] OBJ_sm2sign_with_sha384 */ 0x2A,0x81,0x1C,0xCF,0x55,0x01,0x83,0x7B, /* [6744] OBJ_sm2sign_with_rmd160 */ +0x2A,0x81,0x1C,0xCF,0x55,0x01,0x82,0x2D,0x65,/* [6752] OBJ_wapip192v1 */ }; static const ASN1_OBJECT nid_objs[NUM_NID]={ @@ -2695,6 +2696,7 @@ static const ASN1_OBJECT nid_objs[NUM_NID]={ 8,&(lvalues[6736]),0}, {"SM2Sign-with-RMD160","sm2sign-with-rmd160",NID_sm2sign_with_rmd160, 8,&(lvalues[6744]),0}, +{"wapip192v1","wapip192v1",NID_wapip192v1,9,&(lvalues[6752]),0}, }; static const unsigned int sn_objs[NUM_SN]={ @@ -3711,6 +3713,7 @@ static const unsigned int sn_objs[NUM_SN]={ 740, /* "wap-wsg-idm-ecid-wtls7" */ 741, /* "wap-wsg-idm-ecid-wtls8" */ 742, /* "wap-wsg-idm-ecid-wtls9" */ +1044, /* "wapip192v1" */ 804, /* "whirlpool" */ 868, /* "x121Address" */ 503, /* "x500UniqueIdentifier" */ @@ -4732,6 +4735,7 @@ static const unsigned int ln_objs[NUM_LN]={ 740, /* "wap-wsg-idm-ecid-wtls7" */ 741, /* "wap-wsg-idm-ecid-wtls8" */ 742, /* "wap-wsg-idm-ecid-wtls9" */ +1044, /* "wapip192v1" */ 804, /* "whirlpool" */ 868, /* "x121Address" */ 503, /* "x500UniqueIdentifier" */ @@ -5394,6 +5398,7 @@ static const unsigned int obj_objs[NUM_OBJ]={ 970, /* OBJ_sm2sign 1 2 156 10197 1 301 1 */ 971, /* OBJ_sm2keyagreement 1 2 156 10197 1 301 2 */ 972, /* OBJ_sm2encrypt 1 2 156 10197 1 301 3 */ +1044, /* OBJ_wapip192v1 1 2 156 10197 1 301 101 */ 1008, /* OBJ_sm9sign 1 2 156 10197 1 302 1 */ 1009, /* OBJ_sm9keyagreement 1 2 156 10197 1 302 2 */ 1010, /* OBJ_sm9encrypt 1 2 156 10197 1 302 3 */ diff --git a/crypto/objects/obj_mac.h b/crypto/objects/obj_mac.h index 908978d3..f119e25c 100644 --- a/crypto/objects/obj_mac.h +++ b/crypto/objects/obj_mac.h @@ -4493,6 +4493,10 @@ #define NID_sm2sign_with_rmd160 1043 #define OBJ_sm2sign_with_rmd160 OBJ_sm_scheme,507L +#define SN_wapip192v1 "wapip192v1" +#define NID_wapip192v1 1044 +#define OBJ_wapip192v1 OBJ_sm_scheme,301L,101L + #define SN_zuc "ZUC" #define LN_zuc "zuc" #define NID_zuc 1000 diff --git a/crypto/objects/obj_mac.num b/crypto/objects/obj_mac.num index ed40c23a..c7946cc8 100644 --- a/crypto/objects/obj_mac.num +++ b/crypto/objects/obj_mac.num @@ -1041,3 +1041,4 @@ sm2sign_with_sha512 1040 sm2sign_with_sha224 1041 sm2sign_with_sha384 1042 sm2sign_with_rmd160 1043 +wapip192v1 1044 diff --git a/crypto/objects/objects.txt b/crypto/objects/objects.txt index 5746b8c1..feb874a2 100644 --- a/crypto/objects/objects.txt +++ b/crypto/objects/objects.txt @@ -1444,6 +1444,8 @@ sm-scheme 505 : SM2Sign-with-SHA224 : sm2sign-with-sha224 sm-scheme 506 : SM2Sign-with-SHA384 : sm2sign-with-sha384 sm-scheme 507 : SM2Sign-with-RMD160 : sm2sign-with-rmd160 +sm-scheme 301 101 : wapip192v1 + # GmSSL ZUC OID sm-scheme 800 : ZUC : zuc diff --git a/crypto/ocsp/Makefile b/crypto/ocsp/Makefile index 96a1b156..444cf5f2 100644 --- a/crypto/ocsp/Makefile +++ b/crypto/ocsp/Makefile @@ -84,12 +84,14 @@ ocsp_asn.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h ocsp_asn.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h ocsp_asn.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ocsp_asn.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h -ocsp_asn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +ocsp_asn.o: ../../include/openssl/err.h ../../include/openssl/evp.h +ocsp_asn.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h ocsp_asn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h ocsp_asn.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h ocsp_asn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h ocsp_asn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -ocsp_asn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ocsp_asn.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ocsp_asn.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ocsp_asn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h ocsp_asn.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h ocsp_asn.o: ocsp_asn.c @@ -99,27 +101,30 @@ ocsp_cl.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h ocsp_cl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ocsp_cl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ocsp_cl.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ocsp_cl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ocsp_cl.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h -ocsp_cl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -ocsp_cl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h -ocsp_cl.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h -ocsp_cl.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h -ocsp_cl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -ocsp_cl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -ocsp_cl.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -ocsp_cl.o: ../cryptlib.h ocsp_cl.c +ocsp_cl.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +ocsp_cl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +ocsp_cl.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h +ocsp_cl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +ocsp_cl.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h +ocsp_cl.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h +ocsp_cl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +ocsp_cl.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +ocsp_cl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +ocsp_cl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +ocsp_cl.o: ../../include/openssl/x509v3.h ../cryptlib.h ocsp_cl.c ocsp_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h ocsp_err.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h ocsp_err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h ocsp_err.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h ocsp_err.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -ocsp_err.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -ocsp_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -ocsp_err.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h +ocsp_err.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +ocsp_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ocsp_err.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h +ocsp_err.o: ../../include/openssl/opensslconf.h ocsp_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h ocsp_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -ocsp_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ocsp_err.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ocsp_err.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ocsp_err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h ocsp_err.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h ocsp_err.o: ocsp_err.c @@ -129,12 +134,13 @@ ocsp_ext.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h ocsp_ext.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ocsp_ext.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ocsp_ext.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ocsp_ext.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ocsp_ext.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h -ocsp_ext.o: ../../include/openssl/opensslconf.h +ocsp_ext.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +ocsp_ext.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +ocsp_ext.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h ocsp_ext.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h ocsp_ext.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h ocsp_ext.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +ocsp_ext.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h ocsp_ext.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h ocsp_ext.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h ocsp_ext.o: ../../include/openssl/x509v3.h ../cryptlib.h ocsp_ext.c @@ -144,27 +150,31 @@ ocsp_ht.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h ocsp_ht.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ocsp_ht.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ocsp_ht.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ocsp_ht.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ocsp_ht.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h -ocsp_ht.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -ocsp_ht.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -ocsp_ht.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -ocsp_ht.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -ocsp_ht.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -ocsp_ht.o: ../../include/openssl/x509v3.h ocsp_ht.c +ocsp_ht.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +ocsp_ht.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +ocsp_ht.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h +ocsp_ht.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +ocsp_ht.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +ocsp_ht.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ocsp_ht.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +ocsp_ht.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +ocsp_ht.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +ocsp_ht.o: ocsp_ht.c ocsp_lib.o: ../../e_os.h ../../include/openssl/asn1.h ocsp_lib.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h ocsp_lib.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h ocsp_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h ocsp_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h ocsp_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -ocsp_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -ocsp_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -ocsp_lib.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h +ocsp_lib.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +ocsp_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ocsp_lib.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h +ocsp_lib.o: ../../include/openssl/opensslconf.h ocsp_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h ocsp_lib.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h ocsp_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h ocsp_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +ocsp_lib.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h ocsp_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h ocsp_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h ocsp_lib.o: ../../include/openssl/x509v3.h ../cryptlib.h ocsp_lib.c @@ -173,13 +183,15 @@ ocsp_prn.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h ocsp_prn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h ocsp_prn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h ocsp_prn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -ocsp_prn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -ocsp_prn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -ocsp_prn.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h +ocsp_prn.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +ocsp_prn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ocsp_prn.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h +ocsp_prn.o: ../../include/openssl/opensslconf.h ocsp_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h ocsp_prn.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h ocsp_prn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -ocsp_prn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ocsp_prn.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ocsp_prn.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ocsp_prn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h ocsp_prn.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h ocsp_prn.o: ocsp_prn.c @@ -189,13 +201,14 @@ ocsp_srv.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h ocsp_srv.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ocsp_srv.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ocsp_srv.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ocsp_srv.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ocsp_srv.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h -ocsp_srv.o: ../../include/openssl/opensslconf.h +ocsp_srv.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +ocsp_srv.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +ocsp_srv.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h ocsp_srv.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h ocsp_srv.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h ocsp_srv.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h ocsp_srv.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +ocsp_srv.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h ocsp_srv.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h ocsp_srv.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h ocsp_srv.o: ../../include/openssl/x509v3.h ../cryptlib.h ocsp_srv.c @@ -204,12 +217,14 @@ ocsp_vfy.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h ocsp_vfy.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h ocsp_vfy.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h ocsp_vfy.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -ocsp_vfy.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -ocsp_vfy.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -ocsp_vfy.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h +ocsp_vfy.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +ocsp_vfy.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ocsp_vfy.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h +ocsp_vfy.o: ../../include/openssl/opensslconf.h ocsp_vfy.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h ocsp_vfy.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -ocsp_vfy.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ocsp_vfy.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ocsp_vfy.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ocsp_vfy.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h ocsp_vfy.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h ocsp_vfy.o: ocsp_vfy.c diff --git a/crypto/otp/Makefile b/crypto/otp/Makefile index f32ba41b..a9228d19 100644 --- a/crypto/otp/Makefile +++ b/crypto/otp/Makefile @@ -22,8 +22,8 @@ TEST=otptest.c APPS= LIB=$(TOP)/libcrypto.a -LIBSRC=otp.c -LIBOBJ=otp.o +LIBSRC=otp.c otp_err.c +LIBOBJ=otp.o otp_err.o SRC= $(LIBSRC) @@ -79,3 +79,20 @@ clean: # DO NOT DELETE THIS LINE -- make depend depends on it. +otp.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +otp.o: ../../include/openssl/cbcmac.h ../../include/openssl/crypto.h +otp.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h +otp.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +otp.o: ../../include/openssl/modes.h ../../include/openssl/obj_mac.h +otp.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +otp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +otp.o: ../../include/openssl/otp.h ../../include/openssl/safestack.h +otp.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +otp.o: ../modes/modes_lcl.h otp.c +otp_err.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h +otp_err.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h +otp_err.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h +otp_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +otp_err.o: ../../include/openssl/otp.h ../../include/openssl/safestack.h +otp_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +otp_err.o: otp_err.c diff --git a/crypto/otp/a.out b/crypto/otp/a.out deleted file mode 100755 index 7cdc69759f42bb66eddbc386ccac14cf12848c49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1623516 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.C>2~@0u^omgo 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π_v)*#uMqQ)NnGKHg6&YV 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�JIe(brH& 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⋙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%0D3~mmDVQyoD_A60ELbI2E7&18 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¥nG_K&L4nj=ZvLasA#||%3fVm zT*K|rVD_VLCo$@0as0TxP8guBu#FuW@*ocqUc**j32oV1qQdyK0`%>+1d;{0a<>~y zdR1CgrGlwoe-0?pY@LS%=c7d2?vPck3&0~y7Mtv#webW+S%$x8^fGmsx!B# z3okr1@>=lAN6y}*f~=wy_v84A@dF}3rhCa?5WxuqRj

QLjb?Eb3N9f%5aOjl%kr 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

ZBB$?zB?$Ic)anE1oSoth&`;+axFmRh@)N{ zsy#={)gdGq8>~#ootT*mT)1^^oGnPGu;LsUI?!R6V=#GxZDq(i+K+E;1ycr@%BM5Y zWI-H;gh0M(bapa8iv#2M>l)Rxw_PO)A`vpQ1#X@}0xT7m$?7i*W41^CcHY__D0hZY zPzx)N&$_sSGCMHaH?>Ynjl2<1buILX%$v~(-Me%>v{0klipgtqWhWUNwT!P$Htce( z5SC@f6Ce!K_#sgQFq@Zq>bIFKZOuFT=5)6IBPo&!gLvQcxU=pdQnGi-w{Lqjbt1nGUH7*SW%C=PVRX2_-q7 zmp*tMxTlFsuL=|W9{Tqi{X`*LQl45S8w6=7OSWa(xiprJ?TVdQ12QhiHS=RNKu@Ko z+N(G$0NTH!? zP_*#yZa$~3cQK2S*-j*?Uh-_ zfMQr!qbn-|sfLsC?bRh{wwuBpL))mOwaASgI+!{XyBj#J63&$FHIUlOhHMvqI?Cz> zMt)^F#@__ZLx7{@nnoKX?G=sen`BptLI{Ve zio0LP{tH{WrS1(pnwe72Le3VU=0Yv7>Hc+>uC`oMp#V~_a_Y3BF@0}PyfT};i+C`J z<(De4%9q?O#S(w{^LY?BJXX6}ecW;qXPbT)= zGavR(aRbqXppGL3LgSu*<+s#O93AWUg$+fYnVX)+D4 zC;s@RS~ic!^qxtoN*{8t4{Iv>56|22E3Cx8gstxf*RZ! zqGj~ELj4W{@1$=F!Mm5RhsUIPB-(cj_AO1fwBOD6F5n^Fq$R7;VSmtx?SwyZYti*32u%@gV+?Fz^8 zPv^VKf$Iq!`o%3OqvZ920iTY3g=7lykSlh^Wqm+`b_R2 z2xLJuACeiy3$*Hk6`zN49rntQbh77a_w(6`nfF%_q)-_c9)3F7=;q7x4jWU{c>dalg3Zp$kNktjAZac-}TFBd*PJ7^r8%@J>rxo z@%SZE8VlAJd2D|}3SG;|mWBl9n+06l;lF^`v{&oC?%J(5*Q4eS-_scZZ(6VFW>s!z zTjcoc;6D^f#PA1r@Hl4 z@eWxGh;b{{fT8+13U74DzIq?+$ibZU$i)(O2OGyy3d-x?ibdHPl=XL<|hg;;e=~_JnUDimH z(F6)1)47by9%)kh+GEtmYoAENX9}@dJ{ulnWsG=f7dW_Vy)C#?iXvZaBj(m-aBfow zX<;0y0|}U}W)0eL$*eD$#A~Rt0ea_>Fu)*$J65%CeE@R>0*4CpzoD{0X)6C%1_)yd z6gI0QG-E@6hneD0S5duF0y;jNM0U+v$6beye~>`ylD})hR!()Doaeg`fnn;573z^+ zbON}hVoN#a#;QS_rx5Q~t%GV?L=5z%ZtHha3}rK8h->MeG0S6LI3LCj3n$UNB7_Vj zLBc}m3Gq|WXI-r!zz7YJV5Nagaz^X~^^0*dydhJ))3sF2OM@ z_q|nW*YowmN|E_$Yy1c$G`;Iw8vt=q4c84s-OxZsxcy=QctQA%bo=_o-wyuUs3#9F z_XXeI>d8*J{$EuFeV6(ro`Y}25;TmP(*r{IciZhHG3FbK?Zutr_CX}STZ(60YUXYa zu$k)6SI=%mx7g!Ij+^S1k59B>$0lv9m(LqBpENIjw;Z=VZfC-Ltb{}6d?ZUmO z&q@FmVQ93UI_3w4EnwCOU?)CT4xz;mjV@hMI-m)VJ6yDE(nxfj-oVYUwkCWt;dYsv zl;vnW*S+4VZ`o+K@f3y?o@wyJoL8maBG$%}z8Bio%(?XhrD1G_B%w`djXX6WA;!2s z0f41!93BE>>5Q#K!n1-a1G@h^xR{vlN5&wc`ihh+n8rGdeo7K8ypbTPAM{_b1>M6` zy|-_C$gA^fIA(9_{bL0y`?Rk`TUW(*PA!qR?@89)=~w0ULiM}JegGe5V*lT8CB1~; zh}?gdgvbpb3uV; znA2~9%vw=^Jh52k0E19SK}RzFYITaPwz&w)58+YIN{u+rxYoI0X<$`KGz|ThYPfi3 z8so>r?7{s&*vx3#7JcNO-l`Vjquz;M>At9xm87Qegew+%T5^5deWMr1tr^=&fEkaMf)iUdlaTzOCMD8DE?sbNP0|o;4fI6}*AQz<*?GVgvLX;54?*6KWyNO6 z&K+PUeto>ssOJkK|Ka1zzqS7}0Bir0Gq1@qfeFQs*l2hjHtVp&s;U(&=+oYmQGIK! zBQCvAMbw#7>W(qmKY)v4k@~-h*)5?;q0l6uUPQTPHkr7wA8Jj+L}_{Kl{aDNS4tG$ zkwmPmb0F4VkpVcUSuJw`k29vAIwhS~?3~rs$$Vbk1`vSnu~_*s!2%jw=9X_qDP=WG z)4+FXGoBuw8?prv?*f3}`HRrzW1fH$#vw2NnqB9BI)zVlwSlI+Yd(c>-g^C)f!{&! zhWZzH5(q9ci`oprx#*kO1(*!Y)zzx^iGxA8TmClre)88`uu})hk~QF=bP?NSos#P6 z6UdBW0`mLhNkZb;^0)YeR49_{dWHK?{|V!%G1={`Ig>XCf~qDne~xKnT%EgnV6 zENU~mt6jSoBI9Nx%`JAz$S?H4Iv*jBcCIQheo%DKMRUEm>pvmFMuJOxAnX%aH^C*; znIM9YXO>>%l=jrTn<{W=ggfXDIA%c^lQ2V_A&}8Iq=6PB9#^AkS`W0bHP#UBD?{T=ZR#Y0o@NMEf zEx%JogE9ZxA%>kMX-Ut1=8)ze6;f#zdSBZre*{=j1C1)S(G^R1?&ehFs_f1L@T_k* z@Oth(NrdsB6FWXEB8dj>C-Tu zW=R25$Rom{QUd!;V-)VGUGr&p^zcsyU(7m_qm75|bkSbpPf-R@=6Wsx@q(1=v#w^P zsK7h{Q9BL5M?;cc-Q}=rl${9Pf3vhP$Np3Y17e{4nWQ$M61+7UTDW8oeD8#8L}OPU zzcfp2p>3rp?N1z{+zFk!e}?3ZZ2+v-X5poxbB7rQVDOKkorVuUi=0`+LkRaXF%8Qo z?zqVjnH}~Dj&vw~&HRz=a`NznT63e+oH0)!g*+uC8NTHoh<3c_k>Hrz*rLN+SpKgd zaeDb%bL~<|a)Cv&KHTSlRej|yGx(^Nvf6q_JK%%v{8y}bMmeZG6c1Y$E_A1sBX zR`p}^Ay5@is2n{|p}P>P*x}$&A{@nGX_lN4-e?bzfuu%qAM%kUU+zS=E?044UO&@E zJZQc1BFSQHO;-4g%S)ypVc!Q`d%(t;I)j(H?KcxI*xrA>^6(|q@Gm9VPUE&Y4%4F7q2EC`O3=ZR)CB|b^a#{f=Ax^0L z>+{aHoWRggkjUX)fugAufU#bC*FV4up z)GBFoB{IHC#Au+T)Oa)ixZ6C+F6G9Le3{b(>}#d(b1k1ohtu+o!9^nX!3cF>r; z2)MyfL_qR&Wz-x?WN^}Tb2IA)X}yLb`n|r$Rz@ph#H`X2$3gYutzjI6zPDMTNt~AAd zthe-0(fHM;4dq(7&epgNI^3|5w4q}t-Lq+X6?I}gLB&qT#Nx-qU%dC9GQQfK`e5oR zT7!qnMRcw87x8*;7O?aegRbUu?9TV&)BF8Phv2Lhwf&>>fyNnNggvkz7JOXp5(@#v zV=LXXXu2N7Xl63a1FT!i3r_cWVk!_^=xVTOy%(m_{T+E}lydBg2P|kZpxIK2*1uS$ z#z6o%0uCe)>dj3Q4Y47??z-H#iUo8IU|QYGiMt`MGZXQlt2*H7CEw3PaXW6Itt`Bl zt8sneer0aSZ+c9N2$|H|Nj0Fr)dj4>Sn-eF%R+_L?T4_lwm;Bh@P_sr2O{MWDE}XF z*3yiwfBplvf!n+H@zd{g`#fFi%@%ge+YF3=YE~*_IZxJP05nuYw*qhaCBIH*?Pw(-A%~93xuWE*1A3~7I`wwL(+u1wij=YW ziVaV&Dvn=tpxu@3t3Fx)cj9Hi7C3CL$or7#bcX>X0_pAtRre zk|ChB5#tooWbgH%R69%_K-apWyl;b<0U1mDzmJnLtwun;00rL$)&Q=_IO+(V!@jfZf}ViVBTCK0_GpSbMu(Kd(kHtN2ptx z^vV{Ysu+a|8h*oo1t*p;-$}1&w>^a(J;o@gS2%Ny-TijNb|AQt}|6(?}9a zu~)AtTudCTN56feZ+cQkTyimFX13>At}`a44%DZrMY#m;BE$i{q%E?nd>>)ufuZu>;yle$*nC@vef z__?_%ik63>WzHYVyGCiw#p5tPuIITm$oMO`a{ngoyA~qNLj4yYUS^=uvG{PA6CN^2 zAbBa;ToUEJ!%3x-?s{e#f{9=O$7pF5n2&gN!}mot%t-tx2-*DI3fD>SYBZek3pX;d zS0L_C=0eVM4Ed0&CZXzvGvIp&T9aRo8Of*GxWXnL1 zeZ7zFDFl|Bn}Ob?x{H zO94#*2D|+NZ&1da4r+NtqlLJMW#B9VBUk+ukDM%@dY2= zl)c_AHatN-SreUN(2cKdZFX;SUJB9qjP?;DslQfrdBKP8`J@TL0ahPc*AQWIun9~z z9A&M}wTM^?l}W1Gsc%>S@D4ij6;3AH9rZwA^e(1ciy!bKmF}a!Iy88xUYD}!b-VP3 za}YA~%o{ESu$ozt4|!i|Padsfqw!FhQDTIP;0EsTWpam6kzih!u9Gy%fNEq&x~gcG zvVqp8QjPMfJhAZut&T`z!?nP{$AOitGRb@5;mVG1QdCIx4I61ftew2L&EE_^J|lDi zRP5i(&gOv;2$f!h4ZYP>lW8D%ip;2Wv%_r<91+~$QT=PYmHj$Wh-fBi5K3*J0n64a z6it`2xvh!Pzj+inhUt|1+Y6@lU=}H&*eNXp997o5YJcee!wT!20~7lrh3qKi8=xq| zp$r2-qi&9p1G&8vLC3H}k)BTfq>2|yntvY&WN^gtN8};(^rP^RLSTB@xPjg#S$#&l zfYvV{p)}PW@`Tv)olb!<9vw7|t2r8mq#R1B8C&e$oq%SOGEIIj_gRNfZ8$+c`JzwO zXWg80zd%?aaApNUNwj$3v2(syEHc(OrBcuSAfqeotg-?yN#HQlYhei(y5DfVF~dYg98*x_(vU9G1iUR2pAXTX z1sEe*?nlL-L@eX9i8(`BhcSUP1`Pd48EcY6555SV`z;sc)#(G;@IR<#l=q?O+XFJ0 z>J`wuhYPD%AFG4>Wb2CDeu3JUm2Kr`I~`{KoM}^7W0ENkTx1;by6S@6JSCoGK_V(( zxq^{!pDpYMt}L6)NQ(?|Ouot12yX+t9V zP_n7hT=}b$Dt!jLdE;n}%GBu?{5~o{yMXLiH3(>_MV3Ih1KCdnrkl3#nWVm&G`Kuh ziy$2Qv@qqfsymQLQp>t{>4$(0-^@-KBsD_JOMN95abmg&0lAw!3hChCBNJEM8#|d5 zu3pufj<S7l2iG$(i_)7Z+S>sP*oXvk@mxh}eQ4%Il$m%NZ6G!f}fA{^~18YG!I_^OrV zD>cZvVikYxzn|k5KwP<4_UeWU5*6V2#~p7?15Di$PuMsx>gqSwJt(5qh0O^je;IcH z=K4j$yKdh85>6Wf54dX>q6fmzRo+_N+$4YFvmg7B(SD^ZV2uqv0(Mrgj}X8hoJDbr z7jW=QYX|E=hzpmER8uUM}`9&m>>9Rax!~?2U&$C>+#e&m*Rx}wHF=VWX3sS}ebB zY$`s@hQS7T`Ahm1MW+F2ohM6=OIt%XS1YtvP7Jn&WovR8o3^ozgqL2r@SNrAn zrlvfuIYSVN>n|$JADl9D>c^?fE0^|mfG|vw3mc_OTPjL{vVbW&?_pc@crQ;uior^B zIQWJNJ&>;I5yn+NMJg7&+LU>+?-bhO^5#6;Ad?qhdRwHm_Khz%E@_bZKrP@EUOyPq zJ!Gzfc*t}|R8!;ShckK zNjqX+Vh4?&MEzp7>785F}=~GUFZ)8n#Xz80Urd^NfH<1?3@xdgf^AI5k zM9QL`DtNW=Mq8e9l;4|N=*$M-o1fFd$E4P94mMyO`mXA})hul*J&eF(&t#Bq&*7tg z5c}pt;MK-A>9?QTG|qU+=ycEvAwI!2i%+Otqco&t@g4ROL{0bL7&OB+h*7Wj@mggW z4iio9&O%oiI#dhFU{xcrY>4GyH^VUPnEoG2VrG4rkPyH0a`zC_g-E+V<@DG1rJE4= zhjOvsnBHaB&?2L_`@Er1|4A+Z!)sIewzeHq4Ht6#F+FBU4@*yS7=Q=f+lQYy=Xq+e z`1B4z_*QBrd&K@4B$vU5oNbP4KnfeHLd^m`KY(fM+XScy1Akx8x;yuUJE(sdj;(WY z3C6*#XHX7Am%tYPBsI3L4s*`NKY|{$`PaZoK14DNy(bs)W=+|e#XzKo!xwK8Gi*(O zhU?Y1Lr}?cT4xdimvpviX7MrGkAvNPjzQhF2gTMIFGrJ&h&fH`Ck(zOu6~5LtNYVF zwHHsW0V^8+kULow3;J%yULeiS*FY74$A-G>#m|fB;9^9AV(urca zFp#)rwN=KkK~J?o{o`S6sktt!IJfjels3v|g?~V#1Nbdsn1pO|lpg6vr+uoANv(7~HxoG==EVYdVaH5woCwbU$UR z4$b6pqT;;J6!}qDx=Z6eq{LvB8hYu?$f3?>qvhkPadN4Pm7UEM7Cp9p|MRdQuJz6h zD56IJWY58++g2FSgI+x@TIvzSB-(9j%>)$EROoR=4;+D0R%xlXrjc78&)z^{mfQ)@ z_52*tA{*7)A&^1#1uBCiG1O+&4vcRhK4e{~c~O%@1Q+aI7|bCWnN&G52D2uofdJd= z0oc2ns87bQNddXGkwaPr>93>nGuDPD$?X%4YOYGc2;{4mIG^4>gM}3b8rXggfJ0yW zPqaqk2;SiG@6AjYlyK3mUKV>e`ALdKe0M2fU1QiSj8oCi4UCI0YI@_@+1Ar%CrmI{ zH)6KFjPu5eN{62Pw#*toP1#8DA-Y?0sgkho(QM_=Dkp?8umzm9H*_V!NNEB`@aOF8 zqRUFaR*FGBr{i!E7z`yh=>wfkvuvp$Wl0lT|?G?AJI_hJ7qOYWW@vLmtAHf=25?0*!lsBYAV8Yc2D=*@4Q%AhVSUwMYLb4q|aL@Xi4{K9f@c5SfL)f$-MIsKcP?I~YykyVhFV zJx-N3gi|m^$Hq)8>}A(I8F;dZJk87|-?)uGNLrcW+n72r(|uQ|*m8B#3#*iJ2xS(X zC45Md*!+R26L!}_l!}C9{)GSt5P*mRv46Zx{BY>*Yv|K}g7r9zmwYeS{S_6_l0yzfK`&$7yv>UaW6S|Yz<)!F1DDlieCpVr=>(;?S#p|G zg+~(IsF>kW1%!N>MGl^juuIVN{LQD0byKo!s5If1$?AiXmjG-9~ z&oi+x4+y6iH3-{+mR#P$3Ad(9J%{kPbv0r_sARiT0RkV|bz-aWe9@|mXP3j38kJvp zd4~wh{7_@DHQh1r*fS@Va57xjjY$fzT0CZ@+(E;I!M39+V%XaL=Y9Ka8<3Js=$VMp zN_-A0pfEPi(=VzW$j6`MiQh++G0`(;NzH_TzOpMp)068-^wk|x{v{h5q<%(L9cnUk zdHEVp-Yar{28NvIg$%%f6#2$mu=r)_6R=mO8-L>N2c+q6m%g399kt4?W$pAX`H zvN*u8Hc8(Cq^p}XwqvW?Yh^F$z(AbCfMtm)nViwCU@8@l4q)F&zu=^t2LJH!`w)tWKU`gEcDykFaU2Cy((TIY<;5v9ihlV{4JC2;5TsL|1~=>2?>RC7n#v-LGsAlah^hU6Eycj3l- zN35D7gQ(JTANyB>i_G?NCEkhV&hPIZ8P@Hm)+z$Y!c$tuEz}#UehX0^SIt zOO;piiPH}TY$|38^!w<|&*tF_G{#o^0*<=0t#g%kmE;9Du%|2%hI^)Ojtmkt_+tck zeFdNnW`jIOx*-LT*SeiJ)!yz4#kRnke5y^aEbgb6PK@M@d)eE)JF9R$_NiKdmnFZd zm^j(96|9M`S$2fyJaAib_w8#Dh2X0XM z#sjooRIQiX%97+XWhILvC=i-Jm4)UE=yRLJUC?Gs4QYVx9hi@MU&$q`R@fA9GxW+$ zQmozC8$|V)1YdQsuXb+GD{EISwFs>SF|+( z3(v=PByA!=2_g2v3-9Z;-onK$_9#VaGJIJ0%dWb8cT`F5VmyUkqSCnz(-h z%(%rsDA7l|1$0|F2|c(-V<1z)0%E5;TE+ZVUB5{0JB$p;_K6CX3R)v}tRt&JD^+Vf zz2Ej>AQM<5@;(-2e#zRKPS>9FFv4JycZf;qbROd!?53hcwm;?09at1UNRN>t@47qD zH_`mvEp0+NbkYvx%~WT8+2qAfqlx8=;1aX-@e|6j@Ta&y1*iomm;rasON9jLJ0tx+ zWw^<-umXpNdyWbh%bFi1btdH$43m(Z8V2gC@ZR7so3(xH00O3-!5u3T&I|dY^tRw9 zKJk#=)wplrtsn4S?z%Y7#^kDMKyMY8Hqi$DOsmFF)$fP?&kZ?!|8>V%Po1r{-chkr zC9p|%hq0uYBZ1)tV9Fo&kj{5*E3l?xBg0L`Hr&2XC<0-w;ioYk$c9SU3AyFRb|tVY zi-7`tZ;Ohf`c?<+qwG|>1(R$Jd81)4$9vlDgx3@X)op3hR=uf;nj%SASJo)(l|@I7 z%G~Bps|LXZLxC1Q^dxAP!^k!(KTv>2o zS$W$%yT_R6h+lhZA!j}r0lbR|AKCna+p(o6+4lhUk?9wN<5e`Nfhj%_kt*Ihu?9%i z$;(9lRR^rL5wH`+UIZAmOm7O4^};bNEmGcPE;z5@%35!hyeDTcWLNN$aU5N65?+pl z=sQO*^YF*t#+H3OTzFl1F~1;6Ti4WCCNz8TtdWm5@I*A~mgSuiQqGTX6-9;h@_8P9 zI2UN)-bv}w&vH5PDn27p;2LTMlpVfxo&Xc{t2oCo%4`Uk#G4(~3$-4+;`NM5n@X&M zZVu-1XSOq;|{YDMA(~0{}%9y$=~2k$M*Zu{8FD5il^x? z$(crnuGpm);YnENGaa9GBxbbyfps0g?ORV|P~Kh@^U45S?7m;;bG)o(Eoa*S3n#|d zxrTXL^-zQFNz&twmvhwCF=3$qOLam;PR!}g-&Y0S1y1m5?@`^HvXt`e$D98QQ{?ky z+SC0u!iq=>>&RbyuMat}4rWZ@ElpGoLtv-72EeO{GTPSAq7Ye}m)Bi-1Dr(J7NOJg z(FDzd35s(h@}IlPgUC2r;wY7grAMXPXzAbUPIm>hfGq1fl}d3tcJB7)LKZ(FE>I%p z)nP%lWj^a!+669@VGANR+zq2(J-UZ~E_BfxF??Qf;bUcp{We^*SuMh5tIB~wSp@EM-E0>^TC(cFTJWu!a#3;=1(BfN|^T!Pg?%u;C zp3}gs^nHM!XT%_wVL(_~&ta3i4nzRfDnh0ycT%Qnx3M<~Y|7jwAWem?f>Ib;rvo(q9**CiV(t`)X@I}is39;St=O-A=;z8Gh zG)|At$hk@+6@&e5LS&=fl>9`F3LLPY*4n?#$TaUf5d=UuoRRtuNfo5~GX1yDU3vD9 z(O9pGSc3x_@czKTAIf7LZJx;*r0|wM7gIa;7P=}x9V`5~`HU10voF8*ZbS~|Q7uIm z9=RI=F~`)I?oT8~JDuvm#rn2L%1if}>bn&6^>8{UOqZoqA9dR=Mavo`Fm6x=^H61J z?lIX&HIoSCv#?w5u=G!wl(@a~h&(2Piy(=a9osN`6srT@)I|LiW$neVF6VVGp%>d} z&o*s&SvwdEXIAO%84`{S2YUBGGyV+uC!-4!aGMT};R<3Tqc%9Ez(ymcAt2PSF2)yF z8zqw>c1+*AzlUTU*3AXAiuYHD!N~kmdW;oy6c%sJQ>N8Yed?t;lAIrh7+lK zvvbJ4Q+>qL(f$8QCRu`|4J3Y%RaFjJk5t;b=*r={zdO3>5E;X-cXoxASFT(O|8wzS z>PaFwd{1~(Wq9w7#vsi%)0MfJci-jV@o1=N&$Y0Tv=oW{<0#;}YS5~;pae6 zercucM}HrZRJ1n%MNfr+&6R{-V%vk|vdy6jzI5bmUfq2CT3)wZ1b<4d`9>!IgFi*5|TrIDkZ*qJkP(B2Xq&o% z5hE0RVkL)die;)$wQePIoX@AK1r*6hhg>ccN73Nm?Nd*FV}C5I{}gs7%J`9I`?|fc zkLCQ6kG~^~6&F=TN(ytc6@PNdLfF!+)HwxX**=j&9;Xz(0B63Ouv_;0zSvZq)@aW= z7&m8AU!?cna5KBNQgK^S62Gc@h|kUA(bnC2tmlxe{egH-ktM74EDctVW6$MH1IR1DEIpf@#Q*I0Qo$L>;lMxnizL&_9MZ)r97Y7>X$bac$hF^B@nX;#aXjy zJTlorU^GbtMl5YwaT^P6;A(c%9i(64LYIVx6F=f2!gZjpwEkyh-9ElLv;8SCvq(>D!ad1fmd)mA~fPeZybN!RCo zOXZUk0$G};Gpappz2sC-{7KMJwORxZR0*cjLP>>?%!)fQC@nAW8Y5%Dk_oJgMU%8U zj)-xN?;ngNjJ~CfS0@1M1?ZCJi_BFx9LBDDCMi4p!C0L_|LeGu3yi>q*dkMj+byyH zUdp%F{=*jmGtc$`oPqkrn$%Ri4?Ml5+HKFGNq}fDbdiDY@~{{m8Ahaj zn9M{nVdYRdvUbcOzzfbHYznQDCrb6h%87u7GB{RkqRSg^7b)vmZ%>C|DF%*Z+>5Ea z>4pLX<5$zfsVut*YEc%lI8<78a&|lhY6`!(M+Icgqc=0Av6#r2z(QeZ?gb5itF_jw zr4d;_mhoc{AVybV?z##gmZeFi**1(5ryFBK(5`kXsH7ZyfzRn{fb$NPhE=s|+zE+% zwtDO5PZ6N!tWt2ByvrDNn9bp(Oki6522V5Ly=}@AuaIOiij*Ql{u*p7OT?xu4X6Hn z_zsz8a;tY^X)fGk4>6!7flO#Fv`Kccpw7cYqz;0SCd>ETs8h?Gy1VOi=JPY1X4t5B zC=H{w8PL@=xdcWYZ$OUtT)Pp$S6db>k)e3~>lq>Z1DL5~cfg(;BTrS(Tet3pGTGkA z=8kw+&#uU;tW{$Npwwx%#8~8_1Fu~<_p(f(s?GjIKS_Wdu zEHisZzGuyTq{AHTM-PXw9&{9oS?5@8=9v=z&|}I(1#e%V5VnNJ@8w5(t$eW;Dfhs@ z%JLxU_CL3{9r7D_Bg|zr+1IgftbMK8OKBb2ENE>}BM^+ci0d2c+uyV_#>DDP?zD2s z^&%liQs!u*MG&$WD+ND_p6#0SVY#s^f17ZY0DHkM?tg81P$E=^4K*EKwM`M%8&F8xN-ezd>Y$ppEWa2iN3c^iQ!9%fJJoV%iq~dbMmfDIqR6dz!B2r z>ON(GPJt2a=CK^kE9Ja~5EutZglm4NP2X zyos8jT?u#1I5hjcNR2tEBrmsNWp+k>w3#Y0&<^GRW^-j2j$^TWqy_+B6U!|ee3EJ3 z#SAwiR4J)R)(HZ9vzaH`?`k{*@Wm%w=^KZc-E7hz1UWGYg=wVkg9)raoGGoYIj?x< z1v-;aq(cZqCxoC8r;)i2&1)B{QlH3@6-L%>JleDZleA}W4Kv5xAH^}%P};V>x|G_v zr=|^r8&ZkfOF$kK1yf0M(9i+m%^RAfb~}rwC-fT{c?ZrxNcbG>k-xqa)9XVi7r#u? zVUCixK~+)2T^&@Oo%})WhOrG{ztvtepPiq|toB`|dp?GgHmG`d+MQFnwT`#i`3b`t zNY*nT`&tAcrmry0^meso@bu3B`l!OM9Y#Y@tBIJIIHT8|GeiSPA-wTo_%GvDRj`Hm zh%6omXEcrlmd)xn#_e`NYJJ?Sr8WsYbm1m__?&uP79~1gz?z8oOCBq_@J-+>w9OkdVo?2DU6UZJtb#K$ zFp3Vam{G(yltTJ5odn4{2p#`tZxsQ(5m*tV&7r zqs$N5exQe3+!4qCWc|;)IKgt-KFPp!3r$zCJ^fn;hGRnO7MB(* zdx2bFIR*jpcTp#R~7OGF_DRC70IJQ=5sp z5Cz6|Dg#6n>+7SD1BAmm*FKE6w?wnJY$bZGOVSd{l;au|>wKu@!CTN~YrVe*4++c8 zaO{b7lYQ+(1}FZ^9bY{fp6=3^TXcj9)UZJ9RwW^tLfW~E6ou{VcJ?-j(cTQyB3jO* z=y2t^#5;KduAW;&(Z7Dw3mOb8Kk_kEgyAu}z^Q9LObTF4+?_=46)btJ`n}9bNPjk> zRn8S3TLq^)WeB5lh*Kno`Yz|k;jCSrDG9nV_^uLrkr-IDhG;hP+>SXWtHo1{Qb zWyq5#g$qZNH&XQWKDG>LUJxmLmDI3VWn^PRNPUiqcu71bsPw5+&NR4eK<=B`Z}<-; z93Fv6YR@R*P~mciNE@TJqaRzrsl^cSZyrag){2ok6UKO{|D9ab#ftJ}IbR(d9l9^I zGI!wgY54~#7p1k$?)>$*@(^DN60l=0OkCe=I>-~k`S_8fM@`kc@zdqZ;n{NIr>lIt zkqz6T(cj2)-2CMjMmGSc?*(3xrxj^wArW010`?=A$kZc5@$ZCQ4TzQ#&23t|BV~)1 zJQ4i;tkFPdw!7$L!LV6`wQ?RX^!M!OIHso5n!=few?<)!tMyPvl@4@yy`9F=`DBRR zAptHUh1o)TSuS@MMN`GYwpIJNoKZ*RQ@agdD1@H@H1QgFf#7yAM_LFB`!!=CJ}6d5nEvMuqmx;|o zYltHMN!W-MWh*m9^8$IBM_@?7cMKFvHC}jpQ>cM;yR=_P;qTW&fEXrF9gIRRp_{9! z)RQKP3@%W_SE`G9y1nnOy_?pW3=|j-tR+IKXCU+Y(F9v5vG*iMu%r=@f)tTny)%;W z<1BI;E{|0mdYnU|Dlmp3lm1kdzSOj*d`WJ4RN%NF=(yl>N z!IpCqF_B9|SlK`N>uSMOZsqCRoUG7Bsw~saNO9}vAGYtu5H3y6m;c%|*q?`!9ta7c zZKEhylZ@AZm-`j4K;<$6l-2rX^xzw{*U54A+15eLt@;43w;YV!BjWqx9yg@#AIGPv-aoVXfU3&KF3NDA4 zcUp(hDJ@Mghsrb8hsHkK4*HwmF=`<;^PM#gHNj2fiQZDrpiFT{At^YehzoL-H{To9 zktGUID#?39TUghJs(E*RDCGpUefEHQ{$9Vxmlns08OupXi5z7{CJ#NSgs6B1Ae--G zsV(L-m;i?xH9SkS#NwatvabwzCNoED4_Hbj0t+DpNVwvZp+e&Mri(a7wU1wyhy2s( z!zYLb7ByN3O1IJ$L4%g*FQ#*v$x|D}fm`5PSckV#2)?MVTau?4O{o3)q;}K>Qdojn zq&W^euwJ%mn@Qe3ymC}|oAJ_sI&Pd>Yp9=rLTw0jH{_$}KD$shX2D+vGO_#=>vi@t z*m?%Z%&7e@>E?7KYU)^LjSrRma-H1=j6eb5gv%i^;-&pd5xFdMPU+%bi#2r)^p)&) z1svA%b3IX174T-88@*@ERh`FUjjwoa=wtDfz|*TV**S4-x8%NIvIK-_KId?0E*%le zUtT-1pNEiC*WYq%P!YlLykUjVmpTVi$0^`6K_0{9fQKGjBR#=}Q{JV$MRzPkvxbd#)LrI%anZtT;B2 z1WWE9P0JHTYBdtSV~Z$(;BfY?ArcmA%SusJdVFJ0y!BP5g)4yAc z01h+Ccmf>VX4tV)s^zA3Z)VS;6JU9_&*e54QlqUJIvs_i`g1WQ-OhMur@&8a?#O*+ z5h}^gyxm%9FC3|kK^k#6_fe9)5!;{GF4}@TOFkI`KIioFM4GQLG%yd|TZbFYfK3*xWCN&uii4|z9KItRLod@!Dfy-nXytbeOPe3iNVHrq=mcS4 zuJb;|*px-q>MI9}{e(?Jg$m`~srNsadsBtIRqq&I%ZVgUdBRFO!f#;YqZb@goVjRd@7e5SUc!N#duNR5o1Wk+vsD%L* zs4|6`vXbHCSlc^_4abICrsz9BpqNf?4qtF1?P-LT5(p;laR|LI+%yGSoP0>>Tsnsg zsY8H!NPT&64&67pi9it;1hkO>_(i3AbeLEWJ{*$e8g4q_#F(C+Ea>JoM$|(PI>UUp z9dQNhimGE0LvO02L?;ar|3jO1cdjpqz0-o9+>FT#{_wo9#qs8UU&?Ztl0<^0W6YZ2 z+X)Q1>c_%!Tx+d`H7_s>Iwvk){*L9g-5nkv!-^;i9ffJBrMJtU$^D+o%PVlQ;*U>w|tZm@WlItwLTa3$1;Wt+80be zl&@QPjO)@-eD<|J;!a7Kh-h_n81IV~i375|w59`nSL#^O?8JgFbX6;OV>-$iHC4^P0@OZEJJn3VH=rp#-Z!ceSHKpL)Eh*bVfsa2@R1Vk$Y6CX39^?POlOF%g00s(my-1p8pM-;mH1_X|+F; z%*b^uG}P3P0IdL^?8-|E34-eo)Ej?jIm&mPm1Xx0yXTonmYf)Z*EvyCL9*y#f7l3N z*S>VO@8!_&BIu+Mpg#Bnhg#8kWV{c8#!xj|F}v(*=eIrVJ%-1>7w|e={{bn2YnM4h z1t2>Oy$d(We+CadUVmiXJ@)C8Oe(YQ+aii5_?G_gzpp)c12wUru7D}c245+FBeKf= z!;V)zaAi|)J~$ktq2Jc!qk(?Gn>v^TFMP!6uwB=|;o~Z&cW~g>6@ze8MU0%hpVY$VQUep$~nVW zpZ|L}cQM|a!%F#gK8M0rWnV!ss5S;bP-koz?{&(S9GgISjIiE=Lh}~GC=o=Kpnm_I zqiVIY5Ved=j-R4Ev{|1^OrHHQ&Zq%AFu^9iAP&h#?&yMX7#IP8xqaJwXxa8p;h{|q zQhIXLHi)_im_lQ=L`e;%e52(W`J<`#0r|1xHlA+h*(uK%qM8yVY6W%Te>7a# zW!~9C)}-yjpJ|rUX_mfgjL+iUn6<{`somwlDrlAbsmgLZ4NgSrD|ggxpH-a58&r!zJx<`cOx0x<-zQ<&(wHH*Aau3=%O%IilKzZp&jrzQZ`sCUG`> zK`i=?Z;QqGa9cKoaW|?j8fPoXIkm>q&eOsJ5~JB0Z{_RA^Pj|S35)6+NkcN^>MfKv zlo#v9Wh6srSRiJ8CSA~3ajJ)IC@iNSxS2d;S)mb-^d$dA^I9~?=Z05BOS6XPPU zjEeuXI`VuO`p<{fT_8j{5LlvT?G3}0w^!GiccE-LoD0PXd^IlqJfnW4v^^D*qAo7A zzK)fam63VKM&+itjS<$!m16X5nT~6K>{WyWncX!ITo%fa@+2uD4n(^nrOX6P?{lJa zMlw0<5k55EIl;9dJ?($^a-I$d?BwfBl4TP2`qp0ZSD_lkalGqo z*X*HH5VRGMUPN?~HnL79Aoawjaw&@Dc=k>+2yE?Fu$k~+K~9>s%u=`!{ycK`$RRp{ z(Jxi-m@+R1f8TCO$Nu?d1&l$^v|AbAN##)32$H%mIeaUSqN@Bsap2RM_T-t@np6Fs zKY^4#MW*+{TQ^8Njm4Hu#$By%GP6|UK(eXIuR5vcp{xT58y%py5fW#Y>r9S?D&t8$ zsO+tKkghI?GE9`Txh}RUwACA~s~+M$-hWp~^~wpWwG-9V_2s@Ou)o0K10YZaijqTU zM`x@$d61wG7sz=olwQ=W%qKQVepL)@&r4RkqH+wl*Cs<>?g<$$Db(rPaBCQA@na@T z_f{&j`!)BlJ;Fc$;cE812DYqoMFdSQ9Guj*JW1BXW5v>xDjEM9{>PsJne1YPuv zfd{lfJ!ig=Wm)Q`?he>z^^eFt`{0 z%xVzxhusidRiCTt10!W{ekheTV3dqCgD%4ngZOv>`|h;ajZjjCx-AAbqI~76M*yS6 zs$#RJ9*dyTVVZ>$i>_mj{>JG^A3e@$LyDS-$O|DsR_fab41V01xf8zpf(Pp2)HkUL}{d0|Rp4 zg}VPBSMVi%(Z#mwC{b>WwE`32RM#yefGo=4`m0~cpOKqIAsVdudXv(mW*;1>44yF) z>?8BXOc{_Cp^7>bC9MdawF!-_K)wowQ0JQs);CN;zs3l#Q*40iRuf%8a<$mrc$K4_ zzqpIDk6t#8Wg;TW_*x>)aGQXEnu3Y}0DP6w9=MaAGK7QbJYS+dG<-H?SZ7~l_&68E zJ{{1YVWzGjBT-UDbeNbWsqB%ZObF{g%N@y`yQx6Jw0KoR#T4AH3}HJe)?RCbI2$)F zQ3qjx3)7twF}@p_Cva0vE=G}l zd1zV~PHPI{KSBq$*+PEC@`4+I_e^LP$R%C5TLfMJQ@#CYj-9?q_T?Z$1RFC258IeC z!{D>&{r0ZU$Yz@$^pZ=Ra~jOA(dpi}ilSeqt_jfb#_F|SHx#9Mk8ohMAY?(@RAQV- zuAY8=gL))6DSoFU1qqD6u5|KMZ;cs}EBM9E0u(NmJW1y;FZvhC7oW>{xasJF*Sud8 zZ(0C@n{hhZv$)K>W>n8nW*WVW6b2qb9< zCd!5Qp2r5A_U(@oecXy40{|xXybk6@JP-~?F=8>efp=3L_zb}j?f|Hc*D!V6zp={4#DnSIj5+@?xwivifnL8`1i80HJQ>3w13G>hS%Y&#-mnQ)q!5Gd zLGf*I^w#D%puw&#(U=hry0R3kH{>o7Kabr>PTM~i z4>&3IXYy_qO{R@-mX1F0bao&N7#Y0VkFGPP2`&*Hx2|ebb!M5zu>s-nDnoh3-Ywpb zRqNG1byrg#EjfXT72!IUYp17?nTbmOyKh0yok|V;{bimK-%XTAp2B-(XoWo4k{Z0? z-rrp2;D5f*7kCX*7^Xh7Jap^T(49`3F)9(fESPmP()F`OrFf&2ioJR66|9HS~mk zcr%V$#RE%oMmVN*`9kmTxlvH}1atqwha7a=p{y8y{!1;VAn{f#b3O$*^%(WS%$+vg)OmNUYSaYS*7#rJEb6% zsp_#8OH)=n-~_*<+|!R%~(Scwrr+ce*Ez|Dk9=49Mg?_7e)35CL`bMjfUh zHS>GBWwQ{DA^!?>>emkh7y^MMsk5Yt{i6luv^|?&=P9`RQZk26EQis}Lm~ix?-GU@}QPDc^f_(ww5JA@D6x8}Gjgk~3E6^@j zUll9y8-mLl6dFj{^?^@t$Kw)#ga4o9U7X~U$i7=LG6fODh)qSzQP7|pQ;r{;xNT2F zI#$ZoKmIhiirQEeB3yr=@N|@I0Y!ugihavrP16?{Kt~)9Ih~IC?kv?QCjZJSEMmbj zKF|3D8VBh-Ub)naLzERCro8*#-l_zq=C&R{N#SVpCoqMa+N<9xG94nC7t6QysgCW; zO_R4xc6;0n7ztiLIkEiR!hN*ArYUA#ky@WlUd6v2L*Ccj*y6S5l@l7!Ons6Rg1Q!B!LpGIUOZmt;OCY~! z%79jUuTxHRb;jUI2POsfD%tG#&e)Y&bkS^j`nl%h!zH6VZB#w3I_a7nX;&XJ8ZMpw z^O5K^JqD~l2{6ej9QW_w2DMF{3e<@O|Nd)x_28)-T($q0WzQnF9S! z@q&0hrk~>6%EkvZ-1f=PzJj=KE%HVzy7MgJ&9{Jk#DP3q%o#ZDo%)wq+pj11S-t;)L{k-qx6#x#Vjk`_RBYhXG7p9k@ zN^+QvRkrU{)Z2JoKx1<$0|d7rNsjf+J7?eENODymFoxjQVA)j*Uw7B7LM|`7@2*T#19x z(`>a_%B`p}g7ex7HOLU33J9gM9~LV*TlP9+Tz|e1IzX2>Ky@symKzfHY+{tcKA396 z=N&`$Jx^sQZvOAM6-x) z)Hf5Hh%{QrD_{9w6)a&odVthHgg=UC+9Xn!o(*W}0PDkuZp~nI!)uz3sdYHQRMk%; z`GDL9bjNBHG)ruO20|r|>gAzWqz6V6`WsaF``4Cwe!N{r3Ry85g=%E@ZSEDig`NYz zKeX2|qMy+O4w@4 zV5$*3r_yv%tF@oKc~dWF0JndnQ=a6fsY*cQIo)W(smd-_&#<{`f+XlW5DvP;qcKK{ z8Ny(qW{LW%g#X3(ua&GKzHTiEZKSo^wwoM{PwrFNVvs@a@0YvKLXdmC_6&o7@P`k^ zrpRuZ(P2oc0WTn-+Mv_b`&#mJ77?)7Ap086)&OnA8)rZOP-zpJ>V+iSusV^fVeg&> z?JFN3o_TE-f((V;!f`S;UqO=)Sx;=~2K!nee@(?8Rghp&tXH$&@*ip?CYQ2mGKPsIjG~MLj z%y1AMlplfYe?+>bbShE&V>iU2HZd`kihC<1g*vmyvFg=ygS1Dp0El zoN*C9As^`MdrT%*#PwA{k{fjN^rcB?d#reUTg0EDa2@$o^YySqRj@hPF!}DzYw!`_ z1&sq;(uCVl9n8Arj)MdX;EtY#&ZC_l+HS*FAVI_Q!r5dKxqzhBe}S`QlF44q{!ttEW%&xL2Zyb(ahk|BN)nTrzWu*?(T*h!_aI8?~kh*f|m z%O$)mGk{j~{Yx5_ywTidWp8jO^q+Tnm|5_c>As8SZD`E$jL!D5{XCUQJgxXP+65xn zCe+bEqJhUh@xZgFVpG=+HiO6@$-h$C; z7^KKP#ZuNYj%}3Nc<8e{W;b8JQ-lbMbO*Gm+Sy!kUTs)^8TFxA%0tBH3s6TSBxT~V zHSc(RcGqoh(!~jTKTW5ar*&~zq+ZXB{U`)&bkU`Jxg1e=5*_C`IW{)*3pEf``7O_a z=c-^ibb+%8h-g0Kz(}VCprzNp9|D+|dNvLWr*@FSw_*SxO1mXN24m;$1C0<$sz}<P3giDl}`)pD)P^@u+VDVh$XPq+|UuM(Pz1Adw0*q zYpjh~8Es6xyiY?E=9oUp7yX?|PL>Gywn6et&EqdahJ$=OW4yG>I`iNkpA$Xo?5VU#A4=TKY0d?& ziuv^x8=ax=;3IF=al1v+{mn+rpLjFMK;X`JDUO>cXbP@IvT2;E)p&3uJyW{d`?Pz& zLN0n-I5lvZhqTXIaDg%l(>;uV;7>qo95#O6PGCQrWFdP;{x9V}YQJ5-*;Gp-d>h2s z!x1%s=5!NSx3a+&zhfAdYMvekh3AlT@rGTE`Ae(hZ|Q~83r^QW)5Xf4?n;bp zKDqM>!^U$FAoLdVK@ypFq*vtXjuoH<+->gLSD4Xp7Q`4NQYN!l4Jx5(KTq6-m;zd{(!KenYlhEsivNr)x;jBc?;fck3>48Jp)A-=Hq{U(po9S8k$qxPZ zV$zVw6Fw-(RLJ{3vL1{Ki8EBEQ=V-zl> z>^U1jgr@&5e*=6lg*<24k$-dmrqD1IE3;3GMA zwQE0+Hz~Q&)+@wneOBA9mLI!lWcY24vO`E3TmB9}vUy_#yBn5kqNZ^0^~$z6ZjLey zY-n)P$X|)i2HJqh{bREbh)sZS7Jndnha$d_QejSr(G8ow!lRem=vrdvhMPn8PFM*4 znAqHw5vamh1Z7L9PM>EW^4|gwA>7ChLQ`bx&#=)2T&IvzA z#J1D;v}0NouO-*)ARfR^(v=J!66czfbkpDLw|DGv+iiWWq*DVsod^EX$Z9SM=VmYk zTy79UT5Ft)o8|5G#?w-+$=M2+G%ba= z8WRnX5^#ln;H*NZVL%z#K6#Xdr1aO;KIkw_|L*x|a_pW3fSn9kx~!1Vxp^K~r0icF zYET^~RKAa=&p9NHEGwf<3*B>b!EqMGRG>r@f}%I^Q;SX;3U+~>JNfw}Lcpdx9%s)q zOL!QRxv9<4?7M+TIIFUG8G|@2JmB)T{#5V!h=BX2d>PNhmfTH8azX)iad$8ZRnnpz z_Y6&#m_}2^swz6TH|cDfjq_T=9r@{*D8I;qt(YYiY*V$#YH*I2+=%v-blgDvN=y>h z3`r(jcNiap>`~@Qul=;cran0hjx&ElGanwc=Tl%SgZnwv6rN$)0_R5H_U_Hmtek~? z0AfVvoVjDS^|ef;NUON#-Cp(5bH<+9@A`~%e^$}#yoU&D8#qS7^LXLTmqcmHW?~-W zC1qX{WPNES-Z5E|)L0ID-}r|TKet%WUaqlC!=T=T_h`eQk(z}dq0pOXJci7-hz+o1 zO&>iT!5li1Rj3N*;5h2&uEc$qKJhoLdz8FqhSLx(?lvmU2aa>B{CCC8a5TvcM}j97 zw&C6qJ$Wu?UZOVIhVkI8Y^v7xdfv~m zTrPcu!-wK`2lM-7E?mJir231V+jH1piv65*%#Le`gT`~LeqUY!dCOFJvxp5KaeRONt8YM zmz6-IR!YDBrPoYiwAzYvWC`W4Cp26pQG2Pq$%4{cKmlY$Tr48j_$fB+3f1TqEWokJ zTVvUE?V`RfRU~f5kY^%h(D7xX@-sXx%=~RWMnfuLH%Qw$MZ=6MXVqneV9e)-{65~x z)_y0iP9te(^YR%BfD2p~L$8|RrfrLfd>$WO$45 zq2w~Q$z-bY2%^ZS2aN7NIp}YhNe$sLIv?pjnt%_;V=sUlZ3$sL4Ru#y6rL#R{)w1= z76$DJIho+%z{%CdicnVAp!`OIjvG%$V1kiRCrX-nhb&L6{^rVZ0KIWR8L9@%jo&z^ z>b_%4O9xu*$j-quS=QFQ1H7u9wCtu8go@t6k>0A{HW6vx@37C6G^-=-MXwP(Mt2K{ z-!h@}23>(%!6S(_q+t#9v(CfXv5)8-DN?U_A)y^~c?Ieq_x{q1A=j`)h#ii}nFwsx z+AVbibrqPGil(7Y*9+E}`&jm=qepP$5rtpYhFu?sZCXo0yrj5&`o0=7EbD0y#mN)s zIlq-dtBTYLmT~pQBTjJ7`;2~Drm83+eH+JvJYFQdvO%E#R2b4Uh`DL({yUbVC(?<_ zr+wb4dX$;5sc7!o>7E^E!;WbK@CXWrB=2~XKSltwgqNFoP?H)0RVx(F20V?25zVwf zKkSie=WyS`Q*}z>LWL!&QdKfD9ToWZA}Fc#EqI1eKDij-c9}fVuqkAd0n+S z6)NpS>Bhfm!8LI692WpISiH8j0?~uBQgPx)xJCv?T50|_ZElg+3A?3U0T&HqohGz} zA{`2$R)LLjZPG?jZ14W3G*nE;SFD{ep3_;r<$?ljNE~v3@&D~kf>^u|uNyEi09OF2 zrZ$0S-rXFG_o`J=ImTIWlY%C%Tf&QU(mOiCE#JEkEB#BuvX3Y(9GSgmp5MMfhO z?Ft+uG6+3JEtGmbeG2iu$<;va-VuD5?S#7j=en}pjn%3-ap{wzA8kLDCx<-~|7nGR z$~s7L4`7=6rHPA%D{sKVC%jAxoULOM2NNPdD6B{xi#4@(l)CJc5-}JT+ z7_^%Cx|lFh+L%FD!Ng`8{c99_!B49QsW!hnObRbJc+Xf%W_;CxpRgA3b_>kT5(CHViV?}?sRX|>(FrsewETii)J3a>vx*v{ zgL`2ja-jQC8|YZwP+zeBTFxO;wT&Hfs6^w`xR)?K)i(ZZ5siIN=XH2kFS2dwMBzho zzU`~GGD;#=9y^U^yTT*BdZ^1y~DlcV6StxiYvED$m}fOda{iihueGD764#a zZ^YLVOQb?MeW$}Gmyx)LVEx*?yT;Es4bp2y0dyL25X6|hdUTATj`qD}=aEc!nt=$) z<&}IPd05FQw@A-@%)8!Sd>jc$QQ+_dbSQ7^M9n6`T08g-CF;+nGOmcl>joWq1jTBB z_cYYBQ02$cdvaXz9IIil75N;otxGN-Ii2?GtxX&L9Zd1292@2z)oZ=Xd9;u)>_vb9 z*PrmlrB$L?aU19K1QH>K#0S8XJMcb^A3$}zfyEHEzlISYZPfGOSp(}}wC^@jQfWfhJ z0i~UX+>;h&t8i<9bOq6f%`=@N>gy%=3T&!~+pe6JZ_e48e%w=9vEWht z`Ik73cwLV8u^jd8kksL*d+ZuK%UI0dky$1&t;3&;ZZMy$pg>S=0PSBcZ%6w>P@T#n zdg{LD2ArW|yV?!`SccM?MrUb1DU#dRj*5*r*pw(DamTv`qN6VH#&L#InBLdc z_$}neyz;R|<2)|UP@ReV9bnpzSsVM_6Un~_c^~GVki>y0d%T-ZFfJK5vjo97hwZ~* zT|an7p1$p12D2@`=>`mree1wKVLsY!2`)01KKj^4;x^Ohk-h#&T4mqF%oC3g0PCZIeUn1M3!2-dWUQhhGTSeo} z(V9zJm^N#Z_qSU%g@LISq_IfQ;U#S6zJWYb-GLJzc1n6-4WrUbl(;!2DM83O!a2D+*yU?vwccQRE{b@i3}pi{5Ou&iuQc9b#!z9Gns^*<#>5pSR| zl`ybP<-!H^y}MZ=-RLH*Cyy0V9)3Cde_PBA<-vbj_5-f@@RgjsPI#$t2V^9&-q~Kn zVO0b7N+dDfSLl8^FEfXT4W28WZs7?@V4zm?5ZO{lFIlN~)P7KS)@37mk;{eAn2Ai2 z98vg>r4DoPqlO`{odU8ZmKac4x6T6DrZB5Ji8i~KnaSw%! zJ?wRxxSn*P z%1mCd0ii$pOW~dJF!Y<9i7{oyTo0jr;f(701pryLOjINX04~l8>x8bJ%MLAazew-Var|F zG-<`~d^}%~6&d6E;CaBOts1bsmI&lu(vk#`XGV>7fp-#slC8*vshucahqQU-GVDwI`iNz10$6+Copz0 zT2RCxr{RB}K$iD{K5lzTv(PobdqLx;z$b%iI15D4Vgsx#Cby46`OV-=5kV}mpp~uh z&ZR42L)B-fH=Dr8hU5X#&DJKDlK(=#dPg9Kk}4^)+ytP#4)E z>zuiejbOj8iBqRon8?OYJP~%Pwc?ksj^2O-6S-r|A`pIT2Fz>)w%R)Y`R%eqvCA{k z7592^WEaGiN)ynO_4ndd$sVNda~LcH6M}d4wCChXH`R!j|H$QAJ%WH^UXd%}kM6Qn z$7||QCK2aMVpnF$TF%-5@p=_!qNWk@y#2%phMdGe^WEBIN?_?ypX8U-Dt?oY=jfa9 z7j7~LC2oY=z`F~2060I^79O!bU<1$9@j`Uq0QlCcdmJ(e6IKhz|dZj0dzfFda!M? zZR1}moL;_0Q0aDh)w$L3Ai9p{GOScmqq%X9$`S8arkMXeH(oGjwmyOYq2>S5G8g3$ zdq-Ce{5T~j>(<}J?m0WmutQu|%r?t-C-G{oCBz0Tg|Kj&8zNkcFZpepZGz68PmOHD zS(CJTx|;Q!Fl5@**p6HT2eXk@-lky)Seq|uFSXXESjm`_LGBK!OdfZun%&L5A-s6~ zU6zCO1huo{{I3F$f*e*MdW0|q+P_lqEbG#YxtC$-#N^;_a-sNa2Q?i%9_~j4nwZhp5rKjECi&~Cpii?(M@6Fb;$PcVr+hrSZVLF=U7)X2VELz> z5wH9q&)+6lyJQ99@($v-0?T1g%1!Tb2GeDVgQv}ger5eM)d-8omDNU-Lt9KXxLiUd zhqXE5tLZ&i5T=g41KgZ}NJBu3&h5`d5+<9WG*ZvB7{hp(Oyd0(&kIpq|H7hm%XccY z50)n@T#1}3r0uYE=?v2*%wigoQ>gt?;J{Fpo5myaGseFa-zTC-eXbiwh{q~D2Ynd% zcz8&CfPa=5=__oHZEiEzVOVxUic-!@m$-;g&{zL=5mE_Z8EX4Cfb%cZYS*K5x(fUk z?58CINOpY4n}AGvb|J{^4|OcE;4qq`IvqkTEPlg4s88s8 zKqmPdZR7EK_euNW@{nzgxekh0RaTK?Kaqq9bS~@d^1}V z+*QDLTnEzMoY;XS`VT6v%l&Wa73hp-h-CYCh(e?LRYr)1T#TYO|92uBHV>ySJP+ODv{)0{0Ph^OS=Roe*D~ z$9r@N#*ABbirC6%p72;}rp17)eiHUk)Klm6#tvJdbW6mzvWZgUpO{B;{MJ~6gkN;4 za2)n;DmLsvt*Eo7m<$I|+hcpc52ADQHB9t#AuR36oy?k@6jqA#;KrJPc=4F+wG*VT z-VZkYumGd3c$;9!D3K4+Yf%%N1}N$dMFOHB3TpiJ4H1ppC8TYb z8$;c`sx%m@uEfp!w>g9)vEGE3St>kf@s@`T8Ao}vN0OTqa9I(h*|}BjW)*u4*PVW3 zUd_w*c&(H&z|@-;tXTuDBEo#Hx)D1P=y;-;pcq0S^f1(Ji26k;<<&U?w}o;fu% z+p&Jp8tClrct1xCJw5i|FV{i*Vymx!xFF_(gB6p>YYCEUZ;6jr6QV(@{M^U-;$9mE z;6|0+&kAJ+F0iplw}HStpzQgeL7v*HR9Y7&r#k@;-NYIi3qYmQ!kxMD;+d>qN4r{yqN_rm{!-;5g?*JEK{PA$Z z|GV|doX2Ul)G<2^H1?;fD!k|l;U%ZEim#qb;!FiW~on&JC{pQ2hW zbse`T)Sesl8A$6+Hs>>JbXVtWP&d?N6f z^{!kqg?pB~?(b+rl3Nw#x|hWDG;Pgrv(9YO)z}^RdyS`g#p)_zdbV(V0cBlhKgAbM z;b+5Wn8s!r9;mf&~ zNEKe=+K$+uY_@kioG|1@H-Gj8SXK4^0c4}PH~fWDnn~Hp;)dT_mAveuvT$NM(@K~1 zWUjCAEqnfVS=a<~Kd?&wvpp&bbOMKphldL?7Y14ZKPGJf87iaBFjT@AP!-!ftLyiU zx2a>3_J%qHIG@^RnMH#rh zMwBB>)ZBpp-NL>t$STASe?7_|MX&vZust90+DS!#K5e@~T&)?3otE_x75&>iu~Kkg zkSk~#4T%vfMKr8~I31_71vq$H1vsQWvL#1%5+p5D~T3My2S*w%{mc4%HnYxbn|boh~V07br(vRf0I<)+9IhI7kzr&D|p4 zdB*Z+S1N54i0(iwejXgsdm?{B^iR+ep_D$~wGH>tm+(Qw<2E9tI*mct-W+-+&|@WC~i^#*5QsiQX>JJPG^H zRkWGq`zdS+IlrlGDHy#A^8J;q%}_354fO|$=Id6>=$F(zIaYxw!7j4C*UR70NRFEzq}%R41;wRA+V$m*o{ zjIF^Eb-BTpw&0nbPCFU!UFZQ8C!Lf1>O{@6WwKA=8Xo1%eI7EFu-N0Kj5>~(Nnld2 zY~+onDhD~(nhBA(ma3B+`4=V=F3NvvamWuNhccC3ZxE*SFi}GUo5xN5&#!oIw;Q)J9Hxa0U*Kj~7Z$ zgKW!ukq^^FI++jduX&hBu*B4308nrqDipQ_*4d@QL7RNXqKhvt`~bWts%LyJ>t+dZ zX?R)|wf7UCyDy4Yb^ALYmMdB#PaG4zMz3!t?eo7QBNu+rb3~g)VxKd3h#o>R7NjM5 zSf~$^Y+IuwL4m;Axa(QM;UyJ2adqxbKPTY@_#bKkKzH^aUkN?@6MbggKa)H|9q$yCt>smB~|P&2HL4pwZE zQ@e9SIX))7{3v8JbT}NX*25=%beOVB)gW{55M*{Z|OAb}+K+%3g2l{hLciCUPT zU${FPvb6hYV*HKZbyNB3tm1xbuuuCRO`I@pLWO5XvCi1Y7n@~NRSLK6o@ARe#%rv# zpnq#Gb8a2S;-A@~yE=_x=jJe(x0k2q=KdH>MwZ46Hl17&-oGbE>$>CB1~T$T+x06_ z0VW+FG;J@M_>VtRcDNTncY!&gx@xlb*{#TRwlj8W#S_ag6PdW65`gS6g>`rwjS zMF{oO1asfmS(dAg4k7;=&l|U3y+7BBL!znPv=Ln&&6P!+g*8Z;G7X$oZo7Rg4G&6A zijv=6jswP2(OQoomO{yrEkE*NG$E0AK)GPOajR?~-fS0R3f*hGR88&-vdL60z$%}r z*wQ?(?QS3!=J*3NWC)WMj`qj7J>8PUX%vH06PS-A-ywxrqKGx@BYs#cnV{E!^6kq9 z6qYzu3X=vQzFWTQ4KfLTfsrJ&rT?d3Q3eUww8-YE()Rz7IZv#;!Rb0!p{II4;(X(n zZLi?8IIAexLPO=sm>dcRP`BvvSR>%ChR*LO5|ZjxxVSO=XB-L=87c)?t*+ywo(8nD zJfMH#)-p1PeccaRj+5J6{L3uO(!m4|SURr~T=dcu=7V^(ASPKRUwpo3e$rp#;b#@8 zMV=F{s@Oy=9mgzJ2W{ickdR7(lcL$N*CO}djkE+zuz&kQZ{h2w(u!h0U?L#3zdy~y zwggeJ>@;kM!2`)ob-*yN$|EfZYcuTSZXh0_Vm(JQrb&!|bmH;Dvi9k0m8*y92DV~I z3xi=_fsW@!Xw7FT2m(x>6F~lD!!DJ}zq?YaHkfNd7Qu8G@QqcTLs6e6D{-v4qzxk^ zS{PO18HrI)kGF)~{LW2UOns!X580=l01mUinygiG((ZIw!!P}>kLue@f-Seo;uA%5 z8gkAo3nVxahCvHZq`K8;nHdEoj1DX9R~PHm#`--dKD=)AH=;-`9z(L36!uahUdt+L zlWgFpqF7ZMJ+aFp`4iIqoBLZrpLv+6L=kYw-RK(bl~qi(JBte;yUso?@2L)_`EfQ& zY|9rP9dB|^M(;;N9Jzp+dv4Q1|O-`;ZxogYl?47b16$@i`v-a!_AP{1B}P~^?WTz<{u z$!bxWJQvt|@gnCi?=-813*^fgDW7)?B#YItdO?~uxs8?j@fSL`zMi$e)s`Jh( z-8w~`K?kM@5tPY*%4@q~9;f>AF~kQGj1@F`#4DM+zDil2Ie6=lrv7cD%R)aj`>IIr z1bhdtWzFpxNrdQTqbVA{@*y1MKso~MdIhCCQJVQK2dlg#e*UA+E8{@n(rAUBo%Yk~ zltqxS`mYBwml_!KFypp%jn?GBe_F@;+NOtzl6~*BvYk{~0e=~&)PN+mlLW*IS=C`N z19)#PwN*N>t)4Iyf$Kme#^sV)-lyJLJ!;JGG1g>Z-RP5ionD>%KW!lOzL)aUi-3JI z;MF6#^-R(dX-`Uus?7;I7TDyDE(p`_=?xBG^O6B!(s!olLf+DckUSlB=@ zUe|1ak+T`pS|A#5-vO#Zw~gu6Q+~bR^A~ z^)VBE7uR^RyVufg_XrIglszpJe#qECfOOsXLiYQW5(+uMq;%B`UE^>Zn+GqIjW9q7pH?iW1;FDRx==T z-!nyq(5Xedkib11EL7lU!C9*BmdS!m{O1nnHTUCr+ckWXlNWpa+r{`LoE648`JZAZq8oc>6)Td z`>YR-tOEw6GosykTj^V-}wI*K$>W8Ojbg0r`ezO-Q)p&TQHCzCre|uTs;m`3>|C-X?#=WbaK_|XR_;mI zV}1N)$^Lgoh`A1-Q3N#~Qri16pVjSGM%LE$pxzSl<2jrDDj>L;DjDQU}zbWOrx&TgxjSur*m)_yVd!?*UxKK{?fSmg6s1(Uw1`V zi~s%146=+6!E}RPwpkXMcnmWlq_nt;An0%E!{c@Scy1`{PaEHS3%G4+EnLzKSM zvC|mBz%qh!dnDnDu6kiR>?$b4KNUbD__+5kJqE^1`2;gq4)JJ4V`uJkuJ18?xv4;H zY}>k4VrEZcEN~R#vV>9bRJq@u-1MQXg6SmDDOML(+kQ(xSytl7dN ze>^&i@{8HJ+?ycdyE(0 zWyg1_6z|59z%f&R47PSD{*O`k7S4J*S%o5mmn*)^WFM=xAtbBW!1Cx^2H(MSaeZO> zcx7L!weGK|R68aq6aNpr#Sj9zm!N}~uw(3Hv?1EXfsh)X`?+3O-qFweZ{G&3? zCbEj$bE$siL05DxkBA^}$^cyPoc%@5dLb80|M`ySY3vM9%{_NFXt{q7H_`kx~PY4H=MKbCdpg@2& zK;G1VX=F^pzgpH#tGJ%W9#j(_xg6jUP-*?!ngWmPX>~k)7A&YpSee8$Qre&9i=5VnzY8{@~6!6^JfyS#6z;5&qDgWIMjiWv^;M4#0CcUzlwK3KYipyI*z_xjaourArPjQp6XMGw#zwg5PC;4Z8-DN0VGo) zw7IclPgagU)7pWEgPY1ek&_@!D?+gnfxKywFFjMovghl*7ob1Jm+{I#tjr;CKfRUvD zlpq4E7}Im*lZJ8+Kmh3NCz&%#fqm!@nd(Gx@dQ>mv*JxK?dI4ag>Lk0H&SaeA<``=S-aQai z#wEh)_mXw4ayI;-gJRHktp=8voz>(}#xGRD=Rhh+e6_1ppWCPtkCd##Wkj%omP~CG zy=Y|mV$kD$jWJ)WDHo-c{I;I)%YpseA&nrcOkq1&+Q{f{mwXPOFNz)^xN_@HZq?I9mkN|CeQ| z>_^H@>I%F3>&JzIu8LNJBRj`rZk7&WhkemUH0w#LU7(F2co5z;a%%yqi#=dksT|IQL4M>ip}K%&i)5~3TMZ84J@xC#!N}9J{5y>avjko9PLU0j)8{=EWbakz zP`D;)V)8z!?LH^}J?^CV z7*4MTHG)_u^Ku5Y$$plGF`ZS}8SR~%b7IgpPfC;S0TepFyt4D<&e0{DY;v;=hr{ zDuin%XbnW^^v*LB`+@J?^l4v`yH6wb_H6N3;pf@IKdyE&3v}ti_K8lR)?!Ir$a`lM z4bfPA2canmxkt2iFjq!TQgc`>d^FS9#jIZvR=_rXP z*CcK|r+V&e6)We$2T)8Mia_nfSI=Jrb_KRMo^hYQi-y7hJT!eRJ`jFOCCV(KzA^Es zIP2!LV&{ubVm`AIG>!$)Bzqoyylt`EtggVmY*9cRko#OKyJ1>bJ zNA5kI6I{uO;8)j8Suuvpjgj6wD#+kV&;2HpS$i%m8_P0D0>y#{u2*)QI$`Sf$^G$c zU+cnx=AVbS=<2qAyc}8J{yin;kPK;)4(~jOG+~ttbk<7>GSm0{m;u zP+0Ri5rws(ir+8`Uz2^T z=9!)}N#|uwE@TNo@*n@A{}3iwfgE+zM;%RLlRB@3NqcECd`E{y$`}Ll??IGhwG64t zB=9y!IJ;PAVF5OGAHIe02Y%dqSXpcWj~%aZ;2RlS<)zG}pBBHYPSE!}x@0)p1$~Ww zHeQiko>Zo7hl;eKKn_?|#)%pk+^Y{Za*0)nU5eGg<4a6<3V~c$`T}o~%jC}_@mEZsPMabTJ zUCPRqJ+k))OKBSL4d z$X>ECU-6w2%isuSp@Ya)-f^G1!@?J+~bRWzSA@sdl|qam}vnzCWI z>O$1D0>8Lcrx~HeEQb-u(2dzb*o!;;N-LeG+Nr8~} zGH4^eu4~cb+AmF(`q?>a^Ibd5m6wGj1bm(rI`xdIa2wjGymp-)r(L1Aza^g8m_{%A z&3k4ISKl#|;bGy@8C*5XRFP0PMfyGKw?&`%>BZxA<+2L==vE0p{K?D90JB`mdh3&3Q>VlS7$X#iiujxYq0YvR{VB0wH`=t}g#uq}&bWc}( z^X+QVV%)q}SH^8Qcy}R(d>{}B`qj?86tb}u)|m~p=+dE^J>h1 zFm7p5liXt2*|W5)I!FcJ&EZi>?}DQoQt?-T_kJymRep7eY0VpbcztPO;(d&kX_DI~ z({6Z4FvvZqP(j_Cie@xy=lqH)LTIUEX)1g>I%lvu;*3GT822c6V@mdBnyH}j1gV-8 zP0VK!x_xsA`T_Nl3cH&$;FYr9WCY!_I#f6p*=@_nBcl_)K6N%_Z4_M@2V3rns^R;h1ox zl=kFIj>3^&VdYw8Xp6j?NEW5_kBw#~zWr$~5B> zwcox9vS>Fue=mmkI@n9jbKY!XeDOuvr4YYd3_ixyj8;yb4&Rk_EU17R?JYN4FHmj# zHo3As?|cFteEG-g2jh!GoiwFg`-!wLtu!S2H!;%J+&UKWT%2c$pQ1k2EL=RfUQBky zN0lgnleTq_KnL8iP1yiDjcBrsT z%@@D#d3W&J^*wS3Pyw&>zbF?!W%r>wcX}U^GCUuFn`sg_X?v^A`vX5WLAC(3ap05N zTH*y)H*{l+Jl_R$DGi?#$ra6ZvG-=CfXn)X<#T+~Vxcsmo)}`X3sH=&axG6TLC{4q z?j}b~_qA$gnC=98UNS3qe$tbGobpLMspT?N8ryYq(zyspp|8;~h^BF^>}OMG)(O1j zTnPX6r7H{DGKye-_jMO1xq_2J8fz@tyK6jB!A=UAGyN5a(;{tjrV5(&A<`kj2BS=O zB@9?!w2pASxTr|4ZkYlv>3>vf9?LZF=3=-#%Wj$5Oneg|!Ox}`J+z~QWfr&Q>y2-c z%L>V(n-tc=A67^>X!$!nS5&_FcH?Z7Lh|w=zov_GD37_6?xYdJGUblWB4-f#OT9>Y zVDVQX`$q-iqm7Su3LcD9op$PAyZ?>vn)`D4gKiQ{DxcojBvu24fTu!DLyQiO^c4IC zV?G9VZPZF@>4|47>*03G7m1&meXzSaA)cpZ4t0In>A~%I3z9B?S7T=Jxoc7Pjq2&A z6;eA^?FrX6HlSSNL4s?+scG7_J3};9Z(ckGg=anv-@l4h{DO`SxWLNm-4-)_k72m6 zJo@J~9JA9758e6XN^S&{Xv`I!GPS$Fq92IgsP!Sy(IDSQ{IL{H1Yb#`z7{Rja=Q4t zMt4;?TnU@j=RtBdii6ZAZaR){J;`vM`0;_8XYBd|KEqy{lBB@?d@U(f?&YRL0zdH^ z@az()8iE`6kX2Xt;pP(}f*$eOitTUQHf&VlEXRtKq*4R9Zwc6c%jD?q_IGI8fAwI1 zoq+gZ?ibdVjEoaH(X+}=nCLRVVOX=f&?f;KEYd6Yh9h zDep!Y?;u3&l21SCxgNf5_HS^R0u5c4_UI=)L%u z^}FAssp*6&!q-5gsH-6G=#x8$7H-ST{LAy?QDF!Ut=pOi_lyVcW{O;2eLIzLzPa3M zm~X}eVYGL<=}xpRf1YDa%%`uPiT4Zy&WDp-DN8SkNoFk6_IgUH){;y&@0?4?LRO() z(-fXs|8Zvgt{LN=0&jj&O`lN{=))GW;87@}YoS@*mGv824l8K<{JK{oj~Q-evy{}- zy}0;5m#Ej7OA;1U$3HaEMsMDGRVjZS=k443kKGNk3H>?SuUbDRVk}}BHtP%~=dU1G zu3Pw8&`+h!@CAO=m$G%r!R!(JS;VtKLwAZ^wjN!<=VRBD*_m&O&Za&nO}uKEzgSS? z^N1SBzidLL;5e)ExXS7zfqQxRj&h4@Q>60e_@es`qK0L75vd;{W~*B6?o?<<&6nFM zRS}A-c7|!qSu_s3p+(WR_>FYSW#IN9{2)0D?$Lct-mew|GaEBrRr+`{&}ZEu|7nSe zPI~<1#Ja=;G z*F>++L| z9~GLA=Utz44Z|VGT_=xb?Wyl>-q?}ptnFK37jCB2jjkPy#Ggys z5=rs>v}JC;c7t_YW>rI8(s^&%@Jj{Wl6yxpUE-8jd`NC{Tt|D)M9t~5AS8E#JpJca zE@Swkt2XbhKRmlx9vEa)B1he4Z=d(|$0>$4A1{M083b{Z<}a7y*ko-E6epz8X7&i) z*A+K;%$mhvHl>B)!3RUHyLCNP-4nM6Yt6;s@Yyp7qX(5K<|56!?z-o$89G;?BF5i5 z(17#oD#WuVu%@o^2jt8oMqD$jOR1h+8FTk4S?UOI%(0tL*B0z7)vt64eyiS8A(4IF zLAb(dM?!`Vl;dlk8hP1uiyCcDo?_2_fi+=1pgb~@qv7Xinec_+Yc0hh=ZPBXt>kHo zWmRPf)R~ad%DVNERCI5lw|T0s%16`IKoSQ_*Ybo7SI2-?Ll2TgikPa~s{ z5FSZ^bg3*nvwxX2!Go_~iaLvIn(s+y`|GnJczI9JUY0ERj$369BB@LEzc9Z#_cPA3 zoHXO%L@51~+a<;g+3PB@UZ|`}$EQ*~oUIqy)&%;)Vw4EXaiZKhWp0MLt9ZXNy>YRS z)d-*8GtQ85TDD8XDAB5-g*h`TUT@*G?TqXb5f|XlCSkPQ1bcn^^ow^PTIQ{&(DN4NBT` zIhtr>tX3PQ@dQO!MJl_;!ZW39VkXHgidCgh0P zfA$lqIY8C_>S+nyF6pU*>Ch^k`hfcYS`PKR1rz`ufVOj zAwQo{piX{%M~QaALfrAoQIR9o^V&qjZ{gduAKqhvD-SNOJ=vOC24Vr-^zb4@bNj>^Y6T2-qDCUrKm2j$Wvw<904Xm=f73`4E)WsTE#z2?jd~1L&0(K_g|+ zW>h|<1pUSgkAgytt{N3m3RaIf5_7e!4i@GRQ75^pD6?){?Ejuamqya6oGg}UsmixK z9GZ8LLWi;EZpqs)4s>3Qyi@Dtv1&yGC4{yfYSW3|6h&Anb-QfvvZutq^hu;Iix(VOTbU9q$i-U{OicOd4&>v1YLrN&vF3v_! zKBK*zK_7bBH}}r+MzeD=i%b?vYhrzPK$XS1Hpv4kQnyF)rHHc0$#5xYA@pO)dAhi# zxKr*jn;zc^W2;xC@sN0e)mq<*XG09@s=eQEj`@qI3d+Jd$J3%DR_#rpyRUv&w>fE^ z45hLa6PW3;XpOZNwpOk}m))zwofbpf4ookj2>6)L$spjsG8}5fwbJ9Qu-2JR@Y$8) z%ulk(D@H~)&Oows;j)a3b_85BiR-nTnyoJN|S9?}wcGg;hC z6MH+jAFlcmBdmlTM$jLgL;+rOB>au(WQjOx~wX47PWKZ^z`ZbE6k?;R1aUvPkg!f zI;k{~|EI9z6x$d$ZY}TQeI;#UiR-mGK7w#XaUpx_+$W7`x>}~T2{Va0I6q*2FFab z-Ym!%sU8lpU+;A8Z2KW{N_|h3j)3LV&ivWrm}IL@C)mO}7j-0dNEyF93`fC_@b1P>f#hDBA$% z-~=dX=R$9li!Z0dpZ51?T)r`9Atv!!%s$J-OkrxyEB_W^@5~joTdoUnoetBW#O=0Q z;7B8~pK+%l%kSftE67V+Pxxh%`Q0e>CR#%ZQNRtl*$LG$F5SxCBa!Fp8vNm~iSK}@ zvUMQ8`C7k#@KWHyfbp0bG5%UY6+-y++mG)e=sc%>D(a41vAXH1L`3ubn^#cs5*u4+ zo0ezD8=UYD*PK6|x#R23=GJ2BzxCy=z|+?C>?ud-6e&Sm8M4=F*; z{`+nDisjb((*U^MnrZA_lXARZ6%;7qXnm&pHik9 zO3emI-kIj`0p1?nTEyo1^6pRm80|{BCN2(Uvm`Z+MQF$)_h{mzIQSf)PWdaP%+QtU ztZ!|fSZ?O)zHF^$COW-#mHwoNuui!`V!t7Zs+YTRC&-4MReEJA?Y?^5TS3rzo95PKtk%M zjEyF;7HO2*Y`r)(M?4GWPTstitD8qSbAwR4p*#uAi@3ubVU6cKxRNe zjZ5jNkN*SwyLrR*p_4x{7$M7|SAvYF)-U2;kVoXEGW0b&^B4=2)_e)9WLQ3@y`yM@ z+cwb58xI%!oy%0&e^8&6uyol;^%ImcVH-HJK?9NpY0CCY2Vr z+Y}YTF?>flS9J5cc78otV#F|E+KU7E!%tUU)ghVjmioGxVkgO`+!dd&ZxAIcNH;TD(C%N}%+c z5Btj%C}l78+XSsfx>m~o#0QBt;cuT6cYE53V53N3_%Bb7XOSPn<}m zKaST}l@A5q%aUu)2EHSvC*LsSD@1+qR;}Vk?uj0vlh)1AN+Rx8U)M*fG!@*Zr$yxS zhp|SjtND>e#9xZWlZoaKQ*i`Cel!cmE`&&qSOEudI;qN+FM{s$Rz4Mkd|rvZuz#mj z>W=?pVe;A z5;gM_OZLyGK_OY-wJ z>X+x9F+XUM`WP9i{avCmUM~^XW8;NgSKVX3xs8P6kSM;MBG{xHO(pgn?$LNtt zr5%U;S1y4oHJZ)yeh3c#89~2$o|gs8@On%JdtQ^YRJ?)P`I5FjGE##q-{hBaoYbWK zpus7m;LiT=n?;9HXIfC^QjRx0EXHL^)iA}EFmWP`@3M7NSIa=ca8Bg;4EeKfEBDqS z73k8EeeIsQl$mI~OX4hhep+(Ad42Mhl+3Jap{-`xO%^FC24%kDq*> zHf**=McNLl|P0C zm$XrMcZ^!uyM%&+@d!fBN(%Xmey$`nMGg}v@jv%!BU_ydpcGgXV^X-&qwl=mWx=P| zZd;j~)XvCR*IgfuqE%lZUeD)eU&vtmAuM`Je}iDDhkW{BKdm3-%WbB(Y6+#hnry1U z^%k$urOvL$KU`y(@Mt`84YpV=!evC&6}Rg*6fSC^1Zu3cOXS*z%BM|DZwtCzn`xNjFjh~L z2T%722A+6uujE8kdikq+c=ztI-w{+X@ly7aiXM!bsTKb$h4Vs(Y0_!F*NsIkRe;*7 z;d~T>{`c@*6Y1%)rC0@-ehcd15`%Ap?)Mdk>Yc-yl=7_dLw|6pUpnP!E3XA@eIGZq zWtpq1aOUfXgz#W{<|C_@#$Up_!BQ%mR_zo_txDQl89HjLX%VG<&GN$ zQjb$_(7YEmrj9303iX-DQ8K;~(a`*u7PNR@kKna>%?+i3@q(T{w)1#-WrfKuL)Vyg zRiFyP{)Soo!us0$-L9(9MnRJ|W~q|CY{qrC2Bp(RXjl+X5(x?{uAXCcy~4-9`2I45 zmhcX@6!8r)O>>)I>*YNQ(AGJ3QQ#YLS3U2_$V$I6`}lV5{e{i0uGV{}_v~e5tGqY$ z0{NT3r5_X-rR8I-cB)2LbQRf{G}BY$i!44x2E6O!;EVF2G@}uWD_blT$ow{mf_9^B zkZIR{d8_14Z(cJbr1XVUEKF#onEfG$ceZrBVMcKwe1sh_XXkk0zHqhGc!BQu_9+#` z54dnCh4*nM7A3cH-ZIBi#VA=Z_lIf7ukh7sItaSTDqat0^(CsMV`8JIVuk}9UQTeI3qBW1ZmXLYSvT==PT~|^Qi*)A@?E*D z_Y%pIP_rFAsB=;iUvAAN?CsS)RvpR7fHvNh%|L11EBO?sEsCDA*h3v?CL~jxc85%1 za{k$3{9Us5HiL6Wdbag=8Gn3y;T!BAUG-%BB@X*(9kSi5CugLuwT~D(buG)4y3bTP zh*!5Q?R}etnHSHr3>8;4#a8qWk|b`sqMEx%=j2$Mlmo^P$)a>DR#rcQ^rGDRXhYYp z+(?kQ6$>e_IX`XrN_EUfKn*@$T{d0u$8GTj zCthRdyfs6s^*IbF-9mS1T{^UoS@B{uU1-9Y@b$1ZFS#M-ll0Lqa!9mYGEDq$I`QKr zZMKkc2W9OD2|Mkoic&XlhCE(~^b&xdVSIlU_lIaS_4G{SfN*U*(e5n>pOZ)7{8D%c z=eZNh5}gjiI@XUORaLYY&&|qfoyp+5SWEFmVal?1=^~uGlForNZjWuxJzK;4XXhi@ z2)s%BxbN=+uG-)&IjuwE64@(ED{){{qm@$XL;g=m9e(;#=IoqLY?~$Lcv)0j%IXcg z?9FD+E8ens!#OuqLO=Kf-m}IJ=jsx=T7Wlt712_0%kGIAymC0((cQq^BxR#hIPM^5 z-W4P9Sd&H6Ks->{eVEi<^Dd4YdS-K|i2VKO)+gd`QeO8lwBnI7b6QIW?Ad{@0q-py z)MD5@7bMU0!l=s5q$iI(^~#nw5tpm-P(&9<64OeWD+592pU-+52EGlg!hJoO ztNndAst;w!V`lh6w7LZ#&dmiUeJC(lO)BVtj$;?Rp#+8C8U>}(GSsAAL zhjeNd-V=>UDO>a2jg!$gh-aIT=>H*legqLz!F56tr}F3K`%qtFl^aay{Y87iekxwp z($}re52e~PT{ODJE0<&>Zd6PlK>@#(*)Vp#K{onTk_~qK)`_&irFEx#Lr{xw&|EPxY)tuBX8fY|<_U8U-2Od$GjEoW|I~y!f za3_Lv>is2#Wpf2n-Y+!1%mNyS%N!qVa>-{>)U=GbRdk-`(py@@S2*uk&#^Xs6D>*6 zet=V_E%{^gBt_}m$)EBgFRLhxt>Am6!F-D8KZ$5qNuZz7-D+kkO9LE7^?a3UC)nm_ z`;$OTq+UpI3UR)#&Z3H)HXcJhbdDNrlH%^pJ4~S05le_+;hw8tz8~XTrKdYBPMz5q z6*2v|F&JN$ITUn3H-l;Zd11eQ!D`v<7_f{3sY8<7c6_61rp7ZIoK#lNj*nT-2&qVY zlGO=?V~DwpIn1hkXgk;Jzh%s=(~&1wx2G0qCTl~wqOKZ{v{rBj2kzLMpk9Y7mpohS z%_bXQ6x<#%+J+pj|Ek|^56zLQ3!I4mDH_gOi>`{Tv)*2Q2 zCVmS_B76P2)>93dYaOXuQ*vvibni}lhiKW~p08ux+JxOo*v)*zf%v|sNRu01vaLww z(QD~=!>-S7uY=zBX6^1Pry``1Z4lje02 zKiyAbEq7vcN^z}=ODHO9dAuQ$ef=ZHw}H|G^OGc;q4{*_H?%hoGfhU#ZBFZFk1+v)s;_BMmRR4B*%_#s1uiRaDLw%g2G& z#A*axPrOQF9R7yfxsf4glznx+wBc(2tFhIM8{bzHEaqyjPR!%ky($URaR95IR6SSnLq{CPed4zcX&0C_iDh@_47wlArv$TI?3*e4l@Q1uKcevdq*gs)*v>Fh~w z>jo*_&YQ76xrF%i>AoSSx6`ww8TQoM{vTKwUGq-Za>mV?4N7%C668jn`K(IoT@@Tj ztDQdGJ*JGdP`UAchkN*!C8@=)e&5dCGMmick5J{%_F>PPj`zCO1F z-}^09x3e+(d!5f1CM~_2oou|?x=~=qmeM?CP~^G^GZ1adIThg%NMFnvb8f@&swUim z1SfX1=keF93mKbd$m@Ny36o;Ea-Ro!aDZ>Pii2t!+)wa{8QBQBu9#?bD_vW@qIzbF zic5z`aI>m=|tY@&Rv(sIG30 zatTPkrqZufXBXUtOpIxrxTSaMEH7t;^*qWo>VfOKr_US0*IwvRiE@$8PRBj>Y=jhS zZZ_N>8Wi!qL3=9sUctOEi7`nI2PmccYu~j?KVpe&!mp^u3JV$Dw^!gu-E3HT`XWy< zER?6kP)+l(9&&X#cIHcOuh#DN5_|a!>pdl-XG!AY`IKdMN3OI>RlSvt{_tR4CoW(y zi+858|L4uUUiWg?J^A;uw>Z=C9~6@h%Thd|7This_q+D({X*iZ@&4%hLcZ^olqt)e zD_=>t2Y5OhQnNt%zc3-&>%Trl&YYzIv zvUU;eUm}#%)W3e&IH*j^+9ZIF{z+bm<&(I+mtaYWTy*%G7cVQdAtg?%{O%BecQqCH zZ2Yn;_bH3pPWrjrwhMj3fGQZmSFxR(=T>|RF;3KBSs}YkBUTdrMQS>kbMw70GrBy; zxX_j9j%%DhezFt}jWAVLOFkX&SwyM&sZ@bAP({d#&)v11ProEw`s6cA8s?H_#5x|! zCo$h_&!z>*?d-SRZi)M#>-N3j>SvYkbay?9yjzaeX+`VuuLJxwVR5&fDP0kKu66Sa z6VC}IyHu%O$A~ccT{gRHr_EyA+YjX-L(D_=?wU?_lj_~75cso8WMq*3^}E`VcJ1i_ zsWF?1ERUl|$M29|Y8&u#9t{%XXW|6N84Hursa-w=h);LM8CPIG_OmT>J|PjORd=8%F->giKd1P@9o zS7@3|=7rhUWzrZG^SmNHpf5w@2Ti)OuVl366YMtJ?J`+0yHsL3nKa4vJ~$^Oo}|q5 zl%`I0PYvvv;nQf|siKg`hm2p3_j#_og6pHJZTRUkS9kgi;=?;*UNT;oknYru%503o(575tnbzX7K&(XUx{KQ3i1Bz8$(9{Kba+1wcnZhS%W>K6k z>dN`LvgR*0E=JDPujs8yDzpo@^yA?-8bl#{AyQF^?qbnR6(>{M>T=$Lt~ByC#0Zi+ZQmM~Sf#qT z(?!Vjy!vI$8-G37nhWdk>|@&oZ`W75q!XxHt~@pgQF6JT<4J8*JI_YWm?awRr1+6; zDmOq`A)|EM+-ir7_WQgSFv9 z^bDD%hJG0>E7M>ON*|B(y<0b5NRY7xW5(&b00-0SgxatQxcix)lMNw$I4fJzjBQN% z`vV@V6jlMx?p?{;L+!01a4T-_HB5&j;vjEU?p`tPqsdmD>6NVt`7B}=#E$vvL42QC z=!da)(DYZUq0^Kf<4EYFLx^jNw>$ZUW|;A<%a}>sihSzVMf2%rxJ6yfCANn(GEA6W zrNvQ6d<@=fyy{_G-o91UciHo;S@tcWA@*gi6LeZ1qPtj3UfLJd#z;K3;^lq$MHe@n zi4x)ceB{b-5l(__qe%p@{nfH-FHG*XfPAvikG|`Y7UFOuz1z57M`@^g{r=4U?7+z@ z5uT;7={EuzCy~a*KjUpkK4;Hl2pO%5D;KBIF|#k}5{-8gt&e>7kwMsbP`UCB(nF|A z)1Hf}Ro%l=!5Q&_e)4LiTreX}$#3PHCwWGUGc;+=mvUpvqPCgmvayGsQg_8xMCE*F zPd6(!44-yRecEx1oAF+iWA0X*fk}#w#Hie(drjvvTog9RqqQX+O-zImYVLPWcgt0K zE0u@5a343a2@<7l%8_lT&73PU{HjtHm0&kS^}`w&(B!4MUiO}=*;30IHNTU%>Nwym znjLNR%>R5UjPwrpY6f|z3;!4Shi*g?RAa65q7Ta<8dKlC4_Pn`Z*G&l2g%#24Xp`Y z`t*{_;pEm@Z2Cnec-E`>eFcZ=O1Al;$k)4HVS7(b=973;uwT1ZmY$bQt?ZqyRhgPY zRH!Po9ea_!4N0M|=WzW++WG+RDckdAenZ-?w1&6IHxj}Kp(3rCkIgq3!mJ9bS?!#un{S)Hi5l_=sCFG0%|+7PFD-ESTyvpRfz z(7QF-zNq%$nfYrzdbBG`bI>pEK3Vv8i0!1{z==UBG&5EOjPd-gY^9&3<8;YLZHt7r2v2#=>$PL{SW$qJmo{V!1}6UsQ$m$e=W)HH}>~8 ze?h-8?|as4Xr7mx8@@ISy4hnW8ofNc)I^M9q_ zLplG&_m?Fc*~L+{N6k1g!y_>u6=6qXc~{U0T?0KulfeF3;F zfcqkF2Lg8@(5_UVGa11B5x7?lJEmr2sQEv{fiQGC7~J8%c+}inJ>jmNLS}yMa5*r< z-5rU5LOc;}t|D$ww7U=r?%@STdy)|!@#(`|9X*}oz}zr0Vlp5|;YNdjf7)hd#v)?E zq8QAd*Ey86R`+|**%PnK(unF@dIDH>#7ncU6x0g+U^{7wmtbHRmOk4*miVqZTswx} zwYcy3Hal7k(O&iJrz{jaB;$Rpyl`OE;>BmddRk6`3z;+Pwqiy>R`o)M~=t^yNPs`RZ4#&=Az-d+N%KkRFYy&*c7-y zB9Lk#sp1E@uTQzxz>^#m{Um?4neq0g>A5A~M-eIqn9a&XRWItVo>>o1kw-jgJcGO7 zIIo_EY`JxJbL+d*ps~{(dk;FrVdb_D6mg+G&fNG)q@v62HMxrq;5T`h$3rS|zG(O} zO|AJ#T)xl(^^ot>iny!r)|&s}PoLNqw@L3a(|~4*=uyf$+p6k3PAMT{8s{jz+Y4i4 z)u!dD%+EBtRN!+tG)<6vx7U6LrXrB)dOonlYf_K+Iusccrazcvaj(HBV`^{srvFC) z(@~pTT870#<>@>-8Q*le1moJ|*_VkO{i_s}ZaKXhxVnC=llkk*=jWXn zS6Bptzj-d~b6Q<7V^+`v%~PdFbx*a3n-!ePW1G*}VLEh^_a+iIEA&$XLS=I2W=*K+cLoA?_eI8es*vLXcoM3gw0p1VhkhI0`c@4(kRc0Gb%2pnw&5?i>hU1HpamU=U9T$QPL5 z*oPg$)xqr`=k5&mJIFy%$b$?pwLma51O)eXxBE>-d%B_EAT%0j2lezlNP&v688jS? z23qhdZwEc3U@`R<>KK6>F)V0LdyG2Z7zpT- z_aTIWLtroj3UhvDXOBdGAehr1LI9CyH;gs`fzBYn5g=UQATI<64#oBZipe;E z>|KG>&K(7}gSxr6gAO``%{n05(ICu29OMFb0R{?q+QIA{fgCpy2DbO}grmVoIK&wk zcZ4h8V!%)*FIQ(k(bn9e;xM^ik4s<>w@aFWV{-OaFe44* zgn@cM7Yx-kG(ldjfR_cD0cal$fuRxDlSp;I9>At>s22+1=_d%*afJ$l+?}E5|005o z_0&v32I_!|~=#1{W2(O6Xj zQ&LD>!xZFh563V7po%LDKnSU+s(}s|B>!ZPJjP%tDJlvA%moew%+(K!u_FW&7(71A z@+Qg;0_d_JHA4_E>@IGuh8S~G0{|~qPm~`P(gy)H1VI8?!Gfk{fSmwy+X!Wha`Q&G zLg84n5y%bY2ysRDV^^dD)P+BA5ab0{geR5)C;+1&tbU~ro97(gl(gQ*sa!PIM_CXOwHf{J6yU|!C(eY76f+zJif}o6b5D* z+7smk_4Go)Vc3y}9>g%15C(85Xf(tTu8tim5N139M`nfq3=nI6a1;gw!IT9-odDMe zcrmy!1daA_L&5%#d{i6U7l@BwaF`m#|2trUBe;sECkkQj1$ZlvA>c%TMFjpU16Bh} z-plnch(ZG(%3T=bipCVz@bx^#_gfwqAi!O*zTFj#u`g^-jzoho7%&#~OTmXK0}Mjw z$ci-7H2?+wCIAWs)OS?kNXeKI7_}ba&teDp$hNQ)V06VWLoIeR)(6nPj5gqZFs1I(M({Lt|_O@LSh!2J?u>;{C@et)n4q7JZ!Or~h0Dd0xoD6C2UYCR?xIlzOl z1fctXfni+BFP0<3fo4oG5j)^OkI|1=+Ak_#0G3Dd(HA=x5ilX36xz%F3gFcNC#C}f zY5^=Bj>5Wg@3Uaj0~#10f{#&w(B=YW&K^A=7>A9a0h1j=1Ew#P~sAJ{e;|?%zrPRCSyRXaY;dge-=}KXD{flPFOlL2)x zDL~H%ceo1-lf!iXU+_mlOw|7LW9!A%cVYLFU`2Ok00 zWgmzLJpqq|F$E1FOdJ4sj$as0U}Xn>;&5@tY*#SLJop#n0(eRoTnE?=86co2H?*6B zClG+c5Z(xw7vP%zsOW$faHPk0v2GOw1x)iFygRn5|6~{cAM6;{_us8O2$+wx z7~>rOYRqAa4_KYyeyR{hY{V*K>V$Ih0;UkqRtyfaU|>@e5|g0eP!t@CKtmkhhevBb zSz?yk%X#t^u9p-TuO9vtlpt+{vz|%lQO$_AZ0)ZaI zPMFE-;VA?KcHoC$$9Z5DV3&8Wnz892*~`@pn7;6TvRnXWJ=pMoh*6uA#IF?t$YNFu zQv)3XAoN!OWSNR!@?bTHJH#FV?C~&5AV!avJ?BB;BQ+juJ2AMUam2XXzj-i@`Zy1E ztp7RGN9F*`Dql|%;B@8K#5xMF0fWaLXaf6sEDOMS5PAP1V3#?V>o4tKGy}x7fDtqs{{w+8qdC;eQe#kfW9#8UHV>10=u~VNa*@A@*?O@0I}+7o>)-JH!>H z4J>QGDbF9Y!xm}-Vcj2iV8j5UKHPmDuLjtXK->>K9d`3}oOsmV-#d=uRKSawV^4vP zBY|lQ>@9#$#}nJ|W0nN8{7{|=+yRcl?uGs+i9JFC+^R7O?(j$B(FZZeald-JAa;rz zF3}jCKkNJziI}-L1Ak(8ydcJ80oeyerE|>2fu>?;K&0k^@WgED{-K$}qQJ?w{^8E` z-y{QM%$dYLNNzwph62XpPec4wEB2QkOwa_Jy#Xh+e>eG<9so`L*;`Dze(!|;l?(+` zgdMkkmPGy9hyMoy5dLG@g^lI@(JqW&Aei~@hC@(LCt&mP?-DSBjCCFV&^62(iWUMM z$0|fR3Tc?CYx@A_8`x0fw~CHYfTiirA{bU56!6o+AM60zKam*ef3m3=nErctfbb6y zP?!)BcDy3M1!GML4XpLRwEivn55nOp|EqaGbd4?Lj&gHzFmfRQaQIx9-M- zNfXupfg2~D*hwU}7Tc0y8%ZtMR%}UawdB|#nO3XST4F72wPZ^PBqBh7uqk9A2}wr4 zunemP=Eo8O2xb8S1d#-WZ8Bom86YC?VAy8f_nbQS_U)@S@#lTs`{#Y6#C@txojSGL zTF*IE)!9~$eQrGw7LJe3dehel9+O7-7kK^-Sv_gx#`*JN5lnFgdDzb87@UAu9>|=Y z_K06iReqNAp`+6>QE24ocm4rM)JUEMr^b2E(K8}vhMdPC%SEY46Cr7Z zu>lskuM)utS;LX&X3EQDg@97ztS7tV7?f2apY{d;%Ea_!ZjvjXLP!hjQBeo++_~{W zElf$&!0042PgA2go~&9uAFqYfi5z+`wlEmkAOy)_vc&G99XrJ7Ir2_tr=WzQom)0b zQ^V9G1PjH1;X>7DfyA$^tY=~brrF7f$??gVA~r=36=*W7u^|i!NK~e=tdmtL)J*wY z`^2DZqB>Gg!?^H!yDARvotc=xtfvFT!vVD36*N0(c2!>a(H?Ty6eS7gCbs6U%} zI9hO_E@V?%VnHK7iq>6P`VeM?&=x%{bhB8A>&)W`IWv7n?6ZRWq$kjfkB<__V%5y_ zPy>Btj|nBl{YfeigH07gSlBLtA9*GwF$;^@K~RGu)L^P;kETUSC46C$D;#506=vq? znW9%1!i>ryNrWtjRl-hVO@k4fQY9o>5d_)Lb?|6M7}~NIvlwqDC-gdmkVPJjyCz9! zEHSat9W9XbrVI-ms=r_2qEl=%ZxUwY2UFcCFZv+%w_)7aR2CH2j!wwBpCY6CdmYI0 z>NZY3S|uFM2O6?Q4hL%k0xn+h265QnP0giHC>mL$K&a9~qZ7w_u$+aEryLo|lQdn* z7j5DS(^;vQ$q8%(ryxMdj(H1gbX2P4eD_f6=oAEEU`(jOST+~N!F)j`J)#g@X!lSO z+v97o1s&1TR9RS0zDQqNe-_MAyxEYpPhU_52oB-Bs2&M1xFR2fg@$ViGx=~BKa7Es zn-~#c)aCDv`HyGO!^!mA#B_GH>SPU96gD|I-O@2NR-yZPg%>Y!$)7-F2Q&UWLRH_= z=2G7;N#t7EGCYoE2VEXYSr|`yU!R2*!}E67$LS`>IPFYMjiIM9f+bvSm`nIO4UD0+ z=*(bS?&I7tenmAgnHKl?}@%~X^e$|fR#CYLktx9)wrT{u2v4yP&=4r%)35#kExCe8v zrGRi(4d%MFqYb+7Nl1AoAbv%&LPYVaHbyJ9=qcvM5G#*X?k{JidCE;ofa~jMSuY5E z1?);N_@OV66kZmNBpid6MtBTYBw@y2j1|!A9JOE3Ls2&qX^y9ZB2-AwBRvkil~OJ$ z?o|a=`(b7btDE#z5MtL-h+Yf@ID2B+mZaP3FO()GvFmC%Np&hx+^)%>N|J-J=m-h} z{b&`WK|505NsjPc1fY34giO> zw~y44{SYOF(F&A|4N)dxA)y796*wbIq?zHY^yIlyugi?!X+fYl#xp1O(EsS8>$2@hllAWN!0anZh zQ-1mNGJ-7vyejF{>RPF;BV=BKYV<<2Xx#VmBuU{T*faKGq(-U}dC39h5$Hs+5F4=6 z%F8!C@^t6qASo&ac_$G>v|<|xX#|<>l(!aYK()Kn_)!U+fY_ADirp>Z%5}ALwu>7L zX%dP)d^GuxB?ON|l;0F;B73+gK52Tfc zsTzTmCh}PTOMX;pJgE7bi;LlC4UJqk&9vswE;XAAwXoREel1cOsdc8l)+*vq<_^s(76q zl{i4iRRdhG6h2|GM2IxXBKm$WtBeS8VMKXqK~!11PzE6I94t@GNBGegQGsWjkWl4))C+G~f`jY>Gb(RxIFqg{{i z>X%5Q(RxJq@TbT4@yZ%)I1l>6dJKb2v?8um3dKzh4c;U2{a&h!K%JKnlqbd{f+~wf zZ72}aYotCaAK}Mh%(^(CS3MgyIt;vp{ft*Cb&4t2w8caMg%=nWwpiv{NBi!%^C@btvkX_mud zJ>YW(hjz@N9wR`S-iLfdYX23-azO(VkCOXUU=8Bqxx8h0(OryTVmZ?%Yv6_S`Lu}hT89XqRHbO$s|@R3c#J5a;Hg!?$Q#5HMM@O z(4O1!Cv`p{Y|6WXd6vGFQC9Kds;Z-!Ly%iTkeh^PZaPG`=@8-8plhD;MW-1ceyQ;=4IW0* zc;_TEAswkHQF~!JiWk;^vq{)Iq4zWJHrWN<5VF(-dlnp=g&Yi$LmDSYiU$EHd@gyt zO+Zk%r=wJ5C$O`h7@nbZI0k2T%=1Y2=ma)bqth*8P*Q3qWV|@akR2zpL1YM$Qs`Da zSs>75LPej;U>*k>Npl1?B{zveVN8cQBx`1X^#V~LscWbw5`fc^?5IJvAISoomZY|p zxd5yuDa!|)H!3Abz7luxl^9`Th*F`3Aq)=o4ZZt2cUq%N)S0E>Z6>tJ^`sSx%yEr=LW9UCk6u z_vCYhnwr{xi-vFDY8yNpT!Pz~I4&`ECcIF%B($+sLh*e{E}=v75*)s);C9qX4yJ2r z>NJjB%x}8J%OAT0x3f-jna1bvV!$P#jXn-8jjOHmV!$OaP+`KQw!sf=@IvboUMO4= zW5=!wlE`%bA)#T47;<($MSO!q}O&; z)hRa6s8c~?y++o@$vzt`kacF4yqE)o?)u##ZeibIDS?0_QSI4xq+?d@&c+KPEhnAFM`L#>=K)Vdi% zrDY72Qqy=CYF7tvz<|$jvHc1iQfCaNW_|3yH)-+C)?z-*4M6OlGxK zm>V7K#eRg=BG{|%qkKRQNbSWl)Fdz3LcmKOp1lD@CTS7qOeStPaAFbk|v`@7SMeW2%SS;(pLjCF_j9PIz7Yx!QQR zMA%p#CTpw@5P8|CO443*5<3(+9R+i|5fZ(~$MA_rAzUHc|L(o88)vh@H1tQ(XnmbkAX;B%6^M>PQ?RZED$|`&&cN?zzbh2 zVA=p*H!d;HwNLGE2 zEaDuZT$6)aX<(kAkCDOz2U!n%mQpo%)~7HrrBmdgJPnTPJ9p6j$gn+iMNdc7!S;hH zNv%6a3myv5tLXj7PG7D&jH9TfkYpevR~ABRYZ!m5($b_flJUqDxPsjTG9Ut8rLi>p-+Vy#yuz}PRyaU9C^W-go0}f1!0#=}G*BgsSq;f=Lr;gE5bg~MMSzGG*3_>P@r;dQm;>BCvXG#X!4)6y3_~1}gF*gE}Z`4;M3X$4nBxVil@t-8y@+uS#wG3H=E(`lB zbsscvzf%SqI^ipIA)h|fi9CA1vTo$j6F$s8H%%8e<}in4iaB)rWG_^J?Duq7>0~d& zE+sPDwMmAv>j@#pqJRJ?X=yQ!t|x^;mjXaqmU3Y7bUE2;V7pqxbtYt`a7dN;Xhr2+ zCKwDz_me!dFI4%G=i9vQ;@t(*a`{V+!m&x zPadWsT)Hz|ucd+G#d<9bBn(Rf34`XLX;>Oa7?uVy4M_u;2GT&txiI3Rp?G32-Yw7? zxF}&oZzu|c%;IoD9e0BXtX0r4a76%4&+zJu(a@+c96g>tS<9~3$*HQ*3FMS4MP-#i zZMY04{UC_*+IkR2^Dn0A^>ITujvK`B_Z*rT8tK{9Or{^++rBVyfhu< zM$>^GmO?0Xif3u8XLLhLV!foB6&6d}JZag+7+SM2hL&rZ#>3Ehg)y{P(KKWUpovI< z;o+dlmp0p=aaZ)Tq%_Wx@#b^rfZB-3@0O=&+NFM5RjGYLi8|~}uf=iCMJpO!E2G(> zq3~t0`r6`2Tq`>ZBX8U*OHB&k8h7^|cPlnS+ln|OI61TxcLG=KMFZKUyo-uyS?1yd zHr@R@GM<6zW_pAfWD4RO9h_CU(PB>3>?B(fvWD1-J9EANw^2XZTFA1w^)|W{ZfjwB z>QYJ+pD3T@)t0N2#)zW>#xR+Sx3B;Kq&S5aFkdY_|Ci`+t2>YUwc{tPU$^F}}pqtJZ<4(df z2Dei~WA2icl21h8B4RpFMWp|asA?O|gxAhQMXE}fI}K?lbB$+G1T3T0CEL}J?%lq= zw3SFJQ0>@xrVO#*I#W_u5>zJTb8i(g3%$;|2u%Crl~jQY1_hP5RY(~V$~xNh)dYhG zrW$~B16M4UT3Ds;U8f7bjy6=5N@V`Gti*TcY4Q-_TZzo)dj_->O5a!^WuIk*tiraV za&?s_?|rATn)3OEXd5c9JPj=jMb;;O8d?~Ttf#HereNT5W^}uBdnzkaC4P-(mM)Bt z&M4iAby*?Z+FiP*Jz4%>uXIM~!kFpI=ysl2Iba60o?oRAzryFJM7DlhsX$d>g!ZY5 z-Xv3LK;85dzO7_?$HDgP+5|>g?FDsSw3;0|))lCF(^Fuj?!ug4nvMs%IKb@kTb2ko zOiz4}rmeu54EZzkBYFX`^si2=2I!mUtar=hGcvR9_8RKKU8 ztT1L*ri2)WD?hj}I1Ocm*{w1q%=BK-Edh{I9csg2Rw3)_Ins_7R#TwvYzKLo zJO|6XnN&~5k(S=}gYCx@4DxV-;dq@ISA}ZNbhA+H8*f&7=9>tmo6zv~1eR&Mwl7rk z_dz_e1yBg5J$PKqUMTRH1L4hvq@MJa$S2xV$tI7IyFr%q72Fqt!dDDJZBfML2 z#^#bObUt3L!G`sVPl#&6N}d;+wWY;qt+xbiPb&R>ZF_P%eQW<}2da8+na@2~tE0T# zw!iMDFGQ)qd|&da`x72a!HXJRXa?I$T!yJ{v|_truVkR0Eop`m#vZAb;>c!Hka{l* zG%5)u<34t9Bm-$zW}GcwM(_@Z7I|Tv4fPYQ-ayltK*4dyAU{QS)4E$BIUwZ>EP}Q* z1@SXD+FUtgWNu(;l&JASS&fU6k@O^sqAAx+QajQwwCtlV&R0NaKdg*Kivd5366bKQ z6i%8p(Tx`4dGKp;U01d8Z#RAZCRZh;1aPKdIMswg6f%=Jy;Z37UB07`A(6(l=rky1 zJDuV=hU4GE7Zv$|j|*yC$gD|NoyljZ1&|A$NnCo1LO7~_K^C)<^z;Z}3&*Liad?q- zFyxwmt%f)!A^!F#i(Z`B#yX0GWHV3&WVlPE*-LVB&kr%M8XPacG=BU9E`K?Ji^k}b zPm8A#!in(WaeTEB0*3^q^^;Jz%LIp%^HW^o9Bm&yo)?4Ng)~l|=ko0K_OHm1w|%8@ zcnurhg1QWupESAH8Pf2#ZIeO+ni-oZHYqLK$GHuZdtw^jj>QOJavU7j-P+N0q~%aYn~S=1OT!Z~cz|Bh^s5KWg>DUZ zx8iA-EOwUL6poG@FALX}QA!xH&PJm`5!0w>SJ!lto0wHK^#QKEy6SOjG+H|cwp$^d95l;=BtgXYPIJgsHG7md>YCnqFi*9ViVun64ZrWr&hAbLT@Huc1 z0zR1d@jXymj3KoXb$tpYUS;kvzGakxa#IEBK4f~Pn?AX8)5o<3nRLf~1q~!{GPlr) z6s%EHL7h;zWO-(QlIEe69YiVJ#cNt%<25Y`g)WtP3$v8U2(+?53sQ&}98;;uaErs| zO!2UAn1A>4FNOyU7e)Rh-k#Wn-QM`i)m4T$p{uYA$Kz#DDuIV~t_H6>jPXj8&lSBA zL6VXg968B@Jxo8?H``cW3#7tl!(H%bzPQx_6WKM&Bf}7_tKH*{XL38W7>P!2o|xc} z4|2elH_-z{SZRWq>JUOFFFqFjtYP!;pa@nkdHp`B$XA*Pk&f5zx1b_R-JNQlMge5U z>+<5(Lp4gECy*vG#N}J9aD0r0?2=zkJwWidjVGjLF-=H)G^v2h8W;cQ)O4L;zTi;@ zb0zZUe^ofWj|%$ne1UmX*+mMEW-romvr?dEv&XGJi|sQXb)m+DOL~80V?0YaquCgM+W9F zmQ8J?D8x)RSG4&uSCIx9@7cHZuKgWdxK)1pOmS*EU*fVIv9==)8O7iQBGuN>lR4Dg z(x&hd4V*1)ZR!w~73`={95On%2Zk8Kc;Ic6*8p%rl|aJ_8W#odCJWx_fsC#k?bc67 zX?Nkcj6$Hn7&p#x+ku%OT=D?|I5IF1CD*7|E>{g;G{(K)z~Yx)-qQ4prwT;C&?HWJ zZM{fcbSeIAQ~Np&wY&V4(EYQQsH~d0M4eJolmJq~lOY*$A>!as{zP^lpUj9l$DbX57UcNiYaP6UXdZ@`SAI zeIm3}ND9VW@0GMtjIx$jLPL9j%T-*c4D@llsZtQVky>ILOnny58n~qN_0-Eg8O{1g z92Xm5rBaFwCE?KMFuoYcDj*;nk#$RPwY7;`8u;6wC6-oKBBomsU9|b}LJ6nGpOT+1 z4D{LWgUqKChMS;E9##PPgr!ffTDzz!XpPShlL&d~eRP7Yeft=8w_eVWz7gSR(L|6- zOb*^&k%M2FWk=7kRBty^wI>-+JyHl&AwgYx zy=nHN#q!Mt+#YCZ!^RvJ9gtU=99<R?IqeZ;kki)$SIF-ZHoa7{)ti+8vW7x^iLz?{lCyt)u=m{Q=Lq=Tc)7%>8Ff0{e zSBDMf1Vn9|b|Fi9T2M_uU+nTsN*i_R$#ke2{fmpVp4s$BcG^9aExNGdBe@)SfF<_A zX!3krvmWTNlEDqexIhsXSRE%bd~8Z#m&k6&TL%^1A%HwjZpc(L7~&!)vMz;*os1g_ z7eiun@`fI~vxzm2_s3n3<`q^wN>x?TN`jD|Ki%fV)KE_v`ww(ne(+FdS9j`gPrA47 z$Q4JAU8!e};gQj6j*pE`OcqW|6{lxTo|>Jzwlu?BvRzHMyVt8gONse2>K47;;cRMT z)n3daq&OulD%yRfv*l=}vkhzNE3w|etE=GR6--akRePc5gm{7@?b+kjxG#OF%N#3* z*FQ;k!;^$VBTM^(O#=^#u7^<`BAN?*WC|0D>VMN4x;M@QMW+ovuVRLi)pxqvkVsMvUgX zQZ}|ymZ5Of(u_ieuNNV?M?scpdS^iPizI}hCBJr;wg~vTEQi7|qH%Zgmf~hNa0NEx z0uUYH2t7IrJ<-XcyPfs^^ubH0ft~f<$3}%@aLH?>hQ&3=Uz~{WDX0|dH1O-G_U`fP znpmq*ibvK@(AWFP{Y6gG-TXe5++mhSQ@+7Fob-*DG(b=kR2Kf0K@`^eGnDn z`;){NVI(YukAQc`lE}T*LT(?A7(O0u4^MGDJh`!it7VH*IO<9cl9FH+Nz=P+IDW0) zT2oW{y)|mxm`Os7F;}&h+9TUmcxDwE<-Np=2<#l7aj*ASs(p_t?C=B@fewo<7=Z9yw*`B7pof>@U?7kbsOx~Qv;^tKKq%gUN^zu_Yt#^l2(^=?g|d=>n3HB9 zns*@WrCG+?5{^?(L?1*nNJV(r2Ip=OLG1;S#1*{v$Yy46QyT3z=f%mODaI ze;OKEL}YsLC={q^^#g`AjjA>QFJ?l{2o60k9GoHPWi~TdJDM5N&e7UI&zZ*xOOxxt z1a#cx8Rw5H+06KWF2EL;W#9w?)#Dz_;IrCs(bjF3Tv}DVy=l*j%V#TktK7ZB1@aPw z_oFYv_GOQ&_7G8%+N>@>zQ8w6)-3W@nyX}cbk!BSkXKjrVaGFeR9&U6qD_vv>MC9g zWm*pH$0OvlF49iCZ{`hi${*tNjUKc$*OaNgR#JG(W+3-MV?gq7;Ism7`S#c05ycmF5{E|!Au#?zhR zDxuL~QimwIu2jG0pe7J3PNan^j&KDtJsR8Io5r(g?U{7yAkI((y&a`DidC_29M)pO z7OP>kC5h-pA!+B4hTMuG136X75)W?|JbY>P!27CkNw@v63 z_@m3S;M~$sJfelMNCB^~Z%xc@8JmUhn`r2d?#ZPqgV^*Q;&N>MiEK;JBiyv5rnU%4 z2|C6sgaaH2Kl&VdQvh>BzIll^(UKy&HIMI>huCM67uySI8N$-qMTi%W)-6BCS5P97 zeEVc2p+~JvEL|Ba<%9JxcVMcJdB7;pt8Kgf@o@2C+plm zg9+u<<$VxoUxHWgXZ zjPK#@@9eEiqr)%HPN;qP0cbIB@})2ZIHxY3nZUm>JcBn3-B>|&V>5!guvA+fW5UHn zzSkbR7rdfUY}y0_A#rDU5MPbTySS(?hps?c7NBWcsOM7q=9p;EIO|504Ji|bT9h(@ z02C_R@PI%mw|3=mVH*^d+tf66fEm2ijP}k>y_RAp9*ejqUQO56yRRV_ z4~lQ-)msm>2a&xyYl2?7=Q@zo{`M~9No;zd^xAq&Qy?bOV=?SKiz(~ue~cN-27ZamYPl-YB@$SXOgR;oZUUgf*e}AyAQRu zbZIWVWxjo7zF-Yzx=1F;8TS&-1hRrj0QutYrFG6|XlNMS`_MMr>$vs2Y?IpE(wfGE z1$kr>a>uihOY1%mL4w}X)7{hL>L&-Vih9YG!K+<)D;47snDkBH03N*siN;Gpd=|XZ zc(+ZVQPS7lq^JO{PKH`02jX{Z5E~hs#M7z>5|N1IRm6xgD1}AI}wcRh1zH#gB*jvr0{M z0{xUvVd5%0>T^x5fAjNp%z?P4^)dz9TYcp8^-J_!+SQX&6l|YP<;(T z=dfopWfwa~9s_zuus+8BkO;|ZrJ5@=6TFjTA}$}IATLr_?J3V#AZ;W~T8llKy$Ybz zO67o%un3uZRlA5an_RLn*;yZ;X&c4+CAiN7(#|Jep$jI#*wc@cGcU^;6%Pnc zWIISt)8O7ht}ZfR=f^9>%R#hgD&ib5E|@NvSx7AY;Due+22RQ9O$?j)C) z<^XR-MJ!kH#D(=edZL8%8uN$?NkY~GZ|gkDW#Xp_?0LA(mZ^mqpiKWRFkC{*_(O8lkR>TK{?Qo6h`H< zuh2?ZcpBDuu5H{)-&JU~icl9a2j26KPWWOl%yv6q9-;>KY^lN`aAa%`O+Wap2Uv&2 zUJ9x^%nbCFJVr{KR>KwtceCR7IhOs{>@~IGg(v+56s@gG) zCVeo*@IA_f91i=~Jv3p?O|xvWvn74738pSA9l%4#qqB;ha^nF|Omy@Pe`1u5m5>lf zW=fg@3tCBum#kA{phyy%0*i=%snw`d>%q2t;?}_@MW91k0*uV8nIbb5vZ=uZu=y#G z_K=kZE(T)NNdp@>W=I6fd-wv@`?QxNsIsLS#z+LwPKpGVv^S(`aP`xCFqVLBURR68 z&=;JZoFx6k)bypSJtc%YkSDzYJ{w-HN1c-~BrSQmlBDCo3bqsX(Il}d>tR=S*P&zd zDXVC41X1l|PA2F2OHV5gX=^`N#d|APUCJ*>u_^{%8kIp}H&5sp6ta?h4x<7Z-&P17 z;MxYEOl=+gxEE7<_9I^6;+RB9-VIS}Fk8XpigpK9D`gw!CYNdqDM8*ti@xBd8f!mj z$VX=@1{DO0Wu}WkflO0f64m%sScVN!aEsA48NTgI07oV=B|BJJ>$ypYF>tgyi8NHu z-PL|YFwBLxrw_Y?AdQdf?deP7!v^WKx{iO{3wF7XBz1wHjqXl{rjeTx%xBRb0wxop zRo@Ov782K22&#bE&g+fS1yth;;E>^=3>7Vd9YV=NMhx`ANMi=ijv^z0zjgAru5OnX z#w<|cIA}tM!%j%OJm<+F5~F!mAuWdvbzgyQ*M0ODr=MneTFiln*L0e}$vQ7S`l06> zoAF$D`3p{3OJRRWuW-rYGEWbSSGJfQDP} zA}2|C;Uw*CQu7j)gnE$nHh)U=o|59p}gQ%3Jn*R8?Zb&QGx@0 z+r-L%szhJ)4RJ2n9h4AVQ0e26KRi3bI)5@$40>trkM%T*(rKkk!)ckHgjVGgwDc__ zAs#LMX>2ekc>+Q(maq_e!cqPdB!L>4>p8>-kE_dXw&W#S?14Ch^QeO$TVNjt;ZxwF z&_?T092uph{~mwyb}6(tJ=(^(iPtvR?zZvF(3fu64{>c>2Fuao)Bxce&F;_+nGwmB zghVU&^@Sz7Q&~tkU0xl)Qs?60ZW5=Zz2{{22Kp8`!Bq=7FmSZ1eGmb(lMpqpj;T3y z3AUN$(6RN8l9|(AwGL3t0 zds_#Fz}{o*k)=>(ohPkmS)aj^idx1+Nw)BQ5X~2|_361TVANnWp8*iJejH0Yc)&|s zv-OEYi(Wt=f`0M{W>yl4H;_=s$XUWFGeNZU__cEOaIDyI}e z2h$A&aW1GSAtMBk7xwAwU@9-=21~!vmuxD_Xj3VpXjEAKpsDsCpB*WBk&+8m`a(G} zo*KtlTdytcp_W)g??Wt-ic&|!C&%yuQ8P3jczpq9FThumq-gQPT?EHbdOGk1CX``X zW=t-Y5kpKFkRy|a(I^kzeev!qfRRMWeGmghlFlRG!~hyRk_z~eEy1v4OCYEP%Lhm- z*-8X^o{3?I{<9^Vhe9VL4Fp{y3Y#I%nIwq>N9`UWD>rTX1cis7@m{-+3=UWH`d;vI zDfaikY!DVu`%nVDMr?}xz(IbpJYu8RvWw|;@WdoH z*Bsc>bc~T3M3PuwBuS>yTx)2Z#2O4CPQ#np81y9_t!3dV1+hQOQ{9oG1hGh~aWOO( z+DOnZo34uPz@vkHWX+Rou_p_24QrzQmaB)!^ZAie6EKjGjGxEF(oaxwtuP7Muvj9aO=<}+UK*aD zNN6M+g>QmK1}8D*;u18yR36EXVc1iXIXp+No%B4UiyMAmR_Spd)fXFDYCcI=9;Y*& zw1|Y}Eq%QQx_df$^-ep}!W1wk;-d{@9ZmzU97r3Z3g=!+dS=uXnK<*BV-Hm~a@#jG zrn?N>=tI7na;800*OX<%MifzaLWxPAtdti_UKm65zy_tNFE0F6_tZf=O}RoF0R`+y1@#`ZcxdkyE;| z*YK8Z>Au$9o_37OWFQdC1uQh^1xhl|V2BSpJ~|DvPpD4m%@xSBXLDmSm>7M8PvQqr z)k3h&yPK5901^is(d!UcZZrj#o7;m67QO$|)dcydw;5z9Os1r1De#owzuQvCrLe_1 z#FDZk(x-!P*oa`2FzdaMfX_=ba)1l#1dj@>0*#4|5#%X{QimRE-DU(?8hyEHNAW@Z z*J5;z6dulO;)4`TES82CC^rWiJ>2jHVscO50H!!;7bH%qVmQH;F8zWFIZ2}rVjUS6 z$Xsg0+?krVy~+gcx}$}EaChw}3Y$;xiWeAiRo779lbM+>5MMqa%EnCs@1{|sS5(F}j z)=BA0Znk@5)j3e{!A0a}OI5=ll*uw`T zIuZu?OwiM##e{5iouT=*9j8{hVCagKFNEM4kD6#d1aXIWp?~d21>-?rMST+5#NGgJ z*zuG_6S0<1v~}z!Ig?JH1vW&Sxu73vP~X2)o*^}dB01Cg=HE)n4e=G=3^Ri(YDF#j;34;xupRU3ueYl z>ix3#_!?nx2WY1UU{k~77>Z~e6BMgy!DBJsOS)Fi<2$g5nx4T)A(l=S^R1*mkxxCK zr6KZh=a6xbc^4YfSRe4}1*b$Dp2TTU9nCX;(?0JQ0<|~1Xih-VpN5uREar5D1WKp# z2FWR+V5%LQ!JWu0c(7fvT*`bP4%Y|?T#I=U3(^7;OEv;ntr6h-^Rf>;oYrZX5!$>$ z&6~nA4vHRogDsFQ)*dx8DjmC>l`znh!#spfr;X1*pF({Nh9WRTgQ7*TZUu)Uv90${ zN6Ose(q;sd2*YVrY?DVb7z_E-8iek2L~R<+dSkvF9hyVCz_N2oQM}%9lufvG&^tK{ zp?yZLEL$dUO*D;$dP7Iz{7g69gh6dgj$G}72rG+qH-ZA#1OYJCNg0ulDH~} z@J2bx7)rxtF62)0p<}KYkuFSnjb9p|@5j1>#vSPs@a5&E?LeOZ_GAs^jBwO!20kLa;YdA)2Vu{Hu^-DIuJ9KB;tg6p(f9@h6R&%Cxm+Hs^(PQl z21q$q=wVa`!6FL^`Ng0YPK+#w(7A)1Do{6Ad|_KIi!b8qFUzC{V4^8y44lfkC{AeL z2sx{02w$0&`T}UEv>4pQrLbXv9XfqLWSja64gCJ?p%Cx;0|dn{`P9tuaZC%+?1SC3 zNW24|<9PnK&RrV@O{g`?atDU|nE;Q_EkMY`aR`qjNy|Ci2!O`UsN~PdH92K@#$uYLIlcOpE*MyYbKmtA+<{>E zWD-nily_{j8c8kCt!eo$E8f9soQ>?pO)xmo*Gm%yzL)Nnyi(B()N5X)X+>ys_x3!! zlYv^KnTVUY{sQ#%Xmq69P0#hQn-1Gzyk$2{iK8T_AxDwqjpX3_O38suhoJB!#6=%Z zob*}Q$yc#@+eLck07il=AHtnTvH-|JD>*mbJUotVA)PdbybE_aA-7;aPMrX*aawor zLUrIC1ua{xNQKrbH!RRDnzy|b>Ch}-Qsy?1;SOzeC)o4_MiaF#p1_T`bQ+QmHeM14 zQd`LW8@3^%(^y9g(EY{8H)>Zdb|AR|`6j1HZdD}KTikl$lTZe9dN07gDE>9zAN>)u z*`bg{f@F1BFai3BP&s5tpOHd%36&nHUAW4#5XCcfMcx- zo0PrsRAnukrPR{Xl--OZ`p;Iz%GscQx^m*@D69V*<)~*UBk^oy%|Bb2{m)Tq@j1#& zor^S)x3zPXv-Etx=PPsZJmvJi2-UDzspiefT)F^hU!a_YEy_wQy~%3QfvSksA^9{<5HzCd*Wh~-^((;Q{WT6%5 zwE~w!nn}>MD_iYDe)q$_A7T5IvwQ#*)1l1y4rRHQBb|ewKZx=j1br7^3h7>@%(bhO zu>vcK`9Wo*h5(0@;|?oxc^KjNAZsItHwyfyGFA)l7nHqv0`)V6ctxdFi>SkC@S9PQ z{_DZ}%}OQStn9?C$m^}}-wyxn@ZSOd9Vp{llv=t|nT5L$|88Y3+@s9Yy$HKc+3N3* z&%Z;QccT8@sm%Fzt4LwmP)pN>v2e<;a$jjUYp*m^{8fgL zc&nkB-)h*2d(i&wF^ttk!(4m2Va)%X5n1_^q1HZQn7ZBl$@&x82mb7Sw7*qTnF|)& zwlWr8pqzzf)JLl_5^0n(ts<+>G_2)kf$zCU<3&i_f}Pa0Npo1qrkf!l95D+iFD1BSWSf&3mejFln7To^`qP8q6j%7_&1GOU%mP=>pa z=lcyc|4H!snPC@xW>||q1I>Sd_IIeC-xS#H8I z+*-?AtOeX{+0A<`Bh_j-{YlGKZI-dzW0`ImasS3LS2C8p)^AyftYt3@Sk~%*WvmP% z?udnYvCRHaG}lqfS-Qru`;S{{;kad~F-sN3EJux7YH`9c7EV~Ic?#(lE!95<9&?sT zU29qK>%j9m%UHbLQcKq(-FeF@yxg)^Uyjy#qh+YuEwlM{(B5tt^KY}%%G)e!@$Hsb zcn8YyPVjyg;(Qe8eatf5k6T9b=aBB_fcre+f6=m*9t7?ymb3U3&^&~+9wdSYDPX=ZM)C`y31{2q0e>}k04K1*hXT^R?QQ(v2v?z74EPj%OAGY%7<;E z`HM*Ji?+4+MWp#P5lXwK_K4P0IkJ#4Qqi}y6d>^w_|6_>1it>KXHW&XB?jItL zKL(#4+fMUOK=%{dSo|gYzeL%7W2=SV*hc^FZ8iUU+nE0|`2LS=rT!Ou498kB98+12 zid&AEvK_T(JBAx`R3heJ?sLpU+)>SO$6k&*&cf3jBk?T9TzR(REI$YC=Q~#61&%X+ zo@1??2l~Huoc>E3d#M`nw;N8iZft z7|X{UwQ}6CQ{#@gH14S7amPp$9BZ)vniGynop6l!lw&STIYyy~{LFy%q@(6fI%fYV zz*CO3JnPtnIn>1*@;`^NUF)c|>l~y1^^U#tdeqMwkmolzM)MmTXZ4MavHB+DXTfor zZ$a9(IF|cn-Gm0(UR+w}>(D$^8d_nR(|eS^S{8ie;nmsbJW@z;ymG) zYrg^RcaH7;H|q1h9aR8a_&xak-Z5AHfHeQ$Sj~TQoW(!k8~+(}{{yHZW&+bu!HC#v zM#M^)5!G)-tTn&|D`Ga=5tXtdR@{lGW+!6x0~VqYD-nyBsi#Ej=BGxi#j_%|dv?TH zI6I=20pszAy%LX@3r`0;Ct|EU8*!f#G3K8aQH#%u7|rKJ%(e4C|3ZYlD56%~h?6=W z>1>WT%bUUDf{2s2FrpG$BF^F##QE!p6Tc{;;#(um{MLwaw?)kPZNP7fIPS%8Ukuty zklrN`wR8#MUJCc6NV6(pE>?kGRm5qohPxVc+au1>_J~^99x)RMq?w2~D+#!3Kvx60 z+K3Uai&%?w5u?8zxcZ2tc0}y>E~MK4zKs!UtubO3nj&WWvWUIB8~!~JHNO{SXpY#4 zmWZQTBX)ml#7MM9?6r2p*&ngzJ5aBeBfkg1w-aUQ0=_F^xT%PlN&(-4y6uUWOFa=h z5(WC+h+61H{N4!W{fN2J7qQ(VpgDp%IEHc_iSLdcfY^DE(h71DcE#9p{5VkTZ4u?nw_7%Q)d zSo5!qIEkB4U$2W;?&~A=;u|7P{~IHA{7tBbg@~2Hz`u;eee*4#y#?Rm7SP;^u-gD{ zix~ZPMVytpB1ZGw5vAS=xQKKYBj)1UkoUJmjMaA`-n%2VdJppXo`}8rUhsS$^7BEI z^@9;(@xv(FM&qSQU zGV-#FZ}VBC|5?!fOT=3Gd_*mLA!5b9h_oL>U4JQJt$Yb#UxEKCD91w)v;V93)?Y=L zA4YvY5^>^RkC?09KzjcMx^G6*;y01kZ^8eqh_UePi0ytCW&bYf{y!ql{3`Oi3Yzal z?4|F6&-Wwt+7BYu@()q=9|8Ac)ag$mmij5m^i!1crx8Q_GGfmE68U}{Wqks1o&e3S zBTnkK$m?$-&MM#Rjzm@Sk*HZX5;azjMb+xnzzu-MK-5g+kiT5i zTmxJjj5^DCgy*BSI}}xkp{PAS6tz|W-QlQJ7>?S@fbo&2-9Li7j3CX?sI@u@KF6cb z3?jc{$oClNC!*Hk1l$u*W9{0g>0TE#7G4&$Qr9EB>rviUMa|_`MJ@NHsOrB7yceQ& z;uhrdmZ-gSOVn9=GkD(`wbX4eJIcS zQJ(ilZS?`<{{yJsC8Vg=fT!#b?IM=4ZtW^<2bxZp>N(Oq>ha^T7Ls zF=y%gm|8hM=A<^qRR89fv3fzwDqI*dRxSe1i(*b;YfQ~=jXBHPVygM#n6-3q4C@{6 zz9i->T#Ecu#hiF`Ou5xDtG_yCyEVw`&X~Qp3%Ca4r7>nMH6mY4F{^nu(%23E?wGx> z2YKIv{58j{)n=rZjG6syF=w$I@jJltV9Z!M7;~CCWA;)P^4uM>6RDWFm_ph|kk6}; zkH3i-@f^Z(@Lv1g_j}D%fRz`q;Y*rE#44w7Uq$s8)MGOjY#_yNaGdA-z#GnyJJrLrkJsO z6XL%b_4Hb#b2Iqf9K)UsX}vDyq+TDhmtT*t*T<}dH=ckY0hHr|;Pc^_+5C~1z48&@?g#DtD90xe_DSUXLGXSMWqUAYBp!-c%MT$R zUya%GE5NNFy+=`oN0Fzm<6C_L_47S^ukXdI#P?&o;otb#sDX_d*rl?7#oT%36Z_zrO`ME?2gDP?^h+=dT`8rrU|-YbWH;ouEr0PD+_e zfGd#kuk*IFM>#I!{QdVTXZ1etc!yGJ?@;E--zjJLok}I%g>>JIc<(_T-=nM*z?JtQ z?)#PDegJjx0i^LE;6H@2E}@=2jB5Qs)>>|1%(?e+F~{&xB6kxrSScSueS~?6qJ%**yhO?GNyd&U$1$<%~u-E@=FY>|06e z9tgLQ8up13y4KV%+!(M&` z>h+a|nSkDB@g}78YQvs?HR3Ly4i*gP8-TmjFz0VI)Z%T1(|kMfe7j+*I}B&x4nwWn z0ou2q{C6TBcNu2$-G;StH`02mVL^9fC;k@c|1HYBXc(z?AnrRr|6apcc`x$$e#Ch{ z$^y9Ze#2b)fZ?ot5c&9!VW+pFp|qH_V0m4Ws{)h7*4P;SYd6 z^ilnvLY;ojaF#!ZvH&Lj#juzD#c&q?)i9PmZ>Z(Zqx@emtmQAl|Bzv&zKU`~NxJ&5 zVa6Xt_@jm$|2pdB>%f2AFc!Xpvj4kbEI)>FJOS~V?s2%+ke6SfjE1RJEYn%AO(S&{bSr-a-O4$p?LyDg{~Xg%&ox!zxu&rOozp6G zPV+A^(b-J1;F=fwF&CJ2{6f=8T?ie_g{HZ<1w1Y?Rr95$nWzG+G7Yx| zu-0@6b*7!DM_TpZS#O&09nkUY0KXm35$!aUy9;`sMpMO`OtZhq#CQtY-H5*zbbC#; zwioVwpxcl99YEfo^J?xfA(J*O=(<$uh-obxfzAlJu4d@ER*ssMdknN!BL6Qjo#v}d z)eoK5!Z6YpL7qoYrcu*SlctrJMA;^hmr2v6{D_;hD z*i`)wo6ZX0>cgmyM^N5JknW?X<3~+n?d!-Z^lJ;>fd3n&qrQo9ebcm-ziB#&Z{fRq z8+G+<@cjrSe*~XDA|HP=o%uhRM!~YoWefVMh-EEAp>v8^sy_yO)>ABF?XN85 zo(+B6IhM2b9LrGW!hbIGY=A50T8{gCOU=K)GSzvOl{gQ&u@^ztbv|@-n=NZ~vt<`9 z1RZpOs~1^naVv0JEz`Z&vf`Iowp(Qx3Frz}w_Emd0(!R^=)RyYT&aV;tKM?vcUb29 zPRm-_X_@g|mXT_-?4?G_Tx+zP#U|wQGD|IA241@@)x6s>7k68hy9asOgM7T$vQ;zE zY_SZt73FC~SQ31bmWq@9@p8*rK7_n89X@EAbaIm=$nSyuBPaD(8Vht6-*vQp4lu3lpq&CpLKpr4G- zBahHMF3!XKI)uH!vQuwFKHq2={kI`+&_O0{x2&bxQD=7`oqIrkFLZ+UqCEGaocCIe zd!J>c?z2??eW-)`;9msIBJ%q-=oH^(8HEob4<7{oPXPZ3)Z-@+{{ein736OP@L|M# z7`*=tdHxn?pqE^ZLMIl5?kfh}SIoAS0G9#Xr$Fa+Hgs-h+g9`0wmA>?!r8X72EPj< zl0@7#SK?5Ponx~u5i`DeCjH>gy0%9dvvDJSRy4L?Y~VNQVWT~4^oxygU}GHE7zZ}S zfsJusV;tBR2R6omjd5UO9M~8KHpYRCabRN{*cb;k#(|A-U}GHE7zZ}SfsJusV;tBR z2R6omjd5UO9M~8KHpYRCabRN{*cb;k#(|A-;Que<0JY_fzl|E$sDX_d*rOJtub93^;8g;L1QrBdEAW*9-ze}-fo~W1et{nqxGeBNfsYD&OyExhJ|XZ=0wZ71 z`HBmCp1=zQRtszp*edXlz#{_t1zsa?THy5pUnB6%0`C#{E`dt|?-%&b0v{6iO@aR@ z@aF=5D^NY8%dtt|GX=g-;8uaP0(T4CCom=ON`Zp{Cj`z4yiwrm1>PZWQQ&(8{-eN8 z3;cq>hXsCD;Ex2Z3H*b=1>7G=dw1YR%jMu9gAyhY$` z0`C@hufVqpe5b&F5cn~H4+#9MK(8O(TCdA>mp~66hVPK@_X?zMfg4oR%Kzwg=Fxvn z!apw%CsPz|!BF1_(fvTeeV(S2URzbKHdgCx33LUiAd@NWr>3te@H?iUjNxWK0iT}_BiNx!xPo+EViA-d;D zxHk?w19a53c7^CR3!Mk)d<%W!%R+Qph0cS|0u6oNWQeX#=sfsrp*s|!YZE#T;!0KK z*B7EYDs&!vuF(BWh;BycJcw&qncr}T?k1u0;PZs85Td(V=sbwwnd@aPM7Jn(9;CZ( zsa{?lqWh50eN5naprJl|bBOLU68?FCFBG~rh3LL2;r}KON6MMsZ6Uhh4?)~!e1cpf=bMQ+alrB0xvub-7X1#vA`{$ zqjviDp>+34c(=g6J`KMsBs?SVqSMd~OZcR~t*4TovpC;Wk3HRW3 zN%spOe!mqu4<Yx+bCX;0~etbBOMs(0OpD&_xt3m4@5yq30)#Y_h$)zN~8XMxUQn&-?Joq zv%ozSsg&9-;g<;vzd!6n+b`k00&y)y#lNhC4+(4r74^%8P&tlE__V+l&`>?^3DMmw z;cph$D*X0^=-okI-GYSQD-hS5 zFx~4ybRU-RWr2r;?zRx!ze)Iy1>(9C=67$1PF*JRn?PKX&UEhz(LGbRP=Q z9gy(D0&yiv#lI^h+=GWfMeEp)hxqji-HgB<(9pW`{t(@*5`K@sw9tJjME3y+|0jXH zLbn{E`@V!fA+S&A{wYLv&Td_QuD~Ng_pc$k7fX0b;1xpm#Sq=7gck)K6}m5n=w2n^ zcL_WubYBh8{T~VcvcM~a?%@#K&n5iV0$&0;8V|l6qWgn{8+&xQuL4b_znFxdE%53} zM8G{;!p{@aVyP{Owf%z%#8_m740S1sYY1ojKve}?Fi5`MYBEa)oz9hUH`1P)Xp z0&ZBsuMwC7j@s#uLg`LR_$h&dLif`U-3=1%!MxD@JVXcd8U4LR_}wRP7_lgSkB9hu zO2WS&a0E0oe>@SQdql!LI4b;p7ouAgIuBkWbbkoZ{YdCMcwFfI9HM(d=>8;d40O~^ zl~KOli0swvGcItPXe#_YPr@%0I8lLyP}LINAaL?DbgdHZ!2;+ge@_YJ@2Jpa1)cy6 z$t2DR(Tz*^Nr6+Ksq}Y)gx@T%2qOA!=Z5&*A>nrmoCXc0`@#_2dnEkB0%wHZmJl7# zXY}`g@Oe<+Da0aK&BY;p-;wa|3!DWFt=AGEy8n{!UkjWAO{Kp-O1Sl6-5##3L)}oGJ!9nH1Kb4i0+VtUoG%@&``hZ2+^IAa1Y)9 z8cO$2i0-9A=fQc<(D&^L(cLI?ZxHx$&`>=e3(>t#!apkTMxo1w=pL2uRe`S%y3r8b zFC_fW0$(X~Cqi^*H|y{90)ej*y15YD#S&gG@FviajP2zix+4jS~KP zfv*v|+e37JFX0~&_*$X++YsGXB>WM9Hw)e0hvAjgtrNNgV22@ME4R2zeeC2h3<19x@#r;MuBev9gQ#l5~90Z!rvuu0W|bI z9t_caTEZU^c#F_I8lwB5g#TLLn}zPN5ZyCdb-ipBc&pI;Bt(~#@Lqwp3EdMRx`Kqy z3%p(E{uH8ntAu+HR|9fCkC^52(c6X2gKrVKr-$f1Ds&#aQ|Mk0qWiSadGIcwyC_8W zf3tTU08SO#{|`l3P$Xc(9uaj>l-Lj(geIVrmAV!rbda(E7C~%5P?n-Z1;v5{L_q;r z6af`AA}Tgq8%0o7Q9(tC6;zb}oXq#Tn|sXNEbBhs`@R1g4d2Y1&zw0^?%bPflKToc z>iyu(RNOn@s1Ja<#jsPK1oyMzmV$c$`V_c76!$vpA3~Rc+pm&yzxoXJ zFQHExE>-#(_FtgO3{=59sw;o{x5PStE;o$K$3cqo!G02Sg<<48Q&VyEVLt=YL!!C@ut!`WCqN6*nFn^=)vUDDFOR)V1KgQrr@7)OW!Bq_|hWQ47HBRoq5!)OW#E ztL)r|z6VEr58R=OtKJIx3-o<(KE<5^JM{x_rz)-`IO>Ps8Y->_IO;lZO%-=NIO=+E zZ54MnIO+y)-4wSF9CahOUW$7i9Q7k`Lln0S9CZ`8(Tdvxj=CA#IK>^&+Rg{{V{msU zt|2(;C*bZ=ToyR$7I1SFmjjMk2yU_BZU;yG6x_3ln-7lq8Ms#zw;CLEE4Tv1Z3RdD z9NZ?wRcvF&kNO3;FBNwTIO><+zE|A&;HcZc?NQv7;HcZdRoTyZTwV{3`W3iZin|{i z^=oj)DDG)+)NjCLDsCM(>JD&cDegyb)NjExR@@<%*m0(Q2d<6c&H+c=39hr^I)J0b z!SzsFA8^#~!Cj-co4`?j05?)`_kyGT2rjI+Mc}AEft#$jRp6*UgS$s@AAqC&0&ceA zz6D3!1#Y3@_Pf;12X!~N<%&BD9Q9Xls}$D&9Q8MFZ!4}XIO^}ruTTT^f*MwFuoLmQLBRMq_`|_)N0_aP+T`~)C0ivRNU3zs0V@@pt!!^sMQT8 z^P8i%G2o~Nfg7c`so94x!|bg77&ScCn)Y2aMYUMrYi0gaMW7h?p0g?II6kj zM55hUiu)2A^$>9L6t@Q)^-yq&6<4L5J&ve{fm^OPA2{ma;9gYRdElt#b{UC&yr#Gg z;HXD{dq;5t!BLL{w_b50!BLL_w?%Pd!BLL}w@q;oa1TL`0k>0ei(sc73vQR?+m(k9XFRK@whQOzxH65PFtyA&MtEO4_F*ApD|Y;f}wHwql}9B_*jHyIqYA-Ls= zn+=Y7F1QyJw;UX`5xCbB_ZB#+-10}xZ|^8>Jvi$5;MObdGjP-k3@7jFZBg7W;HVdZ z+pf48S#}*zF9P?y;!XocHMb{9wELUlE&)ev0RgW~eQQLh2lO>qx^TL2vdu7~1Q!oC_h z7+inFy#@Ox&>@DC^LdWqet>;9bSSvdimTMw&Tmy{4!E(3I~4YM&=9yuifa!0rO;vE z?pEC8u=j@!2lt@ju7`aRbOg9Z6gLa@C!o3Do>1J&uv15ZTdug*!BMXT7gO9?a2ufJ zwuXuMcwKQ@VW*BZTxBzF?cM^*^m@aY z|2-co?hM$^f!+XrpD6A;*c(G{G@SgsyHIh>VQ&XDw{%SOcdO#M!G0C=W^mgS*B|y= zXc*i#iW>|2MCe#>I~8{)?Ds=&0r#Wg9)|sK=s0k@6t@I+>UeO!D{dLMRnS`vC-b{k zacf~;553KBa-3JL=G^ZKVc!a!U^w}Ee09bB2>Wl)JaC6Au0mJ4o~RQImn!WK?l|Zq z!^t{0UioVTJ9V<*WZlZZGWBy4iWT8(c@lalWY243{d^ zgP*gZ(+wxMU@x6c+E~dDnU_Ti;7u@TLI}7$E&_}?% zr?^XD?*@Go+$P2KhCK&558UU9yB_ul(D~rLRovaM&w@S%?ia-^fPFdiad3MT_cHA7 zKo@|^IKa7&Z-RXrbRoE!iu)1vz0gJAj#S(Mm)m(e4*G=QWWPE=ap%C^2D;dAvaU{2 zTo2fy_Yz7VlKhac_g8E=9Xd6!$JT z>eGgk{pDiCtp`V4W;i*H+AHpBaMb1Cx+!iiIO+;;LB)Bmu=7TJ2HZf!9Sx59tl{Lm zKU{J3!BL+BcZ1?C21i{9?l#4B1V?=yTtsnKgQLCx?taDf14n%k++4-wfTPC1J)yW< zaMYK;tx()JaMV@cRw?doaMYKgQLCHG z?9{ix`4x8&IOSl1SDz3s+cHL7y23MdsFF5Ka;674ZZE(~r;67K}Y2c`Z z;J#B_LvYkj!R=OD6L8eez*Vg7JkHyIqizLvpyIlKqkazVFvax)NBshvPjMr`QNILt zisB}KqizFtw&JFPqizS+SaA!$QNIG$T5&OO)UUyHRNM#PsNaCQN^xI-qwWCLPjSD1 zqkao6q__jR+jUC)4%`^U)dol132waNP5?)ZgS$g<4Z%^r2RB1;ZNX8005?Z*y}(g_ z1h-Iex!|Zjfm^1yFgWVZ;9`oq4IK3saBnDX1~}?2!^!pO2Z~z+ZW(m9;pBDqdd0m6 zJM~w?$@f1tEACxz)Zf5;rnpbRQGYj_T;Fe3+-}AN-2-l?;%Z)P*A?{-!%2UCQQV2( zsDFa{RdJ?jsZs;@YY3G$JLUb(J<4Af*n2=L7)av#Q*lFJ9}TStuEIgi{cket)Jotg zD{dM%YGrU$6gLap0_c9=swr+2?9~0iRae|w;HXs$C-1L$755Q1Y6iGN6!#T4YE^Kx z6}Jl9*9)RVzQ6juuzH51%4#nlBztp{#~ z;u?XYo&xSc#kB)RJr!J3alOD%>w}xCxRKzfr-7TVxC!8>r-NIlxLM$+4Z!6qZaFxr zAKX&Ky$z0f2DlZ9+X{|)Cb*S~+Xaq#7Py$=s`j$$fNFkDJaHaet+*q>QO^OlMsfAQ zQ5%ALOK|~k)N{cVD6RuIY9nwTD6TI!>UrQcDDFCN)bqh@R@@|T)C<5BD((Sr)C<9V zuDC_us273TuDBRDYGZIa6!#uDY7=mA#eD&e8UXi`;{E_fZ3=F;;%fG`>xJ43+#bc9 z2#(quoTrBKI`MpP)E3|>EAA3-)Ry2f6n7;!>c!v=RNNqN)K=iUin|FMwKcdy6n7Um zY8!C1754}@>LuWgR@^dh)Jwtn6t@N(wJo^1irWZ|+74W%;=Tn(Z4a)#;wtvB>www; zoL_N=fum-DJ6mz5fumjqu94zefTMNIBFMgtra%~ z9JMRBwu*ZM9JL#`EXBP9j+zawv*JDi_cio#aM_Cc1NH;@+W9lLZ%FL-S1IlU*r`{7 z3o7nxaMY{7^-)|iaMbSL1}H9zaY3&JH&}7QVW;*07gF3U;HW`xxr&<(j@lF4XvIAW zj@k>{4T@UI6t@!`wI8@Ciu3fd^H1#$E~2<2z)=T) zo2Ixkz)=T+o1wTC;HcMtdr)y*!BGc+iz;pyIO$$&=KHXR@}+3Q**(s zQQZ09s3XC>t+=+}sOI)DiT=K)xE_oPI?8bJe%*S-O@MtmbTqh+6*mv|XQAeHH3@%P z755hGpFqce`$};?!(L^89mngz?Nr=xuv2d^oV<_pv*OMKN4*i;uZn99j(QWgKNQy; z9Q9^!6}-;tt3lwXVQ~8?ZVWi;Sa4MpHx(T97Q@MUuCBOQ;O0Ze8BRVgP)l)3V5g2Z zoP1v3NX5Mh?k(u8hD(*+gZ(q;Z7$poupczg&hG@nnYUU!C#ZH$f&Bt#p5f&40(BMF z8TKon6TzLXxEo=gM0JVpUfAbCC%bS}Nyobm1<7{Zi;%F5Km?_lMr?!i|Le2Iw@y$@|`o)VxiCojM)d z1&W&vj(U&bv=W5W0!Oc@#P1vb(4JZ3hzT)bE zqdsCdnYSg1YY2||sNu~2o~4RA9~^Za{4G;lGjP=ThLd&rjN+~aM}5q2vJPHSTt9Hs z$HBd!xS`;v3&6dvxNE^t7b3pRiW>`#x(M9oikkwC`UJQgin|vabuqY~6gLMPH6Pp_ z#VrCyT>`FhP3QT11vu)H;0{#W%iyR_fjdNTYr#>Mf;(Dq8^KYZ23J>cpM#?=16N;h zJHb(xgF9Pszk#E!0C%C{_8Vf4H|jIsS}4v7j`}RPwu(Cn9Q8SHofUTyIOLiZt_BxT+<0)*SHMkI+#TSkuY$W@aWlYCUjsKwadW^?*MOU=xP{=TuY-F` zam&C_-vIZ7;$q;aZ-RSDac_X5z6EZD;ywUJeH+~Kiu(i{buGA6irWs3`VP3)6!!x- zY5};n6t@Q)^<8l9DsKOw_Bf}$2X39>yx^$sgWIIIBf(KW09UBEy5OiEg8M>or-P%e z1NXJ!8iAv(2e(sk&A?GNfcr^tZNX7Dg8Nl*UBOX50{5rlg5ao|z*VZ{JRe;Hj=C9K zhT?L;Q9lM(U2!*oqkaOemg4fjQMZ6QTye9&Q47Hxt+-|2sGov6UU6@OqkabNB*lFW zj=B}xsfzm@9QAW>e#OrH~!RZw;3!RfD}Y z^g9>sIN1HroraU&Rm)cGHif+-G!Cw};(EiL3;iD4P{rK}`#sPf3@6v)*C}ou>?@!@ zf*Y&2*J1w%`V+W`iu(rkJ_0;HxN!Rox8rg+^bZ%V9_;5s|1_M;?_+9Q zE`|Ln=w5J36gLF+o1k(KC0@TNZYu1LLn|0gj<=T-w-)wo(2C$zE3WDY+ux(0mB78G zxKwkQs_Y#2IUl;8@h9&WzfneisoF?Y)&%XfhGv*{W&8?MyO+U!1+*%-4T|dx`(S7_ zaD|E+3HwdZ1Hf%p+yvMo&;!B66?Y%(4@0Yi+pV}ou)hR7$Z+yH-gB_?y#E30pFwMY ztE#x)VW)c0ZY{+fl#BHOtqJZ(#npqITFY><@77UV3vkqf!JVeKtH4nYF`V?bk>Un{ zqaF&bsp7_fqaFtC62(mfM?Ktd@;+fF#YMqUYlFK&aZiJz9$`3Hr#%(-8aV2a;07vg zBRJ|&;D#yg8*tR4!Cj}gKfqCs0XJ50RY%%&Ks^@RM8(wxM?DVQor*gd9MuQzKE*Wz zM?D_gY{j(%N3CNxSuc+%t_wKo3E-YoTwie1x`vZ|?K#EefTNyhIC&lalH#rdM?DGL ztBM;3ZXWbxwEL#w*1{f#W`cWHafe=O=j}LXJ#gz4*8ukB&{M#DthlbQ_kf-XZmZ&k z!9E&VAKX`p%Y%I?^fYig6*m)h>gk3{mF9z60&M_)KP!JP!~Ox(5AJuxZHIji^bBwn z4sq_gHAmTTJ^^|rxGIWk2s`yG!^!?qU2#`}qn-`!5XD^&j(QHbqZBs-9JL|1I*NN1 z9Q9mq^%S=r9JLWRzvA|Qqn-!uT*Vzf+KwOfd~l5wcQH8X1>jmLZV))?h2YvMZU#8& zMc_Iq?iFy<#^A0{+;`xpO~Cb3+yU3w{!#VUjqc#V3 zqvB?PqqYDyUU9F1qqYP$S#dkTQ7;B}m*Nf|W5~ z7K-!UWY+<;Ke$$kI}sdp0JuvOcM&-1Kyd98cNsY9HQ=%oHv}AY5V%f?%LPXr46du< z#(<*^0e89LCV-<31$UL=rh=p9fa{^S2fPT?I6n7{%>b2l<6;}@&briT!in{R51(D()+AyP&s#TdcTBVY^;xLdStyp}1pUr;Z2rlH&Z} z8bfad_lDvwfjt{~8@Trs*9Ug$1aO-bHwxT1XrAFxrKzw#0G;T<&4c|Z=p+~JMcAp6 z4JYg63l-n{;HXo;#TB;=9QAf^zbo!{a5cu-`Mbk#^7onj4|86>oCN!+(5Z%#^;b=C ze%LR7M!+4cxR$VA2EEg8sZw{?2SV?1;YPxK3-oRmZYu1LK&QEI&%ypKbh-<-4fa2v z_qcEe-(tu2Sm?cmlkq!RjY}r%=R#)~PF}~KsJH;^)cfGCzT&dLQSS$Lj^cvgs1JZ^ zthf+3>Vx1~DJ~3-Iul%$;v(Rv4}rT}aZzy8S>SppE*~5<3T}|%V&JH=!R0Eh033A= zxEmE$2#)$NxZ4yL2S=R?ZmQxun{wZZ$aSLU3ypw;ddHk>TWc`#^Cu#@lhG zJ^_CpE3OeZ>SAzP71t9SH6Pqpikk$Ex&+)##XSX%`lR7fr5C_apK{^Wg8LG>)P?&K z_QP(qF5AIRSLnO&cbD?l1NH&X_rTq+xYD*;T5cHH8w33i?aoo{j)Q#) zbRD?I6*nDr>UzV;@%E(RmVl#f0JmImZ-S$4G+g5RtGExrQ9lB=N^v{DQ8$5Gqqv{I zQ8$BItGGYGQ9m}E^!EeB9gt_&AN3RX+o-tXz)`n=+oHI$z)=gqeWAEk;HaO1`$lnB zf}?&0?t8`MfTL~&w@Y#3z)?RpoQ%sKin|*e^$TznYdgB+*JG&l! zsBz;@&Vy$te_Oy&zXx}|;&y_g{s6AI;z}FeZ}3-fqCM_@LVw#Tf7M{G1^pRZXT==} zdmZR6;I2~KDX^aj-36|X;?9S?8FV+e!HT;C_KwhB!R0FM3fOx=e*<@e;;w;xIP`aL z;}tgs_VLg?;HD_<4%lZv{{S~ladTi_2>lb>gNj=Qdknf4++4+#b{)I{Khz55O&>YV z7b<@rf!hkL2yUt3cEJ8Kv=X?Liu)7xDwFK`s|;?n;=HgQ0o@PWTZ$`ff9t?ceP|W< z`#||?2zvmU0dBM6E`hx>v?{pI6?Zl4)M|#4^YjkI4FX3!z;N>V=m*730Y^O$+#ba( z07tEEIPtERY@z`YKwAaQ{SB6f57C_rV zv!Q*UA!s*q{K|uge;>}6Y>x|;@2lpU8?MOrN&jw&(T}+?i}>?FBT((1eTl;!GB;|G zdI57ImXhL$q_OLEm@h;mwUVvUbZdAzIDa5t+aoRq2H3TqGa zv>NGWwE$WO4P0Z(vxZm=4z-%nsVVf1uy#Mxjbk~-D+oRUEu^1Zv^Ub~f7^IPuSLJ0 z9GAc-TONTHLgo9Kk~WNY?$g7j*nL61rzt7xR;T?z*ya0~lGZ5uD%j>O%fwFH$efb`yq~HW+ecI*wmy#;yIqe7CZsV8lT}qm-?B~HQ-?x<1dZM#_57^~< zmXb0iIqkQ?F5j<|^ntSH!!F;elr(p;v;I2R<@=P9woh@|E8Jn@m-{S9nsJBIULSV3 zzmlZ3Q=Rtiu*-dw5-F0}F85QCv{c#0qrTinNz#-%o%Ly#`zJ~2b60A++&4+mg?C$f ztjYd~eQW{z%lAYj`KCGRuZLZ}A1W#8VwdlQO7cy2*8dar<@=zL7ApHGQ|j%aMte(yL^9B()dWsiND9wQZI|C)kW}}P z)OPvZ1xag^-E*fMKl!}{Nqru5*3X1perG{a?Rlx~^7{&s-g2?a?;uDD&v(|(f`9q_ z14(B;=CqH7U4HjK(t(esw#)AwNc!BxF2744Y2^ZE{V4p)?-59fE_B-0z%IW-AnCzH zPJ0}7`TYS&1y4BbwePayE5AD+Y0qM(Jpj9WFIQ655~qCt?DBnFNp8otd=FQW+x{cp zzm?>+zT|tilHAUp@_k!LZs#ZYo~@*nD*ma6U%p=}Df3BZ|DJ|jzE>;BZGVvO(@JvN zALM(ql2$1Ho8X_{V+}p!Y`?opJv;a&jUzmz06skcKIBDr0vRnF6ztQ|0PA2JL}UffA^P^y~1hliTY94GoMLq zm%sB%+O6!9QD6SPpRhmctWUfAT|Z%e&S`%d_2uvRk}{u9ZI{2}OUi!1Y2SkS^7ng5 z+h0s=m%k568vT;fUUj-1|I?v751x%Y&r9bc&+|wCd7c+8MxOh8TjY6O?ub0kgW1UQ zymdA5JP-9jp68Wokmq$&2zg%DU5h-gQ*J<>*KM~T&+9Zh8h`!wz;4myS1J6qiE&aHPaklj z5f|-LuET3o|7oZC@FWMEPxYT%CZ3FR;TTsw;*s|hlan8r&(e$&kJFpbPSJWxc4nTF zi-3!MZRbZ}Mciy~9vnw{{S~6VKAzdHooV7O?ffo999)lgs({(vi{P@qvHc>)b;>$AjlOT#$x8 z6?`7{H|?8#&jAjy$JfpX5*^A@?K!7#Bpn-;+OkAr%L2IfN$h-ypz-Mi(By> zde^?Mln;$Vv);4ih3{L9erVOV&T0VaS&uw41kH!~HdwpvLjdL8jj8SAlH6aC(*_Xn$f zXz(YS_xxhj2lYcE&^Xky3mh~IjX@bt0rG{=NJaZTO&m&&%D#j%Ea$CiHLIFca#58J z9N@GUs=TMV(_Z8U<>7;@J->$4fY-?v>U>S7-CxV*qX(nBwpE!LIkx`Y?;983{W11i z>)(B!J=(_hH+HqvU|*~I`o6J_i+S!B>CQ(!RG9gSJ%8l6TsLQe>waI!oF80|G+ZNa z6&@_vUjSUCG+b+NJ=3(C1+HHjE*spSG#oHb{5?B=%yWz3dB^vIJ%7t*LL}w=X!G-J z)^lV-I}XVHMSLhJuX$nv>EezfPM!w?Kc$YF*Cq5z4PpGUn%eU%IgSt4=}j&i+vPY; z1;^_G`r~y8uZQke9NVLxDEi@cJ=7TW*$=kEJawK++-#5i%Xi^)|5hrFei(Q7XFLAv zFXLdp+o8T(cgutQPNl&jn+>L z8vGP_XaO|qGh2Qz`or-kZF~QzoXm~Pedt@;KhJkoy*rV22|TFm-nf&G{ou@pe{$ws z+!hu4e{u4GUCung;BH$U-;>%-t`%ON$6U@UJU({db+H>qe}R*$INsOcdf@R9-EEH# z9#?VXY5yGU&>xj?q&r{oI7@fl^1*Ss^HwIf{nDJ@{NSpj;TnOfk%j~2$xkz$S-;xx zprZ#JI?2lq5iect+ajZ}H4geX2%|sT{~33>c_ZiA zKkbkepuRnJ993~qRZT-4<_#8C*ZshI>Vl4eP>w>pKUcCS^)JnvgOh9tj3@P&^R>fd}|LvBhai1P!C!F z&AJFYw6L+w2bx%A+*Ij{>>079*6wd+H3lVDsPfU~PJg}@&U{qm>8ISarES;S%Gthd zr>xgg+$Xuu#w*y@W87!i4((rI9k5($1`5($2hpFtzF|D{%kyM|nf7|Z->T&IXM??+ z<3xXKFI>^q=lOj%@)0yR678^kH`RX+(j3R3A^h?E6CF>mQpw|ea4F*{>v+4xt*=iR zH+jxWW0(Gs^WjMVTt50sf1H;%%H_LH$te?=<5B-;la~h*=W8_V1*7f!2gg{AU61?? zR>RQ38*M&tGwje1Gy?U6t=$g|LL*S`SZilIK9y&=o67Gw$b*T$^Kj>XSbzMb>=)-I zJjsrWZ?e_E6z4dFRX%oy)6Vhur!+9twjYlmj=QaLZvI>PQ{c1vs2q1Z_GGWmI^LGc zQsi=!@({{3A4j>*F!GQje7uhJBQFQ|l0eG6C)jeIc`gr0iSoKGt*apWeV~f+D-p{;Mo#z?G$9>a}c37@;BJBJ-u(tF3GCd8) zc%zEb@y61`+Z6TN&$0c!651ci_;QiI4LS`vM{!xvjKpiSI5cav&HLt{92$Gr=0kI> z#-RC+*nIR+tKRumk28VD*zi#i6IbxAwR_%!BH%n|L9eQbcszZq2H$sb#~Mz?jD9OA zzfr}P*6(S`Z)N2-_JK2w()v9nDOU5;Q$hJH{IG0(BgRij;}Bd|HoteK@teQCY<{oA zILL7zb0^=SljPlK{RN=5)O=162aH}1v{SpACo&H7E58jQiGG70IpZy@->Z#}WWNU{ zycYZQZYrDKtBfD%KlcOvy@~PqHS@rOQPRUVcGniYJAXdVti{Q+VE;JU$_$t3~#h2D^W97H9@*DWV8AoaT`ix(WgL&$yp!|lvESul@@GIx# zvCHU@+N_dgU>v~ ze|fD3xer{j-||`ya-TPcUlX&Wzq=mfK5ixYE#rES_d&(4jIAU&CrR?|!ubMfOO2fu zvMg}Xo~B&<@_p9w^82uHDzWmx{mk=+jkgfWurefwQY1IO-aoD1&|c^MTUx(!lH!#x zxKA?Pf^zoDc;(lhlDl5oc;}i*Qjg=ygux2KD@V%g$#^IH^e8U4!drYEmo?mrygtaA3tc+2W{ zo(Wdg0@I%XrJWpFNrsZ+Y%#ZhjeWS@*N~*dI8)<+Y!=`DMIi-OnCV@s`(q z=H{32mUTayjQxS*TVDH_n_tFT*8S{`bn%vPe{l0#6mJ>*%KaV8k|^3A%4{O}OQDedgwu@s@QzTZsL^XJVD{EwBB|%`f9E z>wdOK#amwcnVVn6Th{$-3ibz%Z+Y!!ZhjeWS@*N4>EbQpzT@V%DBd#qmHW_`CE?-t zme+pf=9lr7bw9fq@yf9#e zpg1?b!J2>1uiUptA`F;EdB*GJ_wU9VM!Y=UMjay0%=d9?*>Uh4>>S@LJNyYI`Jc$4 zPR`A*_wc{xcO2rC>t9*F;x@^ZR$>J;cN-?;Xl25IvKBC#!Ae zEdn(rn_Sid&D2BTSLUre{T>FtzH;_k)%cY$;G<|;IU4I1YLG+2g zsrIN%UJ#M!!Rh59z;*gCu@VjDF*%lr7#0 zW)P;B2mM;_=65qswf-W|D3o?;biVyQadfd&`QE8~_d7WSOr}qAfq5?bTXKJBEWB2NZwuy-oQps-%E<=;KH@VRX9zw37u5mUFv3Oq)UT z(EDTr?L?vZF73v#KYEwA?~}40W|~KG8fh}4%!B=L3ur+OsmXuxd)<; z1<-{hDkd(QkB9+5F0V4wL{BJWxwb9Ga>kkE5CUhkTfdy z|C2Sqn2YdFY@9wQ%Y%H9MmbNOSjnKg4Q+r1zh& z9Dnzdob)e|@cU#uPFYO*O4OGzNtHf^o!>hoBm1DFJosn1*4I#9m+Sm_YivK(1X6!L zp8ajEINjfPn*MGtWjseOw(;nGGj7I{0gk_`OuN?D<<*Mz2(jt7!_A!Eqc1?7>*f12 zahEpU{jl!%y-Xd4zqvCG_Jix?VDy*eS{W~YZ;HQXr#T-A&V#>r>(uj}39c!)-58h2 z%Ap_m3NK>b)bDcX^&h^nHb1}Qb;fZ& z>|@Juo#}atp&gz#3+h?khlc%#M~?&j2Vv(vf@(!V?i$6>ACHGn%hc*6xhFLLbi zWE42=e~C@og_YtM+STLY!8%}^bm10{=E%=@%eg*pQvFC*k8zc@-UhU1w%D5`hFeS7 z9_umgNva;pwf<$i6~OsD`c=EGyj|^huwPssA^g6H9uJQ9Lx@M)+1$sl$JFnnBu+Nw zpWUjQ^{7vvK95_LQ$K^?Lw#&{RzItZi{nK< z)D^1z_f>oHnk!XGx8HL9-oFU@g3Emc7#H^&xAPz8^W4qWpWFWJL$JT09|7#&x)0pv z)143esCdn%wq2eNCZe3{u@Ul>u)lKOB**m^09Rdc^4e1p_tVxk>zN5|Lw4%*?{8zv z`TqNE?85_4Kd$Bz#eb37XeV}wbKfDz`7G=CgMMVZv8d;KFi%S-M+wh z?tnjDr|bSRu5`yqsGV~iF)of@FSNt{(oQYyeplM#Bi%m6^^>pqujBI}z~>aF$BF%X z72I}=2lpNJ(~l>5JZabS9vW?rU+#a5kMrVdZ^vEkF)yi62b<5bSx*k)LDp5)f(xR) z2Dx5JJN`W1aG$0>iC@Nke-uQ~zht{SXaAyzhx=3QEZe`)sBmK``=?)TustgKw-f$q zced^5@eZSXJx`4Hy;8>WE4TvqV;oe*vlkrqE!wGUSC6-j+k2Vq566-9c^rI-c5Zyi z?)PJ%w?ZdEZ-?FqoesSZIukk@`UvzfDBIQJ$8xQarOxvY&%>J2`I)Mo?ziTdU!>~s z`i^!teO}em`-5A(cT_zd7j8VuH>!I4yBqCp`h}{e|7Pu0?`Ktye;;wcIp4O_~k?AVH-d)w>->K7852G_nUO}W}+UCgTpW4j+DA4$9sXQm&Frn>S~E|iI|>M_4cplQUS$m?^V^m zlA|pCJJq^oD%UsP7jb)EHHg=X`nYx^VZNT0VnXY+DBDESIqi|ukO#=%S6GH2V8c**~iFsw%L{b9p?AytFTS?;lCL5fpO6%voO>^UUFu7|bCQ2K$KIP1pX9S)7ypv)mz0-t zWG?bDK9av4d1+sM^69#y_#{6Vc{x60?T-U5<0JWzuuHzCc}z&MS2QbZGV)Si^3#&+ z6-<6cl3nt%k(YSnPGgTH<>eD1OOo>P35sWu@|8{gCFEs3<(C#-MPB+V`Ax|4IN*+h> zxxNp?y5ssY-7hh%dBLtz?q?e2{`fXH{+);WDEGy1ce^j?{hsz)P+$Ak`KQ6Ty{=(A z&nr&HE4X<2F9zI1cZjT|JKEc%ImtrhifNPu6>K@*(q3n*K5F zbnmY)?w?dV$!*GW#=Qp|$4meH&WDO_f4_sdNb++IFh_53;&a9o?qTPdTvd3AnE%|x6`c+;oxxS2x9D8o< z*Gf}g>dId3R$q^Muvf{)*D+|XoAD_r*3W91@lSFQ!OMLP= zP!hRE!0~ko+ohel1RU2F$HRIvuU!Y)d6L)F$%*s$E9Qy)PG;o!$hG#oIQkmr`B084 zN%^W=*WVxUb%9|+8eZ3D-apBnZ=z6^Ywe1HzuQiHa>?iKN?1^Tw;dh7&UZus*MYX{ zy!Qbcw;!tQZuu*WLDoQ{o1OFQ#_RI%Oxv#Sp_0dq^>}=99ma-~yq}zm&o^|210Q($ zE2{=)r;eBVqV~(r^TzOZQF81Lk4t`@ms~dEcKLjgZpYUvbzGX$`6>TUJ3Fw^@b!a^ zL+9C_$eexa7eB|6UCMEb?xTO-`*z)N{Q2 zQU7vO^rzwJKb^)Ox8omO;G75D5BgyoS;I??m;A6d?7HFkn%5Dub9}~tD}-M?UmleI z<$MoERZyRP-Sk!!58r&^Jg{CZa=EsjI-W?HcvzqQSf6?7!;D+CLp#T35xCYapV#$` zuyMML&+%-Bj$QO=)s9{VjAs=%9*687_mliI@zhTfPYC0|{uCh3u;=oLQpR^X{PX(x z5yde}{vPll#7#T3h}&$}GhesRPUSiZjVk&0nEj^p)1MVbmdq1#)BNY`@muhM^Ef7d zIbRU`i`!v)JTEiP@vHon?KiKlCjsF4Ay*5W{`@%oQ48O4_Lu90cJH;$<06PW-_O1c z^T5w-vL3ZA;>bfix9gv^@Wb~Lc^+pxJTBIOWB=K2+GA*k)5SP^cybTw>*JE#>4>+H zT7Q4He=Xpb@3V3o*gyFjsibx;9Q(t5b_U1sqCfVF^V7%0AI~HF{7gu3dR(Iz557LN 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 diff --git a/crypto/otp/otp.c b/crypto/otp/otp.c index ddc44081..0dbb7619 100644 --- a/crypto/otp/otp.c +++ b/crypto/otp/otp.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include "../modes/modes_lcl.h" @@ -51,7 +52,7 @@ int OTP_generate(const OTP_PARAMS *params, const void *event, size_t eventlen, OPENSSL_assert(sizeof(time_t) == 8); if (!check_params(params)) { - fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__); + OTPerr(OTP_F_OTP_GENERATE, OTP_R_INVALID_PARAMS); return 0; } @@ -60,7 +61,7 @@ int OTP_generate(const OTP_PARAMS *params, const void *event, size_t eventlen, idlen = 16; } if (!(id = OPENSSL_malloc(idlen))) { - fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__); + OTPerr(OTP_F_OTP_GENERATE, OTP_R_MALLOC_FAILED); goto end; } bzero(id, idlen); @@ -77,32 +78,41 @@ int OTP_generate(const OTP_PARAMS *params, const void *event, size_t eventlen, if (params->type == NID_sm3) { md = EVP_get_digestbynid(params->type); if (!(mdctx = EVP_MD_CTX_create())) { + OTPerr(OTP_F_OTP_GENERATE, ERR_R_EVP_LIB); goto end; } if (!EVP_DigestInit_ex(mdctx, md, NULL)) { + OTPerr(OTP_F_OTP_GENERATE, ERR_R_EVP_LIB); goto end; } if (!EVP_DigestUpdate(mdctx, key, keylen)) { + OTPerr(OTP_F_OTP_GENERATE, ERR_R_EVP_LIB); goto end; } if (!EVP_DigestUpdate(mdctx, id, idlen)) { + OTPerr(OTP_F_OTP_GENERATE, ERR_R_EVP_LIB); goto end; } if (!EVP_DigestFinal_ex(mdctx, s, (unsigned int *)&slen)) { + OTPerr(OTP_F_OTP_GENERATE, ERR_R_EVP_LIB); goto end; } } else if (params->type == NID_sms4_ecb) { cipher = EVP_get_cipherbynid(params->type); if (!(cmctx = CBCMAC_CTX_new())) { + OTPerr(OTP_F_OTP_GENERATE, ERR_R_CBCMAC_LIB); goto end; } if (!CBCMAC_Init(cmctx, key, keylen, cipher, NULL)) { + OTPerr(OTP_F_OTP_GENERATE, ERR_R_CBCMAC_LIB); goto end; } if (!CBCMAC_Update(cmctx, id, idlen)) { + OTPerr(OTP_F_OTP_GENERATE, ERR_R_CBCMAC_LIB); goto end; } if (!CBCMAC_Final(cmctx, s, &slen)) { + OTPerr(OTP_F_OTP_GENERATE, ERR_R_CBCMAC_LIB); goto end; } } else { diff --git a/crypto/otp/otp.h b/crypto/otp/otp.h index 4b3d482f..d050fe61 100644 --- a/crypto/otp/otp.h +++ b/crypto/otp/otp.h @@ -79,9 +79,23 @@ typedef struct OTP_PARAMS_st { int OTP_generate(const OTP_PARAMS *params, const void *event, size_t eventlen, unsigned int *otp, const unsigned char *key, size_t keylen); +/* 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_OTP_strings(void); -#ifdef __cplusplus -extern "C" { +/* Error codes for the OTP functions. */ + +/* Function codes. */ +# define OTP_F_OTP_GENERATE 100 + +/* Reason codes. */ +# define OTP_R_INVALID_PARAMS 101 +# define OTP_R_MALLOC_FAILED 100 + +#ifdef __cplusplus +} #endif #endif - diff --git a/crypto/otp/otp_err.c b/crypto/otp/otp_err.c new file mode 100644 index 00000000..a11572ed --- /dev/null +++ b/crypto/otp/otp_err.c @@ -0,0 +1,94 @@ +/* crypto/otp/otp_err.c */ +/* ==================================================================== + * Copyright (c) 1999-2016 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). + * + */ + +/* + * NOTE: this file was auto generated by the mkerr.pl script: any changes + * made to it will be overwritten when the script next updates this file, + * only reason strings will be preserved. + */ + +#include +#include +#include + +/* BEGIN ERROR CODES */ +#ifndef OPENSSL_NO_ERR + +# define ERR_FUNC(func) ERR_PACK(ERR_LIB_OTP,func,0) +# define ERR_REASON(reason) ERR_PACK(ERR_LIB_OTP,0,reason) + +static ERR_STRING_DATA OTP_str_functs[] = { + {ERR_FUNC(OTP_F_OTP_GENERATE), "OTP_generate"}, + {0, NULL} +}; + +static ERR_STRING_DATA OTP_str_reasons[] = { + {ERR_REASON(OTP_R_INVALID_PARAMS), "invalid params"}, + {ERR_REASON(OTP_R_MALLOC_FAILED), "malloc failed"}, + {0, NULL} +}; + +#endif + +void ERR_load_OTP_strings(void) +{ +#ifndef OPENSSL_NO_ERR + + if (ERR_func_error_string(OTP_str_functs[0].error) == NULL) { + ERR_load_strings(0, OTP_str_functs); + ERR_load_strings(0, OTP_str_reasons); + } +#endif +} diff --git a/engines/e_skf.h b/crypto/paillier/pai_lib.c similarity index 100% rename from engines/e_skf.h rename to crypto/paillier/pai_lib.c diff --git a/crypto/paillier/paillier.h b/crypto/paillier/paillier.h index f168f0bd..489c1d67 100644 --- a/crypto/paillier/paillier.h +++ b/crypto/paillier/paillier.h @@ -26,8 +26,7 @@ int PAILLIER_generate_key(PAILLIER *key, int bits); int PAILLIER_check_key(PAILLIER *key); int PAILLIER_encrypt(BIGNUM *out, const BIGNUM *in, PAILLIER *pub_key); int PAILLIER_decrypt(BIGNUM *out, const BIGNUM *in, PAILLIER *pri_key); -int PAILLIER_ciphertext_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - PAILLIER *pub_key); +int PAILLIER_ciphertext_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, PAILLIER *pub_key); int PAILLIER_ciphertext_scalar_mul(BIGNUM *r, unsigned int k, const BIGNUM *a, PAILLIER *pub_key) diff --git a/crypto/pem/Makefile b/crypto/pem/Makefile index e8173a2c..87267eb8 100644 --- a/crypto/pem/Makefile +++ b/crypto/pem/Makefile @@ -18,10 +18,10 @@ APPS= LIB=$(TOP)/libcrypto.a LIBSRC= pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c \ - pem_x509.c pem_xaux.c pem_oth.c pem_pk8.c pem_pkey.c pvkfmt.c pem_sm2.c + pem_x509.c pem_xaux.c pem_oth.c pem_pk8.c pem_pkey.c pvkfmt.c LIBOBJ= pem_sign.o pem_seal.o pem_info.o pem_lib.o pem_all.o pem_err.o \ - pem_x509.o pem_xaux.o pem_oth.o pem_pk8.o pem_pkey.o pvkfmt.o pem_sm2.o + pem_x509.o pem_xaux.o pem_oth.o pem_pk8.o pem_pkey.o pvkfmt.o SRC= $(LIBSRC) @@ -85,40 +85,46 @@ pem_all.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h pem_all.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h pem_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h pem_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -pem_all.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -pem_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -pem_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -pem_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h -pem_all.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h -pem_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -pem_all.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -pem_all.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -pem_all.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_all.c +pem_all.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +pem_all.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +pem_all.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +pem_all.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +pem_all.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h +pem_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h +pem_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +pem_all.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +pem_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +pem_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +pem_all.o: ../cryptlib.h pem_all.c pem_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h pem_err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h pem_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h pem_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h pem_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pem_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pem_err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -pem_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -pem_err.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h -pem_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -pem_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -pem_err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -pem_err.o: ../../include/openssl/x509_vfy.h pem_err.c +pem_err.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pem_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +pem_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +pem_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h +pem_err.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h +pem_err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +pem_err.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +pem_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +pem_err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +pem_err.o: pem_err.c pem_info.o: ../../e_os.h ../../include/openssl/asn1.h pem_info.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h pem_info.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h pem_info.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h pem_info.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h pem_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pem_info.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pem_info.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +pem_info.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pem_info.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +pem_info.o: ../../include/openssl/opensslconf.h pem_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pem_info.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h pem_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h pem_info.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +pem_info.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h pem_info.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h pem_info.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h pem_info.o: ../cryptlib.h pem_info.c @@ -129,60 +135,65 @@ pem_lib.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h pem_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h pem_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h pem_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pem_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pem_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -pem_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -pem_lib.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h -pem_lib.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h -pem_lib.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h -pem_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -pem_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h -pem_lib.o: ../../include/openssl/ui_compat.h ../../include/openssl/x509.h -pem_lib.o: ../../include/openssl/x509_vfy.h ../asn1/asn1_locl.h ../cryptlib.h -pem_lib.o: pem_lib.c +pem_lib.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pem_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +pem_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +pem_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h +pem_lib.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h +pem_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h +pem_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +pem_lib.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +pem_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +pem_lib.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h +pem_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +pem_lib.o: ../asn1/asn1_locl.h ../cryptlib.h pem_lib.c pem_oth.o: ../../e_os.h ../../include/openssl/asn1.h pem_oth.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h pem_oth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h pem_oth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h pem_oth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -pem_oth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -pem_oth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -pem_oth.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -pem_oth.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h -pem_oth.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h -pem_oth.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h -pem_oth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -pem_oth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -pem_oth.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_oth.c +pem_oth.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +pem_oth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +pem_oth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +pem_oth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +pem_oth.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h +pem_oth.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h +pem_oth.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +pem_oth.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +pem_oth.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +pem_oth.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +pem_oth.o: ../cryptlib.h pem_oth.c pem_pk8.o: ../../e_os.h ../../include/openssl/asn1.h pem_pk8.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h pem_pk8.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h pem_pk8.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h pem_pk8.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -pem_pk8.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -pem_pk8.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -pem_pk8.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -pem_pk8.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h -pem_pk8.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h -pem_pk8.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h -pem_pk8.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -pem_pk8.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -pem_pk8.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -pem_pk8.o: ../cryptlib.h pem_pk8.c +pem_pk8.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +pem_pk8.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +pem_pk8.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +pem_pk8.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +pem_pk8.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h +pem_pk8.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h +pem_pk8.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h +pem_pk8.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pem_pk8.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +pem_pk8.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +pem_pk8.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_pk8.c pem_pkey.o: ../../e_os.h ../../include/openssl/asn1.h pem_pkey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h pem_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h pem_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h pem_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h pem_pkey.o: ../../include/openssl/engine.h ../../include/openssl/err.h -pem_pkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -pem_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -pem_pkey.o: ../../include/openssl/opensslconf.h +pem_pkey.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +pem_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +pem_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h pem_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pem_pkey.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h pem_pkey.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h pem_pkey.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h -pem_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +pem_pkey.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pem_pkey.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h pem_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h pem_pkey.o: ../../include/openssl/x509_vfy.h ../asn1/asn1_locl.h ../cryptlib.h pem_pkey.o: pem_pkey.c @@ -191,14 +202,15 @@ pem_seal.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h pem_seal.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h pem_seal.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h pem_seal.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -pem_seal.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -pem_seal.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -pem_seal.o: ../../include/openssl/opensslconf.h +pem_seal.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +pem_seal.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +pem_seal.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h pem_seal.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pem_seal.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h pem_seal.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h pem_seal.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -pem_seal.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +pem_seal.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pem_seal.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h pem_seal.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h pem_seal.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_seal.c pem_sign.o: ../../e_os.h ../../include/openssl/asn1.h @@ -206,13 +218,14 @@ pem_sign.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h pem_sign.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h pem_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h pem_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -pem_sign.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -pem_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -pem_sign.o: ../../include/openssl/opensslconf.h +pem_sign.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +pem_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +pem_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h pem_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pem_sign.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h pem_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h pem_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +pem_sign.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h pem_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h pem_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h pem_sign.o: ../cryptlib.h pem_sign.c @@ -221,13 +234,14 @@ pem_x509.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h pem_x509.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h pem_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h pem_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -pem_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -pem_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -pem_x509.o: ../../include/openssl/opensslconf.h +pem_x509.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +pem_x509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +pem_x509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h pem_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pem_x509.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h pem_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -pem_x509.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +pem_x509.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pem_x509.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h pem_x509.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h pem_x509.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_x509.c pem_xaux.o: ../../e_os.h ../../include/openssl/asn1.h @@ -235,13 +249,14 @@ pem_xaux.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h pem_xaux.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h pem_xaux.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h pem_xaux.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -pem_xaux.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -pem_xaux.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -pem_xaux.o: ../../include/openssl/opensslconf.h +pem_xaux.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +pem_xaux.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +pem_xaux.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h pem_xaux.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pem_xaux.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h pem_xaux.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -pem_xaux.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +pem_xaux.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pem_xaux.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h pem_xaux.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h pem_xaux.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_xaux.c pvkfmt.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h @@ -250,12 +265,14 @@ pvkfmt.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h pvkfmt.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h pvkfmt.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h pvkfmt.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pvkfmt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pvkfmt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -pvkfmt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -pvkfmt.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h -pvkfmt.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h -pvkfmt.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -pvkfmt.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -pvkfmt.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -pvkfmt.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pvkfmt.c +pvkfmt.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pvkfmt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +pvkfmt.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +pvkfmt.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h +pvkfmt.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h +pvkfmt.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h +pvkfmt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +pvkfmt.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +pvkfmt.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +pvkfmt.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +pvkfmt.o: ../cryptlib.h pvkfmt.c diff --git a/crypto/pem/pem_sm2.c b/crypto/pem/pem_sm2.c deleted file mode 100644 index c50d4cdb..00000000 --- a/crypto/pem/pem_sm2.c +++ /dev/null @@ -1,270 +0,0 @@ -/* crypto/pem/pem_sm2.c */ -/* ==================================================================== - * Copyright (c) 2016 The GmSSL 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 GmSSL Project. - * (http://gmssl.org/)" - * - * 4. The name "GmSSL Project" must not be used to endorse or promote - * products derived from this software without prior written - * permission. For written permission, please contact - * guanzhi1980@gmail.com. - * - * 5. Products derived from this software may not be called "GmSSL" - * nor may "GmSSL" appear in their names without prior written - * permission of the GmSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the GmSSL Project - * (http://gmssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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. - * ==================================================================== - * - */ -/* 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-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). - * - */ - - -#include -#include "cryptlib.h" -#include -#include -#include -#include -#include - - -#ifndef OPENSSL_NO_SM2 -static EC_KEY *pkey_get_sm2key(EVP_PKEY *key, EC_KEY **eckey) -{ - EC_KEY *dtmp; - if (!key) - return NULL; - dtmp = EVP_PKEY_get1_SM2(key); - EVP_PKEY_free(key); - if (!dtmp) - return NULL; - if (eckey) { - EC_KEY_free(*eckey); - *eckey = dtmp; - } -fprintf(stderr, "GMSSL %s %d\n", __FILE__, __LINE__); - - return dtmp; -} - -EC_KEY *PEM_read_bio_SM2PrivateKey(BIO *bp, EC_KEY **key, pem_password_cb *cb, - void *u) -{ - EVP_PKEY *pktmp; - pktmp = PEM_read_bio_PrivateKey(bp, NULL, cb, u); - return pkey_get_sm2key(pktmp, key); /* will free pktmp */ -} - -IMPLEMENT_PEM_rw_const(SM2PKParameters, EC_GROUP, PEM_STRING_SM2PARAMETERS, - ECPKParameters) -# ifdef OPENSSL_FIPS -int PEM_write_bio_SM2PrivateKey(BIO *bp, EC_KEY *x, const EVP_CIPHER *enc, - unsigned char *kstr, int klen, - pem_password_cb *cb, void *u) -{ - if (FIPS_mode()) { - EVP_PKEY *k; - int ret; - k = EVP_PKEY_new(); - if (!k) - return 0; - EVP_PKEY_set1_EC_KEY(k, x); - - ret = PEM_write_bio_PrivateKey(bp, k, enc, kstr, klen, cb, u); - EVP_PKEY_free(k); - return ret; - } else - return PEM_ASN1_write_bio((i2d_of_void *)i2d_ECPrivateKey, - PEM_STRING_SM2PRIVATEKEY, - bp, x, enc, kstr, klen, cb, u); -} - -# ifndef OPENSSL_NO_FP_API -int PEM_write_SM2PrivateKey(FILE *fp, EC_KEY *x, const EVP_CIPHER *enc, - unsigned char *kstr, int klen, - pem_password_cb *cb, void *u) -{ - if (FIPS_mode()) { - EVP_PKEY *k; - int ret; - k = EVP_PKEY_new(); - if (!k) - return 0; - EVP_PKEY_set1_EC_KEY(k, x); - ret = PEM_write_PrivateKey(fp, k, enc, kstr, klen, cb, u); - EVP_PKEY_free(k); - return ret; - } else - return PEM_ASN1_write((i2d_of_void *)i2d_ECPrivateKey, - PEM_STRING_SM2PRIVATEKEY, - fp, x, enc, kstr, klen, cb, u); -} -# endif - -# else - IMPLEMENT_PEM_write_cb(SM2PrivateKey, EC_KEY, PEM_STRING_SM2PRIVATEKEY, - ECPrivateKey) -# endif -IMPLEMENT_PEM_rw(SM2_PUBKEY, EC_KEY, PEM_STRING_PUBLIC, EC_PUBKEY) -# ifndef OPENSSL_NO_FP_API -EC_KEY *PEM_read_SM2PrivateKey(FILE *fp, EC_KEY **eckey, pem_password_cb *cb, - void *u) -{ - EVP_PKEY *pktmp; - pktmp = PEM_read_PrivateKey(fp, NULL, cb, u); - - printf("GMSSL %s %d\n", __FILE__, __LINE__); - - BIO *out = BIO_new_fp(stderr, BIO_NOCLOSE); - EVP_PKEY_print_public(out, pktmp, 0, NULL); - EVP_PKEY_print_private(out, pktmp, 0, NULL); - EVP_PKEY_print_params(out, pktmp, 0, NULL); - - - return pkey_get_sm2key(pktmp, eckey); /* will free pktmp */ -} - -# endif - -#endif - diff --git a/crypto/pkcs12/Makefile b/crypto/pkcs12/Makefile index be5f8c5d..4e2d231b 100644 --- a/crypto/pkcs12/Makefile +++ b/crypto/pkcs12/Makefile @@ -87,39 +87,43 @@ p12_add.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h p12_add.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p12_add.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p12_add.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -p12_add.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -p12_add.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -p12_add.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -p12_add.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h -p12_add.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -p12_add.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -p12_add.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -p12_add.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_add.c +p12_add.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +p12_add.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +p12_add.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +p12_add.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +p12_add.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h +p12_add.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p12_add.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +p12_add.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +p12_add.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +p12_add.o: ../cryptlib.h p12_add.c p12_asn.o: ../../e_os.h ../../include/openssl/asn1.h p12_asn.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h p12_asn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h p12_asn.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h p12_asn.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h p12_asn.o: ../../include/openssl/err.h ../../include/openssl/evp.h -p12_asn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p12_asn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -p12_asn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -p12_asn.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h -p12_asn.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -p12_asn.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -p12_asn.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -p12_asn.o: ../cryptlib.h p12_asn.c +p12_asn.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p12_asn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p12_asn.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +p12_asn.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h +p12_asn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +p12_asn.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +p12_asn.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +p12_asn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +p12_asn.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_asn.c p12_attr.o: ../../e_os.h ../../include/openssl/asn1.h p12_attr.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h p12_attr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p12_attr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p12_attr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -p12_attr.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -p12_attr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -p12_attr.o: ../../include/openssl/opensslconf.h +p12_attr.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +p12_attr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +p12_attr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h p12_attr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h p12_attr.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h p12_attr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p12_attr.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h p12_attr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h p12_attr.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h p12_attr.o: ../cryptlib.h p12_attr.c @@ -128,12 +132,13 @@ p12_crpt.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h p12_crpt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p12_crpt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p12_crpt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -p12_crpt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -p12_crpt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -p12_crpt.o: ../../include/openssl/opensslconf.h +p12_crpt.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +p12_crpt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +p12_crpt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h p12_crpt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h p12_crpt.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h p12_crpt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p12_crpt.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h p12_crpt.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h p12_crpt.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h p12_crpt.o: ../cryptlib.h p12_crpt.c @@ -142,25 +147,28 @@ p12_crt.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h p12_crt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p12_crt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p12_crt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -p12_crt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -p12_crt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -p12_crt.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -p12_crt.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h -p12_crt.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -p12_crt.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -p12_crt.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -p12_crt.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_crt.c +p12_crt.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +p12_crt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +p12_crt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +p12_crt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +p12_crt.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h +p12_crt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p12_crt.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +p12_crt.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +p12_crt.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +p12_crt.o: ../cryptlib.h p12_crt.c p12_decr.o: ../../e_os.h ../../include/openssl/asn1.h p12_decr.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h p12_decr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p12_decr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p12_decr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -p12_decr.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -p12_decr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -p12_decr.o: ../../include/openssl/opensslconf.h +p12_decr.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +p12_decr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +p12_decr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h p12_decr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h p12_decr.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h p12_decr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p12_decr.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h p12_decr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h p12_decr.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h p12_decr.o: ../cryptlib.h p12_decr.c @@ -169,12 +177,13 @@ p12_init.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h p12_init.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p12_init.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p12_init.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -p12_init.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -p12_init.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -p12_init.o: ../../include/openssl/opensslconf.h +p12_init.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +p12_init.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +p12_init.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h p12_init.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h p12_init.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h p12_init.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p12_init.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h p12_init.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h p12_init.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h p12_init.o: ../cryptlib.h p12_init.c @@ -184,25 +193,27 @@ p12_key.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h p12_key.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h p12_key.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h p12_key.o: ../../include/openssl/err.h ../../include/openssl/evp.h -p12_key.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p12_key.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -p12_key.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -p12_key.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h -p12_key.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -p12_key.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -p12_key.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -p12_key.o: ../cryptlib.h p12_key.c +p12_key.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p12_key.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p12_key.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +p12_key.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h +p12_key.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +p12_key.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +p12_key.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +p12_key.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +p12_key.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_key.c p12_kiss.o: ../../e_os.h ../../include/openssl/asn1.h p12_kiss.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h p12_kiss.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p12_kiss.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p12_kiss.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -p12_kiss.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -p12_kiss.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -p12_kiss.o: ../../include/openssl/opensslconf.h +p12_kiss.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +p12_kiss.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +p12_kiss.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h p12_kiss.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h p12_kiss.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h p12_kiss.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p12_kiss.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h p12_kiss.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h p12_kiss.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h p12_kiss.o: ../cryptlib.h p12_kiss.c @@ -212,12 +223,14 @@ p12_mutl.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p12_mutl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p12_mutl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h p12_mutl.o: ../../include/openssl/evp.h ../../include/openssl/hmac.h -p12_mutl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p12_mutl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +p12_mutl.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p12_mutl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p12_mutl.o: ../../include/openssl/opensslconf.h p12_mutl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h p12_mutl.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h p12_mutl.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h -p12_mutl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +p12_mutl.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +p12_mutl.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h p12_mutl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h p12_mutl.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_mutl.c p12_npas.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h @@ -225,12 +238,14 @@ p12_npas.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h p12_npas.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h p12_npas.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h p12_npas.o: ../../include/openssl/err.h ../../include/openssl/evp.h -p12_npas.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -p12_npas.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +p12_npas.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +p12_npas.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +p12_npas.o: ../../include/openssl/opensslconf.h p12_npas.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h p12_npas.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h p12_npas.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h p12_npas.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p12_npas.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h p12_npas.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h p12_npas.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h p12_npas.o: p12_npas.c @@ -239,50 +254,57 @@ p12_p8d.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h p12_p8d.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p12_p8d.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p12_p8d.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -p12_p8d.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -p12_p8d.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -p12_p8d.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -p12_p8d.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h -p12_p8d.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -p12_p8d.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -p12_p8d.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -p12_p8d.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_p8d.c +p12_p8d.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +p12_p8d.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +p12_p8d.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +p12_p8d.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +p12_p8d.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h +p12_p8d.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p12_p8d.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +p12_p8d.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +p12_p8d.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +p12_p8d.o: ../cryptlib.h p12_p8d.c p12_p8e.o: ../../e_os.h ../../include/openssl/asn1.h p12_p8e.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h p12_p8e.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p12_p8e.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p12_p8e.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -p12_p8e.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -p12_p8e.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -p12_p8e.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -p12_p8e.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h -p12_p8e.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -p12_p8e.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -p12_p8e.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -p12_p8e.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_p8e.c +p12_p8e.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +p12_p8e.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +p12_p8e.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +p12_p8e.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +p12_p8e.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h +p12_p8e.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p12_p8e.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +p12_p8e.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +p12_p8e.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +p12_p8e.o: ../cryptlib.h p12_p8e.c p12_utl.o: ../../e_os.h ../../include/openssl/asn1.h p12_utl.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h p12_utl.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h p12_utl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h p12_utl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -p12_utl.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -p12_utl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -p12_utl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -p12_utl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h -p12_utl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -p12_utl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -p12_utl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -p12_utl.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_utl.c +p12_utl.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +p12_utl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +p12_utl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +p12_utl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +p12_utl.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h +p12_utl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +p12_utl.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +p12_utl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +p12_utl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +p12_utl.o: ../cryptlib.h p12_utl.c pk12err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h pk12err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h pk12err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h pk12err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h pk12err.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pk12err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pk12err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -pk12err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -pk12err.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h -pk12err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -pk12err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -pk12err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -pk12err.o: pk12err.c +pk12err.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pk12err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +pk12err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +pk12err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h +pk12err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +pk12err.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pk12err.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +pk12err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +pk12err.o: ../../include/openssl/x509_vfy.h pk12err.c diff --git a/crypto/pkcs7/Makefile b/crypto/pkcs7/Makefile index decf5e02..0e5c3e09 100644 --- a/crypto/pkcs7/Makefile +++ b/crypto/pkcs7/Makefile @@ -95,11 +95,13 @@ pk7_asn1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h pk7_asn1.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h pk7_asn1.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h pk7_asn1.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pk7_asn1.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pk7_asn1.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +pk7_asn1.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pk7_asn1.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +pk7_asn1.o: ../../include/openssl/opensslconf.h pk7_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pk7_asn1.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -pk7_asn1.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +pk7_asn1.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pk7_asn1.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h pk7_asn1.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h pk7_asn1.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pk7_asn1.c pk7_attr.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h @@ -107,13 +109,14 @@ pk7_attr.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h pk7_attr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h pk7_attr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h pk7_attr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -pk7_attr.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -pk7_attr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -pk7_attr.o: ../../include/openssl/opensslconf.h +pk7_attr.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +pk7_attr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +pk7_attr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h pk7_attr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pk7_attr.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h pk7_attr.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -pk7_attr.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +pk7_attr.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pk7_attr.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h pk7_attr.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h pk7_attr.o: ../../include/openssl/x509_vfy.h pk7_attr.c pk7_doit.o: ../../e_os.h ../../include/openssl/asn1.h @@ -122,11 +125,13 @@ pk7_doit.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h pk7_doit.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h pk7_doit.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h pk7_doit.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pk7_doit.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pk7_doit.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +pk7_doit.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pk7_doit.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +pk7_doit.o: ../../include/openssl/opensslconf.h pk7_doit.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pk7_doit.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h pk7_doit.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +pk7_doit.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h pk7_doit.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h pk7_doit.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h pk7_doit.o: ../../include/openssl/x509v3.h ../cryptlib.h pk7_doit.c @@ -135,25 +140,28 @@ pk7_lib.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h pk7_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h pk7_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h pk7_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -pk7_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -pk7_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -pk7_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -pk7_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -pk7_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -pk7_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -pk7_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -pk7_lib.o: ../asn1/asn1_locl.h ../cryptlib.h pk7_lib.c +pk7_lib.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +pk7_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +pk7_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +pk7_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +pk7_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +pk7_lib.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pk7_lib.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +pk7_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +pk7_lib.o: ../../include/openssl/x509_vfy.h ../asn1/asn1_locl.h ../cryptlib.h +pk7_lib.o: pk7_lib.c pk7_mime.o: ../../e_os.h ../../include/openssl/asn1.h pk7_mime.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h pk7_mime.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h pk7_mime.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h pk7_mime.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -pk7_mime.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -pk7_mime.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -pk7_mime.o: ../../include/openssl/opensslconf.h +pk7_mime.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +pk7_mime.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +pk7_mime.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h pk7_mime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pk7_mime.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h pk7_mime.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +pk7_mime.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h pk7_mime.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h pk7_mime.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h pk7_mime.o: ../cryptlib.h pk7_mime.c @@ -163,12 +171,13 @@ pk7_smime.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h pk7_smime.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h pk7_smime.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h pk7_smime.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pk7_smime.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pk7_smime.o: ../../include/openssl/objects.h +pk7_smime.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pk7_smime.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h pk7_smime.o: ../../include/openssl/opensslconf.h pk7_smime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pk7_smime.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -pk7_smime.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +pk7_smime.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pk7_smime.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h pk7_smime.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h pk7_smime.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h pk7_smime.o: ../cryptlib.h pk7_smime.c diff --git a/crypto/rand/Makefile b/crypto/rand/Makefile index df44369a..ff502995 100644 --- a/crypto/rand/Makefile +++ b/crypto/rand/Makefile @@ -105,11 +105,13 @@ rand_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h rand_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h rand_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h rand_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h -rand_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -rand_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +rand_lib.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +rand_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +rand_lib.o: ../../include/openssl/opensslconf.h rand_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h rand_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h rand_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +rand_lib.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h rand_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h rand_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h rand_lib.o: ../cryptlib.h rand_lib.c diff --git a/crypto/rsa/Makefile b/crypto/rsa/Makefile index e292e84d..3d84ce57 100644 --- a/crypto/rsa/Makefile +++ b/crypto/rsa/Makefile @@ -89,12 +89,13 @@ rsa_ameth.o: ../../include/openssl/cms.h ../../include/openssl/crypto.h rsa_ameth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h rsa_ameth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h rsa_ameth.o: ../../include/openssl/err.h ../../include/openssl/evp.h -rsa_ameth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -rsa_ameth.o: ../../include/openssl/objects.h +rsa_ameth.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +rsa_ameth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h rsa_ameth.o: ../../include/openssl/opensslconf.h rsa_ameth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h rsa_ameth.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h rsa_ameth.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +rsa_ameth.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h rsa_ameth.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h rsa_ameth.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h rsa_ameth.o: ../asn1/asn1_locl.h ../cryptlib.h rsa_ameth.c @@ -104,12 +105,13 @@ rsa_asn1.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h rsa_asn1.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h rsa_asn1.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h rsa_asn1.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -rsa_asn1.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -rsa_asn1.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -rsa_asn1.o: ../../include/openssl/opensslconf.h +rsa_asn1.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +rsa_asn1.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +rsa_asn1.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h rsa_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h rsa_asn1.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h rsa_asn1.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +rsa_asn1.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h rsa_asn1.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h rsa_asn1.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h rsa_asn1.o: ../cryptlib.h rsa_asn1.c @@ -127,13 +129,14 @@ rsa_crpt.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h rsa_crpt.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h rsa_crpt.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h rsa_crpt.o: ../../include/openssl/engine.h ../../include/openssl/err.h -rsa_crpt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -rsa_crpt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -rsa_crpt.o: ../../include/openssl/opensslconf.h +rsa_crpt.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +rsa_crpt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +rsa_crpt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h rsa_crpt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h rsa_crpt.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h rsa_crpt.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -rsa_crpt.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +rsa_crpt.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +rsa_crpt.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h rsa_crpt.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h rsa_crpt.o: ../../include/openssl/x509_vfy.h ../cryptlib.h rsa_crpt.c rsa_depr.o: ../../e_os.h ../../include/openssl/asn1.h @@ -176,15 +179,16 @@ rsa_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h rsa_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h rsa_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h rsa_lib.o: ../../include/openssl/engine.h ../../include/openssl/err.h -rsa_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -rsa_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -rsa_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -rsa_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -rsa_lib.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h -rsa_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -rsa_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -rsa_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -rsa_lib.o: ../cryptlib.h rsa_lib.c +rsa_lib.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +rsa_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +rsa_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +rsa_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +rsa_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h +rsa_lib.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h +rsa_lib.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +rsa_lib.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +rsa_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +rsa_lib.o: ../../include/openssl/x509_vfy.h ../cryptlib.h rsa_lib.c rsa_none.o: ../../e_os.h ../../include/openssl/asn1.h rsa_none.o: ../../include/openssl/bio.h ../../include/openssl/bn.h rsa_none.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h @@ -232,12 +236,14 @@ rsa_pmeth.o: ../../include/openssl/cms.h ../../include/openssl/conf.h rsa_pmeth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h rsa_pmeth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h rsa_pmeth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -rsa_pmeth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -rsa_pmeth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +rsa_pmeth.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +rsa_pmeth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +rsa_pmeth.o: ../../include/openssl/objects.h rsa_pmeth.o: ../../include/openssl/opensslconf.h rsa_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h rsa_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h rsa_pmeth.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +rsa_pmeth.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h rsa_pmeth.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h rsa_pmeth.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h rsa_pmeth.o: ../../include/openssl/x509v3.h ../cryptlib.h ../evp/evp_locl.h @@ -269,11 +275,13 @@ rsa_saos.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h rsa_saos.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h rsa_saos.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h rsa_saos.o: ../../include/openssl/err.h ../../include/openssl/evp.h -rsa_saos.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -rsa_saos.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +rsa_saos.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +rsa_saos.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +rsa_saos.o: ../../include/openssl/opensslconf.h rsa_saos.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h rsa_saos.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h rsa_saos.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +rsa_saos.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h rsa_saos.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h rsa_saos.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h rsa_saos.o: ../cryptlib.h rsa_saos.c @@ -283,11 +291,13 @@ rsa_sign.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h rsa_sign.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h rsa_sign.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h rsa_sign.o: ../../include/openssl/err.h ../../include/openssl/evp.h -rsa_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -rsa_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +rsa_sign.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +rsa_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +rsa_sign.o: ../../include/openssl/opensslconf.h rsa_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h rsa_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h rsa_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +rsa_sign.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h rsa_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h rsa_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h rsa_sign.o: ../cryptlib.h rsa_locl.h rsa_sign.c diff --git a/crypto/skf/Makefile b/crypto/skf/Makefile new file mode 100644 index 00000000..c450745e --- /dev/null +++ b/crypto/skf/Makefile @@ -0,0 +1,244 @@ +# +# OpenSSL/crypto/skf/Makefile +# + +DIR= skf +TOP= ../.. +CC= cc +INCLUDES= +CFLAG=-g +MAKEFILE= Makefile +AR= ar r + +CFLAGS= $(INCLUDES) $(CFLAG) + +GENERAL=Makefile +TEST= +APPS= + +LIB=$(TOP)/libcrypto.a +LIBSRC= skf_dev.c skf_token.c skf_dgst.c skf_ec.c skf_enc.c \ + skf_err.c skf_errstr.c skf_handle.c skf_mac.c skf_rand.c \ + skf_rsa.c skf_sesskey.c +LIBOBJ= skf_dev.o skf_token.o skf_dgst.o skf_ec.o skf_enc.o \ + skf_err.o skf_errstr.o skf_handle.o skf_mac.o skf_rand.o \ + skf_rsa.o skf_sesskey.o + +SRC= $(LIBSRC) + +EXHEADER= skf.h skf_ex.h +HEADER= skf_lcl.h $(EXHEADER) + +ALL= $(GENERAL) $(SRC) $(HEADER) + +top: + (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all) + +all: lib + +lib: $(LIBOBJ) + $(AR) $(LIB) $(LIBOBJ) + $(RANLIB) $(LIB) || echo Never mind. + @touch lib + +files: + $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO + +links: + @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER) + @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST) + @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS) + +install: + @[ -n "$(INSTALLTOP)" ] # should be set by top Makefile... + @headerlist="$(EXHEADER)"; for i in $$headerlist ; \ + do \ + (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \ + chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \ + done; + +tags: + ctags $(SRC) + +tests: + +lint: + lint -DLINT $(INCLUDES) $(SRC)>fluff + +depend: + @[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile... + $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC) + +dclean: + $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new + mv -f Makefile.new $(MAKEFILE) + +clean: + rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff + +# DO NOT DELETE THIS LINE -- make depend depends on it. + +skf_dev.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +skf_dev.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h +skf_dev.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h +skf_dev.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +skf_dev.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +skf_dev.o: ../../include/openssl/err.h ../../include/openssl/evp.h +skf_dev.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +skf_dev.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +skf_dev.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +skf_dev.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +skf_dev.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +skf_dev.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h +skf_dev.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +skf_dev.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +skf_dev.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +skf_dev.o: skf_dev.c skf_lcl.h +skf_dgst.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +skf_dgst.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h +skf_dgst.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h +skf_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +skf_dgst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +skf_dgst.o: ../../include/openssl/err.h ../../include/openssl/evp.h +skf_dgst.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +skf_dgst.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +skf_dgst.o: ../../include/openssl/opensslconf.h +skf_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +skf_dgst.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +skf_dgst.o: ../../include/openssl/sha.h ../../include/openssl/skf.h +skf_dgst.o: ../../include/openssl/skf_ex.h ../../include/openssl/sm2.h +skf_dgst.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +skf_dgst.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +skf_dgst.o: ../../include/openssl/x509_vfy.h skf_dgst.c skf_lcl.h +skf_ec.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +skf_ec.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h +skf_ec.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h +skf_ec.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +skf_ec.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +skf_ec.o: ../../include/openssl/err.h ../../include/openssl/evp.h +skf_ec.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +skf_ec.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +skf_ec.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +skf_ec.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +skf_ec.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +skf_ec.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h +skf_ec.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +skf_ec.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +skf_ec.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +skf_ec.o: skf_ec.c skf_lcl.h +skf_enc.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +skf_enc.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h +skf_enc.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h +skf_enc.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +skf_enc.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +skf_enc.o: ../../include/openssl/err.h ../../include/openssl/evp.h +skf_enc.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +skf_enc.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +skf_enc.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +skf_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +skf_enc.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +skf_enc.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h +skf_enc.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +skf_enc.o: ../../include/openssl/sms4.h ../../include/openssl/stack.h +skf_enc.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +skf_enc.o: ../../include/openssl/x509_vfy.h skf_enc.c skf_lcl.h +skf_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +skf_err.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h +skf_err.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h +skf_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +skf_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +skf_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h +skf_err.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +skf_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +skf_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +skf_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +skf_err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +skf_err.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h +skf_err.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +skf_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +skf_err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +skf_err.o: skf_err.c +skf_errstr.o: ../../include/openssl/skf.h skf_errstr.c +skf_handle.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +skf_handle.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h +skf_handle.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h +skf_handle.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +skf_handle.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +skf_handle.o: ../../include/openssl/err.h ../../include/openssl/evp.h +skf_handle.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +skf_handle.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +skf_handle.o: ../../include/openssl/opensslconf.h +skf_handle.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +skf_handle.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +skf_handle.o: ../../include/openssl/sha.h ../../include/openssl/skf.h +skf_handle.o: ../../include/openssl/skf_ex.h ../../include/openssl/sm2.h +skf_handle.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +skf_handle.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +skf_handle.o: ../../include/openssl/x509_vfy.h skf_handle.c skf_lcl.h +skf_mac.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +skf_mac.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h +skf_mac.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h +skf_mac.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +skf_mac.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +skf_mac.o: ../../include/openssl/err.h ../../include/openssl/evp.h +skf_mac.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +skf_mac.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +skf_mac.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +skf_mac.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +skf_mac.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +skf_mac.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h +skf_mac.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +skf_mac.o: ../../include/openssl/sms4.h ../../include/openssl/stack.h +skf_mac.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +skf_mac.o: ../../include/openssl/x509_vfy.h skf_lcl.h skf_mac.c +skf_rand.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +skf_rand.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h +skf_rand.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h +skf_rand.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +skf_rand.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +skf_rand.o: ../../include/openssl/err.h ../../include/openssl/evp.h +skf_rand.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +skf_rand.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +skf_rand.o: ../../include/openssl/opensslconf.h +skf_rand.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +skf_rand.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h +skf_rand.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +skf_rand.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h +skf_rand.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +skf_rand.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +skf_rand.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +skf_rand.o: skf_lcl.h skf_rand.c +skf_rsa.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +skf_rsa.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h +skf_rsa.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h +skf_rsa.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +skf_rsa.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +skf_rsa.o: ../../include/openssl/err.h ../../include/openssl/evp.h +skf_rsa.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +skf_rsa.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +skf_rsa.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +skf_rsa.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +skf_rsa.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h +skf_rsa.o: ../../include/openssl/sha.h ../../include/openssl/skf.h +skf_rsa.o: ../../include/openssl/skf_ex.h ../../include/openssl/sm2.h +skf_rsa.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +skf_rsa.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +skf_rsa.o: ../../include/openssl/x509_vfy.h skf_lcl.h skf_rsa.c +skf_sesskey.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +skf_sesskey.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h +skf_sesskey.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h +skf_sesskey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +skf_sesskey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +skf_sesskey.o: ../../include/openssl/err.h ../../include/openssl/evp.h +skf_sesskey.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +skf_sesskey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +skf_sesskey.o: ../../include/openssl/opensslconf.h +skf_sesskey.o: ../../include/openssl/opensslv.h +skf_sesskey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +skf_sesskey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +skf_sesskey.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h +skf_sesskey.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +skf_sesskey.o: ../../include/openssl/sms4.h ../../include/openssl/stack.h +skf_sesskey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +skf_sesskey.o: ../../include/openssl/x509_vfy.h skf_lcl.h skf_sesskey.c +skf_token.o: ../../include/openssl/skf.h skf_token.c diff --git a/crypto/skf/skf.h b/crypto/skf/skf.h index c63d1627..5e11b404 100644 --- a/crypto/skf/skf.h +++ b/crypto/skf/skf.h @@ -48,7 +48,9 @@ * ==================================================================== * */ - +/* This header file is from the official specification with minor + * modification. + */ #ifndef HEADER_SKF_H #define HEADER_SKF_H @@ -150,7 +152,7 @@ typedef HANDLE HCONTAINER; extern "C" { #endif - + typedef struct Struct_Version{ BYTE major; BYTE minor; @@ -247,12 +249,12 @@ typedef struct Struct_FILEATTRIBUTE { ULONG WriteRights; } FILEATTRIBUTE, *PFILEATTRIBUTE; - + ULONG DEVAPI SKF_WaitForDevEvent(LPSTR szDevName, ULONG *pulDevNameLen, ULONG *pulEvent); -ULONG DEVAPI SKF_CancelWaitForDevEvent(); +ULONG DEVAPI SKF_CancelWaitForDevEvent(void); ULONG DEVAPI SKF_EnumDev(BOOL bPresent, LPSTR szNameList, @@ -305,39 +307,39 @@ ULONG DEVAPI SKF_ChangePIN(HAPPLICATION hApplication, LONG DEVAPI SKF_GetPINInfo(HAPPLICATION hApplication, ULONG ulPINType, - ULONG *pulMaxRetryCount, - ULONG *pulRemainRetryCount, + ULONG *pulMaxRetryCount, + ULONG *pulRemainRetryCount, BOOL *pbDefaultPin); ULONG DEVAPI SKF_VerifyPIN(HAPPLICATION hApplication, ULONG ulPINType, - LPSTR szPIN, + LPSTR szPIN, ULONG *pulRetryCount); ULONG DEVAPI SKF_UnblockPIN(HAPPLICATION hApplication, LPSTR szAdminPIN, - LPSTR szNewUserPIN, + LPSTR szNewUserPIN, ULONG *pulRetryCount); ULONG DEVAPI SKF_ClearSecureState(HAPPLICATION hApplication); ULONG DEVAPI SKF_CreateApplication(DEVHANDLE hDev, LPSTR szAppName, - LPSTR szAdminPin, + LPSTR szAdminPin, DWORD dwAdminPinRetryCount, - LPSTR szUserPin, + LPSTR szUserPin, DWORD dwUserPinRetryCount, - DWORD dwCreateFileRights, + DWORD dwCreateFileRights, HAPPLICATION *phApplication); ULONG DEVAPI SKF_EnumApplication(DEVHANDLE hDev, LPSTR szAppName, ULONG *pulSize); -ULONG DEVAPI SKF_DeleteApplication(DEVHANDLE hDev, +ULONG DEVAPI SKF_DeleteApplication(DEVHANDLE hDev, LPSTR szAppName); -ULONG DEVAPI SKF_OpenApplication(DEVHANDLE hDev, +ULONG DEVAPI SKF_OpenApplication(DEVHANDLE hDev, LPSTR szAppName, HAPPLICATION *phApplication); @@ -345,14 +347,14 @@ ULONG DEVAPI SKF_CloseApplication(HAPPLICATION hApplication); ULONG DEVAPI SKF_CreateFile(HAPPLICATION hApplication, LPSTR szFileName, - ULONG ulFileSize, + ULONG ulFileSize, ULONG ulReadRights, ULONG ulWriteRights); ULONG DEVAPI SKF_DeleteFile(HAPPLICATION hApplication, LPSTR szFileName); -ULONG DEVAPI SKF_EnumFiles(HAPPLICATION hApplication, +ULONG DEVAPI SKF_EnumFiles(HAPPLICATION hApplication, LPSTR szFileList, ULONG *pulSize); @@ -362,14 +364,14 @@ ULONG DEVAPI SKF_GetFileInfo(HAPPLICATION hApplication, ULONG DEVAPI SKF_ReadFile(HAPPLICATION hApplication, LPSTR szFileName, - ULONG ulOffset, - ULONG ulSize, - BYTE *pbOutData, + ULONG ulOffset, + ULONG ulSize, + BYTE *pbOutData, ULONG *pulOutLen); -ULONG DEVAPI SKF_WriteFile(HAPPLICATION hApplication, +ULONG DEVAPI SKF_WriteFile(HAPPLICATION hApplication, LPSTR szFileName, - ULONG ulOffset, + ULONG ulOffset, BYTE *pbData, ULONG ulSize); @@ -377,7 +379,7 @@ ULONG DEVAPI SKF_CreateContainer(HAPPLICATION hApplication, LPSTR szContainerName, HCONTAINER *phContainer); -ULONG DEVAPI SKF_DeleteContainer(HAPPLICATION hApplication, +ULONG DEVAPI SKF_DeleteContainer(HAPPLICATION hApplication, LPSTR szContainerName); ULONG DEVAPI SKF_EnumContainer(HAPPLICATION hApplication, @@ -399,7 +401,7 @@ ULONG DEVAPI SKF_CloseContainer(HCONTAINER hContainer); ULONG DEVAPI SKF_GetContainerType(HCONTAINER hContainer, ULONG *pulContainerType); -ULONG DEVAPI SKF_ImportCertificate(HCONTAINER hContainer, +ULONG DEVAPI SKF_ImportCertificate(HCONTAINER hContainer, BOOL bExportSignKey, BYTE *pbCert, ULONG ulCertLen); @@ -409,7 +411,7 @@ ULONG DEVAPI SKF_ExportCertificate(HCONTAINER hContainer, BYTE *pbCert, ULONG *pulCertLen); -ULONG DEVAPI SKF_ExportPublicKey(HCONTAINER hContainer, +ULONG DEVAPI SKF_ExportPublicKey(HCONTAINER hContainer, BOOL bSignFlag, BYTE *pbBlob, ULONG *pulBlobLen); @@ -418,42 +420,42 @@ ULONG DEVAPI SKF_GenRandom(DEVHANDLE hDev, BYTE *pbRandom, ULONG ulRandomLen); -ULONG DEVAPI SKF_GenExtRSAKey(DEVHANDLE hDev, +ULONG DEVAPI SKF_GenExtRSAKey(DEVHANDLE hDev, ULONG ulBitsLen, RSAPRIVATEKEYBLOB *pBlob); -ULONG DEVAPI SKF_GenRSAKeyPair(HCONTAINER hContainer, +ULONG DEVAPI SKF_GenRSAKeyPair(HCONTAINER hContainer, ULONG ulBitsLen, RSAPUBLICKEYBLOB *pBlob); -ULONG DEVAPI SKF_ImportRSAKeyPair(HCONTAINER hContainer, +ULONG DEVAPI SKF_ImportRSAKeyPair(HCONTAINER hContainer, ULONG ulSymAlgId, BYTE *pbWrappedKey, ULONG ulWrappedKeyLen, BYTE *pbEncryptedData, ULONG ulEncryptedDataLen); -ULONG DEVAPI SKF_RSASignData(HCONTAINER hContainer, +ULONG DEVAPI SKF_RSASignData(HCONTAINER hContainer, BYTE *pbData, ULONG ulDataLen, BYTE *pbSignature, ULONG *pulSignLen); -ULONG DEVAPI SKF_RSAVerify(DEVHANDLE hDev, +ULONG DEVAPI SKF_RSAVerify(DEVHANDLE hDev, RSAPUBLICKEYBLOB *pRSAPubKeyBlob, BYTE *pbData, ULONG ulDataLen, - BYTE *pbSignature, + BYTE *pbSignature, ULONG ulSignLen); -ULONG DEVAPI SKF_RSAExportSessionKey(HCONTAINER hContainer, +ULONG DEVAPI SKF_RSAExportSessionKey(HCONTAINER hContainer, ULONG ulAlgId, RSAPUBLICKEYBLOB *pPubKey, BYTE *pbData, ULONG *pulDataLen, HANDLE *phSessionKey); -ULONG DEVAPI SKF_ExtRSAPubKeyOperation(DEVHANDLE hDev, +ULONG DEVAPI SKF_ExtRSAPubKeyOperation(DEVHANDLE hDev, RSAPUBLICKEYBLOB *pRSAPubKeyBlob, BYTE *pbInput, ULONG ulInputLen, @@ -482,7 +484,7 @@ ULONG DEVAPI SKF_ECCSignData(HCONTAINER hContainer, ULONG DEVAPI SKF_ECCVerify(DEVHANDLE hDev, ECCPUBLICKEYBLOB *pECCPubKeyBlob, BYTE *pbData, - ULONG ulDataLen, + ULONG ulDataLen, ECCSIGNATUREBLOB *pSignature); ULONG DEVAPI SKF_ECCExportSessionKey(HCONTAINER hContainer, @@ -522,7 +524,7 @@ ULONG DEVAPI SKF_GenerateAgreementDataWithECC(HCONTAINER hContainer, ULONG ulIDLen, HANDLE *phAgreementHandle); -ULONG DEVAPI SKF_GenerateAgreementDataAndKeyWithECC(HANDLE hContainer, +ULONG DEVAPI SKF_GenerateAgreementDataAndKeyWithECC(HANDLE hContainer, ULONG ulAlgId, ECCPUBLICKEYBLOB *pSponsorECCPubKeyBlob, ECCPUBLICKEYBLOB *pSponsorTempECCPubKeyBlob, @@ -540,13 +542,13 @@ ULONG DEVAPI SKF_GenerateKeyWithECC(HANDLE hAgreementHandle, ULONG ulIDLen, HANDLE *phKeyHandle); -ULONG DEVAPI SKF_ImportSessionKey(HCONTAINER hContainer, +ULONG DEVAPI SKF_ImportSessionKey(HCONTAINER hContainer, ULONG ulAlgId, BYTE *pbWrapedData, ULONG ulWrapedLen, HANDLE *phKey); -ULONG DEVAPI SKF_SetSymmKey(DEVHANDLE hDev, +ULONG DEVAPI SKF_SetSymmKey(DEVHANDLE hDev, BYTE *pbKey, ULONG ulAlgID, HANDLE *phKey); @@ -570,39 +572,39 @@ ULONG DEVAPI SKF_EncryptFinal(HANDLE hKey, BYTE *pbEncryptedData, ULONG *pulEncryptedDataLen); -ULONG DEVAPI SKF_DecryptInit(HANDLE hKey, +ULONG DEVAPI SKF_DecryptInit(HANDLE hKey, BLOCKCIPHERPARAM DecryptParam); -ULONG DEVAPI SKF_Decrypt(HANDLE hKey, +ULONG DEVAPI SKF_Decrypt(HANDLE hKey, BYTE *pbEncryptedData, ULONG ulEncryptedLen, BYTE *pbData, ULONG *pulDataLen); -ULONG DEVAPI SKF_DecryptUpdate(HANDLE hKey, +ULONG DEVAPI SKF_DecryptUpdate(HANDLE hKey, BYTE *pbEncryptedData, ULONG ulEncryptedLen, BYTE *pbData, ULONG *pulDataLen); -ULONG DEVAPI SKF_DecryptFinal(HANDLE hKey, +ULONG DEVAPI SKF_DecryptFinal(HANDLE hKey, BYTE *pbDecryptedData, ULONG *pulDecryptedDataLen); -ULONG DEVAPI SKF_DigestInit(DEVHANDLE hDev, +ULONG DEVAPI SKF_DigestInit(DEVHANDLE hDev, ULONG ulAlgID, ECCPUBLICKEYBLOB *pPubKey, BYTE *pbID, ULONG ulIDLen, HANDLE *phHash); -ULONG DEVAPI SKF_Digest(HANDLE hHash, +ULONG DEVAPI SKF_Digest(HANDLE hHash, BYTE *pbData, ULONG ulDataLen, BYTE *pbHashData, ULONG *pulHashLen); -ULONG DEVAPI SKF_DigestUpdate(HANDLE hHash, +ULONG DEVAPI SKF_DigestUpdate(HANDLE hHash, BYTE *pbData, ULONG ulDataLen); @@ -631,7 +633,6 @@ ULONG DEVAPI SKF_MacFinal(HANDLE hMac, ULONG DEVAPI SKF_CloseHandle(HANDLE hHandle); - #define SAR_OK 0x00000000 #define SAR_FAIL 0x0A000001 #define SAR_UNKNOWNERR 0x0A000002 @@ -660,7 +661,6 @@ ULONG DEVAPI SKF_CloseHandle(HANDLE hHandle); #define SAR_RSADECERR 0x0A000019 #define SAR_HASHNOTEQUALERR 0x0A00001A #define SAR_KEYNOTFOUNTERR 0x0A00001B -#define SAR_KEYNOTFOUNDERR 0x0A00001B #define SAR_CERTNOTFOUNTERR 0x0A00001C #define SAR_NOTEXPORTERR 0x0A00001D #define SAR_DECRYPTPADERR 0x0A00001E diff --git a/crypto/skf/skf_dev.c b/crypto/skf/skf_dev.c new file mode 100644 index 00000000..ef446010 --- /dev/null +++ b/crypto/skf/skf_dev.c @@ -0,0 +1,135 @@ +/* crypto/skf/skf_dev.c */ +/* ==================================================================== + * Copyright (c) 2015-2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 +#include +#include +#include +#include "skf_lcl.h" + +#define DEV_NAME "pseudo_dev" +#define DEV_NAME_LIST DEV_NAME"\0" + + +ULONG DEVAPI SKF_EnumDev(BOOL bPresent, + LPSTR szNameList, + ULONG *pulSize) +{ + if (!szNameList) { + *pulSize = sizeof(DEV_NAME_LIST); + return SAR_OK; + } + + if (*pulSize < sizeof(DEV_NAME_LIST)) { + return SAR_FAIL; + } + + memcpy(szNameList, DEV_NAME_LIST, sizeof(DEV_NAME_LIST)); + return SAR_OK; +} + +ULONG DEVAPI SKF_ConnectDev(LPSTR szName, + DEVHANDLE *phDev) +{ + return SAR_OK; +} + +ULONG DEVAPI SKF_DisConnectDev(DEVHANDLE hDev) +{ + return SAR_OK; +} + +ULONG DEVAPI SKF_GetDevState(LPSTR szDevName, + ULONG *pulDevState) +{ + if (!pulDevState) { + SKFerr(SKF_F_SKF_GETDEVSTATE, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + *pulDevState = DEV_PRESENT_STATE; + return SAR_OK; +} + +ULONG DEVAPI SKF_GetDevInfo(DEVHANDLE hDev, + DEVINFO *pDevInfo) +{ + DEVINFO devInfo; + + if (!pDevInfo) { + SKFerr(SKF_F_SKF_GETDEVINFO, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + bzero(&devInfo, sizeof(DEVINFO)); + devInfo.Version.major = 1; + devInfo.Version.minor = 0; + strcpy((char *)&devInfo.Manufacturer, "GmSSL Project (http://gmssl.org)"); + strcpy((char *)&devInfo.Issuer, "GmSSL Project (http://gmssl.org)"); + strcpy((char *)&devInfo.Label, "SKF Softotken"); + strcpy((char *)&devInfo.SerialNumber, "1"); + devInfo.HWVersion.major = 1; + devInfo.HWVersion.minor = 0; + devInfo.FirmwareVersion.major = 1; + devInfo.FirmwareVersion.minor = 0; + devInfo.AlgSymCap = 0x0000041F; + devInfo.AlgAsymCap = 0x00030700; + devInfo.AlgHashCap = 0x00000007; + devInfo.DevAuthAlgId = SGD_SM4_CBC; + devInfo.TotalSpace = 0; + devInfo.FreeSpace = 0; + devInfo.MaxECCBufferSize = 0; /* FIXME: max inlen of ECC encrypt */ + devInfo.MaxBufferSize = 0; /* FIXME: max inlen of SM4 encrypt */ + + memcpy(pDevInfo, &devInfo, sizeof(DEVINFO)); + return SAR_OK; +} + diff --git a/crypto/skf/skf_dgst.c b/crypto/skf/skf_dgst.c new file mode 100644 index 00000000..f9dec0d7 --- /dev/null +++ b/crypto/skf/skf_dgst.c @@ -0,0 +1,235 @@ +/* crypto/skf/skf_dgst.c */ +/* ==================================================================== + * Copyright (c) 2015-2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 +#include +#include +#include +#include "skf_lcl.h" + + +ULONG DEVAPI SKF_DigestInit(DEVHANDLE hDev, + ULONG ulAlgID, + ECCPUBLICKEYBLOB *pPubKey, + BYTE *pbID, + ULONG ulIDLen, + HANDLE *phHash) +{ + ULONG ret = SAR_FAIL; + const EVP_MD *md; + EVP_MD_CTX *mdctx = NULL; + EC_KEY *ec_key = NULL; + SKF_HANDLE *handle; + unsigned char dgst[EVP_MAX_MD_SIZE]; + unsigned int dgstlen = 0; + + switch (ulAlgID) { + case SGD_SM3: + md = EVP_sm3(); + break; + case SGD_SHA1: + md = EVP_sha1(); + break; + case SGD_SHA256: + md = EVP_sha256(); + break; + default: + SKFerr(SKF_F_SKF_DIGESTINIT, SKF_R_INVALID_ALGID); + return SAR_INVALIDPARAMERR; + } + + if (!(mdctx = EVP_MD_CTX_create())) { + SKFerr(SKF_F_SKF_DIGESTINIT, SKF_R_MALLOC_FAILED); + return SAR_FAIL; + } + + if (!EVP_DigestInit_ex(mdctx, md, NULL)) { + SKFerr(SKF_F_SKF_DIGESTINIT, ERR_R_EVP_LIB); + goto end; + } + + if (pPubKey) { + + if (!(ec_key = EC_KEY_new_from_ECCPUBLICKEYBLOB(pPubKey))) { + SKFerr(SKF_F_SKF_DIGESTINIT, SKF_R_INVALID_BLOB); + ret = SAR_INVALIDPARAMERR; + goto end; + } + + if (pbID) { + if (ulIDLen <= 0 || ulIDLen > SM2_MAX_ID_LENGTH) { + SKFerr(SKF_F_SKF_DIGESTINIT, SKF_R_INVALID_ID_LENGTH); + ret = SAR_INVALIDPARAMERR; + goto end; + } + + OPENSSL_assert(strlen((char *)pbID) == ulIDLen); + if (!SM2_set_id(ec_key, (char *)pbID)) { + SKFerr(SKF_F_SKF_DIGESTINIT, ERR_R_SM2_LIB); + ret = SAR_FAIL; + goto end; + } + } + + dgstlen = sizeof(dgst); + if (!SM2_compute_id_digest(md, dgst, &dgstlen, ec_key)) { + SKFerr(SKF_F_SKF_DIGESTINIT, ERR_R_SM2_LIB); + goto end; + } + + if (!EVP_DigestUpdate(mdctx, dgst, dgstlen)) { + goto end; + } + + } else { + if (pbID) { + SKFerr(SKF_F_SKF_DIGESTINIT, SKF_R_NO_PUBLIC_KEY); + ret = SAR_INVALIDPARAMERR; + goto end; + } + } + + if (!(handle = SKF_HANDLE_new(SKF_HASH_HANDLE))) { + SKFerr(SKF_F_SKF_DIGESTINIT, SKF_R_MALLOC_FAILED); + ret = SAR_MEMORYERR; + goto end; + } + + handle->u.md_ctx = mdctx; + mdctx = NULL; + + ret = SAR_OK; + +end: + EVP_MD_CTX_destroy(mdctx); + EC_KEY_free(ec_key); + return ret; +} + + +ULONG DEVAPI SKF_DigestUpdate(HANDLE hHash, + BYTE *pbData, + ULONG ulDataLen) +{ + EVP_MD_CTX *md_ctx; + + if (!(md_ctx = SKF_HANDLE_get_md_ctx(hHash))) { + SKFerr(SKF_F_SKF_DIGESTUPDATE, SKF_R_INVALID_HASH_HANDLE); + return SAR_INVALIDPARAMERR; + } + + if (!pbData) { + SKFerr(SKF_F_SKF_DIGESTUPDATE, SKF_R_INVALID_ARGUMENTS); + return SAR_INVALIDPARAMERR; + } + + if (ulDataLen == 0) { + return SAR_OK; + } + + if (!EVP_DigestUpdate(md_ctx, pbData, ulDataLen)) { + SKFerr(SKF_F_SKF_DIGESTUPDATE, ERR_R_EVP_LIB); + return SAR_FAIL; + } + + return SAR_OK; +} + +ULONG DEVAPI SKF_DigestFinal(HANDLE hHash, + BYTE *pHashData, + ULONG *pulHashLen) +{ + EVP_MD_CTX *mdctx; + + if (!(mdctx = SKF_HANDLE_get_md_ctx(hHash))) { + SKFerr(SKF_F_SKF_DIGESTFINAL, SKF_R_INVALID_HANDLE); + return SAR_INVALIDPARAMERR; + } + + if (!pulHashLen) { + SKFerr(SKF_F_SKF_DIGESTFINAL, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + if (!EVP_DigestFinal_ex(mdctx, pHashData, pulHashLen)) { + SKFerr(SKF_F_SKF_DIGESTFINAL, ERR_R_EVP_LIB); + return SAR_FAIL; + } + + if (!SKF_HANDLE_free(hHash)) { + SKFerr(SKF_F_SKF_DIGESTFINAL, SKF_R_FREE_HANDLE_FAILED); + return SAR_FAIL; + } + + return SAR_OK; +} + +ULONG DEVAPI SKF_Digest(HANDLE hHash, + BYTE *pbData, + ULONG ulDataLen, + BYTE *pbHashData, + ULONG *pulHashLen) +{ + ULONG rv; + + if ((rv = SKF_DigestUpdate(hHash, pbData, ulDataLen)) != SAR_OK) { + SKFerr(SKF_F_SKF_DIGEST, ERR_R_SKF_LIB); + return rv; + } + + if ((rv = SKF_DigestFinal(hHash, pbHashData, pulHashLen)) != SAR_OK) { + SKFerr(SKF_F_SKF_DIGEST, ERR_R_SKF_LIB); + return rv; + } + + return SAR_OK; +} + diff --git a/crypto/skf/skf_ec.c b/crypto/skf/skf_ec.c new file mode 100644 index 00000000..9c3f8c43 --- /dev/null +++ b/crypto/skf/skf_ec.c @@ -0,0 +1,690 @@ +/* crypto/skf/skf_ec.c */ +/* ==================================================================== + * Copyright (c) 2015-2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 +#include +#include +#include +#include +#include "skf_lcl.h" + + +ULONG DEVAPI SKF_ExtECCSign(DEVHANDLE hDev, + ECCPRIVATEKEYBLOB *pECCPriKeyBlob, + BYTE *pbData, + ULONG ulDataLen, + ECCSIGNATUREBLOB *pSignature) +{ + ULONG ret = SAR_FAIL; + EC_KEY *ec_key = NULL; + ECDSA_SIG *sig = NULL; + + if (!pECCPriKeyBlob || !pbData || !pSignature) { + SKFerr(SKF_F_SKF_EXTECCSIGN, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + if (ulDataLen != SM3_DIGEST_LENGTH) { + SKFerr(SKF_F_SKF_EXTECCSIGN, SKF_R_INVALID_DIGEST_LENGTH); + return SAR_INVALIDPARAMERR; + } + + if (!(ec_key = EC_KEY_new_from_ECCPRIVATEKEYBLOB(pECCPriKeyBlob))) { + SKFerr(SKF_F_SKF_EXTECCSIGN, SKF_R_INVALID_ECC_PRIVATE_KEY); + goto end; + } + + if (!(sig = SM2_do_sign(pbData, (int)ulDataLen, ec_key))) { + SKFerr(SKF_F_SKF_EXTECCSIGN, SKF_R_SIGN_FAILED); + goto end; + } + + if (!ECDSA_SIG_get_ECCSIGNATUREBLOB(sig, pSignature)) { + SKFerr(SKF_F_SKF_EXTECCSIGN, SKF_R_ENCODE_SIGNATURE_FAILED); + goto end; + } + + ret = SAR_OK; +end: + EC_KEY_free(ec_key); + ECDSA_SIG_free(sig); + return ret; +} + +ULONG DEVAPI SKF_ExtECCVerify(DEVHANDLE hDev, + ECCPUBLICKEYBLOB *pECCPubKeyBlob, + BYTE *pbData, + ULONG ulDataLen, + ECCSIGNATUREBLOB *pSignature) +{ + ULONG ret = SAR_FAIL; + EC_KEY *ec_key = NULL; + ECDSA_SIG *sig = NULL; + + if (!pECCPubKeyBlob || !pbData || pSignature) { + SKFerr(SKF_F_SKF_EXTECCVERIFY, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + if (ulDataLen != SM3_DIGEST_LENGTH) { + SKFerr(SKF_F_SKF_EXTECCVERIFY, SKF_R_INVALID_DIGEST_LENGTH); + return SAR_INVALIDPARAMERR; + } + + if (!(ec_key = EC_KEY_new_from_ECCPUBLICKEYBLOB(pECCPubKeyBlob))) { + SKFerr(SKF_F_SKF_EXTECCVERIFY, SKF_R_INVALID_ECC_PUBLIC_KEY); + goto end; + } + + if (!(sig = ECDSA_SIG_new_from_ECCSIGNATUREBLOB(pSignature))) { + SKFerr(SKF_F_SKF_EXTECCVERIFY, SKF_R_INVALID_SIGNATURE); + goto end; + } + + if (1 != SM2_do_verify(pbData, (int)ulDataLen, sig, ec_key)) { + SKFerr(SKF_F_SKF_EXTECCVERIFY, SKF_R_VERIFY_NOT_PASS); + goto end; + } + + ret = SAR_OK; + +end: + EC_KEY_free(ec_key); + ECDSA_SIG_free(sig); + return ret; +} + +ULONG DEVAPI SKF_ECCVerify(DEVHANDLE hDev, + ECCPUBLICKEYBLOB *pECCPubKeyBlob, + BYTE *pbData, + ULONG ulDataLen, + ECCSIGNATUREBLOB *pSignature) +{ + return SKF_ExtECCVerify(hDev, pECCPubKeyBlob, pbData, ulDataLen, pSignature); +} + +ULONG DEVAPI SKF_ExtECCEncrypt(DEVHANDLE hDev, + ECCPUBLICKEYBLOB *pECCPubKeyBlob, + BYTE *pbPlainText, + ULONG ulPlainTextLen, + ECCCIPHERBLOB *pCipherText) +{ + ULONG ret = SAR_FAIL; + EC_KEY *ec_key = NULL; + SM2_CIPHERTEXT_VALUE *cv = NULL; + SM2_ENC_PARAMS params; + + if (!pECCPubKeyBlob || !pbPlainText || !pCipherText) { + SKFerr(SKF_F_SKF_EXTECCENCRYPT, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + if (ulPlainTextLen <= 0) { + SKFerr(SKF_F_SKF_EXTECCENCRYPT, SKF_R_INVALID_PLAINTEXT_LENGTH); + return SAR_INVALIDPARAMERR; + } + + if (!(ec_key = EC_KEY_new_from_ECCPUBLICKEYBLOB(pECCPubKeyBlob))) { + SKFerr(SKF_F_SKF_EXTECCENCRYPT, SKF_R_INVALID_EC_PUBLIC_KEY); + goto end; + } + + SM2_ENC_PARAMS_init_with_recommended(¶ms); + if (!(cv = SM2_do_encrypt(¶ms, pbPlainText, ulPlainTextLen, ec_key))) { + SKFerr(SKF_F_SKF_EXTECCENCRYPT, SKF_R_ENCRYPT_FAILED); + goto end; + } + + if (!SM2_CIPHERTEXT_VALUE_get_ECCCIPHERBLOB(cv, pCipherText)) { + SKFerr(SKF_F_SKF_EXTECCENCRYPT, SKF_R_ENCODE_CIPHERTEXT_FAILED); + goto end; + } + + ret = SAR_OK; + +end: + EC_KEY_free(ec_key); + SM2_CIPHERTEXT_VALUE_free(cv); + return ret; +} + +ULONG DEVAPI SKF_ExtECCDecrypt(DEVHANDLE hDev, + ECCPRIVATEKEYBLOB *pECCPriKeyBlob, + ECCCIPHERBLOB *pCipherText, + BYTE *pbPlainText, + ULONG *pulPlainTextLen) +{ + ULONG ret = SAR_FAIL; + EC_KEY *ec_key = NULL; + SM2_CIPHERTEXT_VALUE *cv = NULL; + SM2_ENC_PARAMS params; + size_t len; + + if (!pECCPriKeyBlob || !pCipherText || !pulPlainTextLen) { + SKFerr(SKF_F_SKF_EXTECCDECRYPT, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + if (pCipherText->CipherLen <= 0) { + SKFerr(SKF_F_SKF_EXTECCDECRYPT, SKF_R_INVALID_CIPHERTEXT_LENGTH); + return SAR_INVALIDPARAMERR; + } + + if (!pbPlainText) { + *pulPlainTextLen = pCipherText->CipherLen; + return SAR_OK; + } + + if (!(ec_key = EC_KEY_new_from_ECCPRIVATEKEYBLOB(pECCPriKeyBlob))) { + SKFerr(SKF_F_SKF_EXTECCDECRYPT, SKF_R_INVALID_EC_PRIVATE_KEY); + goto end; + } + + if (!(cv = SM2_CIPHERTEXT_VALUE_new_from_ECCCIPHERBLOB(pCipherText))) { + SKFerr(SKF_F_SKF_EXTECCDECRYPT, SKF_R_INVALID_CIPHERTEXT); + goto end; + } + + SM2_ENC_PARAMS_init_with_recommended(¶ms); + len = *pulPlainTextLen; //FIXME: check length? + if (!SM2_do_decrypt(¶ms, cv, pbPlainText, &len, ec_key)) { + SKFerr(SKF_F_SKF_EXTECCDECRYPT, SKF_R_DECRYPT_FAILED); + goto end; + } + *pulPlainTextLen = (ULONG)len; + + ret = SAR_OK; + +end: + EC_KEY_free(ec_key); + SM2_CIPHERTEXT_VALUE_free(cv); + return ret; +} + +/* Wrapper Functions */ + +EC_KEY *EC_KEY_new_from_ECCPUBLICKEYBLOB(const ECCPUBLICKEYBLOB *blob) +{ + EC_KEY *ret; + + if (!(ret = EC_KEY_new_by_curve_name(NID_sm2p256v1))) { + SKFerr(SKF_F_EC_KEY_NEW_FROM_ECCPUBLICKEYBLOB, ERR_R_EC_LIB); + return NULL; + } + + if (!EC_KEY_set_ECCPUBLICKEYBLOB(ret, blob)) { + SKFerr(SKF_F_EC_KEY_NEW_FROM_ECCPUBLICKEYBLOB, + SKF_R_DECODE_EC_PUBLIC_KEY_FAILED); + EC_KEY_free(ret); + return NULL; + } + + return ret; +} + +EC_KEY *EC_KEY_new_from_ECCPRIVATEKEYBLOB(const ECCPRIVATEKEYBLOB *blob) +{ + EC_KEY *ret; + + if (!(ret = EC_KEY_new_by_curve_name(NID_sm2p256v1))) { + SKFerr(SKF_F_EC_KEY_NEW_FROM_ECCPRIVATEKEYBLOB, ERR_R_EC_LIB); + return NULL; + } + + if (!EC_KEY_set_ECCPRIVATEKEYBLOB(ret, blob)) { + SKFerr(SKF_F_EC_KEY_NEW_FROM_ECCPRIVATEKEYBLOB, + SKF_R_DECODE_EC_PRIVATE_KEY_FAILED); + EC_KEY_free(ret); + return NULL; + } + + return ret; +} + +int EC_KEY_set_ECCPUBLICKEYBLOB(EC_KEY *ec_key, const ECCPUBLICKEYBLOB *blob) +{ + int ret = 0; + BIGNUM *x = NULL; + BIGNUM *y = NULL; + int nbytes; + + if (blob->BitLen != EC_GROUP_get_degree(EC_KEY_get0_group(ec_key))) { + SKFerr(SKF_F_EC_KEY_SET_ECCPUBLICKEYBLOB, SKF_R_INVALID_KEY_LENGTH); + return 0; + } + + nbytes = (blob->BitLen + 7)/8; + + if (!(x = BN_bin2bn(blob->XCoordinate, nbytes, NULL))) { + SKFerr(SKF_F_EC_KEY_SET_ECCPUBLICKEYBLOB, ERR_R_BN_LIB); + goto end; + } + if (!(y = BN_bin2bn(blob->YCoordinate, nbytes, NULL))) { + SKFerr(SKF_F_EC_KEY_SET_ECCPUBLICKEYBLOB, ERR_R_BN_LIB); + goto end; + } + if (!EC_KEY_set_public_key_affine_coordinates(ec_key, x, y)) { + SKFerr(SKF_F_EC_KEY_SET_ECCPUBLICKEYBLOB, SKF_R_INVALID_PUBLIC_KEY); + goto end; + } + + ret = 1; +end: + BN_free(x); + BN_free(y); + return ret; +} + +int EC_KEY_get_ECCPUBLICKEYBLOB(EC_KEY *ec_key, ECCPUBLICKEYBLOB *blob) +{ + int ret = 0; + int nbytes; + BIGNUM *x = NULL; + BIGNUM *y = NULL; + BN_CTX *bn_ctx = NULL; + const EC_GROUP *group = EC_KEY_get0_group(ec_key); + const EC_POINT *point = EC_KEY_get0_public_key(ec_key); + + nbytes = (EC_GROUP_get_degree(group) + 7)/8; + if (nbytes > ECC_MAX_MODULUS_BITS_LEN/8) { + SKFerr(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB, SKF_R_INVALID_KEY_LENGTH); + goto end; + } + + x = BN_new(); + y = BN_new(); + bn_ctx = BN_CTX_new(); + if (!x || !y || !bn_ctx) { + SKFerr(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB, ERR_R_BN_LIB); + goto end; + } + + if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) == NID_X9_62_prime_field) { + if (!EC_POINT_get_affine_coordinates_GFp(group, point, x, y, bn_ctx)) { + SKFerr(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB, ERR_R_EC_LIB); + goto end; + } + } else { + if (!EC_POINT_get_affine_coordinates_GF2m(group, point, x, y, bn_ctx)) { + SKFerr(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB, ERR_R_EC_LIB); + goto end; + } + } + + bzero(blob, sizeof(*blob)); + blob->BitLen = EC_GROUP_get_degree(group); + if (!BN_bn2bin(x, blob->XCoordinate + nbytes - BN_num_bytes(x))) { + SKFerr(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB, ERR_R_BN_LIB); + goto end; + } + if (!BN_bn2bin(y, blob->YCoordinate + nbytes - BN_num_bytes(y))) { + SKFerr(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB, ERR_R_BN_LIB); + goto end; + } + + ret = 1; +end: + BN_free(x); + BN_free(y); + BN_CTX_free(bn_ctx); + return ret; +} + +int EC_KEY_set_ECCPRIVATEKEYBLOB(EC_KEY *ec_key, const ECCPRIVATEKEYBLOB *blob) +{ + int ret = 0; + BIGNUM *d = NULL; + int nbytes; + + //FIXME: is this right? + if (blob->BitLen != EC_GROUP_get_degree(EC_KEY_get0_group(ec_key))) { + SKFerr(SKF_F_EC_KEY_SET_ECCPRIVATEKEYBLOB, SKF_R_INVALID_KEY_LENGTH); + goto end; + } + + nbytes = (blob->BitLen + 7)/8; + + if (!(d = BN_bin2bn(blob->PrivateKey, nbytes, NULL))) { + SKFerr(SKF_F_EC_KEY_SET_ECCPRIVATEKEYBLOB, ERR_R_BN_LIB); + goto end; + } + if (!EC_KEY_set_private_key(ec_key, d)) { + SKFerr(SKF_F_EC_KEY_SET_ECCPRIVATEKEYBLOB, SKF_R_INVALID_PRIVATE_KEY); + goto end; + } + + ret = 1; +end: + BN_clear_free(d); + return ret; +} + +int EC_KEY_get_ECCPRIVATEKEYBLOB(EC_KEY *ec_key, ECCPRIVATEKEYBLOB *blob) +{ + int ret = 0; + BIGNUM *order = NULL; + const BIGNUM *d; + int nbytes; + + if (!(order = BN_new())) { + SKFerr(SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB, SKF_R_MALLOC_FAILED); + goto end; + } + + if (!EC_GROUP_get_order(EC_KEY_get0_group(ec_key), order, NULL)) { + SKFerr(SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB, ERR_R_EC_LIB); + goto end; + } + + nbytes = BN_num_bytes(order); + if (nbytes > ECC_MAX_MODULUS_BITS_LEN/8) { + SKFerr(SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB, SKF_R_INVALID_KEY_LENGTH); + goto end; + } + + if (!(d = EC_KEY_get0_private_key(ec_key))) { + SKFerr(SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB, SKF_R_INVALID_EC_KEY); + goto end; + } + + if (!BN_bn2bin(d, blob->PrivateKey + nbytes - BN_num_bytes(d))) { + SKFerr(SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB, ERR_R_BN_LIB); + goto end; + } + + ret = 1; + +end: + BN_free(order); + return ret; +} + +SM2_CIPHERTEXT_VALUE *SM2_CIPHERTEXT_VALUE_new_from_ECCCIPHERBLOB( + const ECCCIPHERBLOB *blob) +{ + int ok = 0; + SM2_CIPHERTEXT_VALUE *ret = NULL; + EC_GROUP *group = NULL; + + if (!(group = EC_GROUP_new_by_curve_name(NID_sm2p256v1))) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_NEW_FROM_ECCCIPHERBLOB, + ERR_R_EC_LIB); + goto end; + } + + if (!(ret = SM2_CIPHERTEXT_VALUE_new(group))) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_NEW_FROM_ECCCIPHERBLOB, + SKF_R_MALLOC_FAILED); + goto end; + } + + if (!SM2_CIPHERTEXT_VALUE_set_ECCCIPHERBLOB(ret, blob)) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_NEW_FROM_ECCCIPHERBLOB, + SKF_R_INVALID_EC_PUBLIC_KEY); + goto end; + } + + ok = 1; + +end: + if (!ok) { + SM2_CIPHERTEXT_VALUE_free(ret); + ret = NULL; + } + EC_GROUP_free(group); + return ret; +} + +int SM2_CIPHERTEXT_VALUE_set_ECCCIPHERBLOB(SM2_CIPHERTEXT_VALUE *cv, + const ECCCIPHERBLOB *blob) +{ + int ret = 0; + EC_GROUP *group = NULL; + BIGNUM *x = NULL; + BIGNUM *y = NULL; + BN_CTX *bn_ctx = NULL; + int nbytes; + + if (!(group = EC_GROUP_new_by_curve_name(NID_sm2p256v1))) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, + ERR_R_EC_LIB); + return 0; + } + + nbytes = (EC_GROUP_get_degree(group) + 7)/8; + if (nbytes > ECC_MAX_XCOORDINATE_BITS_LEN/8) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, + SKF_R_INVALID_KEY_LENGTH); + goto end; + } + + if (!(x = BN_bin2bn(blob->XCoordinate, nbytes, NULL))) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, ERR_R_BN_LIB); + goto end; + } + if (!(y = BN_bin2bn(blob->YCoordinate, nbytes, NULL))) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, ERR_R_BN_LIB); + goto end; + } + if (!(bn_ctx = BN_CTX_new())) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, ERR_R_BN_LIB); + goto end; + } + + if (!cv->ephem_point) { + if (!(cv->ephem_point = EC_POINT_new(group))) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, ERR_R_EC_LIB); + goto end; + } + } + if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) == NID_X9_62_prime_field) { + if (!EC_POINT_set_affine_coordinates_GFp(group, cv->ephem_point, x, y, bn_ctx)) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, ERR_R_EC_LIB); + goto end; + } + } else { + if (!EC_POINT_get_affine_coordinates_GF2m(group, cv->ephem_point, x, y, bn_ctx)) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, ERR_R_EC_LIB); + goto end; + } + } + + memcpy(cv->mactag, blob->HASH, 32); + cv->mactag_size = 32; + + if ((cv->ciphertext_size = blob->CipherLen) <= 0) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, + SKF_R_INVALID_CIPHERTEXT_LENGTH); + goto end; + } + if (!(cv->ciphertext = OPENSSL_realloc(cv->ciphertext, blob->CipherLen))) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, + SKF_R_MALLOC_FAILED); + goto end; + } + memcpy(cv->ciphertext, blob->Cipher, blob->CipherLen); + + ret = 0; + +end: + EC_GROUP_free(group); + BN_free(x); + BN_free(y); + BN_CTX_free(bn_ctx); + return ret; +} + +int SM2_CIPHERTEXT_VALUE_get_ECCCIPHERBLOB(const SM2_CIPHERTEXT_VALUE *cv, + ECCCIPHERBLOB *blob) +{ + int ret = 0; + EC_GROUP *group = NULL; + BIGNUM *x = NULL; + BIGNUM *y = NULL; + BN_CTX *bn_ctx = NULL; + + if (!(group = EC_GROUP_new_by_curve_name(NID_sm2p256v1))) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, ERR_R_EC_LIB); + return 0; + } + + x = BN_new(); + y = BN_new(); + bn_ctx = BN_CTX_new(); + if (!x || !y || !bn_ctx) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, ERR_R_BN_LIB); + goto end; + } + + if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) == NID_X9_62_prime_field) { + if (!EC_POINT_get_affine_coordinates_GFp(group, cv->ephem_point, x, y, bn_ctx)) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, ERR_R_EC_LIB); + goto end; + } + } else { + if (!EC_POINT_get_affine_coordinates_GF2m(group, cv->ephem_point, x, y, bn_ctx)) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, ERR_R_EC_LIB); + goto end; + } + } + + if ((BN_num_bytes(x) > 256/8) || (BN_num_bytes(y) > 256/8)) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, + SKF_R_INVALID_CIPHERTEXT_POINT); + goto end; + } + if (!BN_bn2bin(x, blob->XCoordinate + 256/8 - BN_num_bytes(x))) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, ERR_R_BN_LIB); + goto end; + } + if (!BN_bn2bin(y, blob->YCoordinate + 256/8 - BN_num_bytes(y))) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, ERR_R_BN_LIB); + goto end; + } + + if (cv->mactag_size != 32) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, + SKF_R_INVALID_CIPHERTEXT_MAC); + goto end; + } + memcpy(blob->HASH, cv->mactag, cv->mactag_size); + + if (cv->ciphertext_size <= 0) { + SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, + SKF_R_INVALID_CIPHERTEXT_LENGTH); + goto end; + } + memcpy(blob->Cipher, cv->ciphertext, cv->ciphertext_size); + + ret = 1; +end: + EC_GROUP_free(group); + BN_free(x); + BN_free(y); + BN_CTX_free(bn_ctx); + return ret; +} + +ECDSA_SIG *ECDSA_SIG_new_from_ECCSIGNATUREBLOB(const ECCSIGNATUREBLOB *blob) +{ + ECDSA_SIG *ret = NULL; + + if (!(ret = ECDSA_SIG_new())) { + SKFerr(SKF_F_ECDSA_SIG_NEW_FROM_ECCSIGNATUREBLOB, + SKF_R_MALLOC_FAILED); + return NULL; + } + + if (!ECDSA_SIG_set_ECCSIGNATUREBLOB(ret, blob)) { + SKFerr(SKF_F_ECDSA_SIG_NEW_FROM_ECCSIGNATUREBLOB, + SKF_R_INVALID_SIGNATURE); + ECDSA_SIG_free(ret); + return NULL; + } + + return ret; +} + +int ECDSA_SIG_get_ECCSIGNATUREBLOB(const ECDSA_SIG *sig, ECCSIGNATUREBLOB *blob) +{ + if ((BN_num_bytes(sig->r) > 256/8) || (BN_num_bytes(sig->s) > 256/8)) { + SKFerr(SKF_F_ECDSA_SIG_GET_ECCSIGNATUREBLOB, SKF_R_INVALID_BIGNUM_LENGTH); + return SAR_FAIL; + } + + if (!BN_bn2bin(sig->r, blob->r + 256/8 - BN_num_bytes(sig->r))) { + SKFerr(SKF_F_ECDSA_SIG_GET_ECCSIGNATUREBLOB, ERR_R_BN_LIB); + return SAR_FAIL; + } + + if (!BN_bn2bin(sig->s, blob->s + 256/8 - BN_num_bytes(sig->s))) { + SKFerr(SKF_F_ECDSA_SIG_GET_ECCSIGNATUREBLOB, ERR_R_BN_LIB); + return SAR_FAIL; + } + + return SAR_OK; +} + +int ECDSA_SIG_set_ECCSIGNATUREBLOB(ECDSA_SIG *sig, const ECCSIGNATUREBLOB *blob) +{ + if (!(sig->r = BN_bin2bn(blob->r, 256/8, sig->r))) { + SKFerr(SKF_F_ECDSA_SIG_SET_ECCSIGNATUREBLOB, ERR_R_BN_LIB); + return SAR_FAIL; + } + + if (!(sig->s = BN_bin2bn(blob->s, 256/8, sig->s))) { + SKFerr(SKF_F_ECDSA_SIG_SET_ECCSIGNATUREBLOB, ERR_R_BN_LIB); + return SAR_FAIL; + } + + return SAR_OK; +} + diff --git a/crypto/skf/skf_enc.c b/crypto/skf/skf_enc.c new file mode 100644 index 00000000..57ef9d0a --- /dev/null +++ b/crypto/skf/skf_enc.c @@ -0,0 +1,310 @@ +/* crypto/skf/skf_enc.c */ +/* ==================================================================== + * Copyright (c) 2015-2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 +#include +#include +#include +#include +#include "skf_lcl.h" + +#define PADDING_TYPE_NO_PADDING 0 +#define PADDING_TYPE_PKCS5 1 + + +ULONG DEVAPI SKF_EncryptInit(HANDLE hKey, + BLOCKCIPHERPARAM encryptParam) +{ + ULONG ret = SAR_FAIL; + BLOCKCIPHERPARAM *encparam = &encryptParam; + EVP_CIPHER_CTX *ctx = NULL; + const EVP_CIPHER *cipher; + unsigned char *key; + unsigned char *iv; + + //FIXME: CFB bits! + + if (!(key = SKF_HANDLE_get_key(hKey))) { + SKFerr(SKF_F_SKF_ENCRYPTINIT, SKF_R_INVALID_KEY_HANDLE); + ret = SAR_INVALIDPARAMERR; + goto end; + } + + if (encparam->IVLen != SMS4_IV_LENGTH) { + SKFerr(SKF_F_SKF_ENCRYPTINIT, SKF_R_INVALID_IV_LENGTH); + ret = SAR_INVALIDPARAMERR; + goto end; + } + + iv = encparam->IV; + + if (!(ctx = EVP_CIPHER_CTX_new())) { + SKFerr(SKF_F_SKF_ENCRYPTINIT, ERR_R_EVP_LIB); + goto end; + } + + if (!EVP_EncryptInit_ex(ctx, cipher, NULL, key, iv)) { + SKFerr(SKF_F_SKF_ENCRYPTINIT, ERR_R_EVP_LIB); + goto end; + } + + if (!SKF_HANDLE_set1_cipher_ctx(hKey, ctx)) { + SKFerr(SKF_F_SKF_ENCRYPTINIT, SKF_R_SET_CIPHER_CTX_FAILED); + goto end; + } + ctx = NULL; + + ret = SAR_OK; +end: + EVP_CIPHER_CTX_free(ctx); + return ret; +} + +ULONG DEVAPI SKF_EncryptUpdate(HANDLE hKey, + BYTE *pbData, + ULONG ulDataLen, + BYTE *pbEncryptedData, + ULONG *pulEncryptedLen) +{ + EVP_CIPHER_CTX *ctx; + int inlen, outlen; + + if (!(ctx = SKF_HANDLE_get_cipher_ctx(hKey))) { + SKFerr(SKF_F_SKF_ENCRYPTUPDATE, SKF_R_INVALID_CIPHER_CTX_HANDLE); + return SAR_INVALIDPARAMERR; + } + + //FIXME: check INT_MAX + inlen = ulDataLen; + outlen = *pulEncryptedLen; + if (!EVP_EncryptUpdate(ctx, pbEncryptedData, &outlen, pbData, inlen)) { + SKFerr(SKF_F_SKF_ENCRYPTUPDATE, ERR_R_EVP_LIB); + return SAR_FAIL; + } + + *pulEncryptedLen = outlen; + return SAR_OK; +} + +ULONG DEVAPI SKF_EncryptFinal(HANDLE hKey, + BYTE *pbEncryptedData, + ULONG *pulEncryptedDataLen) +{ + EVP_CIPHER_CTX *ctx; + int outlen; + + if (!(ctx = SKF_HANDLE_get_cipher_ctx(hKey))) { + SKFerr(SKF_F_SKF_ENCRYPTFINAL, SKF_R_INVALID_CIPHER_CTX_HANDLE); + return SAR_INVALIDPARAMERR; + } + + outlen = *pulEncryptedDataLen; + if (!EVP_EncryptFinal(ctx, pbEncryptedData, &outlen)) { + SKFerr(SKF_F_SKF_ENCRYPTFINAL, ERR_R_EVP_LIB); + return SAR_FAIL; + } + + *pulEncryptedDataLen = outlen; + SKF_HANDLE_free_cipher_ctx(hKey); + return SAR_OK; +} + +ULONG DEVAPI SKF_DecryptInit(HANDLE hKey, + BLOCKCIPHERPARAM DecryptParam) +{ + ULONG ret = SAR_FAIL; + BLOCKCIPHERPARAM *param = &DecryptParam; + EVP_CIPHER_CTX *ctx = NULL; + const EVP_CIPHER *cipher; + unsigned char *key; + unsigned char *iv; + + if (!(key = SKF_HANDLE_get_key(hKey))) { + SKFerr(SKF_F_SKF_DECRYPTINIT, SKF_R_INVALID_KEY_HANDLE); + ret = SAR_INVALIDPARAMERR; + goto end; + } + + if (param->IVLen != SMS4_IV_LENGTH) { + SKFerr(SKF_F_SKF_DECRYPTINIT, SKF_R_INVALID_IV_LENGTH); + ret = SAR_INVALIDPARAMERR; + goto end; + } + + iv = param->IV; + + if (!(ctx = EVP_CIPHER_CTX_new())) { + SKFerr(SKF_F_SKF_DECRYPTINIT, ERR_R_EVP_LIB); + goto end; + } + + if (!EVP_DecryptInit_ex(ctx, cipher, NULL, key, iv)) { + SKFerr(SKF_F_SKF_DECRYPTINIT, ERR_R_EVP_LIB); + goto end; + } + + if (!SKF_HANDLE_set1_cipher_ctx(hKey, ctx)) { + SKFerr(SKF_F_SKF_DECRYPTINIT, SKF_R_SET_CIPHER_CTX_FAILED); + goto end; + } + ctx = NULL; + + ret = SAR_OK; +end: + EVP_CIPHER_CTX_free(ctx); + return ret; + + return SAR_OK; +} + +ULONG DEVAPI SKF_DecryptUpdate(HANDLE hKey, + BYTE *pbEncryptedData, + ULONG ulEncryptedLen, + BYTE *pbData, + ULONG *pulDataLen) +{ + EVP_CIPHER_CTX *ctx; + int inlen, outlen; + + if (!(ctx = SKF_HANDLE_get_cipher_ctx(hKey))) { + SKFerr(SKF_F_SKF_DECRYPTUPDATE, SKF_R_INVALID_CIPHER_CTX_HANDLE); + return SAR_INVALIDPARAMERR; + } + + //FIXME: check INT_MAX + inlen = ulEncryptedLen; + outlen = *pulDataLen; + if (!EVP_DecryptUpdate(ctx, pbData, &outlen, pbEncryptedData, inlen)) { + SKFerr(SKF_F_SKF_DECRYPTUPDATE, ERR_R_EVP_LIB); + return SAR_FAIL; + } + + *pulDataLen = outlen; + return SAR_OK; +} + +ULONG DEVAPI SKF_DecryptFinal(HANDLE hKey, + BYTE *pbDecryptedData, + ULONG *pulDecryptedDataLen) +{ + EVP_CIPHER_CTX *ctx; + int len; + + if (!(ctx = SKF_HANDLE_get_cipher_ctx(hKey))) { + SKFerr(SKF_F_SKF_DECRYPTFINAL, SKF_R_INVALID_KEY_HANDLE); + return SAR_INVALIDPARAMERR; + } + + if (!EVP_DecryptFinal(ctx, pbDecryptedData, &len)) { + return SAR_FAIL; + } + + *pulDecryptedDataLen = len; + SKF_HANDLE_free_cipher_ctx(hKey); + return SAR_OK; +} + +ULONG DEVAPI SKF_Encrypt(HANDLE hKey, + BYTE *pbData, + ULONG ulDataLen, + BYTE *pbEncryptedData, + ULONG *pulEncryptedLen) +{ + ULONG rv; + BYTE *p; + ULONG len; + + p = pbEncryptedData; + len = *pulEncryptedLen; + if ((rv = SKF_EncryptUpdate(hKey, pbData, ulDataLen, p, &len)) != SAR_OK) { + SKFerr(SKF_F_SKF_ENCRYPT, ERR_R_SKF_LIB); + return rv; + } + + p += len; + len = *pulEncryptedLen - len; + if ((rv = SKF_EncryptFinal(hKey, p, &len)) != SAR_OK) { + SKFerr(SKF_F_SKF_ENCRYPT, ERR_R_SKF_LIB); + return rv; + } + + *pulEncryptedLen = p + len - pbEncryptedData; + return SAR_OK; +} + +ULONG DEVAPI SKF_Decrypt(HANDLE hKey, + BYTE *pbEncryptedData, + ULONG ulEncryptedLen, + BYTE *pbData, + ULONG *pulDataLen) +{ + ULONG rv; + BYTE *p; + ULONG len; + + p = pbData; + len = *pulDataLen; + if ((rv = SKF_DecryptUpdate(hKey, pbEncryptedData, ulEncryptedLen, p, &len)) != SAR_OK) { + SKFerr(SKF_F_SKF_DECRYPT, ERR_R_SKF_LIB); + return rv; + } + + p += len; + len = *pulDataLen - len; + if ((rv = SKF_DecryptFinal(hKey, p, &len)) != SAR_OK) { + SKFerr(SKF_F_SKF_DECRYPT, ERR_R_SKF_LIB); + return rv; + } + + *pulDataLen = p + len - pbData; + return SAR_OK; +} + diff --git a/crypto/skf/skf_err.c b/crypto/skf/skf_err.c new file mode 100644 index 00000000..3306f9e7 --- /dev/null +++ b/crypto/skf/skf_err.c @@ -0,0 +1,238 @@ +/* crypto/skf/skf_err.c */ +/* ==================================================================== + * Copyright (c) 1999-2016 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). + * + */ + +/* + * NOTE: this file was auto generated by the mkerr.pl script: any changes + * made to it will be overwritten when the script next updates this file, + * only reason strings will be preserved. + */ + +#include +#include +#include + +/* BEGIN ERROR CODES */ +#ifndef OPENSSL_NO_ERR + +# define ERR_FUNC(func) ERR_PACK(ERR_LIB_SKF,func,0) +# define ERR_REASON(reason) ERR_PACK(ERR_LIB_SKF,0,reason) + +static ERR_STRING_DATA SKF_str_functs[] = { + {ERR_FUNC(SKF_F_ECDSA_SIG_GET_ECCSIGNATUREBLOB), + "ECDSA_SIG_get_ECCSIGNATUREBLOB"}, + {ERR_FUNC(SKF_F_ECDSA_SIG_NEW_FROM_ECCSIGNATUREBLOB), + "ECDSA_SIG_new_from_ECCSIGNATUREBLOB"}, + {ERR_FUNC(SKF_F_ECDSA_SIG_SET_ECCSIGNATUREBLOB), + "ECDSA_SIG_set_ECCSIGNATUREBLOB"}, + {ERR_FUNC(SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB), + "EC_KEY_get_ECCPRIVATEKEYBLOB"}, + {ERR_FUNC(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB), + "EC_KEY_get_ECCPUBLICKEYBLOB"}, + {ERR_FUNC(SKF_F_EC_KEY_NEW_FROM_ECCPRIVATEKEYBLOB), + "EC_KEY_new_from_ECCPRIVATEKEYBLOB"}, + {ERR_FUNC(SKF_F_EC_KEY_NEW_FROM_ECCPUBLICKEYBLOB), + "EC_KEY_new_from_ECCPUBLICKEYBLOB"}, + {ERR_FUNC(SKF_F_EC_KEY_SET_ECCPRIVATEKEYBLOB), + "EC_KEY_set_ECCPRIVATEKEYBLOB"}, + {ERR_FUNC(SKF_F_EC_KEY_SET_ECCPUBLICKEYBLOB), + "EC_KEY_set_ECCPUBLICKEYBLOB"}, + {ERR_FUNC(SKF_F_RSA_GET_RSAPRIVATEKEYBLOB), "RSA_get_RSAPRIVATEKEYBLOB"}, + {ERR_FUNC(SKF_F_RSA_NEW_FROM_RSAPRIVATEKEYBLOB), + "RSA_new_from_RSAPRIVATEKEYBLOB"}, + {ERR_FUNC(SKF_F_RSA_NEW_FROM_RSAPUBLICKEYBLOB), + "RSA_new_from_RSAPUBLICKEYBLOB"}, + {ERR_FUNC(SKF_F_RSA_SET_RSAPRIVATEKEYBLOB), "RSA_set_RSAPRIVATEKEYBLOB"}, + {ERR_FUNC(SKF_F_RSA_SET_RSAPUBLICKEYBLOB), "RSA_set_RSAPUBLICKEYBLOB"}, + {ERR_FUNC(SKF_F_SKF_CHANGEDEVAUTHKEY), "SKF_CHANGEDEVAUTHKEY"}, + {ERR_FUNC(SKF_F_SKF_CHANGEPIN), "SKF_CHANGEPIN"}, + {ERR_FUNC(SKF_F_SKF_CLEARSECURESTATE), "SKF_CLEARSECURESTATE"}, + {ERR_FUNC(SKF_F_SKF_CLOSEHANDLE), "SKF_CLOSEHANDLE"}, + {ERR_FUNC(SKF_F_SKF_CONNECTDEV), "SKF_CONNECTDEV"}, + {ERR_FUNC(SKF_F_SKF_CREATEAPPLICATION), "SKF_CREATEAPPLICATION"}, + {ERR_FUNC(SKF_F_SKF_CREATEFILE), "SKF_CREATEFILE"}, + {ERR_FUNC(SKF_F_SKF_DECRYPT), "SKF_DECRYPT"}, + {ERR_FUNC(SKF_F_SKF_DECRYPTFINAL), "SKF_DECRYPTFINAL"}, + {ERR_FUNC(SKF_F_SKF_DECRYPTINIT), "SKF_DECRYPTINIT"}, + {ERR_FUNC(SKF_F_SKF_DECRYPTUPDATE), "SKF_DECRYPTUPDATE"}, + {ERR_FUNC(SKF_F_SKF_DELETEAPPLICATION), "SKF_DELETEAPPLICATION"}, + {ERR_FUNC(SKF_F_SKF_DELETEFILE), "SKF_DELETEFILE"}, + {ERR_FUNC(SKF_F_SKF_DEVAUTH), "SKF_DEVAUTH"}, + {ERR_FUNC(SKF_F_SKF_DIGEST), "SKF_DIGEST"}, + {ERR_FUNC(SKF_F_SKF_DIGESTFINAL), "SKF_DIGESTFINAL"}, + {ERR_FUNC(SKF_F_SKF_DIGESTINIT), "SKF_DIGESTINIT"}, + {ERR_FUNC(SKF_F_SKF_DIGESTUPDATE), "SKF_DIGESTUPDATE"}, + {ERR_FUNC(SKF_F_SKF_DISCONNECTDEV), "SKF_DISCONNECTDEV"}, + {ERR_FUNC(SKF_F_SKF_ENCRYPT), "SKF_ENCRYPT"}, + {ERR_FUNC(SKF_F_SKF_ENCRYPTFINAL), "SKF_ENCRYPTFINAL"}, + {ERR_FUNC(SKF_F_SKF_ENCRYPTINIT), "SKF_ENCRYPTINIT"}, + {ERR_FUNC(SKF_F_SKF_ENCRYPTUPDATE), "SKF_ENCRYPTUPDATE"}, + {ERR_FUNC(SKF_F_SKF_ENUMAPPLICATION), "SKF_ENUMAPPLICATION"}, + {ERR_FUNC(SKF_F_SKF_ENUMDEV), "SKF_ENUMDEV"}, + {ERR_FUNC(SKF_F_SKF_ENUMFILES), "SKF_ENUMFILES"}, + {ERR_FUNC(SKF_F_SKF_EXTECCDECRYPT), "SKF_EXTECCDECRYPT"}, + {ERR_FUNC(SKF_F_SKF_EXTECCENCRYPT), "SKF_EXTECCENCRYPT"}, + {ERR_FUNC(SKF_F_SKF_EXTECCSIGN), "SKF_EXTECCSIGN"}, + {ERR_FUNC(SKF_F_SKF_EXTECCVERIFY), "SKF_EXTECCVERIFY"}, + {ERR_FUNC(SKF_F_SKF_EXTRSAPRIKEYOPERATION), "SKF_EXTRSAPRIKEYOPERATION"}, + {ERR_FUNC(SKF_F_SKF_EXTRSAPUBKEYOPERATION), "SKF_EXTRSAPUBKEYOPERATION"}, + {ERR_FUNC(SKF_F_SKF_GENEXTRSAKEY), "SKF_GENEXTRSAKEY"}, + {ERR_FUNC(SKF_F_SKF_GENRANDOM), "SKF_GENRANDOM"}, + {ERR_FUNC(SKF_F_SKF_GETDEVINFO), "SKF_GETDEVINFO"}, + {ERR_FUNC(SKF_F_SKF_GETDEVSTATE), "SKF_GETDEVSTATE"}, + {ERR_FUNC(SKF_F_SKF_GETFILEINFO), "SKF_GETFILEINFO"}, + {ERR_FUNC(SKF_F_SKF_GETPININFO), "SKF_GETPININFO"}, + {ERR_FUNC(SKF_F_SKF_HANDLE_GET_CBCMAC_CTX), "SKF_HANDLE_GET_CBCMAC_CTX"}, + {ERR_FUNC(SKF_F_SKF_HANDLE_GET_CIPHER_CTX), "SKF_HANDLE_GET_CIPHER_CTX"}, + {ERR_FUNC(SKF_F_SKF_HANDLE_GET_MD_CTX), "SKF_HANDLE_GET_MD_CTX"}, + {ERR_FUNC(SKF_F_SKF_LOCKDEV), "SKF_LOCKDEV"}, + {ERR_FUNC(SKF_F_SKF_MAC), "SKF_MAC"}, + {ERR_FUNC(SKF_F_SKF_MACFINAL), "SKF_MACFINAL"}, + {ERR_FUNC(SKF_F_SKF_MACINIT), "SKF_MACINIT"}, + {ERR_FUNC(SKF_F_SKF_MACUPDATE), "SKF_MACUPDATE"}, + {ERR_FUNC(SKF_F_SKF_READFILE), "SKF_READFILE"}, + {ERR_FUNC(SKF_F_SKF_SETLABEL), "SKF_SETLABEL"}, + {ERR_FUNC(SKF_F_SKF_SETSYMMKEY), "SKF_SETSYMMKEY"}, + {ERR_FUNC(SKF_F_SKF_TRANSMIT), "SKF_TRANSMIT"}, + {ERR_FUNC(SKF_F_SKF_UNBLOCKPIN), "SKF_UNBLOCKPIN"}, + {ERR_FUNC(SKF_F_SKF_UNLOCKDEV), "SKF_UNLOCKDEV"}, + {ERR_FUNC(SKF_F_SKF_VERIFYPIN), "SKF_VERIFYPIN"}, + {ERR_FUNC(SKF_F_SKF_WRITEFILE), "SKF_WRITEFILE"}, + {ERR_FUNC(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB), + "SM2_CIPHERTEXT_VALUE_get_ECCCIPHERBLOB"}, + {ERR_FUNC(SKF_F_SM2_CIPHERTEXT_VALUE_NEW_FROM_ECCCIPHERBLOB), + "SM2_CIPHERTEXT_VALUE_new_from_ECCCIPHERBLOB"}, + {ERR_FUNC(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB), + "SM2_CIPHERTEXT_VALUE_set_ECCCIPHERBLOB"}, + {0, NULL} +}; + +static ERR_STRING_DATA SKF_str_reasons[] = { + {ERR_REASON(SKF_R_ALGOR_NOT_SUPPORTED), "algor not supported"}, + {ERR_REASON(SKF_R_BAD_ARGUMENT), "bad argument"}, + {ERR_REASON(SKF_R_BUFFER_TOO_SMALL), "buffer too small"}, + {ERR_REASON(SKF_R_CMAC_LIB), "cmac lib"}, + {ERR_REASON(SKF_R_CTX_NOT_CREATED), "ctx not created"}, + {ERR_REASON(SKF_R_DECODE_EC_PRIVATE_KEY_FAILED), + "decode ec private key failed"}, + {ERR_REASON(SKF_R_DECODE_EC_PUBLIC_KEY_FAILED), + "decode ec public key failed"}, + {ERR_REASON(SKF_R_DECRYPT_FAILED), "decrypt failed"}, + {ERR_REASON(SKF_R_ENCODE_CIPHERTEXT_FAILED), "encode ciphertext failed"}, + {ERR_REASON(SKF_R_ENCODE_FAILED), "encode failed"}, + {ERR_REASON(SKF_R_ENCODE_SIGNATURE_FAILED), "encode signature failed"}, + {ERR_REASON(SKF_R_ENCRYPT_FAILED), "encrypt failed"}, + {ERR_REASON(SKF_R_FAIL), "fail"}, + {ERR_REASON(SKF_R_FREE_HANDLE_FAILED), "free handle failed"}, + {ERR_REASON(SKF_R_GEN_RSA_FAILED), "gen rsa failed"}, + {ERR_REASON(SKF_R_INVALID_ALGID), "invalid algid"}, + {ERR_REASON(SKF_R_INVALID_ALGOR), "invalid algor"}, + {ERR_REASON(SKF_R_INVALID_APP_HANDLE), "invalid app handle"}, + {ERR_REASON(SKF_R_INVALID_ARGUMENTS), "invalid arguments"}, + {ERR_REASON(SKF_R_INVALID_BIGNUM_LENGTH), "invalid bignum length"}, + {ERR_REASON(SKF_R_INVALID_BLOB), "invalid blob"}, + {ERR_REASON(SKF_R_INVALID_CIPHERTEXT), "invalid ciphertext"}, + {ERR_REASON(SKF_R_INVALID_CIPHERTEXT_LENGTH), "invalid ciphertext length"}, + {ERR_REASON(SKF_R_INVALID_CIPHERTEXT_MAC), "invalid ciphertext mac"}, + {ERR_REASON(SKF_R_INVALID_CIPHERTEXT_POINT), "invalid ciphertext point"}, + {ERR_REASON(SKF_R_INVALID_CIPHER_CTX_HANDLE), "invalid cipher ctx handle"}, + {ERR_REASON(SKF_R_INVALID_DEV_HANDLE), "invalid dev handle"}, + {ERR_REASON(SKF_R_INVALID_DIGEST_LENGTH), "invalid digest length"}, + {ERR_REASON(SKF_R_INVALID_ECC_PRIVATE_KEY), "invalid ecc private key"}, + {ERR_REASON(SKF_R_INVALID_ECC_PUBLIC_KEY), "invalid ecc public key"}, + {ERR_REASON(SKF_R_INVALID_EC_KEY), "invalid ec key"}, + {ERR_REASON(SKF_R_INVALID_EC_PRIVATE_KEY), "invalid ec private key"}, + {ERR_REASON(SKF_R_INVALID_EC_PUBLIC_KEY), "invalid ec public key"}, + {ERR_REASON(SKF_R_INVALID_HANDLE), "invalid handle"}, + {ERR_REASON(SKF_R_INVALID_HANDLE_MAGIC), "invalid handle magic"}, + {ERR_REASON(SKF_R_INVALID_HANDLE_TYPE), "invalid handle type"}, + {ERR_REASON(SKF_R_INVALID_HASH_HANDLE), "invalid hash handle"}, + {ERR_REASON(SKF_R_INVALID_ID_LENGTH), "invalid id length"}, + {ERR_REASON(SKF_R_INVALID_INPUT_LENGTH), "invalid input length"}, + {ERR_REASON(SKF_R_INVALID_IV_LENGTH), "invalid iv length"}, + {ERR_REASON(SKF_R_INVALID_KEY_HANDLE), "invalid key handle"}, + {ERR_REASON(SKF_R_INVALID_KEY_LENGTH), "invalid key length"}, + {ERR_REASON(SKF_R_INVALID_MAC_HANDLE), "invalid mac handle"}, + {ERR_REASON(SKF_R_INVALID_PLAINTEXT_LENGTH), "invalid plaintext length"}, + {ERR_REASON(SKF_R_INVALID_PRIVATE_KEY), "invalid private key"}, + {ERR_REASON(SKF_R_INVALID_PUBLIC_KEY), "invalid public key"}, + {ERR_REASON(SKF_R_INVALID_RANDOM_LENGTH), "invalid random length"}, + {ERR_REASON(SKF_R_INVALID_RSA_PRIVATE_KEY), "invalid rsa private key"}, + {ERR_REASON(SKF_R_INVALID_RSA_PUBLIC_KEY), "invalid rsa public key"}, + {ERR_REASON(SKF_R_INVALID_SIGNATURE), "invalid signature"}, + {ERR_REASON(SKF_R_MALLOC_FAILED), "malloc failed"}, + {ERR_REASON(SKF_R_NO_PUBLIC_KEY), "no public key"}, + {ERR_REASON(SKF_R_NULL_ARGUMENT), "null argument"}, + {ERR_REASON(SKF_R_SAR_FAIL), "sar fail"}, + {ERR_REASON(SKF_R_SAR_OK), "sar ok"}, + {ERR_REASON(SKF_R_SET_CIPHER_CTX_FAILED), "set cipher ctx failed"}, + {ERR_REASON(SKF_R_SIGN_FAILED), "sign failed"}, + {ERR_REASON(SKF_R_UNKNOWN_ALGOR), "unknown algor"}, + {ERR_REASON(SKF_R_UNKNOWN_APP), "unknown app"}, + {ERR_REASON(SKF_R_VERIFY_NOT_PASS), "verify not pass"}, + {0, NULL} +}; + +#endif + +void ERR_load_SKF_strings(void) +{ +#ifndef OPENSSL_NO_ERR + + if (ERR_func_error_string(SKF_str_functs[0].error) == NULL) { + ERR_load_strings(0, SKF_str_functs); + ERR_load_strings(0, SKF_str_reasons); + } +#endif +} diff --git a/crypto/skf/skf_err2.c b/crypto/skf/skf_err2.c deleted file mode 100644 index 6e80dbf1..00000000 --- a/crypto/skf/skf_err2.c +++ /dev/null @@ -1,133 +0,0 @@ -#include "skf/skf.h" - - - -/* - * about the filename err2: this is manually written err file - */ - - - -int skf_err2openssl(int err) -{ - switch (err) { - case SAR_OK: return SKF_R_SAR_OK; - case SAR_FAIL: return SKF_R_SAR_FAIL; - case SAR_UNKNOWNERR: return SKF_R_ - case SAR_NOTSUPPORTYETERR: return SKF_R_ - case SAR_FILEERR: return SKF_R_ - case SAR_INVALIDHANDLEERR: return SKF_R_ - case SAR_INVALIDPARAMERR: return SKF_R_ - case SAR_READFILEERR: return SKF_R_ - case SAR_WRITEFILEERR: return SKF_R_ - case SAR_NAMELENERR: return SKF_R_ - case SAR_KEYUSAGEERR: return SKF_R_ - case SAR_MODULUSLENERR: return SKF_R_ - case SAR_NOTINITIALIZEERR: return SKF_R_ - case SAR_OBJERR: return SKF_R_ - case SAR_MEMORYERR: return SKF_R_ - case SAR_TIMEOUTERR: return SKF_R_ - case SAR_INDATALENERR: return SKF_R_ - case SAR_INDATAERR: return SKF_R_ - case SAR_GENRANDERR: return SKF_R_ - case SAR_HASHOBJERR: return SKF_R_ - case SAR_HASHERR: return SKF_R_ - case SAR_GENRSAKEYERR: return SKF_R_ - case SAR_RSAMODULUSLENERR: return SKF_R_ - case SAR_CSPIMPRTPUBKEYERR: return SKF_R_ - case SAR_RSAENCERR: return SKF_R_ - case SAR_RSADECERR: return SKF_R_ - case SAR_HASHNOTEQUALERR: return SKF_R_ - case SAR_KEYNOTFOUNTERR: return SKF_R_ - case SAR_CERTNOTFOUNTERR: return SKF_R_ - case SAR_NOTEXPORTERR: return SKF_R_ - case SAR_DECRYPTPADERR: return SKF_R_ - case SAR_MACLENERR: return SKF_R_ - case SAR_BUFFER_TOO_SMALL: return SKF_R_ - case SAR_KEYINFOTYPEERR: return SKF_R_ - case SAR_NOT_EVENTERR: return SKF_R_ - case SAR_DEVICE_REMOVED: return SKF_R_ - case SAR_PIN_INCORRECT: return SKF_R_ - case SAR_PIN_LOCKED: return SKF_R_ - case SAR_PIN_INVALID: return SKF_R_ - case SAR_PIN_LEN_RANGE: return SKF_R_ - case SAR_USER_ALREADY_LOGGED_IN: return SKF_R_ - case SAR_USER_PIN_NOT_INITIALIZED: return SKF_R_ - case SAR_USER_TYPE_INVALID: return SKF_R_ - case SAR_APPLICATION_NAME_INVALID: return SKF_R_ - case SAR_APPLICATION_EXISTS: return SKF_R_ - case SAR_USER_NOT_LOGGED_IN: return SKF_R_ - case SAR_APPLICATION_NOT_EXISTS: return SKF_R_ - case SAR_FILE_ALREADY_EXIST: return SKF_R_ - case SAR_NO_ROOM: return SKF_R_ - case SAR_FILE_NOT_EXIST: return SKF_R_ - } - return 0; -} - - - - -typedef struct { - int err_no; - char *err_str; -} skf_errstr[] = { - { SAR_OK, "Success" }, - { SAR_FAIL, "Failure" }, - { SAR_UNKNOWNERR, "Unknown error" }, - { SAR_NOTSUPPORTYETERR, "Not supported" }, - { SAR_FILEERR, "File error" }, - { SAR_INVALIDHANDLEERR, "Invalid handler" }, - { SAR_INVALIDPARAMERR, "Invalid parameter" }, - { SAR_READFILEERR, "Read file error" }, - { SAR_WRITEFILEERR "Write file error" }, - { SAR_NAMELENERR, "Name length error" }, - { SAR_KEYUSAGEERR, "Key usage error" }, - { SAR_MODULUSLENERR, "Modulus length error" }, - { SAR_NOTINITIALIZEERR, "Not initialized" }, - { SAR_OBJERR, "Object error" }, - { SAR_MEMORYERR, "Memory error" }, - { SAR_TIMEOUTERR, "Time out" }, - { SAR_INDATALENERR, "Input data length error" }, - { SAR_INDATAERR, "Input data error" }, - { SAR_GENRANDERR, "Generate randomness error" }, - { SAR_HASHOBJERR, "Hash object error" }, - { SAR_HASHERR, "Hash error" }, - { SAR_GENRSAKEYERR, "Genenerate RSA key error" }, - { SAR_RSAMODULUSLENERR, "RSA modulus length error" }, - { SAR_CSPIMPRTPUBKEYERR, "CSP import public key error" }, - { SAR_RSAENCERR, "RSA encryption error" }, - { SAR_RSADECERR, "RSA decryption error" }, - { SAR_HASHNOTEQUALERR, "Hash not equal" }, - { SAR_KEYNOTFOUNTERR, "Key not found" }, - { SAR_CERTNOTFOUNTERR, "Certificate not found" }, - { SAR_NOTEXPORTERR, "Not exported" }, - { SAR_DECRYPTPADERR, "Decrypt pad error" }, - { SAR_MACLENERR, "MAC length error" }, - { SAR_BUFFER_TOO_SMALL, "Buffer too small" }, - { SAR_KEYINFOTYPEERR, "Key info type error" }, - { SAR_NOT_EVENTERR, "No event error" }, - { SAR_DEVICE_REMOVED "Device removed" }, - { SAR_PIN_INCORRECT, "PIN incorrect" }, - { SAR_PIN_LOCKED, "PIN locked" }, - { SAR_PIN_INVALID, "PIN invalid" }, - { SAR_PIN_LEN_RANGE, "PIN length error" }, - { SAR_USER_ALREADY_LOGGED_IN, "User already logged in" }, - { SAR_USER_PIN_NOT_INITIALIZED, "User PIN not initialized" }, - { SAR_USER_TYPE_INVALID, "User type invalid" }, - { SAR_APPLICATION_NAME_INVALID, "Application name invalid" }, - { SAR_APPLICATION_EXISTS, "Application already exist" }, - { SAR_USER_NOT_LOGGED_IN, "User not logged in" }, - { SAR_APPLICATION_NOT_EXISTS, "Application not exist" }, - { SAR_FILE_ALREADY_EXIST, "File already exist" }, - { SAR_NO_ROOM, "No file space" }, - { SAR_FILE_NOT_EXIST, "File not exist" } -}; - - -LPSTR DEVAPI SKF_GetErrorString(ULONG ulError) -{ - return NULL; -} - - diff --git a/crypto/skf/skf_errstr.c b/crypto/skf/skf_errstr.c new file mode 100644 index 00000000..86aa9692 --- /dev/null +++ b/crypto/skf/skf_errstr.c @@ -0,0 +1,123 @@ +/* crypto/skf/skf_errstr.c */ +/* ==================================================================== + * Copyright (c) 2014 - 2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 + +typedef struct { + int err_no; + char *err_str; +} skf_errinfo; + + +skf_errinfo skf_errstr[] = { + { SAR_OK, "Success" }, + { SAR_FAIL, "Failure" }, + { SAR_UNKNOWNERR, "Unknown error" }, + { SAR_NOTSUPPORTYETERR, "Not supported" }, + { SAR_FILEERR, "File error" }, + { SAR_INVALIDHANDLEERR, "Invalid handle" }, + { SAR_INVALIDPARAMERR, "Invalid parameter" }, + { SAR_READFILEERR, "Read file error" }, + { SAR_WRITEFILEERR, "Write file error" }, + { SAR_NAMELENERR, "Name length error" }, + { SAR_KEYUSAGEERR, "Key usage error" }, + { SAR_MODULUSLENERR, "Modulus length error" }, + { SAR_NOTINITIALIZEERR, "Not initialized" }, + { SAR_OBJERR, "Object error" }, + { SAR_MEMORYERR, "Memory error" }, + { SAR_TIMEOUTERR, "Time out" }, + { SAR_INDATALENERR, "Input data length error" }, + { SAR_INDATAERR, "Input data error" }, + { SAR_GENRANDERR, "Generate randomness error" }, + { SAR_HASHOBJERR, "Hash object error" }, + { SAR_HASHERR, "Hash error" }, + { SAR_GENRSAKEYERR, "Genenerate RSA key error" }, + { SAR_RSAMODULUSLENERR, "RSA modulus length error" }, + { SAR_CSPIMPRTPUBKEYERR, "CSP import public key error" }, + { SAR_RSAENCERR, "RSA encryption error" }, + { SAR_RSADECERR, "RSA decryption error" }, + { SAR_HASHNOTEQUALERR, "Hash not equal" }, + { SAR_KEYNOTFOUNTERR, "Key not found" }, + { SAR_CERTNOTFOUNTERR, "Certificate not found" }, + { SAR_NOTEXPORTERR, "Not exported" }, + { SAR_DECRYPTPADERR, "Decrypt pad error" }, + { SAR_MACLENERR, "MAC length error" }, + { SAR_BUFFER_TOO_SMALL, "Buffer too small" }, + { SAR_KEYINFOTYPEERR, "Key info type error" }, + { SAR_NOT_EVENTERR, "No event error" }, + { SAR_DEVICE_REMOVED, "Device removed" }, + { SAR_PIN_INCORRECT, "PIN incorrect" }, + { SAR_PIN_LOCKED, "PIN locked" }, + { SAR_PIN_INVALID, "PIN invalid" }, + { SAR_PIN_LEN_RANGE, "PIN length error" }, + { SAR_USER_ALREADY_LOGGED_IN, "User already logged in" }, + { SAR_USER_PIN_NOT_INITIALIZED, "User PIN not initialized" }, + { SAR_USER_TYPE_INVALID, "User type invalid" }, + { SAR_APPLICATION_NAME_INVALID, "Application name invalid" }, + { SAR_APPLICATION_EXISTS, "Application already exist" }, + { SAR_USER_NOT_LOGGED_IN, "User not logged in" }, + { SAR_APPLICATION_NOT_EXISTS, "Application not exist" }, + { SAR_FILE_ALREADY_EXIST, "File already exist" }, + { SAR_NO_ROOM, "No file space" }, + { SAR_FILE_NOT_EXIST, "File not exist" } +}; + +LPSTR DEVAPI SKF_GetErrorString(ULONG ulError) +{ + int i; + for (i = 0; i < sizeof(skf_errstr)/sizeof(skf_errstr[0]); i++) { + if (ulError == skf_errstr[i].err_no) { + return (LPSTR)skf_errstr[i].err_str; + } + } + return (LPSTR)"(undef)"; +} + diff --git a/crypto/skf/skf_ex.h b/crypto/skf/skf_ex.h new file mode 100644 index 00000000..aacef416 --- /dev/null +++ b/crypto/skf/skf_ex.h @@ -0,0 +1,237 @@ +/* crypto/skf/skf_ex.h */ +/* ==================================================================== + * Copyright (c) 2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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. + * ==================================================================== + * + */ + +#ifndef HEADER_SKF_EX_H +#define HEADER_SKF_EX_H + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +RSA *RSA_new_from_RSAPUBLICKEYBLOB(const RSAPUBLICKEYBLOB *blob); +RSA *RSA_new_from_RSAPRIVATEKEYBLOB(const RSAPRIVATEKEYBLOB *blob); +int RSA_set_RSAPUBLICKEYBLOB(RSA *rsa, const RSAPUBLICKEYBLOB *blob); +int RSA_get_RSAPUBLICKEYBLOB(RSA *rsa, RSAPUBLICKEYBLOB *blob); +int RSA_set_RSAPRIVATEKEYBLOB(RSA *rsa, const RSAPRIVATEKEYBLOB *blob); +int RSA_get_RSAPRIVATEKEYBLOB(RSA *rsa, RSAPRIVATEKEYBLOB *blob); + +EC_KEY *EC_KEY_new_from_ECCPUBLICKEYBLOB(const ECCPUBLICKEYBLOB *blob); +EC_KEY *EC_KEY_new_from_ECCPRIVATEKEYBLOB(const ECCPRIVATEKEYBLOB *blob); +int EC_KEY_set_ECCPUBLICKEYBLOB(EC_KEY *ec_key, const ECCPUBLICKEYBLOB *blob); +int EC_KEY_get_ECCPUBLICKEYBLOB(EC_KEY *ec_key, ECCPUBLICKEYBLOB *blob); +int EC_KEY_set_ECCPRIVATEKEYBLOB(EC_KEY *ec_key, const ECCPRIVATEKEYBLOB *blob); +int EC_KEY_get_ECCPRIVATEKEYBLOB(EC_KEY *ec_key, ECCPRIVATEKEYBLOB *blob); + +SM2_CIPHERTEXT_VALUE *SM2_CIPHERTEXT_VALUE_new_from_ECCCIPHERBLOB(const ECCCIPHERBLOB *blob); +int SM2_CIPHERTEXT_VALUE_set_ECCCIPHERBLOB(SM2_CIPHERTEXT_VALUE *cv, const ECCCIPHERBLOB *blob); +int SM2_CIPHERTEXT_VALUE_get_ECCCIPHERBLOB(const SM2_CIPHERTEXT_VALUE *cv, ECCCIPHERBLOB *blob); + +ECDSA_SIG *ECDSA_SIG_new_from_ECCSIGNATUREBLOB(const ECCSIGNATUREBLOB *blob); +int ECDSA_SIG_get_ECCSIGNATUREBLOB(const ECDSA_SIG *sig, ECCSIGNATUREBLOB *blob); +int ECDSA_SIG_set_ECCSIGNATUREBLOB(ECDSA_SIG *sig, const ECCSIGNATUREBLOB *blob); + +/* 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_SKF_strings(void); + +/* Error codes for the SKF functions. */ + +/* Function codes. */ +# define SKF_F_ECDSA_SIG_GET_ECCSIGNATUREBLOB 143 +# define SKF_F_ECDSA_SIG_NEW_FROM_ECCSIGNATUREBLOB 144 +# define SKF_F_ECDSA_SIG_SET_ECCSIGNATUREBLOB 145 +# define SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB 155 +# define SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB 156 +# define SKF_F_EC_KEY_NEW_FROM_ECCPRIVATEKEYBLOB 146 +# define SKF_F_EC_KEY_NEW_FROM_ECCPUBLICKEYBLOB 147 +# define SKF_F_EC_KEY_SET_ECCPRIVATEKEYBLOB 157 +# define SKF_F_EC_KEY_SET_ECCPUBLICKEYBLOB 158 +# define SKF_F_RSA_GET_RSAPRIVATEKEYBLOB 169 +# define SKF_F_RSA_NEW_FROM_RSAPRIVATEKEYBLOB 163 +# define SKF_F_RSA_NEW_FROM_RSAPUBLICKEYBLOB 164 +# define SKF_F_RSA_SET_RSAPRIVATEKEYBLOB 170 +# define SKF_F_RSA_SET_RSAPUBLICKEYBLOB 165 +# define SKF_F_SKF_CHANGEDEVAUTHKEY 100 +# define SKF_F_SKF_CHANGEPIN 101 +# define SKF_F_SKF_CLEARSECURESTATE 102 +# define SKF_F_SKF_CLOSEHANDLE 136 +# define SKF_F_SKF_CONNECTDEV 103 +# define SKF_F_SKF_CREATEAPPLICATION 104 +# define SKF_F_SKF_CREATEFILE 105 +# define SKF_F_SKF_DECRYPT 159 +# define SKF_F_SKF_DECRYPTFINAL 130 +# define SKF_F_SKF_DECRYPTINIT 160 +# define SKF_F_SKF_DECRYPTUPDATE 161 +# define SKF_F_SKF_DELETEAPPLICATION 106 +# define SKF_F_SKF_DELETEFILE 107 +# define SKF_F_SKF_DEVAUTH 108 +# define SKF_F_SKF_DIGEST 137 +# define SKF_F_SKF_DIGESTFINAL 109 +# define SKF_F_SKF_DIGESTINIT 138 +# define SKF_F_SKF_DIGESTUPDATE 139 +# define SKF_F_SKF_DISCONNECTDEV 110 +# define SKF_F_SKF_ENCRYPT 162 +# define SKF_F_SKF_ENCRYPTFINAL 131 +# define SKF_F_SKF_ENCRYPTINIT 111 +# define SKF_F_SKF_ENCRYPTUPDATE 112 +# define SKF_F_SKF_ENUMAPPLICATION 113 +# define SKF_F_SKF_ENUMDEV 114 +# define SKF_F_SKF_ENUMFILES 115 +# define SKF_F_SKF_EXTECCDECRYPT 148 +# define SKF_F_SKF_EXTECCENCRYPT 149 +# define SKF_F_SKF_EXTECCSIGN 150 +# define SKF_F_SKF_EXTECCVERIFY 151 +# define SKF_F_SKF_EXTRSAPRIKEYOPERATION 166 +# define SKF_F_SKF_EXTRSAPUBKEYOPERATION 167 +# define SKF_F_SKF_GENEXTRSAKEY 132 +# define SKF_F_SKF_GENRANDOM 133 +# define SKF_F_SKF_GETDEVINFO 116 +# define SKF_F_SKF_GETDEVSTATE 117 +# define SKF_F_SKF_GETFILEINFO 118 +# define SKF_F_SKF_GETPININFO 119 +# define SKF_F_SKF_HANDLE_GET_CBCMAC_CTX 140 +# define SKF_F_SKF_HANDLE_GET_CIPHER_CTX 141 +# define SKF_F_SKF_HANDLE_GET_MD_CTX 142 +# define SKF_F_SKF_LOCKDEV 120 +# define SKF_F_SKF_MAC 168 +# define SKF_F_SKF_MACFINAL 134 +# define SKF_F_SKF_MACINIT 121 +# define SKF_F_SKF_MACUPDATE 135 +# define SKF_F_SKF_READFILE 122 +# define SKF_F_SKF_SETLABEL 123 +# define SKF_F_SKF_SETSYMMKEY 124 +# define SKF_F_SKF_TRANSMIT 125 +# define SKF_F_SKF_UNBLOCKPIN 126 +# define SKF_F_SKF_UNLOCKDEV 127 +# define SKF_F_SKF_VERIFYPIN 128 +# define SKF_F_SKF_WRITEFILE 129 +# define SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB 152 +# define SKF_F_SM2_CIPHERTEXT_VALUE_NEW_FROM_ECCCIPHERBLOB 153 +# define SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB 154 + +/* Reason codes. */ +# define SKF_R_ALGOR_NOT_SUPPORTED 100 +# define SKF_R_BAD_ARGUMENT 101 +# define SKF_R_BUFFER_TOO_SMALL 102 +# define SKF_R_CMAC_LIB 103 +# define SKF_R_CTX_NOT_CREATED 121 +# define SKF_R_DECODE_EC_PRIVATE_KEY_FAILED 131 +# define SKF_R_DECODE_EC_PUBLIC_KEY_FAILED 132 +# define SKF_R_DECRYPT_FAILED 133 +# define SKF_R_ENCODE_CIPHERTEXT_FAILED 134 +# define SKF_R_ENCODE_FAILED 114 +# define SKF_R_ENCODE_SIGNATURE_FAILED 135 +# define SKF_R_ENCRYPT_FAILED 136 +# define SKF_R_FAIL 104 +# define SKF_R_FREE_HANDLE_FAILED 128 +# define SKF_R_GEN_RSA_FAILED 115 +# define SKF_R_INVALID_ALGID 122 +# define SKF_R_INVALID_ALGOR 156 +# define SKF_R_INVALID_APP_HANDLE 105 +# define SKF_R_INVALID_ARGUMENTS 123 +# define SKF_R_INVALID_BIGNUM_LENGTH 137 +# define SKF_R_INVALID_BLOB 124 +# define SKF_R_INVALID_CIPHERTEXT 138 +# define SKF_R_INVALID_CIPHERTEXT_LENGTH 139 +# define SKF_R_INVALID_CIPHERTEXT_MAC 140 +# define SKF_R_INVALID_CIPHERTEXT_POINT 141 +# define SKF_R_INVALID_CIPHER_CTX_HANDLE 154 +# define SKF_R_INVALID_DEV_HANDLE 106 +# define SKF_R_INVALID_DIGEST_LENGTH 142 +# define SKF_R_INVALID_ECC_PRIVATE_KEY 143 +# define SKF_R_INVALID_ECC_PUBLIC_KEY 144 +# define SKF_R_INVALID_EC_KEY 151 +# define SKF_R_INVALID_EC_PRIVATE_KEY 145 +# define SKF_R_INVALID_EC_PUBLIC_KEY 146 +# define SKF_R_INVALID_HANDLE 107 +# define SKF_R_INVALID_HANDLE_MAGIC 125 +# define SKF_R_INVALID_HANDLE_TYPE 126 +# define SKF_R_INVALID_HASH_HANDLE 127 +# define SKF_R_INVALID_ID_LENGTH 129 +# define SKF_R_INVALID_INPUT_LENGTH 157 +# define SKF_R_INVALID_IV_LENGTH 108 +# define SKF_R_INVALID_KEY_HANDLE 116 +# define SKF_R_INVALID_KEY_LENGTH 117 +# define SKF_R_INVALID_MAC_HANDLE 118 +# define SKF_R_INVALID_PLAINTEXT_LENGTH 147 +# define SKF_R_INVALID_PRIVATE_KEY 152 +# define SKF_R_INVALID_PUBLIC_KEY 153 +# define SKF_R_INVALID_RANDOM_LENGTH 119 +# define SKF_R_INVALID_RSA_PRIVATE_KEY 158 +# define SKF_R_INVALID_RSA_PUBLIC_KEY 159 +# define SKF_R_INVALID_SIGNATURE 148 +# define SKF_R_MALLOC_FAILED 120 +# define SKF_R_NO_PUBLIC_KEY 130 +# define SKF_R_NULL_ARGUMENT 109 +# define SKF_R_SAR_FAIL 110 +# define SKF_R_SAR_OK 111 +# define SKF_R_SET_CIPHER_CTX_FAILED 155 +# define SKF_R_SIGN_FAILED 149 +# define SKF_R_UNKNOWN_ALGOR 112 +# define SKF_R_UNKNOWN_APP 113 +# define SKF_R_VERIFY_NOT_PASS 150 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/crypto/skf/skf_gmssl.c b/crypto/skf/skf_gmssl.c deleted file mode 100644 index eb0aec5a..00000000 --- a/crypto/skf/skf_gmssl.c +++ /dev/null @@ -1,722 +0,0 @@ -/* engines/skf/skf_gmssl.c */ -/* ==================================================================== - * Copyright (c) 2015-2016 The GmSSL 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 GmSSL Project. - * (http://gmssl.org/)" - * - * 4. The name "GmSSL Project" must not be used to endorse or promote - * products derived from this software without prior written - * permission. For written permission, please contact - * guanzhi1980@gmail.com. - * - * 5. Products derived from this software may not be called "GmSSL" - * nor may "GmSSL" appear in their names without prior written - * permission of the GmSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the GmSSL Project - * (http://gmssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 should be the SKF soft-token based on GmSSL libcrypto. - */ - -#include -#include -#include "skf.h" - -#define DEV_NAME "skf-soft-token" -#define DEV_NAME_LIST DEV_NAME"\0" -#define APP_NAME "default-app" -#define APP_NAME_LIST APP_NAME"\0" -#define CONTAINER_NAME "container0" -#define CONTAINER_NAME_LIST CONTAINER_NAME"\0" - - -ULONG DEVAPI SKF_WaitForDevEvent(LPSTR szDevName, - ULONG *pulDevNameLen, ULONG *pulEvent) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_CancelWaitForDevEvent() -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_EnumDev(BOOL bPresent, - LPSTR szNameList, - ULONG *pulSize) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_ConnectDev(LPSTR szName, - DEVHANDLE *phDev) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_DisConnectDev(DEVHANDLE hDev) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_GetDevState(LPSTR szDevName, - ULONG *pulDevState) -{ - if (!pulDevState) { - return SAR_INVALIDPARAMERR; - } - *pulDevState = DEV_PRESENT_STATE; - return SAR_OK; -} - -ULONG DEVAPI SKF_SetLabel(DEVHANDLE hDev, - LPSTR szLabel) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_GetDevInfo(DEVHANDLE hDev, - DEVINFO *pDevInfo) -{ - DEVINFO devInfo; - - bzero(&devInfo, sizeof(DEVINFO)); - devInfo.Version.major = 1; - devInfo.Version.minor = 0; - strcpy((char *)&devInfo.Manufacturer, "GmSSL Project (http://gmssl.org)"); - strcpy((char *)&devInfo.Issuer, "GmSSL Project (http://gmssl.org)"); - strcpy((char *)&devInfo.Label, "SKF Softotken"); - strcpy((char *)&devInfo.SerialNumber, "000001"); - devInfo.HWVersion.major = 1; - devInfo.HWVersion.minor = 0; - devInfo.FirmwareVersion.major = 1; - devInfo.FirmwareVersion.minor = 0; - devInfo.AlgSymCap = 0x0000041F; - devInfo.AlgAsymCap = 0x00030700; - devInfo.AlgHashCap = 0x00000007; - devInfo.DevAuthAlgId = SGD_SM4_CBC; - devInfo.TotalSpace = 0; - devInfo.FreeSpace = 0; - devInfo.MaxECCBufferSize = 0; /* FIXME: max inlen of ECC encrypt */ - devInfo.MaxBufferSize = 0; /* FIXME: max inlen of SM4 encrypt */ - - memcpy(pDevInfo, &devInfo, sizeof(DEVINFO)); - return SAR_OK; -} - -ULONG DEVAPI SKF_LockDev(DEVHANDLE hDev, - ULONG ulTimeOut) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_UnlockDev(DEVHANDLE hDev) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_Transmit(DEVHANDLE hDev, - BYTE *pbCommand, - ULONG ulCommandLen, - BYTE *pbData, - ULONG *pulDataLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_ChangeDevAuthKey(DEVHANDLE hDev, - BYTE *pbKeyValue, - ULONG ulKeyLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_DevAuth(DEVHANDLE hDev, - BYTE *pbAuthData, - ULONG ulLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_ChangePIN(HAPPLICATION hApplication, - ULONG ulPINType, - LPSTR szOldPin, - LPSTR szNewPin, - ULONG *pulRetryCount) -{ - return SAR_OK; -} - -LONG DEVAPI SKF_GetPINInfo(HAPPLICATION hApplication, - ULONG ulPINType, - ULONG *pulMaxRetryCount, - ULONG *pulRemainRetryCount, - BOOL *pbDefaultPin) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_VerifyPIN(HAPPLICATION hApplication, - ULONG ulPINType, - LPSTR szPIN, - ULONG *pulRetryCount) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_UnblockPIN(HAPPLICATION hApplication, - LPSTR szAdminPIN, - LPSTR szNewUserPIN, - ULONG *pulRetryCount) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_ClearSecureState(HAPPLICATION hApplication) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_CreateApplication(DEVHANDLE hDev, - LPSTR szAppName, - LPSTR szAdminPin, - DWORD dwAdminPinRetryCount, - LPSTR szUserPin, - DWORD dwUserPinRetryCount, - DWORD dwCreateFileRights, - HAPPLICATION *phApplication) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_EnumApplication(DEVHANDLE hDev, - LPSTR szAppName, - ULONG *pulSize) -{ - if (!szAppName) { - *pulSize = sizeof(APP_NAME_LIST); - return SAR_OK; - } - if (*pulSize < sizeof(APP_NAME_LIST)) { - return SAR_BUFFER_TOO_SMALL; - } - memcpy(szAppName, APP_NAME_LIST, sizeof(APP_NAME_LIST)); - return SAR_OK; -} - -ULONG DEVAPI SKF_DeleteApplication(DEVHANDLE hDev, - LPSTR szAppName) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_OpenApplication(DEVHANDLE hDev, - LPSTR szAppName, - HAPPLICATION *phApplication) -{ - if (!phApplication) { - return SAR_INVALIDPARAMERR; - } - return SAR_OK; -} - -ULONG DEVAPI SKF_CloseApplication(HAPPLICATION hApplication) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_CreateFile(HAPPLICATION hApplication, - LPSTR szFileName, - ULONG ulFileSize, - ULONG ulReadRights, - ULONG ulWriteRights) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_DeleteFile(HAPPLICATION hApplication, - LPSTR szFileName) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_EnumFiles(HAPPLICATION hApplication, - LPSTR szFileList, - ULONG *pulSize) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_GetFileInfo(HAPPLICATION hApplication, - LPSTR szFileName, - FILEATTRIBUTE *pFileInfo) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ReadFile(HAPPLICATION hApplication, - LPSTR szFileName, - ULONG ulOffset, - ULONG ulSize, - BYTE * pbOutData, - ULONG *pulOutLen) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_WriteFile(HAPPLICATION hApplication, - LPSTR szFileName, - ULONG ulOffset, - BYTE *pbData, - ULONG ulSize) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_CreateContainer(HAPPLICATION hApplication, - LPSTR szContainerName, - HCONTAINER *phContainer) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_DeleteContainer(HAPPLICATION hApplication, - LPSTR szContainerName) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_EnumContainer(HAPPLICATION hApplication, - LPSTR szContainerName, - ULONG *pulSize) -{ - if (!pulSize) { - return SAR_INVALIDPARAMERR; - } - if (!szContainerName) { - *pulSize = sizeof(CONTAINER_NAME_LIST); - return SAR_OK; - } - if (*pulSize < sizeof(CONTAINER_NAME_LIST)) { - return SAR_BUFFER_TOO_SMALL; - } - memcpy(szContainerName, CONTAINER_NAME_LIST, sizeof(CONTAINER_NAME_LIST)); - return SAR_OK; -} - -ULONG DEVAPI SKF_OpenContainer(HAPPLICATION hApplication, - LPSTR szContainerName, - HCONTAINER *phContainer) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_CloseContainer(HCONTAINER hContainer) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_GetContainerType(HCONTAINER hContainer, - ULONG *pulContainerType) -{ - if (!pulContainerType) { - return SAR_INVALIDPARAMERR; - } - *pulContainerType = CONTAINER_TYPE_ECC; - return SAR_OK; -} - -ULONG DEVAPI SKF_ImportCertificate(HCONTAINER hContainer, - BOOL bSignFlag, - BYTE *pbCert, - ULONG ulCertLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_ExportCertificate(HCONTAINER hContainer, - BOOL bSignFlag, - BYTE* pbCert, - ULONG *pulCertLen) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_GenRandom(DEVHANDLE hDev, - BYTE *pbRandom, - ULONG ulRandomLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_GenExtRSAKey(DEVHANDLE hDev, - ULONG ulBitsLen, - RSAPRIVATEKEYBLOB *pBlob) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_GenRSAKeyPair(HCONTAINER hContainer, - ULONG ulBitsLen, - RSAPUBLICKEYBLOB *pBlob) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ImportRSAKeyPair(HCONTAINER hContainer, - ULONG ulSymAlgId, - BYTE *pbWrappedKey, - ULONG ulWrappedKeyLen, - BYTE *pbEncryptedData, - ULONG ulEncryptedDataLen) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_RSASignData(HCONTAINER hContainer, - BYTE *pbData, - ULONG ulDataLen, - BYTE *pbSignature, - ULONG *pulSignLen) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_RSAVerify(DEVHANDLE hDev, - RSAPUBLICKEYBLOB *pRSAPubKeyBlob, - BYTE *pbData, - ULONG ulDataLen, - BYTE *pbSignature, - ULONG ulSignLen) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_RSAExportSessionKey(HCONTAINER hContainer, - ULONG ulAlgId, - RSAPUBLICKEYBLOB *pPubKey, - BYTE *pbData, - ULONG *pulDataLen, - HANDLE *phSessionKey) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ExtRSAPubKeyOperation(DEVHANDLE hDev, - RSAPUBLICKEYBLOB *pRSAPubKeyBlob, - BYTE *pbInput, - ULONG ulInputLen, - BYTE *pbOutput, - ULONG *pulOutputLen) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ExtRSAPriKeyOperation(DEVHANDLE hDev, - RSAPRIVATEKEYBLOB *pRSAPriKeyBlob, - BYTE *pbInput, - ULONG ulInputLen, - BYTE *pbOutput, - ULONG *pulOutputLen) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_GenECCKeyPair(HCONTAINER hContainer, - ULONG ulAlgId, - ECCPUBLICKEYBLOB *pBlob) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ImportECCKeyPair(HCONTAINER hContainer, - PENVELOPEDKEYBLOB pEnvelopedKeyBlob) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ECCSignData(HCONTAINER hContainer, - BYTE *pbData, - ULONG ulDataLen, - PECCSIGNATUREBLOB pSignature) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ECCVerify(DEVHANDLE hDev, - ECCPUBLICKEYBLOB *pECCPubKeyBlob, - BYTE *pbData, - ULONG ulDataLen, - PECCSIGNATUREBLOB pSignature) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ECCExportSessionKey(HCONTAINER hContainer, - ULONG ulAlgId, - ECCPUBLICKEYBLOB *pPubKey, - PECCCIPHERBLOB pData, - HANDLE *phSessionKey) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ExtECCEncrypt(DEVHANDLE hDev, - ECCPUBLICKEYBLOB *pECCPubKeyBlob, - BYTE *pbPlainText, - ULONG ulPlainTextLen, - PECCCIPHERBLOB pCipherText) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ExtECCDecrypt(DEVHANDLE hDev, - ECCPRIVATEKEYBLOB *pECCPriKeyBlob, - PECCCIPHERBLOB pCipherText, - BYTE *pbPlainText, - ULONG *pulPlainTextLen) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ExtECCSign(DEVHANDLE hDev, - ECCPRIVATEKEYBLOB *pECCPriKeyBlob, - BYTE *pbData, - ULONG ulDataLen, - PECCSIGNATUREBLOB pSignature) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ExtECCVerify(DEVHANDLE hDev, - ECCPUBLICKEYBLOB *pECCPubKeyBlob, - BYTE *pbData, - ULONG ulDataLen, - PECCSIGNATUREBLOB pSignature) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_GenerateAgreementDataWithECC(HCONTAINER hContainer, - ULONG ulAlgId, - ECCPUBLICKEYBLOB *pTempECCPubKeyBlob, - BYTE *pbID, - ULONG ulIDLen, - HANDLE *phAgreementHandle) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_GenerateAgreementDataAndKeyWithECC(HANDLE hContainer, - ULONG ulAlgId, - ECCPUBLICKEYBLOB *pSponsorECCPubKeyBlob, - ECCPUBLICKEYBLOB *pSponsorTempECCPubKeyBlob, - ECCPUBLICKEYBLOB *pTempECCPubKeyBlob, - BYTE *pbID, - ULONG ulIDLen, - BYTE *pbSponsorID, - ULONG ulSponsorIDLen, - HANDLE *phKeyHandle) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_GenerateKeyWithECC(HANDLE hAgreementHandle, - ECCPUBLICKEYBLOB *pECCPubKeyBlob, - ECCPUBLICKEYBLOB *pTempECCPubKeyBlob, - BYTE *pbID, - ULONG ulIDLen, - HANDLE *phKeyHandle) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ExportPublicKey(HCONTAINER hContainer, - BOOL bSignFlag, - BYTE* pbBlob, - ULONG* pulBlobLen) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_ImportSessionKey(HCONTAINER hContainer, - ULONG ulAlgId, - BYTE *pbWrapedData, - ULONG ulWrapedLen, - HANDLE *phKey) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_SetSymmKey(DEVHANDLE hDev, - BYTE *pbKey, - ULONG ulAlgID, - HANDLE *phKey) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_EncryptInit(HANDLE hKey, - BLOCKCIPHERPARAM EncryptParam) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_Encrypt(HANDLE hKey, - BYTE *pbData, - ULONG ulDataLen, - BYTE *pbEncryptedData, - ULONG *pulEncryptedLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_EncryptUpdate(HANDLE hKey, - BYTE *pbData, - ULONG ulDataLen, - BYTE *pbEncryptedData, - ULONG *pulEncryptedLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_EncryptFinal(HANDLE hKey, - BYTE *pbEncryptedData, - ULONG *pulEncryptedDataLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_DecryptInit(HANDLE hKey, - BLOCKCIPHERPARAM DecryptParam) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_Decrypt(HANDLE hKey, - BYTE *pbEncryptedData, - ULONG ulEncryptedLen, - BYTE *pbData, - ULONG *pulDataLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_DecryptUpdate(HANDLE hKey, - BYTE *pbEncryptedData, - ULONG ulEncryptedLen, - BYTE *pbData, - ULONG *pulDataLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_DecryptFinal(HANDLE hKey, - BYTE *pbDecryptedData, - ULONG *pulDecryptedDataLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_DigestInit(DEVHANDLE hDev, - ULONG ulAlgID, - ECCPUBLICKEYBLOB *pPubKey, - BYTE *pucID, - ULONG ulIDLen, - HANDLE *phHash) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_Digest(HANDLE hHash, - BYTE *pbData, - ULONG ulDataLen, - BYTE *pbHashData, - ULONG *pulHashLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_DigestUpdate(HANDLE hHash, - BYTE *pbData, - ULONG ulDataLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_DigestFinal(HANDLE hHash, - BYTE *pHashData, - ULONG *pulHashLen) -{ - return SAR_OK; -} - -ULONG DEVAPI SKF_MacInit(HANDLE hKey, - BLOCKCIPHERPARAM *pMacParam, - HANDLE *phMac) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_Mac(HANDLE hMac, - BYTE *pbData, - ULONG ulDataLen, - BYTE *pbMacData, - ULONG *pulMacLen) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_MacUpdate(HANDLE hMac, - BYTE *pbData, - ULONG ulDataLen) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_MacFinal(HANDLE hMac, - BYTE *pbMacData, - ULONG *pulMacDataLen) -{ - return SAR_NOTSUPPORTYETERR; -} - -ULONG DEVAPI SKF_CloseHandle(HANDLE hHandle) -{ - return SAR_NOTSUPPORTYETERR; -} - diff --git a/crypto/skf/skf_handle.c b/crypto/skf/skf_handle.c new file mode 100644 index 00000000..5d280564 --- /dev/null +++ b/crypto/skf/skf_handle.c @@ -0,0 +1,206 @@ +/* crypto/skf/skf_handle.c */ +/* ==================================================================== + * Copyright (c) 2015-2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 +#include +#include +#include "skf_lcl.h" + + +EVP_MD_CTX *SKF_HANDLE_get_md_ctx(SKF_HANDLE *handle) +{ + EVP_MD_CTX *ret; + + if (!handle) { + SKFerr(SKF_F_SKF_HANDLE_GET_MD_CTX, SKF_R_NULL_ARGUMENT); + return NULL; + } + + if (handle->magic != SKF_HANDLE_MAGIC) { + SKFerr(SKF_F_SKF_HANDLE_GET_MD_CTX, SKF_R_INVALID_HANDLE_MAGIC); + return NULL; + } + + if (handle->type != SKF_HASH_HANDLE) { + SKFerr(SKF_F_SKF_HANDLE_GET_MD_CTX, SKF_R_INVALID_HANDLE_TYPE); + return NULL; + } + + if (!(ret = handle->u.md_ctx)) { + SKFerr(SKF_F_SKF_HANDLE_GET_MD_CTX, SKF_R_CTX_NOT_CREATED); + return NULL; + } + + return ret; +} + +CBCMAC_CTX *SKF_HANDLE_get_cbcmac_ctx(SKF_HANDLE *handle) +{ + CBCMAC_CTX *ret; + + if (!handle) { + SKFerr(SKF_F_SKF_HANDLE_GET_CBCMAC_CTX, SKF_R_NULL_ARGUMENT); + return NULL; + } + + if (handle->magic != SKF_HANDLE_MAGIC) { + SKFerr(SKF_F_SKF_HANDLE_GET_CBCMAC_CTX, SKF_R_INVALID_HANDLE_MAGIC); + return NULL; + } + + if (handle->type != SKF_MAC_HANDLE) { + SKFerr(SKF_F_SKF_HANDLE_GET_CBCMAC_CTX, SKF_R_INVALID_HANDLE_TYPE); + return NULL; + } + + if (!(ret = handle->u.cbcmac_ctx)) { + SKFerr(SKF_F_SKF_HANDLE_GET_CBCMAC_CTX, SKF_R_CTX_NOT_CREATED); + return NULL; + } + + return ret; +} + +EVP_CIPHER_CTX *SKF_HANDLE_get_cipher_ctx(SKF_HANDLE *handle) +{ + EVP_CIPHER_CTX *ret; + + if (!handle) { + SKFerr(SKF_F_SKF_HANDLE_GET_CIPHER_CTX, SKF_R_NULL_ARGUMENT); + return NULL; + } + + if (handle->magic != SKF_HANDLE_MAGIC) { + SKFerr(SKF_F_SKF_HANDLE_GET_CIPHER_CTX, SKF_R_INVALID_HANDLE_MAGIC); + return NULL; + } + + if (handle->type != SKF_CIPHER_HANDLE) { + SKFerr(SKF_F_SKF_HANDLE_GET_CIPHER_CTX, SKF_R_INVALID_HANDLE_TYPE); + return NULL; + } + + if (!(ret = handle->u.cipher_ctx)) { + SKFerr(SKF_F_SKF_HANDLE_GET_CIPHER_CTX, SKF_R_CTX_NOT_CREATED); + return NULL; + } + + return ret; +} + +int SKF_HANDLE_free_cipher_ctx(SKF_HANDLE *handle) +{ + return 0; +} + +int SKF_HANDLE_free(SKF_HANDLE *handle) +{ + return 0; +} + +unsigned char *SKF_HANDLE_get_key(SKF_HANDLE *handle) +{ + return NULL; +} + +SKF_HANDLE *SKF_HANDLE_new(int type) +{ + return NULL; +} + +int SKF_HANDLE_set1_cipher_ctx(SKF_HANDLE *handle, EVP_CIPHER_CTX *ctx) +{ + return 0; +} + + + +ULONG DEVAPI SKF_CloseHandle(HANDLE hHandle) +{ + SKF_HANDLE *handle; + + if (!(handle = (SKF_HANDLE *)hHandle)) { + SKFerr(SKF_F_SKF_CLOSEHANDLE, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + if (handle->magic != SKF_HANDLE_MAGIC) { + SKFerr(SKF_F_SKF_CLOSEHANDLE, SKF_R_INVALID_HANDLE_MAGIC); + return SAR_INVALIDPARAMERR; + } + + switch (handle->type) { + case SKF_KEY_HANDLE: + OPENSSL_cleanse(handle->key, EVP_MAX_KEY_LENGTH); + // FIXME: we need to make sure there are no pending operation + if (handle->u.cipher_ctx) { + EVP_CIPHER_CTX_cleanup(handle->u.cipher_ctx); + } + break; + + case SKF_MAC_HANDLE: + CBCMAC_CTX_cleanup(handle->u.cbcmac_ctx); + break; + + case SKF_HASH_HANDLE: + EVP_MD_CTX_cleanup(handle->u.md_ctx); + break; + + default: + SKFerr(SKF_F_SKF_CLOSEHANDLE, SKF_R_INVALID_HANDLE_TYPE); + return SAR_INVALIDPARAMERR; + } + + /* now we remove this handle from list */ + + return SAR_OK; +} + diff --git a/crypto/skf/skf_lcl.h b/crypto/skf/skf_lcl.h index 6cbdd87d..6343b7cd 100644 --- a/crypto/skf/skf_lcl.h +++ b/crypto/skf/skf_lcl.h @@ -1,4 +1,4 @@ -/* crypto/skf/skf.h */ +/* crypto/skf/skf_lcl.h */ /* ==================================================================== * Copyright (c) 2016 The GmSSL Project. All rights reserved. * @@ -49,87 +49,52 @@ * */ -#ifndef HEADER_SKF_H -#define HEADER_SKF_H +#ifndef HEADER_SKF_LCL_H +#define HEADER_SKF_LCL_H + +#include +#include +#include #ifdef __cplusplus extern "C" { #endif +#define SKF_HANDLE_MAGIC 0x31323334 +#define SKF_HASH_HANDLE 1 +#define SKF_MAC_HANDLE 2 +#define SKF_KEY_HANDLE 10 +#define SKF_CIPHER_HANDLE 11 -int EC_KEY_set_ECCPUBLICKEYBLOB(EC_KEY *ec_key, const ECCPUBLICKEYBLOB *blob); -int EC_KEY_get_ECCPUBLICKEYBLOB(EC_KEY *ec_key, ECCPUBLICKEYBLOB *blob); -int EC_KEY_set_ECCPRIVATEKEYBLOB(EC_KEY *ec_key, const ECCPRIVATEKEYBLOB *blob) -int EC_KEY_get_ECCPRIVATEKEYBLOB(EC_KEY *ec_key, ECCPRIVATEKEYBLOB *blob); +struct SKF_HANDLE { + unsigned int magic; + int type; + int algid; + unsigned int keylen; + unsigned char key[EVP_MAX_KEY_LENGTH]; + union { + EVP_MD_CTX *md_ctx; + CBCMAC_CTX *cbcmac_ctx; + EVP_CIPHER_CTX *cipher_ctx; + } u; + struct SKF_HANDLE *next; + struct SKF_HANDLE *prev; +}; -int SM2_CIPHERTEXT_VALUE_set_ECCCIPHERBLOB(SM2_CIPHERTEXT_VALUE *cv, - const ECCCIPHERBLOB *blob); -int SM2_CIPHERTEXT_VALUE_get_ECCCIPHERBLOB(const SM2_CIPHERTEXT_VALUE *a, - void *out, size_t *outlen); -int ECDSA_SIG_to_SKF_ECCSIGNATUREBLOB(const ECDSA_SIG *sig, - const EC_GROUP *group, void *out, size_t *outlen); +typedef struct SKF_HANDLE SKF_HANDLE; -int RSA_set_RSAPUBLICKEYBLOB(RSA *rsa, const RSAPUBLICKEYBLOB *blob); -int RSA_get_RSAPUBLICKEYBLOB(RSA *rsa, RSAPUBLICKEYBLOB *blob); -int RSA_set_RSAPRIVATEKEYBLOB(RSA *rsa, const RSAPRIVATEKEYBLOB *blob); -int RSA_to_RSAPRIVATEKEYBLOB(RSA *rsa, RSAPRIVATEKEYBLOB *blob); +SKF_HANDLE *SKF_HANDLE_new(int type); +EVP_MD_CTX *SKF_HANDLE_get_md_ctx(SKF_HANDLE *hHash); +CBCMAC_CTX *SKF_HANDLE_get_cbcmac_ctx(SKF_HANDLE *hMac); +EVP_CIPHER_CTX *SKF_HANDLE_get_cipher_ctx(SKF_HANDLE *hKey); +unsigned char *SKF_HANDLE_get_key(SKF_HANDLE *hKey); +int SKF_HANDLE_set1_md_ctx(SKF_HANDLE *hHash, EVP_MD_CTX *ctx); +int SKF_HANDLE_set1_cbcmac_ctx(SKF_HANDLE *hMac, CBCMAC_CTX *ctx); +int SKF_HANDLE_set1_cipher_ctx(SKF_HANDLE *hKey, EVP_CIPHER_CTX *ctx); +int SKF_HANDLE_free(SKF_HANDLE *handle); - -#define SAR_OK 0x00000000 -#define SAR_FAIL 0x0A000001 -#define SAR_UNKNOWNERR 0x0A000002 -#define SAR_NOTSUPPORTYETERR 0x0A000003 -#define SAR_FILEERR 0x0A000004 -#define SAR_INVALIDHANDLEERR 0x0A000005 -#define SAR_INVALIDPARAMERR 0x0A000006 -#define SAR_READFILEERR 0x0A000007 -#define SAR_WRITEFILEERR 0x0A000008 -#define SAR_NAMELENERR 0x0A000009 -#define SAR_KEYUSAGEERR 0x0A00000A -#define SAR_MODULUSLENERR 0x0A00000B -#define SAR_NOTINITIALIZEERR 0x0A00000C -#define SAR_OBJERR 0x0A00000D -#define SAR_MEMORYERR 0x0A00000E -#define SAR_TIMEOUTERR 0x0A00000F -#define SAR_INDATALENERR 0x0A000010 -#define SAR_INDATAERR 0x0A000011 -#define SAR_GENRANDERR 0x0A000012 -#define SAR_HASHOBJERR 0x0A000013 -#define SAR_HASHERR 0x0A000014 -#define SAR_GENRSAKEYERR 0x0A000015 -#define SAR_RSAMODULUSLENERR 0x0A000016 -#define SAR_CSPIMPRTPUBKEYERR 0x0A000017 -#define SAR_RSAENCERR 0x0A000018 -#define SAR_RSADECERR 0x0A000019 -#define SAR_HASHNOTEQUALERR 0x0A00001A -#define SAR_KEYNOTFOUNTERR 0x0A00001B -#define SAR_KEYNOTFOUNDERR 0x0A00001B -#define SAR_CERTNOTFOUNTERR 0x0A00001C -#define SAR_NOTEXPORTERR 0x0A00001D -#define SAR_DECRYPTPADERR 0x0A00001E -#define SAR_MACLENERR 0x0A00001F -#define SAR_BUFFER_TOO_SMALL 0x0A000020 -#define SAR_KEYINFOTYPEERR 0x0A000021 -#define SAR_NOT_EVENTERR 0x0A000022 -#define SAR_DEVICE_REMOVED 0x0A000023 -#define SAR_PIN_INCORRECT 0x0A000024 -#define SAR_PIN_LOCKED 0x0A000025 -#define SAR_PIN_INVALID 0x0A000026 -#define SAR_PIN_LEN_RANGE 0x0A000027 -#define SAR_USER_ALREADY_LOGGED_IN 0x0A000028 -#define SAR_USER_PIN_NOT_INITIALIZED 0x0A000029 -#define SAR_USER_TYPE_INVALID 0x0A00002A -#define SAR_APPLICATION_NAME_INVALID 0x0A00002B -#define SAR_APPLICATION_EXISTS 0x0A00002C -#define SAR_USER_NOT_LOGGED_IN 0x0A00002D -#define SAR_APPLICATION_NOT_EXISTS 0x0A00002E -#define SAR_FILE_ALREADY_EXIST 0x0A00002F -#define SAR_NO_ROOM 0x0A000030 - - -#ifdef __cplusplus +#ifdef __cplusplus } #endif #endif - diff --git a/crypto/skf/skf_mac.c b/crypto/skf/skf_mac.c new file mode 100644 index 00000000..3b2cbf49 --- /dev/null +++ b/crypto/skf/skf_mac.c @@ -0,0 +1,179 @@ +/* crypto/skf/skf_mac.c */ +/* ==================================================================== + * Copyright (c) 2015-2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 +#include +#include +#include +#include +#include "skf_lcl.h" + + +ULONG DEVAPI SKF_MacInit(HANDLE hKey, + BLOCKCIPHERPARAM *pMacParam, + HANDLE *phMac) +{ + int ok = 0; + SKF_HANDLE *key; + SKF_HANDLE *hMac = NULL; + const EVP_CIPHER *cipher; + + if (!(key = (SKF_HANDLE *)hKey)) { + SKFerr(SKF_F_SKF_MACINIT, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + OPENSSL_assert(!pMacParam); + + if (key->magic != SKF_HANDLE_MAGIC) { + SKFerr(SKF_F_SKF_MACINIT, SKF_R_INVALID_HANDLE_MAGIC); + return SAR_INVALIDPARAMERR; + } + + if (key->type <= SKF_KEY_HANDLE) { + SKFerr(SKF_F_SKF_MACINIT, SKF_R_INVALID_KEY_HANDLE); + return SAR_INVALIDPARAMERR; + } + + if (key->algid != SGD_SM4_MAC) { + SKFerr(SKF_F_SKF_MACINIT, SKF_R_INVALID_ALGOR); + return SAR_INVALIDPARAMERR; + } + cipher = EVP_sms4_ecb(); + + if (key->keylen < SMS4_KEY_LENGTH) { + SKFerr(SKF_F_SKF_MACINIT, SKF_R_INVALID_KEY_LENGTH); + return SAR_INVALIDPARAMERR; + } + + if (!(hMac = OPENSSL_malloc(sizeof(*hMac)))) { + SKFerr(SKF_F_SKF_MACINIT, SKF_R_FAIL); + return SAR_FAIL; + } + + hMac->magic = SKF_HANDLE_MAGIC; + hMac->type = SKF_MAC_HANDLE; + hMac->algid = key->algid; + + if (!(hMac->u.cbcmac_ctx = CBCMAC_CTX_new())) { + SKFerr(SKF_F_SKF_MACINIT, ERR_R_CBCMAC_LIB); + goto end; + } + + if (!CBCMAC_Init(hMac->u.cbcmac_ctx, key->key, key->keylen, cipher, NULL)) { + SKFerr(SKF_F_SKF_MACINIT, ERR_R_CBCMAC_LIB); + return SAR_FAIL; + } + + *phMac = hMac; +end: + return SAR_OK; +} + +ULONG DEVAPI SKF_MacUpdate(HANDLE hMac, + BYTE *pbData, + ULONG ulDataLen) +{ + CBCMAC_CTX *ctx; + + if (!(ctx = SKF_HANDLE_get_cbcmac_ctx(hMac))) { + SKFerr(SKF_F_SKF_MACUPDATE, SKF_R_INVALID_MAC_HANDLE); + return SAR_INVALIDPARAMERR; + } + + if (!CBCMAC_Update(ctx, pbData, ulDataLen)) { + SKFerr(SKF_F_SKF_MACUPDATE, ERR_R_CBCMAC_LIB); + return SAR_FAIL; + } + + return SAR_OK; +} + +ULONG DEVAPI SKF_MacFinal(HANDLE hMac, + BYTE *pbMacData, + ULONG *pulMacDataLen) +{ + CBCMAC_CTX *ctx; + + if (!(ctx = SKF_HANDLE_get_cbcmac_ctx(hMac))) { + SKFerr(SKF_F_SKF_MACFINAL, SKF_R_INVALID_MAC_HANDLE); + return SAR_INVALIDPARAMERR; + } + + if (!CBCMAC_Final(ctx, pbMacData, pulMacDataLen)) { + SKFerr(SKF_F_SKF_MACFINAL, ERR_R_CBCMAC_LIB); + return SAR_FAIL; + } + + return SAR_OK; +} + +ULONG DEVAPI SKF_Mac(HANDLE hMac, + BYTE *pbData, + ULONG ulDataLen, + BYTE *pbMacData, + ULONG *pulMacLen) +{ + ULONG rv; + + if ((rv = SKF_MacUpdate(hMac, pbData, ulDataLen)) != SAR_OK) { + SKFerr(SKF_F_SKF_MAC, ERR_R_SKF_LIB); + return rv; + } + + if ((rv = SKF_MacFinal(hMac, pbMacData, pulMacLen)) != SAR_OK) { + SKFerr(SKF_F_SKF_MAC, ERR_R_SKF_LIB); + return rv; + } + + return SAR_OK; +} + diff --git a/crypto/skf/skf_rand.c b/crypto/skf/skf_rand.c new file mode 100644 index 00000000..cbccda21 --- /dev/null +++ b/crypto/skf/skf_rand.c @@ -0,0 +1,83 @@ +/* crypto/skf/skf_rand.c */ +/* ==================================================================== + * Copyright (c) 2015-2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 +#include +#include +#include +#include "skf_lcl.h" + +#define SKF_DEV_AUTH_RANDOM_LENGTH 16 +#define SKF_MAX_RANDOM_LENGTH (1024*1024*1024) +//FIXME: INT_MAX + +ULONG DEVAPI SKF_GenRandom(DEVHANDLE hDev, + BYTE *pbRandom, + ULONG ulRandomLen) +{ + if (!pbRandom) { + SKFerr(SKF_F_SKF_GENRANDOM, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + if (ulRandomLen > SKF_MAX_RANDOM_LENGTH) { + SKFerr(SKF_F_SKF_GENRANDOM, SKF_R_INVALID_RANDOM_LENGTH); + return SAR_INVALIDPARAMERR; + } + + if (!RAND_bytes(pbRandom, ulRandomLen)) { + SKFerr(SKF_F_SKF_GENRANDOM, ERR_R_RAND_LIB); + return SAR_GENRANDERR; + } + + return SAR_OK; +} + diff --git a/crypto/skf/skf_rsa.c b/crypto/skf/skf_rsa.c new file mode 100644 index 00000000..cd17220f --- /dev/null +++ b/crypto/skf/skf_rsa.c @@ -0,0 +1,377 @@ +/* crypto/skf/skf_rsa.c */ +/* ==================================================================== + * Copyright (c) 2015-2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 +#include +#include +#include +#include "skf_lcl.h" + +#if 0 +ULONG DEVAPI SKF_GenExtRSAKey(DEVHANDLE hDev, + ULONG ulBitsLen, + RSAPRIVATEKEYBLOB *pBlob) +{ + ULONG ret = SAR_FAIL; + RSA *rsa = NULL; + + if ((ulBitsLen > MAX_RSA_MODULUS_LEN * 8) || (ulBitsLen < 1024) || + (ulBitsLen % 8 != 0)) { + SKFerr(SKF_F_SKF_GENEXTRSAKEY, SKF_R_INVALID_KEY_LENGTH); + return SAR_INVALIDPARAMERR; + } + + if (!pBlob) { + SKFerr(SKF_F_SKF_GENEXTRSAKEY, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + if (!(rsa = RSA_new())) { + SKFerr(SKF_F_SKF_GENEXTRSAKEY, SKF_R_MALLOC_FAILED); + return SAR_FAIL; + } + + if (!RSA_generate_key_ex(rsa, ulBitsLen, NULL, NULL)) { + SKFerr(SKF_F_SKF_GENEXTRSAKEY, SKF_R_GEN_RSA_FAILED); + goto end; + } + + if (!RSA_get_RSAPRIVATEKEYBLOB(rsa, pBlob)) { + SKFerr(SKF_F_SKF_GENEXTRSAKEY, SKF_R_ENCODE_FAILED); + goto end; + } + + ret = SAR_OK; +end: + RSA_free(rsa); + return ret; +} + +ULONG DEVAPI SKF_ExtRSAPubKeyOperation(DEVHANDLE hDev, + RSAPUBLICKEYBLOB *pRSAPubKeyBlob, + BYTE *pbInput, + ULONG ulInputLen, + BYTE *pbOutput, + ULONG *pulOutputLen) +{ + ULONG ret = SAR_FAIL; + RSA *rsa = NULL; + int inlen, outlen; + + if (!pRSAPubKeyBlob || !pbInput || !pulOutputLen) { + SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + if (pRSAPubKeyBlob->AlgID != SGD_RSA) { + SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, SKF_R_INVALID_ALGOR); + return SAR_INVALIDPARAMERR; + } + if (pRSAPubKeyBlob->BitLen % 8) { + SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, SKF_R_INVALID_KEY_LENGTH); + return SAR_INVALIDPARAMERR; + } + + if (ulInputLen * 8 != pRSAPubKeyBlob->BitLen) { + SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, SKF_R_INVALID_INPUT_LENGTH); + return SAR_INVALIDPARAMERR; + } + + if (!pbOutput) { + *pulOutputLen = pRSAPubKeyBlob->BitLen / 8; + return SAR_OK; + } + + if (*pulOutputLen < pRSAPubKeyBlob->BitLen / 8) { + SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, SKF_R_BUFFER_TOO_SMALL); + return SAR_BUFFER_TOO_SMALL; + } + + if (!(rsa = RSA_new_from_RSAPUBLICKEYBLOB(pRSAPubKeyBlob))) { + SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, SKF_R_INVALID_RSA_PUBLIC_KEY); + goto end; + } + + inlen = (int)ulInputLen; + if ((outlen = RSA_public_encrypt(inlen, pbInput, pbOutput, rsa, RSA_NO_PADDING)) < 0) { + SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, ERR_R_RSA_LIB); + goto end; + } + + *pulOutputLen = outlen; + ret = SAR_OK; +end: + RSA_free(rsa); + return ret; +} + +ULONG DEVAPI SKF_ExtRSAPriKeyOperation(DEVHANDLE hDev, + RSAPRIVATEKEYBLOB *pRSAPriKeyBlob, + BYTE *pbInput, + ULONG ulInputLen, + BYTE *pbOutput, + ULONG *pulOutputLen) +{ + ULONG ret = SAR_FAIL; + RSA *rsa = NULL; + int inlen, outlen; + + if (!pRSAPriKeyBlob || !pbInput || !pulOutputLen) { + SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + if (pRSAPriKeyBlob->AlgID != SGD_RSA) { + SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, SKF_R_INVALID_ALGOR); + return SAR_INVALIDPARAMERR; + } + if (pRSAPriKeyBlob->BitLen % 8) { + SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, SKF_R_INVALID_KEY_LENGTH); + return SAR_INVALIDPARAMERR; + } + + if (ulInputLen * 8 != pRSAPriKeyBlob->BitLen) { + SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, SKF_R_INVALID_INPUT_LENGTH); + return SAR_INVALIDPARAMERR; + } + + if (!pbOutput) { + *pulOutputLen = pRSAPriKeyBlob->BitLen / 8; + return SAR_OK; + } + + if (*pulOutputLen < pRSAPriKeyBlob->BitLen / 8) { + SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, SKF_R_BUFFER_TOO_SMALL); + return SAR_BUFFER_TOO_SMALL; + } + + if (!(rsa = RSA_new_from_RSAPRIVATEKEYBLOB(pRSAPriKeyBlob))) { + SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, SKF_R_INVALID_RSA_PUBLIC_KEY); + goto end; + } + + inlen = (int)ulInputLen; + if ((outlen = RSA_private_decrypt(inlen, pbInput, pbOutput, rsa, RSA_NO_PADDING)) < 0) { + SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, ERR_R_RSA_LIB); + goto end; + } + + *pulOutputLen = outlen; + ret = SAR_OK; +end: + RSA_free(rsa); + return ret; +} + +ULONG DEVAPI SKF_RSAVerify(DEVHANDLE hDev, + RSAPUBLICKEYBLOB *pRSAPubKeyBlob, + BYTE *pbData, + ULONG ulDataLen, + BYTE *pbSignature, + ULONG ulSignLen) +{ + return SAR_FAIL; +} + +/* Wrapper functions */ + +RSA *RSA_new_from_RSAPUBLICKEYBLOB(const RSAPUBLICKEYBLOB *blob) +{ + RSA *ret; + + if (!(ret = RSA_new())) { + SKFerr(SKF_F_RSA_NEW_FROM_RSAPUBLICKEYBLOB, ERR_R_RSA_LIB); + return NULL; + } + + if (!RSA_set_RSAPUBLICKEYBLOB(ret, blob)) { + SKFerr(SKF_F_RSA_NEW_FROM_RSAPUBLICKEYBLOB, SKF_R_INVALID_RSA_PUBLIC_KEY); + RSA_free(ret); + return NULL; + } + + return ret; +} + +RSA *RSA_new_from_RSAPRIVATEKEYBLOB(const RSAPRIVATEKEYBLOB *blob) +{ + RSA *ret; + + if (!(ret = RSA_new())) { + SKFerr(SKF_F_RSA_NEW_FROM_RSAPRIVATEKEYBLOB, ERR_R_RSA_LIB); + return NULL; + } + + if (!RSA_set_RSAPRIVATEKEYBLOB(ret, blob)) { + SKFerr(SKF_F_RSA_NEW_FROM_RSAPRIVATEKEYBLOB, SKF_R_INVALID_RSA_PRIVATE_KEY); + RSA_free(ret); + return NULL; + } + + return ret; +} + +int RSA_set_RSAPUBLICKEYBLOB(RSA *rsa, const RSAPUBLICKEYBLOB *blob) +{ + int ret = 0; + + if (!rsa || !blob) { + SKFerr(SKF_F_RSA_SET_RSAPUBLICKEYBLOB, SKF_R_NULL_ARGUMENT); + return 0; + } + + if (!(rsa->n = BN_bin2bn(blob->Modulus, blob->BitLen/8, rsa->n))) { + goto end; + } + + if (!(rsa->e = BN_bin2bn(blob->PublicExponent, blob->BitLen/8, rsa->e))) { + goto end; + } + if (!RSA_check_key(rsa)) { + goto end; + } + +end: + return ret; +} + +int RSA_get_RSAPUBLICKEYBLOB(RSA *rsa, RSAPUBLICKEYBLOB *blob) +{ + int ret = 0; + int nbytes; + + if (!rsa->n || !rsa->e) { + goto end; + } + + nbytes = BN_num_bytes(rsa->n); + + if (!BN_bn2bin(rsa->n, blob->Modulus + bnlen - BN_num_bytes(rsa->n)) || + !BN_bn2bin(rsa->e, blob->PublicExponent + bnlen - BN_num_bytes(rsa->e))) { + } + + return ret; +} + + +int RSA_set_RSAPRIVATEKEYBLOB(RSA *rsa, const RSAPRIVATEKEYBLOB *blob) +{ + int ret = 0; + int nbytes; + + if (!rsa || !blob) { + SKFerr(SKF_F_RSA_SET_RSAPRIVATEKEYBLOB, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + if (blob->AlgID != SGD_RSA) { + SKFerr(SKF_F_RSA_SET_RSAPRIVATEKEYBLOB, SKR_R_INVALID_ALGOR); + return SAR_INVALIDPARAMERR; + } + + if ((blob->BitLen < 1024) || (blob->BitLen > MAX_RSA_MODULUS_LEN*8) || + (blob->BitLen % 8 != 0) || (blob->BitLen % 16 != 0)) { + SKFerr(SKF_F_RSA_SET_RSAPRIVATEKEYBLOB, SKR_R_INVALID_KEY_LENGTH); + return SAR_INVALIDPARAMERR; + } + nbytes = blob->BitLen/8; + + if (!(rsa->n = BN_bin2bn(blob->Modulus, nbytes, rsa->n)) || + !(rsa->e = BN_bin2bn(blob->PublicExponent, MAX_RSA_EXPONENT_LEN, rsa->e)) || + !(rsa->d = BN_bin2bn(blob->PrivateExponent, nbytes, rsa->d)) || + !(rsa->p = BN_bin2bn(blob->Prime1, nbytes/2, rsa->p)) || + !(rsa->q = BN_bin2bn(blob->Prime2, nbytes/2, rsa->q)) || + !(rsa->dmp1 = BN_bin2bn(blob->Prime1Exponent, nbytes/2, rsa->dmp1)) || + !(rsa->dmq1 = BN_bin2bn(blob->Prime2Exponent, nbytes/2, rsa->dmq1)) || + !(rsa->iqmp = BN_bin2bn(blob->Coefficient, nbytes/2, rsa->iqmp))) { + + SKFerr(SKF_F_RSA_SET_RSAPRIVATEKEYBLOB, SKR_R_INVALID_RSA_PRIVATE_KEY); + return SAR_INVALIDPARAMERR; + } + + return SAR_OK; +} + +int RSA_get_RSAPRIVATEKEYBLOB(RSA *rsa, RSAPRIVATEKEYBLOB *blob) +{ + int nbytes; + if (!rsa || !blob) { + SKFerr(SKF_F_RSA_GET_RSAPRIVATEKEYBLOB, SKF_R_NULL_ARGUMENT); + return SAR_INVALIDPARAMERR; + } + + if (!rsa->n || !rsa->e || !rsa->d || !rsa->p || !rsa->q || + !rsa->dmp1 || !rsa->dmq1 || !rsa->iqmp) + SKFerr(SKF_F_RSA_GET_RSAPRIVATEKEYBLOB, SKF_R_INVALID_RSA_PRIVATE_KEY); + return SAR_INVALIDPARAMERR; + } + + bzero(blob, sizeof(*blob)); + blob->AlgID = SGD_RSA; + blob->BitLen = BN_num_bits(rsa->n); + + nbytes = BN_num_bytes(rsa->n); + if (!BN_bn2bin(rsa->n, blob->Modulus) || + !BN_bn2bin(rsa->e, blob->PublicExponent + MAX_RSA_EXPONENT_LEN - BN_num_bytes(rsa->e)) || + !BN_bn2bin(rsa->d, blob->PrivateExponent + nbytes - BN_num_bytes(rsa->d)) || + !BN_bn2bin(rsa->p, blob->Prime1 + nbytes/2 - BN_num_bytes(rsa->p)) || + !BN_bn2bin(rsa->q, blob->Prime2 + nbytes/2 - BN_num_bytes(rsa->q)) || + !BN_bn2bin(rsa->dmp1, blob->Prime1Exponent + nbytes/2 - BN_num_bytes(rsa->dmp1)) || + !BN_bn2bin(rsa->dmq1, blob->Prime2Exponent + nbytes/2 - BN_num_bytes(rsa->dmq1)) || + !BN_bn2bin(rsa->iqmp, blob->Coefficient + nbytes/2 - BN_num_bytes(rsa->iqmp))) { + + SKFerr(SKF_F_RSA_GET_RSAPRIVATEKEYBLOB, SKF_R_INVALID_RSA_PRIVATE_KEY); + return SAR_INVALIDPARAMERR; + } + + return SAR_OK; +} +#endif diff --git a/crypto/skf/skf_sesskey.c b/crypto/skf/skf_sesskey.c new file mode 100644 index 00000000..dadb5545 --- /dev/null +++ b/crypto/skf/skf_sesskey.c @@ -0,0 +1,98 @@ +/* crypto/skf/skf_sesskey.c */ +/* ==================================================================== + * Copyright (c) 2015-2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 +#include +#include +#include +#include +#include +#include "skf_lcl.h" + +#define PADDING_TYPE_NO_PADDING 0 +#define PADDING_TYPE_PKCS5 1 + + +ULONG DEVAPI SKF_SetSymmKey(DEVHANDLE hDev, + BYTE *pbKey, + ULONG ulAlgID, + HANDLE *phKey) +{ + SKF_HANDLE *hKey = NULL; + + if (!(hKey = OPENSSL_malloc(sizeof(*hKey)))) { + SKFerr(SKF_F_SKF_SETSYMMKEY, SKF_R_MALLOC_FAILED); + return SAR_FAIL; + } + bzero(hKey, sizeof(*hKey)); + + hKey->magic = SKF_HANDLE_MAGIC; + hKey->type = SKF_KEY_HANDLE; + + switch (ulAlgID) { + case SGD_SM4_ECB: + case SGD_SM4_CBC: + case SGD_SM4_CFB: + case SGD_SM4_OFB: + case SGD_SM4_MAC: + hKey->algid = ulAlgID; + hKey->keylen = SMS4_KEY_LENGTH; + break; + default: + SKFerr(SKF_F_SKF_SETSYMMKEY, SKF_R_INVALID_ALGOR); + return SAR_INVALIDPARAMERR; + } + memcpy(hKey->key, pbKey, hKey->keylen); + + *phKey = hKey; + return SAR_OK; +} + diff --git a/crypto/skf/skf_token.c b/crypto/skf/skf_token.c new file mode 100644 index 00000000..98845555 --- /dev/null +++ b/crypto/skf/skf_token.c @@ -0,0 +1,394 @@ +/* crypto/skf/skf_app.c */ +/* ==================================================================== + * Copyright (c) 2015-2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 +#include + +ULONG DEVAPI SKF_WaitForDevEvent(LPSTR szDevName, + ULONG *pulDevNameLen, + ULONG *pulEvent) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_CancelWaitForDevEvent(void) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_SetLabel(DEVHANDLE hDev, + LPSTR szLabel) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_LockDev(DEVHANDLE hDev, + ULONG ulTimeOut) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_UnlockDev(DEVHANDLE hDev) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_Transmit(DEVHANDLE hDev, + BYTE* pbCommand, + ULONG ulCommandLen, + BYTE* pbData, + ULONG* pulDataLen) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_ChangeDevAuthKey(DEVHANDLE hDev, + BYTE *pbKeyValue, + ULONG ulKeyLen) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_DevAuth(DEVHANDLE hDev, + BYTE *pbAuthData, + ULONG ulLen) +{ + return SAR_OK; +} + +ULONG DEVAPI SKF_CreateApplication(DEVHANDLE hDev, + LPSTR szAppName, + LPSTR szAdminPin, + DWORD dwAdminPinRetryCount, + LPSTR szUserPin, + DWORD dwUserPinRetryCount, + DWORD dwCreateFileRights, + HAPPLICATION *phApplication) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_EnumApplication(DEVHANDLE hDev, + LPSTR szAppName, + ULONG *pulSize) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_DeleteApplication(DEVHANDLE hDev, + LPSTR szAppName) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_OpenApplication(DEVHANDLE hDev, + LPSTR szAppName, + HAPPLICATION *phApplication) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_CloseApplication(HAPPLICATION hApplication) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_ChangePIN(HAPPLICATION hApplication, + ULONG ulPINType, + LPSTR szOldPin, + LPSTR szNewPin, + ULONG *pulRetryCount) +{ + return SAR_NOTSUPPORTYETERR; +} + +LONG DEVAPI SKF_GetPINInfo(HAPPLICATION hApplication, + ULONG ulPINType, + ULONG *pulMaxRetryCount, + ULONG *pulRemainRetryCount, + BOOL *pbDefaultPin) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_VerifyPIN(HAPPLICATION hApplication, + ULONG ulPINType, + LPSTR szPIN, + ULONG *pulRetryCount) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_UnblockPIN(HAPPLICATION hApplication, + LPSTR szAdminPIN, + LPSTR szNewUserPIN, + ULONG *pulRetryCount) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_ClearSecureState(HAPPLICATION hApplication) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_CreateContainer(HAPPLICATION hApplication, + LPSTR szContainerName, + HCONTAINER *phContainer) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_DeleteContainer(HAPPLICATION hApplication, + LPSTR szContainerName) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_EnumContainer(HAPPLICATION hApplication, + LPSTR szContainerName, + ULONG *pulSize) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_OpenContainer(HAPPLICATION hApplication, + LPSTR szContainerName, + HCONTAINER *phContainer) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_CloseContainer(HCONTAINER hContainer) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_GetContainerType(HCONTAINER hContainer, + ULONG *pulContainerType) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_ImportCertificate(HCONTAINER hContainer, + BOOL bSignFlag, + BYTE *pbCert, + ULONG ulCertLen) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_ExportCertificate(HCONTAINER hContainer, + BOOL bSignFlag, + BYTE *pbCert, + ULONG *pulCertLen) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_CreateFile(HAPPLICATION hApplication, + LPSTR szFileName, + ULONG ulFileSize, + ULONG ulReadRights, + ULONG ulWriteRights) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_EnumFiles(HAPPLICATION hApplication, + LPSTR szFileList, + ULONG *pulSize) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_GetFileInfo(HAPPLICATION hApplication, + LPSTR szFileName, + FILEATTRIBUTE *pFileInfo) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_ReadFile(HAPPLICATION hApplication, + LPSTR szFileName, + ULONG ulOffset, + ULONG ulSize, + BYTE *pbOutData, + ULONG *pulOutLen) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_WriteFile(HAPPLICATION hApplication, + LPSTR szFileName, + ULONG ulOffset, + BYTE *pbData, + ULONG ulSize) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_DeleteFile(HAPPLICATION hApplication, + LPSTR szFileName) +{ + return SAR_NOTSUPPORTYETERR; +} + + +ULONG DEVAPI SKF_GenECCKeyPair(HCONTAINER hContainer, + ULONG ulAlgId, + ECCPUBLICKEYBLOB *pBlob) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_ImportECCKeyPair(HCONTAINER hContainer, + ENVELOPEDKEYBLOB *pEnvelopedKeyBlob) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_ECCSignData(HCONTAINER hContainer, + BYTE *pbData, + ULONG ulDataLen, + ECCSIGNATUREBLOB *pSignature) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_GenerateAgreementDataWithECC(HCONTAINER hContainer, + ULONG ulAlgId, + ECCPUBLICKEYBLOB *pTempECCPubKeyBlob, + BYTE *pbID, + ULONG ulIDLen, + HANDLE *phAgreementHandle) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_GenerateAgreementDataAndKeyWithECC(HANDLE hContainer, + ULONG ulAlgId, + ECCPUBLICKEYBLOB *pSponsorECCPubKeyBlob, + ECCPUBLICKEYBLOB *pSponsorTempECCPubKeyBlob, + ECCPUBLICKEYBLOB *pTempECCPubKeyBlob, + BYTE *pbID, + ULONG ulIDLen, + BYTE *pbSponsorID, + ULONG ulSponsorIDLen, + HANDLE *phKeyHandle) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_GenerateKeyWithECC(HANDLE hAgreementHandle, + ECCPUBLICKEYBLOB *pECCPubKeyBlob, + ECCPUBLICKEYBLOB *pTempECCPubKeyBlob, + BYTE *pbID, + ULONG ulIDLen, + HANDLE *phKeyHandle) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_GenRSAKeyPair(HCONTAINER hContainer, + ULONG ulBitsLen, + RSAPUBLICKEYBLOB *pBlob) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_ImportRSAKeyPair(HCONTAINER hContainer, + ULONG ulSymAlgId, + BYTE *pbWrappedKey, + ULONG ulWrappedKeyLen, + BYTE *pbEncryptedData, + ULONG ulEncryptedDataLen) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_RSASignData(HCONTAINER hContainer, + BYTE *pbData, + ULONG ulDataLen, + BYTE *pbSignature, + ULONG *pulSignLen) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_ImportSessionKey(HCONTAINER hContainer, + ULONG ulAlgId, + BYTE *pbWrapedData, + ULONG ulWrapedLen, + HANDLE *phKey) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_RSAExportSessionKey(HCONTAINER hContainer, + ULONG ulAlgId, + RSAPUBLICKEYBLOB *pPubKey, + BYTE *pbData, + ULONG *pulDataLen, + HANDLE *phSessionKey) +{ + return SAR_NOTSUPPORTYETERR; +} + +ULONG DEVAPI SKF_ECCExportSessionKey(HCONTAINER hContainer, + ULONG ulAlgId, + ECCPUBLICKEYBLOB *pPubKey, + ECCCIPHERBLOB *pData, + HANDLE *phSessionKey) +{ + return SAR_NOTSUPPORTYETERR; +} + diff --git a/crypto/skf/skf_types.c b/crypto/skf/skf_types.c deleted file mode 100644 index 6a6cf2fb..00000000 --- a/crypto/skf/skf_types.c +++ /dev/null @@ -1,285 +0,0 @@ -#include -#include -#include -#include -#include "skf.h" - -int EC_KEY_set_ECCPUBLICKEYBLOB(EC_KEY *ec_key, const ECCPUBLICKEYBLOB *blob) -{ - int ret = 0; - int nbytes; - BIGNUM *x = NULL; - BIGNUM *y = NULL; - - if (blob->BitLen != EC_GROUP_get_degree(EC_KEY_get0_group(ec_key))) { - return 0; - } - - nbytes = (blob->BitLen + 7)/8; - - if (!(x = BN_bin2bn(blob->XCoordinate, nbytes, NULL))) { - goto end; - } - if (!(y = BN_bin2bn(blob->YCoordinate, nbytes, NULL))) { - goto end; - } - if (!EC_KEY_set_public_key_affine_coordinates(ec_key, x, y)) { - goto end; - } - - ret = 1; -end: - BN_free(x); - BN_free(y); - return ret; -} - -int EC_KEY_get_ECCPUBLICKEYBLOB(EC_KEY *ec_key, ECCPUBLICKEYBLOB *blob) -{ - int ret = 0; - int nbytes; - BIGNUM *x = NULL; - BIGNUM *y = NULL; - BN_CTX *bn_ctx = NULL; - const EC_GROUP *group = EC_KEY_get0_group(ec_key); - const EC_POINT *point = EC_KEY_get0_public_key(ec_key); - - nbytes = (EC_GROUP_get_degree(group) + 7)/8; - if (nbyte > ECC_MAX_MODULUS_BITS_LEN/8) { - goto end; - } - - x = BN_new(); - y = BN_new(); - bn_ctx = BN_CTX_new(); - if (!x || !y || !bn_ctx) { - goto end; - } - - if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) == NID_X9_62_prime_field) { - if (!EC_POINT_get_affine_coordinates_GFp(group, point, x, y, bn_ctx)) { - goto end; - } - } else { - if (!EC_POINT_get_affine_coordinates_GF2m(group, point, x, y, bn_ctx)) { - goto end; - } - } - - bzero(blob, sizeof(*blob)); - blob->BitLen = EC_GROUP_get_degree(group); - if (!BN_bn2bin(x, blob->XCoordinate + nbytes - BN_num_bytes(x))) { - goto end; - } - if (!BN_bn2bin(y, blob->YCoordinate + nbytes - BN_num_bytes(y))) { - goto end; - } - - ret = 1; -end: - BN_free(x); - BN_free(y); - BN_CTX_free(bn_ctx); - return ret; -} - -int EC_KEY_set_ECCPRIVATEKEYBLOB(EC_KEY *ec_key, const ECCPRIVATEKEYBLOB *blob) -{ - int ret = 0; - int nbytes; - BIGNUM *d = NULL; - - /* is this corrent ? - * because the key length sometimes will be less than field length - */ - if (blob->BitLen != EC_GROUP_get_degree(EC_KEY_get0_group(ec_key))) { - goto end; - } - - nbytes = (blob->BitLen + 7)/8; - if (!(d = BN_bin2bn(data->PrivateKey, nbytes, NULL))) { - goto end; - } - if (!EC_KEY_set_private_key(ec_key, d)) { - goto end; - } - - ret = 1; -end: - BN_clear_free(d); - return ret; -} - -int EC_KEY_get_ECCPRIVATEKEYBLOB(EC_KEY *ec_key, ECCPRIVATEKEYBLOB *blob) -{ - int ret = 0; - int nbytes; - BIGNUM *order = BN_new(); - BIGNUM *d = EC_KEY_get0_private_key(ec_key); - - if (!order) { - goto end; - } - - if (!d) { - goto end; - } - - - - if (!EC_GROUP_get_order(EC_KEY_get0_group(ec_key), order, NULL)) { - goto end; - } - - nbytes = BN_num_bytes(order); - if (nbytes > ECC_MAX_MODULUS_BITS_LEN/8) { - goto end; - } - - BN_bn2bin(d, blob->PrivateKey + nbytes - BN_num_bytes(d)); - - ret = 1; - -end: - BN_free(order); - return ret; -} - -int SM2_CIPHERTEXT_VALUE_set_ECCCIPHERBLOB(SM2_CIPHERTEXT_VALUE *cv, - const ECCCIPHERBLOB *blob) -{ - SM2_CIPHERTEXT_VALUE *ret = NULL; - const ECCCIPHERBLOB *data = (const ECCCIPHERBLOB *)blob; - BIGNUM *x = NULL; - BIGNUM *y = NULL; - - if (bloblen < sizeof(ECCCIPHERBLOB)) { - goto end; - } - - if (!(ret = OPENSSL_malloc(sizeof(SM2_CIPHERTEXT_VALUE)))) { - goto end; - } -} - -int SM2_CIPHERTEXT_VALUE_get_ECCCIPHERBLOB(const SM2_CIPHERTEXT_VALUE *a, - void *out, size_t *outlen) -{ - int ret = 0; - BIGNUM *x = NULL; - BIGNUM *y = NULL; - - - return 0; -} - -ECDSA_SIG *ECDSA_SIG_new_from_SKF_ECCSIGNATUREBLOB( - const EC_GROUP *group, const void *blob, size_t bloblen) -{ - ECDSA_SIG *ret = NULL; - int bnlen; - const ECCSIGNATUREBLOB *data = blob; - - if (bloblen != sizeof(ECCSIGNATUREBLOB)) { - return NULL; - } - - bnlen = (EC_GROUP_get_degree(group) + 7)/8; - - if (!(ret = ECDSA_SIG_new())) { - return NULL; - } - - ret->r = BN_bin2bn(data->r, bnlen, NULL); - ret->s = BN_bin2bn(data->s, bnlen, NULL); - - return ret; -} - -int ECDSA_SIG_to_SKF_ECCSIGNATUREBLOB(const ECDSA_SIG *sig, - const EC_GROUP *group, void *out, size_t *outlen) -{ - int bnlen; - ECCSIGNATUREBLOB *data = out; - - if (!out) { - if (!outlen) { - return 0; - } - *outlen = sizeof(ECCSIGNATUREBLOB); - return 1; - } - - bnlen = (EC_GROUP_get_degree(group) + 7)/8; - *outlen = sizeof(ECCSIGNATUREBLOB); - - BN_bn2bin(sig->r, data->r + bnlen - BN_num_bytes(sig->r)); - BN_bn2bin(sig->s, data->s + bnlen - BN_num_bytes(sig->s)); - - return 1; -} - -int RSA_set_RSAPUBLICKEYBLOB(RSA *rsa, const RSAPUBLICKEYBLOB *blob) -{ - int ret = 0; - - if (!(rsa->n = BN_bin2bn(blob->Modulus, blob->BitLen/8, NULL))) { - goto end; - } - if (!(rsa->e = BN_bin2bn(blob->PublicExponent, blob->BitLen/8, NULL))) { - goto end; - } - if (!RSA_check_key(rsa)) { - goto end; - } - -end: - return ret; -} - -int RSA_get_RSAPUBLICKEYBLOB(RSA *rsa, RSAPUBLICKEYBLOB *blob) -{ - int ret = 0; - int nbytes; - - if (!rsa->n || !rsa->e) { - goto end; - } - - nbytes = BN_num_bytes(rsa->n); - - BN_bn2bin(rsa->n, blob->Modulus + bnlen - BN_num_bytes(rsa->n)); - BN_bn2bin(rsa->e, blob->PublicExponent + bnlen - BN_num_bytes(rsa->e)); - - return ret; -} - -int RSA_set_RSAPRIVATEKEYBLOB(RSA *rsa, const RSAPRIVATEKEYBLOB *blob) -{ - int ret = 0; - - if (!blob->AlgID) { - goto end; - } - if (!blob->BitLen) { - goto end; - } - - rsa->n = BN_bin2bn(blob->Modulus, MAX_RSA_MODULUS_LEN, NULL); - rsa->e = BN_bin2bn(blob->PublicExponent, MAX_RSA_EXPONENT_LEN, NULL); - rsa->d = BN_bin2bn(blob->Prime1, bnlen, NULL); - rsa->p = BN_bin2bn(blob->Prime2, bnlen, NULL); - rsa->dmp1 = BN_bin2bn(blob->Prime1Exponent, bnlen, NULL); - rsa->dmq1 = BN_bin2bn(blob->Prime2Exponent, bnlen, NULL); - rsa->iqmp = BN_bin2bn(blob->Coefficient, bnlen, NULL); - -} - -int RSA_get_RSAPRIVATEKEYBLOB(RSA *rsa, RSAPRIVATEKEYBLOB *blob) -{ - int ret = 0; - RSAPRIVATEKEYBLOB *blob = out; - - return ret; -} - diff --git a/crypto/sm1/Makefile b/crypto/sm1/Makefile new file mode 100644 index 00000000..3fdc0e7a --- /dev/null +++ b/crypto/sm1/Makefile @@ -0,0 +1,81 @@ +# +# OpenSSL/crypto/sm1/Makefile +# + +DIR= sm1 +TOP= ../.. +CC= cc +CPP= $(CC) -E +INCLUDES=-I.. -I$(TOP) -I../../include +CFLAG=-g +MAKEFILE= Makefile +AR= ar r + +SM3_ASM_OBJ= + +CFLAGS= $(INCLUDES) $(CFLAG) +ASFLAGS= $(INCLUDES) $(ASFLAG) +AFLAGS= $(ASFLAGS) + +GENERAL=Makefile +TEST= +APPS= + +LIB=$(TOP)/libcrypto.a +LIBSRC= +LIBOBJ= + +SRC= $(LIBSRC) + +EXHEADER= sm1.h +HEADER= $(EXHEADER) + +ALL= $(GENERAL) $(SRC) $(HEADER) + +top: + (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all) + +all: lib + +lib: $(LIBOBJ) + $(AR) $(LIB) $(LIBOBJ) + $(RANLIB) $(LIB) || echo Never mind. + @touch lib + +files: + $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO + +links: + @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER) + @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST) + @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS) + +install: + @[ -n "$(INSTALLTOP)" ] # should be set by top Makefile... + @headerlist="$(EXHEADER)"; for i in $$headerlist ; \ + do \ + (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \ + chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \ + done; + +tags: + ctags $(SRC) + +tests: + +lint: + lint -DLINT $(INCLUDES) $(SRC)>fluff + +depend: + @[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile... + $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC) + +dclean: + $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new + mv -f Makefile.new $(MAKEFILE) + +clean: + rm -f *.s *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff + +# DO NOT DELETE THIS LINE -- make depend depends on it. + diff --git a/crypto/sm1/sm1.h b/crypto/sm1/sm1.h index 7351772a..0c8022e0 100644 --- a/crypto/sm1/sm1.h +++ b/crypto/sm1/sm1.h @@ -54,6 +54,7 @@ #define SM1_KEY_LENGTH 16 #define SM1_BLOCK_SIZE 16 +#define SM1_IV_LENGTH (SM1_BLOCK_SIZE) #ifdef __cplusplus extern "C" { diff --git a/crypto/sm1/sm1test.c b/crypto/sm1/sm1test.c deleted file mode 100644 index 0b3adc5c..00000000 --- a/crypto/sm1/sm1test.c +++ /dev/null @@ -1,54 +0,0 @@ -#include -#include -#include -#include - -int main(int argc, char **argv) -{ - const char *engine_id = "SKF"; - ENGINE *engine = NULL; - const EVP_CIPHER *cipher; - EVP_CIPHER_CTX ctx; - unsigned char key[16]; - unsigned char iv[16]; - const char *msg1 = "hello world"; - const char *msg2 = "12345678"; - unsigned char buf[128]; - int len; - - ENGINE_load_builtin_engines(); - engine = ENGINE_by_id(engine_id); - - OPENSSL_assert(engine != NULL); - - rv = ENGINE_init(engine); - OPENSSL_assert(rv == 1); - - cipher = ENGINE_get_cipher(engine, NID_sm1_cbc); - - EVP_CIPHER_CTX_init(&ctx); - - rv = RAND_bytes(key, (int)sizeof(key)); - rv = RAND_bytes(iv, (int)sizeof(iv)); - - rv = EVP_EncryptInit_ex(&ctx, cipher, engine, key, iv); - - p = buf; - rv = EVP_EncryptUpdate(&ctx, p, &len, (unsigned char *)msg1, (int)strlen(msg1)); - - p += len; - rv = EVP_EncryptUpdate(&ctx, p, &len, (unsigned char *)msg2, (int)strlen(msg2)); - - p += len; - rv = EVP_EncryptFinal_ex(&ctx, p, &len); - - p += len; - - - EVP_CIPHER_CTX_cleanup(&ctx); - ENGINE_finish(engine); - ENGINE_free(engine); - - return 0; -} - diff --git a/crypto/sm2/Makefile b/crypto/sm2/Makefile index d2b8b71e..062fac74 100644 --- a/crypto/sm2/Makefile +++ b/crypto/sm2/Makefile @@ -76,3 +76,90 @@ clean: # DO NOT DELETE THIS LINE -- make depend depends on it. +sm2_asn1.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h +sm2_asn1.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h +sm2_asn1.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h +sm2_asn1.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h +sm2_asn1.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h +sm2_asn1.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +sm2_asn1.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +sm2_asn1.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +sm2_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +sm2_asn1.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +sm2_asn1.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +sm2_asn1.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +sm2_asn1.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +sm2_asn1.o: ../../include/openssl/x509_vfy.h sm2_asn1.c +sm2_enc.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +sm2_enc.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h +sm2_enc.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h +sm2_enc.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h +sm2_enc.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h +sm2_enc.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +sm2_enc.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +sm2_enc.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +sm2_enc.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +sm2_enc.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h +sm2_enc.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +sm2_enc.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +sm2_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +sm2_enc.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h sm2.h +sm2_enc.o: sm2_enc.c +sm2_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +sm2_err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +sm2_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +sm2_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +sm2_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h +sm2_err.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +sm2_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +sm2_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +sm2_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +sm2_err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +sm2_err.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +sm2_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +sm2_err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +sm2_err.o: sm2_err.c +sm2_kap.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +sm2_kap.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +sm2_kap.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h +sm2_kap.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h +sm2_kap.o: ../../include/openssl/err.h ../../include/openssl/evp.h +sm2_kap.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +sm2_kap.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +sm2_kap.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +sm2_kap.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +sm2_kap.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +sm2_kap.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +sm2_kap.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +sm2_kap.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h sm2.h +sm2_kap.o: sm2_kap.c +sm2_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +sm2_lib.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h +sm2_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h +sm2_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h +sm2_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h +sm2_lib.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +sm2_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +sm2_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +sm2_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +sm2_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h +sm2_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +sm2_lib.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +sm2_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +sm2_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +sm2_lib.o: sm2_lib.c +sm2_sign.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +sm2_sign.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h +sm2_sign.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h +sm2_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h +sm2_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h +sm2_sign.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +sm2_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +sm2_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +sm2_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +sm2_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h +sm2_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +sm2_sign.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +sm2_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +sm2_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +sm2_sign.o: sm2_sign.c diff --git a/crypto/sm2/sm2.h b/crypto/sm2/sm2.h index 656592aa..e5c161e6 100644 --- a/crypto/sm2/sm2.h +++ b/crypto/sm2/sm2.h @@ -69,8 +69,8 @@ extern "C" { #define SM2_MAX_ID_BITS 65535 #define SM2_MAX_ID_LENGTH (SM2_MAX_ID_BITS/8) -#define SM2_DEFAULT_ID_GMT09 "1234567812345678" -#define SM2_DEFAULT_ID_GMSSL "anonym@gmssl.org" +#define SM2_DEFAULT_ID_GMT09 "1234567812345678" +#define SM2_DEFAULT_ID_GMSSL "anonym@gmssl.org" #define SM2_DEFAULT_ID SM2_DEFAULT_ID_GMSSL #define SM2_DEFAULT_POINT_CONVERSION_FORM POINT_CONVERSION_UNCOMPRESSED @@ -81,7 +81,6 @@ int SM2_compute_id_digest(const EVP_MD *md, unsigned char *dgst, unsigned int *dgstlen, EC_KEY *ec_key); - typedef struct sm2_enc_params_st { const EVP_MD *kdf_md; const EVP_MD *mac_md; @@ -92,6 +91,7 @@ typedef struct sm2_enc_params_st { #define SM2_ENC_PARAMS_mactag_size(params) \ ((params)->mactag_size<0 ? EVP_MD_size((params)->mac_md) : (params->mactag_size)) +int SM2_ENC_PARAMS_init_with_recommended(SM2_ENC_PARAMS *params); typedef struct sm2_ciphertext_value_st { EC_POINT *ephem_point; @@ -103,6 +103,8 @@ typedef struct sm2_ciphertext_value_st { int SM2_CIPHERTEXT_VALUE_size(const EC_GROUP *ec_group, const SM2_ENC_PARAMS *params, size_t mlen); + +SM2_CIPHERTEXT_VALUE *SM2_CIPHERTEXT_VALUE_new(const EC_GROUP *group); void SM2_CIPHERTEXT_VALUE_free(SM2_CIPHERTEXT_VALUE *cv); int SM2_CIPHERTEXT_VALUE_encode(const SM2_CIPHERTEXT_VALUE *cv, const EC_GROUP *ec_group, const SM2_ENC_PARAMS *params, @@ -130,10 +132,12 @@ int SM2_encrypt_with_recommended(unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen, EC_KEY *ec_key); int SM2_decrypt_with_recommended(unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen, EC_KEY *ec_key); +#if 0 int SM2_encrypt_elgamal(unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen, EC_KEY *ec_key); int SM2_decrypt_elgamal(unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen, EC_KEY *ec_key); +#endif int SM2_compute_message_digest(const EVP_MD *id_md, const EVP_MD *msg_md, const void *msg, size_t msglen, unsigned char *dgst, @@ -169,14 +173,14 @@ typedef struct sm2_kap_ctx_st { const EVP_MD *checksum_md; point_conversion_form_t point_form; KDF_FUNC kdf; - + int is_initiator; int do_checksum; EC_KEY *ec_key; unsigned char id_dgst[EVP_MAX_MD_SIZE]; unsigned int id_dgstlen; - + EC_KEY *remote_pubkey; unsigned char remote_id_dgst[EVP_MAX_MD_SIZE]; unsigned int remote_id_dgstlen; @@ -185,7 +189,7 @@ typedef struct sm2_kap_ctx_st { BN_CTX *bn_ctx; BIGNUM *order; BIGNUM *two_pow_w; - + BIGNUM *t; EC_POINT *point; unsigned char pt_buf[1 + (OPENSSL_ECC_MAX_FIELD_BITS+7)/4]; @@ -207,54 +211,60 @@ int SM2_KAP_final_check(SM2_KAP_CTX *ctx, const unsigned char *checksum, void SM2_KAP_CTX_cleanup(SM2_KAP_CTX *ctx); - - +/* 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_SM2_strings(void); -/* Function codes. */ -#define SM2_F_SM2_SET_ID 100 -#define SM2_F_SM2_GET_ID 101 -#define SM2_F_SM2_COMPUTE_ID_DIGEST 102 -#define SM2_F_SM2_CIPHERTEXT_VALUE_SIZE 103 -#define SM2_F_SM2_CIPHERTEXT_VALUE_FREE 104 -#define SM2_F_SM2_CIPHERTEXT_VALUE_ENCODE 105 -#define SM2_F_SM2_CIPHERTEXT_VALUE_DECODE 106 -#define SM2_F_SM2_CIPHERTEXT_VALUE_PRINT 107 -#define SM2_F_SM2_DO_ENCRYPT 108 -#define SM2_F_SM2_DO_DECRYPT 109 -#define SM2_F_SM2_ENCRYPT 110 -#define SM2_F_SM2_DECRYPT 111 -#define SM2_F_SM2_SIGNATURE_SIZE 112 -#define SM2_F_SM2_SIGN_SETUP 113 -#define SM2_F_SM2_DO_SIGN_EX 114 -#define SM2_F_SM2_DO_SIGN 115 -#define SM2_F_SM2_DO_VERIFY 116 -#define SM2_F_SM2_SIGN_EX 117 -#define SM2_F_SM2_SIGN 118 -#define SM2_F_SM2_VERIFY 119 -#define SM2_F_SM2_KAP_CTX_INIT 120 -#define SM2_F_SM2_KAP_CTX_CLEANUP 121 -#define SM2_F_SM2_KAP_PREPARE 122 -#define SM2_F_SM2_KAP_COMPUTE_KEY 123 -#define SM2_F_SM2_KAP_FINAL_CHECK 124 +/* Error codes for the SM2 functions. */ +/* Function codes. */ +# define SM2_F_SM2_CIPHERTEXT_VALUE_DECODE 100 +# define SM2_F_SM2_CIPHERTEXT_VALUE_ENCODE 101 +# define SM2_F_SM2_CIPHERTEXT_VALUE_FREE 102 +# define SM2_F_SM2_CIPHERTEXT_VALUE_PRINT 103 +# define SM2_F_SM2_CIPHERTEXT_VALUE_SIZE 104 +# define SM2_F_SM2_COMPUTE_ID_DIGEST 105 +# define SM2_F_SM2_DECRYPT 106 +# define SM2_F_SM2_DO_DECRYPT 107 +# define SM2_F_SM2_DO_ENCRYPT 108 +# define SM2_F_SM2_DO_SIGN 109 +# define SM2_F_SM2_DO_SIGN_EX 110 +# define SM2_F_SM2_DO_VERIFY 111 +# define SM2_F_SM2_ENCRYPT 112 +# define SM2_F_SM2_GET_ID 113 +# define SM2_F_SM2_KAP_COMPUTE_KEY 114 +# define SM2_F_SM2_KAP_CTX_CLEANUP 115 +# define SM2_F_SM2_KAP_CTX_INIT 116 +# define SM2_F_SM2_KAP_FINAL_CHECK 117 +# define SM2_F_SM2_KAP_PREPARE 118 +# define SM2_F_SM2_SET_ID 119 +# define SM2_F_SM2_SIGN 120 +# define SM2_F_SM2_SIGNATURE_SIZE 121 +# define SM2_F_SM2_SIGN_EX 122 +# define SM2_F_SM2_SIGN_SETUP 123 +# define SM2_F_SM2_VERIFY 124 /* Reason codes. */ -#define SM2_R_BAD_DATA 100 -#define SM2_R_UNKNOWN_CIPHER_TYPE 101 -#define SM2_R_ENCRYPT_FAILED 102 -#define SM2_R_DECRYPT_FAILED 103 -#define SM2_R_UNKNOWN_MAC_TYPE 104 -#define SM2_R_GEN_MAC_FAILED 105 -#define SM2_R_VERIFY_MAC_FAILED 106 -#define SM2_R_ECDH_FAILED 107 -#define SM2_R_BUFFER_TOO_SMALL 108 -#define SM2_R_SM2_KAP_NOT_INITED 109 -#define SM2_R_RANDOM_NUMBER_GENERATION_FAILED 110 -#define SM2_R_ERROR 111 +# define SM2_R_BAD_DATA 100 +# define SM2_R_BAD_SIGNATURE 101 +# define SM2_R_BUFFER_TOO_SMALL 102 +# define SM2_R_DECRYPT_FAILED 103 +# define SM2_R_ECDH_FAILED 104 +# define SM2_R_ENCRYPT_FAILED 105 +# define SM2_R_ERROR 106 +# define SM2_R_GEN_MAC_FAILED 107 +# define SM2_R_MISSING_PARAMETERS 108 +# define SM2_R_NEED_NEW_SETUP_VALUES 109 +# define SM2_R_RANDOM_NUMBER_GENERATION_FAILED 110 +# define SM2_R_SM2_KAP_NOT_INITED 111 +# define SM2_R_UNKNOWN_CIPHER_TYPE 112 +# define SM2_R_UNKNOWN_MAC_TYPE 113 +# define SM2_R_VERIFY_MAC_FAILED 114 -#ifdef __cplusplus +#ifdef __cplusplus } #endif #endif - diff --git a/crypto/sm2/sm2_enc.c b/crypto/sm2/sm2_enc.c index 7e63f53f..b7c1cd8f 100644 --- a/crypto/sm2/sm2_enc.c +++ b/crypto/sm2/sm2_enc.c @@ -95,6 +95,11 @@ end: return ret; } +SM2_CIPHERTEXT_VALUE *SM2_CIPHERTEXT_VALUE_new(const EC_GROUP *group) +{ + return NULL; +} + void SM2_CIPHERTEXT_VALUE_free(SM2_CIPHERTEXT_VALUE *cv) { if (cv->ephem_point) EC_POINT_free(cv->ephem_point); @@ -631,7 +636,7 @@ int SM2_do_decrypt(const SM2_ENC_PARAMS *params, goto end; } if (cv->mactag_size != mactag_size || - memcmp(mac, cv->mactag, cv->mactag_size)) { + OPENSSL_memcmp(mac, cv->mactag, cv->mactag_size)) { SM2err(SM2_F_SM2_DO_DECRYPT, SM2_R_ERROR); goto end; } diff --git a/crypto/sm2/sm2_err.c b/crypto/sm2/sm2_err.c index ba10bbb7..ae46ba3e 100644 --- a/crypto/sm2/sm2_err.c +++ b/crypto/sm2/sm2_err.c @@ -1,6 +1,6 @@ /* crypto/sm2/sm2_err.c */ /* ==================================================================== - * Copyright (c) 2015 The GmSSL Project. All rights reserved. + * Copyright (c) 1999-2016 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 @@ -16,27 +16,27 @@ * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: - * "This product includes software developed by the GmSSL Project. - * (http://gmssl.org/)" + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * - * 4. The name "GmSSL Project" must not be used to endorse or promote - * products derived from this software without prior written - * permission. For written permission, please contact - * guanzhi1980@gmail.com. + * 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 "GmSSL" - * nor may "GmSSL" appear in their names without prior written - * permission of the GmSSL 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 GmSSL Project - * (http://gmssl.org/)" + * "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 GmSSL PROJECT ``AS IS'' AND ANY + * 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 GmSSL PROJECT OR + * 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; @@ -47,62 +47,77 @@ * 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). + * */ +/* + * NOTE: this file was auto generated by the mkerr.pl script: any changes + * made to it will be overwritten when the script next updates this file, + * only reason strings will be preserved. + */ #include #include -#include "sm2.h" +#include +/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -#define ERR_FUNC(func) ERR_PACK(ERR_LIB_ECIES,func,0) -#define ERR_REASON(reason) ERR_PACK(ERR_LIB_ECIES,0,reason) - +# define ERR_FUNC(func) ERR_PACK(ERR_LIB_SM2,func,0) +# define ERR_REASON(reason) ERR_PACK(ERR_LIB_SM2,0,reason) static ERR_STRING_DATA SM2_str_functs[] = { - {ERR_FUNC(SM2_F_SM2_SET_ID), "SM2_SET_ID"}, - {ERR_FUNC(SM2_F_SM2_GET_ID), "SM2_F_SM2_GET_ID"}, - {ERR_FUNC(SM2_F_SM2_COMPUTE_ID_DIGEST), "SM2_compute_id_digest"}, - {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_SIZE), "SM2_CIPHERTEXT_VALUE_size"}, - {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_FREE), "SM2_CIPHERTEXT_VALUE_free"}, - {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_ENCODE), "SM2_CIPHERTEXT_VALUE_encode"}, - {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_DECODE), "SM2_CIPHERTEXT_VALUE_decode"}, - {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_PRINT), "SM2_CIPHERTEXT_VALUE_print"}, - {ERR_FUNC(SM2_F_SM2_DO_ENCRYPT), "SM2_do_encrypt"}, - {ERR_FUNC(SM2_F_SM2_DO_DECRYPT), "SM2_do_decrypt"}, - {ERR_FUNC(SM2_F_SM2_ENCRYPT), "SM2_encrypt"}, - {ERR_FUNC(SM2_F_SM2_DECRYPT), "SM2_decrypt"}, - {ERR_FUNC(SM2_F_SM2_SIGNATURE_SIZE), "SM2_signature_size"}, - {ERR_FUNC(SM2_F_SM2_SIGN_SETUP), "SM2_sign_setup"}, - {ERR_FUNC(SM2_F_SM2_DO_SIGN_EX), "SM2_do_sign_ex"}, - {ERR_FUNC(SM2_F_SM2_DO_SIGN), "SM2_do_sign"}, - {ERR_FUNC(SM2_F_SM2_DO_VERIFY), "SM2_do_verify"}, - {ERR_FUNC(SM2_F_SM2_SIGN_EX), "SM2_sign_ex"}, - {ERR_FUNC(SM2_F_SM2_SIGN), "SM2_sign"}, - {ERR_FUNC(SM2_F_SM2_VERIFY), "SM2_verify"}, - {ERR_FUNC(SM2_F_SM2_KAP_CTX_INIT), "SM2_KAP_CTX_init"}, - {ERR_FUNC(SM2_F_SM2_KAP_CTX_CLEANUP), "SM2_KAP_CTX_cleanup"}, - {ERR_FUNC(SM2_F_SM2_KAP_PREPARE), "SM2_KAP_prepare"}, - {ERR_FUNC(SM2_F_SM2_KAP_COMPUTE_KEY), "SM2_KAP_compute_key"}, - {ERR_FUNC(SM2_F_SM2_KAP_FINAL_CHECK), "SM2_KAP_final_check"}, - {0,NULL} + {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_DECODE), + "SM2_CIPHERTEXT_VALUE_decode"}, + {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_ENCODE), + "SM2_CIPHERTEXT_VALUE_encode"}, + {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_FREE), "SM2_CIPHERTEXT_VALUE_free"}, + {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_PRINT), "SM2_CIPHERTEXT_VALUE_print"}, + {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_SIZE), "SM2_CIPHERTEXT_VALUE_size"}, + {ERR_FUNC(SM2_F_SM2_COMPUTE_ID_DIGEST), "SM2_compute_id_digest"}, + {ERR_FUNC(SM2_F_SM2_DECRYPT), "SM2_decrypt"}, + {ERR_FUNC(SM2_F_SM2_DO_DECRYPT), "SM2_do_decrypt"}, + {ERR_FUNC(SM2_F_SM2_DO_ENCRYPT), "SM2_do_encrypt"}, + {ERR_FUNC(SM2_F_SM2_DO_SIGN), "SM2_do_sign"}, + {ERR_FUNC(SM2_F_SM2_DO_SIGN_EX), "SM2_do_sign_ex"}, + {ERR_FUNC(SM2_F_SM2_DO_VERIFY), "SM2_do_verify"}, + {ERR_FUNC(SM2_F_SM2_ENCRYPT), "SM2_encrypt"}, + {ERR_FUNC(SM2_F_SM2_GET_ID), "SM2_GET_ID"}, + {ERR_FUNC(SM2_F_SM2_KAP_COMPUTE_KEY), "SM2_KAP_compute_key"}, + {ERR_FUNC(SM2_F_SM2_KAP_CTX_CLEANUP), "SM2_KAP_CTX_cleanup"}, + {ERR_FUNC(SM2_F_SM2_KAP_CTX_INIT), "SM2_KAP_CTX_init"}, + {ERR_FUNC(SM2_F_SM2_KAP_FINAL_CHECK), "SM2_KAP_final_check"}, + {ERR_FUNC(SM2_F_SM2_KAP_PREPARE), "SM2_KAP_prepare"}, + {ERR_FUNC(SM2_F_SM2_SET_ID), "SM2_set_id"}, + {ERR_FUNC(SM2_F_SM2_SIGN), "SM2_sign"}, + {ERR_FUNC(SM2_F_SM2_SIGNATURE_SIZE), "SM2_SIGNATURE_SIZE"}, + {ERR_FUNC(SM2_F_SM2_SIGN_EX), "SM2_sign_ex"}, + {ERR_FUNC(SM2_F_SM2_SIGN_SETUP), "SM2_sign_setup"}, + {ERR_FUNC(SM2_F_SM2_VERIFY), "SM2_verify"}, + {0, NULL} }; static ERR_STRING_DATA SM2_str_reasons[] = { - {ERR_REASON(SM2_R_BAD_DATA), "bad data"}, - {ERR_REASON(SM2_R_UNKNOWN_CIPHER_TYPE), "unknown cipher type"}, - {ERR_REASON(SM2_R_ENCRYPT_FAILED), "encrypt failed"}, - {ERR_REASON(SM2_R_DECRYPT_FAILED), "decrypt failed"}, - {ERR_REASON(SM2_R_UNKNOWN_MAC_TYPE), "unknown MAC type"}, - {ERR_REASON(SM2_R_GEN_MAC_FAILED), "MAC generation failed"}, - {ERR_REASON(SM2_R_VERIFY_MAC_FAILED), "MAC verification failed"}, - {ERR_REASON(SM2_R_ECDH_FAILED), "ECDH failed"}, - {ERR_REASON(SM2_R_BUFFER_TOO_SMALL), "buffer too small"}, - {ERR_REASON(SM2_R_SM2_KAP_NOT_INITED), "KAP not inited"}, - {ERR_REASON(SM2_R_RANDOM_NUMBER_GENERATION_FAILED), "random number generation failed"}, - {ERR_REASON(SM2_R_ERROR), "Error"}, - {0,NULL} + {ERR_REASON(SM2_R_BAD_DATA), "bad data"}, + {ERR_REASON(SM2_R_BAD_SIGNATURE), "bad signature"}, + {ERR_REASON(SM2_R_BUFFER_TOO_SMALL), "buffer too small"}, + {ERR_REASON(SM2_R_DECRYPT_FAILED), "decrypt failed"}, + {ERR_REASON(SM2_R_ECDH_FAILED), "ecdh failed"}, + {ERR_REASON(SM2_R_ENCRYPT_FAILED), "encrypt failed"}, + {ERR_REASON(SM2_R_ERROR), "error"}, + {ERR_REASON(SM2_R_GEN_MAC_FAILED), "gen mac failed"}, + {ERR_REASON(SM2_R_MISSING_PARAMETERS), "missing parameters"}, + {ERR_REASON(SM2_R_NEED_NEW_SETUP_VALUES), "need new setup values"}, + {ERR_REASON(SM2_R_RANDOM_NUMBER_GENERATION_FAILED), + "random number generation failed"}, + {ERR_REASON(SM2_R_SM2_KAP_NOT_INITED), "sm2 kap not inited"}, + {ERR_REASON(SM2_R_UNKNOWN_CIPHER_TYPE), "unknown cipher type"}, + {ERR_REASON(SM2_R_UNKNOWN_MAC_TYPE), "unknown mac type"}, + {ERR_REASON(SM2_R_VERIFY_MAC_FAILED), "verify mac failed"}, + {0, NULL} }; #endif @@ -111,9 +126,9 @@ void ERR_load_SM2_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(SM2_str_functs[0].error) == NULL) { - ERR_load_strings(0,SM2_str_functs); - ERR_load_strings(0,SM2_str_reasons); - } + if (ERR_func_error_string(SM2_str_functs[0].error) == NULL) { + ERR_load_strings(0, SM2_str_functs); + ERR_load_strings(0, SM2_str_reasons); + } #endif } diff --git a/crypto/sm2/sm2_err2.c b/crypto/sm2/sm2_err2.c new file mode 100644 index 00000000..ba10bbb7 --- /dev/null +++ b/crypto/sm2/sm2_err2.c @@ -0,0 +1,119 @@ +/* crypto/sm2/sm2_err.c */ +/* ==================================================================== + * Copyright (c) 2015 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 +#include +#include "sm2.h" + +#ifndef OPENSSL_NO_ERR + +#define ERR_FUNC(func) ERR_PACK(ERR_LIB_ECIES,func,0) +#define ERR_REASON(reason) ERR_PACK(ERR_LIB_ECIES,0,reason) + + +static ERR_STRING_DATA SM2_str_functs[] = { + {ERR_FUNC(SM2_F_SM2_SET_ID), "SM2_SET_ID"}, + {ERR_FUNC(SM2_F_SM2_GET_ID), "SM2_F_SM2_GET_ID"}, + {ERR_FUNC(SM2_F_SM2_COMPUTE_ID_DIGEST), "SM2_compute_id_digest"}, + {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_SIZE), "SM2_CIPHERTEXT_VALUE_size"}, + {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_FREE), "SM2_CIPHERTEXT_VALUE_free"}, + {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_ENCODE), "SM2_CIPHERTEXT_VALUE_encode"}, + {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_DECODE), "SM2_CIPHERTEXT_VALUE_decode"}, + {ERR_FUNC(SM2_F_SM2_CIPHERTEXT_VALUE_PRINT), "SM2_CIPHERTEXT_VALUE_print"}, + {ERR_FUNC(SM2_F_SM2_DO_ENCRYPT), "SM2_do_encrypt"}, + {ERR_FUNC(SM2_F_SM2_DO_DECRYPT), "SM2_do_decrypt"}, + {ERR_FUNC(SM2_F_SM2_ENCRYPT), "SM2_encrypt"}, + {ERR_FUNC(SM2_F_SM2_DECRYPT), "SM2_decrypt"}, + {ERR_FUNC(SM2_F_SM2_SIGNATURE_SIZE), "SM2_signature_size"}, + {ERR_FUNC(SM2_F_SM2_SIGN_SETUP), "SM2_sign_setup"}, + {ERR_FUNC(SM2_F_SM2_DO_SIGN_EX), "SM2_do_sign_ex"}, + {ERR_FUNC(SM2_F_SM2_DO_SIGN), "SM2_do_sign"}, + {ERR_FUNC(SM2_F_SM2_DO_VERIFY), "SM2_do_verify"}, + {ERR_FUNC(SM2_F_SM2_SIGN_EX), "SM2_sign_ex"}, + {ERR_FUNC(SM2_F_SM2_SIGN), "SM2_sign"}, + {ERR_FUNC(SM2_F_SM2_VERIFY), "SM2_verify"}, + {ERR_FUNC(SM2_F_SM2_KAP_CTX_INIT), "SM2_KAP_CTX_init"}, + {ERR_FUNC(SM2_F_SM2_KAP_CTX_CLEANUP), "SM2_KAP_CTX_cleanup"}, + {ERR_FUNC(SM2_F_SM2_KAP_PREPARE), "SM2_KAP_prepare"}, + {ERR_FUNC(SM2_F_SM2_KAP_COMPUTE_KEY), "SM2_KAP_compute_key"}, + {ERR_FUNC(SM2_F_SM2_KAP_FINAL_CHECK), "SM2_KAP_final_check"}, + {0,NULL} +}; + +static ERR_STRING_DATA SM2_str_reasons[] = { + {ERR_REASON(SM2_R_BAD_DATA), "bad data"}, + {ERR_REASON(SM2_R_UNKNOWN_CIPHER_TYPE), "unknown cipher type"}, + {ERR_REASON(SM2_R_ENCRYPT_FAILED), "encrypt failed"}, + {ERR_REASON(SM2_R_DECRYPT_FAILED), "decrypt failed"}, + {ERR_REASON(SM2_R_UNKNOWN_MAC_TYPE), "unknown MAC type"}, + {ERR_REASON(SM2_R_GEN_MAC_FAILED), "MAC generation failed"}, + {ERR_REASON(SM2_R_VERIFY_MAC_FAILED), "MAC verification failed"}, + {ERR_REASON(SM2_R_ECDH_FAILED), "ECDH failed"}, + {ERR_REASON(SM2_R_BUFFER_TOO_SMALL), "buffer too small"}, + {ERR_REASON(SM2_R_SM2_KAP_NOT_INITED), "KAP not inited"}, + {ERR_REASON(SM2_R_RANDOM_NUMBER_GENERATION_FAILED), "random number generation failed"}, + {ERR_REASON(SM2_R_ERROR), "Error"}, + {0,NULL} +}; + +#endif + +void ERR_load_SM2_strings(void) +{ +#ifndef OPENSSL_NO_ERR + + if (ERR_func_error_string(SM2_str_functs[0].error) == NULL) { + ERR_load_strings(0,SM2_str_functs); + ERR_load_strings(0,SM2_str_reasons); + } +#endif +} diff --git a/crypto/sm2/sm2_kap.c b/crypto/sm2/sm2_kap.c index 420b54da..8204bdfc 100644 --- a/crypto/sm2/sm2_kap.c +++ b/crypto/sm2/sm2_kap.c @@ -202,33 +202,27 @@ int SM2_update_public_key(EC_KEY *ec_key, const EC_POINT *pub_key) if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) == NID_X9_62_prime_field) { if (!EC_POINT_get_affine_coordinates_GFp(group, pub_key, x, NULL, bn_ctx)) { - SM2err(SM2_F_SM2_KAP_COMPUTE_KEY, ERR_R_EC_LIB); goto end; } } else { if (!EC_POINT_get_affine_coordinates_GF2m(group, pub_key, x, NULL, bn_ctx)) { - SM2err(SM2_F_SM2_KAP_COMPUTE_KEY, ERR_R_EC_LIB); goto end; } } if (!BN_nnmod(x, x, ctx->two_pow_w, bn_ctx)) { - SM2err(SM2_F_SM2_KAP_PREPARE, ERR_R_BN_LIB); goto end; } if (!BN_add(x, x, ctx->two_pow_w)) { - SM2err(SM2_F_SM2_KAP_PREPARE, ERR_R_BN_LIB); goto end; } if (!BN_mod_mul(ctx->t, x, r, ctx->order, ctx->bn_ctx)) { - SM2err(SM2_F_SM2_KAP_PREPARE, ERR_R_BN_LIB); goto end; } if (!EC_POINT_mul(group, point, NULL, point, x, ctx->bn_ctx)) { - SM2err(SM2_F_SM2_KAP_COMPUTE_KEY, ERR_R_EC_LIB); goto end; } @@ -648,12 +642,10 @@ int SM2_KAP_final_check(SM2_KAP_CTX *ctx, const unsigned char *checksum, if (ctx->do_checksum) { if (checksumlen != EVP_MD_size(ctx->checksum_md)) { - SM2err(SM2_F_SM2_KAP_FINAL_CHECK, 0); return 0; } if (memcmp(ctx->checksum, checksum, checksumlen)) { - SM2err(SM2_F_SM2_KAP_COMPUTE_KEY, ERR_R_EC_LIB); return 0; } diff --git a/crypto/sm2/sm2_lib.c b/crypto/sm2/sm2_lib.c index 3b36ac46..6004d5ef 100644 --- a/crypto/sm2/sm2_lib.c +++ b/crypto/sm2/sm2_lib.c @@ -146,12 +146,10 @@ int sm2_get_public_key_data(unsigned char *buf, EC_KEY *ec_key) if (EC_METHOD_get_field_type(EC_GROUP_method_of(ec_group)) == NID_X9_62_prime_field) { if (!EC_GROUP_get_curve_GFp(ec_group, p, x, y, bn_ctx)) { - SM2err(SM2_F_SM2_KAP_PREPARE, ERR_R_EC_LIB); goto err; } } else { if (!EC_GROUP_get_curve_GF2m(ec_group, p, x, y, bn_ctx)) { - SM2err(SM2_F_SM2_KAP_PREPARE, ERR_R_EC_LIB); goto err; } } diff --git a/crypto/sm2/sm2_sign.c b/crypto/sm2/sm2_sign.c index a9015b73..10d20dbf 100644 --- a/crypto/sm2/sm2_sign.c +++ b/crypto/sm2/sm2_sign.c @@ -58,7 +58,6 @@ #include #include - /* k in [1, n-1], (x, y) = kG */ static int sm2_sign_setup(EC_KEY *ec_key, BN_CTX *ctx_in, BIGNUM **kp, BIGNUM **xp) { @@ -71,13 +70,13 @@ static int sm2_sign_setup(EC_KEY *ec_key, BN_CTX *ctx_in, BIGNUM **kp, BIGNUM ** EC_POINT *point = NULL; if (ec_key == NULL || (ec_group = EC_KEY_get0_group(ec_key)) == NULL) { - ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_PASSED_NULL_PARAMETER); + SM2err(SM2_F_SM2_SIGN_SETUP, ERR_R_PASSED_NULL_PARAMETER); return 0; } if (ctx_in == NULL) { if ((ctx = BN_CTX_new()) == NULL) { - ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP,ERR_R_MALLOC_FAILURE); + SM2err(SM2_F_SM2_SIGN_SETUP,ERR_R_MALLOC_FAILURE); return 0; } } @@ -89,17 +88,17 @@ static int sm2_sign_setup(EC_KEY *ec_key, BN_CTX *ctx_in, BIGNUM **kp, BIGNUM ** x = BN_new(); order = BN_new(); if (!k || !x || !order) { - ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_MALLOC_FAILURE); + SM2err(SM2_F_SM2_SIGN_SETUP, ERR_R_MALLOC_FAILURE); goto err; } if (!EC_GROUP_get_order(ec_group, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_EC_LIB); + SM2err(SM2_F_SM2_SIGN_SETUP, ERR_R_EC_LIB); goto err; } if ((point = EC_POINT_new(ec_group)) == NULL) { - ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_EC_LIB); + SM2err(SM2_F_SM2_SIGN_SETUP, ERR_R_EC_LIB); goto err; } @@ -107,8 +106,8 @@ static int sm2_sign_setup(EC_KEY *ec_key, BN_CTX *ctx_in, BIGNUM **kp, BIGNUM ** /* get random k */ do { if (!BN_rand_range(k, order)) { - ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, - ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED); + SM2err(SM2_F_SM2_SIGN_SETUP, + SM2_R_RANDOM_NUMBER_GENERATION_FAILED); goto err; } @@ -116,25 +115,25 @@ static int sm2_sign_setup(EC_KEY *ec_key, BN_CTX *ctx_in, BIGNUM **kp, BIGNUM ** /* compute r the x-coordinate of generator * k */ if (!EC_POINT_mul(ec_group, point, k, NULL, NULL, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_EC_LIB); + SM2err(SM2_F_SM2_SIGN_SETUP, ERR_R_EC_LIB); goto err; } if (EC_METHOD_get_field_type(EC_GROUP_method_of(ec_group)) == NID_X9_62_prime_field) { if (!EC_POINT_get_affine_coordinates_GFp(ec_group, point, x, NULL, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP,ERR_R_EC_LIB); + SM2err(SM2_F_SM2_SIGN_SETUP,ERR_R_EC_LIB); goto err; } } else /* NID_X9_62_characteristic_two_field */ { if (!EC_POINT_get_affine_coordinates_GF2m(ec_group, point, x, NULL, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP,ERR_R_EC_LIB); + SM2err(SM2_F_SM2_SIGN_SETUP,ERR_R_EC_LIB); goto err; } } //FIXME: do we need this? if (!BN_nnmod(x, x, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_SIGN_SETUP, ERR_R_BN_LIB); goto err; } @@ -181,12 +180,12 @@ static ECDSA_SIG *sm2_do_sign(const unsigned char *dgst, int dgst_len, ec_group = EC_KEY_get0_group(ec_key); priv_key = EC_KEY_get0_private_key(ec_key); if (!ec_group || !priv_key) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_PASSED_NULL_PARAMETER); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_PASSED_NULL_PARAMETER); return NULL; } if (!(ret = ECDSA_SIG_new())) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_MALLOC_FAILURE); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_MALLOC_FAILURE); return NULL; } @@ -195,11 +194,11 @@ static ECDSA_SIG *sm2_do_sign(const unsigned char *dgst, int dgst_len, e = BN_new(); bn = BN_new(); if (!ctx || !order || !e || !bn) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_MALLOC_FAILURE); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_MALLOC_FAILURE); goto err; } if (!EC_GROUP_get_order(ec_group, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_EC_LIB); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_EC_LIB); goto err; } @@ -211,13 +210,13 @@ static ECDSA_SIG *sm2_do_sign(const unsigned char *dgst, int dgst_len, } #endif if (!BN_bin2bn(dgst, dgst_len, e)) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_BN_LIB); goto err; } #if 0 if ((8 * dgst_len > i) && !BN_rshift(e, e, 8 - (i & 0x7))) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_BN_LIB); goto err; } #endif @@ -226,14 +225,14 @@ static ECDSA_SIG *sm2_do_sign(const unsigned char *dgst, int dgst_len, /* use or compute k and (kG).x */ if (!in_k || !in_x) { if (!sm2_sign_setup(ec_key, ctx, &k, &ret->r)) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN,ERR_R_ECDSA_LIB); + SM2err(SM2_F_SM2_DO_SIGN,ERR_R_ECDSA_LIB); goto err; } ck = k; } else { ck = in_k; if (!BN_copy(ret->r, in_x)) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_MALLOC_FAILURE); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_MALLOC_FAILURE); goto err; } } @@ -241,20 +240,20 @@ static ECDSA_SIG *sm2_do_sign(const unsigned char *dgst, int dgst_len, /* r = e + x (mod n) */ if (!BN_mod_add(ret->r, ret->r, e, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_BN_LIB); goto err; } if (!BN_mod_add(bn, ret->r, ck, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_BN_LIB); goto err; } /* check r != 0 && r + k != n */ if (BN_is_zero(ret->r) || BN_is_zero(bn)) { if (in_k && in_x) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ECDSA_R_NEED_NEW_SETUP_VALUES); + SM2err(SM2_F_SM2_DO_SIGN, SM2_R_NEED_NEW_SETUP_VALUES); goto err; } else continue; @@ -262,35 +261,35 @@ static ECDSA_SIG *sm2_do_sign(const unsigned char *dgst, int dgst_len, /* s = ((1 + d)^-1 * (k - rd)) mod n */ if (!BN_one(bn)) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_BN_LIB); goto err; } if (!BN_mod_add(ret->s, priv_key, bn, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_BN_LIB); goto err; } if (!BN_mod_inverse(ret->s, ret->s, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_BN_LIB); goto err; } if (!BN_mod_mul(bn, ret->r, priv_key, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_BN_LIB); goto err; } if (!BN_mod_sub(bn, ck, bn, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_BN_LIB); goto err; } if (!BN_mod_mul(ret->s, ret->s, bn, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_SIGN, ERR_R_BN_LIB); goto err; } /* check s != 0 */ if (BN_is_zero(ret->s)) { if (in_k && in_x) { - ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ECDSA_R_NEED_NEW_SETUP_VALUES); + SM2err(SM2_F_SM2_DO_SIGN, SM2_R_NEED_NEW_SETUP_VALUES); goto err; } } else @@ -331,7 +330,7 @@ int sm2_do_verify(const unsigned char *dgst, int dgstlen, !(ec_group = EC_KEY_get0_group(ec_key)) || !(pub_key = EC_KEY_get0_public_key(ec_key))) { - ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ECDSA_R_MISSING_PARAMETERS); + SM2err(SM2_F_SM2_DO_VERIFY, SM2_R_MISSING_PARAMETERS); return -1; } @@ -341,11 +340,11 @@ int sm2_do_verify(const unsigned char *dgst, int dgstlen, t = BN_new(); if (!ctx || !order || !e || !t) { - ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_MALLOC_FAILURE); + SM2err(SM2_F_SM2_DO_VERIFY, ERR_R_MALLOC_FAILURE); goto err; } if (!EC_GROUP_get_order(ec_group, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_EC_LIB); + SM2err(SM2_F_SM2_DO_VERIFY, ERR_R_EC_LIB); goto err; } @@ -357,14 +356,14 @@ int sm2_do_verify(const unsigned char *dgst, int dgstlen, BN_is_negative(sig->s) || BN_ucmp(sig->s, order) >= 0) { - ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ECDSA_R_BAD_SIGNATURE); + SM2err(SM2_F_SM2_DO_VERIFY, SM2_R_BAD_SIGNATURE); ret = 0; goto err; } /* check t = r + s != 0 */ if (!BN_mod_add(t, sig->r, sig->s, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_VERIFY, ERR_R_BN_LIB); goto err; } if (BN_is_zero(t)) { @@ -380,44 +379,44 @@ int sm2_do_verify(const unsigned char *dgst, int dgstlen, } #endif if (!BN_bin2bn(dgst, dgstlen, e)) { - ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_VERIFY, ERR_R_BN_LIB); goto err; } #if 0 if ((8 * dgstlen > i) && !BN_rshift(e, e, 8 - (i & 0x7))) { - ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_VERIFY, ERR_R_BN_LIB); goto err; } #endif /* compute (x, y) = sG + tP, P is pub_key */ if (!(point = EC_POINT_new(ec_group))) { - ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_MALLOC_FAILURE); + SM2err(SM2_F_SM2_DO_VERIFY, ERR_R_MALLOC_FAILURE); goto err; } if (!EC_POINT_mul(ec_group, point, sig->s, pub_key, t, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_EC_LIB); + SM2err(SM2_F_SM2_DO_VERIFY, ERR_R_EC_LIB); goto err; } if (EC_METHOD_get_field_type(EC_GROUP_method_of(ec_group)) == NID_X9_62_prime_field) { if (!EC_POINT_get_affine_coordinates_GFp(ec_group, point, t, NULL, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_EC_LIB); + SM2err(SM2_F_SM2_DO_VERIFY, ERR_R_EC_LIB); goto err; } } else /* NID_X9_62_characteristic_two_field */ { if (!EC_POINT_get_affine_coordinates_GF2m(ec_group, point, t, NULL, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_EC_LIB); + SM2err(SM2_F_SM2_DO_VERIFY, ERR_R_EC_LIB); goto err; } } if (!BN_nnmod(t, t, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_VERIFY, ERR_R_BN_LIB); goto err; } /* check (sG + tP).x + e == sig.r */ if (!BN_mod_add(t, t, e, order, ctx)) { - ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_BN_LIB); + SM2err(SM2_F_SM2_DO_VERIFY, ERR_R_BN_LIB); goto err; } if (BN_ucmp(t, sig->r) == 0) { @@ -492,8 +491,6 @@ int SM2_verify(int type, const unsigned char *dgst, int dgstlen, int derlen = -1; int ret = -1; -fprintf(stderr, "%s %d %s() executed\n", __FILE__, __LINE__, __FUNCTION__); - if (!(s = ECDSA_SIG_new())) { return ret; } @@ -516,4 +513,3 @@ err: ECDSA_SIG_free(s); return ret; } - diff --git a/crypto/sm2/sm2test.c b/crypto/sm2/sm2test.c index eda0c3e8..ad0fbe16 100644 --- a/crypto/sm2/sm2test.c +++ b/crypto/sm2/sm2test.c @@ -48,14 +48,14 @@ int change_rand(const char *hex) fake_rand.status = old_rand->status; fake_rand.bytes = fbytes; fake_rand.pseudorand = old_rand->bytes; - + if (!RAND_set_rand_method(&fake_rand)) { return 0; - } + } rnd_number = hex; return 1; -} +} int restore_rand(void) { @@ -83,7 +83,7 @@ int hexequbin(const char *hex, const unsigned char *bin, size_t binlen) sprintf(buf + i*2, "%02X", bin[i]); } buf[buflen - 1] = 0; - + if (memcmp(hex, buf, binlen * 2) == 0) { ret = 1; } @@ -114,7 +114,7 @@ EC_GROUP *new_ec_group(int is_prime_field, goto err; } - if (!BN_hex2bn(&p, p_hex) || + if (!BN_hex2bn(&p, p_hex) || !BN_hex2bn(&a, a_hex) || !BN_hex2bn(&b, b_hex) || !BN_hex2bn(&x, x_hex) || @@ -150,7 +150,7 @@ EC_GROUP *new_ec_group(int is_prime_field, goto err; } - EC_GROUP_set_asn1_flag(group, flag); + EC_GROUP_set_asn1_flag(group, flag); EC_GROUP_set_point_conversion_form(group, form); ok = 1; @@ -217,7 +217,7 @@ EC_KEY *new_ec_key(const EC_GROUP *group, } if (!EC_KEY_set_public_key_affine_coordinates(ec_key, x, y)) { goto end; - } + } ok = 1; end: @@ -229,7 +229,7 @@ end: EC_KEY_free(ec_key); ec_key = NULL; } - return ec_key; + return ec_key; } int test_sm2_sign(const EC_GROUP *group, @@ -293,7 +293,7 @@ int test_sm2_sign(const EC_GROUP *group, fprintf(stderr, "error: %s %d\n", __FUNCTION__, __LINE__); goto err; } - + /* verify */ if (!(pubkey = new_ec_key(group, NULL, xP, yP, id))) { fprintf(stderr, "error: %s %d\n", __FUNCTION__, __LINE__); @@ -337,8 +337,8 @@ int test_sm2_enc(const EC_GROUP *group, } buflen = sizeof(buf); - if (!SM2_encrypt_with_recommended((const unsigned char *)M, strlen(M), - buf, &buflen, ec_key)) { + if (!SM2_encrypt_with_recommended(buf, &buflen, + (const unsigned char *)M, strlen(M), ec_key)) { fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__); goto end; } @@ -350,12 +350,12 @@ int test_sm2_enc(const EC_GROUP *group, goto end; } EC_KEY_free(ec_key); - + if (!(ec_key = new_ec_key(group, d, xP, yP, NULL))) { fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__); goto end; } - if (!SM2_decrypt_with_recommended(buf, buflen, msg, &msglen, ec_key)) { + if (!SM2_decrypt_with_recommended(msg, &msglen, buf, buflen, ec_key)) { fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__); goto end; } @@ -554,7 +554,7 @@ int test_sm2_test_vector() "01686522130D590FB8DE635D8FCA715CC6BF3D05BEF3F75DA5D543454448166612", "ALICE123@YAHOO.COM", "26352AF82EC19F207BBC6F9474E11E90CE0F7DDACE03B27F801817E897A81FD5", - "message digest", + "message digest", "AD673CBDA311417129A9EAA5F9AB1AA1633AD47718A84DFD46C17C6FA0AA3B12", "36CD79FC8E24B7357A8A7B4A46D454C397703D6498158C605399B341ADA186D6", "6D3FBA26EAB2A1054F5D198332E335817C8AC453ED26D3391CD4439D825BF25B", @@ -574,7 +574,7 @@ int test_sm2_test_vector() "4C62EEFD6ECFC2B95B92FD6C3D9575148AFA17425546D49018E5388D49DD7B4F", "04" "245C26FB68B1DDDDB12C4B6BF9F2B6D5FE60A383B0D18D1C4144ABF17F6252E7" - "76CB9264C2A7E88E52B19903FDC47378F605E36811F5C07423A24B84400F01B8" + "76CB9264C2A7E88E52B19903FDC47378F605E36811F5C07423A24B84400F01B8" "650053A89B41C418B0C3AAD00D886C00286467" "9C3D7360C30156FAB7C80A0276712DA9D8094A634B766D3A285E07480653426D")) { printf("sm2 enc p256 failed\n"); @@ -624,7 +624,7 @@ int test_sm2_test_vector() printf("sm2 kap p256 passed\n"); } -#if 1 +#if 0 /* ZA will not pass! */ if (!test_sm2_kap( sm2b257test, @@ -702,7 +702,7 @@ end: EVP_PKEY_CTX_free(pkctx); return ret; } - + int test_evp_pkey_sign(EVP_PKEY *pkey, int do_sm2, int verbose) { int ret = 0; @@ -770,7 +770,7 @@ int test_evp_pkey_sign(EVP_PKEY *pkey, int do_sm2, int verbose) ret = 1; end: EVP_PKEY_CTX_free(pkctx); - return ret; + return ret; } int test_evp_pkey_encrypt(EVP_PKEY *pkey, int do_sm2, int verbose) @@ -791,7 +791,7 @@ int test_evp_pkey_encrypt(EVP_PKEY *pkey, int do_sm2, int verbose) fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__); goto end; } - + /* EVP_PKEY_encrypt() */ if (!EVP_PKEY_encrypt_init(pkctx)) { @@ -802,7 +802,7 @@ int test_evp_pkey_encrypt(EVP_PKEY *pkey, int do_sm2, int verbose) if (!EVP_PKEY_CTX_set_ec_enc_type(pkctx, type)) { fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__); goto end; - } + } cbuflen = sizeof(cbuf); if (!EVP_PKEY_encrypt(pkctx, cbuf, &cbuflen, msg, msglen)) { @@ -827,7 +827,7 @@ int test_evp_pkey_encrypt(EVP_PKEY *pkey, int do_sm2, int verbose) if (!EVP_PKEY_CTX_set_ec_enc_type(pkctx, type)) { fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__); goto end; - } + } bzero(mbuf, sizeof(mbuf)); mbuflen = sizeof(mbuf); @@ -1000,7 +1000,7 @@ int test_evp_digestsign(EVP_PKEY *pkey, int do_sm2, const EVP_MD *md, int verbos goto end; } - pkctx = NULL; + pkctx = NULL; if (!EVP_DigestVerifyInit(mdctx, &pkctx, md, NULL, pkey)) { ERR_print_errors_fp(stderr); fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__); @@ -1063,14 +1063,15 @@ int test_evp_seal(int curve_id, const EVP_CIPHER *cipher, BIO *out, int verbose) } if (NUM_PKEYS != EVP_SealInit(cctx, cipher, ek, ekl, iv, pkey, NUM_PKEYS)) { + ERR_print_errors_fp(stderr); fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__); goto end; } - + if (verbose > 1) { for (i = 0; i < NUM_PKEYS; i++) { int j; - BIO_printf(out, "ek[i] (%d-byte) = ", ekl[i]); + BIO_printf(out, "ek[%d] (%d-byte) = ", i, ekl[i]); for (j = 0; j < ekl[i]; j++) { BIO_printf(out, "%02X", ek[i][j]); } @@ -1110,7 +1111,7 @@ int test_evp_seal(int curve_id, const EVP_CIPHER *cipher, BIO *out, int verbose) BIO_printf(out, "\n"); } - if (!EVP_OpenInit(cctx, cipher, ek[0], ekl[0], iv, pkey[0])) { + if (!EVP_OpenInit(cctx, cipher, ek[1], ekl[1], iv, pkey[1])) { fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__); goto end; } @@ -1205,13 +1206,13 @@ int test_sm2_evp(int verbose) if (!test_evp_sign(pkey, md, verbose)) { fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__); goto end; - } + } /* test seal/open */ if (!test_evp_seal(curve_id, cipher, out, verbose)) { fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__); goto end; - } + } ret = 1; @@ -1224,10 +1225,10 @@ end: } int main(int argc, char **argv) -{ +{ int ret = -1; - BIO *out = NULL; - + BIO *out = NULL; + out = BIO_new_fp(stdout, BIO_NOCLOSE); /* @@ -1238,20 +1239,20 @@ int main(int argc, char **argv) } else { CRYPTO_set_mem_debug_functions(0, 0, 0, 0, 0); } - CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); - */ + CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); + */ ERR_load_crypto_strings(); RAND_seed(rnd_seed, sizeof(rnd_seed)); - + if (!test_sm2_test_vector()) { goto err; } if (!test_sm2_evp(2)) { goto err; - } + } ret =0; err: @@ -1261,7 +1262,7 @@ err: if (ret) ERR_print_errors(out); - + //CRYPTO_cleanup_all_ex_data(); //ERR_remove_thread_state(NULL); //ERR_free_strings(); diff --git a/crypto/sm3/Makefile b/crypto/sm3/Makefile index 7ae1bfc0..919db984 100644 --- a/crypto/sm3/Makefile +++ b/crypto/sm3/Makefile @@ -79,5 +79,4 @@ clean: # DO NOT DELETE THIS LINE -- make depend depends on it. -sm3.o: sm3.c sm3.h ../byteorder.h -sm3test.o: sm3test.c sm3.h ../byteorder.h +sm3.o: ../byteorder.h sm3.c sm3.h diff --git a/crypto/sm3/hmac_sm3.c b/crypto/sm3/hmac_sm3.c index 370fe84a..a3bfd2d3 100644 --- a/crypto/sm3/hmac_sm3.c +++ b/crypto/sm3/hmac_sm3.c @@ -23,8 +23,6 @@ #define IPAD 0x36 #define OPAD 0x5C - - void hmac_sm3_init(hmac_sm3_ctx_t *ctx, const unsigned char *key, size_t key_len) { int i; diff --git a/crypto/sm3/sm3test.c b/crypto/sm3/sm3test.c index 5e021b44..242f4d41 100644 --- a/crypto/sm3/sm3test.c +++ b/crypto/sm3/sm3test.c @@ -119,4 +119,27 @@ static char *pt(unsigned char *md) sprintf(&(buf[i * 2]), "%02x", md[i]); return (buf); } + + + + +/* + + + + + + + + + + +*/ + + + + + + + #endif diff --git a/crypto/sm9/Makefile b/crypto/sm9/Makefile new file mode 100644 index 00000000..f671cb7c --- /dev/null +++ b/crypto/sm9/Makefile @@ -0,0 +1,90 @@ +# +# OpenSSL/crypto/sm9/Makefile +# + +DIR= sm9 +TOP= ../.. +CC= cc +CPP= $(CC) -E +INCLUDES=-I.. -I$(TOP) -I../../include +CFLAG=-g +MAKEFILE= Makefile +AR= ar r + +SM3_ASM_OBJ= + +CFLAGS= $(INCLUDES) $(CFLAG) +ASFLAGS= $(INCLUDES) $(ASFLAG) +AFLAGS= $(ASFLAGS) + +GENERAL=Makefile +TEST=sm9test.c +APPS= + +LIB=$(TOP)/libcrypto.a +LIBSRC=sm9_lib.c sm9_err.c +LIBOBJ=sm9_lib.o sm9_err.o + +SRC= $(LIBSRC) + +EXHEADER= sm9.h +HEADER= sm9_lcl.h $(EXHEADER) + +ALL= $(GENERAL) $(SRC) $(HEADER) + +top: + (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all) + +all: lib + +lib: $(LIBOBJ) + $(AR) $(LIB) $(LIBOBJ) + $(RANLIB) $(LIB) || echo Never mind. + @touch lib + +files: + $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO + +links: + @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER) + @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST) + @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS) + +install: + @[ -n "$(INSTALLTOP)" ] # should be set by top Makefile... + @headerlist="$(EXHEADER)"; for i in $$headerlist ; \ + do \ + (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \ + chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \ + done; + +tags: + ctags $(SRC) + +tests: + +lint: + lint -DLINT $(INCLUDES) $(SRC)>fluff + +depend: + @[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile... + $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC) + +dclean: + $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new + mv -f Makefile.new $(MAKEFILE) + +clean: + rm -f *.s *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff + +# DO NOT DELETE THIS LINE -- make depend depends on it. + +sm9_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +sm9_err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h +sm9_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h +sm9_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +sm9_err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +sm9_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +sm9_err.o: ../../include/openssl/safestack.h ../../include/openssl/sm9.h +sm9_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +sm9_err.o: sm9_err.c diff --git a/crypto/sm9/sm9.h b/crypto/sm9/sm9.h index 91b0d96d..75203553 100644 --- a/crypto/sm9/sm9.h +++ b/crypto/sm9/sm9.h @@ -86,17 +86,31 @@ int SM9_decrypt(SM9_PUBLIC_PARAMS *params, unsigned char *out, size_t *outlen, EVP_PKEY *pkey); -int SM9_sign(SM9_PUBLIC_PARAMS *params, - const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, - EVP_PKEY *pkey); -int SM2_verify(SM9_PUBLIC_PARAMS *params, - const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, - const char *id, size_t idlen); -#ifdef __cplusplus +/* 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_SM9_strings(void); + +/* Error codes for the SM9 functions. */ + +/* Function codes. */ +# define SM9_F_D2I_SM9_MASTER_SECRET 100 +# define SM9_F_D2I_SM9_PUBLIC_PARAMS 101 +# define SM9_F_I2D_SM9_MASTER_SECRET 102 +# define SM9_F_I2D_SM9_PUBLIC_PARAMS 103 +# define SM9_F_SM9_DECRYPT 104 +# define SM9_F_SM9_ENCRYPT 105 +# define SM9_F_SM9_EXTRACT_PRIVATE_KEY 106 +# define SM9_F_SM9_PUBLIC_PARAMS_FREE 107 +# define SM9_F_SM9_SETUP 108 + +/* Reason codes. */ +# define SM9_R_NOT_IMPLEMENTED 100 + +#ifdef __cplusplus } #endif #endif - diff --git a/crypto/sm9/sm9_err.c b/crypto/sm9/sm9_err.c new file mode 100644 index 00000000..f6bce67c --- /dev/null +++ b/crypto/sm9/sm9_err.c @@ -0,0 +1,101 @@ +/* crypto/sm9/sm9_err.c */ +/* ==================================================================== + * Copyright (c) 1999-2016 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). + * + */ + +/* + * NOTE: this file was auto generated by the mkerr.pl script: any changes + * made to it will be overwritten when the script next updates this file, + * only reason strings will be preserved. + */ + +#include +#include +#include + +/* BEGIN ERROR CODES */ +#ifndef OPENSSL_NO_ERR + +# define ERR_FUNC(func) ERR_PACK(ERR_LIB_SM9,func,0) +# define ERR_REASON(reason) ERR_PACK(ERR_LIB_SM9,0,reason) + +static ERR_STRING_DATA SM9_str_functs[] = { + {ERR_FUNC(SM9_F_D2I_SM9_MASTER_SECRET), "d2i_SM9_MASTER_SECRET"}, + {ERR_FUNC(SM9_F_D2I_SM9_PUBLIC_PARAMS), "d2i_SM9_PUBLIC_PARAMS"}, + {ERR_FUNC(SM9_F_I2D_SM9_MASTER_SECRET), "i2d_SM9_MASTER_SECRET"}, + {ERR_FUNC(SM9_F_I2D_SM9_PUBLIC_PARAMS), "i2d_SM9_PUBLIC_PARAMS"}, + {ERR_FUNC(SM9_F_SM9_DECRYPT), "SM9_decrypt"}, + {ERR_FUNC(SM9_F_SM9_ENCRYPT), "SM9_encrypt"}, + {ERR_FUNC(SM9_F_SM9_EXTRACT_PRIVATE_KEY), "SM9_extract_private_key"}, + {ERR_FUNC(SM9_F_SM9_PUBLIC_PARAMS_FREE), "SM9_PUBLIC_PARAMS_free"}, + {ERR_FUNC(SM9_F_SM9_SETUP), "SM9_setup"}, + {0, NULL} +}; + +static ERR_STRING_DATA SM9_str_reasons[] = { + {ERR_REASON(SM9_R_NOT_IMPLEMENTED), "not implemented"}, + {0, NULL} +}; + +#endif + +void ERR_load_SM9_strings(void) +{ +#ifndef OPENSSL_NO_ERR + + if (ERR_func_error_string(SM9_str_functs[0].error) == NULL) { + ERR_load_strings(0, SM9_str_functs); + ERR_load_strings(0, SM9_str_reasons); + } +#endif +} diff --git a/crypto/sm9/sm9_lcl.h b/crypto/sm9/sm9_lcl.h index f30153a0..85a36f10 100644 --- a/crypto/sm9/sm9_lcl.h +++ b/crypto/sm9/sm9_lcl.h @@ -1,4 +1,4 @@ -/* crypto/sm9/sm9.h */ +/* crypto/sm9/sm9_lcl.h */ /* ==================================================================== * Copyright (c) 2016 The GmSSL Project. All rights reserved. * @@ -49,6 +49,8 @@ * */ +#ifndef HEADER_SM9_LCL_H +#define HEADER_SM9_LCL_H #include "sm9.h" @@ -86,14 +88,6 @@ struct sm9_method_st { const unsigned char *in, size_t inlen, unsigned char *out, size_t *outlen, EVP_PKEY *pkey); - int (*sign)(SM9_PUBLIC_PARAMS *params, - const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, - EVP_PKEY *pkey); - int (*verify)(SM9_PUBLIC_PARAMS *params, - const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, - const char *id, size_t idlen); }; #ifdef __cplusplus diff --git a/crypto/sm9/sm9_lib.c b/crypto/sm9/sm9_lib.c new file mode 100644 index 00000000..affe8502 --- /dev/null +++ b/crypto/sm9/sm9_lib.c @@ -0,0 +1,118 @@ +/* crypto/sm9/sm9_lib.c */ +/* ==================================================================== + * Copyright (c) 2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 +#include "sm9_lcl.h" + +int SM9_setup(SM9_PUBLIC_PARAMS **params, SM9_MASTER_SECRET **master) +{ + SM9err(SM9_F_SM9_SETUP, SM9_R_NOT_IMPLEMENTED); + return 0; +} + +void SM9_PUBLIC_PARAMS_free(SM9_PUBLIC_PARAMS *a) +{ + SM9err(SM9_F_SM9_PUBLIC_PARAMS_FREE, SM9_R_NOT_IMPLEMENTED); +} + +void SM9_MASTER_SECRET_free(SM9_MASTER_SECRET *a) +{ +} + +int i2d_SM9_PUBLIC_PARAMS(SM9_PUBLIC_PARAMS *a, unsigned char *out) +{ + SM9err(SM9_F_I2D_SM9_PUBLIC_PARAMS, SM9_R_NOT_IMPLEMENTED); + return 0; +} + +int i2d_SM9_MASTER_SECRET(SM9_MASTER_SECRET *a, unsigned char *out) +{ + SM9err(SM9_F_I2D_SM9_MASTER_SECRET, SM9_R_NOT_IMPLEMENTED); + return 0; +} + +SM9_PUBLIC_PARAMS *d2i_SM9_PUBLIC_PARAMS(SM9_PUBLIC_PARAMS **a, const unsigned char **in, long len) +{ + SM9err(SM9_F_D2I_SM9_PUBLIC_PARAMS, SM9_R_NOT_IMPLEMENTED); + return NULL; +} + +SM9_MASTER_SECRET *d2i_SM9_MASTER_SECRET(SM9_MASTER_SECRET **a, const unsigned char **in, long len) +{ + SM9err(SM9_F_D2I_SM9_MASTER_SECRET, SM9_R_NOT_IMPLEMENTED); + return NULL; +} + +EVP_PKEY *SM9_extract_private_key(SM9_MASTER_SECRET *master, + const char *id, size_t idlen, EVP_PKEY **pkey) +{ + SM9err(SM9_F_SM9_EXTRACT_PRIVATE_KEY, SM9_R_NOT_IMPLEMENTED); + return NULL; +} + +int SM9_encrypt(SM9_PUBLIC_PARAMS *params, + const unsigned char *in, size_t inlen, + unsigned char *out, size_t *outlen, + const char *id, size_t idlen) +{ + SM9err(SM9_F_SM9_ENCRYPT, SM9_R_NOT_IMPLEMENTED); + return NULL; +} + +int SM9_decrypt(SM9_PUBLIC_PARAMS *params, + const unsigned char *in, size_t inlen, + unsigned char *out, size_t *outlen, + EVP_PKEY *pkey) +{ + SM9err(SM9_F_SM9_DECRYPT, SM9_R_NOT_IMPLEMENTED); + return 0; +} + diff --git a/crypto/sm9/sm9test.c b/crypto/sm9/sm9test.c new file mode 100644 index 00000000..86bb5c52 --- /dev/null +++ b/crypto/sm9/sm9test.c @@ -0,0 +1,57 @@ +/* crypto/sm9/sm9test.c */ +/* ==================================================================== + * Copyright (c) 2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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 + +int main(int argc, char **argv) +{ + return -1; +} diff --git a/crypto/sms4/Makefile b/crypto/sms4/Makefile index eb89cd32..ea9209b6 100644 --- a/crypto/sms4/Makefile +++ b/crypto/sms4/Makefile @@ -74,8 +74,25 @@ clean: # DO NOT DELETE THIS LINE -- make depend depends on it. -sms4_cbc.o: sms4_cbc.c ../../include/openssl/modes.h sms4.h -sms4_cfb.o: sms4_cfb.c ../../include/openssl/modes.h sms4.h -sms4_ecb.o: sms4_ecb.c ../../include/openssl/modes.h sms4.h -sms4_ofb.o: sms4_ofb.c ../../include/openssl/modes.h sms4.h -sms4.o: sms4.c ../../include/openssl/modes.h +sms4_cbc.o: ../../include/openssl/modes.h ../../include/openssl/sms4.h +sms4_cbc.o: sms4_cbc.c +sms4_cfb.o: ../../include/openssl/modes.h ../../include/openssl/sms4.h +sms4_cfb.o: sms4_cfb.c +sms4_common.o: sms4_common.c sms4_lcl.h +sms4_ctr.o: ../../include/openssl/modes.h ../../include/openssl/sms4.h +sms4_ctr.o: sms4_ctr.c +sms4_ecb.o: ../../include/openssl/modes.h ../../include/openssl/sms4.h +sms4_ecb.o: sms4_ecb.c +sms4_enc.o: sms4.h sms4_enc.c sms4_lcl.h +sms4_ofb.o: ../../include/openssl/modes.h ../../include/openssl/sms4.h +sms4_ofb.o: sms4_ofb.c +sms4_setkey.o: sms4.h sms4_lcl.h sms4_setkey.c +sms4_wrap.o: ../../e_os.h ../../include/openssl/bio.h +sms4_wrap.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +sms4_wrap.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h +sms4_wrap.o: ../../include/openssl/lhash.h ../../include/openssl/modes.h +sms4_wrap.o: ../../include/openssl/opensslconf.h +sms4_wrap.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +sms4_wrap.o: ../../include/openssl/safestack.h ../../include/openssl/sms4.h +sms4_wrap.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +sms4_wrap.o: ../cryptlib.h sms4_wrap.c diff --git a/crypto/sms4/sms4.h b/crypto/sms4/sms4.h index 0ee691a7..cc37dd11 100644 --- a/crypto/sms4/sms4.h +++ b/crypto/sms4/sms4.h @@ -54,6 +54,7 @@ #define SMS4_KEY_LENGTH 16 #define SMS4_BLOCK_SIZE 16 +#define SMS4_IV_LENGTH (SMS4_BLOCK_SIZE) #define SMS4_NUM_ROUNDS 32 #include diff --git a/crypto/ssf33/Makefile b/crypto/ssf33/Makefile new file mode 100644 index 00000000..56711a58 --- /dev/null +++ b/crypto/ssf33/Makefile @@ -0,0 +1,81 @@ +# +# OpenSSL/crypto/ssf33/Makefile +# + +DIR= ssf33 +TOP= ../.. +CC= cc +CPP= $(CC) -E +INCLUDES=-I.. -I$(TOP) -I../../include +CFLAG=-g +MAKEFILE= Makefile +AR= ar r + +SM3_ASM_OBJ= + +CFLAGS= $(INCLUDES) $(CFLAG) +ASFLAGS= $(INCLUDES) $(ASFLAG) +AFLAGS= $(ASFLAGS) + +GENERAL=Makefile +TEST= +APPS= + +LIB=$(TOP)/libcrypto.a +LIBSRC= +LIBOBJ= + +SRC= $(LIBSRC) + +EXHEADER= ssf33.h +HEADER= $(EXHEADER) + +ALL= $(GENERAL) $(SRC) $(HEADER) + +top: + (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all) + +all: lib + +lib: $(LIBOBJ) + $(AR) $(LIB) $(LIBOBJ) + $(RANLIB) $(LIB) || echo Never mind. + @touch lib + +files: + $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO + +links: + @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER) + @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST) + @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS) + +install: + @[ -n "$(INSTALLTOP)" ] # should be set by top Makefile... + @headerlist="$(EXHEADER)"; for i in $$headerlist ; \ + do \ + (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \ + chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \ + done; + +tags: + ctags $(SRC) + +tests: + +lint: + lint -DLINT $(INCLUDES) $(SRC)>fluff + +depend: + @[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile... + $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC) + +dclean: + $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new + mv -f Makefile.new $(MAKEFILE) + +clean: + rm -f *.s *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff + +# DO NOT DELETE THIS LINE -- make depend depends on it. + diff --git a/crypto/ssf33/ssf33.h b/crypto/ssf33/ssf33.h index 3d00588d..0f6c3e73 100644 --- a/crypto/ssf33/ssf33.h +++ b/crypto/ssf33/ssf33.h @@ -54,6 +54,7 @@ #define SSF33_KEY_LENGTH 16 #define SSF33_BLOCK_SIZE 16 +#define SSF33_IV_LENGTH (SSF33_BLOCK_SIZE) #ifdef __cplusplus extern "C" { diff --git a/crypto/ts/Makefile b/crypto/ts/Makefile index cf991efe..ff4da144 100644 --- a/crypto/ts/Makefile +++ b/crypto/ts/Makefile @@ -94,15 +94,16 @@ ts_asn1.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h ts_asn1.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ts_asn1.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ts_asn1.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ts_asn1.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ts_asn1.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -ts_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -ts_asn1.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h -ts_asn1.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -ts_asn1.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -ts_asn1.o: ../../include/openssl/ts.h ../../include/openssl/x509.h -ts_asn1.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -ts_asn1.o: ts_asn1.c +ts_asn1.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +ts_asn1.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +ts_asn1.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +ts_asn1.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +ts_asn1.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h +ts_asn1.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ts_asn1.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +ts_asn1.o: ../../include/openssl/symhacks.h ../../include/openssl/ts.h +ts_asn1.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +ts_asn1.o: ../../include/openssl/x509v3.h ts_asn1.c ts_conf.o: ../../e_os.h ../../include/openssl/asn1.h ts_conf.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h ts_conf.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h @@ -110,31 +111,35 @@ ts_conf.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h ts_conf.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ts_conf.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ts_conf.o: ../../include/openssl/engine.h ../../include/openssl/err.h -ts_conf.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -ts_conf.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -ts_conf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -ts_conf.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h -ts_conf.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h -ts_conf.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -ts_conf.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -ts_conf.o: ../../include/openssl/symhacks.h ../../include/openssl/ts.h -ts_conf.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -ts_conf.o: ../../include/openssl/x509v3.h ../cryptlib.h ts_conf.c +ts_conf.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +ts_conf.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ts_conf.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +ts_conf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +ts_conf.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h +ts_conf.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h +ts_conf.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +ts_conf.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +ts_conf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +ts_conf.o: ../../include/openssl/ts.h ../../include/openssl/x509.h +ts_conf.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +ts_conf.o: ../cryptlib.h ts_conf.c ts_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h ts_err.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h ts_err.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h ts_err.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h ts_err.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h ts_err.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -ts_err.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -ts_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -ts_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -ts_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -ts_err.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -ts_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -ts_err.o: ../../include/openssl/symhacks.h ../../include/openssl/ts.h -ts_err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -ts_err.o: ../../include/openssl/x509v3.h ts_err.c +ts_err.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +ts_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ts_err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +ts_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +ts_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h +ts_err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +ts_err.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +ts_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +ts_err.o: ../../include/openssl/ts.h ../../include/openssl/x509.h +ts_err.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +ts_err.o: ts_err.c ts_lib.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h ts_lib.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h ts_lib.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h @@ -142,14 +147,16 @@ ts_lib.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h ts_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ts_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ts_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ts_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ts_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -ts_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -ts_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h -ts_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -ts_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -ts_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -ts_lib.o: ../../include/openssl/x509v3.h ../cryptlib.h ts.h ts_lib.c +ts_lib.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +ts_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +ts_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +ts_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +ts_lib.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h +ts_lib.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ts_lib.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +ts_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +ts_lib.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +ts_lib.o: ../cryptlib.h ts.h ts_lib.c ts_req_print.o: ../../e_os.h ../../include/openssl/asn1.h ts_req_print.o: ../../include/openssl/bio.h ../../include/openssl/bn.h ts_req_print.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h @@ -157,13 +164,15 @@ ts_req_print.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h ts_req_print.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h ts_req_print.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h ts_req_print.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -ts_req_print.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -ts_req_print.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +ts_req_print.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +ts_req_print.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ts_req_print.o: ../../include/openssl/objects.h ts_req_print.o: ../../include/openssl/opensslconf.h ts_req_print.o: ../../include/openssl/opensslv.h ts_req_print.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h ts_req_print.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -ts_req_print.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ts_req_print.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ts_req_print.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ts_req_print.o: ../../include/openssl/symhacks.h ../../include/openssl/ts.h ts_req_print.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h ts_req_print.o: ../../include/openssl/x509v3.h ../cryptlib.h ts_req_print.c @@ -174,13 +183,14 @@ ts_req_utils.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h ts_req_utils.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ts_req_utils.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ts_req_utils.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ts_req_utils.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ts_req_utils.o: ../../include/openssl/objects.h +ts_req_utils.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +ts_req_utils.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h ts_req_utils.o: ../../include/openssl/opensslconf.h ts_req_utils.o: ../../include/openssl/opensslv.h ts_req_utils.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h ts_req_utils.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -ts_req_utils.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ts_req_utils.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ts_req_utils.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ts_req_utils.o: ../../include/openssl/symhacks.h ../../include/openssl/ts.h ts_req_utils.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h ts_req_utils.o: ../../include/openssl/x509v3.h ../cryptlib.h ts_req_utils.c @@ -191,13 +201,15 @@ ts_rsp_print.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h ts_rsp_print.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h ts_rsp_print.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h ts_rsp_print.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -ts_rsp_print.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -ts_rsp_print.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +ts_rsp_print.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +ts_rsp_print.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ts_rsp_print.o: ../../include/openssl/objects.h ts_rsp_print.o: ../../include/openssl/opensslconf.h ts_rsp_print.o: ../../include/openssl/opensslv.h ts_rsp_print.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h ts_rsp_print.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -ts_rsp_print.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ts_rsp_print.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ts_rsp_print.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ts_rsp_print.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h ts_rsp_print.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h ts_rsp_print.o: ../cryptlib.h ts.h ts_rsp_print.c @@ -208,13 +220,14 @@ ts_rsp_sign.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h ts_rsp_sign.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ts_rsp_sign.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ts_rsp_sign.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ts_rsp_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ts_rsp_sign.o: ../../include/openssl/objects.h +ts_rsp_sign.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +ts_rsp_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h ts_rsp_sign.o: ../../include/openssl/opensslconf.h ts_rsp_sign.o: ../../include/openssl/opensslv.h ts_rsp_sign.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h ts_rsp_sign.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -ts_rsp_sign.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ts_rsp_sign.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ts_rsp_sign.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ts_rsp_sign.o: ../../include/openssl/symhacks.h ../../include/openssl/ts.h ts_rsp_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h ts_rsp_sign.o: ../../include/openssl/x509v3.h ../cryptlib.h ts_rsp_sign.c @@ -225,13 +238,14 @@ ts_rsp_utils.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h ts_rsp_utils.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ts_rsp_utils.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ts_rsp_utils.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ts_rsp_utils.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -ts_rsp_utils.o: ../../include/openssl/objects.h +ts_rsp_utils.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +ts_rsp_utils.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h ts_rsp_utils.o: ../../include/openssl/opensslconf.h ts_rsp_utils.o: ../../include/openssl/opensslv.h ts_rsp_utils.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h ts_rsp_utils.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -ts_rsp_utils.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ts_rsp_utils.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ts_rsp_utils.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ts_rsp_utils.o: ../../include/openssl/symhacks.h ../../include/openssl/ts.h ts_rsp_utils.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h ts_rsp_utils.o: ../../include/openssl/x509v3.h ../cryptlib.h ts_rsp_utils.c @@ -242,13 +256,15 @@ ts_rsp_verify.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h ts_rsp_verify.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ts_rsp_verify.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ts_rsp_verify.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ts_rsp_verify.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ts_rsp_verify.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +ts_rsp_verify.o: ../../include/openssl/obj_mac.h ts_rsp_verify.o: ../../include/openssl/objects.h ts_rsp_verify.o: ../../include/openssl/opensslconf.h ts_rsp_verify.o: ../../include/openssl/opensslv.h ts_rsp_verify.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h ts_rsp_verify.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -ts_rsp_verify.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ts_rsp_verify.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ts_rsp_verify.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ts_rsp_verify.o: ../../include/openssl/symhacks.h ../../include/openssl/ts.h ts_rsp_verify.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h ts_rsp_verify.o: ../../include/openssl/x509v3.h ../cryptlib.h ts_rsp_verify.c @@ -259,13 +275,15 @@ ts_verify_ctx.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h ts_verify_ctx.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h ts_verify_ctx.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h ts_verify_ctx.o: ../../include/openssl/err.h ../../include/openssl/evp.h -ts_verify_ctx.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +ts_verify_ctx.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +ts_verify_ctx.o: ../../include/openssl/obj_mac.h ts_verify_ctx.o: ../../include/openssl/objects.h ts_verify_ctx.o: ../../include/openssl/opensslconf.h ts_verify_ctx.o: ../../include/openssl/opensslv.h ts_verify_ctx.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h ts_verify_ctx.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -ts_verify_ctx.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +ts_verify_ctx.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +ts_verify_ctx.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h ts_verify_ctx.o: ../../include/openssl/symhacks.h ../../include/openssl/ts.h ts_verify_ctx.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h ts_verify_ctx.o: ../../include/openssl/x509v3.h ../cryptlib.h ts_verify_ctx.c diff --git a/crypto/x509/Makefile b/crypto/x509/Makefile index bf197a1d..0ae99c27 100644 --- a/crypto/x509/Makefile +++ b/crypto/x509/Makefile @@ -91,38 +91,43 @@ by_dir.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h by_dir.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h by_dir.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h by_dir.o: ../../include/openssl/err.h ../../include/openssl/evp.h -by_dir.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -by_dir.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -by_dir.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -by_dir.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -by_dir.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -by_dir.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -by_dir.o: ../../include/openssl/x509_vfy.h ../cryptlib.h by_dir.c +by_dir.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +by_dir.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +by_dir.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +by_dir.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +by_dir.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +by_dir.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +by_dir.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +by_dir.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +by_dir.o: ../cryptlib.h by_dir.c by_file.o: ../../e_os.h ../../include/openssl/asn1.h by_file.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h by_file.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h by_file.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h by_file.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -by_file.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -by_file.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -by_file.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -by_file.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h -by_file.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h -by_file.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -by_file.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -by_file.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -by_file.o: ../cryptlib.h by_file.c +by_file.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +by_file.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +by_file.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +by_file.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +by_file.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h +by_file.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +by_file.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +by_file.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +by_file.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +by_file.o: ../../include/openssl/x509_vfy.h ../cryptlib.h by_file.c x509_att.o: ../../e_os.h ../../include/openssl/asn1.h x509_att.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x509_att.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h x509_att.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x509_att.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x509_att.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x509_att.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x509_att.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +x509_att.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x509_att.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x509_att.o: ../../include/openssl/opensslconf.h x509_att.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509_att.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_att.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509_att.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_att.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509_att.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509_att.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h x509_att.o: ../cryptlib.h x509_att.c @@ -132,11 +137,13 @@ x509_cmp.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h x509_cmp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x509_cmp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x509_cmp.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x509_cmp.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x509_cmp.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +x509_cmp.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x509_cmp.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x509_cmp.o: ../../include/openssl/opensslconf.h x509_cmp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509_cmp.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_cmp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509_cmp.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_cmp.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509_cmp.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509_cmp.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h x509_cmp.o: ../cryptlib.h x509_cmp.c @@ -145,25 +152,27 @@ x509_d2.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x509_d2.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x509_d2.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x509_d2.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x509_d2.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x509_d2.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x509_d2.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -x509_d2.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -x509_d2.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -x509_d2.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -x509_d2.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -x509_d2.o: ../cryptlib.h x509_d2.c +x509_d2.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x509_d2.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x509_d2.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +x509_d2.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +x509_d2.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +x509_d2.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_d2.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +x509_d2.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +x509_d2.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509_d2.c x509_def.o: ../../e_os.h ../../include/openssl/asn1.h x509_def.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x509_def.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x509_def.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x509_def.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x509_def.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x509_def.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x509_def.o: ../../include/openssl/opensslconf.h +x509_def.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x509_def.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x509_def.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x509_def.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509_def.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_def.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509_def.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_def.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509_def.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509_def.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509_def.c x509_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h @@ -171,11 +180,13 @@ x509_err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h x509_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x509_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x509_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x509_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x509_err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +x509_err.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x509_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x509_err.o: ../../include/openssl/opensslconf.h x509_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509_err.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_err.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509_err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509_err.o: ../../include/openssl/x509_vfy.h x509_err.c x509_ext.o: ../../e_os.h ../../include/openssl/asn1.h @@ -184,11 +195,13 @@ x509_ext.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h x509_ext.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x509_ext.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x509_ext.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x509_ext.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x509_ext.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +x509_ext.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x509_ext.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x509_ext.o: ../../include/openssl/opensslconf.h x509_ext.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509_ext.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_ext.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509_ext.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_ext.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509_ext.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509_ext.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h x509_ext.o: ../cryptlib.h x509_ext.c @@ -198,25 +211,27 @@ x509_lu.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h x509_lu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x509_lu.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x509_lu.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x509_lu.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x509_lu.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -x509_lu.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -x509_lu.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_lu.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -x509_lu.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -x509_lu.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -x509_lu.o: ../cryptlib.h x509_lu.c +x509_lu.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x509_lu.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x509_lu.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +x509_lu.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +x509_lu.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +x509_lu.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +x509_lu.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +x509_lu.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +x509_lu.o: ../../include/openssl/x509v3.h ../cryptlib.h x509_lu.c x509_obj.o: ../../e_os.h ../../include/openssl/asn1.h x509_obj.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x509_obj.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x509_obj.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x509_obj.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x509_obj.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x509_obj.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x509_obj.o: ../../include/openssl/opensslconf.h +x509_obj.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x509_obj.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x509_obj.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x509_obj.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509_obj.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_obj.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509_obj.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_obj.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509_obj.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509_obj.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509_obj.c x509_r2x.o: ../../e_os.h ../../include/openssl/asn1.h @@ -225,11 +240,13 @@ x509_r2x.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h x509_r2x.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x509_r2x.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x509_r2x.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x509_r2x.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x509_r2x.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +x509_r2x.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x509_r2x.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x509_r2x.o: ../../include/openssl/opensslconf.h x509_r2x.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509_r2x.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_r2x.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509_r2x.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_r2x.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509_r2x.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509_r2x.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509_r2x.c x509_req.o: ../../e_os.h ../../include/openssl/asn1.h @@ -238,13 +255,14 @@ x509_req.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h x509_req.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x509_req.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x509_req.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x509_req.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x509_req.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x509_req.o: ../../include/openssl/opensslconf.h +x509_req.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x509_req.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x509_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x509_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509_req.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h x509_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_req.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509_req.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_req.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509_req.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509_req.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509_req.c x509_set.o: ../../e_os.h ../../include/openssl/asn1.h @@ -252,12 +270,13 @@ x509_set.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x509_set.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x509_set.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x509_set.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x509_set.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x509_set.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x509_set.o: ../../include/openssl/opensslconf.h +x509_set.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x509_set.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x509_set.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x509_set.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509_set.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_set.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509_set.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_set.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509_set.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509_set.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509_set.c x509_trs.o: ../../e_os.h ../../include/openssl/asn1.h @@ -266,11 +285,13 @@ x509_trs.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h x509_trs.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x509_trs.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x509_trs.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x509_trs.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x509_trs.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +x509_trs.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x509_trs.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x509_trs.o: ../../include/openssl/opensslconf.h x509_trs.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509_trs.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_trs.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509_trs.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_trs.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509_trs.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509_trs.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h x509_trs.o: ../cryptlib.h x509_trs.c @@ -279,12 +300,13 @@ x509_txt.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x509_txt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x509_txt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x509_txt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x509_txt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x509_txt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x509_txt.o: ../../include/openssl/opensslconf.h +x509_txt.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x509_txt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x509_txt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x509_txt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509_txt.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_txt.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509_txt.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_txt.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509_txt.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509_txt.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509_txt.c x509_v3.o: ../../e_os.h ../../include/openssl/asn1.h @@ -293,25 +315,28 @@ x509_v3.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h x509_v3.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x509_v3.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x509_v3.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x509_v3.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x509_v3.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -x509_v3.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -x509_v3.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_v3.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -x509_v3.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -x509_v3.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -x509_v3.o: ../cryptlib.h x509_v3.c +x509_v3.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x509_v3.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x509_v3.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +x509_v3.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +x509_v3.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +x509_v3.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +x509_v3.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +x509_v3.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +x509_v3.o: ../../include/openssl/x509v3.h ../cryptlib.h x509_v3.c x509_vfy.o: ../../e_os.h ../../include/openssl/asn1.h x509_vfy.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x509_vfy.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h x509_vfy.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x509_vfy.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x509_vfy.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x509_vfy.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x509_vfy.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +x509_vfy.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x509_vfy.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x509_vfy.o: ../../include/openssl/opensslconf.h x509_vfy.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509_vfy.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_vfy.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509_vfy.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_vfy.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509_vfy.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509_vfy.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h x509_vfy.o: ../cryptlib.h vpm_int.h x509_vfy.c @@ -321,11 +346,13 @@ x509_vpm.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h x509_vpm.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x509_vpm.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x509_vpm.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x509_vpm.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x509_vpm.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +x509_vpm.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x509_vpm.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x509_vpm.o: ../../include/openssl/opensslconf.h x509_vpm.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509_vpm.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509_vpm.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509_vpm.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509_vpm.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509_vpm.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509_vpm.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h x509_vpm.o: ../cryptlib.h vpm_int.h x509_vpm.c @@ -334,12 +361,13 @@ x509cset.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x509cset.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x509cset.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x509cset.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x509cset.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x509cset.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x509cset.o: ../../include/openssl/opensslconf.h +x509cset.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x509cset.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x509cset.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x509cset.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509cset.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509cset.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509cset.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509cset.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509cset.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509cset.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509cset.c x509name.o: ../../e_os.h ../../include/openssl/asn1.h @@ -347,12 +375,13 @@ x509name.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x509name.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x509name.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x509name.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x509name.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x509name.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x509name.o: ../../include/openssl/opensslconf.h +x509name.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x509name.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x509name.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x509name.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509name.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509name.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509name.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509name.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509name.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509name.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509name.c x509rset.o: ../../e_os.h ../../include/openssl/asn1.h @@ -360,12 +389,13 @@ x509rset.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x509rset.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x509rset.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x509rset.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x509rset.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x509rset.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x509rset.o: ../../include/openssl/opensslconf.h +x509rset.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x509rset.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x509rset.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x509rset.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509rset.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509rset.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509rset.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509rset.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509rset.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509rset.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509rset.c x509spki.o: ../../e_os.h ../../include/openssl/asn1.h @@ -373,12 +403,13 @@ x509spki.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x509spki.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x509spki.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x509spki.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x509spki.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x509spki.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x509spki.o: ../../include/openssl/opensslconf.h +x509spki.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x509spki.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x509spki.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x509spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509spki.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509spki.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509spki.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509spki.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509spki.c x509type.o: ../../e_os.h ../../include/openssl/asn1.h @@ -386,12 +417,13 @@ x509type.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h x509type.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h x509type.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h x509type.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -x509type.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -x509type.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -x509type.o: ../../include/openssl/opensslconf.h +x509type.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +x509type.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +x509type.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h x509type.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h x509type.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -x509type.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +x509type.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +x509type.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h x509type.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h x509type.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509type.c x_all.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h @@ -400,12 +432,13 @@ x_all.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h x_all.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h x_all.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h x_all.o: ../../include/openssl/err.h ../../include/openssl/evp.h -x_all.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -x_all.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h -x_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -x_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -x_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -x_all.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -x_all.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -x_all.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -x_all.o: ../cryptlib.h x_all.c +x_all.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +x_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +x_all.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h +x_all.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +x_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h +x_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +x_all.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +x_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +x_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +x_all.o: ../../include/openssl/x509v3.h ../cryptlib.h x_all.c diff --git a/crypto/x509v3/Makefile b/crypto/x509v3/Makefile index 9791b77a..b231387e 100644 --- a/crypto/x509v3/Makefile +++ b/crypto/x509v3/Makefile @@ -92,12 +92,13 @@ pcy_cache.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h pcy_cache.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h pcy_cache.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h pcy_cache.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pcy_cache.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pcy_cache.o: ../../include/openssl/objects.h +pcy_cache.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pcy_cache.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h pcy_cache.o: ../../include/openssl/opensslconf.h pcy_cache.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pcy_cache.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -pcy_cache.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +pcy_cache.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pcy_cache.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h pcy_cache.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h pcy_cache.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h pcy_cache.o: ../cryptlib.h pcy_cache.c pcy_int.h @@ -107,11 +108,13 @@ pcy_data.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h pcy_data.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h pcy_data.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h pcy_data.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pcy_data.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pcy_data.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +pcy_data.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pcy_data.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +pcy_data.o: ../../include/openssl/opensslconf.h pcy_data.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pcy_data.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -pcy_data.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +pcy_data.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pcy_data.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h pcy_data.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h pcy_data.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h pcy_data.o: ../cryptlib.h pcy_data.c pcy_int.h @@ -121,38 +124,42 @@ pcy_lib.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h pcy_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h pcy_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h pcy_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pcy_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pcy_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -pcy_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -pcy_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -pcy_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -pcy_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -pcy_lib.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -pcy_lib.o: ../cryptlib.h pcy_int.h pcy_lib.c +pcy_lib.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pcy_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +pcy_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +pcy_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +pcy_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +pcy_lib.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +pcy_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +pcy_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +pcy_lib.o: ../../include/openssl/x509v3.h ../cryptlib.h pcy_int.h pcy_lib.c pcy_map.o: ../../e_os.h ../../include/openssl/asn1.h pcy_map.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h pcy_map.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h pcy_map.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h pcy_map.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h pcy_map.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pcy_map.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pcy_map.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -pcy_map.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -pcy_map.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -pcy_map.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -pcy_map.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -pcy_map.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -pcy_map.o: ../cryptlib.h pcy_int.h pcy_map.c +pcy_map.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pcy_map.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +pcy_map.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +pcy_map.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +pcy_map.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +pcy_map.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +pcy_map.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +pcy_map.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +pcy_map.o: ../../include/openssl/x509v3.h ../cryptlib.h pcy_int.h pcy_map.c pcy_node.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h pcy_node.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h pcy_node.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h pcy_node.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h -pcy_node.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h +pcy_node.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h +pcy_node.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h pcy_node.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h pcy_node.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h pcy_node.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pcy_node.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -pcy_node.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +pcy_node.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pcy_node.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h pcy_node.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h pcy_node.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h pcy_node.o: pcy_int.h pcy_node.c @@ -162,11 +169,13 @@ pcy_tree.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h pcy_tree.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h pcy_tree.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h pcy_tree.o: ../../include/openssl/err.h ../../include/openssl/evp.h -pcy_tree.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -pcy_tree.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +pcy_tree.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +pcy_tree.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +pcy_tree.o: ../../include/openssl/opensslconf.h pcy_tree.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h pcy_tree.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -pcy_tree.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +pcy_tree.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +pcy_tree.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h pcy_tree.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h pcy_tree.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h pcy_tree.o: ../cryptlib.h pcy_int.h pcy_tree.c @@ -176,40 +185,45 @@ v3_addr.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_addr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_addr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_addr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_addr.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_addr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_addr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3_addr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3_addr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3_addr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3_addr.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3_addr.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_addr.c +v3_addr.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_addr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_addr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3_addr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3_addr.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3_addr.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_addr.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3_addr.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3_addr.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3_addr.o: ../cryptlib.h v3_addr.c v3_akey.o: ../../e_os.h ../../include/openssl/asn1.h v3_akey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h v3_akey.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_akey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_akey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_akey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_akey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_akey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_akey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3_akey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3_akey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3_akey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3_akey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3_akey.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_akey.c +v3_akey.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_akey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_akey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3_akey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3_akey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3_akey.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_akey.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3_akey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3_akey.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3_akey.o: ../cryptlib.h v3_akey.c v3_akeya.o: ../../e_os.h ../../include/openssl/asn1.h v3_akeya.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h v3_akeya.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_akeya.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_akeya.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_akeya.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_akeya.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_akeya.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_akeya.o: ../../include/openssl/opensslconf.h +v3_akeya.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_akeya.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_akeya.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h v3_akeya.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h v3_akeya.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_akeya.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +v3_akeya.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_akeya.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h v3_akeya.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h v3_akeya.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h v3_akeya.o: ../cryptlib.h v3_akeya.c @@ -218,14 +232,16 @@ v3_alt.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_alt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_alt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_alt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_alt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_alt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_alt.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3_alt.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3_alt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3_alt.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3_alt.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3_alt.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_alt.c +v3_alt.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_alt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_alt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3_alt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3_alt.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3_alt.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_alt.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3_alt.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3_alt.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3_alt.o: ../cryptlib.h v3_alt.c v3_asid.o: ../../e_os.h ../../include/openssl/asn1.h v3_asid.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h v3_asid.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h @@ -233,26 +249,28 @@ v3_asid.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h v3_asid.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h v3_asid.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h v3_asid.o: ../../include/openssl/err.h ../../include/openssl/evp.h -v3_asid.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -v3_asid.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -v3_asid.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -v3_asid.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_asid.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -v3_asid.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -v3_asid.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -v3_asid.o: ../cryptlib.h v3_asid.c +v3_asid.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +v3_asid.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +v3_asid.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +v3_asid.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +v3_asid.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +v3_asid.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +v3_asid.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +v3_asid.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +v3_asid.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_asid.c v3_bcons.o: ../../e_os.h ../../include/openssl/asn1.h v3_bcons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h v3_bcons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_bcons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_bcons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_bcons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_bcons.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_bcons.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_bcons.o: ../../include/openssl/opensslconf.h +v3_bcons.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_bcons.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_bcons.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h v3_bcons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h v3_bcons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_bcons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +v3_bcons.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_bcons.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h v3_bcons.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h v3_bcons.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h v3_bcons.o: ../cryptlib.h v3_bcons.c @@ -262,11 +280,13 @@ v3_bitst.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h v3_bitst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h v3_bitst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h v3_bitst.o: ../../include/openssl/err.h ../../include/openssl/evp.h -v3_bitst.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -v3_bitst.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3_bitst.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +v3_bitst.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +v3_bitst.o: ../../include/openssl/opensslconf.h v3_bitst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h v3_bitst.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_bitst.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +v3_bitst.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_bitst.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h v3_bitst.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h v3_bitst.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h v3_bitst.o: ../cryptlib.h v3_bitst.c @@ -276,26 +296,28 @@ v3_conf.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h v3_conf.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h v3_conf.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h v3_conf.o: ../../include/openssl/err.h ../../include/openssl/evp.h -v3_conf.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -v3_conf.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -v3_conf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -v3_conf.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_conf.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -v3_conf.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -v3_conf.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -v3_conf.o: ../cryptlib.h v3_conf.c +v3_conf.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +v3_conf.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +v3_conf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +v3_conf.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +v3_conf.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +v3_conf.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +v3_conf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +v3_conf.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +v3_conf.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_conf.c v3_cpols.o: ../../e_os.h ../../include/openssl/asn1.h v3_cpols.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h v3_cpols.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_cpols.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_cpols.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_cpols.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_cpols.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_cpols.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_cpols.o: ../../include/openssl/opensslconf.h +v3_cpols.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_cpols.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_cpols.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h v3_cpols.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h v3_cpols.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_cpols.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +v3_cpols.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_cpols.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h v3_cpols.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h v3_cpols.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h v3_cpols.o: ../cryptlib.h pcy_int.h v3_cpols.c @@ -305,40 +327,44 @@ v3_crld.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_crld.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_crld.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_crld.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_crld.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_crld.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_crld.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3_crld.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3_crld.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3_crld.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3_crld.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3_crld.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_crld.c +v3_crld.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_crld.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_crld.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3_crld.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3_crld.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3_crld.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_crld.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3_crld.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3_crld.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3_crld.o: ../cryptlib.h v3_crld.c v3_enum.o: ../../e_os.h ../../include/openssl/asn1.h v3_enum.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h v3_enum.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h v3_enum.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h v3_enum.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h v3_enum.o: ../../include/openssl/err.h ../../include/openssl/evp.h -v3_enum.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -v3_enum.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -v3_enum.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -v3_enum.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_enum.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -v3_enum.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -v3_enum.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -v3_enum.o: ../cryptlib.h v3_enum.c +v3_enum.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +v3_enum.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +v3_enum.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +v3_enum.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +v3_enum.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +v3_enum.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +v3_enum.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +v3_enum.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +v3_enum.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_enum.c v3_extku.o: ../../e_os.h ../../include/openssl/asn1.h v3_extku.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h v3_extku.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_extku.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_extku.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_extku.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_extku.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_extku.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_extku.o: ../../include/openssl/opensslconf.h +v3_extku.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_extku.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_extku.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h v3_extku.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h v3_extku.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_extku.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +v3_extku.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_extku.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h v3_extku.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h v3_extku.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h v3_extku.o: ../cryptlib.h v3_extku.c @@ -348,79 +374,90 @@ v3_genn.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_genn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_genn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_genn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_genn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_genn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_genn.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3_genn.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3_genn.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3_genn.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3_genn.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3_genn.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_genn.c +v3_genn.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_genn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_genn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3_genn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3_genn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3_genn.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_genn.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3_genn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3_genn.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3_genn.o: ../cryptlib.h v3_genn.c v3_ia5.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h v3_ia5.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_ia5.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_ia5.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_ia5.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_ia5.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_ia5.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_ia5.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3_ia5.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3_ia5.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3_ia5.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3_ia5.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3_ia5.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_ia5.c +v3_ia5.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_ia5.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_ia5.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3_ia5.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3_ia5.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3_ia5.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_ia5.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3_ia5.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3_ia5.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3_ia5.o: ../cryptlib.h v3_ia5.c v3_info.o: ../../e_os.h ../../include/openssl/asn1.h v3_info.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h v3_info.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_info.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_info.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_info.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_info.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_info.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_info.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3_info.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3_info.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3_info.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3_info.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3_info.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_info.c +v3_info.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_info.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_info.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3_info.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_info.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3_info.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3_info.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3_info.o: ../cryptlib.h v3_info.c v3_int.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h v3_int.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_int.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_int.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_int.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_int.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_int.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_int.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3_int.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3_int.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3_int.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3_int.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3_int.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_int.c +v3_int.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_int.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_int.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3_int.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3_int.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3_int.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_int.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3_int.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3_int.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3_int.o: ../cryptlib.h v3_int.c v3_lib.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h v3_lib.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3_lib.o: ../../include/openssl/x509v3.h ../cryptlib.h ext_dat.h v3_lib.c +v3_lib.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3_lib.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_lib.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3_lib.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3_lib.o: ../cryptlib.h ext_dat.h v3_lib.c v3_ncons.o: ../../e_os.h ../../include/openssl/asn1.h v3_ncons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h v3_ncons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_ncons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_ncons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_ncons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_ncons.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_ncons.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_ncons.o: ../../include/openssl/opensslconf.h +v3_ncons.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_ncons.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_ncons.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h v3_ncons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h v3_ncons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_ncons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +v3_ncons.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_ncons.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h v3_ncons.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h v3_ncons.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h v3_ncons.o: ../cryptlib.h v3_ncons.c @@ -430,37 +467,43 @@ v3_ocsp.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h v3_ocsp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h v3_ocsp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h v3_ocsp.o: ../../include/openssl/err.h ../../include/openssl/evp.h -v3_ocsp.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -v3_ocsp.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h -v3_ocsp.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3_ocsp.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3_ocsp.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3_ocsp.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3_ocsp.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3_ocsp.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_ocsp.c +v3_ocsp.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +v3_ocsp.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +v3_ocsp.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h +v3_ocsp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3_ocsp.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3_ocsp.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_ocsp.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3_ocsp.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3_ocsp.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3_ocsp.o: ../cryptlib.h v3_ocsp.c v3_pci.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h v3_pci.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_pci.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_pci.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_pci.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_pci.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_pci.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_pci.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3_pci.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3_pci.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3_pci.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3_pci.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3_pci.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_pci.c +v3_pci.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_pci.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_pci.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3_pci.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3_pci.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3_pci.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_pci.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3_pci.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3_pci.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3_pci.o: ../cryptlib.h v3_pci.c v3_pcia.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h v3_pcia.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h v3_pcia.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h v3_pcia.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h v3_pcia.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h -v3_pcia.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +v3_pcia.o: ../../include/openssl/err.h ../../include/openssl/evp.h +v3_pcia.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h v3_pcia.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h v3_pcia.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h v3_pcia.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h v3_pcia.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +v3_pcia.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h v3_pcia.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h v3_pcia.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h v3_pcia.o: ../../include/openssl/x509v3.h v3_pcia.c @@ -470,12 +513,13 @@ v3_pcons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_pcons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_pcons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_pcons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_pcons.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_pcons.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_pcons.o: ../../include/openssl/opensslconf.h +v3_pcons.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_pcons.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_pcons.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h v3_pcons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h v3_pcons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_pcons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +v3_pcons.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_pcons.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h v3_pcons.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h v3_pcons.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h v3_pcons.o: ../cryptlib.h v3_pcons.c @@ -485,26 +529,29 @@ v3_pku.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_pku.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_pku.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_pku.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_pku.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_pku.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_pku.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3_pku.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3_pku.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3_pku.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3_pku.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3_pku.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_pku.c +v3_pku.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_pku.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_pku.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3_pku.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3_pku.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3_pku.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_pku.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3_pku.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3_pku.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3_pku.o: ../cryptlib.h v3_pku.c v3_pmaps.o: ../../e_os.h ../../include/openssl/asn1.h v3_pmaps.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h v3_pmaps.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_pmaps.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_pmaps.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_pmaps.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_pmaps.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_pmaps.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_pmaps.o: ../../include/openssl/opensslconf.h +v3_pmaps.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_pmaps.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_pmaps.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h v3_pmaps.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h v3_pmaps.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_pmaps.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +v3_pmaps.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_pmaps.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h v3_pmaps.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h v3_pmaps.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h v3_pmaps.o: ../cryptlib.h v3_pmaps.c @@ -513,68 +560,74 @@ v3_prn.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_prn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_prn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_prn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_prn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_prn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_prn.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3_prn.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3_prn.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3_prn.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3_prn.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3_prn.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_prn.c +v3_prn.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_prn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_prn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3_prn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3_prn.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_prn.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3_prn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3_prn.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3_prn.o: ../cryptlib.h v3_prn.c v3_purp.o: ../../e_os.h ../../include/openssl/asn1.h v3_purp.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h v3_purp.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h v3_purp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h v3_purp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h v3_purp.o: ../../include/openssl/err.h ../../include/openssl/evp.h -v3_purp.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -v3_purp.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -v3_purp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -v3_purp.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_purp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -v3_purp.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -v3_purp.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -v3_purp.o: ../cryptlib.h v3_purp.c +v3_purp.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +v3_purp.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +v3_purp.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +v3_purp.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +v3_purp.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +v3_purp.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +v3_purp.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +v3_purp.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +v3_purp.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_purp.c v3_scts.o: ../../e_os.h ../../include/openssl/asn1.h v3_scts.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h v3_scts.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h v3_scts.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h v3_scts.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h v3_scts.o: ../../include/openssl/err.h ../../include/openssl/evp.h -v3_scts.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -v3_scts.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -v3_scts.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -v3_scts.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_scts.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -v3_scts.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -v3_scts.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -v3_scts.o: ../cryptlib.h v3_scts.c +v3_scts.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +v3_scts.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +v3_scts.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +v3_scts.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +v3_scts.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +v3_scts.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +v3_scts.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +v3_scts.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +v3_scts.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_scts.c v3_skey.o: ../../e_os.h ../../include/openssl/asn1.h v3_skey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h v3_skey.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h v3_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h v3_skey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h v3_skey.o: ../../include/openssl/err.h ../../include/openssl/evp.h -v3_skey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -v3_skey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -v3_skey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -v3_skey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_skey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -v3_skey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -v3_skey.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -v3_skey.o: ../cryptlib.h v3_skey.c +v3_skey.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +v3_skey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +v3_skey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +v3_skey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +v3_skey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +v3_skey.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +v3_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +v3_skey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +v3_skey.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_skey.c v3_sxnet.o: ../../e_os.h ../../include/openssl/asn1.h v3_sxnet.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h v3_sxnet.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3_sxnet.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3_sxnet.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3_sxnet.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3_sxnet.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3_sxnet.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3_sxnet.o: ../../include/openssl/opensslconf.h +v3_sxnet.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3_sxnet.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3_sxnet.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h v3_sxnet.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h v3_sxnet.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_sxnet.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +v3_sxnet.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3_sxnet.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h v3_sxnet.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h v3_sxnet.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h v3_sxnet.o: ../cryptlib.h v3_sxnet.c @@ -584,24 +637,27 @@ v3_utl.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h v3_utl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h v3_utl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h v3_utl.o: ../../include/openssl/err.h ../../include/openssl/evp.h -v3_utl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -v3_utl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h -v3_utl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -v3_utl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -v3_utl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h -v3_utl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h -v3_utl.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h -v3_utl.o: ../cryptlib.h v3_utl.c +v3_utl.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +v3_utl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +v3_utl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +v3_utl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h +v3_utl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +v3_utl.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h +v3_utl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +v3_utl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h +v3_utl.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_utl.c v3err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h v3err.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h v3err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h v3err.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h v3err.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h -v3err.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -v3err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h -v3err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h -v3err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h -v3err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -v3err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -v3err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h -v3err.o: ../../include/openssl/x509v3.h v3err.c +v3err.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +v3err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +v3err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +v3err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h +v3err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h +v3err.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +v3err.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h +v3err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h +v3err.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h +v3err.o: v3err.c diff --git a/crypto/zuc/Makefile b/crypto/zuc/Makefile index bd3efd0c..bcd40b89 100644 --- a/crypto/zuc/Makefile +++ b/crypto/zuc/Makefile @@ -18,7 +18,7 @@ ASFLAGS= $(INCLUDES) $(ASFLAG) AFLAGS= $(ASFLAGS) GENERAL=Makefile -TEST= +TEST=zuctest.c APPS= LIB=$(TOP)/libcrypto.a @@ -81,14 +81,4 @@ clean: # DO NOT DELETE THIS LINE -- make depend depends on it. - - - -zuc.o: ../../e_os.h ../../include/openssl/bio.h -zuc.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h -zuc.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h -zuc.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h -zuc.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h -zuc.o: ../../include/openssl/rc4.h ../../include/openssl/safestack.h -zuc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -zuc.o: ../cryptlib.h zuc.c zuc.h +zuc.o: ../../include/openssl/modes.h ../modes/modes_lcl.h zuc.c zuc.h diff --git a/crypto/zuc/zuctest.c b/crypto/zuc/zuctest.c new file mode 100755 index 00000000..b28b04f6 --- /dev/null +++ b/crypto/zuc/zuctest.c @@ -0,0 +1,3 @@ + + + diff --git a/demos/ectool.c b/demos/ectool.c new file mode 100644 index 00000000..504f7375 --- /dev/null +++ b/demos/ectool.c @@ -0,0 +1,261 @@ +/* + * ecc - elliptic curve cryptography toolkit + * a command line tool perform basic ecc cryptography + * include ecpoint add, double, scalar multiply, invert + * ecdsa sign and verify + * ec -sign -key a.file -pass 123456 + * ec -verify -key a.file + */ + + + + + +#include +#include +#include + +#include +#include +#include +#include +#include + +enum commands { + ECC_PRINT = 1, + ECC_CHECK_POINT, + ECC_RAND_SKEY, + ECC_RAND_KEYPAIR, + ECC_ADD, + ECC_DOUBLE, + ECC_MUL, + ECC_MUL_G, + ECC_INVERT, + ECC_SIGN, + ECC_VERIFY, +}; + +int main(int argc, const char *argv[]) +{ + int r; + int ok = 0; + char *prog = "ecc"; + + + // libpopt var + poptContext popt_ctx; + const char **rest; + int command = 0; + char *curve_name = "secp192k1"; + int point_compressed = 0; + point_conversion_form_t point_form; + + struct poptOption options[] = { + {"curve-name", 'c', POPT_ARG_STRING, &curve_name, 0, "elliptic curve name", "NAME"}, + {"point-compressed", 'z', POPT_ARG_NONE, &point_compressed, 0, "point format, compress or uncompress", NULL}, + {"print-curve", 'p', POPT_ARG_VAL, &command, ECC_PRINT, "print elliptic curve parameters", NULL}, + {"random-private-key", 0, POPT_ARG_VAL, &command, ECC_RAND_SKEY, "random generate a private key\n", NULL}, + {"random-keypair", 0, POPT_ARG_VAL, &command, ECC_RAND_KEYPAIR, "generate a random key pair\n", NULL}, + {"check-point", 'e', POPT_ARG_VAL, &command, ECC_CHECK_POINT, "check if point is valid\n", NULL}, + {"point-add", 'a', POPT_ARG_VAL, &command, ECC_ADD, "elliptic curve point addition", NULL}, + {"point-double", 'b', POPT_ARG_VAL, &command, ECC_DOUBLE, "elliptic curve point double", NULL}, + {"point-mul", 'x', POPT_ARG_VAL, &command, ECC_MUL, "k*G", NULL}, + {"point-mul-generator", 'X', POPT_ARG_VAL, &command, ECC_MUL_G, "elliptic curve point scalar multiply", NULL}, + {"point-invert", 'i', POPT_ARG_VAL, &command, ECC_INVERT, "elliptic curve point inverse", NULL}, + {"ecdsa-sign", 's', POPT_ARG_VAL, &command, ECC_SIGN, "ecdsa sign", NULL}, + {"ecdsa-verify", 'v', POPT_ARG_VAL, &command, ECC_VERIFY, "ecdsa verify", NULL}, + POPT_AUTOHELP + POPT_TABLEEND + }; + + // openssl var + EC_GROUP *ec_group = NULL; + EC_POINT *P = NULL; + EC_POINT *Q = NULL; + EC_POINT *R = NULL; + BIGNUM *k = BN_new(); + BN_CTX *bn_ctx = BN_CTX_new(); + + + // argument parsing + popt_ctx = poptGetContext(argv[0], argc, argv, options, 0); + if ((r = poptGetNextOpt(popt_ctx)) < -1) { + fprintf(stderr, "%s: bad argument %s: %s\n", argv[0], + poptBadOption(popt_ctx, POPT_BADOPTION_NOALIAS), + poptStrerror(r)); + goto exit; + } + rest = poptGetArgs(popt_ctx); + + + // check arguments + ec_group = EC_GROUP_new_by_curve_name(OBJ_txt2nid(curve_name)); + if (ec_group == NULL) { + fprintf(stderr, "%s: unknown curve name\n", prog); + goto exit; + } + + P = EC_POINT_new(ec_group); + Q = EC_POINT_new(ec_group); + R = EC_POINT_new(ec_group); + + point_form = point_compressed ? POINT_CONVERSION_COMPRESSED : POINT_CONVERSION_UNCOMPRESSED; + + switch (command) { + case ECC_PRINT: + { + BIGNUM *p = BN_new(); + BIGNUM *a = BN_new(); + BIGNUM *b = BN_new(); + char *generator; + BIGNUM *order = BN_new(); + BIGNUM *cofactor = BN_new(); + + EC_GROUP_get_curve_GFp(ec_group, p, a, b, bn_ctx); + generator = EC_POINT_point2hex(ec_group, EC_GROUP_get0_generator(ec_group), point_form, bn_ctx); + EC_GROUP_get_order(ec_group, order, bn_ctx); + EC_GROUP_get_cofactor(ec_group, cofactor, bn_ctx); + + fprintf(stdout, "Name : %s\n", OBJ_nid2sn(EC_GROUP_get_curve_name(ec_group))); + fprintf(stdout, "FieldType : %s\n", "PrimeField"); + fprintf(stdout, "Prime : %s\n", BN_bn2hex(p)); + fprintf(stdout, "A : %s\n", BN_bn2hex(a)); + fprintf(stdout, "B : %s\n", BN_bn2hex(b)); + fprintf(stdout, "Generator : %s\n", generator); + fprintf(stdout, "Order : %s\n", BN_bn2hex(order)); + fprintf(stdout, "Cofactor : %s\n", BN_bn2hex(cofactor)); + + BN_free(p); + BN_free(a); + BN_free(b); + BN_free(order); + BN_free(cofactor); + + break; + } + case ECC_CHECK_POINT: + { + if (!rest) { + fprintf(stderr, "%s: short of point\n", prog); + goto exit; + } + if (!rest[0]) { + fprintf(stderr, "%s: short of point\n", prog); + goto exit; + } + if (EC_POINT_hex2point(ec_group, rest[0], P, bn_ctx)) + fprintf(stdout, "ture\n"); + else + fprintf(stdout, "false\n"); + break; + } + case ECC_RAND_SKEY: + { + EC_KEY *ec_key = EC_KEY_new(); + EC_KEY_set_group(ec_key, ec_group); + EC_KEY_generate_key(ec_key); + fprintf(stdout, "%s\n", BN_bn2hex(EC_KEY_get0_private_key(ec_key))); + EC_KEY_free(ec_key); + break; + } + case ECC_RAND_KEYPAIR: + { + EC_KEY *ec_key = EC_KEY_new(); + EC_KEY_set_group(ec_key, ec_group); + EC_KEY_generate_key(ec_key); + fprintf(stdout, "%s\n", BN_bn2hex(EC_KEY_get0_private_key(ec_key))); + fprintf(stdout, "%s\n", EC_POINT_point2hex(ec_group, EC_KEY_get0_public_key(ec_key), point_form, bn_ctx)); + EC_KEY_free(ec_key); + break; + } + case ECC_ADD: + { + if (!rest) { + fprintf(stderr, "%s: short of point\n", prog); + goto exit; + } + if (!rest[0] || !rest[1]) { + fprintf(stderr, "%s: short of point\n", prog); + goto exit; + } + if (!EC_POINT_hex2point(ec_group, rest[1], P, bn_ctx)) { + fprintf(stderr, "%s: first point invalid\n", prog); + goto exit; + } + if (!EC_POINT_hex2point(ec_group, rest[1], Q, bn_ctx)) { + fprintf(stderr, "%s: second point invalid\n", prog); + goto exit; + } + EC_POINT_add(ec_group, R, P, Q, bn_ctx); + fprintf(stdout, "%s\n", EC_POINT_point2hex(ec_group, R, point_form, bn_ctx)); + break; + } + case ECC_DOUBLE: + { + EC_POINT_dbl(ec_group, R, P, bn_ctx); + fprintf(stdout, "%s\n", EC_POINT_point2hex(ec_group, R, point_form, bn_ctx)); + break; + } + case ECC_MUL: + { + BIGNUM *order = NULL; + + if (!BN_hex2bn(&k, rest[0])) { + fprintf(stderr, "%s: integer invalid\n", prog); + goto exit; + } + + order = BN_new(); + EC_GROUP_get_order(ec_group, order, bn_ctx); + if (BN_cmp(k, order) >= 0) { + fprintf(stderr, "%s: integer value invalid\n", prog); + BN_free(order); + goto exit; + } + BN_free(order); + + if (!EC_POINT_hex2point(ec_group, rest[1], P, bn_ctx)) { + fprintf(stderr, "%s: point invalid\n", prog); + goto exit; + } + + EC_POINT_mul(ec_group, R, k, P, NULL, bn_ctx); + fprintf(stdout, "%s\n", EC_POINT_point2hex(ec_group, R, point_form, bn_ctx)); + + break; + } + case ECC_MUL_G: + { + BIGNUM *order = NULL; + if (!BN_hex2bn(&k, rest[0])) { + fprintf(stderr, "%s: integer format invalid\n", prog); + goto exit; + } + + order = BN_new(); + EC_GROUP_get_order(ec_group, order, bn_ctx); + if (BN_cmp(k, order) >= 0) { + fprintf(stderr, "%s: integer value invalid\n", prog); + BN_free(order); + goto exit; + } + BN_free(order); + + EC_POINT_mul(ec_group, R, k, EC_GROUP_get0_generator(ec_group), NULL, bn_ctx); + fprintf(stdout, "%s\n", EC_POINT_point2hex(ec_group, R, point_form, bn_ctx)); + break; + } + default: + fprintf(stderr, "%s: command is required\n", prog); + break; + } + ok = 1; + +exit: + if (ec_group) EC_GROUP_free(ec_group); + if (P) EC_POINT_free(P); + if (k) BN_free(k); + if (bn_ctx) BN_CTX_free(bn_ctx); + + return ok ? 0 : -1; +} diff --git a/doc/apps/openssl.pod b/doc/apps/openssl.pod index 64a160c2..3586c0aa 100644 --- a/doc/apps/openssl.pod +++ b/doc/apps/openssl.pod @@ -3,16 +3,16 @@ =head1 NAME -openssl - OpenSSL command line tool +gmssl - GmSSL command line tool =head1 SYNOPSIS -B +B I [ I ] [ I ] -B [ B | B | B | B | B | B] +B [ B | B | B | B | B | B] B BI [ I ] @@ -20,10 +20,11 @@ B BI [ I ] OpenSSL is a cryptography toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) network protocols and related -cryptography standards required by them. +cryptography standards required by them. GmSSL is a fork of OpenSSL with +Chinese cryptography algorithms and standards. -The B program is a command line tool for using the various -cryptography functions of OpenSSL's B library from the shell. +The B program is a command line tool for using the various +cryptography functions of GmSSL's B library from the shell. It can be used for o Creation and management of private keys, public keys and parameters @@ -37,14 +38,14 @@ It can be used for =head1 COMMAND SUMMARY -The B program provides a rich variety of commands (I in the +The B program provides a rich variety of commands (I in the SYNOPSIS above), each of which often has a wealth of options and arguments (I and I in the SYNOPSIS). The pseudo-commands B, B, and B output a list (one entry per line) of the names of all standard commands, message digest commands, or cipher commands, -respectively, that are available in the present B utility. +respectively, that are available in the present B utility. The pseudo-commands B and B list all cipher and message digest names, one entry per line. Aliases are listed as: @@ -61,7 +62,7 @@ and prints I. In both cases, the output goes to B and nothing is printed to B. 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 B program. (BI is +availability of ciphers in the B program. (BI is not able to detect pseudo-commands such as B, BI<...>B<-commands>, or BI itself.) diff --git a/engines/Makefile b/engines/Makefile index 2058ff40..2d4a6a09 100644 --- a/engines/Makefile +++ b/engines/Makefile @@ -26,7 +26,7 @@ TEST= APPS= LIB=$(TOP)/libcrypto.a -LIBNAMES= 4758cca aep atalla cswift gmp chil nuron sureware ubsec padlock capi +LIBNAMES= 4758cca aep atalla cswift gmp chil nuron sureware ubsec padlock skf capi LIBSRC= e_4758cca.c \ e_aep.c \ @@ -53,7 +53,7 @@ LIBOBJ= e_4758cca.o \ SRC= $(LIBSRC) -EXHEADER= +EXHEADER= HEADER= e_4758cca_err.c e_4758cca_err.h \ e_aep_err.c e_aep_err.h \ e_atalla_err.c e_atalla_err.h \ @@ -173,16 +173,17 @@ e_4758cca.o: ../include/openssl/crypto.h ../include/openssl/dso.h e_4758cca.o: ../include/openssl/e_os2.h ../include/openssl/ec.h e_4758cca.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h e_4758cca.o: ../include/openssl/engine.h ../include/openssl/err.h -e_4758cca.o: ../include/openssl/evp.h ../include/openssl/lhash.h -e_4758cca.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -e_4758cca.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -e_4758cca.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h -e_4758cca.o: ../include/openssl/rand.h ../include/openssl/rsa.h -e_4758cca.o: ../include/openssl/safestack.h ../include/openssl/sha.h -e_4758cca.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -e_4758cca.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -e_4758cca.o: e_4758cca.c e_4758cca_err.c e_4758cca_err.h -e_4758cca.o: vendor_defns/hw_4758_cca.h +e_4758cca.o: ../include/openssl/evp.h ../include/openssl/kdf.h +e_4758cca.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +e_4758cca.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +e_4758cca.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +e_4758cca.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h +e_4758cca.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +e_4758cca.o: ../include/openssl/sha.h ../include/openssl/sm2.h +e_4758cca.o: ../include/openssl/sm3.h ../include/openssl/stack.h +e_4758cca.o: ../include/openssl/symhacks.h ../include/openssl/x509.h +e_4758cca.o: ../include/openssl/x509_vfy.h e_4758cca.c e_4758cca_err.c +e_4758cca.o: e_4758cca_err.h vendor_defns/hw_4758_cca.h e_aep.o: ../include/openssl/asn1.h ../include/openssl/bio.h e_aep.o: ../include/openssl/bn.h ../include/openssl/buffer.h e_aep.o: ../include/openssl/crypto.h ../include/openssl/dh.h @@ -190,15 +191,16 @@ e_aep.o: ../include/openssl/dsa.h ../include/openssl/dso.h e_aep.o: ../include/openssl/e_os2.h ../include/openssl/ec.h e_aep.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h e_aep.o: ../include/openssl/engine.h ../include/openssl/err.h -e_aep.o: ../include/openssl/evp.h ../include/openssl/lhash.h -e_aep.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -e_aep.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -e_aep.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h -e_aep.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -e_aep.o: ../include/openssl/sha.h ../include/openssl/stack.h -e_aep.o: ../include/openssl/symhacks.h ../include/openssl/x509.h -e_aep.o: ../include/openssl/x509_vfy.h e_aep.c e_aep_err.c e_aep_err.h -e_aep.o: vendor_defns/aep.h +e_aep.o: ../include/openssl/evp.h ../include/openssl/kdf.h +e_aep.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +e_aep.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +e_aep.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +e_aep.o: ../include/openssl/pkcs7.h ../include/openssl/rsa.h +e_aep.o: ../include/openssl/safestack.h ../include/openssl/sha.h +e_aep.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +e_aep.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +e_aep.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h e_aep.c +e_aep.o: e_aep_err.c e_aep_err.h vendor_defns/aep.h e_atalla.o: ../include/openssl/asn1.h ../include/openssl/bio.h e_atalla.o: ../include/openssl/bn.h ../include/openssl/buffer.h e_atalla.o: ../include/openssl/crypto.h ../include/openssl/dh.h @@ -206,25 +208,28 @@ e_atalla.o: ../include/openssl/dsa.h ../include/openssl/dso.h e_atalla.o: ../include/openssl/e_os2.h ../include/openssl/ec.h e_atalla.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h e_atalla.o: ../include/openssl/engine.h ../include/openssl/err.h -e_atalla.o: ../include/openssl/evp.h ../include/openssl/lhash.h -e_atalla.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -e_atalla.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -e_atalla.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h -e_atalla.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -e_atalla.o: ../include/openssl/sha.h ../include/openssl/stack.h -e_atalla.o: ../include/openssl/symhacks.h ../include/openssl/x509.h -e_atalla.o: ../include/openssl/x509_vfy.h e_atalla.c e_atalla_err.c -e_atalla.o: e_atalla_err.h vendor_defns/atalla.h +e_atalla.o: ../include/openssl/evp.h ../include/openssl/kdf.h +e_atalla.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +e_atalla.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +e_atalla.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +e_atalla.o: ../include/openssl/pkcs7.h ../include/openssl/rsa.h +e_atalla.o: ../include/openssl/safestack.h ../include/openssl/sha.h +e_atalla.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +e_atalla.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +e_atalla.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h e_atalla.c +e_atalla.o: e_atalla_err.c e_atalla_err.h vendor_defns/atalla.h e_capi.o: ../include/openssl/asn1.h ../include/openssl/bio.h e_capi.o: ../include/openssl/buffer.h ../include/openssl/crypto.h e_capi.o: ../include/openssl/e_os2.h ../include/openssl/ec.h e_capi.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h -e_capi.o: ../include/openssl/engine.h ../include/openssl/evp.h +e_capi.o: ../include/openssl/engine.h ../include/openssl/err.h +e_capi.o: ../include/openssl/evp.h ../include/openssl/kdf.h e_capi.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h e_capi.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h e_capi.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h e_capi.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h -e_capi.o: ../include/openssl/sha.h ../include/openssl/stack.h +e_capi.o: ../include/openssl/sha.h ../include/openssl/sm2.h +e_capi.o: ../include/openssl/sm3.h ../include/openssl/stack.h e_capi.o: ../include/openssl/symhacks.h ../include/openssl/x509.h e_capi.o: ../include/openssl/x509_vfy.h e_capi.c e_chil.o: ../include/openssl/asn1.h ../include/openssl/bio.h @@ -234,16 +239,18 @@ e_chil.o: ../include/openssl/dso.h ../include/openssl/e_os2.h e_chil.o: ../include/openssl/ec.h ../include/openssl/ecdh.h e_chil.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h e_chil.o: ../include/openssl/err.h ../include/openssl/evp.h -e_chil.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -e_chil.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h -e_chil.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -e_chil.o: ../include/openssl/pem.h ../include/openssl/pem2.h -e_chil.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h -e_chil.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -e_chil.o: ../include/openssl/sha.h ../include/openssl/stack.h -e_chil.o: ../include/openssl/symhacks.h ../include/openssl/ui.h -e_chil.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h e_chil.c -e_chil.o: e_chil_err.c e_chil_err.h vendor_defns/hwcryptohook.h +e_chil.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +e_chil.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +e_chil.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +e_chil.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +e_chil.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +e_chil.o: ../include/openssl/rand.h ../include/openssl/rsa.h +e_chil.o: ../include/openssl/safestack.h ../include/openssl/sha.h +e_chil.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +e_chil.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +e_chil.o: ../include/openssl/ui.h ../include/openssl/x509.h +e_chil.o: ../include/openssl/x509_vfy.h e_chil.c e_chil_err.c e_chil_err.h +e_chil.o: vendor_defns/hwcryptohook.h e_cswift.o: ../include/openssl/asn1.h ../include/openssl/bio.h e_cswift.o: ../include/openssl/bn.h ../include/openssl/buffer.h e_cswift.o: ../include/openssl/crypto.h ../include/openssl/dh.h @@ -251,26 +258,30 @@ e_cswift.o: ../include/openssl/dsa.h ../include/openssl/dso.h e_cswift.o: ../include/openssl/e_os2.h ../include/openssl/ec.h e_cswift.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h e_cswift.o: ../include/openssl/engine.h ../include/openssl/err.h -e_cswift.o: ../include/openssl/evp.h ../include/openssl/lhash.h -e_cswift.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -e_cswift.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -e_cswift.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h -e_cswift.o: ../include/openssl/rand.h ../include/openssl/rsa.h -e_cswift.o: ../include/openssl/safestack.h ../include/openssl/sha.h -e_cswift.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -e_cswift.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h e_cswift.c -e_cswift.o: e_cswift_err.c e_cswift_err.h vendor_defns/cswift.h +e_cswift.o: ../include/openssl/evp.h ../include/openssl/kdf.h +e_cswift.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +e_cswift.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +e_cswift.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +e_cswift.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h +e_cswift.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +e_cswift.o: ../include/openssl/sha.h ../include/openssl/sm2.h +e_cswift.o: ../include/openssl/sm3.h ../include/openssl/stack.h +e_cswift.o: ../include/openssl/symhacks.h ../include/openssl/x509.h +e_cswift.o: ../include/openssl/x509_vfy.h e_cswift.c e_cswift_err.c +e_cswift.o: e_cswift_err.h vendor_defns/cswift.h e_gmp.o: ../include/openssl/asn1.h ../include/openssl/bio.h e_gmp.o: ../include/openssl/bn.h ../include/openssl/buffer.h e_gmp.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h e_gmp.o: ../include/openssl/ec.h ../include/openssl/ecdh.h e_gmp.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h -e_gmp.o: ../include/openssl/evp.h ../include/openssl/lhash.h +e_gmp.o: ../include/openssl/err.h ../include/openssl/evp.h +e_gmp.o: ../include/openssl/kdf.h ../include/openssl/lhash.h e_gmp.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h e_gmp.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h e_gmp.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h e_gmp.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -e_gmp.o: ../include/openssl/sha.h ../include/openssl/stack.h +e_gmp.o: ../include/openssl/sha.h ../include/openssl/sm2.h +e_gmp.o: ../include/openssl/sm3.h ../include/openssl/stack.h e_gmp.o: ../include/openssl/symhacks.h ../include/openssl/x509.h e_gmp.o: ../include/openssl/x509_vfy.h e_gmp.c e_nuron.o: ../include/openssl/asn1.h ../include/openssl/bio.h @@ -280,28 +291,48 @@ e_nuron.o: ../include/openssl/dsa.h ../include/openssl/dso.h e_nuron.o: ../include/openssl/e_os2.h ../include/openssl/ec.h e_nuron.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h e_nuron.o: ../include/openssl/engine.h ../include/openssl/err.h -e_nuron.o: ../include/openssl/evp.h ../include/openssl/lhash.h -e_nuron.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -e_nuron.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -e_nuron.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h -e_nuron.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -e_nuron.o: ../include/openssl/sha.h ../include/openssl/stack.h -e_nuron.o: ../include/openssl/symhacks.h ../include/openssl/x509.h -e_nuron.o: ../include/openssl/x509_vfy.h e_nuron.c e_nuron_err.c e_nuron_err.h +e_nuron.o: ../include/openssl/evp.h ../include/openssl/kdf.h +e_nuron.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +e_nuron.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +e_nuron.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +e_nuron.o: ../include/openssl/pkcs7.h ../include/openssl/rsa.h +e_nuron.o: ../include/openssl/safestack.h ../include/openssl/sha.h +e_nuron.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +e_nuron.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +e_nuron.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h e_nuron.c +e_nuron.o: e_nuron_err.c e_nuron_err.h e_padlock.o: ../include/openssl/aes.h ../include/openssl/asn1.h e_padlock.o: ../include/openssl/bio.h ../include/openssl/buffer.h e_padlock.o: ../include/openssl/crypto.h ../include/openssl/dso.h e_padlock.o: ../include/openssl/e_os2.h ../include/openssl/ec.h e_padlock.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h e_padlock.o: ../include/openssl/engine.h ../include/openssl/err.h -e_padlock.o: ../include/openssl/evp.h ../include/openssl/lhash.h -e_padlock.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -e_padlock.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -e_padlock.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h -e_padlock.o: ../include/openssl/rand.h ../include/openssl/safestack.h -e_padlock.o: ../include/openssl/sha.h ../include/openssl/stack.h -e_padlock.o: ../include/openssl/symhacks.h ../include/openssl/x509.h -e_padlock.o: ../include/openssl/x509_vfy.h e_padlock.c +e_padlock.o: ../include/openssl/evp.h ../include/openssl/kdf.h +e_padlock.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +e_padlock.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +e_padlock.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +e_padlock.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h +e_padlock.o: ../include/openssl/safestack.h ../include/openssl/sha.h +e_padlock.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +e_padlock.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +e_padlock.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h +e_padlock.o: e_padlock.c +e_skf.o: ../include/openssl/asn1.h ../include/openssl/bio.h +e_skf.o: ../include/openssl/buffer.h ../include/openssl/crypto.h +e_skf.o: ../include/openssl/e_os2.h ../include/openssl/ec.h +e_skf.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h +e_skf.o: ../include/openssl/engine.h ../include/openssl/err.h +e_skf.o: ../include/openssl/evp.h ../include/openssl/kdf.h +e_skf.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +e_skf.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +e_skf.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +e_skf.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h +e_skf.o: ../include/openssl/sha.h ../include/openssl/sm1.h +e_skf.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +e_skf.o: ../include/openssl/sm9.h ../include/openssl/sms4.h +e_skf.o: ../include/openssl/ssf33.h ../include/openssl/stack.h +e_skf.o: ../include/openssl/symhacks.h ../include/openssl/x509.h +e_skf.o: ../include/openssl/x509_vfy.h e_skf.c e_skf_err.h e_sureware.o: ../include/openssl/asn1.h ../include/openssl/bio.h e_sureware.o: ../include/openssl/bn.h ../include/openssl/buffer.h e_sureware.o: ../include/openssl/crypto.h ../include/openssl/dh.h @@ -309,17 +340,18 @@ e_sureware.o: ../include/openssl/dsa.h ../include/openssl/dso.h e_sureware.o: ../include/openssl/e_os2.h ../include/openssl/ec.h e_sureware.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h e_sureware.o: ../include/openssl/engine.h ../include/openssl/err.h -e_sureware.o: ../include/openssl/evp.h ../include/openssl/lhash.h -e_sureware.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -e_sureware.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -e_sureware.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h -e_sureware.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -e_sureware.o: ../include/openssl/rand.h ../include/openssl/rsa.h -e_sureware.o: ../include/openssl/safestack.h ../include/openssl/sha.h -e_sureware.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -e_sureware.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -e_sureware.o: e_sureware.c e_sureware_err.c e_sureware_err.h -e_sureware.o: vendor_defns/sureware.h +e_sureware.o: ../include/openssl/evp.h ../include/openssl/kdf.h +e_sureware.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +e_sureware.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +e_sureware.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +e_sureware.o: ../include/openssl/pem.h ../include/openssl/pem2.h +e_sureware.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h +e_sureware.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +e_sureware.o: ../include/openssl/sha.h ../include/openssl/sm2.h +e_sureware.o: ../include/openssl/sm3.h ../include/openssl/stack.h +e_sureware.o: ../include/openssl/symhacks.h ../include/openssl/x509.h +e_sureware.o: ../include/openssl/x509_vfy.h e_sureware.c e_sureware_err.c +e_sureware.o: e_sureware_err.h vendor_defns/sureware.h e_ubsec.o: ../include/openssl/asn1.h ../include/openssl/bio.h e_ubsec.o: ../include/openssl/bn.h ../include/openssl/buffer.h e_ubsec.o: ../include/openssl/crypto.h ../include/openssl/dh.h @@ -327,12 +359,13 @@ e_ubsec.o: ../include/openssl/dsa.h ../include/openssl/dso.h e_ubsec.o: ../include/openssl/e_os2.h ../include/openssl/ec.h e_ubsec.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h e_ubsec.o: ../include/openssl/engine.h ../include/openssl/err.h -e_ubsec.o: ../include/openssl/evp.h ../include/openssl/lhash.h -e_ubsec.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -e_ubsec.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -e_ubsec.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h -e_ubsec.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -e_ubsec.o: ../include/openssl/sha.h ../include/openssl/stack.h -e_ubsec.o: ../include/openssl/symhacks.h ../include/openssl/x509.h -e_ubsec.o: ../include/openssl/x509_vfy.h e_ubsec.c e_ubsec_err.c e_ubsec_err.h -e_ubsec.o: vendor_defns/hw_ubsec.h +e_ubsec.o: ../include/openssl/evp.h ../include/openssl/kdf.h +e_ubsec.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +e_ubsec.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +e_ubsec.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +e_ubsec.o: ../include/openssl/pkcs7.h ../include/openssl/rsa.h +e_ubsec.o: ../include/openssl/safestack.h ../include/openssl/sha.h +e_ubsec.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +e_ubsec.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +e_ubsec.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h e_ubsec.c +e_ubsec.o: e_ubsec_err.c e_ubsec_err.h vendor_defns/hw_ubsec.h diff --git a/engines/ccgost/Makefile b/engines/ccgost/Makefile index 17e1efbd..8205039c 100644 --- a/engines/ccgost/Makefile +++ b/engines/ccgost/Makefile @@ -96,11 +96,13 @@ gost2001.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h gost2001.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h gost2001.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h gost2001.o: ../../include/openssl/err.h ../../include/openssl/evp.h -gost2001.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -gost2001.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +gost2001.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +gost2001.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +gost2001.o: ../../include/openssl/opensslconf.h gost2001.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h gost2001.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h gost2001.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +gost2001.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h gost2001.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h gost2001.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h gost2001.o: e_gost_err.h gost2001.c gost89.h gost_lcl.h gost_params.h @@ -111,14 +113,16 @@ gost2001_keyx.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h gost2001_keyx.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h gost2001_keyx.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h gost2001_keyx.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h -gost2001_keyx.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +gost2001_keyx.o: ../../include/openssl/err.h ../../include/openssl/evp.h +gost2001_keyx.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h gost2001_keyx.o: ../../include/openssl/obj_mac.h gost2001_keyx.o: ../../include/openssl/objects.h gost2001_keyx.o: ../../include/openssl/opensslconf.h gost2001_keyx.o: ../../include/openssl/opensslv.h gost2001_keyx.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h gost2001_keyx.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h -gost2001_keyx.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +gost2001_keyx.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +gost2001_keyx.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h gost2001_keyx.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h gost2001_keyx.o: ../../include/openssl/x509_vfy.h e_gost_err.h gost2001_keyx.c gost2001_keyx.o: gost2001_keyx.h gost89.h gost_keywrap.h gost_lcl.h gosthash.h @@ -129,14 +133,16 @@ gost94_keyx.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h gost94_keyx.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h gost94_keyx.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h gost94_keyx.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h -gost94_keyx.o: ../../include/openssl/engine.h ../../include/openssl/evp.h +gost94_keyx.o: ../../include/openssl/engine.h ../../include/openssl/err.h +gost94_keyx.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h gost94_keyx.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h gost94_keyx.o: ../../include/openssl/objects.h gost94_keyx.o: ../../include/openssl/opensslconf.h gost94_keyx.o: ../../include/openssl/opensslv.h gost94_keyx.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h gost94_keyx.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h -gost94_keyx.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +gost94_keyx.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +gost94_keyx.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h gost94_keyx.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h gost94_keyx.o: ../../include/openssl/x509_vfy.h e_gost_err.h gost89.h gost94_keyx.o: gost94_keyx.c gost_keywrap.h gost_lcl.h gosthash.h @@ -147,12 +153,14 @@ gost_ameth.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h gost_ameth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h gost_ameth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h gost_ameth.o: ../../include/openssl/engine.h ../../include/openssl/err.h -gost_ameth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h -gost_ameth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +gost_ameth.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h +gost_ameth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +gost_ameth.o: ../../include/openssl/objects.h gost_ameth.o: ../../include/openssl/opensslconf.h gost_ameth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h gost_ameth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -gost_ameth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +gost_ameth.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +gost_ameth.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h gost_ameth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h gost_ameth.o: ../../include/openssl/x509_vfy.h e_gost_err.h gost89.h gost_ameth.o: gost_ameth.c gost_lcl.h gost_params.h gosthash.h @@ -162,12 +170,14 @@ gost_asn1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h gost_asn1.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h gost_asn1.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h gost_asn1.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h -gost_asn1.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +gost_asn1.o: ../../include/openssl/err.h ../../include/openssl/evp.h +gost_asn1.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h gost_asn1.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h gost_asn1.o: ../../include/openssl/opensslconf.h gost_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h gost_asn1.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -gost_asn1.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +gost_asn1.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +gost_asn1.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h gost_asn1.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h gost_asn1.o: ../../include/openssl/x509_vfy.h gost89.h gost_asn1.c gost_lcl.h gost_asn1.o: gosthash.h @@ -177,12 +187,14 @@ gost_crypt.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h gost_crypt.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h gost_crypt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h gost_crypt.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h -gost_crypt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +gost_crypt.o: ../../include/openssl/err.h ../../include/openssl/evp.h +gost_crypt.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h gost_crypt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h gost_crypt.o: ../../include/openssl/opensslconf.h gost_crypt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h gost_crypt.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h gost_crypt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +gost_crypt.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h gost_crypt.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h gost_crypt.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h gost_crypt.o: e_gost_err.h gost89.h gost_crypt.c gost_lcl.h gosthash.h @@ -193,11 +205,13 @@ gost_ctl.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h gost_ctl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h gost_ctl.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h gost_ctl.o: ../../include/openssl/err.h ../../include/openssl/evp.h -gost_ctl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -gost_ctl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +gost_ctl.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +gost_ctl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +gost_ctl.o: ../../include/openssl/opensslconf.h gost_ctl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h gost_ctl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -gost_ctl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +gost_ctl.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +gost_ctl.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h gost_ctl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h gost_ctl.o: ../../include/openssl/x509_vfy.h gost89.h gost_ctl.c gost_lcl.h gost_ctl.o: gosthash.h @@ -208,11 +222,13 @@ gost_eng.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h gost_eng.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h gost_eng.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h gost_eng.o: ../../include/openssl/err.h ../../include/openssl/evp.h -gost_eng.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -gost_eng.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +gost_eng.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +gost_eng.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +gost_eng.o: ../../include/openssl/opensslconf.h gost_eng.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h gost_eng.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -gost_eng.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +gost_eng.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +gost_eng.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h gost_eng.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h gost_eng.o: ../../include/openssl/x509_vfy.h e_gost_err.h gost89.h gost_eng.c gost_eng.o: gost_lcl.h gosthash.h @@ -223,11 +239,13 @@ gost_md.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h gost_md.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h gost_md.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h gost_md.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h -gost_md.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +gost_md.o: ../../include/openssl/err.h ../../include/openssl/evp.h +gost_md.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h gost_md.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h gost_md.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h gost_md.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h gost_md.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +gost_md.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h gost_md.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h gost_md.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h gost_md.o: e_gost_err.h gost89.h gost_lcl.h gost_md.c gosthash.h @@ -245,13 +263,15 @@ gost_pmeth.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h gost_pmeth.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h gost_pmeth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h gost_pmeth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h -gost_pmeth.o: ../../include/openssl/engine.h ../../include/openssl/evp.h +gost_pmeth.o: ../../include/openssl/engine.h ../../include/openssl/err.h +gost_pmeth.o: ../../include/openssl/evp.h ../../include/openssl/kdf.h gost_pmeth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h gost_pmeth.o: ../../include/openssl/objects.h gost_pmeth.o: ../../include/openssl/opensslconf.h gost_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h gost_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h -gost_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h +gost_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/sm2.h +gost_pmeth.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h gost_pmeth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h gost_pmeth.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h gost_pmeth.o: e_gost_err.h gost89.h gost_lcl.h gost_params.h gost_pmeth.c @@ -263,12 +283,13 @@ gost_sign.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h gost_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h gost_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h gost_sign.o: ../../include/openssl/err.h ../../include/openssl/evp.h -gost_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -gost_sign.o: ../../include/openssl/objects.h +gost_sign.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h +gost_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h gost_sign.o: ../../include/openssl/opensslconf.h gost_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h gost_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h gost_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h +gost_sign.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h gost_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h gost_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h gost_sign.o: e_gost_err.h gost89.h gost_lcl.h gost_params.h gost_sign.c diff --git a/engines/ccgost/libgost.dylib b/engines/ccgost/libgost.dylib index 71f92cb16a81c0b8c6ad3282caad8b2414e7b682..477eb981a2fcc2b2d32b5e3f275b9c42434ea489 100755 GIT binary patch literal 97408 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 S>l!JtdCAhOJGS+UCjSpwF8e9~ literal 128312 zcmeFa33yaR)&|_2g){=*AVhRX?_me~49!YaJoXHM{!-c<&_$yC!IKpuGuLu67COI61g(JPAN6M&{KNFm7 zhJn)oG!DA_S6CPrH#MOAD%=uZT?dtR&kxFFIHeh!fuh7G=~}0w=ro4|^60qQ%CiYB|L(%yP{1s; z;@fh>hfc?&L_#f~&Txm|k7X%&Adu5>ZgA4XbMLu-?5+2ld(U0B@o((J2PXvX@1N6u z0RG?pAYuUMVE#e)v-5XKnvRg2U*){^!AXH}_x2y!oC_fTKmS*t8~@Uco9q0>IN>+$ z-Qzccje2NTmfJYuHh%CKpBf*Usl8@89pUm|C-K+;hr>usN6;L641V3lM!&JuW9;-8 z4Z7L0kKeq#kIQe~(y#BN1~@mepB!=d#mBCA=RnbBc75UvX()l`{-D~p^C zJu-0NM5jYs3UG7q0u^&By0SPMG11g@4?EG84o6Lu%s=o+K!h6tL(MK9ASGNAbk$U; zVxp;kMGXI$gYQ&$t|#Vo4U8G3V$y)QCbk?=v&BOE8mWVkQ2+Mq*|Uk?eVu!hyTCp2 zT7Bj&9msTJ>D(htO}a5>HXNVvk>9A&&D5=TfN(QiHwvnA*6GG4Vim?_-3TuLkl)xL z-j>0rs8`XYh!)fLI~+bEsx3|~@#1%wv&6d!PEv_?B^*SqfRj?Bd)L8{qPdM%~z?n{$X#Hy5eO?3S3B;|qx^nr|G;H-v6R$Pv`uTqLV^2&sfx zY(q8rjqibsMcXj7OpDxHv?L1^K(T(~fEYiQag(xCoVk?n;u=J1i@il9;TcU$O=WCV zf8^C6@JoSG?X4TD^#h-4i&J_GE%BUsnch^PhYk)23O({-ISY*pyyzh`ld(l?o5JF@ zh>NB=97~1}nX#SW8;THbE>bPLMO^%d0(*tv=2Egj{Ir+QP2x?;EwJ0_2U@RU-?Ae3mp_OfvF9+_vb_F7w#eCRC5q2((OY_> z;#<@@->9Q_7?sPikb^w=@JDcYuB^3@RLVxGpOw%)t@~4HIxB*{v`F8LjK-X7=|r;V zn5mK56Z(|67Q97=8h|twb-4^yauX-lRixlfkIi@;z`y z#+Cac_s(n0mEB?ySgD&~5~!OKT#&}A=|!8J)Q9=P6ClRuKCHIi*ycCBW7=Dfq7`=D zNDe^{%psv5GSF9#1j}`Eh)Xx8rZ18G{rR&(Dh|j|FU?Y6~809ldX8(1q@1l z>IKA>%_27=85<8moF0aMIr@%6ynGPiv^h2nRE+O$_&NoX?B~nw|2x?RVGY0MYC9bqka(Z*BUBH?$!C0~hVc`}B&ZzSh};P@ViQ`< z5(-qF@D8nb4|`5z5dk2ckgny|6XQy$NM1q}tUl@z^Fa^QHQV_jCaB@|LtsVJlb-?+ zd3CQWrAmUmf;gY)m2ETSCgP&nhzvo|AWAX%6Y*s)LKOgNXnJUnE06`bcmNj6vYwK* z!3FS(LqKZ-`6Ek}s-gB^l^8-I@F#@^Wd(Wx!5AVqMIq=;1Z4^VVSJIRknw8#B_Z=v zR^1%x(havH0d6|NnQ$`|(xI-p=hR>fL?2tKP>jz6=V%v7C$$KkQ`_VFpm9`a#C?OrID}{|xE%Z)m+7Wqnothg#-eB=dW7 znqt2Nx68Pg14fT(2{ao(;~@xaV7q;#eI(}^p$y13pZF zNKX*4bZ?cZn6~T?qu_!P6vQz;vxBL-FpYemY(1)umU{t1<+2&%#ogq^hCSd#)LR0- zBWJTW=UXCj0uhV)<96lFfvcO-OT-#@Je(c1C4fiC?{}gI@Zs_qAy|Pv^HTAE3~Em) zy*<51Onp-Fqy%QB--tmG>Sk~@hMyZ`f!^6r&*61i@e&XRMd>$oG98r66E_jUsPdVU zT?v_|&lf%<_{`&Jcbe17#q9{%0G}gwIbs)xK8Pjf&Xl~Y$_H-KyFeO}X2EJ_Lx-~hnW)I)EaWa(slgNA7mtAr zA_Sr!yd_f8J%@3h8tioyDW!5MP{>X#wH@nmA5sZ5OF_+}K>bESVeX!eY^WbBEKf)%OuUu?N{-zy=Aq6Hh%dhe zCFXFDUmhsdL(>;HwBo2jg?Xjl*b7|qr11R>kN_wJ08QICFUpn7mWsy|zax)-Ly75nOj*2ePjiJ&kI5{3pilLWDZm!=(ZboA#BM-S-CBv&? z=UL%}2&0wf*OxH$RTV0Y-C!j@qaqf>vJnxN>K_psyP9HZpcqKdMHrBkwxt+}z%CF- z<&j5Hs^)HsqRZ*+r zQM1bKRZ$BWMQdTXB;(t9spzT^;ixadc-Ojr48r6c3xl9g!oV#jELtGO zXQg1{An;U{wz#SjLY+B--qPvam$FEw}_J)IC% zx#5-B-4)dt-kfT4gbQUmjz;i=g}`qiK-fm`goU6c!=3ZJ$DGl5SfpoOYYe}LdXG6J zeQ2cT1+6pxa{4{y{oPS~_R$!gu_`dqssO@v1)i}guo@NE>oM=h1cpBzk~%F%(P$Geks4M{geRwcfyCJyR>zse|gh^Wdn}R{fn3mxkK)Lt#khp zhOYwAr?<}d9}%5-bnahD^#7YXIvD=nb@E@=!BK1*o%@$E9Jzb9ZmwS{C8xB`_&+5j zQBNn-2P)lNAyw*sKyvl$RV+5p$JX?v%et@;A9;Xi9}}l?+Xlza8XnT7vzf zHVUkH)&JTPo&MLJNMOOQwI`qhex2gVI=U172io?(9+Q8C4G6_G=)WiW*BC&*+WMy9 z|0|4d)cn7)I)A+p^y|jtoYu|tOULA2VQ&8FnT{G_{yR(gS6caK=l{U!Y-4EtrAE;I z+7t14@&6a>2^@;S9tpN?_hZe)ZLA5`JaP`!kCg#pomb$wf$d!DIF$>(*y+IHkIUV( z(wp}~a9e!$LLJCyV}0wF<3A1?(8SF$ejdLbxzg#63{Ub$u1wYzk8)OQvlm!8;(%8N z{>bH(j+Mp<+Tv?cknYwN4@trDicCxCSc$M3;Y@&BmjW1<1>>?|TnYwZ34;Qz>1@Gt zwqZIe7=$HEXTYReFzGf7N@Q6GOBgKNT+`ix>2AYxS1<@mnC^hdv|uuA7^Dyn!V(4x zLD%%OV0zjxJrxYX5~e54@TvX#$S5ax27V1sHq%Nvm}#^*hdb$}mkdv$n^}Ui5h*3Z zQ}8QI(iH8z5gkh0;LeCNcgYaMBaaKeGS!9DV@llM%ZN@$MSSOy;hpg-Q#&K|*b+B5 zGD1Tt;!#dIer0MpQjaTfgBK&ZArCT32oO98aW`nV=Y)|jL1UB%GFG9 zA%!y+<{4wBOz2pPXv{6#JWv-+anC%+P1s;j4YvJ?9Qc=D??=-Z5gmcmJvu-}2bt-l zE2q11GL_Sl4pFsSU)B~U4d|dP9_k!0+zBUX!0;qE$peO?+YC(^FdS_=GWZCct93@T zTD0_-abxk1m^M|&sjZxHeGKnYYRXrGDPM(o9W-p`u16z?FI`#)?4?T}D7FxAzFLcw zN7t}O=Rrqfh|fAL3<%pKJY!+ttaCM%AF+1XIrnG`zqArqeoP03en(^Y<+Zp23z(g= zj>hoIYf*>=%+4nsjp3Kp0_&G(iXKNJ_@$LFHE*Q5%VVrl!r(D#ttD(lK_~wo*~Kb3 z=|)5Njdj}MRf#k38t5cXq`UKI3@zk|IBbDZND^00AX6hE-SgVQkx&nXL&=nl10ib} z#GO+O90QKVVTtv>ugUO8_kKrb|BtKDyDc35VKp*6##*(d(A*$Os5)U$TsDa68Gd7} zws@trB2%#%>l&*gJx@H!MpwnFErk!+7iFi~(sDgSE_V!fQd?t7gulrpqf#n%x=Kc+ z%HIz1_h;8be8yV0vBzD}m>k-k798%)S(j6e4bVrjb82$d#novsb)o}W{i2~IDaSzV zHdT7^DuUm6jB=b&I94B9i?kCwy=$3VQw1!cBTlzAr_$ZDy8a*b_|Rhg1@;p6>%2Hw zW2WZj@xT*~YTaCo^Ll0nY`u{R?a3+>i-Z0+ron>^5$y0|b5oBLl;h;_Je)SDKOy0~ ziEUAFD~fxyw6se9)zk#`r}V)Q^<3|Ql4JxteQ>nBBG>zN$uJO!Ada|K=6c^L8I~l2 zIO<-N>s?qfOabG_`-)ueyCuUoWO@4F==;iC@1l}nsWONo@T+pYi%W)ekU<=UkLG&c zD;bui>@F=l9=ln(dGb|*SVf$GJ})__wc4cv{eUB0@(B8Vzj@C73!FH6;pK+y#vB}a4q|(DFHYBAf{j#>hRthVWE6Hi z2cC~G56A4sMlzzX_c^ei6}44GVWV{5DOS`PL}`l)-j*Y`_Z`bH^e*7=?Omws!fpUq zqyQG%0PjkG_Y}ajFbfLG6vPr6qEte>Z$ZH9D_E)^me~*=NQmVY1Wdnz3I$PVLzGL1 zDhmSUU%^TRvC4*6At9m`1Wdq!8U?Z1hNzYhA6gJFEebwX5Nm9Rk0it=7DP{Uyjtr} z*O+aTYHzL2;K5_>M&Ef}N3aXzdVsb1T2m!%T4`UfQS%>VKdy)Aj420A=u!W6$^n_V z+M084j*&R$z{;<(&Dkxlwk93!R+EmQ@ks}PtXYS<)vRM^eAYoAYudqShAK`?JBA`G zrvm8&vgRG`R`ZUb@p%VxMxI>L;lLzIjbHD5I zN4(|roun4^7~9;&3S*t$x!2D_!8l>!ohuq}Qqvv5$!r`~z!|H#lQ(+v{-r&R)2t4x z;~zSZg}JroR|bo*v~_ucbzzCHoqjLM^h!PzvS%=*5hzcpsPL> zW{D@Gymuo`Y$3U8DGYcJdU8KWFK?-I3*G{0(i7J5bDG?tgU%t^oM_W0_0L#?!94p^ z2QPZ{+vdUi+SyP>GoL3HKCOfa1Y$5EU^HNr#2KhgY#4O1Sc=5<_XnVVZGLWW8y|xe z+rSHEy=e&%feG>;Gl^+=SDfsJ!H7;lJT$J_c8u${C%Alur%$>SlPT)07#EM0d}Rf) zsqzmlXT}LQva*y1opAC}+<@|oDjpnr1NajPIRS-)H$RdcxfXEWC)gMISg8KuR3a#G zHm!z0hYmFbV?2b@4ajs{q~TZ}893GpuA|gWLn($^#8|kp0Gy6tICMEJ^CR@$sVk6L zH*Q6NKcKQpp8oDY7LO)=6ub^_c4z*4+qGE~m6-=nQ*7qglK*{@(VlK$E zu4?_B-e^jnER>la{x*=y{xVA=H8}sela#h~X;R%)QTCuk@6lH)t^1BG_0!B<>V6g4 zzwP@~=bW3+w{WDe%h@Cr#OxN^QC%GI=V^Qfzm!dj?z~&9lHL^ne=-j+Y|e4XtPy00 z$EoEBsbewOZ+W$<05JB=k-$j=dI~_OI)=D;xbY&-{a+$)iVRoxw(bWq>)uv8V~!7p zblL2ni;cPYJ2pRz(+G^u7Wb%_dT&0=k@=^y7`0^a`)4EypR1&hbakHuj z80__u=G#ej4YlGQA?zYUFDh@Y#1_h;*kR>4X563B%{jcW!4Wcki>gbRqH~HY9OvfLtq$FE zF3Dn{xGS_12Mbx1kpM9xyc37f&27_du>&`!_T#>t!ar5rpE_4nq4;DE`aa^}7o4_2AjC9Q0 z)LpNK5Fv6ZTegQE7{n#0MA>2mUx&eX*&Xn!_HzP0b_RgT{;tx?nLaL_zO@4BX-tRy zlkLxRswJ!anZ5(`r~$s&{)B$qc+`E?`28zfX^r2#`qP;S>d3x(bu(nbQbh8o@g}xk z;N>e|&vC1g)d1T34s0c~yHN4XSn_O&a=8N`)% z?MliMZg!8y`B3{t6|Y^vO3ye{4sLXmv<-f&0{jo57zt!)B_k|vZQ-VtB9N70Uubpv zY8&x%Qg|*Uo{JS8kb;h)ZhnO-Af*4zC9Fk6-bEqb3cvV@b(hz_+PH+Z8#bNP&o|GL z8fUwB5t|%-;~+YVtc$#9MWzVP2-z#cR0n0GKK$Rt{+CNH& zsd0!`h~+2ftTJ3BVJWvUJrqw5G5t%Vi)TT8+@#}pUOEI&TpjnQ`9~?2-V?*f)f76C z%=Z(b&T}!$mO_dX*3e7%VE7|1)BKJ$`3;$wv61=NHLgx}Or!7r5X zT~>FK)&DwE=Jt1?{2}+tGBx!hrh+nmq|4hV#~(@kyaNHdOk$~#jE~Y}wp2)_%yzrV z_Aju&%C;I_WSb<5>GFZf);B|D`wkV7+45wzf%o;W!d($=O}peb==UiDP3(JD60*9d zB;+(j{}Wgwlo+?l)YOlds_1_J^#&owbduRZ;5+E=c_N*Gar*zFvh{7I{}_vYSxlFY z*aagQ!Q*AN`+zcbF&G|~cglxu&dAckO@VGTv8s1k&95jXMJU>~HwZ5ZQK+mfTmKjc zL1=20Lwlyus7(M@{Yk=~n+T7&Lsa|=sO0x(z?$exzSs`%)^HLQ@I zI{j*3lt<~e2(K&z>E8x&n0_|X`>2vJL8mG8owyWX=mAMUedlIbF4j>$kmeBQSTRMB-*9bFgCw{8C9zr6=Du4HE*sCP5&Z2FtCj318sW; zhU8^q;a|=lF%9>gWvO_i0dKIFc!R|ZqGUCmV%~+71h`5U?673^pk{7$mvRP#kF#|s-wzl&^GDgkFOtd@A!>nOn8|}BdlaHD5b-@1wA()l zB$wu}nPS(YhJ@`JhYeh0!EN{$RvB)9OSl}sl}#iyk&K6ypsu&Wuj=|_nN*t^AjDr5 z00M?C-jX0y#Qf~rEH3yuH0v((3UOI82uUT#WC@~$Zv+Z}(P&kSvc%qMucPgc(5^8) zOb6S$uM){GN9%or`^Kecy#?HY#fvE06+tJ;_GxPvnvHf@Af^KhH?(j+^MLq_G~)&x z{mU`PKmaS`C@AX^70BG}yaR@of>WThV`(?g8cAy_V;?WZU(0ssMEaDv$dukK;t1vg@!?`IYuo@+U&hq` ztt>;8`Z7$4Ws~BizPpH})|ZHnky(n;4p9qy*4%ZsSc*XXlXCyX;`crgl?6t{<1$ZF z+z1ye%SHvkItZp>ZfqqY656Yc^%wB&2zZB^SW)jr5akfR1#S)qV>hEeL+p7hNDL=t zw9H+Q6MjRxa`Z#qokt z_A2>r24OF35l>;ZCH2NwAU3vRYQz&Xi)rVIXcl_Zmim>Kty}ijw#H*i-{}}Am!V;-WyponE4ANjc$La~3_hs5 zp=IAI^Pbk6Qh7lZd!a10ZG~siVap5k-wdVy)Wu@md?=H$mnu#`eSPMPOyN>Y$V5_> zO8W7yGAT=Z3lI2{g`{kiv{fZ#i*+g~+hWy2gD}Cm3yfgHUXX7OPS+u(?0~ApEg1Nf z3YE2ZV1Z=bKtKquBtbr?GYjmGYtbnP#C(#yE#&`b{?6Pr8?2G<-N2w6e0~q^-=2Ui zeLhwf^)ivdTtYYMeZdMADOW!9BE6CPB8d45us1QaTgvxed`7u=9b`bvb8|NHosEKO z-+3o!VZPATUK@C9HGzH1*)V@fAo4{NvKO#b1d(5i_>v;L9CIt|B9>MH;r|^meBg3k{uuAgnvqkViTdT*ui0L-4Ob*^!@v|UZ4d5f?ZC6Th-mBo;m7qVNfWfi= zKGPHEh{tfWVuT%KSd*gZT8>d(y#PW^i}n9N>uip71_qYaSv3%{YJ8MRc9dF>1mPIO z^dU$Ghl<$xgRZb|-A=M{uc6SOQJMQ`nH$%04~Q2*W6owqUTy&%1R%m;3I!qV#bjZj zGjew>4n$fa zx!S6VfYQ1;r4Ujd~ni~K%3Mu}Jq^BD-CS@6Ii0;eNjCd0vFODasAc8DS zvRnsT)qv`kOuSk#Pozs;N5waQF{%=4S~^d5yW-;@=;$a<%M6vEatFp^RoCYMqUIZA zkaZw029JSfgTx~yBbgnUo2$rI6wfyn2_#}63RiQDTa>DL1Ymc>!7c$9B5sREoP~(k zVoWGo%6r*sP6B2e2S7Ct%eLgYCbk}d*5`X+py7Pg zVbSj;*%!o1$Iy++jl^qN52^a-0n>j6GA(`1)$yDr#ip^MBdGKlY0EE2hEV?qD4#LH z<%Y!kC;(B(X{+UdkzV#;%Xa=c%s>L4=Ko7zbI|%#@ z0rO(KP7>}12A2(1^!iBez3?x;9Y5lx`Kr_Id67@Jd=neNmH~NB%wzFU;g{q^MHXDV zS+a%VM&y?RdHoyXXP5O?X!oM(k`48LJ4&B5pC7<^K|Ilk6#J7b zMm#1<$0CMxkRj^*0CY8(!?HP8-HGNB--2LEY0U>Mpq2LSS7JH>*uVRJ| zkO2x(yenNCt~ns?R~h9J1dagUnam^NX&JXgJPWYM)yIa)(=@#jM=L#%^HInaaSh^^ ze4d07BLjcJnC1bVS0u`)Z|nwTMm!7hJ;uJZhxM`h{LUk4b9I{=9KRw zQ!8=kDqBvj>wbrNKnSPEm{qN%;o59GOBIfyTsgxN+fhH&WJZ;ye_nAodC5Jhp+?fg z*dh)C0Op;V4;rh)tq6;6o|9b1gNxDx+=n39wh1nnjwP{^ttBx(mc$xb@H_9T;BL0w zi@;;Edj@D#?7kNmB)faGWVd`?rAaifjqDjuf?hb>lG(i>_X+1$e#Sny+F~UHaxo+Z ze7g)qSRL!rL$s_{@?_4pf!msU-xe_ou$CU20ahw4I2s4R8bq1oK^3b;T`(8utOfT! z!UXmheefW6el;FyE~8v*zZ9z3}8A&hv%_RKdAnXE%XJ`(^a}w zJVh#_sQ6gYA^UQ89O7cP;74V%_#qP3^D*zkBb*c093!8@ZojAI`IcQHOqMch<+H{kdx^{XmmGsnl`cZ zp}w$!j_1>skQKs-Dk!W^g4c4z2yQKs9HIv^!ctQ+{EZa5E#e(SE@#nVRvg{NoSG%6 z%&`zr-tafUW8|@r*dWx#0}&k)hpe?B4MZucp&Nkg@iBhhHr;15h_}H_D#ADBl5T1F z9*;8&*2sgS4;*!1`F15g633e}DC?IYSF^p_7ooVldjSIG#r2)QiH)Kk0+?fcpqdVn zAqq*Z+WF&))m+I@>y?S)18j0Gw7HFcDkHZuR5#DE``9NBKTwF$Qg@bQp=ZF+x52y;-GAkEabs1QGoMh{%HZ5>^hr-Fn7ZpcNayuh>vse_~7d zOtAmQlON{-h0Tv@k%5rKk7{u`0_I7H#Fk@JM`ORtdKk3#4!mrW{RWcc5~$qmRC5DM zD{#F19Lab<@*NwS2r^`cfo#T{#~hh^cetqAr3YeV2BtSk2o6< zF}_jG%ugXRW&I<|MhnQfK?ET6ILEp}+;64-omydl8wtMZ?3H(izgP`l}$;S5Gi?8bJ}gEIZ%_R=#{ z`5En|tMY&NeLMBfQ00HtZn`ReQM>6GlD;|ZrZ0jXsEGyJOYfq}_qCg@%J0{1x+=e8 zyXmU@*zek@f0qJDUroE|KVXVc6MGHm@sk+J!~S9K56wK1jKL$&GpBs!5zZiRp3~m^ z@z}G>s51+FNvimGVi98O{fp3{tU#Z#E2Y_!Q4L#U+5JddJ`q1+!V8vh#tkJbnqaQ9 zM!e5ccIL3mXweW9$&RYVt>T376`)IWq{1XvhAtujsJ=lJ=?@+05V$aOBrPzp>~}zb zNzqj-cqR*G>Egii*xun7+~Pn$5t1C{lsoxpiE~s|3QI>~c?duX%iA`V z`qJk010EWv3H&YUJQHK*J5CnRLSK``n7J4f%3fjVoGC6q z(Yl#zUfo%j&$DB!UpiY&yH_HKW~56zix{^#9bW)}@bDqc)gSHWoM+wxOKo*W;o3E#eatg2|9v+2Jhd z+ox=qSVHK#3H>h0t^d7cU)b^sk(!FjyxqkJo@R{>8-wCoiK^P4#B%sJF&~`)V_<0T zm~KE87>Eh*Rq*9y`0yJThTsr*>W^!=9+8(G$ks#UnK)wNa^Ss1$PESVE7%sx?uLK) z9rzKCJ=G!^Y<*nA9;nOz)(FOhrX9(A%X3*Eov2l1$12PIbI9D zN)nEegV3S087IZ-hx75Pij!r1nkqwwT*2?m5XlD*yXj_#wIe^%UTZ>s3+Q^}_k^`b zz@8EXsDuYaLlV{%;}%8P`AQ!Rf-$%(04kP0fge%#N48SzCP3Im^_Mkx2m5ugeYP#u z7JrW3f3Uw_f-~_ObTjo`Fu3_r2X5v2BX@KsrTxvT(xD+Nf{(TCn3emnr&f+IOxB?GPx%{oF*p}I`Hr0uLxO2z5 zn*ii*rToPwc7FCgSLD$Y=-dzuJb6u+g3z{T-9nh0DHzoCi1;Q0Ma1TKx=&P3oc+|9Iaiuxj0oy%LLJz?^?EBo9Cb9 zd-*?NOq2I=3a9!bzwHiv^8)l8rzt7Ra8Q33tZWEObQoI}yIT!`PIAhQ@5#JRT5sx; z$^FaYDP}#;MRD>RLdP!sencsiWW@R+5BJIDp>(Xay@GhD$=Vh^>%EPixzDn}Z{C4H zW5yUq;5IHzbRqWcJVAFVNb*OfA zv|vK|5T^2&dqJII=Kr~w#I;-;p?32Uk`GI_k~O+H5i7nRM11rCz|CP(vF|n}b|ac1 zJ{+|g56sERMiR5ZqPT^m&L1p&wn7FIVHYxln3nvZz@*AEUJMH0m>T4G4_d%bHkP*%w-gcV+O{ z4KPjlfa~Mo_fUq%c!i}}4Vp3LFzK`|pZtV$Sez~UQ8jk{(x!CLBk%U$Fu=u*V3F})twb6qL#8J}0*YpuOg|BI) zjs;HM&cpjU2VH?P3^Pt;tN_UM$op~-;sWk>A{_z|%SE*LzGO`kzCqH=nr@OcL0ELS zvjYn6q4{eMVv57+Xkrz_&t_L_2D-AiW)`gX_Qz|iIqjnz$!*YgAA>my5}HDd>4Bc| ztkhA*dzAd>=Cx4d{Nf20VuBm>vByD3hvR-B%|z4TF$eIIKc2h^or3|K3UG-DSe(eg zo_6qh@fN>R0vn2QGZPFov99EGNNM&$n7s+IJiWVcf+7laCf2E8)?#k&5?=!u*)V61 z{jr~`KsBtR6qyjMf1asRkXp6{x&uuZfZ4R{J`}e69yVdm*_LT9UwkI;0T6}+hr5Kg_r1{Co<4bQJmV4A&E1Mq010TbK{Ff>EX@62UQPRg|-7}p>h|=n;ZbK`0m3^eJ~ylg9Y-C zv_N{A*QP_)WJt-=ik|}Y&H5YzC#n~m&vnziS!DHTtLN;r~ zO$exV3-4zJiwzeLkYBTrgxeLP_W2!pzC4}4gHc0dOU0W-kH~&r9Xk<*fVB=F^@%yS zFV>fM-X~pL69PM}(pAu{+* z7Ia6vpupEC#vdygGHmG@t@Qr77?w=Z*~7eor}hkf8y^& zkgAK50}o*l~H zfN0zgmQlfT(K&Kp{fNHEfr+&|jTRZ)kx|E~sEesu&66KP#`?D~JvaxNh#0t>LM%*D8{2ihGsGzLRr5?7R zo@#~?gnB?hJ*RNJdPvnQPeGjl&GY#lGTF7HrvnCv6F|00U18~Hg&ZZXFS z#}Gz4j5-3MmRp?oOvU|~ac@|06)LVjR%yhGR@|E^?sLK!R@}3Q6H_0vR<2@CAQ+!; zp|R9@vxqjfSUH zB~yV4tK;(kvz*g3@d$jFGrG7wjnPuBj77yGIOJ(>@-+`^O7p5;>PL>LGhB|qje2B6 zcRf0yJ1ee7hbVJC%Bi9ZXG%9R;(WlIZ^g9@W51v%b6TTMb9wSyyV>P|Z-Lcx!V+wx zrb~loj~=-WChiDKPdcbs%5VgSrt1b?REUhib3@)exgGEvB|P8f4tJIeb;7qdcX(3C zP&9^jUoM_A8;Tc#y!&&9r{JM?_}xB$Q_dj zGnj;x+piy{k>6_mJagAZR^3>dNj+vPN|(+Ym(*&h3wE&rAdY8{@$ji`%9LC@4OX;- zgET)2tsCFhcWoXIa08l1FpD?_iZMb=x$u^FPL#H5=uq$A7dY4uc{58wrL4#6XlDX? zy%YBBnW&FveG+{TGSB*C`tZ_|XMGBNc+ttTK9xSa+~ir`fj)4`vp$W!o?P<@9ZCtl zW_@*yw#KpSp#t#13)iA?1#-+|ibMwdLxTJH&DaS?&PK&9>Yu%gwahbhuWZ=1Z>OA&_p_ zuM^gftUe4WKc;Eu0MDuMUc8-@t>NOIqP-;sbPlEO6ZOH-`JY67dE!3~PpnfB+f)@g zJUEDN(Mzgq{up>+A*>^n--CnqYUPDIghwlHrqsrGFlgTnDlabOt8cqg(IrgZ#ri32 z>cbML59MB_nfjK*VJSerd6~}J6-GoB6}hfE6nS?j^&+Loc}Iep9QP&U7k2Tj+{kt3 z1Ll0)kcvZrh3_Px64LspI6ucL_ssBqF;^#}Ac0>ghZ>{4!Jg_o#9+Yk&bQnJmRm~q z@<B1NMtO^T z9H6`ST$twnTE&SXFVvCD%zTUX7m(eU#D?Rg zRa^lCw3|_h=jhx5n{sCl&9)lZv+{<3qoC1efx$2pW3` z(-P-e)NYjZKBCutA90v^lpT8(@>#>mrrvV*^ifYL4k>QZj5UyF=Y}CA!Sagl zTyQFsQ>mP)lKd6?zEJ*3`MXN~$~(U%KApI79;Bu;1sHT=6EB~uBhaPd5?pNXHAQ{c z&a=+oV}TaTzvKk`9FM0p;dmVui;^WnQ~F2-<ZN_$53pH^Ydkz9=iCrGiO$;CIaC)LVvQ=YQaMj3XOwc70isp8m7>J~BmL;dXkUGR zD#Bykk810^q|mMjm^8^{)it=k7XUV&wE3%H{Ntt<_#%42p0XApo_UEKJm@MT&#b#z zS%?EDl7{+S0 zU6+H%yi8SVw-||CcYCPTWkG7FZg1DU56Gv6png{8V{m#y4{ye6ao8#3?Xip{bD`z9 z@Olei^@!YKblJLA-T7DNV|i4oCYA&hYt27Z7}ii5^HCII%|?k@18QudPQ?|Dyj7>RIbnQd<)i;J4*^Nt*yZ+E=ibruf+1k^JlCHn?G3OJtY*?BL68K*HA z8Tc^zlYCDn86_e51C0}P8M8$K4m=SvLm947Vb0HGc#aC+V5gf1%c@!n1Vtc;C~G>) zk|uV7gYxf|*)mQ`ix>2$ikXR(V5{hdRm{1~F~3nU=RC+RHISpdq~Tl@{n&J@^C+sj zs+c}gC1At`bg1aTiWk%rGQU$s4;4enSY-KEDZta;iPtYj#q8%P zm&m|3ZNMxQJsliF^kh4_H=<)Fp^a_(o$@PY{#KG&6HB=}E-03~#QUSTNdjSyb!xiW zH~8mW%(X>rY{Y61O5FdzLeG*vLo`tOgR`;9GXN|UugfgfVS-bBECY3rQhW${pZlgi$4Vx_dZrybT=K>|pQxE4^kn-GF&}E$j$B z+IB7Mh^rZf9dR}0X4huH&4QZ^H~ZhOH&H(!E50(EWO#Q`H}%jX1-p1Ivj>VZ>Fp-> z{;`P>O`G4p&n`htnpj`x$nBZu{Oyf4hBg zA3TzQo`$n2DUa&T+NQekv&+G(@ra^(6I}Z*3;yTv=MFW&7NHHy7sI)o&gp@Cxq$OB zdceV zS;QLj^L%5xOCE#ZTx8~*pz2@Df+A6usHj2=-ikt43q!f!Bt|_xev`2%0(>xKEqnzE z-y^_hHAKty6fN)9sP}(AMPHZ(JQUGVaE50R$R+yAj*y5@V^-iCls1B;N$O{!NU`I7 zP%p3cx7<#FTE`-oViLO&YxD-Xx=~fnMQ)z$VOf6Qe;<_c5X2H5nqZ-W5y=Cyq3Ij5 z0%>KPptbA6sCY|kH%n}UkBx)oAVdCbeY0>JNA$mgWmlQl$q$}Y)>k#kgeOof%*!3i zXR%u8tX6r;JtA>3BolO*=dm%44N0O;BmuiX01m&@wk)3qZ#m+z>N}BDb~IeHwBzt4-R3^%3T8zklwB7LfMTDsiEtd!=RmWpt6%#|=>m zRzIH9>PZsE$ueD5`5y#9QvCwsAg;hqFn`$FS|h8(f#rdsAlZT*fRWp1Vx3?1egOrbBB|%lDD_jHl=&I!7YKVoB50mn-=bkp?mv-M;@kmg&E&ecu2Je`Whx=h^oO4N9iDe?3SlA$xq8 z{@?YlR`T(a5MUP6z>*Uo2vB7glt5`@Q7G=Xm00B?BqMY#r6JhPRuA`vucGQ8=gE(u z46H^#-Sq0FZhBn~sTpMJ3qq6=9E2CiqM~9XTq9Y@zcn!`0EimXTkLQ%_oG(s$`7E3 zlk3;C)K`{1X>Gs!K+e@blr_8;Vs|i@3bQFV+fV5TD;)-lh6|;`-ZnIXINZA{i-yLhP#+?Q5~QJ#I^(?1 z;pB&}l+|qR-!^dxIzruSQTz!Vb_Fh;dDw|Uwc?jhu)Iv#{60nKurqK)=x|bShdcD6 zbMl|@o1}$tHN#;J$*g~Q_7ZT94eou6ods*fg|aQA0W$VeES`%oHtS;;gJEUt7O#&% zi^^jpmzG^4vuAWbc4c8;Rr7ur`DyK^8V6_-Mh5;lj1o73jY|NDF;@%Y`Xc+QRt%#AlC?#w zVl##soyshNFDY<2<5!QNJ`3Cp6JX)jV97Dij+wEU$Ysl?dHEn5y`G4jkwJOY!SAt% zQn`%GhH!A273+yIwPhEJ&w(k_I6C;6w(KFN_y{4RGSuh}%qaCk8-@-I4Xlv8o-fm> z`57|3Dl@qQ!yg$KY8)Eyg&Kzizbd^P8S4K~h7$&8n2f)JZ_6gY&+Ti6@ZZ5MZ{Y|v z4ha6EbOhk#8x^HGeb<8tr9S#N{FYuppBFwQFKzJeHk2Udf|U08_ZU*iKRi1lpLTf# zq>z8JAT1XECT+F(SATngelsu60{?yk{$;hvzb}4N{Cf_V$g!d7ov%lxfEQZv<0z+e z7-|qYF!O8z_%viUOu5#nr^!f_Zjj2np2Fk09T9>~TySH=v*1%u7MK5vHY9F(gCsP2CK}tI!)AAE%>9xuW$pN<}13)5jeBB zJa8t?AxK*=b_ehz$d5cHxkf<-Hx!o#zZ1U)1o*0+L->mfY_uk?%Kov>TV!nc3No1l z0X-pa4=!*S>+4hCIhS|F&15M5y=7l2A-WS?ei<8NIqXH)|6}8=LL(2SUFCXHs@Q)$ zlr>JVW&+BA^H*4SN1FJM(R^V~P1M&|P+1mKCZV##s}_{?aN2weD%*mR2l}(c3`8fi zoh470-3vD}a0c;Ewj*$%cmhEhk$A06H?QEd8mC|e)hpy-UYiE23!v5HNo?;E4-3bJBZVj;rf68yxOkSiXK!yLtg8<0dM9Jwx$ zq4D}dTO`*1)}N_ArWr5K})5{&f?s`)>9z?;X>u~EYaB}gwz{$oMbO4w@cY#>QcKs># z_*1+txK_NZVwJ?dBLf?;J}rFbb?<{)gX)7=IFoXf>^ns$Cq8~jekR=SaPbjfOwBd| zi~ame72x%?_4t26pX5iI z^N*Rk=8+9t_{Ea_$Jlak*07~{%m`Z!qN;#3#Ka;hmeGqRjeO=KE*X!V;t^$Ym_3ql zGE0YWIhM0`i5ChfSk`8O7M?)u-sTdLCI1TVrQ#lxfgR@8w8i*R;Bs5Q_`aPbUp?B9 zuX&CjPVO|zmsY&V>2MU|AUs`L&YVDRZKJb~)QyxuZlyE0Rt2$yD}$9XD3|x%lU{ET zq25sb68c|K{@L{ZUis(J|G4y9pMA*BlJB+2EobbHvozc#d4?e79ENbuguB7_f>8Nn z6fBIpk-7{_1GQU36#_m}p)s&0CeIk*fDs9mkWBQMlU=GDM&qrIB5|Y4#|Fc8$WoRh zCMr~!iI9>aWGE45TB)Fd3Kh*)WM@onP8y(+N|0r?sJ~XyrVtj)w(5tZx#A0zq-tL< z7fH0FQT1nK!UaIh2r(5w%(Tp9apu={SEU?r&(+7&n503 z<9lUT0LD^m>b8|^H`pLN%_gaZ0>G|f3O<9`EU-#m<>q>#z=~#t2!U;>5PL!)_Ou0c z^lw-#@7(&6mHi5RxK2E6MXHLvjF9MqAFF%zf>*wbc_ZYA988jFuu||s3+5|Od-U#t z7nspfSJ*9slLBa!WPrONL@-c_Q-MMiZ1qo$L|jKY9YAW>l|!z)l6ydGC;AXHfI8A( zp~jLA1c|TB%x5~jK4M;ub(p|HrUT(1$PrDbcS%tqH8@fS$$C*C#evKFnaUwn2_AY| zgSc0s^t$kQ6yA10ds61-3LoNG&4X7f_keT-PV)3y!D7_*;Em9siQm5y7Z4pTX~l+6 z2D4SjRsWbJB0!vrxESZp_KR(2O||tcrzzs~8>~BZq8yT>^zHOLI_JGcK^^W^;eDfg z%!6w}TcKUn=oQ~(;jJ$)pfa=#5#@S?$ifbVuDx{-f7STgfIpn{?0gJ_My5I|^t{!R zyXd7TPhDJhuHwU=%o$1PK#dLLdd1eP&<^a-{SA1K6O?N5u-jTyGr!L;?bp ze=R9D_VO0*P#nOJ+*mdQ#OwXmU_axLJfbx|(Qy-RJ-UWh7~kvbdFW&ho}NccM?9qt z-o?>3&xdguNRSK0_aKAEQ)T|T`t>dB{a;f49;X9Fj)4qe6;kZf2_6m|8rWI>Dev*Zu;61Wf7`0%MSI!m7B zdG|~_esX4ui!xS!=fxOlj$3W|bND8nI_1B@mmn?)`|-wMGxfWTv;u-Bi1*NYjnpj& z>T~(Nt&#d6{buS4I@lEKjjzg08ld-HrT06ck4;^~Xy>XW*xijJdKlE1ZjPNPmBOSmll;_D~i_+FTmdd1<(^qh@)&gXi+je3vI zvHR8xDt+W%B<0d@!_V7Sd;v0`mrU)Z+gZBC zubnXp8R|tLGFbHZj7A>>nERWb_?@f#T|Ys`o7&f(_sPTQGy41UR!!;`pO1<&WI?cO zm6`|8jQWQ=0%*!N^8O4zgmI|38l>N7?6(KxbeBb=0>{ZcMy#UXpQNyUr>MO$fqt;3 z-yYVWt0EV9H2c1o%J8jt2^m_^k7FO7=>0b6J>vAwNPn30Pfno!4p~ql{SVjAApH~D zrC%SrMjzV*r3!_!8ZDb;R97_i%Bu~g7}c0XWB_BFKT6*B=m&Pok0gArR~)=d&s!Tz z)r~!XjpeIjB=J^O@Ypu9zh5(R*8;Ewvqc!ycEj-NFt|!=;7ta6G}aH5>o;$%^<(d} zqVY0cUS)8Qdi{}Cp!cXatm~^5OY#jLI<`qbj~WZtNi~8x$>D z&=QTZu&*sz7ND?F426k6fNcph4?y$t!{t*8^6_Nma8ObzDVYaK=7SQX+my@?jv+=+ zu>e$*#&~SY-w#%NkNlEY9!T={8&?uLLwV-;d)zy}eu2N=&GYMDMUAKS!?pRT55N~Z zkr(JQz+2yeudOx!M~q1{GPhg-Zje9NIdJ%zDudq=7;>P1)rnn0n)x_gOdH(aukOKW zn5^_S+wu&>dIKX1d<}{o0mrhPm(}kQPa=msenGcFD*ve; z_(~7`)1e>O!Y08IL|iXJz4SOF8(dt5Dfn@!Z$ND+lj$;0aA_PLjh7~_hryEBsP}Fx z8-yma?OT+;ekUq{Wrdh4xQAnFBz5wA09c%o?u345$pF>gE&I+a*aMRs?RG5f85XlH z;2pAf2nl0JwX!6oXn(f64pw=3#N%v=cm_D*#j5gbl7~3B0=9lP&RbdpLrq0Xhp^lA z!;{4sOYbG&-7kudS}p0tO(M`+9^}oQJs@-mInj!~sIj)Wgq<$Pb-aXHlyGBn2~KE4 zi@u{7`?K{uULr}sxoy-pURQFu6}^(birz-aSeT!m>%A+jCL}*-LP7*iwAwF{T85J! zY&?maG@?!GcUa9R@ka*Avt-)hD0tODe%abyFQJgE7k!&3A&XNwI4kif#?Zkb!5v1e zq?7q^yG;(bk-=A@9zI-N(-xnfCedJu0$se?uf16fv1+IoqHEqt8(W%l6|l`bSOnz3 z4aOc?3pW2~%EQ=@y&+xCf&B|*CR}Q|{{S2t8TgRXsAdY4;KS)=)Qgc|?X zia`24?fUZh&cJ@S)oVp?Pq^tp4H;4gAj3ZGmI@%zvMUt9q&EToc)NhTD8SXS0J6zJ z{Ch3@aBcjEOHbX1hTaSOM1ntA0`YIYH$B0`+a%^YH`mm=l$dX-0mkDt)oiQ=#e2U% zD7gR2jrB=iZUWUQo5WY&TZ~PR7cF~_mL2nG+2#8@+Vz$2)X?)GJhk+!hi4N#pS!i} zx_xf#rmgTCf@kz$t^YUEx&^!L)4Gmp#Lx5}_i2xK@wGRtf77(2fY7p6?bB{rrS)&n z!u(2rHp|W5{#X^tg$GE}`*uV%-P*|g+Ngow{T7MYE0JZT*8kgJ*J&C-!{^AHXYlvB zaxME~K!2o-OsymID6k*J;H3G;6} zf3N!nRaG>s0S#*u4QsUQ@3m2TP#101D==HM@Qe8MXd}PYM)vJ3@sC2rFSP9K5Uy>q z>esWFI?7i%01#cLWgmfa7=JtWX`_FF+ZZ!3qH427Vid!oHEQ=9_#)|}`a2sH3G|hf z`1{?e62RBD2!45TORfYdd6~8eV?z;|vz+Z(?nTaE$7yMFMoq)bitGx;S0KK|j=yx; zC5W$Nd?n&Bv?%z~r{PWnh(LT5;y1%w!uYDqs^f3}@@XBk;?JbFL7O#;JPWgnfj848 z1s~v4I!zmy@gw>_2hrjfD>(AxT?ot1idyNe zJLdcZz%BIuw14KTi~UFxBhQ&l2%M0De_%2Fv`3JASL_B94$l{{b%3;bigMWh&=>dM zFE$?iqI@sA41G29eMny|ee3DlMBnG*!IrwcV9Qqe4#7A2@OXBd&cS1VX9fN~;gmym znePx3zF_V4xehe?0n4!<|geUWt4w0rze2xM}GU zK0IFLA0zW$R}PqundzhP=ssIzrcqQc0)LfEAT6u+vJU|QDFv$$u@*(BegvH8NCm_h zz6!rNHHcwPVty2^y3&VeR#|%S`|wF>$FVHn{}iY)bVY3yGO*U0o2ezdHj7J;*Y>RjK7_G(ZS$0%J1-Lvo4bzj6|Y`0Z!7)E`}K!q^`HDTnX^V$^mKL z(-4qvsagH&ORnfn0~$a;S|A1G<7F>9W*SsBx>@10o0(L>qzWe01nnfxw4qF@WKt!Q z*2RIAX$4 zX6vr)XyJ@Q3#!lDgJ+~N<(`4oBjH0kkTANN^Y6nLjoXArm~PEkH(NS?zI6T;5Thm4 zuT!EIvgFsKfWF_j?pe$?PJ1xEILPb`lm%woLLxZ9NWoyr6|r(a&y9Wu)S)@2>)pX7 z_j7v=Hn|Qq6*A5~Oyuysp+^Ug4DB3zY-rEH5zeMV&*9(TA>8o`r5rkR(4?T$;4lKb zq_B~{H0a!tiV)a_A47A7M#|p|%&QV=&M674D}5SgTYKPcy`aBp@TP~scz71>A^F6=f=Ab%1VR|Ftt%qYY~FXgVtjX z4Gzmf#Iv3tk*~qB<@P^mp>Mo}mq-iUV8|Ad>&8lHQ<-6~@dq-QzKd|^RnzY+2V~|B zAT)j2@?A;zH-w=+l#lnJ5XB-SKeX@g3qy{zb(UpD;R!Pe`ws6K+H-g>R{bsfp(nJ) z)5k9L4fP#p9=y>#G%~sn48qr^J$QQX#qgq|I5Beq zF3n5$`)B8t66nqND0O^%-NmRYU-*X&=V`(}8~m$8uS;oR_&nqg?jnq?MH;y6ScfMc zqhAnYlppChG$$dUeVCk8$A{GSe%^YhrZ>_g#x@PeBQc1z(f zE`bmEd9YvlxUjx@0OUaWUNa=JmlPPj0$S}b2`L*&bxQg z<+vN${5|+t>~rzu*#T@k&vnk+jYjTLl8Po? zy$|b|bK_1{CF?X-I^IU$j?3|2OJ^5m z4mfB2-dT-pRrP@L%4cMd%~s>`b>-|cep-b6{W%IbXJYg4f^%`d^U5be`v%BLl#IKx zrPKlH7B(VR?`OjP(QjiKu==Arom*1apgC{QQefoZ2yQ0VD;=*1b12f%KN#H{7;V;K zqhFIUe~gsL=rKt>(GmZT4^O2?@>5@!LSg>%U*J!@OdrC*(`P{Ta{ccI@F)SeTbM@+ zn2t^GKE&`am+pjv2B%RRx)%VyguG$kzeV1DICcks51{0W>#pdiK>B0&!@>k(zX3Wa z)xd}Q{4ON#Ly>;4poxxL53akxbvJS`na0o_=a!eHRYtE5n-^gX&+~h3Vqci{|bJQd^3)EPNNeeD@OK#Pd>Zlo(RI*}i2WC+ z?A}qESZml6qk!yAVv=$Ba&E~N9%hztGRZ9C9c2*PU4f){cpg3-(<3Bu`)7?rjv!_m z@rOQCb1zm61^m8xG;?h5$BJvv; zY!Kt9 zrOGw#2s$_Jl9}@e!skb5pdSLn9u31Y-S~iH-X}@)pON%OnF@6BZC3>Alyl>+kr3wL zi%%&Ye%Q`{?`b->+=I|m#W^%I67s0UWie&k6h-0S-orbG93C8;q#Ny~Gz$+u0crjY ze|sp4kiDXR$2QAm;_g0ldVE1bcgKDIf0G{3O*Cz|9~vPu<(mLRE-1V44j|alA!H|c zYkyr>=foj54Ye6}RIghIhVkw5!#X6sl%X?vAsu>Ec4&vOC&CmLlx zkAUls?r{Tfw0CIa=mzJO3#5G*&UF`c%w(&E9PeL(9cje=pdKk4f7$lIo})w0k3iXf zJ%v(?z6?c&8{a3<(5s^>Q5$vvv!zmO(1!Lvi^ioo`h8@CyL_AD0lXQ*gsKGLe*0Fq-M!DQdrmI;fpli0)pX8vXmIp(6k(9VPN-X7X>OW^H;qits% zegPO@DRdNfn#_KOyW{a5vOL;$CQ7f1Z#!+zDDF98tU~)E=Vu&^IBqtAQ*s!Rh@zqP zqWo__6RZ5Ju=3^Wp8^|f73>xm`CNs5%Bqri2Z)cAJ7@3jdJ54+So)V{Zf2TuNk7wf z@<7oMS9z*=Tw%^v{Mk9qpjL>p&y*MiaGz+--nO$K!M!a1nmJ@d!Iyg;XB9lKv$mY| z@LZi;4{vOR726YD46mnQqv+XFp4wlYdJIoF!sNvVb^CGT=h*rqacCqfppUWV=r>G{ z+28UV*y7;Auf5%xm|QNeX`DFmDXZK+u;#2ccb`bcO^B@WFTZ3R#}xkZudNh_9*=Ey z9(NrRZc8)o#BtBA<7D0k=1`5RaI7UX9`^Gal(C;E?yp31J;(oy61&S&cRDxR4+-GR zmOTFNda}~q>0(Y25t-REscItphuJM(rzzlxHtfA_mebi}0tv^28>#U~Ld z`I*OI`uu)>x#zV?JPM@{H&Y~C$HL`iKd*Cc{6$D!c;M>5Av^QT&YRNp+B`fyt9W`8 zf|=(G?8Heq6-@clFY&+}WP=B~A=#9PY#Jw%4Gj2NKV5&wM}`&;dGJo{aj4+>m!N+# z;C3go=XK<5hzJ5{jZSRS1vvk}v?mqxWFQ?4AjH{cN<3{_QAt~o5mwJh+KNs{CbXZAX)o?FLT7uUCjY-cm%2_+ap8V0(dUka zTKi|8%b76$rO@AW{^M-Xf6M$g^OEx)(%y+lPmlQ*IPw-Y|G7>+gruYJlCv}02$}g$ zV;MHJ8;}!AV3hCQV18dP?{7H2$NMhxn*u=pC!OC+v1K{`TFMzyY1bJ#>n; zZpd*MY7@a`^~c38r+-lyH(Ytz%Q){K|HbrL0IDfO8ap?^yAKlo%n<>eyY^Bv;9LyFSP5! z3mBC?{f!x3oil5f9^O%Yq4zr~x&|uX<59Y3(2adK zrP*J}-#5Vzq6BbKYW2pp#jaoSMNRPr4L zoIJ!C$j|lQSm$;~5T`1j*_Hm?&P`VXkW*Ko^HJ~cyw$6P8{XiFE_2@M9rYl2-sitq3xgNm-d7Onps-!Q;2$v5#c zRJ$s=cFuGDV4s~L`vjgrg=(Y@RQPwUIj`cx-txHP<^J8*y`T8$1~)q+6XG;d-&g7HuUJ2byG-Nzr%Il48g^BtqLoKaU(sEOUk=+e z7ebLY5VXiEgSf#+Z?^?rZ7U%g>#Pca_Bmv;M+W528^qn)gB2?TR;d|xsoKVh^JZ)6Ncaj}K>=$dmY@H_HmK+dZ44_2%nvhA|1{~`H7ACHYb ziQReR{rVl|tYazf?NRC#UB|k1Ry_T3z#MrT!TCNUg-L|RAFm6@52E1+oh%8?jSC@_ z3jf%3spbB^I&Z2$E#htCY2ej>!^gAY%>&Rc$~Lr|VF)p!7ULK$9v4L<_aV8zV)x_R z?2YnM^UAgSO}vD;d(;o!cte}o{ZeVyo>}`VyB^12^7D{Szl>T+@qupY{ckE#e;GMi z@EYxbg1~W3n5eKNR#jXlb8x9=K?!*~W+S!+4F0VVvK%7@U~whMjZMx8c*kI8=o7 z99wH_s@}qTPimtoyZ$0?MTtKOYmCXT6Q{!m@b@JC#&ACTG;~=S9JdSS@F%UdH#OqCR#jMR&0$4TThS_ww~NwWY!a$%AYmh z-1zTk1qirc%XM7X7pkO{;_%lJ%nk7}gJ;tREY3SH8mkn)Bv! z6FD@yoa<)*h-{m@d7x$*H+h^J{1`o5uQ(PF>lG4y!RmOcN~(MIQ)ap1D<-oZb8h4h zQ{hfkEn8#lL~`-V)ViB zHA7a@zR@3nE4ah(;x1a(UrJ}az;`a`B|RmJMt}IC5iKxdB|{!fxY5)V0}8)?O@`^E zbJN`%?5+dzW<6PHTUaCP5NcMNaRI$g1(Y5ppst|`7$w;GS+9-GMe~*W%`c*JVN+}L z8Q@)ya`hfo2QbtrP97|T`?+vDePr}wqc8=lFidtg!RK^Wf_#X`| zF~lbFvr;znYTWIM4cRCc{4i_04{ zZsTv*^6gr_Wh;w|+&aPn@@|U@-nB&|K*>hXl2r`f zhF^o7sKtYm}ckhP|V-~!-m;H`d z!S~{2|IOU%kkP|?n(u1#=%zb2@ks5|ezh@uW3+>(>{mN)nvFW08xj#3|9TUwN#tJb z>$0Eu-?>*ibG*0m3uy1Qvv6*D7CNW93;te^>@N5#?7F+)Ic~GV9JRn#?r%-@J^d)t z409}|8SXz!Gk!FMrrC)B5%>R20AiZqPZ?bfv&TpZv&VPm8GEe$zxlT9|B(M5?Jvp} zViJGR-Wdmo>v3*80M6xoiM8*-@w zcu=tBobnU<^bR7vSF(Femci}z%DvCOsAKa6xP|U_UR*Bg#WCm2S-1`4*~8U( zeF8x2@}xD+jm=P|qZ{q^&f^jJx5L*9-o4P(ocEtFQjzzA_FinS7Y8b4J?`ANU)GEL zcuEs_cbIPhLbl^Ka=Lb5+t*nLt)s!1cZ&J z-d`RcPd>lcTN$?(o6zgd!uYN^&ER3re{kPG2HPI#(f5Tf8?V8}$tn6k*Z(n!%v(Cp z;sc_^{B%Q@F8{V7b$4W+Lw6;p$m7oeLbtBvzH>Ph8P5U66&bhi@f^V5{H_9@1DN~Z zyr+mxPkK*H?ho+R=mEX0F8v0t1A1G1FK!9&Y?smRN_~M z^JjfIA2yBAgOv2q-|M1sxM&t0v49sQ@PwN>zm_{T2P6~ITm_^zb>uk-=Xzjs=&sIS z5oe!$^Tymlm7NVA6{6?icXjNiCfJ5(5AC};=BbH&SI2%lh}(s7OBRD@1cqA};TxQh zh`Ty^lgPR06HrtvM-{WiFt${Vd0l&932=`^KA3iZhAQI0!T7zMhzAGn>E6zm^QM2s zJTV{6#{Eaw9WzfiJkLi3_*kOc?%5@`d&)m?-2CaQ zoQ3DjQ~=)m>64p3dn;x=h2H-sXY1$z*7=FWo1L55W%b!B<`6fNV%!OmUl`|N^$7F{ zkD$0%Jt(ThnLPR_sF1xdg{@a$hbL?h7nUuv9{~=fuyLH`^S^mRDn9>)hv_(MfU_2% z?^hXme2N8A37;f;^BwyjhOW;cet7U|^W&}T5IuS{fuHjSP@ORzDlp&E!}niU*#172 zw5RRe+Jk36SYE(a`vZyLy>_lRUGKLWXxs?XK0_}}iP}#vzw5-vFMoOh-zm}d01rG8 zhC3hG&Ad*Gn6%gVv)${*KD_7A6BisLaUv%$4i(fVUmO?5~fL*Az_w;*%F>E;TaO1 zCE*MSKPchZ5}qTWOTzOcJYT{KC7dbYMH0@IaE^p-33DX$N|-O9Pr^$iyi~%=BrKG$ zSi({X%Oot9@Nx+&C7dr|m4pi=td{Uf371HCm4sJI_<0GJNw{3XItf=u*dXCG60VZ4 zS;AHc+azq4aE*j(C0r-r4HAA)!cGZql5m5BnkA&Zn@Lmb;lW@C)_e=PIgx{C2SHd4k_>hDTOSnVApGf$Kgg=+CPr_Xi zJ|^Mg681~DSHdSGd{V*z37?Yi83_+aI4I$>5B%C4P z2PHgP!gC~aNqC-w=Sz5@gfk_)NW$3?&XLe9VUC1e3G*fNNqC8bmr8hrTTN4adwtt#*NT?5rkZw(Ijxgt)z&mOx3r^7?H642tqt`} z^=&n)$i}K|Z(HT6ty#6owW6kRRehaR-`3XB=BjOJYVBxmY+mVF-B8n3FI95x@-h_U z#e7!S-d5ARy0xXP-PPES5q*S zT?d(vXA=garB;TcqpjX*ZgDl$H?_1~PbjQ7Ntt4c#}cfqaZOEoJ?YwAEh}8jEzObR z-CEPwX0>)KU)5+j*3n#7zoM}jjm8kxwKTa_);B{p+Mxn6%oCHTCTtg8a5E*EJDQeb zJjM&EBCT#**<8~OQWts({j9}zdgL0{R<_ln&26sshMH#AwN}R$n$T_|3!(35 zUft13?SdNW;McZ8XVP*sy*Iay=8SPJglIIO^h3J*4xwh^4Rx~CE9^=HhIfi-yePdH2>a%%zExS2r zNgYx@`ANH^(MocaR-)BG&hQ2hR_VAR?-G}FX=v1DS!q^PXf!WLvzA<9Exp95vTXy! zaEa@J)oEd6E(0g6hTO(L2bKm4atdK^WkiB9s1UVf$vS8^4)}tKQqCnzl$wrJ?Jjo5mE-ex z3oiEg!)7Ghm$?=51LPWnnbKJhme`EZoFv&8C|Gf0f5QrxrcahbGasaGgfh|2u#%Er zv%1+6Nfbs=+f)}skD6@;Y2n4WC|fzrVom&M(Nz zbLZvdy1fMjIc}fF=K+%E&&kWl@%r-pKCj2^%gIAlUamKcmh@_Z;(P=Mj` z``vjt{+xoG0+jc9J$X64yqtW$KgaJY@aKDdxw(1yK=XY$K5vdYr@&v3nC@5#x__vE>AeC`}v9*}tp@^bwi zzuWK5$w!_iKR3U?=S2(L9&er-8Tt7Ies2y4a^0Z!dh>HYgWl%4eFfxEkelQ4`F*+W z+?-sG-|I$BUY-{is)tw#a`Jq>+?*U=0b1hrd-DstV43UBr!n%Nnj8;gLl(I?UJu%f z<`=lVlz^uo-|NlIgTPQ2a&-Ir9>zWobh{wWU4RxBxbxh(o}7HQpWJ<3e}NaxK#jS% z5SQ2O@u1f^d467bo*a;%BCjXcje0N)`5rIC30ddlc|AEEw->_q=6e0PU|ax%ybJRE zq|5W<`}`P3kH?)?;Lr82*=R|=2ciTEABHqP*M}POQJVTCa`ET6-R|7{9JDYWW0sSH zcKbZJc@P%5=?2#VG$%hdm(l?W4atYZ^8HW;ROmx`enEi`Me}kCd}xm^7jnx-I)sf@ zdHqlww;Mx-3(~;|`k+5h9CR15EpYpMkRAxpTSy4%3F%Qyb3I-+MlFZ@Fuq=t1DOx% z;d6UE-drCV1~twtKn>8CTz?Ma1hs|sQMbGhAvD7WIruT^K0h=Nl1DYrOLsmR3caJU z=20rX0uLaJA{5pO!vuwaMioHFc~A*doa@ak0JRs?&~tPF`h>RUa zrG|J4kP9{QpgEL9fe%`O;fEYWbul_9o9ja&#tdS!Jh^BwJBQwRAUMn}OdB*N55kAu za1H{1Jke83Ow2;a9d#E#$edv4HKhV|!(4*;VuC=gs0>gQh#?mf3z7hHOk@uv1Fq1D zoLuzHlau4d@L+DC!yb%@7yo72KpY+qM2d0q=F-?;L?Jkc7p4Jn!8|}V<}X<0uoPxC zSkr3Z&y!aGIpycW5Frygv!{db+f_OjynP4Jl9kFrp|0V*oK>lB1QJeKaEI91JNMnveR? zQuG*2g+4)L&}1(xW*&P2>7W`k7YrbBABGC-I3+MUqLJ4#X(gkxTtI#aKyTIx#PEVWrVFNQzUBODAR|EgFW6E&}Er zEEES778)|ecwr=<@{kAEiN(eMqBgb>#sL+=06~-(by#&Y02T$Nl;#G*orm=f_7p-w zelAuH%y7sU#)ZR&xrhPcf(?rfJ%QQIr}0MtI1jX&dEiXZ!_B~CggNHez`oKrnX;VI z0I}df9LU6Ap&poh%qAEW#yPNwXjiTWYd1y;6NFX@A{X-vt;mOjFmc@=h3<2KVoNYF z+;B)BVSsEWR0|`5cA$&UCkz-0!a%@QVW!LagE2(CFp34#U${%~qw>8}a;gcP2k}+l zQlT)U?BR--i*7>aVUDq$plMuOG3QV>dV@I&LcpMbMzR=14Q5aax&c^#p&YPivJAq1 z;lcwP-VppXs2GL_Y6s1PtASzW=wN|?(ZHOBLSe?xYCt%k!93xjjTXTy(B0-5(THxM-(8Aup|lMi+9$!nk#OE8^VOzc_2zS zH*k(2x`!bOADz(2r*!&HL#;9`jufIa*pj1`20L7@wXS&m_c z_k_h7^6_HEVIpCT!a@X7jIN+06c#ZA5995ojzb$USuq)5ynIw(x=S7`6zD8hJ*cF# z977CG1crjk0!J1DfVn}djP;)O3$8a-Y4nx;Dr&?8M%!Sxp)8oGXb#i>>l%GeEY0xF zuq0vgfT9?4v;rN0oW+SC6M8D>EzBBJ6*dOqgKLA5U<=(4{~Xo=o-ewid9v2mE1<@UtVffhenrTMSC|X_^H27zjC|LTT z3{Yr_6vWgYj5uvz4m6VsGp7LjF|?9{49(%5g7yQeC7JXnBghnfkPC>$KET$F= zDO8RV3f+d*V=IV(N0TuTVRkUCShg{4s0j-@?G9G}_^@Js=@~<{pd<7YF`GHLF(i;T zYz}N3WQJ`3-7;ijxF{$rTV7aC%rHdUWN{i{MtHI4V8Mi8f`(8&P+P`~$YLYMWrC(i)DG&7Ns0xOiz9WG>o%5c>K{e|#b}kWYIEXX7XdqfH4(N7+Xyrs z++aO0`_O4BGZqo9<`_nLlo(vd6jKxqE~Yju7KfeAE+JS3whaRTX~}Ga$I1;Gn}%L+ z`qT5l4%-g}6#d0a;0l2mj@1V<42y@%cbH-~EDB~6HjS9+ushIxY+%6*n$6n)5TKY5 zS`8Xl@WY6p37GL{HzkP@7<#%iD8{WZcTNx(*DJU=uoLJzd=6LwZXO{GIw!Q?G+1

}}=F0+dXa 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 F^FPBgR1*LI diff --git a/engines/e_skf.c b/engines/e_skf.c index 776a3e53..9566682d 100644 --- a/engines/e_skf.c +++ b/engines/e_skf.c @@ -62,12 +62,13 @@ #include #include #include -#include "skf/skf.h" +#include +#include #include "e_skf_err.h" -static DEVHANDLE skf_dev_handle = NULL; -static HAPPLICATION skf_app_handle = NULL; -static HCONTAINER skf_container_handle = NULL; +static DEVHANDLE hDev = NULL; +static HAPPLICATION hApp = NULL; +static HCONTAINER hContainer = NULL; static int authkey_set = 0; static unsigned char authkey[16]; @@ -103,6 +104,7 @@ static const ENGINE_CMD_DEFN skf_cmd_defns[] = { {SKF_CMD_OPEN_APP, "OPEN_APP", "Open application with specified name", + ENGINE_CMD_FLAG_STRING}, {SKF_CMD_VERIFY_PIN, "VERIFY_PIN", "Specifies user's PIN of the application to open", @@ -111,14 +113,14 @@ static const ENGINE_CMD_DEFN skf_cmd_defns[] = { "OPEN_CONTAINER", "Open container wtith specified name", ENGINE_CMD_FLAG_STRING}, - {0, NULL, NULL, 0} + {0, NULL, NULL, 0}, }; - int set_authkey(const char *authkey_hex) { - // convert the + ESKFerr(ESKF_F_SET_AUTHKEY, ESKF_R_NOT_IMPLEMENTED); + return 0; } int set_userpin(const char *pin) @@ -127,12 +129,17 @@ int set_userpin(const char *pin) return 0; } strcpy(userpin, pin); + + ESKFerr(ESKF_F_SET_USERPIN, ESKF_R_NOT_IMPLEMENTED); return 0; } int open_dev(const char *devname) { - if ((rv = SKF_ConnectDev(dev, &hDev)) != SAR_OK) { + ULONG rv; + DEVINFO devInfo; + + if ((rv = SKF_ConnectDev(devname, &hDev)) != SAR_OK) { goto end; } @@ -152,6 +159,8 @@ int open_dev(const char *devname) goto end; } + + ESKFerr(ESKF_F_OPEN_DEV, ESKF_R_NOT_IMPLEMENTED); return 0; } @@ -163,6 +172,8 @@ int open_app(const char *appname) if ((rv = SKF_VerifyPIN(hApp, USER_TYPE, pin, &retryCount)) != SAR_OK) { goto end; } + + ESKFerr(ESKF_F_OPEN_APP, ESKF_R_NOT_IMPLEMENTED); return 0; } @@ -177,6 +188,8 @@ int open_container(const char *containername) if (containerType != CONTAINER_TYPE_ECC) { goto end; } + + ESKFerr(ESKF_F_OPEN_CONTAINER, ESKF_R_NOT_IMPLEMENTED); return 0; } @@ -196,6 +209,8 @@ static int skf_engine_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)()) default: break; } + + ESKFerr(ESKF_F_SKF_ENGINE_CTRL, ESKF_R_NOT_IMPLEMENTED); return 0; } @@ -235,22 +250,28 @@ static EVP_PKEY *skf_load_pubkey(ENGINE *e, const char *key_id, if (!(ret = EVP_PKEY_new())) { goto end; } - EVP_PKEY_assign_SM2(ret, ec_key); + //EVP_PKEY_assign_SM2(ret, ec_key); end: EC_KEY_free(ec_key); BN_free(x); BN_free(y) - return ret; + + ESKFerr(ESKF_F_SKF_LOAD_PUBKEY, ESKF_R_NOT_IMPLEMENTED); + return ret; } static int skf_init(ENGINE *e) { + + ESKFerr(ESKF_F_SKF_INIT, ESKF_R_NOT_IMPLEMENTED); return 0; } static int skf_finish(ENGINE *e) -{ +{ + + ESKFerr(ESKF_F_SKF_FINISH, ESKF_R_NOT_IMPLEMENTED); return 0; } @@ -264,7 +285,7 @@ static int skf_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, case NID_ssf33_ecb: ulAlgID = SGD_SSF33_ECB; break; - case NID_ssf33_cbc: + case NID_ssf33_cbc: ulAlgID = SGD_SSF33_CBC; break; case NID_ssf33_cfb128: @@ -307,10 +328,11 @@ static int skf_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, if ((rv = SKF_SetSymmKey(skf_dev_handle, (BYTE *)key, ulAlgID, &(dat->hKey))) != SAR_OK) { - SKFerr(SKF_F_SKF_INIT_KEY, 0); return 0; } + + ESKFerr(ESKF_F_SKF_INIT_KEY, ESKF_R_NOT_IMPLEMENTED); return 1; } @@ -367,6 +389,8 @@ static int skf_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, } + + ESKFerr(ESKF_F_SKF_CIPHER, ESKF_R_NOT_IMPLEMENTED); return 1; } @@ -472,7 +496,9 @@ static int skf_ciphers(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, i return 0; } - return 1; + + ESKFerr(ESKF_F_SKF_CIPHERS, ESKF_R_NOT_IMPLEMENTED); + return 1; } @@ -481,10 +507,11 @@ int skf_rand_bytes(unsigned char *buf, int num) ULONG rv; if ((rv = SKF_GenRandom(hDev, buf, (ULONG)num)) != SAR_OK) { - SKFerr(SKF_F_SKF_RAND_BYTES, skf_err2openssl(rv)); return 0; } + + ESKFerr(ESKF_F_SKF_RAND_BYTES, ESKF_R_NOT_IMPLEMENTED); return 1; } @@ -505,10 +532,11 @@ static int skf_sm3_init(EVP_MD_CTX *ctx) HANDLE hHash; if ((rv = SKF_DigestInit(hDev, SGD_SM3, NULL, NULL, 0, &hHash)) != SAR_OK) { - SKFerr(SKF_F_SM3_INIT, skf_err2openssl(rv)); return 0; } + + ESKFerr(ESKF_F_SKF_SM3_INIT, ESKF_R_NOT_IMPLEMENTED); return 1; } @@ -519,10 +547,11 @@ static int skf_sm3_update(EVP_MD_CTX *ctx, const void *data, size_t count) ULONG ulDataLen = (ULONG)count; if ((rv = SKF_DigestUpdate((HANDLE)ctx->md_data, pbData, ulDataLen)) != SAR_OK) { - SKFerr(SKF_F_SKF_SM3_UPDATE, skf_err2openssl(rv)); return 0; } + + ESKFerr(ESKF_F_SKF_SM3_UPDATE, ESKF_R_NOT_IMPLEMENTED); return 1; } @@ -533,15 +562,15 @@ static int skf_sm3_final(EVP_MD_CTX *ctx, unsigned char *md) ULONG ulHashLen = SM3_DIGEST_LENGTH; if ((rv = SKF_DigestFinal(hHash, pHashData, &ulHashLen)) != SAR_OK) { - SKFerr(SKF_F_SKF_SM3_FINAL, skf_err2openssl(rv)); return 0; } if ((rv = SKF_CloseHandle(hHash)) != SAR_OK) { - SKFerr(SKF_F_SKF_SM3_FINAL, skf_err2openssl(rv)); return 0; } + + ESKFerr(ESKF_F_SKF_SM3_FINAL, ESKF_R_NOT_IMPLEMENTED); return 1; } @@ -580,6 +609,8 @@ static int skf_digests(ENGINE *e, const EVP_MD **digest, const int **nids, int n return 0; } + + ESKFerr(ESKF_F_SKF_DIGESTS, ESKF_R_NOT_IMPLEMENTED); return 1; } @@ -599,6 +630,8 @@ static int skf_rsa_sign(int type, const unsigned char *m, unsigned int mlen, goto end; } + + ESKFerr(ESKF_F_SKF_RSA_SIGN, ESKF_R_NOT_IMPLEMENTED); return 0; } @@ -649,6 +682,8 @@ end: ECDSA_SIG_free(ret); ret = NULL; } + + ESKFerr(ESKF_F_SKF_SM2_DO_SIGN, ESKF_R_NOT_IMPLEMENTED); return ret; } @@ -675,6 +710,7 @@ static ENGINE *engine_skf(void) return NULL; } + return ret; } diff --git a/engines/e_skf.ec b/engines/e_skf.ec index e69de29b..b73176bc 100644 --- a/engines/e_skf.ec +++ b/engines/e_skf.ec @@ -0,0 +1 @@ +L ESKF e_skf_err.h e_skf_err.c diff --git a/engines/e_skf_err.c b/engines/e_skf_err.c index 07c9f7d1..6c0503ec 100644 --- a/engines/e_skf_err.c +++ b/engines/e_skf_err.c @@ -1,146 +1,151 @@ -#include "skf/skf.h" - - - - - - - -static ERR_STRING_DATA SKF_str_functs[] = { - {ERR_FUNC(SKF_F_SKF_INIT_KEY), "SKF_INIT_KEY"}, - {ERR_FUNC(SKF_F_SKF_CIPHER), "SKF_CIPHER"}, - {ERR_FUNC(SKF_F_SKF_INIT), "SKF_INIT"}, - {ERR_FUNC(SKF_F_SKF_CTRL), "SKF_CTRL"}, - {ERR_FUNC(SKF_F_SKF_FINISH), "SKF_FINISH"}, - {0, NULL} -}; - -static ERR_STRING_DATA SKF_str_reasons[] = { - {ERR_REASON(SKF_F_OK), ok"}, - {0, NULL} -}; - - -int skf_err2openssl(int err) -{ - switch (err) { - case SAR_OK: - return SKF_R_SAR_OK; - case SAR_FAIL: - return SKF_R_SAR_FAIL; - case SAR_UNKNOWNERR: - case SAR_NOTSUPPORTYETERR: - case SAR_FILEERR: - case SAR_INVALIDHANDLEERR: - case SAR_INVALIDPARAMERR: - case SAR_READFILEERR: - case SAR_WRITEFILEERR: - case SAR_NAMELENERR: - case SAR_KEYUSAGEERR: - case SAR_MODULUSLENERR: - case SAR_NOTINITIALIZEERR: - case SAR_OBJERR: - case SAR_MEMORYERR: - case SAR_TIMEOUTERR: - case SAR_INDATALENERR - case SAR_INDATAERR - case SAR_GENRANDERR - case SAR_HASHOBJERR - case SAR_HASHERR - case SAR_GENRSAKEYERR - case SAR_RSAMODULUSLENERR - case SAR_CSPIMPRTPUBKEYERR - case SAR_RSAENCERR - case SAR_RSADECERR - case SAR_HASHNOTEQUALERR - case SAR_KEYNOTFOUNTERR - case SAR_CERTNOTFOUNTERR - case SAR_NOTEXPORTERR - case SAR_DECRYPTPADERR - case SAR_MACLENERR - case SAR_BUFFER_TOO_SMALL - case SAR_KEYINFOTYPEERR - case SAR_NOT_EVENTERR - case SAR_DEVICE_REMOVED - case SAR_PIN_INCORRECT - case SAR_PIN_LOCKED - case SAR_PIN_INVALID - case SAR_PIN_LEN_RANGE - case SAR_USER_ALREADY_LOGGED_IN - case SAR_USER_PIN_NOT_INITIALIZED - case SAR_USER_TYPE_INVALID - case SAR_APPLICATION_NAME_INVALID - case SAR_APPLICATION_EXISTS - case SAR_USER_NOT_LOGGED_IN - case SAR_APPLICATION_NOT_EXISTS - case SAR_FILE_ALREADY_EXIST - case SAR_NO_ROOM - case SAR_FILE_NOT_EXIST -} - - - - -typedef struct { - int err_no; - char *err_str; -} skf_errstr[] = { - { SAR_OK, "Success" }, - { SAR_FAIL, "Failure" }, - { SAR_UNKNOWNERR, "Unknown error" }, - { SAR_NOTSUPPORTYETERR, "Not supported" }, - { SAR_FILEERR, "File error" }, - { SAR_INVALIDHANDLEERR, "Invalid handler" }, - { SAR_INVALIDPARAMERR, "Invalid parameter" }, - { SAR_READFILEERR, "Read file error" }, - { SAR_WRITEFILEERR "Write file error" }, - { SAR_NAMELENERR, "Name length error" }, - { SAR_KEYUSAGEERR, "Key usage error" }, - { SAR_MODULUSLENERR, "Modulus length error" }, - { SAR_NOTINITIALIZEERR, "Not initialized" }, - { SAR_OBJERR, "Object error" }, - { SAR_MEMORYERR, "Memory error" }, - { SAR_TIMEOUTERR, "Time out" }, - { SAR_INDATALENERR, "Input data length error" }, - { SAR_INDATAERR, "Input data error" }, - { SAR_GENRANDERR, "Generate randomness error" }, - { SAR_HASHOBJERR, "Hash object error" }, - { SAR_HASHERR, "Hash error" }, - { SAR_GENRSAKEYERR, "Genenerate RSA key error" }, - { SAR_RSAMODULUSLENERR, "RSA modulus length error" }, - { SAR_CSPIMPRTPUBKEYERR, "CSP import public key error" }, - { SAR_RSAENCERR, "RSA encryption error" }, - { SAR_RSADECERR, "RSA decryption error" }, - { SAR_HASHNOTEQUALERR, "Hash not equal" }, - { SAR_KEYNOTFOUNTERR, "Key not found" }, - { SAR_CERTNOTFOUNTERR, "Certificate not found" }, - { SAR_NOTEXPORTERR, "Not exported" }, - { SAR_DECRYPTPADERR, "Decrypt pad error" }, - { SAR_MACLENERR, "MAC length error" }, - { SAR_BUFFER_TOO_SMALL, "Buffer too small" }, - { SAR_KEYINFOTYPEERR, "Key info type error" }, - { SAR_NOT_EVENTERR, "No event error" }, - { SAR_DEVICE_REMOVED "Device removed" }, - { SAR_PIN_INCORRECT, "PIN incorrect" }, - { SAR_PIN_LOCKED, "PIN locked" }, - { SAR_PIN_INVALID, "PIN invalid" }, - { SAR_PIN_LEN_RANGE, "PIN length error" }, - { SAR_USER_ALREADY_LOGGED_IN, "User already logged in" }, - { SAR_USER_PIN_NOT_INITIALIZED, "User PIN not initialized" }, - { SAR_USER_TYPE_INVALID, "User type invalid" }, - { SAR_APPLICATION_NAME_INVALID, "Application name invalid" }, - { SAR_APPLICATION_EXISTS, "Application already exist" }, - { SAR_USER_NOT_LOGGED_IN, "User not logged in" }, - { SAR_APPLICATION_NOT_EXISTS, "Application not exist" }, - { SAR_FILE_ALREADY_EXIST, "File already exist" }, - { SAR_NO_ROOM, "No file space" }, - { SAR_FILE_NOT_EXIST, "File not exist" } -}; - - -LPSTR DEVAPI SKF_GetErrorString(ULONG ulError) -{ - return NULL; -} - - +/* e_skf_err.c */ +/* ==================================================================== + * Copyright (c) 1999-2016 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). + * + */ + +/* + * NOTE: this file was auto generated by the mkerr.pl script: any changes + * made to it will be overwritten when the script next updates this file, + * only reason strings will be preserved. + */ + +#include +#include +#include "e_skf_err.h" + +/* BEGIN ERROR CODES */ +#ifndef OPENSSL_NO_ERR + +# define ERR_FUNC(func) ERR_PACK(0,func,0) +# define ERR_REASON(reason) ERR_PACK(0,0,reason) + +static ERR_STRING_DATA ESKF_str_functs[] = { + {ERR_FUNC(ESKF_F_OPEN_APP), "OPEN_APP"}, + {ERR_FUNC(ESKF_F_OPEN_CONTAINER), "OPEN_CONTAINER"}, + {ERR_FUNC(ESKF_F_OPEN_DEV), "OPEN_DEV"}, + {ERR_FUNC(ESKF_F_SET_AUTHKEY), "SET_AUTHKEY"}, + {ERR_FUNC(ESKF_F_SET_USERPIN), "SET_USERPIN"}, + {ERR_FUNC(ESKF_F_SKF_CIPHER), "SKF_CIPHER"}, + {ERR_FUNC(ESKF_F_SKF_CIPHERS), "SKF_CIPHERS"}, + {ERR_FUNC(ESKF_F_SKF_DIGESTS), "SKF_DIGESTS"}, + {ERR_FUNC(ESKF_F_SKF_ENGINE_CTRL), "SKF_ENGINE_CTRL"}, + {ERR_FUNC(ESKF_F_SKF_FINISH), "SKF_FINISH"}, + {ERR_FUNC(ESKF_F_SKF_INIT), "SKF_INIT"}, + {ERR_FUNC(ESKF_F_SKF_INIT_KEY), "SKF_INIT_KEY"}, + {ERR_FUNC(ESKF_F_SKF_LOAD_PUBKEY), "SKF_LOAD_PUBKEY"}, + {ERR_FUNC(ESKF_F_SKF_RAND_BYTES), "SKF_RAND_BYTES"}, + {ERR_FUNC(ESKF_F_SKF_RSA_SIGN), "SKF_RSA_SIGN"}, + {ERR_FUNC(ESKF_F_SKF_SM2_DO_SIGN), "SKF_SM2_DO_SIGN"}, + {ERR_FUNC(ESKF_F_SKF_SM3_FINAL), "SKF_SM3_FINAL"}, + {ERR_FUNC(ESKF_F_SKF_SM3_INIT), "SKF_SM3_INIT"}, + {ERR_FUNC(ESKF_F_SKF_SM3_UPDATE), "SKF_SM3_UPDATE"}, + {0, NULL} +}; + +static ERR_STRING_DATA ESKF_str_reasons[] = { + {ERR_REASON(ESKF_R_NOT_IMPLEMENTED), "not implemented"}, + {0, NULL} +}; + +#endif + +#ifdef ESKF_LIB_NAME +static ERR_STRING_DATA ESKF_lib_name[] = { + {0, ESKF_LIB_NAME}, + {0, NULL} +}; +#endif + +static int ESKF_lib_error_code = 0; +static int ESKF_error_init = 1; + +static void ERR_load_ESKF_strings(void) +{ + if (ESKF_lib_error_code == 0) + ESKF_lib_error_code = ERR_get_next_error_library(); + + if (ESKF_error_init) { + ESKF_error_init = 0; +#ifndef OPENSSL_NO_ERR + ERR_load_strings(ESKF_lib_error_code, ESKF_str_functs); + ERR_load_strings(ESKF_lib_error_code, ESKF_str_reasons); +#endif + +#ifdef ESKF_LIB_NAME + ESKF_lib_name->error = ERR_PACK(ESKF_lib_error_code, 0, 0); + ERR_load_strings(0, ESKF_lib_name); +#endif + } +} + +static void ERR_unload_ESKF_strings(void) +{ + if (ESKF_error_init == 0) { +#ifndef OPENSSL_NO_ERR + ERR_unload_strings(ESKF_lib_error_code, ESKF_str_functs); + ERR_unload_strings(ESKF_lib_error_code, ESKF_str_reasons); +#endif + +#ifdef ESKF_LIB_NAME + ERR_unload_strings(0, ESKF_lib_name); +#endif + ESKF_error_init = 1; + } +} + +static void ERR_ESKF_error(int function, int reason, char *file, int line) +{ + if (ESKF_lib_error_code == 0) + ESKF_lib_error_code = ERR_get_next_error_library(); + ERR_PUT_error(ESKF_lib_error_code, function, reason, file, line); +} diff --git a/engines/e_skf_err.h b/engines/e_skf_err.h index 41aa37a4..dbe02d0b 100644 --- a/engines/e_skf_err.h +++ b/engines/e_skf_err.h @@ -1,75 +1,96 @@ -#ifndef HEADER_SKF_ERR_H -#define HEADER_SKF_ERR_H +/* engines/e_skf_err.h */ +/* ==================================================================== + * Copyright (c) 2015-2016 The GmSSL 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 GmSSL Project. + * (http://gmssl.org/)" + * + * 4. The name "GmSSL Project" must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact + * guanzhi1980@gmail.com. + * + * 5. Products derived from this software may not be called "GmSSL" + * nor may "GmSSL" appear in their names without prior written + * permission of the GmSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the GmSSL Project + * (http://gmssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE GmSSL 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 GmSSL 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. + * ==================================================================== + * + */ +#ifndef HEADER_E_SKF_ERR_H +#define HEADER_E_SKF_ERR_H #ifdef __cplusplus extern "C" { #endif +/* 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. + */ +static void ERR_load_ESKF_strings(void); +static void ERR_unload_ESKF_strings(void); +static void ERR_ESKF_error(int function, int reason, char *file, int line); +# define ESKFerr(f,r) ERR_ESKF_error((f),(r),__FILE__,__LINE__) -static void ERR_load_SKF_strings(void); -static void ERR_unload_SKF_strings(void); -static void ERR_SKF_error(int function, int reason, char *file, int line); -# define SKFerr(f,r) ERR_SKF_error((f),(r),__FILE__,__LINE__) - - +/* Error codes for the ESKF functions. */ /* Function codes. */ -#define SKF_F_SKF_RAND 100 - +# define ESKF_F_OPEN_APP 100 +# define ESKF_F_OPEN_CONTAINER 101 +# define ESKF_F_OPEN_DEV 102 +# define ESKF_F_SET_AUTHKEY 103 +# define ESKF_F_SET_USERPIN 104 +# define ESKF_F_SKF_CIPHER 105 +# define ESKF_F_SKF_CIPHERS 106 +# define ESKF_F_SKF_DIGESTS 107 +# define ESKF_F_SKF_ENGINE_CTRL 108 +# define ESKF_F_SKF_FINISH 109 +# define ESKF_F_SKF_INIT 110 +# define ESKF_F_SKF_INIT_KEY 111 +# define ESKF_F_SKF_LOAD_PUBKEY 112 +# define ESKF_F_SKF_RAND_BYTES 113 +# define ESKF_F_SKF_RSA_SIGN 114 +# define ESKF_F_SKF_SM2_DO_SIGN 115 +# define ESKF_F_SKF_SM3_FINAL 116 +# define ESKF_F_SKF_SM3_INIT 117 +# define ESKF_F_SKF_SM3_UPDATE 118 /* Reason codes. */ -#define SKF_R_OK 110 -#define SKF_R_FAIL 101 -#define SKF_R_UNKNOWNERR 102 -#define SKF_R_NOTSUPPORTYETERR 103 -#define SKF_R_FILEERR 104 -#define SKF_R_INVALIDHANDLEERR 105 -#define SKF_R_INVALIDPARAMERR 106 -#define SKF_R_READFILEERR 107 -#define SKF_R_WRITEFILEERR 108 -#define SKF_R_NAMELENERR 109 -#define SKF_R_KEYUSAGEERR 110 -#define SKF_R_MODULUSLENERR 111 -#define SKF_R_NOTINITIALIZEERR 112 -#define SKF_R_OBJERR 113 -#define SKF_R_MEMORYERR 114 -#define SKF_R_TIMEOUTERR 115 -#define SKF_R_INDATALENERR 116 -#define SKF_R_INDATAERR 117 -#define SKF_R_GENRANDERR 118 -#define SKF_R_HASHOBJERR 119 -#define SKF_R_HASHERR 120 -#define SKF_R_GENRSAKEYERR 121 -#define SKF_R_RSAMODULUSLENERR 122 -#define SKF_R_CSPIMPRTPUBKEYERR 123 -#define SKF_R_RSAENCERR 124 -#define SKF_R_RSADECERR 125 -#define SKF_R_HASHNOTEQUALERR 126 -#define SKF_R_KEYNOTFOUNTERR 127 -#define SKF_R_CERTNOTFOUNTERR 128 -#define SKF_R_NOTEXPORTERR 129 -#define SKF_R_DECRYPTPADERR 130 -#define SKF_R_MACLENERR 131 -#define SKF_R_BUFFER_TOO_SMALL 132 -#define SKF_R_KEYINFOTYPEERR 133 -#define SKF_R_NOT_EVENTERR 134 -#define SKF_R_DEVICE_REMOVED 135 -#define SKF_R_PIN_INCORRECT 136 -#define SKF_R_PIN_LOCKED 137 -#define SKF_R_PIN_INVALID 138 -#define SKF_R_PIN_LEN_RANGE 139 -#define SKF_R_USER_ALREADY_LOGGED_IN 140 -#define SKF_R_USER_PIN_NOT_INITIALIZED 141 -#define SKF_R_USER_TYPE_INVALID 142 -#define SKF_R_APPLICATION_NAME_INVALID 143 -#define SKF_R_APPLICATION_EXISTS 144 -#define SKF_R_USER_NOT_LOGGED_IN 145 -#define SKF_R_APPLICATION_NOT_EXISTS 146 -#define SKF_R_FILE_ALREADY_EXIST 147 -#define SKF_R_NO_ROOM 148 -#define SKF_R_FILE_NOT_EXIST 149 - +# define ESKF_R_NOT_IMPLEMENTED 100 #ifdef __cplusplus } diff --git a/crypto/skf/skf_dummy.c b/engines/skf/skf_dummy.c old mode 100644 new mode 100755 similarity index 100% rename from crypto/skf/skf_dummy.c rename to engines/skf/skf_dummy.c diff --git a/crypto/skf/skftest.c b/engines/skf/skftest.c similarity index 100% rename from crypto/skf/skftest.c rename to engines/skf/skftest.c diff --git a/include/openssl/ffx.h b/include/openssl/ffx.h deleted file mode 120000 index 1a873d3f..00000000 --- a/include/openssl/ffx.h +++ /dev/null @@ -1 +0,0 @@ -../../crypto/ffx/ffx.h \ No newline at end of file diff --git a/include/openssl/kdf.h b/include/openssl/kdf.h index 65eb0f45..35f04c8b 120000 --- a/include/openssl/kdf.h +++ b/include/openssl/kdf.h @@ -1 +1 @@ -../../crypto/ecies/kdf.h \ No newline at end of file +../../crypto/kdf/kdf.h \ No newline at end of file diff --git a/include/openssl/skf.h b/include/openssl/skf.h new file mode 120000 index 00000000..399e19b4 --- /dev/null +++ b/include/openssl/skf.h @@ -0,0 +1 @@ +../../crypto/skf/skf.h \ No newline at end of file diff --git a/include/openssl/skf_ex.h b/include/openssl/skf_ex.h new file mode 120000 index 00000000..4a9de0ad --- /dev/null +++ b/include/openssl/skf_ex.h @@ -0,0 +1 @@ +../../crypto/skf/skf_ex.h \ No newline at end of file diff --git a/include/openssl/sm9.h b/include/openssl/sm9.h new file mode 120000 index 00000000..e9898a60 --- /dev/null +++ b/include/openssl/sm9.h @@ -0,0 +1 @@ +../../crypto/sm9/sm9.h \ No newline at end of file diff --git a/ssl/Makefile b/ssl/Makefile index 5de3dbba..a9d00618 100644 --- a/ssl/Makefile +++ b/ssl/Makefile @@ -114,13 +114,15 @@ bio_ssl.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h bio_ssl.o: ../include/openssl/e_os2.h ../include/openssl/ec.h bio_ssl.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h bio_ssl.o: ../include/openssl/err.h ../include/openssl/evp.h -bio_ssl.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +bio_ssl.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +bio_ssl.o: ../include/openssl/kdf.h ../include/openssl/kssl.h bio_ssl.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h bio_ssl.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h bio_ssl.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h bio_ssl.o: ../include/openssl/pem.h ../include/openssl/pem2.h bio_ssl.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h bio_ssl.o: ../include/openssl/safestack.h ../include/openssl/sha.h +bio_ssl.o: ../include/openssl/sm2.h ../include/openssl/sm3.h bio_ssl.o: ../include/openssl/srtp.h ../include/openssl/ssl.h bio_ssl.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h bio_ssl.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -132,7 +134,8 @@ d1_both.o: ../include/openssl/crypto.h ../include/openssl/dsa.h d1_both.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h d1_both.o: ../include/openssl/ec.h ../include/openssl/ecdh.h d1_both.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -d1_both.o: ../include/openssl/evp.h ../include/openssl/hmac.h +d1_both.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +d1_both.o: ../include/openssl/hmac.h ../include/openssl/kdf.h d1_both.o: ../include/openssl/kssl.h ../include/openssl/lhash.h d1_both.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h d1_both.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -140,7 +143,8 @@ d1_both.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h d1_both.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h d1_both.o: ../include/openssl/pqueue.h ../include/openssl/rand.h d1_both.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -d1_both.o: ../include/openssl/sha.h ../include/openssl/srtp.h +d1_both.o: ../include/openssl/sha.h ../include/openssl/sm2.h +d1_both.o: ../include/openssl/sm3.h ../include/openssl/srtp.h d1_both.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h d1_both.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h d1_both.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -153,7 +157,8 @@ d1_clnt.o: ../include/openssl/dh.h ../include/openssl/dsa.h d1_clnt.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h d1_clnt.o: ../include/openssl/ec.h ../include/openssl/ecdh.h d1_clnt.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -d1_clnt.o: ../include/openssl/evp.h ../include/openssl/hmac.h +d1_clnt.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +d1_clnt.o: ../include/openssl/hmac.h ../include/openssl/kdf.h d1_clnt.o: ../include/openssl/kssl.h ../include/openssl/lhash.h d1_clnt.o: ../include/openssl/md5.h ../include/openssl/obj_mac.h d1_clnt.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h @@ -162,19 +167,21 @@ d1_clnt.o: ../include/openssl/pem.h ../include/openssl/pem2.h d1_clnt.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h d1_clnt.o: ../include/openssl/rand.h ../include/openssl/rsa.h d1_clnt.o: ../include/openssl/safestack.h ../include/openssl/sha.h +d1_clnt.o: ../include/openssl/sm2.h ../include/openssl/sm3.h d1_clnt.o: ../include/openssl/srtp.h ../include/openssl/ssl.h d1_clnt.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h d1_clnt.o: ../include/openssl/ssl3.h ../include/openssl/stack.h d1_clnt.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h d1_clnt.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h d1_clnt.c -d1_clnt.o: kssl_lcl.h ssl_locl.h +d1_clnt.o: ssl_locl.h d1_lib.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h d1_lib.o: ../include/openssl/buffer.h ../include/openssl/comp.h d1_lib.o: ../include/openssl/crypto.h ../include/openssl/dsa.h d1_lib.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h d1_lib.o: ../include/openssl/ec.h ../include/openssl/ecdh.h d1_lib.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -d1_lib.o: ../include/openssl/evp.h ../include/openssl/hmac.h +d1_lib.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +d1_lib.o: ../include/openssl/hmac.h ../include/openssl/kdf.h d1_lib.o: ../include/openssl/kssl.h ../include/openssl/lhash.h d1_lib.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h d1_lib.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -182,6 +189,7 @@ d1_lib.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h d1_lib.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h d1_lib.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h d1_lib.o: ../include/openssl/safestack.h ../include/openssl/sha.h +d1_lib.o: ../include/openssl/sm2.h ../include/openssl/sm3.h d1_lib.o: ../include/openssl/srtp.h ../include/openssl/ssl.h d1_lib.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h d1_lib.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -194,7 +202,8 @@ d1_meth.o: ../include/openssl/crypto.h ../include/openssl/dsa.h d1_meth.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h d1_meth.o: ../include/openssl/ec.h ../include/openssl/ecdh.h d1_meth.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -d1_meth.o: ../include/openssl/evp.h ../include/openssl/hmac.h +d1_meth.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +d1_meth.o: ../include/openssl/hmac.h ../include/openssl/kdf.h d1_meth.o: ../include/openssl/kssl.h ../include/openssl/lhash.h d1_meth.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h d1_meth.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -202,6 +211,7 @@ d1_meth.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h d1_meth.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h d1_meth.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h d1_meth.o: ../include/openssl/safestack.h ../include/openssl/sha.h +d1_meth.o: ../include/openssl/sm2.h ../include/openssl/sm3.h d1_meth.o: ../include/openssl/srtp.h ../include/openssl/ssl.h d1_meth.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h d1_meth.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -214,7 +224,8 @@ d1_pkt.o: ../include/openssl/crypto.h ../include/openssl/dsa.h d1_pkt.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h d1_pkt.o: ../include/openssl/ec.h ../include/openssl/ecdh.h d1_pkt.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -d1_pkt.o: ../include/openssl/evp.h ../include/openssl/hmac.h +d1_pkt.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +d1_pkt.o: ../include/openssl/hmac.h ../include/openssl/kdf.h d1_pkt.o: ../include/openssl/kssl.h ../include/openssl/lhash.h d1_pkt.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h d1_pkt.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -222,7 +233,8 @@ d1_pkt.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h d1_pkt.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h d1_pkt.o: ../include/openssl/pqueue.h ../include/openssl/rand.h d1_pkt.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -d1_pkt.o: ../include/openssl/sha.h ../include/openssl/srtp.h +d1_pkt.o: ../include/openssl/sha.h ../include/openssl/sm2.h +d1_pkt.o: ../include/openssl/sm3.h ../include/openssl/srtp.h d1_pkt.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h d1_pkt.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h d1_pkt.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -234,7 +246,8 @@ d1_srtp.o: ../include/openssl/crypto.h ../include/openssl/dsa.h d1_srtp.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h d1_srtp.o: ../include/openssl/ec.h ../include/openssl/ecdh.h d1_srtp.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -d1_srtp.o: ../include/openssl/evp.h ../include/openssl/hmac.h +d1_srtp.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +d1_srtp.o: ../include/openssl/hmac.h ../include/openssl/kdf.h d1_srtp.o: ../include/openssl/kssl.h ../include/openssl/lhash.h d1_srtp.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h d1_srtp.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -242,6 +255,7 @@ d1_srtp.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h d1_srtp.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h d1_srtp.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h d1_srtp.o: ../include/openssl/safestack.h ../include/openssl/sha.h +d1_srtp.o: ../include/openssl/sm2.h ../include/openssl/sm3.h d1_srtp.o: ../include/openssl/srtp.h ../include/openssl/ssl.h d1_srtp.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h d1_srtp.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -255,7 +269,8 @@ d1_srvr.o: ../include/openssl/dh.h ../include/openssl/dsa.h d1_srvr.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h d1_srvr.o: ../include/openssl/ec.h ../include/openssl/ecdh.h d1_srvr.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -d1_srvr.o: ../include/openssl/evp.h ../include/openssl/hmac.h +d1_srvr.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +d1_srvr.o: ../include/openssl/hmac.h ../include/openssl/kdf.h d1_srvr.o: ../include/openssl/kssl.h ../include/openssl/lhash.h d1_srvr.o: ../include/openssl/md5.h ../include/openssl/obj_mac.h d1_srvr.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h @@ -264,38 +279,152 @@ d1_srvr.o: ../include/openssl/pem.h ../include/openssl/pem2.h d1_srvr.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h d1_srvr.o: ../include/openssl/rand.h ../include/openssl/rsa.h d1_srvr.o: ../include/openssl/safestack.h ../include/openssl/sha.h +d1_srvr.o: ../include/openssl/sm2.h ../include/openssl/sm3.h d1_srvr.o: ../include/openssl/srtp.h ../include/openssl/ssl.h d1_srvr.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h d1_srvr.o: ../include/openssl/ssl3.h ../include/openssl/stack.h d1_srvr.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h d1_srvr.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h d1_srvr.c d1_srvr.o: ssl_locl.h +gm_clnt.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h +gm_clnt.o: ../include/openssl/buffer.h ../include/openssl/comp.h +gm_clnt.o: ../include/openssl/crypto.h ../include/openssl/dsa.h +gm_clnt.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h +gm_clnt.o: ../include/openssl/ec.h ../include/openssl/ecdh.h +gm_clnt.o: ../include/openssl/ecdsa.h ../include/openssl/err.h +gm_clnt.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +gm_clnt.o: ../include/openssl/hmac.h ../include/openssl/kdf.h +gm_clnt.o: ../include/openssl/kssl.h ../include/openssl/lhash.h +gm_clnt.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +gm_clnt.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +gm_clnt.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +gm_clnt.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +gm_clnt.o: ../include/openssl/pqueue.h ../include/openssl/rand.h +gm_clnt.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +gm_clnt.o: ../include/openssl/sha.h ../include/openssl/sm2.h +gm_clnt.o: ../include/openssl/sm3.h ../include/openssl/srtp.h +gm_clnt.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h +gm_clnt.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h +gm_clnt.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +gm_clnt.o: ../include/openssl/tls1.h ../include/openssl/x509.h +gm_clnt.o: ../include/openssl/x509_vfy.h gm_clnt.c ssl_locl.h +gm_enc.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h +gm_enc.o: ../include/openssl/buffer.h ../include/openssl/comp.h +gm_enc.o: ../include/openssl/crypto.h ../include/openssl/dsa.h +gm_enc.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h +gm_enc.o: ../include/openssl/ec.h ../include/openssl/ecdh.h +gm_enc.o: ../include/openssl/ecdsa.h ../include/openssl/err.h +gm_enc.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +gm_enc.o: ../include/openssl/hmac.h ../include/openssl/kdf.h +gm_enc.o: ../include/openssl/kssl.h ../include/openssl/lhash.h +gm_enc.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +gm_enc.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +gm_enc.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +gm_enc.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +gm_enc.o: ../include/openssl/pqueue.h ../include/openssl/rand.h +gm_enc.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +gm_enc.o: ../include/openssl/sha.h ../include/openssl/sm2.h +gm_enc.o: ../include/openssl/sm3.h ../include/openssl/srtp.h +gm_enc.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h +gm_enc.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h +gm_enc.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +gm_enc.o: ../include/openssl/tls1.h ../include/openssl/x509.h +gm_enc.o: ../include/openssl/x509_vfy.h gm_enc.c ssl_locl.h +gm_lib.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h +gm_lib.o: ../include/openssl/buffer.h ../include/openssl/comp.h +gm_lib.o: ../include/openssl/crypto.h ../include/openssl/dsa.h +gm_lib.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h +gm_lib.o: ../include/openssl/ec.h ../include/openssl/ecdh.h +gm_lib.o: ../include/openssl/ecdsa.h ../include/openssl/err.h +gm_lib.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +gm_lib.o: ../include/openssl/hmac.h ../include/openssl/kdf.h +gm_lib.o: ../include/openssl/kssl.h ../include/openssl/lhash.h +gm_lib.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +gm_lib.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +gm_lib.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +gm_lib.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +gm_lib.o: ../include/openssl/pqueue.h ../include/openssl/rand.h +gm_lib.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +gm_lib.o: ../include/openssl/sha.h ../include/openssl/sm2.h +gm_lib.o: ../include/openssl/sm3.h ../include/openssl/srtp.h +gm_lib.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h +gm_lib.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h +gm_lib.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +gm_lib.o: ../include/openssl/tls1.h ../include/openssl/x509.h +gm_lib.o: ../include/openssl/x509_vfy.h gm_lib.c ssl_locl.h +gm_meth.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h +gm_meth.o: ../include/openssl/buffer.h ../include/openssl/comp.h +gm_meth.o: ../include/openssl/crypto.h ../include/openssl/dsa.h +gm_meth.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h +gm_meth.o: ../include/openssl/ec.h ../include/openssl/ecdh.h +gm_meth.o: ../include/openssl/ecdsa.h ../include/openssl/err.h +gm_meth.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +gm_meth.o: ../include/openssl/hmac.h ../include/openssl/kdf.h +gm_meth.o: ../include/openssl/kssl.h ../include/openssl/lhash.h +gm_meth.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +gm_meth.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +gm_meth.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +gm_meth.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +gm_meth.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h +gm_meth.o: ../include/openssl/safestack.h ../include/openssl/sha.h +gm_meth.o: ../include/openssl/sm2.h ../include/openssl/sm3.h +gm_meth.o: ../include/openssl/srtp.h ../include/openssl/ssl.h +gm_meth.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h +gm_meth.o: ../include/openssl/ssl3.h ../include/openssl/stack.h +gm_meth.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h +gm_meth.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h gm_meth.c +gm_meth.o: ssl_locl.h +gm_srvr.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h +gm_srvr.o: ../include/openssl/buffer.h ../include/openssl/comp.h +gm_srvr.o: ../include/openssl/crypto.h ../include/openssl/dsa.h +gm_srvr.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h +gm_srvr.o: ../include/openssl/ec.h ../include/openssl/ecdh.h +gm_srvr.o: ../include/openssl/ecdsa.h ../include/openssl/err.h +gm_srvr.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +gm_srvr.o: ../include/openssl/hmac.h ../include/openssl/kdf.h +gm_srvr.o: ../include/openssl/kssl.h ../include/openssl/lhash.h +gm_srvr.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +gm_srvr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +gm_srvr.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +gm_srvr.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +gm_srvr.o: ../include/openssl/pqueue.h ../include/openssl/rand.h +gm_srvr.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +gm_srvr.o: ../include/openssl/sha.h ../include/openssl/sm2.h +gm_srvr.o: ../include/openssl/sm3.h ../include/openssl/srtp.h +gm_srvr.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h +gm_srvr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h +gm_srvr.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +gm_srvr.o: ../include/openssl/tls1.h ../include/openssl/x509.h +gm_srvr.o: ../include/openssl/x509_vfy.h gm_srvr.c ssl_locl.h kssl.o: ../include/openssl/asn1.h ../include/openssl/bio.h kssl.o: ../include/openssl/buffer.h ../include/openssl/comp.h kssl.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h kssl.o: ../include/openssl/e_os2.h ../include/openssl/ec.h kssl.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h -kssl.o: ../include/openssl/evp.h ../include/openssl/hmac.h -kssl.o: ../include/openssl/krb5_asn.h ../include/openssl/kssl.h -kssl.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -kssl.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h -kssl.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -kssl.o: ../include/openssl/pem.h ../include/openssl/pem2.h -kssl.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h -kssl.o: ../include/openssl/safestack.h ../include/openssl/sha.h -kssl.o: ../include/openssl/srtp.h ../include/openssl/ssl.h -kssl.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h -kssl.o: ../include/openssl/ssl3.h ../include/openssl/stack.h -kssl.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h -kssl.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h kssl.c -kssl.o: kssl_lcl.h +kssl.o: ../include/openssl/err.h ../include/openssl/evp.h +kssl.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +kssl.o: ../include/openssl/kdf.h ../include/openssl/krb5_asn.h +kssl.o: ../include/openssl/kssl.h ../include/openssl/lhash.h +kssl.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +kssl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +kssl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +kssl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +kssl.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h +kssl.o: ../include/openssl/sha.h ../include/openssl/sm2.h +kssl.o: ../include/openssl/sm3.h ../include/openssl/srtp.h +kssl.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h +kssl.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h +kssl.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +kssl.o: ../include/openssl/tls1.h ../include/openssl/x509.h +kssl.o: ../include/openssl/x509_vfy.h kssl.c kssl_lcl.h s23_clnt.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h s23_clnt.o: ../include/openssl/buffer.h ../include/openssl/comp.h s23_clnt.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s23_clnt.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s23_clnt.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s23_clnt.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s23_clnt.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s23_clnt.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s23_clnt.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s23_clnt.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s23_clnt.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s23_clnt.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -303,7 +432,8 @@ s23_clnt.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s23_clnt.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s23_clnt.o: ../include/openssl/pqueue.h ../include/openssl/rand.h s23_clnt.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -s23_clnt.o: ../include/openssl/sha.h ../include/openssl/srtp.h +s23_clnt.o: ../include/openssl/sha.h ../include/openssl/sm2.h +s23_clnt.o: ../include/openssl/sm3.h ../include/openssl/srtp.h s23_clnt.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h s23_clnt.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h s23_clnt.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -315,7 +445,8 @@ s23_lib.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s23_lib.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s23_lib.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s23_lib.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s23_lib.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s23_lib.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s23_lib.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s23_lib.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s23_lib.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s23_lib.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -323,6 +454,7 @@ s23_lib.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s23_lib.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s23_lib.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h s23_lib.o: ../include/openssl/safestack.h ../include/openssl/sha.h +s23_lib.o: ../include/openssl/sm2.h ../include/openssl/sm3.h s23_lib.o: ../include/openssl/srtp.h ../include/openssl/ssl.h s23_lib.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h s23_lib.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -335,7 +467,8 @@ s23_meth.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s23_meth.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s23_meth.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s23_meth.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s23_meth.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s23_meth.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s23_meth.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s23_meth.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s23_meth.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s23_meth.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -343,6 +476,7 @@ s23_meth.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s23_meth.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s23_meth.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h s23_meth.o: ../include/openssl/safestack.h ../include/openssl/sha.h +s23_meth.o: ../include/openssl/sm2.h ../include/openssl/sm3.h s23_meth.o: ../include/openssl/srtp.h ../include/openssl/ssl.h s23_meth.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h s23_meth.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -355,7 +489,8 @@ s23_pkt.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s23_pkt.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s23_pkt.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s23_pkt.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s23_pkt.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s23_pkt.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s23_pkt.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s23_pkt.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s23_pkt.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s23_pkt.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -363,6 +498,7 @@ s23_pkt.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s23_pkt.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s23_pkt.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h s23_pkt.o: ../include/openssl/safestack.h ../include/openssl/sha.h +s23_pkt.o: ../include/openssl/sm2.h ../include/openssl/sm3.h s23_pkt.o: ../include/openssl/srtp.h ../include/openssl/ssl.h s23_pkt.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h s23_pkt.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -375,7 +511,8 @@ s23_srvr.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s23_srvr.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s23_srvr.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s23_srvr.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s23_srvr.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s23_srvr.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s23_srvr.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s23_srvr.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s23_srvr.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s23_srvr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -383,7 +520,8 @@ s23_srvr.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s23_srvr.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s23_srvr.o: ../include/openssl/pqueue.h ../include/openssl/rand.h s23_srvr.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -s23_srvr.o: ../include/openssl/sha.h ../include/openssl/srtp.h +s23_srvr.o: ../include/openssl/sha.h ../include/openssl/sm2.h +s23_srvr.o: ../include/openssl/sm3.h ../include/openssl/srtp.h s23_srvr.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h s23_srvr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h s23_srvr.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -395,7 +533,8 @@ s2_clnt.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s2_clnt.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s2_clnt.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s2_clnt.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s2_clnt.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s2_clnt.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s2_clnt.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s2_clnt.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s2_clnt.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s2_clnt.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -403,7 +542,8 @@ s2_clnt.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s2_clnt.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s2_clnt.o: ../include/openssl/pqueue.h ../include/openssl/rand.h s2_clnt.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -s2_clnt.o: ../include/openssl/sha.h ../include/openssl/srtp.h +s2_clnt.o: ../include/openssl/sha.h ../include/openssl/sm2.h +s2_clnt.o: ../include/openssl/sm3.h ../include/openssl/srtp.h s2_clnt.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h s2_clnt.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h s2_clnt.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -415,7 +555,8 @@ s2_enc.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s2_enc.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s2_enc.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s2_enc.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s2_enc.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s2_enc.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s2_enc.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s2_enc.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s2_enc.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s2_enc.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -423,6 +564,7 @@ s2_enc.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s2_enc.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s2_enc.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h s2_enc.o: ../include/openssl/safestack.h ../include/openssl/sha.h +s2_enc.o: ../include/openssl/sm2.h ../include/openssl/sm3.h s2_enc.o: ../include/openssl/srtp.h ../include/openssl/ssl.h s2_enc.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h s2_enc.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -435,7 +577,8 @@ s2_lib.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s2_lib.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s2_lib.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s2_lib.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s2_lib.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s2_lib.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s2_lib.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s2_lib.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s2_lib.o: ../include/openssl/md5.h ../include/openssl/obj_mac.h s2_lib.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h @@ -443,7 +586,8 @@ s2_lib.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h s2_lib.o: ../include/openssl/pem.h ../include/openssl/pem2.h s2_lib.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h s2_lib.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -s2_lib.o: ../include/openssl/sha.h ../include/openssl/srtp.h +s2_lib.o: ../include/openssl/sha.h ../include/openssl/sm2.h +s2_lib.o: ../include/openssl/sm3.h ../include/openssl/srtp.h s2_lib.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h s2_lib.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h s2_lib.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -455,7 +599,8 @@ s2_meth.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s2_meth.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s2_meth.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s2_meth.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s2_meth.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s2_meth.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s2_meth.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s2_meth.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s2_meth.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s2_meth.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -463,6 +608,7 @@ s2_meth.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s2_meth.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s2_meth.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h s2_meth.o: ../include/openssl/safestack.h ../include/openssl/sha.h +s2_meth.o: ../include/openssl/sm2.h ../include/openssl/sm3.h s2_meth.o: ../include/openssl/srtp.h ../include/openssl/ssl.h s2_meth.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h s2_meth.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -475,7 +621,8 @@ s2_pkt.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s2_pkt.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s2_pkt.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s2_pkt.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s2_pkt.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s2_pkt.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s2_pkt.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s2_pkt.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s2_pkt.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s2_pkt.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -483,6 +630,7 @@ s2_pkt.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s2_pkt.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s2_pkt.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h s2_pkt.o: ../include/openssl/safestack.h ../include/openssl/sha.h +s2_pkt.o: ../include/openssl/sm2.h ../include/openssl/sm3.h s2_pkt.o: ../include/openssl/srtp.h ../include/openssl/ssl.h s2_pkt.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h s2_pkt.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -496,7 +644,8 @@ s2_srvr.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h s2_srvr.o: ../include/openssl/e_os2.h ../include/openssl/ec.h s2_srvr.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h s2_srvr.o: ../include/openssl/err.h ../include/openssl/evp.h -s2_srvr.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +s2_srvr.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +s2_srvr.o: ../include/openssl/kdf.h ../include/openssl/kssl.h s2_srvr.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h s2_srvr.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h s2_srvr.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h @@ -504,6 +653,7 @@ s2_srvr.o: ../include/openssl/pem.h ../include/openssl/pem2.h s2_srvr.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h s2_srvr.o: ../include/openssl/rand.h ../include/openssl/rsa.h s2_srvr.o: ../include/openssl/safestack.h ../include/openssl/sha.h +s2_srvr.o: ../include/openssl/sm2.h ../include/openssl/sm3.h s2_srvr.o: ../include/openssl/srtp.h ../include/openssl/ssl.h s2_srvr.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h s2_srvr.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -516,7 +666,8 @@ s3_both.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s3_both.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s3_both.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s3_both.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s3_both.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s3_both.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s3_both.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s3_both.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s3_both.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s3_both.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -524,7 +675,8 @@ s3_both.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s3_both.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s3_both.o: ../include/openssl/pqueue.h ../include/openssl/rand.h s3_both.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -s3_both.o: ../include/openssl/sha.h ../include/openssl/srtp.h +s3_both.o: ../include/openssl/sha.h ../include/openssl/sm2.h +s3_both.o: ../include/openssl/sm3.h ../include/openssl/srtp.h s3_both.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h s3_both.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h s3_both.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -537,7 +689,8 @@ s3_cbc.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h s3_cbc.o: ../include/openssl/e_os2.h ../include/openssl/ec.h s3_cbc.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h s3_cbc.o: ../include/openssl/err.h ../include/openssl/evp.h -s3_cbc.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +s3_cbc.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +s3_cbc.o: ../include/openssl/kdf.h ../include/openssl/kssl.h s3_cbc.o: ../include/openssl/lhash.h ../include/openssl/md5.h s3_cbc.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s3_cbc.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -545,6 +698,7 @@ s3_cbc.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s3_cbc.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s3_cbc.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h s3_cbc.o: ../include/openssl/safestack.h ../include/openssl/sha.h +s3_cbc.o: ../include/openssl/sm2.h ../include/openssl/sm3.h s3_cbc.o: ../include/openssl/srtp.h ../include/openssl/ssl.h s3_cbc.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h s3_cbc.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -559,7 +713,8 @@ s3_clnt.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s3_clnt.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s3_clnt.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h s3_clnt.o: ../include/openssl/err.h ../include/openssl/evp.h -s3_clnt.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +s3_clnt.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +s3_clnt.o: ../include/openssl/kdf.h ../include/openssl/kssl.h s3_clnt.o: ../include/openssl/lhash.h ../include/openssl/md5.h s3_clnt.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s3_clnt.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -567,7 +722,8 @@ s3_clnt.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s3_clnt.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s3_clnt.o: ../include/openssl/pqueue.h ../include/openssl/rand.h s3_clnt.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -s3_clnt.o: ../include/openssl/sha.h ../include/openssl/srtp.h +s3_clnt.o: ../include/openssl/sha.h ../include/openssl/sm2.h +s3_clnt.o: ../include/openssl/sm3.h ../include/openssl/srtp.h s3_clnt.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h s3_clnt.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h s3_clnt.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -579,7 +735,8 @@ s3_enc.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s3_enc.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s3_enc.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s3_enc.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s3_enc.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s3_enc.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s3_enc.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s3_enc.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s3_enc.o: ../include/openssl/md5.h ../include/openssl/obj_mac.h s3_enc.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h @@ -587,7 +744,8 @@ s3_enc.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h s3_enc.o: ../include/openssl/pem.h ../include/openssl/pem2.h s3_enc.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h s3_enc.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -s3_enc.o: ../include/openssl/sha.h ../include/openssl/srtp.h +s3_enc.o: ../include/openssl/sha.h ../include/openssl/sm2.h +s3_enc.o: ../include/openssl/sm3.h ../include/openssl/srtp.h s3_enc.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h s3_enc.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h s3_enc.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -600,7 +758,8 @@ s3_lib.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h s3_lib.o: ../include/openssl/e_os2.h ../include/openssl/ec.h s3_lib.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h s3_lib.o: ../include/openssl/err.h ../include/openssl/evp.h -s3_lib.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +s3_lib.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +s3_lib.o: ../include/openssl/kdf.h ../include/openssl/kssl.h s3_lib.o: ../include/openssl/lhash.h ../include/openssl/md5.h s3_lib.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s3_lib.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -608,6 +767,7 @@ s3_lib.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s3_lib.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s3_lib.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h s3_lib.o: ../include/openssl/safestack.h ../include/openssl/sha.h +s3_lib.o: ../include/openssl/sm2.h ../include/openssl/sm3.h s3_lib.o: ../include/openssl/srtp.h ../include/openssl/ssl.h s3_lib.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h s3_lib.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -620,7 +780,8 @@ s3_meth.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s3_meth.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s3_meth.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s3_meth.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s3_meth.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s3_meth.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s3_meth.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s3_meth.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s3_meth.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s3_meth.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -628,6 +789,7 @@ s3_meth.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s3_meth.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s3_meth.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h s3_meth.o: ../include/openssl/safestack.h ../include/openssl/sha.h +s3_meth.o: ../include/openssl/sm2.h ../include/openssl/sm3.h s3_meth.o: ../include/openssl/srtp.h ../include/openssl/ssl.h s3_meth.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h s3_meth.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -640,7 +802,8 @@ s3_pkt.o: ../include/openssl/crypto.h ../include/openssl/dsa.h s3_pkt.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h s3_pkt.o: ../include/openssl/ec.h ../include/openssl/ecdh.h s3_pkt.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -s3_pkt.o: ../include/openssl/evp.h ../include/openssl/hmac.h +s3_pkt.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +s3_pkt.o: ../include/openssl/hmac.h ../include/openssl/kdf.h s3_pkt.o: ../include/openssl/kssl.h ../include/openssl/lhash.h s3_pkt.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h s3_pkt.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -648,7 +811,8 @@ s3_pkt.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h s3_pkt.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h s3_pkt.o: ../include/openssl/pqueue.h ../include/openssl/rand.h s3_pkt.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -s3_pkt.o: ../include/openssl/sha.h ../include/openssl/srtp.h +s3_pkt.o: ../include/openssl/sha.h ../include/openssl/sm2.h +s3_pkt.o: ../include/openssl/sm3.h ../include/openssl/srtp.h s3_pkt.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h s3_pkt.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h s3_pkt.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -662,28 +826,30 @@ s3_srvr.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h s3_srvr.o: ../include/openssl/e_os2.h ../include/openssl/ec.h s3_srvr.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h s3_srvr.o: ../include/openssl/err.h ../include/openssl/evp.h -s3_srvr.o: ../include/openssl/hmac.h ../include/openssl/krb5_asn.h -s3_srvr.o: ../include/openssl/kssl.h ../include/openssl/lhash.h -s3_srvr.o: ../include/openssl/md5.h ../include/openssl/obj_mac.h -s3_srvr.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h -s3_srvr.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -s3_srvr.o: ../include/openssl/pem.h ../include/openssl/pem2.h -s3_srvr.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h -s3_srvr.o: ../include/openssl/rand.h ../include/openssl/rsa.h -s3_srvr.o: ../include/openssl/safestack.h ../include/openssl/sha.h -s3_srvr.o: ../include/openssl/srtp.h ../include/openssl/ssl.h -s3_srvr.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h -s3_srvr.o: ../include/openssl/ssl3.h ../include/openssl/stack.h -s3_srvr.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h -s3_srvr.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h kssl_lcl.h -s3_srvr.o: s3_srvr.c ssl_locl.h +s3_srvr.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +s3_srvr.o: ../include/openssl/kdf.h ../include/openssl/kssl.h +s3_srvr.o: ../include/openssl/lhash.h ../include/openssl/md5.h +s3_srvr.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +s3_srvr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +s3_srvr.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h +s3_srvr.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h +s3_srvr.o: ../include/openssl/pqueue.h ../include/openssl/rand.h +s3_srvr.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +s3_srvr.o: ../include/openssl/sha.h ../include/openssl/sm2.h +s3_srvr.o: ../include/openssl/sm3.h ../include/openssl/srtp.h +s3_srvr.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h +s3_srvr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h +s3_srvr.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +s3_srvr.o: ../include/openssl/tls1.h ../include/openssl/x509.h +s3_srvr.o: ../include/openssl/x509_vfy.h kssl_lcl.h s3_srvr.c ssl_locl.h ssl_algs.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h ssl_algs.o: ../include/openssl/buffer.h ../include/openssl/comp.h ssl_algs.o: ../include/openssl/crypto.h ../include/openssl/dsa.h ssl_algs.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h ssl_algs.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ssl_algs.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -ssl_algs.o: ../include/openssl/evp.h ../include/openssl/hmac.h +ssl_algs.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +ssl_algs.o: ../include/openssl/hmac.h ../include/openssl/kdf.h ssl_algs.o: ../include/openssl/kssl.h ../include/openssl/lhash.h ssl_algs.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h ssl_algs.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -691,6 +857,7 @@ ssl_algs.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h ssl_algs.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h ssl_algs.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h ssl_algs.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ssl_algs.o: ../include/openssl/sm2.h ../include/openssl/sm3.h ssl_algs.o: ../include/openssl/srtp.h ../include/openssl/ssl.h ssl_algs.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h ssl_algs.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -704,14 +871,16 @@ ssl_asn1.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h ssl_asn1.o: ../include/openssl/e_os2.h ../include/openssl/ec.h ssl_asn1.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h ssl_asn1.o: ../include/openssl/err.h ../include/openssl/evp.h -ssl_asn1.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +ssl_asn1.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +ssl_asn1.o: ../include/openssl/kdf.h ../include/openssl/kssl.h ssl_asn1.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h ssl_asn1.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h ssl_asn1.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h ssl_asn1.o: ../include/openssl/pem.h ../include/openssl/pem2.h ssl_asn1.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h ssl_asn1.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -ssl_asn1.o: ../include/openssl/sha.h ../include/openssl/srtp.h +ssl_asn1.o: ../include/openssl/sha.h ../include/openssl/sm2.h +ssl_asn1.o: ../include/openssl/sm3.h ../include/openssl/srtp.h ssl_asn1.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h ssl_asn1.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h ssl_asn1.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -725,7 +894,8 @@ ssl_cert.o: ../include/openssl/dh.h ../include/openssl/dsa.h ssl_cert.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h ssl_cert.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ssl_cert.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -ssl_cert.o: ../include/openssl/evp.h ../include/openssl/hmac.h +ssl_cert.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +ssl_cert.o: ../include/openssl/hmac.h ../include/openssl/kdf.h ssl_cert.o: ../include/openssl/kssl.h ../include/openssl/lhash.h ssl_cert.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h ssl_cert.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -733,6 +903,7 @@ ssl_cert.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h ssl_cert.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h ssl_cert.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h ssl_cert.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ssl_cert.o: ../include/openssl/sm2.h ../include/openssl/sm3.h ssl_cert.o: ../include/openssl/srtp.h ../include/openssl/ssl.h ssl_cert.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h ssl_cert.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -746,14 +917,16 @@ ssl_ciph.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h ssl_ciph.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ssl_ciph.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h ssl_ciph.o: ../include/openssl/err.h ../include/openssl/evp.h -ssl_ciph.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +ssl_ciph.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +ssl_ciph.o: ../include/openssl/kdf.h ../include/openssl/kssl.h ssl_ciph.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h ssl_ciph.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h ssl_ciph.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h ssl_ciph.o: ../include/openssl/pem.h ../include/openssl/pem2.h ssl_ciph.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h ssl_ciph.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -ssl_ciph.o: ../include/openssl/sha.h ../include/openssl/srtp.h +ssl_ciph.o: ../include/openssl/sha.h ../include/openssl/sm2.h +ssl_ciph.o: ../include/openssl/sm3.h ../include/openssl/srtp.h ssl_ciph.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h ssl_ciph.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h ssl_ciph.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -766,7 +939,8 @@ ssl_conf.o: ../include/openssl/dh.h ../include/openssl/dsa.h ssl_conf.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h ssl_conf.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ssl_conf.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -ssl_conf.o: ../include/openssl/evp.h ../include/openssl/hmac.h +ssl_conf.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +ssl_conf.o: ../include/openssl/hmac.h ../include/openssl/kdf.h ssl_conf.o: ../include/openssl/kssl.h ../include/openssl/lhash.h ssl_conf.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h ssl_conf.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -774,6 +948,7 @@ ssl_conf.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h ssl_conf.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h ssl_conf.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h ssl_conf.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ssl_conf.o: ../include/openssl/sm2.h ../include/openssl/sm3.h ssl_conf.o: ../include/openssl/srtp.h ../include/openssl/ssl.h ssl_conf.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h ssl_conf.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -786,13 +961,15 @@ ssl_err.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h ssl_err.o: ../include/openssl/e_os2.h ../include/openssl/ec.h ssl_err.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h ssl_err.o: ../include/openssl/err.h ../include/openssl/evp.h -ssl_err.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +ssl_err.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +ssl_err.o: ../include/openssl/kdf.h ../include/openssl/kssl.h ssl_err.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h ssl_err.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h ssl_err.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h ssl_err.o: ../include/openssl/pem.h ../include/openssl/pem2.h ssl_err.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h ssl_err.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ssl_err.o: ../include/openssl/sm2.h ../include/openssl/sm3.h ssl_err.o: ../include/openssl/srtp.h ../include/openssl/ssl.h ssl_err.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h ssl_err.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -804,13 +981,15 @@ ssl_err2.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h ssl_err2.o: ../include/openssl/e_os2.h ../include/openssl/ec.h ssl_err2.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h ssl_err2.o: ../include/openssl/err.h ../include/openssl/evp.h -ssl_err2.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +ssl_err2.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +ssl_err2.o: ../include/openssl/kdf.h ../include/openssl/kssl.h ssl_err2.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h ssl_err2.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h ssl_err2.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h ssl_err2.o: ../include/openssl/pem.h ../include/openssl/pem2.h ssl_err2.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h ssl_err2.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ssl_err2.o: ../include/openssl/sm2.h ../include/openssl/sm3.h ssl_err2.o: ../include/openssl/srtp.h ../include/openssl/ssl.h ssl_err2.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h ssl_err2.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -824,7 +1003,8 @@ ssl_lib.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h ssl_lib.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ssl_lib.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h ssl_lib.o: ../include/openssl/err.h ../include/openssl/evp.h -ssl_lib.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +ssl_lib.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +ssl_lib.o: ../include/openssl/kdf.h ../include/openssl/kssl.h ssl_lib.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h ssl_lib.o: ../include/openssl/objects.h ../include/openssl/ocsp.h ssl_lib.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -832,7 +1012,8 @@ ssl_lib.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h ssl_lib.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h ssl_lib.o: ../include/openssl/pqueue.h ../include/openssl/rand.h ssl_lib.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -ssl_lib.o: ../include/openssl/sha.h ../include/openssl/srtp.h +ssl_lib.o: ../include/openssl/sha.h ../include/openssl/sm2.h +ssl_lib.o: ../include/openssl/sm3.h ../include/openssl/srtp.h ssl_lib.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h ssl_lib.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h ssl_lib.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -845,7 +1026,8 @@ ssl_rsa.o: ../include/openssl/crypto.h ../include/openssl/dsa.h ssl_rsa.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h ssl_rsa.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ssl_rsa.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -ssl_rsa.o: ../include/openssl/evp.h ../include/openssl/hmac.h +ssl_rsa.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +ssl_rsa.o: ../include/openssl/hmac.h ../include/openssl/kdf.h ssl_rsa.o: ../include/openssl/kssl.h ../include/openssl/lhash.h ssl_rsa.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h ssl_rsa.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -853,6 +1035,7 @@ ssl_rsa.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h ssl_rsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h ssl_rsa.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h ssl_rsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ssl_rsa.o: ../include/openssl/sm2.h ../include/openssl/sm3.h ssl_rsa.o: ../include/openssl/srtp.h ../include/openssl/ssl.h ssl_rsa.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h ssl_rsa.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -866,7 +1049,8 @@ ssl_sess.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h ssl_sess.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ssl_sess.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h ssl_sess.o: ../include/openssl/err.h ../include/openssl/evp.h -ssl_sess.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +ssl_sess.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +ssl_sess.o: ../include/openssl/kdf.h ../include/openssl/kssl.h ssl_sess.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h ssl_sess.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h ssl_sess.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h @@ -874,6 +1058,7 @@ ssl_sess.o: ../include/openssl/pem.h ../include/openssl/pem2.h ssl_sess.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h ssl_sess.o: ../include/openssl/rand.h ../include/openssl/rsa.h ssl_sess.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ssl_sess.o: ../include/openssl/sm2.h ../include/openssl/sm3.h ssl_sess.o: ../include/openssl/srtp.h ../include/openssl/ssl.h ssl_sess.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h ssl_sess.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -886,7 +1071,8 @@ ssl_stat.o: ../include/openssl/crypto.h ../include/openssl/dsa.h ssl_stat.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h ssl_stat.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ssl_stat.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -ssl_stat.o: ../include/openssl/evp.h ../include/openssl/hmac.h +ssl_stat.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +ssl_stat.o: ../include/openssl/hmac.h ../include/openssl/kdf.h ssl_stat.o: ../include/openssl/kssl.h ../include/openssl/lhash.h ssl_stat.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h ssl_stat.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -894,6 +1080,7 @@ ssl_stat.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h ssl_stat.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h ssl_stat.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h ssl_stat.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ssl_stat.o: ../include/openssl/sm2.h ../include/openssl/sm3.h ssl_stat.o: ../include/openssl/srtp.h ../include/openssl/ssl.h ssl_stat.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h ssl_stat.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -906,7 +1093,8 @@ ssl_txt.o: ../include/openssl/crypto.h ../include/openssl/dsa.h ssl_txt.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h ssl_txt.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ssl_txt.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -ssl_txt.o: ../include/openssl/evp.h ../include/openssl/hmac.h +ssl_txt.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +ssl_txt.o: ../include/openssl/hmac.h ../include/openssl/kdf.h ssl_txt.o: ../include/openssl/kssl.h ../include/openssl/lhash.h ssl_txt.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h ssl_txt.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -914,6 +1102,7 @@ ssl_txt.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h ssl_txt.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h ssl_txt.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h ssl_txt.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ssl_txt.o: ../include/openssl/sm2.h ../include/openssl/sm3.h ssl_txt.o: ../include/openssl/srtp.h ../include/openssl/ssl.h ssl_txt.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h ssl_txt.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -926,7 +1115,8 @@ ssl_utst.o: ../include/openssl/crypto.h ../include/openssl/dsa.h ssl_utst.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h ssl_utst.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ssl_utst.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -ssl_utst.o: ../include/openssl/evp.h ../include/openssl/hmac.h +ssl_utst.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +ssl_utst.o: ../include/openssl/hmac.h ../include/openssl/kdf.h ssl_utst.o: ../include/openssl/kssl.h ../include/openssl/lhash.h ssl_utst.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h ssl_utst.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -934,6 +1124,7 @@ ssl_utst.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h ssl_utst.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h ssl_utst.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h ssl_utst.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ssl_utst.o: ../include/openssl/sm2.h ../include/openssl/sm3.h ssl_utst.o: ../include/openssl/srtp.h ../include/openssl/ssl.h ssl_utst.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h ssl_utst.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -946,7 +1137,8 @@ t1_clnt.o: ../include/openssl/crypto.h ../include/openssl/dsa.h t1_clnt.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h t1_clnt.o: ../include/openssl/ec.h ../include/openssl/ecdh.h t1_clnt.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -t1_clnt.o: ../include/openssl/evp.h ../include/openssl/hmac.h +t1_clnt.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +t1_clnt.o: ../include/openssl/hmac.h ../include/openssl/kdf.h t1_clnt.o: ../include/openssl/kssl.h ../include/openssl/lhash.h t1_clnt.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h t1_clnt.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -954,7 +1146,8 @@ t1_clnt.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h t1_clnt.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h t1_clnt.o: ../include/openssl/pqueue.h ../include/openssl/rand.h t1_clnt.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -t1_clnt.o: ../include/openssl/sha.h ../include/openssl/srtp.h +t1_clnt.o: ../include/openssl/sha.h ../include/openssl/sm2.h +t1_clnt.o: ../include/openssl/sm3.h ../include/openssl/srtp.h t1_clnt.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h t1_clnt.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h t1_clnt.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -966,7 +1159,8 @@ t1_enc.o: ../include/openssl/crypto.h ../include/openssl/dsa.h t1_enc.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h t1_enc.o: ../include/openssl/ec.h ../include/openssl/ecdh.h t1_enc.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -t1_enc.o: ../include/openssl/evp.h ../include/openssl/hmac.h +t1_enc.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +t1_enc.o: ../include/openssl/hmac.h ../include/openssl/kdf.h t1_enc.o: ../include/openssl/kssl.h ../include/openssl/lhash.h t1_enc.o: ../include/openssl/md5.h ../include/openssl/obj_mac.h t1_enc.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h @@ -975,6 +1169,7 @@ t1_enc.o: ../include/openssl/pem.h ../include/openssl/pem2.h t1_enc.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h t1_enc.o: ../include/openssl/rand.h ../include/openssl/rsa.h t1_enc.o: ../include/openssl/safestack.h ../include/openssl/sha.h +t1_enc.o: ../include/openssl/sm2.h ../include/openssl/sm3.h t1_enc.o: ../include/openssl/srtp.h ../include/openssl/ssl.h t1_enc.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h t1_enc.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -987,7 +1182,8 @@ t1_ext.o: ../include/openssl/crypto.h ../include/openssl/dsa.h t1_ext.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h t1_ext.o: ../include/openssl/ec.h ../include/openssl/ecdh.h t1_ext.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -t1_ext.o: ../include/openssl/evp.h ../include/openssl/hmac.h +t1_ext.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +t1_ext.o: ../include/openssl/hmac.h ../include/openssl/kdf.h t1_ext.o: ../include/openssl/kssl.h ../include/openssl/lhash.h t1_ext.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h t1_ext.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -995,6 +1191,7 @@ t1_ext.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h t1_ext.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h t1_ext.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h t1_ext.o: ../include/openssl/safestack.h ../include/openssl/sha.h +t1_ext.o: ../include/openssl/sm2.h ../include/openssl/sm3.h t1_ext.o: ../include/openssl/srtp.h ../include/openssl/ssl.h t1_ext.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h t1_ext.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -1008,7 +1205,8 @@ t1_lib.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h t1_lib.o: ../include/openssl/e_os2.h ../include/openssl/ec.h t1_lib.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h t1_lib.o: ../include/openssl/err.h ../include/openssl/evp.h -t1_lib.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +t1_lib.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +t1_lib.o: ../include/openssl/kdf.h ../include/openssl/kssl.h t1_lib.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h t1_lib.o: ../include/openssl/objects.h ../include/openssl/ocsp.h t1_lib.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -1016,7 +1214,8 @@ t1_lib.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h t1_lib.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h t1_lib.o: ../include/openssl/pqueue.h ../include/openssl/rand.h t1_lib.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -t1_lib.o: ../include/openssl/sha.h ../include/openssl/srtp.h +t1_lib.o: ../include/openssl/sha.h ../include/openssl/sm2.h +t1_lib.o: ../include/openssl/sm3.h ../include/openssl/srtp.h t1_lib.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h t1_lib.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h t1_lib.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -1029,7 +1228,8 @@ t1_meth.o: ../include/openssl/crypto.h ../include/openssl/dsa.h t1_meth.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h t1_meth.o: ../include/openssl/ec.h ../include/openssl/ecdh.h t1_meth.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -t1_meth.o: ../include/openssl/evp.h ../include/openssl/hmac.h +t1_meth.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +t1_meth.o: ../include/openssl/hmac.h ../include/openssl/kdf.h t1_meth.o: ../include/openssl/kssl.h ../include/openssl/lhash.h t1_meth.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h t1_meth.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -1037,6 +1237,7 @@ t1_meth.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h t1_meth.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h t1_meth.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h t1_meth.o: ../include/openssl/safestack.h ../include/openssl/sha.h +t1_meth.o: ../include/openssl/sm2.h ../include/openssl/sm3.h t1_meth.o: ../include/openssl/srtp.h ../include/openssl/ssl.h t1_meth.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h t1_meth.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -1049,7 +1250,8 @@ t1_reneg.o: ../include/openssl/crypto.h ../include/openssl/dsa.h t1_reneg.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h t1_reneg.o: ../include/openssl/ec.h ../include/openssl/ecdh.h t1_reneg.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -t1_reneg.o: ../include/openssl/evp.h ../include/openssl/hmac.h +t1_reneg.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +t1_reneg.o: ../include/openssl/hmac.h ../include/openssl/kdf.h t1_reneg.o: ../include/openssl/kssl.h ../include/openssl/lhash.h t1_reneg.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h t1_reneg.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -1057,6 +1259,7 @@ t1_reneg.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h t1_reneg.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h t1_reneg.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h t1_reneg.o: ../include/openssl/safestack.h ../include/openssl/sha.h +t1_reneg.o: ../include/openssl/sm2.h ../include/openssl/sm3.h t1_reneg.o: ../include/openssl/srtp.h ../include/openssl/ssl.h t1_reneg.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h t1_reneg.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -1069,7 +1272,8 @@ t1_srvr.o: ../include/openssl/crypto.h ../include/openssl/dsa.h t1_srvr.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h t1_srvr.o: ../include/openssl/ec.h ../include/openssl/ecdh.h t1_srvr.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -t1_srvr.o: ../include/openssl/evp.h ../include/openssl/hmac.h +t1_srvr.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +t1_srvr.o: ../include/openssl/hmac.h ../include/openssl/kdf.h t1_srvr.o: ../include/openssl/kssl.h ../include/openssl/lhash.h t1_srvr.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h t1_srvr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -1077,7 +1281,8 @@ t1_srvr.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h t1_srvr.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h t1_srvr.o: ../include/openssl/pqueue.h ../include/openssl/rand.h t1_srvr.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -t1_srvr.o: ../include/openssl/sha.h ../include/openssl/srtp.h +t1_srvr.o: ../include/openssl/sha.h ../include/openssl/sm2.h +t1_srvr.o: ../include/openssl/sm3.h ../include/openssl/srtp.h t1_srvr.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h t1_srvr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h t1_srvr.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -1089,7 +1294,8 @@ t1_trce.o: ../include/openssl/crypto.h ../include/openssl/dsa.h t1_trce.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h t1_trce.o: ../include/openssl/ec.h ../include/openssl/ecdh.h t1_trce.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -t1_trce.o: ../include/openssl/evp.h ../include/openssl/hmac.h +t1_trce.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +t1_trce.o: ../include/openssl/hmac.h ../include/openssl/kdf.h t1_trce.o: ../include/openssl/kssl.h ../include/openssl/lhash.h t1_trce.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h t1_trce.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -1097,6 +1303,7 @@ t1_trce.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h t1_trce.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h t1_trce.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h t1_trce.o: ../include/openssl/safestack.h ../include/openssl/sha.h +t1_trce.o: ../include/openssl/sm2.h ../include/openssl/sm3.h t1_trce.o: ../include/openssl/srtp.h ../include/openssl/ssl.h t1_trce.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h t1_trce.o: ../include/openssl/ssl3.h ../include/openssl/stack.h @@ -1110,7 +1317,8 @@ tls_srp.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h tls_srp.o: ../include/openssl/e_os2.h ../include/openssl/ec.h tls_srp.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h tls_srp.o: ../include/openssl/err.h ../include/openssl/evp.h -tls_srp.o: ../include/openssl/hmac.h ../include/openssl/kssl.h +tls_srp.o: ../include/openssl/gmssl1.h ../include/openssl/hmac.h +tls_srp.o: ../include/openssl/kdf.h ../include/openssl/kssl.h tls_srp.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h tls_srp.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h tls_srp.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h @@ -1118,6 +1326,7 @@ tls_srp.o: ../include/openssl/pem.h ../include/openssl/pem2.h tls_srp.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h tls_srp.o: ../include/openssl/rand.h ../include/openssl/rsa.h tls_srp.o: ../include/openssl/safestack.h ../include/openssl/sha.h +tls_srp.o: ../include/openssl/sm2.h ../include/openssl/sm3.h tls_srp.o: ../include/openssl/srp.h ../include/openssl/srtp.h tls_srp.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h tls_srp.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h diff --git a/test/Makefile b/test/Makefile index e695073f..3c698507 100644 --- a/test/Makefile +++ b/test/Makefile @@ -542,18 +542,11 @@ dummytest$(EXE_EXT): dummytest.o $(DLIBCRYPTO) # DO NOT DELETE THIS LINE -- make depend depends on it. -asn1test.o: ../include/openssl/asn1.h ../include/openssl/asn1_mac.h -asn1test.o: ../include/openssl/bio.h ../include/openssl/buffer.h -asn1test.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h -asn1test.o: ../include/openssl/ec.h ../include/openssl/ecdh.h -asn1test.o: ../include/openssl/ecdsa.h ../include/openssl/evp.h -asn1test.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -asn1test.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +asn1test.o: ../include/openssl/buffer.h ../include/openssl/crypto.h +asn1test.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h asn1test.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -asn1test.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h -asn1test.o: ../include/openssl/sha.h ../include/openssl/stack.h -asn1test.o: ../include/openssl/symhacks.h ../include/openssl/x509.h -asn1test.o: ../include/openssl/x509_vfy.h asn1test.c +asn1test.o: ../include/openssl/safestack.h ../include/openssl/stack.h +asn1test.o: ../include/openssl/symhacks.h asn1test.c bftest.o: ../e_os.h ../include/openssl/blowfish.h ../include/openssl/e_os2.h bftest.o: ../include/openssl/opensslconf.h bftest.c bntest.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h @@ -562,21 +555,24 @@ bntest.o: ../include/openssl/crypto.h ../include/openssl/dh.h bntest.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h bntest.o: ../include/openssl/ec.h ../include/openssl/ecdh.h bntest.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -bntest.o: ../include/openssl/evp.h ../include/openssl/lhash.h -bntest.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -bntest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -bntest.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h -bntest.o: ../include/openssl/rand.h ../include/openssl/rsa.h -bntest.o: ../include/openssl/safestack.h ../include/openssl/sha.h -bntest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -bntest.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h bntest.c +bntest.o: ../include/openssl/evp.h ../include/openssl/kdf.h +bntest.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h +bntest.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +bntest.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +bntest.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h +bntest.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +bntest.o: ../include/openssl/sha.h ../include/openssl/sm2.h +bntest.o: ../include/openssl/sm3.h ../include/openssl/stack.h +bntest.o: ../include/openssl/symhacks.h ../include/openssl/x509.h +bntest.o: ../include/openssl/x509_vfy.h bntest.c casttest.o: ../e_os.h ../include/openssl/cast.h ../include/openssl/e_os2.h casttest.o: ../include/openssl/opensslconf.h casttest.c constant_time_test.o: ../crypto/constant_time_locl.h ../e_os.h constant_time_test.o: ../include/openssl/e_os2.h constant_time_test.o: ../include/openssl/opensslconf.h constant_time_test.c -destest.o: ../include/openssl/des.h ../include/openssl/des_old.h -destest.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h +destest.o: ../include/openssl/crypto.h ../include/openssl/des.h +destest.o: ../include/openssl/des_old.h ../include/openssl/e_os2.h +destest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h destest.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h destest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h destest.o: ../include/openssl/ui.h ../include/openssl/ui_compat.h destest.c @@ -607,70 +603,88 @@ ecdhtest.o: ../include/openssl/sha.h ../include/openssl/stack.h ecdhtest.o: ../include/openssl/symhacks.h ecdhtest.c ecdsatest.o: ../include/openssl/asn1.h ../include/openssl/bio.h ecdsatest.o: ../include/openssl/bn.h ../include/openssl/buffer.h -ecdsatest.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h +ecdsatest.o: ../include/openssl/crypto.h ../include/openssl/dh.h +ecdsatest.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h ecdsatest.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ecdsatest.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h ecdsatest.o: ../include/openssl/err.h ../include/openssl/evp.h -ecdsatest.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -ecdsatest.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h -ecdsatest.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -ecdsatest.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h +ecdsatest.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +ecdsatest.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +ecdsatest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +ecdsatest.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h +ecdsatest.o: ../include/openssl/rand.h ../include/openssl/rsa.h ecdsatest.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ecdsatest.o: ../include/openssl/sm2.h ../include/openssl/sm3.h ecdsatest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -ecdsatest.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -ecdsatest.o: ecdsatest.c +ecdsatest.o: ../include/openssl/ui.h ../include/openssl/x509.h +ecdsatest.o: ../include/openssl/x509_vfy.h ecdsatest.c ectest.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h ectest.o: ../include/openssl/bn.h ../include/openssl/buffer.h -ectest.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h +ectest.o: ../include/openssl/crypto.h ../include/openssl/dh.h +ectest.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h ectest.o: ../include/openssl/ec.h ../include/openssl/ecdh.h ectest.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h ectest.o: ../include/openssl/err.h ../include/openssl/evp.h -ectest.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -ectest.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h -ectest.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -ectest.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h +ectest.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +ectest.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +ectest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +ectest.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h +ectest.o: ../include/openssl/rand.h ../include/openssl/rsa.h ectest.o: ../include/openssl/safestack.h ../include/openssl/sha.h +ectest.o: ../include/openssl/sm2.h ../include/openssl/sm3.h ectest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -ectest.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h ectest.c +ectest.o: ../include/openssl/ui.h ../include/openssl/x509.h +ectest.o: ../include/openssl/x509_vfy.h ectest.c enginetest.o: ../include/openssl/asn1.h ../include/openssl/bio.h -enginetest.o: ../include/openssl/buffer.h ../include/openssl/crypto.h -enginetest.o: ../include/openssl/e_os2.h ../include/openssl/ec.h -enginetest.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h -enginetest.o: ../include/openssl/engine.h ../include/openssl/err.h -enginetest.o: ../include/openssl/evp.h ../include/openssl/lhash.h +enginetest.o: ../include/openssl/bn.h ../include/openssl/buffer.h +enginetest.o: ../include/openssl/crypto.h ../include/openssl/dh.h +enginetest.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h +enginetest.o: ../include/openssl/ec.h ../include/openssl/ecdh.h +enginetest.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h +enginetest.o: ../include/openssl/err.h ../include/openssl/evp.h +enginetest.o: ../include/openssl/kdf.h ../include/openssl/lhash.h enginetest.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h enginetest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h enginetest.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h +enginetest.o: ../include/openssl/rand.h ../include/openssl/rsa.h enginetest.o: ../include/openssl/safestack.h ../include/openssl/sha.h +enginetest.o: ../include/openssl/sm2.h ../include/openssl/sm3.h enginetest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -enginetest.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -enginetest.o: enginetest.c +enginetest.o: ../include/openssl/ui.h ../include/openssl/x509.h +enginetest.o: ../include/openssl/x509_vfy.h enginetest.c evp_extra_test.o: ../include/openssl/asn1.h ../include/openssl/bio.h -evp_extra_test.o: ../include/openssl/buffer.h ../include/openssl/crypto.h -evp_extra_test.o: ../include/openssl/e_os2.h ../include/openssl/ec.h -evp_extra_test.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h -evp_extra_test.o: ../include/openssl/err.h ../include/openssl/evp.h +evp_extra_test.o: ../include/openssl/bn.h ../include/openssl/buffer.h +evp_extra_test.o: ../include/openssl/crypto.h ../include/openssl/dh.h +evp_extra_test.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h +evp_extra_test.o: ../include/openssl/ec.h ../include/openssl/ecdh.h +evp_extra_test.o: ../include/openssl/ecdsa.h ../include/openssl/err.h +evp_extra_test.o: ../include/openssl/evp.h ../include/openssl/kdf.h evp_extra_test.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h evp_extra_test.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h evp_extra_test.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h evp_extra_test.o: ../include/openssl/pkcs7.h ../include/openssl/rsa.h evp_extra_test.o: ../include/openssl/safestack.h ../include/openssl/sha.h +evp_extra_test.o: ../include/openssl/sm2.h ../include/openssl/sm3.h evp_extra_test.o: ../include/openssl/stack.h ../include/openssl/symhacks.h evp_extra_test.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h evp_extra_test.o: evp_extra_test.c evp_test.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h -evp_test.o: ../include/openssl/buffer.h ../include/openssl/conf.h -evp_test.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h -evp_test.o: ../include/openssl/ec.h ../include/openssl/ecdh.h -evp_test.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h -evp_test.o: ../include/openssl/err.h ../include/openssl/evp.h +evp_test.o: ../include/openssl/bn.h ../include/openssl/buffer.h +evp_test.o: ../include/openssl/conf.h ../include/openssl/crypto.h +evp_test.o: ../include/openssl/dh.h ../include/openssl/dsa.h +evp_test.o: ../include/openssl/e_os2.h ../include/openssl/ec.h +evp_test.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h +evp_test.o: ../include/openssl/engine.h ../include/openssl/err.h +evp_test.o: ../include/openssl/evp.h ../include/openssl/kdf.h evp_test.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h evp_test.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h evp_test.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -evp_test.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h -evp_test.o: ../include/openssl/sha.h ../include/openssl/stack.h -evp_test.o: ../include/openssl/symhacks.h ../include/openssl/x509.h -evp_test.o: ../include/openssl/x509_vfy.h evp_test.c +evp_test.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h +evp_test.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +evp_test.o: ../include/openssl/sha.h ../include/openssl/sm2.h +evp_test.o: ../include/openssl/sm3.h ../include/openssl/stack.h +evp_test.o: ../include/openssl/symhacks.h ../include/openssl/ui.h +evp_test.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h evp_test.c exptest.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/bn.h exptest.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h exptest.o: ../include/openssl/err.h ../include/openssl/lhash.h @@ -679,12 +693,14 @@ exptest.o: ../include/openssl/ossl_typ.h ../include/openssl/rand.h exptest.o: ../include/openssl/safestack.h ../include/openssl/stack.h exptest.o: ../include/openssl/symhacks.h exptest.c heartbeat_test.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h -heartbeat_test.o: ../include/openssl/buffer.h ../include/openssl/comp.h -heartbeat_test.o: ../include/openssl/crypto.h ../include/openssl/dsa.h +heartbeat_test.o: ../include/openssl/bn.h ../include/openssl/buffer.h +heartbeat_test.o: ../include/openssl/comp.h ../include/openssl/crypto.h +heartbeat_test.o: ../include/openssl/dh.h ../include/openssl/dsa.h heartbeat_test.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h heartbeat_test.o: ../include/openssl/ec.h ../include/openssl/ecdh.h heartbeat_test.o: ../include/openssl/ecdsa.h ../include/openssl/err.h -heartbeat_test.o: ../include/openssl/evp.h ../include/openssl/hmac.h +heartbeat_test.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +heartbeat_test.o: ../include/openssl/hmac.h ../include/openssl/kdf.h heartbeat_test.o: ../include/openssl/kssl.h ../include/openssl/lhash.h heartbeat_test.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h heartbeat_test.o: ../include/openssl/opensslconf.h @@ -692,7 +708,8 @@ heartbeat_test.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h heartbeat_test.o: ../include/openssl/pem.h ../include/openssl/pem2.h heartbeat_test.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h heartbeat_test.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -heartbeat_test.o: ../include/openssl/sha.h ../include/openssl/srtp.h +heartbeat_test.o: ../include/openssl/sha.h ../include/openssl/sm2.h +heartbeat_test.o: ../include/openssl/sm3.h ../include/openssl/srtp.h heartbeat_test.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h heartbeat_test.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h heartbeat_test.o: ../include/openssl/stack.h ../include/openssl/symhacks.h @@ -700,18 +717,20 @@ heartbeat_test.o: ../include/openssl/tls1.h ../include/openssl/x509.h heartbeat_test.o: ../include/openssl/x509_vfy.h ../ssl/ssl_locl.h heartbeat_test.o: ../test/testutil.h heartbeat_test.c hmactest.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h -hmactest.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h -hmactest.o: ../include/openssl/evp.h ../include/openssl/hmac.h -hmactest.o: ../include/openssl/md5.h ../include/openssl/obj_mac.h -hmactest.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h -hmactest.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -hmactest.o: ../include/openssl/safestack.h ../include/openssl/stack.h -hmactest.o: ../include/openssl/symhacks.h hmactest.c +hmactest.o: ../include/openssl/bn.h ../include/openssl/crypto.h +hmactest.o: ../include/openssl/e_os2.h ../include/openssl/evp.h +hmactest.o: ../include/openssl/hmac.h ../include/openssl/md5.h +hmactest.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +hmactest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +hmactest.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h +hmactest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h hmactest.c ideatest.o: ../e_os.h ../include/openssl/e_os2.h ../include/openssl/idea.h ideatest.o: ../include/openssl/opensslconf.h ideatest.c -igetest.o: ../include/openssl/aes.h ../include/openssl/e_os2.h -igetest.o: ../include/openssl/opensslconf.h ../include/openssl/ossl_typ.h -igetest.o: ../include/openssl/rand.h igetest.c +igetest.o: ../include/openssl/buffer.h ../include/openssl/crypto.h +igetest.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h +igetest.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +igetest.o: ../include/openssl/safestack.h ../include/openssl/stack.h +igetest.o: ../include/openssl/symhacks.h igetest.c jpaketest.o: ../include/openssl/buffer.h ../include/openssl/crypto.h jpaketest.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h jpaketest.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h @@ -723,28 +742,31 @@ md2test.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h md2test.o: ../include/openssl/safestack.h ../include/openssl/stack.h md2test.o: ../include/openssl/symhacks.h md2test.c md4test.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h -md4test.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h -md4test.o: ../include/openssl/evp.h ../include/openssl/md4.h -md4test.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -md4test.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -md4test.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h -md4test.o: ../include/openssl/stack.h ../include/openssl/symhacks.h md4test.c +md4test.o: ../include/openssl/bn.h ../include/openssl/crypto.h +md4test.o: ../include/openssl/e_os2.h ../include/openssl/evp.h +md4test.o: ../include/openssl/md4.h ../include/openssl/obj_mac.h +md4test.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +md4test.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +md4test.o: ../include/openssl/safestack.h ../include/openssl/stack.h +md4test.o: ../include/openssl/symhacks.h md4test.c md5test.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h -md5test.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h -md5test.o: ../include/openssl/evp.h ../include/openssl/md5.h -md5test.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -md5test.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -md5test.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h -md5test.o: ../include/openssl/stack.h ../include/openssl/symhacks.h md5test.c +md5test.o: ../include/openssl/bn.h ../include/openssl/crypto.h +md5test.o: ../include/openssl/e_os2.h ../include/openssl/evp.h +md5test.o: ../include/openssl/md5.h ../include/openssl/obj_mac.h +md5test.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +md5test.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +md5test.o: ../include/openssl/safestack.h ../include/openssl/stack.h +md5test.o: ../include/openssl/symhacks.h md5test.c mdc2test.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h -mdc2test.o: ../include/openssl/crypto.h ../include/openssl/des.h -mdc2test.o: ../include/openssl/des_old.h ../include/openssl/e_os2.h -mdc2test.o: ../include/openssl/evp.h ../include/openssl/mdc2.h -mdc2test.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h -mdc2test.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -mdc2test.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h -mdc2test.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -mdc2test.o: ../include/openssl/ui.h ../include/openssl/ui_compat.h mdc2test.c +mdc2test.o: ../include/openssl/bn.h ../include/openssl/crypto.h +mdc2test.o: ../include/openssl/des.h ../include/openssl/des_old.h +mdc2test.o: ../include/openssl/e_os2.h ../include/openssl/evp.h +mdc2test.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h +mdc2test.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h +mdc2test.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h +mdc2test.o: ../include/openssl/safestack.h ../include/openssl/stack.h +mdc2test.o: ../include/openssl/symhacks.h ../include/openssl/ui.h +mdc2test.o: ../include/openssl/ui_compat.h mdc2test.c randtest.o: ../e_os.h ../include/openssl/e_os2.h randtest.o: ../include/openssl/opensslconf.h ../include/openssl/ossl_typ.h randtest.o: ../include/openssl/rand.h randtest.c @@ -759,12 +781,13 @@ rc5test.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h rc5test.o: ../include/openssl/safestack.h ../include/openssl/stack.h rc5test.o: ../include/openssl/symhacks.h rc5test.c rmdtest.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h -rmdtest.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h -rmdtest.o: ../include/openssl/evp.h ../include/openssl/obj_mac.h -rmdtest.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h -rmdtest.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -rmdtest.o: ../include/openssl/ripemd.h ../include/openssl/safestack.h -rmdtest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h rmdtest.c +rmdtest.o: ../include/openssl/bn.h ../include/openssl/crypto.h +rmdtest.o: ../include/openssl/e_os2.h ../include/openssl/evp.h +rmdtest.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +rmdtest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +rmdtest.o: ../include/openssl/ossl_typ.h ../include/openssl/ripemd.h +rmdtest.o: ../include/openssl/safestack.h ../include/openssl/stack.h +rmdtest.o: ../include/openssl/symhacks.h rmdtest.c rsa_test.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h rsa_test.o: ../include/openssl/bn.h ../include/openssl/crypto.h rsa_test.o: ../include/openssl/e_os2.h ../include/openssl/err.h @@ -774,19 +797,21 @@ rsa_test.o: ../include/openssl/rand.h ../include/openssl/rsa.h rsa_test.o: ../include/openssl/safestack.h ../include/openssl/stack.h rsa_test.o: ../include/openssl/symhacks.h rsa_test.c sha1test.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h -sha1test.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h -sha1test.o: ../include/openssl/evp.h ../include/openssl/obj_mac.h -sha1test.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h -sha1test.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -sha1test.o: ../include/openssl/safestack.h ../include/openssl/sha.h -sha1test.o: ../include/openssl/stack.h ../include/openssl/symhacks.h sha1test.c +sha1test.o: ../include/openssl/bn.h ../include/openssl/crypto.h +sha1test.o: ../include/openssl/e_os2.h ../include/openssl/evp.h +sha1test.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +sha1test.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +sha1test.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h +sha1test.o: ../include/openssl/sha.h ../include/openssl/stack.h +sha1test.o: ../include/openssl/symhacks.h sha1test.c shatest.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h -shatest.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h -shatest.o: ../include/openssl/evp.h ../include/openssl/obj_mac.h -shatest.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h -shatest.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -shatest.o: ../include/openssl/safestack.h ../include/openssl/sha.h -shatest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h shatest.c +shatest.o: ../include/openssl/bn.h ../include/openssl/crypto.h +shatest.o: ../include/openssl/e_os2.h ../include/openssl/evp.h +shatest.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +shatest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +shatest.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h +shatest.o: ../include/openssl/sha.h ../include/openssl/stack.h +shatest.o: ../include/openssl/symhacks.h shatest.c srptest.o: ../include/openssl/bio.h ../include/openssl/bn.h srptest.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h srptest.o: ../include/openssl/err.h ../include/openssl/lhash.h @@ -802,7 +827,8 @@ ssltest.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h ssltest.o: ../include/openssl/e_os2.h ../include/openssl/ec.h ssltest.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h ssltest.o: ../include/openssl/engine.h ../include/openssl/err.h -ssltest.o: ../include/openssl/evp.h ../include/openssl/hmac.h +ssltest.o: ../include/openssl/evp.h ../include/openssl/gmssl1.h +ssltest.o: ../include/openssl/hmac.h ../include/openssl/kdf.h ssltest.o: ../include/openssl/kssl.h ../include/openssl/lhash.h ssltest.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h ssltest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h @@ -810,41 +836,49 @@ ssltest.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h ssltest.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h ssltest.o: ../include/openssl/pqueue.h ../include/openssl/rand.h ssltest.o: ../include/openssl/rsa.h ../include/openssl/safestack.h -ssltest.o: ../include/openssl/sha.h ../include/openssl/srp.h +ssltest.o: ../include/openssl/sha.h ../include/openssl/sm2.h +ssltest.o: ../include/openssl/sm3.h ../include/openssl/srp.h ssltest.o: ../include/openssl/srtp.h ../include/openssl/ssl.h ssltest.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h ssltest.o: ../include/openssl/ssl3.h ../include/openssl/stack.h ssltest.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h -ssltest.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -ssltest.o: ../include/openssl/x509v3.h ssltest.c +ssltest.o: ../include/openssl/ui.h ../include/openssl/x509.h +ssltest.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h ssltest.c v3nametest.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h -v3nametest.o: ../include/openssl/buffer.h ../include/openssl/conf.h -v3nametest.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h -v3nametest.o: ../include/openssl/ec.h ../include/openssl/ecdh.h -v3nametest.o: ../include/openssl/ecdsa.h ../include/openssl/evp.h -v3nametest.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h -v3nametest.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h -v3nametest.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h -v3nametest.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h -v3nametest.o: ../include/openssl/sha.h ../include/openssl/stack.h +v3nametest.o: ../include/openssl/bn.h ../include/openssl/buffer.h +v3nametest.o: ../include/openssl/conf.h ../include/openssl/crypto.h +v3nametest.o: ../include/openssl/dh.h ../include/openssl/dsa.h +v3nametest.o: ../include/openssl/e_os2.h ../include/openssl/ec.h +v3nametest.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h +v3nametest.o: ../include/openssl/err.h ../include/openssl/evp.h +v3nametest.o: ../include/openssl/kdf.h ../include/openssl/lhash.h +v3nametest.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h +v3nametest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h +v3nametest.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h +v3nametest.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +v3nametest.o: ../include/openssl/sha.h ../include/openssl/sm2.h +v3nametest.o: ../include/openssl/sm3.h ../include/openssl/stack.h v3nametest.o: ../include/openssl/symhacks.h ../include/openssl/x509.h v3nametest.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h v3nametest.o: v3nametest.c verify_extra_test.o: ../include/openssl/asn1.h ../include/openssl/bio.h -verify_extra_test.o: ../include/openssl/buffer.h ../include/openssl/crypto.h -verify_extra_test.o: ../include/openssl/e_os2.h ../include/openssl/ec.h -verify_extra_test.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h -verify_extra_test.o: ../include/openssl/err.h ../include/openssl/evp.h +verify_extra_test.o: ../include/openssl/bn.h ../include/openssl/buffer.h +verify_extra_test.o: ../include/openssl/crypto.h ../include/openssl/dh.h +verify_extra_test.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h +verify_extra_test.o: ../include/openssl/ec.h ../include/openssl/ecdh.h +verify_extra_test.o: ../include/openssl/ecdsa.h ../include/openssl/err.h +verify_extra_test.o: ../include/openssl/evp.h ../include/openssl/kdf.h verify_extra_test.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h verify_extra_test.o: ../include/openssl/objects.h verify_extra_test.o: ../include/openssl/opensslconf.h verify_extra_test.o: ../include/openssl/opensslv.h verify_extra_test.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h verify_extra_test.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -verify_extra_test.o: ../include/openssl/safestack.h ../include/openssl/sha.h -verify_extra_test.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -verify_extra_test.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -verify_extra_test.o: verify_extra_test.c +verify_extra_test.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +verify_extra_test.o: ../include/openssl/sha.h ../include/openssl/sm2.h +verify_extra_test.o: ../include/openssl/sm3.h ../include/openssl/stack.h +verify_extra_test.o: ../include/openssl/symhacks.h ../include/openssl/x509.h +verify_extra_test.o: ../include/openssl/x509_vfy.h verify_extra_test.c wp_test.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h wp_test.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h wp_test.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h diff --git a/test/asn1test.c b/test/asn1test.c deleted file mode 100755 index 4782f300..00000000 --- a/test/asn1test.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include - -typedef struct X { - STACK_OF(X509_EXTENSION) *ext; -} X; - -/* This isn't meant to run particularly, it's just to test type checking */ -int main(int argc, char **argv) -{ - X *x = NULL; - unsigned char **pp = NULL; - - M_ASN1_I2D_vars(x); - M_ASN1_I2D_len_SEQUENCE_opt_type(X509_EXTENSION, x->ext, - i2d_X509_EXTENSION); - M_ASN1_I2D_seq_total(); - M_ASN1_I2D_put_SEQUENCE_opt_type(X509_EXTENSION, x->ext, - i2d_X509_EXTENSION); - M_ASN1_I2D_finish(); -} diff --git a/test/asn1test.c b/test/asn1test.c new file mode 120000 index 00000000..49f44f8b --- /dev/null +++ b/test/asn1test.c @@ -0,0 +1 @@ +dummytest.c \ No newline at end of file diff --git a/test/igetest.c b/test/igetest.c deleted file mode 100644 index 0c7b3573..00000000 --- a/test/igetest.c +++ /dev/null @@ -1,484 +0,0 @@ -/* test/igetest.c -*- mode:C; c-file-style: "eay" -*- */ -/* ==================================================================== - * 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 - * 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 -#include -#include -#include -#include - -#define TEST_SIZE 128 -#define BIG_TEST_SIZE 10240 - -static void hexdump(FILE *f, const char *title, const unsigned char *s, int l) -{ - int n = 0; - - fprintf(f, "%s", title); - for (; n < l; ++n) { - if ((n % 16) == 0) - fprintf(f, "\n%04x", n); - fprintf(f, " %02x", s[n]); - } - fprintf(f, "\n"); -} - -#define MAX_VECTOR_SIZE 64 - -struct ige_test { - const unsigned char key[16]; - const unsigned char iv[32]; - const unsigned char in[MAX_VECTOR_SIZE]; - const unsigned char out[MAX_VECTOR_SIZE]; - const size_t length; - const int encrypt; -}; - -static struct ige_test const ige_test_vectors[] = { - {{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, /* key */ - {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}, /* iv */ - {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}, /* in */ - {0x1a, 0x85, 0x19, 0xa6, 0x55, 0x7b, 0xe6, 0x52, - 0xe9, 0xda, 0x8e, 0x43, 0xda, 0x4e, 0xf4, 0x45, - 0x3c, 0xf4, 0x56, 0xb4, 0xca, 0x48, 0x8a, 0xa3, - 0x83, 0xc7, 0x9c, 0x98, 0xb3, 0x47, 0x97, 0xcb}, /* out */ - 32, AES_ENCRYPT}, /* test vector 0 */ - - {{0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, - 0x61, 0x6e, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65}, /* key */ - {0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x49, 0x47, 0x45, - 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x53}, /* iv */ - {0x4c, 0x2e, 0x20, 0x4c, 0x65, 0x74, 0x27, 0x73, - 0x20, 0x68, 0x6f, 0x70, 0x65, 0x20, 0x42, 0x65, - 0x6e, 0x20, 0x67, 0x6f, 0x74, 0x20, 0x69, 0x74, - 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x21, 0x0a}, /* in */ - {0x99, 0x70, 0x64, 0x87, 0xa1, 0xcd, 0xe6, 0x13, - 0xbc, 0x6d, 0xe0, 0xb6, 0xf2, 0x4b, 0x1c, 0x7a, - 0xa4, 0x48, 0xc8, 0xb9, 0xc3, 0x40, 0x3e, 0x34, - 0x67, 0xa8, 0xca, 0xd8, 0x93, 0x40, 0xf5, 0x3b}, /* out */ - 32, AES_DECRYPT}, /* test vector 1 */ -}; - -struct bi_ige_test { - const unsigned char key1[32]; - const unsigned char key2[32]; - const unsigned char iv[64]; - const unsigned char in[MAX_VECTOR_SIZE]; - const unsigned char out[MAX_VECTOR_SIZE]; - const size_t keysize; - const size_t length; - const int encrypt; -}; - -static struct bi_ige_test const bi_ige_test_vectors[] = { - {{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, /* key1 */ - {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}, /* key2 */ - {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f}, /* iv */ - {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}, /* in */ - {0x14, 0x40, 0x6f, 0xae, 0xa2, 0x79, 0xf2, 0x56, - 0x1f, 0x86, 0xeb, 0x3b, 0x7d, 0xff, 0x53, 0xdc, - 0x4e, 0x27, 0x0c, 0x03, 0xde, 0x7c, 0xe5, 0x16, - 0x6a, 0x9c, 0x20, 0x33, 0x9d, 0x33, 0xfe, 0x12}, /* out */ - 16, 32, AES_ENCRYPT}, /* test vector 0 */ - {{0x58, 0x0a, 0x06, 0xe9, 0x97, 0x07, 0x59, 0x5c, - 0x9e, 0x19, 0xd2, 0xa7, 0xbb, 0x40, 0x2b, 0x7a, - 0xc7, 0xd8, 0x11, 0x9e, 0x4c, 0x51, 0x35, 0x75, - 0x64, 0x28, 0x0f, 0x23, 0xad, 0x74, 0xac, 0x37}, /* key1 */ - {0xd1, 0x80, 0xa0, 0x31, 0x47, 0xa3, 0x11, 0x13, - 0x86, 0x26, 0x9e, 0x6d, 0xff, 0xaf, 0x72, 0x74, - 0x5b, 0xa2, 0x35, 0x81, 0xd2, 0xa6, 0x3d, 0x21, - 0x67, 0x7b, 0x58, 0xa8, 0x18, 0xf9, 0x72, 0xe4}, /* key2 */ - {0x80, 0x3d, 0xbd, 0x4c, 0xe6, 0x7b, 0x06, 0xa9, - 0x53, 0x35, 0xd5, 0x7e, 0x71, 0xc1, 0x70, 0x70, - 0x74, 0x9a, 0x00, 0x28, 0x0c, 0xbf, 0x6c, 0x42, - 0x9b, 0xa4, 0xdd, 0x65, 0x11, 0x77, 0x7c, 0x67, - 0xfe, 0x76, 0x0a, 0xf0, 0xd5, 0xc6, 0x6e, 0x6a, - 0xe7, 0x5e, 0x4c, 0xf2, 0x7e, 0x9e, 0xf9, 0x20, - 0x0e, 0x54, 0x6f, 0x2d, 0x8a, 0x8d, 0x7e, 0xbd, - 0x48, 0x79, 0x37, 0x99, 0xff, 0x27, 0x93, 0xa3}, /* iv */ - {0xf1, 0x54, 0x3d, 0xca, 0xfe, 0xb5, 0xef, 0x1c, - 0x4f, 0xa6, 0x43, 0xf6, 0xe6, 0x48, 0x57, 0xf0, - 0xee, 0x15, 0x7f, 0xe3, 0xe7, 0x2f, 0xd0, 0x2f, - 0x11, 0x95, 0x7a, 0x17, 0x00, 0xab, 0xa7, 0x0b, - 0xbe, 0x44, 0x09, 0x9c, 0xcd, 0xac, 0xa8, 0x52, - 0xa1, 0x8e, 0x7b, 0x75, 0xbc, 0xa4, 0x92, 0x5a, - 0xab, 0x46, 0xd3, 0x3a, 0xa0, 0xd5, 0x35, 0x1c, - 0x55, 0xa4, 0xb3, 0xa8, 0x40, 0x81, 0xa5, 0x0b}, /* in */ - {0x42, 0xe5, 0x28, 0x30, 0x31, 0xc2, 0xa0, 0x23, - 0x68, 0x49, 0x4e, 0xb3, 0x24, 0x59, 0x92, 0x79, - 0xc1, 0xa5, 0xcc, 0xe6, 0x76, 0x53, 0xb1, 0xcf, - 0x20, 0x86, 0x23, 0xe8, 0x72, 0x55, 0x99, 0x92, - 0x0d, 0x16, 0x1c, 0x5a, 0x2f, 0xce, 0xcb, 0x51, - 0xe2, 0x67, 0xfa, 0x10, 0xec, 0xcd, 0x3d, 0x67, - 0xa5, 0xe6, 0xf7, 0x31, 0x26, 0xb0, 0x0d, 0x76, - 0x5e, 0x28, 0xdc, 0x7f, 0x01, 0xc5, 0xa5, 0x4c}, /* out */ - 32, 64, AES_ENCRYPT}, /* test vector 1 */ - -}; - -static int run_test_vectors(void) -{ - unsigned int n; - int errs = 0; - - for (n = 0; n < sizeof(ige_test_vectors) / sizeof(ige_test_vectors[0]); - ++n) { - const struct ige_test *const v = &ige_test_vectors[n]; - AES_KEY key; - unsigned char buf[MAX_VECTOR_SIZE]; - unsigned char iv[AES_BLOCK_SIZE * 2]; - - assert(v->length <= MAX_VECTOR_SIZE); - - if (v->encrypt == AES_ENCRYPT) - AES_set_encrypt_key(v->key, 8 * sizeof v->key, &key); - else - AES_set_decrypt_key(v->key, 8 * sizeof v->key, &key); - memcpy(iv, v->iv, sizeof iv); - AES_ige_encrypt(v->in, buf, v->length, &key, iv, v->encrypt); - - if (memcmp(v->out, buf, v->length)) { - printf("IGE test vector %d failed\n", n); - hexdump(stdout, "key", v->key, sizeof v->key); - hexdump(stdout, "iv", v->iv, sizeof v->iv); - hexdump(stdout, "in", v->in, v->length); - hexdump(stdout, "expected", v->out, v->length); - hexdump(stdout, "got", buf, v->length); - - ++errs; - } - - /* try with in == out */ - memcpy(iv, v->iv, sizeof iv); - memcpy(buf, v->in, v->length); - AES_ige_encrypt(buf, buf, v->length, &key, iv, v->encrypt); - - if (memcmp(v->out, buf, v->length)) { - printf("IGE test vector %d failed (with in == out)\n", n); - hexdump(stdout, "key", v->key, sizeof v->key); - hexdump(stdout, "iv", v->iv, sizeof v->iv); - hexdump(stdout, "in", v->in, v->length); - hexdump(stdout, "expected", v->out, v->length); - hexdump(stdout, "got", buf, v->length); - - ++errs; - } - } - - for (n = 0; - n < sizeof(bi_ige_test_vectors) / sizeof(bi_ige_test_vectors[0]); - ++n) { - const struct bi_ige_test *const v = &bi_ige_test_vectors[n]; - AES_KEY key1; - AES_KEY key2; - unsigned char buf[MAX_VECTOR_SIZE]; - - assert(v->length <= MAX_VECTOR_SIZE); - - if (v->encrypt == AES_ENCRYPT) { - AES_set_encrypt_key(v->key1, 8 * v->keysize, &key1); - AES_set_encrypt_key(v->key2, 8 * v->keysize, &key2); - } else { - AES_set_decrypt_key(v->key1, 8 * v->keysize, &key1); - AES_set_decrypt_key(v->key2, 8 * v->keysize, &key2); - } - - AES_bi_ige_encrypt(v->in, buf, v->length, &key1, &key2, v->iv, - v->encrypt); - - if (memcmp(v->out, buf, v->length)) { - printf("Bidirectional IGE test vector %d failed\n", n); - hexdump(stdout, "key 1", v->key1, sizeof v->key1); - hexdump(stdout, "key 2", v->key2, sizeof v->key2); - hexdump(stdout, "iv", v->iv, sizeof v->iv); - hexdump(stdout, "in", v->in, v->length); - hexdump(stdout, "expected", v->out, v->length); - hexdump(stdout, "got", buf, v->length); - - ++errs; - } - } - - return errs; -} - -int main(int argc, char **argv) -{ - unsigned char rkey[16]; - unsigned char rkey2[16]; - AES_KEY key; - AES_KEY key2; - unsigned char plaintext[BIG_TEST_SIZE]; - unsigned char ciphertext[BIG_TEST_SIZE]; - unsigned char checktext[BIG_TEST_SIZE]; - unsigned char iv[AES_BLOCK_SIZE * 4]; - unsigned char saved_iv[AES_BLOCK_SIZE * 4]; - int err = 0; - unsigned int n; - unsigned matches; - - assert(BIG_TEST_SIZE >= TEST_SIZE); - - RAND_pseudo_bytes(rkey, sizeof rkey); - RAND_pseudo_bytes(plaintext, sizeof plaintext); - RAND_pseudo_bytes(iv, sizeof iv); - memcpy(saved_iv, iv, sizeof saved_iv); - - /* Forward IGE only... */ - - /* Straight encrypt/decrypt */ - AES_set_encrypt_key(rkey, 8 * sizeof rkey, &key); - AES_ige_encrypt(plaintext, ciphertext, TEST_SIZE, &key, iv, AES_ENCRYPT); - - AES_set_decrypt_key(rkey, 8 * sizeof rkey, &key); - memcpy(iv, saved_iv, sizeof iv); - AES_ige_encrypt(ciphertext, checktext, TEST_SIZE, &key, iv, AES_DECRYPT); - - if (memcmp(checktext, plaintext, TEST_SIZE)) { - printf("Encrypt+decrypt doesn't match\n"); - hexdump(stdout, "Plaintext", plaintext, TEST_SIZE); - hexdump(stdout, "Checktext", checktext, TEST_SIZE); - ++err; - } - - /* Now check encrypt chaining works */ - AES_set_encrypt_key(rkey, 8 * sizeof rkey, &key); - memcpy(iv, saved_iv, sizeof iv); - AES_ige_encrypt(plaintext, ciphertext, TEST_SIZE / 2, &key, iv, - AES_ENCRYPT); - AES_ige_encrypt(plaintext + TEST_SIZE / 2, - ciphertext + TEST_SIZE / 2, TEST_SIZE / 2, - &key, iv, AES_ENCRYPT); - - AES_set_decrypt_key(rkey, 8 * sizeof rkey, &key); - memcpy(iv, saved_iv, sizeof iv); - AES_ige_encrypt(ciphertext, checktext, TEST_SIZE, &key, iv, AES_DECRYPT); - - if (memcmp(checktext, plaintext, TEST_SIZE)) { - printf("Chained encrypt+decrypt doesn't match\n"); - hexdump(stdout, "Plaintext", plaintext, TEST_SIZE); - hexdump(stdout, "Checktext", checktext, TEST_SIZE); - ++err; - } - - /* And check decrypt chaining */ - AES_set_encrypt_key(rkey, 8 * sizeof rkey, &key); - memcpy(iv, saved_iv, sizeof iv); - AES_ige_encrypt(plaintext, ciphertext, TEST_SIZE / 2, &key, iv, - AES_ENCRYPT); - AES_ige_encrypt(plaintext + TEST_SIZE / 2, - ciphertext + TEST_SIZE / 2, TEST_SIZE / 2, - &key, iv, AES_ENCRYPT); - - AES_set_decrypt_key(rkey, 8 * sizeof rkey, &key); - memcpy(iv, saved_iv, sizeof iv); - AES_ige_encrypt(ciphertext, checktext, TEST_SIZE / 2, &key, iv, - AES_DECRYPT); - AES_ige_encrypt(ciphertext + TEST_SIZE / 2, - checktext + TEST_SIZE / 2, TEST_SIZE / 2, &key, iv, - AES_DECRYPT); - - if (memcmp(checktext, plaintext, TEST_SIZE)) { - printf("Chained encrypt+chained decrypt doesn't match\n"); - hexdump(stdout, "Plaintext", plaintext, TEST_SIZE); - hexdump(stdout, "Checktext", checktext, TEST_SIZE); - ++err; - } - - /* make sure garble extends forwards only */ - AES_set_encrypt_key(rkey, 8 * sizeof rkey, &key); - memcpy(iv, saved_iv, sizeof iv); - AES_ige_encrypt(plaintext, ciphertext, sizeof plaintext, &key, iv, - AES_ENCRYPT); - - /* corrupt halfway through */ - ++ciphertext[sizeof ciphertext / 2]; - AES_set_decrypt_key(rkey, 8 * sizeof rkey, &key); - memcpy(iv, saved_iv, sizeof iv); - AES_ige_encrypt(ciphertext, checktext, sizeof checktext, &key, iv, - AES_DECRYPT); - - matches = 0; - for (n = 0; n < sizeof checktext; ++n) - if (checktext[n] == plaintext[n]) - ++matches; - - if (matches > sizeof checktext / 2 + sizeof checktext / 100) { - printf("More than 51%% matches after garbling\n"); - ++err; - } - - if (matches < sizeof checktext / 2) { - printf("Garble extends backwards!\n"); - ++err; - } - - /* Bi-directional IGE */ - - /* - * Note that we don't have to recover the IV, because chaining isn't - */ - /* possible with biIGE, so the IV is not updated. */ - - RAND_pseudo_bytes(rkey2, sizeof rkey2); - - /* Straight encrypt/decrypt */ - AES_set_encrypt_key(rkey, 8 * sizeof rkey, &key); - AES_set_encrypt_key(rkey2, 8 * sizeof rkey2, &key2); - AES_bi_ige_encrypt(plaintext, ciphertext, TEST_SIZE, &key, &key2, iv, - AES_ENCRYPT); - - AES_set_decrypt_key(rkey, 8 * sizeof rkey, &key); - AES_set_decrypt_key(rkey2, 8 * sizeof rkey2, &key2); - AES_bi_ige_encrypt(ciphertext, checktext, TEST_SIZE, &key, &key2, iv, - AES_DECRYPT); - - if (memcmp(checktext, plaintext, TEST_SIZE)) { - printf("Encrypt+decrypt doesn't match\n"); - hexdump(stdout, "Plaintext", plaintext, TEST_SIZE); - hexdump(stdout, "Checktext", checktext, TEST_SIZE); - ++err; - } - - /* make sure garble extends both ways */ - AES_set_encrypt_key(rkey, 8 * sizeof rkey, &key); - AES_set_encrypt_key(rkey2, 8 * sizeof rkey2, &key2); - AES_ige_encrypt(plaintext, ciphertext, sizeof plaintext, &key, iv, - AES_ENCRYPT); - - /* corrupt halfway through */ - ++ciphertext[sizeof ciphertext / 2]; - AES_set_decrypt_key(rkey, 8 * sizeof rkey, &key); - AES_set_decrypt_key(rkey2, 8 * sizeof rkey2, &key2); - AES_ige_encrypt(ciphertext, checktext, sizeof checktext, &key, iv, - AES_DECRYPT); - - matches = 0; - for (n = 0; n < sizeof checktext; ++n) - if (checktext[n] == plaintext[n]) - ++matches; - - if (matches > sizeof checktext / 100) { - printf("More than 1%% matches after bidirectional garbling\n"); - ++err; - } - - /* make sure garble extends both ways (2) */ - AES_set_encrypt_key(rkey, 8 * sizeof rkey, &key); - AES_set_encrypt_key(rkey2, 8 * sizeof rkey2, &key2); - AES_ige_encrypt(plaintext, ciphertext, sizeof plaintext, &key, iv, - AES_ENCRYPT); - - /* corrupt right at the end */ - ++ciphertext[sizeof ciphertext - 1]; - AES_set_decrypt_key(rkey, 8 * sizeof rkey, &key); - AES_set_decrypt_key(rkey2, 8 * sizeof rkey2, &key2); - AES_ige_encrypt(ciphertext, checktext, sizeof checktext, &key, iv, - AES_DECRYPT); - - matches = 0; - for (n = 0; n < sizeof checktext; ++n) - if (checktext[n] == plaintext[n]) - ++matches; - - if (matches > sizeof checktext / 100) { - printf("More than 1%% matches after bidirectional garbling (2)\n"); - ++err; - } - - /* make sure garble extends both ways (3) */ - AES_set_encrypt_key(rkey, 8 * sizeof rkey, &key); - AES_set_encrypt_key(rkey2, 8 * sizeof rkey2, &key2); - AES_ige_encrypt(plaintext, ciphertext, sizeof plaintext, &key, iv, - AES_ENCRYPT); - - /* corrupt right at the start */ - ++ciphertext[0]; - AES_set_decrypt_key(rkey, 8 * sizeof rkey, &key); - AES_set_decrypt_key(rkey2, 8 * sizeof rkey2, &key2); - AES_ige_encrypt(ciphertext, checktext, sizeof checktext, &key, iv, - AES_DECRYPT); - - matches = 0; - for (n = 0; n < sizeof checktext; ++n) - if (checktext[n] == plaintext[n]) - ++matches; - - if (matches > sizeof checktext / 100) { - printf("More than 1%% matches after bidirectional garbling (3)\n"); - ++err; - } - - err += run_test_vectors(); - - return err; -} diff --git a/test/igetest.c b/test/igetest.c new file mode 120000 index 00000000..49f44f8b --- /dev/null +++ b/test/igetest.c @@ -0,0 +1 @@ +dummytest.c \ No newline at end of file diff --git a/test/jpaketest.c b/test/jpaketest.c deleted file mode 100644 index 554acc22..00000000 --- a/test/jpaketest.c +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -int main(int argc, char *argv[]) -{ - char *p, *q = 0, *program; - - p = strrchr(argv[0], '/'); - if (!p) - p = strrchr(argv[0], '\\'); -#ifdef OPENSSL_SYS_VMS - if (!p) - p = strrchr(argv[0], ']'); - if (p) - q = strrchr(p, '>'); - if (q) - p = q; - if (!p) - p = strrchr(argv[0], ':'); - q = 0; -#endif - if (p) - p++; - if (!p) - p = argv[0]; - if (p) - q = strchr(p, '.'); - if (p && !q) - q = p + strlen(p); - - if (!p) - program = BUF_strdup("(unknown)"); - else { - program = OPENSSL_malloc((q - p) + 1); - strncpy(program, p, q - p); - program[q - p] = '\0'; - } - - for (p = program; *p; p++) - if (islower((unsigned char)(*p))) - *p = toupper((unsigned char)(*p)); - - q = strstr(program, "TEST"); - if (q > p && q[-1] == '_') - q--; - *q = '\0'; - - printf("No %s support\n", program); - - OPENSSL_free(program); - return (0); -} diff --git a/test/jpaketest.c b/test/jpaketest.c new file mode 120000 index 00000000..49f44f8b --- /dev/null +++ b/test/jpaketest.c @@ -0,0 +1 @@ +dummytest.c \ No newline at end of file diff --git a/test/kdftest.c b/test/kdftest.c new file mode 120000 index 00000000..a9a2ffe9 --- /dev/null +++ b/test/kdftest.c @@ -0,0 +1 @@ +../crypto/kdf/kdftest.c \ No newline at end of file diff --git a/test/md2test.c b/test/md2test.c deleted file mode 100644 index 554acc22..00000000 --- a/test/md2test.c +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -int main(int argc, char *argv[]) -{ - char *p, *q = 0, *program; - - p = strrchr(argv[0], '/'); - if (!p) - p = strrchr(argv[0], '\\'); -#ifdef OPENSSL_SYS_VMS - if (!p) - p = strrchr(argv[0], ']'); - if (p) - q = strrchr(p, '>'); - if (q) - p = q; - if (!p) - p = strrchr(argv[0], ':'); - q = 0; -#endif - if (p) - p++; - if (!p) - p = argv[0]; - if (p) - q = strchr(p, '.'); - if (p && !q) - q = p + strlen(p); - - if (!p) - program = BUF_strdup("(unknown)"); - else { - program = OPENSSL_malloc((q - p) + 1); - strncpy(program, p, q - p); - program[q - p] = '\0'; - } - - for (p = program; *p; p++) - if (islower((unsigned char)(*p))) - *p = toupper((unsigned char)(*p)); - - q = strstr(program, "TEST"); - if (q > p && q[-1] == '_') - q--; - *q = '\0'; - - printf("No %s support\n", program); - - OPENSSL_free(program); - return (0); -} diff --git a/test/md2test.c b/test/md2test.c new file mode 120000 index 00000000..49f44f8b --- /dev/null +++ b/test/md2test.c @@ -0,0 +1 @@ +dummytest.c \ No newline at end of file diff --git a/test/newkey.pem b/test/newkey.pem deleted file mode 100644 index 178ae015..00000000 --- a/test/newkey.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC1Mb8lOEK7K94V -4GqTS05d/DYPQY24N5WgnMH7Lj6Js7NcpkMK8JENGw4oOEHd3mKe1B2lGAoOT9rq -I1A2MUaZ4K2h6Gs6j3Ez5SGu7lyJFUZcEfI4Oc+1wV6aW7Qd6lOTX0H6IH328Anc -C+sa2CSYnSpnTqcv/iSdB+DPX6NaO9o3krcxYgrnS7FE5pIKEg3yfKfWANQnceFD -yvOwZ6CVx8WjSO3qUhLB6yOzlwmcIUOyLQMuMaM9pxtMl8LlvMaXMW8LNGopCGOP -0PpY5cDUe2Xqm5ZPT2fG4lm+uJyLPJ5/NV0roo/QKEP/Atv4SmGSOHQ024fbJBgm -cCwIxSNpAgMBAAECggEACWOeiAs2SgSn6XJLk35ffTdIhdnbwiP/OOdmleF7lB8f -uDlVWAfHPGqefS8NGrYfXiOXtapdOwigS2mxCl3bTrX5yV4F0G8Gaq4A5NOtL91O -XA8CAi/ct4phoJYH61TtJ8HT5WYxoM4ndKOZdzakDtR2EgxdVXtR4mE6IQTPrik9 -fwO4F/yT/ysTuKGdDDBoklBlVxatFjqGqOjDPdb6P4ZSDPyc6Ecj1b6/JubVMkLW -Lf8cXLpRqpzoo1pRB1GV3RBnKrXt3FlUvgaH3Xi19F7wDz4Wh29/RY8u2QmWujdm -Jmb6kawqrFpoJrQcoYYnkbPYcTOMC2j2UqD+p4smAQKBgQDZ8kk7QCzXIgc9eXil -SscWqSZluQ1rX9Cppx6U+NffWtorEONc8JtjT18gUuojajHAam6ZDsBImp7BNf5d -OZMaH1b4Q8ub1i5ZGxVf/uS4YF1572uLs3h34JNTxaBHKyLGLfy9MWvQpqW40DFR -CEovk+hHUXMPgcJyGnKeP3EXWQKBgQDU1LlrYVOoe3ZJ518F8KJaSPZlu44U4sv3 -ut623pfjt7gdL+WTBN3gOpGstsOBs+Sf3OeL6A96OjUI9OgRbAqG4Oq6sLZBo2vm -UhyNr+WjDrwxeHZ3WL82rgnxJpfmIAQbbEYe33kOuinbAUR57a4YrPGiaBUnUNzY -IcCMPPr6kQKBgANwSSuAJbT3OnoD0p15Ao8e+BYex1FsX5RtqJPdITrK6ipHx+6N -dUYp2GxgIoWQhVxt0XTkwK/kkKCnw22hHOsKl4qvNyUsSerp/HpZQS6PhqoH1wCL -QllR18E4mwDEc3YA/73Ua8kM+AxkbILEyLbbdIy7gj86YuD9/dT1V0lxAoGBAJPG -9MwTcyQcPcEI7xjPwdsQqE1xEjF8XIWxcizll+9cxHE3rZ8MlQa5hCa5bDyl7Qv3 -NasWQZDr06FZc72NGC4ZA8MHKjWfRC9TOlJDHR6//3oWG6O4smREKdEQrA30kwV7 -g6CyKHtKVf+j/KjwmJ63jrvmqzF2WzGTFgAJ43aRAoGAHxvIh+Uh9Ouq953ISPVT -SY76Ab8hkgttTBlBkUCJkKcIfk1AGOl7+WRIW1nM0Vb3+Ev1NoEurL0czWCHIMYm -LhqZVeyEdq1z4MXL6KDMZqNp3o79GJ3lqap7jFHVie0RUAvSxRMbMcAN2JpupWKy -w+1b/rhHMoOABqBjB2LZwso= ------END PRIVATE KEY----- diff --git a/test/rc5test.c b/test/rc5test.c deleted file mode 100644 index 554acc22..00000000 --- a/test/rc5test.c +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -int main(int argc, char *argv[]) -{ - char *p, *q = 0, *program; - - p = strrchr(argv[0], '/'); - if (!p) - p = strrchr(argv[0], '\\'); -#ifdef OPENSSL_SYS_VMS - if (!p) - p = strrchr(argv[0], ']'); - if (p) - q = strrchr(p, '>'); - if (q) - p = q; - if (!p) - p = strrchr(argv[0], ':'); - q = 0; -#endif - if (p) - p++; - if (!p) - p = argv[0]; - if (p) - q = strchr(p, '.'); - if (p && !q) - q = p + strlen(p); - - if (!p) - program = BUF_strdup("(unknown)"); - else { - program = OPENSSL_malloc((q - p) + 1); - strncpy(program, p, q - p); - program[q - p] = '\0'; - } - - for (p = program; *p; p++) - if (islower((unsigned char)(*p))) - *p = toupper((unsigned char)(*p)); - - q = strstr(program, "TEST"); - if (q > p && q[-1] == '_') - q--; - *q = '\0'; - - printf("No %s support\n", program); - - OPENSSL_free(program); - return (0); -} diff --git a/test/rc5test.c b/test/rc5test.c new file mode 120000 index 00000000..49f44f8b --- /dev/null +++ b/test/rc5test.c @@ -0,0 +1 @@ +dummytest.c \ No newline at end of file diff --git a/test/sm9test.c b/test/sm9test.c new file mode 120000 index 00000000..2b0b543a --- /dev/null +++ b/test/sm9test.c @@ -0,0 +1 @@ +../crypto/sm9/sm9test.c \ No newline at end of file diff --git a/test/testkey.pem b/test/testkey.pem deleted file mode 100644 index d7ee8fcb..00000000 --- a/test/testkey.pem +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAN0DTVGDDYkp01ke -wBi3DmoGCzfKI4nrPJPyVu8oC4XWShhnkJ4kSc/Bwl76dCxNKhTpcR2uxSBde5bn -auOLP+VY9uHWRg3GHwOb+Pf+pKR1RtITC9rwP1on8nL3GnqOQnV2dDcKFheaBxI9 -M9S76Is02uBt1PrcOdkyKmKo4DWNAgMBAAECgYBXqDydTLYspbseiLS12LzNzlHa -scCArh0brK1QM3jGf2Rp44GXR1tDHF1EIF+9RmmfW6syk6O5n3oqMuTRFOSlDH+r -DtoJ1jbp2X9AuVwdTPBU3fZnJiDRaQvaHJvyDCpIRhnvgXNDDHUSjes4fmh63zIP -mqH7Q2dXPLyrKEXR/QJBAPAhMQbR2PfWHlSYbkNkW/AodVQBJ/tuSvomraaSXOn6 -6jjfBkxAHGsCDVcOh2VoN3kYPm0WMzAxrL76uZlBRv8CQQDrnqt1FJFNpGFrQVrB -p4gadayCQxymAb8ZfrjU46Tk7wI4XuXWa7euxvEm+QcUhj5TSOnVUOrluunNZG5r -+69zAkAaRHc5eMEUM070EAyXwKWx+qsC+nFmNqVrAcojG4WgbrsqZ3Mn6idxqTLO -YB99f036KCXEBxaoYfa0mXauBg7/AkEAyPcq0s/aJ1kfZnX1zNrx8W+Q1gIb+1Pe -BQba62nHCST6xc3bR4nUv5Qbt9wLt+vQWQUFvNYppAxKws74h83CFQJAc3HhcW8B -5esRCIN27P96A2VIKCIZz/bdZbNc/ZdEoZfdJkqcfjdTyDAT7rbPPRVmK5uhNJXX -T6pPymp3g8QJvA== ------END PRIVATE KEY----- diff --git a/test/testreq.pem b/test/testreq.pem deleted file mode 100644 index a863636c..00000000 --- a/test/testreq.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIByDCCATECAQAwgYcxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApRdWVlbnNsYW5k -MREwDwYDVQQHDAhCcmlzYmFuZTEaMBgGA1UECgwRQ3J5cHRTb2Z0IFB0eSBMdGQx -EzARBgNVBAMMCkVyaWMgWW91bmcxHzAdBgkqhkiG9w0BCQEWEGVheUBtaW5jb20u -b3ouYXUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAN0DTVGDDYkp01kewBi3 -DmoGCzfKI4nrPJPyVu8oC4XWShhnkJ4kSc/Bwl76dCxNKhTpcR2uxSBde5bnauOL -P+VY9uHWRg3GHwOb+Pf+pKR1RtITC9rwP1on8nL3GnqOQnV2dDcKFheaBxI9M9S7 -6Is02uBt1PrcOdkyKmKo4DWNAgMBAAGgADANBgkqhkiG9w0BAQsFAAOBgQAqKiyZ -VzABTlA18Z/L89zHR7fRYaoag/+3iJwe/uYRS5vLNG5d5fYWGygyfxw2NlV2i21/ -runiOSQ5LdHLQlfStij6pjEs0B/dsXzWSktlR89b7cob2paVOCZca0XPY26PERUL -1fZaFfsq7nix4dtAKrgoSMz/fuuHPXrZ14T6zw== ------END CERTIFICATE REQUEST----- diff --git a/test/zuctest.c b/test/zuctest.c new file mode 120000 index 00000000..0c1e2824 --- /dev/null +++ b/test/zuctest.c @@ -0,0 +1 @@ +../crypto/zuc/zuctest.c \ No newline at end of file