Compare commits
47 Commits
main
...
OpenSSL_1_
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ef02492908 | ||
![]() |
86d5f9ba4f | ||
![]() |
febcec6254 | ||
![]() |
f07cb1ce8e | ||
![]() |
b3c17a4805 | ||
![]() |
7b83fe34c0 | ||
![]() |
e0b1c57ae0 | ||
![]() |
6806b06d21 | ||
![]() |
0af0e9d747 | ||
![]() |
2191b3ba44 | ||
![]() |
73020a945b | ||
![]() |
9c2d0cd11c | ||
![]() |
0ef9b9c7bf | ||
![]() |
c14c6e996d | ||
![]() |
51381cd4ed | ||
![]() |
8c9ab050e5 | ||
![]() |
b6996c7849 | ||
![]() |
2c23b0716e | ||
![]() |
f548a0e4d5 | ||
![]() |
a404f63f92 | ||
![]() |
b54f50d277 | ||
![]() |
10ba241909 | ||
![]() |
1f238b1c4a | ||
![]() |
ef85bf8c2b | ||
![]() |
cbfccdb729 | ||
![]() |
94111aa401 | ||
![]() |
eec48070a1 | ||
![]() |
eebe668174 | ||
![]() |
8a15a4a7b4 | ||
![]() |
19057003f1 | ||
![]() |
031648d4ce | ||
![]() |
02bee340a2 | ||
![]() |
f6f2f68a05 | ||
![]() |
982d68a0c0 | ||
![]() |
7585a86a76 | ||
![]() |
73190f1b46 | ||
![]() |
6673ac592a | ||
![]() |
59aa655b53 | ||
![]() |
c4c99b4961 | ||
![]() |
ccbbcddd5f | ||
![]() |
65d82478d8 | ||
![]() |
02a6518a02 | ||
![]() |
a79053511b | ||
![]() |
eb56eb2279 | ||
![]() |
d40f6d4a02 | ||
![]() |
943ae0951a | ||
![]() |
999eeaba14 |
50
CHANGES
50
CHANGES
@ -2,9 +2,16 @@
|
|||||||
OpenSSL CHANGES
|
OpenSSL CHANGES
|
||||||
_______________
|
_______________
|
||||||
|
|
||||||
Changes between 1.0.0a and 1.0.0b [xx XXX xxxx]
|
Changes between 1.0.0a and 1.0.0b [16 Nov 2010]
|
||||||
|
|
||||||
*)
|
*) Fix extension code to avoid race conditions which can result in a buffer
|
||||||
|
overrun vulnerability: resumed sessions must not be modified as they can
|
||||||
|
be shared by multiple threads. CVE-2010-3864
|
||||||
|
[Steve Henson]
|
||||||
|
|
||||||
|
*) Fix WIN32 build system to correctly link an ENGINE directory into
|
||||||
|
a DLL.
|
||||||
|
[Steve Henson]
|
||||||
|
|
||||||
Changes between 1.0.0 and 1.0.0a [01 Jun 2010]
|
Changes between 1.0.0 and 1.0.0a [01 Jun 2010]
|
||||||
|
|
||||||
@ -853,7 +860,34 @@
|
|||||||
*) Change 'Configure' script to enable Camellia by default.
|
*) Change 'Configure' script to enable Camellia by default.
|
||||||
[NTT]
|
[NTT]
|
||||||
|
|
||||||
Changes between 0.9.8n and 0.9.8o [xx XXX xxxx]
|
Changes between 0.9.8o and 0.9.8p [xx XXX xxxx]
|
||||||
|
|
||||||
|
*) Fix extension code to avoid race conditions which can result in a buffer
|
||||||
|
overrun vulnerability: resumed sessions must not be modified as they can
|
||||||
|
be shared by multiple threads. CVE-2010-3864
|
||||||
|
|
||||||
|
*) Fix for double free bug in ssl/s3_clnt.c CVE-2010-2939
|
||||||
|
[Steve Henson]
|
||||||
|
|
||||||
|
*) Don't reencode certificate when calculating signature: cache and use
|
||||||
|
the original encoding instead. This makes signature verification of
|
||||||
|
some broken encodings work correctly.
|
||||||
|
[Steve Henson]
|
||||||
|
|
||||||
|
*) ec2_GF2m_simple_mul bugfix: compute correct result if the output EC_POINT
|
||||||
|
is also one of the inputs.
|
||||||
|
[Emilia Käsper <emilia.kasper@esat.kuleuven.be> (Google)]
|
||||||
|
|
||||||
|
*) Don't repeatedly append PBE algorithms to table if they already exist.
|
||||||
|
Sort table on each new add. This effectively makes the table read only
|
||||||
|
after all algorithms are added and subsequent calls to PKCS12_pbe_add
|
||||||
|
etc are non-op.
|
||||||
|
[Steve Henson]
|
||||||
|
|
||||||
|
Changes between 0.9.8n and 0.9.8o [01 Jun 2010]
|
||||||
|
|
||||||
|
[NB: OpenSSL 0.9.8o and later 0.9.8 patch levels were released after
|
||||||
|
OpenSSL 1.0.0.]
|
||||||
|
|
||||||
*) Correct a typo in the CMS ASN1 module which can result in invalid memory
|
*) Correct a typo in the CMS ASN1 module which can result in invalid memory
|
||||||
access or freeing data twice (CVE-2010-0742)
|
access or freeing data twice (CVE-2010-0742)
|
||||||
@ -864,6 +898,12 @@
|
|||||||
SSL_library_init and not OpenSSL_add_all_algorithms() will fail.
|
SSL_library_init and not OpenSSL_add_all_algorithms() will fail.
|
||||||
[Steve Henson]
|
[Steve Henson]
|
||||||
|
|
||||||
|
*) VMS fixes:
|
||||||
|
Reduce copying into .apps and .test in makevms.com
|
||||||
|
Don't try to use blank CA certificate in CA.com
|
||||||
|
Allow use of C files from original directories in maketests.com
|
||||||
|
[Steven M. Schweda" <sms@antinode.info>]
|
||||||
|
|
||||||
Changes between 0.9.8m and 0.9.8n [24 Mar 2010]
|
Changes between 0.9.8m and 0.9.8n [24 Mar 2010]
|
||||||
|
|
||||||
*) When rejecting SSL/TLS records due to an incorrect version number, never
|
*) When rejecting SSL/TLS records due to an incorrect version number, never
|
||||||
@ -872,8 +912,8 @@
|
|||||||
- OpenSSL 0.9.8f if 'short' is longer than 16 bits,
|
- OpenSSL 0.9.8f if 'short' is longer than 16 bits,
|
||||||
the previous behavior could result in a read attempt at NULL when
|
the previous behavior could result in a read attempt at NULL when
|
||||||
receiving specific incorrect SSL/TLS records once record payload
|
receiving specific incorrect SSL/TLS records once record payload
|
||||||
protection is active. (CVE-2010-####)
|
protection is active. (CVE-2010-0740)
|
||||||
[Bodo Moeller, Adam Langley]
|
[Bodo Moeller, Adam Langley <agl@chromium.org>]
|
||||||
|
|
||||||
*) Fix for CVE-2010-0433 where some kerberos enabled versions of OpenSSL
|
*) Fix for CVE-2010-0433 where some kerberos enabled versions of OpenSSL
|
||||||
could be crashed if the relevant tables were not present (e.g. chrooted).
|
could be crashed if the relevant tables were not present (e.g. chrooted).
|
||||||
|
@ -492,6 +492,8 @@ my %table=(
|
|||||||
# Win64 targets, WIN64I denotes IA-64 and WIN64A - AMD64
|
# Win64 targets, WIN64I denotes IA-64 and WIN64A - AMD64
|
||||||
"VC-WIN64I","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ias:win32",
|
"VC-WIN64I","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ias:win32",
|
||||||
"VC-WIN64A","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:x86_64cpuid.o:bn_asm.o x86_64-mont.o::aes-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:auto:win32",
|
"VC-WIN64A","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:x86_64cpuid.o:bn_asm.o x86_64-mont.o::aes-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:auto:win32",
|
||||||
|
"debug-VC-WIN64I","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ias:win32",
|
||||||
|
"debug-VC-WIN64A","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:x86_64cpuid.o:bn_asm.o x86_64-mont.o::aes-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:auto:win32",
|
||||||
# x86 Win32 target defaults to ANSI API, if you want UNICODE, complement
|
# x86 Win32 target defaults to ANSI API, if you want UNICODE, complement
|
||||||
# 'perl Configure VC-WIN32' with '-DUNICODE -D_UNICODE'
|
# 'perl Configure VC-WIN32' with '-DUNICODE -D_UNICODE'
|
||||||
"VC-WIN32","cl:-W3 -WX -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
|
"VC-WIN32","cl:-W3 -WX -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
|
||||||
@ -583,6 +585,7 @@ my %table=(
|
|||||||
);
|
);
|
||||||
|
|
||||||
my @MK1MF_Builds=qw(VC-WIN64I VC-WIN64A
|
my @MK1MF_Builds=qw(VC-WIN64I VC-WIN64A
|
||||||
|
debug-VC-WIN64I debug-VC-WIN64A
|
||||||
VC-NT VC-CE VC-WIN32 debug-VC-WIN32
|
VC-NT VC-CE VC-WIN32 debug-VC-WIN32
|
||||||
BC-32
|
BC-32
|
||||||
netware-clib netware-clib-bsdsock
|
netware-clib netware-clib-bsdsock
|
||||||
@ -1093,6 +1096,12 @@ my $ar = $ENV{'AR'} || "ar";
|
|||||||
my $arflags = $fields[$idx_arflags];
|
my $arflags = $fields[$idx_arflags];
|
||||||
my $multilib = $fields[$idx_multilib];
|
my $multilib = $fields[$idx_multilib];
|
||||||
|
|
||||||
|
# if $prefix/lib$multilib is not an existing directory, then
|
||||||
|
# assume that it's not searched by linker automatically, in
|
||||||
|
# which case adding $multilib suffix causes more grief than
|
||||||
|
# we're ready to tolerate, so don't...
|
||||||
|
$multilib="" if !-d "$prefix/lib$multilib";
|
||||||
|
|
||||||
$libdir="lib$multilib" if $libdir eq "";
|
$libdir="lib$multilib" if $libdir eq "";
|
||||||
|
|
||||||
$cflags = "$cflags$exp_cflags";
|
$cflags = "$cflags$exp_cflags";
|
||||||
|
2
FAQ
2
FAQ
@ -79,7 +79,7 @@ OpenSSL - Frequently Asked Questions
|
|||||||
* Which is the current version of OpenSSL?
|
* Which is the current version of OpenSSL?
|
||||||
|
|
||||||
The current version is available from <URL: http://www.openssl.org>.
|
The current version is available from <URL: http://www.openssl.org>.
|
||||||
OpenSSL 1.0.0a was released on Jun 1st, 2010.
|
OpenSSL 1.0.0b was released on Nov 16th, 2010.
|
||||||
|
|
||||||
In addition to the current stable release, you can also access daily
|
In addition to the current stable release, you can also access daily
|
||||||
snapshots of the OpenSSL development version at <URL:
|
snapshots of the OpenSSL development version at <URL:
|
||||||
|
13
INSTALL.W32
13
INSTALL.W32
@ -297,7 +297,18 @@
|
|||||||
desktop, which is not available to service processes. The toolkit is
|
desktop, which is not available to service processes. The toolkit is
|
||||||
designed to detect in which context it's currently executed, GUI,
|
designed to detect in which context it's currently executed, GUI,
|
||||||
console app or service, and act accordingly, namely whether or not to
|
console app or service, and act accordingly, namely whether or not to
|
||||||
actually make GUI calls.
|
actually make GUI calls. Additionally those who wish to
|
||||||
|
/DELAYLOAD:GDI32.DLL and /DELAYLOAD:USER32.DLL and actually keep them
|
||||||
|
off service process should consider implementing and exporting from
|
||||||
|
.exe image in question own _OPENSSL_isservice not relying on USER32.DLL.
|
||||||
|
E.g., on Windows Vista and later you could:
|
||||||
|
|
||||||
|
__declspec(dllexport) __cdecl BOOL _OPENSSL_isservice(void)
|
||||||
|
{ DWORD sess;
|
||||||
|
if (ProcessIdToSessionId(GetCurrentProcessId(),&sess))
|
||||||
|
return sess==0;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
If you link with OpenSSL .DLLs, then you're expected to include into
|
If you link with OpenSSL .DLLs, then you're expected to include into
|
||||||
your application code small "shim" snippet, which provides glue between
|
your application code small "shim" snippet, which provides glue between
|
||||||
|
@ -135,7 +135,7 @@ LINK_SO_A_VIA_O= \
|
|||||||
ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \
|
ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \
|
||||||
( $(SET_X); \
|
( $(SET_X); \
|
||||||
ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \
|
ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \
|
||||||
$(LINK_SO) && rm -f $(LIBNAME).o
|
$(LINK_SO) && rm -f lib$(LIBNAME).o
|
||||||
|
|
||||||
LINK_SO_A_UNPACKED= \
|
LINK_SO_A_UNPACKED= \
|
||||||
UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \
|
UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \
|
||||||
@ -207,17 +207,29 @@ link_app.bsd:
|
|||||||
fi; $(LINK_APP)
|
fi; $(LINK_APP)
|
||||||
|
|
||||||
# For Darwin AKA Mac OS/X (dyld)
|
# For Darwin AKA Mac OS/X (dyld)
|
||||||
# link_o.darwin produces .so, because we let it use dso_dlfcn module,
|
# Originally link_o.darwin produced .so, because it was hard-coded
|
||||||
# which has .so extension hard-coded. One can argue that one should
|
# in dso_dlfcn module. At later point dso_dlfcn switched to .dylib
|
||||||
# develop special dso module for MacOS X. At least manual encourages
|
# extension in order to allow for run-time linking with vendor-
|
||||||
# to use native NSModule(3) API and refers to dlfcn as termporary hack.
|
# supplied shared libraries such as libz, so that link_o.darwin had
|
||||||
|
# to be harmonized with it. This caused minor controversy, because
|
||||||
|
# it was believed that dlopen can't be used to dynamically load
|
||||||
|
# .dylib-s, only so called bundle modules (ones linked with -bundle
|
||||||
|
# flag). The belief seems to be originating from pre-10.4 release,
|
||||||
|
# where dlfcn functionality was emulated by dlcompat add-on. In
|
||||||
|
# 10.4 dlopen was rewritten as native part of dyld and is documented
|
||||||
|
# to be capable of loading both dynamic libraries and bundles. In
|
||||||
|
# order to provide compatibility with pre-10.4 dlopen, modules are
|
||||||
|
# linked with -bundle flag, which makes .dylib extension misleading.
|
||||||
|
# It works, because dlopen is [and always was] extension-agnostic.
|
||||||
|
# Alternative to this heuristic approach is to develop specific
|
||||||
|
# MacOS X dso module relying on whichever "native" dyld interface.
|
||||||
link_o.darwin:
|
link_o.darwin:
|
||||||
@ $(CALC_VERSIONS); \
|
@ $(CALC_VERSIONS); \
|
||||||
SHLIB=lib$(LIBNAME); \
|
SHLIB=lib$(LIBNAME); \
|
||||||
SHLIB_SUFFIX=.so; \
|
SHLIB_SUFFIX=.dylib; \
|
||||||
ALLSYMSFLAGS='-all_load'; \
|
ALLSYMSFLAGS='-all_load'; \
|
||||||
NOALLSYMSFLAGS=''; \
|
NOALLSYMSFLAGS=''; \
|
||||||
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS)"; \
|
SHAREDFLAGS="$(CFLAGS) `echo $(SHARED_LDFLAGS) | sed s/dynamiclib/bundle/`"; \
|
||||||
if [ -n "$(LIBVERSION)" ]; then \
|
if [ -n "$(LIBVERSION)" ]; then \
|
||||||
SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \
|
SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \
|
||||||
fi; \
|
fi; \
|
||||||
|
6
NEWS
6
NEWS
@ -5,6 +5,12 @@
|
|||||||
This file gives a brief overview of the major changes between each OpenSSL
|
This file gives a brief overview of the major changes between each OpenSSL
|
||||||
release. For more details please read the CHANGES file.
|
release. For more details please read the CHANGES file.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b:
|
||||||
|
|
||||||
|
o Fix for security issue CVE-2010-3864.
|
||||||
|
o Fix for CVE-2010-2939
|
||||||
|
o Fix WIN32 build system for GOST ENGINE.
|
||||||
|
|
||||||
Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a:
|
Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a:
|
||||||
|
|
||||||
o Fix for security issue CVE-2010-1633.
|
o Fix for security issue CVE-2010-1633.
|
||||||
|
4
PROBLEMS
4
PROBLEMS
@ -36,7 +36,9 @@ may differ on your machine.
|
|||||||
|
|
||||||
|
|
||||||
As long as Apple doesn't fix the problem with ld, this problem building
|
As long as Apple doesn't fix the problem with ld, this problem building
|
||||||
OpenSSL will remain as is.
|
OpenSSL will remain as is. Well, the problem was addressed in 0.9.8f by
|
||||||
|
passing -Wl,-search_paths_first, but it's unknown if the flag was
|
||||||
|
supported from the initial MacOS X release.
|
||||||
|
|
||||||
|
|
||||||
* Parallell make leads to errors
|
* Parallell make leads to errors
|
||||||
|
2
README
2
README
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
OpenSSL 1.0.0b-dev
|
OpenSSL 1.0.0b 16 Nov 2010
|
||||||
|
|
||||||
Copyright (c) 1998-2010 The OpenSSL Project
|
Copyright (c) 1998-2010 The OpenSSL Project
|
||||||
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
|
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
|
||||||
|
3
STATUS
3
STATUS
@ -1,10 +1,11 @@
|
|||||||
|
|
||||||
OpenSSL STATUS Last modified at
|
OpenSSL STATUS Last modified at
|
||||||
______________ $Date: 2010/06/01 13:31:36 $
|
______________ $Date: 2010/11/16 13:35:08 $
|
||||||
|
|
||||||
DEVELOPMENT STATE
|
DEVELOPMENT STATE
|
||||||
|
|
||||||
o OpenSSL 1.1.0: Under development...
|
o OpenSSL 1.1.0: Under development...
|
||||||
|
o OpenSSL 1.0.0b: Released on November 16th, 2010
|
||||||
o OpenSSL 1.0.0a: Released on June 1st, 2010
|
o OpenSSL 1.0.0a: Released on June 1st, 2010
|
||||||
o OpenSSL 1.0.0: Released on March 29th, 2010
|
o OpenSSL 1.0.0: Released on March 29th, 2010
|
||||||
o OpenSSL 0.9.8n: Released on March 24th, 2010
|
o OpenSSL 0.9.8n: Released on March 24th, 2010
|
||||||
|
62
TABLE
62
TABLE
@ -1426,6 +1426,68 @@ $ranlib =
|
|||||||
$arflags =
|
$arflags =
|
||||||
$multilib =
|
$multilib =
|
||||||
|
|
||||||
|
*** debug-VC-WIN64A
|
||||||
|
$cc = cl
|
||||||
|
$cflags = -W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE
|
||||||
|
$unistd =
|
||||||
|
$thread_cflag =
|
||||||
|
$sys_id = WIN64A
|
||||||
|
$lflags =
|
||||||
|
$bn_ops = SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN
|
||||||
|
$cpuid_obj = x86_64cpuid.o
|
||||||
|
$bn_obj = bn_asm.o x86_64-mont.o
|
||||||
|
$des_obj =
|
||||||
|
$aes_obj = aes-x86_64.o
|
||||||
|
$bf_obj =
|
||||||
|
$md5_obj = md5-x86_64.o
|
||||||
|
$sha1_obj = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
|
||||||
|
$cast_obj =
|
||||||
|
$rc4_obj = rc4-x86_64.o
|
||||||
|
$rmd160_obj =
|
||||||
|
$rc5_obj =
|
||||||
|
$wp_obj = wp-x86_64.o
|
||||||
|
$cmll_obj = cmll-x86_64.o cmll_misc.o
|
||||||
|
$perlasm_scheme = auto
|
||||||
|
$dso_scheme = win32
|
||||||
|
$shared_target=
|
||||||
|
$shared_cflag =
|
||||||
|
$shared_ldflag =
|
||||||
|
$shared_extension =
|
||||||
|
$ranlib =
|
||||||
|
$arflags =
|
||||||
|
$multilib =
|
||||||
|
|
||||||
|
*** debug-VC-WIN64I
|
||||||
|
$cc = cl
|
||||||
|
$cflags = -W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE
|
||||||
|
$unistd =
|
||||||
|
$thread_cflag =
|
||||||
|
$sys_id = WIN64I
|
||||||
|
$lflags =
|
||||||
|
$bn_ops = SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN
|
||||||
|
$cpuid_obj = ia64cpuid.o
|
||||||
|
$bn_obj = ia64.o
|
||||||
|
$des_obj =
|
||||||
|
$aes_obj = aes_core.o aes_cbc.o aes-ia64.o
|
||||||
|
$bf_obj =
|
||||||
|
$md5_obj = md5-ia64.o
|
||||||
|
$sha1_obj = sha1-ia64.o sha256-ia64.o sha512-ia64.o
|
||||||
|
$cast_obj =
|
||||||
|
$rc4_obj =
|
||||||
|
$rmd160_obj =
|
||||||
|
$rc5_obj =
|
||||||
|
$wp_obj =
|
||||||
|
$cmll_obj =
|
||||||
|
$perlasm_scheme = ias
|
||||||
|
$dso_scheme = win32
|
||||||
|
$shared_target=
|
||||||
|
$shared_cflag =
|
||||||
|
$shared_ldflag =
|
||||||
|
$shared_extension =
|
||||||
|
$ranlib =
|
||||||
|
$arflags =
|
||||||
|
$multilib =
|
||||||
|
|
||||||
*** debug-ben
|
*** debug-ben
|
||||||
$cc = gcc
|
$cc = gcc
|
||||||
$cflags = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DDEBUG_UNUSED -O2 -pedantic -Wall -Wshadow -Werror -pipe
|
$cflags = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DDEBUG_UNUSED -O2 -pedantic -Wall -Wshadow -Werror -pipe
|
||||||
|
@ -257,6 +257,8 @@ int args_from_file(char *file, int *argc, char **argv[])
|
|||||||
|
|
||||||
int str2fmt(char *s)
|
int str2fmt(char *s)
|
||||||
{
|
{
|
||||||
|
if (s == NULL)
|
||||||
|
return FORMAT_UNDEF;
|
||||||
if ((*s == 'D') || (*s == 'd'))
|
if ((*s == 'D') || (*s == 'd'))
|
||||||
return(FORMAT_ASN1);
|
return(FORMAT_ASN1);
|
||||||
else if ((*s == 'T') || (*s == 't'))
|
else if ((*s == 'T') || (*s == 't'))
|
||||||
|
@ -119,17 +119,17 @@ int MAIN(int argc, char **argv)
|
|||||||
if (!strcmp(*argv,"-in"))
|
if (!strcmp(*argv,"-in"))
|
||||||
{
|
{
|
||||||
if (--argc < 1) badarg = 1;
|
if (--argc < 1) badarg = 1;
|
||||||
infile= *(++argv);
|
else infile= *(++argv);
|
||||||
}
|
}
|
||||||
else if (!strcmp(*argv,"-out"))
|
else if (!strcmp(*argv,"-out"))
|
||||||
{
|
{
|
||||||
if (--argc < 1) badarg = 1;
|
if (--argc < 1) badarg = 1;
|
||||||
outfile= *(++argv);
|
else outfile= *(++argv);
|
||||||
}
|
}
|
||||||
else if (!strcmp(*argv,"-sigfile"))
|
else if (!strcmp(*argv,"-sigfile"))
|
||||||
{
|
{
|
||||||
if (--argc < 1) badarg = 1;
|
if (--argc < 1) badarg = 1;
|
||||||
sigfile= *(++argv);
|
else sigfile= *(++argv);
|
||||||
}
|
}
|
||||||
else if(!strcmp(*argv, "-inkey"))
|
else if(!strcmp(*argv, "-inkey"))
|
||||||
{
|
{
|
||||||
@ -159,17 +159,17 @@ int MAIN(int argc, char **argv)
|
|||||||
else if (!strcmp(*argv,"-passin"))
|
else if (!strcmp(*argv,"-passin"))
|
||||||
{
|
{
|
||||||
if (--argc < 1) badarg = 1;
|
if (--argc < 1) badarg = 1;
|
||||||
passargin= *(++argv);
|
else passargin= *(++argv);
|
||||||
}
|
}
|
||||||
else if (strcmp(*argv,"-peerform") == 0)
|
else if (strcmp(*argv,"-peerform") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) badarg = 1;
|
if (--argc < 1) badarg = 1;
|
||||||
peerform=str2fmt(*(++argv));
|
else peerform=str2fmt(*(++argv));
|
||||||
}
|
}
|
||||||
else if (strcmp(*argv,"-keyform") == 0)
|
else if (strcmp(*argv,"-keyform") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) badarg = 1;
|
if (--argc < 1) badarg = 1;
|
||||||
keyform=str2fmt(*(++argv));
|
else keyform=str2fmt(*(++argv));
|
||||||
}
|
}
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
else if(!strcmp(*argv, "-engine"))
|
else if(!strcmp(*argv, "-engine"))
|
||||||
|
@ -406,6 +406,7 @@ redoit:
|
|||||||
if (ret == INVALID_SOCKET)
|
if (ret == INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
#if defined(OPENSSL_SYS_WINDOWS) || (defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK))
|
#if defined(OPENSSL_SYS_WINDOWS) || (defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK))
|
||||||
|
int i;
|
||||||
i=WSAGetLastError();
|
i=WSAGetLastError();
|
||||||
BIO_printf(bio_err,"accept error %d\n",i);
|
BIO_printf(bio_err,"accept error %d\n",i);
|
||||||
#else
|
#else
|
||||||
|
@ -74,7 +74,9 @@ x86_64cpuid.s: x86_64cpuid.pl
|
|||||||
$(PERL) x86_64cpuid.pl $(PERLASM_SCHEME) > $@
|
$(PERL) x86_64cpuid.pl $(PERLASM_SCHEME) > $@
|
||||||
ia64cpuid.s: ia64cpuid.S
|
ia64cpuid.s: ia64cpuid.S
|
||||||
$(CC) $(CFLAGS) -E ia64cpuid.S > $@
|
$(CC) $(CFLAGS) -E ia64cpuid.S > $@
|
||||||
ppccpuid.s: ppccpuid.pl; $(PERL) ppccpuid.pl $(PERLASM_SCHEME) $@
|
ppccpuid.s: ppccpuid.pl; $(PERL) ppccpuid.pl $(PERLASM_SCHEME) $@
|
||||||
|
alphacpuid.s: alphacpuid.pl
|
||||||
|
$(PERL) $< | $(CC) -E - | tee $@ > /dev/null
|
||||||
|
|
||||||
testapps:
|
testapps:
|
||||||
[ -z "$(THIS)" ] || ( if echo $(SDIRS) | fgrep ' des '; \
|
[ -z "$(THIS)" ] || ( if echo $(SDIRS) | fgrep ' des '; \
|
||||||
|
@ -85,9 +85,9 @@ int AES_wrap_key(AES_KEY *key, const unsigned char *iv,
|
|||||||
A[7] ^= (unsigned char)(t & 0xff);
|
A[7] ^= (unsigned char)(t & 0xff);
|
||||||
if (t > 0xff)
|
if (t > 0xff)
|
||||||
{
|
{
|
||||||
A[6] ^= (unsigned char)((t & 0xff) >> 8);
|
A[6] ^= (unsigned char)((t >> 8) & 0xff);
|
||||||
A[5] ^= (unsigned char)((t & 0xff) >> 16);
|
A[5] ^= (unsigned char)((t >> 16) & 0xff);
|
||||||
A[4] ^= (unsigned char)((t & 0xff) >> 24);
|
A[4] ^= (unsigned char)((t >> 24) & 0xff);
|
||||||
}
|
}
|
||||||
memcpy(R, B + 8, 8);
|
memcpy(R, B + 8, 8);
|
||||||
}
|
}
|
||||||
@ -119,9 +119,9 @@ int AES_unwrap_key(AES_KEY *key, const unsigned char *iv,
|
|||||||
A[7] ^= (unsigned char)(t & 0xff);
|
A[7] ^= (unsigned char)(t & 0xff);
|
||||||
if (t > 0xff)
|
if (t > 0xff)
|
||||||
{
|
{
|
||||||
A[6] ^= (unsigned char)((t & 0xff) >> 8);
|
A[6] ^= (unsigned char)((t >> 8) & 0xff);
|
||||||
A[5] ^= (unsigned char)((t & 0xff) >> 16);
|
A[5] ^= (unsigned char)((t >> 16) & 0xff);
|
||||||
A[4] ^= (unsigned char)((t & 0xff) >> 24);
|
A[4] ^= (unsigned char)((t >> 24) & 0xff);
|
||||||
}
|
}
|
||||||
memcpy(B + 8, R, 8);
|
memcpy(B + 8, R, 8);
|
||||||
AES_decrypt(B, B, key);
|
AES_decrypt(B, B, key);
|
||||||
|
@ -16,12 +16,20 @@
|
|||||||
# allows to merge logical or arithmetic operation with shift or rotate
|
# allows to merge logical or arithmetic operation with shift or rotate
|
||||||
# in one instruction and emit combined result every cycle. The module
|
# in one instruction and emit combined result every cycle. The module
|
||||||
# is endian-neutral. The performance is ~42 cycles/byte for 128-bit
|
# is endian-neutral. The performance is ~42 cycles/byte for 128-bit
|
||||||
# key.
|
# key [on single-issue Xscale PXA250 core].
|
||||||
|
|
||||||
# May 2007.
|
# May 2007.
|
||||||
#
|
#
|
||||||
# AES_set_[en|de]crypt_key is added.
|
# AES_set_[en|de]crypt_key is added.
|
||||||
|
|
||||||
|
# July 2010.
|
||||||
|
#
|
||||||
|
# Rescheduling for dual-issue pipeline resulted in 12% improvement on
|
||||||
|
# Cortex A8 core and ~25 cycles per byte processed with 128-bit key.
|
||||||
|
|
||||||
|
while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
|
||||||
|
open STDOUT,">$output";
|
||||||
|
|
||||||
$s0="r0";
|
$s0="r0";
|
||||||
$s1="r1";
|
$s1="r1";
|
||||||
$s2="r2";
|
$s2="r2";
|
||||||
@ -164,24 +172,24 @@ AES_encrypt:
|
|||||||
ldrb $t2,[$rounds,#1]
|
ldrb $t2,[$rounds,#1]
|
||||||
ldrb $t3,[$rounds,#0]
|
ldrb $t3,[$rounds,#0]
|
||||||
orr $s0,$s0,$t1,lsl#8
|
orr $s0,$s0,$t1,lsl#8
|
||||||
orr $s0,$s0,$t2,lsl#16
|
|
||||||
orr $s0,$s0,$t3,lsl#24
|
|
||||||
ldrb $s1,[$rounds,#7]
|
ldrb $s1,[$rounds,#7]
|
||||||
|
orr $s0,$s0,$t2,lsl#16
|
||||||
ldrb $t1,[$rounds,#6]
|
ldrb $t1,[$rounds,#6]
|
||||||
|
orr $s0,$s0,$t3,lsl#24
|
||||||
ldrb $t2,[$rounds,#5]
|
ldrb $t2,[$rounds,#5]
|
||||||
ldrb $t3,[$rounds,#4]
|
ldrb $t3,[$rounds,#4]
|
||||||
orr $s1,$s1,$t1,lsl#8
|
orr $s1,$s1,$t1,lsl#8
|
||||||
orr $s1,$s1,$t2,lsl#16
|
|
||||||
orr $s1,$s1,$t3,lsl#24
|
|
||||||
ldrb $s2,[$rounds,#11]
|
ldrb $s2,[$rounds,#11]
|
||||||
|
orr $s1,$s1,$t2,lsl#16
|
||||||
ldrb $t1,[$rounds,#10]
|
ldrb $t1,[$rounds,#10]
|
||||||
|
orr $s1,$s1,$t3,lsl#24
|
||||||
ldrb $t2,[$rounds,#9]
|
ldrb $t2,[$rounds,#9]
|
||||||
ldrb $t3,[$rounds,#8]
|
ldrb $t3,[$rounds,#8]
|
||||||
orr $s2,$s2,$t1,lsl#8
|
orr $s2,$s2,$t1,lsl#8
|
||||||
orr $s2,$s2,$t2,lsl#16
|
|
||||||
orr $s2,$s2,$t3,lsl#24
|
|
||||||
ldrb $s3,[$rounds,#15]
|
ldrb $s3,[$rounds,#15]
|
||||||
|
orr $s2,$s2,$t2,lsl#16
|
||||||
ldrb $t1,[$rounds,#14]
|
ldrb $t1,[$rounds,#14]
|
||||||
|
orr $s2,$s2,$t3,lsl#24
|
||||||
ldrb $t2,[$rounds,#13]
|
ldrb $t2,[$rounds,#13]
|
||||||
ldrb $t3,[$rounds,#12]
|
ldrb $t3,[$rounds,#12]
|
||||||
orr $s3,$s3,$t1,lsl#8
|
orr $s3,$s3,$t1,lsl#8
|
||||||
@ -196,24 +204,24 @@ AES_encrypt:
|
|||||||
mov $t3,$s0,lsr#8
|
mov $t3,$s0,lsr#8
|
||||||
strb $t1,[$rounds,#0]
|
strb $t1,[$rounds,#0]
|
||||||
strb $t2,[$rounds,#1]
|
strb $t2,[$rounds,#1]
|
||||||
strb $t3,[$rounds,#2]
|
|
||||||
strb $s0,[$rounds,#3]
|
|
||||||
mov $t1,$s1,lsr#24
|
mov $t1,$s1,lsr#24
|
||||||
|
strb $t3,[$rounds,#2]
|
||||||
mov $t2,$s1,lsr#16
|
mov $t2,$s1,lsr#16
|
||||||
|
strb $s0,[$rounds,#3]
|
||||||
mov $t3,$s1,lsr#8
|
mov $t3,$s1,lsr#8
|
||||||
strb $t1,[$rounds,#4]
|
strb $t1,[$rounds,#4]
|
||||||
strb $t2,[$rounds,#5]
|
strb $t2,[$rounds,#5]
|
||||||
strb $t3,[$rounds,#6]
|
|
||||||
strb $s1,[$rounds,#7]
|
|
||||||
mov $t1,$s2,lsr#24
|
mov $t1,$s2,lsr#24
|
||||||
|
strb $t3,[$rounds,#6]
|
||||||
mov $t2,$s2,lsr#16
|
mov $t2,$s2,lsr#16
|
||||||
|
strb $s1,[$rounds,#7]
|
||||||
mov $t3,$s2,lsr#8
|
mov $t3,$s2,lsr#8
|
||||||
strb $t1,[$rounds,#8]
|
strb $t1,[$rounds,#8]
|
||||||
strb $t2,[$rounds,#9]
|
strb $t2,[$rounds,#9]
|
||||||
strb $t3,[$rounds,#10]
|
|
||||||
strb $s2,[$rounds,#11]
|
|
||||||
mov $t1,$s3,lsr#24
|
mov $t1,$s3,lsr#24
|
||||||
|
strb $t3,[$rounds,#10]
|
||||||
mov $t2,$s3,lsr#16
|
mov $t2,$s3,lsr#16
|
||||||
|
strb $s2,[$rounds,#11]
|
||||||
mov $t3,$s3,lsr#8
|
mov $t3,$s3,lsr#8
|
||||||
strb $t1,[$rounds,#12]
|
strb $t1,[$rounds,#12]
|
||||||
strb $t2,[$rounds,#13]
|
strb $t2,[$rounds,#13]
|
||||||
@ -230,141 +238,137 @@ AES_encrypt:
|
|||||||
.align 2
|
.align 2
|
||||||
_armv4_AES_encrypt:
|
_armv4_AES_encrypt:
|
||||||
str lr,[sp,#-4]! @ push lr
|
str lr,[sp,#-4]! @ push lr
|
||||||
ldr $t1,[$key],#16
|
ldmia $key!,{$t1-$i1}
|
||||||
ldr $t2,[$key,#-12]
|
|
||||||
ldr $t3,[$key,#-8]
|
|
||||||
ldr $i1,[$key,#-4]
|
|
||||||
ldr $rounds,[$key,#240-16]
|
|
||||||
eor $s0,$s0,$t1
|
eor $s0,$s0,$t1
|
||||||
|
ldr $rounds,[$key,#240-16]
|
||||||
eor $s1,$s1,$t2
|
eor $s1,$s1,$t2
|
||||||
eor $s2,$s2,$t3
|
eor $s2,$s2,$t3
|
||||||
eor $s3,$s3,$i1
|
eor $s3,$s3,$i1
|
||||||
sub $rounds,$rounds,#1
|
sub $rounds,$rounds,#1
|
||||||
mov lr,#255
|
mov lr,#255
|
||||||
|
|
||||||
.Lenc_loop:
|
and $i1,lr,$s0
|
||||||
and $i2,lr,$s0,lsr#8
|
and $i2,lr,$s0,lsr#8
|
||||||
and $i3,lr,$s0,lsr#16
|
and $i3,lr,$s0,lsr#16
|
||||||
and $i1,lr,$s0
|
|
||||||
mov $s0,$s0,lsr#24
|
mov $s0,$s0,lsr#24
|
||||||
|
.Lenc_loop:
|
||||||
ldr $t1,[$tbl,$i1,lsl#2] @ Te3[s0>>0]
|
ldr $t1,[$tbl,$i1,lsl#2] @ Te3[s0>>0]
|
||||||
ldr $s0,[$tbl,$s0,lsl#2] @ Te0[s0>>24]
|
|
||||||
ldr $t2,[$tbl,$i2,lsl#2] @ Te2[s0>>8]
|
|
||||||
ldr $t3,[$tbl,$i3,lsl#2] @ Te1[s0>>16]
|
|
||||||
|
|
||||||
and $i1,lr,$s1,lsr#16 @ i0
|
and $i1,lr,$s1,lsr#16 @ i0
|
||||||
|
ldr $t2,[$tbl,$i2,lsl#2] @ Te2[s0>>8]
|
||||||
and $i2,lr,$s1
|
and $i2,lr,$s1
|
||||||
|
ldr $t3,[$tbl,$i3,lsl#2] @ Te1[s0>>16]
|
||||||
and $i3,lr,$s1,lsr#8
|
and $i3,lr,$s1,lsr#8
|
||||||
|
ldr $s0,[$tbl,$s0,lsl#2] @ Te0[s0>>24]
|
||||||
mov $s1,$s1,lsr#24
|
mov $s1,$s1,lsr#24
|
||||||
|
|
||||||
ldr $i1,[$tbl,$i1,lsl#2] @ Te1[s1>>16]
|
ldr $i1,[$tbl,$i1,lsl#2] @ Te1[s1>>16]
|
||||||
ldr $s1,[$tbl,$s1,lsl#2] @ Te0[s1>>24]
|
|
||||||
ldr $i2,[$tbl,$i2,lsl#2] @ Te3[s1>>0]
|
ldr $i2,[$tbl,$i2,lsl#2] @ Te3[s1>>0]
|
||||||
ldr $i3,[$tbl,$i3,lsl#2] @ Te2[s1>>8]
|
ldr $i3,[$tbl,$i3,lsl#2] @ Te2[s1>>8]
|
||||||
eor $s0,$s0,$i1,ror#8
|
eor $s0,$s0,$i1,ror#8
|
||||||
eor $s1,$s1,$t1,ror#24
|
ldr $s1,[$tbl,$s1,lsl#2] @ Te0[s1>>24]
|
||||||
eor $t2,$t2,$i2,ror#8
|
|
||||||
eor $t3,$t3,$i3,ror#8
|
|
||||||
|
|
||||||
and $i1,lr,$s2,lsr#8 @ i0
|
and $i1,lr,$s2,lsr#8 @ i0
|
||||||
|
eor $t2,$t2,$i2,ror#8
|
||||||
and $i2,lr,$s2,lsr#16 @ i1
|
and $i2,lr,$s2,lsr#16 @ i1
|
||||||
|
eor $t3,$t3,$i3,ror#8
|
||||||
and $i3,lr,$s2
|
and $i3,lr,$s2
|
||||||
mov $s2,$s2,lsr#24
|
eor $s1,$s1,$t1,ror#24
|
||||||
ldr $i1,[$tbl,$i1,lsl#2] @ Te2[s2>>8]
|
ldr $i1,[$tbl,$i1,lsl#2] @ Te2[s2>>8]
|
||||||
|
mov $s2,$s2,lsr#24
|
||||||
|
|
||||||
ldr $i2,[$tbl,$i2,lsl#2] @ Te1[s2>>16]
|
ldr $i2,[$tbl,$i2,lsl#2] @ Te1[s2>>16]
|
||||||
ldr $s2,[$tbl,$s2,lsl#2] @ Te0[s2>>24]
|
|
||||||
ldr $i3,[$tbl,$i3,lsl#2] @ Te3[s2>>0]
|
ldr $i3,[$tbl,$i3,lsl#2] @ Te3[s2>>0]
|
||||||
eor $s0,$s0,$i1,ror#16
|
eor $s0,$s0,$i1,ror#16
|
||||||
eor $s1,$s1,$i2,ror#8
|
ldr $s2,[$tbl,$s2,lsl#2] @ Te0[s2>>24]
|
||||||
eor $s2,$s2,$t2,ror#16
|
|
||||||
eor $t3,$t3,$i3,ror#16
|
|
||||||
|
|
||||||
and $i1,lr,$s3 @ i0
|
and $i1,lr,$s3 @ i0
|
||||||
|
eor $s1,$s1,$i2,ror#8
|
||||||
and $i2,lr,$s3,lsr#8 @ i1
|
and $i2,lr,$s3,lsr#8 @ i1
|
||||||
|
eor $t3,$t3,$i3,ror#16
|
||||||
and $i3,lr,$s3,lsr#16 @ i2
|
and $i3,lr,$s3,lsr#16 @ i2
|
||||||
mov $s3,$s3,lsr#24
|
eor $s2,$s2,$t2,ror#16
|
||||||
ldr $i1,[$tbl,$i1,lsl#2] @ Te3[s3>>0]
|
ldr $i1,[$tbl,$i1,lsl#2] @ Te3[s3>>0]
|
||||||
|
mov $s3,$s3,lsr#24
|
||||||
|
|
||||||
ldr $i2,[$tbl,$i2,lsl#2] @ Te2[s3>>8]
|
ldr $i2,[$tbl,$i2,lsl#2] @ Te2[s3>>8]
|
||||||
ldr $i3,[$tbl,$i3,lsl#2] @ Te1[s3>>16]
|
ldr $i3,[$tbl,$i3,lsl#2] @ Te1[s3>>16]
|
||||||
ldr $s3,[$tbl,$s3,lsl#2] @ Te0[s3>>24]
|
|
||||||
eor $s0,$s0,$i1,ror#24
|
eor $s0,$s0,$i1,ror#24
|
||||||
|
ldr $s3,[$tbl,$s3,lsl#2] @ Te0[s3>>24]
|
||||||
eor $s1,$s1,$i2,ror#16
|
eor $s1,$s1,$i2,ror#16
|
||||||
|
ldr $i1,[$key],#16
|
||||||
eor $s2,$s2,$i3,ror#8
|
eor $s2,$s2,$i3,ror#8
|
||||||
|
ldr $t1,[$key,#-12]
|
||||||
eor $s3,$s3,$t3,ror#8
|
eor $s3,$s3,$t3,ror#8
|
||||||
|
|
||||||
ldr $t1,[$key],#16
|
ldr $t2,[$key,#-8]
|
||||||
ldr $t2,[$key,#-12]
|
eor $s0,$s0,$i1
|
||||||
ldr $t3,[$key,#-8]
|
ldr $t3,[$key,#-4]
|
||||||
ldr $i1,[$key,#-4]
|
and $i1,lr,$s0
|
||||||
eor $s0,$s0,$t1
|
eor $s1,$s1,$t1
|
||||||
eor $s1,$s1,$t2
|
and $i2,lr,$s0,lsr#8
|
||||||
eor $s2,$s2,$t3
|
eor $s2,$s2,$t2
|
||||||
eor $s3,$s3,$i1
|
and $i3,lr,$s0,lsr#16
|
||||||
|
eor $s3,$s3,$t3
|
||||||
|
mov $s0,$s0,lsr#24
|
||||||
|
|
||||||
subs $rounds,$rounds,#1
|
subs $rounds,$rounds,#1
|
||||||
bne .Lenc_loop
|
bne .Lenc_loop
|
||||||
|
|
||||||
add $tbl,$tbl,#2
|
add $tbl,$tbl,#2
|
||||||
|
|
||||||
and $i1,lr,$s0
|
|
||||||
and $i2,lr,$s0,lsr#8
|
|
||||||
and $i3,lr,$s0,lsr#16
|
|
||||||
mov $s0,$s0,lsr#24
|
|
||||||
ldrb $t1,[$tbl,$i1,lsl#2] @ Te4[s0>>0]
|
ldrb $t1,[$tbl,$i1,lsl#2] @ Te4[s0>>0]
|
||||||
ldrb $s0,[$tbl,$s0,lsl#2] @ Te4[s0>>24]
|
|
||||||
ldrb $t2,[$tbl,$i2,lsl#2] @ Te4[s0>>8]
|
|
||||||
ldrb $t3,[$tbl,$i3,lsl#2] @ Te4[s0>>16]
|
|
||||||
|
|
||||||
and $i1,lr,$s1,lsr#16 @ i0
|
and $i1,lr,$s1,lsr#16 @ i0
|
||||||
|
ldrb $t2,[$tbl,$i2,lsl#2] @ Te4[s0>>8]
|
||||||
and $i2,lr,$s1
|
and $i2,lr,$s1
|
||||||
|
ldrb $t3,[$tbl,$i3,lsl#2] @ Te4[s0>>16]
|
||||||
and $i3,lr,$s1,lsr#8
|
and $i3,lr,$s1,lsr#8
|
||||||
|
ldrb $s0,[$tbl,$s0,lsl#2] @ Te4[s0>>24]
|
||||||
mov $s1,$s1,lsr#24
|
mov $s1,$s1,lsr#24
|
||||||
|
|
||||||
ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s1>>16]
|
ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s1>>16]
|
||||||
ldrb $s1,[$tbl,$s1,lsl#2] @ Te4[s1>>24]
|
|
||||||
ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s1>>0]
|
ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s1>>0]
|
||||||
ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s1>>8]
|
ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s1>>8]
|
||||||
eor $s0,$i1,$s0,lsl#8
|
eor $s0,$i1,$s0,lsl#8
|
||||||
eor $s1,$t1,$s1,lsl#24
|
ldrb $s1,[$tbl,$s1,lsl#2] @ Te4[s1>>24]
|
||||||
eor $t2,$i2,$t2,lsl#8
|
|
||||||
eor $t3,$i3,$t3,lsl#8
|
|
||||||
|
|
||||||
and $i1,lr,$s2,lsr#8 @ i0
|
and $i1,lr,$s2,lsr#8 @ i0
|
||||||
|
eor $t2,$i2,$t2,lsl#8
|
||||||
and $i2,lr,$s2,lsr#16 @ i1
|
and $i2,lr,$s2,lsr#16 @ i1
|
||||||
|
eor $t3,$i3,$t3,lsl#8
|
||||||
and $i3,lr,$s2
|
and $i3,lr,$s2
|
||||||
mov $s2,$s2,lsr#24
|
eor $s1,$t1,$s1,lsl#24
|
||||||
ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s2>>8]
|
ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s2>>8]
|
||||||
|
mov $s2,$s2,lsr#24
|
||||||
|
|
||||||
ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s2>>16]
|
ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s2>>16]
|
||||||
ldrb $s2,[$tbl,$s2,lsl#2] @ Te4[s2>>24]
|
|
||||||
ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s2>>0]
|
ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s2>>0]
|
||||||
eor $s0,$i1,$s0,lsl#8
|
eor $s0,$i1,$s0,lsl#8
|
||||||
eor $s1,$s1,$i2,lsl#16
|
ldrb $s2,[$tbl,$s2,lsl#2] @ Te4[s2>>24]
|
||||||
eor $s2,$t2,$s2,lsl#24
|
|
||||||
eor $t3,$i3,$t3,lsl#8
|
|
||||||
|
|
||||||
and $i1,lr,$s3 @ i0
|
and $i1,lr,$s3 @ i0
|
||||||
|
eor $s1,$s1,$i2,lsl#16
|
||||||
and $i2,lr,$s3,lsr#8 @ i1
|
and $i2,lr,$s3,lsr#8 @ i1
|
||||||
|
eor $t3,$i3,$t3,lsl#8
|
||||||
and $i3,lr,$s3,lsr#16 @ i2
|
and $i3,lr,$s3,lsr#16 @ i2
|
||||||
mov $s3,$s3,lsr#24
|
eor $s2,$t2,$s2,lsl#24
|
||||||
ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s3>>0]
|
ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s3>>0]
|
||||||
|
mov $s3,$s3,lsr#24
|
||||||
|
|
||||||
ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s3>>8]
|
ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s3>>8]
|
||||||
ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s3>>16]
|
ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s3>>16]
|
||||||
ldrb $s3,[$tbl,$s3,lsl#2] @ Te4[s3>>24]
|
|
||||||
eor $s0,$i1,$s0,lsl#8
|
eor $s0,$i1,$s0,lsl#8
|
||||||
|
ldrb $s3,[$tbl,$s3,lsl#2] @ Te4[s3>>24]
|
||||||
|
ldr $i1,[$key,#0]
|
||||||
eor $s1,$s1,$i2,lsl#8
|
eor $s1,$s1,$i2,lsl#8
|
||||||
|
ldr $t1,[$key,#4]
|
||||||
eor $s2,$s2,$i3,lsl#16
|
eor $s2,$s2,$i3,lsl#16
|
||||||
|
ldr $t2,[$key,#8]
|
||||||
eor $s3,$t3,$s3,lsl#24
|
eor $s3,$t3,$s3,lsl#24
|
||||||
|
ldr $t3,[$key,#12]
|
||||||
|
|
||||||
ldr lr,[sp],#4 @ pop lr
|
eor $s0,$s0,$i1
|
||||||
ldr $t1,[$key,#0]
|
eor $s1,$s1,$t1
|
||||||
ldr $t2,[$key,#4]
|
eor $s2,$s2,$t2
|
||||||
ldr $t3,[$key,#8]
|
eor $s3,$s3,$t3
|
||||||
ldr $i1,[$key,#12]
|
|
||||||
eor $s0,$s0,$t1
|
|
||||||
eor $s1,$s1,$t2
|
|
||||||
eor $s2,$s2,$t3
|
|
||||||
eor $s3,$s3,$i1
|
|
||||||
|
|
||||||
sub $tbl,$tbl,#2
|
sub $tbl,$tbl,#2
|
||||||
mov pc,lr @ return
|
ldr pc,[sp],#4 @ pop and return
|
||||||
.size _armv4_AES_encrypt,.-_armv4_AES_encrypt
|
.size _armv4_AES_encrypt,.-_armv4_AES_encrypt
|
||||||
|
|
||||||
.global AES_set_encrypt_key
|
.global AES_set_encrypt_key
|
||||||
@ -399,31 +403,31 @@ AES_set_encrypt_key:
|
|||||||
ldrb $t2,[$rounds,#1]
|
ldrb $t2,[$rounds,#1]
|
||||||
ldrb $t3,[$rounds,#0]
|
ldrb $t3,[$rounds,#0]
|
||||||
orr $s0,$s0,$t1,lsl#8
|
orr $s0,$s0,$t1,lsl#8
|
||||||
orr $s0,$s0,$t2,lsl#16
|
|
||||||
orr $s0,$s0,$t3,lsl#24
|
|
||||||
ldrb $s1,[$rounds,#7]
|
ldrb $s1,[$rounds,#7]
|
||||||
|
orr $s0,$s0,$t2,lsl#16
|
||||||
ldrb $t1,[$rounds,#6]
|
ldrb $t1,[$rounds,#6]
|
||||||
|
orr $s0,$s0,$t3,lsl#24
|
||||||
ldrb $t2,[$rounds,#5]
|
ldrb $t2,[$rounds,#5]
|
||||||
ldrb $t3,[$rounds,#4]
|
ldrb $t3,[$rounds,#4]
|
||||||
orr $s1,$s1,$t1,lsl#8
|
orr $s1,$s1,$t1,lsl#8
|
||||||
orr $s1,$s1,$t2,lsl#16
|
|
||||||
orr $s1,$s1,$t3,lsl#24
|
|
||||||
ldrb $s2,[$rounds,#11]
|
ldrb $s2,[$rounds,#11]
|
||||||
|
orr $s1,$s1,$t2,lsl#16
|
||||||
ldrb $t1,[$rounds,#10]
|
ldrb $t1,[$rounds,#10]
|
||||||
|
orr $s1,$s1,$t3,lsl#24
|
||||||
ldrb $t2,[$rounds,#9]
|
ldrb $t2,[$rounds,#9]
|
||||||
ldrb $t3,[$rounds,#8]
|
ldrb $t3,[$rounds,#8]
|
||||||
orr $s2,$s2,$t1,lsl#8
|
orr $s2,$s2,$t1,lsl#8
|
||||||
orr $s2,$s2,$t2,lsl#16
|
|
||||||
orr $s2,$s2,$t3,lsl#24
|
|
||||||
ldrb $s3,[$rounds,#15]
|
ldrb $s3,[$rounds,#15]
|
||||||
|
orr $s2,$s2,$t2,lsl#16
|
||||||
ldrb $t1,[$rounds,#14]
|
ldrb $t1,[$rounds,#14]
|
||||||
|
orr $s2,$s2,$t3,lsl#24
|
||||||
ldrb $t2,[$rounds,#13]
|
ldrb $t2,[$rounds,#13]
|
||||||
ldrb $t3,[$rounds,#12]
|
ldrb $t3,[$rounds,#12]
|
||||||
orr $s3,$s3,$t1,lsl#8
|
orr $s3,$s3,$t1,lsl#8
|
||||||
orr $s3,$s3,$t2,lsl#16
|
|
||||||
orr $s3,$s3,$t3,lsl#24
|
|
||||||
str $s0,[$key],#16
|
str $s0,[$key],#16
|
||||||
|
orr $s3,$s3,$t2,lsl#16
|
||||||
str $s1,[$key,#-12]
|
str $s1,[$key,#-12]
|
||||||
|
orr $s3,$s3,$t3,lsl#24
|
||||||
str $s2,[$key,#-8]
|
str $s2,[$key,#-8]
|
||||||
str $s3,[$key,#-4]
|
str $s3,[$key,#-4]
|
||||||
|
|
||||||
@ -437,27 +441,26 @@ AES_set_encrypt_key:
|
|||||||
.L128_loop:
|
.L128_loop:
|
||||||
and $t2,lr,$s3,lsr#24
|
and $t2,lr,$s3,lsr#24
|
||||||
and $i1,lr,$s3,lsr#16
|
and $i1,lr,$s3,lsr#16
|
||||||
and $i2,lr,$s3,lsr#8
|
|
||||||
and $i3,lr,$s3
|
|
||||||
ldrb $t2,[$tbl,$t2]
|
ldrb $t2,[$tbl,$t2]
|
||||||
|
and $i2,lr,$s3,lsr#8
|
||||||
ldrb $i1,[$tbl,$i1]
|
ldrb $i1,[$tbl,$i1]
|
||||||
|
and $i3,lr,$s3
|
||||||
ldrb $i2,[$tbl,$i2]
|
ldrb $i2,[$tbl,$i2]
|
||||||
ldrb $i3,[$tbl,$i3]
|
|
||||||
ldr $t1,[$t3],#4 @ rcon[i++]
|
|
||||||
orr $t2,$t2,$i1,lsl#24
|
orr $t2,$t2,$i1,lsl#24
|
||||||
|
ldrb $i3,[$tbl,$i3]
|
||||||
orr $t2,$t2,$i2,lsl#16
|
orr $t2,$t2,$i2,lsl#16
|
||||||
|
ldr $t1,[$t3],#4 @ rcon[i++]
|
||||||
orr $t2,$t2,$i3,lsl#8
|
orr $t2,$t2,$i3,lsl#8
|
||||||
eor $t2,$t2,$t1
|
eor $t2,$t2,$t1
|
||||||
eor $s0,$s0,$t2 @ rk[4]=rk[0]^...
|
eor $s0,$s0,$t2 @ rk[4]=rk[0]^...
|
||||||
eor $s1,$s1,$s0 @ rk[5]=rk[1]^rk[4]
|
eor $s1,$s1,$s0 @ rk[5]=rk[1]^rk[4]
|
||||||
eor $s2,$s2,$s1 @ rk[6]=rk[2]^rk[5]
|
|
||||||
eor $s3,$s3,$s2 @ rk[7]=rk[3]^rk[6]
|
|
||||||
str $s0,[$key],#16
|
str $s0,[$key],#16
|
||||||
|
eor $s2,$s2,$s1 @ rk[6]=rk[2]^rk[5]
|
||||||
str $s1,[$key,#-12]
|
str $s1,[$key,#-12]
|
||||||
|
eor $s3,$s3,$s2 @ rk[7]=rk[3]^rk[6]
|
||||||
str $s2,[$key,#-8]
|
str $s2,[$key,#-8]
|
||||||
str $s3,[$key,#-4]
|
|
||||||
|
|
||||||
subs $rounds,$rounds,#1
|
subs $rounds,$rounds,#1
|
||||||
|
str $s3,[$key,#-4]
|
||||||
bne .L128_loop
|
bne .L128_loop
|
||||||
sub r2,$key,#176
|
sub r2,$key,#176
|
||||||
b .Ldone
|
b .Ldone
|
||||||
@ -468,16 +471,16 @@ AES_set_encrypt_key:
|
|||||||
ldrb $t2,[$rounds,#17]
|
ldrb $t2,[$rounds,#17]
|
||||||
ldrb $t3,[$rounds,#16]
|
ldrb $t3,[$rounds,#16]
|
||||||
orr $i2,$i2,$t1,lsl#8
|
orr $i2,$i2,$t1,lsl#8
|
||||||
orr $i2,$i2,$t2,lsl#16
|
|
||||||
orr $i2,$i2,$t3,lsl#24
|
|
||||||
ldrb $i3,[$rounds,#23]
|
ldrb $i3,[$rounds,#23]
|
||||||
|
orr $i2,$i2,$t2,lsl#16
|
||||||
ldrb $t1,[$rounds,#22]
|
ldrb $t1,[$rounds,#22]
|
||||||
|
orr $i2,$i2,$t3,lsl#24
|
||||||
ldrb $t2,[$rounds,#21]
|
ldrb $t2,[$rounds,#21]
|
||||||
ldrb $t3,[$rounds,#20]
|
ldrb $t3,[$rounds,#20]
|
||||||
orr $i3,$i3,$t1,lsl#8
|
orr $i3,$i3,$t1,lsl#8
|
||||||
orr $i3,$i3,$t2,lsl#16
|
orr $i3,$i3,$t2,lsl#16
|
||||||
orr $i3,$i3,$t3,lsl#24
|
|
||||||
str $i2,[$key],#8
|
str $i2,[$key],#8
|
||||||
|
orr $i3,$i3,$t3,lsl#24
|
||||||
str $i3,[$key,#-4]
|
str $i3,[$key,#-4]
|
||||||
|
|
||||||
teq lr,#192
|
teq lr,#192
|
||||||
@ -491,27 +494,26 @@ AES_set_encrypt_key:
|
|||||||
.L192_loop:
|
.L192_loop:
|
||||||
and $t2,lr,$i3,lsr#24
|
and $t2,lr,$i3,lsr#24
|
||||||
and $i1,lr,$i3,lsr#16
|
and $i1,lr,$i3,lsr#16
|
||||||
and $i2,lr,$i3,lsr#8
|
|
||||||
and $i3,lr,$i3
|
|
||||||
ldrb $t2,[$tbl,$t2]
|
ldrb $t2,[$tbl,$t2]
|
||||||
|
and $i2,lr,$i3,lsr#8
|
||||||
ldrb $i1,[$tbl,$i1]
|
ldrb $i1,[$tbl,$i1]
|
||||||
|
and $i3,lr,$i3
|
||||||
ldrb $i2,[$tbl,$i2]
|
ldrb $i2,[$tbl,$i2]
|
||||||
ldrb $i3,[$tbl,$i3]
|
|
||||||
ldr $t1,[$t3],#4 @ rcon[i++]
|
|
||||||
orr $t2,$t2,$i1,lsl#24
|
orr $t2,$t2,$i1,lsl#24
|
||||||
|
ldrb $i3,[$tbl,$i3]
|
||||||
orr $t2,$t2,$i2,lsl#16
|
orr $t2,$t2,$i2,lsl#16
|
||||||
|
ldr $t1,[$t3],#4 @ rcon[i++]
|
||||||
orr $t2,$t2,$i3,lsl#8
|
orr $t2,$t2,$i3,lsl#8
|
||||||
eor $i3,$t2,$t1
|
eor $i3,$t2,$t1
|
||||||
eor $s0,$s0,$i3 @ rk[6]=rk[0]^...
|
eor $s0,$s0,$i3 @ rk[6]=rk[0]^...
|
||||||
eor $s1,$s1,$s0 @ rk[7]=rk[1]^rk[6]
|
eor $s1,$s1,$s0 @ rk[7]=rk[1]^rk[6]
|
||||||
eor $s2,$s2,$s1 @ rk[8]=rk[2]^rk[7]
|
|
||||||
eor $s3,$s3,$s2 @ rk[9]=rk[3]^rk[8]
|
|
||||||
str $s0,[$key],#24
|
str $s0,[$key],#24
|
||||||
|
eor $s2,$s2,$s1 @ rk[8]=rk[2]^rk[7]
|
||||||
str $s1,[$key,#-20]
|
str $s1,[$key,#-20]
|
||||||
|
eor $s3,$s3,$s2 @ rk[9]=rk[3]^rk[8]
|
||||||
str $s2,[$key,#-16]
|
str $s2,[$key,#-16]
|
||||||
str $s3,[$key,#-12]
|
|
||||||
|
|
||||||
subs $rounds,$rounds,#1
|
subs $rounds,$rounds,#1
|
||||||
|
str $s3,[$key,#-12]
|
||||||
subeq r2,$key,#216
|
subeq r2,$key,#216
|
||||||
beq .Ldone
|
beq .Ldone
|
||||||
|
|
||||||
@ -529,16 +531,16 @@ AES_set_encrypt_key:
|
|||||||
ldrb $t2,[$rounds,#25]
|
ldrb $t2,[$rounds,#25]
|
||||||
ldrb $t3,[$rounds,#24]
|
ldrb $t3,[$rounds,#24]
|
||||||
orr $i2,$i2,$t1,lsl#8
|
orr $i2,$i2,$t1,lsl#8
|
||||||
orr $i2,$i2,$t2,lsl#16
|
|
||||||
orr $i2,$i2,$t3,lsl#24
|
|
||||||
ldrb $i3,[$rounds,#31]
|
ldrb $i3,[$rounds,#31]
|
||||||
|
orr $i2,$i2,$t2,lsl#16
|
||||||
ldrb $t1,[$rounds,#30]
|
ldrb $t1,[$rounds,#30]
|
||||||
|
orr $i2,$i2,$t3,lsl#24
|
||||||
ldrb $t2,[$rounds,#29]
|
ldrb $t2,[$rounds,#29]
|
||||||
ldrb $t3,[$rounds,#28]
|
ldrb $t3,[$rounds,#28]
|
||||||
orr $i3,$i3,$t1,lsl#8
|
orr $i3,$i3,$t1,lsl#8
|
||||||
orr $i3,$i3,$t2,lsl#16
|
orr $i3,$i3,$t2,lsl#16
|
||||||
orr $i3,$i3,$t3,lsl#24
|
|
||||||
str $i2,[$key],#8
|
str $i2,[$key],#8
|
||||||
|
orr $i3,$i3,$t3,lsl#24
|
||||||
str $i3,[$key,#-4]
|
str $i3,[$key,#-4]
|
||||||
|
|
||||||
mov $rounds,#14
|
mov $rounds,#14
|
||||||
@ -550,52 +552,51 @@ AES_set_encrypt_key:
|
|||||||
.L256_loop:
|
.L256_loop:
|
||||||
and $t2,lr,$i3,lsr#24
|
and $t2,lr,$i3,lsr#24
|
||||||
and $i1,lr,$i3,lsr#16
|
and $i1,lr,$i3,lsr#16
|
||||||
and $i2,lr,$i3,lsr#8
|
|
||||||
and $i3,lr,$i3
|
|
||||||
ldrb $t2,[$tbl,$t2]
|
ldrb $t2,[$tbl,$t2]
|
||||||
|
and $i2,lr,$i3,lsr#8
|
||||||
ldrb $i1,[$tbl,$i1]
|
ldrb $i1,[$tbl,$i1]
|
||||||
|
and $i3,lr,$i3
|
||||||
ldrb $i2,[$tbl,$i2]
|
ldrb $i2,[$tbl,$i2]
|
||||||
ldrb $i3,[$tbl,$i3]
|
|
||||||
ldr $t1,[$t3],#4 @ rcon[i++]
|
|
||||||
orr $t2,$t2,$i1,lsl#24
|
orr $t2,$t2,$i1,lsl#24
|
||||||
|
ldrb $i3,[$tbl,$i3]
|
||||||
orr $t2,$t2,$i2,lsl#16
|
orr $t2,$t2,$i2,lsl#16
|
||||||
|
ldr $t1,[$t3],#4 @ rcon[i++]
|
||||||
orr $t2,$t2,$i3,lsl#8
|
orr $t2,$t2,$i3,lsl#8
|
||||||
eor $i3,$t2,$t1
|
eor $i3,$t2,$t1
|
||||||
eor $s0,$s0,$i3 @ rk[8]=rk[0]^...
|
eor $s0,$s0,$i3 @ rk[8]=rk[0]^...
|
||||||
eor $s1,$s1,$s0 @ rk[9]=rk[1]^rk[8]
|
eor $s1,$s1,$s0 @ rk[9]=rk[1]^rk[8]
|
||||||
eor $s2,$s2,$s1 @ rk[10]=rk[2]^rk[9]
|
|
||||||
eor $s3,$s3,$s2 @ rk[11]=rk[3]^rk[10]
|
|
||||||
str $s0,[$key],#32
|
str $s0,[$key],#32
|
||||||
|
eor $s2,$s2,$s1 @ rk[10]=rk[2]^rk[9]
|
||||||
str $s1,[$key,#-28]
|
str $s1,[$key,#-28]
|
||||||
|
eor $s3,$s3,$s2 @ rk[11]=rk[3]^rk[10]
|
||||||
str $s2,[$key,#-24]
|
str $s2,[$key,#-24]
|
||||||
str $s3,[$key,#-20]
|
|
||||||
|
|
||||||
subs $rounds,$rounds,#1
|
subs $rounds,$rounds,#1
|
||||||
|
str $s3,[$key,#-20]
|
||||||
subeq r2,$key,#256
|
subeq r2,$key,#256
|
||||||
beq .Ldone
|
beq .Ldone
|
||||||
|
|
||||||
and $t2,lr,$s3
|
and $t2,lr,$s3
|
||||||
and $i1,lr,$s3,lsr#8
|
and $i1,lr,$s3,lsr#8
|
||||||
and $i2,lr,$s3,lsr#16
|
|
||||||
and $i3,lr,$s3,lsr#24
|
|
||||||
ldrb $t2,[$tbl,$t2]
|
ldrb $t2,[$tbl,$t2]
|
||||||
|
and $i2,lr,$s3,lsr#16
|
||||||
ldrb $i1,[$tbl,$i1]
|
ldrb $i1,[$tbl,$i1]
|
||||||
|
and $i3,lr,$s3,lsr#24
|
||||||
ldrb $i2,[$tbl,$i2]
|
ldrb $i2,[$tbl,$i2]
|
||||||
ldrb $i3,[$tbl,$i3]
|
|
||||||
orr $t2,$t2,$i1,lsl#8
|
orr $t2,$t2,$i1,lsl#8
|
||||||
|
ldrb $i3,[$tbl,$i3]
|
||||||
orr $t2,$t2,$i2,lsl#16
|
orr $t2,$t2,$i2,lsl#16
|
||||||
|
ldr $t1,[$key,#-48]
|
||||||
orr $t2,$t2,$i3,lsl#24
|
orr $t2,$t2,$i3,lsl#24
|
||||||
|
|
||||||
ldr $t1,[$key,#-48]
|
|
||||||
ldr $i1,[$key,#-44]
|
ldr $i1,[$key,#-44]
|
||||||
ldr $i2,[$key,#-40]
|
ldr $i2,[$key,#-40]
|
||||||
ldr $i3,[$key,#-36]
|
|
||||||
eor $t1,$t1,$t2 @ rk[12]=rk[4]^...
|
eor $t1,$t1,$t2 @ rk[12]=rk[4]^...
|
||||||
|
ldr $i3,[$key,#-36]
|
||||||
eor $i1,$i1,$t1 @ rk[13]=rk[5]^rk[12]
|
eor $i1,$i1,$t1 @ rk[13]=rk[5]^rk[12]
|
||||||
eor $i2,$i2,$i1 @ rk[14]=rk[6]^rk[13]
|
|
||||||
eor $i3,$i3,$i2 @ rk[15]=rk[7]^rk[14]
|
|
||||||
str $t1,[$key,#-16]
|
str $t1,[$key,#-16]
|
||||||
|
eor $i2,$i2,$i1 @ rk[14]=rk[6]^rk[13]
|
||||||
str $i1,[$key,#-12]
|
str $i1,[$key,#-12]
|
||||||
|
eor $i3,$i3,$i2 @ rk[15]=rk[7]^rk[14]
|
||||||
str $i2,[$key,#-8]
|
str $i2,[$key,#-8]
|
||||||
str $i3,[$key,#-4]
|
str $i3,[$key,#-4]
|
||||||
b .L256_loop
|
b .L256_loop
|
||||||
@ -816,24 +817,24 @@ AES_decrypt:
|
|||||||
ldrb $t2,[$rounds,#1]
|
ldrb $t2,[$rounds,#1]
|
||||||
ldrb $t3,[$rounds,#0]
|
ldrb $t3,[$rounds,#0]
|
||||||
orr $s0,$s0,$t1,lsl#8
|
orr $s0,$s0,$t1,lsl#8
|
||||||
orr $s0,$s0,$t2,lsl#16
|
|
||||||
orr $s0,$s0,$t3,lsl#24
|
|
||||||
ldrb $s1,[$rounds,#7]
|
ldrb $s1,[$rounds,#7]
|
||||||
|
orr $s0,$s0,$t2,lsl#16
|
||||||
ldrb $t1,[$rounds,#6]
|
ldrb $t1,[$rounds,#6]
|
||||||
|
orr $s0,$s0,$t3,lsl#24
|
||||||
ldrb $t2,[$rounds,#5]
|
ldrb $t2,[$rounds,#5]
|
||||||
ldrb $t3,[$rounds,#4]
|
ldrb $t3,[$rounds,#4]
|
||||||
orr $s1,$s1,$t1,lsl#8
|
orr $s1,$s1,$t1,lsl#8
|
||||||
orr $s1,$s1,$t2,lsl#16
|
|
||||||
orr $s1,$s1,$t3,lsl#24
|
|
||||||
ldrb $s2,[$rounds,#11]
|
ldrb $s2,[$rounds,#11]
|
||||||
|
orr $s1,$s1,$t2,lsl#16
|
||||||
ldrb $t1,[$rounds,#10]
|
ldrb $t1,[$rounds,#10]
|
||||||
|
orr $s1,$s1,$t3,lsl#24
|
||||||
ldrb $t2,[$rounds,#9]
|
ldrb $t2,[$rounds,#9]
|
||||||
ldrb $t3,[$rounds,#8]
|
ldrb $t3,[$rounds,#8]
|
||||||
orr $s2,$s2,$t1,lsl#8
|
orr $s2,$s2,$t1,lsl#8
|
||||||
orr $s2,$s2,$t2,lsl#16
|
|
||||||
orr $s2,$s2,$t3,lsl#24
|
|
||||||
ldrb $s3,[$rounds,#15]
|
ldrb $s3,[$rounds,#15]
|
||||||
|
orr $s2,$s2,$t2,lsl#16
|
||||||
ldrb $t1,[$rounds,#14]
|
ldrb $t1,[$rounds,#14]
|
||||||
|
orr $s2,$s2,$t3,lsl#24
|
||||||
ldrb $t2,[$rounds,#13]
|
ldrb $t2,[$rounds,#13]
|
||||||
ldrb $t3,[$rounds,#12]
|
ldrb $t3,[$rounds,#12]
|
||||||
orr $s3,$s3,$t1,lsl#8
|
orr $s3,$s3,$t1,lsl#8
|
||||||
@ -848,24 +849,24 @@ AES_decrypt:
|
|||||||
mov $t3,$s0,lsr#8
|
mov $t3,$s0,lsr#8
|
||||||
strb $t1,[$rounds,#0]
|
strb $t1,[$rounds,#0]
|
||||||
strb $t2,[$rounds,#1]
|
strb $t2,[$rounds,#1]
|
||||||
strb $t3,[$rounds,#2]
|
|
||||||
strb $s0,[$rounds,#3]
|
|
||||||
mov $t1,$s1,lsr#24
|
mov $t1,$s1,lsr#24
|
||||||
|
strb $t3,[$rounds,#2]
|
||||||
mov $t2,$s1,lsr#16
|
mov $t2,$s1,lsr#16
|
||||||
|
strb $s0,[$rounds,#3]
|
||||||
mov $t3,$s1,lsr#8
|
mov $t3,$s1,lsr#8
|
||||||
strb $t1,[$rounds,#4]
|
strb $t1,[$rounds,#4]
|
||||||
strb $t2,[$rounds,#5]
|
strb $t2,[$rounds,#5]
|
||||||
strb $t3,[$rounds,#6]
|
|
||||||
strb $s1,[$rounds,#7]
|
|
||||||
mov $t1,$s2,lsr#24
|
mov $t1,$s2,lsr#24
|
||||||
|
strb $t3,[$rounds,#6]
|
||||||
mov $t2,$s2,lsr#16
|
mov $t2,$s2,lsr#16
|
||||||
|
strb $s1,[$rounds,#7]
|
||||||
mov $t3,$s2,lsr#8
|
mov $t3,$s2,lsr#8
|
||||||
strb $t1,[$rounds,#8]
|
strb $t1,[$rounds,#8]
|
||||||
strb $t2,[$rounds,#9]
|
strb $t2,[$rounds,#9]
|
||||||
strb $t3,[$rounds,#10]
|
|
||||||
strb $s2,[$rounds,#11]
|
|
||||||
mov $t1,$s3,lsr#24
|
mov $t1,$s3,lsr#24
|
||||||
|
strb $t3,[$rounds,#10]
|
||||||
mov $t2,$s3,lsr#16
|
mov $t2,$s3,lsr#16
|
||||||
|
strb $s2,[$rounds,#11]
|
||||||
mov $t3,$s3,lsr#8
|
mov $t3,$s3,lsr#8
|
||||||
strb $t1,[$rounds,#12]
|
strb $t1,[$rounds,#12]
|
||||||
strb $t2,[$rounds,#13]
|
strb $t2,[$rounds,#13]
|
||||||
@ -882,146 +883,143 @@ AES_decrypt:
|
|||||||
.align 2
|
.align 2
|
||||||
_armv4_AES_decrypt:
|
_armv4_AES_decrypt:
|
||||||
str lr,[sp,#-4]! @ push lr
|
str lr,[sp,#-4]! @ push lr
|
||||||
ldr $t1,[$key],#16
|
ldmia $key!,{$t1-$i1}
|
||||||
ldr $t2,[$key,#-12]
|
|
||||||
ldr $t3,[$key,#-8]
|
|
||||||
ldr $i1,[$key,#-4]
|
|
||||||
ldr $rounds,[$key,#240-16]
|
|
||||||
eor $s0,$s0,$t1
|
eor $s0,$s0,$t1
|
||||||
|
ldr $rounds,[$key,#240-16]
|
||||||
eor $s1,$s1,$t2
|
eor $s1,$s1,$t2
|
||||||
eor $s2,$s2,$t3
|
eor $s2,$s2,$t3
|
||||||
eor $s3,$s3,$i1
|
eor $s3,$s3,$i1
|
||||||
sub $rounds,$rounds,#1
|
sub $rounds,$rounds,#1
|
||||||
mov lr,#255
|
mov lr,#255
|
||||||
|
|
||||||
.Ldec_loop:
|
|
||||||
and $i1,lr,$s0,lsr#16
|
and $i1,lr,$s0,lsr#16
|
||||||
and $i2,lr,$s0,lsr#8
|
and $i2,lr,$s0,lsr#8
|
||||||
and $i3,lr,$s0
|
and $i3,lr,$s0
|
||||||
mov $s0,$s0,lsr#24
|
mov $s0,$s0,lsr#24
|
||||||
|
.Ldec_loop:
|
||||||
ldr $t1,[$tbl,$i1,lsl#2] @ Td1[s0>>16]
|
ldr $t1,[$tbl,$i1,lsl#2] @ Td1[s0>>16]
|
||||||
ldr $s0,[$tbl,$s0,lsl#2] @ Td0[s0>>24]
|
|
||||||
ldr $t2,[$tbl,$i2,lsl#2] @ Td2[s0>>8]
|
|
||||||
ldr $t3,[$tbl,$i3,lsl#2] @ Td3[s0>>0]
|
|
||||||
|
|
||||||
and $i1,lr,$s1 @ i0
|
and $i1,lr,$s1 @ i0
|
||||||
|
ldr $t2,[$tbl,$i2,lsl#2] @ Td2[s0>>8]
|
||||||
and $i2,lr,$s1,lsr#16
|
and $i2,lr,$s1,lsr#16
|
||||||
|
ldr $t3,[$tbl,$i3,lsl#2] @ Td3[s0>>0]
|
||||||
and $i3,lr,$s1,lsr#8
|
and $i3,lr,$s1,lsr#8
|
||||||
|
ldr $s0,[$tbl,$s0,lsl#2] @ Td0[s0>>24]
|
||||||
mov $s1,$s1,lsr#24
|
mov $s1,$s1,lsr#24
|
||||||
|
|
||||||
ldr $i1,[$tbl,$i1,lsl#2] @ Td3[s1>>0]
|
ldr $i1,[$tbl,$i1,lsl#2] @ Td3[s1>>0]
|
||||||
ldr $s1,[$tbl,$s1,lsl#2] @ Td0[s1>>24]
|
|
||||||
ldr $i2,[$tbl,$i2,lsl#2] @ Td1[s1>>16]
|
ldr $i2,[$tbl,$i2,lsl#2] @ Td1[s1>>16]
|
||||||
ldr $i3,[$tbl,$i3,lsl#2] @ Td2[s1>>8]
|
ldr $i3,[$tbl,$i3,lsl#2] @ Td2[s1>>8]
|
||||||
eor $s0,$s0,$i1,ror#24
|
eor $s0,$s0,$i1,ror#24
|
||||||
eor $s1,$s1,$t1,ror#8
|
ldr $s1,[$tbl,$s1,lsl#2] @ Td0[s1>>24]
|
||||||
eor $t2,$i2,$t2,ror#8
|
|
||||||
eor $t3,$i3,$t3,ror#8
|
|
||||||
|
|
||||||
and $i1,lr,$s2,lsr#8 @ i0
|
and $i1,lr,$s2,lsr#8 @ i0
|
||||||
|
eor $t2,$i2,$t2,ror#8
|
||||||
and $i2,lr,$s2 @ i1
|
and $i2,lr,$s2 @ i1
|
||||||
|
eor $t3,$i3,$t3,ror#8
|
||||||
and $i3,lr,$s2,lsr#16
|
and $i3,lr,$s2,lsr#16
|
||||||
mov $s2,$s2,lsr#24
|
eor $s1,$s1,$t1,ror#8
|
||||||
ldr $i1,[$tbl,$i1,lsl#2] @ Td2[s2>>8]
|
ldr $i1,[$tbl,$i1,lsl#2] @ Td2[s2>>8]
|
||||||
|
mov $s2,$s2,lsr#24
|
||||||
|
|
||||||
ldr $i2,[$tbl,$i2,lsl#2] @ Td3[s2>>0]
|
ldr $i2,[$tbl,$i2,lsl#2] @ Td3[s2>>0]
|
||||||
ldr $s2,[$tbl,$s2,lsl#2] @ Td0[s2>>24]
|
|
||||||
ldr $i3,[$tbl,$i3,lsl#2] @ Td1[s2>>16]
|
ldr $i3,[$tbl,$i3,lsl#2] @ Td1[s2>>16]
|
||||||
eor $s0,$s0,$i1,ror#16
|
eor $s0,$s0,$i1,ror#16
|
||||||
eor $s1,$s1,$i2,ror#24
|
ldr $s2,[$tbl,$s2,lsl#2] @ Td0[s2>>24]
|
||||||
eor $s2,$s2,$t2,ror#8
|
|
||||||
eor $t3,$i3,$t3,ror#8
|
|
||||||
|
|
||||||
and $i1,lr,$s3,lsr#16 @ i0
|
and $i1,lr,$s3,lsr#16 @ i0
|
||||||
|
eor $s1,$s1,$i2,ror#24
|
||||||
and $i2,lr,$s3,lsr#8 @ i1
|
and $i2,lr,$s3,lsr#8 @ i1
|
||||||
|
eor $t3,$i3,$t3,ror#8
|
||||||
and $i3,lr,$s3 @ i2
|
and $i3,lr,$s3 @ i2
|
||||||
mov $s3,$s3,lsr#24
|
eor $s2,$s2,$t2,ror#8
|
||||||
ldr $i1,[$tbl,$i1,lsl#2] @ Td1[s3>>16]
|
ldr $i1,[$tbl,$i1,lsl#2] @ Td1[s3>>16]
|
||||||
|
mov $s3,$s3,lsr#24
|
||||||
|
|
||||||
ldr $i2,[$tbl,$i2,lsl#2] @ Td2[s3>>8]
|
ldr $i2,[$tbl,$i2,lsl#2] @ Td2[s3>>8]
|
||||||
ldr $i3,[$tbl,$i3,lsl#2] @ Td3[s3>>0]
|
ldr $i3,[$tbl,$i3,lsl#2] @ Td3[s3>>0]
|
||||||
ldr $s3,[$tbl,$s3,lsl#2] @ Td0[s3>>24]
|
|
||||||
eor $s0,$s0,$i1,ror#8
|
eor $s0,$s0,$i1,ror#8
|
||||||
|
ldr $s3,[$tbl,$s3,lsl#2] @ Td0[s3>>24]
|
||||||
eor $s1,$s1,$i2,ror#16
|
eor $s1,$s1,$i2,ror#16
|
||||||
eor $s2,$s2,$i3,ror#24
|
eor $s2,$s2,$i3,ror#24
|
||||||
|
ldr $i1,[$key],#16
|
||||||
eor $s3,$s3,$t3,ror#8
|
eor $s3,$s3,$t3,ror#8
|
||||||
|
|
||||||
ldr $t1,[$key],#16
|
ldr $t1,[$key,#-12]
|
||||||
ldr $t2,[$key,#-12]
|
ldr $t2,[$key,#-8]
|
||||||
ldr $t3,[$key,#-8]
|
eor $s0,$s0,$i1
|
||||||
ldr $i1,[$key,#-4]
|
ldr $t3,[$key,#-4]
|
||||||
eor $s0,$s0,$t1
|
and $i1,lr,$s0,lsr#16
|
||||||
eor $s1,$s1,$t2
|
eor $s1,$s1,$t1
|
||||||
eor $s2,$s2,$t3
|
and $i2,lr,$s0,lsr#8
|
||||||
eor $s3,$s3,$i1
|
eor $s2,$s2,$t2
|
||||||
|
and $i3,lr,$s0
|
||||||
|
eor $s3,$s3,$t3
|
||||||
|
mov $s0,$s0,lsr#24
|
||||||
|
|
||||||
subs $rounds,$rounds,#1
|
subs $rounds,$rounds,#1
|
||||||
bne .Ldec_loop
|
bne .Ldec_loop
|
||||||
|
|
||||||
add $tbl,$tbl,#1024
|
add $tbl,$tbl,#1024
|
||||||
|
|
||||||
ldr $t1,[$tbl,#0] @ prefetch Td4
|
ldr $t2,[$tbl,#0] @ prefetch Td4
|
||||||
ldr $t2,[$tbl,#32]
|
ldr $t3,[$tbl,#32]
|
||||||
ldr $t3,[$tbl,#64]
|
ldr $t1,[$tbl,#64]
|
||||||
ldr $i1,[$tbl,#96]
|
ldr $t2,[$tbl,#96]
|
||||||
ldr $i2,[$tbl,#128]
|
ldr $t3,[$tbl,#128]
|
||||||
ldr $i3,[$tbl,#160]
|
ldr $t1,[$tbl,#160]
|
||||||
ldr $t1,[$tbl,#192]
|
ldr $t2,[$tbl,#192]
|
||||||
ldr $t2,[$tbl,#224]
|
ldr $t3,[$tbl,#224]
|
||||||
|
|
||||||
and $i1,lr,$s0,lsr#16
|
ldrb $s0,[$tbl,$s0] @ Td4[s0>>24]
|
||||||
and $i2,lr,$s0,lsr#8
|
|
||||||
and $i3,lr,$s0
|
|
||||||
ldrb $s0,[$tbl,$s0,lsr#24] @ Td4[s0>>24]
|
|
||||||
ldrb $t1,[$tbl,$i1] @ Td4[s0>>16]
|
ldrb $t1,[$tbl,$i1] @ Td4[s0>>16]
|
||||||
ldrb $t2,[$tbl,$i2] @ Td4[s0>>8]
|
|
||||||
ldrb $t3,[$tbl,$i3] @ Td4[s0>>0]
|
|
||||||
|
|
||||||
and $i1,lr,$s1 @ i0
|
and $i1,lr,$s1 @ i0
|
||||||
|
ldrb $t2,[$tbl,$i2] @ Td4[s0>>8]
|
||||||
and $i2,lr,$s1,lsr#16
|
and $i2,lr,$s1,lsr#16
|
||||||
|
ldrb $t3,[$tbl,$i3] @ Td4[s0>>0]
|
||||||
and $i3,lr,$s1,lsr#8
|
and $i3,lr,$s1,lsr#8
|
||||||
|
|
||||||
ldrb $i1,[$tbl,$i1] @ Td4[s1>>0]
|
ldrb $i1,[$tbl,$i1] @ Td4[s1>>0]
|
||||||
ldrb $s1,[$tbl,$s1,lsr#24] @ Td4[s1>>24]
|
ldrb $s1,[$tbl,$s1,lsr#24] @ Td4[s1>>24]
|
||||||
ldrb $i2,[$tbl,$i2] @ Td4[s1>>16]
|
ldrb $i2,[$tbl,$i2] @ Td4[s1>>16]
|
||||||
ldrb $i3,[$tbl,$i3] @ Td4[s1>>8]
|
|
||||||
eor $s0,$i1,$s0,lsl#24
|
eor $s0,$i1,$s0,lsl#24
|
||||||
|
ldrb $i3,[$tbl,$i3] @ Td4[s1>>8]
|
||||||
eor $s1,$t1,$s1,lsl#8
|
eor $s1,$t1,$s1,lsl#8
|
||||||
eor $t2,$t2,$i2,lsl#8
|
|
||||||
eor $t3,$t3,$i3,lsl#8
|
|
||||||
|
|
||||||
and $i1,lr,$s2,lsr#8 @ i0
|
and $i1,lr,$s2,lsr#8 @ i0
|
||||||
|
eor $t2,$t2,$i2,lsl#8
|
||||||
and $i2,lr,$s2 @ i1
|
and $i2,lr,$s2 @ i1
|
||||||
and $i3,lr,$s2,lsr#16
|
eor $t3,$t3,$i3,lsl#8
|
||||||
ldrb $i1,[$tbl,$i1] @ Td4[s2>>8]
|
ldrb $i1,[$tbl,$i1] @ Td4[s2>>8]
|
||||||
|
and $i3,lr,$s2,lsr#16
|
||||||
|
|
||||||
ldrb $i2,[$tbl,$i2] @ Td4[s2>>0]
|
ldrb $i2,[$tbl,$i2] @ Td4[s2>>0]
|
||||||
ldrb $s2,[$tbl,$s2,lsr#24] @ Td4[s2>>24]
|
ldrb $s2,[$tbl,$s2,lsr#24] @ Td4[s2>>24]
|
||||||
ldrb $i3,[$tbl,$i3] @ Td4[s2>>16]
|
|
||||||
eor $s0,$s0,$i1,lsl#8
|
eor $s0,$s0,$i1,lsl#8
|
||||||
|
ldrb $i3,[$tbl,$i3] @ Td4[s2>>16]
|
||||||
eor $s1,$i2,$s1,lsl#16
|
eor $s1,$i2,$s1,lsl#16
|
||||||
eor $s2,$t2,$s2,lsl#16
|
|
||||||
eor $t3,$t3,$i3,lsl#16
|
|
||||||
|
|
||||||
and $i1,lr,$s3,lsr#16 @ i0
|
and $i1,lr,$s3,lsr#16 @ i0
|
||||||
|
eor $s2,$t2,$s2,lsl#16
|
||||||
and $i2,lr,$s3,lsr#8 @ i1
|
and $i2,lr,$s3,lsr#8 @ i1
|
||||||
and $i3,lr,$s3 @ i2
|
eor $t3,$t3,$i3,lsl#16
|
||||||
ldrb $i1,[$tbl,$i1] @ Td4[s3>>16]
|
ldrb $i1,[$tbl,$i1] @ Td4[s3>>16]
|
||||||
|
and $i3,lr,$s3 @ i2
|
||||||
|
|
||||||
ldrb $i2,[$tbl,$i2] @ Td4[s3>>8]
|
ldrb $i2,[$tbl,$i2] @ Td4[s3>>8]
|
||||||
ldrb $i3,[$tbl,$i3] @ Td4[s3>>0]
|
ldrb $i3,[$tbl,$i3] @ Td4[s3>>0]
|
||||||
ldrb $s3,[$tbl,$s3,lsr#24] @ Td4[s3>>24]
|
ldrb $s3,[$tbl,$s3,lsr#24] @ Td4[s3>>24]
|
||||||
eor $s0,$s0,$i1,lsl#16
|
eor $s0,$s0,$i1,lsl#16
|
||||||
|
ldr $i1,[$key,#0]
|
||||||
eor $s1,$s1,$i2,lsl#8
|
eor $s1,$s1,$i2,lsl#8
|
||||||
|
ldr $t1,[$key,#4]
|
||||||
eor $s2,$i3,$s2,lsl#8
|
eor $s2,$i3,$s2,lsl#8
|
||||||
|
ldr $t2,[$key,#8]
|
||||||
eor $s3,$t3,$s3,lsl#24
|
eor $s3,$t3,$s3,lsl#24
|
||||||
|
ldr $t3,[$key,#12]
|
||||||
|
|
||||||
ldr lr,[sp],#4 @ pop lr
|
eor $s0,$s0,$i1
|
||||||
ldr $t1,[$key,#0]
|
eor $s1,$s1,$t1
|
||||||
ldr $t2,[$key,#4]
|
eor $s2,$s2,$t2
|
||||||
ldr $t3,[$key,#8]
|
eor $s3,$s3,$t3
|
||||||
ldr $i1,[$key,#12]
|
|
||||||
eor $s0,$s0,$t1
|
|
||||||
eor $s1,$s1,$t2
|
|
||||||
eor $s2,$s2,$t3
|
|
||||||
eor $s3,$s3,$i1
|
|
||||||
|
|
||||||
sub $tbl,$tbl,#1024
|
sub $tbl,$tbl,#1024
|
||||||
mov pc,lr @ return
|
ldr pc,[sp],#4 @ pop and return
|
||||||
.size _armv4_AES_decrypt,.-_armv4_AES_decrypt
|
.size _armv4_AES_decrypt,.-_armv4_AES_decrypt
|
||||||
.asciz "AES for ARMv4, CRYPTOGAMS by <appro\@openssl.org>"
|
.asciz "AES for ARMv4, CRYPTOGAMS by <appro\@openssl.org>"
|
||||||
.align 2
|
.align 2
|
||||||
@ -1029,3 +1027,4 @@ ___
|
|||||||
|
|
||||||
$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4
|
$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4
|
||||||
print $code;
|
print $code;
|
||||||
|
close STDOUT; # enforce flush
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
print <<'___';
|
||||||
.text
|
.text
|
||||||
|
|
||||||
.set noat
|
.set noat
|
||||||
@ -68,9 +70,9 @@ OPENSSL_wipe_cpu:
|
|||||||
OPENSSL_atomic_add:
|
OPENSSL_atomic_add:
|
||||||
.frame $30,0,$26
|
.frame $30,0,$26
|
||||||
.prologue 0
|
.prologue 0
|
||||||
1: ldl_l $0,($16)
|
1: ldl_l $0,0($16)
|
||||||
addl $0,$17,$1
|
addl $0,$17,$1
|
||||||
stl_c $1,($16)
|
stl_c $1,0($16)
|
||||||
beq $1,1b
|
beq $1,1b
|
||||||
addl $0,$17,$0
|
addl $0,$17,$0
|
||||||
ret ($26)
|
ret ($26)
|
||||||
@ -123,3 +125,4 @@ OPENSSL_cleanse:
|
|||||||
br .Little
|
br .Little
|
||||||
.Ldone: ret ($26)
|
.Ldone: ret ($26)
|
||||||
.end OPENSSL_cleanse
|
.end OPENSSL_cleanse
|
||||||
|
___
|
@ -63,7 +63,7 @@
|
|||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/x509v3.h>
|
#include <openssl/x509v3.h>
|
||||||
|
|
||||||
ASN1_SEQUENCE(X509_CINF) = {
|
ASN1_SEQUENCE_enc(X509_CINF, enc, 0) = {
|
||||||
ASN1_EXP_OPT(X509_CINF, version, ASN1_INTEGER, 0),
|
ASN1_EXP_OPT(X509_CINF, version, ASN1_INTEGER, 0),
|
||||||
ASN1_SIMPLE(X509_CINF, serialNumber, ASN1_INTEGER),
|
ASN1_SIMPLE(X509_CINF, serialNumber, ASN1_INTEGER),
|
||||||
ASN1_SIMPLE(X509_CINF, signature, X509_ALGOR),
|
ASN1_SIMPLE(X509_CINF, signature, X509_ALGOR),
|
||||||
@ -74,7 +74,7 @@ ASN1_SEQUENCE(X509_CINF) = {
|
|||||||
ASN1_IMP_OPT(X509_CINF, issuerUID, ASN1_BIT_STRING, 1),
|
ASN1_IMP_OPT(X509_CINF, issuerUID, ASN1_BIT_STRING, 1),
|
||||||
ASN1_IMP_OPT(X509_CINF, subjectUID, ASN1_BIT_STRING, 2),
|
ASN1_IMP_OPT(X509_CINF, subjectUID, ASN1_BIT_STRING, 2),
|
||||||
ASN1_EXP_SEQUENCE_OF_OPT(X509_CINF, extensions, X509_EXTENSION, 3)
|
ASN1_EXP_SEQUENCE_OF_OPT(X509_CINF, extensions, X509_EXTENSION, 3)
|
||||||
} ASN1_SEQUENCE_END(X509_CINF)
|
} ASN1_SEQUENCE_END_enc(X509_CINF, X509_CINF)
|
||||||
|
|
||||||
IMPLEMENT_ASN1_FUNCTIONS(X509_CINF)
|
IMPLEMENT_ASN1_FUNCTIONS(X509_CINF)
|
||||||
/* X509 top level structure needs a bit of customisation */
|
/* X509 top level structure needs a bit of customisation */
|
||||||
|
@ -41,8 +41,12 @@ $j="s4";
|
|||||||
$m1="s5";
|
$m1="s5";
|
||||||
|
|
||||||
$code=<<___;
|
$code=<<___;
|
||||||
|
#indef __linux__
|
||||||
|
#include <asm/regdef.h>
|
||||||
|
#else
|
||||||
#include <asm.h>
|
#include <asm.h>
|
||||||
#include <regdef.h>
|
#include <regdef.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
@ -76,7 +80,7 @@ bn_mul_mont:
|
|||||||
ldq $aj,8($ap)
|
ldq $aj,8($ap)
|
||||||
subq sp,AT,sp
|
subq sp,AT,sp
|
||||||
ldq $bi,0($bp) # bp[0]
|
ldq $bi,0($bp) # bp[0]
|
||||||
mov -4096,AT
|
lda AT,-4096(zero) # mov -4096,AT
|
||||||
ldq $n0,0($n0)
|
ldq $n0,0($n0)
|
||||||
and sp,AT,sp
|
and sp,AT,sp
|
||||||
|
|
||||||
@ -106,9 +110,9 @@ bn_mul_mont:
|
|||||||
.align 4
|
.align 4
|
||||||
.L1st:
|
.L1st:
|
||||||
.set noreorder
|
.set noreorder
|
||||||
ldq $aj,($aj)
|
ldq $aj,0($aj)
|
||||||
addl $j,1,$j
|
addl $j,1,$j
|
||||||
ldq $nj,($nj)
|
ldq $nj,0($nj)
|
||||||
lda $tp,8($tp)
|
lda $tp,8($tp)
|
||||||
|
|
||||||
addq $alo,$hi0,$lo0
|
addq $alo,$hi0,$lo0
|
||||||
@ -159,12 +163,12 @@ bn_mul_mont:
|
|||||||
.align 4
|
.align 4
|
||||||
.Louter:
|
.Louter:
|
||||||
s8addq $i,$bp,$bi
|
s8addq $i,$bp,$bi
|
||||||
ldq $hi0,($ap)
|
ldq $hi0,0($ap)
|
||||||
ldq $aj,8($ap)
|
ldq $aj,8($ap)
|
||||||
ldq $bi,($bi)
|
ldq $bi,0($bi)
|
||||||
ldq $hi1,($np)
|
ldq $hi1,0($np)
|
||||||
ldq $nj,8($np)
|
ldq $nj,8($np)
|
||||||
ldq $tj,(sp)
|
ldq $tj,0(sp)
|
||||||
|
|
||||||
mulq $hi0,$bi,$lo0
|
mulq $hi0,$bi,$lo0
|
||||||
umulh $hi0,$bi,$hi0
|
umulh $hi0,$bi,$hi0
|
||||||
@ -195,10 +199,10 @@ bn_mul_mont:
|
|||||||
.set noreorder
|
.set noreorder
|
||||||
ldq $tj,8($tp) #L0
|
ldq $tj,8($tp) #L0
|
||||||
nop #U1
|
nop #U1
|
||||||
ldq $aj,($aj) #L1
|
ldq $aj,0($aj) #L1
|
||||||
s8addq $j,$np,$nj #U0
|
s8addq $j,$np,$nj #U0
|
||||||
|
|
||||||
ldq $nj,($nj) #L0
|
ldq $nj,0($nj) #L0
|
||||||
nop #U1
|
nop #U1
|
||||||
addq $alo,$hi0,$lo0 #L1
|
addq $alo,$hi0,$lo0 #L1
|
||||||
lda $tp,8($tp)
|
lda $tp,8($tp)
|
||||||
@ -247,7 +251,7 @@ bn_mul_mont:
|
|||||||
addq $hi1,v0,$hi1
|
addq $hi1,v0,$hi1
|
||||||
|
|
||||||
addq $hi1,$hi0,$lo1
|
addq $hi1,$hi0,$lo1
|
||||||
stq $j,($tp)
|
stq $j,0($tp)
|
||||||
cmpult $lo1,$hi0,$hi1
|
cmpult $lo1,$hi0,$hi1
|
||||||
addq $lo1,$tj,$lo1
|
addq $lo1,$tj,$lo1
|
||||||
cmpult $lo1,$tj,AT
|
cmpult $lo1,$tj,AT
|
||||||
@ -265,8 +269,8 @@ bn_mul_mont:
|
|||||||
mov 0,$hi0 # clear borrow bit
|
mov 0,$hi0 # clear borrow bit
|
||||||
|
|
||||||
.align 4
|
.align 4
|
||||||
.Lsub: ldq $lo0,($tp)
|
.Lsub: ldq $lo0,0($tp)
|
||||||
ldq $lo1,($np)
|
ldq $lo1,0($np)
|
||||||
lda $tp,8($tp)
|
lda $tp,8($tp)
|
||||||
lda $np,8($np)
|
lda $np,8($np)
|
||||||
subq $lo0,$lo1,$lo1 # tp[i]-np[i]
|
subq $lo0,$lo1,$lo1 # tp[i]-np[i]
|
||||||
@ -274,7 +278,7 @@ bn_mul_mont:
|
|||||||
subq $lo1,$hi0,$lo0
|
subq $lo1,$hi0,$lo0
|
||||||
cmpult $lo1,$lo0,$hi0
|
cmpult $lo1,$lo0,$hi0
|
||||||
or $hi0,AT,$hi0
|
or $hi0,AT,$hi0
|
||||||
stq $lo0,($rp)
|
stq $lo0,0($rp)
|
||||||
cmpult $tp,$tj,v0
|
cmpult $tp,$tj,v0
|
||||||
lda $rp,8($rp)
|
lda $rp,8($rp)
|
||||||
bne v0,.Lsub
|
bne v0,.Lsub
|
||||||
@ -288,7 +292,7 @@ bn_mul_mont:
|
|||||||
bis $bp,$ap,$ap # ap=borrow?tp:rp
|
bis $bp,$ap,$ap # ap=borrow?tp:rp
|
||||||
|
|
||||||
.align 4
|
.align 4
|
||||||
.Lcopy: ldq $aj,($ap) # copy or in-place refresh
|
.Lcopy: ldq $aj,0($ap) # copy or in-place refresh
|
||||||
lda $tp,8($tp)
|
lda $tp,8($tp)
|
||||||
lda $rp,8($rp)
|
lda $rp,8($rp)
|
||||||
lda $ap,8($ap)
|
lda $ap,8($ap)
|
||||||
@ -309,8 +313,8 @@ bn_mul_mont:
|
|||||||
lda sp,48(sp)
|
lda sp,48(sp)
|
||||||
ret (ra)
|
ret (ra)
|
||||||
.end bn_mul_mont
|
.end bn_mul_mont
|
||||||
.rdata
|
.ascii "Montgomery Multiplication for Alpha, CRYPTOGAMS by <appro\@openssl.org>"
|
||||||
.asciiz "Montgomery Multiplication for Alpha, CRYPTOGAMS by <appro\@openssl.org>"
|
.align 2
|
||||||
___
|
___
|
||||||
|
|
||||||
print $code;
|
print $code;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.ident "s390x.S, version 1.0"
|
.ident "s390x.S, version 1.1"
|
||||||
// ====================================================================
|
// ====================================================================
|
||||||
// Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
|
// Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
|
||||||
// project.
|
// project.
|
||||||
@ -24,67 +24,67 @@ bn_mul_add_words:
|
|||||||
bler %r14 // if (len<=0) return 0;
|
bler %r14 // if (len<=0) return 0;
|
||||||
|
|
||||||
stmg %r6,%r10,48(%r15)
|
stmg %r6,%r10,48(%r15)
|
||||||
|
lghi %r10,3
|
||||||
lghi %r8,0 // carry = 0
|
lghi %r8,0 // carry = 0
|
||||||
srag %r10,%r4,2 // cnt=len/4
|
nr %r10,%r4 // len%4
|
||||||
jz .Loop1_madd
|
sra %r4,2 // cnt=len/4
|
||||||
|
jz .Loop1_madd // carry is incidentally cleared if branch taken
|
||||||
|
algr zero,zero // clear carry
|
||||||
|
|
||||||
.Loop4_madd:
|
.Loop4_madd:
|
||||||
lg %r7,0(%r2,%r3) // ap[i]
|
lg %r7,0(%r2,%r3) // ap[i]
|
||||||
mlgr %r6,%r5 // *=w
|
mlgr %r6,%r5 // *=w
|
||||||
algr %r7,%r8 // +=carry
|
alcgr %r7,%r8 // +=carry
|
||||||
alcgr %r6,zero
|
alcgr %r6,zero
|
||||||
alg %r7,0(%r2,%r1) // +=rp[i]
|
alg %r7,0(%r2,%r1) // +=rp[i]
|
||||||
alcgr %r6,zero
|
|
||||||
stg %r7,0(%r2,%r1) // rp[i]=
|
stg %r7,0(%r2,%r1) // rp[i]=
|
||||||
|
|
||||||
lg %r9,8(%r2,%r3)
|
lg %r9,8(%r2,%r3)
|
||||||
mlgr %r8,%r5
|
mlgr %r8,%r5
|
||||||
algr %r9,%r6
|
alcgr %r9,%r6
|
||||||
alcgr %r8,zero
|
alcgr %r8,zero
|
||||||
alg %r9,8(%r2,%r1)
|
alg %r9,8(%r2,%r1)
|
||||||
alcgr %r8,zero
|
|
||||||
stg %r9,8(%r2,%r1)
|
stg %r9,8(%r2,%r1)
|
||||||
|
|
||||||
lg %r7,16(%r2,%r3)
|
lg %r7,16(%r2,%r3)
|
||||||
mlgr %r6,%r5
|
mlgr %r6,%r5
|
||||||
algr %r7,%r8
|
alcgr %r7,%r8
|
||||||
alcgr %r6,zero
|
alcgr %r6,zero
|
||||||
alg %r7,16(%r2,%r1)
|
alg %r7,16(%r2,%r1)
|
||||||
alcgr %r6,zero
|
|
||||||
stg %r7,16(%r2,%r1)
|
stg %r7,16(%r2,%r1)
|
||||||
|
|
||||||
lg %r9,24(%r2,%r3)
|
lg %r9,24(%r2,%r3)
|
||||||
mlgr %r8,%r5
|
mlgr %r8,%r5
|
||||||
algr %r9,%r6
|
alcgr %r9,%r6
|
||||||
alcgr %r8,zero
|
alcgr %r8,zero
|
||||||
alg %r9,24(%r2,%r1)
|
alg %r9,24(%r2,%r1)
|
||||||
alcgr %r8,zero
|
|
||||||
stg %r9,24(%r2,%r1)
|
stg %r9,24(%r2,%r1)
|
||||||
|
|
||||||
la %r2,32(%r2) // i+=4
|
la %r2,32(%r2) // i+=4
|
||||||
brct %r10,.Loop4_madd
|
brct %r4,.Loop4_madd
|
||||||
|
|
||||||
lghi %r10,3
|
la %r10,1(%r10) // see if len%4 is zero ...
|
||||||
nr %r4,%r10 // cnt=len%4
|
brct %r10,.Loop1_madd // without touching condition code:-)
|
||||||
jz .Lend_madd
|
|
||||||
|
.Lend_madd:
|
||||||
|
alcgr %r8,zero // collect carry bit
|
||||||
|
lgr %r2,%r8
|
||||||
|
lmg %r6,%r10,48(%r15)
|
||||||
|
br %r14
|
||||||
|
|
||||||
.Loop1_madd:
|
.Loop1_madd:
|
||||||
lg %r7,0(%r2,%r3) // ap[i]
|
lg %r7,0(%r2,%r3) // ap[i]
|
||||||
mlgr %r6,%r5 // *=w
|
mlgr %r6,%r5 // *=w
|
||||||
algr %r7,%r8 // +=carry
|
alcgr %r7,%r8 // +=carry
|
||||||
alcgr %r6,zero
|
alcgr %r6,zero
|
||||||
alg %r7,0(%r2,%r1) // +=rp[i]
|
alg %r7,0(%r2,%r1) // +=rp[i]
|
||||||
alcgr %r6,zero
|
|
||||||
stg %r7,0(%r2,%r1) // rp[i]=
|
stg %r7,0(%r2,%r1) // rp[i]=
|
||||||
|
|
||||||
lgr %r8,%r6
|
lgr %r8,%r6
|
||||||
la %r2,8(%r2) // i++
|
la %r2,8(%r2) // i++
|
||||||
brct %r4,.Loop1_madd
|
brct %r10,.Loop1_madd
|
||||||
|
|
||||||
.Lend_madd:
|
j .Lend_madd
|
||||||
lgr %r2,%r8
|
|
||||||
lmg %r6,%r10,48(%r15)
|
|
||||||
br %r14
|
|
||||||
.size bn_mul_add_words,.-bn_mul_add_words
|
.size bn_mul_add_words,.-bn_mul_add_words
|
||||||
|
|
||||||
// BN_ULONG bn_mul_words(BN_ULONG *r2,BN_ULONG *r3,int r4,BN_ULONG r5);
|
// BN_ULONG bn_mul_words(BN_ULONG *r2,BN_ULONG *r3,int r4,BN_ULONG r5);
|
||||||
@ -99,57 +99,57 @@ bn_mul_words:
|
|||||||
bler %r14 // if (len<=0) return 0;
|
bler %r14 // if (len<=0) return 0;
|
||||||
|
|
||||||
stmg %r6,%r10,48(%r15)
|
stmg %r6,%r10,48(%r15)
|
||||||
|
lghi %r10,3
|
||||||
lghi %r8,0 // carry = 0
|
lghi %r8,0 // carry = 0
|
||||||
srag %r10,%r4,2 // cnt=len/4
|
nr %r10,%r4 // len%4
|
||||||
jz .Loop1_mul
|
sra %r4,2 // cnt=len/4
|
||||||
|
jz .Loop1_mul // carry is incidentally cleared if branch taken
|
||||||
|
algr zero,zero // clear carry
|
||||||
|
|
||||||
.Loop4_mul:
|
.Loop4_mul:
|
||||||
lg %r7,0(%r2,%r3) // ap[i]
|
lg %r7,0(%r2,%r3) // ap[i]
|
||||||
mlgr %r6,%r5 // *=w
|
mlgr %r6,%r5 // *=w
|
||||||
algr %r7,%r8 // +=carry
|
alcgr %r7,%r8 // +=carry
|
||||||
alcgr %r6,zero
|
|
||||||
stg %r7,0(%r2,%r1) // rp[i]=
|
stg %r7,0(%r2,%r1) // rp[i]=
|
||||||
|
|
||||||
lg %r9,8(%r2,%r3)
|
lg %r9,8(%r2,%r3)
|
||||||
mlgr %r8,%r5
|
mlgr %r8,%r5
|
||||||
algr %r9,%r6
|
alcgr %r9,%r6
|
||||||
alcgr %r8,zero
|
|
||||||
stg %r9,8(%r2,%r1)
|
stg %r9,8(%r2,%r1)
|
||||||
|
|
||||||
lg %r7,16(%r2,%r3)
|
lg %r7,16(%r2,%r3)
|
||||||
mlgr %r6,%r5
|
mlgr %r6,%r5
|
||||||
algr %r7,%r8
|
alcgr %r7,%r8
|
||||||
alcgr %r6,zero
|
|
||||||
stg %r7,16(%r2,%r1)
|
stg %r7,16(%r2,%r1)
|
||||||
|
|
||||||
lg %r9,24(%r2,%r3)
|
lg %r9,24(%r2,%r3)
|
||||||
mlgr %r8,%r5
|
mlgr %r8,%r5
|
||||||
algr %r9,%r6
|
alcgr %r9,%r6
|
||||||
alcgr %r8,zero
|
|
||||||
stg %r9,24(%r2,%r1)
|
stg %r9,24(%r2,%r1)
|
||||||
|
|
||||||
la %r2,32(%r2) // i+=4
|
la %r2,32(%r2) // i+=4
|
||||||
brct %r10,.Loop4_mul
|
brct %r4,.Loop4_mul
|
||||||
|
|
||||||
lghi %r10,3
|
la %r10,1(%r10) // see if len%4 is zero ...
|
||||||
nr %r4,%r10 // cnt=len%4
|
brct %r10,.Loop1_madd // without touching condition code:-)
|
||||||
jz .Lend_mul
|
|
||||||
|
.Lend_mul:
|
||||||
|
alcgr %r8,zero // collect carry bit
|
||||||
|
lgr %r2,%r8
|
||||||
|
lmg %r6,%r10,48(%r15)
|
||||||
|
br %r14
|
||||||
|
|
||||||
.Loop1_mul:
|
.Loop1_mul:
|
||||||
lg %r7,0(%r2,%r3) // ap[i]
|
lg %r7,0(%r2,%r3) // ap[i]
|
||||||
mlgr %r6,%r5 // *=w
|
mlgr %r6,%r5 // *=w
|
||||||
algr %r7,%r8 // +=carry
|
alcgr %r7,%r8 // +=carry
|
||||||
alcgr %r6,zero
|
|
||||||
stg %r7,0(%r2,%r1) // rp[i]=
|
stg %r7,0(%r2,%r1) // rp[i]=
|
||||||
|
|
||||||
lgr %r8,%r6
|
lgr %r8,%r6
|
||||||
la %r2,8(%r2) // i++
|
la %r2,8(%r2) // i++
|
||||||
brct %r4,.Loop1_mul
|
brct %r10,.Loop1_mul
|
||||||
|
|
||||||
.Lend_mul:
|
j .Lend_mul
|
||||||
lgr %r2,%r8
|
|
||||||
lmg %r6,%r10,48(%r15)
|
|
||||||
br %r14
|
|
||||||
.size bn_mul_words,.-bn_mul_words
|
.size bn_mul_words,.-bn_mul_words
|
||||||
|
|
||||||
// void bn_sqr_words(BN_ULONG *r2,BN_ULONG *r2,int r4)
|
// void bn_sqr_words(BN_ULONG *r2,BN_ULONG *r2,int r4)
|
||||||
|
@ -301,7 +301,8 @@ int BN_mod_exp2_mont(BIGNUM *rr, const BIGNUM *a1, const BIGNUM *p1,
|
|||||||
r_is_one = 0;
|
r_is_one = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BN_from_montgomery(rr,r,mont,ctx);
|
if (!BN_from_montgomery(rr,r,mont,ctx))
|
||||||
|
goto err;
|
||||||
ret=1;
|
ret=1;
|
||||||
err:
|
err:
|
||||||
if ((in_mont == NULL) && (mont != NULL)) BN_MONT_CTX_free(mont);
|
if ((in_mont == NULL) && (mont != NULL)) BN_MONT_CTX_free(mont);
|
||||||
|
@ -185,7 +185,7 @@ static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa)
|
|||||||
if (!BN_mod_mul(&xr,dsa->priv_key,r,dsa->q,ctx)) goto err;/* s = xr */
|
if (!BN_mod_mul(&xr,dsa->priv_key,r,dsa->q,ctx)) goto err;/* s = xr */
|
||||||
if (!BN_add(s, &xr, &m)) goto err; /* s = m + xr */
|
if (!BN_add(s, &xr, &m)) goto err; /* s = m + xr */
|
||||||
if (BN_cmp(s,dsa->q) > 0)
|
if (BN_cmp(s,dsa->q) > 0)
|
||||||
BN_sub(s,s,dsa->q);
|
if (!BN_sub(s,s,dsa->q)) goto err;
|
||||||
if (!BN_mod_mul(s,s,kinv,dsa->q,ctx)) goto err;
|
if (!BN_mod_mul(s,s,kinv,dsa->q,ctx)) goto err;
|
||||||
|
|
||||||
ret=DSA_SIG_new();
|
ret=DSA_SIG_new();
|
||||||
|
@ -319,6 +319,7 @@ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
size_t i;
|
size_t i;
|
||||||
EC_POINT *p=NULL;
|
EC_POINT *p=NULL;
|
||||||
|
EC_POINT *acc = NULL;
|
||||||
|
|
||||||
if (ctx == NULL)
|
if (ctx == NULL)
|
||||||
{
|
{
|
||||||
@ -338,15 +339,16 @@ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((p = EC_POINT_new(group)) == NULL) goto err;
|
if ((p = EC_POINT_new(group)) == NULL) goto err;
|
||||||
|
if ((acc = EC_POINT_new(group)) == NULL) goto err;
|
||||||
|
|
||||||
if (!EC_POINT_set_to_infinity(group, r)) goto err;
|
if (!EC_POINT_set_to_infinity(group, acc)) goto err;
|
||||||
|
|
||||||
if (scalar)
|
if (scalar)
|
||||||
{
|
{
|
||||||
if (!ec_GF2m_montgomery_point_multiply(group, p, scalar, group->generator, ctx)) goto err;
|
if (!ec_GF2m_montgomery_point_multiply(group, p, scalar, group->generator, ctx)) goto err;
|
||||||
if (BN_is_negative(scalar))
|
if (BN_is_negative(scalar))
|
||||||
if (!group->meth->invert(group, p, ctx)) goto err;
|
if (!group->meth->invert(group, p, ctx)) goto err;
|
||||||
if (!group->meth->add(group, r, r, p, ctx)) goto err;
|
if (!group->meth->add(group, acc, acc, p, ctx)) goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < num; i++)
|
for (i = 0; i < num; i++)
|
||||||
@ -354,13 +356,16 @@ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
|
|||||||
if (!ec_GF2m_montgomery_point_multiply(group, p, scalars[i], points[i], ctx)) goto err;
|
if (!ec_GF2m_montgomery_point_multiply(group, p, scalars[i], points[i], ctx)) goto err;
|
||||||
if (BN_is_negative(scalars[i]))
|
if (BN_is_negative(scalars[i]))
|
||||||
if (!group->meth->invert(group, p, ctx)) goto err;
|
if (!group->meth->invert(group, p, ctx)) goto err;
|
||||||
if (!group->meth->add(group, r, r, p, ctx)) goto err;
|
if (!group->meth->add(group, acc, acc, p, ctx)) goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!EC_POINT_copy(r, acc)) goto err;
|
||||||
|
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
if (p) EC_POINT_free(p);
|
if (p) EC_POINT_free(p);
|
||||||
|
if (acc) EC_POINT_free(acc);
|
||||||
if (new_ctx != NULL)
|
if (new_ctx != NULL)
|
||||||
BN_CTX_free(new_ctx);
|
BN_CTX_free(new_ctx);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -169,11 +169,13 @@ static void ec_pre_comp_clear_free(void *pre_)
|
|||||||
EC_POINT **p;
|
EC_POINT **p;
|
||||||
|
|
||||||
for (p = pre->points; *p != NULL; p++)
|
for (p = pre->points; *p != NULL; p++)
|
||||||
|
{
|
||||||
EC_POINT_clear_free(*p);
|
EC_POINT_clear_free(*p);
|
||||||
OPENSSL_cleanse(pre->points, sizeof pre->points);
|
OPENSSL_cleanse(p, sizeof *p);
|
||||||
|
}
|
||||||
OPENSSL_free(pre->points);
|
OPENSSL_free(pre->points);
|
||||||
}
|
}
|
||||||
OPENSSL_cleanse(pre, sizeof pre);
|
OPENSSL_cleanse(pre, sizeof *pre);
|
||||||
OPENSSL_free(pre);
|
OPENSSL_free(pre);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,6 +204,7 @@ skip_to_init:
|
|||||||
case EVP_CIPH_OFB_MODE:
|
case EVP_CIPH_OFB_MODE:
|
||||||
|
|
||||||
ctx->num = 0;
|
ctx->num = 0;
|
||||||
|
/* fall-through */
|
||||||
|
|
||||||
case EVP_CIPH_CBC_MODE:
|
case EVP_CIPH_CBC_MODE:
|
||||||
|
|
||||||
|
@ -134,6 +134,8 @@ static EVP_PKEY_CTX *int_ctx_new(EVP_PKEY *pkey, ENGINE *e, int id)
|
|||||||
id = pkey->ameth->pkey_id;
|
id = pkey->ameth->pkey_id;
|
||||||
}
|
}
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
if (pkey && pkey->engine)
|
||||||
|
e = pkey->engine;
|
||||||
/* Try to find an ENGINE which implements this method */
|
/* Try to find an ENGINE which implements this method */
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
|
@ -165,7 +165,7 @@
|
|||||||
asm ( \
|
asm ( \
|
||||||
"roll %1,%0" \
|
"roll %1,%0" \
|
||||||
: "=r"(ret) \
|
: "=r"(ret) \
|
||||||
: "I"(n), "0"(a) \
|
: "I"(n), "0"((unsigned int)(a)) \
|
||||||
: "cc"); \
|
: "cc"); \
|
||||||
ret; \
|
ret; \
|
||||||
})
|
})
|
||||||
@ -383,6 +383,7 @@ int HASH_FINAL (unsigned char *md, HASH_CTX *c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MD32_REG_T
|
#ifndef MD32_REG_T
|
||||||
|
#if defined(__alpha) || defined(__sparcv9) || defined(__mips)
|
||||||
#define MD32_REG_T long
|
#define MD32_REG_T long
|
||||||
/*
|
/*
|
||||||
* This comment was originaly written for MD5, which is why it
|
* This comment was originaly written for MD5, which is why it
|
||||||
@ -400,9 +401,15 @@ int HASH_FINAL (unsigned char *md, HASH_CTX *c)
|
|||||||
* Well, to be honest it should say that this *prevents*
|
* Well, to be honest it should say that this *prevents*
|
||||||
* performance degradation.
|
* performance degradation.
|
||||||
* <appro@fy.chalmers.se>
|
* <appro@fy.chalmers.se>
|
||||||
* Apparently there're LP64 compilers that generate better
|
*/
|
||||||
* code if A-D are declared int. Most notably GCC-x86_64
|
#else
|
||||||
* generates better code.
|
/*
|
||||||
|
* Above is not absolute and there are LP64 compilers that
|
||||||
|
* generate better code if MD32_REG_T is defined int. The above
|
||||||
|
* pre-processor condition reflects the circumstances under which
|
||||||
|
* the conclusion was made and is subject to further extension.
|
||||||
* <appro@fy.chalmers.se>
|
* <appro@fy.chalmers.se>
|
||||||
*/
|
*/
|
||||||
|
#define MD32_REG_T int
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -397,11 +397,12 @@ int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx)
|
|||||||
|
|
||||||
|
|
||||||
case OHS_ASN1_HEADER:
|
case OHS_ASN1_HEADER:
|
||||||
/* Now reading ASN1 header: can read at least 6 bytes which
|
/* Now reading ASN1 header: can read at least 2 bytes which
|
||||||
* is more than enough for any valid ASN1 SEQUENCE header
|
* is enough for ASN1 SEQUENCE header and either length field
|
||||||
|
* or at least the length of the length field.
|
||||||
*/
|
*/
|
||||||
n = BIO_get_mem_data(rctx->mem, &p);
|
n = BIO_get_mem_data(rctx->mem, &p);
|
||||||
if (n < 6)
|
if (n < 2)
|
||||||
goto next_io;
|
goto next_io;
|
||||||
|
|
||||||
/* Check it is an ASN1 SEQUENCE */
|
/* Check it is an ASN1 SEQUENCE */
|
||||||
@ -414,6 +415,11 @@ int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx)
|
|||||||
/* Check out length field */
|
/* Check out length field */
|
||||||
if (*p & 0x80)
|
if (*p & 0x80)
|
||||||
{
|
{
|
||||||
|
/* If MSB set on initial length octet we can now
|
||||||
|
* always read 6 octets: make sure we have them.
|
||||||
|
*/
|
||||||
|
if (n < 6)
|
||||||
|
goto next_io;
|
||||||
n = *p & 0x7F;
|
n = *p & 0x7F;
|
||||||
/* Not NDEF or excessive length */
|
/* Not NDEF or excessive length */
|
||||||
if (!n || (n > 4))
|
if (!n || (n > 4))
|
||||||
|
@ -25,11 +25,11 @@
|
|||||||
* (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
|
* (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
|
||||||
* major minor fix final patch/beta)
|
* major minor fix final patch/beta)
|
||||||
*/
|
*/
|
||||||
#define OPENSSL_VERSION_NUMBER 0x10000020
|
#define OPENSSL_VERSION_NUMBER 0x1000002f
|
||||||
#ifdef OPENSSL_FIPS
|
#ifdef OPENSSL_FIPS
|
||||||
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.0b-fips-dev xx XXX xxxx"
|
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.0b-fips 16 Nov 2010"
|
||||||
#else
|
#else
|
||||||
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.0b-dev x XXX xxxx"
|
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.0b 16 Nov 2010"
|
||||||
#endif
|
#endif
|
||||||
#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
|
#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
|
||||||
|
|
||||||
|
@ -167,7 +167,7 @@ my %globals;
|
|||||||
} elsif ($self->{op} =~ /^(pop|push)f/) {
|
} elsif ($self->{op} =~ /^(pop|push)f/) {
|
||||||
$self->{op} .= $self->{sz};
|
$self->{op} .= $self->{sz};
|
||||||
} elsif ($self->{op} eq "call" && $current_segment eq ".CRT\$XCU") {
|
} elsif ($self->{op} eq "call" && $current_segment eq ".CRT\$XCU") {
|
||||||
$self->{op} = "ALIGN\t8\n\tDQ";
|
$self->{op} = "\tDQ";
|
||||||
}
|
}
|
||||||
$self->{op};
|
$self->{op};
|
||||||
}
|
}
|
||||||
@ -545,6 +545,8 @@ my %globals;
|
|||||||
if ($line=~/\.([px])data/) {
|
if ($line=~/\.([px])data/) {
|
||||||
$v.=" rdata align=";
|
$v.=" rdata align=";
|
||||||
$v.=$1 eq "p"? 4 : 8;
|
$v.=$1 eq "p"? 4 : 8;
|
||||||
|
} elsif ($line=~/\.CRT\$/i) {
|
||||||
|
$v.=" rdata align=8";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$v="$current_segment\tENDS\n" if ($current_segment);
|
$v="$current_segment\tENDS\n" if ($current_segment);
|
||||||
@ -552,6 +554,8 @@ my %globals;
|
|||||||
if ($line=~/\.([px])data/) {
|
if ($line=~/\.([px])data/) {
|
||||||
$v.=" READONLY";
|
$v.=" READONLY";
|
||||||
$v.=" ALIGN(".($1 eq "p" ? 4 : 8).")" if ($masm>=$masmref);
|
$v.=" ALIGN(".($1 eq "p" ? 4 : 8).")" if ($masm>=$masmref);
|
||||||
|
} elsif ($line=~/\.CRT\$/i) {
|
||||||
|
$v.=" READONLY DWORD";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$current_segment = $line;
|
$current_segment = $line;
|
||||||
|
@ -107,6 +107,7 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
|
|||||||
unsigned char *B, *D, *I, *p, *Ai;
|
unsigned char *B, *D, *I, *p, *Ai;
|
||||||
int Slen, Plen, Ilen, Ijlen;
|
int Slen, Plen, Ilen, Ijlen;
|
||||||
int i, j, u, v;
|
int i, j, u, v;
|
||||||
|
int ret = 0;
|
||||||
BIGNUM *Ij, *Bpl1; /* These hold Ij and B + 1 */
|
BIGNUM *Ij, *Bpl1; /* These hold Ij and B + 1 */
|
||||||
EVP_MD_CTX ctx;
|
EVP_MD_CTX ctx;
|
||||||
#ifdef DEBUG_KEYGEN
|
#ifdef DEBUG_KEYGEN
|
||||||
@ -144,10 +145,8 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
|
|||||||
I = OPENSSL_malloc (Ilen);
|
I = OPENSSL_malloc (Ilen);
|
||||||
Ij = BN_new();
|
Ij = BN_new();
|
||||||
Bpl1 = BN_new();
|
Bpl1 = BN_new();
|
||||||
if (!D || !Ai || !B || !I || !Ij || !Bpl1) {
|
if (!D || !Ai || !B || !I || !Ij || !Bpl1)
|
||||||
PKCS12err(PKCS12_F_PKCS12_KEY_GEN_UNI,ERR_R_MALLOC_FAILURE);
|
goto err;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
for (i = 0; i < v; i++) D[i] = id;
|
for (i = 0; i < v; i++) D[i] = id;
|
||||||
p = I;
|
p = I;
|
||||||
for (i = 0; i < Slen; i++) *p++ = salt[i % saltlen];
|
for (i = 0; i < Slen; i++) *p++ = salt[i % saltlen];
|
||||||
@ -164,28 +163,22 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
|
|||||||
}
|
}
|
||||||
memcpy (out, Ai, min (n, u));
|
memcpy (out, Ai, min (n, u));
|
||||||
if (u >= n) {
|
if (u >= n) {
|
||||||
OPENSSL_free (Ai);
|
|
||||||
OPENSSL_free (B);
|
|
||||||
OPENSSL_free (D);
|
|
||||||
OPENSSL_free (I);
|
|
||||||
BN_free (Ij);
|
|
||||||
BN_free (Bpl1);
|
|
||||||
EVP_MD_CTX_cleanup(&ctx);
|
|
||||||
#ifdef DEBUG_KEYGEN
|
#ifdef DEBUG_KEYGEN
|
||||||
fprintf(stderr, "Output KEY (length %d)\n", tmpn);
|
fprintf(stderr, "Output KEY (length %d)\n", tmpn);
|
||||||
h__dump(tmpout, tmpn);
|
h__dump(tmpout, tmpn);
|
||||||
#endif
|
#endif
|
||||||
return 1;
|
ret = 1;
|
||||||
|
goto end;
|
||||||
}
|
}
|
||||||
n -= u;
|
n -= u;
|
||||||
out += u;
|
out += u;
|
||||||
for (j = 0; j < v; j++) B[j] = Ai[j % u];
|
for (j = 0; j < v; j++) B[j] = Ai[j % u];
|
||||||
/* Work out B + 1 first then can use B as tmp space */
|
/* Work out B + 1 first then can use B as tmp space */
|
||||||
BN_bin2bn (B, v, Bpl1);
|
if (!BN_bin2bn (B, v, Bpl1)) goto err;
|
||||||
BN_add_word (Bpl1, 1);
|
if (!BN_add_word (Bpl1, 1)) goto err;
|
||||||
for (j = 0; j < Ilen ; j+=v) {
|
for (j = 0; j < Ilen ; j+=v) {
|
||||||
BN_bin2bn (I + j, v, Ij);
|
if (!BN_bin2bn (I + j, v, Ij)) goto err;
|
||||||
BN_add (Ij, Ij, Bpl1);
|
if (!BN_add (Ij, Ij, Bpl1)) goto err;
|
||||||
BN_bn2bin (Ij, B);
|
BN_bn2bin (Ij, B);
|
||||||
Ijlen = BN_num_bytes (Ij);
|
Ijlen = BN_num_bytes (Ij);
|
||||||
/* If more than 2^(v*8) - 1 cut off MSB */
|
/* If more than 2^(v*8) - 1 cut off MSB */
|
||||||
@ -201,6 +194,19 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
|
|||||||
} else BN_bn2bin (Ij, I + j);
|
} else BN_bn2bin (Ij, I + j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err:
|
||||||
|
PKCS12err(PKCS12_F_PKCS12_KEY_GEN_UNI,ERR_R_MALLOC_FAILURE);
|
||||||
|
|
||||||
|
end:
|
||||||
|
OPENSSL_free (Ai);
|
||||||
|
OPENSSL_free (B);
|
||||||
|
OPENSSL_free (D);
|
||||||
|
OPENSSL_free (I);
|
||||||
|
BN_free (Ij);
|
||||||
|
BN_free (Bpl1);
|
||||||
|
EVP_MD_CTX_cleanup(&ctx);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
#ifdef DEBUG_KEYGEN
|
#ifdef DEBUG_KEYGEN
|
||||||
void h__dump (unsigned char *p, int len)
|
void h__dump (unsigned char *p, int len)
|
||||||
|
@ -160,8 +160,8 @@ int RAND_poll(void)
|
|||||||
rdtsc
|
rdtsc
|
||||||
mov tsc, eax
|
mov tsc, eax
|
||||||
}
|
}
|
||||||
#else
|
#elif defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
|
||||||
asm volatile("rdtsc":"=A" (tsc));
|
asm volatile("rdtsc":"=a"(tsc)::"edx");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
RAND_add(&tsc, sizeof(tsc), 1);
|
RAND_add(&tsc, sizeof(tsc), 1);
|
||||||
|
@ -154,14 +154,14 @@
|
|||||||
# define ROTATE_l32(a,n) ({ register unsigned int ret; \
|
# define ROTATE_l32(a,n) ({ register unsigned int ret; \
|
||||||
asm ("roll %%cl,%0" \
|
asm ("roll %%cl,%0" \
|
||||||
: "=r"(ret) \
|
: "=r"(ret) \
|
||||||
: "c"(n),"0"(a) \
|
: "c"(n),"0"((unsigned int)(a)) \
|
||||||
: "cc"); \
|
: "cc"); \
|
||||||
ret; \
|
ret; \
|
||||||
})
|
})
|
||||||
# define ROTATE_r32(a,n) ({ register unsigned int ret; \
|
# define ROTATE_r32(a,n) ({ register unsigned int ret; \
|
||||||
asm ("rorl %%cl,%0" \
|
asm ("rorl %%cl,%0" \
|
||||||
: "=r"(ret) \
|
: "=r"(ret) \
|
||||||
: "c"(n),"0"(a) \
|
: "c"(n),"0"((unsigned int)(a)) \
|
||||||
: "cc"); \
|
: "cc"); \
|
||||||
ret; \
|
ret; \
|
||||||
})
|
})
|
||||||
|
@ -675,7 +675,7 @@ static int RSA_eay_public_decrypt(int flen, const unsigned char *from,
|
|||||||
rsa->_method_mod_n)) goto err;
|
rsa->_method_mod_n)) goto err;
|
||||||
|
|
||||||
if ((padding == RSA_X931_PADDING) && ((ret->d[0] & 0xf) != 12))
|
if ((padding == RSA_X931_PADDING) && ((ret->d[0] & 0xf) != 12))
|
||||||
BN_sub(ret, rsa->n, ret);
|
if (!BN_sub(ret, rsa->n, ret)) goto err;
|
||||||
|
|
||||||
p=buf;
|
p=buf;
|
||||||
i=BN_bn2bin(ret,p);
|
i=BN_bn2bin(ret,p);
|
||||||
|
@ -37,9 +37,18 @@
|
|||||||
# modes are limited. As result it takes more instructions to do
|
# modes are limited. As result it takes more instructions to do
|
||||||
# the same job in Thumb, therefore the code is never twice as
|
# the same job in Thumb, therefore the code is never twice as
|
||||||
# small and always slower.
|
# small and always slower.
|
||||||
# [***] which is also ~35% better than compiler generated code.
|
# [***] which is also ~35% better than compiler generated code. Dual-
|
||||||
|
# issue Cortex A8 core was measured to process input block in
|
||||||
|
# ~990 cycles.
|
||||||
|
|
||||||
$output=shift;
|
# August 2010.
|
||||||
|
#
|
||||||
|
# Rescheduling for dual-issue pipeline resulted in 13% improvement on
|
||||||
|
# Cortex A8 core and in absolute terms ~870 cycles per input block
|
||||||
|
# [or 13.6 cycles per byte].
|
||||||
|
|
||||||
|
|
||||||
|
while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
|
||||||
open STDOUT,">$output";
|
open STDOUT,">$output";
|
||||||
|
|
||||||
$ctx="r0";
|
$ctx="r0";
|
||||||
@ -58,43 +67,22 @@ $t3="r12";
|
|||||||
$Xi="r14";
|
$Xi="r14";
|
||||||
@V=($a,$b,$c,$d,$e);
|
@V=($a,$b,$c,$d,$e);
|
||||||
|
|
||||||
# One can optimize this for aligned access on big-endian architecture,
|
|
||||||
# but code's endian neutrality makes it too pretty:-)
|
|
||||||
sub Xload {
|
|
||||||
my ($a,$b,$c,$d,$e)=@_;
|
|
||||||
$code.=<<___;
|
|
||||||
ldrb $t0,[$inp],#4
|
|
||||||
ldrb $t1,[$inp,#-3]
|
|
||||||
ldrb $t2,[$inp,#-2]
|
|
||||||
ldrb $t3,[$inp,#-1]
|
|
||||||
add $e,$K,$e,ror#2 @ E+=K_00_19
|
|
||||||
orr $t0,$t1,$t0,lsl#8
|
|
||||||
add $e,$e,$a,ror#27 @ E+=ROR(A,27)
|
|
||||||
orr $t0,$t2,$t0,lsl#8
|
|
||||||
eor $t1,$c,$d @ F_xx_xx
|
|
||||||
orr $t0,$t3,$t0,lsl#8
|
|
||||||
add $e,$e,$t0 @ E+=X[i]
|
|
||||||
str $t0,[$Xi,#-4]!
|
|
||||||
___
|
|
||||||
}
|
|
||||||
sub Xupdate {
|
sub Xupdate {
|
||||||
my ($a,$b,$c,$d,$e,$flag)=@_;
|
my ($a,$b,$c,$d,$e,$opt1,$opt2)=@_;
|
||||||
$code.=<<___;
|
$code.=<<___;
|
||||||
ldr $t0,[$Xi,#15*4]
|
ldr $t0,[$Xi,#15*4]
|
||||||
ldr $t1,[$Xi,#13*4]
|
ldr $t1,[$Xi,#13*4]
|
||||||
ldr $t2,[$Xi,#7*4]
|
ldr $t2,[$Xi,#7*4]
|
||||||
ldr $t3,[$Xi,#2*4]
|
|
||||||
add $e,$K,$e,ror#2 @ E+=K_xx_xx
|
add $e,$K,$e,ror#2 @ E+=K_xx_xx
|
||||||
|
ldr $t3,[$Xi,#2*4]
|
||||||
eor $t0,$t0,$t1
|
eor $t0,$t0,$t1
|
||||||
eor $t0,$t0,$t2
|
eor $t2,$t2,$t3
|
||||||
eor $t0,$t0,$t3
|
eor $t1,$c,$d @ F_xx_xx
|
||||||
add $e,$e,$a,ror#27 @ E+=ROR(A,27)
|
|
||||||
___
|
|
||||||
$code.=<<___ if (!defined($flag));
|
|
||||||
eor $t1,$c,$d @ F_xx_xx, but not in 40_59
|
|
||||||
___
|
|
||||||
$code.=<<___;
|
|
||||||
mov $t0,$t0,ror#31
|
mov $t0,$t0,ror#31
|
||||||
|
add $e,$e,$a,ror#27 @ E+=ROR(A,27)
|
||||||
|
eor $t0,$t0,$t2,ror#31
|
||||||
|
$opt1 @ F_xx_xx
|
||||||
|
$opt2 @ F_xx_xx
|
||||||
add $e,$e,$t0 @ E+=X[i]
|
add $e,$e,$t0 @ E+=X[i]
|
||||||
str $t0,[$Xi,#-4]!
|
str $t0,[$Xi,#-4]!
|
||||||
___
|
___
|
||||||
@ -102,19 +90,29 @@ ___
|
|||||||
|
|
||||||
sub BODY_00_15 {
|
sub BODY_00_15 {
|
||||||
my ($a,$b,$c,$d,$e)=@_;
|
my ($a,$b,$c,$d,$e)=@_;
|
||||||
&Xload(@_);
|
|
||||||
$code.=<<___;
|
$code.=<<___;
|
||||||
|
ldrb $t0,[$inp],#4
|
||||||
|
ldrb $t1,[$inp,#-1]
|
||||||
|
ldrb $t2,[$inp,#-2]
|
||||||
|
add $e,$K,$e,ror#2 @ E+=K_00_19
|
||||||
|
ldrb $t3,[$inp,#-3]
|
||||||
|
add $e,$e,$a,ror#27 @ E+=ROR(A,27)
|
||||||
|
orr $t0,$t1,$t0,lsl#24
|
||||||
|
eor $t1,$c,$d @ F_xx_xx
|
||||||
|
orr $t0,$t0,$t2,lsl#8
|
||||||
|
orr $t0,$t0,$t3,lsl#16
|
||||||
and $t1,$b,$t1,ror#2
|
and $t1,$b,$t1,ror#2
|
||||||
|
add $e,$e,$t0 @ E+=X[i]
|
||||||
eor $t1,$t1,$d,ror#2 @ F_00_19(B,C,D)
|
eor $t1,$t1,$d,ror#2 @ F_00_19(B,C,D)
|
||||||
|
str $t0,[$Xi,#-4]!
|
||||||
add $e,$e,$t1 @ E+=F_00_19(B,C,D)
|
add $e,$e,$t1 @ E+=F_00_19(B,C,D)
|
||||||
___
|
___
|
||||||
}
|
}
|
||||||
|
|
||||||
sub BODY_16_19 {
|
sub BODY_16_19 {
|
||||||
my ($a,$b,$c,$d,$e)=@_;
|
my ($a,$b,$c,$d,$e)=@_;
|
||||||
&Xupdate(@_);
|
&Xupdate(@_,"and $t1,$b,$t1,ror#2");
|
||||||
$code.=<<___;
|
$code.=<<___;
|
||||||
and $t1,$b,$t1,ror#2
|
|
||||||
eor $t1,$t1,$d,ror#2 @ F_00_19(B,C,D)
|
eor $t1,$t1,$d,ror#2 @ F_00_19(B,C,D)
|
||||||
add $e,$e,$t1 @ E+=F_00_19(B,C,D)
|
add $e,$e,$t1 @ E+=F_00_19(B,C,D)
|
||||||
___
|
___
|
||||||
@ -122,22 +120,18 @@ ___
|
|||||||
|
|
||||||
sub BODY_20_39 {
|
sub BODY_20_39 {
|
||||||
my ($a,$b,$c,$d,$e)=@_;
|
my ($a,$b,$c,$d,$e)=@_;
|
||||||
&Xupdate(@_);
|
&Xupdate(@_,"eor $t1,$b,$t1,ror#2");
|
||||||
$code.=<<___;
|
$code.=<<___;
|
||||||
eor $t1,$b,$t1,ror#2 @ F_20_39(B,C,D)
|
|
||||||
add $e,$e,$t1 @ E+=F_20_39(B,C,D)
|
add $e,$e,$t1 @ E+=F_20_39(B,C,D)
|
||||||
___
|
___
|
||||||
}
|
}
|
||||||
|
|
||||||
sub BODY_40_59 {
|
sub BODY_40_59 {
|
||||||
my ($a,$b,$c,$d,$e)=@_;
|
my ($a,$b,$c,$d,$e)=@_;
|
||||||
&Xupdate(@_,1);
|
&Xupdate(@_,"and $t1,$b,$t1,ror#2","and $t2,$c,$d");
|
||||||
$code.=<<___;
|
$code.=<<___;
|
||||||
and $t1,$b,$c,ror#2
|
|
||||||
orr $t2,$b,$c,ror#2
|
|
||||||
and $t2,$t2,$d,ror#2
|
|
||||||
orr $t1,$t1,$t2 @ F_40_59(B,C,D)
|
|
||||||
add $e,$e,$t1 @ E+=F_40_59(B,C,D)
|
add $e,$e,$t1 @ E+=F_40_59(B,C,D)
|
||||||
|
add $e,$e,$t2,ror#2
|
||||||
___
|
___
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -276,6 +276,7 @@ $code.=<<___;
|
|||||||
.type sha1_block_data_order,#function
|
.type sha1_block_data_order,#function
|
||||||
.size sha1_block_data_order,(.-sha1_block_data_order)
|
.size sha1_block_data_order,(.-sha1_block_data_order)
|
||||||
.asciz "SHA1 block transform for SPARCv9, CRYPTOGAMS by <appro\@openssl.org>"
|
.asciz "SHA1 block transform for SPARCv9, CRYPTOGAMS by <appro\@openssl.org>"
|
||||||
|
.align 4
|
||||||
___
|
___
|
||||||
|
|
||||||
$code =~ s/\`([^\`]*)\`/eval $1/gem;
|
$code =~ s/\`([^\`]*)\`/eval $1/gem;
|
||||||
|
@ -539,6 +539,7 @@ $code.=<<___;
|
|||||||
.type sha1_block_data_order,#function
|
.type sha1_block_data_order,#function
|
||||||
.size sha1_block_data_order,(.-sha1_block_data_order)
|
.size sha1_block_data_order,(.-sha1_block_data_order)
|
||||||
.asciz "SHA1 block transform for SPARCv9a, CRYPTOGAMS by <appro\@openssl.org>"
|
.asciz "SHA1 block transform for SPARCv9a, CRYPTOGAMS by <appro\@openssl.org>"
|
||||||
|
.align 4
|
||||||
___
|
___
|
||||||
|
|
||||||
# Purpose of these subroutines is to explicitly encode VIS instructions,
|
# Purpose of these subroutines is to explicitly encode VIS instructions,
|
||||||
|
@ -11,9 +11,14 @@
|
|||||||
|
|
||||||
# Performance is ~2x better than gcc 3.4 generated code and in "abso-
|
# Performance is ~2x better than gcc 3.4 generated code and in "abso-
|
||||||
# lute" terms is ~2250 cycles per 64-byte block or ~35 cycles per
|
# lute" terms is ~2250 cycles per 64-byte block or ~35 cycles per
|
||||||
# byte.
|
# byte [on single-issue Xscale PXA250 core].
|
||||||
|
|
||||||
$output=shift;
|
# July 2010.
|
||||||
|
#
|
||||||
|
# Rescheduling for dual-issue pipeline resulted in 22% improvement on
|
||||||
|
# Cortex A8 core and ~20 cycles per processed byte.
|
||||||
|
|
||||||
|
while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
|
||||||
open STDOUT,">$output";
|
open STDOUT,">$output";
|
||||||
|
|
||||||
$ctx="r0"; $t0="r0";
|
$ctx="r0"; $t0="r0";
|
||||||
@ -52,27 +57,27 @@ $code.=<<___ if ($i<16);
|
|||||||
___
|
___
|
||||||
$code.=<<___;
|
$code.=<<___;
|
||||||
ldr $t2,[$Ktbl],#4 @ *K256++
|
ldr $t2,[$Ktbl],#4 @ *K256++
|
||||||
str $T1,[sp,#`$i%16`*4]
|
|
||||||
mov $t0,$e,ror#$Sigma1[0]
|
mov $t0,$e,ror#$Sigma1[0]
|
||||||
|
str $T1,[sp,#`$i%16`*4]
|
||||||
eor $t0,$t0,$e,ror#$Sigma1[1]
|
eor $t0,$t0,$e,ror#$Sigma1[1]
|
||||||
eor $t0,$t0,$e,ror#$Sigma1[2] @ Sigma1(e)
|
|
||||||
add $T1,$T1,$t0
|
|
||||||
eor $t1,$f,$g
|
eor $t1,$f,$g
|
||||||
|
eor $t0,$t0,$e,ror#$Sigma1[2] @ Sigma1(e)
|
||||||
and $t1,$t1,$e
|
and $t1,$t1,$e
|
||||||
|
add $T1,$T1,$t0
|
||||||
eor $t1,$t1,$g @ Ch(e,f,g)
|
eor $t1,$t1,$g @ Ch(e,f,g)
|
||||||
add $T1,$T1,$t1
|
|
||||||
add $T1,$T1,$h
|
add $T1,$T1,$h
|
||||||
add $T1,$T1,$t2
|
|
||||||
mov $h,$a,ror#$Sigma0[0]
|
mov $h,$a,ror#$Sigma0[0]
|
||||||
|
add $T1,$T1,$t1
|
||||||
eor $h,$h,$a,ror#$Sigma0[1]
|
eor $h,$h,$a,ror#$Sigma0[1]
|
||||||
|
add $T1,$T1,$t2
|
||||||
eor $h,$h,$a,ror#$Sigma0[2] @ Sigma0(a)
|
eor $h,$h,$a,ror#$Sigma0[2] @ Sigma0(a)
|
||||||
orr $t0,$a,$b
|
orr $t0,$a,$b
|
||||||
and $t0,$t0,$c
|
|
||||||
and $t1,$a,$b
|
and $t1,$a,$b
|
||||||
orr $t0,$t0,$t1 @ Maj(a,b,c)
|
and $t0,$t0,$c
|
||||||
add $h,$h,$t0
|
|
||||||
add $d,$d,$T1
|
|
||||||
add $h,$h,$T1
|
add $h,$h,$T1
|
||||||
|
orr $t0,$t0,$t1 @ Maj(a,b,c)
|
||||||
|
add $d,$d,$T1
|
||||||
|
add $h,$h,$t0
|
||||||
___
|
___
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,19 +85,19 @@ sub BODY_16_XX {
|
|||||||
my ($i,$a,$b,$c,$d,$e,$f,$g,$h) = @_;
|
my ($i,$a,$b,$c,$d,$e,$f,$g,$h) = @_;
|
||||||
|
|
||||||
$code.=<<___;
|
$code.=<<___;
|
||||||
ldr $t1,[sp,#`($i+1)%16`*4] @ $i
|
ldr $t1,[sp,#`($i+1)%16`*4] @ $i
|
||||||
ldr $t2,[sp,#`($i+14)%16`*4]
|
ldr $t2,[sp,#`($i+14)%16`*4]
|
||||||
ldr $T1,[sp,#`($i+0)%16`*4]
|
ldr $T1,[sp,#`($i+0)%16`*4]
|
||||||
ldr $inp,[sp,#`($i+9)%16`*4]
|
|
||||||
mov $t0,$t1,ror#$sigma0[0]
|
mov $t0,$t1,ror#$sigma0[0]
|
||||||
|
ldr $inp,[sp,#`($i+9)%16`*4]
|
||||||
eor $t0,$t0,$t1,ror#$sigma0[1]
|
eor $t0,$t0,$t1,ror#$sigma0[1]
|
||||||
eor $t0,$t0,$t1,lsr#$sigma0[2] @ sigma0(X[i+1])
|
eor $t0,$t0,$t1,lsr#$sigma0[2] @ sigma0(X[i+1])
|
||||||
mov $t1,$t2,ror#$sigma1[0]
|
mov $t1,$t2,ror#$sigma1[0]
|
||||||
eor $t1,$t1,$t2,ror#$sigma1[1]
|
|
||||||
eor $t1,$t1,$t2,lsr#$sigma1[2] @ sigma1(X[i+14])
|
|
||||||
add $T1,$T1,$t0
|
add $T1,$T1,$t0
|
||||||
add $T1,$T1,$t1
|
eor $t1,$t1,$t2,ror#$sigma1[1]
|
||||||
add $T1,$T1,$inp
|
add $T1,$T1,$inp
|
||||||
|
eor $t1,$t1,$t2,lsr#$sigma1[2] @ sigma1(X[i+14])
|
||||||
|
add $T1,$T1,$t1
|
||||||
___
|
___
|
||||||
&BODY_00_15(@_);
|
&BODY_00_15(@_);
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,13 @@
|
|||||||
# SHA512 block procedure for ARMv4. September 2007.
|
# SHA512 block procedure for ARMv4. September 2007.
|
||||||
|
|
||||||
# This code is ~4.5 (four and a half) times faster than code generated
|
# This code is ~4.5 (four and a half) times faster than code generated
|
||||||
# by gcc 3.4 and it spends ~72 clock cycles per byte.
|
# by gcc 3.4 and it spends ~72 clock cycles per byte [on single-issue
|
||||||
|
# Xscale PXA250 core].
|
||||||
|
#
|
||||||
|
# July 2010.
|
||||||
|
#
|
||||||
|
# Rescheduling for dual-issue pipeline resulted in 6% improvement on
|
||||||
|
# Cortex A8 core and ~40 cycles per processed byte.
|
||||||
|
|
||||||
# Byte order [in]dependence. =========================================
|
# Byte order [in]dependence. =========================================
|
||||||
#
|
#
|
||||||
@ -22,7 +28,7 @@ $hi=0;
|
|||||||
$lo=4;
|
$lo=4;
|
||||||
# ====================================================================
|
# ====================================================================
|
||||||
|
|
||||||
$output=shift;
|
while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
|
||||||
open STDOUT,">$output";
|
open STDOUT,">$output";
|
||||||
|
|
||||||
$ctx="r0";
|
$ctx="r0";
|
||||||
@ -73,33 +79,31 @@ $code.=<<___;
|
|||||||
eor $t0,$t0,$Elo,lsl#23
|
eor $t0,$t0,$Elo,lsl#23
|
||||||
eor $t1,$t1,$Ehi,lsl#23 @ Sigma1(e)
|
eor $t1,$t1,$Ehi,lsl#23 @ Sigma1(e)
|
||||||
adds $Tlo,$Tlo,$t0
|
adds $Tlo,$Tlo,$t0
|
||||||
adc $Thi,$Thi,$t1 @ T += Sigma1(e)
|
|
||||||
adds $Tlo,$Tlo,$t2
|
|
||||||
adc $Thi,$Thi,$t3 @ T += h
|
|
||||||
|
|
||||||
ldr $t0,[sp,#$Foff+0] @ f.lo
|
ldr $t0,[sp,#$Foff+0] @ f.lo
|
||||||
|
adc $Thi,$Thi,$t1 @ T += Sigma1(e)
|
||||||
ldr $t1,[sp,#$Foff+4] @ f.hi
|
ldr $t1,[sp,#$Foff+4] @ f.hi
|
||||||
|
adds $Tlo,$Tlo,$t2
|
||||||
ldr $t2,[sp,#$Goff+0] @ g.lo
|
ldr $t2,[sp,#$Goff+0] @ g.lo
|
||||||
|
adc $Thi,$Thi,$t3 @ T += h
|
||||||
ldr $t3,[sp,#$Goff+4] @ g.hi
|
ldr $t3,[sp,#$Goff+4] @ g.hi
|
||||||
|
|
||||||
|
eor $t0,$t0,$t2
|
||||||
str $Elo,[sp,#$Eoff+0]
|
str $Elo,[sp,#$Eoff+0]
|
||||||
str $Ehi,[sp,#$Eoff+4]
|
|
||||||
str $Alo,[sp,#$Aoff+0]
|
|
||||||
str $Ahi,[sp,#$Aoff+4]
|
|
||||||
|
|
||||||
eor $t0,$t0,$t2
|
|
||||||
eor $t1,$t1,$t3
|
eor $t1,$t1,$t3
|
||||||
|
str $Ehi,[sp,#$Eoff+4]
|
||||||
and $t0,$t0,$Elo
|
and $t0,$t0,$Elo
|
||||||
|
str $Alo,[sp,#$Aoff+0]
|
||||||
and $t1,$t1,$Ehi
|
and $t1,$t1,$Ehi
|
||||||
|
str $Ahi,[sp,#$Aoff+4]
|
||||||
eor $t0,$t0,$t2
|
eor $t0,$t0,$t2
|
||||||
eor $t1,$t1,$t3 @ Ch(e,f,g)
|
|
||||||
|
|
||||||
ldr $t2,[$Ktbl,#4] @ K[i].lo
|
ldr $t2,[$Ktbl,#4] @ K[i].lo
|
||||||
|
eor $t1,$t1,$t3 @ Ch(e,f,g)
|
||||||
ldr $t3,[$Ktbl,#0] @ K[i].hi
|
ldr $t3,[$Ktbl,#0] @ K[i].hi
|
||||||
ldr $Elo,[sp,#$Doff+0] @ d.lo
|
|
||||||
ldr $Ehi,[sp,#$Doff+4] @ d.hi
|
|
||||||
|
|
||||||
adds $Tlo,$Tlo,$t0
|
adds $Tlo,$Tlo,$t0
|
||||||
|
ldr $Elo,[sp,#$Doff+0] @ d.lo
|
||||||
adc $Thi,$Thi,$t1 @ T += Ch(e,f,g)
|
adc $Thi,$Thi,$t1 @ T += Ch(e,f,g)
|
||||||
|
ldr $Ehi,[sp,#$Doff+4] @ d.hi
|
||||||
adds $Tlo,$Tlo,$t2
|
adds $Tlo,$Tlo,$t2
|
||||||
adc $Thi,$Thi,$t3 @ T += K[i]
|
adc $Thi,$Thi,$t3 @ T += K[i]
|
||||||
adds $Elo,$Elo,$Tlo
|
adds $Elo,$Elo,$Tlo
|
||||||
|
@ -586,6 +586,7 @@ $code.=<<___;
|
|||||||
.type sha${label}_block_data_order,#function
|
.type sha${label}_block_data_order,#function
|
||||||
.size sha${label}_block_data_order,(.-sha${label}_block_data_order)
|
.size sha${label}_block_data_order,(.-sha${label}_block_data_order)
|
||||||
.asciz "SHA${label} block transform for SPARCv9, CRYPTOGAMS by <appro\@openssl.org>"
|
.asciz "SHA${label} block transform for SPARCv9, CRYPTOGAMS by <appro\@openssl.org>"
|
||||||
|
.align 4
|
||||||
___
|
___
|
||||||
|
|
||||||
$code =~ s/\`([^\`]*)\`/eval $1/gem;
|
$code =~ s/\`([^\`]*)\`/eval $1/gem;
|
||||||
|
@ -225,13 +225,95 @@ _sparcv9_rdtick:
|
|||||||
xor %o0,%o0,%o0
|
xor %o0,%o0,%o0
|
||||||
.word 0x91410000 !rd %tick,%o0
|
.word 0x91410000 !rd %tick,%o0
|
||||||
retl
|
retl
|
||||||
.word 0x93323020 !srlx %o2,32,%o1
|
.word 0x93323020 !srlx %o0,32,%o1
|
||||||
.notick:
|
.notick:
|
||||||
retl
|
retl
|
||||||
xor %o1,%o1,%o1
|
xor %o1,%o1,%o1
|
||||||
.type _sparcv9_rdtick,#function
|
.type _sparcv9_rdtick,#function
|
||||||
.size _sparcv9_rdtick,.-_sparcv9_rdtick
|
.size _sparcv9_rdtick,.-_sparcv9_rdtick
|
||||||
|
|
||||||
|
.global _sparcv9_vis1_probe
|
||||||
|
.align 8
|
||||||
|
_sparcv9_vis1_probe:
|
||||||
|
.word 0x81b00d80 !fxor %f0,%f0,%f0
|
||||||
|
add %sp,BIAS+2,%o1
|
||||||
|
retl
|
||||||
|
.word 0xc19a5a40 !ldda [%o1]ASI_FP16_P,%f0
|
||||||
|
.type _sparcv9_vis1_probe,#function
|
||||||
|
.size _sparcv9_vis1_probe,.-_sparcv9_vis1_probe
|
||||||
|
|
||||||
|
! Probe and instrument VIS1 instruction. Output is number of cycles it
|
||||||
|
! takes to execute rdtick and pair of VIS1 instructions. US-Tx VIS unit
|
||||||
|
! is slow (documented to be 6 cycles on T2) and the core is in-order
|
||||||
|
! single-issue, it should be possible to distinguish Tx reliably...
|
||||||
|
! Observed return values are:
|
||||||
|
!
|
||||||
|
! UltraSPARC IIe 7
|
||||||
|
! UltraSPARC III 7
|
||||||
|
! UltraSPARC T1 24
|
||||||
|
!
|
||||||
|
! Numbers for T2 and SPARC64 V-VII are more than welcomed.
|
||||||
|
!
|
||||||
|
! It would be possible to detect specifically US-T1 by instrumenting
|
||||||
|
! fmul8ulx16, which is emulated on T1 and as such accounts for quite
|
||||||
|
! a lot of %tick-s, couple of thousand on Linux...
|
||||||
|
.global _sparcv9_vis1_instrument
|
||||||
|
.align 8
|
||||||
|
_sparcv9_vis1_instrument:
|
||||||
|
.word 0x91410000 !rd %tick,%o0
|
||||||
|
.word 0x81b00d80 !fxor %f0,%f0,%f0
|
||||||
|
.word 0x85b08d82 !fxor %f2,%f2,%f2
|
||||||
|
.word 0x93410000 !rd %tick,%o1
|
||||||
|
.word 0x81b00d80 !fxor %f0,%f0,%f0
|
||||||
|
.word 0x85b08d82 !fxor %f2,%f2,%f2
|
||||||
|
.word 0x95410000 !rd %tick,%o2
|
||||||
|
.word 0x81b00d80 !fxor %f0,%f0,%f0
|
||||||
|
.word 0x85b08d82 !fxor %f2,%f2,%f2
|
||||||
|
.word 0x97410000 !rd %tick,%o3
|
||||||
|
.word 0x81b00d80 !fxor %f0,%f0,%f0
|
||||||
|
.word 0x85b08d82 !fxor %f2,%f2,%f2
|
||||||
|
.word 0x99410000 !rd %tick,%o4
|
||||||
|
|
||||||
|
! calculate intervals
|
||||||
|
sub %o1,%o0,%o0
|
||||||
|
sub %o2,%o1,%o1
|
||||||
|
sub %o3,%o2,%o2
|
||||||
|
sub %o4,%o3,%o3
|
||||||
|
|
||||||
|
! find minumum value
|
||||||
|
cmp %o0,%o1
|
||||||
|
.word 0x38680002 !bgu,a %xcc,.+8
|
||||||
|
mov %o1,%o0
|
||||||
|
cmp %o0,%o2
|
||||||
|
.word 0x38680002 !bgu,a %xcc,.+8
|
||||||
|
mov %o2,%o0
|
||||||
|
cmp %o0,%o3
|
||||||
|
.word 0x38680002 !bgu,a %xcc,.+8
|
||||||
|
mov %o3,%o0
|
||||||
|
|
||||||
|
retl
|
||||||
|
nop
|
||||||
|
.type _sparcv9_vis1_instrument,#function
|
||||||
|
.size _sparcv9_vis1_instrument,.-_sparcv9_vis1_instrument
|
||||||
|
|
||||||
|
.global _sparcv9_vis2_probe
|
||||||
|
.align 8
|
||||||
|
_sparcv9_vis2_probe:
|
||||||
|
retl
|
||||||
|
.word 0x81b00980 !bshuffle %f0,%f0,%f0
|
||||||
|
.type _sparcv9_vis2_probe,#function
|
||||||
|
.size _sparcv9_vis2_probe,.-_sparcv9_vis2_probe
|
||||||
|
|
||||||
|
.global _sparcv9_fmadd_probe
|
||||||
|
.align 8
|
||||||
|
_sparcv9_fmadd_probe:
|
||||||
|
.word 0x81b00d80 !fxor %f0,%f0,%f0
|
||||||
|
.word 0x85b08d82 !fxor %f2,%f2,%f2
|
||||||
|
retl
|
||||||
|
.word 0x81b80440 !fmaddd %f0,%f0,%f2,%f0
|
||||||
|
.type _sparcv9_fmadd_probe,#function
|
||||||
|
.size _sparcv9_fmadd_probe,.-_sparcv9_fmadd_probe
|
||||||
|
|
||||||
.global OPENSSL_cleanse
|
.global OPENSSL_cleanse
|
||||||
.align 32
|
.align 32
|
||||||
OPENSSL_cleanse:
|
OPENSSL_cleanse:
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <setjmp.h>
|
||||||
|
#include <signal.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <openssl/bn.h>
|
#include <openssl/bn.h>
|
||||||
|
|
||||||
@ -9,6 +11,7 @@
|
|||||||
#define SPARCV9_VIS1 (1<<2)
|
#define SPARCV9_VIS1 (1<<2)
|
||||||
#define SPARCV9_VIS2 (1<<3) /* reserved */
|
#define SPARCV9_VIS2 (1<<3) /* reserved */
|
||||||
#define SPARCV9_FMADD (1<<4) /* reserved for SPARC64 V */
|
#define SPARCV9_FMADD (1<<4) /* reserved for SPARC64 V */
|
||||||
|
|
||||||
static int OPENSSL_sparcv9cap_P=SPARCV9_TICK_PRIVILEGED;
|
static int OPENSSL_sparcv9cap_P=SPARCV9_TICK_PRIVILEGED;
|
||||||
|
|
||||||
int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num)
|
int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num)
|
||||||
@ -23,10 +26,14 @@ int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_U
|
|||||||
return bn_mul_mont_int(rp,ap,bp,np,n0,num);
|
return bn_mul_mont_int(rp,ap,bp,np,n0,num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned long _sparcv9_rdtick(void);
|
||||||
|
void _sparcv9_vis1_probe(void);
|
||||||
|
unsigned long _sparcv9_vis1_instrument(void);
|
||||||
|
void _sparcv9_vis2_probe(void);
|
||||||
|
void _sparcv9_fmadd_probe(void);
|
||||||
|
|
||||||
unsigned long OPENSSL_rdtsc(void)
|
unsigned long OPENSSL_rdtsc(void)
|
||||||
{
|
{
|
||||||
unsigned long _sparcv9_rdtick(void);
|
|
||||||
|
|
||||||
if (OPENSSL_sparcv9cap_P&SPARCV9_TICK_PRIVILEGED)
|
if (OPENSSL_sparcv9cap_P&SPARCV9_TICK_PRIVILEGED)
|
||||||
#if defined(__sun) && defined(__SVR4)
|
#if defined(__sun) && defined(__SVR4)
|
||||||
return gethrtime();
|
return gethrtime();
|
||||||
@ -37,8 +44,11 @@ unsigned long OPENSSL_rdtsc(void)
|
|||||||
return _sparcv9_rdtick();
|
return _sparcv9_rdtick();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__sun) && defined(__SVR4)
|
#if 0 && defined(__sun) && defined(__SVR4)
|
||||||
|
/* This code path is disabled, because of incompatibility of
|
||||||
|
* libdevinfo.so.1 and libmalloc.so.1 (see below for details)
|
||||||
|
*/
|
||||||
|
#include <malloc.h>
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#include <libdevinfo.h>
|
#include <libdevinfo.h>
|
||||||
#include <sys/systeminfo.h>
|
#include <sys/systeminfo.h>
|
||||||
@ -110,7 +120,21 @@ void OPENSSL_cpuid_setup(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef M_KEEP
|
||||||
|
/*
|
||||||
|
* Solaris libdevinfo.so.1 is effectively incomatible with
|
||||||
|
* libmalloc.so.1. Specifically, if application is linked with
|
||||||
|
* -lmalloc, it crashes upon startup with SIGSEGV in
|
||||||
|
* free(3LIBMALLOC) called by di_fini. Prior call to
|
||||||
|
* mallopt(M_KEEP,0) somehow helps... But not always...
|
||||||
|
*/
|
||||||
|
if ((h = dlopen(NULL,RTLD_LAZY)))
|
||||||
|
{
|
||||||
|
union { void *p; int (*f)(int,int); } sym;
|
||||||
|
if ((sym.p = dlsym(h,"mallopt"))) (*sym.f)(M_KEEP,0);
|
||||||
|
dlclose(h);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if ((h = dlopen("libdevinfo.so.1",RTLD_LAZY))) do
|
if ((h = dlopen("libdevinfo.so.1",RTLD_LAZY))) do
|
||||||
{
|
{
|
||||||
di_init_t di_init;
|
di_init_t di_init;
|
||||||
@ -137,9 +161,19 @@ void OPENSSL_cpuid_setup(void)
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
static sigjmp_buf common_jmp;
|
||||||
|
static void common_handler(int sig) { siglongjmp(common_jmp,sig); }
|
||||||
|
|
||||||
void OPENSSL_cpuid_setup(void)
|
void OPENSSL_cpuid_setup(void)
|
||||||
{
|
{
|
||||||
char *e;
|
char *e;
|
||||||
|
struct sigaction common_act,ill_oact,bus_oact;
|
||||||
|
sigset_t all_masked,oset;
|
||||||
|
int sig;
|
||||||
|
static int trigger=0;
|
||||||
|
|
||||||
|
if (trigger) return;
|
||||||
|
trigger=1;
|
||||||
|
|
||||||
if ((e=getenv("OPENSSL_sparcv9cap")))
|
if ((e=getenv("OPENSSL_sparcv9cap")))
|
||||||
{
|
{
|
||||||
@ -147,8 +181,57 @@ void OPENSSL_cpuid_setup(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For now we assume that the rest supports UltraSPARC-I* only */
|
/* Initial value, fits UltraSPARC-I&II... */
|
||||||
OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU|SPARCV9_VIS1;
|
OPENSSL_sparcv9cap_P = SPARCV9_PREFER_FPU|SPARCV9_TICK_PRIVILEGED;
|
||||||
|
|
||||||
|
sigfillset(&all_masked);
|
||||||
|
sigdelset(&all_masked,SIGILL);
|
||||||
|
sigdelset(&all_masked,SIGTRAP);
|
||||||
|
#ifdef SIGEMT
|
||||||
|
sigdelset(&all_masked,SIGEMT);
|
||||||
|
#endif
|
||||||
|
sigdelset(&all_masked,SIGFPE);
|
||||||
|
sigdelset(&all_masked,SIGBUS);
|
||||||
|
sigdelset(&all_masked,SIGSEGV);
|
||||||
|
sigprocmask(SIG_SETMASK,&all_masked,&oset);
|
||||||
|
|
||||||
|
memset(&common_act,0,sizeof(common_act));
|
||||||
|
common_act.sa_handler = common_handler;
|
||||||
|
common_act.sa_mask = all_masked;
|
||||||
|
|
||||||
|
sigaction(SIGILL,&common_act,&ill_oact);
|
||||||
|
sigaction(SIGBUS,&common_act,&bus_oact);/* T1 fails 16-bit ldda [on Linux] */
|
||||||
|
|
||||||
|
if (sigsetjmp(common_jmp,1) == 0)
|
||||||
|
{
|
||||||
|
_sparcv9_rdtick();
|
||||||
|
OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sigsetjmp(common_jmp,1) == 0)
|
||||||
|
{
|
||||||
|
_sparcv9_vis1_probe();
|
||||||
|
OPENSSL_sparcv9cap_P |= SPARCV9_VIS1;
|
||||||
|
/* detect UltraSPARC-Tx, see sparccpud.S for details... */
|
||||||
|
if (_sparcv9_vis1_instrument() >= 12)
|
||||||
|
OPENSSL_sparcv9cap_P &= ~(SPARCV9_VIS1|SPARCV9_PREFER_FPU);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_sparcv9_vis2_probe();
|
||||||
|
OPENSSL_sparcv9cap_P |= SPARCV9_VIS2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sigsetjmp(common_jmp,1) == 0)
|
||||||
|
{
|
||||||
|
_sparcv9_fmadd_probe();
|
||||||
|
OPENSSL_sparcv9cap_P |= SPARCV9_FMADD;
|
||||||
|
}
|
||||||
|
|
||||||
|
sigaction(SIGBUS,&bus_oact,NULL);
|
||||||
|
sigaction(SIGILL,&ill_oact,NULL);
|
||||||
|
|
||||||
|
sigprocmask(SIG_SETMASK,&oset,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -2030,6 +2030,31 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
|
|||||||
#define sk_void_sort(st) SKM_sk_sort(void, (st))
|
#define sk_void_sort(st) SKM_sk_sort(void, (st))
|
||||||
#define sk_void_is_sorted(st) SKM_sk_is_sorted(void, (st))
|
#define sk_void_is_sorted(st) SKM_sk_is_sorted(void, (st))
|
||||||
|
|
||||||
|
#define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)sk_new(CHECKED_SK_CMP_FUNC(char, cmp)))
|
||||||
|
#define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)sk_new_null())
|
||||||
|
#define sk_OPENSSL_STRING_push(st, val) sk_push(CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_PTR_OF(char, val))
|
||||||
|
#define sk_OPENSSL_STRING_find(st, val) sk_find(CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_PTR_OF(char, val))
|
||||||
|
#define sk_OPENSSL_STRING_value(st, i) ((OPENSSL_STRING)sk_value(CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), i))
|
||||||
|
#define sk_OPENSSL_STRING_num(st) SKM_sk_num(OPENSSL_STRING, st)
|
||||||
|
#define sk_OPENSSL_STRING_pop_free(st, free_func) sk_pop_free(CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_SK_FREE_FUNC2(OPENSSL_STRING, free_func))
|
||||||
|
#define sk_OPENSSL_STRING_insert(st, val, i) sk_insert(CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_PTR_OF(char, val), i)
|
||||||
|
#define sk_OPENSSL_STRING_free(st) SKM_sk_free(OPENSSL_STRING, st)
|
||||||
|
#define sk_OPENSSL_STRING_set(st, i, val) sk_set((_STACK *)CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), i, CHECKED_PTR_OF(char, val))
|
||||||
|
#define sk_OPENSSL_STRING_zero(st) SKM_sk_zero(OPENSSL_STRING, (st))
|
||||||
|
#define sk_OPENSSL_STRING_unshift(st, val) sk_unshift((_STACK *)CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_PTR_OF(char, val))
|
||||||
|
#define sk_OPENSSL_STRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_CONST_PTR_OF(char, val))
|
||||||
|
#define sk_OPENSSL_STRING_delete(st, i) SKM_sk_delete(OPENSSL_STRING, (st), (i))
|
||||||
|
#define sk_OPENSSL_STRING_delete_ptr(st, ptr) (OPENSSL_STRING *)sk_delete_ptr((_STACK *)CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_PTR_OF(char, ptr))
|
||||||
|
#define sk_OPENSSL_STRING_set_cmp_func(st, cmp) \
|
||||||
|
((int (*)(const char * const *,const char * const *)) \
|
||||||
|
sk_set_cmp_func((_STACK *)CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_SK_CMP_FUNC(char, cmp)))
|
||||||
|
#define sk_OPENSSL_STRING_dup(st) SKM_sk_dup(OPENSSL_STRING, st)
|
||||||
|
#define sk_OPENSSL_STRING_shift(st) SKM_sk_shift(OPENSSL_STRING, (st))
|
||||||
|
#define sk_OPENSSL_STRING_pop(st) (char *)sk_pop((_STACK *)CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st))
|
||||||
|
#define sk_OPENSSL_STRING_sort(st) SKM_sk_sort(OPENSSL_STRING, (st))
|
||||||
|
#define sk_OPENSSL_STRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_STRING, (st))
|
||||||
|
|
||||||
|
|
||||||
#define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)sk_new(CHECKED_SK_CMP_FUNC(void, cmp)))
|
#define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)sk_new(CHECKED_SK_CMP_FUNC(void, cmp)))
|
||||||
#define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)sk_new_null())
|
#define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)sk_new_null())
|
||||||
#define sk_OPENSSL_BLOCK_push(st, val) sk_push(CHECKED_PTR_OF(STACK_OF(OPENSSL_BLOCK), st), CHECKED_PTR_OF(void, val))
|
#define sk_OPENSSL_BLOCK_push(st, val) sk_push(CHECKED_PTR_OF(STACK_OF(OPENSSL_BLOCK), st), CHECKED_PTR_OF(void, val))
|
||||||
@ -2080,31 +2105,6 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
|
|||||||
#define sk_OPENSSL_PSTRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_PSTRING, (st))
|
#define sk_OPENSSL_PSTRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_PSTRING, (st))
|
||||||
|
|
||||||
|
|
||||||
#define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)sk_new(CHECKED_SK_CMP_FUNC(char, cmp)))
|
|
||||||
#define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)sk_new_null())
|
|
||||||
#define sk_OPENSSL_STRING_push(st, val) sk_push(CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_PTR_OF(char, val))
|
|
||||||
#define sk_OPENSSL_STRING_find(st, val) sk_find(CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_PTR_OF(char, val))
|
|
||||||
#define sk_OPENSSL_STRING_value(st, i) ((OPENSSL_STRING)sk_value(CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), i))
|
|
||||||
#define sk_OPENSSL_STRING_num(st) SKM_sk_num(OPENSSL_STRING, st)
|
|
||||||
#define sk_OPENSSL_STRING_pop_free(st, free_func) sk_pop_free(CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_SK_FREE_FUNC2(OPENSSL_STRING, free_func))
|
|
||||||
#define sk_OPENSSL_STRING_insert(st, val, i) sk_insert(CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_PTR_OF(char, val), i)
|
|
||||||
#define sk_OPENSSL_STRING_free(st) SKM_sk_free(OPENSSL_STRING, st)
|
|
||||||
#define sk_OPENSSL_STRING_set(st, i, val) sk_set((_STACK *)CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), i, CHECKED_PTR_OF(char, val))
|
|
||||||
#define sk_OPENSSL_STRING_zero(st) SKM_sk_zero(OPENSSL_STRING, (st))
|
|
||||||
#define sk_OPENSSL_STRING_unshift(st, val) sk_unshift((_STACK *)CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_PTR_OF(char, val))
|
|
||||||
#define sk_OPENSSL_STRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_CONST_PTR_OF(char, val))
|
|
||||||
#define sk_OPENSSL_STRING_delete(st, i) SKM_sk_delete(OPENSSL_STRING, (st), (i))
|
|
||||||
#define sk_OPENSSL_STRING_delete_ptr(st, ptr) (OPENSSL_STRING *)sk_delete_ptr((_STACK *)CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_PTR_OF(char, ptr))
|
|
||||||
#define sk_OPENSSL_STRING_set_cmp_func(st, cmp) \
|
|
||||||
((int (*)(const char * const *,const char * const *)) \
|
|
||||||
sk_set_cmp_func((_STACK *)CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_SK_CMP_FUNC(char, cmp)))
|
|
||||||
#define sk_OPENSSL_STRING_dup(st) SKM_sk_dup(OPENSSL_STRING, st)
|
|
||||||
#define sk_OPENSSL_STRING_shift(st) SKM_sk_shift(OPENSSL_STRING, (st))
|
|
||||||
#define sk_OPENSSL_STRING_pop(st) (char *)sk_pop((_STACK *)CHECKED_PTR_OF(STACK_OF(OPENSSL_STRING), st))
|
|
||||||
#define sk_OPENSSL_STRING_sort(st) SKM_sk_sort(OPENSSL_STRING, (st))
|
|
||||||
#define sk_OPENSSL_STRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_STRING, (st))
|
|
||||||
|
|
||||||
|
|
||||||
#define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
|
#define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
|
||||||
SKM_ASN1_SET_OF_d2i(ACCESS_DESCRIPTION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
|
SKM_ASN1_SET_OF_d2i(ACCESS_DESCRIPTION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
|
||||||
#define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, i2d_func, ex_tag, ex_class, is_set) \
|
#define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, i2d_func, ex_tag, ex_class, is_set) \
|
||||||
|
@ -258,6 +258,7 @@ typedef struct x509_cinf_st
|
|||||||
ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */
|
ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */
|
||||||
ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */
|
ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */
|
||||||
STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */
|
STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */
|
||||||
|
ASN1_ENCODING enc;
|
||||||
} X509_CINF;
|
} X509_CINF;
|
||||||
|
|
||||||
/* This stuff is certificate "auxiliary info"
|
/* This stuff is certificate "auxiliary info"
|
||||||
|
@ -2034,7 +2034,7 @@ int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509,
|
|||||||
if (store)
|
if (store)
|
||||||
ret = X509_VERIFY_PARAM_inherit(ctx->param, store->param);
|
ret = X509_VERIFY_PARAM_inherit(ctx->param, store->param);
|
||||||
else
|
else
|
||||||
ctx->param->flags |= X509_VP_FLAG_DEFAULT|X509_VP_FLAG_ONCE;
|
ctx->param->inh_flags |= X509_VP_FLAG_DEFAULT|X509_VP_FLAG_ONCE;
|
||||||
|
|
||||||
if (store)
|
if (store)
|
||||||
{
|
{
|
||||||
|
@ -90,6 +90,7 @@ int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r)
|
|||||||
|
|
||||||
int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md)
|
int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md)
|
||||||
{
|
{
|
||||||
|
x->cert_info->enc.modified = 1;
|
||||||
return(ASN1_item_sign(ASN1_ITEM_rptr(X509_CINF), x->cert_info->signature,
|
return(ASN1_item_sign(ASN1_ITEM_rptr(X509_CINF), x->cert_info->signature,
|
||||||
x->sig_alg, x->signature, x->cert_info,pkey,md));
|
x->sig_alg, x->signature, x->cert_info,pkey,md));
|
||||||
}
|
}
|
||||||
|
@ -189,7 +189,6 @@ static int do_i2r_name_constraints(const X509V3_EXT_METHOD *method,
|
|||||||
print_nc_ipadd(bp, tree->base->d.ip);
|
print_nc_ipadd(bp, tree->base->d.ip);
|
||||||
else
|
else
|
||||||
GENERAL_NAME_print(bp, tree->base);
|
GENERAL_NAME_print(bp, tree->base);
|
||||||
tree = sk_GENERAL_SUBTREE_value(trees, i);
|
|
||||||
BIO_puts(bp, "\n");
|
BIO_puts(bp, "\n");
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -343,7 +343,7 @@ Create a cleartext signed message:
|
|||||||
openssl smime -sign -in message.txt -text -out mail.msg \
|
openssl smime -sign -in message.txt -text -out mail.msg \
|
||||||
-signer mycert.pem
|
-signer mycert.pem
|
||||||
|
|
||||||
Create an opaque signed message
|
Create an opaque signed message:
|
||||||
|
|
||||||
openssl smime -sign -in message.txt -text -out mail.msg -nodetach \
|
openssl smime -sign -in message.txt -text -out mail.msg -nodetach \
|
||||||
-signer mycert.pem
|
-signer mycert.pem
|
||||||
@ -397,11 +397,11 @@ it with:
|
|||||||
-----BEGIN PKCS7-----
|
-----BEGIN PKCS7-----
|
||||||
-----END PKCS7-----
|
-----END PKCS7-----
|
||||||
|
|
||||||
and using the command,
|
and using the command:
|
||||||
|
|
||||||
openssl smime -verify -inform PEM -in signature.pem -content content.txt
|
openssl smime -verify -inform PEM -in signature.pem -content content.txt
|
||||||
|
|
||||||
alternatively you can base64 decode the signature and use
|
Alternatively you can base64 decode the signature and use:
|
||||||
|
|
||||||
openssl smime -verify -inform DER -in signature.der -content content.txt
|
openssl smime -verify -inform DER -in signature.der -content content.txt
|
||||||
|
|
||||||
@ -427,7 +427,7 @@ Ideally a database should be maintained of a certificates for each email
|
|||||||
address.
|
address.
|
||||||
|
|
||||||
The code doesn't currently take note of the permitted symmetric encryption
|
The code doesn't currently take note of the permitted symmetric encryption
|
||||||
algorithms as supplied in the SMIMECapabilities signed attribute. this means the
|
algorithms as supplied in the SMIMECapabilities signed attribute. This means the
|
||||||
user has to manually include the correct encryption algorithm. It should store
|
user has to manually include the correct encryption algorithm. It should store
|
||||||
the list of permitted ciphers in a database and only use those.
|
the list of permitted ciphers in a database and only use those.
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ install:
|
|||||||
if [ "$(PLATFORM)" != "Cygwin" ]; then \
|
if [ "$(PLATFORM)" != "Cygwin" ]; then \
|
||||||
case "$(CFLAGS)" in \
|
case "$(CFLAGS)" in \
|
||||||
*DSO_BEOS*) sfx=".so";; \
|
*DSO_BEOS*) sfx=".so";; \
|
||||||
*DSO_DLFCN*) sfx=".so";; \
|
*DSO_DLFCN*) sfx=`expr "$(SHLIB_EXT)" : '.*\(\.[a-z][a-z]*\)' \| ".so"`;; \
|
||||||
*DSO_DL*) sfx=".sl";; \
|
*DSO_DL*) sfx=".sl";; \
|
||||||
*DSO_WIN32*) sfx="eay32.dll"; pfx=;; \
|
*DSO_WIN32*) sfx="eay32.dll"; pfx=;; \
|
||||||
*) sfx=".bad";; \
|
*) sfx=".bad";; \
|
||||||
|
@ -48,7 +48,7 @@ install:
|
|||||||
if [ "$(PLATFORM)" != "Cygwin" ]; then \
|
if [ "$(PLATFORM)" != "Cygwin" ]; then \
|
||||||
case "$(CFLAGS)" in \
|
case "$(CFLAGS)" in \
|
||||||
*DSO_BEOS*) sfx=".so";; \
|
*DSO_BEOS*) sfx=".so";; \
|
||||||
*DSO_DLFCN*) sfx=".so";; \
|
*DSO_DLFCN*) sfx=`expr "$(SHLIB_EXT)" : '.*\(\.[a-z][a-z]*\)' \| ".so"`;; \
|
||||||
*DSO_DL*) sfx=".sl";; \
|
*DSO_DL*) sfx=".sl";; \
|
||||||
*DSO_WIN32*) sfx="eay32.dll"; pfx=;; \
|
*DSO_WIN32*) sfx="eay32.dll"; pfx=;; \
|
||||||
*) sfx=".bad";; \
|
*) sfx=".bad";; \
|
||||||
|
@ -1508,6 +1508,7 @@ int ssl3_get_key_exchange(SSL *s)
|
|||||||
s->session->sess_cert->peer_ecdh_tmp=ecdh;
|
s->session->sess_cert->peer_ecdh_tmp=ecdh;
|
||||||
ecdh=NULL;
|
ecdh=NULL;
|
||||||
BN_CTX_free(bn_ctx);
|
BN_CTX_free(bn_ctx);
|
||||||
|
bn_ctx = NULL;
|
||||||
EC_POINT_free(srvr_ecpoint);
|
EC_POINT_free(srvr_ecpoint);
|
||||||
srvr_ecpoint = NULL;
|
srvr_ecpoint = NULL;
|
||||||
}
|
}
|
||||||
|
@ -2579,12 +2579,19 @@ int ssl3_get_client_key_exchange(SSL *s)
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
EVP_PKEY_CTX *pkey_ctx;
|
EVP_PKEY_CTX *pkey_ctx;
|
||||||
EVP_PKEY *client_pub_pkey = NULL;
|
EVP_PKEY *client_pub_pkey = NULL, *pk = NULL;
|
||||||
unsigned char premaster_secret[32], *start;
|
unsigned char premaster_secret[32], *start;
|
||||||
size_t outlen=32, inlen;
|
size_t outlen=32, inlen;
|
||||||
|
unsigned long alg_a;
|
||||||
|
|
||||||
/* Get our certificate private key*/
|
/* Get our certificate private key*/
|
||||||
pkey_ctx = EVP_PKEY_CTX_new(s->cert->key->privatekey,NULL);
|
alg_a = s->s3->tmp.new_cipher->algorithm_auth;
|
||||||
|
if (alg_a & SSL_aGOST94)
|
||||||
|
pk = s->cert->pkeys[SSL_PKEY_GOST94].privatekey;
|
||||||
|
else if (alg_a & SSL_aGOST01)
|
||||||
|
pk = s->cert->pkeys[SSL_PKEY_GOST01].privatekey;
|
||||||
|
|
||||||
|
pkey_ctx = EVP_PKEY_CTX_new(pk,NULL);
|
||||||
EVP_PKEY_decrypt_init(pkey_ctx);
|
EVP_PKEY_decrypt_init(pkey_ctx);
|
||||||
/* If client certificate is present and is of the same type, maybe
|
/* If client certificate is present and is of the same type, maybe
|
||||||
* use it for key exchange. Don't mind errors from
|
* use it for key exchange. Don't mind errors from
|
||||||
|
60
ssl/t1_lib.c
60
ssl/t1_lib.c
@ -714,14 +714,23 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
|
|||||||
switch (servname_type)
|
switch (servname_type)
|
||||||
{
|
{
|
||||||
case TLSEXT_NAMETYPE_host_name:
|
case TLSEXT_NAMETYPE_host_name:
|
||||||
if (s->session->tlsext_hostname == NULL)
|
if (!s->hit)
|
||||||
{
|
{
|
||||||
if (len > TLSEXT_MAXLEN_host_name ||
|
if(s->session->tlsext_hostname)
|
||||||
((s->session->tlsext_hostname = OPENSSL_malloc(len+1)) == NULL))
|
{
|
||||||
|
*al = SSL_AD_DECODE_ERROR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (len > TLSEXT_MAXLEN_host_name)
|
||||||
{
|
{
|
||||||
*al = TLS1_AD_UNRECOGNIZED_NAME;
|
*al = TLS1_AD_UNRECOGNIZED_NAME;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if ((s->session->tlsext_hostname = OPENSSL_malloc(len+1)) == NULL)
|
||||||
|
{
|
||||||
|
*al = TLS1_AD_INTERNAL_ERROR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
memcpy(s->session->tlsext_hostname, sdata, len);
|
memcpy(s->session->tlsext_hostname, sdata, len);
|
||||||
s->session->tlsext_hostname[len]='\0';
|
s->session->tlsext_hostname[len]='\0';
|
||||||
if (strlen(s->session->tlsext_hostname) != len) {
|
if (strlen(s->session->tlsext_hostname) != len) {
|
||||||
@ -734,7 +743,8 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
|
|||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
s->servername_done = strlen(s->session->tlsext_hostname) == len
|
s->servername_done = s->session->tlsext_hostname
|
||||||
|
&& strlen(s->session->tlsext_hostname) == len
|
||||||
&& strncmp(s->session->tlsext_hostname, (char *)sdata, len) == 0;
|
&& strncmp(s->session->tlsext_hostname, (char *)sdata, len) == 0;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -765,15 +775,22 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
|
|||||||
*al = TLS1_AD_DECODE_ERROR;
|
*al = TLS1_AD_DECODE_ERROR;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
s->session->tlsext_ecpointformatlist_length = 0;
|
if (!s->hit)
|
||||||
if (s->session->tlsext_ecpointformatlist != NULL) OPENSSL_free(s->session->tlsext_ecpointformatlist);
|
|
||||||
if ((s->session->tlsext_ecpointformatlist = OPENSSL_malloc(ecpointformatlist_length)) == NULL)
|
|
||||||
{
|
{
|
||||||
*al = TLS1_AD_INTERNAL_ERROR;
|
if(s->session->tlsext_ecpointformatlist)
|
||||||
return 0;
|
{
|
||||||
|
*al = TLS1_AD_DECODE_ERROR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
s->session->tlsext_ecpointformatlist_length = 0;
|
||||||
|
if ((s->session->tlsext_ecpointformatlist = OPENSSL_malloc(ecpointformatlist_length)) == NULL)
|
||||||
|
{
|
||||||
|
*al = TLS1_AD_INTERNAL_ERROR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
s->session->tlsext_ecpointformatlist_length = ecpointformatlist_length;
|
||||||
|
memcpy(s->session->tlsext_ecpointformatlist, sdata, ecpointformatlist_length);
|
||||||
}
|
}
|
||||||
s->session->tlsext_ecpointformatlist_length = ecpointformatlist_length;
|
|
||||||
memcpy(s->session->tlsext_ecpointformatlist, sdata, ecpointformatlist_length);
|
|
||||||
#if 0
|
#if 0
|
||||||
fprintf(stderr,"ssl_parse_clienthello_tlsext s->session->tlsext_ecpointformatlist (length=%i) ", s->session->tlsext_ecpointformatlist_length);
|
fprintf(stderr,"ssl_parse_clienthello_tlsext s->session->tlsext_ecpointformatlist (length=%i) ", s->session->tlsext_ecpointformatlist_length);
|
||||||
sdata = s->session->tlsext_ecpointformatlist;
|
sdata = s->session->tlsext_ecpointformatlist;
|
||||||
@ -794,15 +811,22 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
|
|||||||
*al = TLS1_AD_DECODE_ERROR;
|
*al = TLS1_AD_DECODE_ERROR;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
s->session->tlsext_ellipticcurvelist_length = 0;
|
if (!s->hit)
|
||||||
if (s->session->tlsext_ellipticcurvelist != NULL) OPENSSL_free(s->session->tlsext_ellipticcurvelist);
|
|
||||||
if ((s->session->tlsext_ellipticcurvelist = OPENSSL_malloc(ellipticcurvelist_length)) == NULL)
|
|
||||||
{
|
{
|
||||||
*al = TLS1_AD_INTERNAL_ERROR;
|
if(s->session->tlsext_ellipticcurvelist)
|
||||||
return 0;
|
{
|
||||||
|
*al = TLS1_AD_DECODE_ERROR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
s->session->tlsext_ellipticcurvelist_length = 0;
|
||||||
|
if ((s->session->tlsext_ellipticcurvelist = OPENSSL_malloc(ellipticcurvelist_length)) == NULL)
|
||||||
|
{
|
||||||
|
*al = TLS1_AD_INTERNAL_ERROR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
s->session->tlsext_ellipticcurvelist_length = ellipticcurvelist_length;
|
||||||
|
memcpy(s->session->tlsext_ellipticcurvelist, sdata, ellipticcurvelist_length);
|
||||||
}
|
}
|
||||||
s->session->tlsext_ellipticcurvelist_length = ellipticcurvelist_length;
|
|
||||||
memcpy(s->session->tlsext_ellipticcurvelist, sdata, ellipticcurvelist_length);
|
|
||||||
#if 0
|
#if 0
|
||||||
fprintf(stderr,"ssl_parse_clienthello_tlsext s->session->tlsext_ellipticcurvelist (length=%i) ", s->session->tlsext_ellipticcurvelist_length);
|
fprintf(stderr,"ssl_parse_clienthello_tlsext s->session->tlsext_ellipticcurvelist (length=%i) ", s->session->tlsext_ellipticcurvelist_length);
|
||||||
sdata = s->session->tlsext_ellipticcurvelist;
|
sdata = s->session->tlsext_ellipticcurvelist;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#set -x
|
#set -x
|
||||||
|
|
||||||
CONFIG_OPTIONS="--prefix=/usr shared zlib no-idea no-rc5"
|
CONFIG_OPTIONS="--prefix=/usr shared zlib no-idea no-rc5"
|
||||||
INSTALL_PREFIX=/tmp/install
|
INSTALL_PREFIX=/tmp/install/INSTALL
|
||||||
|
|
||||||
VERSION=
|
VERSION=
|
||||||
SUBVERSION=$1
|
SUBVERSION=$1
|
||||||
@ -124,8 +124,12 @@ strip usr/bin/*.exe usr/bin/*.dll usr/lib/engines/*.so
|
|||||||
chmod u-w usr/lib/engines/*.so
|
chmod u-w usr/lib/engines/*.so
|
||||||
|
|
||||||
# Runtime package
|
# Runtime package
|
||||||
find etc usr/bin usr/lib/engines usr/share/doc usr/ssl/certs \
|
tar cjf libopenssl${VERSION//[!0-9]/}-${VERSION}-${SUBVERSION}.tar.bz2 \
|
||||||
usr/ssl/man/man[157] usr/ssl/misc usr/ssl/openssl.cnf usr/ssl/private \
|
usr/bin/cyg*dll
|
||||||
|
# Base package
|
||||||
|
find etc usr/bin/openssl.exe usr/bin/c_rehash usr/lib/engines usr/share/doc \
|
||||||
|
usr/ssl/certs usr/ssl/man/man[157] usr/ssl/misc usr/ssl/openssl.cnf \
|
||||||
|
usr/ssl/private \
|
||||||
-empty -o \! -type d |
|
-empty -o \! -type d |
|
||||||
tar cjfT openssl-${VERSION}-${SUBVERSION}.tar.bz2 -
|
tar cjfT openssl-${VERSION}-${SUBVERSION}.tar.bz2 -
|
||||||
# Development package
|
# Development package
|
||||||
@ -135,6 +139,7 @@ tar cjfT openssl-devel-${VERSION}-${SUBVERSION}.tar.bz2 -
|
|||||||
|
|
||||||
ls -l openssl-${VERSION}-${SUBVERSION}.tar.bz2
|
ls -l openssl-${VERSION}-${SUBVERSION}.tar.bz2
|
||||||
ls -l openssl-devel-${VERSION}-${SUBVERSION}.tar.bz2
|
ls -l openssl-devel-${VERSION}-${SUBVERSION}.tar.bz2
|
||||||
|
ls -l libopenssl${VERSION//[!0-9]/}-${VERSION}-${SUBVERSION}.tar.bz2
|
||||||
|
|
||||||
cleanup
|
cleanup
|
||||||
|
|
||||||
|
@ -4178,3 +4178,14 @@ UI_method_get_prompt_constructr 4550 EXIST:VMS:FUNCTION:
|
|||||||
UI_method_set_prompt_constructor 4551 EXIST:!VMS:FUNCTION:
|
UI_method_set_prompt_constructor 4551 EXIST:!VMS:FUNCTION:
|
||||||
UI_method_set_prompt_constructr 4551 EXIST:VMS:FUNCTION:
|
UI_method_set_prompt_constructr 4551 EXIST:VMS:FUNCTION:
|
||||||
EVP_read_pw_string_min 4552 EXIST::FUNCTION:
|
EVP_read_pw_string_min 4552 EXIST::FUNCTION:
|
||||||
|
CRYPTO_cts128_encrypt 4553 EXIST::FUNCTION:
|
||||||
|
CRYPTO_cts128_decrypt_block 4554 EXIST::FUNCTION:
|
||||||
|
CRYPTO_cfb128_1_encrypt 4555 EXIST::FUNCTION:
|
||||||
|
CRYPTO_cbc128_encrypt 4556 EXIST::FUNCTION:
|
||||||
|
CRYPTO_ctr128_encrypt 4557 EXIST::FUNCTION:
|
||||||
|
CRYPTO_ofb128_encrypt 4558 EXIST::FUNCTION:
|
||||||
|
CRYPTO_cts128_decrypt 4559 EXIST::FUNCTION:
|
||||||
|
CRYPTO_cts128_encrypt_block 4560 EXIST::FUNCTION:
|
||||||
|
CRYPTO_cbc128_decrypt 4561 EXIST::FUNCTION:
|
||||||
|
CRYPTO_cfb128_encrypt 4562 EXIST::FUNCTION:
|
||||||
|
CRYPTO_cfb128_8_encrypt 4563 EXIST::FUNCTION:
|
||||||
|
@ -13,6 +13,7 @@ $banner="\t\@echo Building OpenSSL";
|
|||||||
|
|
||||||
my $no_static_engine = 1;
|
my $no_static_engine = 1;
|
||||||
my $engines = "";
|
my $engines = "";
|
||||||
|
my $otherlibs = "";
|
||||||
local $zlib_opt = 0; # 0 = no zlib, 1 = static, 2 = dynamic
|
local $zlib_opt = 0; # 0 = no zlib, 1 = static, 2 = dynamic
|
||||||
local $zlib_lib = "";
|
local $zlib_lib = "";
|
||||||
local $perl_asm = 0; # 1 to autobuild asm files from perl scripts
|
local $perl_asm = 0; # 1 to autobuild asm files from perl scripts
|
||||||
@ -266,6 +267,7 @@ $cflags.=" -DOPENSSL_NO_KRB5" if $no_krb5;
|
|||||||
$cflags.=" -DOPENSSL_NO_EC" if $no_ec;
|
$cflags.=" -DOPENSSL_NO_EC" if $no_ec;
|
||||||
$cflags.=" -DOPENSSL_NO_ECDSA" if $no_ecdsa;
|
$cflags.=" -DOPENSSL_NO_ECDSA" if $no_ecdsa;
|
||||||
$cflags.=" -DOPENSSL_NO_ECDH" if $no_ecdh;
|
$cflags.=" -DOPENSSL_NO_ECDH" if $no_ecdh;
|
||||||
|
$cflags.=" -DOPENSSL_NO_GOST" if $no_gost;
|
||||||
$cflags.=" -DOPENSSL_NO_ENGINE" if $no_engine;
|
$cflags.=" -DOPENSSL_NO_ENGINE" if $no_engine;
|
||||||
$cflags.=" -DOPENSSL_NO_HW" if $no_hw;
|
$cflags.=" -DOPENSSL_NO_HW" if $no_hw;
|
||||||
$cflags.=" -DOPENSSL_NO_JPAKE" if $no_jpake;
|
$cflags.=" -DOPENSSL_NO_JPAKE" if $no_jpake;
|
||||||
@ -356,6 +358,12 @@ for (;;)
|
|||||||
$lib=$val;
|
$lib=$val;
|
||||||
$lib =~ s/^.*\/([^\/]+)$/$1/;
|
$lib =~ s/^.*\/([^\/]+)$/$1/;
|
||||||
}
|
}
|
||||||
|
if ($key eq "LIBNAME" && $no_static_engine)
|
||||||
|
{
|
||||||
|
$lib=$val;
|
||||||
|
$lib =~ s/^.*\/([^\/]+)$/$1/;
|
||||||
|
$otherlibs .= " $lib";
|
||||||
|
}
|
||||||
|
|
||||||
if ($key eq "EXHEADER")
|
if ($key eq "EXHEADER")
|
||||||
{ $exheader.=&var_add($dir,$val, 1); }
|
{ $exheader.=&var_add($dir,$val, 1); }
|
||||||
@ -658,7 +666,7 @@ foreach (split(/\s+/,$test))
|
|||||||
$rules.=&do_link_rule("\$(TEST_D)$o$t$exep",$tt,"\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)");
|
$rules.=&do_link_rule("\$(TEST_D)$o$t$exep",$tt,"\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)");
|
||||||
}
|
}
|
||||||
|
|
||||||
$defs.=&do_defs("E_SHLIB",$engines,"\$(ENG_D)",$shlibp);
|
$defs.=&do_defs("E_SHLIB",$engines . $otherlibs,"\$(ENG_D)",$shlibp);
|
||||||
|
|
||||||
foreach (split(/\s+/,$engines))
|
foreach (split(/\s+/,$engines))
|
||||||
{
|
{
|
||||||
@ -671,6 +679,14 @@ foreach (split(/\s+/,$engines))
|
|||||||
$rules.= &do_lib_rule("\$(SSLOBJ)","\$(O_SSL)",$ssl,$shlib,"\$(SO_SSL)");
|
$rules.= &do_lib_rule("\$(SSLOBJ)","\$(O_SSL)",$ssl,$shlib,"\$(SO_SSL)");
|
||||||
$rules.= &do_lib_rule("\$(CRYPTOOBJ)","\$(O_CRYPTO)",$crypto,$shlib,"\$(SO_CRYPTO)");
|
$rules.= &do_lib_rule("\$(CRYPTOOBJ)","\$(O_CRYPTO)",$crypto,$shlib,"\$(SO_CRYPTO)");
|
||||||
|
|
||||||
|
foreach (split(/\s+/,$otherlibs))
|
||||||
|
{
|
||||||
|
my $uc = $_;
|
||||||
|
$uc =~ tr /a-z/A-Z/;
|
||||||
|
$rules.= &do_lib_rule("\$(${uc}OBJ)","\$(ENG_D)$o$_$shlibp", "", $shlib, "");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
$rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)");
|
$rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)");
|
||||||
|
|
||||||
print $defs;
|
print $defs;
|
||||||
@ -708,6 +724,7 @@ sub var_add
|
|||||||
return("") if $no_dsa && $dir =~ /\/dsa/;
|
return("") if $no_dsa && $dir =~ /\/dsa/;
|
||||||
return("") if $no_dh && $dir =~ /\/dh/;
|
return("") if $no_dh && $dir =~ /\/dh/;
|
||||||
return("") if $no_ec && $dir =~ /\/ec/;
|
return("") if $no_ec && $dir =~ /\/ec/;
|
||||||
|
return("") if $no_gost && $dir =~ /\/ccgost/;
|
||||||
return("") if $no_cms && $dir =~ /\/cms/;
|
return("") if $no_cms && $dir =~ /\/cms/;
|
||||||
return("") if $no_jpake && $dir =~ /\/jpake/;
|
return("") if $no_jpake && $dir =~ /\/jpake/;
|
||||||
if ($no_des && $dir =~ /\/des/)
|
if ($no_des && $dir =~ /\/des/)
|
||||||
@ -1047,6 +1064,7 @@ sub read_options
|
|||||||
"no-ec" => \$no_ec,
|
"no-ec" => \$no_ec,
|
||||||
"no-ecdsa" => \$no_ecdsa,
|
"no-ecdsa" => \$no_ecdsa,
|
||||||
"no-ecdh" => \$no_ecdh,
|
"no-ecdh" => \$no_ecdh,
|
||||||
|
"no-gost" => \$no_gost,
|
||||||
"no-engine" => \$no_engine,
|
"no-engine" => \$no_engine,
|
||||||
"no-hw" => \$no_hw,
|
"no-hw" => \$no_hw,
|
||||||
"just-ssl" =>
|
"just-ssl" =>
|
||||||
|
@ -316,6 +316,7 @@ $crypto.=" crypto/krb5/krb5_asn.h";
|
|||||||
$crypto.=" crypto/pqueue/pqueue.h";
|
$crypto.=" crypto/pqueue/pqueue.h";
|
||||||
$crypto.=" crypto/cms/cms.h";
|
$crypto.=" crypto/cms/cms.h";
|
||||||
$crypto.=" crypto/jpake/jpake.h";
|
$crypto.=" crypto/jpake/jpake.h";
|
||||||
|
$crypto.=" crypto/modes/modes.h";
|
||||||
|
|
||||||
my $symhacks="crypto/symhacks.h";
|
my $symhacks="crypto/symhacks.h";
|
||||||
|
|
||||||
|
@ -195,7 +195,7 @@ if ($FLAVOR =~ /WIN64A/) {
|
|||||||
my $ver=`nasm -v 2>NUL`;
|
my $ver=`nasm -v 2>NUL`;
|
||||||
my $vew=`nasmw -v 2>NUL`;
|
my $vew=`nasmw -v 2>NUL`;
|
||||||
# pick newest version
|
# pick newest version
|
||||||
$asm=($ver gt $vew?"nasm":"nasmw")." -f win32";
|
$asm=($ver ge $vew?"nasm":"nasmw")." -f win32";
|
||||||
$asmtype="win32n";
|
$asmtype="win32n";
|
||||||
$afile='-o ';
|
$afile='-o ';
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user