diff options
| author | djm <> | 2011-11-03 02:32:21 +0000 |
|---|---|---|
| committer | djm <> | 2011-11-03 02:32:21 +0000 |
| commit | 217868ba06006584e019bb825f91c811747a4cba (patch) | |
| tree | 79374ba6e81c08ba6e78220557d6f6e9ca03f7b7 /src/lib/libssl/src | |
| parent | 2dd8058114e20f1cd7c897166a4ce75ed390ee54 (diff) | |
| download | openbsd-217868ba06006584e019bb825f91c811747a4cba.tar.gz openbsd-217868ba06006584e019bb825f91c811747a4cba.tar.bz2 openbsd-217868ba06006584e019bb825f91c811747a4cba.zip | |
import OpenSSL 1.0.0e
Diffstat (limited to 'src/lib/libssl/src')
71 files changed, 1304 insertions, 595 deletions
diff --git a/src/lib/libssl/src/ACKNOWLEDGMENTS b/src/lib/libssl/src/ACKNOWLEDGMENTS new file mode 100644 index 0000000000..fb6dd912c4 --- /dev/null +++ b/src/lib/libssl/src/ACKNOWLEDGMENTS | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | The OpenSSL project depends on volunteer efforts and financial support from | ||
| 2 | the end user community. That support comes in the form of donations and paid | ||
| 3 | sponsorships, software support contracts, paid consulting services | ||
| 4 | and commissioned software development. | ||
| 5 | |||
| 6 | Since all these activities support the continued development and improvement | ||
| 7 | of OpenSSL we consider all these clients and customers as sponsors of the | ||
| 8 | OpenSSL project. | ||
| 9 | |||
| 10 | We would like to identify and thank the following such sponsors for their past | ||
| 11 | or current significant support of the OpenSSL project: | ||
| 12 | |||
| 13 | Very significant support: | ||
| 14 | |||
| 15 | OpenGear: www.opengear.com | ||
| 16 | |||
| 17 | Significant support: | ||
| 18 | |||
| 19 | PSW Group: www.psw.net | ||
| 20 | |||
| 21 | Please note that we ask permission to identify sponsors and that some sponsors | ||
| 22 | we consider eligible for inclusion here have requested to remain anonymous. | ||
| 23 | |||
| 24 | Additional sponsorship or financial support is always welcome: for more | ||
| 25 | information please contact the OpenSSL Software Foundation. | ||
diff --git a/src/lib/libssl/src/Makefile.shared b/src/lib/libssl/src/Makefile.shared index 3569832f1b..e753f44e18 100644 --- a/src/lib/libssl/src/Makefile.shared +++ b/src/lib/libssl/src/Makefile.shared | |||
| @@ -135,7 +135,7 @@ LINK_SO_A_VIA_O= \ | |||
| 135 | ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \ | 135 | ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \ |
| 136 | ( $(SET_X); \ | 136 | ( $(SET_X); \ |
| 137 | ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \ | 137 | ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \ |
| 138 | $(LINK_SO) && rm -f $(LIBNAME).o | 138 | $(LINK_SO) && rm -f lib$(LIBNAME).o |
| 139 | 139 | ||
| 140 | LINK_SO_A_UNPACKED= \ | 140 | LINK_SO_A_UNPACKED= \ |
| 141 | UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \ | 141 | UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \ |
| @@ -207,17 +207,29 @@ link_app.bsd: | |||
| 207 | fi; $(LINK_APP) | 207 | fi; $(LINK_APP) |
| 208 | 208 | ||
| 209 | # For Darwin AKA Mac OS/X (dyld) | 209 | # For Darwin AKA Mac OS/X (dyld) |
| 210 | # link_o.darwin produces .so, because we let it use dso_dlfcn module, | 210 | # Originally link_o.darwin produced .so, because it was hard-coded |
| 211 | # which has .so extension hard-coded. One can argue that one should | 211 | # in dso_dlfcn module. At later point dso_dlfcn switched to .dylib |
| 212 | # develop special dso module for MacOS X. At least manual encourages | 212 | # extension in order to allow for run-time linking with vendor- |
| 213 | # to use native NSModule(3) API and refers to dlfcn as termporary hack. | 213 | # supplied shared libraries such as libz, so that link_o.darwin had |
| 214 | # to be harmonized with it. This caused minor controversy, because | ||
| 215 | # it was believed that dlopen can't be used to dynamically load | ||
| 216 | # .dylib-s, only so called bundle modules (ones linked with -bundle | ||
| 217 | # flag). The belief seems to be originating from pre-10.4 release, | ||
| 218 | # where dlfcn functionality was emulated by dlcompat add-on. In | ||
| 219 | # 10.4 dlopen was rewritten as native part of dyld and is documented | ||
| 220 | # to be capable of loading both dynamic libraries and bundles. In | ||
| 221 | # order to provide compatibility with pre-10.4 dlopen, modules are | ||
| 222 | # linked with -bundle flag, which makes .dylib extension misleading. | ||
| 223 | # It works, because dlopen is [and always was] extension-agnostic. | ||
| 224 | # Alternative to this heuristic approach is to develop specific | ||
| 225 | # MacOS X dso module relying on whichever "native" dyld interface. | ||
| 214 | link_o.darwin: | 226 | link_o.darwin: |
| 215 | @ $(CALC_VERSIONS); \ | 227 | @ $(CALC_VERSIONS); \ |
| 216 | SHLIB=lib$(LIBNAME); \ | 228 | SHLIB=lib$(LIBNAME); \ |
| 217 | SHLIB_SUFFIX=.so; \ | 229 | SHLIB_SUFFIX=.dylib; \ |
| 218 | ALLSYMSFLAGS='-all_load'; \ | 230 | ALLSYMSFLAGS='-all_load'; \ |
| 219 | NOALLSYMSFLAGS=''; \ | 231 | NOALLSYMSFLAGS=''; \ |
| 220 | SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS)"; \ | 232 | SHAREDFLAGS="$(CFLAGS) `echo $(SHARED_LDFLAGS) | sed s/dynamiclib/bundle/`"; \ |
| 221 | if [ -n "$(LIBVERSION)" ]; then \ | 233 | if [ -n "$(LIBVERSION)" ]; then \ |
| 222 | SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \ | 234 | SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \ |
| 223 | fi; \ | 235 | fi; \ |
diff --git a/src/lib/libssl/src/apps/ec.c b/src/lib/libssl/src/apps/ec.c index 31194b48df..896eabc13f 100644 --- a/src/lib/libssl/src/apps/ec.c +++ b/src/lib/libssl/src/apps/ec.c | |||
| @@ -85,9 +85,6 @@ int MAIN(int, char **); | |||
| 85 | 85 | ||
| 86 | int MAIN(int argc, char **argv) | 86 | int MAIN(int argc, char **argv) |
| 87 | { | 87 | { |
| 88 | #ifndef OPENSSL_NO_ENGINE | ||
| 89 | ENGINE *e = NULL; | ||
| 90 | #endif | ||
| 91 | int ret = 1; | 88 | int ret = 1; |
| 92 | EC_KEY *eckey = NULL; | 89 | EC_KEY *eckey = NULL; |
| 93 | const EC_GROUP *group; | 90 | const EC_GROUP *group; |
| @@ -254,7 +251,7 @@ bad: | |||
| 254 | ERR_load_crypto_strings(); | 251 | ERR_load_crypto_strings(); |
| 255 | 252 | ||
| 256 | #ifndef OPENSSL_NO_ENGINE | 253 | #ifndef OPENSSL_NO_ENGINE |
| 257 | e = setup_engine(bio_err, engine, 0); | 254 | setup_engine(bio_err, engine, 0); |
| 258 | #endif | 255 | #endif |
| 259 | 256 | ||
| 260 | if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) | 257 | if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) |
diff --git a/src/lib/libssl/src/apps/ecparam.c b/src/lib/libssl/src/apps/ecparam.c index e9aa0a184a..465480bedd 100644 --- a/src/lib/libssl/src/apps/ecparam.c +++ b/src/lib/libssl/src/apps/ecparam.c | |||
| @@ -129,9 +129,6 @@ int MAIN(int argc, char **argv) | |||
| 129 | char *infile = NULL, *outfile = NULL, *prog; | 129 | char *infile = NULL, *outfile = NULL, *prog; |
| 130 | BIO *in = NULL, *out = NULL; | 130 | BIO *in = NULL, *out = NULL; |
| 131 | int informat, outformat, noout = 0, C = 0, ret = 1; | 131 | int informat, outformat, noout = 0, C = 0, ret = 1; |
| 132 | #ifndef OPENSSL_NO_ENGINE | ||
| 133 | ENGINE *e = NULL; | ||
| 134 | #endif | ||
| 135 | char *engine = NULL; | 132 | char *engine = NULL; |
| 136 | 133 | ||
| 137 | BIGNUM *ec_p = NULL, *ec_a = NULL, *ec_b = NULL, | 134 | BIGNUM *ec_p = NULL, *ec_a = NULL, *ec_b = NULL, |
| @@ -340,7 +337,7 @@ bad: | |||
| 340 | } | 337 | } |
| 341 | 338 | ||
| 342 | #ifndef OPENSSL_NO_ENGINE | 339 | #ifndef OPENSSL_NO_ENGINE |
| 343 | e = setup_engine(bio_err, engine, 0); | 340 | setup_engine(bio_err, engine, 0); |
| 344 | #endif | 341 | #endif |
| 345 | 342 | ||
| 346 | if (list_curves) | 343 | if (list_curves) |
diff --git a/src/lib/libssl/src/apps/pkeyparam.c b/src/lib/libssl/src/apps/pkeyparam.c index 7f18010f9d..6f7a357a36 100644 --- a/src/lib/libssl/src/apps/pkeyparam.c +++ b/src/lib/libssl/src/apps/pkeyparam.c | |||
| @@ -74,7 +74,6 @@ int MAIN(int argc, char **argv) | |||
| 74 | EVP_PKEY *pkey=NULL; | 74 | EVP_PKEY *pkey=NULL; |
| 75 | int badarg = 0; | 75 | int badarg = 0; |
| 76 | #ifndef OPENSSL_NO_ENGINE | 76 | #ifndef OPENSSL_NO_ENGINE |
| 77 | ENGINE *e = NULL; | ||
| 78 | char *engine=NULL; | 77 | char *engine=NULL; |
| 79 | #endif | 78 | #endif |
| 80 | int ret = 1; | 79 | int ret = 1; |
| @@ -141,7 +140,7 @@ int MAIN(int argc, char **argv) | |||
| 141 | } | 140 | } |
| 142 | 141 | ||
| 143 | #ifndef OPENSSL_NO_ENGINE | 142 | #ifndef OPENSSL_NO_ENGINE |
| 144 | e = setup_engine(bio_err, engine, 0); | 143 | setup_engine(bio_err, engine, 0); |
| 145 | #endif | 144 | #endif |
| 146 | 145 | ||
| 147 | if (infile) | 146 | if (infile) |
diff --git a/src/lib/libssl/src/apps/pkeyutl.c b/src/lib/libssl/src/apps/pkeyutl.c index 22a6c4bf39..7eb3f5c544 100644 --- a/src/lib/libssl/src/apps/pkeyutl.c +++ b/src/lib/libssl/src/apps/pkeyutl.c | |||
| @@ -119,17 +119,17 @@ int MAIN(int argc, char **argv) | |||
| 119 | if (!strcmp(*argv,"-in")) | 119 | if (!strcmp(*argv,"-in")) |
| 120 | { | 120 | { |
| 121 | if (--argc < 1) badarg = 1; | 121 | if (--argc < 1) badarg = 1; |
| 122 | infile= *(++argv); | 122 | else infile= *(++argv); |
| 123 | } | 123 | } |
| 124 | else if (!strcmp(*argv,"-out")) | 124 | else if (!strcmp(*argv,"-out")) |
| 125 | { | 125 | { |
| 126 | if (--argc < 1) badarg = 1; | 126 | if (--argc < 1) badarg = 1; |
| 127 | outfile= *(++argv); | 127 | else outfile= *(++argv); |
| 128 | } | 128 | } |
| 129 | else if (!strcmp(*argv,"-sigfile")) | 129 | else if (!strcmp(*argv,"-sigfile")) |
| 130 | { | 130 | { |
| 131 | if (--argc < 1) badarg = 1; | 131 | if (--argc < 1) badarg = 1; |
| 132 | sigfile= *(++argv); | 132 | else sigfile= *(++argv); |
| 133 | } | 133 | } |
| 134 | else if(!strcmp(*argv, "-inkey")) | 134 | else if(!strcmp(*argv, "-inkey")) |
| 135 | { | 135 | { |
| @@ -159,17 +159,17 @@ int MAIN(int argc, char **argv) | |||
| 159 | else if (!strcmp(*argv,"-passin")) | 159 | else if (!strcmp(*argv,"-passin")) |
| 160 | { | 160 | { |
| 161 | if (--argc < 1) badarg = 1; | 161 | if (--argc < 1) badarg = 1; |
| 162 | passargin= *(++argv); | 162 | else passargin= *(++argv); |
| 163 | } | 163 | } |
| 164 | else if (strcmp(*argv,"-peerform") == 0) | 164 | else if (strcmp(*argv,"-peerform") == 0) |
| 165 | { | 165 | { |
| 166 | if (--argc < 1) badarg = 1; | 166 | if (--argc < 1) badarg = 1; |
| 167 | peerform=str2fmt(*(++argv)); | 167 | else peerform=str2fmt(*(++argv)); |
| 168 | } | 168 | } |
| 169 | else if (strcmp(*argv,"-keyform") == 0) | 169 | else if (strcmp(*argv,"-keyform") == 0) |
| 170 | { | 170 | { |
| 171 | if (--argc < 1) badarg = 1; | 171 | if (--argc < 1) badarg = 1; |
| 172 | keyform=str2fmt(*(++argv)); | 172 | else keyform=str2fmt(*(++argv)); |
| 173 | } | 173 | } |
| 174 | #ifndef OPENSSL_NO_ENGINE | 174 | #ifndef OPENSSL_NO_ENGINE |
| 175 | else if(!strcmp(*argv, "-engine")) | 175 | else if(!strcmp(*argv, "-engine")) |
diff --git a/src/lib/libssl/src/apps/vms_decc_init.c b/src/lib/libssl/src/apps/vms_decc_init.c new file mode 100755 index 0000000000..f512c8f1bc --- /dev/null +++ b/src/lib/libssl/src/apps/vms_decc_init.c | |||
| @@ -0,0 +1,188 @@ | |||
| 1 | #if defined( __VMS) && !defined( OPENSSL_NO_DECC_INIT) && \ | ||
| 2 | defined( __DECC) && !defined( __VAX) && (__CRTL_VER >= 70301000) | ||
| 3 | # define USE_DECC_INIT 1 | ||
| 4 | #endif | ||
| 5 | |||
| 6 | #ifdef USE_DECC_INIT | ||
| 7 | |||
| 8 | /* | ||
| 9 | * 2010-04-26 SMS. | ||
| 10 | * | ||
| 11 | *---------------------------------------------------------------------- | ||
| 12 | * | ||
| 13 | * decc_init() | ||
| 14 | * | ||
| 15 | * On non-VAX systems, uses LIB$INITIALIZE to set a collection of C | ||
| 16 | * RTL features without using the DECC$* logical name method. | ||
| 17 | * | ||
| 18 | *---------------------------------------------------------------------- | ||
| 19 | */ | ||
| 20 | |||
| 21 | #include <stdio.h> | ||
| 22 | #include <stdlib.h> | ||
| 23 | #include <unixlib.h> | ||
| 24 | |||
| 25 | |||
| 26 | /* Global storage. */ | ||
| 27 | |||
| 28 | /* Flag to sense if decc_init() was called. */ | ||
| 29 | |||
| 30 | int decc_init_done = -1; | ||
| 31 | |||
| 32 | |||
| 33 | /* Structure to hold a DECC$* feature name and its desired value. */ | ||
| 34 | |||
| 35 | typedef struct | ||
| 36 | { | ||
| 37 | char *name; | ||
| 38 | int value; | ||
| 39 | } decc_feat_t; | ||
| 40 | |||
| 41 | |||
| 42 | /* Array of DECC$* feature names and their desired values. | ||
| 43 | * Note: DECC$ARGV_PARSE_STYLE is the urgent one. | ||
| 44 | */ | ||
| 45 | |||
| 46 | decc_feat_t decc_feat_array[] = | ||
| 47 | { | ||
| 48 | /* Preserve command-line case with SET PROCESS/PARSE_STYLE=EXTENDED */ | ||
| 49 | { "DECC$ARGV_PARSE_STYLE", 1 }, | ||
| 50 | |||
| 51 | /* Preserve case for file names on ODS5 disks. */ | ||
| 52 | { "DECC$EFS_CASE_PRESERVE", 1 }, | ||
| 53 | |||
| 54 | /* Enable multiple dots (and most characters) in ODS5 file names, | ||
| 55 | * while preserving VMS-ness of ";version". | ||
| 56 | */ | ||
| 57 | { "DECC$EFS_CHARSET", 1 }, | ||
| 58 | |||
| 59 | /* List terminator. */ | ||
| 60 | { (char *)NULL, 0 } | ||
| 61 | }; | ||
| 62 | |||
| 63 | |||
| 64 | /* LIB$INITIALIZE initialization function. */ | ||
| 65 | |||
| 66 | static void decc_init( void) | ||
| 67 | { | ||
| 68 | char *openssl_debug_decc_init; | ||
| 69 | int verbose = 0; | ||
| 70 | int feat_index; | ||
| 71 | int feat_value; | ||
| 72 | int feat_value_max; | ||
| 73 | int feat_value_min; | ||
| 74 | int i; | ||
| 75 | int sts; | ||
| 76 | |||
| 77 | /* Get debug option. */ | ||
| 78 | openssl_debug_decc_init = getenv( "OPENSSL_DEBUG_DECC_INIT"); | ||
| 79 | if (openssl_debug_decc_init != NULL) | ||
| 80 | { | ||
| 81 | verbose = strtol( openssl_debug_decc_init, NULL, 10); | ||
| 82 | if (verbose <= 0) | ||
| 83 | { | ||
| 84 | verbose = 1; | ||
| 85 | } | ||
| 86 | } | ||
| 87 | |||
| 88 | /* Set the global flag to indicate that LIB$INITIALIZE worked. */ | ||
| 89 | decc_init_done = 1; | ||
| 90 | |||
| 91 | /* Loop through all items in the decc_feat_array[]. */ | ||
| 92 | |||
| 93 | for (i = 0; decc_feat_array[ i].name != NULL; i++) | ||
| 94 | { | ||
| 95 | /* Get the feature index. */ | ||
| 96 | feat_index = decc$feature_get_index( decc_feat_array[ i].name); | ||
| 97 | if (feat_index >= 0) | ||
| 98 | { | ||
| 99 | /* Valid item. Collect its properties. */ | ||
| 100 | feat_value = decc$feature_get_value( feat_index, 1); | ||
| 101 | feat_value_min = decc$feature_get_value( feat_index, 2); | ||
| 102 | feat_value_max = decc$feature_get_value( feat_index, 3); | ||
| 103 | |||
| 104 | /* Check the validity of our desired value. */ | ||
| 105 | if ((decc_feat_array[ i].value >= feat_value_min) && | ||
| 106 | (decc_feat_array[ i].value <= feat_value_max)) | ||
| 107 | { | ||
| 108 | /* Valid value. Set it if necessary. */ | ||
| 109 | if (feat_value != decc_feat_array[ i].value) | ||
| 110 | { | ||
| 111 | sts = decc$feature_set_value( feat_index, | ||
| 112 | 1, | ||
| 113 | decc_feat_array[ i].value); | ||
| 114 | |||
| 115 | if (verbose > 1) | ||
| 116 | { | ||
| 117 | fprintf( stderr, " %s = %d, sts = %d.\n", | ||
| 118 | decc_feat_array[ i].name, | ||
| 119 | decc_feat_array[ i].value, | ||
| 120 | sts); | ||
| 121 | } | ||
| 122 | } | ||
| 123 | } | ||
| 124 | else | ||
| 125 | { | ||
| 126 | /* Invalid DECC feature value. */ | ||
| 127 | fprintf( stderr, | ||
| 128 | " INVALID DECC$FEATURE VALUE, %d: %d <= %s <= %d.\n", | ||
| 129 | feat_value, | ||
| 130 | feat_value_min, decc_feat_array[ i].name, feat_value_max); | ||
| 131 | } | ||
| 132 | } | ||
| 133 | else | ||
| 134 | { | ||
| 135 | /* Invalid DECC feature name. */ | ||
| 136 | fprintf( stderr, | ||
| 137 | " UNKNOWN DECC$FEATURE: %s.\n", decc_feat_array[ i].name); | ||
| 138 | } | ||
| 139 | } | ||
| 140 | |||
| 141 | if (verbose > 0) | ||
| 142 | { | ||
| 143 | fprintf( stderr, " DECC_INIT complete.\n"); | ||
| 144 | } | ||
| 145 | } | ||
| 146 | |||
| 147 | /* Get "decc_init()" into a valid, loaded LIB$INITIALIZE PSECT. */ | ||
| 148 | |||
| 149 | #pragma nostandard | ||
| 150 | |||
| 151 | /* Establish the LIB$INITIALIZE PSECTs, with proper alignment and | ||
| 152 | * other attributes. Note that "nopic" is significant only on VAX. | ||
| 153 | */ | ||
| 154 | #pragma extern_model save | ||
| 155 | |||
| 156 | #if __INITIAL_POINTER_SIZE == 64 | ||
| 157 | # define PSECT_ALIGN 3 | ||
| 158 | #else | ||
| 159 | # define PSECT_ALIGN 2 | ||
| 160 | #endif | ||
| 161 | |||
| 162 | #pragma extern_model strict_refdef "LIB$INITIALIZ" PSECT_ALIGN, nopic, nowrt | ||
| 163 | const int spare[ 8] = { 0 }; | ||
| 164 | |||
| 165 | #pragma extern_model strict_refdef "LIB$INITIALIZE" PSECT_ALIGN, nopic, nowrt | ||
| 166 | void (*const x_decc_init)() = decc_init; | ||
| 167 | |||
| 168 | #pragma extern_model restore | ||
| 169 | |||
| 170 | /* Fake reference to ensure loading the LIB$INITIALIZE PSECT. */ | ||
| 171 | |||
| 172 | #pragma extern_model save | ||
| 173 | |||
| 174 | int LIB$INITIALIZE( void); | ||
| 175 | |||
| 176 | #pragma extern_model strict_refdef | ||
| 177 | int dmy_lib$initialize = (int) LIB$INITIALIZE; | ||
| 178 | |||
| 179 | #pragma extern_model restore | ||
| 180 | |||
| 181 | #pragma standard | ||
| 182 | |||
| 183 | #else /* def USE_DECC_INIT */ | ||
| 184 | |||
| 185 | /* Dummy code to avoid a %CC-W-EMPTYFILE complaint. */ | ||
| 186 | int decc_init_dummy( void); | ||
| 187 | |||
| 188 | #endif /* def USE_DECC_INIT */ | ||
diff --git a/src/lib/libssl/src/crypto/LPdir_vms.c b/src/lib/libssl/src/crypto/LPdir_vms.c index 85b427a623..7613bd254e 100644 --- a/src/lib/libssl/src/crypto/LPdir_vms.c +++ b/src/lib/libssl/src/crypto/LPdir_vms.c | |||
| @@ -40,22 +40,18 @@ | |||
| 40 | #ifndef LPDIR_H | 40 | #ifndef LPDIR_H |
| 41 | #include "LPdir.h" | 41 | #include "LPdir.h" |
| 42 | #endif | 42 | #endif |
| 43 | #include "vms_rms.h" | ||
| 43 | 44 | ||
| 44 | /* Because some compiler options hide this macor */ | 45 | /* Some compiler options hide EVMSERR. */ |
| 45 | #ifndef EVMSERR | 46 | #ifndef EVMSERR |
| 46 | #define EVMSERR 65535 /* error for non-translatable VMS errors */ | 47 | # define EVMSERR 65535 /* error for non-translatable VMS errors */ |
| 47 | #endif | 48 | #endif |
| 48 | 49 | ||
| 49 | struct LP_dir_context_st | 50 | struct LP_dir_context_st |
| 50 | { | 51 | { |
| 51 | unsigned long VMS_context; | 52 | unsigned long VMS_context; |
| 52 | #ifdef NAML$C_MAXRSS | 53 | char filespec[ NAMX_MAXRSS+ 1]; |
| 53 | char filespec[NAML$C_MAXRSS+1]; | 54 | char result[ NAMX_MAXRSS+ 1]; |
| 54 | char result[NAML$C_MAXRSS+1]; | ||
| 55 | #else | ||
| 56 | char filespec[256]; | ||
| 57 | char result[256]; | ||
| 58 | #endif | ||
| 59 | struct dsc$descriptor_d filespec_dsc; | 55 | struct dsc$descriptor_d filespec_dsc; |
| 60 | struct dsc$descriptor_d result_dsc; | 56 | struct dsc$descriptor_d result_dsc; |
| 61 | }; | 57 | }; |
| @@ -66,6 +62,16 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory) | |||
| 66 | char *p, *r; | 62 | char *p, *r; |
| 67 | size_t l; | 63 | size_t l; |
| 68 | unsigned long flags = 0; | 64 | unsigned long flags = 0; |
| 65 | |||
| 66 | /* Arrange 32-bit pointer to (copied) string storage, if needed. */ | ||
| 67 | #if __INITIAL_POINTER_SIZE == 64 | ||
| 68 | # pragma pointer_size save | ||
| 69 | # pragma pointer_size 32 | ||
| 70 | char *ctx_filespec_32p; | ||
| 71 | # pragma pointer_size restore | ||
| 72 | char ctx_filespec_32[ NAMX_MAXRSS+ 1]; | ||
| 73 | #endif /* __INITIAL_POINTER_SIZE == 64 */ | ||
| 74 | |||
| 69 | #ifdef NAML$C_MAXRSS | 75 | #ifdef NAML$C_MAXRSS |
| 70 | flags |= LIB$M_FIL_LONG_NAMES; | 76 | flags |= LIB$M_FIL_LONG_NAMES; |
| 71 | #endif | 77 | #endif |
| @@ -93,13 +99,7 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory) | |||
| 93 | 99 | ||
| 94 | filespeclen += 4; /* "*.*;" */ | 100 | filespeclen += 4; /* "*.*;" */ |
| 95 | 101 | ||
| 96 | if (filespeclen > | 102 | if (filespeclen > NAMX_MAXRSS) |
| 97 | #ifdef NAML$C_MAXRSS | ||
| 98 | NAML$C_MAXRSS | ||
| 99 | #else | ||
| 100 | 255 | ||
| 101 | #endif | ||
| 102 | ) | ||
| 103 | { | 103 | { |
| 104 | errno = ENAMETOOLONG; | 104 | errno = ENAMETOOLONG; |
| 105 | return 0; | 105 | return 0; |
| @@ -115,14 +115,21 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory) | |||
| 115 | 115 | ||
| 116 | strcpy((*ctx)->filespec,directory); | 116 | strcpy((*ctx)->filespec,directory); |
| 117 | strcat((*ctx)->filespec,"*.*;"); | 117 | strcat((*ctx)->filespec,"*.*;"); |
| 118 | |||
| 119 | /* Arrange 32-bit pointer to (copied) string storage, if needed. */ | ||
| 120 | #if __INITIAL_POINTER_SIZE == 64 | ||
| 121 | # define CTX_FILESPEC ctx_filespec_32p | ||
| 122 | /* Copy the file name to storage with a 32-bit pointer. */ | ||
| 123 | ctx_filespec_32p = ctx_filespec_32; | ||
| 124 | strcpy( ctx_filespec_32p, (*ctx)->filespec); | ||
| 125 | #else /* __INITIAL_POINTER_SIZE == 64 */ | ||
| 126 | # define CTX_FILESPEC (*ctx)->filespec | ||
| 127 | #endif /* __INITIAL_POINTER_SIZE == 64 [else] */ | ||
| 128 | |||
| 118 | (*ctx)->filespec_dsc.dsc$w_length = filespeclen; | 129 | (*ctx)->filespec_dsc.dsc$w_length = filespeclen; |
| 119 | (*ctx)->filespec_dsc.dsc$b_dtype = DSC$K_DTYPE_T; | 130 | (*ctx)->filespec_dsc.dsc$b_dtype = DSC$K_DTYPE_T; |
| 120 | (*ctx)->filespec_dsc.dsc$b_class = DSC$K_CLASS_S; | 131 | (*ctx)->filespec_dsc.dsc$b_class = DSC$K_CLASS_S; |
| 121 | (*ctx)->filespec_dsc.dsc$a_pointer = (*ctx)->filespec; | 132 | (*ctx)->filespec_dsc.dsc$a_pointer = CTX_FILESPEC; |
| 122 | (*ctx)->result_dsc.dsc$w_length = 0; | ||
| 123 | (*ctx)->result_dsc.dsc$b_dtype = DSC$K_DTYPE_T; | ||
| 124 | (*ctx)->result_dsc.dsc$b_class = DSC$K_CLASS_D; | ||
| 125 | (*ctx)->result_dsc.dsc$a_pointer = 0; | ||
| 126 | } | 133 | } |
| 127 | 134 | ||
| 128 | (*ctx)->result_dsc.dsc$w_length = 0; | 135 | (*ctx)->result_dsc.dsc$w_length = 0; |
diff --git a/src/lib/libssl/src/crypto/aes/aes_wrap.c b/src/lib/libssl/src/crypto/aes/aes_wrap.c index 9feacd65d8..e2d73d37ce 100644 --- a/src/lib/libssl/src/crypto/aes/aes_wrap.c +++ b/src/lib/libssl/src/crypto/aes/aes_wrap.c | |||
| @@ -85,9 +85,9 @@ int AES_wrap_key(AES_KEY *key, const unsigned char *iv, | |||
| 85 | A[7] ^= (unsigned char)(t & 0xff); | 85 | A[7] ^= (unsigned char)(t & 0xff); |
| 86 | if (t > 0xff) | 86 | if (t > 0xff) |
| 87 | { | 87 | { |
| 88 | A[6] ^= (unsigned char)((t & 0xff) >> 8); | 88 | A[6] ^= (unsigned char)((t >> 8) & 0xff); |
| 89 | A[5] ^= (unsigned char)((t & 0xff) >> 16); | 89 | A[5] ^= (unsigned char)((t >> 16) & 0xff); |
| 90 | A[4] ^= (unsigned char)((t & 0xff) >> 24); | 90 | A[4] ^= (unsigned char)((t >> 24) & 0xff); |
| 91 | } | 91 | } |
| 92 | memcpy(R, B + 8, 8); | 92 | memcpy(R, B + 8, 8); |
| 93 | } | 93 | } |
| @@ -119,9 +119,9 @@ int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, | |||
| 119 | A[7] ^= (unsigned char)(t & 0xff); | 119 | A[7] ^= (unsigned char)(t & 0xff); |
| 120 | if (t > 0xff) | 120 | if (t > 0xff) |
| 121 | { | 121 | { |
| 122 | A[6] ^= (unsigned char)((t & 0xff) >> 8); | 122 | A[6] ^= (unsigned char)((t >> 8) & 0xff); |
| 123 | A[5] ^= (unsigned char)((t & 0xff) >> 16); | 123 | A[5] ^= (unsigned char)((t >> 16) & 0xff); |
| 124 | A[4] ^= (unsigned char)((t & 0xff) >> 24); | 124 | A[4] ^= (unsigned char)((t >> 24) & 0xff); |
| 125 | } | 125 | } |
| 126 | memcpy(B + 8, R, 8); | 126 | memcpy(B + 8, R, 8); |
| 127 | AES_decrypt(B, B, key); | 127 | AES_decrypt(B, B, key); |
diff --git a/src/lib/libssl/src/crypto/aes/asm/aes-armv4.pl b/src/lib/libssl/src/crypto/aes/asm/aes-armv4.pl index 690244111a..c51ee1fbf6 100644 --- a/src/lib/libssl/src/crypto/aes/asm/aes-armv4.pl +++ b/src/lib/libssl/src/crypto/aes/asm/aes-armv4.pl | |||
| @@ -16,12 +16,20 @@ | |||
| 16 | # allows to merge logical or arithmetic operation with shift or rotate | 16 | # allows to merge logical or arithmetic operation with shift or rotate |
| 17 | # in one instruction and emit combined result every cycle. The module | 17 | # in one instruction and emit combined result every cycle. The module |
| 18 | # is endian-neutral. The performance is ~42 cycles/byte for 128-bit | 18 | # is endian-neutral. The performance is ~42 cycles/byte for 128-bit |
| 19 | # key. | 19 | # key [on single-issue Xscale PXA250 core]. |
| 20 | 20 | ||
| 21 | # May 2007. | 21 | # May 2007. |
| 22 | # | 22 | # |
| 23 | # AES_set_[en|de]crypt_key is added. | 23 | # AES_set_[en|de]crypt_key is added. |
| 24 | 24 | ||
| 25 | # July 2010. | ||
| 26 | # | ||
| 27 | # Rescheduling for dual-issue pipeline resulted in 12% improvement on | ||
| 28 | # Cortex A8 core and ~25 cycles per byte processed with 128-bit key. | ||
| 29 | |||
| 30 | while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {} | ||
| 31 | open STDOUT,">$output"; | ||
| 32 | |||
| 25 | $s0="r0"; | 33 | $s0="r0"; |
| 26 | $s1="r1"; | 34 | $s1="r1"; |
| 27 | $s2="r2"; | 35 | $s2="r2"; |
| @@ -164,24 +172,24 @@ AES_encrypt: | |||
| 164 | ldrb $t2,[$rounds,#1] | 172 | ldrb $t2,[$rounds,#1] |
| 165 | ldrb $t3,[$rounds,#0] | 173 | ldrb $t3,[$rounds,#0] |
| 166 | orr $s0,$s0,$t1,lsl#8 | 174 | orr $s0,$s0,$t1,lsl#8 |
| 167 | orr $s0,$s0,$t2,lsl#16 | ||
| 168 | orr $s0,$s0,$t3,lsl#24 | ||
| 169 | ldrb $s1,[$rounds,#7] | 175 | ldrb $s1,[$rounds,#7] |
| 176 | orr $s0,$s0,$t2,lsl#16 | ||
| 170 | ldrb $t1,[$rounds,#6] | 177 | ldrb $t1,[$rounds,#6] |
| 178 | orr $s0,$s0,$t3,lsl#24 | ||
| 171 | ldrb $t2,[$rounds,#5] | 179 | ldrb $t2,[$rounds,#5] |
| 172 | ldrb $t3,[$rounds,#4] | 180 | ldrb $t3,[$rounds,#4] |
| 173 | orr $s1,$s1,$t1,lsl#8 | 181 | orr $s1,$s1,$t1,lsl#8 |
| 174 | orr $s1,$s1,$t2,lsl#16 | ||
| 175 | orr $s1,$s1,$t3,lsl#24 | ||
| 176 | ldrb $s2,[$rounds,#11] | 182 | ldrb $s2,[$rounds,#11] |
| 183 | orr $s1,$s1,$t2,lsl#16 | ||
| 177 | ldrb $t1,[$rounds,#10] | 184 | ldrb $t1,[$rounds,#10] |
| 185 | orr $s1,$s1,$t3,lsl#24 | ||
| 178 | ldrb $t2,[$rounds,#9] | 186 | ldrb $t2,[$rounds,#9] |
| 179 | ldrb $t3,[$rounds,#8] | 187 | ldrb $t3,[$rounds,#8] |
| 180 | orr $s2,$s2,$t1,lsl#8 | 188 | orr $s2,$s2,$t1,lsl#8 |
| 181 | orr $s2,$s2,$t2,lsl#16 | ||
| 182 | orr $s2,$s2,$t3,lsl#24 | ||
| 183 | ldrb $s3,[$rounds,#15] | 189 | ldrb $s3,[$rounds,#15] |
| 190 | orr $s2,$s2,$t2,lsl#16 | ||
| 184 | ldrb $t1,[$rounds,#14] | 191 | ldrb $t1,[$rounds,#14] |
| 192 | orr $s2,$s2,$t3,lsl#24 | ||
| 185 | ldrb $t2,[$rounds,#13] | 193 | ldrb $t2,[$rounds,#13] |
| 186 | ldrb $t3,[$rounds,#12] | 194 | ldrb $t3,[$rounds,#12] |
| 187 | orr $s3,$s3,$t1,lsl#8 | 195 | orr $s3,$s3,$t1,lsl#8 |
| @@ -196,24 +204,24 @@ AES_encrypt: | |||
| 196 | mov $t3,$s0,lsr#8 | 204 | mov $t3,$s0,lsr#8 |
| 197 | strb $t1,[$rounds,#0] | 205 | strb $t1,[$rounds,#0] |
| 198 | strb $t2,[$rounds,#1] | 206 | strb $t2,[$rounds,#1] |
| 199 | strb $t3,[$rounds,#2] | ||
| 200 | strb $s0,[$rounds,#3] | ||
| 201 | mov $t1,$s1,lsr#24 | 207 | mov $t1,$s1,lsr#24 |
| 208 | strb $t3,[$rounds,#2] | ||
| 202 | mov $t2,$s1,lsr#16 | 209 | mov $t2,$s1,lsr#16 |
| 210 | strb $s0,[$rounds,#3] | ||
| 203 | mov $t3,$s1,lsr#8 | 211 | mov $t3,$s1,lsr#8 |
| 204 | strb $t1,[$rounds,#4] | 212 | strb $t1,[$rounds,#4] |
| 205 | strb $t2,[$rounds,#5] | 213 | strb $t2,[$rounds,#5] |
| 206 | strb $t3,[$rounds,#6] | ||
| 207 | strb $s1,[$rounds,#7] | ||
| 208 | mov $t1,$s2,lsr#24 | 214 | mov $t1,$s2,lsr#24 |
| 215 | strb $t3,[$rounds,#6] | ||
| 209 | mov $t2,$s2,lsr#16 | 216 | mov $t2,$s2,lsr#16 |
| 217 | strb $s1,[$rounds,#7] | ||
| 210 | mov $t3,$s2,lsr#8 | 218 | mov $t3,$s2,lsr#8 |
| 211 | strb $t1,[$rounds,#8] | 219 | strb $t1,[$rounds,#8] |
| 212 | strb $t2,[$rounds,#9] | 220 | strb $t2,[$rounds,#9] |
| 213 | strb $t3,[$rounds,#10] | ||
| 214 | strb $s2,[$rounds,#11] | ||
| 215 | mov $t1,$s3,lsr#24 | 221 | mov $t1,$s3,lsr#24 |
| 222 | strb $t3,[$rounds,#10] | ||
| 216 | mov $t2,$s3,lsr#16 | 223 | mov $t2,$s3,lsr#16 |
| 224 | strb $s2,[$rounds,#11] | ||
| 217 | mov $t3,$s3,lsr#8 | 225 | mov $t3,$s3,lsr#8 |
| 218 | strb $t1,[$rounds,#12] | 226 | strb $t1,[$rounds,#12] |
| 219 | strb $t2,[$rounds,#13] | 227 | strb $t2,[$rounds,#13] |
| @@ -230,141 +238,137 @@ AES_encrypt: | |||
| 230 | .align 2 | 238 | .align 2 |
| 231 | _armv4_AES_encrypt: | 239 | _armv4_AES_encrypt: |
| 232 | str lr,[sp,#-4]! @ push lr | 240 | str lr,[sp,#-4]! @ push lr |
| 233 | ldr $t1,[$key],#16 | 241 | ldmia $key!,{$t1-$i1} |
| 234 | ldr $t2,[$key,#-12] | ||
| 235 | ldr $t3,[$key,#-8] | ||
| 236 | ldr $i1,[$key,#-4] | ||
| 237 | ldr $rounds,[$key,#240-16] | ||
| 238 | eor $s0,$s0,$t1 | 242 | eor $s0,$s0,$t1 |
| 243 | ldr $rounds,[$key,#240-16] | ||
| 239 | eor $s1,$s1,$t2 | 244 | eor $s1,$s1,$t2 |
| 240 | eor $s2,$s2,$t3 | 245 | eor $s2,$s2,$t3 |
| 241 | eor $s3,$s3,$i1 | 246 | eor $s3,$s3,$i1 |
| 242 | sub $rounds,$rounds,#1 | 247 | sub $rounds,$rounds,#1 |
| 243 | mov lr,#255 | 248 | mov lr,#255 |
| 244 | 249 | ||
| 245 | .Lenc_loop: | 250 | and $i1,lr,$s0 |
| 246 | and $i2,lr,$s0,lsr#8 | 251 | and $i2,lr,$s0,lsr#8 |
| 247 | and $i3,lr,$s0,lsr#16 | 252 | and $i3,lr,$s0,lsr#16 |
| 248 | and $i1,lr,$s0 | ||
| 249 | mov $s0,$s0,lsr#24 | 253 | mov $s0,$s0,lsr#24 |
| 254 | .Lenc_loop: | ||
| 250 | ldr $t1,[$tbl,$i1,lsl#2] @ Te3[s0>>0] | 255 | ldr $t1,[$tbl,$i1,lsl#2] @ Te3[s0>>0] |
| 251 | ldr $s0,[$tbl,$s0,lsl#2] @ Te0[s0>>24] | ||
| 252 | ldr $t2,[$tbl,$i2,lsl#2] @ Te2[s0>>8] | ||
| 253 | ldr $t3,[$tbl,$i3,lsl#2] @ Te1[s0>>16] | ||
| 254 | |||
| 255 | and $i1,lr,$s1,lsr#16 @ i0 | 256 | and $i1,lr,$s1,lsr#16 @ i0 |
| 257 | ldr $t2,[$tbl,$i2,lsl#2] @ Te2[s0>>8] | ||
| 256 | and $i2,lr,$s1 | 258 | and $i2,lr,$s1 |
| 259 | ldr $t3,[$tbl,$i3,lsl#2] @ Te1[s0>>16] | ||
| 257 | and $i3,lr,$s1,lsr#8 | 260 | and $i3,lr,$s1,lsr#8 |
| 261 | ldr $s0,[$tbl,$s0,lsl#2] @ Te0[s0>>24] | ||
| 258 | mov $s1,$s1,lsr#24 | 262 | mov $s1,$s1,lsr#24 |
| 263 | |||
| 259 | ldr $i1,[$tbl,$i1,lsl#2] @ Te1[s1>>16] | 264 | ldr $i1,[$tbl,$i1,lsl#2] @ Te1[s1>>16] |
| 260 | ldr $s1,[$tbl,$s1,lsl#2] @ Te0[s1>>24] | ||
| 261 | ldr $i2,[$tbl,$i2,lsl#2] @ Te3[s1>>0] | 265 | ldr $i2,[$tbl,$i2,lsl#2] @ Te3[s1>>0] |
| 262 | ldr $i3,[$tbl,$i3,lsl#2] @ Te2[s1>>8] | 266 | ldr $i3,[$tbl,$i3,lsl#2] @ Te2[s1>>8] |
| 263 | eor $s0,$s0,$i1,ror#8 | 267 | eor $s0,$s0,$i1,ror#8 |
| 264 | eor $s1,$s1,$t1,ror#24 | 268 | ldr $s1,[$tbl,$s1,lsl#2] @ Te0[s1>>24] |
| 265 | eor $t2,$t2,$i2,ror#8 | ||
| 266 | eor $t3,$t3,$i3,ror#8 | ||
| 267 | |||
| 268 | and $i1,lr,$s2,lsr#8 @ i0 | 269 | and $i1,lr,$s2,lsr#8 @ i0 |
| 270 | eor $t2,$t2,$i2,ror#8 | ||
| 269 | and $i2,lr,$s2,lsr#16 @ i1 | 271 | and $i2,lr,$s2,lsr#16 @ i1 |
| 272 | eor $t3,$t3,$i3,ror#8 | ||
| 270 | and $i3,lr,$s2 | 273 | and $i3,lr,$s2 |
| 271 | mov $s2,$s2,lsr#24 | 274 | eor $s1,$s1,$t1,ror#24 |
| 272 | ldr $i1,[$tbl,$i1,lsl#2] @ Te2[s2>>8] | 275 | ldr $i1,[$tbl,$i1,lsl#2] @ Te2[s2>>8] |
| 276 | mov $s2,$s2,lsr#24 | ||
| 277 | |||
| 273 | ldr $i2,[$tbl,$i2,lsl#2] @ Te1[s2>>16] | 278 | ldr $i2,[$tbl,$i2,lsl#2] @ Te1[s2>>16] |
| 274 | ldr $s2,[$tbl,$s2,lsl#2] @ Te0[s2>>24] | ||
| 275 | ldr $i3,[$tbl,$i3,lsl#2] @ Te3[s2>>0] | 279 | ldr $i3,[$tbl,$i3,lsl#2] @ Te3[s2>>0] |
| 276 | eor $s0,$s0,$i1,ror#16 | 280 | eor $s0,$s0,$i1,ror#16 |
| 277 | eor $s1,$s1,$i2,ror#8 | 281 | ldr $s2,[$tbl,$s2,lsl#2] @ Te0[s2>>24] |
| 278 | eor $s2,$s2,$t2,ror#16 | ||
| 279 | eor $t3,$t3,$i3,ror#16 | ||
| 280 | |||
| 281 | and $i1,lr,$s3 @ i0 | 282 | and $i1,lr,$s3 @ i0 |
| 283 | eor $s1,$s1,$i2,ror#8 | ||
| 282 | and $i2,lr,$s3,lsr#8 @ i1 | 284 | and $i2,lr,$s3,lsr#8 @ i1 |
| 285 | eor $t3,$t3,$i3,ror#16 | ||
| 283 | and $i3,lr,$s3,lsr#16 @ i2 | 286 | and $i3,lr,$s3,lsr#16 @ i2 |
| 284 | mov $s3,$s3,lsr#24 | 287 | eor $s2,$s2,$t2,ror#16 |
| 285 | ldr $i1,[$tbl,$i1,lsl#2] @ Te3[s3>>0] | 288 | ldr $i1,[$tbl,$i1,lsl#2] @ Te3[s3>>0] |
| 289 | mov $s3,$s3,lsr#24 | ||
| 290 | |||
| 286 | ldr $i2,[$tbl,$i2,lsl#2] @ Te2[s3>>8] | 291 | ldr $i2,[$tbl,$i2,lsl#2] @ Te2[s3>>8] |
| 287 | ldr $i3,[$tbl,$i3,lsl#2] @ Te1[s3>>16] | 292 | ldr $i3,[$tbl,$i3,lsl#2] @ Te1[s3>>16] |
| 288 | ldr $s3,[$tbl,$s3,lsl#2] @ Te0[s3>>24] | ||
| 289 | eor $s0,$s0,$i1,ror#24 | 293 | eor $s0,$s0,$i1,ror#24 |
| 294 | ldr $s3,[$tbl,$s3,lsl#2] @ Te0[s3>>24] | ||
| 290 | eor $s1,$s1,$i2,ror#16 | 295 | eor $s1,$s1,$i2,ror#16 |
| 296 | ldr $i1,[$key],#16 | ||
| 291 | eor $s2,$s2,$i3,ror#8 | 297 | eor $s2,$s2,$i3,ror#8 |
| 298 | ldr $t1,[$key,#-12] | ||
| 292 | eor $s3,$s3,$t3,ror#8 | 299 | eor $s3,$s3,$t3,ror#8 |
| 293 | 300 | ||
| 294 | ldr $t1,[$key],#16 | 301 | ldr $t2,[$key,#-8] |
| 295 | ldr $t2,[$key,#-12] | 302 | eor $s0,$s0,$i1 |
| 296 | ldr $t3,[$key,#-8] | 303 | ldr $t3,[$key,#-4] |
| 297 | ldr $i1,[$key,#-4] | 304 | and $i1,lr,$s0 |
| 298 | eor $s0,$s0,$t1 | 305 | eor $s1,$s1,$t1 |
| 299 | eor $s1,$s1,$t2 | 306 | and $i2,lr,$s0,lsr#8 |
| 300 | eor $s2,$s2,$t3 | 307 | eor $s2,$s2,$t2 |
| 301 | eor $s3,$s3,$i1 | 308 | and $i3,lr,$s0,lsr#16 |
| 309 | eor $s3,$s3,$t3 | ||
| 310 | mov $s0,$s0,lsr#24 | ||
| 302 | 311 | ||
| 303 | subs $rounds,$rounds,#1 | 312 | subs $rounds,$rounds,#1 |
| 304 | bne .Lenc_loop | 313 | bne .Lenc_loop |
| 305 | 314 | ||
| 306 | add $tbl,$tbl,#2 | 315 | add $tbl,$tbl,#2 |
| 307 | 316 | ||
| 308 | and $i1,lr,$s0 | ||
| 309 | and $i2,lr,$s0,lsr#8 | ||
| 310 | and $i3,lr,$s0,lsr#16 | ||
| 311 | mov $s0,$s0,lsr#24 | ||
| 312 | ldrb $t1,[$tbl,$i1,lsl#2] @ Te4[s0>>0] | 317 | ldrb $t1,[$tbl,$i1,lsl#2] @ Te4[s0>>0] |
| 313 | ldrb $s0,[$tbl,$s0,lsl#2] @ Te4[s0>>24] | ||
| 314 | ldrb $t2,[$tbl,$i2,lsl#2] @ Te4[s0>>8] | ||
| 315 | ldrb $t3,[$tbl,$i3,lsl#2] @ Te4[s0>>16] | ||
| 316 | |||
| 317 | and $i1,lr,$s1,lsr#16 @ i0 | 318 | and $i1,lr,$s1,lsr#16 @ i0 |
| 319 | ldrb $t2,[$tbl,$i2,lsl#2] @ Te4[s0>>8] | ||
| 318 | and $i2,lr,$s1 | 320 | and $i2,lr,$s1 |
| 321 | ldrb $t3,[$tbl,$i3,lsl#2] @ Te4[s0>>16] | ||
| 319 | and $i3,lr,$s1,lsr#8 | 322 | and $i3,lr,$s1,lsr#8 |
| 323 | ldrb $s0,[$tbl,$s0,lsl#2] @ Te4[s0>>24] | ||
| 320 | mov $s1,$s1,lsr#24 | 324 | mov $s1,$s1,lsr#24 |
| 325 | |||
| 321 | ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s1>>16] | 326 | ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s1>>16] |
| 322 | ldrb $s1,[$tbl,$s1,lsl#2] @ Te4[s1>>24] | ||
| 323 | ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s1>>0] | 327 | ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s1>>0] |
| 324 | ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s1>>8] | 328 | ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s1>>8] |
| 325 | eor $s0,$i1,$s0,lsl#8 | 329 | eor $s0,$i1,$s0,lsl#8 |
| 326 | eor $s1,$t1,$s1,lsl#24 | 330 | ldrb $s1,[$tbl,$s1,lsl#2] @ Te4[s1>>24] |
| 327 | eor $t2,$i2,$t2,lsl#8 | ||
| 328 | eor $t3,$i3,$t3,lsl#8 | ||
| 329 | |||
| 330 | and $i1,lr,$s2,lsr#8 @ i0 | 331 | and $i1,lr,$s2,lsr#8 @ i0 |
| 332 | eor $t2,$i2,$t2,lsl#8 | ||
| 331 | and $i2,lr,$s2,lsr#16 @ i1 | 333 | and $i2,lr,$s2,lsr#16 @ i1 |
| 334 | eor $t3,$i3,$t3,lsl#8 | ||
| 332 | and $i3,lr,$s2 | 335 | and $i3,lr,$s2 |
| 333 | mov $s2,$s2,lsr#24 | 336 | eor $s1,$t1,$s1,lsl#24 |
| 334 | ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s2>>8] | 337 | ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s2>>8] |
| 338 | mov $s2,$s2,lsr#24 | ||
| 339 | |||
| 335 | ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s2>>16] | 340 | ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s2>>16] |
| 336 | ldrb $s2,[$tbl,$s2,lsl#2] @ Te4[s2>>24] | ||
| 337 | ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s2>>0] | 341 | ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s2>>0] |
| 338 | eor $s0,$i1,$s0,lsl#8 | 342 | eor $s0,$i1,$s0,lsl#8 |
| 339 | eor $s1,$s1,$i2,lsl#16 | 343 | ldrb $s2,[$tbl,$s2,lsl#2] @ Te4[s2>>24] |
| 340 | eor $s2,$t2,$s2,lsl#24 | ||
| 341 | eor $t3,$i3,$t3,lsl#8 | ||
| 342 | |||
| 343 | and $i1,lr,$s3 @ i0 | 344 | and $i1,lr,$s3 @ i0 |
| 345 | eor $s1,$s1,$i2,lsl#16 | ||
| 344 | and $i2,lr,$s3,lsr#8 @ i1 | 346 | and $i2,lr,$s3,lsr#8 @ i1 |
| 347 | eor $t3,$i3,$t3,lsl#8 | ||
| 345 | and $i3,lr,$s3,lsr#16 @ i2 | 348 | and $i3,lr,$s3,lsr#16 @ i2 |
| 346 | mov $s3,$s3,lsr#24 | 349 | eor $s2,$t2,$s2,lsl#24 |
| 347 | ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s3>>0] | 350 | ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s3>>0] |
| 351 | mov $s3,$s3,lsr#24 | ||
| 352 | |||
| 348 | ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s3>>8] | 353 | ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s3>>8] |
| 349 | ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s3>>16] | 354 | ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s3>>16] |
| 350 | ldrb $s3,[$tbl,$s3,lsl#2] @ Te4[s3>>24] | ||
| 351 | eor $s0,$i1,$s0,lsl#8 | 355 | eor $s0,$i1,$s0,lsl#8 |
| 356 | ldrb $s3,[$tbl,$s3,lsl#2] @ Te4[s3>>24] | ||
| 357 | ldr $i1,[$key,#0] | ||
| 352 | eor $s1,$s1,$i2,lsl#8 | 358 | eor $s1,$s1,$i2,lsl#8 |
| 359 | ldr $t1,[$key,#4] | ||
| 353 | eor $s2,$s2,$i3,lsl#16 | 360 | eor $s2,$s2,$i3,lsl#16 |
| 361 | ldr $t2,[$key,#8] | ||
| 354 | eor $s3,$t3,$s3,lsl#24 | 362 | eor $s3,$t3,$s3,lsl#24 |
| 363 | ldr $t3,[$key,#12] | ||
| 355 | 364 | ||
| 356 | ldr lr,[sp],#4 @ pop lr | 365 | eor $s0,$s0,$i1 |
| 357 | ldr $t1,[$key,#0] | 366 | eor $s1,$s1,$t1 |
| 358 | ldr $t2,[$key,#4] | 367 | eor $s2,$s2,$t2 |
| 359 | ldr $t3,[$key,#8] | 368 | eor $s3,$s3,$t3 |
| 360 | ldr $i1,[$key,#12] | ||
| 361 | eor $s0,$s0,$t1 | ||
| 362 | eor $s1,$s1,$t2 | ||
| 363 | eor $s2,$s2,$t3 | ||
| 364 | eor $s3,$s3,$i1 | ||
| 365 | 369 | ||
| 366 | sub $tbl,$tbl,#2 | 370 | sub $tbl,$tbl,#2 |
| 367 | mov pc,lr @ return | 371 | ldr pc,[sp],#4 @ pop and return |
| 368 | .size _armv4_AES_encrypt,.-_armv4_AES_encrypt | 372 | .size _armv4_AES_encrypt,.-_armv4_AES_encrypt |
| 369 | 373 | ||
| 370 | .global AES_set_encrypt_key | 374 | .global AES_set_encrypt_key |
| @@ -399,31 +403,31 @@ AES_set_encrypt_key: | |||
| 399 | ldrb $t2,[$rounds,#1] | 403 | ldrb $t2,[$rounds,#1] |
| 400 | ldrb $t3,[$rounds,#0] | 404 | ldrb $t3,[$rounds,#0] |
| 401 | orr $s0,$s0,$t1,lsl#8 | 405 | orr $s0,$s0,$t1,lsl#8 |
| 402 | orr $s0,$s0,$t2,lsl#16 | ||
| 403 | orr $s0,$s0,$t3,lsl#24 | ||
| 404 | ldrb $s1,[$rounds,#7] | 406 | ldrb $s1,[$rounds,#7] |
| 407 | orr $s0,$s0,$t2,lsl#16 | ||
| 405 | ldrb $t1,[$rounds,#6] | 408 | ldrb $t1,[$rounds,#6] |
| 409 | orr $s0,$s0,$t3,lsl#24 | ||
| 406 | ldrb $t2,[$rounds,#5] | 410 | ldrb $t2,[$rounds,#5] |
| 407 | ldrb $t3,[$rounds,#4] | 411 | ldrb $t3,[$rounds,#4] |
| 408 | orr $s1,$s1,$t1,lsl#8 | 412 | orr $s1,$s1,$t1,lsl#8 |
| 409 | orr $s1,$s1,$t2,lsl#16 | ||
| 410 | orr $s1,$s1,$t3,lsl#24 | ||
| 411 | ldrb $s2,[$rounds,#11] | 413 | ldrb $s2,[$rounds,#11] |
| 414 | orr $s1,$s1,$t2,lsl#16 | ||
| 412 | ldrb $t1,[$rounds,#10] | 415 | ldrb $t1,[$rounds,#10] |
| 416 | orr $s1,$s1,$t3,lsl#24 | ||
| 413 | ldrb $t2,[$rounds,#9] | 417 | ldrb $t2,[$rounds,#9] |
| 414 | ldrb $t3,[$rounds,#8] | 418 | ldrb $t3,[$rounds,#8] |
| 415 | orr $s2,$s2,$t1,lsl#8 | 419 | orr $s2,$s2,$t1,lsl#8 |
| 416 | orr $s2,$s2,$t2,lsl#16 | ||
| 417 | orr $s2,$s2,$t3,lsl#24 | ||
| 418 | ldrb $s3,[$rounds,#15] | 420 | ldrb $s3,[$rounds,#15] |
| 421 | orr $s2,$s2,$t2,lsl#16 | ||
| 419 | ldrb $t1,[$rounds,#14] | 422 | ldrb $t1,[$rounds,#14] |
| 423 | orr $s2,$s2,$t3,lsl#24 | ||
| 420 | ldrb $t2,[$rounds,#13] | 424 | ldrb $t2,[$rounds,#13] |
| 421 | ldrb $t3,[$rounds,#12] | 425 | ldrb $t3,[$rounds,#12] |
| 422 | orr $s3,$s3,$t1,lsl#8 | 426 | orr $s3,$s3,$t1,lsl#8 |
| 423 | orr $s3,$s3,$t2,lsl#16 | ||
| 424 | orr $s3,$s3,$t3,lsl#24 | ||
| 425 | str $s0,[$key],#16 | 427 | str $s0,[$key],#16 |
| 428 | orr $s3,$s3,$t2,lsl#16 | ||
| 426 | str $s1,[$key,#-12] | 429 | str $s1,[$key,#-12] |
| 430 | orr $s3,$s3,$t3,lsl#24 | ||
| 427 | str $s2,[$key,#-8] | 431 | str $s2,[$key,#-8] |
| 428 | str $s3,[$key,#-4] | 432 | str $s3,[$key,#-4] |
| 429 | 433 | ||
| @@ -437,27 +441,26 @@ AES_set_encrypt_key: | |||
| 437 | .L128_loop: | 441 | .L128_loop: |
| 438 | and $t2,lr,$s3,lsr#24 | 442 | and $t2,lr,$s3,lsr#24 |
| 439 | and $i1,lr,$s3,lsr#16 | 443 | and $i1,lr,$s3,lsr#16 |
| 440 | and $i2,lr,$s3,lsr#8 | ||
| 441 | and $i3,lr,$s3 | ||
| 442 | ldrb $t2,[$tbl,$t2] | 444 | ldrb $t2,[$tbl,$t2] |
| 445 | and $i2,lr,$s3,lsr#8 | ||
| 443 | ldrb $i1,[$tbl,$i1] | 446 | ldrb $i1,[$tbl,$i1] |
| 447 | and $i3,lr,$s3 | ||
| 444 | ldrb $i2,[$tbl,$i2] | 448 | ldrb $i2,[$tbl,$i2] |
| 445 | ldrb $i3,[$tbl,$i3] | ||
| 446 | ldr $t1,[$t3],#4 @ rcon[i++] | ||
| 447 | orr $t2,$t2,$i1,lsl#24 | 449 | orr $t2,$t2,$i1,lsl#24 |
| 450 | ldrb $i3,[$tbl,$i3] | ||
| 448 | orr $t2,$t2,$i2,lsl#16 | 451 | orr $t2,$t2,$i2,lsl#16 |
| 452 | ldr $t1,[$t3],#4 @ rcon[i++] | ||
| 449 | orr $t2,$t2,$i3,lsl#8 | 453 | orr $t2,$t2,$i3,lsl#8 |
| 450 | eor $t2,$t2,$t1 | 454 | eor $t2,$t2,$t1 |
| 451 | eor $s0,$s0,$t2 @ rk[4]=rk[0]^... | 455 | eor $s0,$s0,$t2 @ rk[4]=rk[0]^... |
| 452 | eor $s1,$s1,$s0 @ rk[5]=rk[1]^rk[4] | 456 | eor $s1,$s1,$s0 @ rk[5]=rk[1]^rk[4] |
| 453 | eor $s2,$s2,$s1 @ rk[6]=rk[2]^rk[5] | ||
| 454 | eor $s3,$s3,$s2 @ rk[7]=rk[3]^rk[6] | ||
| 455 | str $s0,[$key],#16 | 457 | str $s0,[$key],#16 |
| 458 | eor $s2,$s2,$s1 @ rk[6]=rk[2]^rk[5] | ||
| 456 | str $s1,[$key,#-12] | 459 | str $s1,[$key,#-12] |
| 460 | eor $s3,$s3,$s2 @ rk[7]=rk[3]^rk[6] | ||
| 457 | str $s2,[$key,#-8] | 461 | str $s2,[$key,#-8] |
| 458 | str $s3,[$key,#-4] | ||
| 459 | |||
| 460 | subs $rounds,$rounds,#1 | 462 | subs $rounds,$rounds,#1 |
| 463 | str $s3,[$key,#-4] | ||
| 461 | bne .L128_loop | 464 | bne .L128_loop |
| 462 | sub r2,$key,#176 | 465 | sub r2,$key,#176 |
| 463 | b .Ldone | 466 | b .Ldone |
| @@ -468,16 +471,16 @@ AES_set_encrypt_key: | |||
| 468 | ldrb $t2,[$rounds,#17] | 471 | ldrb $t2,[$rounds,#17] |
| 469 | ldrb $t3,[$rounds,#16] | 472 | ldrb $t3,[$rounds,#16] |
| 470 | orr $i2,$i2,$t1,lsl#8 | 473 | orr $i2,$i2,$t1,lsl#8 |
| 471 | orr $i2,$i2,$t2,lsl#16 | ||
| 472 | orr $i2,$i2,$t3,lsl#24 | ||
| 473 | ldrb $i3,[$rounds,#23] | 474 | ldrb $i3,[$rounds,#23] |
| 475 | orr $i2,$i2,$t2,lsl#16 | ||
| 474 | ldrb $t1,[$rounds,#22] | 476 | ldrb $t1,[$rounds,#22] |
| 477 | orr $i2,$i2,$t3,lsl#24 | ||
| 475 | ldrb $t2,[$rounds,#21] | 478 | ldrb $t2,[$rounds,#21] |
| 476 | ldrb $t3,[$rounds,#20] | 479 | ldrb $t3,[$rounds,#20] |
| 477 | orr $i3,$i3,$t1,lsl#8 | 480 | orr $i3,$i3,$t1,lsl#8 |
| 478 | orr $i3,$i3,$t2,lsl#16 | 481 | orr $i3,$i3,$t2,lsl#16 |
| 479 | orr $i3,$i3,$t3,lsl#24 | ||
| 480 | str $i2,[$key],#8 | 482 | str $i2,[$key],#8 |
| 483 | orr $i3,$i3,$t3,lsl#24 | ||
| 481 | str $i3,[$key,#-4] | 484 | str $i3,[$key,#-4] |
| 482 | 485 | ||
| 483 | teq lr,#192 | 486 | teq lr,#192 |
| @@ -491,27 +494,26 @@ AES_set_encrypt_key: | |||
| 491 | .L192_loop: | 494 | .L192_loop: |
| 492 | and $t2,lr,$i3,lsr#24 | 495 | and $t2,lr,$i3,lsr#24 |
| 493 | and $i1,lr,$i3,lsr#16 | 496 | and $i1,lr,$i3,lsr#16 |
| 494 | and $i2,lr,$i3,lsr#8 | ||
| 495 | and $i3,lr,$i3 | ||
| 496 | ldrb $t2,[$tbl,$t2] | 497 | ldrb $t2,[$tbl,$t2] |
| 498 | and $i2,lr,$i3,lsr#8 | ||
| 497 | ldrb $i1,[$tbl,$i1] | 499 | ldrb $i1,[$tbl,$i1] |
| 500 | and $i3,lr,$i3 | ||
| 498 | ldrb $i2,[$tbl,$i2] | 501 | ldrb $i2,[$tbl,$i2] |
| 499 | ldrb $i3,[$tbl,$i3] | ||
| 500 | ldr $t1,[$t3],#4 @ rcon[i++] | ||
| 501 | orr $t2,$t2,$i1,lsl#24 | 502 | orr $t2,$t2,$i1,lsl#24 |
| 503 | ldrb $i3,[$tbl,$i3] | ||
| 502 | orr $t2,$t2,$i2,lsl#16 | 504 | orr $t2,$t2,$i2,lsl#16 |
| 505 | ldr $t1,[$t3],#4 @ rcon[i++] | ||
| 503 | orr $t2,$t2,$i3,lsl#8 | 506 | orr $t2,$t2,$i3,lsl#8 |
| 504 | eor $i3,$t2,$t1 | 507 | eor $i3,$t2,$t1 |
| 505 | eor $s0,$s0,$i3 @ rk[6]=rk[0]^... | 508 | eor $s0,$s0,$i3 @ rk[6]=rk[0]^... |
| 506 | eor $s1,$s1,$s0 @ rk[7]=rk[1]^rk[6] | 509 | eor $s1,$s1,$s0 @ rk[7]=rk[1]^rk[6] |
| 507 | eor $s2,$s2,$s1 @ rk[8]=rk[2]^rk[7] | ||
| 508 | eor $s3,$s3,$s2 @ rk[9]=rk[3]^rk[8] | ||
| 509 | str $s0,[$key],#24 | 510 | str $s0,[$key],#24 |
| 511 | eor $s2,$s2,$s1 @ rk[8]=rk[2]^rk[7] | ||
| 510 | str $s1,[$key,#-20] | 512 | str $s1,[$key,#-20] |
| 513 | eor $s3,$s3,$s2 @ rk[9]=rk[3]^rk[8] | ||
| 511 | str $s2,[$key,#-16] | 514 | str $s2,[$key,#-16] |
| 512 | str $s3,[$key,#-12] | ||
| 513 | |||
| 514 | subs $rounds,$rounds,#1 | 515 | subs $rounds,$rounds,#1 |
| 516 | str $s3,[$key,#-12] | ||
| 515 | subeq r2,$key,#216 | 517 | subeq r2,$key,#216 |
| 516 | beq .Ldone | 518 | beq .Ldone |
| 517 | 519 | ||
| @@ -529,16 +531,16 @@ AES_set_encrypt_key: | |||
| 529 | ldrb $t2,[$rounds,#25] | 531 | ldrb $t2,[$rounds,#25] |
| 530 | ldrb $t3,[$rounds,#24] | 532 | ldrb $t3,[$rounds,#24] |
| 531 | orr $i2,$i2,$t1,lsl#8 | 533 | orr $i2,$i2,$t1,lsl#8 |
| 532 | orr $i2,$i2,$t2,lsl#16 | ||
| 533 | orr $i2,$i2,$t3,lsl#24 | ||
| 534 | ldrb $i3,[$rounds,#31] | 534 | ldrb $i3,[$rounds,#31] |
| 535 | orr $i2,$i2,$t2,lsl#16 | ||
| 535 | ldrb $t1,[$rounds,#30] | 536 | ldrb $t1,[$rounds,#30] |
| 537 | orr $i2,$i2,$t3,lsl#24 | ||
| 536 | ldrb $t2,[$rounds,#29] | 538 | ldrb $t2,[$rounds,#29] |
| 537 | ldrb $t3,[$rounds,#28] | 539 | ldrb $t3,[$rounds,#28] |
| 538 | orr $i3,$i3,$t1,lsl#8 | 540 | orr $i3,$i3,$t1,lsl#8 |
| 539 | orr $i3,$i3,$t2,lsl#16 | 541 | orr $i3,$i3,$t2,lsl#16 |
| 540 | orr $i3,$i3,$t3,lsl#24 | ||
| 541 | str $i2,[$key],#8 | 542 | str $i2,[$key],#8 |
| 543 | orr $i3,$i3,$t3,lsl#24 | ||
| 542 | str $i3,[$key,#-4] | 544 | str $i3,[$key,#-4] |
| 543 | 545 | ||
| 544 | mov $rounds,#14 | 546 | mov $rounds,#14 |
| @@ -550,52 +552,51 @@ AES_set_encrypt_key: | |||
| 550 | .L256_loop: | 552 | .L256_loop: |
| 551 | and $t2,lr,$i3,lsr#24 | 553 | and $t2,lr,$i3,lsr#24 |
| 552 | and $i1,lr,$i3,lsr#16 | 554 | and $i1,lr,$i3,lsr#16 |
| 553 | and $i2,lr,$i3,lsr#8 | ||
| 554 | and $i3,lr,$i3 | ||
| 555 | ldrb $t2,[$tbl,$t2] | 555 | ldrb $t2,[$tbl,$t2] |
| 556 | and $i2,lr,$i3,lsr#8 | ||
| 556 | ldrb $i1,[$tbl,$i1] | 557 | ldrb $i1,[$tbl,$i1] |
| 558 | and $i3,lr,$i3 | ||
| 557 | ldrb $i2,[$tbl,$i2] | 559 | ldrb $i2,[$tbl,$i2] |
| 558 | ldrb $i3,[$tbl,$i3] | ||
| 559 | ldr $t1,[$t3],#4 @ rcon[i++] | ||
| 560 | orr $t2,$t2,$i1,lsl#24 | 560 | orr $t2,$t2,$i1,lsl#24 |
| 561 | ldrb $i3,[$tbl,$i3] | ||
| 561 | orr $t2,$t2,$i2,lsl#16 | 562 | orr $t2,$t2,$i2,lsl#16 |
| 563 | ldr $t1,[$t3],#4 @ rcon[i++] | ||
| 562 | orr $t2,$t2,$i3,lsl#8 | 564 | orr $t2,$t2,$i3,lsl#8 |
| 563 | eor $i3,$t2,$t1 | 565 | eor $i3,$t2,$t1 |
| 564 | eor $s0,$s0,$i3 @ rk[8]=rk[0]^... | 566 | eor $s0,$s0,$i3 @ rk[8]=rk[0]^... |
| 565 | eor $s1,$s1,$s0 @ rk[9]=rk[1]^rk[8] | 567 | eor $s1,$s1,$s0 @ rk[9]=rk[1]^rk[8] |
| 566 | eor $s2,$s2,$s1 @ rk[10]=rk[2]^rk[9] | ||
| 567 | eor $s3,$s3,$s2 @ rk[11]=rk[3]^rk[10] | ||
| 568 | str $s0,[$key],#32 | 568 | str $s0,[$key],#32 |
| 569 | eor $s2,$s2,$s1 @ rk[10]=rk[2]^rk[9] | ||
| 569 | str $s1,[$key,#-28] | 570 | str $s1,[$key,#-28] |
| 571 | eor $s3,$s3,$s2 @ rk[11]=rk[3]^rk[10] | ||
| 570 | str $s2,[$key,#-24] | 572 | str $s2,[$key,#-24] |
| 571 | str $s3,[$key,#-20] | ||
| 572 | |||
| 573 | subs $rounds,$rounds,#1 | 573 | subs $rounds,$rounds,#1 |
| 574 | str $s3,[$key,#-20] | ||
| 574 | subeq r2,$key,#256 | 575 | subeq r2,$key,#256 |
| 575 | beq .Ldone | 576 | beq .Ldone |
| 576 | 577 | ||
| 577 | and $t2,lr,$s3 | 578 | and $t2,lr,$s3 |
| 578 | and $i1,lr,$s3,lsr#8 | 579 | and $i1,lr,$s3,lsr#8 |
| 579 | and $i2,lr,$s3,lsr#16 | ||
| 580 | and $i3,lr,$s3,lsr#24 | ||
| 581 | ldrb $t2,[$tbl,$t2] | 580 | ldrb $t2,[$tbl,$t2] |
| 581 | and $i2,lr,$s3,lsr#16 | ||
| 582 | ldrb $i1,[$tbl,$i1] | 582 | ldrb $i1,[$tbl,$i1] |
| 583 | and $i3,lr,$s3,lsr#24 | ||
| 583 | ldrb $i2,[$tbl,$i2] | 584 | ldrb $i2,[$tbl,$i2] |
| 584 | ldrb $i3,[$tbl,$i3] | ||
| 585 | orr $t2,$t2,$i1,lsl#8 | 585 | orr $t2,$t2,$i1,lsl#8 |
| 586 | ldrb $i3,[$tbl,$i3] | ||
| 586 | orr $t2,$t2,$i2,lsl#16 | 587 | orr $t2,$t2,$i2,lsl#16 |
| 588 | ldr $t1,[$key,#-48] | ||
| 587 | orr $t2,$t2,$i3,lsl#24 | 589 | orr $t2,$t2,$i3,lsl#24 |
| 588 | 590 | ||
| 589 | ldr $t1,[$key,#-48] | ||
| 590 | ldr $i1,[$key,#-44] | 591 | ldr $i1,[$key,#-44] |
| 591 | ldr $i2,[$key,#-40] | 592 | ldr $i2,[$key,#-40] |
| 592 | ldr $i3,[$key,#-36] | ||
| 593 | eor $t1,$t1,$t2 @ rk[12]=rk[4]^... | 593 | eor $t1,$t1,$t2 @ rk[12]=rk[4]^... |
| 594 | ldr $i3,[$key,#-36] | ||
| 594 | eor $i1,$i1,$t1 @ rk[13]=rk[5]^rk[12] | 595 | eor $i1,$i1,$t1 @ rk[13]=rk[5]^rk[12] |
| 595 | eor $i2,$i2,$i1 @ rk[14]=rk[6]^rk[13] | ||
| 596 | eor $i3,$i3,$i2 @ rk[15]=rk[7]^rk[14] | ||
| 597 | str $t1,[$key,#-16] | 596 | str $t1,[$key,#-16] |
| 597 | eor $i2,$i2,$i1 @ rk[14]=rk[6]^rk[13] | ||
| 598 | str $i1,[$key,#-12] | 598 | str $i1,[$key,#-12] |
| 599 | eor $i3,$i3,$i2 @ rk[15]=rk[7]^rk[14] | ||
| 599 | str $i2,[$key,#-8] | 600 | str $i2,[$key,#-8] |
| 600 | str $i3,[$key,#-4] | 601 | str $i3,[$key,#-4] |
| 601 | b .L256_loop | 602 | b .L256_loop |
| @@ -816,24 +817,24 @@ AES_decrypt: | |||
| 816 | ldrb $t2,[$rounds,#1] | 817 | ldrb $t2,[$rounds,#1] |
| 817 | ldrb $t3,[$rounds,#0] | 818 | ldrb $t3,[$rounds,#0] |
| 818 | orr $s0,$s0,$t1,lsl#8 | 819 | orr $s0,$s0,$t1,lsl#8 |
| 819 | orr $s0,$s0,$t2,lsl#16 | ||
| 820 | orr $s0,$s0,$t3,lsl#24 | ||
| 821 | ldrb $s1,[$rounds,#7] | 820 | ldrb $s1,[$rounds,#7] |
| 821 | orr $s0,$s0,$t2,lsl#16 | ||
| 822 | ldrb $t1,[$rounds,#6] | 822 | ldrb $t1,[$rounds,#6] |
| 823 | orr $s0,$s0,$t3,lsl#24 | ||
| 823 | ldrb $t2,[$rounds,#5] | 824 | ldrb $t2,[$rounds,#5] |
| 824 | ldrb $t3,[$rounds,#4] | 825 | ldrb $t3,[$rounds,#4] |
| 825 | orr $s1,$s1,$t1,lsl#8 | 826 | orr $s1,$s1,$t1,lsl#8 |
| 826 | orr $s1,$s1,$t2,lsl#16 | ||
| 827 | orr $s1,$s1,$t3,lsl#24 | ||
| 828 | ldrb $s2,[$rounds,#11] | 827 | ldrb $s2,[$rounds,#11] |
| 828 | orr $s1,$s1,$t2,lsl#16 | ||
| 829 | ldrb $t1,[$rounds,#10] | 829 | ldrb $t1,[$rounds,#10] |
| 830 | orr $s1,$s1,$t3,lsl#24 | ||
| 830 | ldrb $t2,[$rounds,#9] | 831 | ldrb $t2,[$rounds,#9] |
| 831 | ldrb $t3,[$rounds,#8] | 832 | ldrb $t3,[$rounds,#8] |
| 832 | orr $s2,$s2,$t1,lsl#8 | 833 | orr $s2,$s2,$t1,lsl#8 |
| 833 | orr $s2,$s2,$t2,lsl#16 | ||
| 834 | orr $s2,$s2,$t3,lsl#24 | ||
| 835 | ldrb $s3,[$rounds,#15] | 834 | ldrb $s3,[$rounds,#15] |
| 835 | orr $s2,$s2,$t2,lsl#16 | ||
| 836 | ldrb $t1,[$rounds,#14] | 836 | ldrb $t1,[$rounds,#14] |
| 837 | orr $s2,$s2,$t3,lsl#24 | ||
| 837 | ldrb $t2,[$rounds,#13] | 838 | ldrb $t2,[$rounds,#13] |
| 838 | ldrb $t3,[$rounds,#12] | 839 | ldrb $t3,[$rounds,#12] |
| 839 | orr $s3,$s3,$t1,lsl#8 | 840 | orr $s3,$s3,$t1,lsl#8 |
| @@ -848,24 +849,24 @@ AES_decrypt: | |||
| 848 | mov $t3,$s0,lsr#8 | 849 | mov $t3,$s0,lsr#8 |
| 849 | strb $t1,[$rounds,#0] | 850 | strb $t1,[$rounds,#0] |
| 850 | strb $t2,[$rounds,#1] | 851 | strb $t2,[$rounds,#1] |
| 851 | strb $t3,[$rounds,#2] | ||
| 852 | strb $s0,[$rounds,#3] | ||
| 853 | mov $t1,$s1,lsr#24 | 852 | mov $t1,$s1,lsr#24 |
| 853 | strb $t3,[$rounds,#2] | ||
| 854 | mov $t2,$s1,lsr#16 | 854 | mov $t2,$s1,lsr#16 |
| 855 | strb $s0,[$rounds,#3] | ||
| 855 | mov $t3,$s1,lsr#8 | 856 | mov $t3,$s1,lsr#8 |
| 856 | strb $t1,[$rounds,#4] | 857 | strb $t1,[$rounds,#4] |
| 857 | strb $t2,[$rounds,#5] | 858 | strb $t2,[$rounds,#5] |
| 858 | strb $t3,[$rounds,#6] | ||
| 859 | strb $s1,[$rounds,#7] | ||
| 860 | mov $t1,$s2,lsr#24 | 859 | mov $t1,$s2,lsr#24 |
| 860 | strb $t3,[$rounds,#6] | ||
| 861 | mov $t2,$s2,lsr#16 | 861 | mov $t2,$s2,lsr#16 |
| 862 | strb $s1,[$rounds,#7] | ||
| 862 | mov $t3,$s2,lsr#8 | 863 | mov $t3,$s2,lsr#8 |
| 863 | strb $t1,[$rounds,#8] | 864 | strb $t1,[$rounds,#8] |
| 864 | strb $t2,[$rounds,#9] | 865 | strb $t2,[$rounds,#9] |
| 865 | strb $t3,[$rounds,#10] | ||
| 866 | strb $s2,[$rounds,#11] | ||
| 867 | mov $t1,$s3,lsr#24 | 866 | mov $t1,$s3,lsr#24 |
| 867 | strb $t3,[$rounds,#10] | ||
| 868 | mov $t2,$s3,lsr#16 | 868 | mov $t2,$s3,lsr#16 |
| 869 | strb $s2,[$rounds,#11] | ||
| 869 | mov $t3,$s3,lsr#8 | 870 | mov $t3,$s3,lsr#8 |
| 870 | strb $t1,[$rounds,#12] | 871 | strb $t1,[$rounds,#12] |
| 871 | strb $t2,[$rounds,#13] | 872 | strb $t2,[$rounds,#13] |
| @@ -882,146 +883,143 @@ AES_decrypt: | |||
| 882 | .align 2 | 883 | .align 2 |
| 883 | _armv4_AES_decrypt: | 884 | _armv4_AES_decrypt: |
| 884 | str lr,[sp,#-4]! @ push lr | 885 | str lr,[sp,#-4]! @ push lr |
| 885 | ldr $t1,[$key],#16 | 886 | ldmia $key!,{$t1-$i1} |
| 886 | ldr $t2,[$key,#-12] | ||
| 887 | ldr $t3,[$key,#-8] | ||
| 888 | ldr $i1,[$key,#-4] | ||
| 889 | ldr $rounds,[$key,#240-16] | ||
| 890 | eor $s0,$s0,$t1 | 887 | eor $s0,$s0,$t1 |
| 888 | ldr $rounds,[$key,#240-16] | ||
| 891 | eor $s1,$s1,$t2 | 889 | eor $s1,$s1,$t2 |
| 892 | eor $s2,$s2,$t3 | 890 | eor $s2,$s2,$t3 |
| 893 | eor $s3,$s3,$i1 | 891 | eor $s3,$s3,$i1 |
| 894 | sub $rounds,$rounds,#1 | 892 | sub $rounds,$rounds,#1 |
| 895 | mov lr,#255 | 893 | mov lr,#255 |
| 896 | 894 | ||
| 897 | .Ldec_loop: | ||
| 898 | and $i1,lr,$s0,lsr#16 | 895 | and $i1,lr,$s0,lsr#16 |
| 899 | and $i2,lr,$s0,lsr#8 | 896 | and $i2,lr,$s0,lsr#8 |
| 900 | and $i3,lr,$s0 | 897 | and $i3,lr,$s0 |
| 901 | mov $s0,$s0,lsr#24 | 898 | mov $s0,$s0,lsr#24 |
| 899 | .Ldec_loop: | ||
| 902 | ldr $t1,[$tbl,$i1,lsl#2] @ Td1[s0>>16] | 900 | ldr $t1,[$tbl,$i1,lsl#2] @ Td1[s0>>16] |
| 903 | ldr $s0,[$tbl,$s0,lsl#2] @ Td0[s0>>24] | ||
| 904 | ldr $t2,[$tbl,$i2,lsl#2] @ Td2[s0>>8] | ||
| 905 | ldr $t3,[$tbl,$i3,lsl#2] @ Td3[s0>>0] | ||
| 906 | |||
| 907 | and $i1,lr,$s1 @ i0 | 901 | and $i1,lr,$s1 @ i0 |
| 902 | ldr $t2,[$tbl,$i2,lsl#2] @ Td2[s0>>8] | ||
| 908 | and $i2,lr,$s1,lsr#16 | 903 | and $i2,lr,$s1,lsr#16 |
| 904 | ldr $t3,[$tbl,$i3,lsl#2] @ Td3[s0>>0] | ||
| 909 | and $i3,lr,$s1,lsr#8 | 905 | and $i3,lr,$s1,lsr#8 |
| 906 | ldr $s0,[$tbl,$s0,lsl#2] @ Td0[s0>>24] | ||
| 910 | mov $s1,$s1,lsr#24 | 907 | mov $s1,$s1,lsr#24 |
| 908 | |||
| 911 | ldr $i1,[$tbl,$i1,lsl#2] @ Td3[s1>>0] | 909 | ldr $i1,[$tbl,$i1,lsl#2] @ Td3[s1>>0] |
| 912 | ldr $s1,[$tbl,$s1,lsl#2] @ Td0[s1>>24] | ||
| 913 | ldr $i2,[$tbl,$i2,lsl#2] @ Td1[s1>>16] | 910 | ldr $i2,[$tbl,$i2,lsl#2] @ Td1[s1>>16] |
| 914 | ldr $i3,[$tbl,$i3,lsl#2] @ Td2[s1>>8] | 911 | ldr $i3,[$tbl,$i3,lsl#2] @ Td2[s1>>8] |
| 915 | eor $s0,$s0,$i1,ror#24 | 912 | eor $s0,$s0,$i1,ror#24 |
| 916 | eor $s1,$s1,$t1,ror#8 | 913 | ldr $s1,[$tbl,$s1,lsl#2] @ Td0[s1>>24] |
| 917 | eor $t2,$i2,$t2,ror#8 | ||
| 918 | eor $t3,$i3,$t3,ror#8 | ||
| 919 | |||
| 920 | and $i1,lr,$s2,lsr#8 @ i0 | 914 | and $i1,lr,$s2,lsr#8 @ i0 |
| 915 | eor $t2,$i2,$t2,ror#8 | ||
| 921 | and $i2,lr,$s2 @ i1 | 916 | and $i2,lr,$s2 @ i1 |
| 917 | eor $t3,$i3,$t3,ror#8 | ||
| 922 | and $i3,lr,$s2,lsr#16 | 918 | and $i3,lr,$s2,lsr#16 |
| 923 | mov $s2,$s2,lsr#24 | 919 | eor $s1,$s1,$t1,ror#8 |
| 924 | ldr $i1,[$tbl,$i1,lsl#2] @ Td2[s2>>8] | 920 | ldr $i1,[$tbl,$i1,lsl#2] @ Td2[s2>>8] |
| 921 | mov $s2,$s2,lsr#24 | ||
| 922 | |||
| 925 | ldr $i2,[$tbl,$i2,lsl#2] @ Td3[s2>>0] | 923 | ldr $i2,[$tbl,$i2,lsl#2] @ Td3[s2>>0] |
| 926 | ldr $s2,[$tbl,$s2,lsl#2] @ Td0[s2>>24] | ||
| 927 | ldr $i3,[$tbl,$i3,lsl#2] @ Td1[s2>>16] | 924 | ldr $i3,[$tbl,$i3,lsl#2] @ Td1[s2>>16] |
| 928 | eor $s0,$s0,$i1,ror#16 | 925 | eor $s0,$s0,$i1,ror#16 |
| 929 | eor $s1,$s1,$i2,ror#24 | 926 | ldr $s2,[$tbl,$s2,lsl#2] @ Td0[s2>>24] |
| 930 | eor $s2,$s2,$t2,ror#8 | ||
| 931 | eor $t3,$i3,$t3,ror#8 | ||
| 932 | |||
| 933 | and $i1,lr,$s3,lsr#16 @ i0 | 927 | and $i1,lr,$s3,lsr#16 @ i0 |
| 928 | eor $s1,$s1,$i2,ror#24 | ||
| 934 | and $i2,lr,$s3,lsr#8 @ i1 | 929 | and $i2,lr,$s3,lsr#8 @ i1 |
| 930 | eor $t3,$i3,$t3,ror#8 | ||
| 935 | and $i3,lr,$s3 @ i2 | 931 | and $i3,lr,$s3 @ i2 |
| 936 | mov $s3,$s3,lsr#24 | 932 | eor $s2,$s2,$t2,ror#8 |
| 937 | ldr $i1,[$tbl,$i1,lsl#2] @ Td1[s3>>16] | 933 | ldr $i1,[$tbl,$i1,lsl#2] @ Td1[s3>>16] |
| 934 | mov $s3,$s3,lsr#24 | ||
| 935 | |||
| 938 | ldr $i2,[$tbl,$i2,lsl#2] @ Td2[s3>>8] | 936 | ldr $i2,[$tbl,$i2,lsl#2] @ Td2[s3>>8] |
| 939 | ldr $i3,[$tbl,$i3,lsl#2] @ Td3[s3>>0] | 937 | ldr $i3,[$tbl,$i3,lsl#2] @ Td3[s3>>0] |
| 940 | ldr $s3,[$tbl,$s3,lsl#2] @ Td0[s3>>24] | ||
| 941 | eor $s0,$s0,$i1,ror#8 | 938 | eor $s0,$s0,$i1,ror#8 |
| 939 | ldr $s3,[$tbl,$s3,lsl#2] @ Td0[s3>>24] | ||
| 942 | eor $s1,$s1,$i2,ror#16 | 940 | eor $s1,$s1,$i2,ror#16 |
| 943 | eor $s2,$s2,$i3,ror#24 | 941 | eor $s2,$s2,$i3,ror#24 |
| 942 | ldr $i1,[$key],#16 | ||
| 944 | eor $s3,$s3,$t3,ror#8 | 943 | eor $s3,$s3,$t3,ror#8 |
| 945 | 944 | ||
| 946 | ldr $t1,[$key],#16 | 945 | ldr $t1,[$key,#-12] |
| 947 | ldr $t2,[$key,#-12] | 946 | ldr $t2,[$key,#-8] |
| 948 | ldr $t3,[$key,#-8] | 947 | eor $s0,$s0,$i1 |
| 949 | ldr $i1,[$key,#-4] | 948 | ldr $t3,[$key,#-4] |
| 950 | eor $s0,$s0,$t1 | 949 | and $i1,lr,$s0,lsr#16 |
| 951 | eor $s1,$s1,$t2 | 950 | eor $s1,$s1,$t1 |
| 952 | eor $s2,$s2,$t3 | 951 | and $i2,lr,$s0,lsr#8 |
| 953 | eor $s3,$s3,$i1 | 952 | eor $s2,$s2,$t2 |
| 953 | and $i3,lr,$s0 | ||
| 954 | eor $s3,$s3,$t3 | ||
| 955 | mov $s0,$s0,lsr#24 | ||
| 954 | 956 | ||
| 955 | subs $rounds,$rounds,#1 | 957 | subs $rounds,$rounds,#1 |
| 956 | bne .Ldec_loop | 958 | bne .Ldec_loop |
| 957 | 959 | ||
| 958 | add $tbl,$tbl,#1024 | 960 | add $tbl,$tbl,#1024 |
| 959 | 961 | ||
| 960 | ldr $t1,[$tbl,#0] @ prefetch Td4 | 962 | ldr $t2,[$tbl,#0] @ prefetch Td4 |
| 961 | ldr $t2,[$tbl,#32] | 963 | ldr $t3,[$tbl,#32] |
| 962 | ldr $t3,[$tbl,#64] | 964 | ldr $t1,[$tbl,#64] |
| 963 | ldr $i1,[$tbl,#96] | 965 | ldr $t2,[$tbl,#96] |
| 964 | ldr $i2,[$tbl,#128] | 966 | ldr $t3,[$tbl,#128] |
| 965 | ldr $i3,[$tbl,#160] | 967 | ldr $t1,[$tbl,#160] |
| 966 | ldr $t1,[$tbl,#192] | 968 | ldr $t2,[$tbl,#192] |
| 967 | ldr $t2,[$tbl,#224] | 969 | ldr $t3,[$tbl,#224] |
| 968 | 970 | ||
| 969 | and $i1,lr,$s0,lsr#16 | 971 | ldrb $s0,[$tbl,$s0] @ Td4[s0>>24] |
| 970 | and $i2,lr,$s0,lsr#8 | ||
| 971 | and $i3,lr,$s0 | ||
| 972 | ldrb $s0,[$tbl,$s0,lsr#24] @ Td4[s0>>24] | ||
| 973 | ldrb $t1,[$tbl,$i1] @ Td4[s0>>16] | 972 | ldrb $t1,[$tbl,$i1] @ Td4[s0>>16] |
| 974 | ldrb $t2,[$tbl,$i2] @ Td4[s0>>8] | ||
| 975 | ldrb $t3,[$tbl,$i3] @ Td4[s0>>0] | ||
| 976 | |||
| 977 | and $i1,lr,$s1 @ i0 | 973 | and $i1,lr,$s1 @ i0 |
| 974 | ldrb $t2,[$tbl,$i2] @ Td4[s0>>8] | ||
| 978 | and $i2,lr,$s1,lsr#16 | 975 | and $i2,lr,$s1,lsr#16 |
| 976 | ldrb $t3,[$tbl,$i3] @ Td4[s0>>0] | ||
| 979 | and $i3,lr,$s1,lsr#8 | 977 | and $i3,lr,$s1,lsr#8 |
| 978 | |||
| 980 | ldrb $i1,[$tbl,$i1] @ Td4[s1>>0] | 979 | ldrb $i1,[$tbl,$i1] @ Td4[s1>>0] |
| 981 | ldrb $s1,[$tbl,$s1,lsr#24] @ Td4[s1>>24] | 980 | ldrb $s1,[$tbl,$s1,lsr#24] @ Td4[s1>>24] |
| 982 | ldrb $i2,[$tbl,$i2] @ Td4[s1>>16] | 981 | ldrb $i2,[$tbl,$i2] @ Td4[s1>>16] |
| 983 | ldrb $i3,[$tbl,$i3] @ Td4[s1>>8] | ||
| 984 | eor $s0,$i1,$s0,lsl#24 | 982 | eor $s0,$i1,$s0,lsl#24 |
| 983 | ldrb $i3,[$tbl,$i3] @ Td4[s1>>8] | ||
| 985 | eor $s1,$t1,$s1,lsl#8 | 984 | eor $s1,$t1,$s1,lsl#8 |
| 986 | eor $t2,$t2,$i2,lsl#8 | ||
| 987 | eor $t3,$t3,$i3,lsl#8 | ||
| 988 | |||
| 989 | and $i1,lr,$s2,lsr#8 @ i0 | 985 | and $i1,lr,$s2,lsr#8 @ i0 |
| 986 | eor $t2,$t2,$i2,lsl#8 | ||
| 990 | and $i2,lr,$s2 @ i1 | 987 | and $i2,lr,$s2 @ i1 |
| 991 | and $i3,lr,$s2,lsr#16 | 988 | eor $t3,$t3,$i3,lsl#8 |
| 992 | ldrb $i1,[$tbl,$i1] @ Td4[s2>>8] | 989 | ldrb $i1,[$tbl,$i1] @ Td4[s2>>8] |
| 990 | and $i3,lr,$s2,lsr#16 | ||
| 991 | |||
| 993 | ldrb $i2,[$tbl,$i2] @ Td4[s2>>0] | 992 | ldrb $i2,[$tbl,$i2] @ Td4[s2>>0] |
| 994 | ldrb $s2,[$tbl,$s2,lsr#24] @ Td4[s2>>24] | 993 | ldrb $s2,[$tbl,$s2,lsr#24] @ Td4[s2>>24] |
| 995 | ldrb $i3,[$tbl,$i3] @ Td4[s2>>16] | ||
| 996 | eor $s0,$s0,$i1,lsl#8 | 994 | eor $s0,$s0,$i1,lsl#8 |
| 995 | ldrb $i3,[$tbl,$i3] @ Td4[s2>>16] | ||
| 997 | eor $s1,$i2,$s1,lsl#16 | 996 | eor $s1,$i2,$s1,lsl#16 |
| 998 | eor $s2,$t2,$s2,lsl#16 | ||
| 999 | eor $t3,$t3,$i3,lsl#16 | ||
| 1000 | |||
| 1001 | and $i1,lr,$s3,lsr#16 @ i0 | 997 | and $i1,lr,$s3,lsr#16 @ i0 |
| 998 | eor $s2,$t2,$s2,lsl#16 | ||
| 1002 | and $i2,lr,$s3,lsr#8 @ i1 | 999 | and $i2,lr,$s3,lsr#8 @ i1 |
| 1003 | and $i3,lr,$s3 @ i2 | 1000 | eor $t3,$t3,$i3,lsl#16 |
| 1004 | ldrb $i1,[$tbl,$i1] @ Td4[s3>>16] | 1001 | ldrb $i1,[$tbl,$i1] @ Td4[s3>>16] |
| 1002 | and $i3,lr,$s3 @ i2 | ||
| 1003 | |||
| 1005 | ldrb $i2,[$tbl,$i2] @ Td4[s3>>8] | 1004 | ldrb $i2,[$tbl,$i2] @ Td4[s3>>8] |
| 1006 | ldrb $i3,[$tbl,$i3] @ Td4[s3>>0] | 1005 | ldrb $i3,[$tbl,$i3] @ Td4[s3>>0] |
| 1007 | ldrb $s3,[$tbl,$s3,lsr#24] @ Td4[s3>>24] | 1006 | ldrb $s3,[$tbl,$s3,lsr#24] @ Td4[s3>>24] |
| 1008 | eor $s0,$s0,$i1,lsl#16 | 1007 | eor $s0,$s0,$i1,lsl#16 |
| 1008 | ldr $i1,[$key,#0] | ||
| 1009 | eor $s1,$s1,$i2,lsl#8 | 1009 | eor $s1,$s1,$i2,lsl#8 |
| 1010 | ldr $t1,[$key,#4] | ||
| 1010 | eor $s2,$i3,$s2,lsl#8 | 1011 | eor $s2,$i3,$s2,lsl#8 |
| 1012 | ldr $t2,[$key,#8] | ||
| 1011 | eor $s3,$t3,$s3,lsl#24 | 1013 | eor $s3,$t3,$s3,lsl#24 |
| 1014 | ldr $t3,[$key,#12] | ||
| 1012 | 1015 | ||
| 1013 | ldr lr,[sp],#4 @ pop lr | 1016 | eor $s0,$s0,$i1 |
| 1014 | ldr $t1,[$key,#0] | 1017 | eor $s1,$s1,$t1 |
| 1015 | ldr $t2,[$key,#4] | 1018 | eor $s2,$s2,$t2 |
| 1016 | ldr $t3,[$key,#8] | 1019 | eor $s3,$s3,$t3 |
| 1017 | ldr $i1,[$key,#12] | ||
| 1018 | eor $s0,$s0,$t1 | ||
| 1019 | eor $s1,$s1,$t2 | ||
| 1020 | eor $s2,$s2,$t3 | ||
| 1021 | eor $s3,$s3,$i1 | ||
| 1022 | 1020 | ||
| 1023 | sub $tbl,$tbl,#1024 | 1021 | sub $tbl,$tbl,#1024 |
| 1024 | mov pc,lr @ return | 1022 | ldr pc,[sp],#4 @ pop and return |
| 1025 | .size _armv4_AES_decrypt,.-_armv4_AES_decrypt | 1023 | .size _armv4_AES_decrypt,.-_armv4_AES_decrypt |
| 1026 | .asciz "AES for ARMv4, CRYPTOGAMS by <appro\@openssl.org>" | 1024 | .asciz "AES for ARMv4, CRYPTOGAMS by <appro\@openssl.org>" |
| 1027 | .align 2 | 1025 | .align 2 |
| @@ -1029,3 +1027,4 @@ ___ | |||
| 1029 | 1027 | ||
| 1030 | $code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4 | 1028 | $code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4 |
| 1031 | print $code; | 1029 | print $code; |
| 1030 | close STDOUT; # enforce flush | ||
diff --git a/src/lib/libssl/src/crypto/alphacpuid.pl b/src/lib/libssl/src/crypto/alphacpuid.pl new file mode 100644 index 0000000000..4b3cbb9827 --- /dev/null +++ b/src/lib/libssl/src/crypto/alphacpuid.pl | |||
| @@ -0,0 +1,126 @@ | |||
| 1 | #!/usr/bin/env perl | ||
| 2 | print <<'___'; | ||
| 3 | .text | ||
| 4 | |||
| 5 | .set noat | ||
| 6 | |||
| 7 | .globl OPENSSL_cpuid_setup | ||
| 8 | .ent OPENSSL_cpuid_setup | ||
| 9 | OPENSSL_cpuid_setup: | ||
| 10 | .frame $30,0,$26 | ||
| 11 | .prologue 0 | ||
| 12 | ret ($26) | ||
| 13 | .end OPENSSL_cpuid_setup | ||
| 14 | |||
| 15 | .globl OPENSSL_wipe_cpu | ||
| 16 | .ent OPENSSL_wipe_cpu | ||
| 17 | OPENSSL_wipe_cpu: | ||
| 18 | .frame $30,0,$26 | ||
| 19 | .prologue 0 | ||
| 20 | clr $1 | ||
| 21 | clr $2 | ||
| 22 | clr $3 | ||
| 23 | clr $4 | ||
| 24 | clr $5 | ||
| 25 | clr $6 | ||
| 26 | clr $7 | ||
| 27 | clr $8 | ||
| 28 | clr $16 | ||
| 29 | clr $17 | ||
| 30 | clr $18 | ||
| 31 | clr $19 | ||
| 32 | clr $20 | ||
| 33 | clr $21 | ||
| 34 | clr $22 | ||
| 35 | clr $23 | ||
| 36 | clr $24 | ||
| 37 | clr $25 | ||
| 38 | clr $27 | ||
| 39 | clr $at | ||
| 40 | clr $29 | ||
| 41 | fclr $f0 | ||
| 42 | fclr $f1 | ||
| 43 | fclr $f10 | ||
| 44 | fclr $f11 | ||
| 45 | fclr $f12 | ||
| 46 | fclr $f13 | ||
| 47 | fclr $f14 | ||
| 48 | fclr $f15 | ||
| 49 | fclr $f16 | ||
| 50 | fclr $f17 | ||
| 51 | fclr $f18 | ||
| 52 | fclr $f19 | ||
| 53 | fclr $f20 | ||
| 54 | fclr $f21 | ||
| 55 | fclr $f22 | ||
| 56 | fclr $f23 | ||
| 57 | fclr $f24 | ||
| 58 | fclr $f25 | ||
| 59 | fclr $f26 | ||
| 60 | fclr $f27 | ||
| 61 | fclr $f28 | ||
| 62 | fclr $f29 | ||
| 63 | fclr $f30 | ||
| 64 | mov $sp,$0 | ||
| 65 | ret ($26) | ||
| 66 | .end OPENSSL_wipe_cpu | ||
| 67 | |||
| 68 | .globl OPENSSL_atomic_add | ||
| 69 | .ent OPENSSL_atomic_add | ||
| 70 | OPENSSL_atomic_add: | ||
| 71 | .frame $30,0,$26 | ||
| 72 | .prologue 0 | ||
| 73 | 1: ldl_l $0,0($16) | ||
| 74 | addl $0,$17,$1 | ||
| 75 | stl_c $1,0($16) | ||
| 76 | beq $1,1b | ||
| 77 | addl $0,$17,$0 | ||
| 78 | ret ($26) | ||
| 79 | .end OPENSSL_atomic_add | ||
| 80 | |||
| 81 | .globl OPENSSL_rdtsc | ||
| 82 | .ent OPENSSL_rdtsc | ||
| 83 | OPENSSL_rdtsc: | ||
| 84 | .frame $30,0,$26 | ||
| 85 | .prologue 0 | ||
| 86 | rpcc $0 | ||
| 87 | ret ($26) | ||
| 88 | .end OPENSSL_rdtsc | ||
| 89 | |||
| 90 | .globl OPENSSL_cleanse | ||
| 91 | .ent OPENSSL_cleanse | ||
| 92 | OPENSSL_cleanse: | ||
| 93 | .frame $30,0,$26 | ||
| 94 | .prologue 0 | ||
| 95 | beq $17,.Ldone | ||
| 96 | and $16,7,$0 | ||
| 97 | bic $17,7,$at | ||
| 98 | beq $at,.Little | ||
| 99 | beq $0,.Laligned | ||
| 100 | |||
| 101 | .Little: | ||
| 102 | subq $0,8,$0 | ||
| 103 | ldq_u $1,0($16) | ||
| 104 | mov $16,$2 | ||
| 105 | .Lalign: | ||
| 106 | mskbl $1,$16,$1 | ||
| 107 | lda $16,1($16) | ||
| 108 | subq $17,1,$17 | ||
| 109 | addq $0,1,$0 | ||
| 110 | beq $17,.Lout | ||
| 111 | bne $0,.Lalign | ||
| 112 | .Lout: stq_u $1,0($2) | ||
| 113 | beq $17,.Ldone | ||
| 114 | bic $17,7,$at | ||
| 115 | beq $at,.Little | ||
| 116 | |||
| 117 | .Laligned: | ||
| 118 | stq $31,0($16) | ||
| 119 | subq $17,8,$17 | ||
| 120 | lda $16,8($16) | ||
| 121 | bic $17,7,$at | ||
| 122 | bne $at,.Laligned | ||
| 123 | bne $17,.Little | ||
| 124 | .Ldone: ret ($26) | ||
| 125 | .end OPENSSL_cleanse | ||
| 126 | ___ | ||
diff --git a/src/lib/libssl/src/crypto/asn1/ameth_lib.c b/src/lib/libssl/src/crypto/asn1/ameth_lib.c index 9a8b6cc222..5a581b90ea 100644 --- a/src/lib/libssl/src/crypto/asn1/ameth_lib.c +++ b/src/lib/libssl/src/crypto/asn1/ameth_lib.c | |||
| @@ -172,7 +172,6 @@ static const EVP_PKEY_ASN1_METHOD *pkey_asn1_find(int type) | |||
| 172 | const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type) | 172 | const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type) |
| 173 | { | 173 | { |
| 174 | const EVP_PKEY_ASN1_METHOD *t; | 174 | const EVP_PKEY_ASN1_METHOD *t; |
| 175 | ENGINE *e; | ||
| 176 | 175 | ||
| 177 | for (;;) | 176 | for (;;) |
| 178 | { | 177 | { |
| @@ -184,6 +183,7 @@ const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type) | |||
| 184 | if (pe) | 183 | if (pe) |
| 185 | { | 184 | { |
| 186 | #ifndef OPENSSL_NO_ENGINE | 185 | #ifndef OPENSSL_NO_ENGINE |
| 186 | ENGINE *e; | ||
| 187 | /* type will contain the final unaliased type */ | 187 | /* type will contain the final unaliased type */ |
| 188 | e = ENGINE_get_pkey_asn1_meth_engine(type); | 188 | e = ENGINE_get_pkey_asn1_meth_engine(type); |
| 189 | if (e) | 189 | if (e) |
diff --git a/src/lib/libssl/src/crypto/asn1/bio_ndef.c b/src/lib/libssl/src/crypto/asn1/bio_ndef.c index 370389b1e6..b91f97a1b1 100644 --- a/src/lib/libssl/src/crypto/asn1/bio_ndef.c +++ b/src/lib/libssl/src/crypto/asn1/bio_ndef.c | |||
| @@ -57,9 +57,6 @@ | |||
| 57 | #include <openssl/bio.h> | 57 | #include <openssl/bio.h> |
| 58 | #include <openssl/err.h> | 58 | #include <openssl/err.h> |
| 59 | 59 | ||
| 60 | #ifndef OPENSSL_SYSNAME_NETWARE | ||
| 61 | #include <memory.h> | ||
| 62 | #endif | ||
| 63 | #include <stdio.h> | 60 | #include <stdio.h> |
| 64 | 61 | ||
| 65 | /* Experimental NDEF ASN1 BIO support routines */ | 62 | /* Experimental NDEF ASN1 BIO support routines */ |
diff --git a/src/lib/libssl/src/crypto/bio/bss_dgram.c b/src/lib/libssl/src/crypto/bio/bss_dgram.c index eb7e365467..71ebe987b6 100644 --- a/src/lib/libssl/src/crypto/bio/bss_dgram.c +++ b/src/lib/libssl/src/crypto/bio/bss_dgram.c | |||
| @@ -57,7 +57,6 @@ | |||
| 57 | * | 57 | * |
| 58 | */ | 58 | */ |
| 59 | 59 | ||
| 60 | #ifndef OPENSSL_NO_DGRAM | ||
| 61 | 60 | ||
| 62 | #include <stdio.h> | 61 | #include <stdio.h> |
| 63 | #include <errno.h> | 62 | #include <errno.h> |
| @@ -65,6 +64,7 @@ | |||
| 65 | #include "cryptlib.h" | 64 | #include "cryptlib.h" |
| 66 | 65 | ||
| 67 | #include <openssl/bio.h> | 66 | #include <openssl/bio.h> |
| 67 | #ifndef OPENSSL_NO_DGRAM | ||
| 68 | 68 | ||
| 69 | #if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS) | 69 | #if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS) |
| 70 | #include <sys/timeb.h> | 70 | #include <sys/timeb.h> |
| @@ -308,7 +308,6 @@ static int dgram_read(BIO *b, char *out, int outl) | |||
| 308 | OPENSSL_assert(sa.len.s<=sizeof(sa.peer)); | 308 | OPENSSL_assert(sa.len.s<=sizeof(sa.peer)); |
| 309 | sa.len.i = (int)sa.len.s; | 309 | sa.len.i = (int)sa.len.s; |
| 310 | } | 310 | } |
| 311 | dgram_reset_rcv_timeout(b); | ||
| 312 | 311 | ||
| 313 | if ( ! data->connected && ret >= 0) | 312 | if ( ! data->connected && ret >= 0) |
| 314 | BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, &sa.peer); | 313 | BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, &sa.peer); |
| @@ -322,6 +321,8 @@ static int dgram_read(BIO *b, char *out, int outl) | |||
| 322 | data->_errno = get_last_socket_error(); | 321 | data->_errno = get_last_socket_error(); |
| 323 | } | 322 | } |
| 324 | } | 323 | } |
| 324 | |||
| 325 | dgram_reset_rcv_timeout(b); | ||
| 325 | } | 326 | } |
| 326 | return(ret); | 327 | return(ret); |
| 327 | } | 328 | } |
| @@ -340,7 +341,7 @@ static int dgram_write(BIO *b, const char *in, int inl) | |||
| 340 | 341 | ||
| 341 | if (data->peer.sa.sa_family == AF_INET) | 342 | if (data->peer.sa.sa_family == AF_INET) |
| 342 | peerlen = sizeof(data->peer.sa_in); | 343 | peerlen = sizeof(data->peer.sa_in); |
| 343 | #if OPENSSL_USE_IVP6 | 344 | #if OPENSSL_USE_IPV6 |
| 344 | else if (data->peer.sa.sa_family == AF_INET6) | 345 | else if (data->peer.sa.sa_family == AF_INET6) |
| 345 | peerlen = sizeof(data->peer.sa_in6); | 346 | peerlen = sizeof(data->peer.sa_in6); |
| 346 | #endif | 347 | #endif |
| @@ -745,9 +746,13 @@ static int BIO_dgram_should_retry(int i) | |||
| 745 | { | 746 | { |
| 746 | err=get_last_socket_error(); | 747 | err=get_last_socket_error(); |
| 747 | 748 | ||
| 748 | #if defined(OPENSSL_SYS_WINDOWS) && 0 /* more microsoft stupidity? perhaps not? Ben 4/1/99 */ | 749 | #if defined(OPENSSL_SYS_WINDOWS) |
| 749 | if ((i == -1) && (err == 0)) | 750 | /* If the socket return value (i) is -1 |
| 750 | return(1); | 751 | * and err is unexpectedly 0 at this point, |
| 752 | * the error code was overwritten by | ||
| 753 | * another system call before this error | ||
| 754 | * handling is called. | ||
| 755 | */ | ||
| 751 | #endif | 756 | #endif |
| 752 | 757 | ||
| 753 | return(BIO_dgram_non_fatal_error(err)); | 758 | return(BIO_dgram_non_fatal_error(err)); |
| @@ -810,7 +815,6 @@ int BIO_dgram_non_fatal_error(int err) | |||
| 810 | } | 815 | } |
| 811 | return(0); | 816 | return(0); |
| 812 | } | 817 | } |
| 813 | #endif | ||
| 814 | 818 | ||
| 815 | static void get_current_time(struct timeval *t) | 819 | static void get_current_time(struct timeval *t) |
| 816 | { | 820 | { |
| @@ -828,3 +832,5 @@ static void get_current_time(struct timeval *t) | |||
| 828 | gettimeofday(t, NULL); | 832 | gettimeofday(t, NULL); |
| 829 | #endif | 833 | #endif |
| 830 | } | 834 | } |
| 835 | |||
| 836 | #endif | ||
diff --git a/src/lib/libssl/src/crypto/bn/asm/alpha-mont.pl b/src/lib/libssl/src/crypto/bn/asm/alpha-mont.pl index f7e0ca1646..03596e2014 100644 --- a/src/lib/libssl/src/crypto/bn/asm/alpha-mont.pl +++ b/src/lib/libssl/src/crypto/bn/asm/alpha-mont.pl | |||
| @@ -41,8 +41,12 @@ $j="s4"; | |||
| 41 | $m1="s5"; | 41 | $m1="s5"; |
| 42 | 42 | ||
| 43 | $code=<<___; | 43 | $code=<<___; |
| 44 | #ifdef __linux__ | ||
| 45 | #include <asm/regdef.h> | ||
| 46 | #else | ||
| 44 | #include <asm.h> | 47 | #include <asm.h> |
| 45 | #include <regdef.h> | 48 | #include <regdef.h> |
| 49 | #endif | ||
| 46 | 50 | ||
| 47 | .text | 51 | .text |
| 48 | 52 | ||
| @@ -76,7 +80,7 @@ bn_mul_mont: | |||
| 76 | ldq $aj,8($ap) | 80 | ldq $aj,8($ap) |
| 77 | subq sp,AT,sp | 81 | subq sp,AT,sp |
| 78 | ldq $bi,0($bp) # bp[0] | 82 | ldq $bi,0($bp) # bp[0] |
| 79 | mov -4096,AT | 83 | lda AT,-4096(zero) # mov -4096,AT |
| 80 | ldq $n0,0($n0) | 84 | ldq $n0,0($n0) |
| 81 | and sp,AT,sp | 85 | and sp,AT,sp |
| 82 | 86 | ||
| @@ -106,9 +110,9 @@ bn_mul_mont: | |||
| 106 | .align 4 | 110 | .align 4 |
| 107 | .L1st: | 111 | .L1st: |
| 108 | .set noreorder | 112 | .set noreorder |
| 109 | ldq $aj,($aj) | 113 | ldq $aj,0($aj) |
| 110 | addl $j,1,$j | 114 | addl $j,1,$j |
| 111 | ldq $nj,($nj) | 115 | ldq $nj,0($nj) |
| 112 | lda $tp,8($tp) | 116 | lda $tp,8($tp) |
| 113 | 117 | ||
| 114 | addq $alo,$hi0,$lo0 | 118 | addq $alo,$hi0,$lo0 |
| @@ -159,12 +163,12 @@ bn_mul_mont: | |||
| 159 | .align 4 | 163 | .align 4 |
| 160 | .Louter: | 164 | .Louter: |
| 161 | s8addq $i,$bp,$bi | 165 | s8addq $i,$bp,$bi |
| 162 | ldq $hi0,($ap) | 166 | ldq $hi0,0($ap) |
| 163 | ldq $aj,8($ap) | 167 | ldq $aj,8($ap) |
| 164 | ldq $bi,($bi) | 168 | ldq $bi,0($bi) |
| 165 | ldq $hi1,($np) | 169 | ldq $hi1,0($np) |
| 166 | ldq $nj,8($np) | 170 | ldq $nj,8($np) |
| 167 | ldq $tj,(sp) | 171 | ldq $tj,0(sp) |
| 168 | 172 | ||
| 169 | mulq $hi0,$bi,$lo0 | 173 | mulq $hi0,$bi,$lo0 |
| 170 | umulh $hi0,$bi,$hi0 | 174 | umulh $hi0,$bi,$hi0 |
| @@ -195,10 +199,10 @@ bn_mul_mont: | |||
| 195 | .set noreorder | 199 | .set noreorder |
| 196 | ldq $tj,8($tp) #L0 | 200 | ldq $tj,8($tp) #L0 |
| 197 | nop #U1 | 201 | nop #U1 |
| 198 | ldq $aj,($aj) #L1 | 202 | ldq $aj,0($aj) #L1 |
| 199 | s8addq $j,$np,$nj #U0 | 203 | s8addq $j,$np,$nj #U0 |
| 200 | 204 | ||
| 201 | ldq $nj,($nj) #L0 | 205 | ldq $nj,0($nj) #L0 |
| 202 | nop #U1 | 206 | nop #U1 |
| 203 | addq $alo,$hi0,$lo0 #L1 | 207 | addq $alo,$hi0,$lo0 #L1 |
| 204 | lda $tp,8($tp) | 208 | lda $tp,8($tp) |
| @@ -247,7 +251,7 @@ bn_mul_mont: | |||
| 247 | addq $hi1,v0,$hi1 | 251 | addq $hi1,v0,$hi1 |
| 248 | 252 | ||
| 249 | addq $hi1,$hi0,$lo1 | 253 | addq $hi1,$hi0,$lo1 |
| 250 | stq $j,($tp) | 254 | stq $j,0($tp) |
| 251 | cmpult $lo1,$hi0,$hi1 | 255 | cmpult $lo1,$hi0,$hi1 |
| 252 | addq $lo1,$tj,$lo1 | 256 | addq $lo1,$tj,$lo1 |
| 253 | cmpult $lo1,$tj,AT | 257 | cmpult $lo1,$tj,AT |
| @@ -265,8 +269,8 @@ bn_mul_mont: | |||
| 265 | mov 0,$hi0 # clear borrow bit | 269 | mov 0,$hi0 # clear borrow bit |
| 266 | 270 | ||
| 267 | .align 4 | 271 | .align 4 |
| 268 | .Lsub: ldq $lo0,($tp) | 272 | .Lsub: ldq $lo0,0($tp) |
| 269 | ldq $lo1,($np) | 273 | ldq $lo1,0($np) |
| 270 | lda $tp,8($tp) | 274 | lda $tp,8($tp) |
| 271 | lda $np,8($np) | 275 | lda $np,8($np) |
| 272 | subq $lo0,$lo1,$lo1 # tp[i]-np[i] | 276 | subq $lo0,$lo1,$lo1 # tp[i]-np[i] |
| @@ -274,7 +278,7 @@ bn_mul_mont: | |||
| 274 | subq $lo1,$hi0,$lo0 | 278 | subq $lo1,$hi0,$lo0 |
| 275 | cmpult $lo1,$lo0,$hi0 | 279 | cmpult $lo1,$lo0,$hi0 |
| 276 | or $hi0,AT,$hi0 | 280 | or $hi0,AT,$hi0 |
| 277 | stq $lo0,($rp) | 281 | stq $lo0,0($rp) |
| 278 | cmpult $tp,$tj,v0 | 282 | cmpult $tp,$tj,v0 |
| 279 | lda $rp,8($rp) | 283 | lda $rp,8($rp) |
| 280 | bne v0,.Lsub | 284 | bne v0,.Lsub |
| @@ -288,7 +292,7 @@ bn_mul_mont: | |||
| 288 | bis $bp,$ap,$ap # ap=borrow?tp:rp | 292 | bis $bp,$ap,$ap # ap=borrow?tp:rp |
| 289 | 293 | ||
| 290 | .align 4 | 294 | .align 4 |
| 291 | .Lcopy: ldq $aj,($ap) # copy or in-place refresh | 295 | .Lcopy: ldq $aj,0($ap) # copy or in-place refresh |
| 292 | lda $tp,8($tp) | 296 | lda $tp,8($tp) |
| 293 | lda $rp,8($rp) | 297 | lda $rp,8($rp) |
| 294 | lda $ap,8($ap) | 298 | lda $ap,8($ap) |
| @@ -309,8 +313,8 @@ bn_mul_mont: | |||
| 309 | lda sp,48(sp) | 313 | lda sp,48(sp) |
| 310 | ret (ra) | 314 | ret (ra) |
| 311 | .end bn_mul_mont | 315 | .end bn_mul_mont |
| 312 | .rdata | 316 | .ascii "Montgomery Multiplication for Alpha, CRYPTOGAMS by <appro\@openssl.org>" |
| 313 | .asciiz "Montgomery Multiplication for Alpha, CRYPTOGAMS by <appro\@openssl.org>" | 317 | .align 2 |
| 314 | ___ | 318 | ___ |
| 315 | 319 | ||
| 316 | print $code; | 320 | print $code; |
diff --git a/src/lib/libssl/src/crypto/bn/asm/s390x-mont.pl b/src/lib/libssl/src/crypto/bn/asm/s390x-mont.pl index d23251033b..f61246f5b6 100644 --- a/src/lib/libssl/src/crypto/bn/asm/s390x-mont.pl +++ b/src/lib/libssl/src/crypto/bn/asm/s390x-mont.pl | |||
| @@ -69,8 +69,8 @@ bn_mul_mont: | |||
| 69 | cghi $num,16 # | 69 | cghi $num,16 # |
| 70 | lghi %r2,0 # | 70 | lghi %r2,0 # |
| 71 | blr %r14 # if($num<16) return 0; | 71 | blr %r14 # if($num<16) return 0; |
| 72 | cghi $num,128 # | 72 | cghi $num,96 # |
| 73 | bhr %r14 # if($num>128) return 0; | 73 | bhr %r14 # if($num>96) return 0; |
| 74 | 74 | ||
| 75 | stmg %r3,%r15,24($sp) | 75 | stmg %r3,%r15,24($sp) |
| 76 | 76 | ||
diff --git a/src/lib/libssl/src/crypto/bn/asm/s390x.S b/src/lib/libssl/src/crypto/bn/asm/s390x.S index 8f45f5d513..43fcb79bc0 100755 --- a/src/lib/libssl/src/crypto/bn/asm/s390x.S +++ b/src/lib/libssl/src/crypto/bn/asm/s390x.S | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | .ident "s390x.S, version 1.0" | 1 | .ident "s390x.S, version 1.1" |
| 2 | // ==================================================================== | 2 | // ==================================================================== |
| 3 | // Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL | 3 | // Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL |
| 4 | // project. | 4 | // project. |
| @@ -24,67 +24,67 @@ bn_mul_add_words: | |||
| 24 | bler %r14 // if (len<=0) return 0; | 24 | bler %r14 // if (len<=0) return 0; |
| 25 | 25 | ||
| 26 | stmg %r6,%r10,48(%r15) | 26 | stmg %r6,%r10,48(%r15) |
| 27 | lghi %r10,3 | ||
| 27 | lghi %r8,0 // carry = 0 | 28 | lghi %r8,0 // carry = 0 |
| 28 | srag %r10,%r4,2 // cnt=len/4 | 29 | nr %r10,%r4 // len%4 |
| 29 | jz .Loop1_madd | 30 | sra %r4,2 // cnt=len/4 |
| 31 | jz .Loop1_madd // carry is incidentally cleared if branch taken | ||
| 32 | algr zero,zero // clear carry | ||
| 30 | 33 | ||
| 31 | .Loop4_madd: | 34 | .Loop4_madd: |
| 32 | lg %r7,0(%r2,%r3) // ap[i] | 35 | lg %r7,0(%r2,%r3) // ap[i] |
| 33 | mlgr %r6,%r5 // *=w | 36 | mlgr %r6,%r5 // *=w |
| 34 | algr %r7,%r8 // +=carry | 37 | alcgr %r7,%r8 // +=carry |
| 35 | alcgr %r6,zero | 38 | alcgr %r6,zero |
| 36 | alg %r7,0(%r2,%r1) // +=rp[i] | 39 | alg %r7,0(%r2,%r1) // +=rp[i] |
| 37 | alcgr %r6,zero | ||
| 38 | stg %r7,0(%r2,%r1) // rp[i]= | 40 | stg %r7,0(%r2,%r1) // rp[i]= |
| 39 | 41 | ||
| 40 | lg %r9,8(%r2,%r3) | 42 | lg %r9,8(%r2,%r3) |
| 41 | mlgr %r8,%r5 | 43 | mlgr %r8,%r5 |
| 42 | algr %r9,%r6 | 44 | alcgr %r9,%r6 |
| 43 | alcgr %r8,zero | 45 | alcgr %r8,zero |
| 44 | alg %r9,8(%r2,%r1) | 46 | alg %r9,8(%r2,%r1) |
| 45 | alcgr %r8,zero | ||
| 46 | stg %r9,8(%r2,%r1) | 47 | stg %r9,8(%r2,%r1) |
| 47 | 48 | ||
| 48 | lg %r7,16(%r2,%r3) | 49 | lg %r7,16(%r2,%r3) |
| 49 | mlgr %r6,%r5 | 50 | mlgr %r6,%r5 |
| 50 | algr %r7,%r8 | 51 | alcgr %r7,%r8 |
| 51 | alcgr %r6,zero | 52 | alcgr %r6,zero |
| 52 | alg %r7,16(%r2,%r1) | 53 | alg %r7,16(%r2,%r1) |
| 53 | alcgr %r6,zero | ||
| 54 | stg %r7,16(%r2,%r1) | 54 | stg %r7,16(%r2,%r1) |
| 55 | 55 | ||
| 56 | lg %r9,24(%r2,%r3) | 56 | lg %r9,24(%r2,%r3) |
| 57 | mlgr %r8,%r5 | 57 | mlgr %r8,%r5 |
| 58 | algr %r9,%r6 | 58 | alcgr %r9,%r6 |
| 59 | alcgr %r8,zero | 59 | alcgr %r8,zero |
| 60 | alg %r9,24(%r2,%r1) | 60 | alg %r9,24(%r2,%r1) |
| 61 | alcgr %r8,zero | ||
| 62 | stg %r9,24(%r2,%r1) | 61 | stg %r9,24(%r2,%r1) |
| 63 | 62 | ||
| 64 | la %r2,32(%r2) // i+=4 | 63 | la %r2,32(%r2) // i+=4 |
| 65 | brct %r10,.Loop4_madd | 64 | brct %r4,.Loop4_madd |
| 66 | 65 | ||
| 67 | lghi %r10,3 | 66 | la %r10,1(%r10) // see if len%4 is zero ... |
| 68 | nr %r4,%r10 // cnt=len%4 | 67 | brct %r10,.Loop1_madd // without touching condition code:-) |
| 69 | jz .Lend_madd | 68 | |
| 69 | .Lend_madd: | ||
| 70 | alcgr %r8,zero // collect carry bit | ||
| 71 | lgr %r2,%r8 | ||
| 72 | lmg %r6,%r10,48(%r15) | ||
| 73 | br %r14 | ||
| 70 | 74 | ||
| 71 | .Loop1_madd: | 75 | .Loop1_madd: |
| 72 | lg %r7,0(%r2,%r3) // ap[i] | 76 | lg %r7,0(%r2,%r3) // ap[i] |
| 73 | mlgr %r6,%r5 // *=w | 77 | mlgr %r6,%r5 // *=w |
| 74 | algr %r7,%r8 // +=carry | 78 | alcgr %r7,%r8 // +=carry |
| 75 | alcgr %r6,zero | 79 | alcgr %r6,zero |
| 76 | alg %r7,0(%r2,%r1) // +=rp[i] | 80 | alg %r7,0(%r2,%r1) // +=rp[i] |
| 77 | alcgr %r6,zero | ||
| 78 | stg %r7,0(%r2,%r1) // rp[i]= | 81 | stg %r7,0(%r2,%r1) // rp[i]= |
| 79 | 82 | ||
| 80 | lgr %r8,%r6 | 83 | lgr %r8,%r6 |
| 81 | la %r2,8(%r2) // i++ | 84 | la %r2,8(%r2) // i++ |
| 82 | brct %r4,.Loop1_madd | 85 | brct %r10,.Loop1_madd |
| 83 | 86 | ||
| 84 | .Lend_madd: | 87 | j .Lend_madd |
| 85 | lgr %r2,%r8 | ||
| 86 | lmg %r6,%r10,48(%r15) | ||
| 87 | br %r14 | ||
| 88 | .size bn_mul_add_words,.-bn_mul_add_words | 88 | .size bn_mul_add_words,.-bn_mul_add_words |
| 89 | 89 | ||
| 90 | // BN_ULONG bn_mul_words(BN_ULONG *r2,BN_ULONG *r3,int r4,BN_ULONG r5); | 90 | // BN_ULONG bn_mul_words(BN_ULONG *r2,BN_ULONG *r3,int r4,BN_ULONG r5); |
| @@ -99,57 +99,57 @@ bn_mul_words: | |||
| 99 | bler %r14 // if (len<=0) return 0; | 99 | bler %r14 // if (len<=0) return 0; |
| 100 | 100 | ||
| 101 | stmg %r6,%r10,48(%r15) | 101 | stmg %r6,%r10,48(%r15) |
| 102 | lghi %r10,3 | ||
| 102 | lghi %r8,0 // carry = 0 | 103 | lghi %r8,0 // carry = 0 |
| 103 | srag %r10,%r4,2 // cnt=len/4 | 104 | nr %r10,%r4 // len%4 |
| 104 | jz .Loop1_mul | 105 | sra %r4,2 // cnt=len/4 |
| 106 | jz .Loop1_mul // carry is incidentally cleared if branch taken | ||
| 107 | algr zero,zero // clear carry | ||
| 105 | 108 | ||
| 106 | .Loop4_mul: | 109 | .Loop4_mul: |
| 107 | lg %r7,0(%r2,%r3) // ap[i] | 110 | lg %r7,0(%r2,%r3) // ap[i] |
| 108 | mlgr %r6,%r5 // *=w | 111 | mlgr %r6,%r5 // *=w |
| 109 | algr %r7,%r8 // +=carry | 112 | alcgr %r7,%r8 // +=carry |
| 110 | alcgr %r6,zero | ||
| 111 | stg %r7,0(%r2,%r1) // rp[i]= | 113 | stg %r7,0(%r2,%r1) // rp[i]= |
| 112 | 114 | ||
| 113 | lg %r9,8(%r2,%r3) | 115 | lg %r9,8(%r2,%r3) |
| 114 | mlgr %r8,%r5 | 116 | mlgr %r8,%r5 |
| 115 | algr %r9,%r6 | 117 | alcgr %r9,%r6 |
| 116 | alcgr %r8,zero | ||
| 117 | stg %r9,8(%r2,%r1) | 118 | stg %r9,8(%r2,%r1) |
| 118 | 119 | ||
| 119 | lg %r7,16(%r2,%r3) | 120 | lg %r7,16(%r2,%r3) |
| 120 | mlgr %r6,%r5 | 121 | mlgr %r6,%r5 |
| 121 | algr %r7,%r8 | 122 | alcgr %r7,%r8 |
| 122 | alcgr %r6,zero | ||
| 123 | stg %r7,16(%r2,%r1) | 123 | stg %r7,16(%r2,%r1) |
| 124 | 124 | ||
| 125 | lg %r9,24(%r2,%r3) | 125 | lg %r9,24(%r2,%r3) |
| 126 | mlgr %r8,%r5 | 126 | mlgr %r8,%r5 |
| 127 | algr %r9,%r6 | 127 | alcgr %r9,%r6 |
| 128 | alcgr %r8,zero | ||
| 129 | stg %r9,24(%r2,%r1) | 128 | stg %r9,24(%r2,%r1) |
| 130 | 129 | ||
| 131 | la %r2,32(%r2) // i+=4 | 130 | la %r2,32(%r2) // i+=4 |
| 132 | brct %r10,.Loop4_mul | 131 | brct %r4,.Loop4_mul |
| 133 | 132 | ||
| 134 | lghi %r10,3 | 133 | la %r10,1(%r10) // see if len%4 is zero ... |
| 135 | nr %r4,%r10 // cnt=len%4 | 134 | brct %r10,.Loop1_mul // without touching condition code:-) |
| 136 | jz .Lend_mul | 135 | |
| 136 | .Lend_mul: | ||
| 137 | alcgr %r8,zero // collect carry bit | ||
| 138 | lgr %r2,%r8 | ||
| 139 | lmg %r6,%r10,48(%r15) | ||
| 140 | br %r14 | ||
| 137 | 141 | ||
| 138 | .Loop1_mul: | 142 | .Loop1_mul: |
| 139 | lg %r7,0(%r2,%r3) // ap[i] | 143 | lg %r7,0(%r2,%r3) // ap[i] |
| 140 | mlgr %r6,%r5 // *=w | 144 | mlgr %r6,%r5 // *=w |
| 141 | algr %r7,%r8 // +=carry | 145 | alcgr %r7,%r8 // +=carry |
| 142 | alcgr %r6,zero | ||
| 143 | stg %r7,0(%r2,%r1) // rp[i]= | 146 | stg %r7,0(%r2,%r1) // rp[i]= |
| 144 | 147 | ||
| 145 | lgr %r8,%r6 | 148 | lgr %r8,%r6 |
| 146 | la %r2,8(%r2) // i++ | 149 | la %r2,8(%r2) // i++ |
| 147 | brct %r4,.Loop1_mul | 150 | brct %r10,.Loop1_mul |
| 148 | 151 | ||
| 149 | .Lend_mul: | 152 | j .Lend_mul |
| 150 | lgr %r2,%r8 | ||
| 151 | lmg %r6,%r10,48(%r15) | ||
| 152 | br %r14 | ||
| 153 | .size bn_mul_words,.-bn_mul_words | 153 | .size bn_mul_words,.-bn_mul_words |
| 154 | 154 | ||
| 155 | // void bn_sqr_words(BN_ULONG *r2,BN_ULONG *r2,int r4) | 155 | // void bn_sqr_words(BN_ULONG *r2,BN_ULONG *r2,int r4) |
diff --git a/src/lib/libssl/src/crypto/bn/bn_gf2m.c b/src/lib/libssl/src/crypto/bn/bn_gf2m.c index 527b0fa15b..432a3aa338 100644 --- a/src/lib/libssl/src/crypto/bn/bn_gf2m.c +++ b/src/lib/libssl/src/crypto/bn/bn_gf2m.c | |||
| @@ -545,6 +545,7 @@ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) | |||
| 545 | { | 545 | { |
| 546 | while (!BN_is_odd(u)) | 546 | while (!BN_is_odd(u)) |
| 547 | { | 547 | { |
| 548 | if (BN_is_zero(u)) goto err; | ||
| 548 | if (!BN_rshift1(u, u)) goto err; | 549 | if (!BN_rshift1(u, u)) goto err; |
| 549 | if (BN_is_odd(b)) | 550 | if (BN_is_odd(b)) |
| 550 | { | 551 | { |
diff --git a/src/lib/libssl/src/crypto/bn/bn_nist.c b/src/lib/libssl/src/crypto/bn/bn_nist.c index 2ca5b01391..c6de032696 100644 --- a/src/lib/libssl/src/crypto/bn/bn_nist.c +++ b/src/lib/libssl/src/crypto/bn/bn_nist.c | |||
| @@ -354,7 +354,7 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
| 354 | buf[BN_NIST_192_TOP], | 354 | buf[BN_NIST_192_TOP], |
| 355 | c_d[BN_NIST_192_TOP], | 355 | c_d[BN_NIST_192_TOP], |
| 356 | *res; | 356 | *res; |
| 357 | size_t mask; | 357 | PTR_SIZE_INT mask; |
| 358 | static const BIGNUM _bignum_nist_p_192_sqr = { | 358 | static const BIGNUM _bignum_nist_p_192_sqr = { |
| 359 | (BN_ULONG *)_nist_p_192_sqr, | 359 | (BN_ULONG *)_nist_p_192_sqr, |
| 360 | sizeof(_nist_p_192_sqr)/sizeof(_nist_p_192_sqr[0]), | 360 | sizeof(_nist_p_192_sqr)/sizeof(_nist_p_192_sqr[0]), |
| @@ -405,9 +405,10 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
| 405 | * 'tmp=result-modulus; if (!carry || !borrow) result=tmp;' | 405 | * 'tmp=result-modulus; if (!carry || !borrow) result=tmp;' |
| 406 | * this is what happens below, but without explicit if:-) a. | 406 | * this is what happens below, but without explicit if:-) a. |
| 407 | */ | 407 | */ |
| 408 | mask = 0-(size_t)bn_sub_words(c_d,r_d,_nist_p_192[0],BN_NIST_192_TOP); | 408 | mask = 0-(PTR_SIZE_INT)bn_sub_words(c_d,r_d,_nist_p_192[0],BN_NIST_192_TOP); |
| 409 | mask &= 0-(size_t)carry; | 409 | mask &= 0-(PTR_SIZE_INT)carry; |
| 410 | res = (BN_ULONG *)(((size_t)c_d&~mask) | ((size_t)r_d&mask)); | 410 | res = (BN_ULONG *) |
| 411 | (((PTR_SIZE_INT)c_d&~mask) | ((PTR_SIZE_INT)r_d&mask)); | ||
| 411 | nist_cp_bn(r_d, res, BN_NIST_192_TOP); | 412 | nist_cp_bn(r_d, res, BN_NIST_192_TOP); |
| 412 | r->top = BN_NIST_192_TOP; | 413 | r->top = BN_NIST_192_TOP; |
| 413 | bn_correct_top(r); | 414 | bn_correct_top(r); |
| @@ -438,8 +439,8 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
| 438 | buf[BN_NIST_224_TOP], | 439 | buf[BN_NIST_224_TOP], |
| 439 | c_d[BN_NIST_224_TOP], | 440 | c_d[BN_NIST_224_TOP], |
| 440 | *res; | 441 | *res; |
| 441 | size_t mask; | 442 | PTR_SIZE_INT mask; |
| 442 | union { bn_addsub_f f; size_t p; } u; | 443 | union { bn_addsub_f f; PTR_SIZE_INT p; } u; |
| 443 | static const BIGNUM _bignum_nist_p_224_sqr = { | 444 | static const BIGNUM _bignum_nist_p_224_sqr = { |
| 444 | (BN_ULONG *)_nist_p_224_sqr, | 445 | (BN_ULONG *)_nist_p_224_sqr, |
| 445 | sizeof(_nist_p_224_sqr)/sizeof(_nist_p_224_sqr[0]), | 446 | sizeof(_nist_p_224_sqr)/sizeof(_nist_p_224_sqr[0]), |
| @@ -510,16 +511,18 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
| 510 | * to be compared to the modulus and conditionally | 511 | * to be compared to the modulus and conditionally |
| 511 | * adjusted by *subtracting* the latter. */ | 512 | * adjusted by *subtracting* the latter. */ |
| 512 | carry = (int)bn_add_words(r_d,r_d,_nist_p_224[-carry-1],BN_NIST_224_TOP); | 513 | carry = (int)bn_add_words(r_d,r_d,_nist_p_224[-carry-1],BN_NIST_224_TOP); |
| 513 | mask = 0-(size_t)carry; | 514 | mask = 0-(PTR_SIZE_INT)carry; |
| 514 | u.p = ((size_t)bn_sub_words&mask) | ((size_t)bn_add_words&~mask); | 515 | u.p = ((PTR_SIZE_INT)bn_sub_words&mask) | |
| 516 | ((PTR_SIZE_INT)bn_add_words&~mask); | ||
| 515 | } | 517 | } |
| 516 | else | 518 | else |
| 517 | carry = 1; | 519 | carry = 1; |
| 518 | 520 | ||
| 519 | /* otherwise it's effectively same as in BN_nist_mod_192... */ | 521 | /* otherwise it's effectively same as in BN_nist_mod_192... */ |
| 520 | mask = 0-(size_t)(*u.f)(c_d,r_d,_nist_p_224[0],BN_NIST_224_TOP); | 522 | mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_224[0],BN_NIST_224_TOP); |
| 521 | mask &= 0-(size_t)carry; | 523 | mask &= 0-(PTR_SIZE_INT)carry; |
| 522 | res = (BN_ULONG *)(((size_t)c_d&~mask) | ((size_t)r_d&mask)); | 524 | res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | |
| 525 | ((PTR_SIZE_INT)r_d&mask)); | ||
| 523 | nist_cp_bn(r_d, res, BN_NIST_224_TOP); | 526 | nist_cp_bn(r_d, res, BN_NIST_224_TOP); |
| 524 | r->top = BN_NIST_224_TOP; | 527 | r->top = BN_NIST_224_TOP; |
| 525 | bn_correct_top(r); | 528 | bn_correct_top(r); |
| @@ -549,8 +552,8 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
| 549 | buf[BN_NIST_256_TOP], | 552 | buf[BN_NIST_256_TOP], |
| 550 | c_d[BN_NIST_256_TOP], | 553 | c_d[BN_NIST_256_TOP], |
| 551 | *res; | 554 | *res; |
| 552 | size_t mask; | 555 | PTR_SIZE_INT mask; |
| 553 | union { bn_addsub_f f; size_t p; } u; | 556 | union { bn_addsub_f f; PTR_SIZE_INT p; } u; |
| 554 | static const BIGNUM _bignum_nist_p_256_sqr = { | 557 | static const BIGNUM _bignum_nist_p_256_sqr = { |
| 555 | (BN_ULONG *)_nist_p_256_sqr, | 558 | (BN_ULONG *)_nist_p_256_sqr, |
| 556 | sizeof(_nist_p_256_sqr)/sizeof(_nist_p_256_sqr[0]), | 559 | sizeof(_nist_p_256_sqr)/sizeof(_nist_p_256_sqr[0]), |
| @@ -629,15 +632,17 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
| 629 | else if (carry < 0) | 632 | else if (carry < 0) |
| 630 | { | 633 | { |
| 631 | carry = (int)bn_add_words(r_d,r_d,_nist_p_256[-carry-1],BN_NIST_256_TOP); | 634 | carry = (int)bn_add_words(r_d,r_d,_nist_p_256[-carry-1],BN_NIST_256_TOP); |
| 632 | mask = 0-(size_t)carry; | 635 | mask = 0-(PTR_SIZE_INT)carry; |
| 633 | u.p = ((size_t)bn_sub_words&mask) | ((size_t)bn_add_words&~mask); | 636 | u.p = ((PTR_SIZE_INT)bn_sub_words&mask) | |
| 637 | ((PTR_SIZE_INT)bn_add_words&~mask); | ||
| 634 | } | 638 | } |
| 635 | else | 639 | else |
| 636 | carry = 1; | 640 | carry = 1; |
| 637 | 641 | ||
| 638 | mask = 0-(size_t)(*u.f)(c_d,r_d,_nist_p_256[0],BN_NIST_256_TOP); | 642 | mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_256[0],BN_NIST_256_TOP); |
| 639 | mask &= 0-(size_t)carry; | 643 | mask &= 0-(PTR_SIZE_INT)carry; |
| 640 | res = (BN_ULONG *)(((size_t)c_d&~mask) | ((size_t)r_d&mask)); | 644 | res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | |
| 645 | ((PTR_SIZE_INT)r_d&mask)); | ||
| 641 | nist_cp_bn(r_d, res, BN_NIST_256_TOP); | 646 | nist_cp_bn(r_d, res, BN_NIST_256_TOP); |
| 642 | r->top = BN_NIST_256_TOP; | 647 | r->top = BN_NIST_256_TOP; |
| 643 | bn_correct_top(r); | 648 | bn_correct_top(r); |
| @@ -671,8 +676,8 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
| 671 | buf[BN_NIST_384_TOP], | 676 | buf[BN_NIST_384_TOP], |
| 672 | c_d[BN_NIST_384_TOP], | 677 | c_d[BN_NIST_384_TOP], |
| 673 | *res; | 678 | *res; |
| 674 | size_t mask; | 679 | PTR_SIZE_INT mask; |
| 675 | union { bn_addsub_f f; size_t p; } u; | 680 | union { bn_addsub_f f; PTR_SIZE_INT p; } u; |
| 676 | static const BIGNUM _bignum_nist_p_384_sqr = { | 681 | static const BIGNUM _bignum_nist_p_384_sqr = { |
| 677 | (BN_ULONG *)_nist_p_384_sqr, | 682 | (BN_ULONG *)_nist_p_384_sqr, |
| 678 | sizeof(_nist_p_384_sqr)/sizeof(_nist_p_384_sqr[0]), | 683 | sizeof(_nist_p_384_sqr)/sizeof(_nist_p_384_sqr[0]), |
| @@ -754,15 +759,17 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
| 754 | else if (carry < 0) | 759 | else if (carry < 0) |
| 755 | { | 760 | { |
| 756 | carry = (int)bn_add_words(r_d,r_d,_nist_p_384[-carry-1],BN_NIST_384_TOP); | 761 | carry = (int)bn_add_words(r_d,r_d,_nist_p_384[-carry-1],BN_NIST_384_TOP); |
| 757 | mask = 0-(size_t)carry; | 762 | mask = 0-(PTR_SIZE_INT)carry; |
| 758 | u.p = ((size_t)bn_sub_words&mask) | ((size_t)bn_add_words&~mask); | 763 | u.p = ((PTR_SIZE_INT)bn_sub_words&mask) | |
| 764 | ((PTR_SIZE_INT)bn_add_words&~mask); | ||
| 759 | } | 765 | } |
| 760 | else | 766 | else |
| 761 | carry = 1; | 767 | carry = 1; |
| 762 | 768 | ||
| 763 | mask = 0-(size_t)(*u.f)(c_d,r_d,_nist_p_384[0],BN_NIST_384_TOP); | 769 | mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_384[0],BN_NIST_384_TOP); |
| 764 | mask &= 0-(size_t)carry; | 770 | mask &= 0-(PTR_SIZE_INT)carry; |
| 765 | res = (BN_ULONG *)(((size_t)c_d&~mask) | ((size_t)r_d&mask)); | 771 | res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | |
| 772 | ((PTR_SIZE_INT)r_d&mask)); | ||
| 766 | nist_cp_bn(r_d, res, BN_NIST_384_TOP); | 773 | nist_cp_bn(r_d, res, BN_NIST_384_TOP); |
| 767 | r->top = BN_NIST_384_TOP; | 774 | r->top = BN_NIST_384_TOP; |
| 768 | bn_correct_top(r); | 775 | bn_correct_top(r); |
| @@ -781,7 +788,7 @@ int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
| 781 | BN_ULONG *r_d, *a_d = a->d, | 788 | BN_ULONG *r_d, *a_d = a->d, |
| 782 | t_d[BN_NIST_521_TOP], | 789 | t_d[BN_NIST_521_TOP], |
| 783 | val,tmp,*res; | 790 | val,tmp,*res; |
| 784 | size_t mask; | 791 | PTR_SIZE_INT mask; |
| 785 | static const BIGNUM _bignum_nist_p_521_sqr = { | 792 | static const BIGNUM _bignum_nist_p_521_sqr = { |
| 786 | (BN_ULONG *)_nist_p_521_sqr, | 793 | (BN_ULONG *)_nist_p_521_sqr, |
| 787 | sizeof(_nist_p_521_sqr)/sizeof(_nist_p_521_sqr[0]), | 794 | sizeof(_nist_p_521_sqr)/sizeof(_nist_p_521_sqr[0]), |
| @@ -826,8 +833,9 @@ int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
| 826 | r_d[i] &= BN_NIST_521_TOP_MASK; | 833 | r_d[i] &= BN_NIST_521_TOP_MASK; |
| 827 | 834 | ||
| 828 | bn_add_words(r_d,r_d,t_d,BN_NIST_521_TOP); | 835 | bn_add_words(r_d,r_d,t_d,BN_NIST_521_TOP); |
| 829 | mask = 0-(size_t)bn_sub_words(t_d,r_d,_nist_p_521,BN_NIST_521_TOP); | 836 | mask = 0-(PTR_SIZE_INT)bn_sub_words(t_d,r_d,_nist_p_521,BN_NIST_521_TOP); |
| 830 | res = (BN_ULONG *)(((size_t)t_d&~mask) | ((size_t)r_d&mask)); | 837 | res = (BN_ULONG *)(((PTR_SIZE_INT)t_d&~mask) | |
| 838 | ((PTR_SIZE_INT)r_d&mask)); | ||
| 831 | nist_cp_bn(r_d,res,BN_NIST_521_TOP); | 839 | nist_cp_bn(r_d,res,BN_NIST_521_TOP); |
| 832 | r->top = BN_NIST_521_TOP; | 840 | r->top = BN_NIST_521_TOP; |
| 833 | bn_correct_top(r); | 841 | bn_correct_top(r); |
diff --git a/src/lib/libssl/src/crypto/dsa/dsa_pmeth.c b/src/lib/libssl/src/crypto/dsa/dsa_pmeth.c index 4ce91e20c6..e2df54fec6 100644 --- a/src/lib/libssl/src/crypto/dsa/dsa_pmeth.c +++ b/src/lib/libssl/src/crypto/dsa/dsa_pmeth.c | |||
| @@ -187,6 +187,7 @@ static int pkey_dsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) | |||
| 187 | case EVP_PKEY_CTRL_MD: | 187 | case EVP_PKEY_CTRL_MD: |
| 188 | if (EVP_MD_type((const EVP_MD *)p2) != NID_sha1 && | 188 | if (EVP_MD_type((const EVP_MD *)p2) != NID_sha1 && |
| 189 | EVP_MD_type((const EVP_MD *)p2) != NID_dsa && | 189 | EVP_MD_type((const EVP_MD *)p2) != NID_dsa && |
| 190 | EVP_MD_type((const EVP_MD *)p2) != NID_dsaWithSHA && | ||
| 190 | EVP_MD_type((const EVP_MD *)p2) != NID_sha224 && | 191 | EVP_MD_type((const EVP_MD *)p2) != NID_sha224 && |
| 191 | EVP_MD_type((const EVP_MD *)p2) != NID_sha256) | 192 | EVP_MD_type((const EVP_MD *)p2) != NID_sha256) |
| 192 | { | 193 | { |
diff --git a/src/lib/libssl/src/crypto/ec/ec2_mult.c b/src/lib/libssl/src/crypto/ec/ec2_mult.c index ab631a50a2..e12b9b284a 100644 --- a/src/lib/libssl/src/crypto/ec/ec2_mult.c +++ b/src/lib/libssl/src/crypto/ec/ec2_mult.c | |||
| @@ -319,6 +319,7 @@ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar, | |||
| 319 | int ret = 0; | 319 | int ret = 0; |
| 320 | size_t i; | 320 | size_t i; |
| 321 | EC_POINT *p=NULL; | 321 | EC_POINT *p=NULL; |
| 322 | EC_POINT *acc = NULL; | ||
| 322 | 323 | ||
| 323 | if (ctx == NULL) | 324 | if (ctx == NULL) |
| 324 | { | 325 | { |
| @@ -338,15 +339,16 @@ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar, | |||
| 338 | } | 339 | } |
| 339 | 340 | ||
| 340 | if ((p = EC_POINT_new(group)) == NULL) goto err; | 341 | if ((p = EC_POINT_new(group)) == NULL) goto err; |
| 342 | if ((acc = EC_POINT_new(group)) == NULL) goto err; | ||
| 341 | 343 | ||
| 342 | if (!EC_POINT_set_to_infinity(group, r)) goto err; | 344 | if (!EC_POINT_set_to_infinity(group, acc)) goto err; |
| 343 | 345 | ||
| 344 | if (scalar) | 346 | if (scalar) |
| 345 | { | 347 | { |
| 346 | if (!ec_GF2m_montgomery_point_multiply(group, p, scalar, group->generator, ctx)) goto err; | 348 | if (!ec_GF2m_montgomery_point_multiply(group, p, scalar, group->generator, ctx)) goto err; |
| 347 | if (BN_is_negative(scalar)) | 349 | if (BN_is_negative(scalar)) |
| 348 | if (!group->meth->invert(group, p, ctx)) goto err; | 350 | if (!group->meth->invert(group, p, ctx)) goto err; |
| 349 | if (!group->meth->add(group, r, r, p, ctx)) goto err; | 351 | if (!group->meth->add(group, acc, acc, p, ctx)) goto err; |
| 350 | } | 352 | } |
| 351 | 353 | ||
| 352 | for (i = 0; i < num; i++) | 354 | for (i = 0; i < num; i++) |
| @@ -354,13 +356,16 @@ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar, | |||
| 354 | if (!ec_GF2m_montgomery_point_multiply(group, p, scalars[i], points[i], ctx)) goto err; | 356 | if (!ec_GF2m_montgomery_point_multiply(group, p, scalars[i], points[i], ctx)) goto err; |
| 355 | if (BN_is_negative(scalars[i])) | 357 | if (BN_is_negative(scalars[i])) |
| 356 | if (!group->meth->invert(group, p, ctx)) goto err; | 358 | if (!group->meth->invert(group, p, ctx)) goto err; |
| 357 | if (!group->meth->add(group, r, r, p, ctx)) goto err; | 359 | if (!group->meth->add(group, acc, acc, p, ctx)) goto err; |
| 358 | } | 360 | } |
| 359 | 361 | ||
| 362 | if (!EC_POINT_copy(r, acc)) goto err; | ||
| 363 | |||
| 360 | ret = 1; | 364 | ret = 1; |
| 361 | 365 | ||
| 362 | err: | 366 | err: |
| 363 | if (p) EC_POINT_free(p); | 367 | if (p) EC_POINT_free(p); |
| 368 | if (acc) EC_POINT_free(acc); | ||
| 364 | if (new_ctx != NULL) | 369 | if (new_ctx != NULL) |
| 365 | BN_CTX_free(new_ctx); | 370 | BN_CTX_free(new_ctx); |
| 366 | return ret; | 371 | return ret; |
diff --git a/src/lib/libssl/src/crypto/ec/ec2_smpl.c b/src/lib/libssl/src/crypto/ec/ec2_smpl.c index cf357b462a..af94458ca7 100644 --- a/src/lib/libssl/src/crypto/ec/ec2_smpl.c +++ b/src/lib/libssl/src/crypto/ec/ec2_smpl.c | |||
| @@ -937,6 +937,9 @@ int ec_GF2m_simple_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT | |||
| 937 | { | 937 | { |
| 938 | return EC_POINT_is_at_infinity(group, b) ? 0 : 1; | 938 | return EC_POINT_is_at_infinity(group, b) ? 0 : 1; |
| 939 | } | 939 | } |
| 940 | |||
| 941 | if (EC_POINT_is_at_infinity(group, b)) | ||
| 942 | return 1; | ||
| 940 | 943 | ||
| 941 | if (a->Z_is_one && b->Z_is_one) | 944 | if (a->Z_is_one && b->Z_is_one) |
| 942 | { | 945 | { |
diff --git a/src/lib/libssl/src/crypto/ec/ec_key.c b/src/lib/libssl/src/crypto/ec/ec_key.c index 12fb0e6d6d..522802c07a 100644 --- a/src/lib/libssl/src/crypto/ec/ec_key.c +++ b/src/lib/libssl/src/crypto/ec/ec_key.c | |||
| @@ -304,7 +304,13 @@ int EC_KEY_check_key(const EC_KEY *eckey) | |||
| 304 | ECerr(EC_F_EC_KEY_CHECK_KEY, ERR_R_PASSED_NULL_PARAMETER); | 304 | ECerr(EC_F_EC_KEY_CHECK_KEY, ERR_R_PASSED_NULL_PARAMETER); |
| 305 | return 0; | 305 | return 0; |
| 306 | } | 306 | } |
| 307 | 307 | ||
| 308 | if (EC_POINT_is_at_infinity(eckey->group, eckey->pub_key)) | ||
| 309 | { | ||
| 310 | ECerr(EC_F_EC_KEY_CHECK_KEY, EC_R_POINT_AT_INFINITY); | ||
| 311 | goto err; | ||
| 312 | } | ||
| 313 | |||
| 308 | if ((ctx = BN_CTX_new()) == NULL) | 314 | if ((ctx = BN_CTX_new()) == NULL) |
| 309 | goto err; | 315 | goto err; |
| 310 | if ((point = EC_POINT_new(eckey->group)) == NULL) | 316 | if ((point = EC_POINT_new(eckey->group)) == NULL) |
diff --git a/src/lib/libssl/src/crypto/ecdh/ech_lib.c b/src/lib/libssl/src/crypto/ecdh/ech_lib.c index e89b1d4772..4d8ea03d3d 100644 --- a/src/lib/libssl/src/crypto/ecdh/ech_lib.c +++ b/src/lib/libssl/src/crypto/ecdh/ech_lib.c | |||
| @@ -96,7 +96,6 @@ const ECDH_METHOD *ECDH_get_default_method(void) | |||
| 96 | 96 | ||
| 97 | int ECDH_set_method(EC_KEY *eckey, const ECDH_METHOD *meth) | 97 | int ECDH_set_method(EC_KEY *eckey, const ECDH_METHOD *meth) |
| 98 | { | 98 | { |
| 99 | const ECDH_METHOD *mtmp; | ||
| 100 | ECDH_DATA *ecdh; | 99 | ECDH_DATA *ecdh; |
| 101 | 100 | ||
| 102 | ecdh = ecdh_check(eckey); | 101 | ecdh = ecdh_check(eckey); |
| @@ -104,8 +103,8 @@ int ECDH_set_method(EC_KEY *eckey, const ECDH_METHOD *meth) | |||
| 104 | if (ecdh == NULL) | 103 | if (ecdh == NULL) |
| 105 | return 0; | 104 | return 0; |
| 106 | 105 | ||
| 107 | mtmp = ecdh->meth; | ||
| 108 | #if 0 | 106 | #if 0 |
| 107 | mtmp = ecdh->meth; | ||
| 109 | if (mtmp->finish) | 108 | if (mtmp->finish) |
| 110 | mtmp->finish(eckey); | 109 | mtmp->finish(eckey); |
| 111 | #endif | 110 | #endif |
diff --git a/src/lib/libssl/src/crypto/ecdsa/ecdsatest.c b/src/lib/libssl/src/crypto/ecdsa/ecdsatest.c index aa4e1481a8..26a4a9ee7c 100644 --- a/src/lib/libssl/src/crypto/ecdsa/ecdsatest.c +++ b/src/lib/libssl/src/crypto/ecdsa/ecdsatest.c | |||
| @@ -168,10 +168,9 @@ int fbytes(unsigned char *buf, int num) | |||
| 168 | return 0; | 168 | return 0; |
| 169 | } | 169 | } |
| 170 | fbytes_counter ++; | 170 | fbytes_counter ++; |
| 171 | ret = BN_bn2bin(tmp, buf); | 171 | if (num != BN_num_bytes(tmp) || !BN_bn2bin(tmp, buf)) |
| 172 | if (ret == 0 || ret != num) | ||
| 173 | ret = 0; | 172 | ret = 0; |
| 174 | else | 173 | else |
| 175 | ret = 1; | 174 | ret = 1; |
| 176 | if (tmp) | 175 | if (tmp) |
| 177 | BN_free(tmp); | 176 | BN_free(tmp); |
diff --git a/src/lib/libssl/src/crypto/ecdsa/ecs_lib.c b/src/lib/libssl/src/crypto/ecdsa/ecs_lib.c index 85e8a3a7ed..2ebae3aa27 100644 --- a/src/lib/libssl/src/crypto/ecdsa/ecs_lib.c +++ b/src/lib/libssl/src/crypto/ecdsa/ecs_lib.c | |||
| @@ -83,7 +83,6 @@ const ECDSA_METHOD *ECDSA_get_default_method(void) | |||
| 83 | 83 | ||
| 84 | int ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth) | 84 | int ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth) |
| 85 | { | 85 | { |
| 86 | const ECDSA_METHOD *mtmp; | ||
| 87 | ECDSA_DATA *ecdsa; | 86 | ECDSA_DATA *ecdsa; |
| 88 | 87 | ||
| 89 | ecdsa = ecdsa_check(eckey); | 88 | ecdsa = ecdsa_check(eckey); |
| @@ -91,7 +90,6 @@ int ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth) | |||
| 91 | if (ecdsa == NULL) | 90 | if (ecdsa == NULL) |
| 92 | return 0; | 91 | return 0; |
| 93 | 92 | ||
| 94 | mtmp = ecdsa->meth; | ||
| 95 | #ifndef OPENSSL_NO_ENGINE | 93 | #ifndef OPENSSL_NO_ENGINE |
| 96 | if (ecdsa->engine) | 94 | if (ecdsa->engine) |
| 97 | { | 95 | { |
diff --git a/src/lib/libssl/src/crypto/ecdsa/ecs_ossl.c b/src/lib/libssl/src/crypto/ecdsa/ecs_ossl.c index 551cf5068f..1bbf328de5 100644 --- a/src/lib/libssl/src/crypto/ecdsa/ecs_ossl.c +++ b/src/lib/libssl/src/crypto/ecdsa/ecs_ossl.c | |||
| @@ -144,6 +144,14 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp, | |||
| 144 | } | 144 | } |
| 145 | while (BN_is_zero(k)); | 145 | while (BN_is_zero(k)); |
| 146 | 146 | ||
| 147 | /* We do not want timing information to leak the length of k, | ||
| 148 | * so we compute G*k using an equivalent scalar of fixed | ||
| 149 | * bit-length. */ | ||
| 150 | |||
| 151 | if (!BN_add(k, k, order)) goto err; | ||
| 152 | if (BN_num_bits(k) <= BN_num_bits(order)) | ||
| 153 | if (!BN_add(k, k, order)) goto err; | ||
| 154 | |||
| 147 | /* compute r the x-coordinate of generator * k */ | 155 | /* compute r the x-coordinate of generator * k */ |
| 148 | if (!EC_POINT_mul(group, tmp_point, k, NULL, NULL, ctx)) | 156 | if (!EC_POINT_mul(group, tmp_point, k, NULL, NULL, ctx)) |
| 149 | { | 157 | { |
diff --git a/src/lib/libssl/src/crypto/evp/m_sigver.c b/src/lib/libssl/src/crypto/evp/m_sigver.c index f0b7f95059..7e2731f4a4 100644 --- a/src/lib/libssl/src/crypto/evp/m_sigver.c +++ b/src/lib/libssl/src/crypto/evp/m_sigver.c | |||
| @@ -137,7 +137,7 @@ int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen) | |||
| 137 | sctx = 0; | 137 | sctx = 0; |
| 138 | if (sigret) | 138 | if (sigret) |
| 139 | { | 139 | { |
| 140 | MS_STATIC EVP_MD_CTX tmp_ctx; | 140 | EVP_MD_CTX tmp_ctx; |
| 141 | unsigned char md[EVP_MAX_MD_SIZE]; | 141 | unsigned char md[EVP_MAX_MD_SIZE]; |
| 142 | unsigned int mdlen; | 142 | unsigned int mdlen; |
| 143 | EVP_MD_CTX_init(&tmp_ctx); | 143 | EVP_MD_CTX_init(&tmp_ctx); |
| @@ -173,7 +173,7 @@ int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen) | |||
| 173 | 173 | ||
| 174 | int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, unsigned char *sig, size_t siglen) | 174 | int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, unsigned char *sig, size_t siglen) |
| 175 | { | 175 | { |
| 176 | MS_STATIC EVP_MD_CTX tmp_ctx; | 176 | EVP_MD_CTX tmp_ctx; |
| 177 | unsigned char md[EVP_MAX_MD_SIZE]; | 177 | unsigned char md[EVP_MAX_MD_SIZE]; |
| 178 | int r; | 178 | int r; |
| 179 | unsigned int mdlen; | 179 | unsigned int mdlen; |
diff --git a/src/lib/libssl/src/crypto/evp/pmeth_lib.c b/src/lib/libssl/src/crypto/evp/pmeth_lib.c index b2d8de3a8d..5481d4b8a5 100644 --- a/src/lib/libssl/src/crypto/evp/pmeth_lib.c +++ b/src/lib/libssl/src/crypto/evp/pmeth_lib.c | |||
| @@ -134,6 +134,8 @@ static EVP_PKEY_CTX *int_ctx_new(EVP_PKEY *pkey, ENGINE *e, int id) | |||
| 134 | id = pkey->ameth->pkey_id; | 134 | id = pkey->ameth->pkey_id; |
| 135 | } | 135 | } |
| 136 | #ifndef OPENSSL_NO_ENGINE | 136 | #ifndef OPENSSL_NO_ENGINE |
| 137 | if (pkey && pkey->engine) | ||
| 138 | e = pkey->engine; | ||
| 137 | /* Try to find an ENGINE which implements this method */ | 139 | /* Try to find an ENGINE which implements this method */ |
| 138 | if (e) | 140 | if (e) |
| 139 | { | 141 | { |
diff --git a/src/lib/libssl/src/crypto/hmac/hm_pmeth.c b/src/lib/libssl/src/crypto/hmac/hm_pmeth.c index 985921ca1a..71e8567a14 100644 --- a/src/lib/libssl/src/crypto/hmac/hm_pmeth.c +++ b/src/lib/libssl/src/crypto/hmac/hm_pmeth.c | |||
| @@ -147,6 +147,8 @@ static int int_update(EVP_MD_CTX *ctx,const void *data,size_t count) | |||
| 147 | 147 | ||
| 148 | static int hmac_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx) | 148 | static int hmac_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx) |
| 149 | { | 149 | { |
| 150 | HMAC_PKEY_CTX *hctx = ctx->data; | ||
| 151 | HMAC_CTX_set_flags(&hctx->ctx, mctx->flags & ~EVP_MD_CTX_FLAG_NO_INIT); | ||
| 150 | EVP_MD_CTX_set_flags(mctx, EVP_MD_CTX_FLAG_NO_INIT); | 152 | EVP_MD_CTX_set_flags(mctx, EVP_MD_CTX_FLAG_NO_INIT); |
| 151 | mctx->update = int_update; | 153 | mctx->update = int_update; |
| 152 | return 1; | 154 | return 1; |
diff --git a/src/lib/libssl/src/crypto/jpake/jpake.c b/src/lib/libssl/src/crypto/jpake/jpake.c index 086d9f47e0..8e4b633ccc 100644 --- a/src/lib/libssl/src/crypto/jpake/jpake.c +++ b/src/lib/libssl/src/crypto/jpake/jpake.c | |||
| @@ -282,8 +282,37 @@ int JPAKE_STEP1_generate(JPAKE_STEP1 *send, JPAKE_CTX *ctx) | |||
| 282 | return 1; | 282 | return 1; |
| 283 | } | 283 | } |
| 284 | 284 | ||
| 285 | /* g^x is a legal value */ | ||
| 286 | static int is_legal(const BIGNUM *gx, const JPAKE_CTX *ctx) | ||
| 287 | { | ||
| 288 | BIGNUM *t; | ||
| 289 | int res; | ||
| 290 | |||
| 291 | if(BN_is_negative(gx) || BN_is_zero(gx) || BN_cmp(gx, ctx->p.p) >= 0) | ||
| 292 | return 0; | ||
| 293 | |||
| 294 | t = BN_new(); | ||
| 295 | BN_mod_exp(t, gx, ctx->p.q, ctx->p.p, ctx->ctx); | ||
| 296 | res = BN_is_one(t); | ||
| 297 | BN_free(t); | ||
| 298 | |||
| 299 | return res; | ||
| 300 | } | ||
| 301 | |||
| 285 | int JPAKE_STEP1_process(JPAKE_CTX *ctx, const JPAKE_STEP1 *received) | 302 | int JPAKE_STEP1_process(JPAKE_CTX *ctx, const JPAKE_STEP1 *received) |
| 286 | { | 303 | { |
| 304 | if(!is_legal(received->p1.gx, ctx)) | ||
| 305 | { | ||
| 306 | JPAKEerr(JPAKE_F_JPAKE_STEP1_PROCESS, JPAKE_R_G_TO_THE_X3_IS_NOT_LEGAL); | ||
| 307 | return 0; | ||
| 308 | } | ||
| 309 | |||
| 310 | if(!is_legal(received->p2.gx, ctx)) | ||
| 311 | { | ||
| 312 | JPAKEerr(JPAKE_F_JPAKE_STEP1_PROCESS, JPAKE_R_G_TO_THE_X4_IS_NOT_LEGAL); | ||
| 313 | return 0; | ||
| 314 | } | ||
| 315 | |||
| 287 | /* verify their ZKP(xc) */ | 316 | /* verify their ZKP(xc) */ |
| 288 | if(!verify_zkp(&received->p1, ctx->p.g, ctx)) | 317 | if(!verify_zkp(&received->p1, ctx->p.g, ctx)) |
| 289 | { | 318 | { |
diff --git a/src/lib/libssl/src/crypto/jpake/jpake.h b/src/lib/libssl/src/crypto/jpake/jpake.h index 693ea188cb..fd143b4d9b 100644 --- a/src/lib/libssl/src/crypto/jpake/jpake.h +++ b/src/lib/libssl/src/crypto/jpake/jpake.h | |||
| @@ -115,6 +115,8 @@ void ERR_load_JPAKE_strings(void); | |||
| 115 | #define JPAKE_F_VERIFY_ZKP 100 | 115 | #define JPAKE_F_VERIFY_ZKP 100 |
| 116 | 116 | ||
| 117 | /* Reason codes. */ | 117 | /* Reason codes. */ |
| 118 | #define JPAKE_R_G_TO_THE_X3_IS_NOT_LEGAL 108 | ||
| 119 | #define JPAKE_R_G_TO_THE_X4_IS_NOT_LEGAL 109 | ||
| 118 | #define JPAKE_R_G_TO_THE_X4_IS_ONE 105 | 120 | #define JPAKE_R_G_TO_THE_X4_IS_ONE 105 |
| 119 | #define JPAKE_R_HASH_OF_HASH_OF_KEY_MISMATCH 106 | 121 | #define JPAKE_R_HASH_OF_HASH_OF_KEY_MISMATCH 106 |
| 120 | #define JPAKE_R_HASH_OF_KEY_MISMATCH 107 | 122 | #define JPAKE_R_HASH_OF_KEY_MISMATCH 107 |
diff --git a/src/lib/libssl/src/crypto/jpake/jpake_err.c b/src/lib/libssl/src/crypto/jpake/jpake_err.c index 1b95067967..a9a9dee75c 100644 --- a/src/lib/libssl/src/crypto/jpake/jpake_err.c +++ b/src/lib/libssl/src/crypto/jpake/jpake_err.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* crypto/jpake/jpake_err.c */ | 1 | /* crypto/jpake/jpake_err.c */ |
| 2 | /* ==================================================================== | 2 | /* ==================================================================== |
| 3 | * Copyright (c) 1999-2008 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1999-2010 The OpenSSL Project. All rights reserved. |
| 4 | * | 4 | * |
| 5 | * Redistribution and use in source and binary forms, with or without | 5 | * Redistribution and use in source and binary forms, with or without |
| 6 | * modification, are permitted provided that the following conditions | 6 | * modification, are permitted provided that the following conditions |
| @@ -80,6 +80,8 @@ static ERR_STRING_DATA JPAKE_str_functs[]= | |||
| 80 | 80 | ||
| 81 | static ERR_STRING_DATA JPAKE_str_reasons[]= | 81 | static ERR_STRING_DATA JPAKE_str_reasons[]= |
| 82 | { | 82 | { |
| 83 | {ERR_REASON(JPAKE_R_G_TO_THE_X3_IS_NOT_LEGAL),"g to the x3 is not legal"}, | ||
| 84 | {ERR_REASON(JPAKE_R_G_TO_THE_X4_IS_NOT_LEGAL),"g to the x4 is not legal"}, | ||
| 83 | {ERR_REASON(JPAKE_R_G_TO_THE_X4_IS_ONE) ,"g to the x4 is one"}, | 85 | {ERR_REASON(JPAKE_R_G_TO_THE_X4_IS_ONE) ,"g to the x4 is one"}, |
| 84 | {ERR_REASON(JPAKE_R_HASH_OF_HASH_OF_KEY_MISMATCH),"hash of hash of key mismatch"}, | 86 | {ERR_REASON(JPAKE_R_HASH_OF_HASH_OF_KEY_MISMATCH),"hash of hash of key mismatch"}, |
| 85 | {ERR_REASON(JPAKE_R_HASH_OF_KEY_MISMATCH),"hash of key mismatch"}, | 87 | {ERR_REASON(JPAKE_R_HASH_OF_KEY_MISMATCH),"hash of key mismatch"}, |
diff --git a/src/lib/libssl/src/crypto/pem/pvkfmt.c b/src/lib/libssl/src/crypto/pem/pvkfmt.c index d998a67fa5..5f130c4528 100644 --- a/src/lib/libssl/src/crypto/pem/pvkfmt.c +++ b/src/lib/libssl/src/crypto/pem/pvkfmt.c | |||
| @@ -662,7 +662,7 @@ static int do_PVK_header(const unsigned char **in, unsigned int length, | |||
| 662 | 662 | ||
| 663 | { | 663 | { |
| 664 | const unsigned char *p = *in; | 664 | const unsigned char *p = *in; |
| 665 | unsigned int pvk_magic, keytype, is_encrypted; | 665 | unsigned int pvk_magic, is_encrypted; |
| 666 | if (skip_magic) | 666 | if (skip_magic) |
| 667 | { | 667 | { |
| 668 | if (length < 20) | 668 | if (length < 20) |
| @@ -689,7 +689,7 @@ static int do_PVK_header(const unsigned char **in, unsigned int length, | |||
| 689 | } | 689 | } |
| 690 | /* Skip reserved */ | 690 | /* Skip reserved */ |
| 691 | p += 4; | 691 | p += 4; |
| 692 | keytype = read_ledword(&p); | 692 | /*keytype = */read_ledword(&p); |
| 693 | is_encrypted = read_ledword(&p); | 693 | is_encrypted = read_ledword(&p); |
| 694 | *psaltlen = read_ledword(&p); | 694 | *psaltlen = read_ledword(&p); |
| 695 | *pkeylen = read_ledword(&p); | 695 | *pkeylen = read_ledword(&p); |
| @@ -839,7 +839,7 @@ EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u) | |||
| 839 | static int i2b_PVK(unsigned char **out, EVP_PKEY*pk, int enclevel, | 839 | static int i2b_PVK(unsigned char **out, EVP_PKEY*pk, int enclevel, |
| 840 | pem_password_cb *cb, void *u) | 840 | pem_password_cb *cb, void *u) |
| 841 | { | 841 | { |
| 842 | int outlen = 24, noinc, pklen; | 842 | int outlen = 24, pklen; |
| 843 | unsigned char *p, *salt = NULL; | 843 | unsigned char *p, *salt = NULL; |
| 844 | if (enclevel) | 844 | if (enclevel) |
| 845 | outlen += PVK_SALTLEN; | 845 | outlen += PVK_SALTLEN; |
| @@ -850,10 +850,7 @@ static int i2b_PVK(unsigned char **out, EVP_PKEY*pk, int enclevel, | |||
| 850 | if (!out) | 850 | if (!out) |
| 851 | return outlen; | 851 | return outlen; |
| 852 | if (*out) | 852 | if (*out) |
| 853 | { | ||
| 854 | p = *out; | 853 | p = *out; |
| 855 | noinc = 0; | ||
| 856 | } | ||
| 857 | else | 854 | else |
| 858 | { | 855 | { |
| 859 | p = OPENSSL_malloc(outlen); | 856 | p = OPENSSL_malloc(outlen); |
| @@ -863,7 +860,6 @@ static int i2b_PVK(unsigned char **out, EVP_PKEY*pk, int enclevel, | |||
| 863 | return -1; | 860 | return -1; |
| 864 | } | 861 | } |
| 865 | *out = p; | 862 | *out = p; |
| 866 | noinc = 1; | ||
| 867 | } | 863 | } |
| 868 | 864 | ||
| 869 | write_ledword(&p, MS_PVKMAGIC); | 865 | write_ledword(&p, MS_PVKMAGIC); |
diff --git a/src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl b/src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl index 354673acc1..e47116b74b 100755 --- a/src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl +++ b/src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl | |||
| @@ -167,7 +167,7 @@ my %globals; | |||
| 167 | } elsif ($self->{op} =~ /^(pop|push)f/) { | 167 | } elsif ($self->{op} =~ /^(pop|push)f/) { |
| 168 | $self->{op} .= $self->{sz}; | 168 | $self->{op} .= $self->{sz}; |
| 169 | } elsif ($self->{op} eq "call" && $current_segment eq ".CRT\$XCU") { | 169 | } elsif ($self->{op} eq "call" && $current_segment eq ".CRT\$XCU") { |
| 170 | $self->{op} = "ALIGN\t8\n\tDQ"; | 170 | $self->{op} = "\tDQ"; |
| 171 | } | 171 | } |
| 172 | $self->{op}; | 172 | $self->{op}; |
| 173 | } | 173 | } |
| @@ -545,6 +545,8 @@ my %globals; | |||
| 545 | if ($line=~/\.([px])data/) { | 545 | if ($line=~/\.([px])data/) { |
| 546 | $v.=" rdata align="; | 546 | $v.=" rdata align="; |
| 547 | $v.=$1 eq "p"? 4 : 8; | 547 | $v.=$1 eq "p"? 4 : 8; |
| 548 | } elsif ($line=~/\.CRT\$/i) { | ||
| 549 | $v.=" rdata align=8"; | ||
| 548 | } | 550 | } |
| 549 | } else { | 551 | } else { |
| 550 | $v="$current_segment\tENDS\n" if ($current_segment); | 552 | $v="$current_segment\tENDS\n" if ($current_segment); |
| @@ -552,6 +554,8 @@ my %globals; | |||
| 552 | if ($line=~/\.([px])data/) { | 554 | if ($line=~/\.([px])data/) { |
| 553 | $v.=" READONLY"; | 555 | $v.=" READONLY"; |
| 554 | $v.=" ALIGN(".($1 eq "p" ? 4 : 8).")" if ($masm>=$masmref); | 556 | $v.=" ALIGN(".($1 eq "p" ? 4 : 8).")" if ($masm>=$masmref); |
| 557 | } elsif ($line=~/\.CRT\$/i) { | ||
| 558 | $v.=" READONLY DWORD"; | ||
| 555 | } | 559 | } |
| 556 | } | 560 | } |
| 557 | $current_segment = $line; | 561 | $current_segment = $line; |
diff --git a/src/lib/libssl/src/crypto/pqueue/pqueue.c b/src/lib/libssl/src/crypto/pqueue/pqueue.c index 99a6fb874d..eab13a1250 100644 --- a/src/lib/libssl/src/crypto/pqueue/pqueue.c +++ b/src/lib/libssl/src/crypto/pqueue/pqueue.c | |||
| @@ -167,14 +167,13 @@ pqueue_pop(pqueue_s *pq) | |||
| 167 | pitem * | 167 | pitem * |
| 168 | pqueue_find(pqueue_s *pq, unsigned char *prio64be) | 168 | pqueue_find(pqueue_s *pq, unsigned char *prio64be) |
| 169 | { | 169 | { |
| 170 | pitem *next, *prev = NULL; | 170 | pitem *next; |
| 171 | pitem *found = NULL; | 171 | pitem *found = NULL; |
| 172 | 172 | ||
| 173 | if ( pq->items == NULL) | 173 | if ( pq->items == NULL) |
| 174 | return NULL; | 174 | return NULL; |
| 175 | 175 | ||
| 176 | for ( next = pq->items; next->next != NULL; | 176 | for ( next = pq->items; next->next != NULL; next = next->next) |
| 177 | prev = next, next = next->next) | ||
| 178 | { | 177 | { |
| 179 | if ( memcmp(next->priority, prio64be,8) == 0) | 178 | if ( memcmp(next->priority, prio64be,8) == 0) |
| 180 | { | 179 | { |
diff --git a/src/lib/libssl/src/crypto/rand/rand_nw.c b/src/lib/libssl/src/crypto/rand/rand_nw.c index f177ffbe82..8d5b8d2e32 100644 --- a/src/lib/libssl/src/crypto/rand/rand_nw.c +++ b/src/lib/libssl/src/crypto/rand/rand_nw.c | |||
| @@ -160,8 +160,8 @@ int RAND_poll(void) | |||
| 160 | rdtsc | 160 | rdtsc |
| 161 | mov tsc, eax | 161 | mov tsc, eax |
| 162 | } | 162 | } |
| 163 | #else | 163 | #elif defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) |
| 164 | asm volatile("rdtsc":"=A" (tsc)); | 164 | asm volatile("rdtsc":"=a"(tsc)::"edx"); |
| 165 | #endif | 165 | #endif |
| 166 | 166 | ||
| 167 | RAND_add(&tsc, sizeof(tsc), 1); | 167 | RAND_add(&tsc, sizeof(tsc), 1); |
diff --git a/src/lib/libssl/src/crypto/sha/asm/sha1-armv4-large.pl b/src/lib/libssl/src/crypto/sha/asm/sha1-armv4-large.pl index 88861af641..6e65fe3e01 100644 --- a/src/lib/libssl/src/crypto/sha/asm/sha1-armv4-large.pl +++ b/src/lib/libssl/src/crypto/sha/asm/sha1-armv4-large.pl | |||
| @@ -37,9 +37,18 @@ | |||
| 37 | # modes are limited. As result it takes more instructions to do | 37 | # modes are limited. As result it takes more instructions to do |
| 38 | # the same job in Thumb, therefore the code is never twice as | 38 | # the same job in Thumb, therefore the code is never twice as |
| 39 | # small and always slower. | 39 | # small and always slower. |
| 40 | # [***] which is also ~35% better than compiler generated code. | 40 | # [***] which is also ~35% better than compiler generated code. Dual- |
| 41 | # issue Cortex A8 core was measured to process input block in | ||
| 42 | # ~990 cycles. | ||
| 41 | 43 | ||
| 42 | $output=shift; | 44 | # August 2010. |
| 45 | # | ||
| 46 | # Rescheduling for dual-issue pipeline resulted in 13% improvement on | ||
| 47 | # Cortex A8 core and in absolute terms ~870 cycles per input block | ||
| 48 | # [or 13.6 cycles per byte]. | ||
| 49 | |||
| 50 | |||
| 51 | while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {} | ||
| 43 | open STDOUT,">$output"; | 52 | open STDOUT,">$output"; |
| 44 | 53 | ||
| 45 | $ctx="r0"; | 54 | $ctx="r0"; |
| @@ -58,43 +67,22 @@ $t3="r12"; | |||
| 58 | $Xi="r14"; | 67 | $Xi="r14"; |
| 59 | @V=($a,$b,$c,$d,$e); | 68 | @V=($a,$b,$c,$d,$e); |
| 60 | 69 | ||
| 61 | # One can optimize this for aligned access on big-endian architecture, | ||
| 62 | # but code's endian neutrality makes it too pretty:-) | ||
| 63 | sub Xload { | ||
| 64 | my ($a,$b,$c,$d,$e)=@_; | ||
| 65 | $code.=<<___; | ||
| 66 | ldrb $t0,[$inp],#4 | ||
| 67 | ldrb $t1,[$inp,#-3] | ||
| 68 | ldrb $t2,[$inp,#-2] | ||
| 69 | ldrb $t3,[$inp,#-1] | ||
| 70 | add $e,$K,$e,ror#2 @ E+=K_00_19 | ||
| 71 | orr $t0,$t1,$t0,lsl#8 | ||
| 72 | add $e,$e,$a,ror#27 @ E+=ROR(A,27) | ||
| 73 | orr $t0,$t2,$t0,lsl#8 | ||
| 74 | eor $t1,$c,$d @ F_xx_xx | ||
| 75 | orr $t0,$t3,$t0,lsl#8 | ||
| 76 | add $e,$e,$t0 @ E+=X[i] | ||
| 77 | str $t0,[$Xi,#-4]! | ||
| 78 | ___ | ||
| 79 | } | ||
| 80 | sub Xupdate { | 70 | sub Xupdate { |
| 81 | my ($a,$b,$c,$d,$e,$flag)=@_; | 71 | my ($a,$b,$c,$d,$e,$opt1,$opt2)=@_; |
| 82 | $code.=<<___; | 72 | $code.=<<___; |
| 83 | ldr $t0,[$Xi,#15*4] | 73 | ldr $t0,[$Xi,#15*4] |
| 84 | ldr $t1,[$Xi,#13*4] | 74 | ldr $t1,[$Xi,#13*4] |
| 85 | ldr $t2,[$Xi,#7*4] | 75 | ldr $t2,[$Xi,#7*4] |
| 86 | ldr $t3,[$Xi,#2*4] | ||
| 87 | add $e,$K,$e,ror#2 @ E+=K_xx_xx | 76 | add $e,$K,$e,ror#2 @ E+=K_xx_xx |
| 77 | ldr $t3,[$Xi,#2*4] | ||
| 88 | eor $t0,$t0,$t1 | 78 | eor $t0,$t0,$t1 |
| 89 | eor $t0,$t0,$t2 | 79 | eor $t2,$t2,$t3 |
| 90 | eor $t0,$t0,$t3 | 80 | eor $t1,$c,$d @ F_xx_xx |
| 91 | add $e,$e,$a,ror#27 @ E+=ROR(A,27) | ||
| 92 | ___ | ||
| 93 | $code.=<<___ if (!defined($flag)); | ||
| 94 | eor $t1,$c,$d @ F_xx_xx, but not in 40_59 | ||
| 95 | ___ | ||
| 96 | $code.=<<___; | ||
| 97 | mov $t0,$t0,ror#31 | 81 | mov $t0,$t0,ror#31 |
| 82 | add $e,$e,$a,ror#27 @ E+=ROR(A,27) | ||
| 83 | eor $t0,$t0,$t2,ror#31 | ||
| 84 | $opt1 @ F_xx_xx | ||
| 85 | $opt2 @ F_xx_xx | ||
| 98 | add $e,$e,$t0 @ E+=X[i] | 86 | add $e,$e,$t0 @ E+=X[i] |
| 99 | str $t0,[$Xi,#-4]! | 87 | str $t0,[$Xi,#-4]! |
| 100 | ___ | 88 | ___ |
| @@ -102,19 +90,29 @@ ___ | |||
| 102 | 90 | ||
| 103 | sub BODY_00_15 { | 91 | sub BODY_00_15 { |
| 104 | my ($a,$b,$c,$d,$e)=@_; | 92 | my ($a,$b,$c,$d,$e)=@_; |
| 105 | &Xload(@_); | ||
| 106 | $code.=<<___; | 93 | $code.=<<___; |
| 94 | ldrb $t0,[$inp],#4 | ||
| 95 | ldrb $t1,[$inp,#-1] | ||
| 96 | ldrb $t2,[$inp,#-2] | ||
| 97 | add $e,$K,$e,ror#2 @ E+=K_00_19 | ||
| 98 | ldrb $t3,[$inp,#-3] | ||
| 99 | add $e,$e,$a,ror#27 @ E+=ROR(A,27) | ||
| 100 | orr $t0,$t1,$t0,lsl#24 | ||
| 101 | eor $t1,$c,$d @ F_xx_xx | ||
| 102 | orr $t0,$t0,$t2,lsl#8 | ||
| 103 | orr $t0,$t0,$t3,lsl#16 | ||
| 107 | and $t1,$b,$t1,ror#2 | 104 | and $t1,$b,$t1,ror#2 |
| 105 | add $e,$e,$t0 @ E+=X[i] | ||
| 108 | eor $t1,$t1,$d,ror#2 @ F_00_19(B,C,D) | 106 | eor $t1,$t1,$d,ror#2 @ F_00_19(B,C,D) |
| 107 | str $t0,[$Xi,#-4]! | ||
| 109 | add $e,$e,$t1 @ E+=F_00_19(B,C,D) | 108 | add $e,$e,$t1 @ E+=F_00_19(B,C,D) |
| 110 | ___ | 109 | ___ |
| 111 | } | 110 | } |
| 112 | 111 | ||
| 113 | sub BODY_16_19 { | 112 | sub BODY_16_19 { |
| 114 | my ($a,$b,$c,$d,$e)=@_; | 113 | my ($a,$b,$c,$d,$e)=@_; |
| 115 | &Xupdate(@_); | 114 | &Xupdate(@_,"and $t1,$b,$t1,ror#2"); |
| 116 | $code.=<<___; | 115 | $code.=<<___; |
| 117 | and $t1,$b,$t1,ror#2 | ||
| 118 | eor $t1,$t1,$d,ror#2 @ F_00_19(B,C,D) | 116 | eor $t1,$t1,$d,ror#2 @ F_00_19(B,C,D) |
| 119 | add $e,$e,$t1 @ E+=F_00_19(B,C,D) | 117 | add $e,$e,$t1 @ E+=F_00_19(B,C,D) |
| 120 | ___ | 118 | ___ |
| @@ -122,22 +120,18 @@ ___ | |||
| 122 | 120 | ||
| 123 | sub BODY_20_39 { | 121 | sub BODY_20_39 { |
| 124 | my ($a,$b,$c,$d,$e)=@_; | 122 | my ($a,$b,$c,$d,$e)=@_; |
| 125 | &Xupdate(@_); | 123 | &Xupdate(@_,"eor $t1,$b,$t1,ror#2"); |
| 126 | $code.=<<___; | 124 | $code.=<<___; |
| 127 | eor $t1,$b,$t1,ror#2 @ F_20_39(B,C,D) | ||
| 128 | add $e,$e,$t1 @ E+=F_20_39(B,C,D) | 125 | add $e,$e,$t1 @ E+=F_20_39(B,C,D) |
| 129 | ___ | 126 | ___ |
| 130 | } | 127 | } |
| 131 | 128 | ||
| 132 | sub BODY_40_59 { | 129 | sub BODY_40_59 { |
| 133 | my ($a,$b,$c,$d,$e)=@_; | 130 | my ($a,$b,$c,$d,$e)=@_; |
| 134 | &Xupdate(@_,1); | 131 | &Xupdate(@_,"and $t1,$b,$t1,ror#2","and $t2,$c,$d"); |
| 135 | $code.=<<___; | 132 | $code.=<<___; |
| 136 | and $t1,$b,$c,ror#2 | ||
| 137 | orr $t2,$b,$c,ror#2 | ||
| 138 | and $t2,$t2,$d,ror#2 | ||
| 139 | orr $t1,$t1,$t2 @ F_40_59(B,C,D) | ||
| 140 | add $e,$e,$t1 @ E+=F_40_59(B,C,D) | 133 | add $e,$e,$t1 @ E+=F_40_59(B,C,D) |
| 134 | add $e,$e,$t2,ror#2 | ||
| 141 | ___ | 135 | ___ |
| 142 | } | 136 | } |
| 143 | 137 | ||
diff --git a/src/lib/libssl/src/crypto/sha/asm/sha1-sparcv9.pl b/src/lib/libssl/src/crypto/sha/asm/sha1-sparcv9.pl index 8306fc88cc..5c161cecd6 100644 --- a/src/lib/libssl/src/crypto/sha/asm/sha1-sparcv9.pl +++ b/src/lib/libssl/src/crypto/sha/asm/sha1-sparcv9.pl | |||
| @@ -276,6 +276,7 @@ $code.=<<___; | |||
| 276 | .type sha1_block_data_order,#function | 276 | .type sha1_block_data_order,#function |
| 277 | .size sha1_block_data_order,(.-sha1_block_data_order) | 277 | .size sha1_block_data_order,(.-sha1_block_data_order) |
| 278 | .asciz "SHA1 block transform for SPARCv9, CRYPTOGAMS by <appro\@openssl.org>" | 278 | .asciz "SHA1 block transform for SPARCv9, CRYPTOGAMS by <appro\@openssl.org>" |
| 279 | .align 4 | ||
| 279 | ___ | 280 | ___ |
| 280 | 281 | ||
| 281 | $code =~ s/\`([^\`]*)\`/eval $1/gem; | 282 | $code =~ s/\`([^\`]*)\`/eval $1/gem; |
diff --git a/src/lib/libssl/src/crypto/sha/asm/sha1-sparcv9a.pl b/src/lib/libssl/src/crypto/sha/asm/sha1-sparcv9a.pl index 15eb854bad..85e8d68086 100644 --- a/src/lib/libssl/src/crypto/sha/asm/sha1-sparcv9a.pl +++ b/src/lib/libssl/src/crypto/sha/asm/sha1-sparcv9a.pl | |||
| @@ -539,6 +539,7 @@ $code.=<<___; | |||
| 539 | .type sha1_block_data_order,#function | 539 | .type sha1_block_data_order,#function |
| 540 | .size sha1_block_data_order,(.-sha1_block_data_order) | 540 | .size sha1_block_data_order,(.-sha1_block_data_order) |
| 541 | .asciz "SHA1 block transform for SPARCv9a, CRYPTOGAMS by <appro\@openssl.org>" | 541 | .asciz "SHA1 block transform for SPARCv9a, CRYPTOGAMS by <appro\@openssl.org>" |
| 542 | .align 4 | ||
| 542 | ___ | 543 | ___ |
| 543 | 544 | ||
| 544 | # Purpose of these subroutines is to explicitly encode VIS instructions, | 545 | # Purpose of these subroutines is to explicitly encode VIS instructions, |
diff --git a/src/lib/libssl/src/crypto/sha/asm/sha256-armv4.pl b/src/lib/libssl/src/crypto/sha/asm/sha256-armv4.pl index 48d846deec..492cb62bc0 100644 --- a/src/lib/libssl/src/crypto/sha/asm/sha256-armv4.pl +++ b/src/lib/libssl/src/crypto/sha/asm/sha256-armv4.pl | |||
| @@ -11,9 +11,14 @@ | |||
| 11 | 11 | ||
| 12 | # Performance is ~2x better than gcc 3.4 generated code and in "abso- | 12 | # Performance is ~2x better than gcc 3.4 generated code and in "abso- |
| 13 | # lute" terms is ~2250 cycles per 64-byte block or ~35 cycles per | 13 | # lute" terms is ~2250 cycles per 64-byte block or ~35 cycles per |
| 14 | # byte. | 14 | # byte [on single-issue Xscale PXA250 core]. |
| 15 | 15 | ||
| 16 | $output=shift; | 16 | # July 2010. |
| 17 | # | ||
| 18 | # Rescheduling for dual-issue pipeline resulted in 22% improvement on | ||
| 19 | # Cortex A8 core and ~20 cycles per processed byte. | ||
| 20 | |||
| 21 | while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {} | ||
| 17 | open STDOUT,">$output"; | 22 | open STDOUT,">$output"; |
| 18 | 23 | ||
| 19 | $ctx="r0"; $t0="r0"; | 24 | $ctx="r0"; $t0="r0"; |
| @@ -52,27 +57,27 @@ $code.=<<___ if ($i<16); | |||
| 52 | ___ | 57 | ___ |
| 53 | $code.=<<___; | 58 | $code.=<<___; |
| 54 | ldr $t2,[$Ktbl],#4 @ *K256++ | 59 | ldr $t2,[$Ktbl],#4 @ *K256++ |
| 55 | str $T1,[sp,#`$i%16`*4] | ||
| 56 | mov $t0,$e,ror#$Sigma1[0] | 60 | mov $t0,$e,ror#$Sigma1[0] |
| 61 | str $T1,[sp,#`$i%16`*4] | ||
| 57 | eor $t0,$t0,$e,ror#$Sigma1[1] | 62 | eor $t0,$t0,$e,ror#$Sigma1[1] |
| 58 | eor $t0,$t0,$e,ror#$Sigma1[2] @ Sigma1(e) | ||
| 59 | add $T1,$T1,$t0 | ||
| 60 | eor $t1,$f,$g | 63 | eor $t1,$f,$g |
| 64 | eor $t0,$t0,$e,ror#$Sigma1[2] @ Sigma1(e) | ||
| 61 | and $t1,$t1,$e | 65 | and $t1,$t1,$e |
| 66 | add $T1,$T1,$t0 | ||
| 62 | eor $t1,$t1,$g @ Ch(e,f,g) | 67 | eor $t1,$t1,$g @ Ch(e,f,g) |
| 63 | add $T1,$T1,$t1 | ||
| 64 | add $T1,$T1,$h | 68 | add $T1,$T1,$h |
| 65 | add $T1,$T1,$t2 | ||
| 66 | mov $h,$a,ror#$Sigma0[0] | 69 | mov $h,$a,ror#$Sigma0[0] |
| 70 | add $T1,$T1,$t1 | ||
| 67 | eor $h,$h,$a,ror#$Sigma0[1] | 71 | eor $h,$h,$a,ror#$Sigma0[1] |
| 72 | add $T1,$T1,$t2 | ||
| 68 | eor $h,$h,$a,ror#$Sigma0[2] @ Sigma0(a) | 73 | eor $h,$h,$a,ror#$Sigma0[2] @ Sigma0(a) |
| 69 | orr $t0,$a,$b | 74 | orr $t0,$a,$b |
| 70 | and $t0,$t0,$c | ||
| 71 | and $t1,$a,$b | 75 | and $t1,$a,$b |
| 76 | and $t0,$t0,$c | ||
| 77 | add $h,$h,$T1 | ||
| 72 | orr $t0,$t0,$t1 @ Maj(a,b,c) | 78 | orr $t0,$t0,$t1 @ Maj(a,b,c) |
| 73 | add $h,$h,$t0 | ||
| 74 | add $d,$d,$T1 | 79 | add $d,$d,$T1 |
| 75 | add $h,$h,$T1 | 80 | add $h,$h,$t0 |
| 76 | ___ | 81 | ___ |
| 77 | } | 82 | } |
| 78 | 83 | ||
| @@ -80,19 +85,19 @@ sub BODY_16_XX { | |||
| 80 | my ($i,$a,$b,$c,$d,$e,$f,$g,$h) = @_; | 85 | my ($i,$a,$b,$c,$d,$e,$f,$g,$h) = @_; |
| 81 | 86 | ||
| 82 | $code.=<<___; | 87 | $code.=<<___; |
| 83 | ldr $t1,[sp,#`($i+1)%16`*4] @ $i | 88 | ldr $t1,[sp,#`($i+1)%16`*4] @ $i |
| 84 | ldr $t2,[sp,#`($i+14)%16`*4] | 89 | ldr $t2,[sp,#`($i+14)%16`*4] |
| 85 | ldr $T1,[sp,#`($i+0)%16`*4] | 90 | ldr $T1,[sp,#`($i+0)%16`*4] |
| 86 | ldr $inp,[sp,#`($i+9)%16`*4] | ||
| 87 | mov $t0,$t1,ror#$sigma0[0] | 91 | mov $t0,$t1,ror#$sigma0[0] |
| 92 | ldr $inp,[sp,#`($i+9)%16`*4] | ||
| 88 | eor $t0,$t0,$t1,ror#$sigma0[1] | 93 | eor $t0,$t0,$t1,ror#$sigma0[1] |
| 89 | eor $t0,$t0,$t1,lsr#$sigma0[2] @ sigma0(X[i+1]) | 94 | eor $t0,$t0,$t1,lsr#$sigma0[2] @ sigma0(X[i+1]) |
| 90 | mov $t1,$t2,ror#$sigma1[0] | 95 | mov $t1,$t2,ror#$sigma1[0] |
| 96 | add $T1,$T1,$t0 | ||
| 91 | eor $t1,$t1,$t2,ror#$sigma1[1] | 97 | eor $t1,$t1,$t2,ror#$sigma1[1] |
| 98 | add $T1,$T1,$inp | ||
| 92 | eor $t1,$t1,$t2,lsr#$sigma1[2] @ sigma1(X[i+14]) | 99 | eor $t1,$t1,$t2,lsr#$sigma1[2] @ sigma1(X[i+14]) |
| 93 | add $T1,$T1,$t0 | ||
| 94 | add $T1,$T1,$t1 | 100 | add $T1,$T1,$t1 |
| 95 | add $T1,$T1,$inp | ||
| 96 | ___ | 101 | ___ |
| 97 | &BODY_00_15(@_); | 102 | &BODY_00_15(@_); |
| 98 | } | 103 | } |
diff --git a/src/lib/libssl/src/crypto/sha/asm/sha512-armv4.pl b/src/lib/libssl/src/crypto/sha/asm/sha512-armv4.pl index 4fbb94a914..3a35861ac6 100644 --- a/src/lib/libssl/src/crypto/sha/asm/sha512-armv4.pl +++ b/src/lib/libssl/src/crypto/sha/asm/sha512-armv4.pl | |||
| @@ -10,7 +10,13 @@ | |||
| 10 | # SHA512 block procedure for ARMv4. September 2007. | 10 | # SHA512 block procedure for ARMv4. September 2007. |
| 11 | 11 | ||
| 12 | # This code is ~4.5 (four and a half) times faster than code generated | 12 | # This code is ~4.5 (four and a half) times faster than code generated |
| 13 | # by gcc 3.4 and it spends ~72 clock cycles per byte. | 13 | # by gcc 3.4 and it spends ~72 clock cycles per byte [on single-issue |
| 14 | # Xscale PXA250 core]. | ||
| 15 | # | ||
| 16 | # July 2010. | ||
| 17 | # | ||
| 18 | # Rescheduling for dual-issue pipeline resulted in 6% improvement on | ||
| 19 | # Cortex A8 core and ~40 cycles per processed byte. | ||
| 14 | 20 | ||
| 15 | # Byte order [in]dependence. ========================================= | 21 | # Byte order [in]dependence. ========================================= |
| 16 | # | 22 | # |
| @@ -22,7 +28,7 @@ $hi=0; | |||
| 22 | $lo=4; | 28 | $lo=4; |
| 23 | # ==================================================================== | 29 | # ==================================================================== |
| 24 | 30 | ||
| 25 | $output=shift; | 31 | while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {} |
| 26 | open STDOUT,">$output"; | 32 | open STDOUT,">$output"; |
| 27 | 33 | ||
| 28 | $ctx="r0"; | 34 | $ctx="r0"; |
| @@ -73,33 +79,31 @@ $code.=<<___; | |||
| 73 | eor $t0,$t0,$Elo,lsl#23 | 79 | eor $t0,$t0,$Elo,lsl#23 |
| 74 | eor $t1,$t1,$Ehi,lsl#23 @ Sigma1(e) | 80 | eor $t1,$t1,$Ehi,lsl#23 @ Sigma1(e) |
| 75 | adds $Tlo,$Tlo,$t0 | 81 | adds $Tlo,$Tlo,$t0 |
| 76 | adc $Thi,$Thi,$t1 @ T += Sigma1(e) | ||
| 77 | adds $Tlo,$Tlo,$t2 | ||
| 78 | adc $Thi,$Thi,$t3 @ T += h | ||
| 79 | |||
| 80 | ldr $t0,[sp,#$Foff+0] @ f.lo | 82 | ldr $t0,[sp,#$Foff+0] @ f.lo |
| 83 | adc $Thi,$Thi,$t1 @ T += Sigma1(e) | ||
| 81 | ldr $t1,[sp,#$Foff+4] @ f.hi | 84 | ldr $t1,[sp,#$Foff+4] @ f.hi |
| 85 | adds $Tlo,$Tlo,$t2 | ||
| 82 | ldr $t2,[sp,#$Goff+0] @ g.lo | 86 | ldr $t2,[sp,#$Goff+0] @ g.lo |
| 87 | adc $Thi,$Thi,$t3 @ T += h | ||
| 83 | ldr $t3,[sp,#$Goff+4] @ g.hi | 88 | ldr $t3,[sp,#$Goff+4] @ g.hi |
| 84 | str $Elo,[sp,#$Eoff+0] | ||
| 85 | str $Ehi,[sp,#$Eoff+4] | ||
| 86 | str $Alo,[sp,#$Aoff+0] | ||
| 87 | str $Ahi,[sp,#$Aoff+4] | ||
| 88 | 89 | ||
| 89 | eor $t0,$t0,$t2 | 90 | eor $t0,$t0,$t2 |
| 91 | str $Elo,[sp,#$Eoff+0] | ||
| 90 | eor $t1,$t1,$t3 | 92 | eor $t1,$t1,$t3 |
| 93 | str $Ehi,[sp,#$Eoff+4] | ||
| 91 | and $t0,$t0,$Elo | 94 | and $t0,$t0,$Elo |
| 95 | str $Alo,[sp,#$Aoff+0] | ||
| 92 | and $t1,$t1,$Ehi | 96 | and $t1,$t1,$Ehi |
| 97 | str $Ahi,[sp,#$Aoff+4] | ||
| 93 | eor $t0,$t0,$t2 | 98 | eor $t0,$t0,$t2 |
| 94 | eor $t1,$t1,$t3 @ Ch(e,f,g) | ||
| 95 | |||
| 96 | ldr $t2,[$Ktbl,#4] @ K[i].lo | 99 | ldr $t2,[$Ktbl,#4] @ K[i].lo |
| 100 | eor $t1,$t1,$t3 @ Ch(e,f,g) | ||
| 97 | ldr $t3,[$Ktbl,#0] @ K[i].hi | 101 | ldr $t3,[$Ktbl,#0] @ K[i].hi |
| 98 | ldr $Elo,[sp,#$Doff+0] @ d.lo | ||
| 99 | ldr $Ehi,[sp,#$Doff+4] @ d.hi | ||
| 100 | 102 | ||
| 101 | adds $Tlo,$Tlo,$t0 | 103 | adds $Tlo,$Tlo,$t0 |
| 104 | ldr $Elo,[sp,#$Doff+0] @ d.lo | ||
| 102 | adc $Thi,$Thi,$t1 @ T += Ch(e,f,g) | 105 | adc $Thi,$Thi,$t1 @ T += Ch(e,f,g) |
| 106 | ldr $Ehi,[sp,#$Doff+4] @ d.hi | ||
| 103 | adds $Tlo,$Tlo,$t2 | 107 | adds $Tlo,$Tlo,$t2 |
| 104 | adc $Thi,$Thi,$t3 @ T += K[i] | 108 | adc $Thi,$Thi,$t3 @ T += K[i] |
| 105 | adds $Elo,$Elo,$Tlo | 109 | adds $Elo,$Elo,$Tlo |
diff --git a/src/lib/libssl/src/crypto/sha/asm/sha512-sparcv9.pl b/src/lib/libssl/src/crypto/sha/asm/sha512-sparcv9.pl index 54241aab50..ec5d78135e 100644 --- a/src/lib/libssl/src/crypto/sha/asm/sha512-sparcv9.pl +++ b/src/lib/libssl/src/crypto/sha/asm/sha512-sparcv9.pl | |||
| @@ -586,6 +586,7 @@ $code.=<<___; | |||
| 586 | .type sha${label}_block_data_order,#function | 586 | .type sha${label}_block_data_order,#function |
| 587 | .size sha${label}_block_data_order,(.-sha${label}_block_data_order) | 587 | .size sha${label}_block_data_order,(.-sha${label}_block_data_order) |
| 588 | .asciz "SHA${label} block transform for SPARCv9, CRYPTOGAMS by <appro\@openssl.org>" | 588 | .asciz "SHA${label} block transform for SPARCv9, CRYPTOGAMS by <appro\@openssl.org>" |
| 589 | .align 4 | ||
| 589 | ___ | 590 | ___ |
| 590 | 591 | ||
| 591 | $code =~ s/\`([^\`]*)\`/eval $1/gem; | 592 | $code =~ s/\`([^\`]*)\`/eval $1/gem; |
diff --git a/src/lib/libssl/src/crypto/sparccpuid.S b/src/lib/libssl/src/crypto/sparccpuid.S index aa8b11efc9..ae61f7f5ce 100644 --- a/src/lib/libssl/src/crypto/sparccpuid.S +++ b/src/lib/libssl/src/crypto/sparccpuid.S | |||
| @@ -225,13 +225,95 @@ _sparcv9_rdtick: | |||
| 225 | xor %o0,%o0,%o0 | 225 | xor %o0,%o0,%o0 |
| 226 | .word 0x91410000 !rd %tick,%o0 | 226 | .word 0x91410000 !rd %tick,%o0 |
| 227 | retl | 227 | retl |
| 228 | .word 0x93323020 !srlx %o2,32,%o1 | 228 | .word 0x93323020 !srlx %o0,32,%o1 |
| 229 | .notick: | 229 | .notick: |
| 230 | retl | 230 | retl |
| 231 | xor %o1,%o1,%o1 | 231 | xor %o1,%o1,%o1 |
| 232 | .type _sparcv9_rdtick,#function | 232 | .type _sparcv9_rdtick,#function |
| 233 | .size _sparcv9_rdtick,.-_sparcv9_rdtick | 233 | .size _sparcv9_rdtick,.-_sparcv9_rdtick |
| 234 | 234 | ||
| 235 | .global _sparcv9_vis1_probe | ||
| 236 | .align 8 | ||
| 237 | _sparcv9_vis1_probe: | ||
| 238 | .word 0x81b00d80 !fxor %f0,%f0,%f0 | ||
| 239 | add %sp,BIAS+2,%o1 | ||
| 240 | retl | ||
| 241 | .word 0xc19a5a40 !ldda [%o1]ASI_FP16_P,%f0 | ||
| 242 | .type _sparcv9_vis1_probe,#function | ||
| 243 | .size _sparcv9_vis1_probe,.-_sparcv9_vis1_probe | ||
| 244 | |||
| 245 | ! Probe and instrument VIS1 instruction. Output is number of cycles it | ||
| 246 | ! takes to execute rdtick and pair of VIS1 instructions. US-Tx VIS unit | ||
| 247 | ! is slow (documented to be 6 cycles on T2) and the core is in-order | ||
| 248 | ! single-issue, it should be possible to distinguish Tx reliably... | ||
| 249 | ! Observed return values are: | ||
| 250 | ! | ||
| 251 | ! UltraSPARC IIe 7 | ||
| 252 | ! UltraSPARC III 7 | ||
| 253 | ! UltraSPARC T1 24 | ||
| 254 | ! | ||
| 255 | ! Numbers for T2 and SPARC64 V-VII are more than welcomed. | ||
| 256 | ! | ||
| 257 | ! It would be possible to detect specifically US-T1 by instrumenting | ||
| 258 | ! fmul8ulx16, which is emulated on T1 and as such accounts for quite | ||
| 259 | ! a lot of %tick-s, couple of thousand on Linux... | ||
| 260 | .global _sparcv9_vis1_instrument | ||
| 261 | .align 8 | ||
| 262 | _sparcv9_vis1_instrument: | ||
| 263 | .word 0x91410000 !rd %tick,%o0 | ||
| 264 | .word 0x81b00d80 !fxor %f0,%f0,%f0 | ||
| 265 | .word 0x85b08d82 !fxor %f2,%f2,%f2 | ||
| 266 | .word 0x93410000 !rd %tick,%o1 | ||
| 267 | .word 0x81b00d80 !fxor %f0,%f0,%f0 | ||
| 268 | .word 0x85b08d82 !fxor %f2,%f2,%f2 | ||
| 269 | .word 0x95410000 !rd %tick,%o2 | ||
| 270 | .word 0x81b00d80 !fxor %f0,%f0,%f0 | ||
| 271 | .word 0x85b08d82 !fxor %f2,%f2,%f2 | ||
| 272 | .word 0x97410000 !rd %tick,%o3 | ||
| 273 | .word 0x81b00d80 !fxor %f0,%f0,%f0 | ||
| 274 | .word 0x85b08d82 !fxor %f2,%f2,%f2 | ||
| 275 | .word 0x99410000 !rd %tick,%o4 | ||
| 276 | |||
| 277 | ! calculate intervals | ||
| 278 | sub %o1,%o0,%o0 | ||
| 279 | sub %o2,%o1,%o1 | ||
| 280 | sub %o3,%o2,%o2 | ||
| 281 | sub %o4,%o3,%o3 | ||
| 282 | |||
| 283 | ! find minumum value | ||
| 284 | cmp %o0,%o1 | ||
| 285 | .word 0x38680002 !bgu,a %xcc,.+8 | ||
| 286 | mov %o1,%o0 | ||
| 287 | cmp %o0,%o2 | ||
| 288 | .word 0x38680002 !bgu,a %xcc,.+8 | ||
| 289 | mov %o2,%o0 | ||
| 290 | cmp %o0,%o3 | ||
| 291 | .word 0x38680002 !bgu,a %xcc,.+8 | ||
| 292 | mov %o3,%o0 | ||
| 293 | |||
| 294 | retl | ||
| 295 | nop | ||
| 296 | .type _sparcv9_vis1_instrument,#function | ||
| 297 | .size _sparcv9_vis1_instrument,.-_sparcv9_vis1_instrument | ||
| 298 | |||
| 299 | .global _sparcv9_vis2_probe | ||
| 300 | .align 8 | ||
| 301 | _sparcv9_vis2_probe: | ||
| 302 | retl | ||
| 303 | .word 0x81b00980 !bshuffle %f0,%f0,%f0 | ||
| 304 | .type _sparcv9_vis2_probe,#function | ||
| 305 | .size _sparcv9_vis2_probe,.-_sparcv9_vis2_probe | ||
| 306 | |||
| 307 | .global _sparcv9_fmadd_probe | ||
| 308 | .align 8 | ||
| 309 | _sparcv9_fmadd_probe: | ||
| 310 | .word 0x81b00d80 !fxor %f0,%f0,%f0 | ||
| 311 | .word 0x85b08d82 !fxor %f2,%f2,%f2 | ||
| 312 | retl | ||
| 313 | .word 0x81b80440 !fmaddd %f0,%f0,%f2,%f0 | ||
| 314 | .type _sparcv9_fmadd_probe,#function | ||
| 315 | .size _sparcv9_fmadd_probe,.-_sparcv9_fmadd_probe | ||
| 316 | |||
| 235 | .global OPENSSL_cleanse | 317 | .global OPENSSL_cleanse |
| 236 | .align 32 | 318 | .align 32 |
| 237 | OPENSSL_cleanse: | 319 | OPENSSL_cleanse: |
diff --git a/src/lib/libssl/src/crypto/sparcv9cap.c b/src/lib/libssl/src/crypto/sparcv9cap.c index 5f31d20bd0..ed195ab402 100644 --- a/src/lib/libssl/src/crypto/sparcv9cap.c +++ b/src/lib/libssl/src/crypto/sparcv9cap.c | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #include <stdio.h> | 1 | #include <stdio.h> |
| 2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
| 3 | #include <string.h> | 3 | #include <string.h> |
| 4 | #include <setjmp.h> | ||
| 5 | #include <signal.h> | ||
| 4 | #include <sys/time.h> | 6 | #include <sys/time.h> |
| 5 | #include <openssl/bn.h> | 7 | #include <openssl/bn.h> |
| 6 | 8 | ||
| @@ -9,6 +11,7 @@ | |||
| 9 | #define SPARCV9_VIS1 (1<<2) | 11 | #define SPARCV9_VIS1 (1<<2) |
| 10 | #define SPARCV9_VIS2 (1<<3) /* reserved */ | 12 | #define SPARCV9_VIS2 (1<<3) /* reserved */ |
| 11 | #define SPARCV9_FMADD (1<<4) /* reserved for SPARC64 V */ | 13 | #define SPARCV9_FMADD (1<<4) /* reserved for SPARC64 V */ |
| 14 | |||
| 12 | static int OPENSSL_sparcv9cap_P=SPARCV9_TICK_PRIVILEGED; | 15 | static int OPENSSL_sparcv9cap_P=SPARCV9_TICK_PRIVILEGED; |
| 13 | 16 | ||
| 14 | int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num) | 17 | int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num) |
| @@ -23,10 +26,14 @@ int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_U | |||
| 23 | return bn_mul_mont_int(rp,ap,bp,np,n0,num); | 26 | return bn_mul_mont_int(rp,ap,bp,np,n0,num); |
| 24 | } | 27 | } |
| 25 | 28 | ||
| 29 | unsigned long _sparcv9_rdtick(void); | ||
| 30 | void _sparcv9_vis1_probe(void); | ||
| 31 | unsigned long _sparcv9_vis1_instrument(void); | ||
| 32 | void _sparcv9_vis2_probe(void); | ||
| 33 | void _sparcv9_fmadd_probe(void); | ||
| 34 | |||
| 26 | unsigned long OPENSSL_rdtsc(void) | 35 | unsigned long OPENSSL_rdtsc(void) |
| 27 | { | 36 | { |
| 28 | unsigned long _sparcv9_rdtick(void); | ||
| 29 | |||
| 30 | if (OPENSSL_sparcv9cap_P&SPARCV9_TICK_PRIVILEGED) | 37 | if (OPENSSL_sparcv9cap_P&SPARCV9_TICK_PRIVILEGED) |
| 31 | #if defined(__sun) && defined(__SVR4) | 38 | #if defined(__sun) && defined(__SVR4) |
| 32 | return gethrtime(); | 39 | return gethrtime(); |
| @@ -37,8 +44,11 @@ unsigned long OPENSSL_rdtsc(void) | |||
| 37 | return _sparcv9_rdtick(); | 44 | return _sparcv9_rdtick(); |
| 38 | } | 45 | } |
| 39 | 46 | ||
| 40 | #if defined(__sun) && defined(__SVR4) | 47 | #if 0 && defined(__sun) && defined(__SVR4) |
| 41 | 48 | /* This code path is disabled, because of incompatibility of | |
| 49 | * libdevinfo.so.1 and libmalloc.so.1 (see below for details) | ||
| 50 | */ | ||
| 51 | #include <malloc.h> | ||
| 42 | #include <dlfcn.h> | 52 | #include <dlfcn.h> |
| 43 | #include <libdevinfo.h> | 53 | #include <libdevinfo.h> |
| 44 | #include <sys/systeminfo.h> | 54 | #include <sys/systeminfo.h> |
| @@ -110,7 +120,21 @@ void OPENSSL_cpuid_setup(void) | |||
| 110 | return; | 120 | return; |
| 111 | } | 121 | } |
| 112 | } | 122 | } |
| 113 | 123 | #ifdef M_KEEP | |
| 124 | /* | ||
| 125 | * Solaris libdevinfo.so.1 is effectively incomatible with | ||
| 126 | * libmalloc.so.1. Specifically, if application is linked with | ||
| 127 | * -lmalloc, it crashes upon startup with SIGSEGV in | ||
| 128 | * free(3LIBMALLOC) called by di_fini. Prior call to | ||
| 129 | * mallopt(M_KEEP,0) somehow helps... But not always... | ||
| 130 | */ | ||
| 131 | if ((h = dlopen(NULL,RTLD_LAZY))) | ||
| 132 | { | ||
| 133 | union { void *p; int (*f)(int,int); } sym; | ||
| 134 | if ((sym.p = dlsym(h,"mallopt"))) (*sym.f)(M_KEEP,0); | ||
| 135 | dlclose(h); | ||
| 136 | } | ||
| 137 | #endif | ||
| 114 | if ((h = dlopen("libdevinfo.so.1",RTLD_LAZY))) do | 138 | if ((h = dlopen("libdevinfo.so.1",RTLD_LAZY))) do |
| 115 | { | 139 | { |
| 116 | di_init_t di_init; | 140 | di_init_t di_init; |
| @@ -137,9 +161,19 @@ void OPENSSL_cpuid_setup(void) | |||
| 137 | 161 | ||
| 138 | #else | 162 | #else |
| 139 | 163 | ||
| 164 | static sigjmp_buf common_jmp; | ||
| 165 | static void common_handler(int sig) { siglongjmp(common_jmp,sig); } | ||
| 166 | |||
| 140 | void OPENSSL_cpuid_setup(void) | 167 | void OPENSSL_cpuid_setup(void) |
| 141 | { | 168 | { |
| 142 | char *e; | 169 | char *e; |
| 170 | struct sigaction common_act,ill_oact,bus_oact; | ||
| 171 | sigset_t all_masked,oset; | ||
| 172 | int sig; | ||
| 173 | static int trigger=0; | ||
| 174 | |||
| 175 | if (trigger) return; | ||
| 176 | trigger=1; | ||
| 143 | 177 | ||
| 144 | if ((e=getenv("OPENSSL_sparcv9cap"))) | 178 | if ((e=getenv("OPENSSL_sparcv9cap"))) |
| 145 | { | 179 | { |
| @@ -147,8 +181,57 @@ void OPENSSL_cpuid_setup(void) | |||
| 147 | return; | 181 | return; |
| 148 | } | 182 | } |
| 149 | 183 | ||
| 150 | /* For now we assume that the rest supports UltraSPARC-I* only */ | 184 | /* Initial value, fits UltraSPARC-I&II... */ |
| 151 | OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU|SPARCV9_VIS1; | 185 | OPENSSL_sparcv9cap_P = SPARCV9_PREFER_FPU|SPARCV9_TICK_PRIVILEGED; |
| 186 | |||
| 187 | sigfillset(&all_masked); | ||
| 188 | sigdelset(&all_masked,SIGILL); | ||
| 189 | sigdelset(&all_masked,SIGTRAP); | ||
| 190 | #ifdef SIGEMT | ||
| 191 | sigdelset(&all_masked,SIGEMT); | ||
| 192 | #endif | ||
| 193 | sigdelset(&all_masked,SIGFPE); | ||
| 194 | sigdelset(&all_masked,SIGBUS); | ||
| 195 | sigdelset(&all_masked,SIGSEGV); | ||
| 196 | sigprocmask(SIG_SETMASK,&all_masked,&oset); | ||
| 197 | |||
| 198 | memset(&common_act,0,sizeof(common_act)); | ||
| 199 | common_act.sa_handler = common_handler; | ||
| 200 | common_act.sa_mask = all_masked; | ||
| 201 | |||
| 202 | sigaction(SIGILL,&common_act,&ill_oact); | ||
| 203 | sigaction(SIGBUS,&common_act,&bus_oact);/* T1 fails 16-bit ldda [on Linux] */ | ||
| 204 | |||
| 205 | if (sigsetjmp(common_jmp,1) == 0) | ||
| 206 | { | ||
| 207 | _sparcv9_rdtick(); | ||
| 208 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; | ||
| 209 | } | ||
| 210 | |||
| 211 | if (sigsetjmp(common_jmp,1) == 0) | ||
| 212 | { | ||
| 213 | _sparcv9_vis1_probe(); | ||
| 214 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS1; | ||
| 215 | /* detect UltraSPARC-Tx, see sparccpud.S for details... */ | ||
| 216 | if (_sparcv9_vis1_instrument() >= 12) | ||
| 217 | OPENSSL_sparcv9cap_P &= ~(SPARCV9_VIS1|SPARCV9_PREFER_FPU); | ||
| 218 | else | ||
| 219 | { | ||
| 220 | _sparcv9_vis2_probe(); | ||
| 221 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS2; | ||
| 222 | } | ||
| 223 | } | ||
| 224 | |||
| 225 | if (sigsetjmp(common_jmp,1) == 0) | ||
| 226 | { | ||
| 227 | _sparcv9_fmadd_probe(); | ||
| 228 | OPENSSL_sparcv9cap_P |= SPARCV9_FMADD; | ||
| 229 | } | ||
| 230 | |||
| 231 | sigaction(SIGBUS,&bus_oact,NULL); | ||
| 232 | sigaction(SIGILL,&ill_oact,NULL); | ||
| 233 | |||
| 234 | sigprocmask(SIG_SETMASK,&oset,NULL); | ||
| 152 | } | 235 | } |
| 153 | 236 | ||
| 154 | #endif | 237 | #endif |
diff --git a/src/lib/libssl/src/crypto/ts/ts_verify_ctx.c b/src/lib/libssl/src/crypto/ts/ts_verify_ctx.c index b079b50fc3..609b7735d4 100644 --- a/src/lib/libssl/src/crypto/ts/ts_verify_ctx.c +++ b/src/lib/libssl/src/crypto/ts/ts_verify_ctx.c | |||
| @@ -56,7 +56,6 @@ | |||
| 56 | * | 56 | * |
| 57 | */ | 57 | */ |
| 58 | 58 | ||
| 59 | #include <assert.h> | ||
| 60 | #include "cryptlib.h" | 59 | #include "cryptlib.h" |
| 61 | #include <openssl/objects.h> | 60 | #include <openssl/objects.h> |
| 62 | #include <openssl/ts.h> | 61 | #include <openssl/ts.h> |
| @@ -74,7 +73,7 @@ TS_VERIFY_CTX *TS_VERIFY_CTX_new(void) | |||
| 74 | 73 | ||
| 75 | void TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx) | 74 | void TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx) |
| 76 | { | 75 | { |
| 77 | assert(ctx != NULL); | 76 | OPENSSL_assert(ctx != NULL); |
| 78 | memset(ctx, 0, sizeof(TS_VERIFY_CTX)); | 77 | memset(ctx, 0, sizeof(TS_VERIFY_CTX)); |
| 79 | } | 78 | } |
| 80 | 79 | ||
| @@ -116,7 +115,7 @@ TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx) | |||
| 116 | ASN1_OCTET_STRING *msg; | 115 | ASN1_OCTET_STRING *msg; |
| 117 | const ASN1_INTEGER *nonce; | 116 | const ASN1_INTEGER *nonce; |
| 118 | 117 | ||
| 119 | assert(req != NULL); | 118 | OPENSSL_assert(req != NULL); |
| 120 | if (ret) | 119 | if (ret) |
| 121 | TS_VERIFY_CTX_cleanup(ret); | 120 | TS_VERIFY_CTX_cleanup(ret); |
| 122 | else | 121 | else |
diff --git a/src/lib/libssl/src/crypto/vms_rms.h b/src/lib/libssl/src/crypto/vms_rms.h new file mode 100755 index 0000000000..00a00d993f --- /dev/null +++ b/src/lib/libssl/src/crypto/vms_rms.h | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | |||
| 2 | #ifdef NAML$C_MAXRSS | ||
| 3 | |||
| 4 | # define CC_RMS_NAMX cc$rms_naml | ||
| 5 | # define FAB_NAMX fab$l_naml | ||
| 6 | # define FAB_OR_NAML( fab, naml) naml | ||
| 7 | # define FAB_OR_NAML_DNA naml$l_long_defname | ||
| 8 | # define FAB_OR_NAML_DNS naml$l_long_defname_size | ||
| 9 | # define FAB_OR_NAML_FNA naml$l_long_filename | ||
| 10 | # define FAB_OR_NAML_FNS naml$l_long_filename_size | ||
| 11 | # define NAMX_ESA naml$l_long_expand | ||
| 12 | # define NAMX_ESL naml$l_long_expand_size | ||
| 13 | # define NAMX_ESS naml$l_long_expand_alloc | ||
| 14 | # define NAMX_NOP naml$b_nop | ||
| 15 | # define SET_NAMX_NO_SHORT_UPCASE( nam) nam.naml$v_no_short_upcase = 1 | ||
| 16 | |||
| 17 | # if __INITIAL_POINTER_SIZE == 64 | ||
| 18 | # define NAMX_DNA_FNA_SET(fab) fab.fab$l_dna = (__char_ptr32) -1; \ | ||
| 19 | fab.fab$l_fna = (__char_ptr32) -1; | ||
| 20 | # else /* __INITIAL_POINTER_SIZE == 64 */ | ||
| 21 | # define NAMX_DNA_FNA_SET(fab) fab.fab$l_dna = (char *) -1; \ | ||
| 22 | fab.fab$l_fna = (char *) -1; | ||
| 23 | # endif /* __INITIAL_POINTER_SIZE == 64 [else] */ | ||
| 24 | |||
| 25 | # define NAMX_MAXRSS NAML$C_MAXRSS | ||
| 26 | # define NAMX_STRUCT NAML | ||
| 27 | |||
| 28 | #else /* def NAML$C_MAXRSS */ | ||
| 29 | |||
| 30 | # define CC_RMS_NAMX cc$rms_nam | ||
| 31 | # define FAB_NAMX fab$l_nam | ||
| 32 | # define FAB_OR_NAML( fab, naml) fab | ||
| 33 | # define FAB_OR_NAML_DNA fab$l_dna | ||
| 34 | # define FAB_OR_NAML_DNS fab$b_dns | ||
| 35 | # define FAB_OR_NAML_FNA fab$l_fna | ||
| 36 | # define FAB_OR_NAML_FNS fab$b_fns | ||
| 37 | # define NAMX_ESA nam$l_esa | ||
| 38 | # define NAMX_ESL nam$b_esl | ||
| 39 | # define NAMX_ESS nam$b_ess | ||
| 40 | # define NAMX_NOP nam$b_nop | ||
| 41 | # define NAMX_DNA_FNA_SET(fab) | ||
| 42 | # define NAMX_MAXRSS NAM$C_MAXRSS | ||
| 43 | # define NAMX_STRUCT NAM | ||
| 44 | # ifdef NAM$M_NO_SHORT_UPCASE | ||
| 45 | # define SET_NAMX_NO_SHORT_UPCASE( nam) naml.naml$v_no_short_upcase = 1 | ||
| 46 | # else /* def NAM$M_NO_SHORT_UPCASE */ | ||
| 47 | # define SET_NAMX_NO_SHORT_UPCASE( nam) | ||
| 48 | # endif /* def NAM$M_NO_SHORT_UPCASE [else] */ | ||
| 49 | |||
| 50 | #endif /* def NAML$C_MAXRSS [else] */ | ||
| 51 | |||
diff --git a/src/lib/libssl/src/crypto/x509v3/pcy_tree.c b/src/lib/libssl/src/crypto/x509v3/pcy_tree.c index 92f6b24556..bb9777348f 100644 --- a/src/lib/libssl/src/crypto/x509v3/pcy_tree.c +++ b/src/lib/libssl/src/crypto/x509v3/pcy_tree.c | |||
| @@ -341,9 +341,8 @@ static int tree_link_nodes(X509_POLICY_LEVEL *curr, | |||
| 341 | const X509_POLICY_CACHE *cache) | 341 | const X509_POLICY_CACHE *cache) |
| 342 | { | 342 | { |
| 343 | int i; | 343 | int i; |
| 344 | X509_POLICY_LEVEL *last; | ||
| 345 | X509_POLICY_DATA *data; | 344 | X509_POLICY_DATA *data; |
| 346 | last = curr - 1; | 345 | |
| 347 | for (i = 0; i < sk_X509_POLICY_DATA_num(cache->data); i++) | 346 | for (i = 0; i < sk_X509_POLICY_DATA_num(cache->data); i++) |
| 348 | { | 347 | { |
| 349 | data = sk_X509_POLICY_DATA_value(cache->data, i); | 348 | data = sk_X509_POLICY_DATA_value(cache->data, i); |
diff --git a/src/lib/libssl/src/crypto/x509v3/v3_addr.c b/src/lib/libssl/src/crypto/x509v3/v3_addr.c index 9087d66e0a..0d70e8696d 100644 --- a/src/lib/libssl/src/crypto/x509v3/v3_addr.c +++ b/src/lib/libssl/src/crypto/x509v3/v3_addr.c | |||
| @@ -177,12 +177,18 @@ static int i2r_address(BIO *out, | |||
| 177 | unsigned char addr[ADDR_RAW_BUF_LEN]; | 177 | unsigned char addr[ADDR_RAW_BUF_LEN]; |
| 178 | int i, n; | 178 | int i, n; |
| 179 | 179 | ||
| 180 | if (bs->length < 0) | ||
| 181 | return 0; | ||
| 180 | switch (afi) { | 182 | switch (afi) { |
| 181 | case IANA_AFI_IPV4: | 183 | case IANA_AFI_IPV4: |
| 184 | if (bs->length > 4) | ||
| 185 | return 0; | ||
| 182 | addr_expand(addr, bs, 4, fill); | 186 | addr_expand(addr, bs, 4, fill); |
| 183 | BIO_printf(out, "%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]); | 187 | BIO_printf(out, "%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]); |
| 184 | break; | 188 | break; |
| 185 | case IANA_AFI_IPV6: | 189 | case IANA_AFI_IPV6: |
| 190 | if (bs->length > 16) | ||
| 191 | return 0; | ||
| 186 | addr_expand(addr, bs, 16, fill); | 192 | addr_expand(addr, bs, 16, fill); |
| 187 | for (n = 16; n > 1 && addr[n-1] == 0x00 && addr[n-2] == 0x00; n -= 2) | 193 | for (n = 16; n > 1 && addr[n-1] == 0x00 && addr[n-2] == 0x00; n -= 2) |
| 188 | ; | 194 | ; |
diff --git a/src/lib/libssl/src/crypto/x509v3/v3_asid.c b/src/lib/libssl/src/crypto/x509v3/v3_asid.c index 56702f86b9..3f434c0603 100644 --- a/src/lib/libssl/src/crypto/x509v3/v3_asid.c +++ b/src/lib/libssl/src/crypto/x509v3/v3_asid.c | |||
| @@ -61,7 +61,6 @@ | |||
| 61 | 61 | ||
| 62 | #include <stdio.h> | 62 | #include <stdio.h> |
| 63 | #include <string.h> | 63 | #include <string.h> |
| 64 | #include <assert.h> | ||
| 65 | #include "cryptlib.h" | 64 | #include "cryptlib.h" |
| 66 | #include <openssl/conf.h> | 65 | #include <openssl/conf.h> |
| 67 | #include <openssl/asn1.h> | 66 | #include <openssl/asn1.h> |
| @@ -172,11 +171,11 @@ static int ASIdOrRange_cmp(const ASIdOrRange * const *a_, | |||
| 172 | { | 171 | { |
| 173 | const ASIdOrRange *a = *a_, *b = *b_; | 172 | const ASIdOrRange *a = *a_, *b = *b_; |
| 174 | 173 | ||
| 175 | assert((a->type == ASIdOrRange_id && a->u.id != NULL) || | 174 | OPENSSL_assert((a->type == ASIdOrRange_id && a->u.id != NULL) || |
| 176 | (a->type == ASIdOrRange_range && a->u.range != NULL && | 175 | (a->type == ASIdOrRange_range && a->u.range != NULL && |
| 177 | a->u.range->min != NULL && a->u.range->max != NULL)); | 176 | a->u.range->min != NULL && a->u.range->max != NULL)); |
| 178 | 177 | ||
| 179 | assert((b->type == ASIdOrRange_id && b->u.id != NULL) || | 178 | OPENSSL_assert((b->type == ASIdOrRange_id && b->u.id != NULL) || |
| 180 | (b->type == ASIdOrRange_range && b->u.range != NULL && | 179 | (b->type == ASIdOrRange_range && b->u.range != NULL && |
| 181 | b->u.range->min != NULL && b->u.range->max != NULL)); | 180 | b->u.range->min != NULL && b->u.range->max != NULL)); |
| 182 | 181 | ||
| @@ -215,7 +214,7 @@ int v3_asid_add_inherit(ASIdentifiers *asid, int which) | |||
| 215 | if (*choice == NULL) { | 214 | if (*choice == NULL) { |
| 216 | if ((*choice = ASIdentifierChoice_new()) == NULL) | 215 | if ((*choice = ASIdentifierChoice_new()) == NULL) |
| 217 | return 0; | 216 | return 0; |
| 218 | assert((*choice)->u.inherit == NULL); | 217 | OPENSSL_assert((*choice)->u.inherit == NULL); |
| 219 | if (((*choice)->u.inherit = ASN1_NULL_new()) == NULL) | 218 | if (((*choice)->u.inherit = ASN1_NULL_new()) == NULL) |
| 220 | return 0; | 219 | return 0; |
| 221 | (*choice)->type = ASIdentifierChoice_inherit; | 220 | (*choice)->type = ASIdentifierChoice_inherit; |
| @@ -250,7 +249,7 @@ int v3_asid_add_id_or_range(ASIdentifiers *asid, | |||
| 250 | if (*choice == NULL) { | 249 | if (*choice == NULL) { |
| 251 | if ((*choice = ASIdentifierChoice_new()) == NULL) | 250 | if ((*choice = ASIdentifierChoice_new()) == NULL) |
| 252 | return 0; | 251 | return 0; |
| 253 | assert((*choice)->u.asIdsOrRanges == NULL); | 252 | OPENSSL_assert((*choice)->u.asIdsOrRanges == NULL); |
| 254 | (*choice)->u.asIdsOrRanges = sk_ASIdOrRange_new(ASIdOrRange_cmp); | 253 | (*choice)->u.asIdsOrRanges = sk_ASIdOrRange_new(ASIdOrRange_cmp); |
| 255 | if ((*choice)->u.asIdsOrRanges == NULL) | 254 | if ((*choice)->u.asIdsOrRanges == NULL) |
| 256 | return 0; | 255 | return 0; |
| @@ -286,7 +285,7 @@ static void extract_min_max(ASIdOrRange *aor, | |||
| 286 | ASN1_INTEGER **min, | 285 | ASN1_INTEGER **min, |
| 287 | ASN1_INTEGER **max) | 286 | ASN1_INTEGER **max) |
| 288 | { | 287 | { |
| 289 | assert(aor != NULL && min != NULL && max != NULL); | 288 | OPENSSL_assert(aor != NULL && min != NULL && max != NULL); |
| 290 | switch (aor->type) { | 289 | switch (aor->type) { |
| 291 | case ASIdOrRange_id: | 290 | case ASIdOrRange_id: |
| 292 | *min = aor->u.id; | 291 | *min = aor->u.id; |
| @@ -373,7 +372,7 @@ static int ASIdentifierChoice_is_canonical(ASIdentifierChoice *choice) | |||
| 373 | int v3_asid_is_canonical(ASIdentifiers *asid) | 372 | int v3_asid_is_canonical(ASIdentifiers *asid) |
| 374 | { | 373 | { |
| 375 | return (asid == NULL || | 374 | return (asid == NULL || |
| 376 | (ASIdentifierChoice_is_canonical(asid->asnum) || | 375 | (ASIdentifierChoice_is_canonical(asid->asnum) && |
| 377 | ASIdentifierChoice_is_canonical(asid->rdi))); | 376 | ASIdentifierChoice_is_canonical(asid->rdi))); |
| 378 | } | 377 | } |
| 379 | 378 | ||
| @@ -395,7 +394,7 @@ static int ASIdentifierChoice_canonize(ASIdentifierChoice *choice) | |||
| 395 | /* | 394 | /* |
| 396 | * We have a list. Sort it. | 395 | * We have a list. Sort it. |
| 397 | */ | 396 | */ |
| 398 | assert(choice->type == ASIdentifierChoice_asIdsOrRanges); | 397 | OPENSSL_assert(choice->type == ASIdentifierChoice_asIdsOrRanges); |
| 399 | sk_ASIdOrRange_sort(choice->u.asIdsOrRanges); | 398 | sk_ASIdOrRange_sort(choice->u.asIdsOrRanges); |
| 400 | 399 | ||
| 401 | /* | 400 | /* |
| @@ -413,7 +412,7 @@ static int ASIdentifierChoice_canonize(ASIdentifierChoice *choice) | |||
| 413 | /* | 412 | /* |
| 414 | * Make sure we're properly sorted (paranoia). | 413 | * Make sure we're properly sorted (paranoia). |
| 415 | */ | 414 | */ |
| 416 | assert(ASN1_INTEGER_cmp(a_min, b_min) <= 0); | 415 | OPENSSL_assert(ASN1_INTEGER_cmp(a_min, b_min) <= 0); |
| 417 | 416 | ||
| 418 | /* | 417 | /* |
| 419 | * Check for overlaps. | 418 | * Check for overlaps. |
| @@ -472,7 +471,7 @@ static int ASIdentifierChoice_canonize(ASIdentifierChoice *choice) | |||
| 472 | } | 471 | } |
| 473 | } | 472 | } |
| 474 | 473 | ||
| 475 | assert(ASIdentifierChoice_is_canonical(choice)); /* Paranoia */ | 474 | OPENSSL_assert(ASIdentifierChoice_is_canonical(choice)); /* Paranoia */ |
| 476 | 475 | ||
| 477 | ret = 1; | 476 | ret = 1; |
| 478 | 477 | ||
| @@ -709,9 +708,9 @@ static int v3_asid_validate_path_internal(X509_STORE_CTX *ctx, | |||
| 709 | int i, ret = 1, inherit_as = 0, inherit_rdi = 0; | 708 | int i, ret = 1, inherit_as = 0, inherit_rdi = 0; |
| 710 | X509 *x; | 709 | X509 *x; |
| 711 | 710 | ||
| 712 | assert(chain != NULL && sk_X509_num(chain) > 0); | 711 | OPENSSL_assert(chain != NULL && sk_X509_num(chain) > 0); |
| 713 | assert(ctx != NULL || ext != NULL); | 712 | OPENSSL_assert(ctx != NULL || ext != NULL); |
| 714 | assert(ctx == NULL || ctx->verify_cb != NULL); | 713 | OPENSSL_assert(ctx == NULL || ctx->verify_cb != NULL); |
| 715 | 714 | ||
| 716 | /* | 715 | /* |
| 717 | * Figure out where to start. If we don't have an extension to | 716 | * Figure out where to start. If we don't have an extension to |
| @@ -724,7 +723,7 @@ static int v3_asid_validate_path_internal(X509_STORE_CTX *ctx, | |||
| 724 | } else { | 723 | } else { |
| 725 | i = 0; | 724 | i = 0; |
| 726 | x = sk_X509_value(chain, i); | 725 | x = sk_X509_value(chain, i); |
| 727 | assert(x != NULL); | 726 | OPENSSL_assert(x != NULL); |
| 728 | if ((ext = x->rfc3779_asid) == NULL) | 727 | if ((ext = x->rfc3779_asid) == NULL) |
| 729 | goto done; | 728 | goto done; |
| 730 | } | 729 | } |
| @@ -757,7 +756,7 @@ static int v3_asid_validate_path_internal(X509_STORE_CTX *ctx, | |||
| 757 | */ | 756 | */ |
| 758 | for (i++; i < sk_X509_num(chain); i++) { | 757 | for (i++; i < sk_X509_num(chain); i++) { |
| 759 | x = sk_X509_value(chain, i); | 758 | x = sk_X509_value(chain, i); |
| 760 | assert(x != NULL); | 759 | OPENSSL_assert(x != NULL); |
| 761 | if (x->rfc3779_asid == NULL) { | 760 | if (x->rfc3779_asid == NULL) { |
| 762 | if (child_as != NULL || child_rdi != NULL) | 761 | if (child_as != NULL || child_rdi != NULL) |
| 763 | validation_err(X509_V_ERR_UNNESTED_RESOURCE); | 762 | validation_err(X509_V_ERR_UNNESTED_RESOURCE); |
| @@ -800,7 +799,7 @@ static int v3_asid_validate_path_internal(X509_STORE_CTX *ctx, | |||
| 800 | /* | 799 | /* |
| 801 | * Trust anchor can't inherit. | 800 | * Trust anchor can't inherit. |
| 802 | */ | 801 | */ |
| 803 | assert(x != NULL); | 802 | OPENSSL_assert(x != NULL); |
| 804 | if (x->rfc3779_asid != NULL) { | 803 | if (x->rfc3779_asid != NULL) { |
| 805 | if (x->rfc3779_asid->asnum != NULL && | 804 | if (x->rfc3779_asid->asnum != NULL && |
| 806 | x->rfc3779_asid->asnum->type == ASIdentifierChoice_inherit) | 805 | x->rfc3779_asid->asnum->type == ASIdentifierChoice_inherit) |
diff --git a/src/lib/libssl/src/crypto/x509v3/v3_ncons.c b/src/lib/libssl/src/crypto/x509v3/v3_ncons.c index 689df46acd..a01dc64dd2 100644 --- a/src/lib/libssl/src/crypto/x509v3/v3_ncons.c +++ b/src/lib/libssl/src/crypto/x509v3/v3_ncons.c | |||
| @@ -189,7 +189,6 @@ static int do_i2r_name_constraints(const X509V3_EXT_METHOD *method, | |||
| 189 | print_nc_ipadd(bp, tree->base->d.ip); | 189 | print_nc_ipadd(bp, tree->base->d.ip); |
| 190 | else | 190 | else |
| 191 | GENERAL_NAME_print(bp, tree->base); | 191 | GENERAL_NAME_print(bp, tree->base); |
| 192 | tree = sk_GENERAL_SUBTREE_value(trees, i); | ||
| 193 | BIO_puts(bp, "\n"); | 192 | BIO_puts(bp, "\n"); |
| 194 | } | 193 | } |
| 195 | return 1; | 194 | return 1; |
diff --git a/src/lib/libssl/src/doc/crypto/EVP_PKEY_verify.pod b/src/lib/libssl/src/doc/crypto/EVP_PKEY_verify.pod index 10633da3f2..f93e5fc6c3 100644 --- a/src/lib/libssl/src/doc/crypto/EVP_PKEY_verify.pod +++ b/src/lib/libssl/src/doc/crypto/EVP_PKEY_verify.pod | |||
| @@ -69,7 +69,7 @@ Verify signature using PKCS#1 and SHA256 digest: | |||
| 69 | /* Error */ | 69 | /* Error */ |
| 70 | 70 | ||
| 71 | /* Perform operation */ | 71 | /* Perform operation */ |
| 72 | ret = EVP_PKEY_verify(ctx, md, mdlen, sig, siglen); | 72 | ret = EVP_PKEY_verify(ctx, sig, siglen, md, mdlen); |
| 73 | 73 | ||
| 74 | /* ret == 1 indicates success, 0 verify failure and < 0 for some | 74 | /* ret == 1 indicates success, 0 verify failure and < 0 for some |
| 75 | * other error. | 75 | * other error. |
diff --git a/src/lib/libssl/src/engines/Makefile b/src/lib/libssl/src/engines/Makefile index e0242059b7..2fa9534401 100644 --- a/src/lib/libssl/src/engines/Makefile +++ b/src/lib/libssl/src/engines/Makefile | |||
| @@ -114,7 +114,7 @@ install: | |||
| 114 | if [ "$(PLATFORM)" != "Cygwin" ]; then \ | 114 | if [ "$(PLATFORM)" != "Cygwin" ]; then \ |
| 115 | case "$(CFLAGS)" in \ | 115 | case "$(CFLAGS)" in \ |
| 116 | *DSO_BEOS*) sfx=".so";; \ | 116 | *DSO_BEOS*) sfx=".so";; \ |
| 117 | *DSO_DLFCN*) sfx=".so";; \ | 117 | *DSO_DLFCN*) sfx=`expr "$(SHLIB_EXT)" : '.*\(\.[a-z][a-z]*\)' \| ".so"`;; \ |
| 118 | *DSO_DL*) sfx=".sl";; \ | 118 | *DSO_DL*) sfx=".sl";; \ |
| 119 | *DSO_WIN32*) sfx="eay32.dll"; pfx=;; \ | 119 | *DSO_WIN32*) sfx="eay32.dll"; pfx=;; \ |
| 120 | *) sfx=".bad";; \ | 120 | *) sfx=".bad";; \ |
diff --git a/src/lib/libssl/src/engines/ccgost/Makefile b/src/lib/libssl/src/engines/ccgost/Makefile index 64be962f39..dadb5230ec 100644 --- a/src/lib/libssl/src/engines/ccgost/Makefile +++ b/src/lib/libssl/src/engines/ccgost/Makefile | |||
| @@ -48,7 +48,7 @@ install: | |||
| 48 | if [ "$(PLATFORM)" != "Cygwin" ]; then \ | 48 | if [ "$(PLATFORM)" != "Cygwin" ]; then \ |
| 49 | case "$(CFLAGS)" in \ | 49 | case "$(CFLAGS)" in \ |
| 50 | *DSO_BEOS*) sfx=".so";; \ | 50 | *DSO_BEOS*) sfx=".so";; \ |
| 51 | *DSO_DLFCN*) sfx=".so";; \ | 51 | *DSO_DLFCN*) sfx=`expr "$(SHLIB_EXT)" : '.*\(\.[a-z][a-z]*\)' \| ".so"`;; \ |
| 52 | *DSO_DL*) sfx=".sl";; \ | 52 | *DSO_DL*) sfx=".sl";; \ |
| 53 | *DSO_WIN32*) sfx="eay32.dll"; pfx=;; \ | 53 | *DSO_WIN32*) sfx="eay32.dll"; pfx=;; \ |
| 54 | *) sfx=".bad";; \ | 54 | *) sfx=".bad";; \ |
diff --git a/src/lib/libssl/src/engines/ccgost/gost_ameth.c b/src/lib/libssl/src/engines/ccgost/gost_ameth.c index f620a216c8..e6c2839e5f 100644 --- a/src/lib/libssl/src/engines/ccgost/gost_ameth.c +++ b/src/lib/libssl/src/engines/ccgost/gost_ameth.c | |||
| @@ -39,7 +39,7 @@ static ASN1_STRING *encode_gost_algor_params(const EVP_PKEY *key) | |||
| 39 | ASN1_STRING *params = ASN1_STRING_new(); | 39 | ASN1_STRING *params = ASN1_STRING_new(); |
| 40 | GOST_KEY_PARAMS *gkp = GOST_KEY_PARAMS_new(); | 40 | GOST_KEY_PARAMS *gkp = GOST_KEY_PARAMS_new(); |
| 41 | int pkey_param_nid = NID_undef; | 41 | int pkey_param_nid = NID_undef; |
| 42 | int cipher_param_nid = NID_undef; | 42 | |
| 43 | if (!params || !gkp) | 43 | if (!params || !gkp) |
| 44 | { | 44 | { |
| 45 | GOSTerr(GOST_F_ENCODE_GOST_ALGOR_PARAMS, | 45 | GOSTerr(GOST_F_ENCODE_GOST_ALGOR_PARAMS, |
| @@ -52,7 +52,6 @@ static ASN1_STRING *encode_gost_algor_params(const EVP_PKEY *key) | |||
| 52 | { | 52 | { |
| 53 | case NID_id_GostR3410_2001: | 53 | case NID_id_GostR3410_2001: |
| 54 | pkey_param_nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(EVP_PKEY_get0((EVP_PKEY *)key))); | 54 | pkey_param_nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(EVP_PKEY_get0((EVP_PKEY *)key))); |
| 55 | cipher_param_nid = get_encryption_params(NULL)->nid; | ||
| 56 | break; | 55 | break; |
| 57 | case NID_id_GostR3410_94: | 56 | case NID_id_GostR3410_94: |
| 58 | pkey_param_nid = (int) gost94_nid_by_params(EVP_PKEY_get0((EVP_PKEY *)key)); | 57 | pkey_param_nid = (int) gost94_nid_by_params(EVP_PKEY_get0((EVP_PKEY *)key)); |
| @@ -64,7 +63,6 @@ static ASN1_STRING *encode_gost_algor_params(const EVP_PKEY *key) | |||
| 64 | params=NULL; | 63 | params=NULL; |
| 65 | goto err; | 64 | goto err; |
| 66 | } | 65 | } |
| 67 | cipher_param_nid = get_encryption_params(NULL)->nid; | ||
| 68 | break; | 66 | break; |
| 69 | } | 67 | } |
| 70 | gkp->key_params = OBJ_nid2obj(pkey_param_nid); | 68 | gkp->key_params = OBJ_nid2obj(pkey_param_nid); |
diff --git a/src/lib/libssl/src/engines/ccgost/gost_crypt.c b/src/lib/libssl/src/engines/ccgost/gost_crypt.c index 4977d1dcf5..cde58c0e9b 100644 --- a/src/lib/libssl/src/engines/ccgost/gost_crypt.c +++ b/src/lib/libssl/src/engines/ccgost/gost_crypt.c | |||
| @@ -495,7 +495,8 @@ int gost89_get_asn1_parameters(EVP_CIPHER_CTX *ctx,ASN1_TYPE *params) | |||
| 495 | int gost_imit_init_cpa(EVP_MD_CTX *ctx) | 495 | int gost_imit_init_cpa(EVP_MD_CTX *ctx) |
| 496 | { | 496 | { |
| 497 | struct ossl_gost_imit_ctx *c = ctx->md_data; | 497 | struct ossl_gost_imit_ctx *c = ctx->md_data; |
| 498 | memset(c->buffer,0,16); | 498 | memset(c->buffer,0,sizeof(c->buffer)); |
| 499 | memset(c->partial_block,0,sizeof(c->partial_block)); | ||
| 499 | c->count = 0; | 500 | c->count = 0; |
| 500 | c->bytes_left=0; | 501 | c->bytes_left=0; |
| 501 | c->key_meshing=1; | 502 | c->key_meshing=1; |
diff --git a/src/lib/libssl/src/engines/e_aep.c b/src/lib/libssl/src/engines/e_aep.c index 742b4f9b18..d7f89e5156 100644 --- a/src/lib/libssl/src/engines/e_aep.c +++ b/src/lib/libssl/src/engines/e_aep.c | |||
| @@ -68,6 +68,8 @@ typedef int pid_t; | |||
| 68 | #if defined(OPENSSL_SYS_NETWARE) && defined(NETWARE_CLIB) | 68 | #if defined(OPENSSL_SYS_NETWARE) && defined(NETWARE_CLIB) |
| 69 | #define getpid GetThreadID | 69 | #define getpid GetThreadID |
| 70 | extern int GetThreadID(void); | 70 | extern int GetThreadID(void); |
| 71 | #elif defined(_WIN32) && !defined(__WATCOMC__) | ||
| 72 | #define getpid _getpid | ||
| 71 | #endif | 73 | #endif |
| 72 | 74 | ||
| 73 | #include <openssl/crypto.h> | 75 | #include <openssl/crypto.h> |
| @@ -867,13 +869,7 @@ static AEP_RV aep_get_connection(AEP_CONNECTION_HNDL_PTR phConnection) | |||
| 867 | 869 | ||
| 868 | CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); | 870 | CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); |
| 869 | 871 | ||
| 870 | #ifdef NETWARE_CLIB | ||
| 871 | curr_pid = GetThreadID(); | ||
| 872 | #elif defined(_WIN32) | ||
| 873 | curr_pid = _getpid(); | ||
| 874 | #else | ||
| 875 | curr_pid = getpid(); | 872 | curr_pid = getpid(); |
| 876 | #endif | ||
| 877 | 873 | ||
| 878 | /*Check if this is the first time this is being called from the current | 874 | /*Check if this is the first time this is being called from the current |
| 879 | process*/ | 875 | process*/ |
diff --git a/src/lib/libssl/src/engines/e_capi.c b/src/lib/libssl/src/engines/e_capi.c index e2a7cb58b0..24b620fc07 100644 --- a/src/lib/libssl/src/engines/e_capi.c +++ b/src/lib/libssl/src/engines/e_capi.c | |||
| @@ -76,10 +76,16 @@ | |||
| 76 | * CertGetCertificateContextProperty. CERT_KEY_PROV_INFO_PROP_ID is | 76 | * CertGetCertificateContextProperty. CERT_KEY_PROV_INFO_PROP_ID is |
| 77 | * one of possible values you can pass to function in question. By | 77 | * one of possible values you can pass to function in question. By |
| 78 | * checking if it's defined we can see if wincrypt.h and accompanying | 78 | * checking if it's defined we can see if wincrypt.h and accompanying |
| 79 | * crypt32.lib are in shape. Yes, it's rather "weak" test and if | 79 | * crypt32.lib are in shape. The native MingW32 headers up to and |
| 80 | * compilation fails, then re-configure with -DOPENSSL_NO_CAPIENG. | 80 | * including __W32API_VERSION 3.14 lack of struct DSSPUBKEY and the |
| 81 | * defines CERT_STORE_PROV_SYSTEM_A and CERT_STORE_READONLY_FLAG, | ||
| 82 | * so we check for these too and avoid compiling. | ||
| 83 | * Yes, it's rather "weak" test and if compilation fails, | ||
| 84 | * then re-configure with -DOPENSSL_NO_CAPIENG. | ||
| 81 | */ | 85 | */ |
| 82 | #ifdef CERT_KEY_PROV_INFO_PROP_ID | 86 | #if defined(CERT_KEY_PROV_INFO_PROP_ID) && \ |
| 87 | defined(CERT_STORE_PROV_SYSTEM_A) && \ | ||
| 88 | defined(CERT_STORE_READONLY_FLAG) | ||
| 83 | # define __COMPILE_CAPIENG | 89 | # define __COMPILE_CAPIENG |
| 84 | #endif /* CERT_KEY_PROV_INFO_PROP_ID */ | 90 | #endif /* CERT_KEY_PROV_INFO_PROP_ID */ |
| 85 | #endif /* OPENSSL_NO_CAPIENG */ | 91 | #endif /* OPENSSL_NO_CAPIENG */ |
| @@ -1808,6 +1814,8 @@ static int cert_select_dialog(ENGINE *e, SSL *ssl, STACK_OF(X509) *certs) | |||
| 1808 | #include <openssl/engine.h> | 1814 | #include <openssl/engine.h> |
| 1809 | #ifndef OPENSSL_NO_DYNAMIC_ENGINE | 1815 | #ifndef OPENSSL_NO_DYNAMIC_ENGINE |
| 1810 | OPENSSL_EXPORT | 1816 | OPENSSL_EXPORT |
| 1817 | int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); | ||
| 1818 | OPENSSL_EXPORT | ||
| 1811 | int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { return 0; } | 1819 | int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { return 0; } |
| 1812 | IMPLEMENT_DYNAMIC_CHECK_FN() | 1820 | IMPLEMENT_DYNAMIC_CHECK_FN() |
| 1813 | #else | 1821 | #else |
diff --git a/src/lib/libssl/src/engines/e_capi_err.h b/src/lib/libssl/src/engines/e_capi_err.h index 4c749ec43d..efa7001038 100644 --- a/src/lib/libssl/src/engines/e_capi_err.h +++ b/src/lib/libssl/src/engines/e_capi_err.h | |||
| @@ -55,6 +55,10 @@ | |||
| 55 | #ifndef HEADER_CAPI_ERR_H | 55 | #ifndef HEADER_CAPI_ERR_H |
| 56 | #define HEADER_CAPI_ERR_H | 56 | #define HEADER_CAPI_ERR_H |
| 57 | 57 | ||
| 58 | #ifdef __cplusplus | ||
| 59 | extern "C" { | ||
| 60 | #endif | ||
| 61 | |||
| 58 | /* BEGIN ERROR CODES */ | 62 | /* BEGIN ERROR CODES */ |
| 59 | /* The following lines are auto generated by the script mkerr.pl. Any changes | 63 | /* The following lines are auto generated by the script mkerr.pl. Any changes |
| 60 | * made after this point may be overwritten when the script is next run. | 64 | * made after this point may be overwritten when the script is next run. |
diff --git a/src/lib/libssl/src/engines/e_chil.c b/src/lib/libssl/src/engines/e_chil.c index 9c2729c96d..fdc2100e3d 100644 --- a/src/lib/libssl/src/engines/e_chil.c +++ b/src/lib/libssl/src/engines/e_chil.c | |||
| @@ -1077,11 +1077,11 @@ static int hwcrhk_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, | |||
| 1077 | static int hwcrhk_rsa_finish(RSA *rsa) | 1077 | static int hwcrhk_rsa_finish(RSA *rsa) |
| 1078 | { | 1078 | { |
| 1079 | HWCryptoHook_RSAKeyHandle *hptr; | 1079 | HWCryptoHook_RSAKeyHandle *hptr; |
| 1080 | int ret; | 1080 | |
| 1081 | hptr = RSA_get_ex_data(rsa, hndidx_rsa); | 1081 | hptr = RSA_get_ex_data(rsa, hndidx_rsa); |
| 1082 | if (hptr) | 1082 | if (hptr) |
| 1083 | { | 1083 | { |
| 1084 | ret = p_hwcrhk_RSAUnloadKey(*hptr, NULL); | 1084 | p_hwcrhk_RSAUnloadKey(*hptr, NULL); |
| 1085 | OPENSSL_free(hptr); | 1085 | OPENSSL_free(hptr); |
| 1086 | RSA_set_ex_data(rsa, hndidx_rsa, NULL); | 1086 | RSA_set_ex_data(rsa, hndidx_rsa, NULL); |
| 1087 | } | 1087 | } |
diff --git a/src/lib/libssl/src/engines/e_cswift.c b/src/lib/libssl/src/engines/e_cswift.c index bc65179846..2e64ff3277 100644 --- a/src/lib/libssl/src/engines/e_cswift.c +++ b/src/lib/libssl/src/engines/e_cswift.c | |||
| @@ -811,7 +811,6 @@ static DSA_SIG *cswift_dsa_sign(const unsigned char *dgst, int dlen, DSA *dsa) | |||
| 811 | SW_PARAM sw_param; | 811 | SW_PARAM sw_param; |
| 812 | SW_STATUS sw_status; | 812 | SW_STATUS sw_status; |
| 813 | SW_LARGENUMBER arg, res; | 813 | SW_LARGENUMBER arg, res; |
| 814 | unsigned char *ptr; | ||
| 815 | BN_CTX *ctx; | 814 | BN_CTX *ctx; |
| 816 | BIGNUM *dsa_p = NULL; | 815 | BIGNUM *dsa_p = NULL; |
| 817 | BIGNUM *dsa_q = NULL; | 816 | BIGNUM *dsa_q = NULL; |
| @@ -899,7 +898,6 @@ static DSA_SIG *cswift_dsa_sign(const unsigned char *dgst, int dlen, DSA *dsa) | |||
| 899 | goto err; | 898 | goto err; |
| 900 | } | 899 | } |
| 901 | /* Convert the response */ | 900 | /* Convert the response */ |
| 902 | ptr = (unsigned char *)result->d; | ||
| 903 | if((to_return = DSA_SIG_new()) == NULL) | 901 | if((to_return = DSA_SIG_new()) == NULL) |
| 904 | goto err; | 902 | goto err; |
| 905 | to_return->r = BN_bin2bn((unsigned char *)result->d, 20, NULL); | 903 | to_return->r = BN_bin2bn((unsigned char *)result->d, 20, NULL); |
diff --git a/src/lib/libssl/src/engines/e_gmp.c b/src/lib/libssl/src/engines/e_gmp.c index c1f5601b62..a3d47151ea 100644 --- a/src/lib/libssl/src/engines/e_gmp.c +++ b/src/lib/libssl/src/engines/e_gmp.c | |||
| @@ -471,6 +471,8 @@ static int bind_fn(ENGINE *e, const char *id) | |||
| 471 | IMPLEMENT_DYNAMIC_BIND_FN(bind_fn) | 471 | IMPLEMENT_DYNAMIC_BIND_FN(bind_fn) |
| 472 | #else | 472 | #else |
| 473 | OPENSSL_EXPORT | 473 | OPENSSL_EXPORT |
| 474 | int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); | ||
| 475 | OPENSSL_EXPORT | ||
| 474 | int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { return 0; } | 476 | int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { return 0; } |
| 475 | #endif | 477 | #endif |
| 476 | #endif /* !OPENSSL_NO_DYNAMIC_ENGINE */ | 478 | #endif /* !OPENSSL_NO_DYNAMIC_ENGINE */ |
diff --git a/src/lib/libssl/src/engines/e_padlock.c b/src/lib/libssl/src/engines/e_padlock.c index 381a746058..7d09419804 100644 --- a/src/lib/libssl/src/engines/e_padlock.c +++ b/src/lib/libssl/src/engines/e_padlock.c | |||
| @@ -108,6 +108,8 @@ static ENGINE *ENGINE_padlock (void); | |||
| 108 | # endif | 108 | # endif |
| 109 | #endif | 109 | #endif |
| 110 | 110 | ||
| 111 | #ifdef OPENSSL_NO_DYNAMIC_ENGINE | ||
| 112 | |||
| 111 | void ENGINE_load_padlock (void) | 113 | void ENGINE_load_padlock (void) |
| 112 | { | 114 | { |
| 113 | /* On non-x86 CPUs it just returns. */ | 115 | /* On non-x86 CPUs it just returns. */ |
| @@ -120,6 +122,8 @@ void ENGINE_load_padlock (void) | |||
| 120 | #endif | 122 | #endif |
| 121 | } | 123 | } |
| 122 | 124 | ||
| 125 | #endif | ||
| 126 | |||
| 123 | #ifdef COMPILE_HW_PADLOCK | 127 | #ifdef COMPILE_HW_PADLOCK |
| 124 | /* We do these includes here to avoid header problems on platforms that | 128 | /* We do these includes here to avoid header problems on platforms that |
| 125 | do not have the VIA padlock anyway... */ | 129 | do not have the VIA padlock anyway... */ |
| @@ -1218,6 +1222,8 @@ static RAND_METHOD padlock_rand = { | |||
| 1218 | #else /* !COMPILE_HW_PADLOCK */ | 1222 | #else /* !COMPILE_HW_PADLOCK */ |
| 1219 | #ifndef OPENSSL_NO_DYNAMIC_ENGINE | 1223 | #ifndef OPENSSL_NO_DYNAMIC_ENGINE |
| 1220 | OPENSSL_EXPORT | 1224 | OPENSSL_EXPORT |
| 1225 | int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); | ||
| 1226 | OPENSSL_EXPORT | ||
| 1221 | int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { return 0; } | 1227 | int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { return 0; } |
| 1222 | IMPLEMENT_DYNAMIC_CHECK_FN() | 1228 | IMPLEMENT_DYNAMIC_CHECK_FN() |
| 1223 | #endif | 1229 | #endif |
diff --git a/src/lib/libssl/src/engines/e_ubsec.c b/src/lib/libssl/src/engines/e_ubsec.c index 9b747b9aea..aa5709bd8c 100644 --- a/src/lib/libssl/src/engines/e_ubsec.c +++ b/src/lib/libssl/src/engines/e_ubsec.c | |||
| @@ -630,10 +630,8 @@ static int ubsec_mod_exp_crt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, | |||
| 630 | const BIGNUM *dq, const BIGNUM *qinv, BN_CTX *ctx) | 630 | const BIGNUM *dq, const BIGNUM *qinv, BN_CTX *ctx) |
| 631 | { | 631 | { |
| 632 | int y_len, | 632 | int y_len, |
| 633 | m_len, | ||
| 634 | fd; | 633 | fd; |
| 635 | 634 | ||
| 636 | m_len = BN_num_bytes(p) + BN_num_bytes(q) + 1; | ||
| 637 | y_len = BN_num_bits(p) + BN_num_bits(q); | 635 | y_len = BN_num_bits(p) + BN_num_bits(q); |
| 638 | 636 | ||
| 639 | /* Check if hardware can't handle this argument. */ | 637 | /* Check if hardware can't handle this argument. */ |
diff --git a/src/lib/libssl/src/ssl/d1_both.c b/src/lib/libssl/src/ssl/d1_both.c index 4ce4064cc9..2180c6d4da 100644 --- a/src/lib/libssl/src/ssl/d1_both.c +++ b/src/lib/libssl/src/ssl/d1_both.c | |||
| @@ -153,7 +153,7 @@ | |||
| 153 | #endif | 153 | #endif |
| 154 | 154 | ||
| 155 | static unsigned char bitmask_start_values[] = {0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80}; | 155 | static unsigned char bitmask_start_values[] = {0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80}; |
| 156 | static unsigned char bitmask_end_values[] = {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f}; | 156 | static unsigned char bitmask_end_values[] = {0xff, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f}; |
| 157 | 157 | ||
| 158 | /* XDTLS: figure out the right values */ | 158 | /* XDTLS: figure out the right values */ |
| 159 | static unsigned int g_probable_mtu[] = {1500 - 28, 512 - 28, 256 - 28}; | 159 | static unsigned int g_probable_mtu[] = {1500 - 28, 512 - 28, 256 - 28}; |
| @@ -464,20 +464,9 @@ again: | |||
| 464 | 464 | ||
| 465 | memset(msg_hdr, 0x00, sizeof(struct hm_header_st)); | 465 | memset(msg_hdr, 0x00, sizeof(struct hm_header_st)); |
| 466 | 466 | ||
| 467 | s->d1->handshake_read_seq++; | 467 | /* Don't change sequence numbers while listening */ |
| 468 | /* we just read a handshake message from the other side: | 468 | if (!s->d1->listen) |
| 469 | * this means that we don't need to retransmit of the | 469 | s->d1->handshake_read_seq++; |
| 470 | * buffered messages. | ||
| 471 | * XDTLS: may be able clear out this | ||
| 472 | * buffer a little sooner (i.e if an out-of-order | ||
| 473 | * handshake message/record is received at the record | ||
| 474 | * layer. | ||
| 475 | * XDTLS: exception is that the server needs to | ||
| 476 | * know that change cipher spec and finished messages | ||
| 477 | * have been received by the client before clearing this | ||
| 478 | * buffer. this can simply be done by waiting for the | ||
| 479 | * first data segment, but is there a better way? */ | ||
| 480 | dtls1_clear_record_buffer(s); | ||
| 481 | 470 | ||
| 482 | s->init_msg = s->init_buf->data + DTLS1_HM_HEADER_LENGTH; | 471 | s->init_msg = s->init_buf->data + DTLS1_HM_HEADER_LENGTH; |
| 483 | return s->init_num; | 472 | return s->init_num; |
| @@ -813,9 +802,11 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok) | |||
| 813 | 802 | ||
| 814 | /* | 803 | /* |
| 815 | * if this is a future (or stale) message it gets buffered | 804 | * if this is a future (or stale) message it gets buffered |
| 816 | * (or dropped)--no further processing at this time | 805 | * (or dropped)--no further processing at this time |
| 806 | * While listening, we accept seq 1 (ClientHello with cookie) | ||
| 807 | * although we're still expecting seq 0 (ClientHello) | ||
| 817 | */ | 808 | */ |
| 818 | if ( msg_hdr.seq != s->d1->handshake_read_seq) | 809 | if (msg_hdr.seq != s->d1->handshake_read_seq && !(s->d1->listen && msg_hdr.seq == 1)) |
| 819 | return dtls1_process_out_of_seq_message(s, &msg_hdr, ok); | 810 | return dtls1_process_out_of_seq_message(s, &msg_hdr, ok); |
| 820 | 811 | ||
| 821 | len = msg_hdr.msg_len; | 812 | len = msg_hdr.msg_len; |
| @@ -1322,7 +1313,8 @@ unsigned char * | |||
| 1322 | dtls1_set_message_header(SSL *s, unsigned char *p, unsigned char mt, | 1313 | dtls1_set_message_header(SSL *s, unsigned char *p, unsigned char mt, |
| 1323 | unsigned long len, unsigned long frag_off, unsigned long frag_len) | 1314 | unsigned long len, unsigned long frag_off, unsigned long frag_len) |
| 1324 | { | 1315 | { |
| 1325 | if ( frag_off == 0) | 1316 | /* Don't change sequence numbers while listening */ |
| 1317 | if (frag_off == 0 && !s->d1->listen) | ||
| 1326 | { | 1318 | { |
| 1327 | s->d1->handshake_write_seq = s->d1->next_handshake_write_seq; | 1319 | s->d1->handshake_write_seq = s->d1->next_handshake_write_seq; |
| 1328 | s->d1->next_handshake_write_seq++; | 1320 | s->d1->next_handshake_write_seq++; |
diff --git a/src/lib/libssl/src/ssl/d1_clnt.c b/src/lib/libssl/src/ssl/d1_clnt.c index 5bc9eb6603..089fa4c7f8 100644 --- a/src/lib/libssl/src/ssl/d1_clnt.c +++ b/src/lib/libssl/src/ssl/d1_clnt.c | |||
| @@ -407,7 +407,8 @@ int dtls1_connect(SSL *s) | |||
| 407 | 407 | ||
| 408 | case SSL3_ST_CW_CHANGE_A: | 408 | case SSL3_ST_CW_CHANGE_A: |
| 409 | case SSL3_ST_CW_CHANGE_B: | 409 | case SSL3_ST_CW_CHANGE_B: |
| 410 | dtls1_start_timer(s); | 410 | if (!s->hit) |
| 411 | dtls1_start_timer(s); | ||
| 411 | ret=dtls1_send_change_cipher_spec(s, | 412 | ret=dtls1_send_change_cipher_spec(s, |
| 412 | SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B); | 413 | SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B); |
| 413 | if (ret <= 0) goto end; | 414 | if (ret <= 0) goto end; |
| @@ -442,7 +443,8 @@ int dtls1_connect(SSL *s) | |||
| 442 | 443 | ||
| 443 | case SSL3_ST_CW_FINISHED_A: | 444 | case SSL3_ST_CW_FINISHED_A: |
| 444 | case SSL3_ST_CW_FINISHED_B: | 445 | case SSL3_ST_CW_FINISHED_B: |
| 445 | dtls1_start_timer(s); | 446 | if (!s->hit) |
| 447 | dtls1_start_timer(s); | ||
| 446 | ret=dtls1_send_finished(s, | 448 | ret=dtls1_send_finished(s, |
| 447 | SSL3_ST_CW_FINISHED_A,SSL3_ST_CW_FINISHED_B, | 449 | SSL3_ST_CW_FINISHED_A,SSL3_ST_CW_FINISHED_B, |
| 448 | s->method->ssl3_enc->client_finished_label, | 450 | s->method->ssl3_enc->client_finished_label, |
diff --git a/src/lib/libssl/src/ssl/d1_enc.c b/src/lib/libssl/src/ssl/d1_enc.c index 8fa57347a9..becbab91c2 100644 --- a/src/lib/libssl/src/ssl/d1_enc.c +++ b/src/lib/libssl/src/ssl/d1_enc.c | |||
| @@ -231,11 +231,7 @@ int dtls1_enc(SSL *s, int send) | |||
| 231 | if (!send) | 231 | if (!send) |
| 232 | { | 232 | { |
| 233 | if (l == 0 || l%bs != 0) | 233 | if (l == 0 || l%bs != 0) |
| 234 | { | 234 | return -1; |
| 235 | SSLerr(SSL_F_DTLS1_ENC,SSL_R_BLOCK_CIPHER_PAD_IS_WRONG); | ||
| 236 | ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_DECRYPTION_FAILED); | ||
| 237 | return 0; | ||
| 238 | } | ||
| 239 | } | 235 | } |
| 240 | 236 | ||
| 241 | EVP_Cipher(ds,rec->data,rec->input,l); | 237 | EVP_Cipher(ds,rec->data,rec->input,l); |
diff --git a/src/lib/libssl/src/ssl/d1_lib.c b/src/lib/libssl/src/ssl/d1_lib.c index 96b220e87c..48e8b6ffbb 100644 --- a/src/lib/libssl/src/ssl/d1_lib.c +++ b/src/lib/libssl/src/ssl/d1_lib.c | |||
| @@ -129,26 +129,33 @@ int dtls1_new(SSL *s) | |||
| 129 | return(1); | 129 | return(1); |
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | void dtls1_free(SSL *s) | 132 | static void dtls1_clear_queues(SSL *s) |
| 133 | { | 133 | { |
| 134 | pitem *item = NULL; | 134 | pitem *item = NULL; |
| 135 | hm_fragment *frag = NULL; | 135 | hm_fragment *frag = NULL; |
| 136 | 136 | DTLS1_RECORD_DATA *rdata; | |
| 137 | ssl3_free(s); | ||
| 138 | 137 | ||
| 139 | while( (item = pqueue_pop(s->d1->unprocessed_rcds.q)) != NULL) | 138 | while( (item = pqueue_pop(s->d1->unprocessed_rcds.q)) != NULL) |
| 140 | { | 139 | { |
| 140 | rdata = (DTLS1_RECORD_DATA *) item->data; | ||
| 141 | if (rdata->rbuf.buf) | ||
| 142 | { | ||
| 143 | OPENSSL_free(rdata->rbuf.buf); | ||
| 144 | } | ||
| 141 | OPENSSL_free(item->data); | 145 | OPENSSL_free(item->data); |
| 142 | pitem_free(item); | 146 | pitem_free(item); |
| 143 | } | 147 | } |
| 144 | pqueue_free(s->d1->unprocessed_rcds.q); | ||
| 145 | 148 | ||
| 146 | while( (item = pqueue_pop(s->d1->processed_rcds.q)) != NULL) | 149 | while( (item = pqueue_pop(s->d1->processed_rcds.q)) != NULL) |
| 147 | { | 150 | { |
| 151 | rdata = (DTLS1_RECORD_DATA *) item->data; | ||
| 152 | if (rdata->rbuf.buf) | ||
| 153 | { | ||
| 154 | OPENSSL_free(rdata->rbuf.buf); | ||
| 155 | } | ||
| 148 | OPENSSL_free(item->data); | 156 | OPENSSL_free(item->data); |
| 149 | pitem_free(item); | 157 | pitem_free(item); |
| 150 | } | 158 | } |
| 151 | pqueue_free(s->d1->processed_rcds.q); | ||
| 152 | 159 | ||
| 153 | while( (item = pqueue_pop(s->d1->buffered_messages)) != NULL) | 160 | while( (item = pqueue_pop(s->d1->buffered_messages)) != NULL) |
| 154 | { | 161 | { |
| @@ -157,7 +164,6 @@ void dtls1_free(SSL *s) | |||
| 157 | OPENSSL_free(frag); | 164 | OPENSSL_free(frag); |
| 158 | pitem_free(item); | 165 | pitem_free(item); |
| 159 | } | 166 | } |
| 160 | pqueue_free(s->d1->buffered_messages); | ||
| 161 | 167 | ||
| 162 | while ( (item = pqueue_pop(s->d1->sent_messages)) != NULL) | 168 | while ( (item = pqueue_pop(s->d1->sent_messages)) != NULL) |
| 163 | { | 169 | { |
| @@ -166,7 +172,6 @@ void dtls1_free(SSL *s) | |||
| 166 | OPENSSL_free(frag); | 172 | OPENSSL_free(frag); |
| 167 | pitem_free(item); | 173 | pitem_free(item); |
| 168 | } | 174 | } |
| 169 | pqueue_free(s->d1->sent_messages); | ||
| 170 | 175 | ||
| 171 | while ( (item = pqueue_pop(s->d1->buffered_app_data.q)) != NULL) | 176 | while ( (item = pqueue_pop(s->d1->buffered_app_data.q)) != NULL) |
| 172 | { | 177 | { |
| @@ -175,6 +180,18 @@ void dtls1_free(SSL *s) | |||
| 175 | OPENSSL_free(frag); | 180 | OPENSSL_free(frag); |
| 176 | pitem_free(item); | 181 | pitem_free(item); |
| 177 | } | 182 | } |
| 183 | } | ||
| 184 | |||
| 185 | void dtls1_free(SSL *s) | ||
| 186 | { | ||
| 187 | ssl3_free(s); | ||
| 188 | |||
| 189 | dtls1_clear_queues(s); | ||
| 190 | |||
| 191 | pqueue_free(s->d1->unprocessed_rcds.q); | ||
| 192 | pqueue_free(s->d1->processed_rcds.q); | ||
| 193 | pqueue_free(s->d1->buffered_messages); | ||
| 194 | pqueue_free(s->d1->sent_messages); | ||
| 178 | pqueue_free(s->d1->buffered_app_data.q); | 195 | pqueue_free(s->d1->buffered_app_data.q); |
| 179 | 196 | ||
| 180 | OPENSSL_free(s->d1); | 197 | OPENSSL_free(s->d1); |
| @@ -182,6 +199,36 @@ void dtls1_free(SSL *s) | |||
| 182 | 199 | ||
| 183 | void dtls1_clear(SSL *s) | 200 | void dtls1_clear(SSL *s) |
| 184 | { | 201 | { |
| 202 | pqueue unprocessed_rcds; | ||
| 203 | pqueue processed_rcds; | ||
| 204 | pqueue buffered_messages; | ||
| 205 | pqueue sent_messages; | ||
| 206 | pqueue buffered_app_data; | ||
| 207 | |||
| 208 | if (s->d1) | ||
| 209 | { | ||
| 210 | unprocessed_rcds = s->d1->unprocessed_rcds.q; | ||
| 211 | processed_rcds = s->d1->processed_rcds.q; | ||
| 212 | buffered_messages = s->d1->buffered_messages; | ||
| 213 | sent_messages = s->d1->sent_messages; | ||
| 214 | buffered_app_data = s->d1->buffered_app_data.q; | ||
| 215 | |||
| 216 | dtls1_clear_queues(s); | ||
| 217 | |||
| 218 | memset(s->d1, 0, sizeof(*(s->d1))); | ||
| 219 | |||
| 220 | if (s->server) | ||
| 221 | { | ||
| 222 | s->d1->cookie_len = sizeof(s->d1->cookie); | ||
| 223 | } | ||
| 224 | |||
| 225 | s->d1->unprocessed_rcds.q = unprocessed_rcds; | ||
| 226 | s->d1->processed_rcds.q = processed_rcds; | ||
| 227 | s->d1->buffered_messages = buffered_messages; | ||
| 228 | s->d1->sent_messages = sent_messages; | ||
| 229 | s->d1->buffered_app_data.q = buffered_app_data; | ||
| 230 | } | ||
| 231 | |||
| 185 | ssl3_clear(s); | 232 | ssl3_clear(s); |
| 186 | if (s->options & SSL_OP_CISCO_ANYCONNECT) | 233 | if (s->options & SSL_OP_CISCO_ANYCONNECT) |
| 187 | s->version=DTLS1_BAD_VER; | 234 | s->version=DTLS1_BAD_VER; |
| @@ -330,6 +377,8 @@ void dtls1_stop_timer(SSL *s) | |||
| 330 | memset(&(s->d1->next_timeout), 0, sizeof(struct timeval)); | 377 | memset(&(s->d1->next_timeout), 0, sizeof(struct timeval)); |
| 331 | s->d1->timeout_duration = 1; | 378 | s->d1->timeout_duration = 1; |
| 332 | BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0, &(s->d1->next_timeout)); | 379 | BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0, &(s->d1->next_timeout)); |
| 380 | /* Clear retransmission buffer */ | ||
| 381 | dtls1_clear_record_buffer(s); | ||
| 333 | } | 382 | } |
| 334 | 383 | ||
| 335 | int dtls1_handle_timeout(SSL *s) | 384 | int dtls1_handle_timeout(SSL *s) |
| @@ -349,7 +398,7 @@ int dtls1_handle_timeout(SSL *s) | |||
| 349 | { | 398 | { |
| 350 | /* fail the connection, enough alerts have been sent */ | 399 | /* fail the connection, enough alerts have been sent */ |
| 351 | SSLerr(SSL_F_DTLS1_HANDLE_TIMEOUT,SSL_R_READ_TIMEOUT_EXPIRED); | 400 | SSLerr(SSL_F_DTLS1_HANDLE_TIMEOUT,SSL_R_READ_TIMEOUT_EXPIRED); |
| 352 | return 0; | 401 | return -1; |
| 353 | } | 402 | } |
| 354 | 403 | ||
| 355 | state->timeout.read_timeouts++; | 404 | state->timeout.read_timeouts++; |
diff --git a/src/lib/libssl/src/ssl/d1_pkt.c b/src/lib/libssl/src/ssl/d1_pkt.c index a5439d544f..39aac73e10 100644 --- a/src/lib/libssl/src/ssl/d1_pkt.c +++ b/src/lib/libssl/src/ssl/d1_pkt.c | |||
| @@ -296,9 +296,6 @@ dtls1_process_buffered_records(SSL *s) | |||
| 296 | item = pqueue_peek(s->d1->unprocessed_rcds.q); | 296 | item = pqueue_peek(s->d1->unprocessed_rcds.q); |
| 297 | if (item) | 297 | if (item) |
| 298 | { | 298 | { |
| 299 | DTLS1_RECORD_DATA *rdata; | ||
| 300 | rdata = (DTLS1_RECORD_DATA *)item->data; | ||
| 301 | |||
| 302 | /* Check if epoch is current. */ | 299 | /* Check if epoch is current. */ |
| 303 | if (s->d1->unprocessed_rcds.epoch != s->d1->r_epoch) | 300 | if (s->d1->unprocessed_rcds.epoch != s->d1->r_epoch) |
| 304 | return(1); /* Nothing to do. */ | 301 | return(1); /* Nothing to do. */ |
| @@ -412,11 +409,12 @@ dtls1_process_record(SSL *s) | |||
| 412 | enc_err = s->method->ssl3_enc->enc(s,0); | 409 | enc_err = s->method->ssl3_enc->enc(s,0); |
| 413 | if (enc_err <= 0) | 410 | if (enc_err <= 0) |
| 414 | { | 411 | { |
| 415 | if (enc_err == 0) | 412 | /* decryption failed, silently discard message */ |
| 416 | /* SSLerr() and ssl3_send_alert() have been called */ | 413 | if (enc_err < 0) |
| 417 | goto err; | 414 | { |
| 418 | 415 | rr->length = 0; | |
| 419 | /* otherwise enc_err == -1 */ | 416 | s->packet_length = 0; |
| 417 | } | ||
| 420 | goto err; | 418 | goto err; |
| 421 | } | 419 | } |
| 422 | 420 | ||
| @@ -528,14 +526,12 @@ int dtls1_get_record(SSL *s) | |||
| 528 | int ssl_major,ssl_minor; | 526 | int ssl_major,ssl_minor; |
| 529 | int i,n; | 527 | int i,n; |
| 530 | SSL3_RECORD *rr; | 528 | SSL3_RECORD *rr; |
| 531 | SSL_SESSION *sess; | ||
| 532 | unsigned char *p = NULL; | 529 | unsigned char *p = NULL; |
| 533 | unsigned short version; | 530 | unsigned short version; |
| 534 | DTLS1_BITMAP *bitmap; | 531 | DTLS1_BITMAP *bitmap; |
| 535 | unsigned int is_next_epoch; | 532 | unsigned int is_next_epoch; |
| 536 | 533 | ||
| 537 | rr= &(s->s3->rrec); | 534 | rr= &(s->s3->rrec); |
| 538 | sess=s->session; | ||
| 539 | 535 | ||
| 540 | /* The epoch may have changed. If so, process all the | 536 | /* The epoch may have changed. If so, process all the |
| 541 | * pending records. This is a non-blocking operation. */ | 537 | * pending records. This is a non-blocking operation. */ |
| @@ -662,10 +658,12 @@ again: | |||
| 662 | 658 | ||
| 663 | /* If this record is from the next epoch (either HM or ALERT), | 659 | /* If this record is from the next epoch (either HM or ALERT), |
| 664 | * and a handshake is currently in progress, buffer it since it | 660 | * and a handshake is currently in progress, buffer it since it |
| 665 | * cannot be processed at this time. */ | 661 | * cannot be processed at this time. However, do not buffer |
| 662 | * anything while listening. | ||
| 663 | */ | ||
| 666 | if (is_next_epoch) | 664 | if (is_next_epoch) |
| 667 | { | 665 | { |
| 668 | if (SSL_in_init(s) || s->in_handshake) | 666 | if ((SSL_in_init(s) || s->in_handshake) && !s->d1->listen) |
| 669 | { | 667 | { |
| 670 | dtls1_buffer_record(s, &(s->d1->unprocessed_rcds), rr->seq_num); | 668 | dtls1_buffer_record(s, &(s->d1->unprocessed_rcds), rr->seq_num); |
| 671 | } | 669 | } |
diff --git a/src/lib/libssl/src/ssl/d1_srvr.c b/src/lib/libssl/src/ssl/d1_srvr.c index 301ceda7a5..a6a4c87ea6 100644 --- a/src/lib/libssl/src/ssl/d1_srvr.c +++ b/src/lib/libssl/src/ssl/d1_srvr.c | |||
| @@ -150,6 +150,7 @@ int dtls1_accept(SSL *s) | |||
| 150 | unsigned long alg_k; | 150 | unsigned long alg_k; |
| 151 | int ret= -1; | 151 | int ret= -1; |
| 152 | int new_state,state,skip=0; | 152 | int new_state,state,skip=0; |
| 153 | int listen; | ||
| 153 | 154 | ||
| 154 | RAND_add(&Time,sizeof(Time),0); | 155 | RAND_add(&Time,sizeof(Time),0); |
| 155 | ERR_clear_error(); | 156 | ERR_clear_error(); |
| @@ -159,11 +160,15 @@ int dtls1_accept(SSL *s) | |||
| 159 | cb=s->info_callback; | 160 | cb=s->info_callback; |
| 160 | else if (s->ctx->info_callback != NULL) | 161 | else if (s->ctx->info_callback != NULL) |
| 161 | cb=s->ctx->info_callback; | 162 | cb=s->ctx->info_callback; |
| 163 | |||
| 164 | listen = s->d1->listen; | ||
| 162 | 165 | ||
| 163 | /* init things to blank */ | 166 | /* init things to blank */ |
| 164 | s->in_handshake++; | 167 | s->in_handshake++; |
| 165 | if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); | 168 | if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); |
| 166 | 169 | ||
| 170 | s->d1->listen = listen; | ||
| 171 | |||
| 167 | if (s->cert == NULL) | 172 | if (s->cert == NULL) |
| 168 | { | 173 | { |
| 169 | SSLerr(SSL_F_DTLS1_ACCEPT,SSL_R_NO_CERTIFICATE_SET); | 174 | SSLerr(SSL_F_DTLS1_ACCEPT,SSL_R_NO_CERTIFICATE_SET); |
| @@ -273,11 +278,23 @@ int dtls1_accept(SSL *s) | |||
| 273 | 278 | ||
| 274 | s->init_num=0; | 279 | s->init_num=0; |
| 275 | 280 | ||
| 281 | /* Reflect ClientHello sequence to remain stateless while listening */ | ||
| 282 | if (listen) | ||
| 283 | { | ||
| 284 | memcpy(s->s3->write_sequence, s->s3->read_sequence, sizeof(s->s3->write_sequence)); | ||
| 285 | } | ||
| 286 | |||
| 276 | /* If we're just listening, stop here */ | 287 | /* If we're just listening, stop here */ |
| 277 | if (s->d1->listen && s->state == SSL3_ST_SW_SRVR_HELLO_A) | 288 | if (listen && s->state == SSL3_ST_SW_SRVR_HELLO_A) |
| 278 | { | 289 | { |
| 279 | ret = 2; | 290 | ret = 2; |
| 280 | s->d1->listen = 0; | 291 | s->d1->listen = 0; |
| 292 | /* Set expected sequence numbers | ||
| 293 | * to continue the handshake. | ||
| 294 | */ | ||
| 295 | s->d1->handshake_read_seq = 2; | ||
| 296 | s->d1->handshake_write_seq = 1; | ||
| 297 | s->d1->next_handshake_write_seq = 1; | ||
| 281 | goto end; | 298 | goto end; |
| 282 | } | 299 | } |
| 283 | 300 | ||
| @@ -286,7 +303,6 @@ int dtls1_accept(SSL *s) | |||
| 286 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: | 303 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: |
| 287 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: | 304 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: |
| 288 | 305 | ||
| 289 | dtls1_start_timer(s); | ||
| 290 | ret = dtls1_send_hello_verify_request(s); | 306 | ret = dtls1_send_hello_verify_request(s); |
| 291 | if ( ret <= 0) goto end; | 307 | if ( ret <= 0) goto end; |
| 292 | s->state=SSL3_ST_SW_FLUSH; | 308 | s->state=SSL3_ST_SW_FLUSH; |
| @@ -736,9 +752,6 @@ int dtls1_send_hello_verify_request(SSL *s) | |||
| 736 | /* number of bytes to write */ | 752 | /* number of bytes to write */ |
| 737 | s->init_num=p-buf; | 753 | s->init_num=p-buf; |
| 738 | s->init_off=0; | 754 | s->init_off=0; |
| 739 | |||
| 740 | /* buffer the message to handle re-xmits */ | ||
| 741 | dtls1_buffer_message(s, 0); | ||
| 742 | } | 755 | } |
| 743 | 756 | ||
| 744 | /* s->state = DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B */ | 757 | /* s->state = DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B */ |
| @@ -1017,12 +1030,11 @@ int dtls1_send_server_key_exchange(SSL *s) | |||
| 1017 | SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,ERR_R_ECDH_LIB); | 1030 | SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,ERR_R_ECDH_LIB); |
| 1018 | goto err; | 1031 | goto err; |
| 1019 | } | 1032 | } |
| 1020 | if (!EC_KEY_up_ref(ecdhp)) | 1033 | if ((ecdh = EC_KEY_dup(ecdhp)) == NULL) |
| 1021 | { | 1034 | { |
| 1022 | SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,ERR_R_ECDH_LIB); | 1035 | SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,ERR_R_ECDH_LIB); |
| 1023 | goto err; | 1036 | goto err; |
| 1024 | } | 1037 | } |
| 1025 | ecdh = ecdhp; | ||
| 1026 | 1038 | ||
| 1027 | s->s3->tmp.ecdh=ecdh; | 1039 | s->s3->tmp.ecdh=ecdh; |
| 1028 | if ((EC_KEY_get0_public_key(ecdh) == NULL) || | 1040 | if ((EC_KEY_get0_public_key(ecdh) == NULL) || |
diff --git a/src/lib/libssl/src/test/cms-test.pl b/src/lib/libssl/src/test/cms-test.pl index 9c50dff3e9..c938bcf00d 100644 --- a/src/lib/libssl/src/test/cms-test.pl +++ b/src/lib/libssl/src/test/cms-test.pl | |||
| @@ -54,9 +54,13 @@ | |||
| 54 | # OpenSSL PKCS#7 and CMS implementations. | 54 | # OpenSSL PKCS#7 and CMS implementations. |
| 55 | 55 | ||
| 56 | my $ossl_path; | 56 | my $ossl_path; |
| 57 | my $redir = " 2>cms.err 1>cms.out"; | 57 | my $redir = " 2> cms.err > cms.out"; |
| 58 | # Make VMS work | ||
| 59 | if ( $^O eq "VMS" && -f "OSSLX:openssl.exe" ) { | ||
| 60 | $ossl_path = "pipe mcr OSSLX:openssl"; | ||
| 61 | } | ||
| 58 | # Make MSYS work | 62 | # Make MSYS work |
| 59 | if ( $^O eq "MSWin32" && -f "../apps/openssl.exe" ) { | 63 | elsif ( $^O eq "MSWin32" && -f "../apps/openssl.exe" ) { |
| 60 | $ossl_path = "cmd /c ..\\apps\\openssl"; | 64 | $ossl_path = "cmd /c ..\\apps\\openssl"; |
| 61 | } | 65 | } |
| 62 | elsif ( -f "../apps/openssl$ENV{EXE_EXT}" ) { | 66 | elsif ( -f "../apps/openssl$ENV{EXE_EXT}" ) { |
| @@ -84,79 +88,79 @@ my @smime_pkcs7_tests = ( | |||
| 84 | 88 | ||
| 85 | [ | 89 | [ |
| 86 | "signed content DER format, RSA key", | 90 | "signed content DER format, RSA key", |
| 87 | "-sign -in smcont.txt -outform DER -nodetach" | 91 | "-sign -in smcont.txt -outform \"DER\" -nodetach" |
| 88 | . " -certfile $smdir/smroot.pem" | 92 | . " -certfile $smdir/smroot.pem" |
| 89 | . " -signer $smdir/smrsa1.pem -out test.cms", | 93 | . " -signer $smdir/smrsa1.pem -out test.cms", |
| 90 | "-verify -in test.cms -inform DER " | 94 | "-verify -in test.cms -inform \"DER\" " |
| 91 | . " -CAfile $smdir/smroot.pem -out smtst.txt" | 95 | . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt" |
| 92 | ], | 96 | ], |
| 93 | 97 | ||
| 94 | [ | 98 | [ |
| 95 | "signed detached content DER format, RSA key", | 99 | "signed detached content DER format, RSA key", |
| 96 | "-sign -in smcont.txt -outform DER" | 100 | "-sign -in smcont.txt -outform \"DER\"" |
| 97 | . " -signer $smdir/smrsa1.pem -out test.cms", | 101 | . " -signer $smdir/smrsa1.pem -out test.cms", |
| 98 | "-verify -in test.cms -inform DER " | 102 | "-verify -in test.cms -inform \"DER\" " |
| 99 | . " -CAfile $smdir/smroot.pem -out smtst.txt -content smcont.txt" | 103 | . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt -content smcont.txt" |
| 100 | ], | 104 | ], |
| 101 | 105 | ||
| 102 | [ | 106 | [ |
| 103 | "signed content test streaming BER format, RSA", | 107 | "signed content test streaming BER format, RSA", |
| 104 | "-sign -in smcont.txt -outform DER -nodetach" | 108 | "-sign -in smcont.txt -outform \"DER\" -nodetach" |
| 105 | . " -stream -signer $smdir/smrsa1.pem -out test.cms", | 109 | . " -stream -signer $smdir/smrsa1.pem -out test.cms", |
| 106 | "-verify -in test.cms -inform DER " | 110 | "-verify -in test.cms -inform \"DER\" " |
| 107 | . " -CAfile $smdir/smroot.pem -out smtst.txt" | 111 | . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt" |
| 108 | ], | 112 | ], |
| 109 | 113 | ||
| 110 | [ | 114 | [ |
| 111 | "signed content DER format, DSA key", | 115 | "signed content DER format, DSA key", |
| 112 | "-sign -in smcont.txt -outform DER -nodetach" | 116 | "-sign -in smcont.txt -outform \"DER\" -nodetach" |
| 113 | . " -signer $smdir/smdsa1.pem -out test.cms", | 117 | . " -signer $smdir/smdsa1.pem -out test.cms", |
| 114 | "-verify -in test.cms -inform DER " | 118 | "-verify -in test.cms -inform \"DER\" " |
| 115 | . " -CAfile $smdir/smroot.pem -out smtst.txt" | 119 | . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt" |
| 116 | ], | 120 | ], |
| 117 | 121 | ||
| 118 | [ | 122 | [ |
| 119 | "signed detached content DER format, DSA key", | 123 | "signed detached content DER format, DSA key", |
| 120 | "-sign -in smcont.txt -outform DER" | 124 | "-sign -in smcont.txt -outform \"DER\"" |
| 121 | . " -signer $smdir/smdsa1.pem -out test.cms", | 125 | . " -signer $smdir/smdsa1.pem -out test.cms", |
| 122 | "-verify -in test.cms -inform DER " | 126 | "-verify -in test.cms -inform \"DER\" " |
| 123 | . " -CAfile $smdir/smroot.pem -out smtst.txt -content smcont.txt" | 127 | . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt -content smcont.txt" |
| 124 | ], | 128 | ], |
| 125 | 129 | ||
| 126 | [ | 130 | [ |
| 127 | "signed detached content DER format, add RSA signer", | 131 | "signed detached content DER format, add RSA signer", |
| 128 | "-resign -inform DER -in test.cms -outform DER" | 132 | "-resign -inform \"DER\" -in test.cms -outform \"DER\"" |
| 129 | . " -signer $smdir/smrsa1.pem -out test2.cms", | 133 | . " -signer $smdir/smrsa1.pem -out test2.cms", |
| 130 | "-verify -in test2.cms -inform DER " | 134 | "-verify -in test2.cms -inform \"DER\" " |
| 131 | . " -CAfile $smdir/smroot.pem -out smtst.txt -content smcont.txt" | 135 | . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt -content smcont.txt" |
| 132 | ], | 136 | ], |
| 133 | 137 | ||
| 134 | [ | 138 | [ |
| 135 | "signed content test streaming BER format, DSA key", | 139 | "signed content test streaming BER format, DSA key", |
| 136 | "-sign -in smcont.txt -outform DER -nodetach" | 140 | "-sign -in smcont.txt -outform \"DER\" -nodetach" |
| 137 | . " -stream -signer $smdir/smdsa1.pem -out test.cms", | 141 | . " -stream -signer $smdir/smdsa1.pem -out test.cms", |
| 138 | "-verify -in test.cms -inform DER " | 142 | "-verify -in test.cms -inform \"DER\" " |
| 139 | . " -CAfile $smdir/smroot.pem -out smtst.txt" | 143 | . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt" |
| 140 | ], | 144 | ], |
| 141 | 145 | ||
| 142 | [ | 146 | [ |
| 143 | "signed content test streaming BER format, 2 DSA and 2 RSA keys", | 147 | "signed content test streaming BER format, 2 DSA and 2 RSA keys", |
| 144 | "-sign -in smcont.txt -outform DER -nodetach" | 148 | "-sign -in smcont.txt -outform \"DER\" -nodetach" |
| 145 | . " -signer $smdir/smrsa1.pem -signer $smdir/smrsa2.pem" | 149 | . " -signer $smdir/smrsa1.pem -signer $smdir/smrsa2.pem" |
| 146 | . " -signer $smdir/smdsa1.pem -signer $smdir/smdsa2.pem" | 150 | . " -signer $smdir/smdsa1.pem -signer $smdir/smdsa2.pem" |
| 147 | . " -stream -out test.cms", | 151 | . " -stream -out test.cms", |
| 148 | "-verify -in test.cms -inform DER " | 152 | "-verify -in test.cms -inform \"DER\" " |
| 149 | . " -CAfile $smdir/smroot.pem -out smtst.txt" | 153 | . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt" |
| 150 | ], | 154 | ], |
| 151 | 155 | ||
| 152 | [ | 156 | [ |
| 153 | "signed content test streaming BER format, 2 DSA and 2 RSA keys, no attributes", | 157 | "signed content test streaming BER format, 2 DSA and 2 RSA keys, no attributes", |
| 154 | "-sign -in smcont.txt -outform DER -noattr -nodetach" | 158 | "-sign -in smcont.txt -outform \"DER\" -noattr -nodetach" |
| 155 | . " -signer $smdir/smrsa1.pem -signer $smdir/smrsa2.pem" | 159 | . " -signer $smdir/smrsa1.pem -signer $smdir/smrsa2.pem" |
| 156 | . " -signer $smdir/smdsa1.pem -signer $smdir/smdsa2.pem" | 160 | . " -signer $smdir/smdsa1.pem -signer $smdir/smdsa2.pem" |
| 157 | . " -stream -out test.cms", | 161 | . " -stream -out test.cms", |
| 158 | "-verify -in test.cms -inform DER " | 162 | "-verify -in test.cms -inform \"DER\" " |
| 159 | . " -CAfile $smdir/smroot.pem -out smtst.txt" | 163 | . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt" |
| 160 | ], | 164 | ], |
| 161 | 165 | ||
| 162 | [ | 166 | [ |
| @@ -165,7 +169,7 @@ my @smime_pkcs7_tests = ( | |||
| 165 | . " -signer $smdir/smrsa1.pem -signer $smdir/smrsa2.pem" | 169 | . " -signer $smdir/smrsa1.pem -signer $smdir/smrsa2.pem" |
| 166 | . " -signer $smdir/smdsa1.pem -signer $smdir/smdsa2.pem" | 170 | . " -signer $smdir/smdsa1.pem -signer $smdir/smdsa2.pem" |
| 167 | . " -stream -out test.cms", | 171 | . " -stream -out test.cms", |
| 168 | "-verify -in test.cms " . " -CAfile $smdir/smroot.pem -out smtst.txt" | 172 | "-verify -in test.cms " . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt" |
| 169 | ], | 173 | ], |
| 170 | 174 | ||
| 171 | [ | 175 | [ |
| @@ -174,7 +178,7 @@ my @smime_pkcs7_tests = ( | |||
| 174 | . " -signer $smdir/smrsa1.pem -signer $smdir/smrsa2.pem" | 178 | . " -signer $smdir/smrsa1.pem -signer $smdir/smrsa2.pem" |
| 175 | . " -signer $smdir/smdsa1.pem -signer $smdir/smdsa2.pem" | 179 | . " -signer $smdir/smdsa1.pem -signer $smdir/smdsa2.pem" |
| 176 | . " -stream -out test.cms", | 180 | . " -stream -out test.cms", |
| 177 | "-verify -in test.cms " . " -CAfile $smdir/smroot.pem -out smtst.txt" | 181 | "-verify -in test.cms " . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt" |
| 178 | ], | 182 | ], |
| 179 | 183 | ||
| 180 | [ | 184 | [ |
| @@ -215,12 +219,12 @@ my @smime_cms_tests = ( | |||
| 215 | 219 | ||
| 216 | [ | 220 | [ |
| 217 | "signed content test streaming BER format, 2 DSA and 2 RSA keys, keyid", | 221 | "signed content test streaming BER format, 2 DSA and 2 RSA keys, keyid", |
| 218 | "-sign -in smcont.txt -outform DER -nodetach -keyid" | 222 | "-sign -in smcont.txt -outform \"DER\" -nodetach -keyid" |
| 219 | . " -signer $smdir/smrsa1.pem -signer $smdir/smrsa2.pem" | 223 | . " -signer $smdir/smrsa1.pem -signer $smdir/smrsa2.pem" |
| 220 | . " -signer $smdir/smdsa1.pem -signer $smdir/smdsa2.pem" | 224 | . " -signer $smdir/smdsa1.pem -signer $smdir/smdsa2.pem" |
| 221 | . " -stream -out test.cms", | 225 | . " -stream -out test.cms", |
| 222 | "-verify -in test.cms -inform DER " | 226 | "-verify -in test.cms -inform \"DER\" " |
| 223 | . " -CAfile $smdir/smroot.pem -out smtst.txt" | 227 | . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt" |
| 224 | ], | 228 | ], |
| 225 | 229 | ||
| 226 | [ | 230 | [ |
| @@ -230,7 +234,7 @@ my @smime_cms_tests = ( | |||
| 230 | . " -signer $smdir/smdsa1.pem -signer $smdir/smdsa2.pem" | 234 | . " -signer $smdir/smdsa1.pem -signer $smdir/smdsa2.pem" |
| 231 | . " -stream -out test.cms", | 235 | . " -stream -out test.cms", |
| 232 | "-verify -in test.cms -inform PEM " | 236 | "-verify -in test.cms -inform PEM " |
| 233 | . " -CAfile $smdir/smroot.pem -out smtst.txt" | 237 | . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt" |
| 234 | ], | 238 | ], |
| 235 | 239 | ||
| 236 | [ | 240 | [ |
| @@ -239,7 +243,7 @@ my @smime_cms_tests = ( | |||
| 239 | . " -receipt_request_to test\@openssl.org -receipt_request_all" | 243 | . " -receipt_request_to test\@openssl.org -receipt_request_all" |
| 240 | . " -out test.cms", | 244 | . " -out test.cms", |
| 241 | "-verify -in test.cms " | 245 | "-verify -in test.cms " |
| 242 | . " -CAfile $smdir/smroot.pem -out smtst.txt" | 246 | . " \"-CAfile\" $smdir/smroot.pem -out smtst.txt" |
| 243 | ], | 247 | ], |
| 244 | 248 | ||
| 245 | [ | 249 | [ |
| @@ -248,7 +252,7 @@ my @smime_cms_tests = ( | |||
| 248 | . " -signer $smdir/smrsa2.pem" | 252 | . " -signer $smdir/smrsa2.pem" |
| 249 | . " -out test2.cms", | 253 | . " -out test2.cms", |
| 250 | "-verify_receipt test2.cms -in test.cms" | 254 | "-verify_receipt test2.cms -in test.cms" |
| 251 | . " -CAfile $smdir/smroot.pem" | 255 | . " \"-CAfile\" $smdir/smroot.pem" |
| 252 | ], | 256 | ], |
| 253 | 257 | ||
| 254 | [ | 258 | [ |
| @@ -289,38 +293,38 @@ my @smime_cms_tests = ( | |||
| 289 | 293 | ||
| 290 | [ | 294 | [ |
| 291 | "encrypted content test streaming PEM format, 128 bit RC2 key", | 295 | "encrypted content test streaming PEM format, 128 bit RC2 key", |
| 292 | "-EncryptedData_encrypt -in smcont.txt -outform PEM" | 296 | "\"-EncryptedData_encrypt\" -in smcont.txt -outform PEM" |
| 293 | . " -rc2 -secretkey 000102030405060708090A0B0C0D0E0F" | 297 | . " -rc2 -secretkey 000102030405060708090A0B0C0D0E0F" |
| 294 | . " -stream -out test.cms", | 298 | . " -stream -out test.cms", |
| 295 | "-EncryptedData_decrypt -in test.cms -inform PEM " | 299 | "\"-EncryptedData_decrypt\" -in test.cms -inform PEM " |
| 296 | . " -secretkey 000102030405060708090A0B0C0D0E0F -out smtst.txt" | 300 | . " -secretkey 000102030405060708090A0B0C0D0E0F -out smtst.txt" |
| 297 | ], | 301 | ], |
| 298 | 302 | ||
| 299 | [ | 303 | [ |
| 300 | "encrypted content test streaming PEM format, 40 bit RC2 key", | 304 | "encrypted content test streaming PEM format, 40 bit RC2 key", |
| 301 | "-EncryptedData_encrypt -in smcont.txt -outform PEM" | 305 | "\"-EncryptedData_encrypt\" -in smcont.txt -outform PEM" |
| 302 | . " -rc2 -secretkey 0001020304" | 306 | . " -rc2 -secretkey 0001020304" |
| 303 | . " -stream -out test.cms", | 307 | . " -stream -out test.cms", |
| 304 | "-EncryptedData_decrypt -in test.cms -inform PEM " | 308 | "\"-EncryptedData_decrypt\" -in test.cms -inform PEM " |
| 305 | . " -secretkey 0001020304 -out smtst.txt" | 309 | . " -secretkey 0001020304 -out smtst.txt" |
| 306 | ], | 310 | ], |
| 307 | 311 | ||
| 308 | [ | 312 | [ |
| 309 | "encrypted content test streaming PEM format, triple DES key", | 313 | "encrypted content test streaming PEM format, triple DES key", |
| 310 | "-EncryptedData_encrypt -in smcont.txt -outform PEM" | 314 | "\"-EncryptedData_encrypt\" -in smcont.txt -outform PEM" |
| 311 | . " -des3 -secretkey 000102030405060708090A0B0C0D0E0F1011121314151617" | 315 | . " -des3 -secretkey 000102030405060708090A0B0C0D0E0F1011121314151617" |
| 312 | . " -stream -out test.cms", | 316 | . " -stream -out test.cms", |
| 313 | "-EncryptedData_decrypt -in test.cms -inform PEM " | 317 | "\"-EncryptedData_decrypt\" -in test.cms -inform PEM " |
| 314 | . " -secretkey 000102030405060708090A0B0C0D0E0F1011121314151617" | 318 | . " -secretkey 000102030405060708090A0B0C0D0E0F1011121314151617" |
| 315 | . " -out smtst.txt" | 319 | . " -out smtst.txt" |
| 316 | ], | 320 | ], |
| 317 | 321 | ||
| 318 | [ | 322 | [ |
| 319 | "encrypted content test streaming PEM format, 128 bit AES key", | 323 | "encrypted content test streaming PEM format, 128 bit AES key", |
| 320 | "-EncryptedData_encrypt -in smcont.txt -outform PEM" | 324 | "\"-EncryptedData_encrypt\" -in smcont.txt -outform PEM" |
| 321 | . " -aes128 -secretkey 000102030405060708090A0B0C0D0E0F" | 325 | . " -aes128 -secretkey 000102030405060708090A0B0C0D0E0F" |
| 322 | . " -stream -out test.cms", | 326 | . " -stream -out test.cms", |
| 323 | "-EncryptedData_decrypt -in test.cms -inform PEM " | 327 | "\"-EncryptedData_decrypt\" -in test.cms -inform PEM " |
| 324 | . " -secretkey 000102030405060708090A0B0C0D0E0F -out smtst.txt" | 328 | . " -secretkey 000102030405060708090A0B0C0D0E0F -out smtst.txt" |
| 325 | ], | 329 | ], |
| 326 | 330 | ||
