OpenSSL
Status
Status 06 January 2023
Building normally with both clang-cl and VS.
It is now possible to use clang-cl as assembler which enhances performance of several crypto functions.
Downloads
Available LTS in OpenSSL 3.0 and later.
Clang-cl assembler support is available from OpenSSL 3.1
Environment
To build all versions you need Strawberry Perl.
To build the emulated version you will also need NASM.
Source Code
https://github.com/openssl/openssl
Packaged source from the OpenSSL website: /source/index.html (openssl.org)
Compiling (Native)
Configure with
perl Configure VC-WIN64-ARMCompile with
nmake
Compiling (Emulated)
Configure with
perl Configure VC-WIN64ACompile with
nmake
Compiling with clang-cl as assembler/compiler
Configure with
perl Configure VC-WIN64-CLANGASM-ARMfor clang-cl as just the assembler.Configure with
perl Configure VC-CLANG-WIN64-CLANGASM-ARMfor clang-cl as the assembler and compiler.Compile with
nmake
Installing
To have two different easily accessible binaries install with
nmake install DESTDIR=...
Benchmarking
Run a fast benchmarking suite with
openssl.exe speed rsa4096There are several different algorithms/number of bits you can try like
aesorrsa512.You can also run without extra arguments for the full benchmark suite, it takes a considerable amount of time.
Blog Post
You can find the blog post for the investigation here: https://www.linaro.org/blog/openssl-for-windows-on-arm/
I have compiled per your instructions (compile natively) and it worked fine.
$ ls ../../openssl/ ACKNOWLEDGEMENTS.md configdata.pm.in* fuzz/ libcrypto_static.lib libssl-3-arm64.ilk NOTES-PERL.md pod2htmd.tmp tlsfuzzer/ app.pdb Configurations/ gost-engine/ libcrypto-3-arm64.dll* libssl-3-arm64.pdb NOTES-POSIX.md providers/ tlslite-ng/ apps/ Configure* HACKING.md libcrypto-3-arm64.ilk libssl-shlib-libssl.res NOTES-UNIX.md pyca-cryptography/ tools/ AUTHORS.md CONTRIBUTING.md include/ libcrypto-3-arm64.pdb LICENSE.txt NOTES-VALGRIND.md python-ecdsa/ util/ build.info crypto/ INSTALL.md libcrypto-shlib-libcrypto.res makefile NOTES-VMS.md README.md VERSION.dat builddata.pm demos/ installdata.pm libssl.def makefile.in NOTES-WINDOWS.md README-ENGINES.md VMS/ CHANGES.md dev/ krb5/ libssl.exp ms/ openssl.pc README-FIPS.md wycheproof/ cloudflare-quiche/ doc/ libcrypto.def libssl.lib NEWS.md OpenSSLConfig.cmake README-PROVIDERS.md CODE-OF-CONDUCT.md dso.pdb libcrypto.exp libssl.pc NOTES-ANDROID.md OpenSSLConfigVersion.cmake README-QUIC.md config* engines/ libcrypto.lib libssl.rc NOTES-ANSI.md oqs-provider/ ssl/ config.com exporters/ libcrypto.pc libssl_static.lib NOTES-DJGPP.md os-dep/ SUPPORT.md configdata.pm* external/ libcrypto.rc libssl-3-arm64.dll*I am getting linking issues like
libcrypto_static.lib(libcrypto-lib-a_time.obj) : error LNK2001: unresolved external symbol __imp__time64any idea?