README 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. *** Description ***
  2. The wolfSSL embedded SSL library (formerly CyaSSL) is a lightweight SSL/TLS
  3. library written in ANSI C and targeted for embedded, RTOS, and
  4. resource-constrained environments - primarily because of its small size, speed,
  5. and feature set. It is commonly used in standard operating environments as well
  6. because of its royalty-free pricing and excellent cross platform support.
  7. wolfSSL supports industry standards up to the current TLS 1.3 and DTLS 1.2
  8. levels, is up to 20 times smaller than OpenSSL, and offers progressive ciphers
  9. such as ChaCha20, Curve25519, and Blake2b. User benchmarking and feedback
  10. reports dramatically better performance when using wolfSSL over OpenSSL.
  11. wolfSSL is powered by the wolfCrypt library. Two versions of the wolfCrypt
  12. cryptography library have been FIPS 140-2 validated (Certificate #2425 and
  13. certificate #3389). For additional information, visit the wolfCrypt FIPS FAQ
  14. (https://www.wolfssl.com/license/fips/) or contact fips@wolfssl.com
  15. *** Why choose wolfSSL? ***
  16. There are many reasons to choose wolfSSL as your embedded SSL solution. Some of
  17. the top reasons include size (typical footprint sizes range from 20-100 kB),
  18. support for the newest standards (SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3,
  19. DTLS 1.0, and DTLS 1.2), current and progressive cipher support (including
  20. stream ciphers), multi-platform, royalty free, and an OpenSSL compatibility API
  21. to ease porting into existing applications which have previously used the
  22. OpenSSL package. For a complete feature list, see chapter 4 of the wolfSSL
  23. manual. (https://www.wolfssl.com/docs/wolfssl-manual/ch4/)
  24. *** Notes, Please read ***
  25. Note 1)
  26. wolfSSL as of 3.6.6 no longer enables SSLv3 by default. wolfSSL also no longer
  27. supports static key cipher suites with PSK, RSA, or ECDH. This means if you
  28. plan to use TLS cipher suites you must enable DH (DH is on by default), or
  29. enable ECC (ECC is on by default), or you must enable static key cipher suites
  30. with
  31. WOLFSSL_STATIC_DH
  32. WOLFSSL_STATIC_RSA
  33. or
  34. WOLFSSL_STATIC_PSK
  35. though static key cipher suites are deprecated and will be removed from future
  36. versions of TLS. They also lower your security by removing PFS.
  37. When compiling ssl.c, wolfSSL will now issue a compiler error if no cipher
  38. suites are available. You can remove this error by defining
  39. WOLFSSL_ALLOW_NO_SUITES in the event that you desire that, i.e., you're not
  40. using TLS cipher suites.
  41. Note 2)
  42. wolfSSL takes a different approach to certificate verification than OpenSSL
  43. does. The default policy for the client is to verify the server, this means
  44. that if you don't load CAs to verify the server you'll get a connect error,
  45. no signer error to confirm failure (-188).
  46. If you want to mimic OpenSSL behavior of having SSL_connect succeed even if
  47. verifying the server fails and reducing security you can do this by calling:
  48. wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
  49. before calling wolfSSL_new();. Though it's not recommended.
  50. Note 3)
  51. The enum values SHA, SHA256, SHA384, SHA512 are no longer available when
  52. wolfSSL is built with --enable-opensslextra (OPENSSL_EXTRA) or with the macro
  53. NO_OLD_SHA_NAMES. These names get mapped to the OpenSSL API for a single call
  54. hash function. Instead the name WC_SHA, WC_SHA256, WC_SHA384 and WC_SHA512
  55. should be used for the enum name.
  56. *** end Notes ***
  57. # wolfSSL Release 5.2.0 (Feb 21, 2022)
  58. ## Vulnerabilities
  59. * \[High\] A TLS v1.3 server who requires mutual authentication can be
  60. bypassed. If a malicious client does not send the certificate_verify
  61. message a client can connect without presenting a certificate even
  62. if the server requires one. Thank you to Aina Toky Rasoamanana and
  63. Olivier Levillain of Télécom SudParis.
  64. * \[High\] A TLS v1.3 client attempting to authenticate a TLS v1.3
  65. server can have its certificate check bypassed. If the sig_algo in
  66. the certificate_verify message is different than the certificate
  67. message checking may be bypassed. Thank you to Aina Toky Rasoamanana and
  68. Olivier Levillain of Télécom SudParis.
  69. ## New Feature Additions
  70. * Example applications for Renesas RX72N with FreeRTOS+IoT
  71. * Renesas FSP 3.5.0 support for RA6M3
  72. * For TLS 1.3, improved checks on order of received messages.
  73. * Support for use of SHA-3 cryptography instructions available in
  74. ARMv8.2-A architecture extensions. (For Apple M1)
  75. * Support for use of SHA-512 cryptography instructions available in
  76. ARMv8.2-A architecture extensions. (For Apple M1)
  77. * Fixes for clang -Os on clang >= 12.0.0
  78. * Expose Sequence Numbers so that Linux TLS (kTLS) can be configured
  79. * Fix bug in TLSX_ALPN_ParseAndSet when using ALPN select callback.
  80. * Allow DES3 with FIPS v5-dev.
  81. * Include HMAC for deterministic ECC sign build
  82. * Add --enable-chrony configure option. This sets build options needed
  83. to build the Chrony NTP (Network Time Protocol) service.
  84. * Add support for STM32U575xx boards.
  85. * Fixes for NXP’s SE050 Ed25519/Curve25519.
  86. * TLS: Secure renegotiation info on by default for compatibility.
  87. * Inline C code version of ARM32 assembly for cryptographic algorithms
  88. available and compiling for improved performance on ARM platforms
  89. * Configure HMAC: define NO_HMAC to disable HMAC (default: enabled)
  90. * ISO-TP transport layer support added to wolfio for TLS over CAN Bus
  91. * Fix initialization bug in SiLabs AES support
  92. * Domain and IP check is only performed on leaf certificates
  93. ## ARM PSA Support (Platform Security Architecture) API
  94. * Initial support added for ARM’s Platform Security Architecture (PSA)
  95. API in wolfCrypt which allows support of ARM PSA enabled devices by
  96. wolfSSL, wolfSSH, and wolfBoot and wolfCrypt FIPS.
  97. * Included algorithms: ECDSA, ECDH, HKDF, AES, SHA1, SHA256, SHA224, RNG
  98. ## ECICE Updates
  99. * Support for more encryption algorithms: AES-256-CBC, AES-128-CTR,
  100. AES-256-CTR
  101. * Support for compressed public keys in messages.
  102. ## Math Improvements
  103. * Improved performance of X448 and Ed448 through inlining Karatsuba in
  104. square and multiplication operations for 128-bit implementation
  105. (64-bit platforms with 128-bit type support).
  106. * SP Math C implementation: fix for corner case in curve specific
  107. implementations of Montgomery Reduction (P-256, P-384).
  108. * SP math all: assembly snippets added for ARM Thumb. Performance
  109. improvement on platform.
  110. * SP math all: ARM64/32 sp_div_word assembly snippets added to remove
  111. dependency on __udiv3.
  112. * SP C implementation: multiplication of two signed types with overflow
  113. is undefined in C. Now cast to unsigned type before multiplication is
  114. performed.
  115. * SP C implementation correctly builds when using CFLAG: -m32
  116. ## OpenSSL Compatibility Layer
  117. * Added DH_get_2048_256 to compatibility layer.
  118. * wolfSSLeay_version now returns the version of wolfSSL
  119. * Added C++ exports for API’s in wolfssl/openssl/crypto.h. This allows
  120. better compatibility when building with a C++ compiler.
  121. * Fix for OpenSSL x509_NAME_hash mismatch
  122. * Implement FIPS_mode and FIPS_mode_set in the compat layer.
  123. * Fix for certreq and certgen options with openssl compatibility
  124. * wolfSSL_BIO_dump() and wolfSSL_OBJ_obj2txt() rework
  125. * Fix IV length bug in EVP AES-GCM code.
  126. * Add new ASN1_INTEGER compatibility functions.
  127. * Fix wolfSSL_PEM_X509_INFO_read with NO_FILESYSTEM
  128. ## CMake Updates
  129. * Check for valid override values.
  130. * Add `KEYGEN` option.
  131. * Cleanup help messages.
  132. * Add options to support wolfTPM.
  133. ## VisualStudio Updates
  134. * Remove deprecated VS solution
  135. * Fix VS unreachable code warning
  136. ## New Algorithms and Protocols
  137. * AES-SIV (RFC 5297)
  138. * DTLS SRTP (RFC 5764), used with WebRTC to agree on profile for new
  139. real-time session keys
  140. * SipHash MAC/PRF for hash tables. Includes inline assembly for
  141. x86_64 and Aarch64.
  142. ## Remove Obsolete Algorithms
  143. * IDEA
  144. * Rabbit
  145. * HC-128
  146. If this adversely affects you or your customers, please get in cotact with the wolfSSL team. (support@wolfssl.com)
  147. For additional vulnerability information visit the vulnerability page at https://www.wolfssl.com/docs/security-vulnerabilities/
  148. See INSTALL file for build instructions.
  149. More info can be found on-line at https://wolfssl.com/wolfSSL/Docs.html
  150. *** Resources ***
  151. [wolfSSL Website](https://www.wolfssl.com/)
  152. [wolfSSL Wiki](https://github.com/wolfSSL/wolfssl/wiki)
  153. [FIPS FAQ](https://wolfssl.com/license/fips)
  154. [wolfSSL Documents](https://wolfssl.com/wolfSSL/Docs.html)
  155. [wolfSSL Manual](https://wolfssl.com/wolfSSL/Docs-wolfssl-manual-toc.html)
  156. [wolfSSL API Reference]
  157. (https://wolfssl.com/wolfSSL/Docs-wolfssl-manual-17-wolfssl-api-reference.html)
  158. [wolfCrypt API Reference]
  159. (https://wolfssl.com/wolfSSL/Docs-wolfssl-manual-18-wolfcrypt-api-reference.html)
  160. [TLS 1.3](https://www.wolfssl.com/docs/tls13/)
  161. [wolfSSL Vulnerabilities]
  162. (https://www.wolfssl.com/docs/security-vulnerabilities/)
  163. Additional wolfSSL Examples](https://github.com/wolfssl/wolfssl-examples)