Merge OpenSSL 1.0.2g.
Relnotes: yes
This commit is contained in:
commit
4c6a0400b9
@ -2,6 +2,138 @@
|
||||
OpenSSL CHANGES
|
||||
_______________
|
||||
|
||||
Changes between 1.0.2f and 1.0.2g [1 Mar 2016]
|
||||
|
||||
* Disable weak ciphers in SSLv3 and up in default builds of OpenSSL.
|
||||
Builds that are not configured with "enable-weak-ssl-ciphers" will not
|
||||
provide any "EXPORT" or "LOW" strength ciphers.
|
||||
[Viktor Dukhovni]
|
||||
|
||||
* Disable SSLv2 default build, default negotiation and weak ciphers. SSLv2
|
||||
is by default disabled at build-time. Builds that are not configured with
|
||||
"enable-ssl2" will not support SSLv2. Even if "enable-ssl2" is used,
|
||||
users who want to negotiate SSLv2 via the version-flexible SSLv23_method()
|
||||
will need to explicitly call either of:
|
||||
|
||||
SSL_CTX_clear_options(ctx, SSL_OP_NO_SSLv2);
|
||||
or
|
||||
SSL_clear_options(ssl, SSL_OP_NO_SSLv2);
|
||||
|
||||
as appropriate. Even if either of those is used, or the application
|
||||
explicitly uses the version-specific SSLv2_method() or its client and
|
||||
server variants, SSLv2 ciphers vulnerable to exhaustive search key
|
||||
recovery have been removed. Specifically, the SSLv2 40-bit EXPORT
|
||||
ciphers, and SSLv2 56-bit DES are no longer available.
|
||||
(CVE-2016-0800)
|
||||
[Viktor Dukhovni]
|
||||
|
||||
*) Fix a double-free in DSA code
|
||||
|
||||
A double free bug was discovered when OpenSSL parses malformed DSA private
|
||||
keys and could lead to a DoS attack or memory corruption for applications
|
||||
that receive DSA private keys from untrusted sources. This scenario is
|
||||
considered rare.
|
||||
|
||||
This issue was reported to OpenSSL by Adam Langley(Google/BoringSSL) using
|
||||
libFuzzer.
|
||||
(CVE-2016-0705)
|
||||
[Stephen Henson]
|
||||
|
||||
*) Disable SRP fake user seed to address a server memory leak.
|
||||
|
||||
Add a new method SRP_VBASE_get1_by_user that handles the seed properly.
|
||||
|
||||
SRP_VBASE_get_by_user had inconsistent memory management behaviour.
|
||||
In order to fix an unavoidable memory leak, SRP_VBASE_get_by_user
|
||||
was changed to ignore the "fake user" SRP seed, even if the seed
|
||||
is configured.
|
||||
|
||||
Users should use SRP_VBASE_get1_by_user instead. Note that in
|
||||
SRP_VBASE_get1_by_user, caller must free the returned value. Note
|
||||
also that even though configuring the SRP seed attempts to hide
|
||||
invalid usernames by continuing the handshake with fake
|
||||
credentials, this behaviour is not constant time and no strong
|
||||
guarantees are made that the handshake is indistinguishable from
|
||||
that of a valid user.
|
||||
(CVE-2016-0798)
|
||||
[Emilia Käsper]
|
||||
|
||||
*) Fix BN_hex2bn/BN_dec2bn NULL pointer deref/heap corruption
|
||||
|
||||
In the BN_hex2bn function the number of hex digits is calculated using an
|
||||
int value |i|. Later |bn_expand| is called with a value of |i * 4|. For
|
||||
large values of |i| this can result in |bn_expand| not allocating any
|
||||
memory because |i * 4| is negative. This can leave the internal BIGNUM data
|
||||
field as NULL leading to a subsequent NULL ptr deref. For very large values
|
||||
of |i|, the calculation |i * 4| could be a positive value smaller than |i|.
|
||||
In this case memory is allocated to the internal BIGNUM data field, but it
|
||||
is insufficiently sized leading to heap corruption. A similar issue exists
|
||||
in BN_dec2bn. This could have security consequences if BN_hex2bn/BN_dec2bn
|
||||
is ever called by user applications with very large untrusted hex/dec data.
|
||||
This is anticipated to be a rare occurrence.
|
||||
|
||||
All OpenSSL internal usage of these functions use data that is not expected
|
||||
to be untrusted, e.g. config file data or application command line
|
||||
arguments. If user developed applications generate config file data based
|
||||
on untrusted data then it is possible that this could also lead to security
|
||||
consequences. This is also anticipated to be rare.
|
||||
|
||||
This issue was reported to OpenSSL by Guido Vranken.
|
||||
(CVE-2016-0797)
|
||||
[Matt Caswell]
|
||||
|
||||
*) Fix memory issues in BIO_*printf functions
|
||||
|
||||
The internal |fmtstr| function used in processing a "%s" format string in
|
||||
the BIO_*printf functions could overflow while calculating the length of a
|
||||
string and cause an OOB read when printing very long strings.
|
||||
|
||||
Additionally the internal |doapr_outch| function can attempt to write to an
|
||||
OOB memory location (at an offset from the NULL pointer) in the event of a
|
||||
memory allocation failure. In 1.0.2 and below this could be caused where
|
||||
the size of a buffer to be allocated is greater than INT_MAX. E.g. this
|
||||
could be in processing a very long "%s" format string. Memory leaks can
|
||||
also occur.
|
||||
|
||||
The first issue may mask the second issue dependent on compiler behaviour.
|
||||
These problems could enable attacks where large amounts of untrusted data
|
||||
is passed to the BIO_*printf functions. If applications use these functions
|
||||
in this way then they could be vulnerable. OpenSSL itself uses these
|
||||
functions when printing out human-readable dumps of ASN.1 data. Therefore
|
||||
applications that print this data could be vulnerable if the data is from
|
||||
untrusted sources. OpenSSL command line applications could also be
|
||||
vulnerable where they print out ASN.1 data, or if untrusted data is passed
|
||||
as command line arguments.
|
||||
|
||||
Libssl is not considered directly vulnerable. Additionally certificates etc
|
||||
received via remote connections via libssl are also unlikely to be able to
|
||||
trigger these issues because of message size limits enforced within libssl.
|
||||
|
||||
This issue was reported to OpenSSL Guido Vranken.
|
||||
(CVE-2016-0799)
|
||||
[Matt Caswell]
|
||||
|
||||
*) Side channel attack on modular exponentiation
|
||||
|
||||
A side-channel attack was found which makes use of cache-bank conflicts on
|
||||
the Intel Sandy-Bridge microarchitecture which could lead to the recovery
|
||||
of RSA keys. The ability to exploit this issue is limited as it relies on
|
||||
an attacker who has control of code in a thread running on the same
|
||||
hyper-threaded core as the victim thread which is performing decryptions.
|
||||
|
||||
This issue was reported to OpenSSL by Yuval Yarom, The University of
|
||||
Adelaide and NICTA, Daniel Genkin, Technion and Tel Aviv University, and
|
||||
Nadia Heninger, University of Pennsylvania with more information at
|
||||
http://cachebleed.info.
|
||||
(CVE-2016-0702)
|
||||
[Andy Polyakov]
|
||||
|
||||
*) Change the req app to generate a 2048-bit RSA/DSA key by default,
|
||||
if no keysize is specified with default_bits. This fixes an
|
||||
omission in an earlier change that changed all RSA/DSA key generation
|
||||
apps to use 2048 bits by default.
|
||||
[Emilia Käsper]
|
||||
|
||||
Changes between 1.0.2e and 1.0.2f [28 Jan 2016]
|
||||
|
||||
*) DH small subgroups
|
||||
@ -105,7 +237,7 @@
|
||||
[Emilia Käsper]
|
||||
|
||||
*) In DSA_generate_parameters_ex, if the provided seed is too short,
|
||||
return an error
|
||||
use a random seed, as already documented.
|
||||
[Rich Salz and Ismo Puustinen <ismo.puustinen@intel.com>]
|
||||
|
||||
Changes between 1.0.2c and 1.0.2d [9 Jul 2015]
|
||||
|
@ -58,6 +58,10 @@ my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimenta
|
||||
# library and will be loaded in run-time by the OpenSSL library.
|
||||
# sctp include SCTP support
|
||||
# 386 generate 80386 code
|
||||
# enable-weak-ssl-ciphers
|
||||
# Enable EXPORT and LOW SSLv3 ciphers that are disabled by
|
||||
# default. Note, weak SSLv2 ciphers are unconditionally
|
||||
# disabled.
|
||||
# no-sse2 disables IA-32 SSE2 code, above option implies no-sse2
|
||||
# no-<cipher> build without specified algorithm (rsa, idea, rc5, ...)
|
||||
# -<xxx> +<xxx> compiler options are passed through
|
||||
@ -781,11 +785,13 @@ my %disabled = ( # "what" => "comment" [or special keyword "experimental
|
||||
"md2" => "default",
|
||||
"rc5" => "default",
|
||||
"rfc3779" => "default",
|
||||
"sctp" => "default",
|
||||
"sctp" => "default",
|
||||
"shared" => "default",
|
||||
"ssl-trace" => "default",
|
||||
"ssl2" => "default",
|
||||
"store" => "experimental",
|
||||
"unit-test" => "default",
|
||||
"weak-ssl-ciphers" => "default",
|
||||
"zlib" => "default",
|
||||
"zlib-dynamic" => "default"
|
||||
);
|
||||
|
@ -4,7 +4,7 @@
|
||||
## Makefile for OpenSSL
|
||||
##
|
||||
|
||||
VERSION=1.0.2f
|
||||
VERSION=1.0.2g
|
||||
MAJOR=1
|
||||
MINOR=0.2
|
||||
SHLIB_VERSION_NUMBER=1.0.0
|
||||
@ -13,7 +13,7 @@ SHLIB_MAJOR=1
|
||||
SHLIB_MINOR=0.0
|
||||
SHLIB_EXT=
|
||||
PLATFORM=dist
|
||||
OPTIONS= no-ec_nistp_64_gcc_128 no-gmp no-jpake no-krb5 no-libunbound no-md2 no-rc5 no-rfc3779 no-sctp no-shared no-ssl-trace no-store no-unit-test no-zlib no-zlib-dynamic static-engine
|
||||
OPTIONS= no-ec_nistp_64_gcc_128 no-gmp no-jpake no-krb5 no-libunbound no-md2 no-rc5 no-rfc3779 no-sctp no-shared no-ssl-trace no-ssl2 no-store no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic static-engine
|
||||
CONFIGURE_ARGS=dist
|
||||
SHLIB_TARGET=
|
||||
|
||||
@ -61,7 +61,7 @@ OPENSSLDIR=/usr/local/ssl
|
||||
|
||||
CC= cc
|
||||
CFLAG= -O
|
||||
DEPFLAG= -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST
|
||||
DEPFLAG= -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_SSL2 -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST -DOPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
PEX_LIBS=
|
||||
EX_LIBS=
|
||||
EXE_EXT=
|
||||
|
@ -272,7 +272,7 @@ link_o.cygwin:
|
||||
SHLIB_SOVER=${LIBVERSION:+"-$(LIBVERSION)"}; \
|
||||
ALLSYMSFLAGS='-Wl,--whole-archive'; \
|
||||
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
|
||||
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base $$deffile -Wl,-s,-Bsymbolic"; \
|
||||
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base $$deffile -Wl,-Bsymbolic"; \
|
||||
$(LINK_SO_O)
|
||||
#for mingw target if def-file is in use dll-name should match library-name
|
||||
link_a.cygwin:
|
||||
@ -289,7 +289,7 @@ link_a.cygwin:
|
||||
SHLIB_SOVER=32; \
|
||||
extras="$(LIBNAME).def"; \
|
||||
$(PERL) util/mkdef.pl 32 $$SHLIB > $$extras; \
|
||||
base=; [ $(LIBNAME) = "crypto" ] && base=-Wl,--image-base,0x63000000; \
|
||||
base=; [ $(LIBNAME) = "crypto" -a -n "$(FIPSCANLIB)" ] && base=-Wl,--image-base,0x63000000; \
|
||||
fi; \
|
||||
dll_name=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \
|
||||
$(PERL) util/mkrc.pl $$dll_name | \
|
||||
@ -297,7 +297,7 @@ link_a.cygwin:
|
||||
extras="$$extras rc.o"; \
|
||||
ALLSYMSFLAGS='-Wl,--whole-archive'; \
|
||||
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
|
||||
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-s,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a $$extras"; \
|
||||
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a $$extras"; \
|
||||
[ -f apps/$$dll_name ] && rm apps/$$dll_name; \
|
||||
[ -f test/$$dll_name ] && rm test/$$dll_name; \
|
||||
$(LINK_SO_A) || exit 1; \
|
||||
|
@ -5,6 +5,19 @@
|
||||
This file gives a brief overview of the major changes between each OpenSSL
|
||||
release. For more details please read the CHANGES file.
|
||||
|
||||
Major changes between OpenSSL 1.0.2f and OpenSSL 1.0.2g [1 Mar 2016]
|
||||
|
||||
o Disable weak ciphers in SSLv3 and up in default builds of OpenSSL.
|
||||
o Disable SSLv2 default build, default negotiation and weak ciphers
|
||||
(CVE-2016-0800)
|
||||
o Fix a double-free in DSA code (CVE-2016-0705)
|
||||
o Disable SRP fake user seed to address a server memory leak
|
||||
(CVE-2016-0798)
|
||||
o Fix BN_hex2bn/BN_dec2bn NULL pointer deref/heap corruption
|
||||
(CVE-2016-0797)
|
||||
o Fix memory issues in BIO_*printf functions (CVE-2016-0799)
|
||||
o Fix side channel attack on modular exponentiation (CVE-2016-0702)
|
||||
|
||||
Major changes between OpenSSL 1.0.2e and OpenSSL 1.0.2f [28 Jan 2016]
|
||||
|
||||
o DH small subgroups (CVE-2016-0701)
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
OpenSSL 1.0.2f 28 Jan 2016
|
||||
OpenSSL 1.0.2g 1 Mar 2016
|
||||
|
||||
Copyright (c) 1998-2015 The OpenSSL Project
|
||||
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
|
||||
|
@ -2442,7 +2442,11 @@ int bio_to_mem(unsigned char **out, int maxlen, BIO *in)
|
||||
else
|
||||
len = 1024;
|
||||
len = BIO_read(in, tbuf, len);
|
||||
if (len <= 0)
|
||||
if (len < 0) {
|
||||
BIO_free(mem);
|
||||
return -1;
|
||||
}
|
||||
if (len == 0)
|
||||
break;
|
||||
if (BIO_write(mem, tbuf, len) != len) {
|
||||
BIO_free(mem);
|
||||
@ -2459,7 +2463,7 @@ int bio_to_mem(unsigned char **out, int maxlen, BIO *in)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value)
|
||||
int pkey_ctrl_string(EVP_PKEY_CTX *ctx, const char *value)
|
||||
{
|
||||
int rv;
|
||||
char *stmp, *vtmp = NULL;
|
||||
|
@ -321,7 +321,7 @@ int args_verify(char ***pargs, int *pargc,
|
||||
int *badarg, BIO *err, X509_VERIFY_PARAM **pm);
|
||||
void policies_print(BIO *out, X509_STORE_CTX *ctx);
|
||||
int bio_to_mem(unsigned char **out, int maxlen, BIO *in);
|
||||
int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value);
|
||||
int pkey_ctrl_string(EVP_PKEY_CTX *ctx, const char *value);
|
||||
int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
|
||||
const char *algname, ENGINE *e, int do_param);
|
||||
int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md,
|
||||
|
@ -73,7 +73,7 @@ static void usage(void);
|
||||
#define PROG pkeyutl_main
|
||||
|
||||
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
|
||||
char *keyfile, int keyform, int key_type,
|
||||
const char *keyfile, int keyform, int key_type,
|
||||
char *passargin, int pkey_op, ENGINE *e,
|
||||
int impl);
|
||||
|
||||
@ -99,10 +99,12 @@ int MAIN(int argc, char **argv)
|
||||
char *passargin = NULL;
|
||||
int keysize = -1;
|
||||
int engine_impl = 0;
|
||||
|
||||
unsigned char *buf_in = NULL, *buf_out = NULL, *sig = NULL;
|
||||
size_t buf_outlen;
|
||||
size_t buf_outlen = 0;
|
||||
int buf_inlen = 0, siglen = -1;
|
||||
const char *inkey = NULL;
|
||||
const char *peerkey = NULL;
|
||||
STACK_OF(OPENSSL_STRING) *pkeyopts = NULL;
|
||||
|
||||
int ret = 1, rv = -1;
|
||||
|
||||
@ -136,21 +138,13 @@ int MAIN(int argc, char **argv)
|
||||
} else if (!strcmp(*argv, "-inkey")) {
|
||||
if (--argc < 1)
|
||||
badarg = 1;
|
||||
else {
|
||||
ctx = init_ctx(&keysize,
|
||||
*(++argv), keyform, key_type,
|
||||
passargin, pkey_op, e, engine_impl);
|
||||
if (!ctx) {
|
||||
BIO_puts(bio_err, "Error initializing context\n");
|
||||
ERR_print_errors(bio_err);
|
||||
badarg = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
inkey = *++argv;
|
||||
} else if (!strcmp(*argv, "-peerkey")) {
|
||||
if (--argc < 1)
|
||||
badarg = 1;
|
||||
else if (!setup_peer(bio_err, ctx, peerform, *(++argv), e))
|
||||
badarg = 1;
|
||||
else
|
||||
peerkey = *++argv;
|
||||
} else if (!strcmp(*argv, "-passin")) {
|
||||
if (--argc < 1)
|
||||
badarg = 1;
|
||||
@ -191,23 +185,21 @@ int MAIN(int argc, char **argv)
|
||||
pkey_op = EVP_PKEY_OP_VERIFY;
|
||||
else if (!strcmp(*argv, "-verifyrecover"))
|
||||
pkey_op = EVP_PKEY_OP_VERIFYRECOVER;
|
||||
else if (!strcmp(*argv, "-rev"))
|
||||
rev = 1;
|
||||
else if (!strcmp(*argv, "-encrypt"))
|
||||
pkey_op = EVP_PKEY_OP_ENCRYPT;
|
||||
else if (!strcmp(*argv, "-decrypt"))
|
||||
pkey_op = EVP_PKEY_OP_DECRYPT;
|
||||
else if (!strcmp(*argv, "-derive"))
|
||||
pkey_op = EVP_PKEY_OP_DERIVE;
|
||||
else if (!strcmp(*argv, "-rev"))
|
||||
rev = 1;
|
||||
else if (strcmp(*argv, "-pkeyopt") == 0) {
|
||||
if (--argc < 1)
|
||||
badarg = 1;
|
||||
else if (!ctx) {
|
||||
BIO_puts(bio_err, "-pkeyopt command before -inkey\n");
|
||||
badarg = 1;
|
||||
} else if (pkey_ctrl_string(ctx, *(++argv)) <= 0) {
|
||||
BIO_puts(bio_err, "parameter setting error\n");
|
||||
ERR_print_errors(bio_err);
|
||||
else if ((pkeyopts == NULL &&
|
||||
(pkeyopts = sk_OPENSSL_STRING_new_null()) == NULL) ||
|
||||
sk_OPENSSL_STRING_push(pkeyopts, *++argv) == 0) {
|
||||
BIO_puts(bio_err, "out of memory\n");
|
||||
goto end;
|
||||
}
|
||||
} else
|
||||
@ -220,10 +212,37 @@ int MAIN(int argc, char **argv)
|
||||
argv++;
|
||||
}
|
||||
|
||||
if (!ctx) {
|
||||
if (inkey == NULL ||
|
||||
(peerkey != NULL && pkey_op != EVP_PKEY_OP_DERIVE)) {
|
||||
usage();
|
||||
goto end;
|
||||
}
|
||||
ctx = init_ctx(&keysize, inkey, keyform, key_type,
|
||||
passargin, pkey_op, e, engine_impl);
|
||||
if (!ctx) {
|
||||
BIO_puts(bio_err, "Error initializing context\n");
|
||||
ERR_print_errors(bio_err);
|
||||
goto end;
|
||||
}
|
||||
if (peerkey != NULL && !setup_peer(bio_err, ctx, peerform, peerkey, e)) {
|
||||
BIO_puts(bio_err, "Error setting up peer key\n");
|
||||
ERR_print_errors(bio_err);
|
||||
goto end;
|
||||
}
|
||||
if (pkeyopts != NULL) {
|
||||
int num = sk_OPENSSL_STRING_num(pkeyopts);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num; ++i) {
|
||||
const char *opt = sk_OPENSSL_STRING_value(pkeyopts, i);
|
||||
|
||||
if (pkey_ctrl_string(ctx, opt) <= 0) {
|
||||
BIO_puts(bio_err, "parameter setting error\n");
|
||||
ERR_print_errors(bio_err);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sigfile && (pkey_op != EVP_PKEY_OP_VERIFY)) {
|
||||
BIO_puts(bio_err, "Signature file specified for non verify\n");
|
||||
@ -273,7 +292,7 @@ int MAIN(int argc, char **argv)
|
||||
}
|
||||
siglen = bio_to_mem(&sig, keysize * 10, sigbio);
|
||||
BIO_free(sigbio);
|
||||
if (siglen <= 0) {
|
||||
if (siglen < 0) {
|
||||
BIO_printf(bio_err, "Error reading signature data\n");
|
||||
goto end;
|
||||
}
|
||||
@ -282,7 +301,7 @@ int MAIN(int argc, char **argv)
|
||||
if (in) {
|
||||
/* Read the input data */
|
||||
buf_inlen = bio_to_mem(&buf_in, keysize * 10, in);
|
||||
if (buf_inlen <= 0) {
|
||||
if (buf_inlen < 0) {
|
||||
BIO_printf(bio_err, "Error reading input Data\n");
|
||||
exit(1);
|
||||
}
|
||||
@ -310,7 +329,7 @@ int MAIN(int argc, char **argv)
|
||||
} else {
|
||||
rv = do_keyop(ctx, pkey_op, NULL, (size_t *)&buf_outlen,
|
||||
buf_in, (size_t)buf_inlen);
|
||||
if (rv > 0) {
|
||||
if (rv > 0 && buf_outlen != 0) {
|
||||
buf_out = OPENSSL_malloc(buf_outlen);
|
||||
if (!buf_out)
|
||||
rv = -1;
|
||||
@ -340,12 +359,14 @@ int MAIN(int argc, char **argv)
|
||||
EVP_PKEY_CTX_free(ctx);
|
||||
BIO_free(in);
|
||||
BIO_free_all(out);
|
||||
if (buf_in)
|
||||
if (buf_in != NULL)
|
||||
OPENSSL_free(buf_in);
|
||||
if (buf_out)
|
||||
if (buf_out != NULL)
|
||||
OPENSSL_free(buf_out);
|
||||
if (sig)
|
||||
if (sig != NULL)
|
||||
OPENSSL_free(sig);
|
||||
if (pkeyopts != NULL)
|
||||
sk_OPENSSL_STRING_free(pkeyopts);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -380,7 +401,7 @@ static void usage()
|
||||
}
|
||||
|
||||
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
|
||||
char *keyfile, int keyform, int key_type,
|
||||
const char *keyfile, int keyform, int key_type,
|
||||
char *passargin, int pkey_op, ENGINE *e,
|
||||
int engine_impl)
|
||||
{
|
||||
@ -484,14 +505,9 @@ static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
|
||||
EVP_PKEY *peer = NULL;
|
||||
ENGINE* engine = NULL;
|
||||
int ret;
|
||||
if (!ctx) {
|
||||
BIO_puts(err, "-peerkey command before -inkey\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (peerform == FORMAT_ENGINE)
|
||||
engine = e;
|
||||
|
||||
engine = e;
|
||||
peer = load_pubkey(bio_err, file, peerform, 0, NULL, engine, "Peer Key");
|
||||
|
||||
if (!peer) {
|
||||
|
@ -101,8 +101,8 @@
|
||||
#define STRING_MASK "string_mask"
|
||||
#define UTF8_IN "utf8"
|
||||
|
||||
#define DEFAULT_KEY_LENGTH 512
|
||||
#define MIN_KEY_LENGTH 384
|
||||
#define DEFAULT_KEY_LENGTH 2048
|
||||
#define MIN_KEY_LENGTH 512
|
||||
|
||||
#undef PROG
|
||||
#define PROG req_main
|
||||
|
@ -250,7 +250,7 @@ int MAIN(int argc, char **argv)
|
||||
|
||||
if (outfile) {
|
||||
if (!(out = BIO_new_file(outfile, "wb"))) {
|
||||
BIO_printf(bio_err, "Error Reading Output File\n");
|
||||
BIO_printf(bio_err, "Error Writing Output File\n");
|
||||
ERR_print_errors(bio_err);
|
||||
goto end;
|
||||
}
|
||||
@ -276,7 +276,7 @@ int MAIN(int argc, char **argv)
|
||||
|
||||
/* Read the input data */
|
||||
rsa_inlen = BIO_read(in, rsa_in, keysize * 2);
|
||||
if (rsa_inlen <= 0) {
|
||||
if (rsa_inlen < 0) {
|
||||
BIO_printf(bio_err, "Error reading input Data\n");
|
||||
exit(1);
|
||||
}
|
||||
@ -311,7 +311,7 @@ int MAIN(int argc, char **argv)
|
||||
|
||||
}
|
||||
|
||||
if (rsa_outlen <= 0) {
|
||||
if (rsa_outlen < 0) {
|
||||
BIO_printf(bio_err, "RSA operation error\n");
|
||||
ERR_print_errors(bio_err);
|
||||
goto end;
|
||||
|
@ -390,8 +390,6 @@ static void sc_usage(void)
|
||||
" -no_tls1_2/-no_tls1_1/-no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol\n");
|
||||
BIO_printf(bio_err,
|
||||
" -bugs - Switch on all SSL implementation bug workarounds\n");
|
||||
BIO_printf(bio_err,
|
||||
" -serverpref - Use server's cipher preferences (only SSLv2)\n");
|
||||
BIO_printf(bio_err,
|
||||
" -cipher - preferred cipher to use, use the 'openssl ciphers'\n");
|
||||
BIO_printf(bio_err,
|
||||
|
@ -429,6 +429,8 @@ typedef struct srpsrvparm_st {
|
||||
static int MS_CALLBACK ssl_srp_server_param_cb(SSL *s, int *ad, void *arg)
|
||||
{
|
||||
srpsrvparm *p = (srpsrvparm *) arg;
|
||||
int ret = SSL3_AL_FATAL;
|
||||
|
||||
if (p->login == NULL && p->user == NULL) {
|
||||
p->login = SSL_get_srp_username(s);
|
||||
BIO_printf(bio_err, "SRP username = \"%s\"\n", p->login);
|
||||
@ -437,21 +439,25 @@ static int MS_CALLBACK ssl_srp_server_param_cb(SSL *s, int *ad, void *arg)
|
||||
|
||||
if (p->user == NULL) {
|
||||
BIO_printf(bio_err, "User %s doesn't exist\n", p->login);
|
||||
return SSL3_AL_FATAL;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (SSL_set_srp_server_param
|
||||
(s, p->user->N, p->user->g, p->user->s, p->user->v,
|
||||
p->user->info) < 0) {
|
||||
*ad = SSL_AD_INTERNAL_ERROR;
|
||||
return SSL3_AL_FATAL;
|
||||
goto err;
|
||||
}
|
||||
BIO_printf(bio_err,
|
||||
"SRP parameters set: username = \"%s\" info=\"%s\" \n",
|
||||
p->login, p->user->info);
|
||||
/* need to check whether there are memory leaks */
|
||||
ret = SSL_ERROR_NONE;
|
||||
|
||||
err:
|
||||
SRP_user_pwd_free(p->user);
|
||||
p->user = NULL;
|
||||
p->login = NULL;
|
||||
return SSL_ERROR_NONE;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -2452,9 +2458,10 @@ static int sv_body(char *hostname, int s, int stype, unsigned char *context)
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
while (SSL_get_error(con, k) == SSL_ERROR_WANT_X509_LOOKUP) {
|
||||
BIO_printf(bio_s_out, "LOOKUP renego during write\n");
|
||||
SRP_user_pwd_free(srp_callback_parm.user);
|
||||
srp_callback_parm.user =
|
||||
SRP_VBASE_get_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
SRP_VBASE_get1_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
if (srp_callback_parm.user)
|
||||
BIO_printf(bio_s_out, "LOOKUP done %s\n",
|
||||
srp_callback_parm.user->info);
|
||||
@ -2508,9 +2515,10 @@ static int sv_body(char *hostname, int s, int stype, unsigned char *context)
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
while (SSL_get_error(con, i) == SSL_ERROR_WANT_X509_LOOKUP) {
|
||||
BIO_printf(bio_s_out, "LOOKUP renego during read\n");
|
||||
SRP_user_pwd_free(srp_callback_parm.user);
|
||||
srp_callback_parm.user =
|
||||
SRP_VBASE_get_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
SRP_VBASE_get1_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
if (srp_callback_parm.user)
|
||||
BIO_printf(bio_s_out, "LOOKUP done %s\n",
|
||||
srp_callback_parm.user->info);
|
||||
@ -2605,9 +2613,10 @@ static int init_ssl_connection(SSL *con)
|
||||
while (i <= 0 && SSL_get_error(con, i) == SSL_ERROR_WANT_X509_LOOKUP) {
|
||||
BIO_printf(bio_s_out, "LOOKUP during accept %s\n",
|
||||
srp_callback_parm.login);
|
||||
SRP_user_pwd_free(srp_callback_parm.user);
|
||||
srp_callback_parm.user =
|
||||
SRP_VBASE_get_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
SRP_VBASE_get1_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
if (srp_callback_parm.user)
|
||||
BIO_printf(bio_s_out, "LOOKUP done %s\n",
|
||||
srp_callback_parm.user->info);
|
||||
@ -2849,9 +2858,10 @@ static int www_body(char *hostname, int s, int stype, unsigned char *context)
|
||||
&& SSL_get_error(con, i) == SSL_ERROR_WANT_X509_LOOKUP) {
|
||||
BIO_printf(bio_s_out, "LOOKUP during accept %s\n",
|
||||
srp_callback_parm.login);
|
||||
SRP_user_pwd_free(srp_callback_parm.user);
|
||||
srp_callback_parm.user =
|
||||
SRP_VBASE_get_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
SRP_VBASE_get1_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
if (srp_callback_parm.user)
|
||||
BIO_printf(bio_s_out, "LOOKUP done %s\n",
|
||||
srp_callback_parm.user->info);
|
||||
@ -2891,9 +2901,10 @@ static int www_body(char *hostname, int s, int stype, unsigned char *context)
|
||||
if (BIO_should_io_special(io)
|
||||
&& BIO_get_retry_reason(io) == BIO_RR_SSL_X509_LOOKUP) {
|
||||
BIO_printf(bio_s_out, "LOOKUP renego during read\n");
|
||||
SRP_user_pwd_free(srp_callback_parm.user);
|
||||
srp_callback_parm.user =
|
||||
SRP_VBASE_get_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
SRP_VBASE_get1_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
if (srp_callback_parm.user)
|
||||
BIO_printf(bio_s_out, "LOOKUP done %s\n",
|
||||
srp_callback_parm.user->info);
|
||||
@ -3236,9 +3247,10 @@ static int rev_body(char *hostname, int s, int stype, unsigned char *context)
|
||||
if (BIO_should_io_special(io)
|
||||
&& BIO_get_retry_reason(io) == BIO_RR_SSL_X509_LOOKUP) {
|
||||
BIO_printf(bio_s_out, "LOOKUP renego during accept\n");
|
||||
SRP_user_pwd_free(srp_callback_parm.user);
|
||||
srp_callback_parm.user =
|
||||
SRP_VBASE_get_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
SRP_VBASE_get1_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
if (srp_callback_parm.user)
|
||||
BIO_printf(bio_s_out, "LOOKUP done %s\n",
|
||||
srp_callback_parm.user->info);
|
||||
@ -3264,9 +3276,10 @@ static int rev_body(char *hostname, int s, int stype, unsigned char *context)
|
||||
if (BIO_should_io_special(io)
|
||||
&& BIO_get_retry_reason(io) == BIO_RR_SSL_X509_LOOKUP) {
|
||||
BIO_printf(bio_s_out, "LOOKUP renego during read\n");
|
||||
SRP_user_pwd_free(srp_callback_parm.user);
|
||||
srp_callback_parm.user =
|
||||
SRP_VBASE_get_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
SRP_VBASE_get1_by_user(srp_callback_parm.vb,
|
||||
srp_callback_parm.login);
|
||||
if (srp_callback_parm.user)
|
||||
BIO_printf(bio_s_out, "LOOKUP done %s\n",
|
||||
srp_callback_parm.user->info);
|
||||
|
@ -852,7 +852,8 @@ case "$GUESSOS" in
|
||||
# *-dgux) OUT="dgux" ;;
|
||||
mips-sony-newsos4) OUT="newsos4-gcc" ;;
|
||||
*-*-cygwin_pre1.3) OUT="Cygwin-pre1.3" ;;
|
||||
*-*-cygwin) OUT="Cygwin" ;;
|
||||
i[3456]86-*-cygwin) OUT="Cygwin" ;;
|
||||
*-*-cygwin) OUT="Cygwin-${MACHINE}" ;;
|
||||
t3e-cray-unicosmk) OUT="cray-t3e" ;;
|
||||
j90-cray-unicos) OUT="cray-j90" ;;
|
||||
nsr-tandem-nsk) OUT="tandem-c89" ;;
|
||||
|
@ -717,7 +717,7 @@ static int asn1_d2i_ex_primitive(ASN1_VALUE **pval,
|
||||
long plen;
|
||||
char cst, inf, free_cont = 0;
|
||||
const unsigned char *p;
|
||||
BUF_MEM buf;
|
||||
BUF_MEM buf = { 0, NULL, 0 };
|
||||
const unsigned char *cont = NULL;
|
||||
long len;
|
||||
if (!pval) {
|
||||
@ -793,7 +793,6 @@ static int asn1_d2i_ex_primitive(ASN1_VALUE **pval,
|
||||
} else {
|
||||
len = p - cont + plen;
|
||||
p += plen;
|
||||
buf.data = NULL;
|
||||
}
|
||||
} else if (cst) {
|
||||
if (utype == V_ASN1_NULL || utype == V_ASN1_BOOLEAN
|
||||
@ -802,9 +801,9 @@ static int asn1_d2i_ex_primitive(ASN1_VALUE **pval,
|
||||
ASN1err(ASN1_F_ASN1_D2I_EX_PRIMITIVE, ASN1_R_TYPE_NOT_PRIMITIVE);
|
||||
return 0;
|
||||
}
|
||||
buf.length = 0;
|
||||
buf.max = 0;
|
||||
buf.data = NULL;
|
||||
|
||||
/* Free any returned 'buf' content */
|
||||
free_cont = 1;
|
||||
/*
|
||||
* Should really check the internal tags are correct but some things
|
||||
* may get this wrong. The relevant specs say that constructed string
|
||||
@ -812,18 +811,16 @@ static int asn1_d2i_ex_primitive(ASN1_VALUE **pval,
|
||||
* So instead just check for UNIVERSAL class and ignore the tag.
|
||||
*/
|
||||
if (!asn1_collect(&buf, &p, plen, inf, -1, V_ASN1_UNIVERSAL, 0)) {
|
||||
free_cont = 1;
|
||||
goto err;
|
||||
}
|
||||
len = buf.length;
|
||||
/* Append a final null to string */
|
||||
if (!BUF_MEM_grow_clean(&buf, len + 1)) {
|
||||
ASN1err(ASN1_F_ASN1_D2I_EX_PRIMITIVE, ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
goto err;
|
||||
}
|
||||
buf.data[len] = 0;
|
||||
cont = (const unsigned char *)buf.data;
|
||||
free_cont = 1;
|
||||
} else {
|
||||
cont = p;
|
||||
len = plen;
|
||||
@ -831,6 +828,7 @@ static int asn1_d2i_ex_primitive(ASN1_VALUE **pval,
|
||||
}
|
||||
|
||||
/* We now have content length and type: translate into a structure */
|
||||
/* asn1_ex_c2i may reuse allocated buffer, and so sets free_cont to 0 */
|
||||
if (!asn1_ex_c2i(pval, cont, len, utype, &free_cont, it))
|
||||
goto err;
|
||||
|
||||
|
@ -125,16 +125,16 @@
|
||||
# define LLONG long
|
||||
#endif
|
||||
|
||||
static void fmtstr(char **, char **, size_t *, size_t *,
|
||||
const char *, int, int, int);
|
||||
static void fmtint(char **, char **, size_t *, size_t *,
|
||||
LLONG, int, int, int, int);
|
||||
static void fmtfp(char **, char **, size_t *, size_t *,
|
||||
LDOUBLE, int, int, int);
|
||||
static void doapr_outch(char **, char **, size_t *, size_t *, int);
|
||||
static void _dopr(char **sbuffer, char **buffer,
|
||||
size_t *maxlen, size_t *retlen, int *truncated,
|
||||
const char *format, va_list args);
|
||||
static int fmtstr(char **, char **, size_t *, size_t *,
|
||||
const char *, int, int, int);
|
||||
static int fmtint(char **, char **, size_t *, size_t *,
|
||||
LLONG, int, int, int, int);
|
||||
static int fmtfp(char **, char **, size_t *, size_t *,
|
||||
LDOUBLE, int, int, int);
|
||||
static int doapr_outch(char **, char **, size_t *, size_t *, int);
|
||||
static int _dopr(char **sbuffer, char **buffer,
|
||||
size_t *maxlen, size_t *retlen, int *truncated,
|
||||
const char *format, va_list args);
|
||||
|
||||
/* format read states */
|
||||
#define DP_S_DEFAULT 0
|
||||
@ -165,7 +165,7 @@ static void _dopr(char **sbuffer, char **buffer,
|
||||
#define char_to_int(p) (p - '0')
|
||||
#define OSSL_MAX(p,q) ((p >= q) ? p : q)
|
||||
|
||||
static void
|
||||
static int
|
||||
_dopr(char **sbuffer,
|
||||
char **buffer,
|
||||
size_t *maxlen,
|
||||
@ -196,7 +196,8 @@ _dopr(char **sbuffer,
|
||||
if (ch == '%')
|
||||
state = DP_S_FLAGS;
|
||||
else
|
||||
doapr_outch(sbuffer, buffer, &currlen, maxlen, ch);
|
||||
if(!doapr_outch(sbuffer, buffer, &currlen, maxlen, ch))
|
||||
return 0;
|
||||
ch = *format++;
|
||||
break;
|
||||
case DP_S_FLAGS:
|
||||
@ -302,8 +303,9 @@ _dopr(char **sbuffer,
|
||||
value = va_arg(args, int);
|
||||
break;
|
||||
}
|
||||
fmtint(sbuffer, buffer, &currlen, maxlen,
|
||||
value, 10, min, max, flags);
|
||||
if (!fmtint(sbuffer, buffer, &currlen, maxlen, value, 10, min,
|
||||
max, flags))
|
||||
return 0;
|
||||
break;
|
||||
case 'X':
|
||||
flags |= DP_F_UP;
|
||||
@ -326,17 +328,19 @@ _dopr(char **sbuffer,
|
||||
value = (LLONG) va_arg(args, unsigned int);
|
||||
break;
|
||||
}
|
||||
fmtint(sbuffer, buffer, &currlen, maxlen, value,
|
||||
ch == 'o' ? 8 : (ch == 'u' ? 10 : 16),
|
||||
min, max, flags);
|
||||
if (!fmtint(sbuffer, buffer, &currlen, maxlen, value,
|
||||
ch == 'o' ? 8 : (ch == 'u' ? 10 : 16),
|
||||
min, max, flags))
|
||||
return 0;
|
||||
break;
|
||||
case 'f':
|
||||
if (cflags == DP_C_LDOUBLE)
|
||||
fvalue = va_arg(args, LDOUBLE);
|
||||
else
|
||||
fvalue = va_arg(args, double);
|
||||
fmtfp(sbuffer, buffer, &currlen, maxlen,
|
||||
fvalue, min, max, flags);
|
||||
if (!fmtfp(sbuffer, buffer, &currlen, maxlen, fvalue, min, max,
|
||||
flags))
|
||||
return 0;
|
||||
break;
|
||||
case 'E':
|
||||
flags |= DP_F_UP;
|
||||
@ -355,8 +359,9 @@ _dopr(char **sbuffer,
|
||||
fvalue = va_arg(args, double);
|
||||
break;
|
||||
case 'c':
|
||||
doapr_outch(sbuffer, buffer, &currlen, maxlen,
|
||||
va_arg(args, int));
|
||||
if(!doapr_outch(sbuffer, buffer, &currlen, maxlen,
|
||||
va_arg(args, int)))
|
||||
return 0;
|
||||
break;
|
||||
case 's':
|
||||
strvalue = va_arg(args, char *);
|
||||
@ -366,13 +371,15 @@ _dopr(char **sbuffer,
|
||||
else
|
||||
max = *maxlen;
|
||||
}
|
||||
fmtstr(sbuffer, buffer, &currlen, maxlen, strvalue,
|
||||
flags, min, max);
|
||||
if (!fmtstr(sbuffer, buffer, &currlen, maxlen, strvalue,
|
||||
flags, min, max))
|
||||
return 0;
|
||||
break;
|
||||
case 'p':
|
||||
value = (long)va_arg(args, void *);
|
||||
fmtint(sbuffer, buffer, &currlen, maxlen,
|
||||
value, 16, min, max, flags | DP_F_NUM);
|
||||
if (!fmtint(sbuffer, buffer, &currlen, maxlen,
|
||||
value, 16, min, max, flags | DP_F_NUM))
|
||||
return 0;
|
||||
break;
|
||||
case 'n': /* XXX */
|
||||
if (cflags == DP_C_SHORT) {
|
||||
@ -394,7 +401,8 @@ _dopr(char **sbuffer,
|
||||
}
|
||||
break;
|
||||
case '%':
|
||||
doapr_outch(sbuffer, buffer, &currlen, maxlen, ch);
|
||||
if(!doapr_outch(sbuffer, buffer, &currlen, maxlen, ch))
|
||||
return 0;
|
||||
break;
|
||||
case 'w':
|
||||
/* not supported yet, treat as next char */
|
||||
@ -418,46 +426,56 @@ _dopr(char **sbuffer,
|
||||
*truncated = (currlen > *maxlen - 1);
|
||||
if (*truncated)
|
||||
currlen = *maxlen - 1;
|
||||
doapr_outch(sbuffer, buffer, &currlen, maxlen, '\0');
|
||||
if(!doapr_outch(sbuffer, buffer, &currlen, maxlen, '\0'))
|
||||
return 0;
|
||||
*retlen = currlen - 1;
|
||||
return;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
fmtstr(char **sbuffer,
|
||||
char **buffer,
|
||||
size_t *currlen,
|
||||
size_t *maxlen, const char *value, int flags, int min, int max)
|
||||
{
|
||||
int padlen, strln;
|
||||
int padlen;
|
||||
size_t strln;
|
||||
int cnt = 0;
|
||||
|
||||
if (value == 0)
|
||||
value = "<NULL>";
|
||||
for (strln = 0; value[strln]; ++strln) ;
|
||||
|
||||
strln = strlen(value);
|
||||
if (strln > INT_MAX)
|
||||
strln = INT_MAX;
|
||||
|
||||
padlen = min - strln;
|
||||
if (padlen < 0)
|
||||
if (min < 0 || padlen < 0)
|
||||
padlen = 0;
|
||||
if (flags & DP_F_MINUS)
|
||||
padlen = -padlen;
|
||||
|
||||
while ((padlen > 0) && (cnt < max)) {
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, ' ');
|
||||
if(!doapr_outch(sbuffer, buffer, currlen, maxlen, ' '))
|
||||
return 0;
|
||||
--padlen;
|
||||
++cnt;
|
||||
}
|
||||
while (*value && (cnt < max)) {
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, *value++);
|
||||
if(!doapr_outch(sbuffer, buffer, currlen, maxlen, *value++))
|
||||
return 0;
|
||||
++cnt;
|
||||
}
|
||||
while ((padlen < 0) && (cnt < max)) {
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, ' ');
|
||||
if(!doapr_outch(sbuffer, buffer, currlen, maxlen, ' '))
|
||||
return 0;
|
||||
++padlen;
|
||||
++cnt;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
fmtint(char **sbuffer,
|
||||
char **buffer,
|
||||
size_t *currlen,
|
||||
@ -517,37 +535,44 @@ fmtint(char **sbuffer,
|
||||
|
||||
/* spaces */
|
||||
while (spadlen > 0) {
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, ' ');
|
||||
if(!doapr_outch(sbuffer, buffer, currlen, maxlen, ' '))
|
||||
return 0;
|
||||
--spadlen;
|
||||
}
|
||||
|
||||
/* sign */
|
||||
if (signvalue)
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, signvalue);
|
||||
if(!doapr_outch(sbuffer, buffer, currlen, maxlen, signvalue))
|
||||
return 0;
|
||||
|
||||
/* prefix */
|
||||
while (*prefix) {
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, *prefix);
|
||||
if(!doapr_outch(sbuffer, buffer, currlen, maxlen, *prefix))
|
||||
return 0;
|
||||
prefix++;
|
||||
}
|
||||
|
||||
/* zeros */
|
||||
if (zpadlen > 0) {
|
||||
while (zpadlen > 0) {
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, '0');
|
||||
if(!doapr_outch(sbuffer, buffer, currlen, maxlen, '0'))
|
||||
return 0;
|
||||
--zpadlen;
|
||||
}
|
||||
}
|
||||
/* digits */
|
||||
while (place > 0)
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, convert[--place]);
|
||||
while (place > 0) {
|
||||
if (!doapr_outch(sbuffer, buffer, currlen, maxlen, convert[--place]))
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* left justified spaces */
|
||||
while (spadlen < 0) {
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, ' ');
|
||||
if (!doapr_outch(sbuffer, buffer, currlen, maxlen, ' '))
|
||||
return 0;
|
||||
++spadlen;
|
||||
}
|
||||
return;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static LDOUBLE abs_val(LDOUBLE value)
|
||||
@ -578,7 +603,7 @@ static long roundv(LDOUBLE value)
|
||||
return intpart;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
fmtfp(char **sbuffer,
|
||||
char **buffer,
|
||||
size_t *currlen,
|
||||
@ -657,47 +682,61 @@ fmtfp(char **sbuffer,
|
||||
|
||||
if ((flags & DP_F_ZERO) && (padlen > 0)) {
|
||||
if (signvalue) {
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, signvalue);
|
||||
if (!doapr_outch(sbuffer, buffer, currlen, maxlen, signvalue))
|
||||
return 0;
|
||||
--padlen;
|
||||
signvalue = 0;
|
||||
}
|
||||
while (padlen > 0) {
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, '0');
|
||||
if (!doapr_outch(sbuffer, buffer, currlen, maxlen, '0'))
|
||||
return 0;
|
||||
--padlen;
|
||||
}
|
||||
}
|
||||
while (padlen > 0) {
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, ' ');
|
||||
if (!doapr_outch(sbuffer, buffer, currlen, maxlen, ' '))
|
||||
return 0;
|
||||
--padlen;
|
||||
}
|
||||
if (signvalue)
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, signvalue);
|
||||
if (signvalue && !doapr_outch(sbuffer, buffer, currlen, maxlen, signvalue))
|
||||
return 0;
|
||||
|
||||
while (iplace > 0)
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, iconvert[--iplace]);
|
||||
while (iplace > 0) {
|
||||
if (!doapr_outch(sbuffer, buffer, currlen, maxlen, iconvert[--iplace]))
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Decimal point. This should probably use locale to find the correct
|
||||
* char to print out.
|
||||
*/
|
||||
if (max > 0 || (flags & DP_F_NUM)) {
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, '.');
|
||||
if (!doapr_outch(sbuffer, buffer, currlen, maxlen, '.'))
|
||||
return 0;
|
||||
|
||||
while (fplace > 0)
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, fconvert[--fplace]);
|
||||
while (fplace > 0) {
|
||||
if(!doapr_outch(sbuffer, buffer, currlen, maxlen,
|
||||
fconvert[--fplace]))
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
while (zpadlen > 0) {
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, '0');
|
||||
if (!doapr_outch(sbuffer, buffer, currlen, maxlen, '0'))
|
||||
return 0;
|
||||
--zpadlen;
|
||||
}
|
||||
|
||||
while (padlen < 0) {
|
||||
doapr_outch(sbuffer, buffer, currlen, maxlen, ' ');
|
||||
if (!doapr_outch(sbuffer, buffer, currlen, maxlen, ' '))
|
||||
return 0;
|
||||
++padlen;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
#define BUFFER_INC 1024
|
||||
|
||||
static int
|
||||
doapr_outch(char **sbuffer,
|
||||
char **buffer, size_t *currlen, size_t *maxlen, int c)
|
||||
{
|
||||
@ -708,24 +747,25 @@ doapr_outch(char **sbuffer,
|
||||
assert(*currlen <= *maxlen);
|
||||
|
||||
if (buffer && *currlen == *maxlen) {
|
||||
*maxlen += 1024;
|
||||
if (*maxlen > INT_MAX - BUFFER_INC)
|
||||
return 0;
|
||||
|
||||
*maxlen += BUFFER_INC;
|
||||
if (*buffer == NULL) {
|
||||
*buffer = OPENSSL_malloc(*maxlen);
|
||||
if (!*buffer) {
|
||||
/* Panic! Can't really do anything sensible. Just return */
|
||||
return;
|
||||
}
|
||||
if (*buffer == NULL)
|
||||
return 0;
|
||||
if (*currlen > 0) {
|
||||
assert(*sbuffer != NULL);
|
||||
memcpy(*buffer, *sbuffer, *currlen);
|
||||
}
|
||||
*sbuffer = NULL;
|
||||
} else {
|
||||
*buffer = OPENSSL_realloc(*buffer, *maxlen);
|
||||
if (!*buffer) {
|
||||
/* Panic! Can't really do anything sensible. Just return */
|
||||
return;
|
||||
}
|
||||
char *tmpbuf;
|
||||
tmpbuf = OPENSSL_realloc(*buffer, *maxlen);
|
||||
if (tmpbuf == NULL)
|
||||
return 0;
|
||||
*buffer = tmpbuf;
|
||||
}
|
||||
}
|
||||
|
||||
@ -736,7 +776,7 @@ doapr_outch(char **sbuffer,
|
||||
(*buffer)[(*currlen)++] = (char)c;
|
||||
}
|
||||
|
||||
return;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
@ -768,7 +808,11 @@ int BIO_vprintf(BIO *bio, const char *format, va_list args)
|
||||
|
||||
dynbuf = NULL;
|
||||
CRYPTO_push_info("doapr()");
|
||||
_dopr(&hugebufp, &dynbuf, &hugebufsize, &retlen, &ignored, format, args);
|
||||
if (!_dopr(&hugebufp, &dynbuf, &hugebufsize, &retlen, &ignored, format,
|
||||
args)) {
|
||||
OPENSSL_free(dynbuf);
|
||||
return -1;
|
||||
}
|
||||
if (dynbuf) {
|
||||
ret = BIO_write(bio, dynbuf, (int)retlen);
|
||||
OPENSSL_free(dynbuf);
|
||||
@ -803,7 +847,8 @@ int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args)
|
||||
size_t retlen;
|
||||
int truncated;
|
||||
|
||||
_dopr(&buf, NULL, &n, &retlen, &truncated, format, args);
|
||||
if(!_dopr(&buf, NULL, &n, &retlen, &truncated, format, args))
|
||||
return -1;
|
||||
|
||||
if (truncated)
|
||||
/*
|
||||
|
@ -479,7 +479,7 @@ struct bio_dgram_sctp_prinfo {
|
||||
# define BIO_get_conn_hostname(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)
|
||||
# define BIO_get_conn_port(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)
|
||||
# define BIO_get_conn_ip(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)
|
||||
# define BIO_get_conn_int_port(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,0,NULL)
|
||||
# define BIO_get_conn_int_port(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL)
|
||||
|
||||
# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL)
|
||||
|
||||
@ -689,7 +689,7 @@ long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi,
|
||||
long argl, long ret);
|
||||
|
||||
BIO_METHOD *BIO_s_mem(void);
|
||||
BIO *BIO_new_mem_buf(void *buf, int len);
|
||||
BIO *BIO_new_mem_buf(const void *buf, int len);
|
||||
BIO_METHOD *BIO_s_socket(void);
|
||||
BIO_METHOD *BIO_s_connect(void);
|
||||
BIO_METHOD *BIO_s_accept(void);
|
||||
|
@ -91,7 +91,8 @@ BIO_METHOD *BIO_s_mem(void)
|
||||
return (&mem_method);
|
||||
}
|
||||
|
||||
BIO *BIO_new_mem_buf(void *buf, int len)
|
||||
|
||||
BIO *BIO_new_mem_buf(const void *buf, int len)
|
||||
{
|
||||
BIO *ret;
|
||||
BUF_MEM *b;
|
||||
@ -105,7 +106,8 @@ BIO *BIO_new_mem_buf(void *buf, int len)
|
||||
if (!(ret = BIO_new(BIO_s_mem())))
|
||||
return NULL;
|
||||
b = (BUF_MEM *)ret->ptr;
|
||||
b->data = buf;
|
||||
/* Cast away const and trust in the MEM_RDONLY flag. */
|
||||
b->data = (void *)buf;
|
||||
b->length = sz;
|
||||
b->max = sz;
|
||||
ret->flags |= BIO_FLAGS_MEM_RDONLY;
|
||||
|
@ -252,8 +252,8 @@ bn_exp.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
||||
bn_exp.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
|
||||
bn_exp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
|
||||
bn_exp.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
|
||||
bn_exp.o: ../../include/openssl/symhacks.h ../cryptlib.h bn_exp.c bn_lcl.h
|
||||
bn_exp.o: rsaz_exp.h
|
||||
bn_exp.o: ../../include/openssl/symhacks.h ../constant_time_locl.h
|
||||
bn_exp.o: ../cryptlib.h bn_exp.c bn_lcl.h rsaz_exp.h
|
||||
bn_exp2.o: ../../e_os.h ../../include/openssl/bio.h ../../include/openssl/bn.h
|
||||
bn_exp2.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
|
||||
bn_exp2.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
||||
|
@ -443,7 +443,7 @@ $TEMP2 = $B2;
|
||||
$TEMP3 = $Y1;
|
||||
$TEMP4 = $Y2;
|
||||
$code.=<<___;
|
||||
#we need to fix indexes 32-39 to avoid overflow
|
||||
# we need to fix indices 32-39 to avoid overflow
|
||||
vmovdqu 32*8(%rsp), $ACC8 # 32*8-192($tp0),
|
||||
vmovdqu 32*9(%rsp), $ACC1 # 32*9-192($tp0)
|
||||
vmovdqu 32*10(%rsp), $ACC2 # 32*10-192($tp0)
|
||||
@ -1592,68 +1592,128 @@ rsaz_1024_scatter5_avx2:
|
||||
.type rsaz_1024_gather5_avx2,\@abi-omnipotent
|
||||
.align 32
|
||||
rsaz_1024_gather5_avx2:
|
||||
vzeroupper
|
||||
mov %rsp,%r11
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
lea -0x88(%rsp),%rax
|
||||
vzeroupper
|
||||
.LSEH_begin_rsaz_1024_gather5:
|
||||
# I can't trust assembler to use specific encoding:-(
|
||||
.byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax),%rsp
|
||||
.byte 0xc5,0xf8,0x29,0x70,0xe0 #vmovaps %xmm6,-0x20(%rax)
|
||||
.byte 0xc5,0xf8,0x29,0x78,0xf0 #vmovaps %xmm7,-0x10(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x40,0x00 #vmovaps %xmm8,0(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x48,0x10 #vmovaps %xmm9,0x10(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x50,0x20 #vmovaps %xmm10,0x20(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x58,0x30 #vmovaps %xmm11,0x30(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x60,0x40 #vmovaps %xmm12,0x40(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x68,0x50 #vmovaps %xmm13,0x50(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x70,0x60 #vmovaps %xmm14,0x60(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x78,0x70 #vmovaps %xmm15,0x70(%rax)
|
||||
.byte 0x48,0x8d,0x60,0xe0 # lea -0x20(%rax),%rsp
|
||||
.byte 0xc5,0xf8,0x29,0x70,0xe0 # vmovaps %xmm6,-0x20(%rax)
|
||||
.byte 0xc5,0xf8,0x29,0x78,0xf0 # vmovaps %xmm7,-0x10(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x40,0x00 # vmovaps %xmm8,0(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x48,0x10 # vmovaps %xmm9,0x10(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x50,0x20 # vmovaps %xmm10,0x20(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x58,0x30 # vmovaps %xmm11,0x30(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x60,0x40 # vmovaps %xmm12,0x40(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x68,0x50 # vmovaps %xmm13,0x50(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x70,0x60 # vmovaps %xmm14,0x60(%rax)
|
||||
.byte 0xc5,0x78,0x29,0x78,0x70 # vmovaps %xmm15,0x70(%rax)
|
||||
___
|
||||
$code.=<<___;
|
||||
lea .Lgather_table(%rip),%r11
|
||||
mov $power,%eax
|
||||
and \$3,$power
|
||||
shr \$2,%eax # cache line number
|
||||
shl \$4,$power # offset within cache line
|
||||
lea -0x100(%rsp),%rsp
|
||||
and \$-32, %rsp
|
||||
lea .Linc(%rip), %r10
|
||||
lea -128(%rsp),%rax # control u-op density
|
||||
|
||||
vmovdqu -32(%r11),%ymm7 # .Lgather_permd
|
||||
vpbroadcastb 8(%r11,%rax), %xmm8
|
||||
vpbroadcastb 7(%r11,%rax), %xmm9
|
||||
vpbroadcastb 6(%r11,%rax), %xmm10
|
||||
vpbroadcastb 5(%r11,%rax), %xmm11
|
||||
vpbroadcastb 4(%r11,%rax), %xmm12
|
||||
vpbroadcastb 3(%r11,%rax), %xmm13
|
||||
vpbroadcastb 2(%r11,%rax), %xmm14
|
||||
vpbroadcastb 1(%r11,%rax), %xmm15
|
||||
vmovd $power, %xmm4
|
||||
vmovdqa (%r10),%ymm0
|
||||
vmovdqa 32(%r10),%ymm1
|
||||
vmovdqa 64(%r10),%ymm5
|
||||
vpbroadcastd %xmm4,%ymm4
|
||||
|
||||
lea 64($inp,$power),$inp
|
||||
mov \$64,%r11 # size optimization
|
||||
mov \$9,%eax
|
||||
jmp .Loop_gather_1024
|
||||
vpaddd %ymm5, %ymm0, %ymm2
|
||||
vpcmpeqd %ymm4, %ymm0, %ymm0
|
||||
vpaddd %ymm5, %ymm1, %ymm3
|
||||
vpcmpeqd %ymm4, %ymm1, %ymm1
|
||||
vmovdqa %ymm0, 32*0+128(%rax)
|
||||
vpaddd %ymm5, %ymm2, %ymm0
|
||||
vpcmpeqd %ymm4, %ymm2, %ymm2
|
||||
vmovdqa %ymm1, 32*1+128(%rax)
|
||||
vpaddd %ymm5, %ymm3, %ymm1
|
||||
vpcmpeqd %ymm4, %ymm3, %ymm3
|
||||
vmovdqa %ymm2, 32*2+128(%rax)
|
||||
vpaddd %ymm5, %ymm0, %ymm2
|
||||
vpcmpeqd %ymm4, %ymm0, %ymm0
|
||||
vmovdqa %ymm3, 32*3+128(%rax)
|
||||
vpaddd %ymm5, %ymm1, %ymm3
|
||||
vpcmpeqd %ymm4, %ymm1, %ymm1
|
||||
vmovdqa %ymm0, 32*4+128(%rax)
|
||||
vpaddd %ymm5, %ymm2, %ymm8
|
||||
vpcmpeqd %ymm4, %ymm2, %ymm2
|
||||
vmovdqa %ymm1, 32*5+128(%rax)
|
||||
vpaddd %ymm5, %ymm3, %ymm9
|
||||
vpcmpeqd %ymm4, %ymm3, %ymm3
|
||||
vmovdqa %ymm2, 32*6+128(%rax)
|
||||
vpaddd %ymm5, %ymm8, %ymm10
|
||||
vpcmpeqd %ymm4, %ymm8, %ymm8
|
||||
vmovdqa %ymm3, 32*7+128(%rax)
|
||||
vpaddd %ymm5, %ymm9, %ymm11
|
||||
vpcmpeqd %ymm4, %ymm9, %ymm9
|
||||
vpaddd %ymm5, %ymm10, %ymm12
|
||||
vpcmpeqd %ymm4, %ymm10, %ymm10
|
||||
vpaddd %ymm5, %ymm11, %ymm13
|
||||
vpcmpeqd %ymm4, %ymm11, %ymm11
|
||||
vpaddd %ymm5, %ymm12, %ymm14
|
||||
vpcmpeqd %ymm4, %ymm12, %ymm12
|
||||
vpaddd %ymm5, %ymm13, %ymm15
|
||||
vpcmpeqd %ymm4, %ymm13, %ymm13
|
||||
vpcmpeqd %ymm4, %ymm14, %ymm14
|
||||
vpcmpeqd %ymm4, %ymm15, %ymm15
|
||||
|
||||
vmovdqa -32(%r10),%ymm7 # .Lgather_permd
|
||||
lea 128($inp), $inp
|
||||
mov \$9,$power
|
||||
|
||||
.align 32
|
||||
.Loop_gather_1024:
|
||||
vpand -64($inp), %xmm8,%xmm0
|
||||
vpand ($inp), %xmm9,%xmm1
|
||||
vpand 64($inp), %xmm10,%xmm2
|
||||
vpand ($inp,%r11,2), %xmm11,%xmm3
|
||||
vpor %xmm0,%xmm1,%xmm1
|
||||
vpand 64($inp,%r11,2), %xmm12,%xmm4
|
||||
vpor %xmm2,%xmm3,%xmm3
|
||||
vpand ($inp,%r11,4), %xmm13,%xmm5
|
||||
vpor %xmm1,%xmm3,%xmm3
|
||||
vpand 64($inp,%r11,4), %xmm14,%xmm6
|
||||
vpor %xmm4,%xmm5,%xmm5
|
||||
vpand -128($inp,%r11,8), %xmm15,%xmm2
|
||||
lea ($inp,%r11,8),$inp
|
||||
vpor %xmm3,%xmm5,%xmm5
|
||||
vpor %xmm2,%xmm6,%xmm6
|
||||
vpor %xmm5,%xmm6,%xmm6
|
||||
vpermd %ymm6,%ymm7,%ymm6
|
||||
vmovdqu %ymm6,($out)
|
||||
vmovdqa 32*0-128($inp), %ymm0
|
||||
vmovdqa 32*1-128($inp), %ymm1
|
||||
vmovdqa 32*2-128($inp), %ymm2
|
||||
vmovdqa 32*3-128($inp), %ymm3
|
||||
vpand 32*0+128(%rax), %ymm0, %ymm0
|
||||
vpand 32*1+128(%rax), %ymm1, %ymm1
|
||||
vpand 32*2+128(%rax), %ymm2, %ymm2
|
||||
vpor %ymm0, %ymm1, %ymm4
|
||||
vpand 32*3+128(%rax), %ymm3, %ymm3
|
||||
vmovdqa 32*4-128($inp), %ymm0
|
||||
vmovdqa 32*5-128($inp), %ymm1
|
||||
vpor %ymm2, %ymm3, %ymm5
|
||||
vmovdqa 32*6-128($inp), %ymm2
|
||||
vmovdqa 32*7-128($inp), %ymm3
|
||||
vpand 32*4+128(%rax), %ymm0, %ymm0
|
||||
vpand 32*5+128(%rax), %ymm1, %ymm1
|
||||
vpand 32*6+128(%rax), %ymm2, %ymm2
|
||||
vpor %ymm0, %ymm4, %ymm4
|
||||
vpand 32*7+128(%rax), %ymm3, %ymm3
|
||||
vpand 32*8-128($inp), %ymm8, %ymm0
|
||||
vpor %ymm1, %ymm5, %ymm5
|
||||
vpand 32*9-128($inp), %ymm9, %ymm1
|
||||
vpor %ymm2, %ymm4, %ymm4
|
||||
vpand 32*10-128($inp),%ymm10, %ymm2
|
||||
vpor %ymm3, %ymm5, %ymm5
|
||||
vpand 32*11-128($inp),%ymm11, %ymm3
|
||||
vpor %ymm0, %ymm4, %ymm4
|
||||
vpand 32*12-128($inp),%ymm12, %ymm0
|
||||
vpor %ymm1, %ymm5, %ymm5
|
||||
vpand 32*13-128($inp),%ymm13, %ymm1
|
||||
vpor %ymm2, %ymm4, %ymm4
|
||||
vpand 32*14-128($inp),%ymm14, %ymm2
|
||||
vpor %ymm3, %ymm5, %ymm5
|
||||
vpand 32*15-128($inp),%ymm15, %ymm3
|
||||
lea 32*16($inp), $inp
|
||||
vpor %ymm0, %ymm4, %ymm4
|
||||
vpor %ymm1, %ymm5, %ymm5
|
||||
vpor %ymm2, %ymm4, %ymm4
|
||||
vpor %ymm3, %ymm5, %ymm5
|
||||
|
||||
vpor %ymm5, %ymm4, %ymm4
|
||||
vextracti128 \$1, %ymm4, %xmm5 # upper half is cleared
|
||||
vpor %xmm4, %xmm5, %xmm5
|
||||
vpermd %ymm5,%ymm7,%ymm5
|
||||
vmovdqu %ymm5,($out)
|
||||
lea 32($out),$out
|
||||
dec %eax
|
||||
dec $power
|
||||
jnz .Loop_gather_1024
|
||||
|
||||
vpxor %ymm0,%ymm0,%ymm0
|
||||
@ -1661,20 +1721,20 @@ $code.=<<___;
|
||||
vzeroupper
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
movaps (%rsp),%xmm6
|
||||
movaps 0x10(%rsp),%xmm7
|
||||
movaps 0x20(%rsp),%xmm8
|
||||
movaps 0x30(%rsp),%xmm9
|
||||
movaps 0x40(%rsp),%xmm10
|
||||
movaps 0x50(%rsp),%xmm11
|
||||
movaps 0x60(%rsp),%xmm12
|
||||
movaps 0x70(%rsp),%xmm13
|
||||
movaps 0x80(%rsp),%xmm14
|
||||
movaps 0x90(%rsp),%xmm15
|
||||
lea 0xa8(%rsp),%rsp
|
||||
movaps -0xa8(%r11),%xmm6
|
||||
movaps -0x98(%r11),%xmm7
|
||||
movaps -0x88(%r11),%xmm8
|
||||
movaps -0x78(%r11),%xmm9
|
||||
movaps -0x68(%r11),%xmm10
|
||||
movaps -0x58(%r11),%xmm11
|
||||
movaps -0x48(%r11),%xmm12
|
||||
movaps -0x38(%r11),%xmm13
|
||||
movaps -0x28(%r11),%xmm14
|
||||
movaps -0x18(%r11),%xmm15
|
||||
.LSEH_end_rsaz_1024_gather5:
|
||||
___
|
||||
$code.=<<___;
|
||||
lea (%r11),%rsp
|
||||
ret
|
||||
.size rsaz_1024_gather5_avx2,.-rsaz_1024_gather5_avx2
|
||||
___
|
||||
@ -1708,8 +1768,10 @@ $code.=<<___;
|
||||
.long 0,2,4,6,7,7,7,7
|
||||
.Lgather_permd:
|
||||
.long 0,7,1,7,2,7,3,7
|
||||
.Lgather_table:
|
||||
.byte 0,0,0,0,0,0,0,0, 0xff,0,0,0,0,0,0,0
|
||||
.Linc:
|
||||
.long 0,0,0,0, 1,1,1,1
|
||||
.long 2,2,2,2, 3,3,3,3
|
||||
.long 4,4,4,4, 4,4,4,4
|
||||
.align 64
|
||||
___
|
||||
|
||||
@ -1837,18 +1899,19 @@ rsaz_se_handler:
|
||||
.rva rsaz_se_handler
|
||||
.rva .Lmul_1024_body,.Lmul_1024_epilogue
|
||||
.LSEH_info_rsaz_1024_gather5:
|
||||
.byte 0x01,0x33,0x16,0x00
|
||||
.byte 0x36,0xf8,0x09,0x00 #vmovaps 0x90(rsp),xmm15
|
||||
.byte 0x31,0xe8,0x08,0x00 #vmovaps 0x80(rsp),xmm14
|
||||
.byte 0x2c,0xd8,0x07,0x00 #vmovaps 0x70(rsp),xmm13
|
||||
.byte 0x27,0xc8,0x06,0x00 #vmovaps 0x60(rsp),xmm12
|
||||
.byte 0x22,0xb8,0x05,0x00 #vmovaps 0x50(rsp),xmm11
|
||||
.byte 0x1d,0xa8,0x04,0x00 #vmovaps 0x40(rsp),xmm10
|
||||
.byte 0x18,0x98,0x03,0x00 #vmovaps 0x30(rsp),xmm9
|
||||
.byte 0x13,0x88,0x02,0x00 #vmovaps 0x20(rsp),xmm8
|
||||
.byte 0x0e,0x78,0x01,0x00 #vmovaps 0x10(rsp),xmm7
|
||||
.byte 0x09,0x68,0x00,0x00 #vmovaps 0x00(rsp),xmm6
|
||||
.byte 0x04,0x01,0x15,0x00 #sub rsp,0xa8
|
||||
.byte 0x01,0x36,0x17,0x0b
|
||||
.byte 0x36,0xf8,0x09,0x00 # vmovaps 0x90(rsp),xmm15
|
||||
.byte 0x31,0xe8,0x08,0x00 # vmovaps 0x80(rsp),xmm14
|
||||
.byte 0x2c,0xd8,0x07,0x00 # vmovaps 0x70(rsp),xmm13
|
||||
.byte 0x27,0xc8,0x06,0x00 # vmovaps 0x60(rsp),xmm12
|
||||
.byte 0x22,0xb8,0x05,0x00 # vmovaps 0x50(rsp),xmm11
|
||||
.byte 0x1d,0xa8,0x04,0x00 # vmovaps 0x40(rsp),xmm10
|
||||
.byte 0x18,0x98,0x03,0x00 # vmovaps 0x30(rsp),xmm9
|
||||
.byte 0x13,0x88,0x02,0x00 # vmovaps 0x20(rsp),xmm8
|
||||
.byte 0x0e,0x78,0x01,0x00 # vmovaps 0x10(rsp),xmm7
|
||||
.byte 0x09,0x68,0x00,0x00 # vmovaps 0x00(rsp),xmm6
|
||||
.byte 0x04,0x01,0x15,0x00 # sub rsp,0xa8
|
||||
.byte 0x00,0xb3,0x00,0x00 # set_frame r11
|
||||
___
|
||||
}
|
||||
|
||||
|
@ -915,9 +915,76 @@ rsaz_512_mul_gather4:
|
||||
push %r14
|
||||
push %r15
|
||||
|
||||
mov $pwr, $pwr
|
||||
subq \$128+24, %rsp
|
||||
subq \$`128+24+($win64?0xb0:0)`, %rsp
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
movaps %xmm6,0xa0(%rsp)
|
||||
movaps %xmm7,0xb0(%rsp)
|
||||
movaps %xmm8,0xc0(%rsp)
|
||||
movaps %xmm9,0xd0(%rsp)
|
||||
movaps %xmm10,0xe0(%rsp)
|
||||
movaps %xmm11,0xf0(%rsp)
|
||||
movaps %xmm12,0x100(%rsp)
|
||||
movaps %xmm13,0x110(%rsp)
|
||||
movaps %xmm14,0x120(%rsp)
|
||||
movaps %xmm15,0x130(%rsp)
|
||||
___
|
||||
$code.=<<___;
|
||||
.Lmul_gather4_body:
|
||||
movd $pwr,%xmm8
|
||||
movdqa .Linc+16(%rip),%xmm1 # 00000002000000020000000200000002
|
||||
movdqa .Linc(%rip),%xmm0 # 00000001000000010000000000000000
|
||||
|
||||
pshufd \$0,%xmm8,%xmm8 # broadcast $power
|
||||
movdqa %xmm1,%xmm7
|
||||
movdqa %xmm1,%xmm2
|
||||
___
|
||||
########################################################################
|
||||
# calculate mask by comparing 0..15 to $power
|
||||
#
|
||||
for($i=0;$i<4;$i++) {
|
||||
$code.=<<___;
|
||||
paddd %xmm`$i`,%xmm`$i+1`
|
||||
pcmpeqd %xmm8,%xmm`$i`
|
||||
movdqa %xmm7,%xmm`$i+3`
|
||||
___
|
||||
}
|
||||
for(;$i<7;$i++) {
|
||||
$code.=<<___;
|
||||
paddd %xmm`$i`,%xmm`$i+1`
|
||||
pcmpeqd %xmm8,%xmm`$i`
|
||||
___
|
||||
}
|
||||
$code.=<<___;
|
||||
pcmpeqd %xmm8,%xmm7
|
||||
|
||||
movdqa 16*0($bp),%xmm8
|
||||
movdqa 16*1($bp),%xmm9
|
||||
movdqa 16*2($bp),%xmm10
|
||||
movdqa 16*3($bp),%xmm11
|
||||
pand %xmm0,%xmm8
|
||||
movdqa 16*4($bp),%xmm12
|
||||
pand %xmm1,%xmm9
|
||||
movdqa 16*5($bp),%xmm13
|
||||
pand %xmm2,%xmm10
|
||||
movdqa 16*6($bp),%xmm14
|
||||
pand %xmm3,%xmm11
|
||||
movdqa 16*7($bp),%xmm15
|
||||
leaq 128($bp), %rbp
|
||||
pand %xmm4,%xmm12
|
||||
pand %xmm5,%xmm13
|
||||
pand %xmm6,%xmm14
|
||||
pand %xmm7,%xmm15
|
||||
por %xmm10,%xmm8
|
||||
por %xmm11,%xmm9
|
||||
por %xmm12,%xmm8
|
||||
por %xmm13,%xmm9
|
||||
por %xmm14,%xmm8
|
||||
por %xmm15,%xmm9
|
||||
|
||||
por %xmm9,%xmm8
|
||||
pshufd \$0x4e,%xmm8,%xmm9
|
||||
por %xmm9,%xmm8
|
||||
___
|
||||
$code.=<<___ if ($addx);
|
||||
movl \$0x80100,%r11d
|
||||
@ -926,45 +993,38 @@ $code.=<<___ if ($addx);
|
||||
je .Lmulx_gather
|
||||
___
|
||||
$code.=<<___;
|
||||
movl 64($bp,$pwr,4), %eax
|
||||
movq $out, %xmm0 # off-load arguments
|
||||
movl ($bp,$pwr,4), %ebx
|
||||
movq $mod, %xmm1
|
||||
movq $n0, 128(%rsp)
|
||||
movq %xmm8,%rbx
|
||||
|
||||
movq $n0, 128(%rsp) # off-load arguments
|
||||
movq $out, 128+8(%rsp)
|
||||
movq $mod, 128+16(%rsp)
|
||||
|
||||
shlq \$32, %rax
|
||||
or %rax, %rbx
|
||||
movq ($ap), %rax
|
||||
movq 8($ap), %rcx
|
||||
leaq 128($bp,$pwr,4), %rbp
|
||||
mulq %rbx # 0 iteration
|
||||
movq %rax, (%rsp)
|
||||
movq %rcx, %rax
|
||||
movq %rdx, %r8
|
||||
|
||||
mulq %rbx
|
||||
movd (%rbp), %xmm4
|
||||
addq %rax, %r8
|
||||
movq 16($ap), %rax
|
||||
movq %rdx, %r9
|
||||
adcq \$0, %r9
|
||||
|
||||
mulq %rbx
|
||||
movd 64(%rbp), %xmm5
|
||||
addq %rax, %r9
|
||||
movq 24($ap), %rax
|
||||
movq %rdx, %r10
|
||||
adcq \$0, %r10
|
||||
|
||||
mulq %rbx
|
||||
pslldq \$4, %xmm5
|
||||
addq %rax, %r10
|
||||
movq 32($ap), %rax
|
||||
movq %rdx, %r11
|
||||
adcq \$0, %r11
|
||||
|
||||
mulq %rbx
|
||||
por %xmm5, %xmm4
|
||||
addq %rax, %r11
|
||||
movq 40($ap), %rax
|
||||
movq %rdx, %r12
|
||||
@ -977,14 +1037,12 @@ $code.=<<___;
|
||||
adcq \$0, %r13
|
||||
|
||||
mulq %rbx
|
||||
leaq 128(%rbp), %rbp
|
||||
addq %rax, %r13
|
||||
movq 56($ap), %rax
|
||||
movq %rdx, %r14
|
||||
adcq \$0, %r14
|
||||
|
||||
mulq %rbx
|
||||
movq %xmm4, %rbx
|
||||
addq %rax, %r14
|
||||
movq ($ap), %rax
|
||||
movq %rdx, %r15
|
||||
@ -996,6 +1054,35 @@ $code.=<<___;
|
||||
|
||||
.align 32
|
||||
.Loop_mul_gather:
|
||||
movdqa 16*0(%rbp),%xmm8
|
||||
movdqa 16*1(%rbp),%xmm9
|
||||
movdqa 16*2(%rbp),%xmm10
|
||||
movdqa 16*3(%rbp),%xmm11
|
||||
pand %xmm0,%xmm8
|
||||
movdqa 16*4(%rbp),%xmm12
|
||||
pand %xmm1,%xmm9
|
||||
movdqa 16*5(%rbp),%xmm13
|
||||
pand %xmm2,%xmm10
|
||||
movdqa 16*6(%rbp),%xmm14
|
||||
pand %xmm3,%xmm11
|
||||
movdqa 16*7(%rbp),%xmm15
|
||||
leaq 128(%rbp), %rbp
|
||||
pand %xmm4,%xmm12
|
||||
pand %xmm5,%xmm13
|
||||
pand %xmm6,%xmm14
|
||||
pand %xmm7,%xmm15
|
||||
por %xmm10,%xmm8
|
||||
por %xmm11,%xmm9
|
||||
por %xmm12,%xmm8
|
||||
por %xmm13,%xmm9
|
||||
por %xmm14,%xmm8
|
||||
por %xmm15,%xmm9
|
||||
|
||||
por %xmm9,%xmm8
|
||||
pshufd \$0x4e,%xmm8,%xmm9
|
||||
por %xmm9,%xmm8
|
||||
movq %xmm8,%rbx
|
||||
|
||||
mulq %rbx
|
||||
addq %rax, %r8
|
||||
movq 8($ap), %rax
|
||||
@ -1004,7 +1091,6 @@ $code.=<<___;
|
||||
adcq \$0, %r8
|
||||
|
||||
mulq %rbx
|
||||
movd (%rbp), %xmm4
|
||||
addq %rax, %r9
|
||||
movq 16($ap), %rax
|
||||
adcq \$0, %rdx
|
||||
@ -1013,7 +1099,6 @@ $code.=<<___;
|
||||
adcq \$0, %r9
|
||||
|
||||
mulq %rbx
|
||||
movd 64(%rbp), %xmm5
|
||||
addq %rax, %r10
|
||||
movq 24($ap), %rax
|
||||
adcq \$0, %rdx
|
||||
@ -1022,7 +1107,6 @@ $code.=<<___;
|
||||
adcq \$0, %r10
|
||||
|
||||
mulq %rbx
|
||||
pslldq \$4, %xmm5
|
||||
addq %rax, %r11
|
||||
movq 32($ap), %rax
|
||||
adcq \$0, %rdx
|
||||
@ -1031,7 +1115,6 @@ $code.=<<___;
|
||||
adcq \$0, %r11
|
||||
|
||||
mulq %rbx
|
||||
por %xmm5, %xmm4
|
||||
addq %rax, %r12
|
||||
movq 40($ap), %rax
|
||||
adcq \$0, %rdx
|
||||
@ -1056,7 +1139,6 @@ $code.=<<___;
|
||||
adcq \$0, %r14
|
||||
|
||||
mulq %rbx
|
||||
movq %xmm4, %rbx
|
||||
addq %rax, %r15
|
||||
movq ($ap), %rax
|
||||
adcq \$0, %rdx
|
||||
@ -1064,7 +1146,6 @@ $code.=<<___;
|
||||
movq %rdx, %r15
|
||||
adcq \$0, %r15
|
||||
|
||||
leaq 128(%rbp), %rbp
|
||||
leaq 8(%rdi), %rdi
|
||||
|
||||
decl %ecx
|
||||
@ -1079,8 +1160,8 @@ $code.=<<___;
|
||||
movq %r14, 48(%rdi)
|
||||
movq %r15, 56(%rdi)
|
||||
|
||||
movq %xmm0, $out
|
||||
movq %xmm1, %rbp
|
||||
movq 128+8(%rsp), $out
|
||||
movq 128+16(%rsp), %rbp
|
||||
|
||||
movq (%rsp), %r8
|
||||
movq 8(%rsp), %r9
|
||||
@ -1098,45 +1179,37 @@ $code.=<<___ if ($addx);
|
||||
|
||||
.align 32
|
||||
.Lmulx_gather:
|
||||
mov 64($bp,$pwr,4), %eax
|
||||
movq $out, %xmm0 # off-load arguments
|
||||
lea 128($bp,$pwr,4), %rbp
|
||||
mov ($bp,$pwr,4), %edx
|
||||
movq $mod, %xmm1
|
||||
mov $n0, 128(%rsp)
|
||||
movq %xmm8,%rdx
|
||||
|
||||
mov $n0, 128(%rsp) # off-load arguments
|
||||
mov $out, 128+8(%rsp)
|
||||
mov $mod, 128+16(%rsp)
|
||||
|
||||
shl \$32, %rax
|
||||
or %rax, %rdx
|
||||
mulx ($ap), %rbx, %r8 # 0 iteration
|
||||
mov %rbx, (%rsp)
|
||||
xor %edi, %edi # cf=0, of=0
|
||||
|
||||
mulx 8($ap), %rax, %r9
|
||||
movd (%rbp), %xmm4
|
||||
|
||||
mulx 16($ap), %rbx, %r10
|
||||
movd 64(%rbp), %xmm5
|
||||
adcx %rax, %r8
|
||||
|
||||
mulx 24($ap), %rax, %r11
|
||||
pslldq \$4, %xmm5
|
||||
adcx %rbx, %r9
|
||||
|
||||
mulx 32($ap), %rbx, %r12
|
||||
por %xmm5, %xmm4
|
||||
adcx %rax, %r10
|
||||
|
||||
mulx 40($ap), %rax, %r13
|
||||
adcx %rbx, %r11
|
||||
|
||||
mulx 48($ap), %rbx, %r14
|
||||
lea 128(%rbp), %rbp
|
||||
adcx %rax, %r12
|
||||
|
||||
mulx 56($ap), %rax, %r15
|
||||
movq %xmm4, %rdx
|
||||
adcx %rbx, %r13
|
||||
adcx %rax, %r14
|
||||
.byte 0x67
|
||||
mov %r8, %rbx
|
||||
adcx %rdi, %r15 # %rdi is 0
|
||||
|
||||
@ -1145,24 +1218,48 @@ $code.=<<___ if ($addx);
|
||||
|
||||
.align 32
|
||||
.Loop_mulx_gather:
|
||||
mulx ($ap), %rax, %r8
|
||||
movdqa 16*0(%rbp),%xmm8
|
||||
movdqa 16*1(%rbp),%xmm9
|
||||
movdqa 16*2(%rbp),%xmm10
|
||||
movdqa 16*3(%rbp),%xmm11
|
||||
pand %xmm0,%xmm8
|
||||
movdqa 16*4(%rbp),%xmm12
|
||||
pand %xmm1,%xmm9
|
||||
movdqa 16*5(%rbp),%xmm13
|
||||
pand %xmm2,%xmm10
|
||||
movdqa 16*6(%rbp),%xmm14
|
||||
pand %xmm3,%xmm11
|
||||
movdqa 16*7(%rbp),%xmm15
|
||||
leaq 128(%rbp), %rbp
|
||||
pand %xmm4,%xmm12
|
||||
pand %xmm5,%xmm13
|
||||
pand %xmm6,%xmm14
|
||||
pand %xmm7,%xmm15
|
||||
por %xmm10,%xmm8
|
||||
por %xmm11,%xmm9
|
||||
por %xmm12,%xmm8
|
||||
por %xmm13,%xmm9
|
||||
por %xmm14,%xmm8
|
||||
por %xmm15,%xmm9
|
||||
|
||||
por %xmm9,%xmm8
|
||||
pshufd \$0x4e,%xmm8,%xmm9
|
||||
por %xmm9,%xmm8
|
||||
movq %xmm8,%rdx
|
||||
|
||||
.byte 0xc4,0x62,0xfb,0xf6,0x86,0x00,0x00,0x00,0x00 # mulx ($ap), %rax, %r8
|
||||
adcx %rax, %rbx
|
||||
adox %r9, %r8
|
||||
|
||||
mulx 8($ap), %rax, %r9
|
||||
.byte 0x66,0x0f,0x6e,0xa5,0x00,0x00,0x00,0x00 # movd (%rbp), %xmm4
|
||||
adcx %rax, %r8
|
||||
adox %r10, %r9
|
||||
|
||||
mulx 16($ap), %rax, %r10
|
||||
movd 64(%rbp), %xmm5
|
||||
lea 128(%rbp), %rbp
|
||||
adcx %rax, %r9
|
||||
adox %r11, %r10
|
||||
|
||||
.byte 0xc4,0x62,0xfb,0xf6,0x9e,0x18,0x00,0x00,0x00 # mulx 24($ap), %rax, %r11
|
||||
pslldq \$4, %xmm5
|
||||
por %xmm5, %xmm4
|
||||
adcx %rax, %r10
|
||||
adox %r12, %r11
|
||||
|
||||
@ -1176,10 +1273,10 @@ $code.=<<___ if ($addx);
|
||||
|
||||
.byte 0xc4,0x62,0xfb,0xf6,0xb6,0x30,0x00,0x00,0x00 # mulx 48($ap), %rax, %r14
|
||||
adcx %rax, %r13
|
||||
.byte 0x67
|
||||
adox %r15, %r14
|
||||
|
||||
mulx 56($ap), %rax, %r15
|
||||
movq %xmm4, %rdx
|
||||
mov %rbx, 64(%rsp,%rcx,8)
|
||||
adcx %rax, %r14
|
||||
adox %rdi, %r15
|
||||
@ -1198,10 +1295,10 @@ $code.=<<___ if ($addx);
|
||||
mov %r14, 64+48(%rsp)
|
||||
mov %r15, 64+56(%rsp)
|
||||
|
||||
movq %xmm0, $out
|
||||
movq %xmm1, %rbp
|
||||
mov 128(%rsp), %rdx # pull arguments
|
||||
mov 128+8(%rsp), $out
|
||||
mov 128+16(%rsp), %rbp
|
||||
|
||||
mov 128(%rsp), %rdx # pull $n0
|
||||
mov (%rsp), %r8
|
||||
mov 8(%rsp), %r9
|
||||
mov 16(%rsp), %r10
|
||||
@ -1229,6 +1326,21 @@ $code.=<<___;
|
||||
call __rsaz_512_subtract
|
||||
|
||||
leaq 128+24+48(%rsp), %rax
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
movaps 0xa0-0xc8(%rax),%xmm6
|
||||
movaps 0xb0-0xc8(%rax),%xmm7
|
||||
movaps 0xc0-0xc8(%rax),%xmm8
|
||||
movaps 0xd0-0xc8(%rax),%xmm9
|
||||
movaps 0xe0-0xc8(%rax),%xmm10
|
||||
movaps 0xf0-0xc8(%rax),%xmm11
|
||||
movaps 0x100-0xc8(%rax),%xmm12
|
||||
movaps 0x110-0xc8(%rax),%xmm13
|
||||
movaps 0x120-0xc8(%rax),%xmm14
|
||||
movaps 0x130-0xc8(%rax),%xmm15
|
||||
lea 0xb0(%rax),%rax
|
||||
___
|
||||
$code.=<<___;
|
||||
movq -48(%rax), %r15
|
||||
movq -40(%rax), %r14
|
||||
movq -32(%rax), %r13
|
||||
@ -1258,7 +1370,7 @@ rsaz_512_mul_scatter4:
|
||||
mov $pwr, $pwr
|
||||
subq \$128+24, %rsp
|
||||
.Lmul_scatter4_body:
|
||||
leaq ($tbl,$pwr,4), $tbl
|
||||
leaq ($tbl,$pwr,8), $tbl
|
||||
movq $out, %xmm0 # off-load arguments
|
||||
movq $mod, %xmm1
|
||||
movq $tbl, %xmm2
|
||||
@ -1329,30 +1441,14 @@ $code.=<<___;
|
||||
|
||||
call __rsaz_512_subtract
|
||||
|
||||
movl %r8d, 64*0($inp) # scatter
|
||||
shrq \$32, %r8
|
||||
movl %r9d, 64*2($inp)
|
||||
shrq \$32, %r9
|
||||
movl %r10d, 64*4($inp)
|
||||
shrq \$32, %r10
|
||||
movl %r11d, 64*6($inp)
|
||||
shrq \$32, %r11
|
||||
movl %r12d, 64*8($inp)
|
||||
shrq \$32, %r12
|
||||
movl %r13d, 64*10($inp)
|
||||
shrq \$32, %r13
|
||||
movl %r14d, 64*12($inp)
|
||||
shrq \$32, %r14
|
||||
movl %r15d, 64*14($inp)
|
||||
shrq \$32, %r15
|
||||
movl %r8d, 64*1($inp)
|
||||
movl %r9d, 64*3($inp)
|
||||
movl %r10d, 64*5($inp)
|
||||
movl %r11d, 64*7($inp)
|
||||
movl %r12d, 64*9($inp)
|
||||
movl %r13d, 64*11($inp)
|
||||
movl %r14d, 64*13($inp)
|
||||
movl %r15d, 64*15($inp)
|
||||
movq %r8, 128*0($inp) # scatter
|
||||
movq %r9, 128*1($inp)
|
||||
movq %r10, 128*2($inp)
|
||||
movq %r11, 128*3($inp)
|
||||
movq %r12, 128*4($inp)
|
||||
movq %r13, 128*5($inp)
|
||||
movq %r14, 128*6($inp)
|
||||
movq %r15, 128*7($inp)
|
||||
|
||||
leaq 128+24+48(%rsp), %rax
|
||||
movq -48(%rax), %r15
|
||||
@ -1956,16 +2052,14 @@ $code.=<<___;
|
||||
.type rsaz_512_scatter4,\@abi-omnipotent
|
||||
.align 16
|
||||
rsaz_512_scatter4:
|
||||
leaq ($out,$power,4), $out
|
||||
leaq ($out,$power,8), $out
|
||||
movl \$8, %r9d
|
||||
jmp .Loop_scatter
|
||||
.align 16
|
||||
.Loop_scatter:
|
||||
movq ($inp), %rax
|
||||
leaq 8($inp), $inp
|
||||
movl %eax, ($out)
|
||||
shrq \$32, %rax
|
||||
movl %eax, 64($out)
|
||||
movq %rax, ($out)
|
||||
leaq 128($out), $out
|
||||
decl %r9d
|
||||
jnz .Loop_scatter
|
||||
@ -1976,22 +2070,106 @@ rsaz_512_scatter4:
|
||||
.type rsaz_512_gather4,\@abi-omnipotent
|
||||
.align 16
|
||||
rsaz_512_gather4:
|
||||
leaq ($inp,$power,4), $inp
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
.LSEH_begin_rsaz_512_gather4:
|
||||
.byte 0x48,0x81,0xec,0xa8,0x00,0x00,0x00 # sub $0xa8,%rsp
|
||||
.byte 0x0f,0x29,0x34,0x24 # movaps %xmm6,(%rsp)
|
||||
.byte 0x0f,0x29,0x7c,0x24,0x10 # movaps %xmm7,0x10(%rsp)
|
||||
.byte 0x44,0x0f,0x29,0x44,0x24,0x20 # movaps %xmm8,0x20(%rsp)
|
||||
.byte 0x44,0x0f,0x29,0x4c,0x24,0x30 # movaps %xmm9,0x30(%rsp)
|
||||
.byte 0x44,0x0f,0x29,0x54,0x24,0x40 # movaps %xmm10,0x40(%rsp)
|
||||
.byte 0x44,0x0f,0x29,0x5c,0x24,0x50 # movaps %xmm11,0x50(%rsp)
|
||||
.byte 0x44,0x0f,0x29,0x64,0x24,0x60 # movaps %xmm12,0x60(%rsp)
|
||||
.byte 0x44,0x0f,0x29,0x6c,0x24,0x70 # movaps %xmm13,0x70(%rsp)
|
||||
.byte 0x44,0x0f,0x29,0xb4,0x24,0x80,0,0,0 # movaps %xmm14,0x80(%rsp)
|
||||
.byte 0x44,0x0f,0x29,0xbc,0x24,0x90,0,0,0 # movaps %xmm15,0x90(%rsp)
|
||||
___
|
||||
$code.=<<___;
|
||||
movd $power,%xmm8
|
||||
movdqa .Linc+16(%rip),%xmm1 # 00000002000000020000000200000002
|
||||
movdqa .Linc(%rip),%xmm0 # 00000001000000010000000000000000
|
||||
|
||||
pshufd \$0,%xmm8,%xmm8 # broadcast $power
|
||||
movdqa %xmm1,%xmm7
|
||||
movdqa %xmm1,%xmm2
|
||||
___
|
||||
########################################################################
|
||||
# calculate mask by comparing 0..15 to $power
|
||||
#
|
||||
for($i=0;$i<4;$i++) {
|
||||
$code.=<<___;
|
||||
paddd %xmm`$i`,%xmm`$i+1`
|
||||
pcmpeqd %xmm8,%xmm`$i`
|
||||
movdqa %xmm7,%xmm`$i+3`
|
||||
___
|
||||
}
|
||||
for(;$i<7;$i++) {
|
||||
$code.=<<___;
|
||||
paddd %xmm`$i`,%xmm`$i+1`
|
||||
pcmpeqd %xmm8,%xmm`$i`
|
||||
___
|
||||
}
|
||||
$code.=<<___;
|
||||
pcmpeqd %xmm8,%xmm7
|
||||
movl \$8, %r9d
|
||||
jmp .Loop_gather
|
||||
.align 16
|
||||
.Loop_gather:
|
||||
movl ($inp), %eax
|
||||
movl 64($inp), %r8d
|
||||
movdqa 16*0($inp),%xmm8
|
||||
movdqa 16*1($inp),%xmm9
|
||||
movdqa 16*2($inp),%xmm10
|
||||
movdqa 16*3($inp),%xmm11
|
||||
pand %xmm0,%xmm8
|
||||
movdqa 16*4($inp),%xmm12
|
||||
pand %xmm1,%xmm9
|
||||
movdqa 16*5($inp),%xmm13
|
||||
pand %xmm2,%xmm10
|
||||
movdqa 16*6($inp),%xmm14
|
||||
pand %xmm3,%xmm11
|
||||
movdqa 16*7($inp),%xmm15
|
||||
leaq 128($inp), $inp
|
||||
shlq \$32, %r8
|
||||
or %r8, %rax
|
||||
movq %rax, ($out)
|
||||
pand %xmm4,%xmm12
|
||||
pand %xmm5,%xmm13
|
||||
pand %xmm6,%xmm14
|
||||
pand %xmm7,%xmm15
|
||||
por %xmm10,%xmm8
|
||||
por %xmm11,%xmm9
|
||||
por %xmm12,%xmm8
|
||||
por %xmm13,%xmm9
|
||||
por %xmm14,%xmm8
|
||||
por %xmm15,%xmm9
|
||||
|
||||
por %xmm9,%xmm8
|
||||
pshufd \$0x4e,%xmm8,%xmm9
|
||||
por %xmm9,%xmm8
|
||||
movq %xmm8,($out)
|
||||
leaq 8($out), $out
|
||||
decl %r9d
|
||||
jnz .Loop_gather
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
movaps 0x00(%rsp),%xmm6
|
||||
movaps 0x10(%rsp),%xmm7
|
||||
movaps 0x20(%rsp),%xmm8
|
||||
movaps 0x30(%rsp),%xmm9
|
||||
movaps 0x40(%rsp),%xmm10
|
||||
movaps 0x50(%rsp),%xmm11
|
||||
movaps 0x60(%rsp),%xmm12
|
||||
movaps 0x70(%rsp),%xmm13
|
||||
movaps 0x80(%rsp),%xmm14
|
||||
movaps 0x90(%rsp),%xmm15
|
||||
add \$0xa8,%rsp
|
||||
___
|
||||
$code.=<<___;
|
||||
ret
|
||||
.LSEH_end_rsaz_512_gather4:
|
||||
.size rsaz_512_gather4,.-rsaz_512_gather4
|
||||
|
||||
.align 64
|
||||
.Linc:
|
||||
.long 0,0, 1,1
|
||||
.long 2,2, 2,2
|
||||
___
|
||||
}
|
||||
|
||||
@ -2039,6 +2217,18 @@ se_handler:
|
||||
|
||||
lea 128+24+48(%rax),%rax
|
||||
|
||||
lea .Lmul_gather4_epilogue(%rip),%rbx
|
||||
cmp %r10,%rbx
|
||||
jne .Lse_not_in_mul_gather4
|
||||
|
||||
lea 0xb0(%rax),%rax
|
||||
|
||||
lea -48-0xa8(%rax),%rsi
|
||||
lea 512($context),%rdi
|
||||
mov \$20,%ecx
|
||||
.long 0xa548f3fc # cld; rep movsq
|
||||
|
||||
.Lse_not_in_mul_gather4:
|
||||
mov -8(%rax),%rbx
|
||||
mov -16(%rax),%rbp
|
||||
mov -24(%rax),%r12
|
||||
@ -2090,7 +2280,7 @@ se_handler:
|
||||
pop %rdi
|
||||
pop %rsi
|
||||
ret
|
||||
.size sqr_handler,.-sqr_handler
|
||||
.size se_handler,.-se_handler
|
||||
|
||||
.section .pdata
|
||||
.align 4
|
||||
@ -2114,6 +2304,10 @@ se_handler:
|
||||
.rva .LSEH_end_rsaz_512_mul_by_one
|
||||
.rva .LSEH_info_rsaz_512_mul_by_one
|
||||
|
||||
.rva .LSEH_begin_rsaz_512_gather4
|
||||
.rva .LSEH_end_rsaz_512_gather4
|
||||
.rva .LSEH_info_rsaz_512_gather4
|
||||
|
||||
.section .xdata
|
||||
.align 8
|
||||
.LSEH_info_rsaz_512_sqr:
|
||||
@ -2136,6 +2330,19 @@ se_handler:
|
||||
.byte 9,0,0,0
|
||||
.rva se_handler
|
||||
.rva .Lmul_by_one_body,.Lmul_by_one_epilogue # HandlerData[]
|
||||
.LSEH_info_rsaz_512_gather4:
|
||||
.byte 0x01,0x46,0x16,0x00
|
||||
.byte 0x46,0xf8,0x09,0x00 # vmovaps 0x90(rsp),xmm15
|
||||
.byte 0x3d,0xe8,0x08,0x00 # vmovaps 0x80(rsp),xmm14
|
||||
.byte 0x34,0xd8,0x07,0x00 # vmovaps 0x70(rsp),xmm13
|
||||
.byte 0x2e,0xc8,0x06,0x00 # vmovaps 0x60(rsp),xmm12
|
||||
.byte 0x28,0xb8,0x05,0x00 # vmovaps 0x50(rsp),xmm11
|
||||
.byte 0x22,0xa8,0x04,0x00 # vmovaps 0x40(rsp),xmm10
|
||||
.byte 0x1c,0x98,0x03,0x00 # vmovaps 0x30(rsp),xmm9
|
||||
.byte 0x16,0x88,0x02,0x00 # vmovaps 0x20(rsp),xmm8
|
||||
.byte 0x10,0x78,0x01,0x00 # vmovaps 0x10(rsp),xmm7
|
||||
.byte 0x0b,0x68,0x00,0x00 # vmovaps 0x00(rsp),xmm6
|
||||
.byte 0x07,0x01,0x15,0x00 # sub rsp,0xa8
|
||||
___
|
||||
}
|
||||
|
||||
|
@ -775,100 +775,126 @@ bn_sqr8x_mont:
|
||||
# 4096. this is done to allow memory disambiguation logic
|
||||
# do its job.
|
||||
#
|
||||
lea -64(%rsp,$num,4),%r11
|
||||
lea -64(%rsp,$num,2),%r11
|
||||
mov ($n0),$n0 # *n0
|
||||
sub $aptr,%r11
|
||||
and \$4095,%r11
|
||||
cmp %r11,%r10
|
||||
jb .Lsqr8x_sp_alt
|
||||
sub %r11,%rsp # align with $aptr
|
||||
lea -64(%rsp,$num,4),%rsp # alloca(frame+4*$num)
|
||||
lea -64(%rsp,$num,2),%rsp # alloca(frame+2*$num)
|
||||
jmp .Lsqr8x_sp_done
|
||||
|
||||
.align 32
|
||||
.Lsqr8x_sp_alt:
|
||||
lea 4096-64(,$num,4),%r10 # 4096-frame-4*$num
|
||||
lea -64(%rsp,$num,4),%rsp # alloca(frame+4*$num)
|
||||
lea 4096-64(,$num,2),%r10 # 4096-frame-2*$num
|
||||
lea -64(%rsp,$num,2),%rsp # alloca(frame+2*$num)
|
||||
sub %r10,%r11
|
||||
mov \$0,%r10
|
||||
cmovc %r10,%r11
|
||||
sub %r11,%rsp
|
||||
.Lsqr8x_sp_done:
|
||||
and \$-64,%rsp
|
||||
mov $num,%r10
|
||||
mov $num,%r10
|
||||
neg $num
|
||||
|
||||
lea 64(%rsp,$num,2),%r11 # copy of modulus
|
||||
mov $n0, 32(%rsp)
|
||||
mov %rax, 40(%rsp) # save original %rsp
|
||||
.Lsqr8x_body:
|
||||
|
||||
mov $num,$i
|
||||
movq %r11, %xmm2 # save pointer to modulus copy
|
||||
shr \$3+2,$i
|
||||
mov OPENSSL_ia32cap_P+8(%rip),%eax
|
||||
jmp .Lsqr8x_copy_n
|
||||
|
||||
.align 32
|
||||
.Lsqr8x_copy_n:
|
||||
movq 8*0($nptr),%xmm0
|
||||
movq 8*1($nptr),%xmm1
|
||||
movq 8*2($nptr),%xmm3
|
||||
movq 8*3($nptr),%xmm4
|
||||
lea 8*4($nptr),$nptr
|
||||
movdqa %xmm0,16*0(%r11)
|
||||
movdqa %xmm1,16*1(%r11)
|
||||
movdqa %xmm3,16*2(%r11)
|
||||
movdqa %xmm4,16*3(%r11)
|
||||
lea 16*4(%r11),%r11
|
||||
dec $i
|
||||
jnz .Lsqr8x_copy_n
|
||||
|
||||
movq $nptr, %xmm2 # save pointer to modulus
|
||||
pxor %xmm0,%xmm0
|
||||
movq $rptr,%xmm1 # save $rptr
|
||||
movq %r10, %xmm3 # -$num
|
||||
___
|
||||
$code.=<<___ if ($addx);
|
||||
mov OPENSSL_ia32cap_P+8(%rip),%eax
|
||||
and \$0x80100,%eax
|
||||
cmp \$0x80100,%eax
|
||||
jne .Lsqr8x_nox
|
||||
|
||||
call bn_sqrx8x_internal # see x86_64-mont5 module
|
||||
|
||||
pxor %xmm0,%xmm0
|
||||
lea 48(%rsp),%rax
|
||||
lea 64(%rsp,$num,2),%rdx
|
||||
shr \$3+2,$num
|
||||
mov 40(%rsp),%rsi # restore %rsp
|
||||
jmp .Lsqr8x_zero
|
||||
# %rax top-most carry
|
||||
# %rbp nptr
|
||||
# %rcx -8*num
|
||||
# %r8 end of tp[2*num]
|
||||
lea (%r8,%rcx),%rbx
|
||||
mov %rcx,$num
|
||||
mov %rcx,%rdx
|
||||
movq %xmm1,$rptr
|
||||
sar \$3+2,%rcx # %cf=0
|
||||
jmp .Lsqr8x_sub
|
||||
|
||||
.align 32
|
||||
.Lsqr8x_nox:
|
||||
___
|
||||
$code.=<<___;
|
||||
call bn_sqr8x_internal # see x86_64-mont5 module
|
||||
|
||||
pxor %xmm0,%xmm0
|
||||
lea 48(%rsp),%rax
|
||||
lea 64(%rsp,$num,2),%rdx
|
||||
shr \$3+2,$num
|
||||
mov 40(%rsp),%rsi # restore %rsp
|
||||
jmp .Lsqr8x_zero
|
||||
# %rax top-most carry
|
||||
# %rbp nptr
|
||||
# %r8 -8*num
|
||||
# %rdi end of tp[2*num]
|
||||
lea (%rdi,$num),%rbx
|
||||
mov $num,%rcx
|
||||
mov $num,%rdx
|
||||
movq %xmm1,$rptr
|
||||
sar \$3+2,%rcx # %cf=0
|
||||
jmp .Lsqr8x_sub
|
||||
|
||||
.align 32
|
||||
.Lsqr8x_zero:
|
||||
movdqa %xmm0,16*0(%rax) # wipe t
|
||||
movdqa %xmm0,16*1(%rax)
|
||||
movdqa %xmm0,16*2(%rax)
|
||||
movdqa %xmm0,16*3(%rax)
|
||||
lea 16*4(%rax),%rax
|
||||
movdqa %xmm0,16*0(%rdx) # wipe n
|
||||
movdqa %xmm0,16*1(%rdx)
|
||||
movdqa %xmm0,16*2(%rdx)
|
||||
movdqa %xmm0,16*3(%rdx)
|
||||
lea 16*4(%rdx),%rdx
|
||||
dec $num
|
||||
jnz .Lsqr8x_zero
|
||||
.Lsqr8x_sub:
|
||||
mov 8*0(%rbx),%r12
|
||||
mov 8*1(%rbx),%r13
|
||||
mov 8*2(%rbx),%r14
|
||||
mov 8*3(%rbx),%r15
|
||||
lea 8*4(%rbx),%rbx
|
||||
sbb 8*0(%rbp),%r12
|
||||
sbb 8*1(%rbp),%r13
|
||||
sbb 8*2(%rbp),%r14
|
||||
sbb 8*3(%rbp),%r15
|
||||
lea 8*4(%rbp),%rbp
|
||||
mov %r12,8*0($rptr)
|
||||
mov %r13,8*1($rptr)
|
||||
mov %r14,8*2($rptr)
|
||||
mov %r15,8*3($rptr)
|
||||
lea 8*4($rptr),$rptr
|
||||
inc %rcx # preserves %cf
|
||||
jnz .Lsqr8x_sub
|
||||
|
||||
sbb \$0,%rax # top-most carry
|
||||
lea (%rbx,$num),%rbx # rewind
|
||||
lea ($rptr,$num),$rptr # rewind
|
||||
|
||||
movq %rax,%xmm1
|
||||
pxor %xmm0,%xmm0
|
||||
pshufd \$0,%xmm1,%xmm1
|
||||
mov 40(%rsp),%rsi # restore %rsp
|
||||
jmp .Lsqr8x_cond_copy
|
||||
|
||||
.align 32
|
||||
.Lsqr8x_cond_copy:
|
||||
movdqa 16*0(%rbx),%xmm2
|
||||
movdqa 16*1(%rbx),%xmm3
|
||||
lea 16*2(%rbx),%rbx
|
||||
movdqu 16*0($rptr),%xmm4
|
||||
movdqu 16*1($rptr),%xmm5
|
||||
lea 16*2($rptr),$rptr
|
||||
movdqa %xmm0,-16*2(%rbx) # zero tp
|
||||
movdqa %xmm0,-16*1(%rbx)
|
||||
movdqa %xmm0,-16*2(%rbx,%rdx)
|
||||
movdqa %xmm0,-16*1(%rbx,%rdx)
|
||||
pcmpeqd %xmm1,%xmm0
|
||||
pand %xmm1,%xmm2
|
||||
pand %xmm1,%xmm3
|
||||
pand %xmm0,%xmm4
|
||||
pand %xmm0,%xmm5
|
||||
pxor %xmm0,%xmm0
|
||||
por %xmm2,%xmm4
|
||||
por %xmm3,%xmm5
|
||||
movdqu %xmm4,-16*2($rptr)
|
||||
movdqu %xmm5,-16*1($rptr)
|
||||
add \$32,$num
|
||||
jnz .Lsqr8x_cond_copy
|
||||
|
||||
mov \$1,%rax
|
||||
mov -48(%rsi),%r15
|
||||
@ -1135,64 +1161,75 @@ $code.=<<___;
|
||||
adc $zero,%r15 # modulo-scheduled
|
||||
sub 0*8($tptr),$zero # pull top-most carry
|
||||
adc %r15,%r14
|
||||
mov -8($nptr),$mi
|
||||
sbb %r15,%r15 # top-most carry
|
||||
mov %r14,-1*8($tptr)
|
||||
|
||||
cmp 16(%rsp),$bptr
|
||||
jne .Lmulx4x_outer
|
||||
|
||||
sub %r14,$mi # compare top-most words
|
||||
sbb $mi,$mi
|
||||
or $mi,%r15
|
||||
|
||||
neg $num
|
||||
xor %rdx,%rdx
|
||||
mov 32(%rsp),$rptr # restore rp
|
||||
lea 64(%rsp),$tptr
|
||||
|
||||
pxor %xmm0,%xmm0
|
||||
mov 0*8($nptr,$num),%r8
|
||||
mov 1*8($nptr,$num),%r9
|
||||
neg %r8
|
||||
jmp .Lmulx4x_sub_entry
|
||||
sub $num,$nptr # rewind $nptr
|
||||
neg %r15
|
||||
mov $num,%rdx
|
||||
shr \$3+2,$num # %cf=0
|
||||
mov 32(%rsp),$rptr # restore rp
|
||||
jmp .Lmulx4x_sub
|
||||
|
||||
.align 32
|
||||
.Lmulx4x_sub:
|
||||
mov 0*8($nptr,$num),%r8
|
||||
mov 1*8($nptr,$num),%r9
|
||||
not %r8
|
||||
.Lmulx4x_sub_entry:
|
||||
mov 2*8($nptr,$num),%r10
|
||||
not %r9
|
||||
and %r15,%r8
|
||||
mov 3*8($nptr,$num),%r11
|
||||
not %r10
|
||||
and %r15,%r9
|
||||
not %r11
|
||||
and %r15,%r10
|
||||
and %r15,%r11
|
||||
|
||||
neg %rdx # mov %rdx,%cf
|
||||
adc 0*8($tptr),%r8
|
||||
adc 1*8($tptr),%r9
|
||||
movdqa %xmm0,($tptr)
|
||||
adc 2*8($tptr),%r10
|
||||
adc 3*8($tptr),%r11
|
||||
movdqa %xmm0,16($tptr)
|
||||
lea 4*8($tptr),$tptr
|
||||
sbb %rdx,%rdx # mov %cf,%rdx
|
||||
|
||||
mov %r8,0*8($rptr)
|
||||
mov %r9,1*8($rptr)
|
||||
mov %r10,2*8($rptr)
|
||||
mov %r11,3*8($rptr)
|
||||
lea 4*8($rptr),$rptr
|
||||
|
||||
add \$32,$num
|
||||
mov 8*0($tptr),%r11
|
||||
mov 8*1($tptr),%r12
|
||||
mov 8*2($tptr),%r13
|
||||
mov 8*3($tptr),%r14
|
||||
lea 8*4($tptr),$tptr
|
||||
sbb 8*0($nptr),%r11
|
||||
sbb 8*1($nptr),%r12
|
||||
sbb 8*2($nptr),%r13
|
||||
sbb 8*3($nptr),%r14
|
||||
lea 8*4($nptr),$nptr
|
||||
mov %r11,8*0($rptr)
|
||||
mov %r12,8*1($rptr)
|
||||
mov %r13,8*2($rptr)
|
||||
mov %r14,8*3($rptr)
|
||||
lea 8*4($rptr),$rptr
|
||||
dec $num # preserves %cf
|
||||
jnz .Lmulx4x_sub
|
||||
|
||||
sbb \$0,%r15 # top-most carry
|
||||
lea 64(%rsp),$tptr
|
||||
sub %rdx,$rptr # rewind
|
||||
|
||||
movq %r15,%xmm1
|
||||
pxor %xmm0,%xmm0
|
||||
pshufd \$0,%xmm1,%xmm1
|
||||
mov 40(%rsp),%rsi # restore %rsp
|
||||
jmp .Lmulx4x_cond_copy
|
||||
|
||||
.align 32
|
||||
.Lmulx4x_cond_copy:
|
||||
movdqa 16*0($tptr),%xmm2
|
||||
movdqa 16*1($tptr),%xmm3
|
||||
lea 16*2($tptr),$tptr
|
||||
movdqu 16*0($rptr),%xmm4
|
||||
movdqu 16*1($rptr),%xmm5
|
||||
lea 16*2($rptr),$rptr
|
||||
movdqa %xmm0,-16*2($tptr) # zero tp
|
||||
movdqa %xmm0,-16*1($tptr)
|
||||
pcmpeqd %xmm1,%xmm0
|
||||
pand %xmm1,%xmm2
|
||||
pand %xmm1,%xmm3
|
||||
pand %xmm0,%xmm4
|
||||
pand %xmm0,%xmm5
|
||||
pxor %xmm0,%xmm0
|
||||
por %xmm2,%xmm4
|
||||
por %xmm3,%xmm5
|
||||
movdqu %xmm4,-16*2($rptr)
|
||||
movdqu %xmm5,-16*1($rptr)
|
||||
sub \$32,%rdx
|
||||
jnz .Lmulx4x_cond_copy
|
||||
|
||||
mov %rdx,($tptr)
|
||||
|
||||
mov \$1,%rax
|
||||
mov -48(%rsi),%r15
|
||||
mov -40(%rsi),%r14
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -125,6 +125,7 @@
|
||||
#ifndef HEADER_BN_H
|
||||
# define HEADER_BN_H
|
||||
|
||||
# include <limits.h>
|
||||
# include <openssl/e_os2.h>
|
||||
# ifndef OPENSSL_NO_FP_API
|
||||
# include <stdio.h> /* FILE */
|
||||
@ -721,8 +722,17 @@ const BIGNUM *BN_get0_nist_prime_521(void);
|
||||
|
||||
/* library internal functions */
|
||||
|
||||
# define bn_expand(a,bits) ((((((bits+BN_BITS2-1))/BN_BITS2)) <= (a)->dmax)?\
|
||||
(a):bn_expand2((a),(bits+BN_BITS2-1)/BN_BITS2))
|
||||
# define bn_expand(a,bits) \
|
||||
( \
|
||||
bits > (INT_MAX - BN_BITS2 + 1) ? \
|
||||
NULL \
|
||||
: \
|
||||
(((bits+BN_BITS2-1)/BN_BITS2) <= (a)->dmax) ? \
|
||||
(a) \
|
||||
: \
|
||||
bn_expand2((a),(bits+BN_BITS2-1)/BN_BITS2) \
|
||||
)
|
||||
|
||||
# define bn_wexpand(a,words) (((words) <= (a)->dmax)?(a):bn_expand2((a),(words)))
|
||||
BIGNUM *bn_expand2(BIGNUM *a, int words);
|
||||
# ifndef OPENSSL_NO_DEPRECATED
|
||||
|
@ -110,6 +110,7 @@
|
||||
*/
|
||||
|
||||
#include "cryptlib.h"
|
||||
#include "constant_time_locl.h"
|
||||
#include "bn_lcl.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
@ -606,15 +607,17 @@ static BN_ULONG bn_get_bits(const BIGNUM *a, int bitpos)
|
||||
|
||||
static int MOD_EXP_CTIME_COPY_TO_PREBUF(const BIGNUM *b, int top,
|
||||
unsigned char *buf, int idx,
|
||||
int width)
|
||||
int window)
|
||||
{
|
||||
size_t i, j;
|
||||
int i, j;
|
||||
int width = 1 << window;
|
||||
BN_ULONG *table = (BN_ULONG *)buf;
|
||||
|
||||
if (top > b->top)
|
||||
top = b->top; /* this works because 'buf' is explicitly
|
||||
* zeroed */
|
||||
for (i = 0, j = idx; i < top * sizeof b->d[0]; i++, j += width) {
|
||||
buf[j] = ((unsigned char *)b->d)[i];
|
||||
for (i = 0, j = idx; i < top; i++, j += width) {
|
||||
table[j] = b->d[i];
|
||||
}
|
||||
|
||||
return 1;
|
||||
@ -622,15 +625,51 @@ static int MOD_EXP_CTIME_COPY_TO_PREBUF(const BIGNUM *b, int top,
|
||||
|
||||
static int MOD_EXP_CTIME_COPY_FROM_PREBUF(BIGNUM *b, int top,
|
||||
unsigned char *buf, int idx,
|
||||
int width)
|
||||
int window)
|
||||
{
|
||||
size_t i, j;
|
||||
int i, j;
|
||||
int width = 1 << window;
|
||||
volatile BN_ULONG *table = (volatile BN_ULONG *)buf;
|
||||
|
||||
if (bn_wexpand(b, top) == NULL)
|
||||
return 0;
|
||||
|
||||
for (i = 0, j = idx; i < top * sizeof b->d[0]; i++, j += width) {
|
||||
((unsigned char *)b->d)[i] = buf[j];
|
||||
if (window <= 3) {
|
||||
for (i = 0; i < top; i++, table += width) {
|
||||
BN_ULONG acc = 0;
|
||||
|
||||
for (j = 0; j < width; j++) {
|
||||
acc |= table[j] &
|
||||
((BN_ULONG)0 - (constant_time_eq_int(j,idx)&1));
|
||||
}
|
||||
|
||||
b->d[i] = acc;
|
||||
}
|
||||
} else {
|
||||
int xstride = 1 << (window - 2);
|
||||
BN_ULONG y0, y1, y2, y3;
|
||||
|
||||
i = idx >> (window - 2); /* equivalent of idx / xstride */
|
||||
idx &= xstride - 1; /* equivalent of idx % xstride */
|
||||
|
||||
y0 = (BN_ULONG)0 - (constant_time_eq_int(i,0)&1);
|
||||
y1 = (BN_ULONG)0 - (constant_time_eq_int(i,1)&1);
|
||||
y2 = (BN_ULONG)0 - (constant_time_eq_int(i,2)&1);
|
||||
y3 = (BN_ULONG)0 - (constant_time_eq_int(i,3)&1);
|
||||
|
||||
for (i = 0; i < top; i++, table += width) {
|
||||
BN_ULONG acc = 0;
|
||||
|
||||
for (j = 0; j < xstride; j++) {
|
||||
acc |= ( (table[j + 0 * xstride] & y0) |
|
||||
(table[j + 1 * xstride] & y1) |
|
||||
(table[j + 2 * xstride] & y2) |
|
||||
(table[j + 3 * xstride] & y3) )
|
||||
& ((BN_ULONG)0 - (constant_time_eq_int(j,idx)&1));
|
||||
}
|
||||
|
||||
b->d[i] = acc;
|
||||
}
|
||||
}
|
||||
|
||||
b->top = top;
|
||||
@ -749,8 +788,8 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
if (window >= 5) {
|
||||
window = 5; /* ~5% improvement for RSA2048 sign, and even
|
||||
* for RSA4096 */
|
||||
if ((top & 7) == 0)
|
||||
powerbufLen += 2 * top * sizeof(m->d[0]);
|
||||
/* reserve space for mont->N.d[] copy */
|
||||
powerbufLen += top * sizeof(mont->N.d[0]);
|
||||
}
|
||||
#endif
|
||||
(void)0;
|
||||
@ -971,7 +1010,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
const BN_ULONG *not_used, const BN_ULONG *np,
|
||||
const BN_ULONG *n0, int num);
|
||||
|
||||
BN_ULONG *np = mont->N.d, *n0 = mont->n0, *np2;
|
||||
BN_ULONG *n0 = mont->n0, *np;
|
||||
|
||||
/*
|
||||
* BN_to_montgomery can contaminate words above .top [in
|
||||
@ -982,11 +1021,11 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
for (i = tmp.top; i < top; i++)
|
||||
tmp.d[i] = 0;
|
||||
|
||||
if (top & 7)
|
||||
np2 = np;
|
||||
else
|
||||
for (np2 = am.d + top, i = 0; i < top; i++)
|
||||
np2[2 * i] = np[i];
|
||||
/*
|
||||
* copy mont->N.d[] to improve cache locality
|
||||
*/
|
||||
for (np = am.d + top, i = 0; i < top; i++)
|
||||
np[i] = mont->N.d[i];
|
||||
|
||||
bn_scatter5(tmp.d, top, powerbuf, 0);
|
||||
bn_scatter5(am.d, am.top, powerbuf, 1);
|
||||
@ -996,7 +1035,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
# if 0
|
||||
for (i = 3; i < 32; i++) {
|
||||
/* Calculate a^i = a^(i-1) * a */
|
||||
bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np2, n0, top, i - 1);
|
||||
bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np, n0, top, i - 1);
|
||||
bn_scatter5(tmp.d, top, powerbuf, i);
|
||||
}
|
||||
# else
|
||||
@ -1007,7 +1046,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
}
|
||||
for (i = 3; i < 8; i += 2) {
|
||||
int j;
|
||||
bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np2, n0, top, i - 1);
|
||||
bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np, n0, top, i - 1);
|
||||
bn_scatter5(tmp.d, top, powerbuf, i);
|
||||
for (j = 2 * i; j < 32; j *= 2) {
|
||||
bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
|
||||
@ -1015,13 +1054,13 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
}
|
||||
}
|
||||
for (; i < 16; i += 2) {
|
||||
bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np2, n0, top, i - 1);
|
||||
bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np, n0, top, i - 1);
|
||||
bn_scatter5(tmp.d, top, powerbuf, i);
|
||||
bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
|
||||
bn_scatter5(tmp.d, top, powerbuf, 2 * i);
|
||||
}
|
||||
for (; i < 32; i += 2) {
|
||||
bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np2, n0, top, i - 1);
|
||||
bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np, n0, top, i - 1);
|
||||
bn_scatter5(tmp.d, top, powerbuf, i);
|
||||
}
|
||||
# endif
|
||||
@ -1050,11 +1089,11 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
while (bits >= 0) {
|
||||
wvalue = bn_get_bits5(p->d, bits - 4);
|
||||
bits -= 5;
|
||||
bn_power5(tmp.d, tmp.d, powerbuf, np2, n0, top, wvalue);
|
||||
bn_power5(tmp.d, tmp.d, powerbuf, np, n0, top, wvalue);
|
||||
}
|
||||
}
|
||||
|
||||
ret = bn_from_montgomery(tmp.d, tmp.d, NULL, np2, n0, top);
|
||||
ret = bn_from_montgomery(tmp.d, tmp.d, NULL, np, n0, top);
|
||||
tmp.top = top;
|
||||
bn_correct_top(&tmp);
|
||||
if (ret) {
|
||||
@ -1065,9 +1104,9 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
if (!MOD_EXP_CTIME_COPY_TO_PREBUF(&tmp, top, powerbuf, 0, numPowers))
|
||||
if (!MOD_EXP_CTIME_COPY_TO_PREBUF(&tmp, top, powerbuf, 0, window))
|
||||
goto err;
|
||||
if (!MOD_EXP_CTIME_COPY_TO_PREBUF(&am, top, powerbuf, 1, numPowers))
|
||||
if (!MOD_EXP_CTIME_COPY_TO_PREBUF(&am, top, powerbuf, 1, window))
|
||||
goto err;
|
||||
|
||||
/*
|
||||
@ -1079,15 +1118,15 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
if (window > 1) {
|
||||
if (!BN_mod_mul_montgomery(&tmp, &am, &am, mont, ctx))
|
||||
goto err;
|
||||
if (!MOD_EXP_CTIME_COPY_TO_PREBUF
|
||||
(&tmp, top, powerbuf, 2, numPowers))
|
||||
if (!MOD_EXP_CTIME_COPY_TO_PREBUF(&tmp, top, powerbuf, 2,
|
||||
window))
|
||||
goto err;
|
||||
for (i = 3; i < numPowers; i++) {
|
||||
/* Calculate a^i = a^(i-1) * a */
|
||||
if (!BN_mod_mul_montgomery(&tmp, &am, &tmp, mont, ctx))
|
||||
goto err;
|
||||
if (!MOD_EXP_CTIME_COPY_TO_PREBUF
|
||||
(&tmp, top, powerbuf, i, numPowers))
|
||||
if (!MOD_EXP_CTIME_COPY_TO_PREBUF(&tmp, top, powerbuf, i,
|
||||
window))
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
@ -1095,8 +1134,8 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
bits--;
|
||||
for (wvalue = 0, i = bits % window; i >= 0; i--, bits--)
|
||||
wvalue = (wvalue << 1) + BN_is_bit_set(p, bits);
|
||||
if (!MOD_EXP_CTIME_COPY_FROM_PREBUF
|
||||
(&tmp, top, powerbuf, wvalue, numPowers))
|
||||
if (!MOD_EXP_CTIME_COPY_FROM_PREBUF(&tmp, top, powerbuf, wvalue,
|
||||
window))
|
||||
goto err;
|
||||
|
||||
/*
|
||||
@ -1116,8 +1155,8 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
/*
|
||||
* Fetch the appropriate pre-computed value from the pre-buf
|
||||
*/
|
||||
if (!MOD_EXP_CTIME_COPY_FROM_PREBUF
|
||||
(&am, top, powerbuf, wvalue, numPowers))
|
||||
if (!MOD_EXP_CTIME_COPY_FROM_PREBUF(&am, top, powerbuf, wvalue,
|
||||
window))
|
||||
goto err;
|
||||
|
||||
/* Multiply the result into the intermediate result */
|
||||
|
@ -58,6 +58,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <limits.h>
|
||||
#include "cryptlib.h"
|
||||
#include <openssl/buffer.h>
|
||||
#include "bn_lcl.h"
|
||||
@ -189,7 +190,11 @@ int BN_hex2bn(BIGNUM **bn, const char *a)
|
||||
a++;
|
||||
}
|
||||
|
||||
for (i = 0; isxdigit((unsigned char)a[i]); i++) ;
|
||||
for (i = 0; i <= (INT_MAX/4) && isxdigit((unsigned char)a[i]); i++)
|
||||
continue;
|
||||
|
||||
if (i > INT_MAX/4)
|
||||
goto err;
|
||||
|
||||
num = i + neg;
|
||||
if (bn == NULL)
|
||||
@ -204,7 +209,7 @@ int BN_hex2bn(BIGNUM **bn, const char *a)
|
||||
BN_zero(ret);
|
||||
}
|
||||
|
||||
/* i is the number of hex digests; */
|
||||
/* i is the number of hex digits */
|
||||
if (bn_expand(ret, i * 4) == NULL)
|
||||
goto err;
|
||||
|
||||
@ -260,7 +265,11 @@ int BN_dec2bn(BIGNUM **bn, const char *a)
|
||||
a++;
|
||||
}
|
||||
|
||||
for (i = 0; isdigit((unsigned char)a[i]); i++) ;
|
||||
for (i = 0; i <= (INT_MAX/4) && isdigit((unsigned char)a[i]); i++)
|
||||
continue;
|
||||
|
||||
if (i > INT_MAX/4)
|
||||
goto err;
|
||||
|
||||
num = i + neg;
|
||||
if (bn == NULL)
|
||||
@ -278,7 +287,7 @@ int BN_dec2bn(BIGNUM **bn, const char *a)
|
||||
BN_zero(ret);
|
||||
}
|
||||
|
||||
/* i is the number of digests, a bit of an over expand; */
|
||||
/* i is the number of digits, a bit of an over expand */
|
||||
if (bn_expand(ret, i * 4) == NULL)
|
||||
goto err;
|
||||
|
||||
|
@ -65,6 +65,7 @@ void BN_RECP_CTX_init(BN_RECP_CTX *recp)
|
||||
BN_init(&(recp->N));
|
||||
BN_init(&(recp->Nr));
|
||||
recp->num_bits = 0;
|
||||
recp->shift = 0;
|
||||
recp->flags = 0;
|
||||
}
|
||||
|
||||
|
@ -160,6 +160,14 @@ int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen,
|
||||
EVPerr(EVP_F_CMAC_INIT, EVP_R_DISABLED_FOR_FIPS);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Switch to FIPS cipher implementation if possible */
|
||||
if (cipher != NULL) {
|
||||
const EVP_CIPHER *fcipher;
|
||||
fcipher = FIPS_get_cipherbynid(EVP_CIPHER_nid(cipher));
|
||||
if (fcipher != NULL)
|
||||
cipher = fcipher;
|
||||
}
|
||||
/*
|
||||
* Other algorithm blocking will be done in FIPS_cmac_init, via
|
||||
* FIPS_cipherinit().
|
||||
|
@ -1016,11 +1016,11 @@ void *OPENSSL_stderr(void)
|
||||
return stderr;
|
||||
}
|
||||
|
||||
int CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len)
|
||||
int CRYPTO_memcmp(const volatile void *in_a, const volatile void *in_b, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
const unsigned char *a = in_a;
|
||||
const unsigned char *b = in_b;
|
||||
const volatile unsigned char *a = in_a;
|
||||
const volatile unsigned char *b = in_b;
|
||||
unsigned char x = 0;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
|
@ -628,7 +628,7 @@ void OPENSSL_init(void);
|
||||
* into a defined order as the return value when a != b is undefined, other
|
||||
* than to be non-zero.
|
||||
*/
|
||||
int CRYPTO_memcmp(const void *a, const void *b, size_t len);
|
||||
int CRYPTO_memcmp(const volatile void *a, const volatile void *b, size_t len);
|
||||
|
||||
/* BEGIN ERROR CODES */
|
||||
/*
|
||||
|
@ -174,7 +174,7 @@ struct dh_st {
|
||||
/* DH_check_pub_key error codes */
|
||||
# define DH_CHECK_PUBKEY_TOO_SMALL 0x01
|
||||
# define DH_CHECK_PUBKEY_TOO_LARGE 0x02
|
||||
# define DH_CHECK_PUBKEY_INVALID 0x03
|
||||
# define DH_CHECK_PUBKEY_INVALID 0x04
|
||||
|
||||
/*
|
||||
* primes p where (p-1)/2 is prime too are called "safe"; we define this for
|
||||
|
@ -160,13 +160,12 @@ int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *ret)
|
||||
goto err;
|
||||
BN_CTX_start(ctx);
|
||||
tmp = BN_CTX_get(ctx);
|
||||
if (tmp == NULL)
|
||||
if (tmp == NULL || !BN_set_word(tmp, 1))
|
||||
goto err;
|
||||
BN_set_word(tmp, 1);
|
||||
if (BN_cmp(pub_key, tmp) <= 0)
|
||||
*ret |= DH_CHECK_PUBKEY_TOO_SMALL;
|
||||
BN_copy(tmp, dh->p);
|
||||
BN_sub_word(tmp, 1);
|
||||
if (BN_copy(tmp, dh->p) == NULL || !BN_sub_word(tmp, 1))
|
||||
goto err;
|
||||
if (BN_cmp(pub_key, tmp) >= 0)
|
||||
*ret |= DH_CHECK_PUBKEY_TOO_LARGE;
|
||||
|
||||
|
@ -191,6 +191,8 @@ static int dsa_priv_decode(EVP_PKEY *pkey, PKCS8_PRIV_KEY_INFO *p8)
|
||||
STACK_OF(ASN1_TYPE) *ndsa = NULL;
|
||||
DSA *dsa = NULL;
|
||||
|
||||
int ret = 0;
|
||||
|
||||
if (!PKCS8_pkey_get0(NULL, &p, &pklen, &palg, p8))
|
||||
return 0;
|
||||
X509_ALGOR_get0(NULL, &ptype, &pval, palg);
|
||||
@ -262,23 +264,21 @@ static int dsa_priv_decode(EVP_PKEY *pkey, PKCS8_PRIV_KEY_INFO *p8)
|
||||
}
|
||||
|
||||
EVP_PKEY_assign_DSA(pkey, dsa);
|
||||
|
||||
ret = 1;
|
||||
goto done;
|
||||
|
||||
decerr:
|
||||
DSAerr(DSA_F_DSA_PRIV_DECODE, DSA_R_DECODE_ERROR);
|
||||
dsaerr:
|
||||
DSA_free(dsa);
|
||||
done:
|
||||
BN_CTX_free(ctx);
|
||||
if (ndsa)
|
||||
sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free);
|
||||
else
|
||||
ASN1_STRING_clear_free(privkey);
|
||||
|
||||
return 1;
|
||||
|
||||
decerr:
|
||||
DSAerr(DSA_F_DSA_PRIV_DECODE, EVP_R_DECODE_ERROR);
|
||||
dsaerr:
|
||||
BN_CTX_free(ctx);
|
||||
if (privkey)
|
||||
ASN1_STRING_clear_free(privkey);
|
||||
sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free);
|
||||
DSA_free(dsa);
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int dsa_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey)
|
||||
|
@ -122,6 +122,7 @@ DSO *DSO_new_method(DSO_METHOD *meth)
|
||||
ret->meth = meth;
|
||||
ret->references = 1;
|
||||
if ((ret->meth->init != NULL) && !ret->meth->init(ret)) {
|
||||
sk_void_free(ret->meth_data);
|
||||
OPENSSL_free(ret);
|
||||
ret = NULL;
|
||||
}
|
||||
|
@ -2001,6 +2001,7 @@ $code.=<<___;
|
||||
push %r15
|
||||
sub \$32*5+8, %rsp
|
||||
|
||||
.Lpoint_double_shortcut$x:
|
||||
movdqu 0x00($a_ptr), %xmm0 # copy *(P256_POINT *)$a_ptr.x
|
||||
mov $a_ptr, $b_ptr # backup copy
|
||||
movdqu 0x10($a_ptr), %xmm1
|
||||
@ -2291,6 +2292,7 @@ $code.=<<___;
|
||||
mov 0x40+8*1($b_ptr), $acc6
|
||||
mov 0x40+8*2($b_ptr), $acc7
|
||||
mov 0x40+8*3($b_ptr), $acc0
|
||||
movq $b_ptr, %xmm1
|
||||
|
||||
lea 0x40-$bias($b_ptr), $a_ptr
|
||||
lea $Z1sqr(%rsp), $r_ptr # Z1^2
|
||||
@ -2346,7 +2348,7 @@ $code.=<<___;
|
||||
test $acc0, $acc0
|
||||
jnz .Ladd_proceed$x # (in1infty || in2infty)?
|
||||
test $acc1, $acc1
|
||||
jz .Ladd_proceed$x # is_equal(S1,S2)?
|
||||
jz .Ladd_double$x # is_equal(S1,S2)?
|
||||
|
||||
movq %xmm0, $r_ptr # restore $r_ptr
|
||||
pxor %xmm0, %xmm0
|
||||
@ -2358,6 +2360,13 @@ $code.=<<___;
|
||||
movdqu %xmm0, 0x50($r_ptr)
|
||||
jmp .Ladd_done$x
|
||||
|
||||
.align 32
|
||||
.Ladd_double$x:
|
||||
movq %xmm1, $a_ptr # restore $a_ptr
|
||||
movq %xmm0, $r_ptr # restore $r_ptr
|
||||
add \$`32*(18-5)`, %rsp # difference in frame sizes
|
||||
jmp .Lpoint_double_shortcut$x
|
||||
|
||||
.align 32
|
||||
.Ladd_proceed$x:
|
||||
`&load_for_sqr("$R(%rsp)", "$src0")`
|
||||
|
@ -1657,8 +1657,7 @@ int ec_GFp_nistp224_precompute_mult(EC_GROUP *group, BN_CTX *ctx)
|
||||
*/
|
||||
if (0 == EC_POINT_cmp(group, generator, group->generator, ctx)) {
|
||||
memcpy(pre->g_pre_comp, gmul, sizeof(pre->g_pre_comp));
|
||||
ret = 1;
|
||||
goto err;
|
||||
goto done;
|
||||
}
|
||||
if ((!BN_to_felem(pre->g_pre_comp[0][1][0], &group->generator->X)) ||
|
||||
(!BN_to_felem(pre->g_pre_comp[0][1][1], &group->generator->Y)) ||
|
||||
@ -1736,6 +1735,7 @@ int ec_GFp_nistp224_precompute_mult(EC_GROUP *group, BN_CTX *ctx)
|
||||
}
|
||||
make_points_affine(31, &(pre->g_pre_comp[0][1]), tmp_felems);
|
||||
|
||||
done:
|
||||
if (!EC_EX_DATA_set_data(&group->extra_data, pre, nistp224_pre_comp_dup,
|
||||
nistp224_pre_comp_free,
|
||||
nistp224_pre_comp_clear_free))
|
||||
|
@ -2249,8 +2249,7 @@ int ec_GFp_nistp256_precompute_mult(EC_GROUP *group, BN_CTX *ctx)
|
||||
*/
|
||||
if (0 == EC_POINT_cmp(group, generator, group->generator, ctx)) {
|
||||
memcpy(pre->g_pre_comp, gmul, sizeof(pre->g_pre_comp));
|
||||
ret = 1;
|
||||
goto err;
|
||||
goto done;
|
||||
}
|
||||
if ((!BN_to_felem(x_tmp, &group->generator->X)) ||
|
||||
(!BN_to_felem(y_tmp, &group->generator->Y)) ||
|
||||
@ -2337,6 +2336,7 @@ int ec_GFp_nistp256_precompute_mult(EC_GROUP *group, BN_CTX *ctx)
|
||||
}
|
||||
make_points_affine(31, &(pre->g_pre_comp[0][1]), tmp_smallfelems);
|
||||
|
||||
done:
|
||||
if (!EC_EX_DATA_set_data(&group->extra_data, pre, nistp256_pre_comp_dup,
|
||||
nistp256_pre_comp_free,
|
||||
nistp256_pre_comp_clear_free))
|
||||
|
@ -2056,8 +2056,7 @@ int ec_GFp_nistp521_precompute_mult(EC_GROUP *group, BN_CTX *ctx)
|
||||
*/
|
||||
if (0 == EC_POINT_cmp(group, generator, group->generator, ctx)) {
|
||||
memcpy(pre->g_pre_comp, gmul, sizeof(pre->g_pre_comp));
|
||||
ret = 1;
|
||||
goto err;
|
||||
goto done;
|
||||
}
|
||||
if ((!BN_to_felem(pre->g_pre_comp[1][0], &group->generator->X)) ||
|
||||
(!BN_to_felem(pre->g_pre_comp[1][1], &group->generator->Y)) ||
|
||||
@ -2115,6 +2114,7 @@ int ec_GFp_nistp521_precompute_mult(EC_GROUP *group, BN_CTX *ctx)
|
||||
}
|
||||
make_points_affine(15, &(pre->g_pre_comp[1]), tmp_felems);
|
||||
|
||||
done:
|
||||
if (!EC_EX_DATA_set_data(&group->extra_data, pre, nistp521_pre_comp_dup,
|
||||
nistp521_pre_comp_free,
|
||||
nistp521_pre_comp_clear_free))
|
||||
|
@ -1758,9 +1758,18 @@ static void nistp_single_test(const struct nistp_test_params *test)
|
||||
if (0 != EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx))
|
||||
ABORT;
|
||||
|
||||
/*
|
||||
* We have not performed precomputation so have_precompute mult should be
|
||||
* false
|
||||
*/
|
||||
if (EC_GROUP_have_precompute_mult(NISTP))
|
||||
ABORT;
|
||||
|
||||
/* now repeat all tests with precomputation */
|
||||
if (!EC_GROUP_precompute_mult(NISTP, ctx))
|
||||
ABORT;
|
||||
if (!EC_GROUP_have_precompute_mult(NISTP))
|
||||
ABORT;
|
||||
|
||||
/* fixed point multiplication */
|
||||
EC_POINT_mul(NISTP, Q, m, NULL, NULL, ctx);
|
||||
|
@ -243,8 +243,10 @@ static int dynamic_set_data_ctx(ENGINE *e, dynamic_data_ctx **ctx)
|
||||
* If we lost the race to set the context, c is non-NULL and *ctx is the
|
||||
* context of the thread that won.
|
||||
*/
|
||||
if (c)
|
||||
if (c) {
|
||||
sk_OPENSSL_STRING_free(c->dirs);
|
||||
OPENSSL_free(c);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -71,12 +71,13 @@ typedef struct {
|
||||
DES_key_schedule ks;
|
||||
} ks;
|
||||
union {
|
||||
void (*cbc) (const void *, void *, size_t, const void *, void *);
|
||||
void (*cbc) (const void *, void *, size_t,
|
||||
const DES_key_schedule *, unsigned char *);
|
||||
} stream;
|
||||
} EVP_DES_KEY;
|
||||
|
||||
# if defined(AES_ASM) && (defined(__sparc) || defined(__sparc__))
|
||||
/* ---------^^^ this is not a typo, just a way to detect that
|
||||
/* ----------^^^ this is not a typo, just a way to detect that
|
||||
* assembler support was in general requested... */
|
||||
# include "sparc_arch.h"
|
||||
|
||||
@ -86,9 +87,9 @@ extern unsigned int OPENSSL_sparcv9cap_P[];
|
||||
|
||||
void des_t4_key_expand(const void *key, DES_key_schedule *ks);
|
||||
void des_t4_cbc_encrypt(const void *inp, void *out, size_t len,
|
||||
DES_key_schedule *ks, unsigned char iv[8]);
|
||||
const DES_key_schedule *ks, unsigned char iv[8]);
|
||||
void des_t4_cbc_decrypt(const void *inp, void *out, size_t len,
|
||||
DES_key_schedule *ks, unsigned char iv[8]);
|
||||
const DES_key_schedule *ks, unsigned char iv[8]);
|
||||
# endif
|
||||
|
||||
static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
|
||||
@ -130,7 +131,7 @@ static int des_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
{
|
||||
EVP_DES_KEY *dat = (EVP_DES_KEY *) ctx->cipher_data;
|
||||
|
||||
if (dat->stream.cbc) {
|
||||
if (dat->stream.cbc != NULL) {
|
||||
(*dat->stream.cbc) (in, out, inl, &dat->ks.ks, ctx->iv);
|
||||
return 1;
|
||||
}
|
||||
|
@ -75,7 +75,8 @@ typedef struct {
|
||||
DES_key_schedule ks[3];
|
||||
} ks;
|
||||
union {
|
||||
void (*cbc) (const void *, void *, size_t, const void *, void *);
|
||||
void (*cbc) (const void *, void *, size_t,
|
||||
const DES_key_schedule *, unsigned char *);
|
||||
} stream;
|
||||
} DES_EDE_KEY;
|
||||
# define ks1 ks.ks[0]
|
||||
@ -93,9 +94,9 @@ extern unsigned int OPENSSL_sparcv9cap_P[];
|
||||
|
||||
void des_t4_key_expand(const void *key, DES_key_schedule *ks);
|
||||
void des_t4_ede3_cbc_encrypt(const void *inp, void *out, size_t len,
|
||||
DES_key_schedule *ks, unsigned char iv[8]);
|
||||
const DES_key_schedule ks[3], unsigned char iv[8]);
|
||||
void des_t4_ede3_cbc_decrypt(const void *inp, void *out, size_t len,
|
||||
DES_key_schedule *ks, unsigned char iv[8]);
|
||||
const DES_key_schedule ks[3], unsigned char iv[8]);
|
||||
# endif
|
||||
|
||||
static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
|
||||
@ -162,7 +163,7 @@ static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
}
|
||||
# endif /* KSSL_DEBUG */
|
||||
if (dat->stream.cbc) {
|
||||
(*dat->stream.cbc) (in, out, inl, &dat->ks, ctx->iv);
|
||||
(*dat->stream.cbc) (in, out, inl, dat->ks.ks, ctx->iv);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -395,7 +396,7 @@ static int des_ede3_unwrap(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
int rv = -1;
|
||||
if (inl < 24)
|
||||
return -1;
|
||||
if (!out)
|
||||
if (out == NULL)
|
||||
return inl - 16;
|
||||
memcpy(ctx->iv, wrap_iv, 8);
|
||||
/* Decrypt first block which will end up as icv */
|
||||
@ -438,7 +439,7 @@ static int des_ede3_wrap(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, size_t inl)
|
||||
{
|
||||
unsigned char sha1tmp[SHA_DIGEST_LENGTH];
|
||||
if (!out)
|
||||
if (out == NULL)
|
||||
return inl + 16;
|
||||
/* Copy input to output buffer + 8 so we have space for IV */
|
||||
memmove(out + 8, in, inl);
|
||||
|
@ -43,7 +43,7 @@ die "can't locate x86_64-xlate.pl";
|
||||
|
||||
if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
|
||||
=~ /GNU assembler version ([2-9]\.[0-9]+)/) {
|
||||
$avx = ($1>=2.19) + ($1>=2.22);
|
||||
$avx = ($1>=2.20) + ($1>=2.22);
|
||||
}
|
||||
|
||||
if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
|
||||
@ -489,7 +489,7 @@ $code.=<<___;
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
movaps -0xd8(%rax),%xmm6
|
||||
movaps -0xd8(%rax),%xmm7
|
||||
movaps -0xc8(%rax),%xmm7
|
||||
movaps -0xb8(%rax),%xmm8
|
||||
movaps -0xa8(%rax),%xmm9
|
||||
movaps -0x98(%rax),%xmm10
|
||||
|
@ -92,7 +92,7 @@ die "can't locate x86_64-xlate.pl";
|
||||
|
||||
if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
|
||||
=~ /GNU assembler version ([2-9]\.[0-9]+)/) {
|
||||
$avx = ($1>=2.19) + ($1>=2.22);
|
||||
$avx = ($1>=2.20) + ($1>=2.22);
|
||||
}
|
||||
|
||||
if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
|
||||
|
@ -67,23 +67,20 @@
|
||||
/* increment counter (128-bit int) by 1 */
|
||||
static void ctr128_inc(unsigned char *counter)
|
||||
{
|
||||
u32 n = 16;
|
||||
u8 c;
|
||||
u32 n = 16, c = 1;
|
||||
|
||||
do {
|
||||
--n;
|
||||
c = counter[n];
|
||||
++c;
|
||||
counter[n] = c;
|
||||
if (c)
|
||||
return;
|
||||
c += counter[n];
|
||||
counter[n] = (u8)c;
|
||||
c >>= 8;
|
||||
} while (n);
|
||||
}
|
||||
|
||||
#if !defined(OPENSSL_SMALL_FOOTPRINT)
|
||||
static void ctr128_inc_aligned(unsigned char *counter)
|
||||
{
|
||||
size_t *data, c, n;
|
||||
size_t *data, c, d, n;
|
||||
const union {
|
||||
long one;
|
||||
char little;
|
||||
@ -91,20 +88,19 @@ static void ctr128_inc_aligned(unsigned char *counter)
|
||||
1
|
||||
};
|
||||
|
||||
if (is_endian.little) {
|
||||
if (is_endian.little || ((size_t)counter % sizeof(size_t)) != 0) {
|
||||
ctr128_inc(counter);
|
||||
return;
|
||||
}
|
||||
|
||||
data = (size_t *)counter;
|
||||
c = 1;
|
||||
n = 16 / sizeof(size_t);
|
||||
do {
|
||||
--n;
|
||||
c = data[n];
|
||||
++c;
|
||||
data[n] = c;
|
||||
if (c)
|
||||
return;
|
||||
d = data[n] += c;
|
||||
/* did addition carry? */
|
||||
c = ((d - c) ^ d) >> (sizeof(size_t) * 8 - 1);
|
||||
} while (n);
|
||||
}
|
||||
#endif
|
||||
@ -144,14 +140,14 @@ void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
|
||||
}
|
||||
|
||||
# if defined(STRICT_ALIGNMENT)
|
||||
if (((size_t)in | (size_t)out | (size_t)ivec) % sizeof(size_t) !=
|
||||
0)
|
||||
if (((size_t)in | (size_t)out | (size_t)ecount_buf)
|
||||
% sizeof(size_t) != 0)
|
||||
break;
|
||||
# endif
|
||||
while (len >= 16) {
|
||||
(*block) (ivec, ecount_buf, key);
|
||||
ctr128_inc_aligned(ivec);
|
||||
for (; n < 16; n += sizeof(size_t))
|
||||
for (n = 0; n < 16; n += sizeof(size_t))
|
||||
*(size_t *)(out + n) =
|
||||
*(size_t *)(in + n) ^ *(size_t *)(ecount_buf + n);
|
||||
len -= 16;
|
||||
@ -189,16 +185,13 @@ void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
|
||||
/* increment upper 96 bits of 128-bit counter by 1 */
|
||||
static void ctr96_inc(unsigned char *counter)
|
||||
{
|
||||
u32 n = 12;
|
||||
u8 c;
|
||||
u32 n = 12, c = 1;
|
||||
|
||||
do {
|
||||
--n;
|
||||
c = counter[n];
|
||||
++c;
|
||||
counter[n] = c;
|
||||
if (c)
|
||||
return;
|
||||
c += counter[n];
|
||||
counter[n] = (u8)c;
|
||||
c >>= 8;
|
||||
} while (n);
|
||||
}
|
||||
|
||||
|
@ -38,12 +38,18 @@ extern "C" {
|
||||
#ifndef OPENSSL_NO_SSL_TRACE
|
||||
# define OPENSSL_NO_SSL_TRACE
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_SSL2
|
||||
# define OPENSSL_NO_SSL2
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_STORE
|
||||
# define OPENSSL_NO_STORE
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_UNIT_TEST
|
||||
# define OPENSSL_NO_UNIT_TEST
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
# define OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
#endif
|
||||
|
||||
#endif /* OPENSSL_DOING_MAKEDEPEND */
|
||||
|
||||
@ -86,12 +92,18 @@ extern "C" {
|
||||
# if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE)
|
||||
# define NO_SSL_TRACE
|
||||
# endif
|
||||
# if defined(OPENSSL_NO_SSL2) && !defined(NO_SSL2)
|
||||
# define NO_SSL2
|
||||
# endif
|
||||
# if defined(OPENSSL_NO_STORE) && !defined(NO_STORE)
|
||||
# define NO_STORE
|
||||
# endif
|
||||
# if defined(OPENSSL_NO_UNIT_TEST) && !defined(NO_UNIT_TEST)
|
||||
# define NO_UNIT_TEST
|
||||
# endif
|
||||
# if defined(OPENSSL_NO_WEAK_SSL_CIPHERS) && !defined(NO_WEAK_SSL_CIPHERS)
|
||||
# define NO_WEAK_SSL_CIPHERS
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* crypto/opensslconf.h.in */
|
||||
|
@ -30,11 +30,11 @@ extern "C" {
|
||||
* (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
|
||||
* major minor fix final patch/beta)
|
||||
*/
|
||||
# define OPENSSL_VERSION_NUMBER 0x1000206fL
|
||||
# define OPENSSL_VERSION_NUMBER 0x1000207fL
|
||||
# ifdef OPENSSL_FIPS
|
||||
# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2f-fips 28 Jan 2016"
|
||||
# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2g-fips 1 Mar 2016"
|
||||
# else
|
||||
# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2f-freebsd 28 Jan 2016"
|
||||
# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2g-freebsd 1 Mar 2016"
|
||||
# endif
|
||||
# define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
|
||||
|
||||
|
@ -198,8 +198,11 @@ my %globals;
|
||||
if ($gas) {
|
||||
# Solaris /usr/ccs/bin/as can't handle multiplications
|
||||
# in $self->{value}
|
||||
$self->{value} =~ s/(?<![\w\$\.])(0x?[0-9a-f]+)/oct($1)/egi;
|
||||
$self->{value} =~ s/([0-9]+\s*[\*\/\%]\s*[0-9]+)/eval($1)/eg;
|
||||
my $value = $self->{value};
|
||||
$value =~ s/(?<![\w\$\.])(0x?[0-9a-f]+)/oct($1)/egi;
|
||||
if ($value =~ s/([0-9]+\s*[\*\/\%]\s*[0-9]+)/eval($1)/eg) {
|
||||
$self->{value} = $value;
|
||||
}
|
||||
sprintf "\$%s",$self->{value};
|
||||
} else {
|
||||
$self->{value} =~ s/(0b[0-1]+)/oct($1)/eig;
|
||||
|
@ -274,12 +274,29 @@ int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,
|
||||
PKCS7err(PKCS7_F_PKCS7_VERIFY, PKCS7_R_NO_CONTENT);
|
||||
return 0;
|
||||
}
|
||||
#if 0
|
||||
/*
|
||||
* NB: this test commented out because some versions of Netscape
|
||||
* illegally include zero length content when signing data. Also
|
||||
* Microsoft Authenticode includes a SpcIndirectDataContent data
|
||||
* structure which describes the content to be protected by the
|
||||
* signature, rather than directly embedding that content. So
|
||||
* Authenticode implementations are also expected to use
|
||||
* PKCS7_verify() with explicit external data, on non-detached
|
||||
* PKCS#7 signatures.
|
||||
*
|
||||
* In OpenSSL 1.1 a new flag PKCS7_NO_DUAL_CONTENT has been
|
||||
* introduced to disable this sanity check. For the 1.0.2 branch
|
||||
* this change is not acceptable, so the check remains completely
|
||||
* commented out (as it has been for a long time).
|
||||
*/
|
||||
|
||||
/* Check for data and content: two sets of data */
|
||||
if (!PKCS7_get_detached(p7) && indata) {
|
||||
PKCS7err(PKCS7_F_PKCS7_VERIFY, PKCS7_R_CONTENT_AND_DATA_PRESENT);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
sinfos = PKCS7_get_signer_info(p7);
|
||||
|
||||
|
@ -84,7 +84,7 @@ int RSA_sign(int type, const unsigned char *m, unsigned int m_len,
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
if (rsa->meth->rsa_sign) {
|
||||
if ((rsa->flags & RSA_FLAG_SIGN_VER) && rsa->meth->rsa_sign) {
|
||||
return rsa->meth->rsa_sign(type, m, m_len, sigret, siglen, rsa);
|
||||
}
|
||||
/* Special case: SSL signature, just check the length */
|
||||
@ -293,7 +293,7 @@ int RSA_verify(int dtype, const unsigned char *m, unsigned int m_len,
|
||||
const unsigned char *sigbuf, unsigned int siglen, RSA *rsa)
|
||||
{
|
||||
|
||||
if (rsa->meth->rsa_verify) {
|
||||
if ((rsa->flags & RSA_FLAG_SIGN_VER) && rsa->meth->rsa_verify) {
|
||||
return rsa->meth->rsa_verify(dtype, m, m_len, sigbuf, siglen, rsa);
|
||||
}
|
||||
|
||||
|
@ -82,16 +82,21 @@ typedef struct SRP_gN_cache_st {
|
||||
DECLARE_STACK_OF(SRP_gN_cache)
|
||||
|
||||
typedef struct SRP_user_pwd_st {
|
||||
/* Owned by us. */
|
||||
char *id;
|
||||
BIGNUM *s;
|
||||
BIGNUM *v;
|
||||
/* Not owned by us. */
|
||||
const BIGNUM *g;
|
||||
const BIGNUM *N;
|
||||
/* Owned by us. */
|
||||
char *info;
|
||||
} SRP_user_pwd;
|
||||
|
||||
DECLARE_STACK_OF(SRP_user_pwd)
|
||||
|
||||
void SRP_user_pwd_free(SRP_user_pwd *user_pwd);
|
||||
|
||||
typedef struct SRP_VBASE_st {
|
||||
STACK_OF(SRP_user_pwd) *users_pwd;
|
||||
STACK_OF(SRP_gN_cache) *gN_cache;
|
||||
@ -115,7 +120,12 @@ DECLARE_STACK_OF(SRP_gN)
|
||||
SRP_VBASE *SRP_VBASE_new(char *seed_key);
|
||||
int SRP_VBASE_free(SRP_VBASE *vb);
|
||||
int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file);
|
||||
|
||||
/* This method ignores the configured seed and fails for an unknown user. */
|
||||
SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username);
|
||||
/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/
|
||||
SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username);
|
||||
|
||||
char *SRP_create_verifier(const char *user, const char *pass, char **salt,
|
||||
char **verifier, const char *N, const char *g);
|
||||
int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt,
|
||||
|
@ -185,7 +185,7 @@ static char *t_tob64(char *dst, const unsigned char *src, int size)
|
||||
return olddst;
|
||||
}
|
||||
|
||||
static void SRP_user_pwd_free(SRP_user_pwd *user_pwd)
|
||||
void SRP_user_pwd_free(SRP_user_pwd *user_pwd)
|
||||
{
|
||||
if (user_pwd == NULL)
|
||||
return;
|
||||
@ -247,6 +247,24 @@ static int SRP_user_pwd_set_sv_BN(SRP_user_pwd *vinfo, BIGNUM *s, BIGNUM *v)
|
||||
return (vinfo->s != NULL && vinfo->v != NULL);
|
||||
}
|
||||
|
||||
static SRP_user_pwd *srp_user_pwd_dup(SRP_user_pwd *src)
|
||||
{
|
||||
SRP_user_pwd *ret;
|
||||
|
||||
if (src == NULL)
|
||||
return NULL;
|
||||
if ((ret = SRP_user_pwd_new()) == NULL)
|
||||
return NULL;
|
||||
|
||||
SRP_user_pwd_set_gN(ret, src->g, src->N);
|
||||
if (!SRP_user_pwd_set_ids(ret, src->id, src->info)
|
||||
|| !SRP_user_pwd_set_sv_BN(ret, BN_dup(src->s), BN_dup(src->v))) {
|
||||
SRP_user_pwd_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
SRP_VBASE *SRP_VBASE_new(char *seed_key)
|
||||
{
|
||||
SRP_VBASE *vb = (SRP_VBASE *)OPENSSL_malloc(sizeof(SRP_VBASE));
|
||||
@ -468,21 +486,50 @@ int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file)
|
||||
|
||||
}
|
||||
|
||||
SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)
|
||||
static SRP_user_pwd *find_user(SRP_VBASE *vb, char *username)
|
||||
{
|
||||
int i;
|
||||
SRP_user_pwd *user;
|
||||
|
||||
if (vb == NULL)
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < sk_SRP_user_pwd_num(vb->users_pwd); i++) {
|
||||
user = sk_SRP_user_pwd_value(vb->users_pwd, i);
|
||||
if (strcmp(user->id, username) == 0)
|
||||
return user;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* This method ignores the configured seed and fails for an unknown user.
|
||||
* Ownership of the returned pointer is not released to the caller.
|
||||
* In other words, caller must not free the result.
|
||||
*/
|
||||
SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)
|
||||
{
|
||||
return find_user(vb, username);
|
||||
}
|
||||
|
||||
/*
|
||||
* Ownership of the returned pointer is released to the caller.
|
||||
* In other words, caller must free the result once done.
|
||||
*/
|
||||
SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username)
|
||||
{
|
||||
SRP_user_pwd *user;
|
||||
unsigned char digv[SHA_DIGEST_LENGTH];
|
||||
unsigned char digs[SHA_DIGEST_LENGTH];
|
||||
EVP_MD_CTX ctxt;
|
||||
|
||||
if (vb == NULL)
|
||||
return NULL;
|
||||
for (i = 0; i < sk_SRP_user_pwd_num(vb->users_pwd); i++) {
|
||||
user = sk_SRP_user_pwd_value(vb->users_pwd, i);
|
||||
if (strcmp(user->id, username) == 0)
|
||||
return user;
|
||||
}
|
||||
|
||||
if ((user = find_user(vb, username)) != NULL)
|
||||
return srp_user_pwd_dup(user);
|
||||
|
||||
if ((vb->seed_key == NULL) ||
|
||||
(vb->default_g == NULL) || (vb->default_N == NULL))
|
||||
return NULL;
|
||||
|
@ -360,7 +360,7 @@ void *sk_set(_STACK *st, int i, void *value)
|
||||
|
||||
void sk_sort(_STACK *st)
|
||||
{
|
||||
if (st && !st->sorted) {
|
||||
if (st && !st->sorted && st->comp != NULL) {
|
||||
int (*comp_func) (const void *, const void *);
|
||||
|
||||
/*
|
||||
|
@ -194,6 +194,9 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
int num, j, retry;
|
||||
int (*cb) (int xok, X509_STORE_CTX *xctx);
|
||||
STACK_OF(X509) *sktmp = NULL;
|
||||
int trust = X509_TRUST_UNTRUSTED;
|
||||
int err;
|
||||
|
||||
if (ctx->cert == NULL) {
|
||||
X509err(X509_F_X509_VERIFY_CERT, X509_R_NO_CERT_SET_FOR_US_TO_VERIFY);
|
||||
return -1;
|
||||
@ -216,7 +219,8 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
if (((ctx->chain = sk_X509_new_null()) == NULL) ||
|
||||
(!sk_X509_push(ctx->chain, ctx->cert))) {
|
||||
X509err(X509_F_X509_VERIFY_CERT, ERR_R_MALLOC_FAILURE);
|
||||
goto end;
|
||||
ok = -1;
|
||||
goto err;
|
||||
}
|
||||
CRYPTO_add(&ctx->cert->references, 1, CRYPTO_LOCK_X509);
|
||||
ctx->last_untrusted = 1;
|
||||
@ -225,7 +229,8 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
if (ctx->untrusted != NULL
|
||||
&& (sktmp = sk_X509_dup(ctx->untrusted)) == NULL) {
|
||||
X509err(X509_F_X509_VERIFY_CERT, ERR_R_MALLOC_FAILURE);
|
||||
goto end;
|
||||
ok = -1;
|
||||
goto err;
|
||||
}
|
||||
|
||||
num = sk_X509_num(ctx->chain);
|
||||
@ -249,7 +254,7 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
if (ctx->param->flags & X509_V_FLAG_TRUSTED_FIRST) {
|
||||
ok = ctx->get_issuer(&xtmp, ctx, x);
|
||||
if (ok < 0)
|
||||
goto end;
|
||||
goto err;
|
||||
/*
|
||||
* If successful for now free up cert so it will be picked up
|
||||
* again later.
|
||||
@ -266,7 +271,8 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
if (xtmp != NULL) {
|
||||
if (!sk_X509_push(ctx->chain, xtmp)) {
|
||||
X509err(X509_F_X509_VERIFY_CERT, ERR_R_MALLOC_FAILURE);
|
||||
goto end;
|
||||
ok = -1;
|
||||
goto err;
|
||||
}
|
||||
CRYPTO_add(&xtmp->references, 1, CRYPTO_LOCK_X509);
|
||||
(void)sk_X509_delete_ptr(sktmp, xtmp);
|
||||
@ -314,7 +320,7 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
bad_chain = 1;
|
||||
ok = cb(0, ctx);
|
||||
if (!ok)
|
||||
goto end;
|
||||
goto err;
|
||||
} else {
|
||||
/*
|
||||
* We have a match: replace certificate with store
|
||||
@ -347,25 +353,26 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
ok = ctx->get_issuer(&xtmp, ctx, x);
|
||||
|
||||
if (ok < 0)
|
||||
goto end;
|
||||
goto err;
|
||||
if (ok == 0)
|
||||
break;
|
||||
x = xtmp;
|
||||
if (!sk_X509_push(ctx->chain, x)) {
|
||||
X509_free(xtmp);
|
||||
X509err(X509_F_X509_VERIFY_CERT, ERR_R_MALLOC_FAILURE);
|
||||
ok = 0;
|
||||
goto end;
|
||||
ok = -1;
|
||||
goto err;
|
||||
}
|
||||
num++;
|
||||
}
|
||||
|
||||
/* we now have our chain, lets check it... */
|
||||
i = check_trust(ctx);
|
||||
if ((trust = check_trust(ctx)) == X509_TRUST_REJECTED) {
|
||||
/* Callback already issued */
|
||||
ok = 0;
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* If explicitly rejected error */
|
||||
if (i == X509_TRUST_REJECTED)
|
||||
goto end;
|
||||
/*
|
||||
* If it's not explicitly trusted then check if there is an alternative
|
||||
* chain that could be used. We only do this if we haven't already
|
||||
@ -373,14 +380,14 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
* chain checking
|
||||
*/
|
||||
retry = 0;
|
||||
if (i != X509_TRUST_TRUSTED
|
||||
if (trust != X509_TRUST_TRUSTED
|
||||
&& !(ctx->param->flags & X509_V_FLAG_TRUSTED_FIRST)
|
||||
&& !(ctx->param->flags & X509_V_FLAG_NO_ALT_CHAINS)) {
|
||||
while (j-- > 1) {
|
||||
xtmp2 = sk_X509_value(ctx->chain, j - 1);
|
||||
ok = ctx->get_issuer(&xtmp, ctx, xtmp2);
|
||||
if (ok < 0)
|
||||
goto end;
|
||||
goto err;
|
||||
/* Check if we found an alternate chain */
|
||||
if (ok > 0) {
|
||||
/*
|
||||
@ -410,7 +417,7 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
* self signed certificate in which case we've indicated an error already
|
||||
* and set bad_chain == 1
|
||||
*/
|
||||
if (i != X509_TRUST_TRUSTED && !bad_chain) {
|
||||
if (trust != X509_TRUST_TRUSTED && !bad_chain) {
|
||||
if ((chain_ss == NULL) || !ctx->check_issued(ctx, x, chain_ss)) {
|
||||
if (ctx->last_untrusted >= num)
|
||||
ctx->error = X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY;
|
||||
@ -431,26 +438,26 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
bad_chain = 1;
|
||||
ok = cb(0, ctx);
|
||||
if (!ok)
|
||||
goto end;
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* We have the chain complete: now we need to check its purpose */
|
||||
ok = check_chain_extensions(ctx);
|
||||
|
||||
if (!ok)
|
||||
goto end;
|
||||
goto err;
|
||||
|
||||
/* Check name constraints */
|
||||
|
||||
ok = check_name_constraints(ctx);
|
||||
|
||||
if (!ok)
|
||||
goto end;
|
||||
goto err;
|
||||
|
||||
ok = check_id(ctx);
|
||||
|
||||
if (!ok)
|
||||
goto end;
|
||||
goto err;
|
||||
|
||||
/* We may as well copy down any DSA parameters that are required */
|
||||
X509_get_pubkey_parameters(NULL, ctx->chain);
|
||||
@ -462,16 +469,16 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
|
||||
ok = ctx->check_revocation(ctx);
|
||||
if (!ok)
|
||||
goto end;
|
||||
goto err;
|
||||
|
||||
i = X509_chain_check_suiteb(&ctx->error_depth, NULL, ctx->chain,
|
||||
ctx->param->flags);
|
||||
if (i != X509_V_OK) {
|
||||
ctx->error = i;
|
||||
err = X509_chain_check_suiteb(&ctx->error_depth, NULL, ctx->chain,
|
||||
ctx->param->flags);
|
||||
if (err != X509_V_OK) {
|
||||
ctx->error = err;
|
||||
ctx->current_cert = sk_X509_value(ctx->chain, ctx->error_depth);
|
||||
ok = cb(0, ctx);
|
||||
if (!ok)
|
||||
goto end;
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* At this point, we have a chain and need to verify it */
|
||||
@ -480,25 +487,28 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
|
||||
else
|
||||
ok = internal_verify(ctx);
|
||||
if (!ok)
|
||||
goto end;
|
||||
goto err;
|
||||
|
||||
#ifndef OPENSSL_NO_RFC3779
|
||||
/* RFC 3779 path validation, now that CRL check has been done */
|
||||
ok = v3_asid_validate_path(ctx);
|
||||
if (!ok)
|
||||
goto end;
|
||||
goto err;
|
||||
ok = v3_addr_validate_path(ctx);
|
||||
if (!ok)
|
||||
goto end;
|
||||
goto err;
|
||||
#endif
|
||||
|
||||
/* If we get this far evaluate policies */
|
||||
if (!bad_chain && (ctx->param->flags & X509_V_FLAG_POLICY_CHECK))
|
||||
ok = ctx->check_policy(ctx);
|
||||
if (!ok)
|
||||
goto end;
|
||||
goto err;
|
||||
if (0) {
|
||||
end:
|
||||
err:
|
||||
/* Ensure we return an error */
|
||||
if (ok > 0)
|
||||
ok = 0;
|
||||
X509_get_pubkey_parameters(NULL, ctx->chain);
|
||||
}
|
||||
if (sktmp != NULL)
|
||||
|
@ -38,25 +38,21 @@ SSL v2 and for SSL v3/TLS v1.
|
||||
|
||||
Like B<-v>, but include cipher suite codes in output (hex format).
|
||||
|
||||
=item B<-ssl3>
|
||||
=item B<-ssl3>, B<-tls1>
|
||||
|
||||
only include SSL v3 ciphers.
|
||||
This lists ciphers compatible with any of SSLv3, TLSv1, TLSv1.1 or TLSv1.2.
|
||||
|
||||
=item B<-ssl2>
|
||||
|
||||
only include SSL v2 ciphers.
|
||||
|
||||
=item B<-tls1>
|
||||
|
||||
only include TLS v1 ciphers.
|
||||
Only include SSLv2 ciphers.
|
||||
|
||||
=item B<-h>, B<-?>
|
||||
|
||||
print a brief usage message.
|
||||
Print a brief usage message.
|
||||
|
||||
=item B<cipherlist>
|
||||
|
||||
a cipher list to convert to a cipher preference list. If it is not included
|
||||
A cipher list to convert to a cipher preference list. If it is not included
|
||||
then the default cipher list will be used. The format is described below.
|
||||
|
||||
=back
|
||||
@ -109,9 +105,10 @@ The following is a list of all permitted cipher strings and their meanings.
|
||||
|
||||
=item B<DEFAULT>
|
||||
|
||||
the default cipher list. This is determined at compile time and
|
||||
is normally B<ALL:!EXPORT:!aNULL:!eNULL:!SSLv2>. This must be the firstcipher string
|
||||
specified.
|
||||
The default cipher list.
|
||||
This is determined at compile time and is normally
|
||||
B<ALL:!EXPORT:!aNULL:!eNULL:!SSLv2>.
|
||||
When used, this must be the first cipherstring specified.
|
||||
|
||||
=item B<COMPLEMENTOFDEFAULT>
|
||||
|
||||
@ -139,34 +136,46 @@ than 128 bits, and some cipher suites with 128-bit keys.
|
||||
|
||||
=item B<LOW>
|
||||
|
||||
"low" encryption cipher suites, currently those using 64 or 56 bit encryption algorithms
|
||||
but excluding export cipher suites.
|
||||
Low strength encryption cipher suites, currently those using 64 or 56 bit
|
||||
encryption algorithms but excluding export cipher suites.
|
||||
As of OpenSSL 1.0.2g, these are disabled in default builds.
|
||||
|
||||
=item B<EXP>, B<EXPORT>
|
||||
|
||||
export encryption algorithms. Including 40 and 56 bits algorithms.
|
||||
Export strength encryption algorithms. Including 40 and 56 bits algorithms.
|
||||
As of OpenSSL 1.0.2g, these are disabled in default builds.
|
||||
|
||||
=item B<EXPORT40>
|
||||
|
||||
40 bit export encryption algorithms
|
||||
40-bit export encryption algorithms
|
||||
As of OpenSSL 1.0.2g, these are disabled in default builds.
|
||||
|
||||
=item B<EXPORT56>
|
||||
|
||||
56 bit export encryption algorithms. In OpenSSL 0.9.8c and later the set of
|
||||
56-bit export encryption algorithms. In OpenSSL 0.9.8c and later the set of
|
||||
56 bit export ciphers is empty unless OpenSSL has been explicitly configured
|
||||
with support for experimental ciphers.
|
||||
As of OpenSSL 1.0.2g, these are disabled in default builds.
|
||||
|
||||
=item B<eNULL>, B<NULL>
|
||||
|
||||
the "NULL" ciphers that is those offering no encryption. Because these offer no
|
||||
encryption at all and are a security risk they are disabled unless explicitly
|
||||
included.
|
||||
The "NULL" ciphers that is those offering no encryption. Because these offer no
|
||||
encryption at all and are a security risk they are not enabled via either the
|
||||
B<DEFAULT> or B<ALL> cipher strings.
|
||||
Be careful when building cipherlists out of lower-level primitives such as
|
||||
B<kRSA> or B<aECDSA> as these do overlap with the B<eNULL> ciphers.
|
||||
When in doubt, include B<!eNULL> in your cipherlist.
|
||||
|
||||
=item B<aNULL>
|
||||
|
||||
the cipher suites offering no authentication. This is currently the anonymous
|
||||
The cipher suites offering no authentication. This is currently the anonymous
|
||||
DH algorithms and anonymous ECDH algorithms. These cipher suites are vulnerable
|
||||
to a "man in the middle" attack and so their use is normally discouraged.
|
||||
These are excluded from the B<DEFAULT> ciphers, but included in the B<ALL>
|
||||
ciphers.
|
||||
Be careful when building cipherlists out of lower-level primitives such as
|
||||
B<kDHE> or B<AES> as these do overlap with the B<aNULL> ciphers.
|
||||
When in doubt, include B<!aNULL> in your cipherlist.
|
||||
|
||||
=item B<kRSA>, B<RSA>
|
||||
|
||||
@ -582,11 +591,11 @@ Note: these ciphers can also be used in SSL v3.
|
||||
=head2 Deprecated SSL v2.0 cipher suites.
|
||||
|
||||
SSL_CK_RC4_128_WITH_MD5 RC4-MD5
|
||||
SSL_CK_RC4_128_EXPORT40_WITH_MD5 EXP-RC4-MD5
|
||||
SSL_CK_RC2_128_CBC_WITH_MD5 RC2-MD5
|
||||
SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5 EXP-RC2-MD5
|
||||
SSL_CK_RC4_128_EXPORT40_WITH_MD5 Not implemented.
|
||||
SSL_CK_RC2_128_CBC_WITH_MD5 RC2-CBC-MD5
|
||||
SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5 Not implemented.
|
||||
SSL_CK_IDEA_128_CBC_WITH_MD5 IDEA-CBC-MD5
|
||||
SSL_CK_DES_64_CBC_WITH_MD5 DES-CBC-MD5
|
||||
SSL_CK_DES_64_CBC_WITH_MD5 Not implemented.
|
||||
SSL_CK_DES_192_EDE3_CBC_WITH_MD5 DES-CBC3-MD5
|
||||
|
||||
=head1 NOTES
|
||||
|
@ -137,6 +137,19 @@ Unless otherwise mentioned all algorithms support the B<digest:alg> option
|
||||
which specifies the digest in use for sign, verify and verifyrecover operations.
|
||||
The value B<alg> should represent a digest name as used in the
|
||||
EVP_get_digestbyname() function for example B<sha1>.
|
||||
This value is used only for sanity-checking the lengths of data passed in to
|
||||
the B<pkeyutl> and for creating the structures that make up the signature
|
||||
(e.g. B<DigestInfo> in RSASSA PKCS#1 v1.5 signatures).
|
||||
In case of RSA, ECDSA and DSA signatures, this utility
|
||||
will not perform hashing on input data but rather use the data directly as
|
||||
input of signature algorithm. Depending on key type, signature type and mode
|
||||
of padding, the maximum acceptable lengths of input data differ. In general,
|
||||
with RSA the signed data can't be longer than the key modulus, in case of ECDSA
|
||||
and DSA the data shouldn't be longer than field size, otherwise it will be
|
||||
silently truncated to field size.
|
||||
|
||||
In other words, if the value of digest is B<sha1> the input should be 20 bytes
|
||||
long binary encoding of SHA-1 hash function output.
|
||||
|
||||
=head1 RSA ALGORITHM
|
||||
|
||||
|
@ -347,9 +347,12 @@ configuration file values.
|
||||
|
||||
=item B<default_bits>
|
||||
|
||||
This specifies the default key size in bits. If not specified then
|
||||
512 is used. It is used if the B<-new> option is used. It can be
|
||||
overridden by using the B<-newkey> option.
|
||||
Specifies the default key size in bits.
|
||||
|
||||
This option is used in conjunction with the B<-new> option to generate
|
||||
a new key. It can be overridden by specifying an explicit key size in
|
||||
the B<-newkey> option. The smallest accepted key size is 512 bits. If
|
||||
no key size is specified then 2048 bits is used.
|
||||
|
||||
=item B<default_keyfile>
|
||||
|
||||
|
@ -201,15 +201,11 @@ Use the PSK key B<key> when using a PSK cipher suite. The key is
|
||||
given as a hexadecimal number without leading 0x, for example -psk
|
||||
1a2b3c4d.
|
||||
|
||||
=item B<-ssl2>, B<-ssl3>, B<-tls1>, B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>
|
||||
=item B<-ssl2>, B<-ssl3>, B<-tls1>, B<-tls1_1>, B<-tls1_2>, B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>
|
||||
|
||||
these options disable the use of certain SSL or TLS protocols. By default
|
||||
the initial handshake uses a method which should be compatible with all
|
||||
servers and permit them to use SSL v3, SSL v2 or TLS as appropriate.
|
||||
|
||||
Unfortunately there are still ancient and broken servers in use which
|
||||
cannot handle this technique and will fail to connect. Some servers only
|
||||
work if TLS is turned off.
|
||||
These options require or disable the use of the specified SSL or TLS protocols.
|
||||
By default the initial handshake uses a I<version-flexible> method which will
|
||||
negotiate the highest mutually supported protocol version.
|
||||
|
||||
=item B<-fallback_scsv>
|
||||
|
||||
|
@ -217,11 +217,11 @@ Use the PSK key B<key> when using a PSK cipher suite. The key is
|
||||
given as a hexadecimal number without leading 0x, for example -psk
|
||||
1a2b3c4d.
|
||||
|
||||
=item B<-ssl2>, B<-ssl3>, B<-tls1>, B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>
|
||||
=item B<-ssl2>, B<-ssl3>, B<-tls1>, B<-tls1_1>, B<-tls1_2>, B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>
|
||||
|
||||
these options disable the use of certain SSL or TLS protocols. By default
|
||||
the initial handshake uses a method which should be compatible with all
|
||||
servers and permit them to use SSL v3, SSL v2 or TLS as appropriate.
|
||||
These options require or disable the use of the specified SSL or TLS protocols.
|
||||
By default the initial handshake uses a I<version-flexible> method which will
|
||||
negotiate the highest mutually supported protocol version.
|
||||
|
||||
=item B<-bugs>
|
||||
|
||||
|
@ -16,7 +16,7 @@ BIO_get_mem_ptr, BIO_new_mem_buf - memory BIO
|
||||
BIO_set_mem_buf(BIO *b,BUF_MEM *bm,int c)
|
||||
BIO_get_mem_ptr(BIO *b,BUF_MEM **pp)
|
||||
|
||||
BIO *BIO_new_mem_buf(void *buf, int len);
|
||||
BIO *BIO_new_mem_buf(const void *buf, int len);
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
@ -61,7 +61,7 @@ BIO_get_mem_ptr() places the underlying BUF_MEM structure in B<pp>. It is
|
||||
a macro.
|
||||
|
||||
BIO_new_mem_buf() creates a memory BIO using B<len> bytes of data at B<buf>,
|
||||
if B<len> is -1 then the B<buf> is assumed to be null terminated and its
|
||||
if B<len> is -1 then the B<buf> is assumed to be nul terminated and its
|
||||
length is determined by B<strlen>. The BIO is set to a read only state and
|
||||
as a result cannot be written to. This is useful when some data needs to be
|
||||
made available from a static area of memory in the form of a BIO. The
|
||||
|
@ -74,7 +74,7 @@ B<prime256v1>). Curve names are case sensitive.
|
||||
|
||||
=item B<-named_curve>
|
||||
|
||||
This sets the temporary curve used for ephemeral ECDH modes. Only used by
|
||||
This sets the temporary curve used for ephemeral ECDH modes. Only used by
|
||||
servers
|
||||
|
||||
The B<value> argument is a curve name or the special value B<auto> which
|
||||
@ -85,7 +85,7 @@ can be either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name
|
||||
=item B<-cipher>
|
||||
|
||||
Sets the cipher suite list to B<value>. Note: syntax checking of B<value> is
|
||||
currently not performed unless a B<SSL> or B<SSL_CTX> structure is
|
||||
currently not performed unless a B<SSL> or B<SSL_CTX> structure is
|
||||
associated with B<cctx>.
|
||||
|
||||
=item B<-cert>
|
||||
@ -111,9 +111,9 @@ operations are permitted.
|
||||
|
||||
=item B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>
|
||||
|
||||
Disables protocol support for SSLv2, SSLv3, TLS 1.0, TLS 1.1 or TLS 1.2
|
||||
by setting the corresponding options B<SSL_OP_NO_SSL2>, B<SSL_OP_NO_SSL3>,
|
||||
B<SSL_OP_NO_TLS1>, B<SSL_OP_NO_TLS1_1> and B<SSL_OP_NO_TLS1_2> respectively.
|
||||
Disables protocol support for SSLv2, SSLv3, TLSv1.0, TLSv1.1 or TLSv1.2
|
||||
by setting the corresponding options B<SSL_OP_NO_SSLv2>, B<SSL_OP_NO_SSLv3>,
|
||||
B<SSL_OP_NO_TLSv1>, B<SSL_OP_NO_TLSv1_1> and B<SSL_OP_NO_TLSv1_2> respectively.
|
||||
|
||||
=item B<-bugs>
|
||||
|
||||
@ -177,7 +177,7 @@ Note: the command prefix (if set) alters the recognised B<cmd> values.
|
||||
=item B<CipherString>
|
||||
|
||||
Sets the cipher suite list to B<value>. Note: syntax checking of B<value> is
|
||||
currently not performed unless an B<SSL> or B<SSL_CTX> structure is
|
||||
currently not performed unless an B<SSL> or B<SSL_CTX> structure is
|
||||
associated with B<cctx>.
|
||||
|
||||
=item B<Certificate>
|
||||
@ -244,7 +244,7 @@ B<prime256v1>). Curve names are case sensitive.
|
||||
|
||||
=item B<ECDHParameters>
|
||||
|
||||
This sets the temporary curve used for ephemeral ECDH modes. Only used by
|
||||
This sets the temporary curve used for ephemeral ECDH modes. Only used by
|
||||
servers
|
||||
|
||||
The B<value> argument is a curve name or the special value B<Automatic> which
|
||||
@ -258,10 +258,11 @@ The supported versions of the SSL or TLS protocol.
|
||||
|
||||
The B<value> argument is a comma separated list of supported protocols to
|
||||
enable or disable. If an protocol is preceded by B<-> that version is disabled.
|
||||
All versions are enabled by default, though applications may choose to
|
||||
explicitly disable some. Currently supported protocol values are B<SSLv2>,
|
||||
B<SSLv3>, B<TLSv1>, B<TLSv1.1> and B<TLSv1.2>. The special value B<ALL> refers
|
||||
to all supported versions.
|
||||
Currently supported protocol values are B<SSLv2>, B<SSLv3>, B<TLSv1>,
|
||||
B<TLSv1.1> and B<TLSv1.2>.
|
||||
All protocol versions other than B<SSLv2> are enabled by default.
|
||||
To avoid inadvertent enabling of B<SSLv2>, when SSLv2 is disabled, it is not
|
||||
possible to enable it via the B<Protocol> command.
|
||||
|
||||
=item B<Options>
|
||||
|
||||
@ -339,16 +340,16 @@ The value is a directory name.
|
||||
The order of operations is significant. This can be used to set either defaults
|
||||
or values which cannot be overridden. For example if an application calls:
|
||||
|
||||
SSL_CONF_cmd(ctx, "Protocol", "-SSLv2");
|
||||
SSL_CONF_cmd(ctx, "Protocol", "-SSLv3");
|
||||
SSL_CONF_cmd(ctx, userparam, uservalue);
|
||||
|
||||
it will disable SSLv2 support by default but the user can override it. If
|
||||
it will disable SSLv3 support by default but the user can override it. If
|
||||
however the call sequence is:
|
||||
|
||||
SSL_CONF_cmd(ctx, userparam, uservalue);
|
||||
SSL_CONF_cmd(ctx, "Protocol", "-SSLv2");
|
||||
SSL_CONF_cmd(ctx, "Protocol", "-SSLv3");
|
||||
|
||||
SSLv2 is B<always> disabled and attempt to override this by the user are
|
||||
then SSLv3 is B<always> disabled and attempt to override this by the user are
|
||||
ignored.
|
||||
|
||||
By checking the return code of SSL_CTX_cmd() it is possible to query if a
|
||||
@ -372,7 +373,7 @@ can be checked instead. If -3 is returned a required argument is missing
|
||||
and an error is indicated. If 0 is returned some other error occurred and
|
||||
this can be reported back to the user.
|
||||
|
||||
The function SSL_CONF_cmd_value_type() can be used by applications to
|
||||
The function SSL_CONF_cmd_value_type() can be used by applications to
|
||||
check for the existence of a command or to perform additional syntax
|
||||
checking or translation of the command value. For example if the return
|
||||
value is B<SSL_CONF_TYPE_FILE> an application could translate a relative
|
||||
|
@ -2,13 +2,55 @@
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SSL_CTX_new - create a new SSL_CTX object as framework for TLS/SSL enabled functions
|
||||
SSL_CTX_new,
|
||||
SSLv23_method, SSLv23_server_method, SSLv23_client_method,
|
||||
TLSv1_2_method, TLSv1_2_server_method, TLSv1_2_client_method,
|
||||
TLSv1_1_method, TLSv1_1_server_method, TLSv1_1_client_method,
|
||||
TLSv1_method, TLSv1_server_method, TLSv1_client_method,
|
||||
SSLv3_method, SSLv3_server_method, SSLv3_client_method,
|
||||
SSLv2_method, SSLv2_server_method, SSLv2_client_method,
|
||||
DTLS_method, DTLS_server_method, DTLS_client_method,
|
||||
DTLSv1_2_method, DTLSv1_2_server_method, DTLSv1_2_client_method,
|
||||
DTLSv1_method, DTLSv1_server_method, DTLSv1_client_method -
|
||||
create a new SSL_CTX object as framework for TLS/SSL enabled functions
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
#include <openssl/ssl.h>
|
||||
|
||||
SSL_CTX *SSL_CTX_new(const SSL_METHOD *method);
|
||||
const SSL_METHOD *SSLv23_method(void);
|
||||
const SSL_METHOD *SSLv23_server_method(void);
|
||||
const SSL_METHOD *SSLv23_client_method(void);
|
||||
const SSL_METHOD *TLSv1_2_method(void);
|
||||
const SSL_METHOD *TLSv1_2_server_method(void);
|
||||
const SSL_METHOD *TLSv1_2_client_method(void);
|
||||
const SSL_METHOD *TLSv1_1_method(void);
|
||||
const SSL_METHOD *TLSv1_1_server_method(void);
|
||||
const SSL_METHOD *TLSv1_1_client_method(void);
|
||||
const SSL_METHOD *TLSv1_method(void);
|
||||
const SSL_METHOD *TLSv1_server_method(void);
|
||||
const SSL_METHOD *TLSv1_client_method(void);
|
||||
#ifndef OPENSSL_NO_SSL3_METHOD
|
||||
const SSL_METHOD *SSLv3_method(void);
|
||||
const SSL_METHOD *SSLv3_server_method(void);
|
||||
const SSL_METHOD *SSLv3_client_method(void);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_SSL2
|
||||
const SSL_METHOD *SSLv2_method(void);
|
||||
const SSL_METHOD *SSLv2_server_method(void);
|
||||
const SSL_METHOD *SSLv2_client_method(void);
|
||||
#endif
|
||||
|
||||
const SSL_METHOD *DTLS_method(void);
|
||||
const SSL_METHOD *DTLS_server_method(void);
|
||||
const SSL_METHOD *DTLS_client_method(void);
|
||||
const SSL_METHOD *DTLSv1_2_method(void);
|
||||
const SSL_METHOD *DTLSv1_2_server_method(void);
|
||||
const SSL_METHOD *DTLSv1_2_client_method(void);
|
||||
const SSL_METHOD *DTLSv1_method(void);
|
||||
const SSL_METHOD *DTLSv1_server_method(void);
|
||||
const SSL_METHOD *DTLSv1_client_method(void);
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
@ -23,65 +65,88 @@ client only type. B<method> can be of the following types:
|
||||
|
||||
=over 4
|
||||
|
||||
=item SSLv2_method(void), SSLv2_server_method(void), SSLv2_client_method(void)
|
||||
=item SSLv23_method(), SSLv23_server_method(), SSLv23_client_method()
|
||||
|
||||
A TLS/SSL connection established with these methods will only understand
|
||||
the SSLv2 protocol. A client will send out SSLv2 client hello messages
|
||||
and will also indicate that it only understand SSLv2. A server will only
|
||||
understand SSLv2 client hello messages.
|
||||
These are the general-purpose I<version-flexible> SSL/TLS methods.
|
||||
The actual protocol version used will be negotiated to the highest version
|
||||
mutually supported by the client and the server.
|
||||
The supported protocols are SSLv2, SSLv3, TLSv1, TLSv1.1 and TLSv1.2.
|
||||
Most applications should use these method, and avoid the version specific
|
||||
methods described below.
|
||||
|
||||
=item SSLv3_method(void), SSLv3_server_method(void), SSLv3_client_method(void)
|
||||
The list of protocols available can be further limited using the
|
||||
B<SSL_OP_NO_SSLv2>, B<SSL_OP_NO_SSLv3>, B<SSL_OP_NO_TLSv1>,
|
||||
B<SSL_OP_NO_TLSv1_1> and B<SSL_OP_NO_TLSv1_2> options of the
|
||||
L<SSL_CTX_set_options(3)> or L<SSL_set_options(3)> functions.
|
||||
Clients should avoid creating "holes" in the set of protocols they support,
|
||||
when disabling a protocol, make sure that you also disable either all previous
|
||||
or all subsequent protocol versions.
|
||||
In clients, when a protocol version is disabled without disabling I<all>
|
||||
previous protocol versions, the effect is to also disable all subsequent
|
||||
protocol versions.
|
||||
|
||||
The SSLv2 and SSLv3 protocols are deprecated and should generally not be used.
|
||||
Applications should typically use L<SSL_CTX_set_options(3)> in combination with
|
||||
the B<SSL_OP_NO_SSLv3> flag to disable negotiation of SSLv3 via the above
|
||||
I<version-flexible> SSL/TLS methods.
|
||||
The B<SSL_OP_NO_SSLv2> option is set by default, and would need to be cleared
|
||||
via L<SSL_CTX_clear_options(3)> in order to enable negotiation of SSLv2.
|
||||
|
||||
=item TLSv1_2_method(), TLSv1_2_server_method(), TLSv1_2_client_method()
|
||||
|
||||
A TLS/SSL connection established with these methods will only understand the
|
||||
SSLv3 protocol. A client will send out SSLv3 client hello messages
|
||||
and will indicate that it only understands SSLv3. A server will only understand
|
||||
SSLv3 client hello messages. This especially means, that it will
|
||||
not understand SSLv2 client hello messages which are widely used for
|
||||
compatibility reasons, see SSLv23_*_method().
|
||||
TLSv1.2 protocol. A client will send out TLSv1.2 client hello messages and
|
||||
will also indicate that it only understand TLSv1.2. A server will only
|
||||
understand TLSv1.2 client hello messages.
|
||||
|
||||
=item TLSv1_method(void), TLSv1_server_method(void), TLSv1_client_method(void)
|
||||
=item TLSv1_1_method(), TLSv1_1_server_method(), TLSv1_1_client_method()
|
||||
|
||||
A TLS/SSL connection established with these methods will only understand the
|
||||
TLSv1 protocol. A client will send out TLSv1 client hello messages
|
||||
and will indicate that it only understands TLSv1. A server will only understand
|
||||
TLSv1 client hello messages. This especially means, that it will
|
||||
not understand SSLv2 client hello messages which are widely used for
|
||||
compatibility reasons, see SSLv23_*_method(). It will also not understand
|
||||
SSLv3 client hello messages.
|
||||
TLSv1.1 protocol. A client will send out TLSv1.1 client hello messages and
|
||||
will also indicate that it only understand TLSv1.1. A server will only
|
||||
understand TLSv1.1 client hello messages.
|
||||
|
||||
=item SSLv23_method(void), SSLv23_server_method(void), SSLv23_client_method(void)
|
||||
=item TLSv1_method(), TLSv1_server_method(), TLSv1_client_method()
|
||||
|
||||
A TLS/SSL connection established with these methods may understand the SSLv2,
|
||||
SSLv3, TLSv1, TLSv1.1 and TLSv1.2 protocols.
|
||||
A TLS/SSL connection established with these methods will only understand the
|
||||
TLSv1 protocol. A client will send out TLSv1 client hello messages and will
|
||||
indicate that it only understands TLSv1. A server will only understand TLSv1
|
||||
client hello messages.
|
||||
|
||||
If the cipher list does not contain any SSLv2 ciphersuites (the default
|
||||
cipher list does not) or extensions are required (for example server name)
|
||||
a client will send out TLSv1 client hello messages including extensions and
|
||||
will indicate that it also understands TLSv1.1, TLSv1.2 and permits a
|
||||
fallback to SSLv3. A server will support SSLv3, TLSv1, TLSv1.1 and TLSv1.2
|
||||
protocols. This is the best choice when compatibility is a concern.
|
||||
=item SSLv3_method(), SSLv3_server_method(), SSLv3_client_method()
|
||||
|
||||
If any SSLv2 ciphersuites are included in the cipher list and no extensions
|
||||
are required then SSLv2 compatible client hellos will be used by clients and
|
||||
SSLv2 will be accepted by servers. This is B<not> recommended due to the
|
||||
insecurity of SSLv2 and the limited nature of the SSLv2 client hello
|
||||
prohibiting the use of extensions.
|
||||
A TLS/SSL connection established with these methods will only understand the
|
||||
SSLv3 protocol. A client will send out SSLv3 client hello messages and will
|
||||
indicate that it only understands SSLv3. A server will only understand SSLv3
|
||||
client hello messages. The SSLv3 protocol is deprecated and should not be
|
||||
used.
|
||||
|
||||
=item SSLv2_method(), SSLv2_server_method(), SSLv2_client_method()
|
||||
|
||||
A TLS/SSL connection established with these methods will only understand the
|
||||
SSLv2 protocol. A client will send out SSLv2 client hello messages and will
|
||||
also indicate that it only understand SSLv2. A server will only understand
|
||||
SSLv2 client hello messages. The SSLv2 protocol offers little to no security
|
||||
and should not be used.
|
||||
As of OpenSSL 1.0.2g, EXPORT ciphers and 56-bit DES are no longer available
|
||||
with SSLv2.
|
||||
|
||||
=item DTLS_method(), DTLS_server_method(), DTLS_client_method()
|
||||
|
||||
These are the version-flexible DTLS methods.
|
||||
|
||||
=item DTLSv1_2_method(), DTLSv1_2_server_method(), DTLSv1_2_client_method()
|
||||
|
||||
These are the version-specific methods for DTLSv1.2.
|
||||
|
||||
=item DTLSv1_method(), DTLSv1_server_method(), DTLSv1_client_method()
|
||||
|
||||
These are the version-specific methods for DTLSv1.
|
||||
|
||||
=back
|
||||
|
||||
The list of protocols available can later be limited using the SSL_OP_NO_SSLv2,
|
||||
SSL_OP_NO_SSLv3, SSL_OP_NO_TLSv1, SSL_OP_NO_TLSv1_1 and SSL_OP_NO_TLSv1_2
|
||||
options of the SSL_CTX_set_options() or SSL_set_options() functions.
|
||||
Using these options it is possible to choose e.g. SSLv23_server_method() and
|
||||
be able to negotiate with all possible clients, but to only allow newer
|
||||
protocols like TLSv1, TLSv1.1 or TLS v1.2.
|
||||
|
||||
Applications which never want to support SSLv2 (even is the cipher string
|
||||
is configured to use SSLv2 ciphersuites) can set SSL_OP_NO_SSLv2.
|
||||
|
||||
SSL_CTX_new() initializes the list of ciphers, the session cache setting,
|
||||
the callbacks, the keys and certificates and the options to its default
|
||||
values.
|
||||
SSL_CTX_new() initializes the list of ciphers, the session cache setting, the
|
||||
callbacks, the keys and certificates and the options to its default values.
|
||||
|
||||
=head1 RETURN VALUES
|
||||
|
||||
@ -91,8 +156,8 @@ The following return values can occur:
|
||||
|
||||
=item NULL
|
||||
|
||||
The creation of a new SSL_CTX object failed. Check the error stack to
|
||||
find out the reason.
|
||||
The creation of a new SSL_CTX object failed. Check the error stack to find out
|
||||
the reason.
|
||||
|
||||
=item Pointer to an SSL_CTX object
|
||||
|
||||
@ -102,6 +167,7 @@ The return value points to an allocated SSL_CTX object.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
L<SSL_CTX_set_options(3)>, L<SSL_CTX_clear_options(3)>, L<SSL_set_options(3)>,
|
||||
L<SSL_CTX_free(3)|SSL_CTX_free(3)>, L<SSL_accept(3)|SSL_accept(3)>,
|
||||
L<ssl(3)|ssl(3)>, L<SSL_set_connect_state(3)|SSL_set_connect_state(3)>
|
||||
|
||||
|
@ -189,15 +189,25 @@ browser has a cert, it will crash/hang. Works for 3.x and 4.xbeta
|
||||
=item SSL_OP_NO_SSLv2
|
||||
|
||||
Do not use the SSLv2 protocol.
|
||||
As of OpenSSL 1.0.2g the B<SSL_OP_NO_SSLv2> option is set by default.
|
||||
|
||||
=item SSL_OP_NO_SSLv3
|
||||
|
||||
Do not use the SSLv3 protocol.
|
||||
It is recommended that applications should set this option.
|
||||
|
||||
=item SSL_OP_NO_TLSv1
|
||||
|
||||
Do not use the TLSv1 protocol.
|
||||
|
||||
=item SSL_OP_NO_TLSv1_1
|
||||
|
||||
Do not use the TLSv1.1 protocol.
|
||||
|
||||
=item SSL_OP_NO_TLSv1_2
|
||||
|
||||
Do not use the TLSv1.2 protocol.
|
||||
|
||||
=item SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
|
||||
|
||||
When performing renegotiation as a server, always start a new session
|
||||
|
@ -130,41 +130,86 @@ protocol methods defined in B<SSL_METHOD> structures.
|
||||
|
||||
=over 4
|
||||
|
||||
=item const SSL_METHOD *B<SSLv2_client_method>(void);
|
||||
=item const SSL_METHOD *B<SSLv23_method>(void);
|
||||
|
||||
Constructor for the SSLv2 SSL_METHOD structure for a dedicated client.
|
||||
Constructor for the I<version-flexible> SSL_METHOD structure for
|
||||
clients, servers or both.
|
||||
See L<SSL_CTX_new(3)> for details.
|
||||
|
||||
=item const SSL_METHOD *B<SSLv2_server_method>(void);
|
||||
=item const SSL_METHOD *B<SSLv23_client_method>(void);
|
||||
|
||||
Constructor for the SSLv2 SSL_METHOD structure for a dedicated server.
|
||||
Constructor for the I<version-flexible> SSL_METHOD structure for
|
||||
clients.
|
||||
|
||||
=item const SSL_METHOD *B<SSLv2_method>(void);
|
||||
=item const SSL_METHOD *B<SSLv23_client_method>(void);
|
||||
|
||||
Constructor for the SSLv2 SSL_METHOD structure for combined client and server.
|
||||
Constructor for the I<version-flexible> SSL_METHOD structure for
|
||||
servers.
|
||||
|
||||
=item const SSL_METHOD *B<SSLv3_client_method>(void);
|
||||
=item const SSL_METHOD *B<TLSv1_2_method>(void);
|
||||
|
||||
Constructor for the SSLv3 SSL_METHOD structure for a dedicated client.
|
||||
Constructor for the TLSv1.2 SSL_METHOD structure for clients, servers
|
||||
or both.
|
||||
|
||||
=item const SSL_METHOD *B<SSLv3_server_method>(void);
|
||||
=item const SSL_METHOD *B<TLSv1_2_client_method>(void);
|
||||
|
||||
Constructor for the SSLv3 SSL_METHOD structure for a dedicated server.
|
||||
Constructor for the TLSv1.2 SSL_METHOD structure for clients.
|
||||
|
||||
=item const SSL_METHOD *B<SSLv3_method>(void);
|
||||
=item const SSL_METHOD *B<TLSv1_2_server_method>(void);
|
||||
|
||||
Constructor for the SSLv3 SSL_METHOD structure for combined client and server.
|
||||
Constructor for the TLSv1.2 SSL_METHOD structure for servers.
|
||||
|
||||
=item const SSL_METHOD *B<TLSv1_client_method>(void);
|
||||
=item const SSL_METHOD *B<TLSv1_1_method>(void);
|
||||
|
||||
Constructor for the TLSv1 SSL_METHOD structure for a dedicated client.
|
||||
Constructor for the TLSv1.1 SSL_METHOD structure for clients, servers
|
||||
or both.
|
||||
|
||||
=item const SSL_METHOD *B<TLSv1_server_method>(void);
|
||||
=item const SSL_METHOD *B<TLSv1_1_client_method>(void);
|
||||
|
||||
Constructor for the TLSv1 SSL_METHOD structure for a dedicated server.
|
||||
Constructor for the TLSv1.1 SSL_METHOD structure for clients.
|
||||
|
||||
=item const SSL_METHOD *B<TLSv1_1_server_method>(void);
|
||||
|
||||
Constructor for the TLSv1.1 SSL_METHOD structure for servers.
|
||||
|
||||
=item const SSL_METHOD *B<TLSv1_method>(void);
|
||||
|
||||
Constructor for the TLSv1 SSL_METHOD structure for combined client and server.
|
||||
Constructor for the TLSv1 SSL_METHOD structure for clients, servers
|
||||
or both.
|
||||
|
||||
=item const SSL_METHOD *B<TLSv1_client_method>(void);
|
||||
|
||||
Constructor for the TLSv1 SSL_METHOD structure for clients.
|
||||
|
||||
=item const SSL_METHOD *B<TLSv1_server_method>(void);
|
||||
|
||||
Constructor for the TLSv1 SSL_METHOD structure for servers.
|
||||
|
||||
=item const SSL_METHOD *B<SSLv3_method>(void);
|
||||
|
||||
Constructor for the SSLv3 SSL_METHOD structure for clients, servers
|
||||
or both.
|
||||
|
||||
=item const SSL_METHOD *B<SSLv3_client_method>(void);
|
||||
|
||||
Constructor for the SSLv3 SSL_METHOD structure for clients.
|
||||
|
||||
=item const SSL_METHOD *B<SSLv3_server_method>(void);
|
||||
|
||||
Constructor for the SSLv3 SSL_METHOD structure for servers.
|
||||
|
||||
=item const SSL_METHOD *B<SSLv2_method>(void);
|
||||
|
||||
Constructor for the SSLv2 SSL_METHOD structure for clients, servers
|
||||
or both.
|
||||
|
||||
=item const SSL_METHOD *B<SSLv2_client_method>(void);
|
||||
|
||||
Constructor for the SSLv2 SSL_METHOD structure for clients.
|
||||
|
||||
=item const SSL_METHOD *B<SSLv2_server_method>(void);
|
||||
|
||||
Constructor for the SSLv2 SSL_METHOD structure for servers.
|
||||
|
||||
=back
|
||||
|
||||
|
@ -114,6 +114,26 @@
|
||||
# define CERT_SYSTEM_STORE_CURRENT_USER 0x00010000
|
||||
# endif
|
||||
|
||||
# ifndef ALG_SID_SHA_256
|
||||
# define ALG_SID_SHA_256 12
|
||||
# endif
|
||||
# ifndef ALG_SID_SHA_384
|
||||
# define ALG_SID_SHA_384 13
|
||||
# endif
|
||||
# ifndef ALG_SID_SHA_512
|
||||
# define ALG_SID_SHA_512 14
|
||||
# endif
|
||||
|
||||
# ifndef CALG_SHA_256
|
||||
# define CALG_SHA_256 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256)
|
||||
# endif
|
||||
# ifndef CALG_SHA_384
|
||||
# define CALG_SHA_384 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384)
|
||||
# endif
|
||||
# ifndef CALG_SHA_512
|
||||
# define CALG_SHA_512 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512)
|
||||
# endif
|
||||
|
||||
# include <openssl/engine.h>
|
||||
# include <openssl/pem.h>
|
||||
# include <openssl/x509v3.h>
|
||||
@ -800,6 +820,18 @@ int capi_rsa_sign(int dtype, const unsigned char *m, unsigned int m_len,
|
||||
}
|
||||
/* Convert the signature type to a CryptoAPI algorithm ID */
|
||||
switch (dtype) {
|
||||
case NID_sha256:
|
||||
alg = CALG_SHA_256;
|
||||
break;
|
||||
|
||||
case NID_sha384:
|
||||
alg = CALG_SHA_384;
|
||||
break;
|
||||
|
||||
case NID_sha512:
|
||||
alg = CALG_SHA_512;
|
||||
break;
|
||||
|
||||
case NID_sha1:
|
||||
alg = CALG_SHA1;
|
||||
break;
|
||||
|
@ -15,7 +15,7 @@ KRB5_INCLUDES=
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
GENERAL=Makefile README ssl-lib.com install.com
|
||||
TEST=ssltest.c heartbeat_test.c clienthellotest.c
|
||||
TEST=ssltest.c heartbeat_test.c clienthellotest.c sslv2conftest.c
|
||||
APPS=
|
||||
|
||||
LIB=$(TOP)/libssl.a
|
||||
@ -399,14 +399,14 @@ s2_clnt.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
||||
s2_clnt.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
||||
s2_clnt.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
||||
s2_clnt.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||
s2_clnt.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
|
||||
s2_clnt.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
||||
s2_clnt.o: ../include/openssl/sha.h ../include/openssl/srtp.h
|
||||
s2_clnt.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
|
||||
s2_clnt.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
|
||||
s2_clnt.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
||||
s2_clnt.o: ../include/openssl/tls1.h ../include/openssl/x509.h
|
||||
s2_clnt.o: ../include/openssl/x509_vfy.h s2_clnt.c ssl_locl.h
|
||||
s2_clnt.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h
|
||||
s2_clnt.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||
s2_clnt.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
|
||||
s2_clnt.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
||||
s2_clnt.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
||||
s2_clnt.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
||||
s2_clnt.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h s2_clnt.c
|
||||
s2_clnt.o: ssl_locl.h
|
||||
s2_enc.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||
s2_enc.o: ../include/openssl/buffer.h ../include/openssl/comp.h
|
||||
s2_enc.o: ../include/openssl/crypto.h ../include/openssl/dsa.h
|
||||
@ -435,18 +435,18 @@ s2_lib.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
|
||||
s2_lib.o: ../include/openssl/ecdsa.h ../include/openssl/err.h
|
||||
s2_lib.o: ../include/openssl/evp.h ../include/openssl/hmac.h
|
||||
s2_lib.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
|
||||
s2_lib.o: ../include/openssl/md5.h ../include/openssl/obj_mac.h
|
||||
s2_lib.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||
s2_lib.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
|
||||
s2_lib.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
||||
s2_lib.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
|
||||
s2_lib.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
||||
s2_lib.o: ../include/openssl/sha.h ../include/openssl/srtp.h
|
||||
s2_lib.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
|
||||
s2_lib.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
|
||||
s2_lib.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
||||
s2_lib.o: ../include/openssl/tls1.h ../include/openssl/x509.h
|
||||
s2_lib.o: ../include/openssl/x509_vfy.h s2_lib.c ssl_locl.h
|
||||
s2_lib.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
||||
s2_lib.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
||||
s2_lib.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
||||
s2_lib.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||
s2_lib.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h
|
||||
s2_lib.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||
s2_lib.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
|
||||
s2_lib.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
||||
s2_lib.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
||||
s2_lib.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
||||
s2_lib.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h s2_lib.c
|
||||
s2_lib.o: ssl_locl.h
|
||||
s2_meth.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||
s2_meth.o: ../include/openssl/buffer.h ../include/openssl/comp.h
|
||||
s2_meth.o: ../include/openssl/crypto.h ../include/openssl/dsa.h
|
||||
@ -487,20 +487,19 @@ s2_pkt.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
||||
s2_pkt.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
||||
s2_pkt.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h s2_pkt.c
|
||||
s2_pkt.o: ssl_locl.h
|
||||
s2_srvr.o: ../crypto/constant_time_locl.h ../e_os.h ../include/openssl/asn1.h
|
||||
s2_srvr.o: ../include/openssl/bio.h ../include/openssl/buffer.h
|
||||
s2_srvr.o: ../include/openssl/comp.h ../include/openssl/crypto.h
|
||||
s2_srvr.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h
|
||||
s2_srvr.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
|
||||
s2_srvr.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
|
||||
s2_srvr.o: ../include/openssl/err.h ../include/openssl/evp.h
|
||||
s2_srvr.o: ../include/openssl/hmac.h ../include/openssl/kssl.h
|
||||
s2_srvr.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
|
||||
s2_srvr.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||
s2_srvr.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
|
||||
s2_srvr.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
||||
s2_srvr.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
|
||||
s2_srvr.o: ../include/openssl/rand.h ../include/openssl/rsa.h
|
||||
s2_srvr.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||
s2_srvr.o: ../include/openssl/buffer.h ../include/openssl/comp.h
|
||||
s2_srvr.o: ../include/openssl/crypto.h ../include/openssl/dsa.h
|
||||
s2_srvr.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
|
||||
s2_srvr.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
|
||||
s2_srvr.o: ../include/openssl/ecdsa.h ../include/openssl/err.h
|
||||
s2_srvr.o: ../include/openssl/evp.h ../include/openssl/hmac.h
|
||||
s2_srvr.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
|
||||
s2_srvr.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
||||
s2_srvr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
||||
s2_srvr.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
||||
s2_srvr.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||
s2_srvr.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h
|
||||
s2_srvr.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||
s2_srvr.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
|
||||
s2_srvr.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
||||
|
@ -156,6 +156,7 @@ OPENSSL_GLOBAL const SSL_CIPHER ssl2_ciphers[] = {
|
||||
128,
|
||||
},
|
||||
|
||||
# if 0
|
||||
/* RC4_128_EXPORT40_WITH_MD5 */
|
||||
{
|
||||
1,
|
||||
@ -171,6 +172,7 @@ OPENSSL_GLOBAL const SSL_CIPHER ssl2_ciphers[] = {
|
||||
40,
|
||||
128,
|
||||
},
|
||||
# endif
|
||||
|
||||
/* RC2_128_CBC_WITH_MD5 */
|
||||
{
|
||||
@ -188,6 +190,7 @@ OPENSSL_GLOBAL const SSL_CIPHER ssl2_ciphers[] = {
|
||||
128,
|
||||
},
|
||||
|
||||
# if 0
|
||||
/* RC2_128_CBC_EXPORT40_WITH_MD5 */
|
||||
{
|
||||
1,
|
||||
@ -203,6 +206,7 @@ OPENSSL_GLOBAL const SSL_CIPHER ssl2_ciphers[] = {
|
||||
40,
|
||||
128,
|
||||
},
|
||||
# endif
|
||||
|
||||
# ifndef OPENSSL_NO_IDEA
|
||||
/* IDEA_128_CBC_WITH_MD5 */
|
||||
@ -222,6 +226,7 @@ OPENSSL_GLOBAL const SSL_CIPHER ssl2_ciphers[] = {
|
||||
},
|
||||
# endif
|
||||
|
||||
# if 0
|
||||
/* DES_64_CBC_WITH_MD5 */
|
||||
{
|
||||
1,
|
||||
@ -237,6 +242,7 @@ OPENSSL_GLOBAL const SSL_CIPHER ssl2_ciphers[] = {
|
||||
56,
|
||||
56,
|
||||
},
|
||||
# endif
|
||||
|
||||
/* DES_192_EDE3_CBC_WITH_MD5 */
|
||||
{
|
||||
|
@ -198,6 +198,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
},
|
||||
|
||||
/* Cipher 03 */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_RSA_RC4_40_MD5,
|
||||
@ -212,6 +213,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
128,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 04 */
|
||||
{
|
||||
@ -246,6 +248,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
},
|
||||
|
||||
/* Cipher 06 */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_RSA_RC2_40_MD5,
|
||||
@ -260,6 +263,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
128,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 07 */
|
||||
#ifndef OPENSSL_NO_IDEA
|
||||
@ -280,6 +284,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
#endif
|
||||
|
||||
/* Cipher 08 */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_RSA_DES_40_CBC_SHA,
|
||||
@ -294,8 +299,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
56,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 09 */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_RSA_DES_64_CBC_SHA,
|
||||
@ -310,6 +317,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
56,
|
||||
56,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 0A */
|
||||
{
|
||||
@ -329,6 +337,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
|
||||
/* The DH ciphers */
|
||||
/* Cipher 0B */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
0,
|
||||
SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
|
||||
@ -343,8 +352,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
56,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 0C */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
|
||||
@ -359,6 +370,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
56,
|
||||
56,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 0D */
|
||||
{
|
||||
@ -377,6 +389,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
},
|
||||
|
||||
/* Cipher 0E */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
0,
|
||||
SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
|
||||
@ -391,8 +404,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
56,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 0F */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
|
||||
@ -407,6 +422,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
56,
|
||||
56,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 10 */
|
||||
{
|
||||
@ -426,6 +442,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
|
||||
/* The Ephemeral DH ciphers */
|
||||
/* Cipher 11 */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_EDH_DSS_DES_40_CBC_SHA,
|
||||
@ -440,8 +457,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
56,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 12 */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_EDH_DSS_DES_64_CBC_SHA,
|
||||
@ -456,6 +475,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
56,
|
||||
56,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 13 */
|
||||
{
|
||||
@ -474,6 +494,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
},
|
||||
|
||||
/* Cipher 14 */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_EDH_RSA_DES_40_CBC_SHA,
|
||||
@ -488,8 +509,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
56,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 15 */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
|
||||
@ -504,6 +527,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
56,
|
||||
56,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 16 */
|
||||
{
|
||||
@ -522,6 +546,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
},
|
||||
|
||||
/* Cipher 17 */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_ADH_RC4_40_MD5,
|
||||
@ -536,6 +561,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
128,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 18 */
|
||||
{
|
||||
@ -554,6 +580,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
},
|
||||
|
||||
/* Cipher 19 */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_ADH_DES_40_CBC_SHA,
|
||||
@ -568,8 +595,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
128,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 1A */
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_ADH_DES_64_CBC_SHA,
|
||||
@ -584,6 +613,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
56,
|
||||
56,
|
||||
},
|
||||
#endif
|
||||
|
||||
/* Cipher 1B */
|
||||
{
|
||||
@ -655,6 +685,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
#ifndef OPENSSL_NO_KRB5
|
||||
/* The Kerberos ciphers*/
|
||||
/* Cipher 1E */
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_KRB5_DES_64_CBC_SHA,
|
||||
@ -669,6 +700,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
56,
|
||||
56,
|
||||
},
|
||||
# endif
|
||||
|
||||
/* Cipher 1F */
|
||||
{
|
||||
@ -719,6 +751,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
},
|
||||
|
||||
/* Cipher 22 */
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_KRB5_DES_64_CBC_MD5,
|
||||
@ -733,6 +766,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
56,
|
||||
56,
|
||||
},
|
||||
# endif
|
||||
|
||||
/* Cipher 23 */
|
||||
{
|
||||
@ -783,6 +817,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
},
|
||||
|
||||
/* Cipher 26 */
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_KRB5_DES_40_CBC_SHA,
|
||||
@ -797,8 +832,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
56,
|
||||
},
|
||||
# endif
|
||||
|
||||
/* Cipher 27 */
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_KRB5_RC2_40_CBC_SHA,
|
||||
@ -813,8 +850,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
128,
|
||||
},
|
||||
# endif
|
||||
|
||||
/* Cipher 28 */
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_KRB5_RC4_40_SHA,
|
||||
@ -829,8 +868,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
128,
|
||||
},
|
||||
# endif
|
||||
|
||||
/* Cipher 29 */
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_KRB5_DES_40_CBC_MD5,
|
||||
@ -845,8 +886,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
56,
|
||||
},
|
||||
# endif
|
||||
|
||||
/* Cipher 2A */
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_KRB5_RC2_40_CBC_MD5,
|
||||
@ -861,8 +904,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
128,
|
||||
},
|
||||
# endif
|
||||
|
||||
/* Cipher 2B */
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_KRB5_RC4_40_MD5,
|
||||
@ -877,6 +922,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
40,
|
||||
128,
|
||||
},
|
||||
# endif
|
||||
#endif /* OPENSSL_NO_KRB5 */
|
||||
|
||||
/* New AES ciphersuites */
|
||||
@ -1300,6 +1346,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
# endif
|
||||
|
||||
/* Cipher 62 */
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA,
|
||||
@ -1314,8 +1361,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
56,
|
||||
56,
|
||||
},
|
||||
# endif
|
||||
|
||||
/* Cipher 63 */
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
|
||||
@ -1330,8 +1379,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
56,
|
||||
56,
|
||||
},
|
||||
# endif
|
||||
|
||||
/* Cipher 64 */
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA,
|
||||
@ -1346,8 +1397,10 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
56,
|
||||
128,
|
||||
},
|
||||
# endif
|
||||
|
||||
/* Cipher 65 */
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
|
||||
@ -1362,6 +1415,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
|
||||
56,
|
||||
128,
|
||||
},
|
||||
# endif
|
||||
|
||||
/* Cipher 66 */
|
||||
{
|
||||
@ -4326,21 +4380,6 @@ int ssl3_shutdown(SSL *s)
|
||||
}
|
||||
#endif
|
||||
} else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
|
||||
if (SSL_in_init(s)) {
|
||||
/*
|
||||
* We can't shutdown properly if we are in the middle of a
|
||||
* handshake. Doing so is problematic because the peer may send a
|
||||
* CCS before it acts on our close_notify. However we should not
|
||||
* continue to process received handshake messages or CCS once our
|
||||
* close_notify has been sent. Therefore any close_notify from
|
||||
* the peer will be unreadable because we have not moved to the next
|
||||
* cipher state. Its best just to avoid this can-of-worms. Return
|
||||
* an error if we are wanting to wait for a close_notify from the
|
||||
* peer and we are in init.
|
||||
*/
|
||||
SSLerr(SSL_F_SSL3_SHUTDOWN, SSL_R_SHUTDOWN_WHILE_IN_INIT);
|
||||
return -1;
|
||||
}
|
||||
/*
|
||||
* If we are waiting for a close from our peer, we are closed
|
||||
*/
|
||||
|
@ -2713,7 +2713,6 @@ void ERR_load_SSL_strings(void);
|
||||
# define SSL_F_SSL3_SETUP_KEY_BLOCK 157
|
||||
# define SSL_F_SSL3_SETUP_READ_BUFFER 156
|
||||
# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291
|
||||
# define SSL_F_SSL3_SHUTDOWN 396
|
||||
# define SSL_F_SSL3_WRITE_BYTES 158
|
||||
# define SSL_F_SSL3_WRITE_PENDING 159
|
||||
# define SSL_F_SSL_ADD_CERT_CHAIN 318
|
||||
|
@ -330,11 +330,19 @@ static int cmd_Protocol(SSL_CONF_CTX *cctx, const char *value)
|
||||
SSL_FLAG_TBL_INV("TLSv1.1", SSL_OP_NO_TLSv1_1),
|
||||
SSL_FLAG_TBL_INV("TLSv1.2", SSL_OP_NO_TLSv1_2)
|
||||
};
|
||||
int ret;
|
||||
int sslv2off;
|
||||
|
||||
if (!(cctx->flags & SSL_CONF_FLAG_FILE))
|
||||
return -2;
|
||||
cctx->tbl = ssl_protocol_list;
|
||||
cctx->ntbl = sizeof(ssl_protocol_list) / sizeof(ssl_flag_tbl);
|
||||
return CONF_parse_list(value, ',', 1, ssl_set_option_list, cctx);
|
||||
|
||||
sslv2off = *cctx->poptions & SSL_OP_NO_SSLv2;
|
||||
ret = CONF_parse_list(value, ',', 1, ssl_set_option_list, cctx);
|
||||
/* Never turn on SSLv2 through configuration */
|
||||
*cctx->poptions |= sslv2off;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cmd_Options(SSL_CONF_CTX *cctx, const char *value)
|
||||
|
@ -206,7 +206,6 @@ static ERR_STRING_DATA SSL_str_functs[] = {
|
||||
{ERR_FUNC(SSL_F_SSL3_SETUP_KEY_BLOCK), "ssl3_setup_key_block"},
|
||||
{ERR_FUNC(SSL_F_SSL3_SETUP_READ_BUFFER), "ssl3_setup_read_buffer"},
|
||||
{ERR_FUNC(SSL_F_SSL3_SETUP_WRITE_BUFFER), "ssl3_setup_write_buffer"},
|
||||
{ERR_FUNC(SSL_F_SSL3_SHUTDOWN), "ssl3_shutdown"},
|
||||
{ERR_FUNC(SSL_F_SSL3_WRITE_BYTES), "ssl3_write_bytes"},
|
||||
{ERR_FUNC(SSL_F_SSL3_WRITE_PENDING), "ssl3_write_pending"},
|
||||
{ERR_FUNC(SSL_F_SSL_ADD_CERT_CHAIN), "ssl_add_cert_chain"},
|
||||
|
@ -1060,7 +1060,12 @@ int SSL_shutdown(SSL *s)
|
||||
return -1;
|
||||
}
|
||||
|
||||
return s->method->ssl_shutdown(s);
|
||||
if (!SSL_in_init(s)) {
|
||||
return s->method->ssl_shutdown(s);
|
||||
} else {
|
||||
SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_SHUTDOWN_WHILE_IN_INIT);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int SSL_renegotiate(SSL *s)
|
||||
@ -2049,6 +2054,13 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
|
||||
*/
|
||||
ret->options |= SSL_OP_LEGACY_SERVER_CONNECT;
|
||||
|
||||
/*
|
||||
* Disable SSLv2 by default, callers that want to enable SSLv2 will have to
|
||||
* explicitly clear this option via either of SSL_CTX_clear_options() or
|
||||
* SSL_clear_options().
|
||||
*/
|
||||
ret->options |= SSL_OP_NO_SSLv2;
|
||||
|
||||
return (ret);
|
||||
err:
|
||||
SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
|
||||
|
231
crypto/openssl/ssl/sslv2conftest.c
Normal file
231
crypto/openssl/ssl/sslv2conftest.c
Normal file
@ -0,0 +1,231 @@
|
||||
/* Written by Matt Caswell for the OpenSSL Project */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2016 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
||||
*
|
||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||
* endorse or promote products derived from this software without
|
||||
* prior written permission. For written permission, please contact
|
||||
* openssl-core@openssl.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "OpenSSL"
|
||||
* nor may "OpenSSL" appear in their names without prior written
|
||||
* permission of the OpenSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
* This product includes cryptographic software written by Eric Young
|
||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||
* Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/ssl.h>
|
||||
#include <openssl/err.h>
|
||||
|
||||
|
||||
#define TOTAL_NUM_TESTS 2
|
||||
#define TEST_SSL_CTX 0
|
||||
|
||||
#define SSLV2ON 1
|
||||
#define SSLV2OFF 0
|
||||
|
||||
SSL_CONF_CTX *confctx;
|
||||
SSL_CTX *ctx;
|
||||
SSL *ssl;
|
||||
|
||||
static int checksslv2(int test, int sslv2)
|
||||
{
|
||||
int options;
|
||||
if (test == TEST_SSL_CTX) {
|
||||
options = SSL_CTX_get_options(ctx);
|
||||
} else {
|
||||
options = SSL_get_options(ssl);
|
||||
}
|
||||
return ((options & SSL_OP_NO_SSLv2) == 0) ^ (sslv2 == SSLV2OFF);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
BIO *err;
|
||||
int testresult = 0;
|
||||
int currtest;
|
||||
|
||||
SSL_library_init();
|
||||
SSL_load_error_strings();
|
||||
|
||||
err = BIO_new_fp(stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||
|
||||
CRYPTO_malloc_debug_init();
|
||||
CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL);
|
||||
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
|
||||
|
||||
|
||||
confctx = SSL_CONF_CTX_new();
|
||||
ctx = SSL_CTX_new(SSLv23_method());
|
||||
ssl = SSL_new(ctx);
|
||||
if (confctx == NULL || ctx == NULL)
|
||||
goto end;
|
||||
|
||||
SSL_CONF_CTX_set_flags(confctx, SSL_CONF_FLAG_FILE
|
||||
| SSL_CONF_FLAG_CLIENT
|
||||
| SSL_CONF_FLAG_SERVER);
|
||||
|
||||
/*
|
||||
* For each test set up an SSL_CTX and SSL and see whether SSLv2 is enabled
|
||||
* as expected after various SSL_CONF_cmd("Protocol", ...) calls.
|
||||
*/
|
||||
for (currtest = 0; currtest < TOTAL_NUM_TESTS; currtest++) {
|
||||
BIO_printf(err, "SSLv2 CONF Test number %d\n", currtest);
|
||||
if (currtest == TEST_SSL_CTX)
|
||||
SSL_CONF_CTX_set_ssl_ctx(confctx, ctx);
|
||||
else
|
||||
SSL_CONF_CTX_set_ssl(confctx, ssl);
|
||||
|
||||
/* SSLv2 should be off by default */
|
||||
if (!checksslv2(currtest, SSLV2OFF)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: Off by default test FAIL\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (SSL_CONF_cmd(confctx, "Protocol", "ALL") != 2
|
||||
|| !SSL_CONF_CTX_finish(confctx)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: SSL_CONF command FAIL\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* Should still be off even after ALL Protocols on */
|
||||
if (!checksslv2(currtest, SSLV2OFF)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: Off after config #1 FAIL\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (SSL_CONF_cmd(confctx, "Protocol", "SSLv2") != 2
|
||||
|| !SSL_CONF_CTX_finish(confctx)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: SSL_CONF command FAIL\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* Should still be off even if explicitly asked for */
|
||||
if (!checksslv2(currtest, SSLV2OFF)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: Off after config #2 FAIL\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (SSL_CONF_cmd(confctx, "Protocol", "-SSLv2") != 2
|
||||
|| !SSL_CONF_CTX_finish(confctx)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: SSL_CONF command FAIL\n");;
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!checksslv2(currtest, SSLV2OFF)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: Off after config #3 FAIL\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (currtest == TEST_SSL_CTX)
|
||||
SSL_CTX_clear_options(ctx, SSL_OP_NO_SSLv2);
|
||||
else
|
||||
SSL_clear_options(ssl, SSL_OP_NO_SSLv2);
|
||||
|
||||
if (!checksslv2(currtest, SSLV2ON)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: On after clear FAIL\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (SSL_CONF_cmd(confctx, "Protocol", "ALL") != 2
|
||||
|| !SSL_CONF_CTX_finish(confctx)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: SSL_CONF command FAIL\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* Option has been cleared and config says have SSLv2 so should be on */
|
||||
if (!checksslv2(currtest, SSLV2ON)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: On after config #1 FAIL\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (SSL_CONF_cmd(confctx, "Protocol", "SSLv2") != 2
|
||||
|| !SSL_CONF_CTX_finish(confctx)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: SSL_CONF command FAIL\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* Option has been cleared and config says have SSLv2 so should be on */
|
||||
if (!checksslv2(currtest, SSLV2ON)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: On after config #2 FAIL\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (SSL_CONF_cmd(confctx, "Protocol", "-SSLv2") != 2
|
||||
|| !SSL_CONF_CTX_finish(confctx)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: SSL_CONF command FAIL\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* Option has been cleared but config says no SSLv2 so should be off */
|
||||
if (!checksslv2(currtest, SSLV2OFF)) {
|
||||
BIO_printf(err, "SSLv2 CONF Test: Off after config #4 FAIL\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
testresult = 1;
|
||||
|
||||
end:
|
||||
SSL_free(ssl);
|
||||
SSL_CTX_free(ctx);
|
||||
SSL_CONF_CTX_free(confctx);
|
||||
|
||||
if (!testresult) {
|
||||
printf("SSLv2 CONF test: FAILED (Test %d)\n", currtest);
|
||||
ERR_print_errors(err);
|
||||
} else {
|
||||
printf("SSLv2 CONF test: PASSED\n");
|
||||
}
|
||||
|
||||
ERR_free_strings();
|
||||
ERR_remove_thread_state(NULL);
|
||||
EVP_cleanup();
|
||||
CRYPTO_cleanup_all_ex_data();
|
||||
CRYPTO_mem_leaks(err);
|
||||
BIO_free(err);
|
||||
|
||||
return testresult ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
}
|
@ -1807,6 +1807,8 @@ ASN1_UTCTIME_get 2350 NOEXIST::FUNCTION:
|
||||
X509_REQ_digest 2362 EXIST::FUNCTION:EVP
|
||||
X509_CRL_digest 2391 EXIST::FUNCTION:EVP
|
||||
ASN1_STRING_clear_free 2392 EXIST::FUNCTION:
|
||||
SRP_VBASE_get1_by_user 2393 EXIST::FUNCTION:SRP
|
||||
SRP_user_pwd_free 2394 EXIST::FUNCTION:SRP
|
||||
d2i_ASN1_SET_OF_PKCS7 2397 NOEXIST::FUNCTION:
|
||||
X509_ALGOR_cmp 2398 EXIST::FUNCTION:
|
||||
EVP_CIPHER_CTX_set_key_length 2399 EXIST::FUNCTION:
|
||||
|
@ -290,6 +290,7 @@ $cflags.=" -DOPENSSL_NO_HW" if $no_hw;
|
||||
$cflags.=" -DOPENSSL_FIPS" if $fips;
|
||||
$cflags.=" -DOPENSSL_NO_JPAKE" if $no_jpake;
|
||||
$cflags.=" -DOPENSSL_NO_EC2M" if $no_ec2m;
|
||||
$cflags.=" -DOPENSSL_NO_WEAK_SSL_CIPHERS" if $no_weak_ssl;
|
||||
$cflags.= " -DZLIB" if $zlib_opt;
|
||||
$cflags.= " -DZLIB_SHARED" if $zlib_opt == 2;
|
||||
|
||||
@ -482,7 +483,7 @@ EX_LIBS=$ex_libs
|
||||
# The OpenSSL directory
|
||||
SRC_D=$src_dir
|
||||
|
||||
LINK=$link
|
||||
LINK_CMD=$link
|
||||
LFLAGS=$lflags
|
||||
RSC=$rsc
|
||||
|
||||
@ -1205,6 +1206,7 @@ sub read_options
|
||||
"no-jpake" => \$no_jpake,
|
||||
"no-ec2m" => \$no_ec2m,
|
||||
"no-ec_nistp_64_gcc_128" => 0,
|
||||
"no-weak-ssl-ciphers" => \$no_weak_ssl,
|
||||
"no-err" => \$no_err,
|
||||
"no-sock" => \$no_sock,
|
||||
"no-krb5" => \$no_krb5,
|
||||
|
@ -118,7 +118,7 @@ ___
|
||||
{
|
||||
local($ex)=($target =~ /O_SSL/)?' $(L_CRYPTO)':'';
|
||||
$ex.=' ws2_32.lib gdi32.lib';
|
||||
$ret.="\t\$(LINK) \$(MLFLAGS) $efile$target /def:ms/${Name}.def @<<\n \$(SHLIB_EX_OBJ) $objs $ex\n<<\n";
|
||||
$ret.="\t\$(LINK_CMD) \$(MLFLAGS) $efile$target /def:ms/${Name}.def @<<\n \$(SHLIB_EX_OBJ) $objs $ex\n<<\n";
|
||||
}
|
||||
$ret.="\n";
|
||||
return($ret);
|
||||
@ -132,7 +132,7 @@ sub do_link_rule
|
||||
$file =~ s/\//$o/g if $o ne '/';
|
||||
$n=&bname($target);
|
||||
$ret.="$target: $files $dep_libs\n";
|
||||
$ret.="\t\$(LINK) \$(LFLAGS) $files \$(APP_EX_OBJ), $target,, $libs\n\n";
|
||||
$ret.="\t\$(LINK_CMD) \$(LFLAGS) $files \$(APP_EX_OBJ), $target,, $libs\n\n";
|
||||
return($ret);
|
||||
}
|
||||
|
||||
|
@ -98,7 +98,7 @@ sub do_link_rule
|
||||
$file =~ s/\//$o/g if $o ne '/';
|
||||
$n=&bname($target);
|
||||
$ret.="$target: $files $dep_libs\n";
|
||||
$ret.="\t\$(LINK) ${efile}$target \$(LFLAGS) $files $libs\n\n";
|
||||
$ret.="\t\$(LINK_CMD) ${efile}$target \$(LFLAGS) $files $libs\n\n";
|
||||
return($ret);
|
||||
}
|
||||
1;
|
||||
|
@ -99,7 +99,7 @@ sub do_lib_rule
|
||||
{
|
||||
local($ex)=($target =~ /O_SSL/)?' $(L_CRYPTO)':'';
|
||||
$ex.=' -lsocket';
|
||||
$ret.="\t\$(LINK) \$(SHLIB_CFLAGS) \$(MLFLAGS) $efile$target \$(SHLIB_EX_OBJ) \$(${Name}OBJ) $ex os2/${Name}.def\n";
|
||||
$ret.="\t\$(LINK_CMD) \$(SHLIB_CFLAGS) \$(MLFLAGS) $efile$target \$(SHLIB_EX_OBJ) \$(${Name}OBJ) $ex os2/${Name}.def\n";
|
||||
$ret.="\temximp -o $out_def/$name.a os2/${Name}.def\n";
|
||||
$ret.="\temximp -o $out_def/$name.lib os2/${Name}.def\n\n";
|
||||
}
|
||||
@ -113,7 +113,7 @@ sub do_link_rule
|
||||
$file =~ s/\//$o/g if $o ne '/';
|
||||
$n=&bname($target);
|
||||
$ret.="$target: $files $dep_libs\n";
|
||||
$ret.="\t\$(LINK) ${efile}$target \$(CFLAG) \$(LFLAGS) $files $libs\n\n";
|
||||
$ret.="\t\$(LINK_CMD) ${efile}$target \$(CFLAG) \$(LFLAGS) $files $libs\n\n";
|
||||
return($ret);
|
||||
}
|
||||
|
||||
|
@ -330,7 +330,7 @@ sub do_lib_rule
|
||||
if ($fips && $target =~ /O_CRYPTO/)
|
||||
{
|
||||
$ret.="$target: $objs \$(PREMAIN_DSO_EXE)";
|
||||
$ret.="\n\tSET FIPS_LINK=\$(LINK)\n";
|
||||
$ret.="\n\tSET FIPS_LINK=\$(LINK_CMD)\n";
|
||||
$ret.="\tSET FIPS_CC=\$(CC)\n";
|
||||
$ret.="\tSET FIPS_CC_ARGS=/Fo\$(OBJ_D)${o}fips_premain.obj \$(SHLIB_CFLAGS) -c\n";
|
||||
$ret.="\tSET PREMAIN_DSO_EXE=\$(PREMAIN_DSO_EXE)\n";
|
||||
@ -344,7 +344,7 @@ sub do_lib_rule
|
||||
else
|
||||
{
|
||||
$ret.="$target: $objs";
|
||||
$ret.="\n\t\$(LINK) \$(MLFLAGS) $efile$target $name @<<\n \$(SHLIB_EX_OBJ) $objs $ex \$(EX_LIBS)\n<<\n";
|
||||
$ret.="\n\t\$(LINK_CMD) \$(MLFLAGS) $efile$target $name @<<\n \$(SHLIB_EX_OBJ) $objs $ex \$(EX_LIBS)\n<<\n";
|
||||
}
|
||||
$ret.="\tIF EXIST \$@.manifest mt -nologo -manifest \$@.manifest -outputresource:\$@;2\n\n";
|
||||
}
|
||||
@ -363,7 +363,7 @@ sub do_link_rule
|
||||
{
|
||||
$ret.=" \$(OBJ_D)${o}applink.obj" if $shlib;
|
||||
$ret.="\n";
|
||||
$ret.=" \$(LINK) \$(LFLAGS) $efile$target @<<\n\t";
|
||||
$ret.=" \$(LINK_CMD) \$(LFLAGS) $efile$target @<<\n\t";
|
||||
if ($files =~ /O_FIPSCANISTER/ && !$fipscanisterbuild) {
|
||||
$ret.= "\$(EX_LIBS) ";
|
||||
$ret.= "\$(OBJ_D)${o}applink.obj " if $shlib;
|
||||
@ -373,7 +373,7 @@ sub do_link_rule
|
||||
elsif ($standalone == 2)
|
||||
{
|
||||
$ret.="\n";
|
||||
$ret.="\tSET FIPS_LINK=\$(LINK)\n";
|
||||
$ret.="\tSET FIPS_LINK=\$(LINK_CMD)\n";
|
||||
$ret.="\tSET FIPS_CC=\$(CC)\n";
|
||||
$ret.="\tSET FIPS_CC_ARGS=/Fo\$(OBJ_D)${o}fips_premain.obj \$(SHLIB_CFLAGS) -c\n";
|
||||
$ret.="\tSET PREMAIN_DSO_EXE=\n";
|
||||
@ -386,7 +386,7 @@ sub do_link_rule
|
||||
else
|
||||
{
|
||||
$ret.="\n";
|
||||
$ret.="\t\$(LINK) \$(LFLAGS) $efile$target @<<\n";
|
||||
$ret.="\t\$(LINK_CMD) \$(LFLAGS) $efile$target @<<\n";
|
||||
$ret.="\t\$(APP_EX_OBJ) $files $libs\n<<\n";
|
||||
}
|
||||
$ret.="\tIF EXIST \$@.manifest mt -nologo -manifest \$@.manifest -outputresource:\$@;1\n\n";
|
||||
|
@ -78,7 +78,7 @@ sub do_link_rule
|
||||
$file =~ s/\//$o/g if $o ne '/';
|
||||
$n=&bname($target);
|
||||
$ret.="$target: $files $dep_libs\n";
|
||||
$ret.="\t\$(LINK) ${efile}$target \$(LFLAGS) $files $libs\n\n";
|
||||
$ret.="\t\$(LINK_CMD) ${efile}$target \$(LFLAGS) $files $libs\n\n";
|
||||
return($ret);
|
||||
}
|
||||
|
||||
|
@ -506,22 +506,22 @@ sub do_link_rule
|
||||
if ($gnuc)
|
||||
{
|
||||
$ret.="\t\$(MKLIB) $lib_flags \$(TMP_D)${o}\$(E_EXE).a \$(filter-out \$(TMP_D)${o}\$(E_EXE)${obj},$files)\n";
|
||||
$ret.="\t\$(LINK) \$(LFLAGS) $def_file2\n";
|
||||
$ret.="\t\$(LINK_CMD) \$(LFLAGS) $def_file2\n";
|
||||
$ret.="\t\@$mv \$(E_EXE)2.nlm \$(TEST_D)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$ret.="\t\$(LINK) \$(LFLAGS) $def_file2 $files \"$prelude\" $libs -o $target2\n";
|
||||
$ret.="\t\$(LINK_CMD) \$(LFLAGS) $def_file2 $files \"$prelude\" $libs -o $target2\n";
|
||||
}
|
||||
}
|
||||
if ($gnuc)
|
||||
{
|
||||
$ret.="\t\$(LINK) \$(LFLAGS) $def_file\n";
|
||||
$ret.="\t\$(LINK_CMD) \$(LFLAGS) $def_file\n";
|
||||
$ret.="\t\@$mv \$(\@F) \$(TEST_D)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$ret.="\t\$(LINK) \$(LFLAGS) $def_file $files \"$prelude\" $libs -o $target\n";
|
||||
$ret.="\t\$(LINK_CMD) \$(LFLAGS) $def_file $files \"$prelude\" $libs -o $target\n";
|
||||
}
|
||||
|
||||
$ret.="\n";
|
||||
|
@ -31,7 +31,7 @@ sub do_link_rule
|
||||
$file =~ s/\//$o/g if $o ne '/';
|
||||
$n=&bname($target);
|
||||
$ret.="$target: $files $dep_libs\n";
|
||||
$ret.="\t\$(LINK) ${efile}$target \$(LFLAGS) $files $libs\n\n";
|
||||
$ret.="\t\$(LINK_CMD) ${efile}$target \$(LFLAGS) $files $libs\n\n";
|
||||
return($ret);
|
||||
}
|
||||
|
||||
|
@ -164,7 +164,7 @@ sub do_link_rule
|
||||
$file =~ s/\//$o/g if $o ne '/';
|
||||
$n=&bname($target);
|
||||
$ret.="$target: $files $dep_libs\n";
|
||||
$ret.="\t\$(LINK) ${efile}$target \$(LFLAGS) $files $libs\n\n";
|
||||
$ret.="\t\$(LINK_CMD) ${efile}$target \$(LFLAGS) $files $libs\n\n";
|
||||
return($ret);
|
||||
}
|
||||
|
||||
|
@ -3,8 +3,8 @@
|
||||
.include <bsd.own.mk>
|
||||
|
||||
# OpenSSL version used for manual page generation
|
||||
OPENSSL_VER= 1.0.2f
|
||||
OPENSSL_DATE= 2016-01-28
|
||||
OPENSSL_VER= 1.0.2g
|
||||
OPENSSL_DATE= 2016-03-01
|
||||
|
||||
LCRYPTO_SRC= ${.CURDIR}/../../../crypto/openssl
|
||||
LCRYPTO_DOC= ${LCRYPTO_SRC}/doc
|
||||
|
@ -82,8 +82,8 @@ _x86_64_AES_encrypt:
|
||||
movl 0(%r14,%rdi,8),%edi
|
||||
movl 0(%r14,%rbp,8),%ebp
|
||||
|
||||
andl $65280,%edi
|
||||
andl $65280,%ebp
|
||||
andl $0x0000ff00,%edi
|
||||
andl $0x0000ff00,%ebp
|
||||
|
||||
xorl %edi,%r10d
|
||||
xorl %ebp,%r11d
|
||||
@ -95,8 +95,8 @@ _x86_64_AES_encrypt:
|
||||
movl 0(%r14,%rsi,8),%esi
|
||||
movl 0(%r14,%rdi,8),%edi
|
||||
|
||||
andl $65280,%esi
|
||||
andl $65280,%edi
|
||||
andl $0x0000ff00,%esi
|
||||
andl $0x0000ff00,%edi
|
||||
shrl $16,%ebx
|
||||
xorl %esi,%r12d
|
||||
xorl %edi,%r8d
|
||||
@ -109,9 +109,9 @@ _x86_64_AES_encrypt:
|
||||
movl 0(%r14,%rdi,8),%edi
|
||||
movl 0(%r14,%rbp,8),%ebp
|
||||
|
||||
andl $16711680,%esi
|
||||
andl $16711680,%edi
|
||||
andl $16711680,%ebp
|
||||
andl $0x00ff0000,%esi
|
||||
andl $0x00ff0000,%edi
|
||||
andl $0x00ff0000,%ebp
|
||||
|
||||
xorl %esi,%r10d
|
||||
xorl %edi,%r11d
|
||||
@ -124,9 +124,9 @@ _x86_64_AES_encrypt:
|
||||
movl 2(%r14,%rdi,8),%edi
|
||||
movl 2(%r14,%rbp,8),%ebp
|
||||
|
||||
andl $16711680,%esi
|
||||
andl $4278190080,%edi
|
||||
andl $4278190080,%ebp
|
||||
andl $0x00ff0000,%esi
|
||||
andl $0xff000000,%edi
|
||||
andl $0xff000000,%ebp
|
||||
|
||||
xorl %esi,%r8d
|
||||
xorl %edi,%r10d
|
||||
@ -139,8 +139,8 @@ _x86_64_AES_encrypt:
|
||||
movl 2(%r14,%rdi,8),%edi
|
||||
movl 16+0(%r15),%eax
|
||||
|
||||
andl $4278190080,%esi
|
||||
andl $4278190080,%edi
|
||||
andl $0xff000000,%esi
|
||||
andl $0xff000000,%edi
|
||||
|
||||
xorl %esi,%r12d
|
||||
xorl %edi,%r8d
|
||||
@ -242,8 +242,8 @@ _x86_64_AES_encrypt_compact:
|
||||
xorl %r8d,%edx
|
||||
cmpq 16(%rsp),%r15
|
||||
je .Lenc_compact_done
|
||||
movl $2155905152,%r10d
|
||||
movl $2155905152,%r11d
|
||||
movl $0x80808080,%r10d
|
||||
movl $0x80808080,%r11d
|
||||
andl %eax,%r10d
|
||||
andl %ebx,%r11d
|
||||
movl %r10d,%esi
|
||||
@ -254,10 +254,10 @@ _x86_64_AES_encrypt_compact:
|
||||
leal (%rbx,%rbx,1),%r9d
|
||||
subl %r10d,%esi
|
||||
subl %r11d,%edi
|
||||
andl $4278124286,%r8d
|
||||
andl $4278124286,%r9d
|
||||
andl $454761243,%esi
|
||||
andl $454761243,%edi
|
||||
andl $0xfefefefe,%r8d
|
||||
andl $0xfefefefe,%r9d
|
||||
andl $0x1b1b1b1b,%esi
|
||||
andl $0x1b1b1b1b,%edi
|
||||
movl %eax,%r10d
|
||||
movl %ebx,%r11d
|
||||
xorl %esi,%r8d
|
||||
@ -265,9 +265,9 @@ _x86_64_AES_encrypt_compact:
|
||||
|
||||
xorl %r8d,%eax
|
||||
xorl %r9d,%ebx
|
||||
movl $2155905152,%r12d
|
||||
movl $0x80808080,%r12d
|
||||
roll $24,%eax
|
||||
movl $2155905152,%ebp
|
||||
movl $0x80808080,%ebp
|
||||
roll $24,%ebx
|
||||
andl %ecx,%r12d
|
||||
andl %edx,%ebp
|
||||
@ -290,10 +290,10 @@ _x86_64_AES_encrypt_compact:
|
||||
xorl %r10d,%eax
|
||||
xorl %r11d,%ebx
|
||||
|
||||
andl $4278124286,%r8d
|
||||
andl $4278124286,%r9d
|
||||
andl $454761243,%esi
|
||||
andl $454761243,%edi
|
||||
andl $0xfefefefe,%r8d
|
||||
andl $0xfefefefe,%r9d
|
||||
andl $0x1b1b1b1b,%esi
|
||||
andl $0x1b1b1b1b,%edi
|
||||
movl %ecx,%r12d
|
||||
movl %edx,%ebp
|
||||
xorl %esi,%r8d
|
||||
@ -346,7 +346,7 @@ AES_encrypt:
|
||||
andq $-64,%rsp
|
||||
subq %rsp,%rcx
|
||||
negq %rcx
|
||||
andq $960,%rcx
|
||||
andq $0x3c0,%rcx
|
||||
subq %rcx,%rsp
|
||||
subq $32,%rsp
|
||||
|
||||
@ -371,7 +371,7 @@ AES_encrypt:
|
||||
leaq .LAES_Te+2048(%rip),%r14
|
||||
leaq 768(%rsp),%rbp
|
||||
subq %r14,%rbp
|
||||
andq $768,%rbp
|
||||
andq $0x300,%rbp
|
||||
leaq (%r14,%rbp,1),%r14
|
||||
|
||||
call _x86_64_AES_encrypt_compact
|
||||
@ -793,7 +793,7 @@ AES_decrypt:
|
||||
andq $-64,%rsp
|
||||
subq %rsp,%rcx
|
||||
negq %rcx
|
||||
andq $960,%rcx
|
||||
andq $0x3c0,%rcx
|
||||
subq %rcx,%rsp
|
||||
subq $32,%rsp
|
||||
|
||||
@ -818,7 +818,7 @@ AES_decrypt:
|
||||
leaq .LAES_Td+2048(%rip),%r14
|
||||
leaq 768(%rsp),%rbp
|
||||
subq %r14,%rbp
|
||||
andq $768,%rbp
|
||||
andq $0x300,%rbp
|
||||
leaq (%r14,%rbp,1),%r14
|
||||
shrq $3,%rbp
|
||||
addq %rbp,%r14
|
||||
@ -1334,9 +1334,9 @@ AES_cbc_encrypt:
|
||||
movq %r14,%r10
|
||||
leaq 2304(%r14),%r11
|
||||
movq %r15,%r12
|
||||
andq $4095,%r10
|
||||
andq $4095,%r11
|
||||
andq $4095,%r12
|
||||
andq $0xFFF,%r10
|
||||
andq $0xFFF,%r11
|
||||
andq $0xFFF,%r12
|
||||
|
||||
cmpq %r11,%r12
|
||||
jb .Lcbc_te_break_out
|
||||
@ -1345,7 +1345,7 @@ AES_cbc_encrypt:
|
||||
jmp .Lcbc_te_ok
|
||||
.Lcbc_te_break_out:
|
||||
subq %r10,%r12
|
||||
andq $4095,%r12
|
||||
andq $0xFFF,%r12
|
||||
addq $320,%r12
|
||||
subq %r12,%r15
|
||||
.align 4
|
||||
@ -1371,7 +1371,7 @@ AES_cbc_encrypt:
|
||||
|
||||
movq %r15,%r10
|
||||
subq %r14,%r10
|
||||
andq $4095,%r10
|
||||
andq $0xfff,%r10
|
||||
cmpq $2304,%r10
|
||||
jb .Lcbc_do_ecopy
|
||||
cmpq $4096-248,%r10
|
||||
@ -1558,7 +1558,7 @@ AES_cbc_encrypt:
|
||||
leaq -88-63(%rcx),%r10
|
||||
subq %rbp,%r10
|
||||
negq %r10
|
||||
andq $960,%r10
|
||||
andq $0x3c0,%r10
|
||||
subq %r10,%rbp
|
||||
|
||||
xchgq %rsp,%rbp
|
||||
@ -1587,7 +1587,7 @@ AES_cbc_encrypt:
|
||||
leaq 2048(%r14),%r14
|
||||
leaq 768-8(%rsp),%rax
|
||||
subq %r14,%rax
|
||||
andq $768,%rax
|
||||
andq $0x300,%rax
|
||||
leaq (%r14,%rax,1),%r14
|
||||
|
||||
cmpq $0,%rbx
|
||||
|
@ -1393,8 +1393,8 @@ aesni_cbc_sha1_enc_shaext:
|
||||
movups 16(%rcx),%xmm0
|
||||
leaq 112(%rcx),%rcx
|
||||
|
||||
pshufd $27,%xmm8,%xmm8
|
||||
pshufd $27,%xmm9,%xmm9
|
||||
pshufd $0b00011011,%xmm8,%xmm8
|
||||
pshufd $0b00011011,%xmm9,%xmm9
|
||||
jmp .Loop_shaext
|
||||
|
||||
.align 16
|
||||
@ -1673,8 +1673,8 @@ aesni_cbc_sha1_enc_shaext:
|
||||
leaq 64(%rdi),%rdi
|
||||
jnz .Loop_shaext
|
||||
|
||||
pshufd $27,%xmm8,%xmm8
|
||||
pshufd $27,%xmm9,%xmm9
|
||||
pshufd $0b00011011,%xmm8,%xmm8
|
||||
pshufd $0b00011011,%xmm9,%xmm9
|
||||
movups %xmm2,(%r8)
|
||||
movdqu %xmm8,(%r9)
|
||||
movd %xmm9,16(%r9)
|
||||
|
@ -504,7 +504,7 @@ aesni_ecb_encrypt:
|
||||
testl %r8d,%r8d
|
||||
jz .Lecb_decrypt
|
||||
|
||||
cmpq $128,%rdx
|
||||
cmpq $0x80,%rdx
|
||||
jb .Lecb_enc_tail
|
||||
|
||||
movdqu (%rdi),%xmm2
|
||||
@ -516,7 +516,7 @@ aesni_ecb_encrypt:
|
||||
movdqu 96(%rdi),%xmm8
|
||||
movdqu 112(%rdi),%xmm9
|
||||
leaq 128(%rdi),%rdi
|
||||
subq $128,%rdx
|
||||
subq $0x80,%rdx
|
||||
jmp .Lecb_enc_loop8_enter
|
||||
.align 16
|
||||
.Lecb_enc_loop8:
|
||||
@ -544,7 +544,7 @@ aesni_ecb_encrypt:
|
||||
|
||||
call _aesni_encrypt8
|
||||
|
||||
subq $128,%rdx
|
||||
subq $0x80,%rdx
|
||||
jnc .Lecb_enc_loop8
|
||||
|
||||
movups %xmm2,(%rsi)
|
||||
@ -558,22 +558,22 @@ aesni_ecb_encrypt:
|
||||
movups %xmm8,96(%rsi)
|
||||
movups %xmm9,112(%rsi)
|
||||
leaq 128(%rsi),%rsi
|
||||
addq $128,%rdx
|
||||
addq $0x80,%rdx
|
||||
jz .Lecb_ret
|
||||
|
||||
.Lecb_enc_tail:
|
||||
movups (%rdi),%xmm2
|
||||
cmpq $32,%rdx
|
||||
cmpq $0x20,%rdx
|
||||
jb .Lecb_enc_one
|
||||
movups 16(%rdi),%xmm3
|
||||
je .Lecb_enc_two
|
||||
movups 32(%rdi),%xmm4
|
||||
cmpq $64,%rdx
|
||||
cmpq $0x40,%rdx
|
||||
jb .Lecb_enc_three
|
||||
movups 48(%rdi),%xmm5
|
||||
je .Lecb_enc_four
|
||||
movups 64(%rdi),%xmm6
|
||||
cmpq $96,%rdx
|
||||
cmpq $0x60,%rdx
|
||||
jb .Lecb_enc_five
|
||||
movups 80(%rdi),%xmm7
|
||||
je .Lecb_enc_six
|
||||
@ -647,7 +647,7 @@ aesni_ecb_encrypt:
|
||||
|
||||
.align 16
|
||||
.Lecb_decrypt:
|
||||
cmpq $128,%rdx
|
||||
cmpq $0x80,%rdx
|
||||
jb .Lecb_dec_tail
|
||||
|
||||
movdqu (%rdi),%xmm2
|
||||
@ -659,7 +659,7 @@ aesni_ecb_encrypt:
|
||||
movdqu 96(%rdi),%xmm8
|
||||
movdqu 112(%rdi),%xmm9
|
||||
leaq 128(%rdi),%rdi
|
||||
subq $128,%rdx
|
||||
subq $0x80,%rdx
|
||||
jmp .Lecb_dec_loop8_enter
|
||||
.align 16
|
||||
.Lecb_dec_loop8:
|
||||
@ -688,7 +688,7 @@ aesni_ecb_encrypt:
|
||||
call _aesni_decrypt8
|
||||
|
||||
movups (%r11),%xmm0
|
||||
subq $128,%rdx
|
||||
subq $0x80,%rdx
|
||||
jnc .Lecb_dec_loop8
|
||||
|
||||
movups %xmm2,(%rsi)
|
||||
@ -710,22 +710,22 @@ aesni_ecb_encrypt:
|
||||
movups %xmm9,112(%rsi)
|
||||
pxor %xmm9,%xmm9
|
||||
leaq 128(%rsi),%rsi
|
||||
addq $128,%rdx
|
||||
addq $0x80,%rdx
|
||||
jz .Lecb_ret
|
||||
|
||||
.Lecb_dec_tail:
|
||||
movups (%rdi),%xmm2
|
||||
cmpq $32,%rdx
|
||||
cmpq $0x20,%rdx
|
||||
jb .Lecb_dec_one
|
||||
movups 16(%rdi),%xmm3
|
||||
je .Lecb_dec_two
|
||||
movups 32(%rdi),%xmm4
|
||||
cmpq $64,%rdx
|
||||
cmpq $0x40,%rdx
|
||||
jb .Lecb_dec_three
|
||||
movups 48(%rdi),%xmm5
|
||||
je .Lecb_dec_four
|
||||
movups 64(%rdi),%xmm6
|
||||
cmpq $96,%rdx
|
||||
cmpq $0x60,%rdx
|
||||
jb .Lecb_dec_five
|
||||
movups 80(%rdi),%xmm7
|
||||
je .Lecb_dec_six
|
||||
@ -1599,7 +1599,7 @@ aesni_xts_encrypt:
|
||||
|
||||
movdqa .Lxts_magic(%rip),%xmm8
|
||||
movdqa %xmm2,%xmm15
|
||||
pshufd $95,%xmm2,%xmm9
|
||||
pshufd $0x5f,%xmm2,%xmm9
|
||||
pxor %xmm0,%xmm1
|
||||
movdqa %xmm9,%xmm14
|
||||
paddd %xmm9,%xmm9
|
||||
@ -1698,7 +1698,7 @@ aesni_xts_encrypt:
|
||||
.byte 102,15,56,220,248
|
||||
movups 64(%r11),%xmm0
|
||||
movdqa %xmm8,80(%rsp)
|
||||
pshufd $95,%xmm15,%xmm9
|
||||
pshufd $0x5f,%xmm15,%xmm9
|
||||
jmp .Lxts_enc_loop6
|
||||
.align 32
|
||||
.Lxts_enc_loop6:
|
||||
@ -1837,13 +1837,13 @@ aesni_xts_encrypt:
|
||||
jz .Lxts_enc_done
|
||||
|
||||
pxor %xmm0,%xmm11
|
||||
cmpq $32,%rdx
|
||||
cmpq $0x20,%rdx
|
||||
jb .Lxts_enc_one
|
||||
pxor %xmm0,%xmm12
|
||||
je .Lxts_enc_two
|
||||
|
||||
pxor %xmm0,%xmm13
|
||||
cmpq $64,%rdx
|
||||
cmpq $0x40,%rdx
|
||||
jb .Lxts_enc_three
|
||||
pxor %xmm0,%xmm14
|
||||
je .Lxts_enc_four
|
||||
@ -2070,7 +2070,7 @@ aesni_xts_decrypt:
|
||||
|
||||
movdqa .Lxts_magic(%rip),%xmm8
|
||||
movdqa %xmm2,%xmm15
|
||||
pshufd $95,%xmm2,%xmm9
|
||||
pshufd $0x5f,%xmm2,%xmm9
|
||||
pxor %xmm0,%xmm1
|
||||
movdqa %xmm9,%xmm14
|
||||
paddd %xmm9,%xmm9
|
||||
@ -2169,7 +2169,7 @@ aesni_xts_decrypt:
|
||||
.byte 102,15,56,222,248
|
||||
movups 64(%r11),%xmm0
|
||||
movdqa %xmm8,80(%rsp)
|
||||
pshufd $95,%xmm15,%xmm9
|
||||
pshufd $0x5f,%xmm15,%xmm9
|
||||
jmp .Lxts_dec_loop6
|
||||
.align 32
|
||||
.Lxts_dec_loop6:
|
||||
@ -2309,13 +2309,13 @@ aesni_xts_decrypt:
|
||||
jz .Lxts_dec_done
|
||||
|
||||
pxor %xmm0,%xmm12
|
||||
cmpq $32,%rdx
|
||||
cmpq $0x20,%rdx
|
||||
jb .Lxts_dec_one
|
||||
pxor %xmm0,%xmm13
|
||||
je .Lxts_dec_two
|
||||
|
||||
pxor %xmm0,%xmm14
|
||||
cmpq $64,%rdx
|
||||
cmpq $0x40,%rdx
|
||||
jb .Lxts_dec_three
|
||||
je .Lxts_dec_four
|
||||
|
||||
@ -2346,7 +2346,7 @@ aesni_xts_decrypt:
|
||||
pcmpgtd %xmm15,%xmm14
|
||||
movdqu %xmm6,64(%rsi)
|
||||
leaq 80(%rsi),%rsi
|
||||
pshufd $19,%xmm14,%xmm11
|
||||
pshufd $0x13,%xmm14,%xmm11
|
||||
andq $15,%r9
|
||||
jz .Lxts_dec_ret
|
||||
|
||||
@ -2635,7 +2635,7 @@ aesni_cbc_encrypt:
|
||||
leaq -8(%rax),%rbp
|
||||
movups (%r8),%xmm10
|
||||
movl %r10d,%eax
|
||||
cmpq $80,%rdx
|
||||
cmpq $0x50,%rdx
|
||||
jbe .Lcbc_dec_tail
|
||||
|
||||
movups (%rcx),%xmm0
|
||||
@ -2651,14 +2651,14 @@ aesni_cbc_encrypt:
|
||||
movdqu 80(%rdi),%xmm7
|
||||
movdqa %xmm6,%xmm15
|
||||
movl OPENSSL_ia32cap_P+4(%rip),%r9d
|
||||
cmpq $112,%rdx
|
||||
cmpq $0x70,%rdx
|
||||
jbe .Lcbc_dec_six_or_seven
|
||||
|
||||
andl $71303168,%r9d
|
||||
subq $80,%rdx
|
||||
subq $0x50,%rdx
|
||||
cmpl $4194304,%r9d
|
||||
je .Lcbc_dec_loop6_enter
|
||||
subq $32,%rdx
|
||||
subq $0x20,%rdx
|
||||
leaq 112(%rcx),%rcx
|
||||
jmp .Lcbc_dec_loop8_enter
|
||||
.align 16
|
||||
@ -2673,7 +2673,7 @@ aesni_cbc_encrypt:
|
||||
movups 16-112(%rcx),%xmm1
|
||||
pxor %xmm0,%xmm4
|
||||
xorq %r11,%r11
|
||||
cmpq $112,%rdx
|
||||
cmpq $0x70,%rdx
|
||||
pxor %xmm0,%xmm5
|
||||
pxor %xmm0,%xmm6
|
||||
pxor %xmm0,%xmm7
|
||||
@ -2858,21 +2858,21 @@ aesni_cbc_encrypt:
|
||||
movups %xmm8,96(%rsi)
|
||||
leaq 112(%rsi),%rsi
|
||||
|
||||
subq $128,%rdx
|
||||
subq $0x80,%rdx
|
||||
ja .Lcbc_dec_loop8
|
||||
|
||||
movaps %xmm9,%xmm2
|
||||
leaq -112(%rcx),%rcx
|
||||
addq $112,%rdx
|
||||
addq $0x70,%rdx
|
||||
jle .Lcbc_dec_clear_tail_collected
|
||||
movups %xmm9,(%rsi)
|
||||
leaq 16(%rsi),%rsi
|
||||
cmpq $80,%rdx
|
||||
cmpq $0x50,%rdx
|
||||
jbe .Lcbc_dec_tail
|
||||
|
||||
movaps %xmm11,%xmm2
|
||||
.Lcbc_dec_six_or_seven:
|
||||
cmpq $96,%rdx
|
||||
cmpq $0x60,%rdx
|
||||
ja .Lcbc_dec_seven
|
||||
|
||||
movaps %xmm7,%xmm8
|
||||
@ -2965,33 +2965,33 @@ aesni_cbc_encrypt:
|
||||
movl %r10d,%eax
|
||||
movdqu %xmm6,64(%rsi)
|
||||
leaq 80(%rsi),%rsi
|
||||
subq $96,%rdx
|
||||
subq $0x60,%rdx
|
||||
ja .Lcbc_dec_loop6
|
||||
|
||||
movdqa %xmm7,%xmm2
|
||||
addq $80,%rdx
|
||||
addq $0x50,%rdx
|
||||
jle .Lcbc_dec_clear_tail_collected
|
||||
movups %xmm7,(%rsi)
|
||||
leaq 16(%rsi),%rsi
|
||||
|
||||
.Lcbc_dec_tail:
|
||||
movups (%rdi),%xmm2
|
||||
subq $16,%rdx
|
||||
subq $0x10,%rdx
|
||||
jbe .Lcbc_dec_one
|
||||
|
||||
movups 16(%rdi),%xmm3
|
||||
movaps %xmm2,%xmm11
|
||||
subq $16,%rdx
|
||||
subq $0x10,%rdx
|
||||
jbe .Lcbc_dec_two
|
||||
|
||||
movups 32(%rdi),%xmm4
|
||||
movaps %xmm3,%xmm12
|
||||
subq $16,%rdx
|
||||
subq $0x10,%rdx
|
||||
jbe .Lcbc_dec_three
|
||||
|
||||
movups 48(%rdi),%xmm5
|
||||
movaps %xmm4,%xmm13
|
||||
subq $16,%rdx
|
||||
subq $0x10,%rdx
|
||||
jbe .Lcbc_dec_four
|
||||
|
||||
movups 64(%rdi),%xmm6
|
||||
@ -3016,7 +3016,7 @@ aesni_cbc_encrypt:
|
||||
movdqa %xmm6,%xmm2
|
||||
pxor %xmm6,%xmm6
|
||||
pxor %xmm7,%xmm7
|
||||
subq $16,%rdx
|
||||
subq $0x10,%rdx
|
||||
jmp .Lcbc_dec_tail_collected
|
||||
|
||||
.align 16
|
||||
@ -3333,7 +3333,7 @@ __aesni_set_encrypt_key:
|
||||
pslldq $4,%xmm0
|
||||
pxor %xmm3,%xmm0
|
||||
|
||||
pshufd $255,%xmm0,%xmm3
|
||||
pshufd $0xff,%xmm0,%xmm3
|
||||
pxor %xmm1,%xmm3
|
||||
pslldq $4,%xmm1
|
||||
pxor %xmm1,%xmm3
|
||||
@ -3420,7 +3420,7 @@ __aesni_set_encrypt_key:
|
||||
decl %r10d
|
||||
jz .Ldone_key256
|
||||
|
||||
pshufd $255,%xmm0,%xmm2
|
||||
pshufd $0xff,%xmm0,%xmm2
|
||||
pxor %xmm3,%xmm3
|
||||
.byte 102,15,56,221,211
|
||||
|
||||
@ -3463,11 +3463,11 @@ __aesni_set_encrypt_key:
|
||||
movups %xmm0,(%rax)
|
||||
leaq 16(%rax),%rax
|
||||
.Lkey_expansion_128_cold:
|
||||
shufps $16,%xmm0,%xmm4
|
||||
shufps $0b00010000,%xmm0,%xmm4
|
||||
xorps %xmm4,%xmm0
|
||||
shufps $140,%xmm0,%xmm4
|
||||
shufps $0b10001100,%xmm0,%xmm4
|
||||
xorps %xmm4,%xmm0
|
||||
shufps $255,%xmm1,%xmm1
|
||||
shufps $0b11111111,%xmm1,%xmm1
|
||||
xorps %xmm1,%xmm0
|
||||
.byte 0xf3,0xc3
|
||||
|
||||
@ -3478,25 +3478,25 @@ __aesni_set_encrypt_key:
|
||||
.Lkey_expansion_192a_cold:
|
||||
movaps %xmm2,%xmm5
|
||||
.Lkey_expansion_192b_warm:
|
||||
shufps $16,%xmm0,%xmm4
|
||||
shufps $0b00010000,%xmm0,%xmm4
|
||||
movdqa %xmm2,%xmm3
|
||||
xorps %xmm4,%xmm0
|
||||
shufps $140,%xmm0,%xmm4
|
||||
shufps $0b10001100,%xmm0,%xmm4
|
||||
pslldq $4,%xmm3
|
||||
xorps %xmm4,%xmm0
|
||||
pshufd $85,%xmm1,%xmm1
|
||||
pshufd $0b01010101,%xmm1,%xmm1
|
||||
pxor %xmm3,%xmm2
|
||||
pxor %xmm1,%xmm0
|
||||
pshufd $255,%xmm0,%xmm3
|
||||
pshufd $0b11111111,%xmm0,%xmm3
|
||||
pxor %xmm3,%xmm2
|
||||
.byte 0xf3,0xc3
|
||||
|
||||
.align 16
|
||||
.Lkey_expansion_192b:
|
||||
movaps %xmm0,%xmm3
|
||||
shufps $68,%xmm0,%xmm5
|
||||
shufps $0b01000100,%xmm0,%xmm5
|
||||
movups %xmm5,(%rax)
|
||||
shufps $78,%xmm2,%xmm3
|
||||
shufps $0b01001110,%xmm2,%xmm3
|
||||
movups %xmm3,16(%rax)
|
||||
leaq 32(%rax),%rax
|
||||
jmp .Lkey_expansion_192b_warm
|
||||
@ -3506,11 +3506,11 @@ __aesni_set_encrypt_key:
|
||||
movups %xmm2,(%rax)
|
||||
leaq 16(%rax),%rax
|
||||
.Lkey_expansion_256a_cold:
|
||||
shufps $16,%xmm0,%xmm4
|
||||
shufps $0b00010000,%xmm0,%xmm4
|
||||
xorps %xmm4,%xmm0
|
||||
shufps $140,%xmm0,%xmm4
|
||||
shufps $0b10001100,%xmm0,%xmm4
|
||||
xorps %xmm4,%xmm0
|
||||
shufps $255,%xmm1,%xmm1
|
||||
shufps $0b11111111,%xmm1,%xmm1
|
||||
xorps %xmm1,%xmm0
|
||||
.byte 0xf3,0xc3
|
||||
|
||||
@ -3519,11 +3519,11 @@ __aesni_set_encrypt_key:
|
||||
movups %xmm0,(%rax)
|
||||
leaq 16(%rax),%rax
|
||||
|
||||
shufps $16,%xmm2,%xmm4
|
||||
shufps $0b00010000,%xmm2,%xmm4
|
||||
xorps %xmm4,%xmm2
|
||||
shufps $140,%xmm2,%xmm4
|
||||
shufps $0b10001100,%xmm2,%xmm4
|
||||
xorps %xmm4,%xmm2
|
||||
shufps $170,%xmm1,%xmm1
|
||||
shufps $0b10101010,%xmm1,%xmm1
|
||||
xorps %xmm1,%xmm2
|
||||
.byte 0xf3,0xc3
|
||||
.size aesni_set_encrypt_key,.-aesni_set_encrypt_key
|
||||
|
@ -325,45 +325,45 @@ _bsaes_encrypt8_bitslice:
|
||||
pxor %xmm2,%xmm5
|
||||
decl %r10d
|
||||
jl .Lenc_done
|
||||
pshufd $147,%xmm15,%xmm7
|
||||
pshufd $147,%xmm0,%xmm8
|
||||
pshufd $0x93,%xmm15,%xmm7
|
||||
pshufd $0x93,%xmm0,%xmm8
|
||||
pxor %xmm7,%xmm15
|
||||
pshufd $147,%xmm3,%xmm9
|
||||
pshufd $0x93,%xmm3,%xmm9
|
||||
pxor %xmm8,%xmm0
|
||||
pshufd $147,%xmm5,%xmm10
|
||||
pshufd $0x93,%xmm5,%xmm10
|
||||
pxor %xmm9,%xmm3
|
||||
pshufd $147,%xmm2,%xmm11
|
||||
pshufd $0x93,%xmm2,%xmm11
|
||||
pxor %xmm10,%xmm5
|
||||
pshufd $147,%xmm6,%xmm12
|
||||
pshufd $0x93,%xmm6,%xmm12
|
||||
pxor %xmm11,%xmm2
|
||||
pshufd $147,%xmm1,%xmm13
|
||||
pshufd $0x93,%xmm1,%xmm13
|
||||
pxor %xmm12,%xmm6
|
||||
pshufd $147,%xmm4,%xmm14
|
||||
pshufd $0x93,%xmm4,%xmm14
|
||||
pxor %xmm13,%xmm1
|
||||
pxor %xmm14,%xmm4
|
||||
|
||||
pxor %xmm15,%xmm8
|
||||
pxor %xmm4,%xmm7
|
||||
pxor %xmm4,%xmm8
|
||||
pshufd $78,%xmm15,%xmm15
|
||||
pshufd $0x4E,%xmm15,%xmm15
|
||||
pxor %xmm0,%xmm9
|
||||
pshufd $78,%xmm0,%xmm0
|
||||
pshufd $0x4E,%xmm0,%xmm0
|
||||
pxor %xmm2,%xmm12
|
||||
pxor %xmm7,%xmm15
|
||||
pxor %xmm6,%xmm13
|
||||
pxor %xmm8,%xmm0
|
||||
pxor %xmm5,%xmm11
|
||||
pshufd $78,%xmm2,%xmm7
|
||||
pshufd $0x4E,%xmm2,%xmm7
|
||||
pxor %xmm1,%xmm14
|
||||
pshufd $78,%xmm6,%xmm8
|
||||
pshufd $0x4E,%xmm6,%xmm8
|
||||
pxor %xmm3,%xmm10
|
||||
pshufd $78,%xmm5,%xmm2
|
||||
pshufd $0x4E,%xmm5,%xmm2
|
||||
pxor %xmm4,%xmm10
|
||||
pshufd $78,%xmm4,%xmm6
|
||||
pshufd $0x4E,%xmm4,%xmm6
|
||||
pxor %xmm4,%xmm11
|
||||
pshufd $78,%xmm1,%xmm5
|
||||
pshufd $0x4E,%xmm1,%xmm5
|
||||
pxor %xmm11,%xmm7
|
||||
pshufd $78,%xmm3,%xmm1
|
||||
pshufd $0x4E,%xmm3,%xmm1
|
||||
pxor %xmm12,%xmm8
|
||||
pxor %xmm10,%xmm2
|
||||
pxor %xmm14,%xmm6
|
||||
@ -797,24 +797,24 @@ _bsaes_decrypt8:
|
||||
decl %r10d
|
||||
jl .Ldec_done
|
||||
|
||||
pshufd $78,%xmm15,%xmm7
|
||||
pshufd $78,%xmm2,%xmm13
|
||||
pshufd $0x4E,%xmm15,%xmm7
|
||||
pshufd $0x4E,%xmm2,%xmm13
|
||||
pxor %xmm15,%xmm7
|
||||
pshufd $78,%xmm4,%xmm14
|
||||
pshufd $0x4E,%xmm4,%xmm14
|
||||
pxor %xmm2,%xmm13
|
||||
pshufd $78,%xmm0,%xmm8
|
||||
pshufd $0x4E,%xmm0,%xmm8
|
||||
pxor %xmm4,%xmm14
|
||||
pshufd $78,%xmm5,%xmm9
|
||||
pshufd $0x4E,%xmm5,%xmm9
|
||||
pxor %xmm0,%xmm8
|
||||
pshufd $78,%xmm3,%xmm10
|
||||
pshufd $0x4E,%xmm3,%xmm10
|
||||
pxor %xmm5,%xmm9
|
||||
pxor %xmm13,%xmm15
|
||||
pxor %xmm13,%xmm0
|
||||
pshufd $78,%xmm1,%xmm11
|
||||
pshufd $0x4E,%xmm1,%xmm11
|
||||
pxor %xmm3,%xmm10
|
||||
pxor %xmm7,%xmm5
|
||||
pxor %xmm8,%xmm3
|
||||
pshufd $78,%xmm6,%xmm12
|
||||
pshufd $0x4E,%xmm6,%xmm12
|
||||
pxor %xmm1,%xmm11
|
||||
pxor %xmm14,%xmm0
|
||||
pxor %xmm9,%xmm1
|
||||
@ -828,45 +828,45 @@ _bsaes_decrypt8:
|
||||
pxor %xmm14,%xmm1
|
||||
pxor %xmm14,%xmm6
|
||||
pxor %xmm12,%xmm4
|
||||
pshufd $147,%xmm15,%xmm7
|
||||
pshufd $147,%xmm0,%xmm8
|
||||
pshufd $0x93,%xmm15,%xmm7
|
||||
pshufd $0x93,%xmm0,%xmm8
|
||||
pxor %xmm7,%xmm15
|
||||
pshufd $147,%xmm5,%xmm9
|
||||
pshufd $0x93,%xmm5,%xmm9
|
||||
pxor %xmm8,%xmm0
|
||||
pshufd $147,%xmm3,%xmm10
|
||||
pshufd $0x93,%xmm3,%xmm10
|
||||
pxor %xmm9,%xmm5
|
||||
pshufd $147,%xmm1,%xmm11
|
||||
pshufd $0x93,%xmm1,%xmm11
|
||||
pxor %xmm10,%xmm3
|
||||
pshufd $147,%xmm6,%xmm12
|
||||
pshufd $0x93,%xmm6,%xmm12
|
||||
pxor %xmm11,%xmm1
|
||||
pshufd $147,%xmm2,%xmm13
|
||||
pshufd $0x93,%xmm2,%xmm13
|
||||
pxor %xmm12,%xmm6
|
||||
pshufd $147,%xmm4,%xmm14
|
||||
pshufd $0x93,%xmm4,%xmm14
|
||||
pxor %xmm13,%xmm2
|
||||
pxor %xmm14,%xmm4
|
||||
|
||||
pxor %xmm15,%xmm8
|
||||
pxor %xmm4,%xmm7
|
||||
pxor %xmm4,%xmm8
|
||||
pshufd $78,%xmm15,%xmm15
|
||||
pshufd $0x4E,%xmm15,%xmm15
|
||||
pxor %xmm0,%xmm9
|
||||
pshufd $78,%xmm0,%xmm0
|
||||
pshufd $0x4E,%xmm0,%xmm0
|
||||
pxor %xmm1,%xmm12
|
||||
pxor %xmm7,%xmm15
|
||||
pxor %xmm6,%xmm13
|
||||
pxor %xmm8,%xmm0
|
||||
pxor %xmm3,%xmm11
|
||||
pshufd $78,%xmm1,%xmm7
|
||||
pshufd $0x4E,%xmm1,%xmm7
|
||||
pxor %xmm2,%xmm14
|
||||
pshufd $78,%xmm6,%xmm8
|
||||
pshufd $0x4E,%xmm6,%xmm8
|
||||
pxor %xmm5,%xmm10
|
||||
pshufd $78,%xmm3,%xmm1
|
||||
pshufd $0x4E,%xmm3,%xmm1
|
||||
pxor %xmm4,%xmm10
|
||||
pshufd $78,%xmm4,%xmm6
|
||||
pshufd $0x4E,%xmm4,%xmm6
|
||||
pxor %xmm4,%xmm11
|
||||
pshufd $78,%xmm2,%xmm3
|
||||
pshufd $0x4E,%xmm2,%xmm3
|
||||
pxor %xmm11,%xmm7
|
||||
pshufd $78,%xmm5,%xmm2
|
||||
pshufd $0x4E,%xmm5,%xmm2
|
||||
pxor %xmm12,%xmm8
|
||||
pxor %xmm1,%xmm10
|
||||
pxor %xmm14,%xmm6
|
||||
@ -1553,20 +1553,20 @@ bsaes_xts_encrypt:
|
||||
movdqa %xmm7,(%rax)
|
||||
|
||||
andq $-16,%r14
|
||||
subq $128,%rsp
|
||||
subq $0x80,%rsp
|
||||
movdqa 32(%rbp),%xmm6
|
||||
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa .Lxts_magic(%rip),%xmm12
|
||||
pcmpgtd %xmm6,%xmm14
|
||||
|
||||
subq $128,%r14
|
||||
subq $0x80,%r14
|
||||
jc .Lxts_enc_short
|
||||
jmp .Lxts_enc_loop
|
||||
|
||||
.align 16
|
||||
.Lxts_enc_loop:
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm15
|
||||
movdqa %xmm6,0(%rsp)
|
||||
@ -1574,7 +1574,7 @@ bsaes_xts_encrypt:
|
||||
pand %xmm12,%xmm13
|
||||
pcmpgtd %xmm6,%xmm14
|
||||
pxor %xmm13,%xmm6
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm0
|
||||
movdqa %xmm6,16(%rsp)
|
||||
@ -1583,7 +1583,7 @@ bsaes_xts_encrypt:
|
||||
pcmpgtd %xmm6,%xmm14
|
||||
pxor %xmm13,%xmm6
|
||||
movdqu 0(%r12),%xmm7
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm1
|
||||
movdqa %xmm6,32(%rsp)
|
||||
@ -1593,7 +1593,7 @@ bsaes_xts_encrypt:
|
||||
pxor %xmm13,%xmm6
|
||||
movdqu 16(%r12),%xmm8
|
||||
pxor %xmm7,%xmm15
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm2
|
||||
movdqa %xmm6,48(%rsp)
|
||||
@ -1603,7 +1603,7 @@ bsaes_xts_encrypt:
|
||||
pxor %xmm13,%xmm6
|
||||
movdqu 32(%r12),%xmm9
|
||||
pxor %xmm8,%xmm0
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm3
|
||||
movdqa %xmm6,64(%rsp)
|
||||
@ -1613,7 +1613,7 @@ bsaes_xts_encrypt:
|
||||
pxor %xmm13,%xmm6
|
||||
movdqu 48(%r12),%xmm10
|
||||
pxor %xmm9,%xmm1
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm4
|
||||
movdqa %xmm6,80(%rsp)
|
||||
@ -1623,7 +1623,7 @@ bsaes_xts_encrypt:
|
||||
pxor %xmm13,%xmm6
|
||||
movdqu 64(%r12),%xmm11
|
||||
pxor %xmm10,%xmm2
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm5
|
||||
movdqa %xmm6,96(%rsp)
|
||||
@ -1667,20 +1667,20 @@ bsaes_xts_encrypt:
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa .Lxts_magic(%rip),%xmm12
|
||||
pcmpgtd %xmm6,%xmm14
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
paddq %xmm6,%xmm6
|
||||
pand %xmm12,%xmm13
|
||||
pcmpgtd %xmm6,%xmm14
|
||||
pxor %xmm13,%xmm6
|
||||
|
||||
subq $128,%r14
|
||||
subq $0x80,%r14
|
||||
jnc .Lxts_enc_loop
|
||||
|
||||
.Lxts_enc_short:
|
||||
addq $128,%r14
|
||||
addq $0x80,%r14
|
||||
jz .Lxts_enc_done
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm15
|
||||
movdqa %xmm6,0(%rsp)
|
||||
@ -1688,7 +1688,7 @@ bsaes_xts_encrypt:
|
||||
pand %xmm12,%xmm13
|
||||
pcmpgtd %xmm6,%xmm14
|
||||
pxor %xmm13,%xmm6
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm0
|
||||
movdqa %xmm6,16(%rsp)
|
||||
@ -1699,7 +1699,7 @@ bsaes_xts_encrypt:
|
||||
movdqu 0(%r12),%xmm7
|
||||
cmpq $16,%r14
|
||||
je .Lxts_enc_1
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm1
|
||||
movdqa %xmm6,32(%rsp)
|
||||
@ -1711,7 +1711,7 @@ bsaes_xts_encrypt:
|
||||
cmpq $32,%r14
|
||||
je .Lxts_enc_2
|
||||
pxor %xmm7,%xmm15
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm2
|
||||
movdqa %xmm6,48(%rsp)
|
||||
@ -1723,7 +1723,7 @@ bsaes_xts_encrypt:
|
||||
cmpq $48,%r14
|
||||
je .Lxts_enc_3
|
||||
pxor %xmm8,%xmm0
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm3
|
||||
movdqa %xmm6,64(%rsp)
|
||||
@ -1735,7 +1735,7 @@ bsaes_xts_encrypt:
|
||||
cmpq $64,%r14
|
||||
je .Lxts_enc_4
|
||||
pxor %xmm9,%xmm1
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm4
|
||||
movdqa %xmm6,80(%rsp)
|
||||
@ -1747,7 +1747,7 @@ bsaes_xts_encrypt:
|
||||
cmpq $80,%r14
|
||||
je .Lxts_enc_5
|
||||
pxor %xmm10,%xmm2
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm5
|
||||
movdqa %xmm6,96(%rsp)
|
||||
@ -2012,20 +2012,20 @@ bsaes_xts_decrypt:
|
||||
shlq $4,%rax
|
||||
subq %rax,%r14
|
||||
|
||||
subq $128,%rsp
|
||||
subq $0x80,%rsp
|
||||
movdqa 32(%rbp),%xmm6
|
||||
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa .Lxts_magic(%rip),%xmm12
|
||||
pcmpgtd %xmm6,%xmm14
|
||||
|
||||
subq $128,%r14
|
||||
subq $0x80,%r14
|
||||
jc .Lxts_dec_short
|
||||
jmp .Lxts_dec_loop
|
||||
|
||||
.align 16
|
||||
.Lxts_dec_loop:
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm15
|
||||
movdqa %xmm6,0(%rsp)
|
||||
@ -2033,7 +2033,7 @@ bsaes_xts_decrypt:
|
||||
pand %xmm12,%xmm13
|
||||
pcmpgtd %xmm6,%xmm14
|
||||
pxor %xmm13,%xmm6
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm0
|
||||
movdqa %xmm6,16(%rsp)
|
||||
@ -2042,7 +2042,7 @@ bsaes_xts_decrypt:
|
||||
pcmpgtd %xmm6,%xmm14
|
||||
pxor %xmm13,%xmm6
|
||||
movdqu 0(%r12),%xmm7
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm1
|
||||
movdqa %xmm6,32(%rsp)
|
||||
@ -2052,7 +2052,7 @@ bsaes_xts_decrypt:
|
||||
pxor %xmm13,%xmm6
|
||||
movdqu 16(%r12),%xmm8
|
||||
pxor %xmm7,%xmm15
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm2
|
||||
movdqa %xmm6,48(%rsp)
|
||||
@ -2062,7 +2062,7 @@ bsaes_xts_decrypt:
|
||||
pxor %xmm13,%xmm6
|
||||
movdqu 32(%r12),%xmm9
|
||||
pxor %xmm8,%xmm0
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm3
|
||||
movdqa %xmm6,64(%rsp)
|
||||
@ -2072,7 +2072,7 @@ bsaes_xts_decrypt:
|
||||
pxor %xmm13,%xmm6
|
||||
movdqu 48(%r12),%xmm10
|
||||
pxor %xmm9,%xmm1
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm4
|
||||
movdqa %xmm6,80(%rsp)
|
||||
@ -2082,7 +2082,7 @@ bsaes_xts_decrypt:
|
||||
pxor %xmm13,%xmm6
|
||||
movdqu 64(%r12),%xmm11
|
||||
pxor %xmm10,%xmm2
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm5
|
||||
movdqa %xmm6,96(%rsp)
|
||||
@ -2126,20 +2126,20 @@ bsaes_xts_decrypt:
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa .Lxts_magic(%rip),%xmm12
|
||||
pcmpgtd %xmm6,%xmm14
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
paddq %xmm6,%xmm6
|
||||
pand %xmm12,%xmm13
|
||||
pcmpgtd %xmm6,%xmm14
|
||||
pxor %xmm13,%xmm6
|
||||
|
||||
subq $128,%r14
|
||||
subq $0x80,%r14
|
||||
jnc .Lxts_dec_loop
|
||||
|
||||
.Lxts_dec_short:
|
||||
addq $128,%r14
|
||||
addq $0x80,%r14
|
||||
jz .Lxts_dec_done
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm15
|
||||
movdqa %xmm6,0(%rsp)
|
||||
@ -2147,7 +2147,7 @@ bsaes_xts_decrypt:
|
||||
pand %xmm12,%xmm13
|
||||
pcmpgtd %xmm6,%xmm14
|
||||
pxor %xmm13,%xmm6
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm0
|
||||
movdqa %xmm6,16(%rsp)
|
||||
@ -2158,7 +2158,7 @@ bsaes_xts_decrypt:
|
||||
movdqu 0(%r12),%xmm7
|
||||
cmpq $16,%r14
|
||||
je .Lxts_dec_1
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm1
|
||||
movdqa %xmm6,32(%rsp)
|
||||
@ -2170,7 +2170,7 @@ bsaes_xts_decrypt:
|
||||
cmpq $32,%r14
|
||||
je .Lxts_dec_2
|
||||
pxor %xmm7,%xmm15
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm2
|
||||
movdqa %xmm6,48(%rsp)
|
||||
@ -2182,7 +2182,7 @@ bsaes_xts_decrypt:
|
||||
cmpq $48,%r14
|
||||
je .Lxts_dec_3
|
||||
pxor %xmm8,%xmm0
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm3
|
||||
movdqa %xmm6,64(%rsp)
|
||||
@ -2194,7 +2194,7 @@ bsaes_xts_decrypt:
|
||||
cmpq $64,%r14
|
||||
je .Lxts_dec_4
|
||||
pxor %xmm9,%xmm1
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm4
|
||||
movdqa %xmm6,80(%rsp)
|
||||
@ -2206,7 +2206,7 @@ bsaes_xts_decrypt:
|
||||
cmpq $80,%r14
|
||||
je .Lxts_dec_5
|
||||
pxor %xmm10,%xmm2
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa %xmm6,%xmm5
|
||||
movdqa %xmm6,96(%rsp)
|
||||
@ -2383,7 +2383,7 @@ bsaes_xts_decrypt:
|
||||
pxor %xmm14,%xmm14
|
||||
movdqa .Lxts_magic(%rip),%xmm12
|
||||
pcmpgtd %xmm6,%xmm14
|
||||
pshufd $19,%xmm14,%xmm13
|
||||
pshufd $0x13,%xmm14,%xmm13
|
||||
movdqa %xmm6,%xmm5
|
||||
paddq %xmm6,%xmm6
|
||||
pand %xmm12,%xmm13
|
||||
|
@ -1625,7 +1625,7 @@ Camellia_cbc_encrypt:
|
||||
leaq -64-63(%rcx),%r10
|
||||
subq %rsp,%r10
|
||||
negq %r10
|
||||
andq $960,%r10
|
||||
andq $0x3C0,%r10
|
||||
subq %r10,%rsp
|
||||
|
||||
|
||||
|
@ -1122,6 +1122,7 @@ ecp_nistz256_point_double:
|
||||
pushq %r15
|
||||
subq $160+8,%rsp
|
||||
|
||||
.Lpoint_double_shortcutq:
|
||||
movdqu 0(%rsi),%xmm0
|
||||
movq %rsi,%rbx
|
||||
movdqu 16(%rsi),%xmm1
|
||||
@ -1342,7 +1343,7 @@ ecp_nistz256_point_add:
|
||||
por %xmm1,%xmm3
|
||||
|
||||
movdqu 0(%rsi),%xmm0
|
||||
pshufd $177,%xmm3,%xmm5
|
||||
pshufd $0xb1,%xmm3,%xmm5
|
||||
movdqu 16(%rsi),%xmm1
|
||||
movdqu 32(%rsi),%xmm2
|
||||
por %xmm3,%xmm5
|
||||
@ -1352,7 +1353,7 @@ ecp_nistz256_point_add:
|
||||
movq 64+16(%rsi),%r15
|
||||
movq 64+24(%rsi),%r8
|
||||
movdqa %xmm0,480(%rsp)
|
||||
pshufd $30,%xmm5,%xmm4
|
||||
pshufd $0x1e,%xmm5,%xmm4
|
||||
movdqa %xmm1,480+16(%rsp)
|
||||
por %xmm0,%xmm1
|
||||
.byte 102,72,15,110,199
|
||||
@ -1372,10 +1373,10 @@ ecp_nistz256_point_add:
|
||||
call __ecp_nistz256_sqr_montq
|
||||
|
||||
pcmpeqd %xmm4,%xmm5
|
||||
pshufd $177,%xmm3,%xmm4
|
||||
pshufd $0xb1,%xmm3,%xmm4
|
||||
por %xmm3,%xmm4
|
||||
pshufd $0,%xmm5,%xmm5
|
||||
pshufd $30,%xmm4,%xmm3
|
||||
pshufd $0x1e,%xmm4,%xmm3
|
||||
por %xmm3,%xmm4
|
||||
pxor %xmm3,%xmm3
|
||||
pcmpeqd %xmm3,%xmm4
|
||||
@ -1384,6 +1385,7 @@ ecp_nistz256_point_add:
|
||||
movq 64+8(%rbx),%r14
|
||||
movq 64+16(%rbx),%r15
|
||||
movq 64+24(%rbx),%r8
|
||||
.byte 102,72,15,110,203
|
||||
|
||||
leaq 64-0(%rbx),%rsi
|
||||
leaq 32(%rsp),%rdi
|
||||
@ -1475,7 +1477,7 @@ ecp_nistz256_point_add:
|
||||
testq %r8,%r8
|
||||
jnz .Ladd_proceedq
|
||||
testq %r9,%r9
|
||||
jz .Ladd_proceedq
|
||||
jz .Ladd_doubleq
|
||||
|
||||
.byte 102,72,15,126,199
|
||||
pxor %xmm0,%xmm0
|
||||
@ -1487,6 +1489,13 @@ ecp_nistz256_point_add:
|
||||
movdqu %xmm0,80(%rdi)
|
||||
jmp .Ladd_doneq
|
||||
|
||||
.align 32
|
||||
.Ladd_doubleq:
|
||||
.byte 102,72,15,126,206
|
||||
.byte 102,72,15,126,199
|
||||
addq $416,%rsp
|
||||
jmp .Lpoint_double_shortcutq
|
||||
|
||||
.align 32
|
||||
.Ladd_proceedq:
|
||||
movq 0+64(%rsp),%rax
|
||||
@ -1734,13 +1743,13 @@ ecp_nistz256_point_add_affine:
|
||||
por %xmm1,%xmm3
|
||||
|
||||
movdqu 0(%rbx),%xmm0
|
||||
pshufd $177,%xmm3,%xmm5
|
||||
pshufd $0xb1,%xmm3,%xmm5
|
||||
movdqu 16(%rbx),%xmm1
|
||||
movdqu 32(%rbx),%xmm2
|
||||
por %xmm3,%xmm5
|
||||
movdqu 48(%rbx),%xmm3
|
||||
movdqa %xmm0,416(%rsp)
|
||||
pshufd $30,%xmm5,%xmm4
|
||||
pshufd $0x1e,%xmm5,%xmm4
|
||||
movdqa %xmm1,416+16(%rsp)
|
||||
por %xmm0,%xmm1
|
||||
.byte 102,72,15,110,199
|
||||
@ -1756,13 +1765,13 @@ ecp_nistz256_point_add_affine:
|
||||
call __ecp_nistz256_sqr_montq
|
||||
|
||||
pcmpeqd %xmm4,%xmm5
|
||||
pshufd $177,%xmm3,%xmm4
|
||||
pshufd $0xb1,%xmm3,%xmm4
|
||||
movq 0(%rbx),%rax
|
||||
|
||||
movq %r12,%r9
|
||||
por %xmm3,%xmm4
|
||||
pshufd $0,%xmm5,%xmm5
|
||||
pshufd $30,%xmm4,%xmm3
|
||||
pshufd $0x1e,%xmm4,%xmm3
|
||||
movq %r13,%r10
|
||||
por %xmm3,%xmm4
|
||||
pxor %xmm3,%xmm3
|
||||
|
@ -21,14 +21,14 @@ gcm_gmult_4bit:
|
||||
movq $14,%rcx
|
||||
movq 8(%rsi,%rax,1),%r8
|
||||
movq (%rsi,%rax,1),%r9
|
||||
andb $240,%bl
|
||||
andb $0xf0,%bl
|
||||
movq %r8,%rdx
|
||||
jmp .Loop1
|
||||
|
||||
.align 16
|
||||
.Loop1:
|
||||
shrq $4,%r8
|
||||
andq $15,%rdx
|
||||
andq $0xf,%rdx
|
||||
movq %r9,%r10
|
||||
movb (%rdi,%rcx,1),%al
|
||||
shrq $4,%r9
|
||||
@ -44,13 +44,13 @@ gcm_gmult_4bit:
|
||||
js .Lbreak1
|
||||
|
||||
shrq $4,%r8
|
||||
andq $15,%rdx
|
||||
andq $0xf,%rdx
|
||||
movq %r9,%r10
|
||||
shrq $4,%r9
|
||||
xorq 8(%rsi,%rax,1),%r8
|
||||
shlq $60,%r10
|
||||
xorq (%rsi,%rax,1),%r9
|
||||
andb $240,%bl
|
||||
andb $0xf0,%bl
|
||||
xorq (%r11,%rdx,8),%r9
|
||||
movq %r8,%rdx
|
||||
xorq %r10,%r8
|
||||
@ -59,19 +59,19 @@ gcm_gmult_4bit:
|
||||
.align 16
|
||||
.Lbreak1:
|
||||
shrq $4,%r8
|
||||
andq $15,%rdx
|
||||
andq $0xf,%rdx
|
||||
movq %r9,%r10
|
||||
shrq $4,%r9
|
||||
xorq 8(%rsi,%rax,1),%r8
|
||||
shlq $60,%r10
|
||||
xorq (%rsi,%rax,1),%r9
|
||||
andb $240,%bl
|
||||
andb $0xf0,%bl
|
||||
xorq (%r11,%rdx,8),%r9
|
||||
movq %r8,%rdx
|
||||
xorq %r10,%r8
|
||||
|
||||
shrq $4,%r8
|
||||
andq $15,%rdx
|
||||
andq $0xf,%rdx
|
||||
movq %r9,%r10
|
||||
shrq $4,%r9
|
||||
xorq 8(%rsi,%rbx,1),%r8
|
||||
@ -662,10 +662,10 @@ gcm_ghash_4bit:
|
||||
gcm_init_clmul:
|
||||
.L_init_clmul:
|
||||
movdqu (%rsi),%xmm2
|
||||
pshufd $78,%xmm2,%xmm2
|
||||
pshufd $0b01001110,%xmm2,%xmm2
|
||||
|
||||
|
||||
pshufd $255,%xmm2,%xmm4
|
||||
pshufd $0b11111111,%xmm2,%xmm4
|
||||
movdqa %xmm2,%xmm3
|
||||
psllq $1,%xmm2
|
||||
pxor %xmm5,%xmm5
|
||||
@ -679,11 +679,11 @@ gcm_init_clmul:
|
||||
pxor %xmm5,%xmm2
|
||||
|
||||
|
||||
pshufd $78,%xmm2,%xmm6
|
||||
pshufd $0b01001110,%xmm2,%xmm6
|
||||
movdqa %xmm2,%xmm0
|
||||
pxor %xmm2,%xmm6
|
||||
movdqa %xmm0,%xmm1
|
||||
pshufd $78,%xmm0,%xmm3
|
||||
pshufd $0b01001110,%xmm0,%xmm3
|
||||
pxor %xmm0,%xmm3
|
||||
.byte 102,15,58,68,194,0
|
||||
.byte 102,15,58,68,202,17
|
||||
@ -719,8 +719,8 @@ gcm_init_clmul:
|
||||
pxor %xmm4,%xmm0
|
||||
psrlq $1,%xmm0
|
||||
pxor %xmm1,%xmm0
|
||||
pshufd $78,%xmm2,%xmm3
|
||||
pshufd $78,%xmm0,%xmm4
|
||||
pshufd $0b01001110,%xmm2,%xmm3
|
||||
pshufd $0b01001110,%xmm0,%xmm4
|
||||
pxor %xmm2,%xmm3
|
||||
movdqu %xmm2,0(%rdi)
|
||||
pxor %xmm0,%xmm4
|
||||
@ -728,7 +728,7 @@ gcm_init_clmul:
|
||||
.byte 102,15,58,15,227,8
|
||||
movdqu %xmm4,32(%rdi)
|
||||
movdqa %xmm0,%xmm1
|
||||
pshufd $78,%xmm0,%xmm3
|
||||
pshufd $0b01001110,%xmm0,%xmm3
|
||||
pxor %xmm0,%xmm3
|
||||
.byte 102,15,58,68,194,0
|
||||
.byte 102,15,58,68,202,17
|
||||
@ -766,7 +766,7 @@ gcm_init_clmul:
|
||||
pxor %xmm1,%xmm0
|
||||
movdqa %xmm0,%xmm5
|
||||
movdqa %xmm0,%xmm1
|
||||
pshufd $78,%xmm0,%xmm3
|
||||
pshufd $0b01001110,%xmm0,%xmm3
|
||||
pxor %xmm0,%xmm3
|
||||
.byte 102,15,58,68,194,0
|
||||
.byte 102,15,58,68,202,17
|
||||
@ -802,8 +802,8 @@ gcm_init_clmul:
|
||||
pxor %xmm4,%xmm0
|
||||
psrlq $1,%xmm0
|
||||
pxor %xmm1,%xmm0
|
||||
pshufd $78,%xmm5,%xmm3
|
||||
pshufd $78,%xmm0,%xmm4
|
||||
pshufd $0b01001110,%xmm5,%xmm3
|
||||
pshufd $0b01001110,%xmm0,%xmm4
|
||||
pxor %xmm5,%xmm3
|
||||
movdqu %xmm5,48(%rdi)
|
||||
pxor %xmm0,%xmm4
|
||||
@ -823,7 +823,7 @@ gcm_gmult_clmul:
|
||||
movdqu 32(%rsi),%xmm4
|
||||
.byte 102,15,56,0,197
|
||||
movdqa %xmm0,%xmm1
|
||||
pshufd $78,%xmm0,%xmm3
|
||||
pshufd $0b01001110,%xmm0,%xmm3
|
||||
pxor %xmm0,%xmm3
|
||||
.byte 102,15,58,68,194,0
|
||||
.byte 102,15,58,68,202,17
|
||||
@ -875,20 +875,20 @@ gcm_ghash_clmul:
|
||||
movdqu 32(%rsi),%xmm7
|
||||
.byte 102,65,15,56,0,194
|
||||
|
||||
subq $16,%rcx
|
||||
subq $0x10,%rcx
|
||||
jz .Lodd_tail
|
||||
|
||||
movdqu 16(%rsi),%xmm6
|
||||
movl OPENSSL_ia32cap_P+4(%rip),%eax
|
||||
cmpq $48,%rcx
|
||||
cmpq $0x30,%rcx
|
||||
jb .Lskip4x
|
||||
|
||||
andl $71303168,%eax
|
||||
cmpl $4194304,%eax
|
||||
je .Lskip4x
|
||||
|
||||
subq $48,%rcx
|
||||
movq $11547335547999543296,%rax
|
||||
subq $0x30,%rcx
|
||||
movq $0xA040608020C0E000,%rax
|
||||
movdqu 48(%rsi),%xmm14
|
||||
movdqu 64(%rsi),%xmm15
|
||||
|
||||
@ -900,14 +900,14 @@ gcm_ghash_clmul:
|
||||
.byte 102,65,15,56,0,218
|
||||
.byte 102,69,15,56,0,218
|
||||
movdqa %xmm3,%xmm5
|
||||
pshufd $78,%xmm3,%xmm4
|
||||
pshufd $0b01001110,%xmm3,%xmm4
|
||||
pxor %xmm3,%xmm4
|
||||
.byte 102,15,58,68,218,0
|
||||
.byte 102,15,58,68,234,17
|
||||
.byte 102,15,58,68,231,0
|
||||
|
||||
movdqa %xmm11,%xmm13
|
||||
pshufd $78,%xmm11,%xmm12
|
||||
pshufd $0b01001110,%xmm11,%xmm12
|
||||
pxor %xmm11,%xmm12
|
||||
.byte 102,68,15,58,68,222,0
|
||||
.byte 102,68,15,58,68,238,17
|
||||
@ -922,12 +922,12 @@ gcm_ghash_clmul:
|
||||
.byte 102,69,15,56,0,218
|
||||
.byte 102,69,15,56,0,194
|
||||
movdqa %xmm11,%xmm13
|
||||
pshufd $78,%xmm11,%xmm12
|
||||
pshufd $0b01001110,%xmm11,%xmm12
|
||||
pxor %xmm8,%xmm0
|
||||
pxor %xmm11,%xmm12
|
||||
.byte 102,69,15,58,68,222,0
|
||||
movdqa %xmm0,%xmm1
|
||||
pshufd $78,%xmm0,%xmm8
|
||||
pshufd $0b01001110,%xmm0,%xmm8
|
||||
pxor %xmm0,%xmm8
|
||||
.byte 102,69,15,58,68,238,17
|
||||
.byte 102,68,15,58,68,231,0
|
||||
@ -935,7 +935,7 @@ gcm_ghash_clmul:
|
||||
xorps %xmm13,%xmm5
|
||||
|
||||
leaq 64(%rdx),%rdx
|
||||
subq $64,%rcx
|
||||
subq $0x40,%rcx
|
||||
jc .Ltail4x
|
||||
|
||||
jmp .Lmod4_loop
|
||||
@ -950,14 +950,14 @@ gcm_ghash_clmul:
|
||||
movdqu 32(%rdx),%xmm3
|
||||
movdqa %xmm11,%xmm13
|
||||
.byte 102,68,15,58,68,199,16
|
||||
pshufd $78,%xmm11,%xmm12
|
||||
pshufd $0b01001110,%xmm11,%xmm12
|
||||
xorps %xmm5,%xmm1
|
||||
pxor %xmm11,%xmm12
|
||||
.byte 102,65,15,56,0,218
|
||||
movups 32(%rsi),%xmm7
|
||||
xorps %xmm4,%xmm8
|
||||
.byte 102,68,15,58,68,218,0
|
||||
pshufd $78,%xmm3,%xmm4
|
||||
pshufd $0b01001110,%xmm3,%xmm4
|
||||
|
||||
pxor %xmm0,%xmm8
|
||||
movdqa %xmm3,%xmm5
|
||||
@ -1001,7 +1001,7 @@ gcm_ghash_clmul:
|
||||
|
||||
movdqa %xmm11,%xmm13
|
||||
pxor %xmm12,%xmm4
|
||||
pshufd $78,%xmm11,%xmm12
|
||||
pshufd $0b01001110,%xmm11,%xmm12
|
||||
pxor %xmm9,%xmm0
|
||||
pxor %xmm8,%xmm1
|
||||
pxor %xmm11,%xmm12
|
||||
@ -1011,14 +1011,14 @@ gcm_ghash_clmul:
|
||||
movdqa %xmm0,%xmm1
|
||||
.byte 102,69,15,58,68,238,17
|
||||
xorps %xmm11,%xmm3
|
||||
pshufd $78,%xmm0,%xmm8
|
||||
pshufd $0b01001110,%xmm0,%xmm8
|
||||
pxor %xmm0,%xmm8
|
||||
|
||||
.byte 102,68,15,58,68,231,0
|
||||
xorps %xmm13,%xmm5
|
||||
|
||||
leaq 64(%rdx),%rdx
|
||||
subq $64,%rcx
|
||||
subq $0x40,%rcx
|
||||
jnc .Lmod4_loop
|
||||
|
||||
.Ltail4x:
|
||||
@ -1062,10 +1062,10 @@ gcm_ghash_clmul:
|
||||
pxor %xmm4,%xmm0
|
||||
psrlq $1,%xmm0
|
||||
pxor %xmm1,%xmm0
|
||||
addq $64,%rcx
|
||||
addq $0x40,%rcx
|
||||
jz .Ldone
|
||||
movdqu 32(%rsi),%xmm7
|
||||
subq $16,%rcx
|
||||
subq $0x10,%rcx
|
||||
jz .Lodd_tail
|
||||
.Lskip4x:
|
||||
|
||||
@ -1080,7 +1080,7 @@ gcm_ghash_clmul:
|
||||
pxor %xmm8,%xmm0
|
||||
|
||||
movdqa %xmm3,%xmm5
|
||||
pshufd $78,%xmm3,%xmm4
|
||||
pshufd $0b01001110,%xmm3,%xmm4
|
||||
pxor %xmm3,%xmm4
|
||||
.byte 102,15,58,68,218,0
|
||||
.byte 102,15,58,68,234,17
|
||||
@ -1088,7 +1088,7 @@ gcm_ghash_clmul:
|
||||
|
||||
leaq 32(%rdx),%rdx
|
||||
nop
|
||||
subq $32,%rcx
|
||||
subq $0x20,%rcx
|
||||
jbe .Leven_tail
|
||||
nop
|
||||
jmp .Lmod_loop
|
||||
@ -1097,7 +1097,7 @@ gcm_ghash_clmul:
|
||||
.Lmod_loop:
|
||||
movdqa %xmm0,%xmm1
|
||||
movdqa %xmm4,%xmm8
|
||||
pshufd $78,%xmm0,%xmm4
|
||||
pshufd $0b01001110,%xmm0,%xmm4
|
||||
pxor %xmm0,%xmm4
|
||||
|
||||
.byte 102,15,58,68,198,0
|
||||
@ -1135,7 +1135,7 @@ gcm_ghash_clmul:
|
||||
pslldq $8,%xmm0
|
||||
psrldq $8,%xmm8
|
||||
pxor %xmm9,%xmm0
|
||||
pshufd $78,%xmm5,%xmm4
|
||||
pshufd $0b01001110,%xmm5,%xmm4
|
||||
pxor %xmm8,%xmm1
|
||||
pxor %xmm5,%xmm4
|
||||
|
||||
@ -1151,13 +1151,13 @@ gcm_ghash_clmul:
|
||||
.byte 102,15,58,68,231,0
|
||||
pxor %xmm1,%xmm0
|
||||
|
||||
subq $32,%rcx
|
||||
subq $0x20,%rcx
|
||||
ja .Lmod_loop
|
||||
|
||||
.Leven_tail:
|
||||
movdqa %xmm0,%xmm1
|
||||
movdqa %xmm4,%xmm8
|
||||
pshufd $78,%xmm0,%xmm4
|
||||
pshufd $0b01001110,%xmm0,%xmm4
|
||||
pxor %xmm0,%xmm4
|
||||
|
||||
.byte 102,15,58,68,198,0
|
||||
@ -1205,7 +1205,7 @@ gcm_ghash_clmul:
|
||||
.byte 102,69,15,56,0,194
|
||||
pxor %xmm8,%xmm0
|
||||
movdqa %xmm0,%xmm1
|
||||
pshufd $78,%xmm0,%xmm3
|
||||
pshufd $0b01001110,%xmm0,%xmm3
|
||||
pxor %xmm0,%xmm3
|
||||
.byte 102,15,58,68,194,0
|
||||
.byte 102,15,58,68,202,17
|
||||
|
@ -494,14 +494,14 @@ md5_block_asm_data_order:
|
||||
movl %ecx,%r11d
|
||||
addl %ecx,%ebx
|
||||
movl 0(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
xorl %edx,%r11d
|
||||
leal -198630844(%rax,%r10,1),%eax
|
||||
orl %ebx,%r11d
|
||||
xorl %ecx,%r11d
|
||||
addl %r11d,%eax
|
||||
movl 28(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $6,%eax
|
||||
xorl %ecx,%r11d
|
||||
addl %ebx,%eax
|
||||
@ -510,7 +510,7 @@ md5_block_asm_data_order:
|
||||
xorl %ebx,%r11d
|
||||
addl %r11d,%edx
|
||||
movl 56(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $10,%edx
|
||||
xorl %ebx,%r11d
|
||||
addl %eax,%edx
|
||||
@ -519,7 +519,7 @@ md5_block_asm_data_order:
|
||||
xorl %eax,%r11d
|
||||
addl %r11d,%ecx
|
||||
movl 20(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $15,%ecx
|
||||
xorl %eax,%r11d
|
||||
addl %edx,%ecx
|
||||
@ -528,7 +528,7 @@ md5_block_asm_data_order:
|
||||
xorl %edx,%r11d
|
||||
addl %r11d,%ebx
|
||||
movl 48(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $21,%ebx
|
||||
xorl %edx,%r11d
|
||||
addl %ecx,%ebx
|
||||
@ -537,7 +537,7 @@ md5_block_asm_data_order:
|
||||
xorl %ecx,%r11d
|
||||
addl %r11d,%eax
|
||||
movl 12(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $6,%eax
|
||||
xorl %ecx,%r11d
|
||||
addl %ebx,%eax
|
||||
@ -546,7 +546,7 @@ md5_block_asm_data_order:
|
||||
xorl %ebx,%r11d
|
||||
addl %r11d,%edx
|
||||
movl 40(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $10,%edx
|
||||
xorl %ebx,%r11d
|
||||
addl %eax,%edx
|
||||
@ -555,7 +555,7 @@ md5_block_asm_data_order:
|
||||
xorl %eax,%r11d
|
||||
addl %r11d,%ecx
|
||||
movl 4(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $15,%ecx
|
||||
xorl %eax,%r11d
|
||||
addl %edx,%ecx
|
||||
@ -564,7 +564,7 @@ md5_block_asm_data_order:
|
||||
xorl %edx,%r11d
|
||||
addl %r11d,%ebx
|
||||
movl 32(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $21,%ebx
|
||||
xorl %edx,%r11d
|
||||
addl %ecx,%ebx
|
||||
@ -573,7 +573,7 @@ md5_block_asm_data_order:
|
||||
xorl %ecx,%r11d
|
||||
addl %r11d,%eax
|
||||
movl 60(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $6,%eax
|
||||
xorl %ecx,%r11d
|
||||
addl %ebx,%eax
|
||||
@ -582,7 +582,7 @@ md5_block_asm_data_order:
|
||||
xorl %ebx,%r11d
|
||||
addl %r11d,%edx
|
||||
movl 24(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $10,%edx
|
||||
xorl %ebx,%r11d
|
||||
addl %eax,%edx
|
||||
@ -591,7 +591,7 @@ md5_block_asm_data_order:
|
||||
xorl %eax,%r11d
|
||||
addl %r11d,%ecx
|
||||
movl 52(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $15,%ecx
|
||||
xorl %eax,%r11d
|
||||
addl %edx,%ecx
|
||||
@ -600,7 +600,7 @@ md5_block_asm_data_order:
|
||||
xorl %edx,%r11d
|
||||
addl %r11d,%ebx
|
||||
movl 16(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $21,%ebx
|
||||
xorl %edx,%r11d
|
||||
addl %ecx,%ebx
|
||||
@ -609,7 +609,7 @@ md5_block_asm_data_order:
|
||||
xorl %ecx,%r11d
|
||||
addl %r11d,%eax
|
||||
movl 44(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $6,%eax
|
||||
xorl %ecx,%r11d
|
||||
addl %ebx,%eax
|
||||
@ -618,7 +618,7 @@ md5_block_asm_data_order:
|
||||
xorl %ebx,%r11d
|
||||
addl %r11d,%edx
|
||||
movl 8(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $10,%edx
|
||||
xorl %ebx,%r11d
|
||||
addl %eax,%edx
|
||||
@ -627,7 +627,7 @@ md5_block_asm_data_order:
|
||||
xorl %eax,%r11d
|
||||
addl %r11d,%ecx
|
||||
movl 36(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $15,%ecx
|
||||
xorl %eax,%r11d
|
||||
addl %edx,%ecx
|
||||
@ -636,7 +636,7 @@ md5_block_asm_data_order:
|
||||
xorl %edx,%r11d
|
||||
addl %r11d,%ebx
|
||||
movl 0(%rsi),%r10d
|
||||
movl $4294967295,%r11d
|
||||
movl $0xffffffff,%r11d
|
||||
roll $21,%ebx
|
||||
xorl %edx,%r11d
|
||||
addl %ecx,%ebx
|
||||
|
@ -462,48 +462,94 @@ rsaz_512_mul_gather4:
|
||||
pushq %r14
|
||||
pushq %r15
|
||||
|
||||
movl %r9d,%r9d
|
||||
subq $128+24,%rsp
|
||||
subq $152,%rsp
|
||||
.Lmul_gather4_body:
|
||||
movl 64(%rdx,%r9,4),%eax
|
||||
.byte 102,72,15,110,199
|
||||
movl (%rdx,%r9,4),%ebx
|
||||
.byte 102,72,15,110,201
|
||||
movq %r8,128(%rsp)
|
||||
movd %r9d,%xmm8
|
||||
movdqa .Linc+16(%rip),%xmm1
|
||||
movdqa .Linc(%rip),%xmm0
|
||||
|
||||
pshufd $0,%xmm8,%xmm8
|
||||
movdqa %xmm1,%xmm7
|
||||
movdqa %xmm1,%xmm2
|
||||
paddd %xmm0,%xmm1
|
||||
pcmpeqd %xmm8,%xmm0
|
||||
movdqa %xmm7,%xmm3
|
||||
paddd %xmm1,%xmm2
|
||||
pcmpeqd %xmm8,%xmm1
|
||||
movdqa %xmm7,%xmm4
|
||||
paddd %xmm2,%xmm3
|
||||
pcmpeqd %xmm8,%xmm2
|
||||
movdqa %xmm7,%xmm5
|
||||
paddd %xmm3,%xmm4
|
||||
pcmpeqd %xmm8,%xmm3
|
||||
movdqa %xmm7,%xmm6
|
||||
paddd %xmm4,%xmm5
|
||||
pcmpeqd %xmm8,%xmm4
|
||||
paddd %xmm5,%xmm6
|
||||
pcmpeqd %xmm8,%xmm5
|
||||
paddd %xmm6,%xmm7
|
||||
pcmpeqd %xmm8,%xmm6
|
||||
pcmpeqd %xmm8,%xmm7
|
||||
|
||||
movdqa 0(%rdx),%xmm8
|
||||
movdqa 16(%rdx),%xmm9
|
||||
movdqa 32(%rdx),%xmm10
|
||||
movdqa 48(%rdx),%xmm11
|
||||
pand %xmm0,%xmm8
|
||||
movdqa 64(%rdx),%xmm12
|
||||
pand %xmm1,%xmm9
|
||||
movdqa 80(%rdx),%xmm13
|
||||
pand %xmm2,%xmm10
|
||||
movdqa 96(%rdx),%xmm14
|
||||
pand %xmm3,%xmm11
|
||||
movdqa 112(%rdx),%xmm15
|
||||
leaq 128(%rdx),%rbp
|
||||
pand %xmm4,%xmm12
|
||||
pand %xmm5,%xmm13
|
||||
pand %xmm6,%xmm14
|
||||
pand %xmm7,%xmm15
|
||||
por %xmm10,%xmm8
|
||||
por %xmm11,%xmm9
|
||||
por %xmm12,%xmm8
|
||||
por %xmm13,%xmm9
|
||||
por %xmm14,%xmm8
|
||||
por %xmm15,%xmm9
|
||||
|
||||
por %xmm9,%xmm8
|
||||
pshufd $0x4e,%xmm8,%xmm9
|
||||
por %xmm9,%xmm8
|
||||
.byte 102,76,15,126,195
|
||||
|
||||
movq %r8,128(%rsp)
|
||||
movq %rdi,128+8(%rsp)
|
||||
movq %rcx,128+16(%rsp)
|
||||
|
||||
shlq $32,%rax
|
||||
orq %rax,%rbx
|
||||
movq (%rsi),%rax
|
||||
movq 8(%rsi),%rcx
|
||||
leaq 128(%rdx,%r9,4),%rbp
|
||||
mulq %rbx
|
||||
movq %rax,(%rsp)
|
||||
movq %rcx,%rax
|
||||
movq %rdx,%r8
|
||||
|
||||
mulq %rbx
|
||||
movd (%rbp),%xmm4
|
||||
addq %rax,%r8
|
||||
movq 16(%rsi),%rax
|
||||
movq %rdx,%r9
|
||||
adcq $0,%r9
|
||||
|
||||
mulq %rbx
|
||||
movd 64(%rbp),%xmm5
|
||||
addq %rax,%r9
|
||||
movq 24(%rsi),%rax
|
||||
movq %rdx,%r10
|
||||
adcq $0,%r10
|
||||
|
||||
mulq %rbx
|
||||
pslldq $4,%xmm5
|
||||
addq %rax,%r10
|
||||
movq 32(%rsi),%rax
|
||||
movq %rdx,%r11
|
||||
adcq $0,%r11
|
||||
|
||||
mulq %rbx
|
||||
por %xmm5,%xmm4
|
||||
addq %rax,%r11
|
||||
movq 40(%rsi),%rax
|
||||
movq %rdx,%r12
|
||||
@ -516,14 +562,12 @@ rsaz_512_mul_gather4:
|
||||
adcq $0,%r13
|
||||
|
||||
mulq %rbx
|
||||
leaq 128(%rbp),%rbp
|
||||
addq %rax,%r13
|
||||
movq 56(%rsi),%rax
|
||||
movq %rdx,%r14
|
||||
adcq $0,%r14
|
||||
|
||||
mulq %rbx
|
||||
.byte 102,72,15,126,227
|
||||
addq %rax,%r14
|
||||
movq (%rsi),%rax
|
||||
movq %rdx,%r15
|
||||
@ -535,6 +579,35 @@ rsaz_512_mul_gather4:
|
||||
|
||||
.align 32
|
||||
.Loop_mul_gather:
|
||||
movdqa 0(%rbp),%xmm8
|
||||
movdqa 16(%rbp),%xmm9
|
||||
movdqa 32(%rbp),%xmm10
|
||||
movdqa 48(%rbp),%xmm11
|
||||
pand %xmm0,%xmm8
|
||||
movdqa 64(%rbp),%xmm12
|
||||
pand %xmm1,%xmm9
|
||||
movdqa 80(%rbp),%xmm13
|
||||
pand %xmm2,%xmm10
|
||||
movdqa 96(%rbp),%xmm14
|
||||
pand %xmm3,%xmm11
|
||||
movdqa 112(%rbp),%xmm15
|
||||
leaq 128(%rbp),%rbp
|
||||
pand %xmm4,%xmm12
|
||||
pand %xmm5,%xmm13
|
||||
pand %xmm6,%xmm14
|
||||
pand %xmm7,%xmm15
|
||||
por %xmm10,%xmm8
|
||||
por %xmm11,%xmm9
|
||||
por %xmm12,%xmm8
|
||||
por %xmm13,%xmm9
|
||||
por %xmm14,%xmm8
|
||||
por %xmm15,%xmm9
|
||||
|
||||
por %xmm9,%xmm8
|
||||
pshufd $0x4e,%xmm8,%xmm9
|
||||
por %xmm9,%xmm8
|
||||
.byte 102,76,15,126,195
|
||||
|
||||
mulq %rbx
|
||||
addq %rax,%r8
|
||||
movq 8(%rsi),%rax
|
||||
@ -543,7 +616,6 @@ rsaz_512_mul_gather4:
|
||||
adcq $0,%r8
|
||||
|
||||
mulq %rbx
|
||||
movd (%rbp),%xmm4
|
||||
addq %rax,%r9
|
||||
movq 16(%rsi),%rax
|
||||
adcq $0,%rdx
|
||||
@ -552,7 +624,6 @@ rsaz_512_mul_gather4:
|
||||
adcq $0,%r9
|
||||
|
||||
mulq %rbx
|
||||
movd 64(%rbp),%xmm5
|
||||
addq %rax,%r10
|
||||
movq 24(%rsi),%rax
|
||||
adcq $0,%rdx
|
||||
@ -561,7 +632,6 @@ rsaz_512_mul_gather4:
|
||||
adcq $0,%r10
|
||||
|
||||
mulq %rbx
|
||||
pslldq $4,%xmm5
|
||||
addq %rax,%r11
|
||||
movq 32(%rsi),%rax
|
||||
adcq $0,%rdx
|
||||
@ -570,7 +640,6 @@ rsaz_512_mul_gather4:
|
||||
adcq $0,%r11
|
||||
|
||||
mulq %rbx
|
||||
por %xmm5,%xmm4
|
||||
addq %rax,%r12
|
||||
movq 40(%rsi),%rax
|
||||
adcq $0,%rdx
|
||||
@ -595,7 +664,6 @@ rsaz_512_mul_gather4:
|
||||
adcq $0,%r14
|
||||
|
||||
mulq %rbx
|
||||
.byte 102,72,15,126,227
|
||||
addq %rax,%r15
|
||||
movq (%rsi),%rax
|
||||
adcq $0,%rdx
|
||||
@ -603,7 +671,6 @@ rsaz_512_mul_gather4:
|
||||
movq %rdx,%r15
|
||||
adcq $0,%r15
|
||||
|
||||
leaq 128(%rbp),%rbp
|
||||
leaq 8(%rdi),%rdi
|
||||
|
||||
decl %ecx
|
||||
@ -618,8 +685,8 @@ rsaz_512_mul_gather4:
|
||||
movq %r14,48(%rdi)
|
||||
movq %r15,56(%rdi)
|
||||
|
||||
.byte 102,72,15,126,199
|
||||
.byte 102,72,15,126,205
|
||||
movq 128+8(%rsp),%rdi
|
||||
movq 128+16(%rsp),%rbp
|
||||
|
||||
movq (%rsp),%r8
|
||||
movq 8(%rsp),%r9
|
||||
@ -668,7 +735,7 @@ rsaz_512_mul_scatter4:
|
||||
movl %r9d,%r9d
|
||||
subq $128+24,%rsp
|
||||
.Lmul_scatter4_body:
|
||||
leaq (%r8,%r9,4),%r8
|
||||
leaq (%r8,%r9,8),%r8
|
||||
.byte 102,72,15,110,199
|
||||
.byte 102,72,15,110,202
|
||||
.byte 102,73,15,110,208
|
||||
@ -704,30 +771,14 @@ rsaz_512_mul_scatter4:
|
||||
|
||||
call __rsaz_512_subtract
|
||||
|
||||
movl %r8d,0(%rsi)
|
||||
shrq $32,%r8
|
||||
movl %r9d,128(%rsi)
|
||||
shrq $32,%r9
|
||||
movl %r10d,256(%rsi)
|
||||
shrq $32,%r10
|
||||
movl %r11d,384(%rsi)
|
||||
shrq $32,%r11
|
||||
movl %r12d,512(%rsi)
|
||||
shrq $32,%r12
|
||||
movl %r13d,640(%rsi)
|
||||
shrq $32,%r13
|
||||
movl %r14d,768(%rsi)
|
||||
shrq $32,%r14
|
||||
movl %r15d,896(%rsi)
|
||||
shrq $32,%r15
|
||||
movl %r8d,64(%rsi)
|
||||
movl %r9d,192(%rsi)
|
||||
movl %r10d,320(%rsi)
|
||||
movl %r11d,448(%rsi)
|
||||
movl %r12d,576(%rsi)
|
||||
movl %r13d,704(%rsi)
|
||||
movl %r14d,832(%rsi)
|
||||
movl %r15d,960(%rsi)
|
||||
movq %r8,0(%rsi)
|
||||
movq %r9,128(%rsi)
|
||||
movq %r10,256(%rsi)
|
||||
movq %r11,384(%rsi)
|
||||
movq %r12,512(%rsi)
|
||||
movq %r13,640(%rsi)
|
||||
movq %r14,768(%rsi)
|
||||
movq %r15,896(%rsi)
|
||||
|
||||
leaq 128+24+48(%rsp),%rax
|
||||
movq -48(%rax),%r15
|
||||
@ -1080,16 +1131,14 @@ __rsaz_512_mul:
|
||||
.type rsaz_512_scatter4,@function
|
||||
.align 16
|
||||
rsaz_512_scatter4:
|
||||
leaq (%rdi,%rdx,4),%rdi
|
||||
leaq (%rdi,%rdx,8),%rdi
|
||||
movl $8,%r9d
|
||||
jmp .Loop_scatter
|
||||
.align 16
|
||||
.Loop_scatter:
|
||||
movq (%rsi),%rax
|
||||
leaq 8(%rsi),%rsi
|
||||
movl %eax,(%rdi)
|
||||
shrq $32,%rax
|
||||
movl %eax,64(%rdi)
|
||||
movq %rax,(%rdi)
|
||||
leaq 128(%rdi),%rdi
|
||||
decl %r9d
|
||||
jnz .Loop_scatter
|
||||
@ -1100,19 +1149,72 @@ rsaz_512_scatter4:
|
||||
.type rsaz_512_gather4,@function
|
||||
.align 16
|
||||
rsaz_512_gather4:
|
||||
leaq (%rsi,%rdx,4),%rsi
|
||||
movd %edx,%xmm8
|
||||
movdqa .Linc+16(%rip),%xmm1
|
||||
movdqa .Linc(%rip),%xmm0
|
||||
|
||||
pshufd $0,%xmm8,%xmm8
|
||||
movdqa %xmm1,%xmm7
|
||||
movdqa %xmm1,%xmm2
|
||||
paddd %xmm0,%xmm1
|
||||
pcmpeqd %xmm8,%xmm0
|
||||
movdqa %xmm7,%xmm3
|
||||
paddd %xmm1,%xmm2
|
||||
pcmpeqd %xmm8,%xmm1
|
||||
movdqa %xmm7,%xmm4
|
||||
paddd %xmm2,%xmm3
|
||||
pcmpeqd %xmm8,%xmm2
|
||||
movdqa %xmm7,%xmm5
|
||||
paddd %xmm3,%xmm4
|
||||
pcmpeqd %xmm8,%xmm3
|
||||
movdqa %xmm7,%xmm6
|
||||
paddd %xmm4,%xmm5
|
||||
pcmpeqd %xmm8,%xmm4
|
||||
paddd %xmm5,%xmm6
|
||||
pcmpeqd %xmm8,%xmm5
|
||||
paddd %xmm6,%xmm7
|
||||
pcmpeqd %xmm8,%xmm6
|
||||
pcmpeqd %xmm8,%xmm7
|
||||
movl $8,%r9d
|
||||
jmp .Loop_gather
|
||||
.align 16
|
||||
.Loop_gather:
|
||||
movl (%rsi),%eax
|
||||
movl 64(%rsi),%r8d
|
||||
movdqa 0(%rsi),%xmm8
|
||||
movdqa 16(%rsi),%xmm9
|
||||
movdqa 32(%rsi),%xmm10
|
||||
movdqa 48(%rsi),%xmm11
|
||||
pand %xmm0,%xmm8
|
||||
movdqa 64(%rsi),%xmm12
|
||||
pand %xmm1,%xmm9
|
||||
movdqa 80(%rsi),%xmm13
|
||||
pand %xmm2,%xmm10
|
||||
movdqa 96(%rsi),%xmm14
|
||||
pand %xmm3,%xmm11
|
||||
movdqa 112(%rsi),%xmm15
|
||||
leaq 128(%rsi),%rsi
|
||||
shlq $32,%r8
|
||||
orq %r8,%rax
|
||||
movq %rax,(%rdi)
|
||||
pand %xmm4,%xmm12
|
||||
pand %xmm5,%xmm13
|
||||
pand %xmm6,%xmm14
|
||||
pand %xmm7,%xmm15
|
||||
por %xmm10,%xmm8
|
||||
por %xmm11,%xmm9
|
||||
por %xmm12,%xmm8
|
||||
por %xmm13,%xmm9
|
||||
por %xmm14,%xmm8
|
||||
por %xmm15,%xmm9
|
||||
|
||||
por %xmm9,%xmm8
|
||||
pshufd $0x4e,%xmm8,%xmm9
|
||||
por %xmm9,%xmm8
|
||||
movq %xmm8,(%rdi)
|
||||
leaq 8(%rdi),%rdi
|
||||
decl %r9d
|
||||
jnz .Loop_gather
|
||||
.byte 0xf3,0xc3
|
||||
.LSEH_end_rsaz_512_gather4:
|
||||
.size rsaz_512_gather4,.-rsaz_512_gather4
|
||||
|
||||
.align 64
|
||||
.Linc:
|
||||
.long 0,0, 1,1
|
||||
.long 2,2, 2,2
|
||||
|
@ -2600,10 +2600,10 @@ _shaext_shortcut:
|
||||
punpcklqdq %xmm5,%xmm0
|
||||
punpckhqdq %xmm5,%xmm8
|
||||
|
||||
pshufd $63,%xmm7,%xmm1
|
||||
pshufd $127,%xmm7,%xmm9
|
||||
pshufd $27,%xmm0,%xmm0
|
||||
pshufd $27,%xmm8,%xmm8
|
||||
pshufd $0b00111111,%xmm7,%xmm1
|
||||
pshufd $0b01111111,%xmm7,%xmm9
|
||||
pshufd $0b00011011,%xmm0,%xmm0
|
||||
pshufd $0b00011011,%xmm8,%xmm8
|
||||
jmp .Loop_shaext
|
||||
|
||||
.align 32
|
||||
@ -2858,8 +2858,8 @@ _shaext_shortcut:
|
||||
.byte 69,15,58,204,193,3
|
||||
.byte 69,15,56,200,214
|
||||
|
||||
pshufd $0,%xmm6,%xmm11
|
||||
pshufd $85,%xmm6,%xmm12
|
||||
pshufd $0x00,%xmm6,%xmm11
|
||||
pshufd $0x55,%xmm6,%xmm12
|
||||
movdqa %xmm6,%xmm7
|
||||
pcmpgtd %xmm4,%xmm11
|
||||
pcmpgtd %xmm4,%xmm12
|
||||
@ -2889,8 +2889,8 @@ _shaext_shortcut:
|
||||
|
||||
movl 280(%rsp),%edx
|
||||
|
||||
pshufd $27,%xmm0,%xmm0
|
||||
pshufd $27,%xmm8,%xmm8
|
||||
pshufd $0b00011011,%xmm0,%xmm0
|
||||
pshufd $0b00011011,%xmm8,%xmm8
|
||||
|
||||
movdqa %xmm0,%xmm6
|
||||
punpckldq %xmm8,%xmm0
|
||||
|
@ -1241,9 +1241,9 @@ _shaext_shortcut:
|
||||
movdqa K_XX_XX+160(%rip),%xmm3
|
||||
|
||||
movdqu (%rsi),%xmm4
|
||||
pshufd $27,%xmm0,%xmm0
|
||||
pshufd $0b00011011,%xmm0,%xmm0
|
||||
movdqu 16(%rsi),%xmm5
|
||||
pshufd $27,%xmm1,%xmm1
|
||||
pshufd $0b00011011,%xmm1,%xmm1
|
||||
movdqu 32(%rsi),%xmm6
|
||||
.byte 102,15,56,0,227
|
||||
movdqu 48(%rsi),%xmm7
|
||||
@ -1393,8 +1393,8 @@ _shaext_shortcut:
|
||||
|
||||
jnz .Loop_shaext
|
||||
|
||||
pshufd $27,%xmm0,%xmm0
|
||||
pshufd $27,%xmm1,%xmm1
|
||||
pshufd $0b00011011,%xmm0,%xmm0
|
||||
pshufd $0b00011011,%xmm1,%xmm1
|
||||
movdqu %xmm0,(%rdi)
|
||||
movd %xmm1,16(%rdi)
|
||||
.byte 0xf3,0xc3
|
||||
|
@ -2678,10 +2678,10 @@ _shaext_shortcut:
|
||||
punpckhqdq %xmm8,%xmm14
|
||||
punpckhqdq %xmm10,%xmm15
|
||||
|
||||
pshufd $27,%xmm12,%xmm12
|
||||
pshufd $27,%xmm13,%xmm13
|
||||
pshufd $27,%xmm14,%xmm14
|
||||
pshufd $27,%xmm15,%xmm15
|
||||
pshufd $0b00011011,%xmm12,%xmm12
|
||||
pshufd $0b00011011,%xmm13,%xmm13
|
||||
pshufd $0b00011011,%xmm14,%xmm14
|
||||
pshufd $0b00011011,%xmm15,%xmm15
|
||||
jmp .Loop_shaext
|
||||
|
||||
.align 32
|
||||
@ -2713,11 +2713,11 @@ _shaext_shortcut:
|
||||
movdqa %xmm2,%xmm0
|
||||
movdqa %xmm15,112(%rsp)
|
||||
.byte 69,15,56,203,254
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
pxor %xmm12,%xmm4
|
||||
movdqa %xmm12,64(%rsp)
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
pxor %xmm14,%xmm8
|
||||
movdqa %xmm14,96(%rsp)
|
||||
movdqa 16-128(%rbp),%xmm1
|
||||
@ -2735,11 +2735,11 @@ _shaext_shortcut:
|
||||
.byte 102,68,15,56,0,211
|
||||
prefetcht0 127(%r9)
|
||||
.byte 69,15,56,203,254
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
.byte 102,68,15,56,0,219
|
||||
.byte 15,56,204,229
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 32-128(%rbp),%xmm1
|
||||
paddd %xmm6,%xmm1
|
||||
.byte 69,15,56,203,247
|
||||
@ -2752,14 +2752,14 @@ _shaext_shortcut:
|
||||
movdqa %xmm2,%xmm0
|
||||
movdqa %xmm7,%xmm3
|
||||
.byte 69,15,56,203,254
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
.byte 102,15,58,15,222,4
|
||||
paddd %xmm3,%xmm4
|
||||
movdqa %xmm11,%xmm3
|
||||
.byte 102,65,15,58,15,218,4
|
||||
.byte 15,56,204,238
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 48-128(%rbp),%xmm1
|
||||
paddd %xmm7,%xmm1
|
||||
.byte 69,15,56,203,247
|
||||
@ -2776,13 +2776,13 @@ _shaext_shortcut:
|
||||
.byte 102,15,58,15,223,4
|
||||
.byte 69,15,56,203,254
|
||||
.byte 69,15,56,205,195
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
paddd %xmm3,%xmm5
|
||||
movdqa %xmm8,%xmm3
|
||||
.byte 102,65,15,58,15,219,4
|
||||
.byte 15,56,204,247
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 64-128(%rbp),%xmm1
|
||||
paddd %xmm4,%xmm1
|
||||
.byte 69,15,56,203,247
|
||||
@ -2798,13 +2798,13 @@ _shaext_shortcut:
|
||||
.byte 102,15,58,15,220,4
|
||||
.byte 69,15,56,203,254
|
||||
.byte 69,15,56,205,200
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
paddd %xmm3,%xmm6
|
||||
movdqa %xmm9,%xmm3
|
||||
.byte 102,65,15,58,15,216,4
|
||||
.byte 15,56,204,252
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 80-128(%rbp),%xmm1
|
||||
paddd %xmm5,%xmm1
|
||||
.byte 69,15,56,203,247
|
||||
@ -2820,13 +2820,13 @@ _shaext_shortcut:
|
||||
.byte 102,15,58,15,221,4
|
||||
.byte 69,15,56,203,254
|
||||
.byte 69,15,56,205,209
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
paddd %xmm3,%xmm7
|
||||
movdqa %xmm10,%xmm3
|
||||
.byte 102,65,15,58,15,217,4
|
||||
.byte 15,56,204,229
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 96-128(%rbp),%xmm1
|
||||
paddd %xmm6,%xmm1
|
||||
.byte 69,15,56,203,247
|
||||
@ -2842,13 +2842,13 @@ _shaext_shortcut:
|
||||
.byte 102,15,58,15,222,4
|
||||
.byte 69,15,56,203,254
|
||||
.byte 69,15,56,205,218
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
paddd %xmm3,%xmm4
|
||||
movdqa %xmm11,%xmm3
|
||||
.byte 102,65,15,58,15,218,4
|
||||
.byte 15,56,204,238
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 112-128(%rbp),%xmm1
|
||||
paddd %xmm7,%xmm1
|
||||
.byte 69,15,56,203,247
|
||||
@ -2864,13 +2864,13 @@ _shaext_shortcut:
|
||||
.byte 102,15,58,15,223,4
|
||||
.byte 69,15,56,203,254
|
||||
.byte 69,15,56,205,195
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
paddd %xmm3,%xmm5
|
||||
movdqa %xmm8,%xmm3
|
||||
.byte 102,65,15,58,15,219,4
|
||||
.byte 15,56,204,247
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 128-128(%rbp),%xmm1
|
||||
paddd %xmm4,%xmm1
|
||||
.byte 69,15,56,203,247
|
||||
@ -2886,13 +2886,13 @@ _shaext_shortcut:
|
||||
.byte 102,15,58,15,220,4
|
||||
.byte 69,15,56,203,254
|
||||
.byte 69,15,56,205,200
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
paddd %xmm3,%xmm6
|
||||
movdqa %xmm9,%xmm3
|
||||
.byte 102,65,15,58,15,216,4
|
||||
.byte 15,56,204,252
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 144-128(%rbp),%xmm1
|
||||
paddd %xmm5,%xmm1
|
||||
.byte 69,15,56,203,247
|
||||
@ -2908,13 +2908,13 @@ _shaext_shortcut:
|
||||
.byte 102,15,58,15,221,4
|
||||
.byte 69,15,56,203,254
|
||||
.byte 69,15,56,205,209
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
paddd %xmm3,%xmm7
|
||||
movdqa %xmm10,%xmm3
|
||||
.byte 102,65,15,58,15,217,4
|
||||
.byte 15,56,204,229
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 160-128(%rbp),%xmm1
|
||||
paddd %xmm6,%xmm1
|
||||
.byte 69,15,56,203,247
|
||||
@ -2930,13 +2930,13 @@ _shaext_shortcut:
|
||||
.byte 102,15,58,15,222,4
|
||||
.byte 69,15,56,203,254
|
||||
.byte 69,15,56,205,218
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
paddd %xmm3,%xmm4
|
||||
movdqa %xmm11,%xmm3
|
||||
.byte 102,65,15,58,15,218,4
|
||||
.byte 15,56,204,238
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 176-128(%rbp),%xmm1
|
||||
paddd %xmm7,%xmm1
|
||||
.byte 69,15,56,203,247
|
||||
@ -2952,13 +2952,13 @@ _shaext_shortcut:
|
||||
.byte 102,15,58,15,223,4
|
||||
.byte 69,15,56,203,254
|
||||
.byte 69,15,56,205,195
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
paddd %xmm3,%xmm5
|
||||
movdqa %xmm8,%xmm3
|
||||
.byte 102,65,15,58,15,219,4
|
||||
.byte 15,56,204,247
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 192-128(%rbp),%xmm1
|
||||
paddd %xmm4,%xmm1
|
||||
.byte 69,15,56,203,247
|
||||
@ -2974,13 +2974,13 @@ _shaext_shortcut:
|
||||
.byte 102,15,58,15,220,4
|
||||
.byte 69,15,56,203,254
|
||||
.byte 69,15,56,205,200
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
paddd %xmm3,%xmm6
|
||||
movdqa %xmm9,%xmm3
|
||||
.byte 102,65,15,58,15,216,4
|
||||
.byte 15,56,204,252
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 208-128(%rbp),%xmm1
|
||||
paddd %xmm5,%xmm1
|
||||
.byte 69,15,56,203,247
|
||||
@ -2996,13 +2996,13 @@ _shaext_shortcut:
|
||||
.byte 102,15,58,15,221,4
|
||||
.byte 69,15,56,203,254
|
||||
.byte 69,15,56,205,209
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
paddd %xmm3,%xmm7
|
||||
movdqa %xmm10,%xmm3
|
||||
.byte 102,65,15,58,15,217,4
|
||||
nop
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 224-128(%rbp),%xmm1
|
||||
paddd %xmm6,%xmm1
|
||||
.byte 69,15,56,203,247
|
||||
@ -3019,13 +3019,13 @@ _shaext_shortcut:
|
||||
pxor %xmm6,%xmm6
|
||||
.byte 69,15,56,203,254
|
||||
.byte 69,15,56,205,218
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
movdqa 240-128(%rbp),%xmm1
|
||||
paddd %xmm7,%xmm1
|
||||
movq (%rbx),%xmm7
|
||||
nop
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
movdqa 240-128(%rbp),%xmm2
|
||||
paddd %xmm11,%xmm2
|
||||
.byte 69,15,56,203,247
|
||||
@ -3035,17 +3035,17 @@ _shaext_shortcut:
|
||||
cmovgeq %rsp,%r8
|
||||
cmpl 4(%rbx),%ecx
|
||||
cmovgeq %rsp,%r9
|
||||
pshufd $0,%xmm7,%xmm9
|
||||
pshufd $0x00,%xmm7,%xmm9
|
||||
.byte 69,15,56,203,236
|
||||
movdqa %xmm2,%xmm0
|
||||
pshufd $85,%xmm7,%xmm10
|
||||
pshufd $0x55,%xmm7,%xmm10
|
||||
movdqa %xmm7,%xmm11
|
||||
.byte 69,15,56,203,254
|
||||
pshufd $14,%xmm1,%xmm0
|
||||
pshufd $0x0e,%xmm1,%xmm0
|
||||
pcmpgtd %xmm6,%xmm9
|
||||
pcmpgtd %xmm6,%xmm10
|
||||
.byte 69,15,56,203,229
|
||||
pshufd $14,%xmm2,%xmm0
|
||||
pshufd $0x0e,%xmm2,%xmm0
|
||||
pcmpgtd %xmm6,%xmm11
|
||||
movdqa K256_shaext-16(%rip),%xmm3
|
||||
.byte 69,15,56,203,247
|
||||
@ -3067,10 +3067,10 @@ _shaext_shortcut:
|
||||
|
||||
movl 280(%rsp),%edx
|
||||
|
||||
pshufd $27,%xmm12,%xmm12
|
||||
pshufd $27,%xmm13,%xmm13
|
||||
pshufd $27,%xmm14,%xmm14
|
||||
pshufd $27,%xmm15,%xmm15
|
||||
pshufd $0b00011011,%xmm12,%xmm12
|
||||
pshufd $0b00011011,%xmm13,%xmm13
|
||||
pshufd $0b00011011,%xmm14,%xmm14
|
||||
pshufd $0b00011011,%xmm15,%xmm15
|
||||
|
||||
movdqa %xmm12,%xmm5
|
||||
movdqa %xmm13,%xmm6
|
||||
|
@ -1755,9 +1755,9 @@ _shaext_shortcut:
|
||||
movdqu 16(%rdi),%xmm2
|
||||
movdqa 512-128(%rcx),%xmm7
|
||||
|
||||
pshufd $27,%xmm1,%xmm0
|
||||
pshufd $177,%xmm1,%xmm1
|
||||
pshufd $27,%xmm2,%xmm2
|
||||
pshufd $0x1b,%xmm1,%xmm0
|
||||
pshufd $0xb1,%xmm1,%xmm1
|
||||
pshufd $0x1b,%xmm2,%xmm2
|
||||
movdqa %xmm7,%xmm8
|
||||
.byte 102,15,58,15,202,8
|
||||
punpcklqdq %xmm0,%xmm2
|
||||
@ -1776,7 +1776,7 @@ _shaext_shortcut:
|
||||
.byte 102,15,56,0,231
|
||||
movdqa %xmm2,%xmm10
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
nop
|
||||
movdqa %xmm1,%xmm9
|
||||
.byte 15,56,203,202
|
||||
@ -1785,7 +1785,7 @@ _shaext_shortcut:
|
||||
paddd %xmm4,%xmm0
|
||||
.byte 102,15,56,0,239
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
leaq 64(%rsi),%rsi
|
||||
.byte 15,56,204,220
|
||||
.byte 15,56,203,202
|
||||
@ -1794,7 +1794,7 @@ _shaext_shortcut:
|
||||
paddd %xmm5,%xmm0
|
||||
.byte 102,15,56,0,247
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
movdqa %xmm6,%xmm7
|
||||
.byte 102,15,58,15,253,4
|
||||
nop
|
||||
@ -1806,7 +1806,7 @@ _shaext_shortcut:
|
||||
paddd %xmm6,%xmm0
|
||||
.byte 15,56,205,222
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
movdqa %xmm3,%xmm7
|
||||
.byte 102,15,58,15,254,4
|
||||
nop
|
||||
@ -1817,7 +1817,7 @@ _shaext_shortcut:
|
||||
paddd %xmm3,%xmm0
|
||||
.byte 15,56,205,227
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
movdqa %xmm4,%xmm7
|
||||
.byte 102,15,58,15,251,4
|
||||
nop
|
||||
@ -1828,7 +1828,7 @@ _shaext_shortcut:
|
||||
paddd %xmm4,%xmm0
|
||||
.byte 15,56,205,236
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
movdqa %xmm5,%xmm7
|
||||
.byte 102,15,58,15,252,4
|
||||
nop
|
||||
@ -1839,7 +1839,7 @@ _shaext_shortcut:
|
||||
paddd %xmm5,%xmm0
|
||||
.byte 15,56,205,245
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
movdqa %xmm6,%xmm7
|
||||
.byte 102,15,58,15,253,4
|
||||
nop
|
||||
@ -1850,7 +1850,7 @@ _shaext_shortcut:
|
||||
paddd %xmm6,%xmm0
|
||||
.byte 15,56,205,222
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
movdqa %xmm3,%xmm7
|
||||
.byte 102,15,58,15,254,4
|
||||
nop
|
||||
@ -1861,7 +1861,7 @@ _shaext_shortcut:
|
||||
paddd %xmm3,%xmm0
|
||||
.byte 15,56,205,227
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
movdqa %xmm4,%xmm7
|
||||
.byte 102,15,58,15,251,4
|
||||
nop
|
||||
@ -1872,7 +1872,7 @@ _shaext_shortcut:
|
||||
paddd %xmm4,%xmm0
|
||||
.byte 15,56,205,236
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
movdqa %xmm5,%xmm7
|
||||
.byte 102,15,58,15,252,4
|
||||
nop
|
||||
@ -1883,7 +1883,7 @@ _shaext_shortcut:
|
||||
paddd %xmm5,%xmm0
|
||||
.byte 15,56,205,245
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
movdqa %xmm6,%xmm7
|
||||
.byte 102,15,58,15,253,4
|
||||
nop
|
||||
@ -1894,7 +1894,7 @@ _shaext_shortcut:
|
||||
paddd %xmm6,%xmm0
|
||||
.byte 15,56,205,222
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
movdqa %xmm3,%xmm7
|
||||
.byte 102,15,58,15,254,4
|
||||
nop
|
||||
@ -1905,7 +1905,7 @@ _shaext_shortcut:
|
||||
paddd %xmm3,%xmm0
|
||||
.byte 15,56,205,227
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
movdqa %xmm4,%xmm7
|
||||
.byte 102,15,58,15,251,4
|
||||
nop
|
||||
@ -1916,7 +1916,7 @@ _shaext_shortcut:
|
||||
paddd %xmm4,%xmm0
|
||||
.byte 15,56,205,236
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
movdqa %xmm5,%xmm7
|
||||
.byte 102,15,58,15,252,4
|
||||
.byte 15,56,203,202
|
||||
@ -1925,7 +1925,7 @@ _shaext_shortcut:
|
||||
movdqa 448-128(%rcx),%xmm0
|
||||
paddd %xmm5,%xmm0
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
.byte 15,56,205,245
|
||||
movdqa %xmm8,%xmm7
|
||||
.byte 15,56,203,202
|
||||
@ -1934,7 +1934,7 @@ _shaext_shortcut:
|
||||
paddd %xmm6,%xmm0
|
||||
nop
|
||||
.byte 15,56,203,209
|
||||
pshufd $14,%xmm0,%xmm0
|
||||
pshufd $0x0e,%xmm0,%xmm0
|
||||
decq %rdx
|
||||
nop
|
||||
.byte 15,56,203,202
|
||||
@ -1943,9 +1943,9 @@ _shaext_shortcut:
|
||||
paddd %xmm9,%xmm1
|
||||
jnz .Loop_shaext
|
||||
|
||||
pshufd $177,%xmm2,%xmm2
|
||||
pshufd $27,%xmm1,%xmm7
|
||||
pshufd $177,%xmm1,%xmm1
|
||||
pshufd $0xb1,%xmm2,%xmm2
|
||||
pshufd $0x1b,%xmm1,%xmm7
|
||||
pshufd $0xb1,%xmm1,%xmm1
|
||||
punpckhqdq %xmm2,%xmm1
|
||||
.byte 102,15,58,15,215,8
|
||||
|
||||
|
@ -61,7 +61,7 @@ _vpaes_encrypt_core:
|
||||
addq $16,%r11
|
||||
pxor %xmm0,%xmm3
|
||||
.byte 102,15,56,0,193
|
||||
andq $48,%r11
|
||||
andq $0x30,%r11
|
||||
subq $1,%rax
|
||||
pxor %xmm3,%xmm0
|
||||
|
||||
@ -121,10 +121,10 @@ _vpaes_decrypt_core:
|
||||
pand %xmm9,%xmm0
|
||||
.byte 102,15,56,0,208
|
||||
movdqa .Lk_dipt+16(%rip),%xmm0
|
||||
xorq $48,%r11
|
||||
xorq $0x30,%r11
|
||||
leaq .Lk_dsbd(%rip),%r10
|
||||
.byte 102,15,56,0,193
|
||||
andq $48,%r11
|
||||
andq $0x30,%r11
|
||||
pxor %xmm5,%xmm2
|
||||
movdqa .Lk_mc_forward+48(%rip),%xmm5
|
||||
pxor %xmm2,%xmm0
|
||||
@ -243,7 +243,7 @@ _vpaes_schedule_core:
|
||||
movdqa (%r8,%r10,1),%xmm1
|
||||
.byte 102,15,56,0,217
|
||||
movdqu %xmm3,(%rdx)
|
||||
xorq $48,%r8
|
||||
xorq $0x30,%r8
|
||||
|
||||
.Lschedule_go:
|
||||
cmpl $192,%esi
|
||||
@ -333,7 +333,7 @@ _vpaes_schedule_core:
|
||||
call _vpaes_schedule_mangle
|
||||
|
||||
|
||||
pshufd $255,%xmm0,%xmm0
|
||||
pshufd $0xFF,%xmm0,%xmm0
|
||||
movdqa %xmm7,%xmm5
|
||||
movdqa %xmm6,%xmm7
|
||||
call _vpaes_schedule_low_round
|
||||
@ -400,8 +400,8 @@ _vpaes_schedule_core:
|
||||
.type _vpaes_schedule_192_smear,@function
|
||||
.align 16
|
||||
_vpaes_schedule_192_smear:
|
||||
pshufd $128,%xmm6,%xmm1
|
||||
pshufd $254,%xmm7,%xmm0
|
||||
pshufd $0x80,%xmm6,%xmm1
|
||||
pshufd $0xFE,%xmm7,%xmm0
|
||||
pxor %xmm1,%xmm6
|
||||
pxor %xmm1,%xmm1
|
||||
pxor %xmm0,%xmm6
|
||||
@ -438,7 +438,7 @@ _vpaes_schedule_round:
|
||||
pxor %xmm1,%xmm7
|
||||
|
||||
|
||||
pshufd $255,%xmm0,%xmm0
|
||||
pshufd $0xFF,%xmm0,%xmm0
|
||||
.byte 102,15,58,15,192,1
|
||||
|
||||
|
||||
@ -597,7 +597,7 @@ _vpaes_schedule_mangle:
|
||||
movdqa (%r8,%r10,1),%xmm1
|
||||
.byte 102,15,56,0,217
|
||||
addq $-16,%r8
|
||||
andq $48,%r8
|
||||
andq $0x30,%r8
|
||||
movdqu %xmm3,(%rdx)
|
||||
.byte 0xf3,0xc3
|
||||
.size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle
|
||||
@ -615,7 +615,7 @@ vpaes_set_encrypt_key:
|
||||
movl %eax,240(%rdx)
|
||||
|
||||
movl $0,%ecx
|
||||
movl $48,%r8d
|
||||
movl $0x30,%r8d
|
||||
call _vpaes_schedule_core
|
||||
xorl %eax,%eax
|
||||
.byte 0xf3,0xc3
|
||||
|
@ -243,7 +243,7 @@ bn_GF2m_mul_2x2:
|
||||
movq %rcx,56(%rsp)
|
||||
movq %r8,64(%rsp)
|
||||
|
||||
movq $15,%r8
|
||||
movq $0xf,%r8
|
||||
movq %rsi,%rax
|
||||
movq %rcx,%rbp
|
||||
call _mul_1x1
|
||||
|
@ -634,20 +634,20 @@ bn_sqr8x_mont:
|
||||
|
||||
|
||||
|
||||
leaq -64(%rsp,%r9,4),%r11
|
||||
leaq -64(%rsp,%r9,2),%r11
|
||||
movq (%r8),%r8
|
||||
subq %rsi,%r11
|
||||
andq $4095,%r11
|
||||
cmpq %r11,%r10
|
||||
jb .Lsqr8x_sp_alt
|
||||
subq %r11,%rsp
|
||||
leaq -64(%rsp,%r9,4),%rsp
|
||||
leaq -64(%rsp,%r9,2),%rsp
|
||||
jmp .Lsqr8x_sp_done
|
||||
|
||||
.align 32
|
||||
.Lsqr8x_sp_alt:
|
||||
leaq 4096-64(,%r9,4),%r10
|
||||
leaq -64(%rsp,%r9,4),%rsp
|
||||
leaq 4096-64(,%r9,2),%r10
|
||||
leaq -64(%rsp,%r9,2),%rsp
|
||||
subq %r10,%r11
|
||||
movq $0,%r10
|
||||
cmovcq %r10,%r11
|
||||
@ -657,58 +657,80 @@ bn_sqr8x_mont:
|
||||
movq %r9,%r10
|
||||
negq %r9
|
||||
|
||||
leaq 64(%rsp,%r9,2),%r11
|
||||
movq %r8,32(%rsp)
|
||||
movq %rax,40(%rsp)
|
||||
.Lsqr8x_body:
|
||||
|
||||
movq %r9,%rbp
|
||||
.byte 102,73,15,110,211
|
||||
shrq $3+2,%rbp
|
||||
movl OPENSSL_ia32cap_P+8(%rip),%eax
|
||||
jmp .Lsqr8x_copy_n
|
||||
|
||||
.align 32
|
||||
.Lsqr8x_copy_n:
|
||||
movq 0(%rcx),%xmm0
|
||||
movq 8(%rcx),%xmm1
|
||||
movq 16(%rcx),%xmm3
|
||||
movq 24(%rcx),%xmm4
|
||||
leaq 32(%rcx),%rcx
|
||||
movdqa %xmm0,0(%r11)
|
||||
movdqa %xmm1,16(%r11)
|
||||
movdqa %xmm3,32(%r11)
|
||||
movdqa %xmm4,48(%r11)
|
||||
leaq 64(%r11),%r11
|
||||
decq %rbp
|
||||
jnz .Lsqr8x_copy_n
|
||||
|
||||
.byte 102,72,15,110,209
|
||||
pxor %xmm0,%xmm0
|
||||
.byte 102,72,15,110,207
|
||||
.byte 102,73,15,110,218
|
||||
call bn_sqr8x_internal
|
||||
|
||||
pxor %xmm0,%xmm0
|
||||
leaq 48(%rsp),%rax
|
||||
leaq 64(%rsp,%r9,2),%rdx
|
||||
shrq $3+2,%r9
|
||||
movq 40(%rsp),%rsi
|
||||
jmp .Lsqr8x_zero
|
||||
|
||||
|
||||
|
||||
leaq (%rdi,%r9,1),%rbx
|
||||
movq %r9,%rcx
|
||||
movq %r9,%rdx
|
||||
.byte 102,72,15,126,207
|
||||
sarq $3+2,%rcx
|
||||
jmp .Lsqr8x_sub
|
||||
|
||||
.align 32
|
||||
.Lsqr8x_zero:
|
||||
movdqa %xmm0,0(%rax)
|
||||
movdqa %xmm0,16(%rax)
|
||||
movdqa %xmm0,32(%rax)
|
||||
movdqa %xmm0,48(%rax)
|
||||
leaq 64(%rax),%rax
|
||||
movdqa %xmm0,0(%rdx)
|
||||
movdqa %xmm0,16(%rdx)
|
||||
movdqa %xmm0,32(%rdx)
|
||||
movdqa %xmm0,48(%rdx)
|
||||
leaq 64(%rdx),%rdx
|
||||
decq %r9
|
||||
jnz .Lsqr8x_zero
|
||||
.Lsqr8x_sub:
|
||||
movq 0(%rbx),%r12
|
||||
movq 8(%rbx),%r13
|
||||
movq 16(%rbx),%r14
|
||||
movq 24(%rbx),%r15
|
||||
leaq 32(%rbx),%rbx
|
||||
sbbq 0(%rbp),%r12
|
||||
sbbq 8(%rbp),%r13
|
||||
sbbq 16(%rbp),%r14
|
||||
sbbq 24(%rbp),%r15
|
||||
leaq 32(%rbp),%rbp
|
||||
movq %r12,0(%rdi)
|
||||
movq %r13,8(%rdi)
|
||||
movq %r14,16(%rdi)
|
||||
movq %r15,24(%rdi)
|
||||
leaq 32(%rdi),%rdi
|
||||
incq %rcx
|
||||
jnz .Lsqr8x_sub
|
||||
|
||||
sbbq $0,%rax
|
||||
leaq (%rbx,%r9,1),%rbx
|
||||
leaq (%rdi,%r9,1),%rdi
|
||||
|
||||
.byte 102,72,15,110,200
|
||||
pxor %xmm0,%xmm0
|
||||
pshufd $0,%xmm1,%xmm1
|
||||
movq 40(%rsp),%rsi
|
||||
jmp .Lsqr8x_cond_copy
|
||||
|
||||
.align 32
|
||||
.Lsqr8x_cond_copy:
|
||||
movdqa 0(%rbx),%xmm2
|
||||
movdqa 16(%rbx),%xmm3
|
||||
leaq 32(%rbx),%rbx
|
||||
movdqu 0(%rdi),%xmm4
|
||||
movdqu 16(%rdi),%xmm5
|
||||
leaq 32(%rdi),%rdi
|
||||
movdqa %xmm0,-32(%rbx)
|
||||
movdqa %xmm0,-16(%rbx)
|
||||
movdqa %xmm0,-32(%rbx,%rdx,1)
|
||||
movdqa %xmm0,-16(%rbx,%rdx,1)
|
||||
pcmpeqd %xmm1,%xmm0
|
||||
pand %xmm1,%xmm2
|
||||
pand %xmm1,%xmm3
|
||||
pand %xmm0,%xmm4
|
||||
pand %xmm0,%xmm5
|
||||
pxor %xmm0,%xmm0
|
||||
por %xmm2,%xmm4
|
||||
por %xmm3,%xmm5
|
||||
movdqu %xmm4,-32(%rdi)
|
||||
movdqu %xmm5,-16(%rdi)
|
||||
addq $32,%r9
|
||||
jnz .Lsqr8x_cond_copy
|
||||
|
||||
movq $1,%rax
|
||||
movq -48(%rsi),%r15
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user