wolfSSL Expands Compatibility Layer for OpenSSL Applications

The wolfSSL OpenSSL compatibility layer is a means to switch applications designed for OpenSSL over to use wolfSSL. In addition to this, it is constantly expanded and currently has more than 500 commonly used OpenSSL functions. wolfSSL also provides Crypto API support to enable easier migration of projects.

We recently added some more in our wolfSSL 4.7.0 release!

  • SSL_get_verify_mode

… to name a few.

Why might one want to make the migration from OpenSSL and turn on this compatibility in the first place? To start, wolfSSL has numerous benefits over its counterpart, OpenSSL. Some of these include hardware acceleration implementations, progressive adoptions of TLS 1.3 as well as a reduced footprint size. In addition to this, there is the potential to use wolfCrypt FIPS. wolfSSL maintains current FIPS 140-2 (and soon to be 140-3) support which is used in numerous applications. We also provide FIPS Ready builds to help get projects ready for FIPS verification. All of this is supported by a team of trained wolfSSL engineers.

For more information about the OpenSSL compatibility layer or the wolfSSL embedded SSL/TLS library, contact us today at facts@wolfssl.com!

wolfSSL 4.7.0 Supports user_settings.h for CMake Builds

wolfSSL is happy to announce support for user_settings.h in CMake builds in wolfSSL 4.7.0. To enable this feature, add -DWOLFSSL_USER_SETTINGS=yes to your cmake command and proceed to use user_settings.h as you normally would. For more about user_settings.h, continue reading below.

When building for embedded devices the best way to configure the wolfSSL library is to create a header named “user_settings.h”. Then, at the global level in your application define WOLFSSL_USER_SETTINGS so that when <wolfssl/wolfcrypt/settings.h> is included throughout the library the user_settings.h header is also pulled in. The application should include <wolfssl/wolfcrypt/settings.h>, BEFORE all other wolfSSL headers. A good example user_settings.h for getting started on an embedded project can be found at wolfssl-4.7.0/IDE/GCC-ARM/Header/user_settings.h. That example is well commented and provides a good starting point for any embedded project, even non-ARM based ones!

Please contact wolfSSL at facts@wolfssl.com with any questions or for help using wolfSSL with your project! wolfSSL supports TLS 1.3, FIPS 140-2/140-3, DO-178C, and more!

strongSwan + wolfSSL + FIPS!

As some may be aware, wolfSSL added support for strongSwan in April of 2019. The upstream commit can be reviewed here: https://github.com/strongswan/strongswan/pull/133

Users can test the latest development master of wolfSSL with the latest version of strongSwan using the following setup:

wolfSSL Build and Installation Steps

$ git clone https://github.com/wolfSSL/wolfssl.git

$ cd wolfssl
$ ./autogen.sh

$ ./configure --enable-opensslall --enable-keygen --enable-rsapss --enable-des3 --enable-dtls --enable-certgen --enable-certreq --enable-certext --enable-sessioncerts --enable-crl --enable-ocsp CFLAGS="-DWOLFSSL_DES_ECB -DWOLFSSL_LOG_PRINTF -DWOLFSSL_PUBLIC_MP -DHAVE_EX_DATA"

$ make
$ make check
$ sudo make install

strongSwan Build and Installation Steps

# if the following packages are not already installed:
$ sudo apt-get install flex bison byacc libsoup2.4-dev gperf

$ git clone https://github.com/strongswan/strongswan.git
$ cd strongswan
$ ./autogen.sh

# if packages are missing autogen.sh must be re-run

$ ./configure --disable-defaults --enable-pki --enable-wolfssl --enable-pem
$ make
$ make check
$ sudo make install

wolfSSL has had interest in enabling FIPS 140-2/140-3 support with strongSwan so our engineers verified everything is working with the wolfCrypt FIPS 140-2 validated Module!

The steps wolfSSL used for testing are as follows:

Testing was done using the wolfSSL commercial FIPS release v4.7.0 which internally uses the wolfCrypt v4.0.0 FIPS 140-2 validated Crypto Module. It was located in the /home/user-name/Downloads directory on the target test system, Linux 4.15 Ubuntu 18.04 LTS running on Intel(R) Xeon(R) CPU E3-1270 v6 @ 3.80GHz.

  1. wolfSSL was configured and installed with these settings:
./configure --enable-opensslall --enable-keygen --enable-rsapss --enable-des3 --enable-dtls --enable-certgen --enable-certreq --enable-certext --enable-sessioncerts --enable-crl --enable-ocsp CFLAGS="-DWOLFSSL_DES_ECB -DWOLFSSL_LOG_PRINTF -DWOLFSSL_PUBLIC_MP -DHAVE_EX_DATA -DFP_MAX_BITS=8192" --enable-ed25519 --enable-curve25519 --enable-fips=v2 --enable-intelasm --prefix=$(pwd)/../fips-install-dir
 make install
  1. A custom install location was used which equated to /home/user-name/Downloads/fips-install-dir and the configuration for strongSwan accounted for this.
  2. strongSwan was cloned to /home/user-name/Downloads with “git clone https://github.com/strongswan/strongswan.git
  3. StongSwan was configured and installed with these settings:
./configure --disable-defaults --enable-pki --enable-wolfssl --enable-pem --prefix=$(pwd)/../strongswan-install-dir wolfssl_CFLAGS="-I$(pwd)/../fips-install-dir/include" wolfssl_LIBS="-L$(pwd)/../fips-install-dir/lib -lwolfssl"
 make install
 make check
  1. In the make check stage of the test, it was observed that 1 test was failing.
 Passed 34 of 35 'libstrongswan' suites
 FAIL: libstrongswan_tests
 1 of 1 test failed
  1. Reviewing the logs it was apparent one of the RSA tests was failing.
  2. Upon further debugging it turned out the failure was a test in strongSwan that was attempting to create an RSA key size of 1536-bits.
Running case 'generate':
 DEBUG: key_sizes[_i] set to 1024
 DEBUG: key_sizes[_i] set to 1536
 DEBUG: key_sizes[_i] set to 2048
 DEBUG: key_sizes[_i] set to 3072
 DEBUG: key_sizes[_i] set to 4096

wolfSSL has a function RsaSizeCheck() which in FIPS mode will specifically reject any non FIPS RSA key sizes so this failure was not only expected, but it is a good thing for those wanting to use strongSwan in FIPS mode and ensure only FIPS-validated RSA key sizes will be supported!

wolfSSL is pleased that with the latest release of wolfSSL v4.7.0 and the wolfCrypt FIPS 140-2 module validated on FIPS certificate 3389, strongSwan support is working splendidly and wolfSSL engineers will be making efforts to ensure continued support into the future!

If you have any questions about wolfSSL, wolfCrypt FIPS, or strongSwan and wolfSSL together please contact our support staff anytime at support@wolfssl.com or via our Zendesk portal by registering and opening a support incident at wolfssl.zendesk.com.

Who’s testing that cryptography on your platform? With your hardware encryption? With your secure element?

Three of our biggest engineering investments at wolfSSL are testing, testing, and testing. We invest heavily in testing, so that you don’t have to. We develop and test with 30+ operating systems, 10+ compilers, 50+ chipsets, 20+ hardware encryption IP schemes, and 15+ secure enclaves. We add more of the above to our Jenkins based CI/CD package every day. We do unit tests on everything, we run 5 static analyzers, and we run 7 internal fuzz testers. We employ sophisticated outside consultants to run additional fuzz testing.

Oh, yeah, we’ve had our code audited by every major vendor in computing, because they are all our customers, and need to review our code to ensure their own security and branding.

We’ve also been audited by over 20 security research teams in academia.

Finally, we’ve been through industry specific testing like DO-178 in aviation, MISRA and ASPICE in automotive, and FIPS 140 in government.

Contrast all of that with the testing and assurance you get from our competitors on your particular platform. It won’t compare.

Want to hear more about why we have the best tested cryptography and TLS 1.3? Email us at facts at wolfSSL dot com!

wolfSSL Supports Stunnel 5.57

wolfSSL is happy to announce support for the latest stable version of stunnel, version 5.57. Per the stunnel website, “Stunnel is a proxy designed to add TLS encryption functionality to existing clients and servers without any changes in the programs’ code.” wolfSSL also supports version 5.40 of stunnel. If you’re in need of a fast, low memory, and FIPS-validated TLS 1.3 implementation for stunnel, please reach out to facts@wolfssl.com!

wolfMQTT Release v1.8.0

The winter release of wolfMQTT, v1.8.0, is now available! This release has several bug fixes and optimizations including:

  • Fixes for non-blocking in WIN32 and large payload (PR #202)
  • Make TLS IO callback functions public (PR #201)
  • Bug fixes (PR #186, 188, 189, 193, 196, 199, 200)
  • Update default test broker (PR #194)
  • MQTT-SN fixes for multithread and register topic name (PR #185, 190)
  • Fix multi-thread to use pthread mutex with condition (PR #183)
  • Fix for WIN thread create macro (PR #182)
  • Use options.h with Arduino build (PR #181)
  • Use MqttClient_Ping_ex instead of MqttClient_Ping in examples (PR #179)
  • Fixes for building with MinGW (PR #178)
  • MQTT-SN support for multithread (PR #176)
  • TLS mutual auth in client examples (PR #175)
  • MQTT-SN feature enhancements (PR #173)
  • Add runtime message option to client (PR #171)

Check out the ChangeLog from the download for a full list of features and fixes, or contact us at facts@wolfssl.com with any questions:

While you’re there, show us some love and give the wolfMQTT project a Star!
You can download the latest release here: https://www.wolfssl.com/download/
Or clone directly from our GitHub repository: https://github.com/wolfSSL/wolfMQTT

wolfSSL ARMv8 Support

Did you know that the wolfSSL embedded SSL/TLS library supports ARMv8 as well as the Cryptography Extensions that it provides?  wolfSSL is more than 10 times faster with AES and SHA256 operations the ARMv8 board we have been testing on (HiKey LeMaker) when using hardware acceleration versus software crypto!

wolfSSL ARMv8 on HiKey LeMaker Board


ARMv8 Benchmark Data comparing Software and Hardware Cryptography

AlgorithmSoftware CryptographyHardware Cryptography
RNG16.761 MB/s82.599 MB/s
AES-128-CBC-enc26.491 MB/s649.179 MB/s
AES-128-CBC-dec26.915 MB/s607.407 MB/s
AES-192-CBC-enc22.796 MB/s566.717 MB/s
AES-192-CBC-dec23.130 MB/s553.092 MB/s
AES-256-CBC-enc20.004 MB/s504.143 MB/s
AES-256-CBC-dec20.207 MB/s491.374 MB/s
AES-128-GCM-enc6.224 MB/s393.407 MB/s
AES-128-GCM-dec6.226 MB/s182.279 MB/s
AES-192-GCM-enc5.895 MB/s361.801 MB/s
AES-192-GCM-dec5.895 MB/s175.676 MB/s
AES-256-GCM-enc5.609 MB/s333.911 MB/s
AES-256-GCM-dec5.610 MB/s169.085 MB/s
CHACHA60.510 MB/s60.017 MB/s
CHA-POLY41.805 MB/s41.410 MB/s
MD5156.310 MB/s154.421 MB/s
POLY1305144.464 MB/s143.058 MB/s
SHA89.874 MB/s89.154 MB/s
SHA-25638.805 MB/s533.139 MB/s
HMAC-MD5156.301 MB/s154.083 MB/s
HMAC-SHA89.859 MB/s89.045 MB/s
HMAC-SHA25638.814 MB/s532.316 MB/s
RSA, 2048, public171.995 Ops/s171.355 Ops/s
RSA, 2048, private13.716 Ops/s13.686 Ops/s
DH, 2048, key generation50.831 Ops/s50.575 Ops/s
DH, 2048, agree41.826 Ops/s41.596 Ops/s

If you are interested in using wolfSSL on an ARMv8 platform and want some tips on getting started for optimal performance, contact us at facts@wolfssl.com!

wolfSSL Version 4.7.0 Is Available!

Version 4.7.0 of wolfSSL has general fixes and optimizations, a few excellent feature additions, and some vulnerability fixes. Some of the new features added are support for S/MIME bundles which are commonly used with email traffic, an --enable-reproducable-build flag to help out with inspecting the wolfSSL library created, expansion to the OpenSSL compatibility layer, and additional session ticket API’s that help modularly control which TLS protocol version can use session tickets.

A few of the improvements and optimizations in the release are to linux kernel module support, DTLS resending of a flight after timeouts, the CMake build with a user settings file and out of directory builds of wolfSSL.

This release fixes 3 vulnerabilities, one of them being a TLS 1.3 client side issue that is rated as high. Thanks to Aina Toky Rasoamanana and Olivier Levillain from Télécom SudParis for the report on this TLS 1.3 issue.

A full list of items in the release can be seen in the ChangeLog.md bundled with wolfSSL or on our main webpage. For further reading about vulnerabilities see our webpage or contact us at facts@wolfssl.com for general wolfSSL information.

FIPS certificate #2425 is being added to NIST sunset list: wolfSSL customers can achieve effortless transition to FIPS cert #3389

FIPS 140-2 requires the use of validated cryptography in the security systems implemented by federal agencies to protect sensitive information. The wolfCrypt Module is a comprehensive suite of FIPS Approved algorithms. All key sizes and modes have been implemented to allow flexibility and efficiency.

The National Institute of Standards and Technology (NIST) is sending FIPS cert #2425 into sunset June 2021. For customers who will be impacted, the wolfCrypt Cryptographic Module maintains its #3389 certificate and can be used in conjunction with the wolfSSL embedded SSL/TLS library for full TLS 1.3 client and server support. Upgrade your FIPS cert with wolfSSL to stay afloat and benefit from: 

  • Algorithm support for TLS 1.3!
  • New algorithms such as AES (CBC, GCM, CTR, ECB), CVL, Hash DRBG, DSA, DHE, ECDSA (key generation, sign, verify), HMAC, RSA (key generation, sign, verify), SHA-3, SHA-2, SHA-1, and Triple-DES
  • Hardware encryption support for NXP’s Cryptographic Assistance and Assurance Module (CAAM), NXP Memory-Mapped Cryptographic Acceleration Unit (mmCAU), Intel’s AES-NI, and more
  • Support for secure elements and TPM’s
  • Interoperability with wolfBoot, wolfSSH, and wolfTPM
  • Integration support for third party libraries such as strongswan, nginx, python and more

Contact us to upgrade to FIPS cert #3389 at fips@wolfssl.com

Additional Resources 

Learn more about wolfSSL support for FIPS cert #3389: https://www.wolfssl.com/wolfcrypt-fips-certificate-3389-3/ 

For a list of supported Operating Environments for wolfCrypt FIPS, check our FIPS page: https://www.wolfssl.com/license/fips/ 

Our FIPS Story

wolfSSL is currently the leader in embedded FIPS certificates. We have a long history in FIPS starting with wolfCrypt FIPS 140-2 Level 1 Certificate #2425 as well as wolfCrypt v4 FIPS 140-2 Level 1 Certificate #3389. wolfSSL partners with FIPS experts KeyPair to bring you FIPS consulting services, and high assurance along each step of your FIPS certification process. Additionally, wolfSSL will be the first implementation of FIPS 140-3.

wolfSSL also provides support for a wolfCrypt FIPS Ready version of the library! wolfCrypt FIPS Ready is our FIPS enabled cryptography layer code included in the wolfSSL source tree that you can enable and build. You do not get a FIPS certificate, you are not FIPS approved, but you will be FIPS Ready. FIPS Ready means that you have included the FIPS code into your build and that you are operating according to the FIPS enforced best practices of default entry point, and power on self test.

wolfCrypt FIPS Ready can be downloaded from the wolfSSL download page located here: https://www.wolfssl.com/download/. More information on getting set up with wolfCrypt FIPS Ready can be found in our FIPS Ready User guide here: https://www.wolfssl.com/docs/fips-ready-user-guide/


Posts navigation

1 2 3