From e3c970210fe74d35049afd0a7dc06759d4f5c437 Mon Sep 17 00:00:00 2001 From: "Earle F. Philhower, III" Date: Mon, 14 May 2018 20:46:47 -0700 Subject: [PATCH] Add BearSSL client and server, support true bidir, lower memory, modern SSL (#4273) BearSSL (https://www.bearssl.org) is a TLS(SSL) library written by Thomas Pornin that is optimized for lower-memory embedded systems like the ESP8266. It supports a wide variety of modern ciphers and is unique in that it doesn't perform any memory allocations during operation (which is the unfortunate bane of the current axTLS). BearSSL is also absolutely focused on security and by default performs all its security checks on x.509 certificates during the connection phase (but if you want to be insecure and dangerous, that's possible too). While it does support unidirectional SSL buffers, like axTLS, as implemented the ESP8266 wrappers only support bidirectional buffers. These bidirectional buffers avoid deadlocks in protocols which don't have well separated receive and transmit periods. This patch adds several classes which allow connecting to TLS servers using this library in almost the same way as axTLS: BearSSL::WiFiClientSecure - WiFiClient that supports TLS BearSSL::WiFiServerSecure - WiFiServer supporting TLS and client certs It also introduces objects for PEM/DER encoded keys and certificates: BearSSLX509List - x.509 Certificate (list) for general use BearSSLPrivateKey - RSA or EC private key BearSSLPublicKey - RSA or EC public key (i.e. from a public website) Finally, it adds a Certificate Authority store object which lets BearSSL access a set of trusted CA certificates on SPIFFS to allow it to verify the identity of any remote site on the Internet, without requiring RAM except for the single matching certificate. CertStoreSPIFFSBearSSL - Certificate store utility Client certificates are supported for the BearSSL::WiFiClientSecure, and what's more the BearSSL::WiFiServerSecure can also *require* remote clients to have a trusted certificate signed by a specific CA (or yourself with self-signing CAs). Maximum Fragment Length Negotiation probing and usage are supported, but be aware that most sites on the Internet don't support it yet. When available, you can reduce the memory footprint of the SSL client or server dramatically (i.e. down to 2-8KB vs. the ~22KB required for a full 16K receive fragment and 512b send fragment). You can also manually set a smaller fragment size and guarantee at your protocol level all data will fit within it. Examples are included to show the usage of these new features. axTLS has been moved to its own namespace, "axtls". A default "using" clause allows existing apps to run using axTLS without any changes. The BearSSL::WiFi{client,server}Secure implements the axTLS client/server API which lets many end user applications take advantage of BearSSL with few or no changes. The BearSSL static library used presently is stored at https://github.com/earlephilhower/bearssl-esp8266 and can be built using the standard ESP8266 toolchain. --- .../src/ESP8266HTTPClient.cpp | 67 +- .../ESP8266HTTPClient/src/ESP8266HTTPClient.h | 7 +- .../SecureBearSSLUpdater.ino | 117 + .../HelloServerBearSSL/HelloServerBearSSL.ino | 142 + .../src/ESP8266WebServerSecure.h | 42 +- ...re.cpp => ESP8266WebServerSecureAxTLS.cpp} | 3 + .../src/ESP8266WebServerSecureAxTLS.h | 64 + .../src/ESP8266WebServerSecureBearSSL.cpp | 165 + .../src/ESP8266WebServerSecureBearSSL.h | 69 + .../BearSSL_CertStore/BearSSL_CertStore.ino | 158 + .../BearSSL_CertStore/certs-from-mozilla.py | 51 + .../BearSSL_MaxFragmentLength.ino | 125 + .../BearSSL_Server/BearSSL_Server.ino | 177 + .../DO-NOT-USE-THESE-CERTS-IN-YOUR-OWN-APPS | 0 .../examples/BearSSL_Server/cert.pem | 20 + .../examples/BearSSL_Server/key.pem | 28 + .../BearSSL_ServerClientCert.ino | 257 + .../DO-NOT-USE-THESE-CERTS-IN-YOUR-OWN-APPS | 0 .../examples/BearSSL_ServerClientCert/ca.conf | 12 + .../BearSSL_ServerClientCert/ca_cer.pem | 18 + .../BearSSL_ServerClientCert/ca_cer.srl | 1 + .../BearSSL_ServerClientCert/ca_key.pem | 27 + .../BearSSL_ServerClientCert/client.conf | 8 + .../BearSSL_ServerClientCert/client1_cer.pem | 17 + .../BearSSL_ServerClientCert/client1_key.pem | 27 + .../BearSSL_ServerClientCert/client1_req.csr | 16 + .../BearSSL_ServerClientCert/server.conf | 8 + .../BearSSL_ServerClientCert/server_cer.pem | 20 + .../BearSSL_ServerClientCert/server_key.pem | 27 + .../BearSSL_Validation/BearSSL_Validation.ino | 228 + libraries/ESP8266WiFi/keywords.txt | 28 + libraries/ESP8266WiFi/src/BearSSLHelpers.cpp | 821 ++++ libraries/ESP8266WiFi/src/BearSSLHelpers.h | 122 + .../ESP8266WiFi/src/CertStoreBearSSL.cpp | 141 + libraries/ESP8266WiFi/src/CertStoreBearSSL.h | 61 + .../ESP8266WiFi/src/CertStoreSDBearSSL.cpp | 141 + .../ESP8266WiFi/src/CertStoreSDBearSSL.h | 47 + .../src/CertStoreSPIFFSBearSSL.cpp | 125 + .../ESP8266WiFi/src/CertStoreSPIFFSBearSSL.h | 43 + libraries/ESP8266WiFi/src/ESP8266WiFi.h | 2 + libraries/ESP8266WiFi/src/WiFiClientSecure.h | 77 +- ...ntSecure.cpp => WiFiClientSecureAxTLS.cpp} | 4 + .../ESP8266WiFi/src/WiFiClientSecureAxTLS.h | 100 + .../src/WiFiClientSecureBearSSL.cpp | 1289 +++++ .../ESP8266WiFi/src/WiFiClientSecureBearSSL.h | 215 + libraries/ESP8266WiFi/src/WiFiServerSecure.h | 26 +- ...erSecure.cpp => WiFiServerSecureAxTLS.cpp} | 4 + .../ESP8266WiFi/src/WiFiServerSecureAxTLS.h | 48 + .../src/WiFiServerSecureBearSSL.cpp | 119 + .../ESP8266WiFi/src/WiFiServerSecureBearSSL.h | 76 + .../src/ESP8266httpUpdate.cpp | 23 + .../ESP8266httpUpdate/src/ESP8266httpUpdate.h | 5 + platform.txt | 2 +- tests/common.sh | 6 +- tools/platformio-build.py | 2 +- tools/sdk/include/bearssl/bearssl.h | 169 + tools/sdk/include/bearssl/bearssl_aead.h | 1059 +++++ tools/sdk/include/bearssl/bearssl_block.h | 2522 ++++++++++ tools/sdk/include/bearssl/bearssl_ec.h | 804 ++++ tools/sdk/include/bearssl/bearssl_hash.h | 1346 ++++++ tools/sdk/include/bearssl/bearssl_hmac.h | 211 + tools/sdk/include/bearssl/bearssl_pem.h | 243 + tools/sdk/include/bearssl/bearssl_port.h | 20 + tools/sdk/include/bearssl/bearssl_prf.h | 150 + tools/sdk/include/bearssl/bearssl_rand.h | 295 ++ tools/sdk/include/bearssl/bearssl_rsa.h | 743 +++ tools/sdk/include/bearssl/bearssl_ssl.h | 4136 +++++++++++++++++ tools/sdk/include/bearssl/bearssl_x509.h | 1451 ++++++ tools/sdk/ld/eagle.app.v6.common.ld.h | 1 + tools/sdk/lib/libbearssl.a | Bin 0 -> 4279046 bytes 70 files changed, 18433 insertions(+), 145 deletions(-) create mode 100644 libraries/ESP8266HTTPUpdateServer/examples/SecureBearSSLUpdater/SecureBearSSLUpdater.ino create mode 100644 libraries/ESP8266WebServer/examples/HelloServerBearSSL/HelloServerBearSSL.ino rename libraries/ESP8266WebServer/src/{ESP8266WebServerSecure.cpp => ESP8266WebServerSecureAxTLS.cpp} (99%) create mode 100644 libraries/ESP8266WebServer/src/ESP8266WebServerSecureAxTLS.h create mode 100644 libraries/ESP8266WebServer/src/ESP8266WebServerSecureBearSSL.cpp create mode 100644 libraries/ESP8266WebServer/src/ESP8266WebServerSecureBearSSL.h create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_CertStore/BearSSL_CertStore.ino create mode 100755 libraries/ESP8266WiFi/examples/BearSSL_CertStore/certs-from-mozilla.py create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_MaxFragmentLength/BearSSL_MaxFragmentLength.ino create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_Server/BearSSL_Server.ino create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_Server/DO-NOT-USE-THESE-CERTS-IN-YOUR-OWN-APPS create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_Server/cert.pem create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_Server/key.pem create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/BearSSL_ServerClientCert.ino create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/DO-NOT-USE-THESE-CERTS-IN-YOUR-OWN-APPS create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca.conf create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca_cer.pem create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca_cer.srl create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca_key.pem create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client.conf create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client1_cer.pem create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client1_key.pem create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client1_req.csr create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/server.conf create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/server_cer.pem create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/server_key.pem create mode 100644 libraries/ESP8266WiFi/examples/BearSSL_Validation/BearSSL_Validation.ino create mode 100644 libraries/ESP8266WiFi/src/BearSSLHelpers.cpp create mode 100644 libraries/ESP8266WiFi/src/BearSSLHelpers.h create mode 100644 libraries/ESP8266WiFi/src/CertStoreBearSSL.cpp create mode 100644 libraries/ESP8266WiFi/src/CertStoreBearSSL.h create mode 100644 libraries/ESP8266WiFi/src/CertStoreSDBearSSL.cpp create mode 100644 libraries/ESP8266WiFi/src/CertStoreSDBearSSL.h create mode 100644 libraries/ESP8266WiFi/src/CertStoreSPIFFSBearSSL.cpp create mode 100644 libraries/ESP8266WiFi/src/CertStoreSPIFFSBearSSL.h rename libraries/ESP8266WiFi/src/{WiFiClientSecure.cpp => WiFiClientSecureAxTLS.cpp} (99%) create mode 100644 libraries/ESP8266WiFi/src/WiFiClientSecureAxTLS.h create mode 100644 libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp create mode 100644 libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.h rename libraries/ESP8266WiFi/src/{WiFiServerSecure.cpp => WiFiServerSecureAxTLS.cpp} (98%) create mode 100644 libraries/ESP8266WiFi/src/WiFiServerSecureAxTLS.h create mode 100644 libraries/ESP8266WiFi/src/WiFiServerSecureBearSSL.cpp create mode 100644 libraries/ESP8266WiFi/src/WiFiServerSecureBearSSL.h create mode 100644 tools/sdk/include/bearssl/bearssl.h create mode 100644 tools/sdk/include/bearssl/bearssl_aead.h create mode 100644 tools/sdk/include/bearssl/bearssl_block.h create mode 100644 tools/sdk/include/bearssl/bearssl_ec.h create mode 100644 tools/sdk/include/bearssl/bearssl_hash.h create mode 100644 tools/sdk/include/bearssl/bearssl_hmac.h create mode 100644 tools/sdk/include/bearssl/bearssl_pem.h create mode 100644 tools/sdk/include/bearssl/bearssl_port.h create mode 100644 tools/sdk/include/bearssl/bearssl_prf.h create mode 100644 tools/sdk/include/bearssl/bearssl_rand.h create mode 100644 tools/sdk/include/bearssl/bearssl_rsa.h create mode 100644 tools/sdk/include/bearssl/bearssl_ssl.h create mode 100644 tools/sdk/include/bearssl/bearssl_x509.h create mode 100644 tools/sdk/lib/libbearssl.a diff --git a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp index ad8b14892..28a350348 100644 --- a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp +++ b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp @@ -60,12 +60,12 @@ public: std::unique_ptr create() override { - return std::unique_ptr(new WiFiClientSecure()); + return std::unique_ptr(new axTLS::WiFiClientSecure()); } bool verify(WiFiClient& client, const char* host) override { - auto wcs = static_cast(client); + auto wcs = static_cast(client); return wcs.verify(_fingerprint.c_str(), host); } @@ -73,6 +73,34 @@ protected: String _fingerprint; }; +class BearSSLTraits : public TransportTraits +{ +public: + BearSSLTraits(const uint8_t fingerprint[20]) + { + memcpy(_fingerprint, fingerprint, sizeof(_fingerprint)); + } + + std::unique_ptr create() override + { + BearSSL::WiFiClientSecure *client = new BearSSL::WiFiClientSecure(); + client->setFingerprint(_fingerprint); + return std::unique_ptr(client); + } + + bool verify(WiFiClient& client, const char* host) override + { + // No-op. BearSSL will not connect if the fingerprint doesn't match. + // So if you get to here you've already connected and it matched + (void) client; + (void) host; + return true; + } + +protected: + uint8_t _fingerprint[20]; +}; + /** * constructor */ @@ -116,6 +144,24 @@ bool HTTPClient::begin(String url, String httpsFingerprint) return true; } + +bool HTTPClient::begin(String url, const uint8_t httpsFingerprint[20]) +{ + _transportTraits.reset(nullptr); + _port = 443; + if (!beginInternal(url, "https")) { + return false; + } + _transportTraits = TransportTraitsPtr(new BearSSLTraits(httpsFingerprint)); + DEBUG_HTTPCLIENT("[HTTP-Client][begin] BearSSL-httpsFingerprint:"); + for (size_t i=0; i < 20; i++) { + DEBUG_HTTPCLIENT(" %02x", httpsFingerprint[i]); + } + DEBUG_HTTPCLIENT("\n"); + return true; +} + + /** * parsing the url for all needed parameters * @param url String @@ -213,6 +259,23 @@ bool HTTPClient::begin(String host, uint16_t port, String uri, String httpsFinge return true; } +bool HTTPClient::begin(String host, uint16_t port, String uri, const uint8_t httpsFingerprint[20]) +{ + clear(); + _host = host; + _port = port; + _uri = uri; + + _transportTraits = TransportTraitsPtr(new BearSSLTraits(httpsFingerprint)); + DEBUG_HTTPCLIENT("[HTTP-Client][begin] host: %s port: %d url: %s BearSSL-httpsFingerprint:", host.c_str(), port, uri.c_str()); + for (size_t i=0; i < 20; i++) { + DEBUG_HTTPCLIENT(" %02x", httpsFingerprint[i]); + } + DEBUG_HTTPCLIENT("\n"); + return true; +} + + /** * end * called after the payload is handled diff --git a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h index 02e4ca5cc..72b42853f 100644 --- a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h +++ b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h @@ -133,10 +133,15 @@ public: HTTPClient(); ~HTTPClient(); + // Plain HTTP connection, unencrypted bool begin(String url); - bool begin(String url, String httpsFingerprint); bool begin(String host, uint16_t port, String uri = "/"); + // Use axTLS for secure HTTPS connection + bool begin(String url, String httpsFingerprint); bool begin(String host, uint16_t port, String uri, String httpsFingerprint); + // Use BearSSL for secure HTTPS connection + bool begin(String url, const uint8_t httpsFingerprint[20]); + bool begin(String host, uint16_t port, String uri, const uint8_t httpsFingerprint[20]); // deprecated, use the overload above instead bool begin(String host, uint16_t port, String uri, bool https, String httpsFingerprint) __attribute__ ((deprecated)); diff --git a/libraries/ESP8266HTTPUpdateServer/examples/SecureBearSSLUpdater/SecureBearSSLUpdater.ino b/libraries/ESP8266HTTPUpdateServer/examples/SecureBearSSLUpdater/SecureBearSSLUpdater.ino new file mode 100644 index 000000000..1a230fca5 --- /dev/null +++ b/libraries/ESP8266HTTPUpdateServer/examples/SecureBearSSLUpdater/SecureBearSSLUpdater.ino @@ -0,0 +1,117 @@ +/* + SecureBearSSLUpdater - SSL encrypted, password-protected firmware update + + This example starts a HTTPS server on the ESP8266 to allow firmware updates + to be performed. All communication, including the username and password, + is encrypted via SSL. Be sure to update the SSID and PASSWORD before running + to allow connection to your WiFi network. + + To upload through terminal you can use: + curl -u admin:admin -F "image=@firmware.bin" esp8266-webupdate.local/firmware + + Adapted by Earle F. Philhower, III, from the SecureWebUpdater.ino example. + This example is released into the public domain. +*/ + +#include +#include +#include +#include +#include + +const char* host = "esp8266-webupdate"; +const char* update_path = "/firmware"; +const char* update_username = "admin"; +const char* update_password = "admin"; +const char* ssid = "........"; +const char* password = "........"; + +BearSSL::ESP8266WebServerSecure httpServer(443); +ESP8266HTTPUpdateServer httpUpdater; + +static const char serverCert[] PROGMEM = R"EOF( +-----BEGIN CERTIFICATE----- +MIIDSzCCAjMCCQD2ahcfZAwXxDANBgkqhkiG9w0BAQsFADCBiTELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU9yYW5nZSBDb3VudHkx +EDAOBgNVBAoMB1ByaXZhZG8xGjAYBgNVBAMMEXNlcnZlci56bGFiZWwuY29tMR8w +HQYJKoZIhvcNAQkBFhBlYXJsZUB6bGFiZWwuY29tMB4XDTE4MDMwNjA1NDg0NFoX +DTE5MDMwNjA1NDg0NFowRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3Rh +dGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAPVKBwbZ+KDSl40YCDkP6y8Sv4iNGvEOZg8Y +X7sGvf/xZH7UiCBWPFIRpNmDSaZ3yjsmFqm6sLiYSGSdrBCFqdt9NTp2r7hga6Sj +oASSZY4B9pf+GblDy5m10KDx90BFKXdPMCLT+o76Nx9PpCvw13A848wHNG3bpBgI +t+w/vJCX3bkRn8yEYAU6GdMbYe7v446hX3kY5UmgeJFr9xz1kq6AzYrMt/UHhNzO +S+QckJaY0OGWvmTNspY3xCbbFtIDkCdBS8CZAw+itnofvnWWKQEXlt6otPh5njwy ++O1t/Q+Z7OMDYQaH02IQx3188/kW3FzOY32knER1uzjmRO+jhA8CAwEAATANBgkq +hkiG9w0BAQsFAAOCAQEAnDrROGRETB0woIcI1+acY1yRq4yAcH2/hdq2MoM+DCyM +E8CJaOznGR9ND0ImWpTZqomHOUkOBpvu7u315blQZcLbL1LfHJGRTCHVhvVrcyEb +fWTnRtAQdlirUm/obwXIitoz64VSbIVzcqqfg9C6ZREB9JbEX98/9Wp2gVY+31oC +JfUvYadSYxh3nblvA4OL+iEZiW8NE3hbW6WPXxvS7Euge0uWMPc4uEcnsE0ZVG3m ++TGimzSdeWDvGBRWZHXczC2zD4aoE5vrl+GD2i++c6yjL/otHfYyUpzUfbI2hMAA +5tAF1D5vAAwA8nfPysumlLsIjohJZo4lgnhB++AlOg== +-----END CERTIFICATE----- +)EOF"; + +static const char serverKey[] PROGMEM = R"EOF( +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEA9UoHBtn4oNKXjRgIOQ/rLxK/iI0a8Q5mDxhfuwa9//FkftSI +IFY8UhGk2YNJpnfKOyYWqbqwuJhIZJ2sEIWp2301OnavuGBrpKOgBJJljgH2l/4Z +uUPLmbXQoPH3QEUpd08wItP6jvo3H0+kK/DXcDzjzAc0bdukGAi37D+8kJfduRGf +zIRgBToZ0xth7u/jjqFfeRjlSaB4kWv3HPWSroDNisy39QeE3M5L5ByQlpjQ4Za+ +ZM2yljfEJtsW0gOQJ0FLwJkDD6K2eh++dZYpAReW3qi0+HmePDL47W39D5ns4wNh +BofTYhDHfXzz+RbcXM5jfaScRHW7OOZE76OEDwIDAQABAoIBAQDKov5NFbNFQNR8 +djcM1O7Is6dRaqiwLeH4ZH1pZ3d9QnFwKanPdQ5eCj9yhfhJMrr5xEyCqT0nMn7T +yEIGYDXjontfsf8WxWkH2TjvrfWBrHOIOx4LJEvFzyLsYxiMmtZXvy6YByD+Dw2M +q2GH/24rRdI2klkozIOyazluTXU8yOsSGxHr/aOa9/sZISgLmaGOOuKI/3Zqjdhr +eHeSqoQFt3xXa8jw01YubQUDw/4cv9rk2ytTdAoQUimiKtgtjsggpP1LTq4xcuqN +d4jWhTcnorWpbD2cVLxrEbnSR3VuBCJEZv5axg5ZPxLEnlcId8vMtvTRb5nzzszn +geYUWDPhAoGBAPyKVNqqwQl44oIeiuRM2FYenMt4voVaz3ExJX2JysrG0jtCPv+Y +84R6Cv3nfITz3EZDWp5sW3OwoGr77lF7Tv9tD6BptEmgBeuca3SHIdhG2MR+tLyx +/tkIAarxQcTGsZaSqra3gXOJCMz9h2P5dxpdU+0yeMmOEnAqgQ8qtNBfAoGBAPim +RAtnrd0WSlCgqVGYFCvDh1kD5QTNbZc+1PcBHbVV45EmJ2fLXnlDeplIZJdYxmzu +DMOxZBYgfeLY9exje00eZJNSj/csjJQqiRftrbvYY7m5njX1kM5K8x4HlynQTDkg +rtKO0YZJxxmjRTbFGMegh1SLlFLRIMtehNhOgipRAoGBAPnEEpJGCS9GGLfaX0HW +YqwiEK8Il12q57mqgsq7ag7NPwWOymHesxHV5mMh/Dw+NyBi4xAGWRh9mtrUmeqK +iyICik773Gxo0RIqnPgd4jJWN3N3YWeynzulOIkJnSNx5BforOCTc3uCD2s2YB5X +jx1LKoNQxLeLRN8cmpIWicf/AoGBANjRSsZTKwV9WWIDJoHyxav/vPb+8WYFp8lZ +zaRxQbGM6nn4NiZI7OF62N3uhWB/1c7IqTK/bVHqFTuJCrCNcsgld3gLZ2QWYaMV +kCPgaj1BjHw4AmB0+EcajfKilcqtSroJ6MfMJ6IclVOizkjbByeTsE4lxDmPCDSt +/9MKanBxAoGAY9xo741Pn9WUxDyRplww606ccdNf/ksHWNc/Y2B5SPwxxSnIq8nO +j01SmsCUYVFAgZVOTiiycakjYLzxlc6p8BxSVqy6LlJqn95N8OXoQ+bkwUux/ekg +gz5JWYhbD6c38khSzJb0pNXCo3EuYAVa36kDM96k1BtWuhRS10Q1VXk= +-----END RSA PRIVATE KEY----- +)EOF"; + + +void setup() +{ + + Serial.begin(115200); + Serial.println(); + Serial.println("Booting Sketch..."); + WiFi.mode(WIFI_AP_STA); + WiFi.begin(ssid, password); + + while(WiFi.waitForConnectResult() != WL_CONNECTED){ + WiFi.begin(ssid, password); + Serial.println("WiFi failed, retrying."); + } + + configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov"); + + MDNS.begin(host); + + httpServer.setRSACert(new BearSSLX509List(serverCert), new BearSSLPrivateKey(serverKey)); + httpUpdater.setup(&httpServer, update_path, update_username, update_password); + httpServer.begin(); + + MDNS.addService("https", "tcp", 443); + Serial.printf("BearSSLUpdateServer ready!\nOpen https://%s.local%s in "\ + "your browser and login with username '%s' and password "\ + "'%s'\n", host, update_path, update_username, update_password); +} + +void loop() +{ + httpServer.handleClient(); +} diff --git a/libraries/ESP8266WebServer/examples/HelloServerBearSSL/HelloServerBearSSL.ino b/libraries/ESP8266WebServer/examples/HelloServerBearSSL/HelloServerBearSSL.ino new file mode 100644 index 000000000..acc466c77 --- /dev/null +++ b/libraries/ESP8266WebServer/examples/HelloServerBearSSL/HelloServerBearSSL.ino @@ -0,0 +1,142 @@ +/* + HelloServerBearSSL - Simple HTTPS server example + + This example demonstrates a basic ESP8266WebServerSecure HTTPS server + that can serve "/" and "/inline" and generate detailed 404 (not found) + HTTP respoinses. Be sure to update the SSID and PASSWORD before running + to allow connection to your WiFi network. + + Adapted by Earle F. Philhower, III, from the HelloServer.ino example. + This example is released into the public domain. +*/ +#include +#include +#include +#include + +const char* ssid = "...."; +const char* password = "...."; + +BearSSL::ESP8266WebServerSecure server(443); + +static const char serverCert[] PROGMEM = R"EOF( +-----BEGIN CERTIFICATE----- +MIIDSzCCAjMCCQD2ahcfZAwXxDANBgkqhkiG9w0BAQsFADCBiTELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU9yYW5nZSBDb3VudHkx +EDAOBgNVBAoMB1ByaXZhZG8xGjAYBgNVBAMMEXNlcnZlci56bGFiZWwuY29tMR8w +HQYJKoZIhvcNAQkBFhBlYXJsZUB6bGFiZWwuY29tMB4XDTE4MDMwNjA1NDg0NFoX +DTE5MDMwNjA1NDg0NFowRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3Rh +dGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAPVKBwbZ+KDSl40YCDkP6y8Sv4iNGvEOZg8Y +X7sGvf/xZH7UiCBWPFIRpNmDSaZ3yjsmFqm6sLiYSGSdrBCFqdt9NTp2r7hga6Sj +oASSZY4B9pf+GblDy5m10KDx90BFKXdPMCLT+o76Nx9PpCvw13A848wHNG3bpBgI +t+w/vJCX3bkRn8yEYAU6GdMbYe7v446hX3kY5UmgeJFr9xz1kq6AzYrMt/UHhNzO +S+QckJaY0OGWvmTNspY3xCbbFtIDkCdBS8CZAw+itnofvnWWKQEXlt6otPh5njwy ++O1t/Q+Z7OMDYQaH02IQx3188/kW3FzOY32knER1uzjmRO+jhA8CAwEAATANBgkq +hkiG9w0BAQsFAAOCAQEAnDrROGRETB0woIcI1+acY1yRq4yAcH2/hdq2MoM+DCyM +E8CJaOznGR9ND0ImWpTZqomHOUkOBpvu7u315blQZcLbL1LfHJGRTCHVhvVrcyEb +fWTnRtAQdlirUm/obwXIitoz64VSbIVzcqqfg9C6ZREB9JbEX98/9Wp2gVY+31oC +JfUvYadSYxh3nblvA4OL+iEZiW8NE3hbW6WPXxvS7Euge0uWMPc4uEcnsE0ZVG3m ++TGimzSdeWDvGBRWZHXczC2zD4aoE5vrl+GD2i++c6yjL/otHfYyUpzUfbI2hMAA +5tAF1D5vAAwA8nfPysumlLsIjohJZo4lgnhB++AlOg== +-----END CERTIFICATE----- +)EOF"; + +static const char serverKey[] PROGMEM = R"EOF( +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEA9UoHBtn4oNKXjRgIOQ/rLxK/iI0a8Q5mDxhfuwa9//FkftSI +IFY8UhGk2YNJpnfKOyYWqbqwuJhIZJ2sEIWp2301OnavuGBrpKOgBJJljgH2l/4Z +uUPLmbXQoPH3QEUpd08wItP6jvo3H0+kK/DXcDzjzAc0bdukGAi37D+8kJfduRGf +zIRgBToZ0xth7u/jjqFfeRjlSaB4kWv3HPWSroDNisy39QeE3M5L5ByQlpjQ4Za+ +ZM2yljfEJtsW0gOQJ0FLwJkDD6K2eh++dZYpAReW3qi0+HmePDL47W39D5ns4wNh +BofTYhDHfXzz+RbcXM5jfaScRHW7OOZE76OEDwIDAQABAoIBAQDKov5NFbNFQNR8 +djcM1O7Is6dRaqiwLeH4ZH1pZ3d9QnFwKanPdQ5eCj9yhfhJMrr5xEyCqT0nMn7T +yEIGYDXjontfsf8WxWkH2TjvrfWBrHOIOx4LJEvFzyLsYxiMmtZXvy6YByD+Dw2M +q2GH/24rRdI2klkozIOyazluTXU8yOsSGxHr/aOa9/sZISgLmaGOOuKI/3Zqjdhr +eHeSqoQFt3xXa8jw01YubQUDw/4cv9rk2ytTdAoQUimiKtgtjsggpP1LTq4xcuqN +d4jWhTcnorWpbD2cVLxrEbnSR3VuBCJEZv5axg5ZPxLEnlcId8vMtvTRb5nzzszn +geYUWDPhAoGBAPyKVNqqwQl44oIeiuRM2FYenMt4voVaz3ExJX2JysrG0jtCPv+Y +84R6Cv3nfITz3EZDWp5sW3OwoGr77lF7Tv9tD6BptEmgBeuca3SHIdhG2MR+tLyx +/tkIAarxQcTGsZaSqra3gXOJCMz9h2P5dxpdU+0yeMmOEnAqgQ8qtNBfAoGBAPim +RAtnrd0WSlCgqVGYFCvDh1kD5QTNbZc+1PcBHbVV45EmJ2fLXnlDeplIZJdYxmzu +DMOxZBYgfeLY9exje00eZJNSj/csjJQqiRftrbvYY7m5njX1kM5K8x4HlynQTDkg +rtKO0YZJxxmjRTbFGMegh1SLlFLRIMtehNhOgipRAoGBAPnEEpJGCS9GGLfaX0HW +YqwiEK8Il12q57mqgsq7ag7NPwWOymHesxHV5mMh/Dw+NyBi4xAGWRh9mtrUmeqK +iyICik773Gxo0RIqnPgd4jJWN3N3YWeynzulOIkJnSNx5BforOCTc3uCD2s2YB5X +jx1LKoNQxLeLRN8cmpIWicf/AoGBANjRSsZTKwV9WWIDJoHyxav/vPb+8WYFp8lZ +zaRxQbGM6nn4NiZI7OF62N3uhWB/1c7IqTK/bVHqFTuJCrCNcsgld3gLZ2QWYaMV +kCPgaj1BjHw4AmB0+EcajfKilcqtSroJ6MfMJ6IclVOizkjbByeTsE4lxDmPCDSt +/9MKanBxAoGAY9xo741Pn9WUxDyRplww606ccdNf/ksHWNc/Y2B5SPwxxSnIq8nO +j01SmsCUYVFAgZVOTiiycakjYLzxlc6p8BxSVqy6LlJqn95N8OXoQ+bkwUux/ekg +gz5JWYhbD6c38khSzJb0pNXCo3EuYAVa36kDM96k1BtWuhRS10Q1VXk= +-----END RSA PRIVATE KEY----- +)EOF"; + + +const int led = 13; + +void handleRoot() { + digitalWrite(led, 1); + server.send(200, "text/plain", "Hello from esp8266 over HTTPS!"); + digitalWrite(led, 0); +} + +void handleNotFound(){ + digitalWrite(led, 1); + String message = "File Not Found\n\n"; + message += "URI: "; + message += server.uri(); + message += "\nMethod: "; + message += (server.method() == HTTP_GET)?"GET":"POST"; + message += "\nArguments: "; + message += server.args(); + message += "\n"; + for (uint8_t i=0; i -#include - -class ESP8266WebServerSecure : public ESP8266WebServer -{ -public: - ESP8266WebServerSecure(IPAddress addr, int port = 443); - ESP8266WebServerSecure(int port = 443); - virtual ~ESP8266WebServerSecure(); - - void setServerKeyAndCert_P(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen); - void setServerKeyAndCert(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen); - - WiFiClient client() override { return _currentClientSecure; } - - void begin() override; - void handleClient() override; - void close() override; - - template - size_t streamFile(T &file, const String& contentType) { - _streamFileCore(file.size(), file.name(), contentType); - return _currentClientSecure.write(file); - } - -private: - size_t _currentClientWrite (const char *bytes, size_t len) override { return _currentClientSecure.write((const uint8_t *)bytes, len); } - size_t _currentClientWrite_P (PGM_P bytes, size_t len) override { return _currentClientSecure.write_P(bytes, len); } - -protected: - WiFiServerSecure _serverSecure; - WiFiClientSecure _currentClientSecure; -}; - - -#endif //ESP8266WEBSERVERSECURE_H +#include "ESP8266WebServerSecureAxTLS.h" +#include "ESP8266WebServerSecureBearSSL.h" diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServerSecure.cpp b/libraries/ESP8266WebServer/src/ESP8266WebServerSecureAxTLS.cpp similarity index 99% rename from libraries/ESP8266WebServer/src/ESP8266WebServerSecure.cpp rename to libraries/ESP8266WebServer/src/ESP8266WebServerSecureAxTLS.cpp index 21922497a..fb62b75ef 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServerSecure.cpp +++ b/libraries/ESP8266WebServer/src/ESP8266WebServerSecureAxTLS.cpp @@ -34,6 +34,8 @@ #define DEBUG_OUTPUT Serial #endif +namespace axTLS { + ESP8266WebServerSecure::ESP8266WebServerSecure(IPAddress addr, int port) : _serverSecure(addr, port) { @@ -144,3 +146,4 @@ void ESP8266WebServerSecure::close() { _serverSecure.close(); } +}; diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServerSecureAxTLS.h b/libraries/ESP8266WebServer/src/ESP8266WebServerSecureAxTLS.h new file mode 100644 index 000000000..abc351ea4 --- /dev/null +++ b/libraries/ESP8266WebServer/src/ESP8266WebServerSecureAxTLS.h @@ -0,0 +1,64 @@ +/* + ESP8266WebServerSecure.h - Dead simple HTTPS web-server. + Supports only one simultaneous client, knows how to handle GET and POST. + + Copyright (c) 2017 Earle F. Philhower, III. All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +#ifndef ESP8266WEBSERVERSECURE_H +#define ESP8266WEBSERVERSECURE_H + +#include +#include + +namespace axTLS { + +class ESP8266WebServerSecure : public ESP8266WebServer +{ +public: + ESP8266WebServerSecure(IPAddress addr, int port = 443); + ESP8266WebServerSecure(int port = 443); + virtual ~ESP8266WebServerSecure(); + + void setServerKeyAndCert_P(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen); + void setServerKeyAndCert(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen); + + WiFiClient client() override { return _currentClientSecure; } + + void begin() override; + void handleClient() override; + void close() override; + + template + size_t streamFile(T &file, const String& contentType) { + _streamFileCore(file.size(), file.name(), contentType); + return _currentClientSecure.write(file); + } + +private: + size_t _currentClientWrite (const char *bytes, size_t len) override { return _currentClientSecure.write((const uint8_t *)bytes, len); } + size_t _currentClientWrite_P (PGM_P bytes, size_t len) override { return _currentClientSecure.write_P(bytes, len); } + +protected: + WiFiServerSecure _serverSecure; + WiFiClientSecure _currentClientSecure; +}; + +}; + +#endif //ESP8266WEBSERVERSECURE_H diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServerSecureBearSSL.cpp b/libraries/ESP8266WebServer/src/ESP8266WebServerSecureBearSSL.cpp new file mode 100644 index 000000000..63ab49ceb --- /dev/null +++ b/libraries/ESP8266WebServer/src/ESP8266WebServerSecureBearSSL.cpp @@ -0,0 +1,165 @@ +/* + ESP8266WebServerSecure.cpp - Dead simple HTTPS web-server. + Supports only one simultaneous client, knows how to handle GET and POST. + + Copyright (c) 2017 Earle F. Philhower, III. All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Modified 8 May 2015 by Hristo Gochkov (proper post and file upload handling) +*/ + + +#include +#include +#include "WiFiServer.h" +#include "WiFiClient.h" +#include "ESP8266WebServerSecureBearSSL.h" + +//#define DEBUG_ESP_HTTP_SERVER +#ifdef DEBUG_ESP_PORT +#define DEBUG_OUTPUT DEBUG_ESP_PORT +#else +#define DEBUG_OUTPUT Serial +#endif + +namespace BearSSL { + +ESP8266WebServerSecure::ESP8266WebServerSecure(IPAddress addr, int port) +: _serverSecure(addr, port) +{ +} + +ESP8266WebServerSecure::ESP8266WebServerSecure(int port) +: _serverSecure(port) +{ +} + +void ESP8266WebServerSecure::setRSACert(const BearSSLX509List *chain, const BearSSLPrivateKey *sk) +{ + _serverSecure.setRSACert(chain, sk); +} + +void ESP8266WebServerSecure::setECCert(const BearSSLX509List *chain, unsigned cert_issuer_key_type, const BearSSLPrivateKey *sk) +{ + _serverSecure.setECCert(chain, cert_issuer_key_type, sk); +} + +void ESP8266WebServerSecure::setBufferSizes(int recv, int xmit) +{ + _serverSecure.setBufferSizes(recv, xmit); +} + +ESP8266WebServerSecure::~ESP8266WebServerSecure() { + // Nothing to do here. + // Base class's destructor will be called to clean up itself +} + +// We need to basically cut-n-paste these from WebServer because of the problem +// of object slicing. The class uses assignment operators like "WiFiClient x=y;" +// When this happens, even if "y" is a WiFiClientSecure, the main class is +// already compiled down into code which will only copy the WiFiClient superclass +// and not the extra bits for our own class (since when it was compiled it needed +// to know the size of memory to allocate on the stack for this local variable +// there's not realy anything else it could do). + +void ESP8266WebServerSecure::begin() { + _currentStatus = HC_NONE; + _serverSecure.begin(); + if(!_headerKeysCount) + collectHeaders(0, 0); +} + +void ESP8266WebServerSecure::handleClient() { + if (_currentStatus == HC_NONE) { + BearSSL::WiFiClientSecure client = _serverSecure.available(); + if (!client) { + return; + } + +#ifdef DEBUG_ESP_HTTP_SERVER + DEBUG_OUTPUT.println("New secure client"); +#endif + + _currentClientSecure = client; + _currentStatus = HC_WAIT_READ; + _statusChange = millis(); + } + + bool keepCurrentClient = false; + bool callYield = false; + + if (_currentClientSecure.connected()) { + switch (_currentStatus) { + case HC_NONE: + // No-op to avoid C++ compiler warning + break; + case HC_WAIT_READ: + // Wait for data from client to become available + if (_currentClientSecure.available()) { + if (_parseRequest(_currentClientSecure)) { + _currentClientSecure.setTimeout(HTTP_MAX_SEND_WAIT); + _contentLength = CONTENT_LENGTH_NOT_SET; + _handleRequest(); + + if (_currentClientSecure.connected()) { + _currentStatus = HC_WAIT_CLOSE; + _statusChange = millis(); + keepCurrentClient = true; + } + } + } else { // !_currentClient.available() + if (millis() - _statusChange <= HTTP_MAX_DATA_WAIT) { + keepCurrentClient = true; + } + callYield = true; + } + break; + case HC_WAIT_CLOSE: + // Wait for client to close the connection + if (millis() - _statusChange <= HTTP_MAX_CLOSE_WAIT) { + keepCurrentClient = true; + callYield = true; + } + } + } + + if (!keepCurrentClient) { + _currentClientSecure = BearSSL::WiFiClientSecure(); + _currentStatus = HC_NONE; + _currentUpload.reset(); + } + + if (callYield) { + yield(); + } +} + +void ESP8266WebServerSecure::close() { + _currentClientSecure.flush(); + _currentClientSecure.stop(); + _serverSecure.close(); +} + + +void ESP8266WebServerSecure::setServerKeyAndCert_P(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen) { + _serverSecure.setServerKeyAndCert_P(key, keyLen, cert, certLen); +} + +void ESP8266WebServerSecure::setServerKeyAndCert(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen) +{ + _serverSecure.setServerKeyAndCert(key, keyLen, cert, certLen); +} + +}; diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServerSecureBearSSL.h b/libraries/ESP8266WebServer/src/ESP8266WebServerSecureBearSSL.h new file mode 100644 index 000000000..86785f81b --- /dev/null +++ b/libraries/ESP8266WebServer/src/ESP8266WebServerSecureBearSSL.h @@ -0,0 +1,69 @@ +/* + ESP8266WebServerSecure.h - Dead simple HTTPS web-server. + Supports only one simultaneous client, knows how to handle GET and POST. + + Copyright (c) 2017 Earle F. Philhower, III. All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +#ifndef ESP8266WEBSERVERBEARSSL_H +#define ESP8266WEBSERVERBEARSSL_H + +#include +#include +#include + +namespace BearSSL { + +class ESP8266WebServerSecure : public ESP8266WebServer +{ +public: + ESP8266WebServerSecure(IPAddress addr, int port = 443); + ESP8266WebServerSecure(int port = 443); + virtual ~ESP8266WebServerSecure(); + + void setBufferSizes(int recv, int xmit); + void setRSACert(const BearSSLX509List *chain, const BearSSLPrivateKey *sk); + void setECCert(const BearSSLX509List *chain, unsigned cert_issuer_key_type, const BearSSLPrivateKey *sk); + + WiFiClient client() override { return _currentClientSecure; } + + void begin() override; + void handleClient() override; + void close() override; + + template + size_t streamFile(T &file, const String& contentType) { + _streamFileCore(file.size(), file.name(), contentType); + return _currentClientSecure.write(file); + } + + // AXTLS Compatibility + void setServerKeyAndCert_P(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen); + void setServerKeyAndCert(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen); + +private: + size_t _currentClientWrite (const char *bytes, size_t len) override { return _currentClientSecure.write((const uint8_t *)bytes, len); } + size_t _currentClientWrite_P (PGM_P bytes, size_t len) override { return _currentClientSecure.write_P(bytes, len); } + +protected: + BearSSL::WiFiServerSecure _serverSecure; + BearSSL::WiFiClientSecure _currentClientSecure; +}; + +}; +#endif //ESP8266WEBSERVERSECURE_H diff --git a/libraries/ESP8266WiFi/examples/BearSSL_CertStore/BearSSL_CertStore.ino b/libraries/ESP8266WiFi/examples/BearSSL_CertStore/BearSSL_CertStore.ino new file mode 100644 index 000000000..50246a9b3 --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_CertStore/BearSSL_CertStore.ino @@ -0,0 +1,158 @@ +// Demonstrate the CertStore object with WiFiClientBearSSL +// +// Before running, you must download the set of certs using +// the script "certs-from-mozilla.py" (no parameters) +// and then uploading the generated data directory to +// SPIFFS. +// +// Why would you need a CertStore? +// +// If you know the exact serve being connected to, or you +// are generating your own self-signed certificates and aren't +// allowing connections to HTTPS/TLS servers out of your +// control, then you do NOT want a CertStore. Hardcode the +// self-signing CA or the site's x.509 certificate directly. +// +// However, if you don't know what specific sites the system +// will be required to connect to and verify, a +// CertStore{SPIFFS,SD}BearSSL can allow you to select from +// 10s or 100s of CAs against which you can check the +// target's X.509, without taking any more RAM than a single +// certificate. This is the same way that standard browsers +// and operating systems use to verify SSL connections. +// +// About the chosen certs: +// The certificates are scraped from the Mozilla.org current +// list, but please don't take this as an endorsement or a +// requirement: it is up to YOU, the USER, to specify the +// certificate authorities you will use as trust bases. +// +// Mar 2018 by Earle F. Philhower, III +// Released to the public domain + +#include +#include +#include + +const char *ssid = "...."; +const char *pass = "...."; + +// A single, global CertStore which can be used by all +// connections. Needs to stay live the entire time any of +// the WiFiClientBearSSLs are present. +CertStoreSPIFFSBearSSL certStore; + +// Set time via NTP, as required for x.509 validation +void setClock() { + configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov"); + + Serial.print("Waiting for NTP time sync: "); + time_t now = time(nullptr); + while (now < 8 * 3600 * 2) { + delay(500); + Serial.print("."); + now = time(nullptr); + } + Serial.println(""); + struct tm timeinfo; + gmtime_r(&now, &timeinfo); + Serial.print("Current time: "); + Serial.print(asctime(&timeinfo)); +} + +// Try and connect using a WiFiClientBearSSL to specified host:port and dump URL +void fetchURL(BearSSL::WiFiClientSecure *client, const char *host, const uint16_t port, const char *path) { + if (!path) { + path = "/"; + } + + Serial.printf("Trying: %s:443...", host); + client->connect(host, port); + if (!client->connected()) { + Serial.printf("*** Can't connect. ***\n-------\n"); + return; + } + Serial.printf("Connected!\n-------\n"); + client->write("GET "); + client->write(path); + client->write(" HTTP/1.0\r\nHost: "); + client->write(host); + client->write("\r\nUser-Agent: ESP8266\r\n"); + client->write("\r\n"); + uint32_t to = millis() + 5000; + if (client->connected()) { + do { + char tmp[32]; + memset(tmp, 0, 32); + int rlen = client->read((uint8_t*)tmp, sizeof(tmp) - 1); + yield(); + if (rlen < 0) { + break; + } + // Only print out first line up to \r, then abort connection + char *nl = strchr(tmp, '\r'); + if (nl) { + *nl = 0; + Serial.print(tmp); + break; + } + Serial.print(tmp); + } while (millis() < to); + } + client->stop(); + Serial.printf("\n-------\n"); +} + +void setup() { + Serial.begin(115200); + Serial.println(); + Serial.println(); + + // We start by connecting to a WiFi network + Serial.print("Connecting to "); + Serial.println(ssid); + WiFi.mode(WIFI_STA); + WiFi.begin(ssid, pass); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(""); + + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + + setClock(); // Required for X.509 validation + + int numCerts = certStore.initCertStore(); + Serial.printf("Number of CA certs read: %d\n", numCerts); + if (numCerts == 0) { + Serial.printf("No certs found. Did you run certs-from-mozill.py and upload the SPIFFS directory before running?\n"); + return; // Can't connect to anything w/o certs! + } + + BearSSL::WiFiClientSecure *bear = new BearSSL::WiFiClientSecure(); + // Integrate the cert store with this connection + bear->setCertStore(&certStore); + Serial.printf("Attempting to fetch https://www.github.com/...\n"); + fetchURL(bear, "www.github.com", 443, "/"); + delete bear; +} + +void loop() { + Serial.printf("\nPlease enter a website address (www.blah.com) to connect to: "); + String site; + do { + site = Serial.readString(); + } while (site == ""); + Serial.printf("https://%s/\n", site.c_str()); + + BearSSL::WiFiClientSecure *bear = new BearSSL::WiFiClientSecure(); + // Integrate the cert store with this connection + bear->setCertStore(&certStore); + fetchURL(bear, site.c_str(), 443, "/"); + delete bear; +} + diff --git a/libraries/ESP8266WiFi/examples/BearSSL_CertStore/certs-from-mozilla.py b/libraries/ESP8266WiFi/examples/BearSSL_CertStore/certs-from-mozilla.py new file mode 100755 index 000000000..cd0da9e32 --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_CertStore/certs-from-mozilla.py @@ -0,0 +1,51 @@ +#!/usr/bin/python + +# This script pulls the list of Mozilla trusted certificate authorities +# from the web at the "mozurl" below, parses the file to grab the PEM +# for each cert, and then generates DER files in a new ./data directory +# Upload these to a SPIFFS filesystem and use the CertManager to parse +# and use them for your outgoing SSL connections. +# +# Script by Earle F. Philhower, III. Released to the public domain. + +import csv +from os import mkdir +from subprocess import Popen, PIPE +import urllib2 +try: + # for Python 2.x + from StringIO import StringIO +except ImportError: + # for Python 3.x + from io import StringIO + +# Mozilla's URL for the CSV file with included PEM certs +mozurl = "https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReportPEMCSV" + +# Load the manes[] and pems[] array from the URL +names = [] +pems = [] +response = urllib2.urlopen(mozurl) +csvData = response.read() +csvReader = csv.reader(StringIO(csvData)) +for row in csvReader: + names.append(row[0]+":"+row[1]+":"+row[2]) + pems.append(row[28]) +del names[0] # Remove headers +del pems[0] # Remove headers + +# Try and make ./data, skip if present +try: + os.mkdir("data") +except: + pass + +# Process the text PEM using openssl into DER files +for i in range(0, len(pems)): + certName = "data/ca_%03d.der" % (i); + thisPem = pems[i].replace("'", "") + print names[i] + " -> " + certName + pipe = Popen(['openssl','x509','-inform','PEM','-outform','DER','-out', certName], shell = False, stdin = PIPE).stdin + pipe.write(thisPem) + pipe.close + diff --git a/libraries/ESP8266WiFi/examples/BearSSL_MaxFragmentLength/BearSSL_MaxFragmentLength.ino b/libraries/ESP8266WiFi/examples/BearSSL_MaxFragmentLength/BearSSL_MaxFragmentLength.ino new file mode 100644 index 000000000..c609e085d --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_MaxFragmentLength/BearSSL_MaxFragmentLength.ino @@ -0,0 +1,125 @@ +// Shows how to use the Maximum Fragment Length option in +// BearSSL to reduce SSL memory needs. +// +// Mar 2018 by Earle F. Philhower, III +// Released to the public domain + +#include + +const char *ssid = "...."; +const char *pass = "...."; + +void fetch(BearSSL::WiFiClientSecure *client) { + client->write("GET / HTTP/1.0\r\nHost: tls.mbed.org\r\nUser-Agent: ESP8266\r\n\r\n"); + client->flush(); + uint32_t to = millis() + 5000; + do { + char tmp[32]; + memset(tmp, 0, 32); + int rlen = client->read((uint8_t*)tmp, sizeof(tmp) - 1); + yield(); + if (rlen < 0) { + break; + } + Serial.print(tmp); + } while (millis() < to); + client->stop(); + Serial.printf("\n-------\n"); +} + +int fetchNoMaxFragmentLength() { + int ret = ESP.getFreeHeap(); + + Serial.printf("\nConnecting to https://tls.mbed.org\n"); + Serial.printf("No MFLN attempted\n"); + + BearSSL::WiFiClientSecure client; + client.setInsecure(); + client.connect("tls.mbed.org", 443); + if (client.connected()) { + Serial.printf("Memory used: %d\n", ret - ESP.getFreeHeap()); + ret -= ESP.getFreeHeap(); + fetch(&client); + } else { + Serial.printf("Unable to connect\n"); + } + return ret; +} + +int fetchMaxFragmentLength() { + int ret = ESP.getFreeHeap(); + + // Servers which implement RFC6066's Maximum Fragment Length Negotiation + // can be configured to limit the size of TLS fragments they transmit. + // This lets small clients, like the ESP8266, use a smaller memory buffer + // on the receive end (all the way down to under 1KB). Unfortunately, + // as of March 2018, there are not many public HTTPS servers which + // implement this option. You can deploy your own HTTPS or MQTT server + // with MFLN enabled, of course. + // + // To determine if MFLN is supported by a server use the + // ::probeMaxFragmentLength() method before connecting, and if it + // returns true then you can use the ::setBufferSizes(rx, tx) to shrink + // the needed BearSSL memory while staying within protocol limits. + // + // If MFLN is not supported, you may still be able to mimimize the buffer + // sizes assuming you can ensure the server never transmits fragments larger + // than the size (i.e. by using HTTP GET RANGE methods, etc.). + + BearSSL::WiFiClientSecure client; + client.setInsecure(); + bool mfln = client.probeMaxFragmentLength("tls.mbed.org", 443, 1024); + Serial.printf("\nConnecting to https://tls.mbed.org\n"); + Serial.printf("MFLN supported: %s\n", mfln ? "yes" : "no"); + if (mfln) { + client.setBufferSizes(1024, 1024); + } + client.connect("tls.mbed.org", 443); + if (client.connected()) { + Serial.printf("Memory used: %d\n", ret - ESP.getFreeHeap()); + ret -= ESP.getFreeHeap(); + fetch(&client); + } else { + Serial.printf("Unable to connect\n"); + } + return ret; +} + +void setup() { + Serial.begin(115200); + + delay(1000); + Serial.println(); + Serial.println(); + + // We start by connecting to a WiFi network + Serial.print("Connecting to "); + Serial.print(ssid); + + WiFi.mode(WIFI_STA); + WiFi.begin(ssid, pass); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(""); + + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); +} + +void loop() { + Serial.printf("\n\n\n\n\n"); + + yield(); + int a = fetchNoMaxFragmentLength(); + yield(); + int b = fetchMaxFragmentLength(); + yield(); + + Serial.printf("\n\n"); + Serial.printf("Default SSL: %d bytes used\n", a); + Serial.printf("1024 byte MFLN SSL: %d bytes used\n", b); +} diff --git a/libraries/ESP8266WiFi/examples/BearSSL_Server/BearSSL_Server.ino b/libraries/ESP8266WiFi/examples/BearSSL_Server/BearSSL_Server.ino new file mode 100644 index 000000000..6b72a5e23 --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_Server/BearSSL_Server.ino @@ -0,0 +1,177 @@ +/* + Demonstrate the usage of WiFiServerBearSSL. + By Earle F. Philhower, III + + A simple HTTPS server is implemented with a self-signed + certificate for the ESP8266. + + This is NOT the best way to implement a HTTPS website on the + ESP8266. Please see the ESP8266WebServerBearSSL example for + a much better way of doing this! + + IMPORTANT NOTES ABOUT SSL CERTIFICATES + + 1. USE/GENERATE YOUR OWN CERTIFICATES + While a sample, self-signed certificate is included in this example, + it is ABSOLUTELY VITAL that you use your own SSL certificate in any + real-world deployment. Anyone with the certificate and key may be + able to decrypt your traffic, so your own keys should be kept in a + safe manner, not accessible on any public network. + + 2. HOW TO GENERATE YOUR OWN CERTIFICATE/KEY PAIR + It is easy to use OpenSSL to generate a self-signed certificate + openssl req -x509 -nodes -newkey rsa:2048 -keyout key.pem -out cert.pem -days 4096 + + You may also, of course, use a commercial, trusted SSL provider to + generate your certificate. + + Included with this example are *SAMPLE* certs and keys. They are NOT + SECURE, since they're shared with all copies of the repo, so + DO NOT USE THE SAMPLE CERTS, KEYS, OR CAS IN YOUR OWN PROJECT!!! + + Run this example and then try connecting to the server https://IP. + + This example is released into the public domain. +*/ + +#include +#include + +const char *ssid = "...."; +const char *pass = "...."; + +// The HTTPS server +BearSSL::WiFiServerSecure server(443); + +// The server's private key which must be kept secret +const char server_private_key[] PROGMEM = R"EOF( +-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDJblrg47vF3qlE +NMRM7uG8QwE6v/AKpxOL+CLb/32s+dW9Psgf+oZKJgzGkYUoJdWpLitTmTZeykAs +Sq7Iax5Rq/mGqyAc7oJAUUAupfNRU0KwkD1XqtpQWEFoiqoIqZbOZ4CRX5q8z/MN +BH1aPVBMKaL33uwknkgJBzxwZJ2+uGKxRJt8+koj1CXgUCk5lEAEEG5kqE326MjN +O/c4gBqulBV8AIoq6/trY3apTS7FEOiN47qh1PVzoBm/oGVwXvoZAZOj7+gGGo91 +sBC5oHJy5Y2BOcNB3opTNXQTiK3Z80b5wc3iQS+h83qAfHwhs6tfAW22WkAf+jtt +x8KdRWFNAgMBAAECggEAPd+jFL9/d1lc/zGCNuuN9YlTgFti/bKyo2UWOCOz1AVu +LVJyoLgQtggYFoqur1Vn2y7uaiB+/gD8U16hb7jPuGCuJjq8g4aUBfOvVmTtZ8a+ +joPQA/TcWJ+zf8xQTJbjVwWeDYmje2oZC5+cbbK1zp9fiuoz+U+RawyI+TE+700i +ESCmsKFIHy2Ifruva8HgcPYIPpZ9zLxJj0Dii+WDs7zM9h2dzO4HfImSG/DPmgoV +ydo9IcrUE7KoMLa8Uo7u1b2h6BnTn7GfYiMSUsYcYR3CnpDBknBWjZMwrV0uqv9q +TbVc4QXt+c1q89HDg7BIJaOAzbCvJfgAfXUqZyqwQQKBgQD5ENFjicUzCqPw7fOy +Q5Z8GeUbIJ5urT1MheAq7SPd2kK8TsO3hUjNC0LLNSyKPs6gsYaIiObO3wDGeZZk +xeHBhrUVaz2nIjI7TrnCUpMDOrdxcPr4bc+ifV5YT4W3OFBWQ9chQEx3Nm3DbiX4 +fpno34AiFrJF791JkTPFj9OIUQKBgQDPCgcae1pQr77q+GL5Q2tku3RrE4cWtExf +m8DzAb4Vxe3EhPz8bVr+71rqr/KqNfG1uKE3sT0fhB6VMTkHTOQU13jDrvpPUS3W +Vg8cVr5/+iiyF0xb+W8LQ+GVdR5xnMPSZHUtXyURvtzT4nnTAlAtN7lEytX9BzbX +xhltOOwGPQKBgA/Y/BnDSGLpCGlqGpl7J3YaB7PkLXCJYV8fHZZdpGyXWKu2r0lc +F7fEQanAZmcde/RJl2/UlisPkXMPhXxAAw9XTOph+nhJ+rw/VB6DNot8DvQO5kks +Y4vJQlmIJc/0q1fx1RxuhO8I7Y8D0TKwi4Z/wh1pKEq+6mul649kiWchAoGAWn8B +l9uvIHGRO9eSO23ytTcSrfL9Kzln4KqN7iom0hGP2kRe6F9MVP5+ePKrWSb3Hf0z +ysoX83ymeYPob352e32rda04EA9lv7giJrrrzbikrSNt5w3iMcRcCB4HTpW9Kmtq +pIhgBZ+tmpf1s/vg28LtoloeqtjKagpW9tzYnekCgYAZFZ84EGqS9SHw5LELgGY4 +mQLMwbYZ6wBMA2PlqYi/17hoAVWz37mLDjtWDB4ir78QMoGbesQVtK9W/4vzmez4 +ZLKlffdL5tCtA08Gq9aond1z83Xdnh1UjtwHIJvJPc/AoCFW1r5skv/G6acAk6I2 +Zs0aiirNGTEymRX4rw26Qg== +-----END PRIVATE KEY----- +)EOF"; + +// The server's public certificate which must be shared +const char server_cert[] PROGMEM = R"EOF( +-----BEGIN CERTIFICATE----- +MIIDUTCCAjmgAwIBAgIJAOcfK7c3JQtnMA0GCSqGSIb3DQEBCwUAMD8xCzAJBgNV +BAYTAkFVMQ0wCwYDVQQIDAROb25lMQ0wCwYDVQQKDAROb25lMRIwEAYDVQQDDAlF +U1BTZXJ2ZXIwHhcNMTgwMzE0MTg1NTQ1WhcNMjkwNTMxMTg1NTQ1WjA/MQswCQYD +VQQGEwJBVTENMAsGA1UECAwETm9uZTENMAsGA1UECgwETm9uZTESMBAGA1UEAwwJ +RVNQU2VydmVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyW5a4OO7 +xd6pRDTETO7hvEMBOr/wCqcTi/gi2/99rPnVvT7IH/qGSiYMxpGFKCXVqS4rU5k2 +XspALEquyGseUav5hqsgHO6CQFFALqXzUVNCsJA9V6raUFhBaIqqCKmWzmeAkV+a +vM/zDQR9Wj1QTCmi997sJJ5ICQc8cGSdvrhisUSbfPpKI9Ql4FApOZRABBBuZKhN +9ujIzTv3OIAarpQVfACKKuv7a2N2qU0uxRDojeO6odT1c6AZv6BlcF76GQGTo+/o +BhqPdbAQuaBycuWNgTnDQd6KUzV0E4it2fNG+cHN4kEvofN6gHx8IbOrXwFttlpA +H/o7bcfCnUVhTQIDAQABo1AwTjAdBgNVHQ4EFgQUBEk8LqgV+sMjdl/gpP1OlcNW +14EwHwYDVR0jBBgwFoAUBEk8LqgV+sMjdl/gpP1OlcNW14EwDAYDVR0TBAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAQEAO1IrqW21KfzrxKmtuDSHdH5YrC3iOhiF/kaK +xXbigdtw6KHW/pIhGiA3BY5u+d5eVuHTR5YSwIbbRvOjuoNBATAw/8f5mt5Wa+C3 +PDpLNxDys561VbCW45RMQ0x5kybvDYi0D1R/grqZ18veuFSfE6QMJ/mzvr575fje +8r5Ou0IZOYYF8cyqG5rA4U7BYXEnH44VgwlpkF8pitPsnyUWaAYqE0KnZ0qw0Py4 +HCkfGJNlNOOamnr6KakVlocwKY0SdxcLoXSs5ogTQvTSrAOjwcm1RA0hOCXr8f/f +UsQIIGpPVh1plR1vYNndDeBpRJSFkoJTkgAIrlFzSMwNebU0pg== +-----END CERTIFICATE----- +)EOF"; + +void setup() { + Serial.begin(115200); + Serial.println(); + Serial.println(); + + // We start by connecting to a WiFi network + Serial.print("Connecting to "); + Serial.println(ssid); + WiFi.mode(WIFI_STA); + WiFi.begin(ssid, pass); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(""); + + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + + // Attach the server private cert/key combo + BearSSLX509List *serverCertList = new BearSSLX509List(server_cert); + BearSSLPrivateKey *serverPrivKey = new BearSSLPrivateKey(server_private_key); + server.setRSACert(serverCertList, serverPrivKey); + + // Actually start accepting connections + server.begin(); +} + +static const char *HTTP_RES = + "HTTP/1.0 200 OK\r\n" + "Connection: close\r\n" + "Content-Length: 62\r\n" + "Content-Type: text/html; charset=iso-8859-1\r\n" + "\r\n" + "\r\n" + "\r\n" + "

Hello from ESP8266!

\r\n" + "\r\n" + "\r\n"; + +void loop() { + BearSSL::WiFiClientSecure incoming = server.available(); + if (!incoming) { + return; + } + Serial.println("Incoming connection...\n"); + + // Ugly way to wait for \r\n (i.e. end of HTTP request which we don't actually parse here) + uint32_t timeout=millis() + 1000; + int lcwn = 0; + for (;;) { + unsigned char x=0; + if ((millis() > timeout) || (incoming.available() && incoming.read(&x, 1) < 0)) { + incoming.stop(); + Serial.printf("Connection error, closed\n"); + return; + } else if (!x) { + yield(); + continue; + } else if (x == 0x0D) { + continue; + } else if (x == 0x0A) { + if (lcwn) { + break; + } + lcwn = 1; + } else + lcwn = 0; + } + incoming.write((uint8_t*)HTTP_RES, strlen(HTTP_RES)); + incoming.flush(); + incoming.stop(); + Serial.printf("Connection closed.\n"); +} diff --git a/libraries/ESP8266WiFi/examples/BearSSL_Server/DO-NOT-USE-THESE-CERTS-IN-YOUR-OWN-APPS b/libraries/ESP8266WiFi/examples/BearSSL_Server/DO-NOT-USE-THESE-CERTS-IN-YOUR-OWN-APPS new file mode 100644 index 000000000..e69de29bb diff --git a/libraries/ESP8266WiFi/examples/BearSSL_Server/cert.pem b/libraries/ESP8266WiFi/examples/BearSSL_Server/cert.pem new file mode 100644 index 000000000..47238368a --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_Server/cert.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDUTCCAjmgAwIBAgIJAOcfK7c3JQtnMA0GCSqGSIb3DQEBCwUAMD8xCzAJBgNV +BAYTAkFVMQ0wCwYDVQQIDAROb25lMQ0wCwYDVQQKDAROb25lMRIwEAYDVQQDDAlF +U1BTZXJ2ZXIwHhcNMTgwMzE0MTg1NTQ1WhcNMjkwNTMxMTg1NTQ1WjA/MQswCQYD +VQQGEwJBVTENMAsGA1UECAwETm9uZTENMAsGA1UECgwETm9uZTESMBAGA1UEAwwJ +RVNQU2VydmVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyW5a4OO7 +xd6pRDTETO7hvEMBOr/wCqcTi/gi2/99rPnVvT7IH/qGSiYMxpGFKCXVqS4rU5k2 +XspALEquyGseUav5hqsgHO6CQFFALqXzUVNCsJA9V6raUFhBaIqqCKmWzmeAkV+a +vM/zDQR9Wj1QTCmi997sJJ5ICQc8cGSdvrhisUSbfPpKI9Ql4FApOZRABBBuZKhN +9ujIzTv3OIAarpQVfACKKuv7a2N2qU0uxRDojeO6odT1c6AZv6BlcF76GQGTo+/o +BhqPdbAQuaBycuWNgTnDQd6KUzV0E4it2fNG+cHN4kEvofN6gHx8IbOrXwFttlpA +H/o7bcfCnUVhTQIDAQABo1AwTjAdBgNVHQ4EFgQUBEk8LqgV+sMjdl/gpP1OlcNW +14EwHwYDVR0jBBgwFoAUBEk8LqgV+sMjdl/gpP1OlcNW14EwDAYDVR0TBAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAQEAO1IrqW21KfzrxKmtuDSHdH5YrC3iOhiF/kaK +xXbigdtw6KHW/pIhGiA3BY5u+d5eVuHTR5YSwIbbRvOjuoNBATAw/8f5mt5Wa+C3 +PDpLNxDys561VbCW45RMQ0x5kybvDYi0D1R/grqZ18veuFSfE6QMJ/mzvr575fje +8r5Ou0IZOYYF8cyqG5rA4U7BYXEnH44VgwlpkF8pitPsnyUWaAYqE0KnZ0qw0Py4 +HCkfGJNlNOOamnr6KakVlocwKY0SdxcLoXSs5ogTQvTSrAOjwcm1RA0hOCXr8f/f +UsQIIGpPVh1plR1vYNndDeBpRJSFkoJTkgAIrlFzSMwNebU0pg== +-----END CERTIFICATE----- diff --git a/libraries/ESP8266WiFi/examples/BearSSL_Server/key.pem b/libraries/ESP8266WiFi/examples/BearSSL_Server/key.pem new file mode 100644 index 000000000..4d270b18b --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_Server/key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDJblrg47vF3qlE +NMRM7uG8QwE6v/AKpxOL+CLb/32s+dW9Psgf+oZKJgzGkYUoJdWpLitTmTZeykAs +Sq7Iax5Rq/mGqyAc7oJAUUAupfNRU0KwkD1XqtpQWEFoiqoIqZbOZ4CRX5q8z/MN +BH1aPVBMKaL33uwknkgJBzxwZJ2+uGKxRJt8+koj1CXgUCk5lEAEEG5kqE326MjN +O/c4gBqulBV8AIoq6/trY3apTS7FEOiN47qh1PVzoBm/oGVwXvoZAZOj7+gGGo91 +sBC5oHJy5Y2BOcNB3opTNXQTiK3Z80b5wc3iQS+h83qAfHwhs6tfAW22WkAf+jtt +x8KdRWFNAgMBAAECggEAPd+jFL9/d1lc/zGCNuuN9YlTgFti/bKyo2UWOCOz1AVu +LVJyoLgQtggYFoqur1Vn2y7uaiB+/gD8U16hb7jPuGCuJjq8g4aUBfOvVmTtZ8a+ +joPQA/TcWJ+zf8xQTJbjVwWeDYmje2oZC5+cbbK1zp9fiuoz+U+RawyI+TE+700i +ESCmsKFIHy2Ifruva8HgcPYIPpZ9zLxJj0Dii+WDs7zM9h2dzO4HfImSG/DPmgoV +ydo9IcrUE7KoMLa8Uo7u1b2h6BnTn7GfYiMSUsYcYR3CnpDBknBWjZMwrV0uqv9q +TbVc4QXt+c1q89HDg7BIJaOAzbCvJfgAfXUqZyqwQQKBgQD5ENFjicUzCqPw7fOy +Q5Z8GeUbIJ5urT1MheAq7SPd2kK8TsO3hUjNC0LLNSyKPs6gsYaIiObO3wDGeZZk +xeHBhrUVaz2nIjI7TrnCUpMDOrdxcPr4bc+ifV5YT4W3OFBWQ9chQEx3Nm3DbiX4 +fpno34AiFrJF791JkTPFj9OIUQKBgQDPCgcae1pQr77q+GL5Q2tku3RrE4cWtExf +m8DzAb4Vxe3EhPz8bVr+71rqr/KqNfG1uKE3sT0fhB6VMTkHTOQU13jDrvpPUS3W +Vg8cVr5/+iiyF0xb+W8LQ+GVdR5xnMPSZHUtXyURvtzT4nnTAlAtN7lEytX9BzbX +xhltOOwGPQKBgA/Y/BnDSGLpCGlqGpl7J3YaB7PkLXCJYV8fHZZdpGyXWKu2r0lc +F7fEQanAZmcde/RJl2/UlisPkXMPhXxAAw9XTOph+nhJ+rw/VB6DNot8DvQO5kks +Y4vJQlmIJc/0q1fx1RxuhO8I7Y8D0TKwi4Z/wh1pKEq+6mul649kiWchAoGAWn8B +l9uvIHGRO9eSO23ytTcSrfL9Kzln4KqN7iom0hGP2kRe6F9MVP5+ePKrWSb3Hf0z +ysoX83ymeYPob352e32rda04EA9lv7giJrrrzbikrSNt5w3iMcRcCB4HTpW9Kmtq +pIhgBZ+tmpf1s/vg28LtoloeqtjKagpW9tzYnekCgYAZFZ84EGqS9SHw5LELgGY4 +mQLMwbYZ6wBMA2PlqYi/17hoAVWz37mLDjtWDB4ir78QMoGbesQVtK9W/4vzmez4 +ZLKlffdL5tCtA08Gq9aond1z83Xdnh1UjtwHIJvJPc/AoCFW1r5skv/G6acAk6I2 +Zs0aiirNGTEymRX4rw26Qg== +-----END PRIVATE KEY----- diff --git a/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/BearSSL_ServerClientCert.ino b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/BearSSL_ServerClientCert.ino new file mode 100644 index 000000000..9580ef53d --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/BearSSL_ServerClientCert.ino @@ -0,0 +1,257 @@ +/* + Demonstrate the usage of client certificate validation + for WiFiServerBearSSL. + By Earle F. Philhower, III + + TLS servers can require that a client present it with an X.509 + certificate signed by a trusted authority. Clients which try + and connect without a x.509 key, or with an x.509 key not signed + by the trusted authority (which could be a self-signing CA) + can not connect. + + This example uses a predefined CA and any number of client + certificates. Clients will need both their X.509 cert and their + private key, both of which are generated in the signing process. + + To run this example: + 1. Generate a private certificate-authority certificate and key: + openssl genrsa -out ca_key.pem 2048 + openssl req -x509 -new -nodes -key ca_key.pem -days 4096 -config ca.conf -out ca_cer.pem + + KEEP ca_key.pem ABSOLUTELY SECURE, WITH IT ANYONE CAN MAKE CERTS + SIGNED BY YOU! + + DO NOT UPLOAD ca_key.pem TO THE ESP8266, IT'S NOT NEEDED (SEE BELOW)! + + ca_cer.pem is the Public X.509 certificate for your signing authority + and can(must) be shared and included in the server as the trust root. + + 2. Generate a private server certificate and key pair (using the + self-signed CA or any other CA you'd like) + openssl genrsa -out server_key.pem 2048 + openssl req -out server_req.csr -key server_key.pem -new -config server.conf + openssl x509 -req -in server_req.csr -out server_cer.pem -sha256 -CAcreateserial -days 4000 -CA ca_cer.pem -CAkey ca_key.pem + + KEEP server_key.pem SECURE, IT IS YOUR SERVER'S PRIVATE KEY. + THIS WILL BE STORED IN THE SERVER ALONE. CLIENTS DO NOT NEED IT! + + server_cer.pem *CAN* BE SHARED WITH CLIENTS, OR THE CLIENTS CAN SIMPLY + USE YOUR SELF-SIGNED CA_CER.PEM + + 3. Generate any number of private client certificate/key pairs (using the + private CA above) + openssl genrsa -out client1_key.pem 2048 + openssl req -out client1_req.csr -key client1_key.pem -new -config client.conf + openssl x509 -req -in client1_req.csr -out client1_cer.pem -sha256 -CAcreateserial -days 4000 -CA ca_cer.pem -CAkey ca_key.pem + + Every client should have its own unique certificate generated and + a copy of that specific client's private key. + + DO NOT SHARE THE PRIVATE KEY GENERATED ABOVE! + + Included with this example are *SAMPLE* certs and keys. They are NOT + SECURE, since they're shared with all copies of the repo, so + DO NOT USE THE SAMPLE CERTS, KEYS, OR CAS IN YOUR OWN PROJECT!!! + + Run this example and then try connecting to the server IP:4433. + If you don't specify the client cert and key on the WGET command + line, you will not get connected. + + ex: wget --quiet --O - --no-check-certificate --certificate=client1_cer.pem --private-key=client1_key.pem https://esp.ip.add.ress/ + + This example is released into the public domain. +*/ + +#include +#include + +const char *ssid = "...."; +const char *pass = "...."; + +// The server which will require a client cert signed by the trusted CA +BearSSL::WiFiServerSecure server(443); + +// The hardcoded certificate authority for this example. +// Don't use it on your own apps!!!!! +const char ca_cert[] PROGMEM = R"EOF( +-----BEGIN CERTIFICATE----- +MIIC1TCCAb2gAwIBAgIJAMPt1Ms37+hLMA0GCSqGSIb3DQEBCwUAMCExCzAJBgNV +BAYTAlVTMRIwEAYDVQQDDAkxMjcuMC4wLjMwHhcNMTgwMzE0MDQyMTU0WhcNMjkw +NTMxMDQyMTU0WjAhMQswCQYDVQQGEwJVUzESMBAGA1UEAwwJMTI3LjAuMC4zMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxsa4qU/tlzN4YTcnn/I/ffsi +jOPc8QRcwClKzasIZNFEye4uThl+LGZWFIFb8X8Dc+xmmBaWlPJbqtphgFKStpar +DdduHSW1ud6Y1FVKxljo3UwCMrYm76Q/jNzXJvGs6Z1MDNsVZzGJaoqit2H2Hkvk +y+7kk3YbEDlcyVsLOw0zCKL4cd2DSNDyhIZxWo2a8Qn5IdjWAYtsTnW6MvLk/ya4 +abNeRfSZwi+r37rqi9CIs++NpL5ynqkKKEMrbeLactWgHbWrZeaMyLpuUEL2GF+w +MRaAwaj7ERwT5gFJRqYwj6bbfIdx5PC7h7ucbyp272MbrDa6WNBCMwQO222t4wID +AQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCmXfrC42nW +IpL3JDkB8YlB2QUvD9JdMp98xxo33+xE69Gov0e6984F1Gluao0p6sS7KF+q3YLS +4hjnzuGzF9GJMimIB7NMQ20yXKfKpmKJ7YugMaKTDWDhHn5679mKVbLSQxHCUMEe +tEnMT93/UaDbWBjV6zu876q5vjPMYgDHODqO295ySaA71UkijaCn6UwKUT49286T +V9ZtzgabNGHXfklHgUPWoShyze+G3g29I1BR0qABoJI63zaNu8ua42v5g1RldxsW +X8yKI14mFOGxuvcygG8L2xxysW7Zq+9g+O7gW0Pm6RDYnUQmIwY83h1KFCtYCJdS +2PgozwkkUNyP +-----END CERTIFICATE----- +)EOF"; + +// The server's private key which must be kept secret +const char server_private_key[] PROGMEM = R"EOF( +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAsRNVTvqP++YUh8NrbXwE83xVsDqcB3F76xcXNKFDERfVd2P/ +LvyDovCcoQtT0UCRgPcxRp894EuPH/Ru6Z2Lu85sV//i7ce27tc2WRFSfuhlRxHP +LJWHxTl1CEfXp/owkECQ4MB3pw6Ekc16iTEPiezTG+T+mQ/BkiIwcIK6CMlpR9DI +eYUTqv0f9NrUfAjdBrqlEO2gpgFvLFrkDEU2ntAIc4aPOP7yDOym/xzfy6TiG8Wo +7nlh6M97xTZGfbEPCH9rZDjo5istym1HzF5P+COq+OTSPscjFGXoi978o6hZwa7i +zxorg4h5a5lGnshRu2Gl+Ybfa14OwnIrv/yCswIDAQABAoIBAHxwgbsHCriTcEoY +Yx6F0VTrQ6ydA5mXfuYvS/eIfIE+pp1IgMScYEXZobjrJPQg1CA1l0NyFSHS97oV +JPy34sMQxcLx6KABgeVHCMJ/EeJtnv7a3SUP0GIhhsVS95Lsl8RIG4hWub+EzFVK +eZqAB9N9wr4Pp3wZPodbz37B38rb1QPyMFmQOLlHjKTOmoxsXhL2ot+R3+aLYSur +oPO1kQo7/d0UAZoy8h9OQN4a2EXvawh4O2EvFGbc5X/yXwAdEQ4NPp9VZhkNIRkV ++XZ3FcIqEVOploKtRF/tVBTz3g61/lFz21L9PMmV5y8tvSafr2SpJugGVmp2rrVQ +VNyGlIECgYEA10JSI5gmeCU3zK6kvOfBp54hY/5dDrSUpjKkMxpmm7WZQ6Il/k7A +hMcLeMzHiriT7WhRIXF8AOr2MoEkHkH3DhVNN4ccieVZx2SE5P5mVkItZGLrrpfU +dysR/ARAI1HYegGUiKacZtf9SrRavU0m7fOVOiYwbFRhjyX+MyuteYkCgYEA0pbz +4ZosetScP68uZx1sGlTfkcqLl7i15DHk3gnj6jKlfhvC2MjeLMhNDtKeUAuY7rLQ +guZ0CCghWAv0Glh5eYdfIiPhgqFfX4P5F3Om4zQHVPYj8xHfHG4ZP7dKQTndrO1Q +fLdGDTQLVXabAUSp2YGrijC8J9idSW1pYClvF1sCgYEAjkDn41nzYkbGP1/Swnwu +AEWCL4Czoro32jVxScxSrugt5wJLNWp508VukWBTJhugtq3Pn9hNaJXeKbYqVkyl +pgrxwpZph7+nuxt0r5hnrO2C7eppcjIoWLB/7BorAKxf8REGReBFT7nBTBMwPBW2 +el4U6h6+tXh2GJG1Eb/1nnECgYAydVb0THOx7rWNkNUGggc/++why61M6kYy6j2T +cj05BW+f2tkCBoctpcTI83BZb53yO8g4RS2yMqNirGKN2XspwmTqEjzbhv0KLt4F +X4GyWOoU0nFksXiLIFpOaQWSwWG7KJWrfGJ9kWXR0Xxsfl5QLoDCuNCsn3t4d43T +K7phlwKBgHDzF+50+/Wez3YHCy2a/HgSbHCpLQjkknvgwkOh1z7YitYBUm72HP8Z +Ge6b4wEfNuBdlZll/y9BQQOZJLFvJTE5t51X9klrkGrOb+Ftwr7eI/H5xgcadI52 +tPYglR5fjuRF/wnt3oX9JlQ2RtSbs+3naXH8JoherHaqNn8UpH0t +-----END RSA PRIVATE KEY----- +)EOF"; + +// The server's public certificate which must be shared +const char server_cert[] PROGMEM = R"EOF( +-----BEGIN CERTIFICATE----- +MIIDTzCCAjcCCQDPXvMRYOpeuDANBgkqhkiG9w0BAQsFADCBpjESMBAGA1UEAwwJ +MTI3LjAuMC4xMQswCQYDVQQGEwJVUzElMCMGA1UECgwcTXkgT3duIENlcnRpZmlj +YXRlIEF1dGhvcml0eTEUMBIGA1UECAwLQXJkdWlub0xhbmQxFTATBgNVBAcMDEFy +ZHVpbm9WaWxsZTEVMBMGA1UECgwMRVNQODI2NlVzZXJzMRgwFgYDVQQLDA9FU1A4 +MjY2LUFyZHVpbm8wHhcNMTgwMzE0MDQwMDAwWhcNMjkwMjI0MDQwMDAwWjAsMRYw +FAYDVQQKDA1NeSBTZXJ2ZXIgT3JnMRIwEAYDVQQDDAkxMjcuMC4wLjMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxE1VO+o/75hSHw2ttfATzfFWwOpwH +cXvrFxc0oUMRF9V3Y/8u/IOi8JyhC1PRQJGA9zFGnz3gS48f9G7pnYu7zmxX/+Lt +x7bu1zZZEVJ+6GVHEc8slYfFOXUIR9en+jCQQJDgwHenDoSRzXqJMQ+J7NMb5P6Z +D8GSIjBwgroIyWlH0Mh5hROq/R/02tR8CN0GuqUQ7aCmAW8sWuQMRTae0Ahzho84 +/vIM7Kb/HN/LpOIbxajueWHoz3vFNkZ9sQ8If2tkOOjmKy3KbUfMXk/4I6r45NI+ +xyMUZeiL3vyjqFnBruLPGiuDiHlrmUaeyFG7YaX5ht9rXg7Cciu//IKzAgMBAAEw +DQYJKoZIhvcNAQELBQADggEBAEnG+FNyNCOkBvzHiUpHHpScxZqM2f+XDcewJgeS +L6HkYEDIZZDNnd5gduSvkHpdJtWgsvJ7dJZL40w7Ba5sxpZHPIgKJGl9hzMkG+aA +z5GMkjys9h2xpQZx9KL3q7G6A+C0bll7ODZlwBtY07CFMykT4Mp2oMRrQKRucMSV +AB1mKujLAnMRKJ3NM89RQJH4GYiRps9y/HvM5lh7EIK/J0/nEZeJxY5hJngskPKb +oPPdmkR97kaQnll4KNsC3owVlHVU2fMftgYkgQLzyeWgzcNa39AF3B6JlcOzNyQY +seoK24dHmt6tWmn/sbxX7Aa6TL/4mVlFoOgcaTJyVaY/BrY= +-----END CERTIFICATE----- +)EOF"; + +// Note there are no client certificates required here in the server. +// That is because all clients will send a certificate that can be +// proven to be signed by the public CA certificate included at the +// head of the app. + +// Set time via NTP, as required for x.509 validation +void setClock() +{ + configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov"); + + Serial.print("Waiting for NTP time sync: "); + time_t now = time(nullptr); + while (now < 8 * 3600 * 2) { + delay(500); + Serial.print("."); + now = time(nullptr); + } + Serial.println(""); + struct tm timeinfo; + gmtime_r(&now, &timeinfo); + Serial.print("Current time: "); + Serial.print(asctime(&timeinfo)); +} + +void setup() { + Serial.begin(115200); + Serial.println(); + Serial.println(); + + // We start by connecting to a WiFi network + Serial.print("Connecting to "); + Serial.println(ssid); + WiFi.mode(WIFI_STA); + WiFi.begin(ssid, pass); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(""); + + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + + setClock(); // Required for X.509 validation + + // Attach the server private cert/key combo + BearSSLX509List *serverCertList = new BearSSLX509List(server_cert); + BearSSLPrivateKey *serverPrivKey = new BearSSLPrivateKey(server_private_key); + server.setRSACert(serverCertList, serverPrivKey); + + // Require a certificate validated by the trusted CA + BearSSLX509List *serverTrustedCA = new BearSSLX509List(ca_cert); + server.setClientTrustAnchor(serverTrustedCA); + + // Actually start accepting connections + server.begin(); +} + +static const char *HTTP_RES = + "HTTP/1.0 200 OK\r\n" + "Connection: close\r\n" + "Content-Length: 59\r\n" + "Content-Type: text/html; charset=iso-8859-1\r\n" + "\r\n" + "\r\n" + "\r\n" + "

Hello my friend!

\r\n" + "\r\n" + "\r\n"; + +void loop() { + BearSSL::WiFiClientSecure incoming = server.available(); + if (!incoming) { + return; + } + Serial.println("Incoming connection...\n"); + + // Ugly way to wait for \r\n (i.e. end of HTTP request which we don't actually parse here) + uint32_t timeout=millis() + 1000; + int lcwn = 0; + for (;;) { + unsigned char x=0; + if ((millis() > timeout) || (incoming.available() && incoming.read(&x, 1) < 0)) { + incoming.stop(); + Serial.printf("Connection error, closed\n"); + return; + } else if (!x) { + yield(); + continue; + } else if (x == 0x0D) { + continue; + } else if (x == 0x0A) { + if (lcwn) { + break; + } + lcwn = 1; + } else + lcwn = 0; + } + incoming.write((uint8_t*)HTTP_RES, strlen(HTTP_RES)); + incoming.flush(); + incoming.stop(); + Serial.printf("Connection closed.\n"); +} diff --git a/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/DO-NOT-USE-THESE-CERTS-IN-YOUR-OWN-APPS b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/DO-NOT-USE-THESE-CERTS-IN-YOUR-OWN-APPS new file mode 100644 index 000000000..e69de29bb diff --git a/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca.conf b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca.conf new file mode 100644 index 000000000..028b10e34 --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca.conf @@ -0,0 +1,12 @@ +[ req ] +prompt = no +default_bits = 2048 +distinguished_name = req_dn +x509_extensions = v3_req + +[ req_dn ] +C = US +CN = 127.0.0.3 + +[v3_req] +basicConstraints=CA:TRUE diff --git a/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca_cer.pem b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca_cer.pem new file mode 100644 index 000000000..416c9bef9 --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca_cer.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC1TCCAb2gAwIBAgIJAMPt1Ms37+hLMA0GCSqGSIb3DQEBCwUAMCExCzAJBgNV +BAYTAlVTMRIwEAYDVQQDDAkxMjcuMC4wLjMwHhcNMTgwMzE0MDQyMTU0WhcNMjkw +NTMxMDQyMTU0WjAhMQswCQYDVQQGEwJVUzESMBAGA1UEAwwJMTI3LjAuMC4zMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxsa4qU/tlzN4YTcnn/I/ffsi +jOPc8QRcwClKzasIZNFEye4uThl+LGZWFIFb8X8Dc+xmmBaWlPJbqtphgFKStpar +DdduHSW1ud6Y1FVKxljo3UwCMrYm76Q/jNzXJvGs6Z1MDNsVZzGJaoqit2H2Hkvk +y+7kk3YbEDlcyVsLOw0zCKL4cd2DSNDyhIZxWo2a8Qn5IdjWAYtsTnW6MvLk/ya4 +abNeRfSZwi+r37rqi9CIs++NpL5ynqkKKEMrbeLactWgHbWrZeaMyLpuUEL2GF+w +MRaAwaj7ERwT5gFJRqYwj6bbfIdx5PC7h7ucbyp272MbrDa6WNBCMwQO222t4wID +AQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCmXfrC42nW +IpL3JDkB8YlB2QUvD9JdMp98xxo33+xE69Gov0e6984F1Gluao0p6sS7KF+q3YLS +4hjnzuGzF9GJMimIB7NMQ20yXKfKpmKJ7YugMaKTDWDhHn5679mKVbLSQxHCUMEe +tEnMT93/UaDbWBjV6zu876q5vjPMYgDHODqO295ySaA71UkijaCn6UwKUT49286T +V9ZtzgabNGHXfklHgUPWoShyze+G3g29I1BR0qABoJI63zaNu8ua42v5g1RldxsW +X8yKI14mFOGxuvcygG8L2xxysW7Zq+9g+O7gW0Pm6RDYnUQmIwY83h1KFCtYCJdS +2PgozwkkUNyP +-----END CERTIFICATE----- diff --git a/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca_cer.srl b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca_cer.srl new file mode 100644 index 000000000..bec2d5b2e --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca_cer.srl @@ -0,0 +1 @@ +A25EB184B01D7FBB diff --git a/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca_key.pem b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca_key.pem new file mode 100644 index 000000000..43027f189 --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/ca_key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAxsa4qU/tlzN4YTcnn/I/ffsijOPc8QRcwClKzasIZNFEye4u +Thl+LGZWFIFb8X8Dc+xmmBaWlPJbqtphgFKStparDdduHSW1ud6Y1FVKxljo3UwC +MrYm76Q/jNzXJvGs6Z1MDNsVZzGJaoqit2H2Hkvky+7kk3YbEDlcyVsLOw0zCKL4 +cd2DSNDyhIZxWo2a8Qn5IdjWAYtsTnW6MvLk/ya4abNeRfSZwi+r37rqi9CIs++N +pL5ynqkKKEMrbeLactWgHbWrZeaMyLpuUEL2GF+wMRaAwaj7ERwT5gFJRqYwj6bb +fIdx5PC7h7ucbyp272MbrDa6WNBCMwQO222t4wIDAQABAoIBABP6hzblRLEMyE2l +GIN3+q+z3R4iDOPgl13tCIqxZQ+VBP/yw46v+0GFK6O1+MLGDFfLa+hfZNUlotcC +Sgh2xC476IdknrmpP6Gl4OB+jhxvdUBA0nu8WR9+97A1xh4w7jswxyMHphgQH4qo +0n/yBaW35RAmO60iksfHrC7EytUtahZkWq13xZsN8VNEn3dS/M54XEEQp+BLXZEh +WTd4sm5ddK58NZwLvkn0zaMyH38tllF7sezxZxWz+q4yCOB1/Xw0BC3e7dqBLtaC +PHrxWedph9sF+HXyDoXXp6S6IfSlXnCwMl0e3xBppIY9BYDnVwZpGxfUAMg26RyH +w5UEmPECgYEA51v0bxjZ/3boOH44glEFfmcJCLacoeQud+DZEMWFxmkApEVn9211 +t1G+N8rnHBiAhi9bDhi3Qs9fvOxXBhqaLw1xV8KGNY8bKiKoUu8y1aeHWPbgmzYp +sfrX70mhgHUgJt4i6xzW5esTmXl3ZAqPWxzECavmoLbHnssouPb5YckCgYEA2/Jj +LPlP4XN8b4NpOhYlHmMEIwD7utIct5/7ydjtucUQAHqJ+EQ20R4MCHc9zTvjeyZ9 +H/Rdxo+L0pwpbqSr0JTxOqQ1GzqstT9jVYNs+tRIQoeskd+Ags34sDJwPIbGUPfz +rBOfcHLwGfAMMBQzk5zT8frAZQV/8H7ejpCxyEsCgYBIptOnX4J1en2J3/kW0yKK +gwiPN+kP3XvKIU2Iur47hBWzgCgZxsHEg2LcWlcgt4EEojJRxukljcFerkjVndz1 +EZ+aE3fZscqx/JgnEv4/oZAbG8uEcgm93iuY9OJGWIF0MyV79150bNGGzGH1hGto +DSxybQzLQxqEfv+WtdeyIQKBgQDPc8GjS8vSQ9EchQAdL4H3NUFTmrvULBW2BInC +in8+9uXu7aVwqzZg60xCN+XszA31vAnMt/ozLHWfQne5ykvcQn985iDI/ACmO5F/ +uKRzuQIm7j0QoZRey9NCrXA7RouLFzOYHDIIKADbFhUIzCURl5w44l/RaOyRc7iL +E2L8HQKBgQC8WK5nT2QYtimzuwQrvSWkWyVu8/z/U8AKTusCV71uL9A6OBiUzJO3 +/3Befn+qt9Nm1ZHqTsJWXIE8LPblhCkvYraq9cJ+KIymWtFVMeR99DN/yTofdyxX +Uw58Z3i5HDK4AzJhBzvk14REw5xOZZLsWAqoMHTCM/T+hVqhD+cjAw== +-----END RSA PRIVATE KEY----- diff --git a/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client.conf b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client.conf new file mode 100644 index 000000000..a443fc36c --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client.conf @@ -0,0 +1,8 @@ +[ req ] +prompt = no +default_bits = 2048 +distinguished_name = req_dn + +[ req_dn ] +O = My Client Org +CN = 127.0.0.2 diff --git a/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client1_cer.pem b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client1_cer.pem new file mode 100644 index 000000000..e98e95f0b --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client1_cer.pem @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICyTCCAbECCQCiXrGEsB1/uzANBgkqhkiG9w0BAQsFADAhMQswCQYDVQQGEwJV +UzESMBAGA1UEAwwJMTI3LjAuMC4zMB4XDTE4MDMxNDA0MjIwNloXDTI5MDIyNDA0 +MjIwNlowLDEWMBQGA1UECgwNTXkgQ2xpZW50IE9yZzESMBAGA1UEAwwJMTI3LjAu +MC4yMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5MW88nCi2tUrf/Tq +5w+5IvuqTAusaN4eelwS69sd9yXfM/DEgipw7o4t340oGdLVA4b7h1Qwxttw62ki +Z5VecXosg7xbJSjbB4LLLcmvC0pYvCactMWI+k4Na6VA1cS+hMsgnd37Shzo3Gyz +2AxrpMrcANsIaLD+o9Ji/00XmbvA/dKW/sG6vK5rWjNV0JE9WVjAW+eek8doIjh5 +mOKVR7zVeR1cr8wTp48e6LX9oJsv9nfACyIyMGCFp8qa+zQEBNKevohEl9OOi9Vh +H50UU6UEo0ZGAzWF8fp+T4ltTFxr/T0PXn5J2Kk2Wl5Zt5XLt0cDBlrMDpz24ZAQ +go/CDwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQA/6HqENDo5gsxWQIyC+fRFEUIy +cJ2lOlGxrf83oc1I5V10A8r6aOcwNoYlMq1Upcu2oAk2Kf5X9pq6EbM7BXuBESm4 +TYYPawv3lHeiX8uX3iUReasDLBTbj4WycteSjI4JUVPvZv8ILznKkKLr2tGV19ha +UfFu/cc3iazMt0jMORd6gznWxkbgY9Qr3V4VNReD0ZUa0s9ANOjnKRIXymRicCRy +HNwSXsj/sQR1lbnI1pkyGlTZaigADlqIsH+XJjYuVxdUge5Cz1+D9kcjF9PjF4V1 +u/lw6sR50qc2k5rC1WK4QLlgoknd5+ZrRiHlZXrJdcj9KnWdh4aGa3jwJpOW +-----END CERTIFICATE----- diff --git a/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client1_key.pem b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client1_key.pem new file mode 100644 index 000000000..94e0880d4 --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client1_key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEA5MW88nCi2tUrf/Tq5w+5IvuqTAusaN4eelwS69sd9yXfM/DE +gipw7o4t340oGdLVA4b7h1Qwxttw62kiZ5VecXosg7xbJSjbB4LLLcmvC0pYvCac +tMWI+k4Na6VA1cS+hMsgnd37Shzo3Gyz2AxrpMrcANsIaLD+o9Ji/00XmbvA/dKW +/sG6vK5rWjNV0JE9WVjAW+eek8doIjh5mOKVR7zVeR1cr8wTp48e6LX9oJsv9nfA +CyIyMGCFp8qa+zQEBNKevohEl9OOi9VhH50UU6UEo0ZGAzWF8fp+T4ltTFxr/T0P +Xn5J2Kk2Wl5Zt5XLt0cDBlrMDpz24ZAQgo/CDwIDAQABAoIBAAb5eE8z2+MsCI14 +HAk7U3ubjI+Q84qm6ur0D6edIIa+YtWki3kkbhj3wLJGDWjsIo5e+SAhEvOdEQ48 +QE5EIYL4JI9HmMfDPRo3hJY6xdlkRNxHmRNxykFHS+VyPk3GF8DYqH/nmpeh1f+S +WNFHX6jAfoCQLOt0Ke84pMf/w65uGixdVcXgHRA/n4gKbS84a7nZEl5NqT02wrrA +BRY6pRvcsvFHaf4VEPKXpRE5UxXGMJwtyYfl9Mukszepi6g/Hk2WI499tdgDzM55 +hWLRlW7ZzMILz4aP1LYt7iolKPAEst2rZdSgumIwznZUymIevlo95iYjazX9TWFv +K9LKoeECgYEA9Mj569wGYATBSD1SQzPRMQybDpBgoz+T2tfeqaas2aHcUIUK2v8c +iR5xe3soFOPTaaQBtUgo3S016SR2OLo9xY0ag71mrJZj+zuY+bPO1YMi+qh0/s5E +ZRGMzhAzTmX/5jYQmu6W5ZIAETELMZ4E8p9hW/yG+1oT4Z0csXfP4BkCgYEA70D0 +Ef7e2os/76X7T2PpcLfA/4VPLS/QIbm57eVuc1GX5U7/YXdnqE4Z1pFhR+yJdId0 +iqx9NxTpqxK8QTkswZSeltLXnvWxlZWjsW+GdhwzrLjjA8OAuZqk/uiNVVTavl0M +vjxTJWAiRU3PF9bLeFvF059HuflnFOqwtiyEWGcCgYBOWMUlKJchxGPYq0fZGoyq +Fk7KqotDtOWt9cneoupP/e52Fx8SWPTZLlVEIHcDuKfB+CxTyXTK1d2bcYAlR/bd +c/w4jjZ+puP5VWnxAgwBaqeXcrN/mqVpc+SNT8IcJalyFXvbGuJROBmtZvUePGV5 +Amo29ux9JqeWXqMAakiugQKBgB50MB0SSh+bVfoVMJX8a7xzR1e/CkMAMQf58ha7 ++4EmQ6Vmls87ObCMsHFFdBKJoz13+HemWRHn0Y57BgdvVakWV9Fu6Q9Mytv1fi6Z +uY3TLSixKARUoE//xTzFMShJcsaEZZjZaOP7BqG3s8KfDqs1U0sKnUCo5FwfO3sU +04vFAoGALjVG6v0IpvPFZcJBN8wUuu9cLduyCnUiFsMYgfglXDSkynRS51/7Fxqf +q0ROTeHrKem3iiJ62j7U3tNni2awczWCgTlUjSQzBQo6Cu1UA52M3/XyqVNmfx/g +04dVpDrqFscdIasQcL1UddiwcT2a63RjriBaTETvjegoNVu1XR4= +-----END RSA PRIVATE KEY----- diff --git a/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client1_req.csr b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client1_req.csr new file mode 100644 index 000000000..6862a65be --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/client1_req.csr @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICcTCCAVkCAQAwLDEWMBQGA1UECgwNTXkgQ2xpZW50IE9yZzESMBAGA1UEAwwJ +MTI3LjAuMC4yMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5MW88nCi +2tUrf/Tq5w+5IvuqTAusaN4eelwS69sd9yXfM/DEgipw7o4t340oGdLVA4b7h1Qw +xttw62kiZ5VecXosg7xbJSjbB4LLLcmvC0pYvCactMWI+k4Na6VA1cS+hMsgnd37 +Shzo3Gyz2AxrpMrcANsIaLD+o9Ji/00XmbvA/dKW/sG6vK5rWjNV0JE9WVjAW+ee +k8doIjh5mOKVR7zVeR1cr8wTp48e6LX9oJsv9nfACyIyMGCFp8qa+zQEBNKevohE +l9OOi9VhH50UU6UEo0ZGAzWF8fp+T4ltTFxr/T0PXn5J2Kk2Wl5Zt5XLt0cDBlrM +Dpz24ZAQgo/CDwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAFLPF8/g9IMgQZvk +ZXvgPPPUAvANX3e0mcivjZD1BoqQ7CHeBqDpaaqH6i0qZrRQI6oli69IeQczkrXh +onhzLvCVoWmS1FH9JyWozRO6LeePEtV0jzxBDxHAd3pmlqTwLEpm0LfpBMkMe0Cb +r+3bOvAqW4ILkdSJ5FiAqlubu4+ezSLQTS/EJ+BzLkhuVuERqXFo/tW5KqviYbTL +XbvoLRVydNOUVZ+ts9YAtYLsqGoB6Rax6IzoLz5BXe5edw3FAEuotAJaLgWkBh/A +283zzb0pIUiZdF+8n61Fg4qFMZYYps4Fll4FXTn4mIzsfbJpkPXYGGuKvla46svH +tpAv/so= +-----END CERTIFICATE REQUEST----- diff --git a/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/server.conf b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/server.conf new file mode 100644 index 000000000..d7ca2ead5 --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/server.conf @@ -0,0 +1,8 @@ +[ req ] +prompt = no +default_bits = 2048 +distinguished_name = req_dn + +[ req_dn ] +O = My Server Org +CN = 127.0.0.3 diff --git a/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/server_cer.pem b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/server_cer.pem new file mode 100644 index 000000000..c87cec720 --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/server_cer.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDTzCCAjcCCQDPXvMRYOpeuDANBgkqhkiG9w0BAQsFADCBpjESMBAGA1UEAwwJ +MTI3LjAuMC4xMQswCQYDVQQGEwJVUzElMCMGA1UECgwcTXkgT3duIENlcnRpZmlj +YXRlIEF1dGhvcml0eTEUMBIGA1UECAwLQXJkdWlub0xhbmQxFTATBgNVBAcMDEFy +ZHVpbm9WaWxsZTEVMBMGA1UECgwMRVNQODI2NlVzZXJzMRgwFgYDVQQLDA9FU1A4 +MjY2LUFyZHVpbm8wHhcNMTgwMzE0MDQwMDAwWhcNMjkwMjI0MDQwMDAwWjAsMRYw +FAYDVQQKDA1NeSBTZXJ2ZXIgT3JnMRIwEAYDVQQDDAkxMjcuMC4wLjMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxE1VO+o/75hSHw2ttfATzfFWwOpwH +cXvrFxc0oUMRF9V3Y/8u/IOi8JyhC1PRQJGA9zFGnz3gS48f9G7pnYu7zmxX/+Lt +x7bu1zZZEVJ+6GVHEc8slYfFOXUIR9en+jCQQJDgwHenDoSRzXqJMQ+J7NMb5P6Z +D8GSIjBwgroIyWlH0Mh5hROq/R/02tR8CN0GuqUQ7aCmAW8sWuQMRTae0Ahzho84 +/vIM7Kb/HN/LpOIbxajueWHoz3vFNkZ9sQ8If2tkOOjmKy3KbUfMXk/4I6r45NI+ +xyMUZeiL3vyjqFnBruLPGiuDiHlrmUaeyFG7YaX5ht9rXg7Cciu//IKzAgMBAAEw +DQYJKoZIhvcNAQELBQADggEBAEnG+FNyNCOkBvzHiUpHHpScxZqM2f+XDcewJgeS +L6HkYEDIZZDNnd5gduSvkHpdJtWgsvJ7dJZL40w7Ba5sxpZHPIgKJGl9hzMkG+aA +z5GMkjys9h2xpQZx9KL3q7G6A+C0bll7ODZlwBtY07CFMykT4Mp2oMRrQKRucMSV +AB1mKujLAnMRKJ3NM89RQJH4GYiRps9y/HvM5lh7EIK/J0/nEZeJxY5hJngskPKb +oPPdmkR97kaQnll4KNsC3owVlHVU2fMftgYkgQLzyeWgzcNa39AF3B6JlcOzNyQY +seoK24dHmt6tWmn/sbxX7Aa6TL/4mVlFoOgcaTJyVaY/BrY= +-----END CERTIFICATE----- diff --git a/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/server_key.pem b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/server_key.pem new file mode 100644 index 000000000..a984995c4 --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_ServerClientCert/server_key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAsRNVTvqP++YUh8NrbXwE83xVsDqcB3F76xcXNKFDERfVd2P/ +LvyDovCcoQtT0UCRgPcxRp894EuPH/Ru6Z2Lu85sV//i7ce27tc2WRFSfuhlRxHP +LJWHxTl1CEfXp/owkECQ4MB3pw6Ekc16iTEPiezTG+T+mQ/BkiIwcIK6CMlpR9DI +eYUTqv0f9NrUfAjdBrqlEO2gpgFvLFrkDEU2ntAIc4aPOP7yDOym/xzfy6TiG8Wo +7nlh6M97xTZGfbEPCH9rZDjo5istym1HzF5P+COq+OTSPscjFGXoi978o6hZwa7i +zxorg4h5a5lGnshRu2Gl+Ybfa14OwnIrv/yCswIDAQABAoIBAHxwgbsHCriTcEoY +Yx6F0VTrQ6ydA5mXfuYvS/eIfIE+pp1IgMScYEXZobjrJPQg1CA1l0NyFSHS97oV +JPy34sMQxcLx6KABgeVHCMJ/EeJtnv7a3SUP0GIhhsVS95Lsl8RIG4hWub+EzFVK +eZqAB9N9wr4Pp3wZPodbz37B38rb1QPyMFmQOLlHjKTOmoxsXhL2ot+R3+aLYSur +oPO1kQo7/d0UAZoy8h9OQN4a2EXvawh4O2EvFGbc5X/yXwAdEQ4NPp9VZhkNIRkV ++XZ3FcIqEVOploKtRF/tVBTz3g61/lFz21L9PMmV5y8tvSafr2SpJugGVmp2rrVQ +VNyGlIECgYEA10JSI5gmeCU3zK6kvOfBp54hY/5dDrSUpjKkMxpmm7WZQ6Il/k7A +hMcLeMzHiriT7WhRIXF8AOr2MoEkHkH3DhVNN4ccieVZx2SE5P5mVkItZGLrrpfU +dysR/ARAI1HYegGUiKacZtf9SrRavU0m7fOVOiYwbFRhjyX+MyuteYkCgYEA0pbz +4ZosetScP68uZx1sGlTfkcqLl7i15DHk3gnj6jKlfhvC2MjeLMhNDtKeUAuY7rLQ +guZ0CCghWAv0Glh5eYdfIiPhgqFfX4P5F3Om4zQHVPYj8xHfHG4ZP7dKQTndrO1Q +fLdGDTQLVXabAUSp2YGrijC8J9idSW1pYClvF1sCgYEAjkDn41nzYkbGP1/Swnwu +AEWCL4Czoro32jVxScxSrugt5wJLNWp508VukWBTJhugtq3Pn9hNaJXeKbYqVkyl +pgrxwpZph7+nuxt0r5hnrO2C7eppcjIoWLB/7BorAKxf8REGReBFT7nBTBMwPBW2 +el4U6h6+tXh2GJG1Eb/1nnECgYAydVb0THOx7rWNkNUGggc/++why61M6kYy6j2T +cj05BW+f2tkCBoctpcTI83BZb53yO8g4RS2yMqNirGKN2XspwmTqEjzbhv0KLt4F +X4GyWOoU0nFksXiLIFpOaQWSwWG7KJWrfGJ9kWXR0Xxsfl5QLoDCuNCsn3t4d43T +K7phlwKBgHDzF+50+/Wez3YHCy2a/HgSbHCpLQjkknvgwkOh1z7YitYBUm72HP8Z +Ge6b4wEfNuBdlZll/y9BQQOZJLFvJTE5t51X9klrkGrOb+Ftwr7eI/H5xgcadI52 +tPYglR5fjuRF/wnt3oX9JlQ2RtSbs+3naXH8JoherHaqNn8UpH0t +-----END RSA PRIVATE KEY----- diff --git a/libraries/ESP8266WiFi/examples/BearSSL_Validation/BearSSL_Validation.ino b/libraries/ESP8266WiFi/examples/BearSSL_Validation/BearSSL_Validation.ino new file mode 100644 index 000000000..2ef6d102e --- /dev/null +++ b/libraries/ESP8266WiFi/examples/BearSSL_Validation/BearSSL_Validation.ino @@ -0,0 +1,228 @@ +// Example of the different modes of the X.509 validation options +// in the WiFiClientBearSSL object +// +// Mar 2018 by Earle F. Philhower, III +// Released to the public domain + +#include +#include + +const char *ssid = "...."; +const char *pass = "...."; + +const char * host = "api.github.com"; +const uint16_t port = 443; +const char * path = "/"; + +// Set time via NTP, as required for x.509 validation +void setClock() { + configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov"); + + Serial.print("Waiting for NTP time sync: "); + time_t now = time(nullptr); + while (now < 8 * 3600 * 2) { + delay(500); + Serial.print("."); + now = time(nullptr); + } + Serial.println(""); + struct tm timeinfo; + gmtime_r(&now, &timeinfo); + Serial.print("Current time: "); + Serial.print(asctime(&timeinfo)); +} + +// Try and connect using a WiFiClientBearSSL to specified host:port and dump HTTP response +void fetchURL(BearSSL::WiFiClientSecure *client, const char *host, const uint16_t port, const char *path) { + if (!path) { + path = "/"; + } + + Serial.printf("Trying: %s:443...", host); + client->connect(host, port); + if (!client->connected()) { + Serial.printf("*** Can't connect. ***\n-------\n"); + return; + } + Serial.printf("Connected!\n-------\n"); + client->write("GET "); + client->write(path); + client->write(" HTTP/1.0\r\nHost: "); + client->write(host); + client->write("\r\nUser-Agent: ESP8266\r\n"); + client->write("\r\n"); + uint32_t to = millis() + 5000; + if (client->connected()) { + do { + char tmp[32]; + memset(tmp, 0, 32); + int rlen = client->read((uint8_t*)tmp, sizeof(tmp) - 1); + yield(); + if (rlen < 0) { + break; + } + // Only print out first line up to \r, then abort connection + char *nl = strchr(tmp, '\r'); + if (nl) { + *nl = 0; + Serial.print(tmp); + break; + } + Serial.print(tmp); + } while (millis() < to); + } + client->stop(); + Serial.printf("\n-------\n\n"); +} + +void fetchNoConfig() { + Serial.printf(R"EOF( +If there are no CAs or insecure options specified, BearSSL will not connect. +Expect the following call to fail as none have been configured. +)EOF"); + BearSSL::WiFiClientSecure client; + fetchURL(&client, host, port, path); +} + +void fetchInsecure() { + Serial.printf(R"EOF( +This is absolutely *insecure*, but you can tell BearSSL not to check the +certificate of the server. In this mode it will accept ANY certificate, +which is subject to man-in-the-middle (MITM) attacks. +)EOF"); + BearSSL::WiFiClientSecure client; + client.setInsecure(); + fetchURL(&client, host, port, path); +} + +void fetchFingerprint() { + Serial.printf(R"EOF( +The SHA-1 fingerprint of an X.509 certificate can be used to validate it +instead of the while certificate. This is not nearly as secure as real +X.509 validation, but is better than nothing. +)EOF"); + BearSSL::WiFiClientSecure client; + const uint8_t fp[20] = {0x35, 0x85, 0x74, 0xEF, 0x67, 0x35, 0xA7, 0xCE, 0x40, 0x69, 0x50, 0xF3, 0xC0, 0xF6, 0x80, 0xCF, 0x80, 0x3B, 0x2E, 0x19}; + client.setFingerprint(fp); + fetchURL(&client, host, port, path); +} + +void fetchSelfSigned() { + Serial.printf(R"EOF( +It is also possible to accept *any* self-signed certificate. This is +absolutely insecure as anyone can make a self-signed certificate. +)EOF"); + BearSSL::WiFiClientSecure client; + Serial.printf("First, try and connect to a badssl.com self-signed website (will fail):\n"); + fetchURL(&client, "self-signed.badssl.com", 443, "/"); + Serial.printf("Now we'll enable self-signed certs (will pass)\n"); + client.allowSelfSignedCerts(); + fetchURL(&client, "self-signed.badssl.com", 443, "/"); +} + +void fetchKnownKey() { + Serial.printf(R"EOF( +The server certificate can be completely ignored and its public key +hardcoded in your application. This should be secure as the public key +needs to be paired with the private key of the site, which is obviously +private and not shared. A MITM without the private key would not be +able to establish communications. +)EOF"); + // Extracted by: openssl x509 -pubkey -noout -in servercert.pem + static const char pubkey[] PROGMEM = R"KEY( +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqcCPMEktuxLoDAxdHQgI +95FweH4Fa6+LslU2qmmUBF+pu4ZOUvpIQxVU5wqdWaxZauxG1nYUTrAWdPb1n0um +gLsGE7WYXJnQPJewIK4Qhua0LsrirIdHkcwHQ83NEYj+lswhg0fUQURt06Uta5ak +LovDdJPLqTuTS/nshOa76hR0ouWnrqucLL1szcvX/obB+Nsbmr58Mrg8prQfRoK6 +ibzlZysV88qPcCpc57lq6QBKQ2F9WgQMssQigXfTNm8lAAQ+L6gCZngd4KfHYPSJ +YA07oFWmuSOalgh00Wh8PUjuRGrcNxWpmgfALQHHFYgoDcD+a8+GoJk+GdJd3ong +ZQIDAQAB +-----END PUBLIC KEY----- +)KEY"; + BearSSL::WiFiClientSecure client; + BearSSLPublicKey key(pubkey); + client.setKnownKey(&key); + fetchURL(&client, host, port, path); +} + +void fetchCertAuthority() { + static const char digicert[] PROGMEM = R"EOF( +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- +)EOF"; + + Serial.printf(R"EOF( +A specific certification authority can be passed in and used to validate +a chain of certificates from a given server. These will be validated +using BearSSL's rules, which do NOT include certificate revocation lists. +A specific server's certificate, or your own self-signed root certificate +can also be used. ESP8266 time needs to be valid for checks to pass as +BearSSL does verify the notValidBefore/After fields. +)EOF"); + + BearSSL::WiFiClientSecure client; + BearSSLX509List cert(digicert); + client.setTrustAnchors(&cert); + Serial.printf("Try validating without setting the time (should fail)\n"); + fetchURL(&client, host, port, path); + + Serial.printf("Try again after setting NTP time (should pass)\n"); + setClock(); + fetchURL(&client, host, port, path); +} + +void setup() { + Serial.begin(115200); + Serial.println(); + Serial.println(); + + // We start by connecting to a WiFi network + Serial.print("Connecting to "); + Serial.println(ssid); + WiFi.mode(WIFI_STA); + WiFi.begin(ssid, pass); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(""); + + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + + fetchNoConfig(); + fetchInsecure(); + fetchFingerprint(); + fetchSelfSigned(); + fetchKnownKey(); + fetchCertAuthority(); +} + + +void loop() { + // Nothing to do here +} diff --git a/libraries/ESP8266WiFi/keywords.txt b/libraries/ESP8266WiFi/keywords.txt index 13014f935..0610a749b 100644 --- a/libraries/ESP8266WiFi/keywords.txt +++ b/libraries/ESP8266WiFi/keywords.txt @@ -19,6 +19,12 @@ WiFiServerSecure KEYWORD1 WiFiUDP KEYWORD1 WiFiClientSecure KEYWORD1 ESP8266WiFiMulti KEYWORD1 +BearSSLX509List KEYWORD1 +BearSSLPrivateKey KEYWORD1 +BearSSLPublicKey KEYWORD1 +CertStoreSPIFFSBearSSL KEYWORD1 +CertStoreSDBearSSL KEYWORD1 + ####################################### # Methods and Functions (KEYWORD2) ####################################### @@ -157,6 +163,28 @@ localPort KEYWORD2 stopAll KEYWORD2 stopAllExcept KEYWORD2 +#WiFiClientBearSSL +setInsecure KEYWORD2 +setKnownKey KEYWORD2 +setFingerprint KEYWORD2 +allowSelfSignedCerts KEYWORD2 +setTrustAnchors KEYWORD2 +setX509Time KEYWORD2 +setClientRSACert KEYWORD2 +setClientECCert KEYWORD2 +setBufferSizes KEYWORD2 +getLastSSLError KEYWORD2 +setCertStore KEYWORD2 +probeMaxFragmentLength KEYWORD2 + +#WiFiServerBearSSL +setRSACert KEYWORD2 +setECCert KEYWORD2 +setClientTrustAnchor KEYWORD2 + +#CertStoreBearSSL +initCertStore KEYWORD2 + ####################################### # Constants (LITERAL1) ####################################### diff --git a/libraries/ESP8266WiFi/src/BearSSLHelpers.cpp b/libraries/ESP8266WiFi/src/BearSSLHelpers.cpp new file mode 100644 index 000000000..38fcccd70 --- /dev/null +++ b/libraries/ESP8266WiFi/src/BearSSLHelpers.cpp @@ -0,0 +1,821 @@ +/* + WiFiClientBearSSL- SSL client/server for esp8266 using BearSSL libraries + - Mostly compatible with Arduino WiFi shield library and standard + WiFiClient/ServerSecure (except for certificate handling). + + Copyright (c) 2018 Earle F. Philhower, III + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include +#include +#include +#include +#include "BearSSLHelpers.h" + +namespace brssl { + // Code here is pulled from brssl sources, with the copyright and license + // shown below. I've rewritten things using C++ semantics and removed + // custom VEC_* calls (std::vector to the rescue) and adjusted things to + // allow for long-running operation (i.e. some memory issues when DERs + // passed into the decoders). Bugs are most likely my fault. + + // Original (c) message follows: + /* + Copyright (c) 2016 Thomas Pornin + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + */ + + class private_key { + public: + int key_type; /* BR_KEYTYPE_RSA or BR_KEYTYPE_EC */ + union { + br_rsa_private_key rsa; + br_ec_private_key ec; + } key; + }; + + class public_key { + public: + int key_type; /* BR_KEYTYPE_RSA or BR_KEYTYPE_EC */ + union { + br_rsa_public_key rsa; + br_ec_public_key ec; + } key; + }; + + class pem_object { + public: + char *name; + unsigned char *data; + size_t data_len; + }; + + // Forward definitions + void free_ta_contents(br_x509_trust_anchor *ta); + void free_public_key(public_key *pk); + void free_private_key(private_key *sk); + bool looks_like_DER(const unsigned char *buf, size_t len); + pem_object *decode_pem(const void *src, size_t len, size_t *num); + void free_pem_object_contents(pem_object *po); + + // Used as callback multiple places to append a string to a vector + static void byte_vector_append(void *ctx, const void *buff, size_t len) { + std::vector *vec = static_cast*>(ctx); + vec->reserve(vec->size() + len); // Allocate extra space all at once + for (size_t i = 0; i < len; i++) { + vec->push_back(((uint8_t*)buff)[i]); + } + } + + static bool certificate_to_trust_anchor_inner(br_x509_trust_anchor *ta, const br_x509_certificate *xc) { + std::unique_ptr dc(new br_x509_decoder_context); // auto-delete on exit + std::vector vdn; + br_x509_pkey *pk; + + // Clear everything in the Trust Anchor + memset(ta, 0, sizeof(*ta)); + + br_x509_decoder_init(dc.get(), byte_vector_append, (void*)&vdn, 0, 0); + br_x509_decoder_push(dc.get(), xc->data, xc->data_len); + pk = br_x509_decoder_get_pkey(dc.get()); + if (pk == nullptr) { + return false; // No key present, something broken in the cert! + } + + // Copy the raw certificate data + ta->dn.data = (uint8_t*)malloc(vdn.size()); + if (!ta->dn.data) { + return false; // OOM, but nothing yet allocated + } + memcpy(ta->dn.data, &vdn[0], vdn.size()); + ta->dn.len = vdn.size(); + ta->flags = 0; + if (br_x509_decoder_isCA(dc.get())) { + ta->flags |= BR_X509_TA_CA; + } + + // Extract the public key + switch (pk->key_type) { + case BR_KEYTYPE_RSA: + ta->pkey.key_type = BR_KEYTYPE_RSA; + ta->pkey.key.rsa.n = (uint8_t*)malloc(pk->key.rsa.nlen); + ta->pkey.key.rsa.e = (uint8_t*)malloc(pk->key.rsa.elen); + if ((ta->pkey.key.rsa.n == nullptr) || (ta->pkey.key.rsa.e == nullptr)) { + free_ta_contents(ta); // OOM, so clean up + return false; + } + memcpy(ta->pkey.key.rsa.n, pk->key.rsa.n, pk->key.rsa.nlen); + ta->pkey.key.rsa.nlen = pk->key.rsa.nlen; + memcpy(ta->pkey.key.rsa.e, pk->key.rsa.e, pk->key.rsa.elen); + ta->pkey.key.rsa.elen = pk->key.rsa.elen; + return true; + case BR_KEYTYPE_EC: + ta->pkey.key_type = BR_KEYTYPE_EC; + ta->pkey.key.ec.curve = pk->key.ec.curve; + ta->pkey.key.ec.q = (uint8_t*)malloc(pk->key.ec.qlen); + if (ta->pkey.key.ec.q == nullptr) { + free_ta_contents(ta); // OOM, so clean up + return false; + } + memcpy(ta->pkey.key.ec.q, pk->key.ec.q, pk->key.ec.qlen); + ta->pkey.key.ec.qlen = pk->key.ec.qlen; + return true; + default: + free_ta_contents(ta); // Unknown key type + return false; + } + + // Should never get here, if so there was an unknown error + return false; + } + + br_x509_trust_anchor *certificate_to_trust_anchor(const br_x509_certificate *xc) { + br_x509_trust_anchor *ta = (br_x509_trust_anchor*)malloc(sizeof(br_x509_trust_anchor)); + if (!ta) { + return nullptr; + } + + if (!certificate_to_trust_anchor_inner(ta, xc)) { + free(ta); + return nullptr; + } + return ta; + } + + void free_ta_contents(br_x509_trust_anchor *ta) { + if (ta) { + free(ta->dn.data); + if (ta->pkey.key_type == BR_KEYTYPE_RSA) { + free(ta->pkey.key.rsa.n); + free(ta->pkey.key.rsa.e); + } else if (ta->pkey.key_type == BR_KEYTYPE_EC) { + free(ta->pkey.key.ec.q); + } + memset(ta, 0, sizeof(*ta)); + } + } + + // Checks if a bitstream looks like a valid DER(binary) encoding. + // Basically tries to verify the length of all included segments + // matches the length of the input buffer. Does not actually + // validate any contents. + bool looks_like_DER(const unsigned char *buff, size_t len) { + if (len < 2) { + return false; + } + if (pgm_read_byte(buff++) != 0x30) { + return false; + } + int fb = pgm_read_byte(buff++); + len -= 2; + if (fb < 0x80) { + return (size_t)fb == len; + } else if (fb == 0x80) { + return false; + } else { + fb -= 0x80; + if (len < (size_t)fb + 2) { + return false; + } + len -= (size_t)fb; + size_t dlen = 0; + while (fb -- > 0) { + if (dlen > (len >> 8)) { + return false; + } + dlen = (dlen << 8) + (size_t)pgm_read_byte(buff++); + } + return dlen == len; + } + } + + void free_pem_object_contents(pem_object *po) { + if (po) { + free(po->name); + free(po->data); + } + } + + // Converts a PEM (~=base64) source into a set of DER-encoded binary blobs. + // Each blob is named by the ---- BEGIN xxx ---- field, and multiple + // blobs may be returned. + pem_object *decode_pem(const void *src, size_t len, size_t *num) { + std::vector pem_list; + std::unique_ptr pc(new br_pem_decoder_context); // auto-delete on exit + if (!pc.get()) { + return nullptr; + } + pem_object po, *pos; + const unsigned char *buff; + std::vector bv; + + *num = 0; + br_pem_decoder_init(pc.get()); + buff = (const unsigned char *)src; + po.name = nullptr; + po.data = nullptr; + po.data_len = 0; + bool inobj = false; + bool extra_nl = true; + + while (len > 0) { + size_t tlen; + + tlen = br_pem_decoder_push(pc.get(), buff, len); + buff += tlen; + len -= tlen; + switch (br_pem_decoder_event(pc.get())) { + case BR_PEM_BEGIN_OBJ: + po.name = strdup(br_pem_decoder_name(pc.get())); + br_pem_decoder_setdest(pc.get(), byte_vector_append, &bv); + inobj = true; + break; + + case BR_PEM_END_OBJ: + if (inobj) { + // Stick data into the vector + po.data = (uint8_t*)malloc(bv.size()); + if (po.data) { + memcpy(po.data, &bv[0], bv.size()); + po.data_len = bv.size(); + pem_list.push_back(po); + } + // Clean up state for next blob processing + bv.clear(); + po.name = nullptr; + po.data = nullptr; + po.data_len = 0; + inobj = false; + } + break; + + case BR_PEM_ERROR: + free(po.name); + for (size_t i = 0; i < pem_list.size(); i++) { + free_pem_object_contents(&pem_list[i]); + } + return nullptr; + + default: + // Do nothing here, the parser is still working on things + break; + } + + if (len == 0 && extra_nl) { + extra_nl = false; + buff = (const unsigned char *)"\n"; + len = 1; + } + } + + if (inobj) { + free(po.name); + for (size_t i = 0; i < pem_list.size(); i++) { + free_pem_object_contents(&pem_list[i]); + } + return nullptr; + } + + pos = (pem_object*)malloc((1 + pem_list.size()) * sizeof(*pos)); + if (pos) { + *num = pem_list.size(); + pem_list.push_back(po); // Null-terminate list + memcpy(pos, &pem_list[0], pem_list.size() * sizeof(*pos)); + } + return pos; + } + + // Parse out DER or PEM encoded certificates from a binary buffer, + // potentially stored in PROGMEM. + br_x509_certificate *read_certificates(const char *buff, size_t len, size_t *num) { + std::vector cert_list; + pem_object *pos; + size_t u, num_pos; + br_x509_certificate *xcs; + br_x509_certificate dummy; + + *num = 0; + + if (looks_like_DER((const unsigned char *)buff, len)) { + xcs = (br_x509_certificate*)malloc(2 * sizeof(*xcs)); + if (!xcs) { + return nullptr; + } + xcs[0].data = (uint8_t*)malloc(len); + if (!xcs[0].data) { + free(xcs); + return nullptr; + } + memcpy_P(xcs[0].data, buff, len); + xcs[0].data_len = len; + xcs[1].data = nullptr; + xcs[1].data_len = 0; + *num = 1; + return xcs; + } + + pos = decode_pem(buff, len, &num_pos); + if (!pos) { + return nullptr; + } + for (u = 0; u < num_pos; u ++) { + if (!strcmp_P(pos[u].name, PSTR("CERTIFICATE")) || !strcmp_P(pos[u].name, PSTR("X509 CERTIFICATE"))) { + br_x509_certificate xc; + xc.data = pos[u].data; + xc.data_len = pos[u].data_len; + pos[u].data = nullptr; // Don't free the data we moved to the xc vector! + cert_list.push_back(xc); + } + } + for (u = 0; u < num_pos; u ++) { + free_pem_object_contents(&pos[u]); + } + free(pos); + + if (cert_list.size() == 0) { + return nullptr; + } + *num = cert_list.size(); + dummy.data = nullptr; + dummy.data_len = 0; + cert_list.push_back(dummy); + xcs = (br_x509_certificate*)malloc(cert_list.size() * sizeof(*xcs)); + if (!xcs) { + for (size_t i = 0; i < cert_list.size(); i++) { + free(cert_list[i].data); // Clean up any captured data blobs + } + return nullptr; + } + memcpy(xcs, &cert_list[0], cert_list.size() * sizeof(br_x509_certificate)); + // XCS now has [].data pointing to the previously allocated blobs, so don't + // want to free anything in cert_list[]. + return xcs; + } + + void free_certificates(br_x509_certificate *certs, size_t num) { + if (certs) { + for (size_t u = 0; u < num; u ++) { + free(certs[u].data); + } + free(certs); + } + } + + static public_key *decode_public_key(const unsigned char *buff, size_t len) { + std::unique_ptr dc(new br_pkey_decoder_context); // auto-delete on exit + if (!dc.get()) { + return nullptr; + } + + public_key *pk = nullptr; + + br_pkey_decoder_init(dc.get()); + br_pkey_decoder_push(dc.get(), buff, len); + int err = br_pkey_decoder_last_error(dc.get()); + if (err != 0) { + return nullptr; + } + + const br_rsa_public_key *rk = nullptr; + const br_ec_public_key *ek = nullptr; + switch (br_pkey_decoder_key_type(dc.get())) { + case BR_KEYTYPE_RSA: + rk = br_pkey_decoder_get_rsa(dc.get()); + pk = (public_key*)malloc(sizeof * pk); + if (!pk) { + return nullptr; + } + pk->key_type = BR_KEYTYPE_RSA; + pk->key.rsa.n = (uint8_t*)malloc(rk->nlen); + pk->key.rsa.e = (uint8_t*)malloc(rk->elen); + if (!pk->key.rsa.n || !pk->key.rsa.e) { + free(pk->key.rsa.n); + free(pk->key.rsa.e); + free(pk); + return nullptr; + } + memcpy(pk->key.rsa.n, rk->n, rk->nlen); + pk->key.rsa.nlen = rk->nlen; + memcpy(pk->key.rsa.e, rk->e, rk->elen); + pk->key.rsa.elen = rk->elen; + return pk; + + case BR_KEYTYPE_EC: + ek = br_pkey_decoder_get_ec(dc.get()); + pk = (public_key*)malloc(sizeof * pk); + if (!pk) { + return nullptr; + } + pk->key_type = BR_KEYTYPE_EC; + pk->key.ec.q = (uint8_t*)malloc(ek->qlen); + if (!pk->key.ec.q) { + free(pk); + return nullptr; + } + memcpy(pk->key.ec.q, ek->q, ek->qlen); + pk->key.ec.qlen = ek->qlen; + return pk; + + default: + return nullptr; + } + } + + void free_public_key(public_key *pk) { + if (pk) { + if (pk->key_type == BR_KEYTYPE_RSA) { + free(pk->key.rsa.n); + free(pk->key.rsa.e); + } else if (pk->key_type == BR_KEYTYPE_EC) { + free(pk->key.ec.q); + } + free(pk); + } + } + + static private_key *decode_private_key(const unsigned char *buff, size_t len) { + std::unique_ptr dc(new br_skey_decoder_context); // auto-delete on exit + if (!dc.get()) { + return nullptr; + } + + private_key *sk = nullptr; + + br_skey_decoder_init(dc.get()); + br_skey_decoder_push(dc.get(), buff, len); + int err = br_skey_decoder_last_error(dc.get()); + if (err != 0) { + return nullptr; + } + + const br_rsa_private_key *rk = nullptr; + const br_ec_private_key *ek = nullptr; + switch (br_skey_decoder_key_type(dc.get())) { + case BR_KEYTYPE_RSA: + rk = br_skey_decoder_get_rsa(dc.get()); + sk = (private_key*)malloc(sizeof * sk); + if (!sk) { + return nullptr; + } + sk->key_type = BR_KEYTYPE_RSA; + sk->key.rsa.p = (uint8_t*)malloc(rk->plen); + sk->key.rsa.q = (uint8_t*)malloc(rk->qlen); + sk->key.rsa.dp = (uint8_t*)malloc(rk->dplen); + sk->key.rsa.dq = (uint8_t*)malloc(rk->dqlen); + sk->key.rsa.iq = (uint8_t*)malloc(rk->iqlen); + if (!sk->key.rsa.p || !sk->key.rsa.q || !sk->key.rsa.dp || !sk->key.rsa.dq || !sk->key.rsa.iq) { + free_private_key(sk); + return nullptr; + } + sk->key.rsa.n_bitlen = rk->n_bitlen; + memcpy(sk->key.rsa.p, rk->p, rk->plen); + sk->key.rsa.plen = rk->plen; + memcpy(sk->key.rsa.q, rk->q, rk->qlen); + sk->key.rsa.qlen = rk->qlen; + memcpy(sk->key.rsa.dp, rk->dp, rk->dplen); + sk->key.rsa.dplen = rk->dplen; + memcpy(sk->key.rsa.dq, rk->dq, rk->dqlen); + sk->key.rsa.dqlen = rk->dqlen; + memcpy(sk->key.rsa.iq, rk->iq, rk->iqlen); + sk->key.rsa.iqlen = rk->iqlen; + return sk; + + case BR_KEYTYPE_EC: + ek = br_skey_decoder_get_ec(dc.get()); + sk = (private_key*)malloc(sizeof * sk); + sk->key_type = BR_KEYTYPE_EC; + sk->key.ec.curve = ek->curve; + sk->key.ec.x = (uint8_t*)malloc(ek->xlen); + if (!sk->key.ec.x) { + free_private_key(sk); + return nullptr; + } + memcpy(sk->key.ec.x, ek->x, ek->xlen); + sk->key.ec.xlen = ek->xlen; + return sk; + + default: + return nullptr; + } + } + + void free_private_key(private_key *sk) { + if (sk) { + switch (sk->key_type) { + case BR_KEYTYPE_RSA: + free(sk->key.rsa.p); + free(sk->key.rsa.q); + free(sk->key.rsa.dp); + free(sk->key.rsa.dq); + free(sk->key.rsa.iq); + break; + case BR_KEYTYPE_EC: + free(sk->key.ec.x); + break; + default: + // Could be an uninitted key, no sub elements to free + break; + } + free(sk); + } + } + + void free_pem_object(pem_object *pos) { + if (pos != nullptr) { + for (size_t u = 0; pos[u].name; u ++) { + free_pem_object_contents(&pos[u]); + } + free(pos); + } + } + + private_key *read_private_key(const char *buff, size_t len) { + private_key *sk = nullptr; + pem_object *pos = nullptr; + + if (looks_like_DER((const unsigned char*)buff, len)) { + sk = decode_private_key((const unsigned char*)buff, len); + return sk; + } + + size_t num; + pos = decode_pem(buff, len, &num); + if (pos == nullptr) { + return nullptr; // PEM decode error + } + for (size_t u = 0; pos[u].name; u ++) { + const char *name = pos[u].name; + if (!strcmp_P(name, PSTR("RSA PRIVATE KEY")) || !strcmp_P(name, PSTR("EC PRIVATE KEY")) || !strcmp_P(name, PSTR("PRIVATE KEY"))) { + sk = decode_private_key(pos[u].data, pos[u].data_len); + free_pem_object(pos); + return sk; + } + } + // If we hit here, no match + free_pem_object(pos); + return nullptr; + } + + public_key *read_public_key(const char *buff, size_t len) { + public_key *pk = nullptr; + pem_object *pos = nullptr; + + if (looks_like_DER((const unsigned char*)buff, len)) { + pk = decode_public_key((const unsigned char*)buff, len); + return pk; + } + size_t num; + pos = decode_pem(buff, len, &num); + if (pos == nullptr) { + return nullptr; // PEM decode error + } + for (size_t u = 0; pos[u].name; u ++) { + const char *name = pos[u].name; + if (!strcmp_P(name, PSTR("RSA PUBLIC KEY")) || !strcmp_P(name, PSTR("EC PUBLIC KEY")) || !strcmp_P(name, PSTR("PUBLIC KEY"))) { + pk = decode_public_key(pos[u].data, pos[u].data_len); + free_pem_object(pos); + return pk; + } + } + + // We hit here == no key found + free_pem_object(pos); + return pk; + } + +}; + + +// ----- Public Key ----- + +BearSSLPublicKey::BearSSLPublicKey() { + _key = nullptr; +} + +BearSSLPublicKey::BearSSLPublicKey(const char *pemKey) { + _key = nullptr; + parse(pemKey); +} + +BearSSLPublicKey::BearSSLPublicKey(const uint8_t *derKey, size_t derLen) { + _key = nullptr; + parse(derKey, derLen); +} + +BearSSLPublicKey::~BearSSLPublicKey() { + if (_key) { + brssl::free_public_key(_key); + } +} + +bool BearSSLPublicKey::parse(const char *pemKey) { + return parse((const uint8_t *)pemKey, strlen_P(pemKey)); +} + +bool BearSSLPublicKey::parse(const uint8_t *derKey, size_t derLen) { + if (_key) { + brssl::free_public_key(_key); + _key = nullptr; + } + _key = brssl::read_public_key((const char *)derKey, derLen); + return _key ? true : false; +} + +bool BearSSLPublicKey::isRSA() const { + if (!_key || _key->key_type != BR_KEYTYPE_RSA) { + return false; + } + return true; +} + +bool BearSSLPublicKey::isEC() const { + if (!_key || _key->key_type != BR_KEYTYPE_EC) { + return false; + } + return true; +} + +const br_rsa_public_key *BearSSLPublicKey::getRSA() const { + if (!_key || _key->key_type != BR_KEYTYPE_RSA) { + return nullptr; + } + return &_key->key.rsa; +} + +const br_ec_public_key *BearSSLPublicKey::getEC() const { + if (!_key || _key->key_type != BR_KEYTYPE_EC) { + return nullptr; + } + return &_key->key.ec; +} + +// ----- Private Key ----- + +BearSSLPrivateKey::BearSSLPrivateKey() { + _key = nullptr; +} + +BearSSLPrivateKey::BearSSLPrivateKey(const char *pemKey) { + _key = nullptr; + parse(pemKey); +} + +BearSSLPrivateKey::BearSSLPrivateKey(const uint8_t *derKey, size_t derLen) { + _key = nullptr; + parse(derKey, derLen); +} + +BearSSLPrivateKey::~BearSSLPrivateKey() { + if (_key) { + brssl::free_private_key(_key); + } +} + +bool BearSSLPrivateKey::parse(const char *pemKey) { + return parse((const uint8_t *)pemKey, strlen_P(pemKey)); +} + +bool BearSSLPrivateKey::parse(const uint8_t *derKey, size_t derLen) { + if (_key) { + brssl::free_private_key(_key); + _key = nullptr; + } + _key = brssl::read_private_key((const char *)derKey, derLen); + return _key ? true : false; +} + +bool BearSSLPrivateKey::isRSA() const { + if (!_key || _key->key_type != BR_KEYTYPE_RSA) { + return false; + } + return true; +} + +bool BearSSLPrivateKey::isEC() const { + if (!_key || _key->key_type != BR_KEYTYPE_EC) { + return false; + } + return true; +} + +const br_rsa_private_key *BearSSLPrivateKey::getRSA() const { + if (!_key || _key->key_type != BR_KEYTYPE_RSA) { + return nullptr; + } + return &_key->key.rsa; +} + +const br_ec_private_key *BearSSLPrivateKey::getEC() const { + if (!_key || _key->key_type != BR_KEYTYPE_EC) { + return nullptr; + } + return &_key->key.ec; +} + +BearSSLX509List::BearSSLX509List() { + _count = 0; + _cert = nullptr; + _ta = nullptr; +} + +BearSSLX509List::BearSSLX509List(const char *pemCert) { + _count = 0; + _cert = nullptr; + _ta = nullptr; + append(pemCert); +} + + +BearSSLX509List::BearSSLX509List(const uint8_t *derCert, size_t derLen) { + _count = 0; + _cert = nullptr; + _ta = nullptr; + append(derCert, derLen); +} + +BearSSLX509List::~BearSSLX509List() { + brssl::free_certificates(_cert, _count); // also frees cert + for (size_t i = 0; i < _count; i++) { + brssl::free_ta_contents(&_ta[i]); + } + free(_ta); +} + +bool BearSSLX509List::append(const char *pemCert) { + return append((const uint8_t *)pemCert, strlen_P(pemCert)); +} + +bool BearSSLX509List::append(const uint8_t *derCert, size_t derLen) { + size_t numCerts; + br_x509_certificate *newCerts = brssl::read_certificates((const char *)derCert, derLen, &numCerts); + if (!newCerts) { + return false; + } + + // Add in the certificates + br_x509_certificate *saveCert = _cert; + _cert = (br_x509_certificate*)realloc(_cert, (numCerts + _count) * sizeof(br_x509_certificate)); + if (!_cert) { + free(newCerts); + _cert = saveCert; + return false; + } + memcpy(&_cert[_count], newCerts, numCerts * sizeof(br_x509_certificate)); + free(newCerts); + + // Build TAs for each certificate + br_x509_trust_anchor *saveTa = _ta; + _ta = (br_x509_trust_anchor*)realloc(_ta, (numCerts + _count) * sizeof(br_x509_trust_anchor)); + if (!_ta) { + _ta = saveTa; + return false; + } + for (size_t i = 0; i < numCerts; i++) { + br_x509_trust_anchor *newTa = brssl::certificate_to_trust_anchor(&_cert[_count + i]); + if (newTa) { + _ta[_count + i ] = *newTa; + free(newTa); + } else { + return false; // OOM + } + } + _count += numCerts; + + return true; +} diff --git a/libraries/ESP8266WiFi/src/BearSSLHelpers.h b/libraries/ESP8266WiFi/src/BearSSLHelpers.h new file mode 100644 index 000000000..55b4970a4 --- /dev/null +++ b/libraries/ESP8266WiFi/src/BearSSLHelpers.h @@ -0,0 +1,122 @@ +/* + WiFiClientBearSSL- SSL client/server for esp8266 using BearSSL libraries + - Mostly compatible with Arduino WiFi shield library and standard + WiFiClient/ServerSecure (except for certificate handling). + + Copyright (c) 2018 Earle F. Philhower, III + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _BEARSSLHELPERS_H +#define _BEARSSLHELPERS_H + +#include + +// Internal opaque structures, not needed by user applications +namespace brssl { + class public_key; + class private_key; +}; + +// Holds either a single public RSA or EC key for use when BearSSL wants a pubkey. +// Copies all associated data so no need to keep input PEM/DER keys. +// All inputs can be either in RAM or PROGMEM. +class BearSSLPublicKey { + public: + BearSSLPublicKey(); + BearSSLPublicKey(const char *pemKey); + BearSSLPublicKey(const uint8_t *derKey, size_t derLen); + ~BearSSLPublicKey(); + + bool parse(const char *pemKey); + bool parse(const uint8_t *derKey, size_t derLen); + + // Accessors for internal use, not needed by apps + bool isRSA() const; + bool isEC() const; + const br_rsa_public_key *getRSA() const; + const br_ec_public_key *getEC() const; + + // Disable the copy constructor, we're pointer based + BearSSLPublicKey(const BearSSLPublicKey& that) = delete; + + private: + brssl::public_key *_key; +}; + +// Holds either a single private RSA or EC key for use when BearSSL wants a secretkey. +// Copies all associated data so no need to keep input PEM/DER keys. +// All inputs can be either in RAM or PROGMEM. +class BearSSLPrivateKey { + public: + BearSSLPrivateKey(); + BearSSLPrivateKey(const char *pemKey); + BearSSLPrivateKey(const uint8_t *derKey, size_t derLen); + ~BearSSLPrivateKey(); + + bool parse(const char *pemKey); + bool parse(const uint8_t *derKey, size_t derLen); + + // Accessors for internal use, not needed by apps + bool isRSA() const; + bool isEC() const; + const br_rsa_private_key *getRSA() const; + const br_ec_private_key *getEC() const; + + // Disable the copy constructor, we're pointer based + BearSSLPrivateKey(const BearSSLPrivateKey& that) = delete; + + private: + brssl::private_key *_key; +}; + +// Holds one or more X.509 certificates and associated trust anchors for +// use whenever BearSSL needs a cert or TA. May want to have multiple +// certs for things like a series of trusted CAs (but check the CertStore class +// for a more memory efficient way). +// Copies all associated data so no need to keep input PEM/DER certs. +// All inputs can be either in RAM or PROGMEM. +class BearSSLX509List { + public: + BearSSLX509List(); + BearSSLX509List(const char *pemCert); + BearSSLX509List(const uint8_t *derCert, size_t derLen); + ~BearSSLX509List(); + + bool append(const char *pemCert); + bool append(const uint8_t *derCert, size_t derLen); + + // Accessors + size_t getCount() const { + return _count; + } + const br_x509_certificate *getX509Certs() const { + return _cert; + } + const br_x509_trust_anchor *getTrustAnchors() const { + return _ta; + } + + // Disable the copy constructor, we're pointer based + BearSSLX509List(const BearSSLX509List& that) = delete; + + private: + size_t _count; + br_x509_certificate *_cert; + br_x509_trust_anchor *_ta; +}; + +#endif diff --git a/libraries/ESP8266WiFi/src/CertStoreBearSSL.cpp b/libraries/ESP8266WiFi/src/CertStoreBearSSL.cpp new file mode 100644 index 000000000..b688f4c67 --- /dev/null +++ b/libraries/ESP8266WiFi/src/CertStoreBearSSL.cpp @@ -0,0 +1,141 @@ +/* + CertStoreBearSSL.cpp - Library for Arduino ESP8266 + Copyright (c) 2018 Earle F. Philhower, III + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "CertStoreBearSSL.h" +#include + +extern "C" { + // Callbacks for the x509 decoder + static void dn_append(void *ctx, const void *buf, size_t len) { + br_sha256_context *sha1 = (br_sha256_context*)ctx; + br_sha256_update(sha1, buf, len); + } + static void dn_append_null(void *ctx, const void *buf, size_t len) { + (void) ctx; + (void) buf; + (void) len; + } +} + +CertStoreBearSSL::CertInfo CertStoreBearSSL::preprocessCert(const char *fname, const void *raw, size_t sz) { + CertStoreBearSSL::CertInfo ci; + + // Clear the CertInfo + memset(&ci, 0, sizeof(ci)); + + // Process it using SHA256, same as the hashed_dn + br_x509_decoder_context *ctx = new br_x509_decoder_context; + br_sha256_context *sha256 = new br_sha256_context; + br_sha256_init(sha256); + br_x509_decoder_init(ctx, dn_append, sha256, nullptr, nullptr); + br_x509_decoder_push(ctx, (const void*)raw, sz); + + // Copy result to structure + br_sha256_out(sha256, &ci.sha256); + strcpy(ci.fname, fname); + + // Clean up allocated memory + delete sha256; + delete ctx; + + // Return result + return ci; +} + +br_x509_trust_anchor *CertStoreBearSSL::makeTrustAnchor(const void *der, size_t der_len, const CertInfo *ci) { + // std::unique_ptr will free dc when we exit scope, automatically + std::unique_ptr dc(new br_x509_decoder_context); + br_x509_decoder_init(dc.get(), dn_append_null, nullptr, nullptr, nullptr); + br_x509_decoder_push(dc.get(), der, der_len); + br_x509_pkey *pk = br_x509_decoder_get_pkey(dc.get()); + if (!pk) { + return nullptr; + } + + br_x509_trust_anchor *ta = (br_x509_trust_anchor*)malloc(sizeof(br_x509_trust_anchor)); + if (!ta) { + return nullptr; + } + memset(ta, 0, sizeof(*ta)); + ta->dn.data = (uint8_t*)malloc(sizeof(ci->sha256)); + if (!ta->dn.data) { + free(ta); + return nullptr; + } + memcpy(ta->dn.data, ci->sha256, sizeof(ci->sha256)); + ta->dn.len = sizeof(ci->sha256); + + ta->flags = 0; + if (br_x509_decoder_isCA(dc.get())) { + ta->flags |= BR_X509_TA_CA; + } + + switch (pk->key_type) { + case BR_KEYTYPE_RSA: + ta->pkey.key_type = BR_KEYTYPE_RSA; + ta->pkey.key.rsa.n = (uint8_t*)malloc(pk->key.rsa.nlen); + if (!ta->pkey.key.rsa.n) { + free(ta->dn.data); + free(ta); + return nullptr; + } + memcpy(ta->pkey.key.rsa.n, pk->key.rsa.n, pk->key.rsa.nlen); + ta->pkey.key.rsa.nlen = pk->key.rsa.nlen; + ta->pkey.key.rsa.e = (uint8_t*)malloc(pk->key.rsa.elen); + if (!ta->pkey.key.rsa.e) { + free(ta->pkey.key.rsa.n); + free(ta->dn.data); + free(ta); + return nullptr; + } + memcpy(ta->pkey.key.rsa.e, pk->key.rsa.e, pk->key.rsa.elen); + ta->pkey.key.rsa.elen = pk->key.rsa.elen; + return ta; + case BR_KEYTYPE_EC: + ta->pkey.key_type = BR_KEYTYPE_EC; + ta->pkey.key.ec.curve = pk->key.ec.curve; + ta->pkey.key.ec.q = (uint8_t*)malloc(pk->key.ec.qlen); + if (!ta->pkey.key.ec.q) { + free(ta->dn.data); + free(ta); + return nullptr; + } + memcpy(ta->pkey.key.ec.q, pk->key.ec.q, pk->key.ec.qlen); + ta->pkey.key.ec.qlen = pk->key.ec.qlen; + return ta; + default: + free(ta->dn.data); + free(ta); + return nullptr; + } +} + +void CertStoreBearSSL::freeTrustAnchor(const br_x509_trust_anchor *ta) { + switch (ta->pkey.key_type) { + case BR_KEYTYPE_RSA: + free(ta->pkey.key.rsa.e); + free(ta->pkey.key.rsa.n); + break; + case BR_KEYTYPE_EC: + free(ta->pkey.key.ec.q); + break; + } + free(ta->dn.data); + free((void*)ta); +} diff --git a/libraries/ESP8266WiFi/src/CertStoreBearSSL.h b/libraries/ESP8266WiFi/src/CertStoreBearSSL.h new file mode 100644 index 000000000..bf669faed --- /dev/null +++ b/libraries/ESP8266WiFi/src/CertStoreBearSSL.h @@ -0,0 +1,61 @@ +/* + CertStoreBearSSL.h - Library for Arduino ESP8266 + Copyright (c) 2018 Earle F. Philhower, III + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _CERTSTORE_BEARSSL_H +#define _CERTSTORE_BEARSSL_H + +#include +#include + +// Virtual base class for the certificate stores, which allow use +// of a large set of certificates stored on SPIFFS of SD card to +// be dynamically used when validating a X509 certificate + +// Templates for child classes not possible due to the difference in SD +// and FS in terms of directory parsing and interating. Dir doesn't +// exist in SD, everything is a file (which might support get-next-entry() +// or not). + +// This class should not be instantiated directly, only via its children. +class CertStoreBearSSL { + public: + CertStoreBearSSL() {} + virtual ~CertStoreBearSSL() {} + + // Preprocess the certs from the flash, returns number parsed + virtual int initCertStore(const char *dir) = 0; + + // Installs the cert store into the X509 decoder (normally via static function callbacks) + virtual void installCertStore(br_x509_minimal_context *ctx) = 0; + + protected: + // The binary format of the pre-computed file + class CertInfo { + public: + uint8_t sha256[32]; + char fname[64]; + }; + + CertInfo preprocessCert(const char *fname, const void *raw, size_t sz); + static br_x509_trust_anchor *makeTrustAnchor(const void *der, size_t der_len, const CertInfo *ci); + static void freeTrustAnchor(const br_x509_trust_anchor *ta); +}; + +#endif + diff --git a/libraries/ESP8266WiFi/src/CertStoreSDBearSSL.cpp b/libraries/ESP8266WiFi/src/CertStoreSDBearSSL.cpp new file mode 100644 index 000000000..7ec487370 --- /dev/null +++ b/libraries/ESP8266WiFi/src/CertStoreSDBearSSL.cpp @@ -0,0 +1,141 @@ +/* + CertStoreSDBearSSL.cpp - Library for Arduino ESP8266 + Copyright (c) 2018 Earle F. Philhower, III + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include "CertStoreSDBearSSL.h" + +CertStoreSDBearSSL::CertStoreSDBearSSL() : CertStoreBearSSL() { + path = ""; +} + +CertStoreSDBearSSL::~CertStoreSDBearSSL() { +} + +CertStoreBearSSL::CertInfo CertStoreSDBearSSL::preprocessCert(File *f) { + CertStoreBearSSL::CertInfo ci; + memset(&ci, 0, sizeof(ci)); + + // Load the DER into RAM temporarially + if (!f) { + return ci; + } + + int sz = f->size(); + uint8_t *buf = new uint8_t[sz]; + if (!buf) { + return ci; + } + f->read(buf, sz); + + ci = CertStoreBearSSL::preprocessCert(f->name(), buf, sz); + + delete buf; + + return ci; +} + +int CertStoreSDBearSSL::initCertStore(const char *subdir) { + int count = 0; + + // We want path to have a leading slash and a trailing one + path = subdir; + if (path[0] != '/') { + path = "/" + path; + } + if (!path.endsWith("/")) { + path += "/"; + } + + String tblName = path + "ca_tbl.bin"; + + File tbl = SD.open(tblName, FILE_WRITE); + if (!tbl) { + return 0; + } + File d = SD.open(path); + while (true) { + File nextFile = d.openNextFile(); + if (!nextFile) { + break; + } + if (!strstr(nextFile.name(), ".der")) { + continue; + } + CertStoreBearSSL::CertInfo ci = preprocessCert(&nextFile); + nextFile.close(); + tbl.write((uint8_t*)&ci, sizeof(ci)); + count++; + } + tbl.close(); + return count; +} + +void CertStoreSDBearSSL::installCertStore(br_x509_minimal_context *ctx) { + br_x509_minimal_set_dynamic(ctx, (void*)this, findHashedTA, freeHashedTA); +} + +const br_x509_trust_anchor *CertStoreSDBearSSL::findHashedTA(void *ctx, void *hashed_dn, size_t len) { + CertStoreSDBearSSL *cs = static_cast(ctx); + CertInfo ci; + + String tblName = cs->path + "ca_tbl.bin"; + + if (len != sizeof(ci.sha256) || !SD.exists(tblName)) { + return nullptr; + } + + File f = SD.open(tblName, FILE_READ); + if (!f) { + return nullptr; + } + while (f.read((uint8_t*)&ci, sizeof(ci)) == sizeof(ci)) { + if (!memcmp(ci.sha256, hashed_dn, sizeof(ci.sha256))) { + // This could be the one! + f.close(); + File d = SD.open(ci.fname, FILE_READ); + if (!d) { + return nullptr; + } + size_t der_len = d.size(); + uint8_t *der = (uint8_t*)malloc(der_len); + if (!der) { + d.close(); + return nullptr; + } + if (d.read(der, der_len) != (int)der_len) { + d.close(); + free(der); + return nullptr; + } + d.close(); + + br_x509_trust_anchor *ta = CertStoreBearSSL::makeTrustAnchor(der, der_len, &ci); + free(der); + + return ta; + } + } + f.close(); + return nullptr; +} + +void CertStoreSDBearSSL::freeHashedTA(void *ctx, const br_x509_trust_anchor *ta) { + (void) ctx; // not needed + CertStoreBearSSL::freeTrustAnchor(ta); +} diff --git a/libraries/ESP8266WiFi/src/CertStoreSDBearSSL.h b/libraries/ESP8266WiFi/src/CertStoreSDBearSSL.h new file mode 100644 index 000000000..7b3d462ea --- /dev/null +++ b/libraries/ESP8266WiFi/src/CertStoreSDBearSSL.h @@ -0,0 +1,47 @@ +/* + CertStoreSDBearSSL.h - Library for Arduino ESP8266 + Copyright (c) 2018 Earle F. Philhower, III + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _CERTSTORESD_BEARSSL_H +#define _CERTSTORESD_BEARSSL_H + +#include "CertStoreBearSSL.h" + +class File; + +// SD cert store can be in a subdirectory as there are fewer limits +// Note that SD.begin() MUST be called before doing initCertStore because +// there are different options for the CS and other pins you need to +// specify it in your own code. +class CertStoreSDBearSSL : public CertStoreBearSSL { + public: + CertStoreSDBearSSL(); + virtual ~CertStoreSDBearSSL(); + + virtual int initCertStore(const char *dir = "/") override; + virtual void installCertStore(br_x509_minimal_context *ctx) override; + + private: + String path; + CertInfo preprocessCert(File *f); + // These need to be static as they are callbacks from BearSSL C code + static const br_x509_trust_anchor *findHashedTA(void *ctx, void *hashed_dn, size_t len); + static void freeHashedTA(void *ctx, const br_x509_trust_anchor *ta); +}; + +#endif diff --git a/libraries/ESP8266WiFi/src/CertStoreSPIFFSBearSSL.cpp b/libraries/ESP8266WiFi/src/CertStoreSPIFFSBearSSL.cpp new file mode 100644 index 000000000..00874d8f7 --- /dev/null +++ b/libraries/ESP8266WiFi/src/CertStoreSPIFFSBearSSL.cpp @@ -0,0 +1,125 @@ +/* + CertStoreSPIFFSBearSSL.cpp - Library for Arduino ESP8266 + Copyright (c) 2018 Earle F. Philhower, III + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "CertStoreSPIFFSBearSSL.h" +#include + +CertStoreSPIFFSBearSSL::CertStoreSPIFFSBearSSL() : CertStoreBearSSL() { +} + +CertStoreSPIFFSBearSSL::~CertStoreSPIFFSBearSSL() { +} + +CertStoreBearSSL::CertInfo CertStoreSPIFFSBearSSL::preprocessCert(const char *fname) { + CertStoreBearSSL::CertInfo ci; + memset(&ci, 0, sizeof(ci)); + + // Load the DER into RAM temporarially + File f = SPIFFS.open(fname, "r"); + if (!f) { + return ci; + } + int sz = f.size(); + uint8_t *buf = new uint8_t[sz]; + if (!buf) { + f.close(); + return ci; + } + f.read(buf, sz); + f.close(); + + ci = CertStoreBearSSL::preprocessCert(fname, buf, sz); + + delete[] buf; + + return ci; +} + +int CertStoreSPIFFSBearSSL::initCertStore(const char *subdir) { + (void) subdir; // ignored prefix, not enough space in filenames + int count = 0; + SPIFFS.begin(); + File tbl = SPIFFS.open("/ca_tbl.bin", "w"); + if (!tbl) { + return 0; + } + Dir d = SPIFFS.openDir(""); + while (d.next()) { + if (!strstr(d.fileName().c_str(), ".der")) { + continue; + } + CertStoreBearSSL::CertInfo ci = preprocessCert(d.fileName().c_str()); + tbl.write((uint8_t*)&ci, sizeof(ci)); + count++; + } + tbl.close(); + return count; +} + +void CertStoreSPIFFSBearSSL::installCertStore(br_x509_minimal_context *ctx) { + br_x509_minimal_set_dynamic(ctx, /* no context needed */nullptr, findHashedTA, freeHashedTA); +} + +const br_x509_trust_anchor *CertStoreSPIFFSBearSSL::findHashedTA(void *ctx, void *hashed_dn, size_t len) { + (void) ctx; // not needed + CertInfo ci; + + if (len != sizeof(ci.sha256) || !SPIFFS.exists("/ca_tbl.bin")) { + return nullptr; + } + + File f = SPIFFS.open("/ca_tbl.bin", "r"); + if (!f) { + return nullptr; + } + while (f.read((uint8_t*)&ci, sizeof(ci)) == sizeof(ci)) { + if (!memcmp(ci.sha256, hashed_dn, sizeof(ci.sha256))) { + // This could be the one! + f.close(); + File d = SPIFFS.open(ci.fname, "r"); + if (!d) { + return nullptr; + } + size_t der_len = d.size(); + uint8_t *der = (uint8_t*)malloc(der_len); + if (!der) { + d.close(); + return nullptr; + } + if (d.read(der, der_len) != der_len) { + d.close(); + free(der); + return nullptr; + } + d.close(); + + br_x509_trust_anchor *ta = CertStoreBearSSL::makeTrustAnchor(der, der_len, &ci); + free(der); + + return ta; + } + } + f.close(); + return nullptr; +} + +void CertStoreSPIFFSBearSSL::freeHashedTA(void *ctx, const br_x509_trust_anchor *ta) { + (void) ctx; // not needed + CertStoreBearSSL::freeTrustAnchor(ta); +} diff --git a/libraries/ESP8266WiFi/src/CertStoreSPIFFSBearSSL.h b/libraries/ESP8266WiFi/src/CertStoreSPIFFSBearSSL.h new file mode 100644 index 000000000..8cbb3795d --- /dev/null +++ b/libraries/ESP8266WiFi/src/CertStoreSPIFFSBearSSL.h @@ -0,0 +1,43 @@ +/* + CertStoreSPIFFSBearSSL.h - Library for Arduino ESP8266 + Copyright (c) 2018 Earle F. Philhower, III + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _CERTSTORESPIFFS_BEARSSL_H +#define _CERTSTORESPIFFS_BEARSSL_H + +#include "CertStoreBearSSL.h" +#include + +// SPIFFS cert stores stored in root directory due to filename length limits +class CertStoreSPIFFSBearSSL : public CertStoreBearSSL { + public: + CertStoreSPIFFSBearSSL(); + virtual ~CertStoreSPIFFSBearSSL(); + + virtual int initCertStore(const char *dir = "") override; // ignores dir + virtual void installCertStore(br_x509_minimal_context *ctx) override; + + private: + CertInfo preprocessCert(const char *fname); + // These need to be static as they are callbacks from BearSSL C code + static const br_x509_trust_anchor *findHashedTA(void *ctx, void *hashed_dn, size_t len); + static void freeHashedTA(void *ctx, const br_x509_trust_anchor *ta); +}; + +#endif + diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFi.h b/libraries/ESP8266WiFi/src/ESP8266WiFi.h index 9d6e7f994..2ff5208a9 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFi.h +++ b/libraries/ESP8266WiFi/src/ESP8266WiFi.h @@ -40,6 +40,8 @@ extern "C" { #include "WiFiServer.h" #include "WiFiServerSecure.h" #include "WiFiClientSecure.h" +#include "BearSSLHelpers.h" +#include "CertStoreBearSSL.h" #ifdef DEBUG_ESP_WIFI #ifdef DEBUG_ESP_PORT diff --git a/libraries/ESP8266WiFi/src/WiFiClientSecure.h b/libraries/ESP8266WiFi/src/WiFiClientSecure.h index 7047fdfec..6d1d4df84 100644 --- a/libraries/ESP8266WiFi/src/WiFiClientSecure.h +++ b/libraries/ESP8266WiFi/src/WiFiClientSecure.h @@ -20,77 +20,8 @@ */ -#ifndef wificlientsecure_h -#define wificlientsecure_h -#include "WiFiClient.h" -#include "include/ssl.h" +#include "WiFiClientSecureAxTLS.h" +#include "WiFiClientSecureBearSSL.h" - -class SSLContext; - -class WiFiClientSecure : public WiFiClient { -public: - WiFiClientSecure(); - ~WiFiClientSecure() override; - - int connect(IPAddress ip, uint16_t port) override; - int connect(const String host, uint16_t port) override; - int connect(const char* name, uint16_t port) override; - - bool verify(const char* fingerprint, const char* domain_name); - bool verifyCertChain(const char* domain_name); - - uint8_t connected() override; - size_t write(const uint8_t *buf, size_t size) override; - size_t write_P(PGM_P buf, size_t size) override; - size_t write(Stream& stream); // Note this is not virtual - int read(uint8_t *buf, size_t size) override; - int available() override; - int read() override; - int peek() override; - size_t peekBytes(uint8_t *buffer, size_t length) override; - void stop() override; - - bool setCACert(const uint8_t* pk, size_t size); - bool setCertificate(const uint8_t* pk, size_t size); - bool setPrivateKey(const uint8_t* pk, size_t size); - - bool setCACert_P(PGM_VOID_P pk, size_t size); - bool setCertificate_P(PGM_VOID_P pk, size_t size); - bool setPrivateKey_P(PGM_VOID_P pk, size_t size); - - bool loadCACert(Stream& stream, size_t size); - bool loadCertificate(Stream& stream, size_t size); - bool loadPrivateKey(Stream& stream, size_t size); - - void allowSelfSignedCerts(); - - template - bool loadCertificate(TFile& file) { - return loadCertificate(file, file.size()); - } - - template - bool loadPrivateKey(TFile& file) { - return loadPrivateKey(file, file.size()); - } - - template - bool loadCACert(TFile& file) { - return loadCACert(file, file.size()); - } - -friend class WiFiServerSecure; // Needs access to custom constructor below -protected: - // Only called by WiFiServerSecure - WiFiClientSecure(ClientContext* client, bool usePMEM, const uint8_t *rsakey, int rsakeyLen, const uint8_t *cert, int certLen); - -protected: - void _initSSLContext(); - int _connectSSL(const char* hostName); - bool _verifyDN(const char* name); - - std::shared_ptr _ssl = nullptr; -}; - -#endif //wificlientsecure_h +using namespace axTLS; +// using namespace BearSSL; diff --git a/libraries/ESP8266WiFi/src/WiFiClientSecure.cpp b/libraries/ESP8266WiFi/src/WiFiClientSecureAxTLS.cpp similarity index 99% rename from libraries/ESP8266WiFi/src/WiFiClientSecure.cpp rename to libraries/ESP8266WiFi/src/WiFiClientSecureAxTLS.cpp index 02ddac579..c8c083587 100644 --- a/libraries/ESP8266WiFi/src/WiFiClientSecure.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClientSecureAxTLS.cpp @@ -51,6 +51,8 @@ extern "C" #define SSL_DEBUG_OPTS 0 #endif +namespace axTLS { + typedef struct BufferItem { @@ -905,3 +907,5 @@ extern "C" void __ax_wdt_feed() optimistic_yield(10000); } extern "C" void ax_wdt_feed() __attribute__ ((weak, alias("__ax_wdt_feed"))); + +}; diff --git a/libraries/ESP8266WiFi/src/WiFiClientSecureAxTLS.h b/libraries/ESP8266WiFi/src/WiFiClientSecureAxTLS.h new file mode 100644 index 000000000..e836d7bd5 --- /dev/null +++ b/libraries/ESP8266WiFi/src/WiFiClientSecureAxTLS.h @@ -0,0 +1,100 @@ +/* + WiFiClientSecure.h - Variant of WiFiClient with TLS support + Copyright (c) 2015 Ivan Grokhotkov. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef wificlientsecure_h +#define wificlientsecure_h +#include "WiFiClient.h" +#include "include/ssl.h" + + +namespace axTLS { + +class SSLContext; + +class WiFiClientSecure : public WiFiClient { +public: + WiFiClientSecure(); + ~WiFiClientSecure() override; + + int connect(IPAddress ip, uint16_t port) override; + int connect(const String host, uint16_t port) override; + int connect(const char* name, uint16_t port) override; + + bool verify(const char* fingerprint, const char* domain_name); + bool verifyCertChain(const char* domain_name); + + uint8_t connected() override; + size_t write(const uint8_t *buf, size_t size) override; + size_t write_P(PGM_P buf, size_t size) override; + size_t write(Stream& stream); // Note this is not virtual + int read(uint8_t *buf, size_t size) override; + int available() override; + int read() override; + int peek() override; + size_t peekBytes(uint8_t *buffer, size_t length) override; + void stop() override; + + bool setCACert(const uint8_t* pk, size_t size); + bool setCertificate(const uint8_t* pk, size_t size); + bool setPrivateKey(const uint8_t* pk, size_t size); + + bool setCACert_P(PGM_VOID_P pk, size_t size); + bool setCertificate_P(PGM_VOID_P pk, size_t size); + bool setPrivateKey_P(PGM_VOID_P pk, size_t size); + + bool loadCACert(Stream& stream, size_t size); + bool loadCertificate(Stream& stream, size_t size); + bool loadPrivateKey(Stream& stream, size_t size); + + void allowSelfSignedCerts(); + + template + bool loadCertificate(TFile& file) { + return loadCertificate(file, file.size()); + } + + template + bool loadPrivateKey(TFile& file) { + return loadPrivateKey(file, file.size()); + } + + template + bool loadCACert(TFile& file) { + return loadCACert(file, file.size()); + } + +friend class WiFiServerSecure; // Needs access to custom constructor below +protected: + // Only called by WiFiServerSecure + WiFiClientSecure(ClientContext* client, bool usePMEM, const uint8_t *rsakey, int rsakeyLen, const uint8_t *cert, int certLen); + +protected: + void _initSSLContext(); + int _connectSSL(const char* hostName); + bool _verifyDN(const char* name); + + std::shared_ptr _ssl = nullptr; +}; + +}; + +#endif //wificlientsecure_h diff --git a/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp new file mode 100644 index 000000000..e94ad6357 --- /dev/null +++ b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp @@ -0,0 +1,1289 @@ +/* + WiFiClientBearSSL- SSL client/server for esp8266 using BearSSL libraries + - Mostly compatible with Arduino WiFi shield library and standard + WiFiClient/ServerSecure (except for certificate handling). + + Copyright (c) 2018 Earle F. Philhower, III + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#define LWIP_INTERNAL + +#include +#include +#include + +extern "C" { +#include "osapi.h" +#include "ets_sys.h" +} +#include "debug.h" +#include "ESP8266WiFi.h" +#include "WiFiClient.h" +#include "WiFiClientSecureBearSSL.h" +#include "lwip/opt.h" +#include "lwip/ip.h" +#include "lwip/tcp.h" +#include "lwip/inet.h" +#include "lwip/netif.h" +#include "include/ClientContext.h" +#include "c_types.h" + +namespace BearSSL { + +// BearSSL needs a very large stack, larger than the entire ESP8266 Arduino +// default one. This shared_pointer is allocated on first use and cleared +// on last cleanup, with only one stack no matter how many SSL objects. +std::shared_ptr WiFiClientSecure::_bearssl_stack = nullptr; + + + +void WiFiClientSecure::_clear() { + // TLS handshake may take more than the 5 second default timeout + _timeout = 15000; + + _sc = nullptr; + _sc_svr = nullptr; + _eng = nullptr; + _x509_minimal = nullptr; + _x509_insecure = nullptr; + _x509_knownkey = nullptr; + _iobuf_in = nullptr; + _iobuf_out = nullptr; + _now = 0; // You can override or ensure time() is correct w/configTime + _ta = nullptr; + setBufferSizes(16384, 512); // Minimum safe + _handshake_done = false; + _recvapp_buf = nullptr; + _recvapp_len = 0; + _oom_err = false; + _deleteChainKeyTA = false; +} + +void WiFiClientSecure::_clearAuthenticationSettings() { + _use_insecure = false; + _use_fingerprint = false; + _use_self_signed = false; + _knownkey = nullptr; + _sk = nullptr; +} + + +WiFiClientSecure::WiFiClientSecure() : WiFiClient() { + _clear(); + _clearAuthenticationSettings(); + _certStore = nullptr; // Don't want to remove cert store on a clear, should be long lived + if (!_bearssl_stack) { + const int stacksize = 4500; // Empirically determined stack for EC and RSA connections + _bearssl_stack = std::shared_ptr(new uint8_t[stacksize], std::default_delete()); + br_esp8266_stack_proxy_init(_bearssl_stack.get(), stacksize); + } + _local_bearssl_stack = _bearssl_stack; +} + +WiFiClientSecure::~WiFiClientSecure() { + if (_client) { + _client->unref(); + _client = nullptr; + } + _freeSSL(); + _local_bearssl_stack = nullptr; // Potentially delete it if we're the last SSL object + if (_deleteChainKeyTA) { + delete _ta; + delete _chain; + delete _sk; + } +} + +WiFiClientSecure::WiFiClientSecure(ClientContext* client, + const BearSSLX509List *chain, const BearSSLPrivateKey *sk, + int iobuf_in_size, int iobuf_out_size, const BearSSLX509List *client_CA_ta) { + _clear(); + _clearAuthenticationSettings(); + _iobuf_in_size = iobuf_in_size; + _iobuf_out_size = iobuf_out_size; + _client = client; + _client->ref(); + if (!_connectSSLServerRSA(chain, sk, client_CA_ta)) { + _client->unref(); + _client = nullptr; + _clear(); + } +} + +WiFiClientSecure::WiFiClientSecure(ClientContext *client, + const BearSSLX509List *chain, + unsigned cert_issuer_key_type, const BearSSLPrivateKey *sk, + int iobuf_in_size, int iobuf_out_size, const BearSSLX509List *client_CA_ta) { + _clear(); + _clearAuthenticationSettings(); + _iobuf_in_size = iobuf_in_size; + _iobuf_out_size = iobuf_out_size; + _client = client; + _client->ref(); + if (!_connectSSLServerEC(chain, cert_issuer_key_type, sk, client_CA_ta)) { + _client->unref(); + _client = nullptr; + _clear(); + } +} + +void WiFiClientSecure::setClientRSACert(const BearSSLX509List *chain, const BearSSLPrivateKey *sk) { + _chain = chain; + _sk = sk; +} + +void WiFiClientSecure::setClientECCert(const BearSSLX509List *chain, + const BearSSLPrivateKey *sk, unsigned allowed_usages, unsigned cert_issuer_key_type) { + _chain = chain; + _sk = sk; + _allowed_usages = allowed_usages; + _cert_issuer_key_type = cert_issuer_key_type; +} + +void WiFiClientSecure::setBufferSizes(int recv, int xmit) { + // Following constants taken from bearssl/src/ssl/ssl_engine.c (not exported unfortunately) + const int MAX_OUT_OVERHEAD = 85; + const int MAX_IN_OVERHEAD = 325; + + // The data buffers must be between 512B and 16KB + recv = std::max(512, std::min(16384, recv)); + xmit = std::max(512, std::min(16384, xmit)); + + // Add in overhead for SSL protocol + recv += MAX_IN_OVERHEAD; + xmit += MAX_OUT_OVERHEAD; + _iobuf_in_size = recv; + _iobuf_out_size = xmit; +} + +void WiFiClientSecure::stop() { + flush(); + if (_client) { + _client->wait_until_sent(); + _client->abort(); + } + WiFiClient::stop(); + _freeSSL(); +} + +void WiFiClientSecure::flush() { + (void) _run_until(BR_SSL_SENDAPP); + WiFiClient::flush(); +} + +int WiFiClientSecure::connect(IPAddress ip, uint16_t port) { + if (!WiFiClient::connect(ip, port)) { + return 0; + } + return _connectSSL(nullptr); +} + +int WiFiClientSecure::connect(const char* name, uint16_t port) { + IPAddress remote_addr; + if (!WiFi.hostByName(name, remote_addr)) { + return 0; + } + if (!WiFiClient::connect(remote_addr, port)) { + return 0; + } + return _connectSSL(name); +} + +int WiFiClientSecure::connect(const String host, uint16_t port) { + return connect(host.c_str(), port); +} + +void WiFiClientSecure::_freeSSL() { + // These are smart pointers and will free if refcnt==0 + _sc = nullptr; + _sc_svr = nullptr; + _x509_minimal = nullptr; + _x509_insecure = nullptr; + _x509_knownkey = nullptr; + _iobuf_in = nullptr; + _iobuf_out = nullptr; + // Reset non-allocated ptrs (pointing to bits potentially free'd above) + _recvapp_buf = nullptr; + _recvapp_len = 0; + // This connection is toast + _handshake_done = false; +} + +bool WiFiClientSecure::_clientConnected() { + return (_client && _client->state() == ESTABLISHED); +} + +uint8_t WiFiClientSecure::connected() { + if (_recvapp_len) { + return true; + } + if (_client && _client->state() == ESTABLISHED && _handshake_done) { + return true; + } + return false; +} + +size_t WiFiClientSecure::_write(const uint8_t *buf, size_t size, bool pmem) { + if (!connected() || !size || !_handshake_done) { + return 0; + } + + if (_run_until(BR_SSL_SENDAPP) < 0) { + return 0; + } + + if (br_ssl_engine_current_state(_eng) & BR_SSL_SENDAPP) { + size_t sendapp_len; + unsigned char *sendapp_buf = br_ssl_engine_sendapp_buf(_eng, &sendapp_len); + int to_send = size > sendapp_len ? sendapp_len : size; + if (pmem) { + memcpy_P(sendapp_buf, buf, to_send); + } else { + memcpy(sendapp_buf, buf, to_send); + } + br_ssl_engine_sendapp_ack(_eng, to_send); + br_ssl_engine_flush(_eng, 0); + flush(); + return to_send; + } + + return 0; +} + +size_t WiFiClientSecure::write(const uint8_t *buf, size_t size) { + return _write(buf, size, false); +} + +size_t WiFiClientSecure::write_P(PGM_P buf, size_t size) { + return _write((const uint8_t *)buf, size, true); +} + +// We have to manually read and send individual chunks. +size_t WiFiClientSecure::write(Stream& stream) { + size_t totalSent = 0; + size_t countRead; + size_t countSent; + + if (!connected() || !_handshake_done) { + return 0; + } + + do { + uint8_t temp[256]; // Temporary chunk size same as ClientContext + countSent = 0; + countRead = stream.readBytes(temp, sizeof(temp)); + if (countRead) { + countSent = _write((const uint8_t*)temp, countRead, true); + totalSent += countSent; + } + yield(); // Feed the WDT + } while ((countSent == countRead) && (countSent > 0)); + return totalSent; +} + +int WiFiClientSecure::read(uint8_t *buf, size_t size) { + if (!ctx_present() || !_handshake_done) { + return -1; + } + + int avail = available(); + bool conn = connected(); + if (!avail && conn) { + return 0; // We're still connected, but nothing to read + } + if (!avail && !conn) { + return -1; + } + + if (avail) { + // Take data from the recvapp buffer + int to_copy = _recvapp_len < size ? _recvapp_len : size; + memcpy(buf, _recvapp_buf, to_copy); + br_ssl_engine_recvapp_ack(_eng, to_copy); + _recvapp_buf = nullptr; + _recvapp_len = 0; + return to_copy; + } + + return conn ? 0 : -1; // If we're connected, no error but no read. OTW error +} + +int WiFiClientSecure::read() { + uint8_t c; + if (1 == read(&c, 1)) { + return c; + } + return -1; +} + +int WiFiClientSecure::available() { + if (_recvapp_buf) { + return _recvapp_len; // Anything from last call? + } + _recvapp_buf = nullptr; + _recvapp_len = 0; + if (!ctx_present() || _run_until(BR_SSL_RECVAPP, false) < 0) { + return 0; + } + int st = br_ssl_engine_current_state(_eng); + if (st == BR_SSL_CLOSED) { + return 0; // Nothing leftover, SSL is closed + } + if (st & BR_SSL_RECVAPP) { + _recvapp_buf = br_ssl_engine_recvapp_buf(_eng, &_recvapp_len); + return _recvapp_len; + } + + return 0; +} + +int WiFiClientSecure::peek() { + if (!ctx_present() || !available()) { + return -1; + } + if (_recvapp_buf && _recvapp_len) { + return _recvapp_buf[0]; + } + return -1; +} + +size_t WiFiClientSecure::peekBytes(uint8_t *buffer, size_t length) { + size_t to_copy = 0; + if (!ctx_present()) { + return 0; + } + + _startMillis = millis(); + while ((available() < (int) length) && ((millis() - _startMillis) < 5000)) { + yield(); + } + + to_copy = _recvapp_len < length ? _recvapp_len : length; + memcpy(buffer, _recvapp_buf, to_copy); + return to_copy; +} + +/* --- Copied almost verbatim from BEARSSL SSL_IO.C --- + Run the engine, until the specified target state is achieved, or + an error occurs. The target state is SENDAPP, RECVAPP, or the + combination of both (the combination matches either). When a match is + achieved, this function returns 0. On error, it returns -1. +*/ +int WiFiClientSecure::_run_until(unsigned target, bool blocking) { + if (!ctx_present()) { + return -1; + } + for (int no_work = 0; blocking || no_work < 2;) { + if (blocking) { + // Only for blocking operations can we afford to yield() + optimistic_yield(100); + } + + int state; + state = br_ssl_engine_current_state(_eng); + if (state & BR_SSL_CLOSED) { + return -1; + } + + if (!(_client->state() == ESTABLISHED) && !WiFiClient::available()) { + return -1; + } + + /* + If there is some record data to send, do it. This takes + precedence over everything else. + */ + if (state & BR_SSL_SENDREC) { + unsigned char *buf; + size_t len; + int wlen; + + buf = br_ssl_engine_sendrec_buf(_eng, &len); + wlen = WiFiClient::write(buf, len); + if (wlen <= 0) { + /* + If we received a close_notify and we + still send something, then we have our + own response close_notify to send, and + the peer is allowed by RFC 5246 not to + wait for it. + */ + return -1; + } + if (wlen > 0) { + br_ssl_engine_sendrec_ack(_eng, wlen); + } + no_work = 0; + continue; + } + + /* + If we reached our target, then we are finished. + */ + if (state & target) { + return 0; + } + + /* + If some application data must be read, and we did not + exit, then this means that we are trying to write data, + and that's not possible until the application data is + read. This may happen if using a shared in/out buffer, + and the underlying protocol is not strictly half-duplex. + This is unrecoverable here, so we report an error. + */ + if (state & BR_SSL_RECVAPP) { + return -1; + } + + /* + If we reached that point, then either we are trying + to read data and there is some, or the engine is stuck + until a new record is obtained. + */ + if (state & BR_SSL_RECVREC) { + if (WiFiClient::available()) { + unsigned char *buf; + size_t len; + int rlen; + + buf = br_ssl_engine_recvrec_buf(_eng, &len); + rlen = WiFiClient::read(buf, len); + if (rlen < 0) { + return -1; + } + if (rlen > 0) { + br_ssl_engine_recvrec_ack(_eng, rlen); + } + no_work = 0; + continue; + } + } + + /* + We can reach that point if the target RECVAPP, and + the state contains SENDAPP only. This may happen with + a shared in/out buffer. In that case, we must flush + the buffered data to "make room" for a new incoming + record. + */ + br_ssl_engine_flush(_eng, 0); + + no_work++; // We didn't actually advance here + } + // We only get here if we ran through the loop without getting anything done + return -1; +} + +bool WiFiClientSecure::_wait_for_handshake() { + _handshake_done = false; + while (!_handshake_done && _clientConnected()) { + int ret = _run_until(BR_SSL_SENDAPP); + if (ret < 0) { + break; + } + if (br_ssl_engine_current_state(_eng) & BR_SSL_SENDAPP) { + _handshake_done = true; + } + } + return _handshake_done; +} + + +extern "C" { + + // BearSSL doesn't define a true insecure decoder, so we make one ourselves + // from the simple parser. It generates the issuer and subject hashes and + // the SHA1 fingerprint, only one (or none!) of which will be used to + // "verify" the certificate. + + // Private x509 decoder state + struct br_x509_insecure_context { + const br_x509_class *vtable; + bool done_cert; + const uint8_t *match_fingerprint; + br_sha1_context sha1_cert; + bool allow_self_signed; + br_sha256_context sha256_subject; + br_sha256_context sha256_issuer; + br_x509_decoder_context ctx; + }; + + // Callback for the x509_minimal subject DN + static void insecure_subject_dn_append(void *ctx, const void *buf, size_t len) { + br_x509_insecure_context *xc = (br_x509_insecure_context *)ctx; + br_sha256_update(&xc->sha256_subject, buf, len); + } + + // Callback for the x509_minimal issuer DN + static void insecure_issuer_dn_append(void *ctx, const void *buf, size_t len) { + br_x509_insecure_context *xc = (br_x509_insecure_context *)ctx; + br_sha256_update(&xc->sha256_issuer, buf, len); + } + + // Callback on the first byte of any certificate + static void insecure_start_chain(const br_x509_class **ctx, const char *server_name) { + br_x509_insecure_context *xc = (br_x509_insecure_context *)ctx; + br_x509_decoder_init(&xc->ctx, insecure_subject_dn_append, xc, insecure_issuer_dn_append, xc); + xc->done_cert = false; + br_sha1_init(&xc->sha1_cert); + br_sha256_init(&xc->sha256_subject); + br_sha256_init(&xc->sha256_issuer); + (void)server_name; + } + + // Callback for each certificate present in the chain (but only operates + // on the first one by design). + static void insecure_start_cert(const br_x509_class **ctx, uint32_t length) { + (void) ctx; + (void) length; + } + + // Callback for each byte stream in the chain. Only process first cert. + static void insecure_append(const br_x509_class **ctx, const unsigned char *buf, size_t len) { + br_x509_insecure_context *xc = (br_x509_insecure_context *)ctx; + // Don't process anything but the first certificate in the chain + if (!xc->done_cert) { + br_sha1_update(&xc->sha1_cert, buf, len); + br_x509_decoder_push(&xc->ctx, (const void*)buf, len); + } + } + + // Callback on individual cert end. + static void insecure_end_cert(const br_x509_class **ctx) { + br_x509_insecure_context *xc = (br_x509_insecure_context *)ctx; + xc->done_cert = true; + } + + // Callback when complete chain has been parsed. + // Return 0 on validation success, !0 on validation error + static unsigned insecure_end_chain(const br_x509_class **ctx) { + const br_x509_insecure_context *xc = (const br_x509_insecure_context *)ctx; + if (!xc->done_cert) { + return 1; // error + } + + // Handle SHA1 fingerprint matching + char res[20]; + br_sha1_out(&xc->sha1_cert, res); + if (xc->match_fingerprint && memcmp(res, xc->match_fingerprint, sizeof(res))) { + return BR_ERR_X509_NOT_TRUSTED; + } + + // Handle self-signer certificate acceptance + char res_issuer[32]; + char res_subject[32]; + br_sha256_out(&xc->sha256_issuer, res_issuer); + br_sha256_out(&xc->sha256_subject, res_subject); + if (xc->allow_self_signed && memcmp(res_subject, res_issuer, sizeof(res_issuer))) { + return BR_ERR_X509_NOT_TRUSTED; + } + + // Default (no validation at all) or no errors in prior checks = success. + return 0; + } + + // Return the public key from the validator (set by x509_minimal) + static const br_x509_pkey *insecure_get_pkey(const br_x509_class *const *ctx, unsigned *usages) { + const br_x509_insecure_context *xc = (const br_x509_insecure_context *)ctx; + if (usages != NULL) { + *usages = BR_KEYTYPE_KEYX | BR_KEYTYPE_SIGN; // I said we were insecure! + } + return &xc->ctx.pkey; + } + + // Set up the x509 insecure data structures for BearSSL core to use. + void br_x509_insecure_init(br_x509_insecure_context *ctx, int _use_fingerprint, const uint8_t _fingerprint[20], int _allow_self_signed) { + static const br_x509_class br_x509_insecure_vtable PROGMEM = { + sizeof(br_x509_insecure_context), + insecure_start_chain, + insecure_start_cert, + insecure_append, + insecure_end_cert, + insecure_end_chain, + insecure_get_pkey + }; + + memset(ctx, 0, sizeof * ctx); + ctx->vtable = &br_x509_insecure_vtable; + ctx->done_cert = false; + ctx->match_fingerprint = _use_fingerprint ? _fingerprint : nullptr; + ctx->allow_self_signed = _allow_self_signed ? 1 : 0; + } + + // Some constants uses to init the server/client contexts + // Note that suites_P needs to be copied to RAM before use w/BearSSL! + static const uint16_t suites_P[] PROGMEM = { + BR_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, + BR_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, + BR_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + BR_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + BR_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, + BR_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, + BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, + BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, + BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, + BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, + BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, + BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, + BR_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, + BR_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, + BR_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, + BR_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, + BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, + BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, + BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, + BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, + BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, + BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, + BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, + BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, + BR_TLS_RSA_WITH_AES_128_GCM_SHA256, + BR_TLS_RSA_WITH_AES_256_GCM_SHA384, + BR_TLS_RSA_WITH_AES_128_CBC_SHA256, + BR_TLS_RSA_WITH_AES_256_CBC_SHA256, + BR_TLS_RSA_WITH_AES_128_CBC_SHA, + BR_TLS_RSA_WITH_AES_256_CBC_SHA, + BR_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, + BR_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, + BR_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, + BR_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, + BR_TLS_RSA_WITH_3DES_EDE_CBC_SHA + }; + + // Install hashes into the SSL engine + static void br_ssl_client_install_hashes(br_ssl_engine_context *eng) { + br_ssl_engine_set_hash(eng, br_md5_ID, &br_md5_vtable); + br_ssl_engine_set_hash(eng, br_sha1_ID, &br_sha1_vtable); + br_ssl_engine_set_hash(eng, br_sha224_ID, &br_sha224_vtable); + br_ssl_engine_set_hash(eng, br_sha256_ID, &br_sha256_vtable); + br_ssl_engine_set_hash(eng, br_sha384_ID, &br_sha384_vtable); + br_ssl_engine_set_hash(eng, br_sha512_ID, &br_sha512_vtable); + } + + static void br_x509_minimal_install_hashes(br_x509_minimal_context *x509) { + br_x509_minimal_set_hash(x509, br_md5_ID, &br_md5_vtable); + br_x509_minimal_set_hash(x509, br_sha1_ID, &br_sha1_vtable); + br_x509_minimal_set_hash(x509, br_sha224_ID, &br_sha224_vtable); + br_x509_minimal_set_hash(x509, br_sha256_ID, &br_sha256_vtable); + br_x509_minimal_set_hash(x509, br_sha384_ID, &br_sha384_vtable); + br_x509_minimal_set_hash(x509, br_sha512_ID, &br_sha512_vtable); + } + + // Default initializion for our SSL clients + static void br_ssl_client_base_init(br_ssl_client_context *cc) { + uint16_t suites[sizeof(suites_P) / sizeof(uint16_t)]; + memcpy_P(suites, suites_P, sizeof(suites_P)); + br_ssl_client_zero(cc); + br_ssl_engine_set_versions(&cc->eng, BR_TLS10, BR_TLS12); + br_ssl_engine_set_suites(&cc->eng, suites, (sizeof suites) / (sizeof suites[0])); + br_ssl_client_set_default_rsapub(cc); + br_ssl_engine_set_default_rsavrfy(&cc->eng); + br_ssl_engine_set_default_ecdsa(&cc->eng); + br_ssl_client_install_hashes(&cc->eng); + br_ssl_engine_set_prf10(&cc->eng, &br_tls10_prf); + br_ssl_engine_set_prf_sha256(&cc->eng, &br_tls12_sha256_prf); + br_ssl_engine_set_prf_sha384(&cc->eng, &br_tls12_sha384_prf); + br_ssl_engine_set_default_aes_cbc(&cc->eng); + br_ssl_engine_set_default_aes_gcm(&cc->eng); + br_ssl_engine_set_default_des_cbc(&cc->eng); + br_ssl_engine_set_default_chapol(&cc->eng); + } + +} + +// Installs the appropriate X509 cert validation method for a client connection +bool WiFiClientSecure::_installClientX509Validator() { + if (_use_insecure || _use_fingerprint || _use_self_signed) { + // Use common insecure x509 authenticator + _x509_insecure = std::make_shared(); + if (!_x509_insecure) { + return false; + } + br_x509_insecure_init(_x509_insecure.get(), _use_fingerprint, _fingerprint, _use_self_signed); + br_ssl_engine_set_x509(_eng, &_x509_insecure->vtable); + } else if (_knownkey) { + // Simple, pre-known public key authenticator, ignores cert completely. + _x509_knownkey = std::make_shared(); + if (!_x509_knownkey) { + return false; + } + if (_knownkey->isRSA()) { + br_x509_knownkey_init_rsa(_x509_knownkey.get(), _knownkey->getRSA(), _knownkey_usages); + } else if (_knownkey->isEC()) { + br_x509_knownkey_init_ec(_x509_knownkey.get(), _knownkey->getEC(), _knownkey_usages); + } + br_ssl_engine_set_x509(_eng, &_x509_knownkey->vtable); + } else { + // X509 minimal validator. Checks dates, cert chain for trusted CA, etc. + _x509_minimal = std::make_shared(); + if (!_x509_minimal) { + return false; + } + br_x509_minimal_init(_x509_minimal.get(), &br_sha256_vtable, _ta ? _ta->getTrustAnchors() : nullptr, _ta ? _ta->getCount() : 0); + br_x509_minimal_set_rsa(_x509_minimal.get(), br_ssl_engine_get_rsavrfy(_eng)); + br_x509_minimal_set_ecdsa(_x509_minimal.get(), br_ssl_engine_get_ec(_eng), br_ssl_engine_get_ecdsa(_eng)); + br_x509_minimal_install_hashes(_x509_minimal.get()); + if (_now) { + // Magic constants convert to x509 times + br_x509_minimal_set_time(_x509_minimal.get(), ((uint32_t)_now) / 86400 + 719528, ((uint32_t)_now) % 86400); + } + if (_certStore) { + _certStore->installCertStore(_x509_minimal.get()); + } + br_ssl_engine_set_x509(_eng, &_x509_minimal->vtable); + } + return true; +} + +// Called by connect() to do the actual SSL setup and handshake. +// Returns if the SSL handshake succeeded. +bool WiFiClientSecure::_connectSSL(const char* hostName) { + _freeSSL(); + _oom_err = false; + + _sc = std::make_shared(); + _eng = &_sc->eng; // Allocation/deallocation taken care of by the _sc shared_ptr + _iobuf_in = std::shared_ptr(new unsigned char[_iobuf_in_size], std::default_delete()); + _iobuf_out = std::shared_ptr(new unsigned char[_iobuf_out_size], std::default_delete()); + + if (!_sc || !_iobuf_in || !_iobuf_out) { + _freeSSL(); // Frees _sc, _iobuf* + _oom_err = true; + return false; + } + + br_ssl_client_base_init(_sc.get()); + // Only failure possible in the installation is OOM + if (!_installClientX509Validator()) { + _freeSSL(); + _oom_err = true; + return false; + } + br_ssl_engine_set_buffers_bidi(_eng, _iobuf_in.get(), _iobuf_in_size, _iobuf_out.get(), _iobuf_out_size); + // Apply any client certificates, if supplied. + if (_sk && _sk->isRSA()) { + br_ssl_client_set_single_rsa(_sc.get(), _chain ? _chain->getX509Certs() : nullptr, _chain ? _chain->getCount() : 0, + _sk->getRSA(), br_rsa_pkcs1_sign_get_default()); + } else if (_sk && _sk->isEC()) { + br_ssl_client_set_single_ec(_sc.get(), _chain ? _chain->getX509Certs() : nullptr, _chain ? _chain->getCount() : 0, + _sk->getEC(), _allowed_usages, + _cert_issuer_key_type, br_ec_get_default(), br_ecdsa_sign_asn1_get_default()); + } + + if (!br_ssl_client_reset(_sc.get(), hostName, 0)) { + _freeSSL(); + return false; + } + + return _wait_for_handshake(); +} + +// Slightly different X509 setup for servers who want to validate client +// certificates, so factor it out as it's used in RSA and EC servers. +bool WiFiClientSecure::_installServerX509Validator(const BearSSLX509List *client_CA_ta) { + if (client_CA_ta) { + _ta = client_CA_ta; + // X509 minimal validator. Checks dates, cert chain for trusted CA, etc. + _x509_minimal = std::make_shared(); + if (!_x509_minimal) { + _freeSSL(); + _oom_err = true; + return false; + } + br_x509_minimal_init(_x509_minimal.get(), &br_sha256_vtable, _ta->getTrustAnchors(), _ta->getCount()); + br_ssl_engine_set_default_rsavrfy(_eng); + br_ssl_engine_set_default_ecdsa(_eng); + br_x509_minimal_set_rsa(_x509_minimal.get(), br_ssl_engine_get_rsavrfy(_eng)); + br_x509_minimal_set_ecdsa(_x509_minimal.get(), br_ssl_engine_get_ec(_eng), br_ssl_engine_get_ecdsa(_eng)); + br_x509_minimal_install_hashes(_x509_minimal.get()); + if (_now) { + // Magic constants convert to x509 times + br_x509_minimal_set_time(_x509_minimal.get(), ((uint32_t)_now) / 86400 + 719528, ((uint32_t)_now) % 86400); + } + br_ssl_engine_set_x509(_eng, &_x509_minimal->vtable); + br_ssl_server_set_trust_anchor_names_alt(_sc_svr.get(), _ta->getTrustAnchors(), _ta->getCount()); + } + return true; +} + +// Called by WiFiServerBearSSL when an RSA cert/key is specified. +bool WiFiClientSecure::_connectSSLServerRSA(const BearSSLX509List *chain, + const BearSSLPrivateKey *sk, + const BearSSLX509List *client_CA_ta) { + _freeSSL(); + _oom_err = false; + _sc_svr = std::make_shared(); + _eng = &_sc_svr->eng; // Allocation/deallocation taken care of by the _sc shared_ptr + _iobuf_in = std::shared_ptr(new unsigned char[_iobuf_in_size], std::default_delete()); + _iobuf_out = std::shared_ptr(new unsigned char[_iobuf_out_size], std::default_delete()); + + if (!_sc_svr || !_iobuf_in || !_iobuf_out) { + _freeSSL(); + _oom_err = true; + return false; + } + + br_ssl_server_init_full_rsa(_sc_svr.get(), chain ? chain->getX509Certs() : nullptr, chain ? chain->getCount() : 0, sk ? sk->getRSA() : nullptr); + br_ssl_engine_set_buffers_bidi(_eng, _iobuf_in.get(), _iobuf_in_size, _iobuf_out.get(), _iobuf_out_size); + if (client_CA_ta && !_installServerX509Validator(client_CA_ta)) { + return false; + } + if (!br_ssl_server_reset(_sc_svr.get())) { + _freeSSL(); + return false; + } + + return _wait_for_handshake(); +} + +// Called by WiFiServerBearSSL when an elliptic curve cert/key is specified. +bool WiFiClientSecure::_connectSSLServerEC(const BearSSLX509List *chain, + unsigned cert_issuer_key_type, const BearSSLPrivateKey *sk, + const BearSSLX509List *client_CA_ta) { + _freeSSL(); + _oom_err = false; + _sc_svr = std::make_shared(); + _eng = &_sc_svr->eng; // Allocation/deallocation taken care of by the _sc shared_ptr + _iobuf_in = std::shared_ptr(new unsigned char[_iobuf_in_size], std::default_delete()); + _iobuf_out = std::shared_ptr(new unsigned char[_iobuf_out_size], std::default_delete()); + + if (!_sc_svr || !_iobuf_in || !_iobuf_out) { + _freeSSL(); + _oom_err = true; + return false; + } + + br_ssl_server_init_full_ec(_sc_svr.get(), chain ? chain->getX509Certs() : nullptr, chain ? chain->getCount() : 0, + cert_issuer_key_type, sk ? sk->getEC() : nullptr); + br_ssl_engine_set_buffers_bidi(_eng, _iobuf_in.get(), _iobuf_in_size, _iobuf_out.get(), _iobuf_out_size); + if (client_CA_ta && !_installServerX509Validator(client_CA_ta)) { + return false; + } + if (!br_ssl_server_reset(_sc_svr.get())) { + _freeSSL(); + return false; + } + + return _wait_for_handshake(); +} + +// Returns an error ID and possibly a string (if dest != null) of the last +// BearSSL reported error. +int WiFiClientSecure::getLastSSLError(char *dest, size_t len) { + int err = 0; + const char *t = PSTR("OK"); + if (_sc || _sc_svr) { + err = br_ssl_engine_last_error(_eng); + } + if (_oom_err) { + err = -1000; + } + switch (err) { + case -1000: t = PSTR("Unable to allocate memory for SSL structures and buffers."); break; + case BR_ERR_BAD_PARAM: t = PSTR("Caller-provided parameter is incorrect."); break; + case BR_ERR_BAD_STATE: t = PSTR("Operation requested by the caller cannot be applied with the current context state (e.g. reading data while outgoing data is waiting to be sent)."); break; + case BR_ERR_UNSUPPORTED_VERSION: t = PSTR("Incoming protocol or record version is unsupported."); break; + case BR_ERR_BAD_VERSION: t = PSTR("Incoming record version does not match the expected version."); break; + case BR_ERR_BAD_LENGTH: t = PSTR("Incoming record length is invalid."); break; + case BR_ERR_TOO_LARGE: t = PSTR("Incoming record is too large to be processed, or buffer is too small for the handshake message to send."); break; + case BR_ERR_BAD_MAC: t = PSTR("Decryption found an invalid padding, or the record MAC is not correct."); break; + case BR_ERR_NO_RANDOM: t = PSTR("No initial entropy was provided, and none can be obtained from the OS."); break; + case BR_ERR_UNKNOWN_TYPE: t = PSTR("Incoming record type is unknown."); break; + case BR_ERR_UNEXPECTED: t = PSTR("Incoming record or message has wrong type with regards to the current engine state."); break; + case BR_ERR_BAD_CCS: t = PSTR("ChangeCipherSpec message from the peer has invalid contents."); break; + case BR_ERR_BAD_ALERT: t = PSTR("Alert message from the peer has invalid contents (odd length)."); break; + case BR_ERR_BAD_HANDSHAKE: t = PSTR("Incoming handshake message decoding failed."); break; + case BR_ERR_OVERSIZED_ID: t = PSTR("ServerHello contains a session ID which is larger than 32 bytes."); break; + case BR_ERR_BAD_CIPHER_SUITE: t = PSTR("Server wants to use a cipher suite that we did not claim to support. This is also reported if we tried to advertise a cipher suite that we do not support."); break; + case BR_ERR_BAD_COMPRESSION: t = PSTR("Server wants to use a compression that we did not claim to support."); break; + case BR_ERR_BAD_FRAGLEN: t = PSTR("Server's max fragment length does not match client's."); break; + case BR_ERR_BAD_SECRENEG: t = PSTR("Secure renegotiation failed."); break; + case BR_ERR_EXTRA_EXTENSION: t = PSTR("Server sent an extension type that we did not announce, or used the same extension type several times in a single ServerHello."); break; + case BR_ERR_BAD_SNI: t = PSTR("Invalid Server Name Indication contents (when used by the server, this extension shall be empty)."); break; + case BR_ERR_BAD_HELLO_DONE: t = PSTR("Invalid ServerHelloDone from the server (length is not 0)."); break; + case BR_ERR_LIMIT_EXCEEDED: t = PSTR("Internal limit exceeded (e.g. server's public key is too large)."); break; + case BR_ERR_BAD_FINISHED: t = PSTR("Finished message from peer does not match the expected value."); break; + case BR_ERR_RESUME_MISMATCH: t = PSTR("Session resumption attempt with distinct version or cipher suite."); break; + case BR_ERR_INVALID_ALGORITHM: t = PSTR("Unsupported or invalid algorithm (ECDHE curve, signature algorithm, hash function)."); break; + case BR_ERR_BAD_SIGNATURE: t = PSTR("Invalid signature in ServerKeyExchange or CertificateVerify message."); break; + case BR_ERR_WRONG_KEY_USAGE: t = PSTR("Peer's public key does not have the proper type or is not allowed for the requested operation."); break; + case BR_ERR_NO_CLIENT_AUTH: t = PSTR("Client did not send a certificate upon request, or the client certificate could not be validated."); break; + case BR_ERR_IO: t = PSTR("I/O error or premature close on transport stream."); break; + case BR_ERR_X509_INVALID_VALUE: t = PSTR("Invalid value in an ASN.1 structure."); break; + case BR_ERR_X509_TRUNCATED: t = PSTR("Truncated certificate or other ASN.1 object."); break; + case BR_ERR_X509_EMPTY_CHAIN: t = PSTR("Empty certificate chain (no certificate at all)."); break; + case BR_ERR_X509_INNER_TRUNC: t = PSTR("Decoding error: inner element extends beyond outer element size."); break; + case BR_ERR_X509_BAD_TAG_CLASS: t = PSTR("Decoding error: unsupported tag class (application or private)."); break; + case BR_ERR_X509_BAD_TAG_VALUE: t = PSTR("Decoding error: unsupported tag value."); break; + case BR_ERR_X509_INDEFINITE_LENGTH: t = PSTR("Decoding error: indefinite length."); break; + case BR_ERR_X509_EXTRA_ELEMENT: t = PSTR("Decoding error: extraneous element."); break; + case BR_ERR_X509_UNEXPECTED: t = PSTR("Decoding error: unexpected element."); break; + case BR_ERR_X509_NOT_CONSTRUCTED: t = PSTR("Decoding error: expected constructed element, but is primitive."); break; + case BR_ERR_X509_NOT_PRIMITIVE: t = PSTR("Decoding error: expected primitive element, but is constructed."); break; + case BR_ERR_X509_PARTIAL_BYTE: t = PSTR("Decoding error: BIT STRING length is not multiple of 8."); break; + case BR_ERR_X509_BAD_BOOLEAN: t = PSTR("Decoding error: BOOLEAN value has invalid length."); break; + case BR_ERR_X509_OVERFLOW: t = PSTR("Decoding error: value is off-limits."); break; + case BR_ERR_X509_BAD_DN: t = PSTR("Invalid distinguished name."); break; + case BR_ERR_X509_BAD_TIME: t = PSTR("Invalid date/time representation."); break; + case BR_ERR_X509_UNSUPPORTED: t = PSTR("Certificate contains unsupported features that cannot be ignored."); break; + case BR_ERR_X509_LIMIT_EXCEEDED: t = PSTR("Key or signature size exceeds internal limits."); break; + case BR_ERR_X509_WRONG_KEY_TYPE: t = PSTR("Key type does not match that which was expected."); break; + case BR_ERR_X509_BAD_SIGNATURE: t = PSTR("Signature is invalid."); break; + case BR_ERR_X509_TIME_UNKNOWN: t = PSTR("Validation time is unknown."); break; + case BR_ERR_X509_EXPIRED: t = PSTR("Certificate is expired or not yet valid."); break; + case BR_ERR_X509_DN_MISMATCH: t = PSTR("Issuer/Subject DN mismatch in the chain."); break; + case BR_ERR_X509_BAD_SERVER_NAME: t = PSTR("Expected server name was not found in the chain."); break; + case BR_ERR_X509_CRITICAL_EXTENSION: t = PSTR("Unknown critical extension in certificate."); break; + case BR_ERR_X509_NOT_CA: t = PSTR("Not a CA, or path length constraint violation."); break; + case BR_ERR_X509_FORBIDDEN_KEY_USAGE: t = PSTR("Key Usage extension prohibits intended usage."); break; + case BR_ERR_X509_WEAK_PUBLIC_KEY: t = PSTR("Public key found in certificate is too small."); break; + case BR_ERR_X509_NOT_TRUSTED: t = PSTR("Chain could not be linked to a trust anchor."); break; + default: t = PSTR("Unknown error code."); break; + } + if (dest) { + strncpy_P(dest, t, len); + dest[len - 1] = 0; + } + return err; +} + +bool WiFiClientSecure::probeMaxFragmentLength(const char* name, uint16_t port, uint16_t len) { + IPAddress remote_addr; + if (!WiFi.hostByName(name, remote_addr)) { + return false; + } + return WiFiClientSecure::probeMaxFragmentLength(remote_addr, port, len); +} + +bool WiFiClientSecure::probeMaxFragmentLength(const String host, uint16_t port, uint16_t len) { + return WiFiClientSecure::probeMaxFragmentLength(host.c_str(), port, len); +} + + +// Helper function which aborts a TLS handshake by sending TLS +// ClientAbort and ClientClose messages. +static bool _SendAbort(WiFiClient& probe, bool supportsLen) { + // If we're still connected, send the appropriate notice that + // we're aborting the handshake per RFCs. + static const uint8_t clientAbort_P[] PROGMEM = { + 0x15 /*alert*/, 0x03, 0x03 /*TLS 1.2*/, 0x00, 0x02, + 1, 90 /* warning: user_cancelled */ + }; + static const uint8_t clientClose_P[] PROGMEM = { + 0x15 /*alert*/, 0x03, 0x03 /*TLS 1.2*/, 0x00, 0x02, + 1, 0 /* warning: close_notify */ + }; + if (probe.connected()) { + uint8_t msg[sizeof(clientAbort_P)]; + memcpy_P(msg, clientAbort_P, sizeof(clientAbort_P)); + probe.write(msg, sizeof(clientAbort_P)); + memcpy_P(msg, clientClose_P, sizeof(clientClose_P)); + probe.write(msg, sizeof(clientClose_P)); + } + return supportsLen; +} + +// Checks for support of Maximum Frame Length Negotiation at the given +// blocksize. Note that, per spec, only 512, 1024, 2048, and 4096 are +// supported. Many servers today do not support this negotiation. + +// TODO - Allow for fragmentation...but not very critical as the ServerHello +// we use comes to < 80 bytes which has no reason to ever be fragmented. +// TODO - Check the type of returned extensions and that the MFL is the exact +// same one we sent. Not critical as only horribly broken servers would +// return changed or add their own extensions. +bool WiFiClientSecure::probeMaxFragmentLength(IPAddress ip, uint16_t port, uint16_t len) { + // Hardcoded TLS 1.2 packets used throughout + static const uint8_t clientHelloHead_P[] PROGMEM = { + 0x16, 0x03, 0x03, 0x00, 0, // TLS header, change last 2 bytes to len + 0x01, 0x00, 0x00, 0, // Last 3 bytes == length + 0x03, 0x03, // Proto version TLS 1.2 + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, // Random (gmtime + rand[28]) + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x00, // Session ID + }; + // Followed by our cipher-suite, generated on-the-fly + // 0x00, 0x02, // cipher suite len + // 0xc0, 0x13, // BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA + static const uint8_t clientHelloTail_P[] PROGMEM = { + 0x01, 0x00, // No compression + 0x00, 0x05, // Extension length + 0x00, 0x01, // Max Frag Len + 0x00, 0x01, // len of MaxFragLen + }; + // Followed by a 1-byte MFLN size requesst + // 0x04 // 2^12 = 4K + uint8_t mfl; + + switch (len) { + case 512: mfl = 1; break; + case 1024: mfl = 2; break; + case 2048: mfl = 3; break; + case 4096: mfl = 4; break; + default: return false; // Invalid size + } + int ttlLen = sizeof(clientHelloHead_P) + (2 + sizeof(suites_P)) + (sizeof(clientHelloTail_P) + 1); + uint8_t *clientHello = new uint8_t[ttlLen]; + if (!clientHello) { + return false; + } + memcpy_P(clientHello, clientHelloHead_P, sizeof(clientHelloHead_P)); + clientHello[sizeof(clientHelloHead_P) + 0] = sizeof(suites_P) >> 8; // MSB byte len + clientHello[sizeof(clientHelloHead_P) + 1] = sizeof(suites_P) & 0xff; // LSB byte len + for (size_t i = 0; i < sizeof(suites_P) / sizeof(suites_P[0]); i++) { + uint16_t flip = pgm_read_word(&suites_P[i]); + // Swap to network byte order + flip = ((flip >> 8) & 0xff) | ((flip & 0xff) << 8); + memcpy(clientHello + sizeof(clientHelloHead_P) + 2 + 2 * i, &flip, 2); + } + memcpy_P(clientHello + sizeof(clientHelloHead_P) + 2 + sizeof(suites_P), clientHelloTail_P, sizeof(clientHelloTail_P)); + clientHello[sizeof(clientHelloHead_P) + 2 + sizeof(suites_P) + sizeof(clientHelloTail_P)] = mfl; + + // Fix up TLS fragment length + clientHello[3] = (ttlLen - 5) >> 8; + clientHello[4] = (ttlLen - 5) & 0xff; + // Fix up ClientHello message length + clientHello[7] = (ttlLen - 5 - 4) >> 8; + clientHello[8] = (ttlLen - 5 - 4) & 0xff; + + WiFiClient probe; + probe.connect(ip, port); + if (!probe.connected()) { + delete[] clientHello; + return false; + } + + int ret = probe.write(clientHello, ttlLen); + delete[] clientHello; // We're done w/the hello message + if (!probe.connected() || (ret != ttlLen)) { + return false; + } + + bool supportsLen = false; + uint8_t fragResp[5]; + int fragLen; + uint8_t hand[4]; + int handLen; + uint8_t protoVer[2]; + uint8_t rand[32]; + uint8_t sessionLen; + uint8_t cipher[2]; + uint8_t comp; + + ret = probe.readBytes(fragResp, 5); + if (!probe.connected() || (ret != 5) || (fragResp[0] != 0x16) || (fragResp[1] != 0x03) || (fragResp[2] != 0x03)) { + // Short read, not a HANDSHAKE or not TLS 1.2, so it's not supported + return _SendAbort(probe, supportsLen); + } + fragLen = (fragResp[3] << 8) | fragResp[4]; + if (fragLen < 4 + 2 + 32 + 1 + 2 + 1) { + // Too short to have an extension + return _SendAbort(probe, supportsLen); + } + + ret = probe.readBytes(hand, 4); + fragLen -= ret; + if ((ret != 4) || (hand[0] != 2)) { + // Short read or not server_hello + return _SendAbort(probe, supportsLen); + } + handLen = (hand[1] << 16) | (hand[2] << 8) | hand[3]; + if (handLen != fragLen) { + // Got some weird mismatch, this is invalid + return _SendAbort(probe, supportsLen); + } + + ret = probe.readBytes(protoVer, 2); + handLen -= ret; + if ((ret != 2) || (protoVer[0] != 0x03) || (protoVer[1] != 0x03)) { + // Short read or not tls 1.2, so can't do MFLN + return _SendAbort(probe, supportsLen); + } + + ret = probe.readBytes(rand, 32); + handLen -= ret; + if (ret != 32) { + // short read of random data + return _SendAbort(probe, supportsLen); + } + + ret = probe.readBytes(&sessionLen, 1); + handLen -= ret; + if ((ret != 1) || (sessionLen > 32)) { + // short read of session len or invalid size + return _SendAbort(probe, supportsLen); + } + if (sessionLen) { + ret = probe.readBytes(rand, sessionLen); + handLen -= ret; + if (ret != sessionLen) { + // short session id read + return _SendAbort(probe, supportsLen); + } + } + + ret = probe.readBytes(cipher, 2); + handLen -= ret; + if (ret != 2) { + // Short read...we don't check the cipher here + return _SendAbort(probe, supportsLen); + } + + ret = probe.readBytes(&comp, 1); + handLen -= ret; + if ((ret != 1) || comp != 0) { + // short read or invalid compression + return _SendAbort(probe, supportsLen); + } + if (handLen > 0) { + // At this point, having an extension present means that the extension we + // sent was accepted. + supportsLen = true; + } + return _SendAbort(probe, supportsLen); +} + + +// AXTLS compatibility interfaces +bool WiFiClientSecure::setCACert(const uint8_t* pk, size_t size) { + if (_ta && _deleteChainKeyTA) { + delete _ta; + _ta = nullptr; + } + _ta = new BearSSLX509List(pk, size); + _deleteChainKeyTA = true; + return _ta ? true : false; +} + +bool WiFiClientSecure::setCertificate(const uint8_t* pk, size_t size) { + if (_chain && _deleteChainKeyTA) { + delete _chain; + _chain = nullptr; + } + _chain = new BearSSLX509List(pk, size); + _deleteChainKeyTA = true; + return _chain ? true : false; +} + +bool WiFiClientSecure::setPrivateKey(const uint8_t* pk, size_t size) { + if (_sk && _deleteChainKeyTA) { + delete _sk; + _sk = nullptr; + } + _sk = new BearSSLPrivateKey(pk, size); + _deleteChainKeyTA = true; + return _sk ? true : false; + +} + +uint8_t *WiFiClientSecure::_streamLoad(Stream& stream, size_t size) { + uint8_t *dest = (uint8_t*)malloc(size); + if (!dest) { + return nullptr; + } + if (size != stream.readBytes(dest, size)) { + free(dest); + return nullptr; + } + return dest; +} + +bool WiFiClientSecure::loadCACert(Stream& stream, size_t size) { + uint8_t *dest = _streamLoad(stream, size); + bool ret = false; + if (dest) { + ret = setCACert(dest, size); + } + free(dest); + return ret; +} + +bool WiFiClientSecure::loadCertificate(Stream& stream, size_t size) { + uint8_t *dest = _streamLoad(stream, size); + bool ret = false; + if (dest) { + ret = setCertificate(dest, size); + } + free(dest); + return ret; +} + +bool WiFiClientSecure::loadPrivateKey(Stream& stream, size_t size) { + uint8_t *dest = _streamLoad(stream, size); + bool ret = false; + if (dest) { + ret = setPrivateKey(dest, size); + } + free(dest); + return ret; +} + + + + +// Debug printout helpers for BearSSL library when libbearssl.a is compiled in debug mode +// This is really only for debugging the core BearSSL library itself, and not the IDE +// SSL debugging which should focus on the WiFiClientBearSSL objects. + +extern "C" { +#include + extern cont_t g_cont; + extern size_t br_esp8266_stack_proxy_usage(); + + void _BearSSLCheckStack(const char *fcn, const char *file, int line) { + static int cnt = 0; + register uint32_t *sp asm("a1"); + int freestack = 4 * (sp - g_cont.stack); + int freeheap = ESP.getFreeHeap(); + static int laststack, lastheap, laststack2; + if ((laststack != freestack) || (lastheap != freeheap) || (laststack2 != (int)br_esp8266_stack_proxy_usage())) { + Serial.printf("%s:%s(%d): FREESTACK=%d, STACK2USAGE=%d, FREEHEAP=%d\n", file, fcn, line, freestack, br_esp8266_stack_proxy_usage(), freeheap); + if (freestack < 256) { + Serial.printf("!!! Out of main stack space\n"); + } + if (freeheap < 1024) { + Serial.printf("!!! Out of heap space\n"); + } + Serial.flush(); + laststack = freestack; + lastheap = freeheap; + laststack2 = (int)br_esp8266_stack_proxy_usage(); + } + // BearSSL debug can get very chatty, add yields to avoid WDT + if (cnt == 100) { + yield(); + cnt++; + } + } + + void _BearSSLSerialPrint(const char *str) { + static int cnt = 0; + Serial.printf("%s", str); + // BearSSL debug can get very chatty, add yields to avoid WDT + if (cnt == 100) { + yield(); + cnt++; + } + } +}; + +}; diff --git a/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.h b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.h new file mode 100644 index 000000000..9f23f5924 --- /dev/null +++ b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.h @@ -0,0 +1,215 @@ +/* + WiFiClientBearSSL- SSL client/server for esp8266 using BearSSL libraries + - Mostly compatible with Arduino WiFi shield library and standard + WiFiClient/ServerSecure (except for certificate handling). + + Copyright (c) 2018 Earle F. Philhower, III + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +#ifndef wificlientbearssl_h +#define wificlientbearssl_h +#include "WiFiClient.h" +#include +#include "BearSSLHelpers.h" +#include "CertStoreBearSSL.h" + +namespace BearSSL { + +class WiFiClientSecure : public WiFiClient { + public: + WiFiClientSecure(); + ~WiFiClientSecure() override; + + int connect(IPAddress ip, uint16_t port) override; + int connect(const String host, uint16_t port) override; + int connect(const char* name, uint16_t port) override; + + uint8_t connected() override; + size_t write(const uint8_t *buf, size_t size) override; + size_t write_P(PGM_P buf, size_t size) override; + size_t write(const char *buf) { + return write((const uint8_t*)buf, strlen(buf)); + } + size_t write_P(const char *buf) { + return write_P((PGM_P)buf, strlen_P(buf)); + } + size_t write(Stream& stream); // Note this is not virtual + int read(uint8_t *buf, size_t size) override; + int available() override; + int read() override; + int peek() override; + size_t peekBytes(uint8_t *buffer, size_t length) override; + void stop() override; + void flush() override; + + // Don't validate the chain, just accept whatever is given. VERY INSECURE! + void setInsecure() { + _use_insecure = true; + } + // Assume a given public key, don't validate or use cert info at all + void setKnownKey(const BearSSLPublicKey *pk, unsigned usages = BR_KEYTYPE_KEYX | BR_KEYTYPE_SIGN) { + _knownkey = pk; + _knownkey_usages = usages; + } + // Only check SHA1 fingerprint of certificate + void setFingerprint(const uint8_t fingerprint[20]) { + _use_fingerprint = true; + memcpy_P(_fingerprint, fingerprint, 20); + } + // Accept any certificate that's self-signed + void allowSelfSignedCerts() { + _use_self_signed = true; + } + // Install certificates of trusted CAs or specific site + void setTrustAnchors(const BearSSLX509List *ta) { + _ta = ta; + } + // In cases when NTP is not used, app must set a time manually to check cert validity + void setX509Time(time_t now) { + _now = now; + } + // Install a client certificate for this connection, in case the server requires it (i.e. MQTT) + void setClientRSACert(const BearSSLX509List *cert, const BearSSLPrivateKey *sk); + void setClientECCert(const BearSSLX509List *cert, const BearSSLPrivateKey *sk, + unsigned allowed_usages, unsigned cert_issuer_key_type); + + // Sets the requested buffer size for transmit and receive + void setBufferSizes(int recv, int xmit); + + // Return an error code and possibly a text string in a passed-in buffer with last SSL failure + int getLastSSLError(char *dest = NULL, size_t len = 0); + + // Attach a preconfigured certificate store + void setCertStore(CertStoreBearSSL *certStore) { + _certStore = certStore; + } + + // Check for Maximum Fragment Length support for given len + static bool probeMaxFragmentLength(IPAddress ip, uint16_t port, uint16_t len); + static bool probeMaxFragmentLength(const char *hostname, uint16_t port, uint16_t len); + static bool probeMaxFragmentLength(const String host, uint16_t port, uint16_t len); + + // AXTLS compatbile wrappers + bool verify(const char* fingerprint, const char* domain_name) { (void) fingerprint; (void) domain_name; return false; } // Can't handle this case, need app code changes + bool verifyCertChain(const char* domain_name) { (void)domain_name; return connected(); } // If we're connected, the cert passed validation during handshake + + bool setCACert(const uint8_t* pk, size_t size); + bool setCertificate(const uint8_t* pk, size_t size); + bool setPrivateKey(const uint8_t* pk, size_t size); + + bool setCACert_P(PGM_VOID_P pk, size_t size) { return setCACert((const uint8_t *)pk, size); } + bool setCertificate_P(PGM_VOID_P pk, size_t size) { return setCertificate((const uint8_t *)pk, size); } + bool setPrivateKey_P(PGM_VOID_P pk, size_t size) { return setPrivateKey((const uint8_t *)pk, size); } + + bool loadCACert(Stream& stream, size_t size); + bool loadCertificate(Stream& stream, size_t size); + bool loadPrivateKey(Stream& stream, size_t size); + + template + bool loadCertificate(TFile& file) { + return loadCertificate(file, file.size()); + } + + template + bool loadPrivateKey(TFile& file) { + return loadPrivateKey(file, file.size()); + } + + template + bool loadCACert(TFile& file) { + return loadCACert(file, file.size()); + } + + private: + void _clear(); + void _clearAuthenticationSettings(); + // Only one of the following two should ever be != nullptr! + std::shared_ptr _sc; + std::shared_ptr _sc_svr; + inline bool ctx_present() { + return (_sc != nullptr) || (_sc_svr != nullptr); + } + br_ssl_engine_context *_eng; // &_sc->eng, to allow for client or server contexts + std::shared_ptr _x509_minimal; + std::shared_ptr _x509_insecure; + std::shared_ptr _x509_knownkey; + std::shared_ptr _iobuf_in; + std::shared_ptr _iobuf_out; + time_t _now; + const BearSSLX509List *_ta; + CertStoreBearSSL *_certStore; + int _iobuf_in_size; + int _iobuf_out_size; + bool _handshake_done; + bool _oom_err; + + bool _use_insecure; + bool _use_fingerprint; + uint8_t _fingerprint[20]; + bool _use_self_signed; + const BearSSLPublicKey *_knownkey; + unsigned _knownkey_usages; + + unsigned char *_recvapp_buf; + size_t _recvapp_len; + + bool _clientConnected(); // Is the underlying socket alive? + bool _connectSSL(const char *hostName); // Do initial SSL handshake + void _freeSSL(); + int _run_until(unsigned target, bool blocking = true); + size_t _write(const uint8_t *buf, size_t size, bool pmem); + bool _wait_for_handshake(); // Sets and return the _handshake_done after connecting + + // Optional client certificate + const BearSSLX509List *_chain; + const BearSSLPrivateKey *_sk; + unsigned _allowed_usages; + unsigned _cert_issuer_key_type; + + // Methods for handling server.available() call which returns a client connection. + friend class WiFiServerSecure; // Server needs to access these constructors + WiFiClientSecure(ClientContext *client, const BearSSLX509List *chain, unsigned cert_issuer_key_type, + const BearSSLPrivateKey *sk, int iobuf_in_size, int iobuf_out_size, const BearSSLX509List *client_CA_ta); + WiFiClientSecure(ClientContext* client, const BearSSLX509List *chain, const BearSSLPrivateKey *sk, + int iobuf_in_size, int iobuf_out_size, const BearSSLX509List *client_CA_ta); + + // RSA keyed server + bool _connectSSLServerRSA(const BearSSLX509List *chain, const BearSSLPrivateKey *sk, const BearSSLX509List *client_CA_ta); + // EC keyed server + bool _connectSSLServerEC(const BearSSLX509List *chain, unsigned cert_issuer_key_type, const BearSSLPrivateKey *sk, + const BearSSLX509List *client_CA_ta); + + // X.509 validators differ from server to client + bool _installClientX509Validator(); // Set up X509 validator for a client conn. + bool _installServerX509Validator(const BearSSLX509List *client_CA_ta); // Setup X509 client cert validation, if supplied + + uint8_t *_streamLoad(Stream& stream, size_t size); + + // AXTLS compatible mode needs to delete the stored certs and keys on destruction + bool _deleteChainKeyTA; + + private: + // Single memory buffer used for BearSSL auxilliary stack, insead of growing main Arduino stack for all apps + static std::shared_ptr _bearssl_stack; + // The local copy, only used to enable a reference count + std::shared_ptr _local_bearssl_stack; +}; + +}; + +#endif diff --git a/libraries/ESP8266WiFi/src/WiFiServerSecure.h b/libraries/ESP8266WiFi/src/WiFiServerSecure.h index 2f78970a0..4b88a2091 100644 --- a/libraries/ESP8266WiFi/src/WiFiServerSecure.h +++ b/libraries/ESP8266WiFi/src/WiFiServerSecure.h @@ -17,27 +17,5 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef wifiserversecure_h -#define wifiserversecure_h - -#include "WiFiServer.h" -class WiFiClientSecure; - -class WiFiServerSecure : public WiFiServer { -public: - WiFiServerSecure(IPAddress addr, uint16_t port); - WiFiServerSecure(uint16_t port); - void setServerKeyAndCert(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen); - void setServerKeyAndCert_P(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen); - virtual ~WiFiServerSecure() {} - WiFiClientSecure available(uint8_t* status = NULL); -private: - bool usePMEM = false; - const uint8_t *rsakey = nullptr; - int rsakeyLen = 0; - const uint8_t *cert = nullptr; - int certLen = 0; -}; - -#endif - +#include "WiFiServerSecureAxTLS.h" +#include "WiFiServerSecureBearSSL.h" diff --git a/libraries/ESP8266WiFi/src/WiFiServerSecure.cpp b/libraries/ESP8266WiFi/src/WiFiServerSecureAxTLS.cpp similarity index 98% rename from libraries/ESP8266WiFi/src/WiFiServerSecure.cpp rename to libraries/ESP8266WiFi/src/WiFiServerSecureAxTLS.cpp index ec7c52fa1..4cb3ae5cf 100644 --- a/libraries/ESP8266WiFi/src/WiFiServerSecure.cpp +++ b/libraries/ESP8266WiFi/src/WiFiServerSecureAxTLS.cpp @@ -36,6 +36,9 @@ extern "C" { #include "include/ClientContext.h" #include "WiFiServerSecure.h" + +namespace axTLS { + WiFiServerSecure::WiFiServerSecure(IPAddress addr, uint16_t port) : WiFiServer(addr, port) { } @@ -77,3 +80,4 @@ WiFiClientSecure WiFiServerSecure::available(uint8_t* status) return WiFiClientSecure(); } +}; diff --git a/libraries/ESP8266WiFi/src/WiFiServerSecureAxTLS.h b/libraries/ESP8266WiFi/src/WiFiServerSecureAxTLS.h new file mode 100644 index 000000000..b309eb89e --- /dev/null +++ b/libraries/ESP8266WiFi/src/WiFiServerSecureAxTLS.h @@ -0,0 +1,48 @@ +/* + WiFiServerSecure.h - Library for Arduino ESP8266 + Copyright (c) 2017 Earle F. Philhower, III + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef wifiserversecure_h +#define wifiserversecure_h + +#include "WiFiServer.h" + +namespace axTLS { + +class WiFiClientSecure; + +class WiFiServerSecure : public WiFiServer { +public: + WiFiServerSecure(IPAddress addr, uint16_t port); + WiFiServerSecure(uint16_t port); + void setServerKeyAndCert(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen); + void setServerKeyAndCert_P(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen); + virtual ~WiFiServerSecure() {} + WiFiClientSecure available(uint8_t* status = NULL); +private: + bool usePMEM = false; + const uint8_t *rsakey = nullptr; + int rsakeyLen = 0; + const uint8_t *cert = nullptr; + int certLen = 0; +}; + +}; + +#endif + diff --git a/libraries/ESP8266WiFi/src/WiFiServerSecureBearSSL.cpp b/libraries/ESP8266WiFi/src/WiFiServerSecureBearSSL.cpp new file mode 100644 index 000000000..e7c3321bf --- /dev/null +++ b/libraries/ESP8266WiFi/src/WiFiServerSecureBearSSL.cpp @@ -0,0 +1,119 @@ +/* + WiFiServerBearSSL.cpp - SSL server for esp8266, mostly compatible + with Arduino WiFi shield library + + Copyright (c) 2018 Earle F. Philhower, III + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#define LWIP_INTERNAL + +extern "C" { +#include "osapi.h" +#include "ets_sys.h" +} + +#include "debug.h" +#include "ESP8266WiFi.h" +#include "WiFiClient.h" +#include "WiFiServer.h" +#include "lwip/opt.h" +#include "lwip/tcp.h" +#include "lwip/inet.h" +#include "include/ClientContext.h" +#include "WiFiServerSecureBearSSL.h" + +namespace BearSSL { + +// Only need to call the standard server constructor +WiFiServerSecure::WiFiServerSecure(IPAddress addr, uint16_t port) : WiFiServer(addr, port) { +} + +// Only need to call the standard server constructor +WiFiServerSecure::WiFiServerSecure(uint16_t port) : WiFiServer(port) { +} + +// Destructor only checks if we need to delete compatibilty cert/key +WiFiServerSecure::~WiFiServerSecure() { + if (_deleteChainAndKey) { + delete _chain; + delete _sk; + } +} + +// Specify a RSA-signed certificate and key for the server. Only copies the pointer, the +// caller needs to preserve this chain and key for the life of the object. +void WiFiServerSecure::setRSACert(const BearSSLX509List *chain, const BearSSLPrivateKey *sk) { + _chain = chain; + _sk = sk; +} + +// Specify a EC-signed certificate and key for the server. Only copies the pointer, the +// caller needs to preserve this chain and key for the life of the object. +void WiFiServerSecure::setECCert(const BearSSLX509List *chain, unsigned cert_issuer_key_type, const BearSSLPrivateKey *sk) { + _chain = chain; + _cert_issuer_key_type = cert_issuer_key_type; + _sk = sk; +} + +// Return a client if there's an available connection waiting. If one is returned, +// then any validation (i.e. client cert checking) will have succeeded. +WiFiClientSecure WiFiServerSecure::available(uint8_t* status) { + (void) status; // Unused + if (_unclaimed) { + if (_sk && _sk->isRSA()) { + WiFiClientSecure result(_unclaimed, _chain, _sk, _iobuf_in_size, _iobuf_out_size, _client_CA_ta); + _unclaimed = _unclaimed->next(); + result.setNoDelay(_noDelay); + DEBUGV("WS:av\r\n"); + return result; + } else if (_sk && _sk->isEC()) { + WiFiClientSecure result(_unclaimed, _chain, _cert_issuer_key_type, _sk, _iobuf_in_size, _iobuf_out_size, _client_CA_ta); + _unclaimed = _unclaimed->next(); + result.setNoDelay(_noDelay); + DEBUGV("WS:av\r\n"); + return result; + } else { + // No key was defined, so we can't actually accept and attempt accept() and SSL handshake. + DEBUGV("WS:nokey\r\n"); + } + } + + // Something weird, return a no-op object + optimistic_yield(1000); + return WiFiClientSecure(); +} + + +void WiFiServerSecure::setServerKeyAndCert(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen) { + BearSSLX509List *chain = new BearSSLX509List(cert, certLen); + BearSSLPrivateKey *sk = new BearSSLPrivateKey(key, keyLen); + if (!chain || !key) { + // OOM, fail gracefully + delete chain; + delete sk; + return; + } + _deleteChainAndKey = true; + setRSACert(chain, sk); +} + +void WiFiServerSecure::setServerKeyAndCert_P(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen) { + setServerKeyAndCert(key, keyLen, cert, certLen); +} + + +}; diff --git a/libraries/ESP8266WiFi/src/WiFiServerSecureBearSSL.h b/libraries/ESP8266WiFi/src/WiFiServerSecureBearSSL.h new file mode 100644 index 000000000..0f165d2f4 --- /dev/null +++ b/libraries/ESP8266WiFi/src/WiFiServerSecureBearSSL.h @@ -0,0 +1,76 @@ +/* + WiFiServerBearSSL.h - Library for Arduino ESP8266 + Copyright (c) 2018 Earle F. Philhower, III + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef wifiserverbearssl_h +#define wifiserverbearssl_h + +#include "WiFiServer.h" +#include "WiFiClientSecureBearSSL.h" +#include "BearSSLHelpers.h" +#include + +namespace BearSSL { + +class WiFiClientSecure; + +class WiFiServerSecure : public WiFiServer { + public: + WiFiServerSecure(IPAddress addr, uint16_t port); + WiFiServerSecure(uint16_t port); + virtual ~WiFiServerSecure(); + + // Override the default buffer sizes, if you know what you're doing... + void setBufferSizes(int recv, int xmit) { + _iobuf_in_size = recv; + _iobuf_out_size = xmit; + } + + // Set the server's RSA key and x509 certificate (required, pick one). + // Caller needs to preserve the chain and key throughout the life of the server. + void setRSACert(const BearSSLX509List *chain, const BearSSLPrivateKey *sk); + // Set the server's EC key and x509 certificate (required, pick one) + // Caller needs to preserve the chain and key throughout the life of the server. + void setECCert(const BearSSLX509List *chain, unsigned cert_issuer_key_type, const BearSSLPrivateKey *sk); + + // Require client certificates validated against the passed in x509 trust anchor + // Caller needs to preserve the cert throughout the life of the server. + void setClientTrustAnchor(const BearSSLX509List *client_CA_ta) { + _client_CA_ta = client_CA_ta; + } + + // If awaiting connection available and authenticated (i.e. client cert), return it. + WiFiClientSecure available(uint8_t* status = NULL); + + // Compatibility with axTLS interface + void setServerKeyAndCert(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen); + void setServerKeyAndCert_P(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen); + + private: + const BearSSLX509List *_chain = nullptr; + unsigned _cert_issuer_key_type = 0; + const BearSSLPrivateKey *_sk = nullptr; + int _iobuf_in_size = BR_SSL_BUFSIZE_INPUT; + int _iobuf_out_size = 837; + const BearSSLX509List *_client_CA_ta = nullptr; + bool _deleteChainAndKey = false; +}; + +}; + +#endif diff --git a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp index 92f1bfd85..5cc4b6a09 100644 --- a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp +++ b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp @@ -65,6 +65,14 @@ HTTPUpdateResult ESP8266HTTPUpdate::update(const String& url, const String& curr return handleUpdate(http, currentVersion, false); } +HTTPUpdateResult ESP8266HTTPUpdate::update(const String& url, const String& currentVersion, + const uint8_t httpsFingerprint[20]) +{ + HTTPClient http; + http.begin(url, httpsFingerprint); + return handleUpdate(http, currentVersion, false); +} + HTTPUpdateResult ESP8266HTTPUpdate::updateSpiffs(const String& url, const String& currentVersion, const String& httpsFingerprint) { HTTPClient http; @@ -72,6 +80,13 @@ HTTPUpdateResult ESP8266HTTPUpdate::updateSpiffs(const String& url, const String return handleUpdate(http, currentVersion, true); } +HTTPUpdateResult ESP8266HTTPUpdate::updateSpiffs(const String& url, const String& currentVersion, const uint8_t httpsFingerprint[20]) +{ + HTTPClient http; + http.begin(url, httpsFingerprint); + return handleUpdate(http, currentVersion, true); +} + HTTPUpdateResult ESP8266HTTPUpdate::updateSpiffs(const String& url, const String& currentVersion) { HTTPClient http; @@ -98,13 +113,21 @@ HTTPUpdateResult ESP8266HTTPUpdate::update(const String& host, uint16_t port, co http.begin(host, port, uri); return handleUpdate(http, currentVersion, false); } + HTTPUpdateResult ESP8266HTTPUpdate::update(const String& host, uint16_t port, const String& url, const String& currentVersion, const String& httpsFingerprint) { HTTPClient http; http.begin(host, port, url, httpsFingerprint); return handleUpdate(http, currentVersion, false); +} +HTTPUpdateResult ESP8266HTTPUpdate::update(const String& host, uint16_t port, const String& url, + const String& currentVersion, const uint8_t httpsFingerprint[20]) +{ + HTTPClient http; + http.begin(host, port, url, httpsFingerprint); + return handleUpdate(http, currentVersion, false); } /** diff --git a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h index ec532c290..1676d51df 100644 --- a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h +++ b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h @@ -78,6 +78,8 @@ public: t_httpUpdate_return update(const String& url, const String& currentVersion = ""); t_httpUpdate_return update(const String& url, const String& currentVersion, const String& httpsFingerprint); + t_httpUpdate_return update(const String& url, const String& currentVersion, + const uint8_t httpsFingerprint[20]); // BearSSL // This function is deprecated, use one of the overloads below along with rebootOnUpdate t_httpUpdate_return update(const String& host, uint16_t port, const String& uri, const String& currentVersion, @@ -87,12 +89,15 @@ public: const String& currentVersion = ""); t_httpUpdate_return update(const String& host, uint16_t port, const String& url, const String& currentVersion, const String& httpsFingerprint); + t_httpUpdate_return update(const String& host, uint16_t port, const String& url, + const String& currentVersion, const uint8_t httpsFingerprint[20]); // BearSSL // This function is deprecated, use rebootOnUpdate and the next one instead t_httpUpdate_return updateSpiffs(const String& url, const String& currentVersion, const String& httpsFingerprint, bool reboot) __attribute__((deprecated)); t_httpUpdate_return updateSpiffs(const String& url, const String& currentVersion = ""); t_httpUpdate_return updateSpiffs(const String& url, const String& currentVersion, const String& httpsFingerprint); + t_httpUpdate_return updateSpiffs(const String& url, const String& currentVersion, const uint8_t httpsFingerprint[20]); // BearSSL int getLastError(void); diff --git a/platform.txt b/platform.txt index e4de798c5..429cea6ec 100644 --- a/platform.txt +++ b/platform.txt @@ -40,7 +40,7 @@ compiler.S.flags=-c -g -x assembler-with-cpp -MMD -mlongcalls compiler.c.elf.flags=-g {compiler.warning_flags} -Os -nostdlib -Wl,--no-check-sections -u app_entry {build.float} -Wl,-static "-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/ld" "-L{compiler.libc.path}/lib" "-T{build.flash_ld}" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,spi_flash_read compiler.c.elf.cmd=xtensa-lx106-elf-gcc -compiler.c.elf.libs=-lhal -lphy -lpp -lnet80211 {build.lwip_lib} -lwpa -lcrypto -lmain -lwps -laxtls -lespnow -lsmartconfig -lairkiss -lwpa2 -lstdc++ -lm -lc -lgcc +compiler.c.elf.libs=-lhal -lphy -lpp -lnet80211 {build.lwip_lib} -lwpa -lcrypto -lmain -lwps -lbearssl -laxtls -lespnow -lsmartconfig -lairkiss -lwpa2 -lstdc++ -lm -lc -lgcc compiler.cpp.cmd=xtensa-lx106-elf-g++ compiler.cpp.flags=-c {compiler.warning_flags} -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11 -MMD -ffunction-sections -fdata-sections diff --git a/tests/common.sh b/tests/common.sh index e76f24300..f634fa78f 100755 --- a/tests/common.sh +++ b/tests/common.sh @@ -40,7 +40,7 @@ function build_sketches() local build_arg=$3 local build_dir=build.tmp mkdir -p $build_dir - local build_cmd="python tools/build.py -b generic -v -w all -k -p $PWD/$build_dir $build_arg " + local build_cmd="python tools/build.py -b generic -v -w all -s 4M1M -v -k -p $PWD/$build_dir $build_arg " local sketches=$(find $srcpath -name *.ino) print_size_info >size.log export ARDUINO_IDE_PATH=$arduino @@ -145,7 +145,7 @@ function build_boards() function install_platformio() { pip install --user -U https://github.com/platformio/platformio/archive/develop.zip - platformio platform install https://github.com/platformio/platform-espressif8266.git#feature/stage + platformio platform install "https://github.com/platformio/platform-espressif8266.git#feature/stage" sed -i 's/https:\/\/github\.com\/esp8266\/Arduino\.git/*/' ~/.platformio/platforms/espressif8266/platform.json ln -s $TRAVIS_BUILD_DIR ~/.platformio/packages/framework-arduinoespressif8266 # Install dependencies: @@ -243,7 +243,7 @@ if [ "$BUILD_TYPE" = "build" ]; then elif [ "$BUILD_TYPE" = "platformio" ]; then # PlatformIO install_platformio - build_sketches_with_platformio $TRAVIS_BUILD_DIR/libraries "--board nodemcuv2 --verbose" + build_sketches_with_platformio $TRAVIS_BUILD_DIR/libraries "--board nodemcuv2 --project-option=lib_ldf_mode=deep+ --verbose" elif [ "$BUILD_TYPE" = "docs" ]; then # Build documentation using Sphinx cd $TRAVIS_BUILD_DIR/doc diff --git a/tools/platformio-build.py b/tools/platformio-build.py index 2cc1efae6..523e482ad 100644 --- a/tools/platformio-build.py +++ b/tools/platformio-build.py @@ -78,7 +78,7 @@ env.Append( LIBS=[ "hal", "phy", "pp", "net80211", "wpa", "crypto", "main", - "wps", "axtls", "espnow", "smartconfig", "airkiss", "wpa2", + "wps", "bearssl", "axtls", "espnow", "smartconfig", "airkiss", "wpa2", "stdc++", "m", "c", "gcc" ], diff --git a/tools/sdk/include/bearssl/bearssl.h b/tools/sdk/include/bearssl/bearssl.h new file mode 100644 index 000000000..ceabb1091 --- /dev/null +++ b/tools/sdk/include/bearssl/bearssl.h @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2016 Thomas Pornin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BR_BEARSSL_H__ +#define BR_BEARSSL_H__ + +#include +#include + +/** \mainpage BearSSL API + * + * # API Layout + * + * The functions and structures defined by the BearSSL API are located + * in various header files: + * + * | Header file | Elements | + * | :-------------- | :------------------------------------------------ | + * | bearssl_hash.h | Hash functions | + * | bearssl_hmac.h | HMAC | + * | bearssl_rand.h | Pseudorandom byte generators | + * | bearssl_prf.h | PRF implementations (for SSL/TLS) | + * | bearssl_block.h | Symmetric encryption | + * | bearssl_aead.h | AEAD algorithms (combined encryption + MAC) | + * | bearssl_rsa.h | RSA encryption and signatures | + * | bearssl_ec.h | Elliptic curves support (including ECDSA) | + * | bearssl_ssl.h | SSL/TLS engine interface | + * | bearssl_x509.h | X.509 certificate decoding and validation | + * | bearssl_pem.h | Base64/PEM decoding support functions | + * + * Applications using BearSSL are supposed to simply include `bearssl.h` + * as follows: + * + * #include + * + * The `bearssl.h` file itself includes all the other header files. It is + * possible to include specific header files, but it has no practical + * advantage for the application. The API is separated into separate + * header files only for documentation convenience. + * + * + * # Conventions + * + * ## MUST and SHALL + * + * In all descriptions, the usual "MUST", "SHALL", "MAY",... terminology + * is used. Failure to meet requirements expressed with a "MUST" or + * "SHALL" implies undefined behaviour, which means that segmentation + * faults, buffer overflows, and other similar adverse events, may occur. + * + * In general, BearSSL is not very forgiving of programming errors, and + * does not include much failsafes or error reporting when the problem + * does not arise from external transient conditions, and can be fixed + * only in the application code. This is done so in order to make the + * total code footprint lighter. + * + * + * ## `NULL` values + * + * Function parameters with a pointer type shall not be `NULL` unless + * explicitly authorised by the documentation. As an exception, when + * the pointer aims at a sequence of bytes and is accompanied with + * a length parameter, and the length is zero (meaning that there is + * no byte at all to retrieve), then the pointer may be `NULL` even if + * not explicitly allowed. + * + * + * ## Memory Allocation + * + * BearSSL does not perform dynamic memory allocation. This implies that + * for any functionality that requires a non-transient state, the caller + * is responsible for allocating the relevant context structure. Such + * allocation can be done in any appropriate area, including static data + * segments, the heap, and the stack, provided that proper alignment is + * respected. The header files define these context structures + * (including size and contents), so the C compiler should handle + * alignment automatically. + * + * Since there is no dynamic resource allocation, there is also nothing to + * release. When the calling code is done with a BearSSL feature, it + * may simple release the context structures it allocated itself, with + * no "close function" to call. If the context structures were allocated + * on the stack (as local variables), then even that release operation is + * implicit. + * + * + * ## Structure Contents + * + * Except when explicitly indicated, structure contents are opaque: they + * are included in the header files so that calling code may know the + * structure sizes and alignment requirements, but callers SHALL NOT + * access individual fields directly. For fields that are supposed to + * be read from or written to, the API defines accessor functions (the + * simplest of these accessor functions are defined as `static inline` + * functions, and the C compiler will optimise them away). + * + * + * # API Usage + * + * BearSSL usage for running a SSL/TLS client or server is described + * on the [BearSSL Web site](https://www.bearssl.org/api1.html). The + * BearSSL source archive also comes with sample code. + */ + +#include "bearssl_hash.h" +#include "bearssl_hmac.h" +#include "bearssl_rand.h" +#include "bearssl_prf.h" +#include "bearssl_block.h" +#include "bearssl_aead.h" +#include "bearssl_rsa.h" +#include "bearssl_ec.h" +#include "bearssl_ssl.h" +#include "bearssl_x509.h" +#include "bearssl_pem.h" +#include "bearssl_port.h" + +/** \brief Type for a configuration option. + * + * A "configuration option" is a value that is selected when the BearSSL + * library itself is compiled. Most options are boolean; their value is + * then either 1 (option is enabled) or 0 (option is disabled). Some + * values have other integer values. Option names correspond to macro + * names. Some of the options can be explicitly set in the internal + * `"config.h"` file. + */ +typedef struct { + /** \brief Configurable option name. */ + const char *name; + /** \brief Configurable option value. */ + long value; +} br_config_option; + +/** \brief Get configuration report. + * + * This function returns compiled configuration options, each as a + * 'long' value. Names match internal macro names, in particular those + * that can be set in the `"config.h"` inner file. For boolean options, + * the numerical value is 1 if enabled, 0 if disabled. For maximum + * key sizes, values are expressed in bits. + * + * The returned array is terminated by an entry whose `name` is `NULL`. + * + * \return the configuration report. + */ +const br_config_option *br_get_config(void); + +#endif diff --git a/tools/sdk/include/bearssl/bearssl_aead.h b/tools/sdk/include/bearssl/bearssl_aead.h new file mode 100644 index 000000000..c495dc20d --- /dev/null +++ b/tools/sdk/include/bearssl/bearssl_aead.h @@ -0,0 +1,1059 @@ +/* + * Copyright (c) 2017 Thomas Pornin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BR_BEARSSL_AEAD_H__ +#define BR_BEARSSL_AEAD_H__ + +#include +#include + +#include "bearssl_block.h" +#include "bearssl_hash.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file bearssl_aead.h + * + * # Authenticated Encryption with Additional Data + * + * This file documents the API for AEAD encryption. + * + * + * ## Procedural API + * + * An AEAD algorithm processes messages and provides confidentiality + * (encryption) and checked integrity (MAC). It uses the following + * parameters: + * + * - A symmetric key. Exact size depends on the AEAD algorithm. + * + * - A nonce (IV). Size depends on the AEAD algorithm; for most + * algorithms, it is crucial for security that any given nonce + * value is never used twice for the same key and distinct + * messages. + * + * - Data to encrypt and protect. + * + * - Additional authenticated data, which is covered by the MAC but + * otherwise left untouched (i.e. not encrypted). + * + * The AEAD algorithm encrypts the data, and produces an authentication + * tag. It is assumed that the encrypted data, the tag, the additional + * authenticated data and the nonce are sent to the receiver; the + * additional data and the nonce may be implicit (e.g. using elements of + * the underlying transport protocol, such as record sequence numbers). + * The receiver will recompute the tag value and compare it with the one + * received; if they match, then the data is correct, and can be + * decrypted and used; otherwise, at least one of the elements was + * altered in transit, normally leading to wholesale rejection of the + * complete message. + * + * For each AEAD algorithm, identified by a symbolic name (hereafter + * denoted as "`xxx`"), the following functions are defined: + * + * - `br_xxx_init()` + * + * Initialise the AEAD algorithm, on a provided context structure. + * Exact parameters depend on the algorithm, and may include + * pointers to extra implementations and context structures. The + * secret key is provided at this point, either directly or + * indirectly. + * + * - `br_xxx_reset()` + * + * Start a new AEAD computation. The nonce value is provided as + * parameter to this function. + * + * - `br_xxx_aad_inject()` + * + * Inject some additional authenticated data. Additional data may + * be provided in several chunks of arbitrary length. + * + * - `br_xxx_flip()` + * + * This function MUST be called after injecting all additional + * authenticated data, and before beginning to encrypt the plaintext + * (or decrypt the ciphertext). + * + * - `br_xxx_run()` + * + * Process some plaintext (to encrypt) or ciphertext (to decrypt). + * Encryption/decryption is done in place. Data may be provided in + * several chunks of arbitrary length. + * + * - `br_xxx_get_tag()` + * + * Compute the authentication tag. All message data (encrypted or + * decrypted) must have been injected at that point. Also, this + * call may modify internal context elements, so it may be called + * only once for a given AEAD computation. + * + * - `br_xxx_check_tag()` + * + * An alternative to `br_xxx_get_tag()`, meant to be used by the + * receiver: the authentication tag is internally recomputed, and + * compared with the one provided as parameter. + * + * This API makes the following assumptions on the AEAD algorithm: + * + * - Encryption does not expand the size of the ciphertext; there is + * no padding. This is true of most modern AEAD modes such as GCM. + * + * - The additional authenticated data must be processed first, + * before the encrypted/decrypted data. + * + * - Nonce, plaintext and additional authenticated data all consist + * in an integral number of bytes. There is no provision to use + * elements whose length in bits is not a multiple of 8. + * + * Each AEAD algorithm has its own requirements and limits on the sizes + * of additional data and plaintext. This API does not provide any + * way to report invalid usage; it is up to the caller to ensure that + * the provided key, nonce, and data elements all fit the algorithm's + * requirements. + * + * + * ## Object-Oriented API + * + * Each context structure begins with a field (called `vtable`) that + * points to an instance of a structure that references the relevant + * functions through pointers. Each such structure contains the + * following: + * + * - `reset` + * + * Pointer to the reset function, that allows starting a new + * computation. + * + * - `aad_inject` + * + * Pointer to the additional authenticated data injection function. + * + * - `flip` + * + * Pointer to the function that transitions from additional data + * to main message data processing. + * + * - `get_tag` + * + * Pointer to the function that computes and returns the tag. + * + * - `check_tag` + * + * Pointer to the function that computes and verifies the tag against + * a received value. + * + * Note that there is no OOP method for context initialisation: the + * various AEAD algorithms have different requirements that would not + * map well to a single initialisation API. + * + * The OOP API is not provided for CCM, due to its specific requirements + * (length of plaintext must be known in advance). + */ + +/** + * \brief Class type of an AEAD algorithm. + */ +typedef struct br_aead_class_ br_aead_class; +struct br_aead_class_ { + + /** + * \brief Size (in bytes) of authentication tags created by + * this AEAD algorithm. + */ + size_t tag_size; + + /** + * \brief Reset an AEAD context. + * + * This function resets an already initialised AEAD context for + * a new computation run. Implementations and keys are + * conserved. This function can be called at any time; it + * cancels any ongoing AEAD computation that uses the provided + * context structure. + + * The provided IV is a _nonce_. Each AEAD algorithm has its + * own requirements on IV size and contents; for most of them, + * it is crucial to security that each nonce value is used + * only once for a given secret key. + * + * \param cc AEAD context structure. + * \param iv AEAD nonce to use. + * \param len AEAD nonce length (in bytes). + */ + void (*reset)(const br_aead_class **cc, const void *iv, size_t len); + + /** + * \brief Inject additional authenticated data. + * + * The provided data is injected into a running AEAD + * computation. Additional data must be injected _before_ the + * call to `flip()`. Additional data can be injected in several + * chunks of arbitrary length. + * + * \param cc AEAD context structure. + * \param data pointer to additional authenticated data. + * \param len length of additional authenticated data (in bytes). + */ + void (*aad_inject)(const br_aead_class **cc, + const void *data, size_t len); + + /** + * \brief Finish injection of additional authenticated data. + * + * This function MUST be called before beginning the actual + * encryption or decryption (with `run()`), even if no + * additional authenticated data was injected. No additional + * authenticated data may be injected after this function call. + * + * \param cc AEAD context structure. + */ + void (*flip)(const br_aead_class **cc); + + /** + * \brief Encrypt or decrypt some data. + * + * Data encryption or decryption can be done after `flip()` has + * been called on the context. If `encrypt` is non-zero, then + * the provided data shall be plaintext, and it is encrypted in + * place. Otherwise, the data shall be ciphertext, and it is + * decrypted in place. + * + * Data may be provided in several chunks of arbitrary length. + * + * \param cc AEAD context structure. + * \param encrypt non-zero for encryption, zero for decryption. + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + */ + void (*run)(const br_aead_class **cc, int encrypt, + void *data, size_t len); + + /** + * \brief Compute authentication tag. + * + * Compute the AEAD authentication tag. The tag length depends + * on the AEAD algorithm; it is written in the provided `tag` + * buffer. This call terminates the AEAD run: no data may be + * processed with that AEAD context afterwards, until `reset()` + * is called to initiate a new AEAD run. + * + * The tag value must normally be sent along with the encrypted + * data. When decrypting, the tag value must be recomputed and + * compared with the received tag: if the two tag values differ, + * then either the tag or the encrypted data was altered in + * transit. As an alternative to this function, the + * `check_tag()` function may be used to compute and check the + * tag value. + * + * Tag length depends on the AEAD algorithm. + * + * \param cc AEAD context structure. + * \param tag destination buffer for the tag. + */ + void (*get_tag)(const br_aead_class **cc, void *tag); + + /** + * \brief Compute and check authentication tag. + * + * This function is an alternative to `get_tag()`, and is + * normally used on the receiving end (i.e. when decrypting + * messages). The tag value is recomputed and compared with the + * provided tag value. If they match, 1 is returned; on + * mismatch, 0 is returned. A returned value of 0 means that the + * data or the tag was altered in transit, normally leading to + * wholesale rejection of the complete message. + * + * Tag length depends on the AEAD algorithm. + * + * \param cc AEAD context structure. + * \param tag tag value to compare with. + * \return 1 on success (exact match of tag value), 0 otherwise. + */ + uint32_t (*check_tag)(const br_aead_class **cc, const void *tag); + + /** + * \brief Compute authentication tag (with truncation). + * + * This function is similar to `get_tag()`, except that the tag + * length is provided. Some AEAD algorithms allow several tag + * lengths, usually by truncating the normal tag. Shorter tags + * mechanically increase success probability of forgeries. + * The range of allowed tag lengths depends on the algorithm. + * + * \param cc AEAD context structure. + * \param tag destination buffer for the tag. + * \param len tag length (in bytes). + */ + void (*get_tag_trunc)(const br_aead_class **cc, void *tag, size_t len); + + /** + * \brief Compute and check authentication tag (with truncation). + * + * This function is similar to `check_tag()` except that it + * works over an explicit tag length. See `get_tag()` for a + * discussion of explicit tag lengths; the range of allowed tag + * lengths depends on the algorithm. + * + * \param cc AEAD context structure. + * \param tag tag value to compare with. + * \param len tag length (in bytes). + * \return 1 on success (exact match of tag value), 0 otherwise. + */ + uint32_t (*check_tag_trunc)(const br_aead_class **cc, + const void *tag, size_t len); +}; + +/** + * \brief Context structure for GCM. + * + * GCM is an AEAD mode that combines a block cipher in CTR mode with a + * MAC based on GHASH, to provide authenticated encryption: + * + * - Any block cipher with 16-byte blocks can be used with GCM. + * + * - The nonce can have any length, from 0 up to 2^64-1 bits; however, + * 96-bit nonces (12 bytes) are recommended (nonces with a length + * distinct from 12 bytes are internally hashed, which risks reusing + * nonce value with a small but not always negligible probability). + * + * - Additional authenticated data may have length up to 2^64-1 bits. + * + * - Message length may range up to 2^39-256 bits at most. + * + * - The authentication tag has length 16 bytes. + * + * The GCM initialisation function receives as parameter an + * _initialised_ block cipher implementation context, with the secret + * key already set. A pointer to that context will be kept within the + * GCM context structure. It is up to the caller to allocate and + * initialise that block cipher context. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_aead_class *vtable; + +#ifndef BR_DOXYGEN_IGNORE + const br_block_ctr_class **bctx; + br_ghash gh; + unsigned char h[16]; + unsigned char j0_1[12]; + unsigned char buf[16]; + unsigned char y[16]; + uint32_t j0_2, jc; + uint64_t count_aad, count_ctr; +#endif +} br_gcm_context; + +/** + * \brief Initialize a GCM context. + * + * A block cipher implementation, with its initialised context structure, + * is provided. The block cipher MUST use 16-byte blocks in CTR mode, + * and its secret key MUST have been already set in the provided context. + * A GHASH implementation must also be provided. The parameters are linked + * in the GCM context. + * + * After this function has been called, the `br_gcm_reset()` function must + * be called, to provide the IV for GCM computation. + * + * \param ctx GCM context structure. + * \param bctx block cipher context (already initialised with secret key). + * \param gh GHASH implementation. + */ +void br_gcm_init(br_gcm_context *ctx, + const br_block_ctr_class **bctx, br_ghash gh); + +/** + * \brief Reset a GCM context. + * + * This function resets an already initialised GCM context for a new + * computation run. Implementations and keys are conserved. This function + * can be called at any time; it cancels any ongoing GCM computation that + * uses the provided context structure. + * + * The provided IV is a _nonce_. It is critical to GCM security that IV + * values are not repeated for the same encryption key. IV can have + * arbitrary length (up to 2^64-1 bits), but the "normal" length is + * 96 bits (12 bytes). + * + * \param ctx GCM context structure. + * \param iv GCM nonce to use. + * \param len GCM nonce length (in bytes). + */ +void br_gcm_reset(br_gcm_context *ctx, const void *iv, size_t len); + +/** + * \brief Inject additional authenticated data into GCM. + * + * The provided data is injected into a running GCM computation. Additional + * data must be injected _before_ the call to `br_gcm_flip()`. + * Additional data can be injected in several chunks of arbitrary length; + * the maximum total size of additional authenticated data is 2^64-1 + * bits. + * + * \param ctx GCM context structure. + * \param data pointer to additional authenticated data. + * \param len length of additional authenticated data (in bytes). + */ +void br_gcm_aad_inject(br_gcm_context *ctx, const void *data, size_t len); + +/** + * \brief Finish injection of additional authenticated data into GCM. + * + * This function MUST be called before beginning the actual encryption + * or decryption (with `br_gcm_run()`), even if no additional authenticated + * data was injected. No additional authenticated data may be injected + * after this function call. + * + * \param ctx GCM context structure. + */ +void br_gcm_flip(br_gcm_context *ctx); + +/** + * \brief Encrypt or decrypt some data with GCM. + * + * Data encryption or decryption can be done after `br_gcm_flip()` + * has been called on the context. If `encrypt` is non-zero, then the + * provided data shall be plaintext, and it is encrypted in place. + * Otherwise, the data shall be ciphertext, and it is decrypted in place. + * + * Data may be provided in several chunks of arbitrary length. The maximum + * total length for data is 2^39-256 bits, i.e. about 65 gigabytes. + * + * \param ctx GCM context structure. + * \param encrypt non-zero for encryption, zero for decryption. + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + */ +void br_gcm_run(br_gcm_context *ctx, int encrypt, void *data, size_t len); + +/** + * \brief Compute GCM authentication tag. + * + * Compute the GCM authentication tag. The tag is a 16-byte value which + * is written in the provided `tag` buffer. This call terminates the + * GCM run: no data may be processed with that GCM context afterwards, + * until `br_gcm_reset()` is called to initiate a new GCM run. + * + * The tag value must normally be sent along with the encrypted data. + * When decrypting, the tag value must be recomputed and compared with + * the received tag: if the two tag values differ, then either the tag + * or the encrypted data was altered in transit. As an alternative to + * this function, the `br_gcm_check_tag()` function can be used to + * compute and check the tag value. + * + * \param ctx GCM context structure. + * \param tag destination buffer for the tag (16 bytes). + */ +void br_gcm_get_tag(br_gcm_context *ctx, void *tag); + +/** + * \brief Compute and check GCM authentication tag. + * + * This function is an alternative to `br_gcm_get_tag()`, normally used + * on the receiving end (i.e. when decrypting value). The tag value is + * recomputed and compared with the provided tag value. If they match, 1 + * is returned; on mismatch, 0 is returned. A returned value of 0 means + * that the data or the tag was altered in transit, normally leading to + * wholesale rejection of the complete message. + * + * \param ctx GCM context structure. + * \param tag tag value to compare with (16 bytes). + * \return 1 on success (exact match of tag value), 0 otherwise. + */ +uint32_t br_gcm_check_tag(br_gcm_context *ctx, const void *tag); + +/** + * \brief Compute GCM authentication tag (with truncation). + * + * This function is similar to `br_gcm_get_tag()`, except that it allows + * the tag to be truncated to a smaller length. The intended tag length + * is provided as `len` (in bytes); it MUST be no more than 16, but + * it may be smaller. Note that decreasing tag length mechanically makes + * forgeries easier; NIST SP 800-38D specifies that the tag length shall + * lie between 12 and 16 bytes (inclusive), but may be truncated down to + * 4 or 8 bytes, for specific applications that can tolerate it. It must + * also be noted that successful forgeries leak information on the + * authentication key, making subsequent forgeries easier. Therefore, + * tag truncation, and in particular truncation to sizes lower than 12 + * bytes, shall be envisioned only with great care. + * + * The tag is written in the provided `tag` buffer. This call terminates + * the GCM run: no data may be processed with that GCM context + * afterwards, until `br_gcm_reset()` is called to initiate a new GCM + * run. + * + * The tag value must normally be sent along with the encrypted data. + * When decrypting, the tag value must be recomputed and compared with + * the received tag: if the two tag values differ, then either the tag + * or the encrypted data was altered in transit. As an alternative to + * this function, the `br_gcm_check_tag_trunc()` function can be used to + * compute and check the tag value. + * + * \param ctx GCM context structure. + * \param tag destination buffer for the tag. + * \param len tag length (16 bytes or less). + */ +void br_gcm_get_tag_trunc(br_gcm_context *ctx, void *tag, size_t len); + +/** + * \brief Compute and check GCM authentication tag (with truncation). + * + * This function is an alternative to `br_gcm_get_tag_trunc()`, normally used + * on the receiving end (i.e. when decrypting value). The tag value is + * recomputed and compared with the provided tag value. If they match, 1 + * is returned; on mismatch, 0 is returned. A returned value of 0 means + * that the data or the tag was altered in transit, normally leading to + * wholesale rejection of the complete message. + * + * Tag length MUST be 16 bytes or less. The normal GCM tag length is 16 + * bytes. See `br_check_tag_trunc()` for some discussion on the potential + * perils of truncating authentication tags. + * + * \param ctx GCM context structure. + * \param tag tag value to compare with. + * \param len tag length (in bytes). + * \return 1 on success (exact match of tag value), 0 otherwise. + */ +uint32_t br_gcm_check_tag_trunc(br_gcm_context *ctx, + const void *tag, size_t len); + +/** + * \brief Class instance for GCM. + */ +extern const br_aead_class br_gcm_vtable; + +/** + * \brief Context structure for EAX. + * + * EAX is an AEAD mode that combines a block cipher in CTR mode with + * CBC-MAC using the same block cipher and the same key, to provide + * authenticated encryption: + * + * - Any block cipher with 16-byte blocks can be used with EAX + * (technically, other block sizes are defined as well, but this + * is not implemented by these functions; shorter blocks also + * imply numerous security issues). + * + * - The nonce can have any length, as long as nonce values are + * not reused (thus, if nonces are randomly selected, the nonce + * size should be such that reuse probability is negligible). + * + * - Additional authenticated data length is unlimited. + * + * - Message length is unlimited. + * + * - The authentication tag has length 16 bytes. + * + * The EAX initialisation function receives as parameter an + * _initialised_ block cipher implementation context, with the secret + * key already set. A pointer to that context will be kept within the + * EAX context structure. It is up to the caller to allocate and + * initialise that block cipher context. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_aead_class *vtable; + +#ifndef BR_DOXYGEN_IGNORE + const br_block_ctrcbc_class **bctx; + unsigned char L2[16]; + unsigned char L4[16]; + unsigned char nonce[16]; + unsigned char head[16]; + unsigned char ctr[16]; + unsigned char cbcmac[16]; + unsigned char buf[16]; + size_t ptr; +#endif +} br_eax_context; + +/** + * \brief EAX captured state. + * + * Some internal values computed by EAX may be captured at various + * points, and reused for another EAX run with the same secret key, + * for lower per-message overhead. Captured values do not depend on + * the nonce. + */ +typedef struct { +#ifndef BR_DOXYGEN_IGNORE + unsigned char st[3][16]; +#endif +} br_eax_state; + +/** + * \brief Initialize an EAX context. + * + * A block cipher implementation, with its initialised context + * structure, is provided. The block cipher MUST use 16-byte blocks in + * CTR + CBC-MAC mode, and its secret key MUST have been already set in + * the provided context. The parameters are linked in the EAX context. + * + * After this function has been called, the `br_eax_reset()` function must + * be called, to provide the nonce for EAX computation. + * + * \param ctx EAX context structure. + * \param bctx block cipher context (already initialised with secret key). + */ +void br_eax_init(br_eax_context *ctx, const br_block_ctrcbc_class **bctx); + +/** + * \brief Capture pre-AAD state. + * + * This function precomputes key-dependent data, and stores it in the + * provided `st` structure. This structure should then be used with + * `br_eax_reset_pre_aad()`, or updated with `br_eax_get_aad_mac()` + * and then used with `br_eax_reset_post_aad()`. + * + * The EAX context structure is unmodified by this call. + * + * \param ctx EAX context structure. + * \param st recipient for captured state. + */ +void br_eax_capture(const br_eax_context *ctx, br_eax_state *st); + +/** + * \brief Reset an EAX context. + * + * This function resets an already initialised EAX context for a new + * computation run. Implementations and keys are conserved. This function + * can be called at any time; it cancels any ongoing EAX computation that + * uses the provided context structure. + * + * It is critical to EAX security that nonce values are not repeated for + * the same encryption key. Nonces can have arbitrary length. If nonces + * are randomly generated, then a nonce length of at least 128 bits (16 + * bytes) is recommended, to make nonce reuse probability sufficiently + * low. + * + * \param ctx EAX context structure. + * \param nonce EAX nonce to use. + * \param len EAX nonce length (in bytes). + */ +void br_eax_reset(br_eax_context *ctx, const void *nonce, size_t len); + +/** + * \brief Reset an EAX context with a pre-AAD captured state. + * + * This function is an alternative to `br_eax_reset()`, that reuses a + * previously captured state structure for lower per-message overhead. + * The state should have been populated with `br_eax_capture_state()` + * but not updated with `br_eax_get_aad_mac()`. + * + * After this function is called, additional authenticated data MUST + * be injected. At least one byte of additional authenticated data + * MUST be provided with `br_eax_aad_inject()`; computation result will + * be incorrect if `br_eax_flip()` is called right away. + * + * After injection of the AAD and call to `br_eax_flip()`, at least + * one message byte must be provided. Empty messages are not supported + * with this reset mode. + * + * \param ctx EAX context structure. + * \param st pre-AAD captured state. + * \param nonce EAX nonce to use. + * \param len EAX nonce length (in bytes). + */ +void br_eax_reset_pre_aad(br_eax_context *ctx, const br_eax_state *st, + const void *nonce, size_t len); + +/** + * \brief Reset an EAX context with a post-AAD captured state. + * + * This function is an alternative to `br_eax_reset()`, that reuses a + * previously captured state structure for lower per-message overhead. + * The state should have been populated with `br_eax_capture_state()` + * and then updated with `br_eax_get_aad_mac()`. + * + * After this function is called, message data MUST be injected. The + * `br_eax_flip()` function MUST NOT be called. At least one byte of + * message data MUST be provided with `br_eax_run()`; empty messages + * are not supported with this reset mode. + * + * \param ctx EAX context structure. + * \param st post-AAD captured state. + * \param nonce EAX nonce to use. + * \param len EAX nonce length (in bytes). + */ +void br_eax_reset_post_aad(br_eax_context *ctx, const br_eax_state *st, + const void *nonce, size_t len); + +/** + * \brief Inject additional authenticated data into EAX. + * + * The provided data is injected into a running EAX computation. Additional + * data must be injected _before_ the call to `br_eax_flip()`. + * Additional data can be injected in several chunks of arbitrary length; + * the total amount of additional authenticated data is unlimited. + * + * \param ctx EAX context structure. + * \param data pointer to additional authenticated data. + * \param len length of additional authenticated data (in bytes). + */ +void br_eax_aad_inject(br_eax_context *ctx, const void *data, size_t len); + +/** + * \brief Finish injection of additional authenticated data into EAX. + * + * This function MUST be called before beginning the actual encryption + * or decryption (with `br_eax_run()`), even if no additional authenticated + * data was injected. No additional authenticated data may be injected + * after this function call. + * + * \param ctx EAX context structure. + */ +void br_eax_flip(br_eax_context *ctx); + +/** + * \brief Obtain a copy of the MAC on additional authenticated data. + * + * This function may be called only after `br_eax_flip()`; it copies the + * AAD-specific MAC value into the provided state. The MAC value depends + * on the secret key and the additional data itself, but not on the + * nonce. The updated state `st` is meant to be used as parameter for a + * further `br_eax_reset_post_aad()` call. + * + * \param ctx EAX context structure. + * \param st captured state to update. + */ +static inline void +br_eax_get_aad_mac(const br_eax_context *ctx, br_eax_state *st) +{ + memcpy(st->st[1], ctx->head, sizeof ctx->head); +} + +/** + * \brief Encrypt or decrypt some data with EAX. + * + * Data encryption or decryption can be done after `br_eax_flip()` + * has been called on the context. If `encrypt` is non-zero, then the + * provided data shall be plaintext, and it is encrypted in place. + * Otherwise, the data shall be ciphertext, and it is decrypted in place. + * + * Data may be provided in several chunks of arbitrary length. + * + * \param ctx EAX context structure. + * \param encrypt non-zero for encryption, zero for decryption. + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + */ +void br_eax_run(br_eax_context *ctx, int encrypt, void *data, size_t len); + +/** + * \brief Compute EAX authentication tag. + * + * Compute the EAX authentication tag. The tag is a 16-byte value which + * is written in the provided `tag` buffer. This call terminates the + * EAX run: no data may be processed with that EAX context afterwards, + * until `br_eax_reset()` is called to initiate a new EAX run. + * + * The tag value must normally be sent along with the encrypted data. + * When decrypting, the tag value must be recomputed and compared with + * the received tag: if the two tag values differ, then either the tag + * or the encrypted data was altered in transit. As an alternative to + * this function, the `br_eax_check_tag()` function can be used to + * compute and check the tag value. + * + * \param ctx EAX context structure. + * \param tag destination buffer for the tag (16 bytes). + */ +void br_eax_get_tag(br_eax_context *ctx, void *tag); + +/** + * \brief Compute and check EAX authentication tag. + * + * This function is an alternative to `br_eax_get_tag()`, normally used + * on the receiving end (i.e. when decrypting value). The tag value is + * recomputed and compared with the provided tag value. If they match, 1 + * is returned; on mismatch, 0 is returned. A returned value of 0 means + * that the data or the tag was altered in transit, normally leading to + * wholesale rejection of the complete message. + * + * \param ctx EAX context structure. + * \param tag tag value to compare with (16 bytes). + * \return 1 on success (exact match of tag value), 0 otherwise. + */ +uint32_t br_eax_check_tag(br_eax_context *ctx, const void *tag); + +/** + * \brief Compute EAX authentication tag (with truncation). + * + * This function is similar to `br_eax_get_tag()`, except that it allows + * the tag to be truncated to a smaller length. The intended tag length + * is provided as `len` (in bytes); it MUST be no more than 16, but + * it may be smaller. Note that decreasing tag length mechanically makes + * forgeries easier; NIST SP 800-38D specifies that the tag length shall + * lie between 12 and 16 bytes (inclusive), but may be truncated down to + * 4 or 8 bytes, for specific applications that can tolerate it. It must + * also be noted that successful forgeries leak information on the + * authentication key, making subsequent forgeries easier. Therefore, + * tag truncation, and in particular truncation to sizes lower than 12 + * bytes, shall be envisioned only with great care. + * + * The tag is written in the provided `tag` buffer. This call terminates + * the EAX run: no data may be processed with that EAX context + * afterwards, until `br_eax_reset()` is called to initiate a new EAX + * run. + * + * The tag value must normally be sent along with the encrypted data. + * When decrypting, the tag value must be recomputed and compared with + * the received tag: if the two tag values differ, then either the tag + * or the encrypted data was altered in transit. As an alternative to + * this function, the `br_eax_check_tag_trunc()` function can be used to + * compute and check the tag value. + * + * \param ctx EAX context structure. + * \param tag destination buffer for the tag. + * \param len tag length (16 bytes or less). + */ +void br_eax_get_tag_trunc(br_eax_context *ctx, void *tag, size_t len); + +/** + * \brief Compute and check EAX authentication tag (with truncation). + * + * This function is an alternative to `br_eax_get_tag_trunc()`, normally used + * on the receiving end (i.e. when decrypting value). The tag value is + * recomputed and compared with the provided tag value. If they match, 1 + * is returned; on mismatch, 0 is returned. A returned value of 0 means + * that the data or the tag was altered in transit, normally leading to + * wholesale rejection of the complete message. + * + * Tag length MUST be 16 bytes or less. The normal EAX tag length is 16 + * bytes. See `br_check_tag_trunc()` for some discussion on the potential + * perils of truncating authentication tags. + * + * \param ctx EAX context structure. + * \param tag tag value to compare with. + * \param len tag length (in bytes). + * \return 1 on success (exact match of tag value), 0 otherwise. + */ +uint32_t br_eax_check_tag_trunc(br_eax_context *ctx, + const void *tag, size_t len); + +/** + * \brief Class instance for EAX. + */ +extern const br_aead_class br_eax_vtable; + +/** + * \brief Context structure for CCM. + * + * CCM is an AEAD mode that combines a block cipher in CTR mode with + * CBC-MAC using the same block cipher and the same key, to provide + * authenticated encryption: + * + * - Any block cipher with 16-byte blocks can be used with CCM + * (technically, other block sizes are defined as well, but this + * is not implemented by these functions; shorter blocks also + * imply numerous security issues). + * + * - The authentication tag length, and plaintext length, MUST be + * known when starting processing data. Plaintext and ciphertext + * can still be provided by chunks, but the total size must match + * the value provided upon initialisation. + * + * - The nonce length is constrained betwen 7 and 13 bytes (inclusive). + * Furthermore, the plaintext length, when encoded, must fit over + * 15-nonceLen bytes; thus, if the nonce has length 13 bytes, then + * the plaintext length cannot exceed 65535 bytes. + * + * - Additional authenticated data length is practically unlimited + * (formal limit is at 2^64 bytes). + * + * - The authentication tag has length 4 to 16 bytes (even values only). + * + * The CCM initialisation function receives as parameter an + * _initialised_ block cipher implementation context, with the secret + * key already set. A pointer to that context will be kept within the + * CCM context structure. It is up to the caller to allocate and + * initialise that block cipher context. + */ +typedef struct { +#ifndef BR_DOXYGEN_IGNORE + const br_block_ctrcbc_class **bctx; + unsigned char ctr[16]; + unsigned char cbcmac[16]; + unsigned char tagmask[16]; + unsigned char buf[16]; + size_t ptr; + size_t tag_len; +#endif +} br_ccm_context; + +/** + * \brief Initialize a CCM context. + * + * A block cipher implementation, with its initialised context + * structure, is provided. The block cipher MUST use 16-byte blocks in + * CTR + CBC-MAC mode, and its secret key MUST have been already set in + * the provided context. The parameters are linked in the CCM context. + * + * After this function has been called, the `br_ccm_reset()` function must + * be called, to provide the nonce for CCM computation. + * + * \param ctx CCM context structure. + * \param bctx block cipher context (already initialised with secret key). + */ +void br_ccm_init(br_ccm_context *ctx, const br_block_ctrcbc_class **bctx); + +/** + * \brief Reset a CCM context. + * + * This function resets an already initialised CCM context for a new + * computation run. Implementations and keys are conserved. This function + * can be called at any time; it cancels any ongoing CCM computation that + * uses the provided context structure. + * + * The `aad_len` parameter contains the total length, in bytes, of the + * additional authenticated data. It may be zero. That length MUST be + * exact. + * + * The `data_len` parameter contains the total length, in bytes, of the + * data that will be injected (plaintext or ciphertext). That length MUST + * be exact. Moreover, that length MUST be less than 2^(8*(15-nonce_len)). + * + * The nonce length (`nonce_len`), in bytes, must be in the 7..13 range + * (inclusive). + * + * The tag length (`tag_len`), in bytes, must be in the 4..16 range, and + * be an even integer. Short tags mechanically allow for higher forgery + * probabilities; hence, tag sizes smaller than 12 bytes shall be used only + * with care. + * + * It is critical to CCM security that nonce values are not repeated for + * the same encryption key. Random generation of nonces is not generally + * recommended, due to the relatively small maximum nonce value. + * + * Returned value is 1 on success, 0 on error. An error is reported if + * the tag or nonce length is out of range, or if the + * plaintext/ciphertext length cannot be encoded with the specified + * nonce length. + * + * \param ctx CCM context structure. + * \param nonce CCM nonce to use. + * \param nonce_len CCM nonce length (in bytes, 7 to 13). + * \param aad_len additional authenticated data length (in bytes). + * \param data_len plaintext/ciphertext length (in bytes). + * \param tag_len tag length (in bytes). + * \return 1 on success, 0 on error. + */ +int br_ccm_reset(br_ccm_context *ctx, const void *nonce, size_t nonce_len, + uint64_t aad_len, uint64_t data_len, size_t tag_len); + +/** + * \brief Inject additional authenticated data into CCM. + * + * The provided data is injected into a running CCM computation. Additional + * data must be injected _before_ the call to `br_ccm_flip()`. + * Additional data can be injected in several chunks of arbitrary length, + * but the total amount MUST exactly match the value which was provided + * to `br_ccm_reset()`. + * + * \param ctx CCM context structure. + * \param data pointer to additional authenticated data. + * \param len length of additional authenticated data (in bytes). + */ +void br_ccm_aad_inject(br_ccm_context *ctx, const void *data, size_t len); + +/** + * \brief Finish injection of additional authenticated data into CCM. + * + * This function MUST be called before beginning the actual encryption + * or decryption (with `br_ccm_run()`), even if no additional authenticated + * data was injected. No additional authenticated data may be injected + * after this function call. + * + * \param ctx CCM context structure. + */ +void br_ccm_flip(br_ccm_context *ctx); + +/** + * \brief Encrypt or decrypt some data with CCM. + * + * Data encryption or decryption can be done after `br_ccm_flip()` + * has been called on the context. If `encrypt` is non-zero, then the + * provided data shall be plaintext, and it is encrypted in place. + * Otherwise, the data shall be ciphertext, and it is decrypted in place. + * + * Data may be provided in several chunks of arbitrary length, provided + * that the total length exactly matches the length provided to the + * `br_ccm_reset()` call. + * + * \param ctx CCM context structure. + * \param encrypt non-zero for encryption, zero for decryption. + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + */ +void br_ccm_run(br_ccm_context *ctx, int encrypt, void *data, size_t len); + +/** + * \brief Compute CCM authentication tag. + * + * Compute the CCM authentication tag. This call terminates the CCM + * run: all data must have been injected with `br_ccm_run()` (in zero, + * one or more successive calls). After this function has been called, + * no more data can br processed; a `br_ccm_reset()` call is required + * to start a new message. + * + * The tag length was provided upon context initialisation (last call + * to `br_ccm_reset()`); it is returned by this function. + * + * The tag value must normally be sent along with the encrypted data. + * When decrypting, the tag value must be recomputed and compared with + * the received tag: if the two tag values differ, then either the tag + * or the encrypted data was altered in transit. As an alternative to + * this function, the `br_ccm_check_tag()` function can be used to + * compute and check the tag value. + * + * \param ctx CCM context structure. + * \param tag destination buffer for the tag (up to 16 bytes). + * \return the tag length (in bytes). + */ +size_t br_ccm_get_tag(br_ccm_context *ctx, void *tag); + +/** + * \brief Compute and check CCM authentication tag. + * + * This function is an alternative to `br_ccm_get_tag()`, normally used + * on the receiving end (i.e. when decrypting value). The tag value is + * recomputed and compared with the provided tag value. If they match, 1 + * is returned; on mismatch, 0 is returned. A returned value of 0 means + * that the data or the tag was altered in transit, normally leading to + * wholesale rejection of the complete message. + * + * \param ctx CCM context structure. + * \param tag tag value to compare with (up to 16 bytes). + * \return 1 on success (exact match of tag value), 0 otherwise. + */ +uint32_t br_ccm_check_tag(br_ccm_context *ctx, const void *tag); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/bearssl/bearssl_block.h b/tools/sdk/include/bearssl/bearssl_block.h new file mode 100644 index 000000000..4772779d9 --- /dev/null +++ b/tools/sdk/include/bearssl/bearssl_block.h @@ -0,0 +1,2522 @@ +/* + * Copyright (c) 2016 Thomas Pornin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BR_BEARSSL_BLOCK_H__ +#define BR_BEARSSL_BLOCK_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file bearssl_block.h + * + * # Block Ciphers and Symmetric Ciphers + * + * This file documents the API for block ciphers and other symmetric + * ciphers. + * + * + * ## Procedural API + * + * For a block cipher implementation, up to three separate sets of + * functions are provided, for CBC encryption, CBC decryption, and CTR + * encryption/decryption. Each set has its own context structure, + * initialised with the encryption key. + * + * For CBC encryption and decryption, the data to encrypt or decrypt is + * referenced as a sequence of blocks. The implementations assume that + * there is no partial block; no padding is applied or removed. The + * caller is responsible for handling any kind of padding. + * + * Function for CTR encryption are defined only for block ciphers with + * blocks of 16 bytes or more (i.e. AES, but not DES/3DES). + * + * Each implemented block cipher is identified by an "internal name" + * from which are derived the names of structures and functions that + * implement the cipher. For the block cipher of internal name "`xxx`", + * the following are defined: + * + * - `br_xxx_BLOCK_SIZE` + * + * A macro that evaluates to the block size (in bytes) of the + * cipher. For all implemented block ciphers, this value is a + * power of two. + * + * - `br_xxx_cbcenc_keys` + * + * Context structure that contains the subkeys resulting from the key + * expansion. These subkeys are appropriate for CBC encryption. The + * structure first field is called `vtable` and points to the + * appropriate OOP structure. + * + * - `br_xxx_cbcenc_init(br_xxx_cbcenc_keys *ctx, const void *key, size_t len)` + * + * Perform key expansion: subkeys for CBC encryption are computed and + * written in the provided context structure. The key length MUST be + * adequate for the implemented block cipher. This function also sets + * the `vtable` field. + * + * - `br_xxx_cbcenc_run(const br_xxx_cbcenc_keys *ctx, void *iv, void *data, size_t len)` + * + * Perform CBC encryption of `len` bytes, in place. The encrypted data + * replaces the cleartext. `len` MUST be a multiple of the block length + * (if it is not, the function may loop forever or overflow a buffer). + * The IV is provided with the `iv` pointer; it is also updated with + * a copy of the last encrypted block. + * + * - `br_xxx_cbcdec_keys` + * + * Context structure that contains the subkeys resulting from the key + * expansion. These subkeys are appropriate for CBC decryption. The + * structure first field is called `vtable` and points to the + * appropriate OOP structure. + * + * - `br_xxx_cbcdec_init(br_xxx_cbcenc_keys *ctx, const void *key, size_t len)` + * + * Perform key expansion: subkeys for CBC decryption are computed and + * written in the provided context structure. The key length MUST be + * adequate for the implemented block cipher. This function also sets + * the `vtable` field. + * + * - `br_xxx_cbcdec_run(const br_xxx_cbcdec_keys *ctx, void *iv, void *data, size_t num_blocks)` + * + * Perform CBC decryption of `len` bytes, in place. The decrypted data + * replaces the ciphertext. `len` MUST be a multiple of the block length + * (if it is not, the function may loop forever or overflow a buffer). + * The IV is provided with the `iv` pointer; it is also updated with + * a copy of the last _encrypted_ block. + * + * - `br_xxx_ctr_keys` + * + * Context structure that contains the subkeys resulting from the key + * expansion. These subkeys are appropriate for CTR encryption and + * decryption. The structure first field is called `vtable` and + * points to the appropriate OOP structure. + * + * - `br_xxx_ctr_init(br_xxx_ctr_keys *ctx, const void *key, size_t len)` + * + * Perform key expansion: subkeys for CTR encryption and decryption + * are computed and written in the provided context structure. The + * key length MUST be adequate for the implemented block cipher. This + * function also sets the `vtable` field. + * + * - `br_xxx_ctr_run(const br_xxx_ctr_keys *ctx, const void *iv, uint32_t cc, void *data, size_t len)` (returns `uint32_t`) + * + * Perform CTR encryption/decryption of some data. Processing is done + * "in place" (the output data replaces the input data). This function + * implements the "standard incrementing function" from NIST SP800-38A, + * annex B: the IV length shall be 4 bytes less than the block size + * (i.e. 12 bytes for AES) and the counter is the 32-bit value starting + * with `cc`. The data length (`len`) is not necessarily a multiple of + * the block size. The new counter value is returned, which supports + * chunked processing, provided that each chunk length (except possibly + * the last one) is a multiple of the block size. + * + * - `br_xxx_ctrcbc_keys` + * + * Context structure that contains the subkeys resulting from the + * key expansion. These subkeys are appropriate for doing combined + * CTR encryption/decryption and CBC-MAC, as used in the CCM and EAX + * authenticated encryption modes. The structure first field is + * called `vtable` and points to the appropriate OOP structure. + * + * - `br_xxx_ctrcbc_init(br_xxx_ctr_keys *ctx, const void *key, size_t len)` + * + * Perform key expansion: subkeys for combined CTR + * encryption/decryption and CBC-MAC are computed and written in the + * provided context structure. The key length MUST be adequate for + * the implemented block cipher. This function also sets the + * `vtable` field. + * + * - `br_xxx_ctrcbc_encrypt(const br_xxx_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)` + * + * Perform CTR encryption of some data, and CBC-MAC. Processing is + * done "in place" (the output data replaces the input data). This + * function applies CTR encryption on the data, using a full + * block-size counter (i.e. for 128-bit blocks, the counter is + * incremented as a 128-bit value). The 'ctr' array contains the + * initial value for the counter (used in the first block) and it is + * updated with the new value after data processing. The 'cbcmac' + * value shall point to a block-sized value which is used as IV for + * CBC-MAC, computed over the encrypted data (output of CTR + * encryption); the resulting CBC-MAC is written over 'cbcmac' on + * output. + * + * The data length MUST be a multiple of the block size. + * + * - `br_xxx_ctrcbc_decrypt(const br_xxx_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)` + * + * Perform CTR decryption of some data, and CBC-MAC. Processing is + * done "in place" (the output data replaces the input data). This + * function applies CTR decryption on the data, using a full + * block-size counter (i.e. for 128-bit blocks, the counter is + * incremented as a 128-bit value). The 'ctr' array contains the + * initial value for the counter (used in the first block) and it is + * updated with the new value after data processing. The 'cbcmac' + * value shall point to a block-sized value which is used as IV for + * CBC-MAC, computed over the encrypted data (input of CTR + * encryption); the resulting CBC-MAC is written over 'cbcmac' on + * output. + * + * The data length MUST be a multiple of the block size. + * + * - `br_xxx_ctrcbc_ctr(const br_xxx_ctrcbc_keys *ctx, void *ctr, void *data, size_t len)` + * + * Perform CTR encryption or decryption of the provided data. The + * data is processed "in place" (the output data replaces the input + * data). A full block-sized counter is applied (i.e. for 128-bit + * blocks, the counter is incremented as a 128-bit value). The 'ctr' + * array contains the initial value for the counter (used in the + * first block), and it is updated with the new value after data + * processing. + * + * The data length MUST be a multiple of the block size. + * + * - `br_xxx_ctrcbc_mac(const br_xxx_ctrcbc_keys *ctx, void *cbcmac, const void *data, size_t len)` + * + * Compute CBC-MAC over the provided data. The IV for CBC-MAC is + * provided as 'cbcmac'; the output is written over the same array. + * The data itself is untouched. The data length MUST be a multiple + * of the block size. + * + * + * It shall be noted that the key expansion functions return `void`. If + * the provided key length is not allowed, then there will be no error + * reporting; implementations need not validate the key length, thus an + * invalid key length may result in undefined behaviour (e.g. buffer + * overflow). + * + * Subkey structures contain no interior pointer, and no external + * resources are allocated upon key expansion. They can thus be + * discarded without any explicit deallocation. + * + * + * ## Object-Oriented API + * + * Each context structure begins with a field (called `vtable`) that + * points to an instance of a structure that references the relevant + * functions through pointers. Each such structure contains the + * following: + * + * - `context_size` + * + * The size (in bytes) of the context structure for subkeys. + * + * - `block_size` + * + * The cipher block size (in bytes). + * + * - `log_block_size` + * + * The base-2 logarithm of cipher block size (e.g. 4 for blocks + * of 16 bytes). + * + * - `init` + * + * Pointer to the key expansion function. + * + * - `run` + * + * Pointer to the encryption/decryption function. + * + * For combined CTR/CBC-MAC encryption, the `vtable` has a slightly + * different structure: + * + * - `context_size` + * + * The size (in bytes) of the context structure for subkeys. + * + * - `block_size` + * + * The cipher block size (in bytes). + * + * - `log_block_size` + * + * The base-2 logarithm of cipher block size (e.g. 4 for blocks + * of 16 bytes). + * + * - `init` + * + * Pointer to the key expansion function. + * + * - `encrypt` + * + * Pointer to the CTR encryption + CBC-MAC function. + * + * - `decrypt` + * + * Pointer to the CTR decryption + CBC-MAC function. + * + * - `ctr` + * + * Pointer to the CTR encryption/decryption function. + * + * - `mac` + * + * Pointer to the CBC-MAC function. + * + * For block cipher "`xxx`", static, constant instances of these + * structures are defined, under the names: + * + * - `br_xxx_cbcenc_vtable` + * - `br_xxx_cbcdec_vtable` + * - `br_xxx_ctr_vtable` + * - `br_xxx_ctrcbc_vtable` + * + * + * ## Implemented Block Ciphers + * + * Provided implementations are: + * + * | Name | Function | Block Size (bytes) | Key lengths (bytes) | + * | :-------- | :------- | :----------------: | :-----------------: | + * | aes_big | AES | 16 | 16, 24 and 32 | + * | aes_small | AES | 16 | 16, 24 and 32 | + * | aes_ct | AES | 16 | 16, 24 and 32 | + * | aes_ct64 | AES | 16 | 16, 24 and 32 | + * | aes_x86ni | AES | 16 | 16, 24 and 32 | + * | aes_pwr8 | AES | 16 | 16, 24 and 32 | + * | des_ct | DES/3DES | 8 | 8, 16 and 24 | + * | des_tab | DES/3DES | 8 | 8, 16 and 24 | + * + * **Note:** DES/3DES nominally uses keys of 64, 128 and 192 bits (i.e. 8, + * 16 and 24 bytes), but some of the bits are ignored by the algorithm, so + * the _effective_ key lengths, from a security point of view, are 56, + * 112 and 168 bits, respectively. + * + * `aes_big` is a "classical" AES implementation, using tables. It + * is fast but not constant-time, since it makes data-dependent array + * accesses. + * + * `aes_small` is an AES implementation optimized for code size. It + * is substantially slower than `aes_big`; it is not constant-time + * either. + * + * `aes_ct` is a constant-time implementation of AES; its code is about + * as big as that of `aes_big`, while its performance is comparable to + * that of `aes_small`. However, it is constant-time. This + * implementation should thus be considered to be the "default" AES in + * BearSSL, to be used unless the operational context guarantees that a + * non-constant-time implementation is safe, or an architecture-specific + * constant-time implementation can be used (e.g. using dedicated + * hardware opcodes). + * + * `aes_ct64` is another constant-time implementation of AES. It is + * similar to `aes_ct` but uses 64-bit values. On 32-bit machines, + * `aes_ct64` is not faster than `aes_ct`, often a bit slower, and has + * a larger footprint; however, on 64-bit architectures, `aes_ct64` + * is typically twice faster than `aes_ct` for modes that allow parallel + * operations (i.e. CTR, and CBC decryption, but not CBC encryption). + * + * `aes_x86ni` exists only on x86 architectures (32-bit and 64-bit). It + * uses the AES-NI opcodes when available. + * + * `aes_pwr8` exists only on PowerPC / POWER architectures (32-bit and + * 64-bit, both little-endian and big-endian). It uses the AES opcodes + * present in POWER8 and later. + * + * `des_tab` is a classic, table-based implementation of DES/3DES. It + * is not constant-time. + * + * `des_ct` is an constant-time implementation of DES/3DES. It is + * substantially slower than `des_tab`. + * + * ## ChaCha20 and Poly1305 + * + * ChaCha20 is a stream cipher. Poly1305 is a MAC algorithm. They + * are described in [RFC 7539](https://tools.ietf.org/html/rfc7539). + * + * Two function pointer types are defined: + * + * - `br_chacha20_run` describes a function that implements ChaCha20 + * only. + * + * - `br_poly1305_run` describes an implementation of Poly1305, + * in the AEAD combination with ChaCha20 specified in RFC 7539 + * (the ChaCha20 implementation is provided as a function pointer). + * + * `chacha20_ct` is a straightforward implementation of ChaCha20 in + * plain C; it is constant-time, small, and reasonably fast. + * + * `chacha20_sse2` leverages SSE2 opcodes (on x86 architectures that + * support these opcodes). It is faster than `chacha20_ct`. + * + * `poly1305_ctmul` is an implementation of the ChaCha20+Poly1305 AEAD + * construction, where the Poly1305 part is performed with mixed 32-bit + * multiplications (operands are 32-bit, result is 64-bit). + * + * `poly1305_ctmul32` implements ChaCha20+Poly1305 using pure 32-bit + * multiplications (32-bit operands, 32-bit result). It is slower than + * `poly1305_ctmul`, except on some specific architectures such as + * the ARM Cortex M0+. + * + * `poly1305_ctmulq` implements ChaCha20+Poly1305 with mixed 64-bit + * multiplications (operands are 64-bit, result is 128-bit) on 64-bit + * platforms that support such operations. + * + * `poly1305_i15` implements ChaCha20+Poly1305 with the generic "i15" + * big integer implementation. It is meant mostly for testing purposes, + * although it can help with saving a few hundred bytes of code footprint + * on systems where code size is scarce. + */ + +/** + * \brief Class type for CBC encryption implementations. + * + * A `br_block_cbcenc_class` instance points to the functions implementing + * a specific block cipher, when used in CBC mode for encrypting data. + */ +typedef struct br_block_cbcenc_class_ br_block_cbcenc_class; +struct br_block_cbcenc_class_ { + /** + * \brief Size (in bytes) of the context structure appropriate + * for containing subkeys. + */ + size_t context_size; + + /** + * \brief Size of individual blocks (in bytes). + */ + unsigned block_size; + + /** + * \brief Base-2 logarithm of the size of individual blocks, + * expressed in bytes. + */ + unsigned log_block_size; + + /** + * \brief Initialisation function. + * + * This function sets the `vtable` field in the context structure. + * The key length MUST be one of the key lengths supported by + * the implementation. + * + * \param ctx context structure to initialise. + * \param key secret key. + * \param key_len key length (in bytes). + */ + void (*init)(const br_block_cbcenc_class **ctx, + const void *key, size_t key_len); + + /** + * \brief Run the CBC encryption. + * + * The `iv` parameter points to the IV for this run; it is + * updated with a copy of the last encrypted block. The data + * is encrypted "in place"; its length (`len`) MUST be a + * multiple of the block size. + * + * \param ctx context structure (already initialised). + * \param iv IV for CBC encryption (updated). + * \param data data to encrypt. + * \param len data length (in bytes, multiple of block size). + */ + void (*run)(const br_block_cbcenc_class *const *ctx, + void *iv, void *data, size_t len); +}; + +/** + * \brief Class type for CBC decryption implementations. + * + * A `br_block_cbcdec_class` instance points to the functions implementing + * a specific block cipher, when used in CBC mode for decrypting data. + */ +typedef struct br_block_cbcdec_class_ br_block_cbcdec_class; +struct br_block_cbcdec_class_ { + /** + * \brief Size (in bytes) of the context structure appropriate + * for containing subkeys. + */ + size_t context_size; + + /** + * \brief Size of individual blocks (in bytes). + */ + unsigned block_size; + + /** + * \brief Base-2 logarithm of the size of individual blocks, + * expressed in bytes. + */ + unsigned log_block_size; + + /** + * \brief Initialisation function. + * + * This function sets the `vtable` field in the context structure. + * The key length MUST be one of the key lengths supported by + * the implementation. + * + * \param ctx context structure to initialise. + * \param key secret key. + * \param key_len key length (in bytes). + */ + void (*init)(const br_block_cbcdec_class **ctx, + const void *key, size_t key_len); + + /** + * \brief Run the CBC decryption. + * + * The `iv` parameter points to the IV for this run; it is + * updated with a copy of the last encrypted block. The data + * is decrypted "in place"; its length (`len`) MUST be a + * multiple of the block size. + * + * \param ctx context structure (already initialised). + * \param iv IV for CBC decryption (updated). + * \param data data to decrypt. + * \param len data length (in bytes, multiple of block size). + */ + void (*run)(const br_block_cbcdec_class *const *ctx, + void *iv, void *data, size_t len); +}; + +/** + * \brief Class type for CTR encryption/decryption implementations. + * + * A `br_block_ctr_class` instance points to the functions implementing + * a specific block cipher, when used in CTR mode for encrypting or + * decrypting data. + */ +typedef struct br_block_ctr_class_ br_block_ctr_class; +struct br_block_ctr_class_ { + /** + * \brief Size (in bytes) of the context structure appropriate + * for containing subkeys. + */ + size_t context_size; + + /** + * \brief Size of individual blocks (in bytes). + */ + unsigned block_size; + + /** + * \brief Base-2 logarithm of the size of individual blocks, + * expressed in bytes. + */ + unsigned log_block_size; + + /** + * \brief Initialisation function. + * + * This function sets the `vtable` field in the context structure. + * The key length MUST be one of the key lengths supported by + * the implementation. + * + * \param ctx context structure to initialise. + * \param key secret key. + * \param key_len key length (in bytes). + */ + void (*init)(const br_block_ctr_class **ctx, + const void *key, size_t key_len); + + /** + * \brief Run the CTR encryption or decryption. + * + * The `iv` parameter points to the IV for this run; its + * length is exactly 4 bytes less than the block size (e.g. + * 12 bytes for AES/CTR). The IV is combined with a 32-bit + * block counter to produce the block value which is processed + * with the block cipher. + * + * The data to encrypt or decrypt is updated "in place". Its + * length (`len` bytes) is not required to be a multiple of + * the block size; if the final block is partial, then the + * corresponding key stream bits are dropped. + * + * The resulting counter value is returned. + * + * \param ctx context structure (already initialised). + * \param iv IV for CTR encryption/decryption. + * \param cc initial value for the block counter. + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + * \return the new block counter value. + */ + uint32_t (*run)(const br_block_ctr_class *const *ctx, + const void *iv, uint32_t cc, void *data, size_t len); +}; + +/** + * \brief Class type for combined CTR and CBC-MAC implementations. + * + * A `br_block_ctrcbc_class` instance points to the functions implementing + * a specific block cipher, when used in CTR mode for encrypting or + * decrypting data, along with CBC-MAC. + */ +typedef struct br_block_ctrcbc_class_ br_block_ctrcbc_class; +struct br_block_ctrcbc_class_ { + /** + * \brief Size (in bytes) of the context structure appropriate + * for containing subkeys. + */ + size_t context_size; + + /** + * \brief Size of individual blocks (in bytes). + */ + unsigned block_size; + + /** + * \brief Base-2 logarithm of the size of individual blocks, + * expressed in bytes. + */ + unsigned log_block_size; + + /** + * \brief Initialisation function. + * + * This function sets the `vtable` field in the context structure. + * The key length MUST be one of the key lengths supported by + * the implementation. + * + * \param ctx context structure to initialise. + * \param key secret key. + * \param key_len key length (in bytes). + */ + void (*init)(const br_block_ctrcbc_class **ctx, + const void *key, size_t key_len); + + /** + * \brief Run the CTR encryption + CBC-MAC. + * + * The `ctr` parameter points to the counter; its length shall + * be equal to the block size. It is updated by this function + * as encryption proceeds. + * + * The `cbcmac` parameter points to the IV for CBC-MAC. The MAC + * is computed over the encrypted data (output of CTR + * encryption). Its length shall be equal to the block size. The + * computed CBC-MAC value is written over the `cbcmac` array. + * + * The data to encrypt is updated "in place". Its length (`len` + * bytes) MUST be a multiple of the block size. + * + * \param ctx context structure (already initialised). + * \param ctr counter for CTR encryption (initial and final). + * \param cbcmac IV and output buffer for CBC-MAC. + * \param data data to encrypt. + * \param len data length (in bytes). + */ + void (*encrypt)(const br_block_ctrcbc_class *const *ctx, + void *ctr, void *cbcmac, void *data, size_t len); + + /** + * \brief Run the CTR decryption + CBC-MAC. + * + * The `ctr` parameter points to the counter; its length shall + * be equal to the block size. It is updated by this function + * as decryption proceeds. + * + * The `cbcmac` parameter points to the IV for CBC-MAC. The MAC + * is computed over the encrypted data (i.e. before CTR + * decryption). Its length shall be equal to the block size. The + * computed CBC-MAC value is written over the `cbcmac` array. + * + * The data to decrypt is updated "in place". Its length (`len` + * bytes) MUST be a multiple of the block size. + * + * \param ctx context structure (already initialised). + * \param ctr counter for CTR encryption (initial and final). + * \param cbcmac IV and output buffer for CBC-MAC. + * \param data data to decrypt. + * \param len data length (in bytes). + */ + void (*decrypt)(const br_block_ctrcbc_class *const *ctx, + void *ctr, void *cbcmac, void *data, size_t len); + + /** + * \brief Run the CTR encryption/decryption only. + * + * The `ctr` parameter points to the counter; its length shall + * be equal to the block size. It is updated by this function + * as decryption proceeds. + * + * The data to decrypt is updated "in place". Its length (`len` + * bytes) MUST be a multiple of the block size. + * + * \param ctx context structure (already initialised). + * \param ctr counter for CTR encryption (initial and final). + * \param data data to decrypt. + * \param len data length (in bytes). + */ + void (*ctr)(const br_block_ctrcbc_class *const *ctx, + void *ctr, void *data, size_t len); + + /** + * \brief Run the CBC-MAC only. + * + * The `cbcmac` parameter points to the IV for CBC-MAC. The MAC + * is computed over the encrypted data (i.e. before CTR + * decryption). Its length shall be equal to the block size. The + * computed CBC-MAC value is written over the `cbcmac` array. + * + * The data is unmodified. Its length (`len` bytes) MUST be a + * multiple of the block size. + * + * \param ctx context structure (already initialised). + * \param cbcmac IV and output buffer for CBC-MAC. + * \param data data to decrypt. + * \param len data length (in bytes). + */ + void (*mac)(const br_block_ctrcbc_class *const *ctx, + void *cbcmac, const void *data, size_t len); +}; + +/* + * Traditional, table-based AES implementation. It is fast, but uses + * internal tables (in particular a 1 kB table for encryption, another + * 1 kB table for decryption, and a 256-byte table for key schedule), + * and it is not constant-time. In contexts where cache-timing attacks + * apply, this implementation may leak the secret key. + */ + +/** \brief AES block size (16 bytes). */ +#define br_aes_big_BLOCK_SIZE 16 + +/** + * \brief Context for AES subkeys (`aes_big` implementation, CBC encryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[60]; + unsigned num_rounds; +#endif +} br_aes_big_cbcenc_keys; + +/** + * \brief Context for AES subkeys (`aes_big` implementation, CBC decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[60]; + unsigned num_rounds; +#endif +} br_aes_big_cbcdec_keys; + +/** + * \brief Context for AES subkeys (`aes_big` implementation, CTR encryption + * and decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_ctr_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[60]; + unsigned num_rounds; +#endif +} br_aes_big_ctr_keys; + +/** + * \brief Context for AES subkeys (`aes_big` implementation, CTR encryption + * and decryption + CBC-MAC). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_ctrcbc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[60]; + unsigned num_rounds; +#endif +} br_aes_big_ctrcbc_keys; + +/** + * \brief Class instance for AES CBC encryption (`aes_big` implementation). + */ +extern const br_block_cbcenc_class br_aes_big_cbcenc_vtable; + +/** + * \brief Class instance for AES CBC decryption (`aes_big` implementation). + */ +extern const br_block_cbcdec_class br_aes_big_cbcdec_vtable; + +/** + * \brief Class instance for AES CTR encryption and decryption + * (`aes_big` implementation). + */ +extern const br_block_ctr_class br_aes_big_ctr_vtable; + +/** + * \brief Class instance for AES CTR encryption/decryption + CBC-MAC + * (`aes_big` implementation). + */ +extern const br_block_ctrcbc_class br_aes_big_ctrcbc_vtable; + +/** + * \brief Context initialisation (key schedule) for AES CBC encryption + * (`aes_big` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_big_cbcenc_init(br_aes_big_cbcenc_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CBC decryption + * (`aes_big` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_big_cbcdec_init(br_aes_big_cbcdec_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CTR encryption + * and decryption (`aes_big` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_big_ctr_init(br_aes_big_ctr_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CTR + CBC-MAC + * (`aes_big` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_big_ctrcbc_init(br_aes_big_ctrcbc_keys *ctx, + const void *key, size_t len); + +/** + * \brief CBC encryption with AES (`aes_big` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to encrypt (updated). + * \param len data length (in bytes, MUST be multiple of 16). + */ +void br_aes_big_cbcenc_run(const br_aes_big_cbcenc_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CBC decryption with AES (`aes_big` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to decrypt (updated). + * \param len data length (in bytes, MUST be multiple of 16). + */ +void br_aes_big_cbcdec_run(const br_aes_big_cbcdec_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CTR encryption and decryption with AES (`aes_big` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (constant, 12 bytes). + * \param cc initial block counter value. + * \param data data to encrypt or decrypt (updated). + * \param len data length (in bytes). + * \return new block counter value. + */ +uint32_t br_aes_big_ctr_run(const br_aes_big_ctr_keys *ctx, + const void *iv, uint32_t cc, void *data, size_t len); + +/** + * \brief CTR encryption + CBC-MAC with AES (`aes_big` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to encrypt (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_big_ctrcbc_encrypt(const br_aes_big_ctrcbc_keys *ctx, + void *ctr, void *cbcmac, void *data, size_t len); + +/** + * \brief CTR decryption + CBC-MAC with AES (`aes_big` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to decrypt (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_big_ctrcbc_decrypt(const br_aes_big_ctrcbc_keys *ctx, + void *ctr, void *cbcmac, void *data, size_t len); + +/** + * \brief CTR encryption/decryption with AES (`aes_big` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param data data to MAC (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_big_ctrcbc_ctr(const br_aes_big_ctrcbc_keys *ctx, + void *ctr, void *data, size_t len); + +/** + * \brief CBC-MAC with AES (`aes_big` implementation). + * + * \param ctx context (already initialised). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to MAC (unmodified). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_big_ctrcbc_mac(const br_aes_big_ctrcbc_keys *ctx, + void *cbcmac, const void *data, size_t len); + +/* + * AES implementation optimized for size. It is slower than the + * traditional table-based AES implementation, but requires much less + * code. It still uses data-dependent table accesses (albeit within a + * much smaller 256-byte table), which makes it conceptually vulnerable + * to cache-timing attacks. + */ + +/** \brief AES block size (16 bytes). */ +#define br_aes_small_BLOCK_SIZE 16 + +/** + * \brief Context for AES subkeys (`aes_small` implementation, CBC encryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[60]; + unsigned num_rounds; +#endif +} br_aes_small_cbcenc_keys; + +/** + * \brief Context for AES subkeys (`aes_small` implementation, CBC decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[60]; + unsigned num_rounds; +#endif +} br_aes_small_cbcdec_keys; + +/** + * \brief Context for AES subkeys (`aes_small` implementation, CTR encryption + * and decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_ctr_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[60]; + unsigned num_rounds; +#endif +} br_aes_small_ctr_keys; + +/** + * \brief Context for AES subkeys (`aes_small` implementation, CTR encryption + * and decryption + CBC-MAC). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_ctrcbc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[60]; + unsigned num_rounds; +#endif +} br_aes_small_ctrcbc_keys; + +/** + * \brief Class instance for AES CBC encryption (`aes_small` implementation). + */ +extern const br_block_cbcenc_class br_aes_small_cbcenc_vtable; + +/** + * \brief Class instance for AES CBC decryption (`aes_small` implementation). + */ +extern const br_block_cbcdec_class br_aes_small_cbcdec_vtable; + +/** + * \brief Class instance for AES CTR encryption and decryption + * (`aes_small` implementation). + */ +extern const br_block_ctr_class br_aes_small_ctr_vtable; + +/** + * \brief Class instance for AES CTR encryption/decryption + CBC-MAC + * (`aes_small` implementation). + */ +extern const br_block_ctrcbc_class br_aes_small_ctrcbc_vtable; + +/** + * \brief Context initialisation (key schedule) for AES CBC encryption + * (`aes_small` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_small_cbcenc_init(br_aes_small_cbcenc_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CBC decryption + * (`aes_small` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_small_cbcdec_init(br_aes_small_cbcdec_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CTR encryption + * and decryption (`aes_small` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_small_ctr_init(br_aes_small_ctr_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CTR + CBC-MAC + * (`aes_small` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_small_ctrcbc_init(br_aes_small_ctrcbc_keys *ctx, + const void *key, size_t len); + +/** + * \brief CBC encryption with AES (`aes_small` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to encrypt (updated). + * \param len data length (in bytes, MUST be multiple of 16). + */ +void br_aes_small_cbcenc_run(const br_aes_small_cbcenc_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CBC decryption with AES (`aes_small` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to decrypt (updated). + * \param len data length (in bytes, MUST be multiple of 16). + */ +void br_aes_small_cbcdec_run(const br_aes_small_cbcdec_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CTR encryption and decryption with AES (`aes_small` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (constant, 12 bytes). + * \param cc initial block counter value. + * \param data data to decrypt (updated). + * \param len data length (in bytes). + * \return new block counter value. + */ +uint32_t br_aes_small_ctr_run(const br_aes_small_ctr_keys *ctx, + const void *iv, uint32_t cc, void *data, size_t len); + +/** + * \brief CTR encryption + CBC-MAC with AES (`aes_small` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to encrypt (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_small_ctrcbc_encrypt(const br_aes_small_ctrcbc_keys *ctx, + void *ctr, void *cbcmac, void *data, size_t len); + +/** + * \brief CTR decryption + CBC-MAC with AES (`aes_small` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to decrypt (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_small_ctrcbc_decrypt(const br_aes_small_ctrcbc_keys *ctx, + void *ctr, void *cbcmac, void *data, size_t len); + +/** + * \brief CTR encryption/decryption with AES (`aes_small` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param data data to MAC (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_small_ctrcbc_ctr(const br_aes_small_ctrcbc_keys *ctx, + void *ctr, void *data, size_t len); + +/** + * \brief CBC-MAC with AES (`aes_small` implementation). + * + * \param ctx context (already initialised). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to MAC (unmodified). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_small_ctrcbc_mac(const br_aes_small_ctrcbc_keys *ctx, + void *cbcmac, const void *data, size_t len); + +/* + * Constant-time AES implementation. Its size is similar to that of + * 'aes_big', and its performance is similar to that of 'aes_small' (faster + * decryption, slower encryption). However, it is constant-time, i.e. + * immune to cache-timing and similar attacks. + */ + +/** \brief AES block size (16 bytes). */ +#define br_aes_ct_BLOCK_SIZE 16 + +/** + * \brief Context for AES subkeys (`aes_ct` implementation, CBC encryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[60]; + unsigned num_rounds; +#endif +} br_aes_ct_cbcenc_keys; + +/** + * \brief Context for AES subkeys (`aes_ct` implementation, CBC decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[60]; + unsigned num_rounds; +#endif +} br_aes_ct_cbcdec_keys; + +/** + * \brief Context for AES subkeys (`aes_ct` implementation, CTR encryption + * and decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_ctr_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[60]; + unsigned num_rounds; +#endif +} br_aes_ct_ctr_keys; + +/** + * \brief Context for AES subkeys (`aes_ct` implementation, CTR encryption + * and decryption + CBC-MAC). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_ctrcbc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[60]; + unsigned num_rounds; +#endif +} br_aes_ct_ctrcbc_keys; + +/** + * \brief Class instance for AES CBC encryption (`aes_ct` implementation). + */ +extern const br_block_cbcenc_class br_aes_ct_cbcenc_vtable; + +/** + * \brief Class instance for AES CBC decryption (`aes_ct` implementation). + */ +extern const br_block_cbcdec_class br_aes_ct_cbcdec_vtable; + +/** + * \brief Class instance for AES CTR encryption and decryption + * (`aes_ct` implementation). + */ +extern const br_block_ctr_class br_aes_ct_ctr_vtable; + +/** + * \brief Class instance for AES CTR encryption/decryption + CBC-MAC + * (`aes_ct` implementation). + */ +extern const br_block_ctrcbc_class br_aes_ct_ctrcbc_vtable; + +/** + * \brief Context initialisation (key schedule) for AES CBC encryption + * (`aes_ct` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_ct_cbcenc_init(br_aes_ct_cbcenc_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CBC decryption + * (`aes_ct` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_ct_cbcdec_init(br_aes_ct_cbcdec_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CTR encryption + * and decryption (`aes_ct` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_ct_ctr_init(br_aes_ct_ctr_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CTR + CBC-MAC + * (`aes_ct` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_ct_ctrcbc_init(br_aes_ct_ctrcbc_keys *ctx, + const void *key, size_t len); + +/** + * \brief CBC encryption with AES (`aes_ct` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to encrypt (updated). + * \param len data length (in bytes, MUST be multiple of 16). + */ +void br_aes_ct_cbcenc_run(const br_aes_ct_cbcenc_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CBC decryption with AES (`aes_ct` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to decrypt (updated). + * \param len data length (in bytes, MUST be multiple of 16). + */ +void br_aes_ct_cbcdec_run(const br_aes_ct_cbcdec_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CTR encryption and decryption with AES (`aes_ct` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (constant, 12 bytes). + * \param cc initial block counter value. + * \param data data to decrypt (updated). + * \param len data length (in bytes). + * \return new block counter value. + */ +uint32_t br_aes_ct_ctr_run(const br_aes_ct_ctr_keys *ctx, + const void *iv, uint32_t cc, void *data, size_t len); + +/** + * \brief CTR encryption + CBC-MAC with AES (`aes_ct` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to encrypt (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_ct_ctrcbc_encrypt(const br_aes_ct_ctrcbc_keys *ctx, + void *ctr, void *cbcmac, void *data, size_t len); + +/** + * \brief CTR decryption + CBC-MAC with AES (`aes_ct` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to decrypt (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_ct_ctrcbc_decrypt(const br_aes_ct_ctrcbc_keys *ctx, + void *ctr, void *cbcmac, void *data, size_t len); + +/** + * \brief CTR encryption/decryption with AES (`aes_ct` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param data data to MAC (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_ct_ctrcbc_ctr(const br_aes_ct_ctrcbc_keys *ctx, + void *ctr, void *data, size_t len); + +/** + * \brief CBC-MAC with AES (`aes_ct` implementation). + * + * \param ctx context (already initialised). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to MAC (unmodified). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_ct_ctrcbc_mac(const br_aes_ct_ctrcbc_keys *ctx, + void *cbcmac, const void *data, size_t len); + +/* + * 64-bit constant-time AES implementation. It is similar to 'aes_ct' + * but uses 64-bit registers, making it about twice faster than 'aes_ct' + * on 64-bit platforms, while remaining constant-time and with a similar + * code size. (The doubling in performance is only for CBC decryption + * and CTR mode; CBC encryption is non-parallel and cannot benefit from + * the larger registers.) + */ + +/** \brief AES block size (16 bytes). */ +#define br_aes_ct64_BLOCK_SIZE 16 + +/** + * \brief Context for AES subkeys (`aes_ct64` implementation, CBC encryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint64_t skey[30]; + unsigned num_rounds; +#endif +} br_aes_ct64_cbcenc_keys; + +/** + * \brief Context for AES subkeys (`aes_ct64` implementation, CBC decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint64_t skey[30]; + unsigned num_rounds; +#endif +} br_aes_ct64_cbcdec_keys; + +/** + * \brief Context for AES subkeys (`aes_ct64` implementation, CTR encryption + * and decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_ctr_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint64_t skey[30]; + unsigned num_rounds; +#endif +} br_aes_ct64_ctr_keys; + +/** + * \brief Context for AES subkeys (`aes_ct64` implementation, CTR encryption + * and decryption + CBC-MAC). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_ctrcbc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint64_t skey[30]; + unsigned num_rounds; +#endif +} br_aes_ct64_ctrcbc_keys; + +/** + * \brief Class instance for AES CBC encryption (`aes_ct64` implementation). + */ +extern const br_block_cbcenc_class br_aes_ct64_cbcenc_vtable; + +/** + * \brief Class instance for AES CBC decryption (`aes_ct64` implementation). + */ +extern const br_block_cbcdec_class br_aes_ct64_cbcdec_vtable; + +/** + * \brief Class instance for AES CTR encryption and decryption + * (`aes_ct64` implementation). + */ +extern const br_block_ctr_class br_aes_ct64_ctr_vtable; + +/** + * \brief Class instance for AES CTR encryption/decryption + CBC-MAC + * (`aes_ct64` implementation). + */ +extern const br_block_ctrcbc_class br_aes_ct64_ctrcbc_vtable; + +/** + * \brief Context initialisation (key schedule) for AES CBC encryption + * (`aes_ct64` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_ct64_cbcenc_init(br_aes_ct64_cbcenc_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CBC decryption + * (`aes_ct64` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_ct64_cbcdec_init(br_aes_ct64_cbcdec_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CTR encryption + * and decryption (`aes_ct64` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_ct64_ctr_init(br_aes_ct64_ctr_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CTR + CBC-MAC + * (`aes_ct64` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_ct64_ctrcbc_init(br_aes_ct64_ctrcbc_keys *ctx, + const void *key, size_t len); + +/** + * \brief CBC encryption with AES (`aes_ct64` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to encrypt (updated). + * \param len data length (in bytes, MUST be multiple of 16). + */ +void br_aes_ct64_cbcenc_run(const br_aes_ct64_cbcenc_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CBC decryption with AES (`aes_ct64` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to decrypt (updated). + * \param len data length (in bytes, MUST be multiple of 16). + */ +void br_aes_ct64_cbcdec_run(const br_aes_ct64_cbcdec_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CTR encryption and decryption with AES (`aes_ct64` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (constant, 12 bytes). + * \param cc initial block counter value. + * \param data data to decrypt (updated). + * \param len data length (in bytes). + * \return new block counter value. + */ +uint32_t br_aes_ct64_ctr_run(const br_aes_ct64_ctr_keys *ctx, + const void *iv, uint32_t cc, void *data, size_t len); + +/** + * \brief CTR encryption + CBC-MAC with AES (`aes_ct64` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to encrypt (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_ct64_ctrcbc_encrypt(const br_aes_ct64_ctrcbc_keys *ctx, + void *ctr, void *cbcmac, void *data, size_t len); + +/** + * \brief CTR decryption + CBC-MAC with AES (`aes_ct64` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to decrypt (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_ct64_ctrcbc_decrypt(const br_aes_ct64_ctrcbc_keys *ctx, + void *ctr, void *cbcmac, void *data, size_t len); + +/** + * \brief CTR encryption/decryption with AES (`aes_ct64` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param data data to MAC (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_ct64_ctrcbc_ctr(const br_aes_ct64_ctrcbc_keys *ctx, + void *ctr, void *data, size_t len); + +/** + * \brief CBC-MAC with AES (`aes_ct64` implementation). + * + * \param ctx context (already initialised). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to MAC (unmodified). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_ct64_ctrcbc_mac(const br_aes_ct64_ctrcbc_keys *ctx, + void *cbcmac, const void *data, size_t len); + +/* + * AES implementation using AES-NI opcodes (x86 platform). + */ + +/** \brief AES block size (16 bytes). */ +#define br_aes_x86ni_BLOCK_SIZE 16 + +/** + * \brief Context for AES subkeys (`aes_x86ni` implementation, CBC encryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; +#endif +} br_aes_x86ni_cbcenc_keys; + +/** + * \brief Context for AES subkeys (`aes_x86ni` implementation, CBC decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; +#endif +} br_aes_x86ni_cbcdec_keys; + +/** + * \brief Context for AES subkeys (`aes_x86ni` implementation, CTR encryption + * and decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_ctr_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; +#endif +} br_aes_x86ni_ctr_keys; + +/** + * \brief Context for AES subkeys (`aes_x86ni` implementation, CTR encryption + * and decryption + CBC-MAC). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_ctrcbc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; +#endif +} br_aes_x86ni_ctrcbc_keys; + +/** + * \brief Class instance for AES CBC encryption (`aes_x86ni` implementation). + * + * Since this implementation might be omitted from the library, or the + * AES opcode unavailable on the current CPU, a pointer to this class + * instance should be obtained through `br_aes_x86ni_cbcenc_get_vtable()`. + */ +extern const br_block_cbcenc_class br_aes_x86ni_cbcenc_vtable; + +/** + * \brief Class instance for AES CBC decryption (`aes_x86ni` implementation). + * + * Since this implementation might be omitted from the library, or the + * AES opcode unavailable on the current CPU, a pointer to this class + * instance should be obtained through `br_aes_x86ni_cbcdec_get_vtable()`. + */ +extern const br_block_cbcdec_class br_aes_x86ni_cbcdec_vtable; + +/** + * \brief Class instance for AES CTR encryption and decryption + * (`aes_x86ni` implementation). + * + * Since this implementation might be omitted from the library, or the + * AES opcode unavailable on the current CPU, a pointer to this class + * instance should be obtained through `br_aes_x86ni_ctr_get_vtable()`. + */ +extern const br_block_ctr_class br_aes_x86ni_ctr_vtable; + +/** + * \brief Class instance for AES CTR encryption/decryption + CBC-MAC + * (`aes_x86ni` implementation). + * + * Since this implementation might be omitted from the library, or the + * AES opcode unavailable on the current CPU, a pointer to this class + * instance should be obtained through `br_aes_x86ni_ctrcbc_get_vtable()`. + */ +extern const br_block_ctrcbc_class br_aes_x86ni_ctrcbc_vtable; + +/** + * \brief Context initialisation (key schedule) for AES CBC encryption + * (`aes_x86ni` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_x86ni_cbcenc_init(br_aes_x86ni_cbcenc_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CBC decryption + * (`aes_x86ni` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_x86ni_cbcdec_init(br_aes_x86ni_cbcdec_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CTR encryption + * and decryption (`aes_x86ni` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_x86ni_ctr_init(br_aes_x86ni_ctr_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CTR + CBC-MAC + * (`aes_x86ni` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_x86ni_ctrcbc_init(br_aes_x86ni_ctrcbc_keys *ctx, + const void *key, size_t len); + +/** + * \brief CBC encryption with AES (`aes_x86ni` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to encrypt (updated). + * \param len data length (in bytes, MUST be multiple of 16). + */ +void br_aes_x86ni_cbcenc_run(const br_aes_x86ni_cbcenc_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CBC decryption with AES (`aes_x86ni` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to decrypt (updated). + * \param len data length (in bytes, MUST be multiple of 16). + */ +void br_aes_x86ni_cbcdec_run(const br_aes_x86ni_cbcdec_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CTR encryption and decryption with AES (`aes_x86ni` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (constant, 12 bytes). + * \param cc initial block counter value. + * \param data data to decrypt (updated). + * \param len data length (in bytes). + * \return new block counter value. + */ +uint32_t br_aes_x86ni_ctr_run(const br_aes_x86ni_ctr_keys *ctx, + const void *iv, uint32_t cc, void *data, size_t len); + +/** + * \brief CTR encryption + CBC-MAC with AES (`aes_x86ni` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to encrypt (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_x86ni_ctrcbc_encrypt(const br_aes_x86ni_ctrcbc_keys *ctx, + void *ctr, void *cbcmac, void *data, size_t len); + +/** + * \brief CTR decryption + CBC-MAC with AES (`aes_x86ni` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to decrypt (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_x86ni_ctrcbc_decrypt(const br_aes_x86ni_ctrcbc_keys *ctx, + void *ctr, void *cbcmac, void *data, size_t len); + +/** + * \brief CTR encryption/decryption with AES (`aes_x86ni` implementation). + * + * \param ctx context (already initialised). + * \param ctr counter for CTR (16 bytes, updated). + * \param data data to MAC (updated). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_x86ni_ctrcbc_ctr(const br_aes_x86ni_ctrcbc_keys *ctx, + void *ctr, void *data, size_t len); + +/** + * \brief CBC-MAC with AES (`aes_x86ni` implementation). + * + * \param ctx context (already initialised). + * \param cbcmac IV for CBC-MAC (updated). + * \param data data to MAC (unmodified). + * \param len data length (in bytes, MUST be a multiple of 16). + */ +void br_aes_x86ni_ctrcbc_mac(const br_aes_x86ni_ctrcbc_keys *ctx, + void *cbcmac, const void *data, size_t len); + +/** + * \brief Obtain the `aes_x86ni` AES-CBC (encryption) implementation, if + * available. + * + * This function returns a pointer to `br_aes_x86ni_cbcenc_vtable`, if + * that implementation was compiled in the library _and_ the x86 AES + * opcodes are available on the currently running CPU. If either of + * these conditions is not met, then this function returns `NULL`. + * + * \return the `aes_x86ni` AES-CBC (encryption) implementation, or `NULL`. + */ +const br_block_cbcenc_class *br_aes_x86ni_cbcenc_get_vtable(void); + +/** + * \brief Obtain the `aes_x86ni` AES-CBC (decryption) implementation, if + * available. + * + * This function returns a pointer to `br_aes_x86ni_cbcdec_vtable`, if + * that implementation was compiled in the library _and_ the x86 AES + * opcodes are available on the currently running CPU. If either of + * these conditions is not met, then this function returns `NULL`. + * + * \return the `aes_x86ni` AES-CBC (decryption) implementation, or `NULL`. + */ +const br_block_cbcdec_class *br_aes_x86ni_cbcdec_get_vtable(void); + +/** + * \brief Obtain the `aes_x86ni` AES-CTR implementation, if available. + * + * This function returns a pointer to `br_aes_x86ni_ctr_vtable`, if + * that implementation was compiled in the library _and_ the x86 AES + * opcodes are available on the currently running CPU. If either of + * these conditions is not met, then this function returns `NULL`. + * + * \return the `aes_x86ni` AES-CTR implementation, or `NULL`. + */ +const br_block_ctr_class *br_aes_x86ni_ctr_get_vtable(void); + +/** + * \brief Obtain the `aes_x86ni` AES-CTR + CBC-MAC implementation, if + * available. + * + * This function returns a pointer to `br_aes_x86ni_ctrcbc_vtable`, if + * that implementation was compiled in the library _and_ the x86 AES + * opcodes are available on the currently running CPU. If either of + * these conditions is not met, then this function returns `NULL`. + * + * \return the `aes_x86ni` AES-CTR implementation, or `NULL`. + */ +const br_block_ctrcbc_class *br_aes_x86ni_ctrcbc_get_vtable(void); + +/* + * AES implementation using POWER8 opcodes. + */ + +/** \brief AES block size (16 bytes). */ +#define br_aes_pwr8_BLOCK_SIZE 16 + +/** + * \brief Context for AES subkeys (`aes_pwr8` implementation, CBC encryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; +#endif +} br_aes_pwr8_cbcenc_keys; + +/** + * \brief Context for AES subkeys (`aes_pwr8` implementation, CBC decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; +#endif +} br_aes_pwr8_cbcdec_keys; + +/** + * \brief Context for AES subkeys (`aes_pwr8` implementation, CTR encryption + * and decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_ctr_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; +#endif +} br_aes_pwr8_ctr_keys; + +/** + * \brief Class instance for AES CBC encryption (`aes_pwr8` implementation). + * + * Since this implementation might be omitted from the library, or the + * AES opcode unavailable on the current CPU, a pointer to this class + * instance should be obtained through `br_aes_pwr8_cbcenc_get_vtable()`. + */ +extern const br_block_cbcenc_class br_aes_pwr8_cbcenc_vtable; + +/** + * \brief Class instance for AES CBC decryption (`aes_pwr8` implementation). + * + * Since this implementation might be omitted from the library, or the + * AES opcode unavailable on the current CPU, a pointer to this class + * instance should be obtained through `br_aes_pwr8_cbcdec_get_vtable()`. + */ +extern const br_block_cbcdec_class br_aes_pwr8_cbcdec_vtable; + +/** + * \brief Class instance for AES CTR encryption and decryption + * (`aes_pwr8` implementation). + * + * Since this implementation might be omitted from the library, or the + * AES opcode unavailable on the current CPU, a pointer to this class + * instance should be obtained through `br_aes_pwr8_ctr_get_vtable()`. + */ +extern const br_block_ctr_class br_aes_pwr8_ctr_vtable; + +/** + * \brief Context initialisation (key schedule) for AES CBC encryption + * (`aes_pwr8` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_pwr8_cbcenc_init(br_aes_pwr8_cbcenc_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CBC decryption + * (`aes_pwr8` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_pwr8_cbcdec_init(br_aes_pwr8_cbcdec_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for AES CTR encryption + * and decryption (`aes_pwr8` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_aes_pwr8_ctr_init(br_aes_pwr8_ctr_keys *ctx, + const void *key, size_t len); + +/** + * \brief CBC encryption with AES (`aes_pwr8` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to encrypt (updated). + * \param len data length (in bytes, MUST be multiple of 16). + */ +void br_aes_pwr8_cbcenc_run(const br_aes_pwr8_cbcenc_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CBC decryption with AES (`aes_pwr8` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to decrypt (updated). + * \param len data length (in bytes, MUST be multiple of 16). + */ +void br_aes_pwr8_cbcdec_run(const br_aes_pwr8_cbcdec_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CTR encryption and decryption with AES (`aes_pwr8` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (constant, 12 bytes). + * \param cc initial block counter value. + * \param data data to decrypt (updated). + * \param len data length (in bytes). + * \return new block counter value. + */ +uint32_t br_aes_pwr8_ctr_run(const br_aes_pwr8_ctr_keys *ctx, + const void *iv, uint32_t cc, void *data, size_t len); + +/** + * \brief Obtain the `aes_pwr8` AES-CBC (encryption) implementation, if + * available. + * + * This function returns a pointer to `br_aes_pwr8_cbcenc_vtable`, if + * that implementation was compiled in the library _and_ the POWER8 + * crypto opcodes are available on the currently running CPU. If either + * of these conditions is not met, then this function returns `NULL`. + * + * \return the `aes_pwr8` AES-CBC (encryption) implementation, or `NULL`. + */ +const br_block_cbcenc_class *br_aes_pwr8_cbcenc_get_vtable(void); + +/** + * \brief Obtain the `aes_pwr8` AES-CBC (decryption) implementation, if + * available. + * + * This function returns a pointer to `br_aes_pwr8_cbcdec_vtable`, if + * that implementation was compiled in the library _and_ the POWER8 + * crypto opcodes are available on the currently running CPU. If either + * of these conditions is not met, then this function returns `NULL`. + * + * \return the `aes_pwr8` AES-CBC (decryption) implementation, or `NULL`. + */ +const br_block_cbcdec_class *br_aes_pwr8_cbcdec_get_vtable(void); + +/** + * \brief Obtain the `aes_pwr8` AES-CTR implementation, if available. + * + * This function returns a pointer to `br_aes_pwr8_ctr_vtable`, if that + * implementation was compiled in the library _and_ the POWER8 crypto + * opcodes are available on the currently running CPU. If either of + * these conditions is not met, then this function returns `NULL`. + * + * \return the `aes_pwr8` AES-CTR implementation, or `NULL`. + */ +const br_block_ctr_class *br_aes_pwr8_ctr_get_vtable(void); + +/** + * \brief Aggregate structure large enough to be used as context for + * subkeys (CBC encryption) for all AES implementations. + */ +typedef union { + const br_block_cbcenc_class *vtable; + br_aes_big_cbcenc_keys c_big; + br_aes_small_cbcenc_keys c_small; + br_aes_ct_cbcenc_keys c_ct; + br_aes_ct64_cbcenc_keys c_ct64; + br_aes_x86ni_cbcenc_keys c_x86ni; + br_aes_pwr8_cbcenc_keys c_pwr8; +} br_aes_gen_cbcenc_keys; + +/** + * \brief Aggregate structure large enough to be used as context for + * subkeys (CBC decryption) for all AES implementations. + */ +typedef union { + const br_block_cbcdec_class *vtable; + br_aes_big_cbcdec_keys c_big; + br_aes_small_cbcdec_keys c_small; + br_aes_ct_cbcdec_keys c_ct; + br_aes_ct64_cbcdec_keys c_ct64; + br_aes_x86ni_cbcdec_keys c_x86ni; + br_aes_pwr8_cbcdec_keys c_pwr8; +} br_aes_gen_cbcdec_keys; + +/** + * \brief Aggregate structure large enough to be used as context for + * subkeys (CTR encryption and decryption) for all AES implementations. + */ +typedef union { + const br_block_ctr_class *vtable; + br_aes_big_ctr_keys c_big; + br_aes_small_ctr_keys c_small; + br_aes_ct_ctr_keys c_ct; + br_aes_ct64_ctr_keys c_ct64; + br_aes_x86ni_ctr_keys c_x86ni; + br_aes_pwr8_ctr_keys c_pwr8; +} br_aes_gen_ctr_keys; + +/** + * \brief Aggregate structure large enough to be used as context for + * subkeys (CTR encryption/decryption + CBC-MAC) for all AES implementations. + */ +typedef union { + const br_block_ctrcbc_class *vtable; + br_aes_big_ctrcbc_keys c_big; + br_aes_small_ctrcbc_keys c_small; + br_aes_ct_ctrcbc_keys c_ct; + br_aes_ct64_ctrcbc_keys c_ct64; + /* FIXME + br_aes_x86ni_ctrcbc_keys c_x86ni; + br_aes_pwr8_ctrcbc_keys c_pwr8; + */ +} br_aes_gen_ctrcbc_keys; + +/* + * Traditional, table-based implementation for DES/3DES. Since tables are + * used, cache-timing attacks are conceptually possible. + */ + +/** \brief DES/3DES block size (8 bytes). */ +#define br_des_tab_BLOCK_SIZE 8 + +/** + * \brief Context for DES subkeys (`des_tab` implementation, CBC encryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[96]; + unsigned num_rounds; +#endif +} br_des_tab_cbcenc_keys; + +/** + * \brief Context for DES subkeys (`des_tab` implementation, CBC decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[96]; + unsigned num_rounds; +#endif +} br_des_tab_cbcdec_keys; + +/** + * \brief Class instance for DES CBC encryption (`des_tab` implementation). + */ +extern const br_block_cbcenc_class br_des_tab_cbcenc_vtable; + +/** + * \brief Class instance for DES CBC decryption (`des_tab` implementation). + */ +extern const br_block_cbcdec_class br_des_tab_cbcdec_vtable; + +/** + * \brief Context initialisation (key schedule) for DES CBC encryption + * (`des_tab` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_des_tab_cbcenc_init(br_des_tab_cbcenc_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for DES CBC decryption + * (`des_tab` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_des_tab_cbcdec_init(br_des_tab_cbcdec_keys *ctx, + const void *key, size_t len); + +/** + * \brief CBC encryption with DES (`des_tab` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to encrypt (updated). + * \param len data length (in bytes, MUST be multiple of 8). + */ +void br_des_tab_cbcenc_run(const br_des_tab_cbcenc_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CBC decryption with DES (`des_tab` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to decrypt (updated). + * \param len data length (in bytes, MUST be multiple of 8). + */ +void br_des_tab_cbcdec_run(const br_des_tab_cbcdec_keys *ctx, void *iv, + void *data, size_t len); + +/* + * Constant-time implementation for DES/3DES. It is substantially slower + * (by a factor of about 4x), but also immune to cache-timing attacks. + */ + +/** \brief DES/3DES block size (8 bytes). */ +#define br_des_ct_BLOCK_SIZE 8 + +/** + * \brief Context for DES subkeys (`des_ct` implementation, CBC encryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[96]; + unsigned num_rounds; +#endif +} br_des_ct_cbcenc_keys; + +/** + * \brief Context for DES subkeys (`des_ct` implementation, CBC decryption). + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint32_t skey[96]; + unsigned num_rounds; +#endif +} br_des_ct_cbcdec_keys; + +/** + * \brief Class instance for DES CBC encryption (`des_ct` implementation). + */ +extern const br_block_cbcenc_class br_des_ct_cbcenc_vtable; + +/** + * \brief Class instance for DES CBC decryption (`des_ct` implementation). + */ +extern const br_block_cbcdec_class br_des_ct_cbcdec_vtable; + +/** + * \brief Context initialisation (key schedule) for DES CBC encryption + * (`des_ct` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_des_ct_cbcenc_init(br_des_ct_cbcenc_keys *ctx, + const void *key, size_t len); + +/** + * \brief Context initialisation (key schedule) for DES CBC decryption + * (`des_ct` implementation). + * + * \param ctx context to initialise. + * \param key secret key. + * \param len secret key length (in bytes). + */ +void br_des_ct_cbcdec_init(br_des_ct_cbcdec_keys *ctx, + const void *key, size_t len); + +/** + * \brief CBC encryption with DES (`des_ct` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to encrypt (updated). + * \param len data length (in bytes, MUST be multiple of 8). + */ +void br_des_ct_cbcenc_run(const br_des_ct_cbcenc_keys *ctx, void *iv, + void *data, size_t len); + +/** + * \brief CBC decryption with DES (`des_ct` implementation). + * + * \param ctx context (already initialised). + * \param iv IV (updated). + * \param data data to decrypt (updated). + * \param len data length (in bytes, MUST be multiple of 8). + */ +void br_des_ct_cbcdec_run(const br_des_ct_cbcdec_keys *ctx, void *iv, + void *data, size_t len); + +/* + * These structures are large enough to accommodate subkeys for all + * DES/3DES implementations. + */ + +/** + * \brief Aggregate structure large enough to be used as context for + * subkeys (CBC encryption) for all DES implementations. + */ +typedef union { + const br_block_cbcenc_class *vtable; + br_des_tab_cbcenc_keys tab; + br_des_ct_cbcenc_keys ct; +} br_des_gen_cbcenc_keys; + +/** + * \brief Aggregate structure large enough to be used as context for + * subkeys (CBC decryption) for all DES implementations. + */ +typedef union { + const br_block_cbcdec_class *vtable; + br_des_tab_cbcdec_keys c_tab; + br_des_ct_cbcdec_keys c_ct; +} br_des_gen_cbcdec_keys; + +/** + * \brief Type for a ChaCha20 implementation. + * + * An implementation follows the description in RFC 7539: + * + * - Key is 256 bits (`key` points to exactly 32 bytes). + * + * - IV is 96 bits (`iv` points to exactly 12 bytes). + * + * - Block counter is over 32 bits and starts at value `cc`; the + * resulting value is returned. + * + * Data (pointed to by `data`, of length `len`) is encrypted/decrypted + * in place. If `len` is not a multiple of 64, then the excess bytes from + * the last block processing are dropped (therefore, "chunked" processing + * works only as long as each non-final chunk has a length multiple of 64). + * + * \param key secret key (32 bytes). + * \param iv IV (12 bytes). + * \param cc initial counter value. + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + */ +typedef uint32_t (*br_chacha20_run)(const void *key, + const void *iv, uint32_t cc, void *data, size_t len); + +/** + * \brief ChaCha20 implementation (straightforward C code, constant-time). + * + * \see br_chacha20_run + * + * \param key secret key (32 bytes). + * \param iv IV (12 bytes). + * \param cc initial counter value. + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + */ +uint32_t br_chacha20_ct_run(const void *key, + const void *iv, uint32_t cc, void *data, size_t len); + +/** + * \brief ChaCha20 implementation (SSE2 code, constant-time). + * + * This implementation is available only on x86 platforms, depending on + * compiler support. Moreover, in 32-bit mode, it might not actually run, + * if the underlying hardware does not implement the SSE2 opcode (in + * 64-bit mode, SSE2 is part of the ABI, so if the code could be compiled + * at all, then it can run). Use `br_chacha20_sse2_get()` to safely obtain + * a pointer to that function. + * + * \see br_chacha20_run + * + * \param key secret key (32 bytes). + * \param iv IV (12 bytes). + * \param cc initial counter value. + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + */ +uint32_t br_chacha20_sse2_run(const void *key, + const void *iv, uint32_t cc, void *data, size_t len); + +/** + * \brief Obtain the `sse2` ChaCha20 implementation, if available. + * + * This function returns a pointer to `br_chacha20_sse2_run`, if + * that implementation was compiled in the library _and_ the SSE2 + * opcodes are available on the currently running CPU. If either of + * these conditions is not met, then this function returns `0`. + * + * \return the `sse2` ChaCha20 implementation, or `0`. + */ +br_chacha20_run br_chacha20_sse2_get(void); + +/** + * \brief Type for a ChaCha20+Poly1305 AEAD implementation. + * + * The provided data is encrypted or decrypted with ChaCha20. The + * authentication tag is computed on the concatenation of the + * additional data and the ciphertext, with the padding and lengths + * as described in RFC 7539 (section 2.8). + * + * After decryption, the caller is responsible for checking that the + * computed tag matches the expected value. + * + * \param key secret key (32 bytes). + * \param iv nonce (12 bytes). + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + * \param aad additional authenticated data. + * \param aad_len length of additional authenticated data (in bytes). + * \param tag output buffer for the authentication tag. + * \param ichacha implementation of ChaCha20. + * \param encrypt non-zero for encryption, zero for decryption. + */ +typedef void (*br_poly1305_run)(const void *key, const void *iv, + void *data, size_t len, const void *aad, size_t aad_len, + void *tag, br_chacha20_run ichacha, int encrypt); + +/** + * \brief ChaCha20+Poly1305 AEAD implementation (mixed 32-bit multiplications). + * + * \see br_poly1305_run + * + * \param key secret key (32 bytes). + * \param iv nonce (12 bytes). + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + * \param aad additional authenticated data. + * \param aad_len length of additional authenticated data (in bytes). + * \param tag output buffer for the authentication tag. + * \param ichacha implementation of ChaCha20. + * \param encrypt non-zero for encryption, zero for decryption. + */ +void br_poly1305_ctmul_run(const void *key, const void *iv, + void *data, size_t len, const void *aad, size_t aad_len, + void *tag, br_chacha20_run ichacha, int encrypt); + +/** + * \brief ChaCha20+Poly1305 AEAD implementation (pure 32-bit multiplications). + * + * \see br_poly1305_run + * + * \param key secret key (32 bytes). + * \param iv nonce (12 bytes). + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + * \param aad additional authenticated data. + * \param aad_len length of additional authenticated data (in bytes). + * \param tag output buffer for the authentication tag. + * \param ichacha implementation of ChaCha20. + * \param encrypt non-zero for encryption, zero for decryption. + */ +void br_poly1305_ctmul32_run(const void *key, const void *iv, + void *data, size_t len, const void *aad, size_t aad_len, + void *tag, br_chacha20_run ichacha, int encrypt); + +/** + * \brief ChaCha20+Poly1305 AEAD implementation (i15). + * + * This implementation relies on the generic big integer code "i15" + * (which uses pure 32-bit multiplications). As such, it may save a + * little code footprint in a context where "i15" is already included + * (e.g. for elliptic curves or for RSA); however, it is also + * substantially slower than the ctmul and ctmul32 implementations. + * + * \see br_poly1305_run + * + * \param key secret key (32 bytes). + * \param iv nonce (12 bytes). + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + * \param aad additional authenticated data. + * \param aad_len length of additional authenticated data (in bytes). + * \param tag output buffer for the authentication tag. + * \param ichacha implementation of ChaCha20. + * \param encrypt non-zero for encryption, zero for decryption. + */ +void br_poly1305_i15_run(const void *key, const void *iv, + void *data, size_t len, const void *aad, size_t aad_len, + void *tag, br_chacha20_run ichacha, int encrypt); + +/** + * \brief ChaCha20+Poly1305 AEAD implementation (ctmulq). + * + * This implementation uses 64-bit multiplications (result over 128 bits). + * It is available only on platforms that offer such a primitive (in + * practice, 64-bit architectures). Use `br_poly1305_ctmulq_get()` to + * dynamically obtain a pointer to that function, or 0 if not supported. + * + * \see br_poly1305_run + * + * \param key secret key (32 bytes). + * \param iv nonce (12 bytes). + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + * \param aad additional authenticated data. + * \param aad_len length of additional authenticated data (in bytes). + * \param tag output buffer for the authentication tag. + * \param ichacha implementation of ChaCha20. + * \param encrypt non-zero for encryption, zero for decryption. + */ +void br_poly1305_ctmulq_run(const void *key, const void *iv, + void *data, size_t len, const void *aad, size_t aad_len, + void *tag, br_chacha20_run ichacha, int encrypt); + +/** + * \brief Get the ChaCha20+Poly1305 "ctmulq" implementation, if available. + * + * This function returns a pointer to the `br_poly1305_ctmulq_run()` + * function if supported on the current platform; otherwise, it returns 0. + * + * \return the ctmulq ChaCha20+Poly1305 implementation, or 0. + */ +br_poly1305_run br_poly1305_ctmulq_get(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/bearssl/bearssl_ec.h b/tools/sdk/include/bearssl/bearssl_ec.h new file mode 100644 index 000000000..533296dca --- /dev/null +++ b/tools/sdk/include/bearssl/bearssl_ec.h @@ -0,0 +1,804 @@ +/* + * Copyright (c) 2016 Thomas Pornin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BR_BEARSSL_EC_H__ +#define BR_BEARSSL_EC_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file bearssl_ec.h + * + * # Elliptic Curves + * + * This file documents the EC implementations provided with BearSSL, and + * ECDSA. + * + * ## Elliptic Curve API + * + * Only "named curves" are supported. Each EC implementation supports + * one or several named curves, identified by symbolic identifiers. + * These identifiers are small integers, that correspond to the values + * registered by the + * [IANA](http://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8). + * + * Since all currently defined elliptic curve identifiers are in the 0..31 + * range, it is convenient to encode support of some curves in a 32-bit + * word, such that bit x corresponds to curve of identifier x. + * + * An EC implementation is incarnated by a `br_ec_impl` instance, that + * offers the following fields: + * + * - `supported_curves` + * + * A 32-bit word that documents the identifiers of the curves supported + * by this implementation. + * + * - `generator()` + * + * Callback method that returns a pointer to the conventional generator + * point for that curve. + * + * - `order()` + * + * Callback method that returns a pointer to the subgroup order for + * that curve. That value uses unsigned big-endian encoding. + * + * - `xoff()` + * + * Callback method that returns the offset and length of the X + * coordinate in an encoded point. + * + * - `mul()` + * + * Multiply a curve point with an integer. + * + * - `mulgen()` + * + * Multiply the curve generator with an integer. This may be faster + * than the generic `mul()`. + * + * - `muladd()` + * + * Multiply two curve points by two integers, and return the sum of + * the two products. + * + * All curve points are represented in uncompressed format. The `mul()` + * and `muladd()` methods take care to validate that the provided points + * are really part of the relevant curve subgroup. + * + * For all point multiplication functions, the following holds: + * + * - Functions validate that the provided points are valid members + * of the relevant curve subgroup. An error is reported if that is + * not the case. + * + * - Processing is constant-time, even if the point operands are not + * valid. This holds for both the source and resulting points, and + * the multipliers (integers). Only the byte length of the provided + * multiplier arrays (not their actual value length in bits) may + * leak through timing-based side channels. + * + * - The multipliers (integers) MUST be lower than the subgroup order. + * If this property is not met, then the result is indeterminate, + * but an error value is not ncessearily returned. + * + * + * ## ECDSA + * + * ECDSA signatures have two standard formats, called "raw" and "asn1". + * Internally, such a signature is a pair of modular integers `(r,s)`. + * The "raw" format is the concatenation of the unsigned big-endian + * encodings of these two integers, possibly left-padded with zeros so + * that they have the same encoded length. The "asn1" format is the + * DER encoding of an ASN.1 structure that contains the two integer + * values: + * + * ECDSASignature ::= SEQUENCE { + * r INTEGER, + * s INTEGER + * } + * + * In general, in all of X.509 and SSL/TLS, the "asn1" format is used. + * BearSSL offers ECDSA implementations for both formats; conversion + * functions between the two formats are also provided. Conversion of a + * "raw" format signature into "asn1" may enlarge a signature by no more + * than 9 bytes for all supported curves; conversely, conversion of an + * "asn1" signature to "raw" may expand the signature but the "raw" + * length will never be more than twice the length of the "asn1" length + * (and usually it will be shorter). + * + * Note that for a given signature, the "raw" format is not fully + * deterministic, in that it does not enforce a minimal common length. + */ + +/* + * Standard curve ID. These ID are equal to the assigned numerical + * identifiers assigned to these curves for TLS: + * http://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8 + */ + +/** \brief Identifier for named curve sect163k1. */ +#define BR_EC_sect163k1 1 + +/** \brief Identifier for named curve sect163r1. */ +#define BR_EC_sect163r1 2 + +/** \brief Identifier for named curve sect163r2. */ +#define BR_EC_sect163r2 3 + +/** \brief Identifier for named curve sect193r1. */ +#define BR_EC_sect193r1 4 + +/** \brief Identifier for named curve sect193r2. */ +#define BR_EC_sect193r2 5 + +/** \brief Identifier for named curve sect233k1. */ +#define BR_EC_sect233k1 6 + +/** \brief Identifier for named curve sect233r1. */ +#define BR_EC_sect233r1 7 + +/** \brief Identifier for named curve sect239k1. */ +#define BR_EC_sect239k1 8 + +/** \brief Identifier for named curve sect283k1. */ +#define BR_EC_sect283k1 9 + +/** \brief Identifier for named curve sect283r1. */ +#define BR_EC_sect283r1 10 + +/** \brief Identifier for named curve sect409k1. */ +#define BR_EC_sect409k1 11 + +/** \brief Identifier for named curve sect409r1. */ +#define BR_EC_sect409r1 12 + +/** \brief Identifier for named curve sect571k1. */ +#define BR_EC_sect571k1 13 + +/** \brief Identifier for named curve sect571r1. */ +#define BR_EC_sect571r1 14 + +/** \brief Identifier for named curve secp160k1. */ +#define BR_EC_secp160k1 15 + +/** \brief Identifier for named curve secp160r1. */ +#define BR_EC_secp160r1 16 + +/** \brief Identifier for named curve secp160r2. */ +#define BR_EC_secp160r2 17 + +/** \brief Identifier for named curve secp192k1. */ +#define BR_EC_secp192k1 18 + +/** \brief Identifier for named curve secp192r1. */ +#define BR_EC_secp192r1 19 + +/** \brief Identifier for named curve secp224k1. */ +#define BR_EC_secp224k1 20 + +/** \brief Identifier for named curve secp224r1. */ +#define BR_EC_secp224r1 21 + +/** \brief Identifier for named curve secp256k1. */ +#define BR_EC_secp256k1 22 + +/** \brief Identifier for named curve secp256r1. */ +#define BR_EC_secp256r1 23 + +/** \brief Identifier for named curve secp384r1. */ +#define BR_EC_secp384r1 24 + +/** \brief Identifier for named curve secp521r1. */ +#define BR_EC_secp521r1 25 + +/** \brief Identifier for named curve brainpoolP256r1. */ +#define BR_EC_brainpoolP256r1 26 + +/** \brief Identifier for named curve brainpoolP384r1. */ +#define BR_EC_brainpoolP384r1 27 + +/** \brief Identifier for named curve brainpoolP512r1. */ +#define BR_EC_brainpoolP512r1 28 + +/** \brief Identifier for named curve Curve25519. */ +#define BR_EC_curve25519 29 + +/** \brief Identifier for named curve Curve448. */ +#define BR_EC_curve448 30 + +/** + * \brief Structure for an EC public key. + */ +typedef struct { + /** \brief Identifier for the curve used by this key. */ + int curve; + /** \brief Public curve point (uncompressed format). */ + unsigned char *q; + /** \brief Length of public curve point (in bytes). */ + size_t qlen; +} br_ec_public_key; + +/** + * \brief Structure for an EC private key. + * + * The private key is an integer modulo the curve subgroup order. The + * encoding below tolerates extra leading zeros. In general, it is + * recommended that the private key has the same length as the curve + * subgroup order. + */ +typedef struct { + /** \brief Identifier for the curve used by this key. */ + int curve; + /** \brief Private key (integer, unsigned big-endian encoding). */ + unsigned char *x; + /** \brief Private key length (in bytes). */ + size_t xlen; +} br_ec_private_key; + +/** + * \brief Type for an EC implementation. + */ +typedef struct { + /** + * \brief Supported curves. + * + * This word is a bitfield: bit `x` is set if the curve of ID `x` + * is supported. E.g. an implementation supporting both NIST P-256 + * (secp256r1, ID 23) and NIST P-384 (secp384r1, ID 24) will have + * value `0x01800000` in this field. + */ + uint32_t supported_curves; + + /** + * \brief Get the conventional generator. + * + * This function returns the conventional generator (encoded + * curve point) for the specified curve. This function MUST NOT + * be called if the curve is not supported. + * + * \param curve curve identifier. + * \param len receiver for the encoded generator length (in bytes). + * \return the encoded generator. + */ + const unsigned char *(*generator)(int curve, size_t *len); + + /** + * \brief Get the subgroup order. + * + * This function returns the order of the subgroup generated by + * the conventional generator, for the specified curve. Unsigned + * big-endian encoding is used. This function MUST NOT be called + * if the curve is not supported. + * + * \param curve curve identifier. + * \param len receiver for the encoded order length (in bytes). + * \return the encoded order. + */ + const unsigned char *(*order)(int curve, size_t *len); + + /** + * \brief Get the offset and length for the X coordinate. + * + * This function returns the offset and length (in bytes) of + * the X coordinate in an encoded non-zero point. + * + * \param curve curve identifier. + * \param len receiver for the X coordinate length (in bytes). + * \return the offset for the X coordinate (in bytes). + */ + size_t (*xoff)(int curve, size_t *len); + + /** + * \brief Multiply a curve point by an integer. + * + * The source point is provided in array `G` (of size `Glen` bytes); + * the multiplication result is written over it. The multiplier + * `x` (of size `xlen` bytes) uses unsigned big-endian encoding. + * + * Rules: + * + * - The specified curve MUST be supported. + * + * - The source point must be a valid point on the relevant curve + * subgroup (and not the "point at infinity" either). If this is + * not the case, then this function returns an error (0). + * + * - The multiplier integer MUST be non-zero and less than the + * curve subgroup order. If this property does not hold, then + * the result is indeterminate and an error code is not + * guaranteed. + * + * Returned value is 1 on success, 0 on error. On error, the + * contents of `G` are indeterminate. + * + * \param G point to multiply. + * \param Glen length of the encoded point (in bytes). + * \param x multiplier (unsigned big-endian). + * \param xlen multiplier length (in bytes). + * \param curve curve identifier. + * \return 1 on success, 0 on error. + */ + uint32_t (*mul)(unsigned char *G, size_t Glen, + const unsigned char *x, size_t xlen, int curve); + + /** + * \brief Multiply the generator by an integer. + * + * The multiplier MUST be non-zero and less than the curve + * subgroup order. Results are indeterminate if this property + * does not hold. + * + * \param R output buffer for the point. + * \param x multiplier (unsigned big-endian). + * \param xlen multiplier length (in bytes). + * \param curve curve identifier. + * \return encoded result point length (in bytes). + */ + size_t (*mulgen)(unsigned char *R, + const unsigned char *x, size_t xlen, int curve); + + /** + * \brief Multiply two points by two integers and add the + * results. + * + * The point `x*A + y*B` is computed and written back in the `A` + * array. + * + * Rules: + * + * - The specified curve MUST be supported. + * + * - The source points (`A` and `B`) must be valid points on + * the relevant curve subgroup (and not the "point at + * infinity" either). If this is not the case, then this + * function returns an error (0). + * + * - If the `B` pointer is `NULL`, then the conventional + * subgroup generator is used. With some implementations, + * this may be faster than providing a pointer to the + * generator. + * + * - The multiplier integers (`x` and `y`) MUST be non-zero + * and less than the curve subgroup order. If either integer + * is zero, then an error is reported, but if one of them is + * not lower than the subgroup order, then the result is + * indeterminate and an error code is not guaranteed. + * + * - If the final result is the point at infinity, then an + * error is returned. + * + * Returned value is 1 on success, 0 on error. On error, the + * contents of `A` are indeterminate. + * + * \param A first point to multiply. + * \param B second point to multiply (`NULL` for the generator). + * \param len common length of the encoded points (in bytes). + * \param x multiplier for `A` (unsigned big-endian). + * \param xlen length of multiplier for `A` (in bytes). + * \param y multiplier for `A` (unsigned big-endian). + * \param ylen length of multiplier for `A` (in bytes). + * \param curve curve identifier. + * \return 1 on success, 0 on error. + */ + uint32_t (*muladd)(unsigned char *A, const unsigned char *B, size_t len, + const unsigned char *x, size_t xlen, + const unsigned char *y, size_t ylen, int curve); +} br_ec_impl; + +/** + * \brief EC implementation "i31". + * + * This implementation internally uses generic code for modular integers, + * with a representation as sequences of 31-bit words. It supports secp256r1, + * secp384r1 and secp521r1 (aka NIST curves P-256, P-384 and P-521). + */ +extern const br_ec_impl br_ec_prime_i31; + +/** + * \brief EC implementation "i15". + * + * This implementation internally uses generic code for modular integers, + * with a representation as sequences of 15-bit words. It supports secp256r1, + * secp384r1 and secp521r1 (aka NIST curves P-256, P-384 and P-521). + */ +extern const br_ec_impl br_ec_prime_i15; + +/** + * \brief EC implementation "m15" for P-256. + * + * This implementation uses specialised code for curve secp256r1 (also + * known as NIST P-256), with optional Karatsuba decomposition, and fast + * modular reduction thanks to the field modulus special format. Only + * 32-bit multiplications are used (with 32-bit results, not 64-bit). + */ +extern const br_ec_impl br_ec_p256_m15; + +/** + * \brief EC implementation "m31" for P-256. + * + * This implementation uses specialised code for curve secp256r1 (also + * known as NIST P-256), relying on multiplications of 31-bit values + * (MUL31). + */ +extern const br_ec_impl br_ec_p256_m31; + +/** + * \brief EC implementation "i15" (generic code) for Curve25519. + * + * This implementation uses the generic code for modular integers (with + * 15-bit words) to support Curve25519. Due to the specificities of the + * curve definition, the following applies: + * + * - `muladd()` is not implemented (the function returns 0 systematically). + * - `order()` returns 2^255-1, since the point multiplication algorithm + * accepts any 32-bit integer as input (it clears the top bit and low + * three bits systematically). + */ +extern const br_ec_impl br_ec_c25519_i15; + +/** + * \brief EC implementation "i31" (generic code) for Curve25519. + * + * This implementation uses the generic code for modular integers (with + * 31-bit words) to support Curve25519. Due to the specificities of the + * curve definition, the following applies: + * + * - `muladd()` is not implemented (the function returns 0 systematically). + * - `order()` returns 2^255-1, since the point multiplication algorithm + * accepts any 32-bit integer as input (it clears the top bit and low + * three bits systematically). + */ +extern const br_ec_impl br_ec_c25519_i31; + +/** + * \brief EC implementation "m15" (specialised code) for Curve25519. + * + * This implementation uses custom code relying on multiplication of + * integers up to 15 bits. Due to the specificities of the curve + * definition, the following applies: + * + * - `muladd()` is not implemented (the function returns 0 systematically). + * - `order()` returns 2^255-1, since the point multiplication algorithm + * accepts any 32-bit integer as input (it clears the top bit and low + * three bits systematically). + */ +extern const br_ec_impl br_ec_c25519_m15; + +/** + * \brief EC implementation "m31" (specialised code) for Curve25519. + * + * This implementation uses custom code relying on multiplication of + * integers up to 31 bits. Due to the specificities of the curve + * definition, the following applies: + * + * - `muladd()` is not implemented (the function returns 0 systematically). + * - `order()` returns 2^255-1, since the point multiplication algorithm + * accepts any 32-bit integer as input (it clears the top bit and low + * three bits systematically). + */ +extern const br_ec_impl br_ec_c25519_m31; + +/** + * \brief Aggregate EC implementation "m15". + * + * This implementation is a wrapper for: + * + * - `br_ec_c25519_m15` for Curve25519 + * - `br_ec_p256_m15` for NIST P-256 + * - `br_ec_prime_i15` for other curves (NIST P-384 and NIST-P512) + */ +extern const br_ec_impl br_ec_all_m15; + +/** + * \brief Aggregate EC implementation "m31". + * + * This implementation is a wrapper for: + * + * - `br_ec_c25519_m31` for Curve25519 + * - `br_ec_p256_m31` for NIST P-256 + * - `br_ec_prime_i31` for other curves (NIST P-384 and NIST-P512) + */ +extern const br_ec_impl br_ec_all_m31; + +/** + * \brief Get the "default" EC implementation for the current system. + * + * This returns a pointer to the preferred implementation on the + * current system. + * + * \return the default EC implementation. + */ +const br_ec_impl *br_ec_get_default(void); + +/** + * \brief Convert a signature from "raw" to "asn1". + * + * Conversion is done "in place" and the new length is returned. + * Conversion may enlarge the signature, but by no more than 9 bytes at + * most. On error, 0 is returned (error conditions include an odd raw + * signature length, or an oversized integer). + * + * \param sig signature to convert. + * \param sig_len signature length (in bytes). + * \return the new signature length, or 0 on error. + */ +size_t br_ecdsa_raw_to_asn1(void *sig, size_t sig_len); + +/** + * \brief Convert a signature from "asn1" to "raw". + * + * Conversion is done "in place" and the new length is returned. + * Conversion may enlarge the signature, but the new signature length + * will be less than twice the source length at most. On error, 0 is + * returned (error conditions include an invalid ASN.1 structure or an + * oversized integer). + * + * \param sig signature to convert. + * \param sig_len signature length (in bytes). + * \return the new signature length, or 0 on error. + */ +size_t br_ecdsa_asn1_to_raw(void *sig, size_t sig_len); + +/** + * \brief Type for an ECDSA signer function. + * + * A pointer to the EC implementation is provided. The hash value is + * assumed to have the length inferred from the designated hash function + * class. + * + * Signature is written in the buffer pointed to by `sig`, and the length + * (in bytes) is returned. On error, nothing is written in the buffer, + * and 0 is returned. This function returns 0 if the specified curve is + * not supported by the provided EC implementation. + * + * The signature format is either "raw" or "asn1", depending on the + * implementation; maximum length is predictable from the implemented + * curve: + * + * | curve | raw | asn1 | + * | :--------- | --: | ---: | + * | NIST P-256 | 64 | 72 | + * | NIST P-384 | 96 | 104 | + * | NIST P-521 | 132 | 139 | + * + * \param impl EC implementation to use. + * \param hf hash function used to process the data. + * \param hash_value signed data (hashed). + * \param sk EC private key. + * \param sig destination buffer. + * \return the signature length (in bytes), or 0 on error. + */ +typedef size_t (*br_ecdsa_sign)(const br_ec_impl *impl, + const br_hash_class *hf, const void *hash_value, + const br_ec_private_key *sk, void *sig); + +/** + * \brief Type for an ECDSA signature verification function. + * + * A pointer to the EC implementation is provided. The hashed value, + * computed over the purportedly signed data, is also provided with + * its length. + * + * The signature format is either "raw" or "asn1", depending on the + * implementation. + * + * Returned value is 1 on success (valid signature), 0 on error. This + * function returns 0 if the specified curve is not supported by the + * provided EC implementation. + * + * \param impl EC implementation to use. + * \param hash signed data (hashed). + * \param hash_len hash value length (in bytes). + * \param pk EC public key. + * \param sig signature. + * \param sig_len signature length (in bytes). + * \return 1 on success, 0 on error. + */ +typedef uint32_t (*br_ecdsa_vrfy)(const br_ec_impl *impl, + const void *hash, size_t hash_len, + const br_ec_public_key *pk, const void *sig, size_t sig_len); + +/** + * \brief ECDSA signature generator, "i31" implementation, "asn1" format. + * + * \see br_ecdsa_sign() + * + * \param impl EC implementation to use. + * \param hf hash function used to process the data. + * \param hash_value signed data (hashed). + * \param sk EC private key. + * \param sig destination buffer. + * \return the signature length (in bytes), or 0 on error. + */ +size_t br_ecdsa_i31_sign_asn1(const br_ec_impl *impl, + const br_hash_class *hf, const void *hash_value, + const br_ec_private_key *sk, void *sig); + +/** + * \brief ECDSA signature generator, "i31" implementation, "raw" format. + * + * \see br_ecdsa_sign() + * + * \param impl EC implementation to use. + * \param hf hash function used to process the data. + * \param hash_value signed data (hashed). + * \param sk EC private key. + * \param sig destination buffer. + * \return the signature length (in bytes), or 0 on error. + */ +size_t br_ecdsa_i31_sign_raw(const br_ec_impl *impl, + const br_hash_class *hf, const void *hash_value, + const br_ec_private_key *sk, void *sig); + +/** + * \brief ECDSA signature verifier, "i31" implementation, "asn1" format. + * + * \see br_ecdsa_vrfy() + * + * \param impl EC implementation to use. + * \param hash signed data (hashed). + * \param hash_len hash value length (in bytes). + * \param pk EC public key. + * \param sig signature. + * \param sig_len signature length (in bytes). + * \return 1 on success, 0 on error. + */ +uint32_t br_ecdsa_i31_vrfy_asn1(const br_ec_impl *impl, + const void *hash, size_t hash_len, + const br_ec_public_key *pk, const void *sig, size_t sig_len); + +/** + * \brief ECDSA signature verifier, "i31" implementation, "raw" format. + * + * \see br_ecdsa_vrfy() + * + * \param impl EC implementation to use. + * \param hash signed data (hashed). + * \param hash_len hash value length (in bytes). + * \param pk EC public key. + * \param sig signature. + * \param sig_len signature length (in bytes). + * \return 1 on success, 0 on error. + */ +uint32_t br_ecdsa_i31_vrfy_raw(const br_ec_impl *impl, + const void *hash, size_t hash_len, + const br_ec_public_key *pk, const void *sig, size_t sig_len); + +/** + * \brief ECDSA signature generator, "i15" implementation, "asn1" format. + * + * \see br_ecdsa_sign() + * + * \param impl EC implementation to use. + * \param hf hash function used to process the data. + * \param hash_value signed data (hashed). + * \param sk EC private key. + * \param sig destination buffer. + * \return the signature length (in bytes), or 0 on error. + */ +size_t br_ecdsa_i15_sign_asn1(const br_ec_impl *impl, + const br_hash_class *hf, const void *hash_value, + const br_ec_private_key *sk, void *sig); + +/** + * \brief ECDSA signature generator, "i15" implementation, "raw" format. + * + * \see br_ecdsa_sign() + * + * \param impl EC implementation to use. + * \param hf hash function used to process the data. + * \param hash_value signed data (hashed). + * \param sk EC private key. + * \param sig destination buffer. + * \return the signature length (in bytes), or 0 on error. + */ +size_t br_ecdsa_i15_sign_raw(const br_ec_impl *impl, + const br_hash_class *hf, const void *hash_value, + const br_ec_private_key *sk, void *sig); + +/** + * \brief ECDSA signature verifier, "i15" implementation, "asn1" format. + * + * \see br_ecdsa_vrfy() + * + * \param impl EC implementation to use. + * \param hash signed data (hashed). + * \param hash_len hash value length (in bytes). + * \param pk EC public key. + * \param sig signature. + * \param sig_len signature length (in bytes). + * \return 1 on success, 0 on error. + */ +uint32_t br_ecdsa_i15_vrfy_asn1(const br_ec_impl *impl, + const void *hash, size_t hash_len, + const br_ec_public_key *pk, const void *sig, size_t sig_len); + +/** + * \brief ECDSA signature verifier, "i15" implementation, "raw" format. + * + * \see br_ecdsa_vrfy() + * + * \param impl EC implementation to use. + * \param hash signed data (hashed). + * \param hash_len hash value length (in bytes). + * \param pk EC public key. + * \param sig signature. + * \param sig_len signature length (in bytes). + * \return 1 on success, 0 on error. + */ +uint32_t br_ecdsa_i15_vrfy_raw(const br_ec_impl *impl, + const void *hash, size_t hash_len, + const br_ec_public_key *pk, const void *sig, size_t sig_len); + +/** + * \brief Get "default" ECDSA implementation (signer, asn1 format). + * + * This returns the preferred implementation of ECDSA signature generation + * ("asn1" output format) on the current system. + * + * \return the default implementation. + */ +br_ecdsa_sign br_ecdsa_sign_asn1_get_default(void); + +/** + * \brief Get "default" ECDSA implementation (signer, raw format). + * + * This returns the preferred implementation of ECDSA signature generation + * ("raw" output format) on the current system. + * + * \return the default implementation. + */ +br_ecdsa_sign br_ecdsa_sign_raw_get_default(void); + +/** + * \brief Get "default" ECDSA implementation (verifier, asn1 format). + * + * This returns the preferred implementation of ECDSA signature verification + * ("asn1" output format) on the current system. + * + * \return the default implementation. + */ +br_ecdsa_vrfy br_ecdsa_vrfy_asn1_get_default(void); + +/** + * \brief Get "default" ECDSA implementation (verifier, raw format). + * + * This returns the preferred implementation of ECDSA signature verification + * ("raw" output format) on the current system. + * + * \return the default implementation. + */ +br_ecdsa_vrfy br_ecdsa_vrfy_raw_get_default(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/bearssl/bearssl_hash.h b/tools/sdk/include/bearssl/bearssl_hash.h new file mode 100644 index 000000000..860ab718b --- /dev/null +++ b/tools/sdk/include/bearssl/bearssl_hash.h @@ -0,0 +1,1346 @@ +/* + * Copyright (c) 2016 Thomas Pornin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BR_BEARSSL_HASH_H__ +#define BR_BEARSSL_HASH_H__ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file bearssl_hash.h + * + * # Hash Functions + * + * This file documents the API for hash functions. + * + * + * ## Procedural API + * + * For each implemented hash function, of name "`xxx`", the following + * elements are defined: + * + * - `br_xxx_vtable` + * + * An externally defined instance of `br_hash_class`. + * + * - `br_xxx_SIZE` + * + * A macro that evaluates to the output size (in bytes) of the + * hash function. + * + * - `br_xxx_ID` + * + * A macro that evaluates to a symbolic identifier for the hash + * function. Such identifiers are used with HMAC and signature + * algorithm implementations. + * + * NOTE: for the "standard" hash functions defined in [the TLS + * standard](https://tools.ietf.org/html/rfc5246#section-7.4.1.4.1), + * the symbolic identifiers match the constants used in TLS, i.e. + * 1 to 6 for MD5, SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512, + * respectively. + * + * - `br_xxx_context` + * + * Context for an ongoing computation. It is allocated by the + * caller, and a pointer to it is passed to all functions. A + * context contains no interior pointer, so it can be moved around + * and cloned (with a simple `memcpy()` or equivalent) in order to + * capture the function state at some point. Computations that use + * distinct context structures are independent of each other. The + * first field of `br_xxx_context` is always a pointer to the + * `br_xxx_vtable` structure; `br_xxx_init()` sets that pointer. + * + * - `br_xxx_init(br_xxx_context *ctx)` + * + * Initialise the provided context. Previous contents of the structure + * are ignored. This calls resets the context to the start of a new + * hash computation; it also sets the first field of the context + * structure (called `vtable`) to a pointer to the statically + * allocated constant `br_xxx_vtable` structure. + * + * - `br_xxx_update(br_xxx_context *ctx, const void *data, size_t len)` + * + * Add some more bytes to the hash computation represented by the + * provided context. + * + * - `br_xxx_out(const br_xxx_context *ctx, void *out)` + * + * Complete the hash computation and write the result in the provided + * buffer. The output buffer MUST be large enough to accomodate the + * result. The context is NOT modified by this operation, so this + * function can be used to get a "partial hash" while still keeping + * the possibility of adding more bytes to the input. + * + * - `br_xxx_state(const br_xxx_context *ctx, void *out)` + * + * Get a copy of the "current state" for the computation so far. For + * MD functions (MD5, SHA-1, SHA-2 family), this is the running state + * resulting from the processing of the last complete input block. + * Returned value is the current input length (in bytes). + * + * - `br_xxx_set_state(br_xxx_context *ctx, const void *stb, uint64_t count)` + * + * Set the internal state to the provided values. The 'stb' and + * 'count' values shall match that which was obtained from + * `br_xxx_state()`. This restores the hash state only if the state + * values were at an appropriate block boundary. This does NOT set + * the `vtable` pointer in the context. + * + * Context structures can be discarded without any explicit deallocation. + * Hash function implementations are purely software and don't reserve + * any resources outside of the context structure itself. + * + * + * ## Object-Oriented API + * + * For each hash function that follows the procedural API described + * above, an object-oriented API is also provided. In that API, function + * pointers from the vtable (`br_xxx_vtable`) are used. The vtable + * incarnates object-oriented programming. An introduction on the OOP + * concept used here can be read on the BearSSL Web site:
+ *    [https://www.bearssl.org/oop.html](https://www.bearssl.org/oop.html) + * + * The vtable offers functions called `init()`, `update()`, `out()`, + * `set()` and `set_state()`, which are in fact the functions from + * the procedural API. That vtable also contains two informative fields: + * + * - `context_size` + * + * The size of the context structure (`br_xxx_context`), in bytes. + * This can be used by generic implementations to perform dynamic + * context allocation. + * + * - `desc` + * + * A "descriptor" field that encodes some information on the hash + * function: symbolic identifier, output size, state size, + * internal block size, details on the padding. + * + * Users of this object-oriented API (in particular generic HMAC + * implementations) may make the following assumptions: + * + * - Hash output size is no more than 64 bytes. + * - Hash internal state size is no more than 64 bytes. + * - Internal block size is a power of two, no less than 16 and no more + * than 256. + * + * + * ## Implemented Hash Functions + * + * Implemented hash functions are: + * + * | Function | Name | Output length | State length | + * | :-------- | :------ | :-----------: | :----------: | + * | MD5 | md5 | 16 | 16 | + * | SHA-1 | sha1 | 20 | 20 | + * | SHA-224 | sha224 | 28 | 32 | + * | SHA-256 | sha256 | 32 | 32 | + * | SHA-384 | sha384 | 48 | 64 | + * | SHA-512 | sha512 | 64 | 64 | + * | MD5+SHA-1 | md5sha1 | 36 | 36 | + * + * (MD5+SHA-1 is the concatenation of MD5 and SHA-1 computed over the + * same input; in the implementation, the internal data buffer is + * shared, thus making it more memory-efficient than separate MD5 and + * SHA-1. It can be useful in implementing SSL 3.0, TLS 1.0 and TLS + * 1.1.) + * + * + * ## Multi-Hasher + * + * An aggregate hasher is provided, that can compute several standard + * hash functions in parallel. It uses `br_multihash_context` and a + * procedural API. It is configured with the implementations (the vtables) + * that it should use; it will then compute all these hash functions in + * parallel, on the same input. It is meant to be used in cases when the + * hash of an object will be used, but the exact hash function is not + * known yet (typically, streamed processing on X.509 certificates). + * + * Only the standard hash functions (MD5, SHA-1, SHA-224, SHA-256, SHA-384 + * and SHA-512) are supported by the multi-hasher. + * + * + * ## GHASH + * + * GHASH is not a generic hash function; it is a _universal_ hash function, + * which, as the name does not say, means that it CANNOT be used in most + * places where a hash function is needed. GHASH is used within the GCM + * encryption mode, to provide the checked integrity functionality. + * + * A GHASH implementation is basically a function that uses the type defined + * in this file under the name `br_ghash`: + * + * typedef void (*br_ghash)(void *y, const void *h, const void *data, size_t len); + * + * The `y` pointer refers to a 16-byte value which is used as input, and + * receives the output of the GHASH invocation. `h` is a 16-byte secret + * value (that serves as key). `data` and `len` define the input data. + * + * Three GHASH implementations are provided, all constant-time, based on + * the use of integer multiplications with appropriate masking to cancel + * carry propagation. + */ + +/** + * \brief Class type for hash function implementations. + * + * A `br_hash_class` instance references the methods implementing a hash + * function. Constant instances of this structure are defined for each + * implemented hash function. Such instances are also called "vtables". + * + * Vtables are used to support object-oriented programming, as + * described on [the BearSSL Web site](https://www.bearssl.org/oop.html). + */ +typedef struct br_hash_class_ br_hash_class; +struct br_hash_class_ { + /** + * \brief Size (in bytes) of the context structure appropriate for + * computing this hash function. + */ + size_t context_size; + + /** + * \brief Descriptor word that contains information about the hash + * function. + * + * For each word `xxx` described below, use `BR_HASHDESC_xxx_OFF` + * and `BR_HASHDESC_xxx_MASK` to access the specific value, as + * follows: + * + * (hf->desc >> BR_HASHDESC_xxx_OFF) & BR_HASHDESC_xxx_MASK + * + * The defined elements are: + * + * - `ID`: the symbolic identifier for the function, as defined + * in [TLS](https://tools.ietf.org/html/rfc5246#section-7.4.1.4.1) + * (MD5 = 1, SHA-1 = 2,...). + * + * - `OUT`: hash output size, in bytes. + * + * - `STATE`: internal running state size, in bytes. + * + * - `LBLEN`: base-2 logarithm for the internal block size, as + * defined for HMAC processing (this is 6 for MD5, SHA-1, SHA-224 + * and SHA-256, since these functions use 64-byte blocks; for + * SHA-384 and SHA-512, this is 7, corresponding to their + * 128-byte blocks). + * + * The descriptor may contain a few other flags. + */ + uint32_t desc; + + /** + * \brief Initialisation method. + * + * This method takes as parameter a pointer to a context area, + * that it initialises. The first field of the context is set + * to this vtable; other elements are initialised for a new hash + * computation. + * + * \param ctx pointer to (the first field of) the context. + */ + void (*init)(const br_hash_class **ctx); + + /** + * \brief Data injection method. + * + * The `len` bytes starting at address `data` are injected into + * the running hash computation incarnated by the specified + * context. The context is updated accordingly. It is allowed + * to have `len == 0`, in which case `data` is ignored (and could + * be `NULL`), and nothing happens. + * on the input data. + * + * \param ctx pointer to (the first field of) the context. + * \param data pointer to the first data byte to inject. + * \param len number of bytes to inject. + */ + void (*update)(const br_hash_class **ctx, const void *data, size_t len); + + /** + * \brief Produce hash output. + * + * The hash output corresponding to all data bytes injected in the + * context since the last `init()` call is computed, and written + * in the buffer pointed to by `dst`. The hash output size depends + * on the implemented hash function (e.g. 16 bytes for MD5). + * The context is _not_ modified by this call, so further bytes + * may be afterwards injected to continue the current computation. + * + * \param ctx pointer to (the first field of) the context. + * \param dst destination buffer for the hash output. + */ + void (*out)(const br_hash_class *const *ctx, void *dst); + + /** + * \brief Get running state. + * + * This method saves the current running state into the `dst` + * buffer. What constitutes the "running state" depends on the + * hash function; for Merkle-DamgÃ¥rd hash functions (like + * MD5 or SHA-1), this is the output obtained after processing + * each block. The number of bytes injected so far is returned. + * The context is not modified by this call. + * + * \param ctx pointer to (the first field of) the context. + * \param dst destination buffer for the state. + * \return the injected total byte length. + */ + uint64_t (*state)(const br_hash_class *const *ctx, void *dst); + + /** + * \brief Set running state. + * + * This methods replaces the running state for the function. + * + * \param ctx pointer to (the first field of) the context. + * \param stb source buffer for the state. + * \param count injected total byte length. + */ + void (*set_state)(const br_hash_class **ctx, + const void *stb, uint64_t count); +}; + +#ifndef BR_DOXYGEN_IGNORE +#define BR_HASHDESC_ID(id) ((uint32_t)(id) << BR_HASHDESC_ID_OFF) +#define BR_HASHDESC_ID_OFF 0 +#define BR_HASHDESC_ID_MASK 0xFF + +#define BR_HASHDESC_OUT(size) ((uint32_t)(size) << BR_HASHDESC_OUT_OFF) +#define BR_HASHDESC_OUT_OFF 8 +#define BR_HASHDESC_OUT_MASK 0x7F + +#define BR_HASHDESC_STATE(size) ((uint32_t)(size) << BR_HASHDESC_STATE_OFF) +#define BR_HASHDESC_STATE_OFF 15 +#define BR_HASHDESC_STATE_MASK 0xFF + +#define BR_HASHDESC_LBLEN(ls) ((uint32_t)(ls) << BR_HASHDESC_LBLEN_OFF) +#define BR_HASHDESC_LBLEN_OFF 23 +#define BR_HASHDESC_LBLEN_MASK 0x0F + +#define BR_HASHDESC_MD_PADDING ((uint32_t)1 << 28) +#define BR_HASHDESC_MD_PADDING_128 ((uint32_t)1 << 29) +#define BR_HASHDESC_MD_PADDING_BE ((uint32_t)1 << 30) +#endif + +/* + * Specific hash functions. + * + * Rules for contexts: + * -- No interior pointer. + * -- No pointer to external dynamically allocated resources. + * -- First field is called 'vtable' and is a pointer to a + * const-qualified br_hash_class instance (pointer is set by init()). + * -- SHA-224 and SHA-256 contexts are identical. + * -- SHA-384 and SHA-512 contexts are identical. + * + * Thus, contexts can be moved and cloned to capture the hash function + * current state; and there is no need for any explicit "release" function. + */ + +/** + * \brief Symbolic identifier for MD5. + */ +#define br_md5_ID 1 + +/** + * \brief MD5 output size (in bytes). + */ +#define br_md5_SIZE 16 + +/** + * \brief Constant vtable for MD5. + */ +extern const br_hash_class br_md5_vtable; + +/** + * \brief MD5 context. + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + unsigned char buf[64]; + uint64_t count; + uint32_t val[4]; +#endif +} br_md5_context; + +/** + * \brief MD5 context initialisation. + * + * This function initialises or resets a context for a new MD5 + * computation. It also sets the vtable pointer. + * + * \param ctx pointer to the context structure. + */ +void br_md5_init(br_md5_context *ctx); + +/** + * \brief Inject some data bytes in a running MD5 computation. + * + * The provided context is updated with some data bytes. If the number + * of bytes (`len`) is zero, then the data pointer (`data`) is ignored + * and may be `NULL`, and this function does nothing. + * + * \param ctx pointer to the context structure. + * \param data pointer to the injected data. + * \param len injected data length (in bytes). + */ +void br_md5_update(br_md5_context *ctx, const void *data, size_t len); + +/** + * \brief Compute MD5 output. + * + * The MD5 output for the concatenation of all bytes injected in the + * provided context since the last initialisation or reset call, is + * computed and written in the buffer pointed to by `out`. The context + * itself is not modified, so extra bytes may be injected afterwards + * to continue that computation. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the hash output. + */ +void br_md5_out(const br_md5_context *ctx, void *out); + +/** + * \brief Save MD5 running state. + * + * The running state for MD5 (output of the last internal block + * processing) is written in the buffer pointed to by `out`. The + * number of bytes injected since the last initialisation or reset + * call is returned. The context is not modified. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the running state. + * \return the injected total byte length. + */ +uint64_t br_md5_state(const br_md5_context *ctx, void *out); + +/** + * \brief Restore MD5 running state. + * + * The running state for MD5 is set to the provided values. + * + * \param ctx pointer to the context structure. + * \param stb source buffer for the running state. + * \param count the injected total byte length. + */ +void br_md5_set_state(br_md5_context *ctx, const void *stb, uint64_t count); + +/** + * \brief Symbolic identifier for SHA-1. + */ +#define br_sha1_ID 2 + +/** + * \brief SHA-1 output size (in bytes). + */ +#define br_sha1_SIZE 20 + +/** + * \brief Constant vtable for SHA-1. + */ +extern const br_hash_class br_sha1_vtable; + +/** + * \brief SHA-1 context. + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + unsigned char buf[64]; + uint64_t count; + uint32_t val[5]; +#endif +} br_sha1_context; + +/** + * \brief SHA-1 context initialisation. + * + * This function initialises or resets a context for a new SHA-1 + * computation. It also sets the vtable pointer. + * + * \param ctx pointer to the context structure. + */ +void br_sha1_init(br_sha1_context *ctx); + +/** + * \brief Inject some data bytes in a running SHA-1 computation. + * + * The provided context is updated with some data bytes. If the number + * of bytes (`len`) is zero, then the data pointer (`data`) is ignored + * and may be `NULL`, and this function does nothing. + * + * \param ctx pointer to the context structure. + * \param data pointer to the injected data. + * \param len injected data length (in bytes). + */ +void br_sha1_update(br_sha1_context *ctx, const void *data, size_t len); + +/** + * \brief Compute SHA-1 output. + * + * The SHA-1 output for the concatenation of all bytes injected in the + * provided context since the last initialisation or reset call, is + * computed and written in the buffer pointed to by `out`. The context + * itself is not modified, so extra bytes may be injected afterwards + * to continue that computation. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the hash output. + */ +void br_sha1_out(const br_sha1_context *ctx, void *out); + +/** + * \brief Save SHA-1 running state. + * + * The running state for SHA-1 (output of the last internal block + * processing) is written in the buffer pointed to by `out`. The + * number of bytes injected since the last initialisation or reset + * call is returned. The context is not modified. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the running state. + * \return the injected total byte length. + */ +uint64_t br_sha1_state(const br_sha1_context *ctx, void *out); + +/** + * \brief Restore SHA-1 running state. + * + * The running state for SHA-1 is set to the provided values. + * + * \param ctx pointer to the context structure. + * \param stb source buffer for the running state. + * \param count the injected total byte length. + */ +void br_sha1_set_state(br_sha1_context *ctx, const void *stb, uint64_t count); + +/** + * \brief Symbolic identifier for SHA-224. + */ +#define br_sha224_ID 3 + +/** + * \brief SHA-224 output size (in bytes). + */ +#define br_sha224_SIZE 28 + +/** + * \brief Constant vtable for SHA-224. + */ +extern const br_hash_class br_sha224_vtable; + +/** + * \brief SHA-224 context. + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + unsigned char buf[64]; + uint64_t count; + uint32_t val[8]; +#endif +} br_sha224_context; + +/** + * \brief SHA-224 context initialisation. + * + * This function initialises or resets a context for a new SHA-224 + * computation. It also sets the vtable pointer. + * + * \param ctx pointer to the context structure. + */ +void br_sha224_init(br_sha224_context *ctx); + +/** + * \brief Inject some data bytes in a running SHA-224 computation. + * + * The provided context is updated with some data bytes. If the number + * of bytes (`len`) is zero, then the data pointer (`data`) is ignored + * and may be `NULL`, and this function does nothing. + * + * \param ctx pointer to the context structure. + * \param data pointer to the injected data. + * \param len injected data length (in bytes). + */ +void br_sha224_update(br_sha224_context *ctx, const void *data, size_t len); + +/** + * \brief Compute SHA-224 output. + * + * The SHA-224 output for the concatenation of all bytes injected in the + * provided context since the last initialisation or reset call, is + * computed and written in the buffer pointed to by `out`. The context + * itself is not modified, so extra bytes may be injected afterwards + * to continue that computation. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the hash output. + */ +void br_sha224_out(const br_sha224_context *ctx, void *out); + +/** + * \brief Save SHA-224 running state. + * + * The running state for SHA-224 (output of the last internal block + * processing) is written in the buffer pointed to by `out`. The + * number of bytes injected since the last initialisation or reset + * call is returned. The context is not modified. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the running state. + * \return the injected total byte length. + */ +uint64_t br_sha224_state(const br_sha224_context *ctx, void *out); + +/** + * \brief Restore SHA-224 running state. + * + * The running state for SHA-224 is set to the provided values. + * + * \param ctx pointer to the context structure. + * \param stb source buffer for the running state. + * \param count the injected total byte length. + */ +void br_sha224_set_state(br_sha224_context *ctx, + const void *stb, uint64_t count); + +/** + * \brief Symbolic identifier for SHA-256. + */ +#define br_sha256_ID 4 + +/** + * \brief SHA-256 output size (in bytes). + */ +#define br_sha256_SIZE 32 + +/** + * \brief Constant vtable for SHA-256. + */ +extern const br_hash_class br_sha256_vtable; + +#ifdef BR_DOXYGEN_IGNORE +/** + * \brief SHA-256 context. + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; +} br_sha256_context; +#else +typedef br_sha224_context br_sha256_context; +#endif + +/** + * \brief SHA-256 context initialisation. + * + * This function initialises or resets a context for a new SHA-256 + * computation. It also sets the vtable pointer. + * + * \param ctx pointer to the context structure. + */ +void br_sha256_init(br_sha256_context *ctx); + +#ifdef BR_DOXYGEN_IGNORE +/** + * \brief Inject some data bytes in a running SHA-256 computation. + * + * The provided context is updated with some data bytes. If the number + * of bytes (`len`) is zero, then the data pointer (`data`) is ignored + * and may be `NULL`, and this function does nothing. + * + * \param ctx pointer to the context structure. + * \param data pointer to the injected data. + * \param len injected data length (in bytes). + */ +void br_sha256_update(br_sha256_context *ctx, const void *data, size_t len); +#else +#define br_sha256_update br_sha224_update +#endif + +/** + * \brief Compute SHA-256 output. + * + * The SHA-256 output for the concatenation of all bytes injected in the + * provided context since the last initialisation or reset call, is + * computed and written in the buffer pointed to by `out`. The context + * itself is not modified, so extra bytes may be injected afterwards + * to continue that computation. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the hash output. + */ +void br_sha256_out(const br_sha256_context *ctx, void *out); + +#if BR_DOXYGEN_IGNORE +/** + * \brief Save SHA-256 running state. + * + * The running state for SHA-256 (output of the last internal block + * processing) is written in the buffer pointed to by `out`. The + * number of bytes injected since the last initialisation or reset + * call is returned. The context is not modified. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the running state. + * \return the injected total byte length. + */ +uint64_t br_sha256_state(const br_sha256_context *ctx, void *out); +#else +#define br_sha256_state br_sha224_state +#endif + +#if BR_DOXYGEN_IGNORE +/** + * \brief Restore SHA-256 running state. + * + * The running state for SHA-256 is set to the provided values. + * + * \param ctx pointer to the context structure. + * \param stb source buffer for the running state. + * \param count the injected total byte length. + */ +void br_sha256_set_state(br_sha256_context *ctx, + const void *stb, uint64_t count); +#else +#define br_sha256_set_state br_sha224_set_state +#endif + +/** + * \brief Symbolic identifier for SHA-384. + */ +#define br_sha384_ID 5 + +/** + * \brief SHA-384 output size (in bytes). + */ +#define br_sha384_SIZE 48 + +/** + * \brief Constant vtable for SHA-384. + */ +extern const br_hash_class br_sha384_vtable; + +/** + * \brief SHA-384 context. + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + unsigned char buf[128]; + uint64_t count; + uint64_t val[8]; +#endif +} br_sha384_context; + +/** + * \brief SHA-384 context initialisation. + * + * This function initialises or resets a context for a new SHA-384 + * computation. It also sets the vtable pointer. + * + * \param ctx pointer to the context structure. + */ +void br_sha384_init(br_sha384_context *ctx); + +/** + * \brief Inject some data bytes in a running SHA-384 computation. + * + * The provided context is updated with some data bytes. If the number + * of bytes (`len`) is zero, then the data pointer (`data`) is ignored + * and may be `NULL`, and this function does nothing. + * + * \param ctx pointer to the context structure. + * \param data pointer to the injected data. + * \param len injected data length (in bytes). + */ +void br_sha384_update(br_sha384_context *ctx, const void *data, size_t len); + +/** + * \brief Compute SHA-384 output. + * + * The SHA-384 output for the concatenation of all bytes injected in the + * provided context since the last initialisation or reset call, is + * computed and written in the buffer pointed to by `out`. The context + * itself is not modified, so extra bytes may be injected afterwards + * to continue that computation. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the hash output. + */ +void br_sha384_out(const br_sha384_context *ctx, void *out); + +/** + * \brief Save SHA-384 running state. + * + * The running state for SHA-384 (output of the last internal block + * processing) is written in the buffer pointed to by `out`. The + * number of bytes injected since the last initialisation or reset + * call is returned. The context is not modified. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the running state. + * \return the injected total byte length. + */ +uint64_t br_sha384_state(const br_sha384_context *ctx, void *out); + +/** + * \brief Restore SHA-384 running state. + * + * The running state for SHA-384 is set to the provided values. + * + * \param ctx pointer to the context structure. + * \param stb source buffer for the running state. + * \param count the injected total byte length. + */ +void br_sha384_set_state(br_sha384_context *ctx, + const void *stb, uint64_t count); + +/** + * \brief Symbolic identifier for SHA-512. + */ +#define br_sha512_ID 6 + +/** + * \brief SHA-512 output size (in bytes). + */ +#define br_sha512_SIZE 64 + +/** + * \brief Constant vtable for SHA-512. + */ +extern const br_hash_class br_sha512_vtable; + +#ifdef BR_DOXYGEN_IGNORE +/** + * \brief SHA-512 context. + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; +} br_sha512_context; +#else +typedef br_sha384_context br_sha512_context; +#endif + +/** + * \brief SHA-512 context initialisation. + * + * This function initialises or resets a context for a new SHA-512 + * computation. It also sets the vtable pointer. + * + * \param ctx pointer to the context structure. + */ +void br_sha512_init(br_sha512_context *ctx); + +#ifdef BR_DOXYGEN_IGNORE +/** + * \brief Inject some data bytes in a running SHA-512 computation. + * + * The provided context is updated with some data bytes. If the number + * of bytes (`len`) is zero, then the data pointer (`data`) is ignored + * and may be `NULL`, and this function does nothing. + * + * \param ctx pointer to the context structure. + * \param data pointer to the injected data. + * \param len injected data length (in bytes). + */ +void br_sha512_update(br_sha512_context *ctx, const void *data, size_t len); +#else +#define br_sha512_update br_sha384_update +#endif + +/** + * \brief Compute SHA-512 output. + * + * The SHA-512 output for the concatenation of all bytes injected in the + * provided context since the last initialisation or reset call, is + * computed and written in the buffer pointed to by `out`. The context + * itself is not modified, so extra bytes may be injected afterwards + * to continue that computation. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the hash output. + */ +void br_sha512_out(const br_sha512_context *ctx, void *out); + +#ifdef BR_DOXYGEN_IGNORE +/** + * \brief Save SHA-512 running state. + * + * The running state for SHA-512 (output of the last internal block + * processing) is written in the buffer pointed to by `out`. The + * number of bytes injected since the last initialisation or reset + * call is returned. The context is not modified. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the running state. + * \return the injected total byte length. + */ +uint64_t br_sha512_state(const br_sha512_context *ctx, void *out); +#else +#define br_sha512_state br_sha384_state +#endif + +#ifdef BR_DOXYGEN_IGNORE +/** + * \brief Restore SHA-512 running state. + * + * The running state for SHA-512 is set to the provided values. + * + * \param ctx pointer to the context structure. + * \param stb source buffer for the running state. + * \param count the injected total byte length. + */ +void br_sha512_set_state(br_sha512_context *ctx, + const void *stb, uint64_t count); +#else +#define br_sha512_set_state br_sha384_set_state +#endif + +/* + * "md5sha1" is a special hash function that computes both MD5 and SHA-1 + * on the same input, and produces a 36-byte output (MD5 and SHA-1 + * concatenation, in that order). State size is also 36 bytes. + */ + +/** + * \brief Symbolic identifier for MD5+SHA-1. + * + * MD5+SHA-1 is the concatenation of MD5 and SHA-1, computed over the + * same input. It is not one of the functions identified in TLS, so + * we give it a symbolic identifier of value 0. + */ +#define br_md5sha1_ID 0 + +/** + * \brief MD5+SHA-1 output size (in bytes). + */ +#define br_md5sha1_SIZE 36 + +/** + * \brief Constant vtable for MD5+SHA-1. + */ +extern const br_hash_class br_md5sha1_vtable; + +/** + * \brief MD5+SHA-1 context. + * + * First field is a pointer to the vtable; it is set by the initialisation + * function. Other fields are not supposed to be accessed by user code. + */ +typedef struct { + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + unsigned char buf[64]; + uint64_t count; + uint32_t val_md5[4]; + uint32_t val_sha1[5]; +#endif +} br_md5sha1_context; + +/** + * \brief MD5+SHA-1 context initialisation. + * + * This function initialises or resets a context for a new SHA-512 + * computation. It also sets the vtable pointer. + * + * \param ctx pointer to the context structure. + */ +void br_md5sha1_init(br_md5sha1_context *ctx); + +/** + * \brief Inject some data bytes in a running MD5+SHA-1 computation. + * + * The provided context is updated with some data bytes. If the number + * of bytes (`len`) is zero, then the data pointer (`data`) is ignored + * and may be `NULL`, and this function does nothing. + * + * \param ctx pointer to the context structure. + * \param data pointer to the injected data. + * \param len injected data length (in bytes). + */ +void br_md5sha1_update(br_md5sha1_context *ctx, const void *data, size_t len); + +/** + * \brief Compute MD5+SHA-1 output. + * + * The MD5+SHA-1 output for the concatenation of all bytes injected in the + * provided context since the last initialisation or reset call, is + * computed and written in the buffer pointed to by `out`. The context + * itself is not modified, so extra bytes may be injected afterwards + * to continue that computation. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the hash output. + */ +void br_md5sha1_out(const br_md5sha1_context *ctx, void *out); + +/** + * \brief Save MD5+SHA-1 running state. + * + * The running state for MD5+SHA-1 (output of the last internal block + * processing) is written in the buffer pointed to by `out`. The + * number of bytes injected since the last initialisation or reset + * call is returned. The context is not modified. + * + * \param ctx pointer to the context structure. + * \param out destination buffer for the running state. + * \return the injected total byte length. + */ +uint64_t br_md5sha1_state(const br_md5sha1_context *ctx, void *out); + +/** + * \brief Restore MD5+SHA-1 running state. + * + * The running state for MD5+SHA-1 is set to the provided values. + * + * \param ctx pointer to the context structure. + * \param stb source buffer for the running state. + * \param count the injected total byte length. + */ +void br_md5sha1_set_state(br_md5sha1_context *ctx, + const void *stb, uint64_t count); + +/** + * \brief Aggregate context for configurable hash function support. + * + * The `br_hash_compat_context` type is a type which is large enough to + * serve as context for all standard hash functions defined above. + */ +typedef union { + const br_hash_class *vtable; + br_md5_context md5; + br_sha1_context sha1; + br_sha224_context sha224; + br_sha256_context sha256; + br_sha384_context sha384; + br_sha512_context sha512; + br_md5sha1_context md5sha1; +} br_hash_compat_context; + +/* + * The multi-hasher is a construct that handles hashing of the same input + * data with several hash functions, with a single shared input buffer. + * It can handle MD5, SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512 + * simultaneously, though which functions are activated depends on + * the set implementation pointers. + */ + +/** + * \brief Multi-hasher context structure. + * + * The multi-hasher runs up to six hash functions in the standard TLS list + * (MD5, SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512) in parallel, over + * the same input. + * + * The multi-hasher does _not_ follow the OOP structure with a vtable. + * Instead, it is configured with the vtables of the hash functions it + * should run. Structure fields are not supposed to be accessed directly. + */ +typedef struct { +#ifndef BR_DOXYGEN_IGNORE + unsigned char buf[128]; + uint64_t count; + uint32_t val_32[25]; + uint64_t val_64[16]; + const br_hash_class *impl[6]; +#endif +} br_multihash_context; + +/** + * \brief Clear a multi-hasher context. + * + * This should always be called once on a given context, _before_ setting + * the implementation pointers. + * + * \param ctx the multi-hasher context. + */ +void br_multihash_zero(br_multihash_context *ctx); + +/** + * \brief Set a hash function implementation. + * + * Implementations shall be set _after_ clearing the context (with + * `br_multihash_zero()`) but _before_ initialising the computation + * (with `br_multihash_init()`). The hash function implementation + * MUST be one of the standard hash functions (MD5, SHA-1, SHA-224, + * SHA-256, SHA-384 or SHA-512); it may also be `NULL` to remove + * an implementation from the multi-hasher. + * + * \param ctx the multi-hasher context. + * \param id the hash function symbolic identifier. + * \param impl the hash function vtable, or `NULL`. + */ +static inline void +br_multihash_setimpl(br_multihash_context *ctx, + int id, const br_hash_class *impl) +{ + /* + * This code relies on hash functions ID being values 1 to 6, + * in the MD5 to SHA-512 order. + */ + ctx->impl[id - 1] = impl; +} + +/** + * \brief Get a hash function implementation. + * + * This function returns the currently configured vtable for a given + * hash function (by symbolic ID). If no such function was configured in + * the provided multi-hasher context, then this function returns `NULL`. + * + * \param ctx the multi-hasher context. + * \param id the hash function symbolic identifier. + * \return the hash function vtable, or `NULL`. + */ +static inline const br_hash_class * +br_multihash_getimpl(const br_multihash_context *ctx, int id) +{ + return ctx->impl[id - 1]; +} + +/** + * \brief Reset a multi-hasher context. + * + * This function prepares the context for a new hashing computation, + * for all implementations configured at that point. + * + * \param ctx the multi-hasher context. + */ +void br_multihash_init(br_multihash_context *ctx); + +/** + * \brief Inject some data bytes in a running multi-hashing computation. + * + * The provided context is updated with some data bytes. If the number + * of bytes (`len`) is zero, then the data pointer (`data`) is ignored + * and may be `NULL`, and this function does nothing. + * + * \param ctx pointer to the context structure. + * \param data pointer to the injected data. + * \param len injected data length (in bytes). + */ +void br_multihash_update(br_multihash_context *ctx, + const void *data, size_t len); + +/** + * \brief Compute a hash output from a multi-hasher. + * + * The hash output for the concatenation of all bytes injected in the + * provided context since the last initialisation or reset call, is + * computed and written in the buffer pointed to by `dst`. The hash + * function to use is identified by `id` and must be one of the standard + * hash functions. If that hash function was indeed configured in the + * multi-hasher context, the corresponding hash value is written in + * `dst` and its length (in bytes) is returned. If the hash function + * was _not_ configured, then nothing is written in `dst` and 0 is + * returned. + * + * The context itself is not modified, so extra bytes may be injected + * afterwards to continue the hash computations. + * + * \param ctx pointer to the context structure. + * \param id the hash function symbolic identifier. + * \param dst destination buffer for the hash output. + * \return the hash output length (in bytes), or 0. + */ +size_t br_multihash_out(const br_multihash_context *ctx, int id, void *dst); + +/** + * \brief Type for a GHASH implementation. + * + * GHASH is a sort of keyed hash meant to be used to implement GCM in + * combination with a block cipher (with 16-byte blocks). + * + * The `y` array has length 16 bytes and is used for input and output; in + * a complete GHASH run, it starts with an all-zero value. `h` is a 16-byte + * value that serves as key (it is derived from the encryption key in GCM, + * using the block cipher). The data length (`len`) is expressed in bytes. + * The `y` array is updated. + * + * If the data length is not a multiple of 16, then the data is implicitly + * padded with zeros up to the next multiple of 16. Thus, when using GHASH + * in GCM, this method may be called twice, for the associated data and + * for the ciphertext, respectively; the zero-padding implements exactly + * the GCM rules. + * + * \param y the array to update. + * \param h the GHASH key. + * \param data the input data (may be `NULL` if `len` is zero). + * \param len the input data length (in bytes). + */ +typedef void (*br_ghash)(void *y, const void *h, const void *data, size_t len); + +/** + * \brief GHASH implementation using multiplications (mixed 32-bit). + * + * This implementation uses multiplications of 32-bit values, with a + * 64-bit result. It is constant-time (if multiplications are + * constant-time). + * + * \param y the array to update. + * \param h the GHASH key. + * \param data the input data (may be `NULL` if `len` is zero). + * \param len the input data length (in bytes). + */ +void br_ghash_ctmul(void *y, const void *h, const void *data, size_t len); + +/** + * \brief GHASH implementation using multiplications (strict 32-bit). + * + * This implementation uses multiplications of 32-bit values, with a + * 32-bit result. It is usually somewhat slower than `br_ghash_ctmul()`, + * but it is expected to be faster on architectures for which the + * 32-bit multiplication opcode does not yield the upper 32 bits of the + * product. It is constant-time (if multiplications are constant-time). + * + * \param y the array to update. + * \param h the GHASH key. + * \param data the input data (may be `NULL` if `len` is zero). + * \param len the input data length (in bytes). + */ +void br_ghash_ctmul32(void *y, const void *h, const void *data, size_t len); + +/** + * \brief GHASH implementation using multiplications (64-bit). + * + * This implementation uses multiplications of 64-bit values, with a + * 64-bit result. It is constant-time (if multiplications are + * constant-time). It is substantially faster than `br_ghash_ctmul()` + * and `br_ghash_ctmul32()` on most 64-bit architectures. + * + * \param y the array to update. + * \param h the GHASH key. + * \param data the input data (may be `NULL` if `len` is zero). + * \param len the input data length (in bytes). + */ +void br_ghash_ctmul64(void *y, const void *h, const void *data, size_t len); + +/** + * \brief GHASH implementation using the `pclmulqdq` opcode (part of the + * AES-NI instructions). + * + * This implementation is available only on x86 platforms where the + * compiler supports the relevant intrinsic functions. Even if the + * compiler supports these functions, the local CPU might not support + * the `pclmulqdq` opcode, meaning that a call will fail with an + * illegal instruction exception. To safely obtain a pointer to this + * function when supported (or 0 otherwise), use `br_ghash_pclmul_get()`. + * + * \param y the array to update. + * \param h the GHASH key. + * \param data the input data (may be `NULL` if `len` is zero). + * \param len the input data length (in bytes). + */ +void br_ghash_pclmul(void *y, const void *h, const void *data, size_t len); + +/** + * \brief Obtain the `pclmul` GHASH implementation, if available. + * + * If the `pclmul` implementation was compiled in the library (depending + * on the compiler abilities) _and_ the local CPU appears to support the + * opcode, then this function will return a pointer to the + * `br_ghash_pclmul()` function. Otherwise, it will return `0`. + * + * \return the `pclmul` GHASH implementation, or `0`. + */ +br_ghash br_ghash_pclmul_get(void); + +/** + * \brief GHASH implementation using the POWER8 opcodes. + * + * This implementation is available only on POWER8 platforms (and later). + * To safely obtain a pointer to this function when supported (or 0 + * otherwise), use `br_ghash_pwr8_get()`. + * + * \param y the array to update. + * \param h the GHASH key. + * \param data the input data (may be `NULL` if `len` is zero). + * \param len the input data length (in bytes). + */ +void br_ghash_pwr8(void *y, const void *h, const void *data, size_t len); + +/** + * \brief Obtain the `pwr8` GHASH implementation, if available. + * + * If the `pwr8` implementation was compiled in the library (depending + * on the compiler abilities) _and_ the local CPU appears to support the + * opcode, then this function will return a pointer to the + * `br_ghash_pwr8()` function. Otherwise, it will return `0`. + * + * \return the `pwr8` GHASH implementation, or `0`. + */ +br_ghash br_ghash_pwr8_get(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/bearssl/bearssl_hmac.h b/tools/sdk/include/bearssl/bearssl_hmac.h new file mode 100644 index 000000000..511dbbe43 --- /dev/null +++ b/tools/sdk/include/bearssl/bearssl_hmac.h @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2016 Thomas Pornin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BR_BEARSSL_HMAC_H__ +#define BR_BEARSSL_HMAC_H__ + +#include +#include + +#include "bearssl_hash.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file bearssl_hmac.h + * + * # HMAC + * + * HMAC is initialized with a key and an underlying hash function; it + * then fills a "key context". That context contains the processed + * key. + * + * With the key context, a HMAC context can be initialized to process + * the input bytes and obtain the MAC output. The key context is not + * modified during that process, and can be reused. + * + * IMPORTANT: HMAC shall be used only with functions that have the + * following properties: + * + * - hash output size does not exceed 64 bytes; + * - hash internal state size does not exceed 64 bytes; + * - internal block length is a power of 2 between 16 and 256 bytes. + */ + +/** + * \brief HMAC key context. + * + * The HMAC key context is initialised with a hash function implementation + * and a secret key. Contents are opaque (callers should not access them + * directly). The caller is responsible for allocating the context where + * appropriate. Context initialisation and usage incurs no dynamic + * allocation, so there is no release function. + */ +typedef struct { +#ifndef BR_DOXYGEN_IGNORE + const br_hash_class *dig_vtable; + unsigned char ksi[64], kso[64]; +#endif +} br_hmac_key_context; + +/** + * \brief HMAC key context initialisation. + * + * Initialise the key context with the provided key, using the hash function + * identified by `digest_vtable`. This supports arbitrary key lengths. + * + * \param kc HMAC key context to initialise. + * \param digest_vtable pointer to the hash function implementation vtable. + * \param key pointer to the HMAC secret key. + * \param key_len HMAC secret key length (in bytes). + */ +void br_hmac_key_init(br_hmac_key_context *kc, + const br_hash_class *digest_vtable, const void *key, size_t key_len); + +/** + * \brief HMAC computation context. + * + * The HMAC computation context maintains the state for a single HMAC + * computation. It is modified as input bytes are injected. The context + * is caller-allocated and has no release function since it does not + * dynamically allocate external resources. Its contents are opaque. + */ +typedef struct { +#ifndef BR_DOXYGEN_IGNORE + br_hash_compat_context dig; + unsigned char kso[64]; + size_t out_len; +#endif +} br_hmac_context; + +/** + * \brief HMAC computation initialisation. + * + * Initialise a HMAC context with a key context. The key context is + * unmodified. Relevant data from the key context is immediately copied; + * the key context can thus be independently reused, modified or released + * without impacting this HMAC computation. + * + * An explicit output length can be specified; the actual output length + * will be the minimum of that value and the natural HMAC output length. + * If `out_len` is 0, then the natural HMAC output length is selected. The + * "natural output length" is the output length of the underlying hash + * function. + * + * \param ctx HMAC context to initialise. + * \param kc HMAC key context (already initialised with the key). + * \param out_len HMAC output length (0 to select "natural length"). + */ +void br_hmac_init(br_hmac_context *ctx, + const br_hmac_key_context *kc, size_t out_len); + +/** + * \brief Get the HMAC output size. + * + * The HMAC output size is the number of bytes that will actually be + * produced with `br_hmac_out()` with the provided context. This function + * MUST NOT be called on a non-initialised HMAC computation context. + * The returned value is the minimum of the HMAC natural length (output + * size of the underlying hash function) and the `out_len` parameter which + * was used with the last `br_hmac_init()` call on that context (if the + * initialisation `out_len` parameter was 0, then this function will + * return the HMAC natural length). + * + * \param ctx the (already initialised) HMAC computation context. + * \return the HMAC actual output size. + */ +static inline size_t +br_hmac_size(br_hmac_context *ctx) +{ + return ctx->out_len; +} + +/** + * \brief Inject some bytes in HMAC. + * + * The provided `len` bytes are injected as extra input in the HMAC + * computation incarnated by the `ctx` HMAC context. It is acceptable + * that `len` is zero, in which case `data` is ignored (and may be + * `NULL`) and this function does nothing. + */ +void br_hmac_update(br_hmac_context *ctx, const void *data, size_t len); + +/** + * \brief Compute the HMAC output. + * + * The destination buffer MUST be large enough to accomodate the result; + * its length is at most the "natural length" of HMAC (i.e. the output + * length of the underlying hash function). The context is NOT modified; + * further bytes may be processed. Thus, "partial HMAC" values can be + * efficiently obtained. + * + * Returned value is the output length (in bytes). + * + * \param ctx HMAC computation context. + * \param out destination buffer for the HMAC output. + * \return the produced value length (in bytes). + */ +size_t br_hmac_out(const br_hmac_context *ctx, void *out); + +/** + * \brief Constant-time HMAC computation. + * + * This function compute the HMAC output in constant time. Some extra + * input bytes are processed, then the output is computed. The extra + * input consists in the `len` bytes pointed to by `data`. The `len` + * parameter must lie between `min_len` and `max_len` (inclusive); + * `max_len` bytes are actually read from `data`. Computing time (and + * memory access pattern) will not depend upon the data byte contents or + * the value of `len`. + * + * The output is written in the `out` buffer, that MUST be large enough + * to receive it. + * + * The difference `max_len - min_len` MUST be less than 230 + * (i.e. about one gigabyte). + * + * This function computes the output properly only if the underlying + * hash function uses MD padding (i.e. MD5, SHA-1, SHA-224, SHA-256, + * SHA-384 or SHA-512). + * + * The provided context is NOT modified. + * + * \param ctx the (already initialised) HMAC computation context. + * \param data the extra input bytes. + * \param len the extra input length (in bytes). + * \param min_len minimum extra input length (in bytes). + * \param max_len maximum extra input length (in bytes). + * \param out destination buffer for the HMAC output. + * \return the produced value length (in bytes). + */ +size_t br_hmac_outCT(const br_hmac_context *ctx, + const void *data, size_t len, size_t min_len, size_t max_len, + void *out); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/bearssl/bearssl_pem.h b/tools/sdk/include/bearssl/bearssl_pem.h new file mode 100644 index 000000000..5e466bc72 --- /dev/null +++ b/tools/sdk/include/bearssl/bearssl_pem.h @@ -0,0 +1,243 @@ +/* + * Copyright (c) 2016 Thomas Pornin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BR_BEARSSL_PEM_H__ +#define BR_BEARSSL_PEM_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file bearssl_pem.h + * + * # PEM Support + * + * PEM is a traditional encoding layer use to store binary objects (in + * particular X.509 certificates, and private keys) in text files. While + * the acronym comes from an old, defunct standard ("Privacy Enhanced + * Mail"), the format has been reused, with some variations, by many + * systems, and is a _de facto_ standard, even though it is not, actually, + * specified in all clarity anywhere. + * + * ## Format Details + * + * BearSSL contains a generic, streamed PEM decoder, which handles the + * following format: + * + * - The input source (a sequence of bytes) is assumed to be the + * encoding of a text file in an ASCII-compatible charset. This + * includes ISO-8859-1, Windows-1252, and UTF-8 encodings. Each + * line ends on a newline character (U+000A LINE FEED). The + * U+000D CARRIAGE RETURN characters are ignored, so the code + * accepts both Windows-style and Unix-style line endings. + * + * - Each object begins with a banner that occurs at the start of + * a line; the first banner characters are "`-----BEGIN `" (five + * dashes, the word "BEGIN", and a space). The banner matching is + * not case-sensitive. + * + * - The _object name_ consists in the characters that follow the + * banner start sequence, up to the end of the line, but without + * trailing dashes (in "normal" PEM, there are five trailing + * dashes, but this implementation is not picky about these dashes). + * The BearSSL decoder normalises the name characters to uppercase + * (for ASCII letters only) and accepts names up to 127 characters. + * + * - The object ends with a banner that again occurs at the start of + * a line, and starts with "`-----END `" (again case-insensitive). + * + * - Between that start and end banner, only Base64 data shall occur. + * Base64 converts each sequence of three bytes into four + * characters; the four characters are ASCII letters, digits, "`+`" + * or "`-`" signs, and one or two "`=`" signs may occur in the last + * quartet. Whitespace is ignored (whitespace is any ASCII character + * of code 32 or less, so control characters are whitespace) and + * lines may have arbitrary length; the only restriction is that the + * four characters of a quartet must appear on the same line (no + * line break inside a quartet). + * + * - A single file may contain more than one PEM object. Bytes that + * occur between objects are ignored. + * + * + * ## PEM Decoder API + * + * The PEM decoder offers a state-machine API. The caller allocates a + * decoder context, then injects source bytes. Source bytes are pushed + * with `br_pem_decoder_push()`. The decoder stops accepting bytes when + * it reaches an "event", which is either the start of an object, the + * end of an object, or a decoding error within an object. + * + * The `br_pem_decoder_event()` function is used to obtain the current + * event; it also clears it, thus allowing the decoder to accept more + * bytes. When a object start event is raised, the decoder context + * offers the found object name (normalised to ASCII uppercase). + * + * When an object is reached, the caller must set an appropriate callback + * function, which will receive (by chunks) the decoded object data. + * + * Since the decoder context makes no dynamic allocation, it requires + * no explicit deallocation. + */ + +/** + * \brief PEM decoder context. + * + * Contents are opaque (they should not be accessed directly). + */ +typedef struct { +#ifndef BR_DOXYGEN_IGNORE + /* CPU for the T0 virtual machine. */ + struct { + uint32_t *dp; + uint32_t *rp; + const unsigned char *ip; + } cpu; + uint32_t dp_stack[32]; + uint32_t rp_stack[32]; + int err; + + const unsigned char *hbuf; + size_t hlen; + + void (*dest)(void *dest_ctx, const void *src, size_t len); + void *dest_ctx; + + unsigned char event; + char name[128]; + unsigned char buf[255]; + size_t ptr; +#endif +} br_pem_decoder_context; + +/** + * \brief Initialise a PEM decoder structure. + * + * \param ctx decoder context to initialise. + */ +void br_pem_decoder_init(br_pem_decoder_context *ctx); + +/** + * \brief Push some bytes into the decoder. + * + * Returned value is the number of bytes actually consumed; this may be + * less than the number of provided bytes if an event is raised. When an + * event is raised, it must be read (with `br_pem_decoder_event()`); + * until the event is read, this function will return 0. + * + * \param ctx decoder context. + * \param data new data bytes. + * \param len number of new data bytes. + * \return the number of bytes actually received (may be less than `len`). + */ +size_t br_pem_decoder_push(br_pem_decoder_context *ctx, + const void *data, size_t len); + +/** + * \brief Set the receiver for decoded data. + * + * When an object is entered, the provided function (with opaque context + * pointer) will be called repeatedly with successive chunks of decoded + * data for that object. If `dest` is set to 0, then decoded data is + * simply ignored. The receiver can be set at any time, but, in practice, + * it should be called immediately after receiving a "start of object" + * event. + * + * \param ctx decoder context. + * \param dest callback for receiving decoded data. + * \param dest_ctx opaque context pointer for the `dest` callback. + */ +static inline void +br_pem_decoder_setdest(br_pem_decoder_context *ctx, + void (*dest)(void *dest_ctx, const void *src, size_t len), + void *dest_ctx) +{ + ctx->dest = dest; + ctx->dest_ctx = dest_ctx; +} + +/** + * \brief Get the last event. + * + * If an event was raised, then this function returns the event value, and + * also clears it, thereby allowing the decoder to proceed. If no event + * was raised since the last call to `br_pem_decoder_event()`, then this + * function returns 0. + * + * \param ctx decoder context. + * \return the raised event, or 0. + */ +int br_pem_decoder_event(br_pem_decoder_context *ctx); + +/** + * \brief Event: start of object. + * + * This event is raised when the start of a new object has been detected. + * The object name (normalised to uppercase) can be accessed with + * `br_pem_decoder_name()`. + */ +#define BR_PEM_BEGIN_OBJ 1 + +/** + * \brief Event: end of object. + * + * This event is raised when the end of the current object is reached + * (normally, i.e. with no decoding error). + */ +#define BR_PEM_END_OBJ 2 + +/** + * \brief Event: decoding error. + * + * This event is raised when decoding fails within an object. + * This formally closes the current object and brings the decoder back + * to the "out of any object" state. The offending line in the source + * is consumed. + */ +#define BR_PEM_ERROR 3 + +/** + * \brief Get the name of the encountered object. + * + * The encountered object name is defined only when the "start of object" + * event is raised. That name is normalised to uppercase (for ASCII letters + * only) and does not include trailing dashes. + * + * \param ctx decoder context. + * \return the current object name. + */ +static inline const char * +br_pem_decoder_name(br_pem_decoder_context *ctx) +{ + return ctx->name; +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/bearssl/bearssl_port.h b/tools/sdk/include/bearssl/bearssl_port.h new file mode 100644 index 000000000..277e55d4c --- /dev/null +++ b/tools/sdk/include/bearssl/bearssl_port.h @@ -0,0 +1,20 @@ +#ifndef _bearssl_port_h +#define _bearssl_port_h + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +extern void br_esp8266_stack_proxy_init(uint8_t *space, uint16_t size); +extern size_t br_esp8266_stack_proxy_max(); +extern size_t br_esp8266_stack_proxy_usage(); +extern void br_esp8266_stack_proxy_deinit(); + +#ifdef __cplusplus +}; +#endif + +#endif + diff --git a/tools/sdk/include/bearssl/bearssl_prf.h b/tools/sdk/include/bearssl/bearssl_prf.h new file mode 100644 index 000000000..9d54ad8d3 --- /dev/null +++ b/tools/sdk/include/bearssl/bearssl_prf.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2016 Thomas Pornin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BR_BEARSSL_PRF_H__ +#define BR_BEARSSL_PRF_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file bearssl_prf.h + * + * # The TLS PRF + * + * The "PRF" is the pseudorandom function used internally during the + * SSL/TLS handshake, notably to expand negociated shared secrets into + * the symmetric encryption keys that will be used to process the + * application data. + * + * TLS 1.0 and 1.1 define a PRF that is based on both MD5 and SHA-1. This + * is implemented by the `br_tls10_prf()` function. + * + * TLS 1.2 redefines the PRF, using an explicit hash function. The + * `br_tls12_sha256_prf()` and `br_tls12_sha384_prf()` functions apply that + * PRF with, respectively, SHA-256 and SHA-384. Most standard cipher suites + * rely on the SHA-256 based PRF, but some use SHA-384. + * + * The PRF always uses as input three parameters: a "secret" (some + * bytes), a "label" (ASCII string), and a "seed" (again some bytes). An + * arbitrary output length can be produced. The "seed" is provided as an + * arbitrary number of binary chunks, that gets internally concatenated. + */ + +/** + * \brief Type for a seed chunk. + * + * Each chunk may have an arbitrary length, and may be empty (no byte at + * all). If the chunk length is zero, then the pointer to the chunk data + * may be `NULL`. + */ +typedef struct { + /** + * \brief Pointer to the chunk data. + */ + const void *data; + + /** + * \brief Chunk length (in bytes). + */ + size_t len; +} br_tls_prf_seed_chunk; + +/** + * \brief PRF implementation for TLS 1.0 and 1.1. + * + * This PRF is the one specified by TLS 1.0 and 1.1. It internally uses + * MD5 and SHA-1. + * + * \param dst destination buffer. + * \param len output length (in bytes). + * \param secret secret value (key) for this computation. + * \param secret_len length of "secret" (in bytes). + * \param label PRF label (zero-terminated ASCII string). + * \param seed_num number of seed chunks. + * \param seed seed chnks for this computation (usually non-secret). + */ +void br_tls10_prf(void *dst, size_t len, + const void *secret, size_t secret_len, const char *label, + size_t seed_num, const br_tls_prf_seed_chunk *seed); + +/** + * \brief PRF implementation for TLS 1.2, with SHA-256. + * + * This PRF is the one specified by TLS 1.2, when the underlying hash + * function is SHA-256. + * + * \param dst destination buffer. + * \param len output length (in bytes). + * \param secret secret value (key) for this computation. + * \param secret_len length of "secret" (in bytes). + * \param label PRF label (zero-terminated ASCII string). + * \param seed_num number of seed chunks. + * \param seed seed chnks for this computation (usually non-secret). + */ +void br_tls12_sha256_prf(void *dst, size_t len, + const void *secret, size_t secret_len, const char *label, + size_t seed_num, const br_tls_prf_seed_chunk *seed); + +/** + * \brief PRF implementation for TLS 1.2, with SHA-384. + * + * This PRF is the one specified by TLS 1.2, when the underlying hash + * function is SHA-384. + * + * \param dst destination buffer. + * \param len output length (in bytes). + * \param secret secret value (key) for this computation. + * \param secret_len length of "secret" (in bytes). + * \param label PRF label (zero-terminated ASCII string). + * \param seed_num number of seed chunks. + * \param seed seed chnks for this computation (usually non-secret). + */ +void br_tls12_sha384_prf(void *dst, size_t len, + const void *secret, size_t secret_len, const char *label, + size_t seed_num, const br_tls_prf_seed_chunk *seed); + +/** + * brief A convenient type name for a PRF implementation. + * + * \param dst destination buffer. + * \param len output length (in bytes). + * \param secret secret value (key) for this computation. + * \param secret_len length of "secret" (in bytes). + * \param label PRF label (zero-terminated ASCII string). + * \param seed_num number of seed chunks. + * \param seed seed chnks for this computation (usually non-secret). + */ +typedef void (*br_tls_prf_impl)(void *dst, size_t len, + const void *secret, size_t secret_len, const char *label, + size_t seed_num, const br_tls_prf_seed_chunk *seed); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/bearssl/bearssl_rand.h b/tools/sdk/include/bearssl/bearssl_rand.h new file mode 100644 index 000000000..37379d2bf --- /dev/null +++ b/tools/sdk/include/bearssl/bearssl_rand.h @@ -0,0 +1,295 @@ +/* + * Copyright (c) 2016 Thomas Pornin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BR_BEARSSL_RAND_H__ +#define BR_BEARSSL_RAND_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file bearssl_rand.h + * + * # Pseudo-Random Generators + * + * A PRNG is a state-based engine that outputs pseudo-random bytes on + * demand. It is initialized with an initial seed, and additional seed + * bytes can be added afterwards. Bytes produced depend on the seeds and + * also on the exact sequence of calls (including sizes requested for + * each call). + * + * + * ## Procedural and OOP API + * + * For the PRNG of name "`xxx`", two API are provided. The _procedural_ + * API defined a context structure `br_xxx_context` and three functions: + * + * - `br_xxx_init()` + * + * Initialise the context with an initial seed. + * + * - `br_xxx_generate()` + * + * Produce some pseudo-random bytes. + * + * - `br_xxx_update()` + * + * Inject some additional seed. + * + * The initialisation function sets the first context field (`vtable`) + * to a pointer to the vtable that supports the OOP API. The OOP API + * provides access to the same functions through function pointers, + * named `init()`, `generate()` and `update()`. + * + * Note that the context initialisation method may accept additional + * parameters, provided as a 'const void *' pointer at API level. These + * additional parameters depend on the implemented PRNG. + * + * + * ## HMAC_DRBG + * + * HMAC_DRBG is defined in [NIST SP 800-90A Revision + * 1](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-90Ar1.pdf). + * It uses HMAC repeatedly, over some configurable underlying hash + * function. In BearSSL, it is implemented under the "`hmac_drbg`" name. + * The "extra parameters" pointer for context initialisation should be + * set to a pointer to the vtable for the underlying hash function (e.g. + * pointer to `br_sha256_vtable` to use HMAC_DRBG with SHA-256). + * + * According to the NIST standard, each request shall produce up to + * 219 bits (i.e. 64 kB of data); moreover, the context shall + * be reseeded at least once every 248 requests. This + * implementation does not maintain the reseed counter (the threshold is + * too high to be reached in practice) and does not object to producing + * more than 64 kB in a single request; thus, the code cannot fail, + * which corresponds to the fact that the API has no room for error + * codes. However, this implies that requesting more than 64 kB in one + * `generate()` request, or making more than 248 requests + * without reseeding, is formally out of NIST specification. There is + * no currently known security penalty for exceeding the NIST limits, + * and, in any case, HMAC_DRBG usage in implementing SSL/TLS always + * stays much below these thresholds. + */ + +/** + * \brief Class type for PRNG implementations. + * + * A `br_prng_class` instance references the methods implementing a PRNG. + * Constant instances of this structure are defined for each implemented + * PRNG. Such instances are also called "vtables". + */ +typedef struct br_prng_class_ br_prng_class; +struct br_prng_class_ { + /** + * \brief Size (in bytes) of the context structure appropriate for + * running this PRNG. + */ + size_t context_size; + + /** + * \brief Initialisation method. + * + * The context to initialise is provided as a pointer to its + * first field (the vtable pointer); this function sets that + * first field to a pointer to the vtable. + * + * The extra parameters depend on the implementation; each + * implementation defines what kind of extra parameters it + * expects (if any). + * + * Requirements on the initial seed depend on the implemented + * PRNG. + * + * \param ctx PRNG context to initialise. + * \param params extra parameters for the PRNG. + * \param seed initial seed. + * \param seed_len initial seed length (in bytes). + */ + void (*init)(const br_prng_class **ctx, const void *params, + const void *seed, size_t seed_len); + + /** + * \brief Random bytes generation. + * + * This method produces `len` pseudorandom bytes, in the `out` + * buffer. The context is updated accordingly. + * + * \param ctx PRNG context. + * \param out output buffer. + * \param len number of pseudorandom bytes to produce. + */ + void (*generate)(const br_prng_class **ctx, void *out, size_t len); + + /** + * \brief Inject additional seed bytes. + * + * The provided seed bytes are added into the PRNG internal + * entropy pool. + * + * \param ctx PRNG context. + * \param seed additional seed. + * \param seed_len additional seed length (in bytes). + */ + void (*update)(const br_prng_class **ctx, + const void *seed, size_t seed_len); +}; + +/** + * \brief Context for HMAC_DRBG. + * + * The context contents are opaque, except the first field, which + * supports OOP. + */ +typedef struct { + /** + * \brief Pointer to the vtable. + * + * This field is set with the initialisation method/function. + */ + const br_prng_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + unsigned char K[64]; + unsigned char V[64]; + const br_hash_class *digest_class; +#endif +} br_hmac_drbg_context; + +/** + * \brief Statically allocated, constant vtable for HMAC_DRBG. + */ +extern const br_prng_class br_hmac_drbg_vtable; + +/** + * \brief HMAC_DRBG initialisation. + * + * The context to initialise is provided as a pointer to its first field + * (the vtable pointer); this function sets that first field to a + * pointer to the vtable. + * + * The `seed` value is what is called, in NIST terminology, the + * concatenation of the "seed", "nonce" and "personalization string", in + * that order. + * + * The `digest_class` parameter defines the underlying hash function. + * Formally, the NIST standard specifies that the hash function shall + * be only SHA-1 or one of the SHA-2 functions. This implementation also + * works with any other implemented hash function (such as MD5), but + * this is non-standard and therefore not recommended. + * + * \param ctx HMAC_DRBG context to initialise. + * \param digest_class vtable for the underlying hash function. + * \param seed initial seed. + * \param seed_len initial seed length (in bytes). + */ +void br_hmac_drbg_init(br_hmac_drbg_context *ctx, + const br_hash_class *digest_class, const void *seed, size_t seed_len); + +/** + * \brief Random bytes generation with HMAC_DRBG. + * + * This method produces `len` pseudorandom bytes, in the `out` + * buffer. The context is updated accordingly. Formally, requesting + * more than 65536 bytes in one request falls out of specification + * limits (but it won't fail). + * + * \param ctx HMAC_DRBG context. + * \param out output buffer. + * \param len number of pseudorandom bytes to produce. + */ +void br_hmac_drbg_generate(br_hmac_drbg_context *ctx, void *out, size_t len); + +/** + * \brief Inject additional seed bytes in HMAC_DRBG. + * + * The provided seed bytes are added into the HMAC_DRBG internal + * entropy pool. The process does not _replace_ existing entropy, + * thus pushing non-random bytes (i.e. bytes which are known to the + * attackers) does not degrade the overall quality of generated bytes. + * + * \param ctx HMAC_DRBG context. + * \param seed additional seed. + * \param seed_len additional seed length (in bytes). + */ +void br_hmac_drbg_update(br_hmac_drbg_context *ctx, + const void *seed, size_t seed_len); + +/** + * \brief Get the hash function implementation used by a given instance of + * HMAC_DRBG. + * + * This calls MUST NOT be performed on a context which was not + * previously initialised. + * + * \param ctx HMAC_DRBG context. + * \return the hash function vtable. + */ +static inline const br_hash_class * +br_hmac_drbg_get_hash(const br_hmac_drbg_context *ctx) +{ + return ctx->digest_class; +} + +/** + * \brief Type for a provider of entropy seeds. + * + * A "seeder" is a function that is able to obtain random values from + * some source and inject them as entropy seed in a PRNG. A seeder + * shall guarantee that the total entropy of the injected seed is large + * enough to seed a PRNG for purposes of cryptographic key generation + * (i.e. at least 128 bits). + * + * A seeder may report a failure to obtain adequate entropy. Seeders + * shall endeavour to fix themselves transient errors by trying again; + * thus, callers may consider reported errors as permanent. + * + * \param ctx PRNG context to seed. + * \return 1 on success, 0 on error. + */ +typedef int (*br_prng_seeder)(const br_prng_class **ctx); + +/** + * \brief Get a seeder backed by the operating system or hardware. + * + * Get a seeder that feeds on RNG facilities provided by the current + * operating system or hardware. If no such facility is known, then 0 + * is returned. + * + * If `name` is not `NULL`, then `*name` is set to a symbolic string + * that identifies the seeder implemention. If no seeder is returned + * and `name` is not `NULL`, then `*name` is set to a pointer to the + * constant string `"none"`. + * + * \param name receiver for seeder name, or `NULL`. + * \return the system seeder, if available, or 0. + */ +br_prng_seeder br_prng_seeder_system(const char **name); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/bearssl/bearssl_rsa.h b/tools/sdk/include/bearssl/bearssl_rsa.h new file mode 100644 index 000000000..3d5c26a32 --- /dev/null +++ b/tools/sdk/include/bearssl/bearssl_rsa.h @@ -0,0 +1,743 @@ +/* + * Copyright (c) 2016 Thomas Pornin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BR_BEARSSL_RSA_H__ +#define BR_BEARSSL_RSA_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file bearssl_rsa.h + * + * # RSA + * + * This file documents the RSA implementations provided with BearSSL. + * Note that the SSL engine accesses these implementations through a + * configurable API, so it is possible to, for instance, run a SSL + * server which uses a RSA engine which is not based on this code. + * + * ## Key Elements + * + * RSA public and private keys consist in lists of big integers. All + * such integers are represented with big-endian unsigned notation: + * first byte is the most significant, and the value is positive (so + * there is no dedicated "sign bit"). Public and private key structures + * thus contain, for each such integer, a pointer to the first value byte + * (`unsigned char *`), and a length (`size_t`) which is the number of + * relevant bytes. As a general rule, minimal-length encoding is not + * enforced: values may have extra leading bytes of value 0. + * + * RSA public keys consist in two integers: + * + * - the modulus (`n`); + * - the public exponent (`e`). + * + * RSA private keys, as defined in + * [PKCS#1](https://tools.ietf.org/html/rfc3447), contain eight integers: + * + * - the modulus (`n`); + * - the public exponent (`e`); + * - the private exponent (`d`); + * - the first prime factor (`p`); + * - the second prime factor (`q`); + * - the first reduced exponent (`dp`, which is `d` modulo `p-1`); + * - the second reduced exponent (`dq`, which is `d` modulo `q-1`); + * - the CRT coefficient (`iq`, the inverse of `q` modulo `p`). + * + * However, the implementations defined in BearSSL use only five of + * these integers: `p`, `q`, `dp`, `dq` and `iq`. + * + * ## Security Features and Limitations + * + * The implementations contained in BearSSL have the following limitations + * and features: + * + * - They are constant-time. This means that the execution time and + * memory access pattern may depend on the _lengths_ of the private + * key components, but not on their value, nor on the value of + * the operand. Note that this property is not achieved through + * random masking, but "true" constant-time code. + * + * - They support only private keys with two prime factors. RSA private + * key with three or more prime factors are nominally supported, but + * rarely used; they may offer faster operations, at the expense of + * more code and potentially a reduction in security if there are + * "too many" prime factors. + * + * - The public exponent may have arbitrary length. Of course, it is + * a good idea to keep public exponents small, so that public key + * operations are fast; but, contrary to some widely deployed + * implementations, BearSSL has no problem with public exponent + * longer than 32 bits. + * + * - The two prime factors of the modulus need not have the same length + * (but severely imbalanced factor lengths might reduce security). + * Similarly, there is no requirement that the first factor (`p`) + * be greater than the second factor (`q`). + * + * - Prime factors and modulus must be smaller than a compile-time limit. + * This is made necessary by the use of fixed-size stack buffers, and + * the limit has been adjusted to keep stack usage under 2 kB for the + * RSA operations. Currently, the maximum modulus size is 4096 bits, + * and the maximum prime factor size is 2080 bits. + * + * - The RSA functions themselves do not enforce lower size limits, + * except that which is absolutely necessary for the operation to + * mathematically make sense (e.g. a PKCS#1 v1.5 signature with + * SHA-1 requires a modulus of at least 361 bits). It is up to users + * of this code to enforce size limitations when appropriate (e.g. + * the X.509 validation engine, by default, rejects RSA keys of + * less than 1017 bits). + * + * - Within the size constraints expressed above, arbitrary bit lengths + * are supported. There is no requirement that prime factors or + * modulus have a size multiple of 8 or 16. + * + * - When verifying PKCS#1 v1.5 signatures, both variants of the hash + * function identifying header (with and without the ASN.1 NULL) are + * supported. When producing such signatures, the variant with the + * ASN.1 NULL is used. + * + * ## Implementations + * + * Three RSA implementations are included: + * + * - The **i32** implementation internally represents big integers + * as arrays of 32-bit integers. It is perfunctory and portable, + * but not very efficient. + * + * - The **i31** implementation uses 32-bit integers, each containing + * 31 bits worth of integer data. The i31 implementation is somewhat + * faster than the i32 implementation (the reduced integer size makes + * carry propagation easier) for a similar code footprint, but uses + * very slightly larger stack buffers (about 4% bigger). + * + * - The **i62** implementation is similar to the i31 implementation, + * except that it internally leverages the 64x64->128 multiplication + * opcode. This implementation is available only on architectures + * where such an opcode exists. It is much faster than i31. + * + * - The **i15** implementation uses 16-bit integers, each containing + * 15 bits worth of integer data. Multiplication results fit on + * 32 bits, so this won't use the "widening" multiplication routine + * on ARM Cortex M0/M0+, for much better performance and constant-time + * execution. + */ + +/** + * \brief RSA public key. + * + * The structure references the modulus and the public exponent. Both + * integers use unsigned big-endian representation; extra leading bytes + * of value 0 are allowed. + */ +typedef struct { + /** \brief Modulus. */ + unsigned char *n; + /** \brief Modulus length (in bytes). */ + size_t nlen; + /** \brief Public exponent. */ + unsigned char *e; + /** \brief Public exponent length (in bytes). */ + size_t elen; +} br_rsa_public_key; + +/** + * \brief RSA private key. + * + * The structure references the primvate factors, reduced private + * exponents, and CRT coefficient. It also contains the bit length of + * the modulus. The big integers use unsigned big-endian representation; + * extra leading bytes of value 0 are allowed. However, the modulus bit + * length (`n_bitlen`) MUST be exact. + */ +typedef struct { + /** \brief Modulus bit length (in bits, exact value). */ + uint32_t n_bitlen; + /** \brief First prime factor. */ + unsigned char *p; + /** \brief First prime factor length (in bytes). */ + size_t plen; + /** \brief Second prime factor. */ + unsigned char *q; + /** \brief Second prime factor length (in bytes). */ + size_t qlen; + /** \brief First reduced private exponent. */ + unsigned char *dp; + /** \brief First reduced private exponent length (in bytes). */ + size_t dplen; + /** \brief Second reduced private exponent. */ + unsigned char *dq; + /** \brief Second reduced private exponent length (in bytes). */ + size_t dqlen; + /** \brief CRT coefficient. */ + unsigned char *iq; + /** \brief CRT coefficient length (in bytes). */ + size_t iqlen; +} br_rsa_private_key; + +/** + * \brief Type for a RSA public key engine. + * + * The public key engine performs the modular exponentiation of the + * provided value with the public exponent. The value is modified in + * place. + * + * The value length (`xlen`) is verified to have _exactly_ the same + * length as the modulus (actual modulus length, without extra leading + * zeros in the modulus representation in memory). If the length does + * not match, then this function returns 0 and `x[]` is unmodified. + * + * It `xlen` is correct, then `x[]` is modified. Returned value is 1 + * on success, 0 on error. Error conditions include an oversized `x[]` + * (the array has the same length as the modulus, but the numerical value + * is not lower than the modulus) and an invalid modulus (e.g. an even + * integer). If an error is reported, then the new contents of `x[]` are + * unspecified. + * + * \param x operand to exponentiate. + * \param xlen length of the operand (in bytes). + * \param pk RSA public key. + * \return 1 on success, 0 on error. + */ +typedef uint32_t (*br_rsa_public)(unsigned char *x, size_t xlen, + const br_rsa_public_key *pk); + +/** + * \brief Type for a RSA signature verification engine (PKCS#1 v1.5). + * + * Parameters are: + * + * - The signature itself. The provided array is NOT modified. + * + * - The encoded OID for the hash function. The provided array must begin + * with a single byte that contains the length of the OID value (in + * bytes), followed by exactly that many bytes. This parameter may + * also be `NULL`, in which case the raw hash value should be used + * with the PKCS#1 v1.5 "type 1" padding (as used in SSL/TLS up + * to TLS-1.1, with a 36-byte hash value). + * + * - The hash output length, in bytes. + * + * - The public key. + * + * - An output buffer for the hash value. The caller must still compare + * it with the hash of the data over which the signature is computed. + * + * **Constraints:** + * + * - Hash length MUST be no more than 64 bytes. + * + * - OID value length MUST be no more than 32 bytes (i.e. `hash_oid[0]` + * must have a value in the 0..32 range, inclusive). + * + * This function verifies that the signature length (`xlen`) matches the + * modulus length (this function returns 0 on mismatch). If the modulus + * size exceeds the maximum supported RSA size, then the function also + * returns 0. + * + * Returned value is 1 on success, 0 on error. + * + * Implementations of this type need not be constant-time. + * + * \param x signature buffer. + * \param xlen signature length (in bytes). + * \param hash_oid encoded hash algorithm OID (or `NULL`). + * \param hash_len expected hash value length (in bytes). + * \param pk RSA public key. + * \param hash_out output buffer for the hash value. + * \return 1 on success, 0 on error. + */ +typedef uint32_t (*br_rsa_pkcs1_vrfy)(const unsigned char *x, size_t xlen, + const unsigned char *hash_oid, size_t hash_len, + const br_rsa_public_key *pk, unsigned char *hash_out); + +/** + * \brief Type for a RSA private key engine. + * + * The `x[]` buffer is modified in place, and its length is inferred from + * the modulus length (`x[]` is assumed to have a length of + * `(sk->n_bitlen+7)/8` bytes). + * + * Returned value is 1 on success, 0 on error. + * + * \param x operand to exponentiate. + * \param sk RSA private key. + * \return 1 on success, 0 on error. + */ +typedef uint32_t (*br_rsa_private)(unsigned char *x, + const br_rsa_private_key *sk); + +/** + * \brief Type for a RSA signature generation engine (PKCS#1 v1.5). + * + * Parameters are: + * + * - The encoded OID for the hash function. The provided array must begin + * with a single byte that contains the length of the OID value (in + * bytes), followed by exactly that many bytes. This parameter may + * also be `NULL`, in which case the raw hash value should be used + * with the PKCS#1 v1.5 "type 1" padding (as used in SSL/TLS up + * to TLS-1.1, with a 36-byte hash value). + * + * - The hash value computes over the data to sign (its length is + * expressed in bytes). + * + * - The RSA private key. + * + * - The output buffer, that receives the signature. + * + * Returned value is 1 on success, 0 on error. Error conditions include + * a too small modulus for the provided hash OID and value, or some + * invalid key parameters. The signature length is exactly + * `(sk->n_bitlen+7)/8` bytes. + * + * This function is expected to be constant-time with regards to the + * private key bytes (lengths of the modulus and the individual factors + * may leak, though) and to the hashed data. + * + * \param hash_oid encoded hash algorithm OID (or `NULL`). + * \param hash hash value. + * \param hash_len hash value length (in bytes). + * \param sk RSA private key. + * \param x output buffer for the signature value. + * \return 1 on success, 0 on error. + */ +typedef uint32_t (*br_rsa_pkcs1_sign)(const unsigned char *hash_oid, + const unsigned char *hash, size_t hash_len, + const br_rsa_private_key *sk, unsigned char *x); + +/** + * \brief Encoded OID for SHA-1 (in RSA PKCS#1 signatures). + */ +#define BR_HASH_OID_SHA1 \ + ((const unsigned char *)"\x05\x2B\x0E\x03\x02\x1A") + +/** + * \brief Encoded OID for SHA-224 (in RSA PKCS#1 signatures). + */ +#define BR_HASH_OID_SHA224 \ + ((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x04") + +/** + * \brief Encoded OID for SHA-256 (in RSA PKCS#1 signatures). + */ +#define BR_HASH_OID_SHA256 \ + ((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01") + +/** + * \brief Encoded OID for SHA-384 (in RSA PKCS#1 signatures). + */ +#define BR_HASH_OID_SHA384 \ + ((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x02") + +/** + * \brief Encoded OID for SHA-512 (in RSA PKCS#1 signatures). + */ +#define BR_HASH_OID_SHA512 \ + ((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x03") + +/* + * RSA "i32" engine. Integers are internally represented as arrays of + * 32-bit integers, and the core multiplication primitive is the + * 32x32->64 multiplication. + */ + +/** + * \brief RSA public key engine "i32". + * + * \see br_rsa_public + * + * \param x operand to exponentiate. + * \param xlen length of the operand (in bytes). + * \param pk RSA public key. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i32_public(unsigned char *x, size_t xlen, + const br_rsa_public_key *pk); + +/** + * \brief RSA signature verification engine "i32". + * + * \see br_rsa_pkcs1_vrfy + * + * \param x signature buffer. + * \param xlen signature length (in bytes). + * \param hash_oid encoded hash algorithm OID (or `NULL`). + * \param hash_len expected hash value length (in bytes). + * \param pk RSA public key. + * \param hash_out output buffer for the hash value. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i32_pkcs1_vrfy(const unsigned char *x, size_t xlen, + const unsigned char *hash_oid, size_t hash_len, + const br_rsa_public_key *pk, unsigned char *hash_out); + +/** + * \brief RSA private key engine "i32". + * + * \see br_rsa_private + * + * \param x operand to exponentiate. + * \param sk RSA private key. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i32_private(unsigned char *x, + const br_rsa_private_key *sk); + +/** + * \brief RSA signature generation engine "i32". + * + * \see br_rsa_pkcs1_sign + * + * \param hash_oid encoded hash algorithm OID (or `NULL`). + * \param hash hash value. + * \param hash_len hash value length (in bytes). + * \param sk RSA private key. + * \param x output buffer for the hash value. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i32_pkcs1_sign(const unsigned char *hash_oid, + const unsigned char *hash, size_t hash_len, + const br_rsa_private_key *sk, unsigned char *x); + +/* + * RSA "i31" engine. Similar to i32, but only 31 bits are used per 32-bit + * word. This uses slightly more stack space (about 4% more) and code + * space, but it quite faster. + */ + +/** + * \brief RSA public key engine "i31". + * + * \see br_rsa_public + * + * \param x operand to exponentiate. + * \param xlen length of the operand (in bytes). + * \param pk RSA public key. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i31_public(unsigned char *x, size_t xlen, + const br_rsa_public_key *pk); + +/** + * \brief RSA signature verification engine "i31". + * + * \see br_rsa_pkcs1_vrfy + * + * \param x signature buffer. + * \param xlen signature length (in bytes). + * \param hash_oid encoded hash algorithm OID (or `NULL`). + * \param hash_len expected hash value length (in bytes). + * \param pk RSA public key. + * \param hash_out output buffer for the hash value. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i31_pkcs1_vrfy(const unsigned char *x, size_t xlen, + const unsigned char *hash_oid, size_t hash_len, + const br_rsa_public_key *pk, unsigned char *hash_out); + +/** + * \brief RSA private key engine "i31". + * + * \see br_rsa_private + * + * \param x operand to exponentiate. + * \param sk RSA private key. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i31_private(unsigned char *x, + const br_rsa_private_key *sk); + +/** + * \brief RSA signature generation engine "i31". + * + * \see br_rsa_pkcs1_sign + * + * \param hash_oid encoded hash algorithm OID (or `NULL`). + * \param hash hash value. + * \param hash_len hash value length (in bytes). + * \param sk RSA private key. + * \param x output buffer for the hash value. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i31_pkcs1_sign(const unsigned char *hash_oid, + const unsigned char *hash, size_t hash_len, + const br_rsa_private_key *sk, unsigned char *x); + +/* + * RSA "i62" engine. Similar to i31, but internal multiplication use + * 64x64->128 multiplications. This is available only on architecture + * that offer such an opcode. + */ + +/** + * \brief RSA public key engine "i62". + * + * This function is defined only on architecture that offer a 64x64->128 + * opcode. Use `br_rsa_i62_public_get()` to dynamically obtain a pointer + * to that functiom. + * + * \see br_rsa_public + * + * \param x operand to exponentiate. + * \param xlen length of the operand (in bytes). + * \param pk RSA public key. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i62_public(unsigned char *x, size_t xlen, + const br_rsa_public_key *pk); + +/** + * \brief RSA signature verification engine "i62". + * + * This function is defined only on architecture that offer a 64x64->128 + * opcode. Use `br_rsa_i62_pkcs1_vrfy_get()` to dynamically obtain a pointer + * to that functiom. + * + * \see br_rsa_pkcs1_vrfy + * + * \param x signature buffer. + * \param xlen signature length (in bytes). + * \param hash_oid encoded hash algorithm OID (or `NULL`). + * \param hash_len expected hash value length (in bytes). + * \param pk RSA public key. + * \param hash_out output buffer for the hash value. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i62_pkcs1_vrfy(const unsigned char *x, size_t xlen, + const unsigned char *hash_oid, size_t hash_len, + const br_rsa_public_key *pk, unsigned char *hash_out); + +/** + * \brief RSA private key engine "i62". + * + * This function is defined only on architecture that offer a 64x64->128 + * opcode. Use `br_rsa_i62_private_get()` to dynamically obtain a pointer + * to that functiom. + * + * \see br_rsa_private + * + * \param x operand to exponentiate. + * \param sk RSA private key. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i62_private(unsigned char *x, + const br_rsa_private_key *sk); + +/** + * \brief RSA signature generation engine "i62". + * + * This function is defined only on architecture that offer a 64x64->128 + * opcode. Use `br_rsa_i62_pkcs1_sign_get()` to dynamically obtain a pointer + * to that functiom. + * + * \see br_rsa_pkcs1_sign + * + * \param hash_oid encoded hash algorithm OID (or `NULL`). + * \param hash hash value. + * \param hash_len hash value length (in bytes). + * \param sk RSA private key. + * \param x output buffer for the hash value. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i62_pkcs1_sign(const unsigned char *hash_oid, + const unsigned char *hash, size_t hash_len, + const br_rsa_private_key *sk, unsigned char *x); + +/** + * \brief Get the RSA "i62" implementation (public key operations), + * if available. + * + * \return the implementation, or 0. + */ +br_rsa_public br_rsa_i62_public_get(void); + +/** + * \brief Get the RSA "i62" implementation (PKCS#1 signature verification), + * if available. + * + * \return the implementation, or 0. + */ +br_rsa_pkcs1_vrfy br_rsa_i62_pkcs1_vrfy_get(void); + +/** + * \brief Get the RSA "i62" implementation (private key operations), + * if available. + * + * \return the implementation, or 0. + */ +br_rsa_private br_rsa_i62_private_get(void); + +/** + * \brief Get the RSA "i62" implementation (PKCS#1 signature generation), + * if available. + * + * \return the implementation, or 0. + */ +br_rsa_pkcs1_sign br_rsa_i62_pkcs1_sign_get(void); + +/* + * RSA "i15" engine. Integers are represented as 15-bit integers, so + * the code uses only 32-bit multiplication (no 64-bit result), which + * is vastly faster (and constant-time) on the ARM Cortex M0/M0+. + */ + +/** + * \brief RSA public key engine "i15". + * + * \see br_rsa_public + * + * \param x operand to exponentiate. + * \param xlen length of the operand (in bytes). + * \param pk RSA public key. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i15_public(unsigned char *x, size_t xlen, + const br_rsa_public_key *pk); + +/** + * \brief RSA signature verification engine "i15". + * + * \see br_rsa_pkcs1_vrfy + * + * \param x signature buffer. + * \param xlen signature length (in bytes). + * \param hash_oid encoded hash algorithm OID (or `NULL`). + * \param hash_len expected hash value length (in bytes). + * \param pk RSA public key. + * \param hash_out output buffer for the hash value. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i15_pkcs1_vrfy(const unsigned char *x, size_t xlen, + const unsigned char *hash_oid, size_t hash_len, + const br_rsa_public_key *pk, unsigned char *hash_out); + +/** + * \brief RSA private key engine "i15". + * + * \see br_rsa_private + * + * \param x operand to exponentiate. + * \param sk RSA private key. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i15_private(unsigned char *x, + const br_rsa_private_key *sk); + +/** + * \brief RSA signature generation engine "i15". + * + * \see br_rsa_pkcs1_sign + * + * \param hash_oid encoded hash algorithm OID (or `NULL`). + * \param hash hash value. + * \param hash_len hash value length (in bytes). + * \param sk RSA private key. + * \param x output buffer for the hash value. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_i15_pkcs1_sign(const unsigned char *hash_oid, + const unsigned char *hash, size_t hash_len, + const br_rsa_private_key *sk, unsigned char *x); + +/** + * \brief Get "default" RSA implementation (public-key operations). + * + * This returns the preferred implementation of RSA (public-key operations) + * on the current system. + * + * \return the default implementation. + */ +br_rsa_public br_rsa_public_get_default(void); + +/** + * \brief Get "default" RSA implementation (private-key operations). + * + * This returns the preferred implementation of RSA (private-key operations) + * on the current system. + * + * \return the default implementation. + */ +br_rsa_private br_rsa_private_get_default(void); + +/** + * \brief Get "default" RSA implementation (PKCS#1 signature verification). + * + * This returns the preferred implementation of RSA (signature verification) + * on the current system. + * + * \return the default implementation. + */ +br_rsa_pkcs1_vrfy br_rsa_pkcs1_vrfy_get_default(void); + +/** + * \brief Get "default" RSA implementation (PKCS#1 signature generation). + * + * This returns the preferred implementation of RSA (signature generation) + * on the current system. + * + * \return the default implementation. + */ +br_rsa_pkcs1_sign br_rsa_pkcs1_sign_get_default(void); + +/** + * \brief RSA decryption helper, for SSL/TLS. + * + * This function performs the RSA decryption for a RSA-based key exchange + * in a SSL/TLS server. The provided RSA engine is used. The `data` + * parameter points to the value to decrypt, of length `len` bytes. On + * success, the 48-byte pre-master secret is copied into `data`, starting + * at the first byte of that buffer; on error, the contents of `data` + * become indeterminate. + * + * This function first checks that the provided value length (`len`) is + * not lower than 59 bytes, and matches the RSA modulus length; if neither + * of this property is met, then this function returns 0 and the buffer + * is unmodified. + * + * Otherwise, decryption and then padding verification are performed, both + * in constant-time. A decryption error, or a bad padding, or an + * incorrect decrypted value length are reported with a returned value of + * 0; on success, 1 is returned. The caller (SSL server engine) is supposed + * to proceed with a random pre-master secret in case of error. + * + * \param core RSA private key engine. + * \param sk RSA private key. + * \param data input/output buffer. + * \param len length (in bytes) of the data to decrypt. + * \return 1 on success, 0 on error. + */ +uint32_t br_rsa_ssl_decrypt(br_rsa_private core, const br_rsa_private_key *sk, + unsigned char *data, size_t len); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/bearssl/bearssl_ssl.h b/tools/sdk/include/bearssl/bearssl_ssl.h new file mode 100644 index 000000000..6640bc651 --- /dev/null +++ b/tools/sdk/include/bearssl/bearssl_ssl.h @@ -0,0 +1,4136 @@ +/* + * Copyright (c) 2016 Thomas Pornin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BR_BEARSSL_SSL_H__ +#define BR_BEARSSL_SSL_H__ + +#include +#include + +#include "bearssl_block.h" +#include "bearssl_hash.h" +#include "bearssl_hmac.h" +#include "bearssl_prf.h" +#include "bearssl_rand.h" +#include "bearssl_x509.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file bearssl_ssl.h + * + * # SSL + * + * For an overview of the SSL/TLS API, see [the BearSSL Web + * site](https://www.bearssl.org/api1.html). + * + * The `BR_TLS_*` constants correspond to the standard cipher suites and + * their values in the [IANA + * registry](http://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4). + * + * The `BR_ALERT_*` constants are for standard TLS alert messages. When + * a fatal alert message is sent of received, then the SSL engine context + * status is set to the sum of that alert value (an integer in the 0..255 + * range) and a fixed offset (`BR_ERR_SEND_FATAL_ALERT` for a sent alert, + * `BR_ERR_RECV_FATAL_ALERT` for a received alert). + */ + +/** \brief Optimal input buffer size. */ +#define BR_SSL_BUFSIZE_INPUT (16384 + 325) + +/** \brief Optimal output buffer size. */ +#define BR_SSL_BUFSIZE_OUTPUT (16384 + 85) + +/** \brief Optimal buffer size for monodirectional engine + (shared input/output buffer). */ +#define BR_SSL_BUFSIZE_MONO BR_SSL_BUFSIZE_INPUT + +/** \brief Optimal buffer size for bidirectional engine + (single buffer split into two separate input/output buffers). */ +#define BR_SSL_BUFSIZE_BIDI (BR_SSL_BUFSIZE_INPUT + BR_SSL_BUFSIZE_OUTPUT) + +/* + * Constants for known SSL/TLS protocol versions (SSL 3.0, TLS 1.0, TLS 1.1 + * and TLS 1.2). Note that though there is a constant for SSL 3.0, that + * protocol version is not actually supported. + */ + +/** \brief Protocol version: SSL 3.0 (unsupported). */ +#define BR_SSL30 0x0300 +/** \brief Protocol version: TLS 1.0. */ +#define BR_TLS10 0x0301 +/** \brief Protocol version: TLS 1.1. */ +#define BR_TLS11 0x0302 +/** \brief Protocol version: TLS 1.2. */ +#define BR_TLS12 0x0303 + +/* + * Error constants. They are used to report the reason why a context has + * been marked as failed. + * + * Implementation note: SSL-level error codes should be in the 1..31 + * range. The 32..63 range is for certificate decoding and validation + * errors. Received fatal alerts imply an error code in the 256..511 range. + */ + +/** \brief SSL status: no error so far (0). */ +#define BR_ERR_OK 0 + +/** \brief SSL status: caller-provided parameter is incorrect. */ +#define BR_ERR_BAD_PARAM 1 + +/** \brief SSL status: operation requested by the caller cannot be applied + with the current context state (e.g. reading data while outgoing data + is waiting to be sent). */ +#define BR_ERR_BAD_STATE 2 + +/** \brief SSL status: incoming protocol or record version is unsupported. */ +#define BR_ERR_UNSUPPORTED_VERSION 3 + +/** \brief SSL status: incoming record version does not match the expected + version. */ +#define BR_ERR_BAD_VERSION 4 + +/** \brief SSL status: incoming record length is invalid. */ +#define BR_ERR_BAD_LENGTH 5 + +/** \brief SSL status: incoming record is too large to be processed, or + buffer is too small for the handshake message to send. */ +#define BR_ERR_TOO_LARGE 6 + +/** \brief SSL status: decryption found an invalid padding, or the record + MAC is not correct. */ +#define BR_ERR_BAD_MAC 7 + +/** \brief SSL status: no initial entropy was provided, and none can be + obtained from the OS. */ +#define BR_ERR_NO_RANDOM 8 + +/** \brief SSL status: incoming record type is unknown. */ +#define BR_ERR_UNKNOWN_TYPE 9 + +/** \brief SSL status: incoming record or message has wrong type with + regards to the current engine state. */ +#define BR_ERR_UNEXPECTED 10 + +/** \brief SSL status: ChangeCipherSpec message from the peer has invalid + contents. */ +#define BR_ERR_BAD_CCS 12 + +/** \brief SSL status: alert message from the peer has invalid contents + (odd length). */ +#define BR_ERR_BAD_ALERT 13 + +/** \brief SSL status: incoming handshake message decoding failed. */ +#define BR_ERR_BAD_HANDSHAKE 14 + +/** \brief SSL status: ServerHello contains a session ID which is larger + than 32 bytes. */ +#define BR_ERR_OVERSIZED_ID 15 + +/** \brief SSL status: server wants to use a cipher suite that we did + not claim to support. This is also reported if we tried to advertise + a cipher suite that we do not support. */ +#define BR_ERR_BAD_CIPHER_SUITE 16 + +/** \brief SSL status: server wants to use a compression that we did not + claim to support. */ +#define BR_ERR_BAD_COMPRESSION 17 + +/** \brief SSL status: server's max fragment length does not match + client's. */ +#define BR_ERR_BAD_FRAGLEN 18 + +/** \brief SSL status: secure renegotiation failed. */ +#define BR_ERR_BAD_SECRENEG 19 + +/** \brief SSL status: server sent an extension type that we did not + announce, or used the same extension type several times in a single + ServerHello. */ +#define BR_ERR_EXTRA_EXTENSION 20 + +/** \brief SSL status: invalid Server Name Indication contents (when + used by the server, this extension shall be empty). */ +#define BR_ERR_BAD_SNI 21 + +/** \brief SSL status: invalid ServerHelloDone from the server (length + is not 0). */ +#define BR_ERR_BAD_HELLO_DONE 22 + +/** \brief SSL status: internal limit exceeded (e.g. server's public key + is too large). */ +#define BR_ERR_LIMIT_EXCEEDED 23 + +/** \brief SSL status: Finished message from peer does not match the + expected value. */ +#define BR_ERR_BAD_FINISHED 24 + +/** \brief SSL status: session resumption attempt with distinct version + or cipher suite. */ +#define BR_ERR_RESUME_MISMATCH 25 + +/** \brief SSL status: unsupported or invalid algorithm (ECDHE curve, + signature algorithm, hash function). */ +#define BR_ERR_INVALID_ALGORITHM 26 + +/** \brief SSL status: invalid signature (on ServerKeyExchange from + server, or in CertificateVerify from client). */ +#define BR_ERR_BAD_SIGNATURE 27 + +/** \brief SSL status: peer's public key does not have the proper type + or is not allowed for requested operation. */ +#define BR_ERR_WRONG_KEY_USAGE 28 + +/** \brief SSL status: client did not send a certificate upon request, + or the client certificate could not be validated. */ +#define BR_ERR_NO_CLIENT_AUTH 29 + +/** \brief SSL status: I/O error or premature close on underlying + transport stream. This error code is set only by the simplified + I/O API ("br_sslio_*"). */ +#define BR_ERR_IO 31 + +/** \brief SSL status: base value for a received fatal alert. + + When a fatal alert is received from the peer, the alert value + is added to this constant. */ +#define BR_ERR_RECV_FATAL_ALERT 256 + +/** \brief SSL status: base value for a sent fatal alert. + + When a fatal alert is sent to the peer, the alert value is added + to this constant. */ +#define BR_ERR_SEND_FATAL_ALERT 512 + +/* ===================================================================== */ + +/** + * \brief Decryption engine for SSL. + * + * When processing incoming records, the SSL engine will use a decryption + * engine that uses a specific context structure, and has a set of + * methods (a vtable) that follows this template. + * + * The decryption engine is responsible for applying decryption, verifying + * MAC, and keeping track of the record sequence number. + */ +typedef struct br_sslrec_in_class_ br_sslrec_in_class; +struct br_sslrec_in_class_ { + /** + * \brief Context size (in bytes). + */ + size_t context_size; + + /** + * \brief Test validity of the incoming record length. + * + * This function returns 1 if the announced length for an + * incoming record is valid, 0 otherwise, + * + * \param ctx decryption engine context. + * \param record_len incoming record length. + * \return 1 of a valid length, 0 otherwise. + */ + int (*check_length)(const br_sslrec_in_class *const *ctx, + size_t record_len); + + /** + * \brief Decrypt the incoming record. + * + * This function may assume that the record length is valid + * (it has been previously tested with `check_length()`). + * Decryption is done in place; `*len` is updated with the + * cleartext length, and the address of the first plaintext + * byte is returned. If the record is correct but empty, then + * `*len` is set to 0 and a non-`NULL` pointer is returned. + * + * On decryption/MAC error, `NULL` is returned. + * + * \param ctx decryption engine context. + * \param record_type record type (23 for application data, etc). + * \param version record version. + * \param payload address of encrypted payload. + * \param len pointer to payload length (updated). + * \return pointer to plaintext, or `NULL` on error. + */ + unsigned char *(*decrypt)(const br_sslrec_in_class **ctx, + int record_type, unsigned version, + void *payload, size_t *len); +}; + +/** + * \brief Encryption engine for SSL. + * + * When building outgoing records, the SSL engine will use an encryption + * engine that uses a specific context structure, and has a set of + * methods (a vtable) that follows this template. + * + * The encryption engine is responsible for applying encryption and MAC, + * and keeping track of the record sequence number. + */ +typedef struct br_sslrec_out_class_ br_sslrec_out_class; +struct br_sslrec_out_class_ { + /** + * \brief Context size (in bytes). + */ + size_t context_size; + + /** + * \brief Compute maximum plaintext sizes and offsets. + * + * When this function is called, the `*start` and `*end` + * values contain offsets designating the free area in the + * outgoing buffer for plaintext data; that free area is + * preceded by a 5-byte space which will receive the record + * header. + * + * The `max_plaintext()` function is responsible for adjusting + * both `*start` and `*end` to make room for any record-specific + * header, MAC, padding, and possible split. + * + * \param ctx encryption engine context. + * \param start pointer to start of plaintext offset (updated). + * \param end pointer to start of plaintext offset (updated). + */ + void (*max_plaintext)(const br_sslrec_out_class *const *ctx, + size_t *start, size_t *end); + + /** + * \brief Perform record encryption. + * + * This function encrypts the record. The plaintext address and + * length are provided. Returned value is the start of the + * encrypted record (or sequence of records, if a split was + * performed), _including_ the 5-byte header, and `*len` is + * adjusted to the total size of the record(s), there again + * including the header(s). + * + * \param ctx decryption engine context. + * \param record_type record type (23 for application data, etc). + * \param version record version. + * \param plaintext address of plaintext. + * \param len pointer to plaintext length (updated). + * \return pointer to start of built record. + */ + unsigned char *(*encrypt)(const br_sslrec_out_class **ctx, + int record_type, unsigned version, + void *plaintext, size_t *len); +}; + +/** + * \brief Context for a no-encryption engine. + * + * The no-encryption engine processes outgoing records during the initial + * handshake, before encryption is applied. + */ +typedef struct { + /** \brief No-encryption engine vtable. */ + const br_sslrec_out_class *vtable; +} br_sslrec_out_clear_context; + +/** \brief Static, constant vtable for the no-encryption engine. */ +extern const br_sslrec_out_class br_sslrec_out_clear_vtable; + +/* ===================================================================== */ + +/** + * \brief Record decryption engine class, for CBC mode. + * + * This class type extends the decryption engine class with an + * initialisation method that receives the parameters needed + * for CBC processing: block cipher implementation, block cipher key, + * HMAC parameters (hash function, key, MAC length), and IV. If the + * IV is `NULL`, then a per-record IV will be used (TLS 1.1+). + */ +typedef struct br_sslrec_in_cbc_class_ br_sslrec_in_cbc_class; +struct br_sslrec_in_cbc_class_ { + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_in_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param bc_impl block cipher implementation (CBC decryption). + * \param bc_key block cipher key. + * \param bc_key_len block cipher key length (in bytes). + * \param dig_impl hash function for HMAC. + * \param mac_key HMAC key. + * \param mac_key_len HMAC key length (in bytes). + * \param mac_out_len HMAC output length (in bytes). + * \param iv initial IV (or `NULL`). + */ + void (*init)(const br_sslrec_in_cbc_class **ctx, + const br_block_cbcdec_class *bc_impl, + const void *bc_key, size_t bc_key_len, + const br_hash_class *dig_impl, + const void *mac_key, size_t mac_key_len, size_t mac_out_len, + const void *iv); +}; + +/** + * \brief Record encryption engine class, for CBC mode. + * + * This class type extends the encryption engine class with an + * initialisation method that receives the parameters needed + * for CBC processing: block cipher implementation, block cipher key, + * HMAC parameters (hash function, key, MAC length), and IV. If the + * IV is `NULL`, then a per-record IV will be used (TLS 1.1+). + */ +typedef struct br_sslrec_out_cbc_class_ br_sslrec_out_cbc_class; +struct br_sslrec_out_cbc_class_ { + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_out_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param bc_impl block cipher implementation (CBC encryption). + * \param bc_key block cipher key. + * \param bc_key_len block cipher key length (in bytes). + * \param dig_impl hash function for HMAC. + * \param mac_key HMAC key. + * \param mac_key_len HMAC key length (in bytes). + * \param mac_out_len HMAC output length (in bytes). + * \param iv initial IV (or `NULL`). + */ + void (*init)(const br_sslrec_out_cbc_class **ctx, + const br_block_cbcenc_class *bc_impl, + const void *bc_key, size_t bc_key_len, + const br_hash_class *dig_impl, + const void *mac_key, size_t mac_key_len, size_t mac_out_len, + const void *iv); +}; + +/** + * \brief Context structure for decrypting incoming records with + * CBC + HMAC. + * + * The first field points to the vtable. The other fields are opaque + * and shall not be accessed directly. + */ +typedef struct { + /** \brief Pointer to vtable. */ + const br_sslrec_in_cbc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint64_t seq; + union { + const br_block_cbcdec_class *vtable; + br_aes_gen_cbcdec_keys aes; + br_des_gen_cbcdec_keys des; + } bc; + br_hmac_key_context mac; + size_t mac_len; + unsigned char iv[16]; + int explicit_IV; +#endif +} br_sslrec_in_cbc_context; + +/** + * \brief Static, constant vtable for record decryption with CBC. + */ +extern const br_sslrec_in_cbc_class br_sslrec_in_cbc_vtable; + +/** + * \brief Context structure for encrypting outgoing records with + * CBC + HMAC. + * + * The first field points to the vtable. The other fields are opaque + * and shall not be accessed directly. + */ +typedef struct { + /** \brief Pointer to vtable. */ + const br_sslrec_out_cbc_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + uint64_t seq; + union { + const br_block_cbcenc_class *vtable; + br_aes_gen_cbcenc_keys aes; + br_des_gen_cbcenc_keys des; + } bc; + br_hmac_key_context mac; + size_t mac_len; + unsigned char iv[16]; + int explicit_IV; +#endif +} br_sslrec_out_cbc_context; + +/** + * \brief Static, constant vtable for record encryption with CBC. + */ +extern const br_sslrec_out_cbc_class br_sslrec_out_cbc_vtable; + +/* ===================================================================== */ + +/** + * \brief Record decryption engine class, for GCM mode. + * + * This class type extends the decryption engine class with an + * initialisation method that receives the parameters needed + * for GCM processing: block cipher implementation, block cipher key, + * GHASH implementation, and 4-byte IV. + */ +typedef struct br_sslrec_in_gcm_class_ br_sslrec_in_gcm_class; +struct br_sslrec_in_gcm_class_ { + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_in_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param bc_impl block cipher implementation (CTR). + * \param key block cipher key. + * \param key_len block cipher key length (in bytes). + * \param gh_impl GHASH implementation. + * \param iv static IV (4 bytes). + */ + void (*init)(const br_sslrec_in_gcm_class **ctx, + const br_block_ctr_class *bc_impl, + const void *key, size_t key_len, + br_ghash gh_impl, + const void *iv); +}; + +/** + * \brief Record encryption engine class, for GCM mode. + * + * This class type extends the encryption engine class with an + * initialisation method that receives the parameters needed + * for GCM processing: block cipher implementation, block cipher key, + * GHASH implementation, and 4-byte IV. + */ +typedef struct br_sslrec_out_gcm_class_ br_sslrec_out_gcm_class; +struct br_sslrec_out_gcm_class_ { + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_out_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param bc_impl block cipher implementation (CTR). + * \param key block cipher key. + * \param key_len block cipher key length (in bytes). + * \param gh_impl GHASH implementation. + * \param iv static IV (4 bytes). + */ + void (*init)(const br_sslrec_out_gcm_class **ctx, + const br_block_ctr_class *bc_impl, + const void *key, size_t key_len, + br_ghash gh_impl, + const void *iv); +}; + +/** + * \brief Context structure for processing records with GCM. + * + * The same context structure is used for encrypting and decrypting. + * + * The first field points to the vtable. The other fields are opaque + * and shall not be accessed directly. + */ +typedef struct { + /** \brief Pointer to vtable. */ + union { + const void *gen; + const br_sslrec_in_gcm_class *in; + const br_sslrec_out_gcm_class *out; + } vtable; +#ifndef BR_DOXYGEN_IGNORE + uint64_t seq; + union { + const br_block_ctr_class *vtable; + br_aes_gen_ctr_keys aes; + } bc; + br_ghash gh; + unsigned char iv[4]; + unsigned char h[16]; +#endif +} br_sslrec_gcm_context; + +/** + * \brief Static, constant vtable for record decryption with GCM. + */ +extern const br_sslrec_in_gcm_class br_sslrec_in_gcm_vtable; + +/** + * \brief Static, constant vtable for record encryption with GCM. + */ +extern const br_sslrec_out_gcm_class br_sslrec_out_gcm_vtable; + +/* ===================================================================== */ + +/** + * \brief Record decryption engine class, for ChaCha20+Poly1305. + * + * This class type extends the decryption engine class with an + * initialisation method that receives the parameters needed + * for ChaCha20+Poly1305 processing: ChaCha20 implementation, + * Poly1305 implementation, key, and 12-byte IV. + */ +typedef struct br_sslrec_in_chapol_class_ br_sslrec_in_chapol_class; +struct br_sslrec_in_chapol_class_ { + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_in_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param ichacha ChaCha20 implementation. + * \param ipoly Poly1305 implementation. + * \param key secret key (32 bytes). + * \param iv static IV (12 bytes). + */ + void (*init)(const br_sslrec_in_chapol_class **ctx, + br_chacha20_run ichacha, + br_poly1305_run ipoly, + const void *key, const void *iv); +}; + +/** + * \brief Record encryption engine class, for ChaCha20+Poly1305. + * + * This class type extends the encryption engine class with an + * initialisation method that receives the parameters needed + * for ChaCha20+Poly1305 processing: ChaCha20 implementation, + * Poly1305 implementation, key, and 12-byte IV. + */ +typedef struct br_sslrec_out_chapol_class_ br_sslrec_out_chapol_class; +struct br_sslrec_out_chapol_class_ { + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_out_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param ichacha ChaCha20 implementation. + * \param ipoly Poly1305 implementation. + * \param key secret key (32 bytes). + * \param iv static IV (12 bytes). + */ + void (*init)(const br_sslrec_out_chapol_class **ctx, + br_chacha20_run ichacha, + br_poly1305_run ipoly, + const void *key, const void *iv); +}; + +/** + * \brief Context structure for processing records with ChaCha20+Poly1305. + * + * The same context structure is used for encrypting and decrypting. + * + * The first field points to the vtable. The other fields are opaque + * and shall not be accessed directly. + */ +typedef struct { + /** \brief Pointer to vtable. */ + union { + const void *gen; + const br_sslrec_in_chapol_class *in; + const br_sslrec_out_chapol_class *out; + } vtable; +#ifndef BR_DOXYGEN_IGNORE + uint64_t seq; + unsigned char key[32]; + unsigned char iv[12]; + br_chacha20_run ichacha; + br_poly1305_run ipoly; +#endif +} br_sslrec_chapol_context; + +/** + * \brief Static, constant vtable for record decryption with ChaCha20+Poly1305. + */ +extern const br_sslrec_in_chapol_class br_sslrec_in_chapol_vtable; + +/** + * \brief Static, constant vtable for record encryption with ChaCha20+Poly1305. + */ +extern const br_sslrec_out_chapol_class br_sslrec_out_chapol_vtable; + +/* ===================================================================== */ + +/** + * \brief Type for session parameters, to be saved for session resumption. + */ +typedef struct { + /** \brief Session ID buffer. */ + unsigned char session_id[32]; + /** \brief Session ID length (in bytes, at most 32). */ + unsigned char session_id_len; + /** \brief Protocol version. */ + uint16_t version; + /** \brief Cipher suite. */ + uint16_t cipher_suite; + /** \brief Master secret. */ + unsigned char master_secret[48]; +} br_ssl_session_parameters; + +#ifndef BR_DOXYGEN_IGNORE +/* + * Maximum numnber of cipher suites supported by a client or server. + */ +#define BR_MAX_CIPHER_SUITES 40 +#endif + +/** + * \brief Context structure for SSL engine. + * + * This strucuture is common to the client and server; both the client + * context (`br_ssl_client_context`) and the server context + * (`br_ssl_server_context`) include a `br_ssl_engine_context` as their + * first field. + * + * The engine context manages records, including alerts, closures, and + * transitions to new encryption/MAC algorithms. Processing of handshake + * records is delegated to externally provided code. This structure + * should not be used directly. + * + * Structure contents are opaque and shall not be accessed directly. + */ +typedef struct { +#ifndef BR_DOXYGEN_IGNORE + /* + * The error code. When non-zero, then the state is "failed" and + * no I/O may occur until reset. + */ + int err; + + /* + * Configured I/O buffers. They are either disjoint, or identical. + */ + unsigned char *ibuf, *obuf; + size_t ibuf_len, obuf_len; + + /* + * Maximum fragment length applies to outgoing records; incoming + * records can be processed as long as they fit in the input + * buffer. It is guaranteed that incoming records at least as big + * as max_frag_len can be processed. + */ + uint16_t max_frag_len; + unsigned char log_max_frag_len; + unsigned char peer_log_max_frag_len; + + /* + * Buffering management registers. + */ + size_t ixa, ixb, ixc; + size_t oxa, oxb, oxc; + unsigned char iomode; + unsigned char incrypt; + + /* + * Shutdown flag: when set to non-zero, incoming record bytes + * will not be accepted anymore. This is used after a close_notify + * has been received: afterwards, the engine no longer claims that + * it could receive bytes from the transport medium. + */ + unsigned char shutdown_recv; + + /* + * 'record_type_in' is set to the incoming record type when the + * record header has been received. + * 'record_type_out' is used to make the next outgoing record + * header when it is ready to go. + */ + unsigned char record_type_in, record_type_out; + + /* + * When a record is received, its version is extracted: + * -- if 'version_in' is 0, then it is set to the received version; + * -- otherwise, if the received version is not identical to + * the 'version_in' contents, then a failure is reported. + * + * This implements the SSL requirement that all records shall + * use the negotiated protocol version, once decided (in the + * ServerHello). It is up to the handshake handler to adjust this + * field when necessary. + */ + uint16_t version_in; + + /* + * 'version_out' is used when the next outgoing record is ready + * to go. + */ + uint16_t version_out; + + /* + * Record handler contexts. + */ + union { + const br_sslrec_in_class *vtable; + br_sslrec_in_cbc_context cbc; + br_sslrec_gcm_context gcm; + br_sslrec_chapol_context chapol; + } in; + union { + const br_sslrec_out_class *vtable; + br_sslrec_out_clear_context clear; + br_sslrec_out_cbc_context cbc; + br_sslrec_gcm_context gcm; + br_sslrec_chapol_context chapol; + } out; + + /* + * The "application data" flag. Value: + * 0 handshake is in process, no application data acceptable + * 1 application data can be sent and received + * 2 closing, no application data can be sent, but some + * can still be received (and discarded) + */ + unsigned char application_data; + + /* + * Context RNG. + * + * rng_init_done is initially 0. It is set to 1 when the + * basic structure of the RNG is set, and 2 when some + * entropy has been pushed in. The value 2 marks the RNG + * as "properly seeded". + * + * rng_os_rand_done is initially 0. It is set to 1 when + * some seeding from the OS or hardware has been attempted. + */ + br_hmac_drbg_context rng; + int rng_init_done; + int rng_os_rand_done; + + /* + * Supported minimum and maximum versions, and cipher suites. + */ + uint16_t version_min; + uint16_t version_max; + uint16_t suites_buf[BR_MAX_CIPHER_SUITES]; + unsigned char suites_num; + + /* + * For clients, the server name to send as a SNI extension. For + * servers, the name received in the SNI extension (if any). + */ + char server_name[256]; + + /* + * "Security parameters". These are filled by the handshake + * handler, and used when switching encryption state. + */ + unsigned char client_random[32]; + unsigned char server_random[32]; + br_ssl_session_parameters session; + + /* + * ECDHE elements: curve and point from the peer. The server also + * uses that buffer for the point to send to the client. + */ + unsigned char ecdhe_curve; + unsigned char ecdhe_point[133]; + unsigned char ecdhe_point_len; + + /* + * Secure renegotiation (RFC 5746): 'reneg' can be: + * 0 first handshake (server support is not known) + * 1 peer does not support secure renegotiation + * 2 peer supports secure renegotiation + * + * The saved_finished buffer contains the client and the + * server "Finished" values from the last handshake, in + * that order (12 bytes each). + */ + unsigned char reneg; + unsigned char saved_finished[24]; + + /* + * Behavioural flags. + */ + uint32_t flags; + + /* + * Context variables for the handshake processor. The 'pad' must + * be large enough to accommodate an RSA-encrypted pre-master + * secret, or an RSA signature; since we want to support up to + * RSA-4096, this means at least 512 bytes. (Other pad usages + * require its length to be at least 256.) + */ + struct { + uint32_t *dp; + uint32_t *rp; + const unsigned char *ip; + } cpu; + uint32_t dp_stack[32]; + uint32_t rp_stack[32]; + unsigned char pad[512]; + unsigned char *hbuf_in, *hbuf_out, *saved_hbuf_out; + size_t hlen_in, hlen_out; + void (*hsrun)(void *ctx); + + /* + * The 'action' value communicates OOB information between the + * engine and the handshake processor. + * + * From the engine: + * 0 invocation triggered by I/O + * 1 invocation triggered by explicit close + * 2 invocation triggered by explicit renegotiation + */ + unsigned char action; + + /* + * State for alert messages. Value is either 0, or the value of + * the alert level byte (level is either 1 for warning, or 2 for + * fatal; we convert all other values to 'fatal'). + */ + unsigned char alert; + + /* + * Closure flags. This flag is set when a close_notify has been + * received from the peer. + */ + unsigned char close_received; + + /* + * Multi-hasher for the handshake messages. The handshake handler + * is responsible for resetting it when appropriate. + */ + br_multihash_context mhash; + + /* + * Pointer to the X.509 engine. The engine is supposed to be + * already initialized. It is used to validate the peer's + * certificate. + */ + const br_x509_class **x509ctx; + + /* + * Certificate chain to send. This is used by both client and + * server, when they send their respective Certificate messages. + * If chain_len is 0, then chain may be NULL. + */ + const br_x509_certificate *chain; + size_t chain_len; + const unsigned char *cert_cur; + size_t cert_len; + + /* + * List of supported protocol names (ALPN extension). If unset, + * (number of names is 0), then: + * - the client sends no ALPN extension; + * - the server ignores any incoming ALPN extension. + * + * Otherwise: + * - the client sends an ALPN extension with all the names; + * - the server selects the first protocol in its list that + * the client also supports, or fails (fatal alert 120) + * if the client sends an ALPN extension and there is no + * match. + * + * The 'selected_protocol' field contains 1+n if the matching + * name has index n in the list (the value is 0 if no match was + * performed, e.g. the peer did not send an ALPN extension). + */ + const char **protocol_names; + uint16_t protocol_names_num; + uint16_t selected_protocol; + + /* + * Pointers to implementations; left to NULL for unsupported + * functions. For the raw hash functions, implementations are + * referenced from the multihasher (mhash field). + */ + br_tls_prf_impl prf10; + br_tls_prf_impl prf_sha256; + br_tls_prf_impl prf_sha384; + const br_block_cbcenc_class *iaes_cbcenc; + const br_block_cbcdec_class *iaes_cbcdec; + const br_block_ctr_class *iaes_ctr; + const br_block_cbcenc_class *ides_cbcenc; + const br_block_cbcdec_class *ides_cbcdec; + br_ghash ighash; + br_chacha20_run ichacha; + br_poly1305_run ipoly; + const br_sslrec_in_cbc_class *icbc_in; + const br_sslrec_out_cbc_class *icbc_out; + const br_sslrec_in_gcm_class *igcm_in; + const br_sslrec_out_gcm_class *igcm_out; + const br_sslrec_in_chapol_class *ichapol_in; + const br_sslrec_out_chapol_class *ichapol_out; + const br_ec_impl *iec; + br_rsa_pkcs1_vrfy irsavrfy; + br_ecdsa_vrfy iecdsa; +#endif +} br_ssl_engine_context; + +/** + * \brief Get currently defined engine behavioural flags. + * + * \param cc SSL engine context. + * \return the flags. + */ +static inline uint32_t +br_ssl_engine_get_flags(br_ssl_engine_context *cc) +{ + return cc->flags; +} + +/** + * \brief Set all engine behavioural flags. + * + * \param cc SSL engine context. + * \param flags new value for all flags. + */ +static inline void +br_ssl_engine_set_all_flags(br_ssl_engine_context *cc, uint32_t flags) +{ + cc->flags = flags; +} + +/** + * \brief Set some engine behavioural flags. + * + * The flags set in the `flags` parameter are set in the context; other + * flags are untouched. + * + * \param cc SSL engine context. + * \param flags additional set flags. + */ +static inline void +br_ssl_engine_add_flags(br_ssl_engine_context *cc, uint32_t flags) +{ + cc->flags |= flags; +} + +/** + * \brief Clear some engine behavioural flags. + * + * The flags set in the `flags` parameter are cleared from the context; other + * flags are untouched. + * + * \param cc SSL engine context. + * \param flags flags to remove. + */ +static inline void +br_ssl_engine_remove_flags(br_ssl_engine_context *cc, uint32_t flags) +{ + cc->flags &= ~flags; +} + +/** + * \brief Behavioural flag: enforce server preferences. + * + * If this flag is set, then the server will enforce its own cipher suite + * preference order; otherwise, it follows the client preferences. + */ +#define BR_OPT_ENFORCE_SERVER_PREFERENCES ((uint32_t)1 << 0) + +/** + * \brief Behavioural flag: disable renegotiation. + * + * If this flag is set, then renegotiations are rejected unconditionally: + * they won't be honoured if asked for programmatically, and requests from + * the peer are rejected. + */ +#define BR_OPT_NO_RENEGOTIATION ((uint32_t)1 << 1) + +/** + * \brief Behavioural flag: tolerate lack of client authentication. + * + * If this flag is set in a server and the server requests a client + * certificate, but the authentication fails (the client does not send + * a certificate, or the client's certificate chain cannot be validated), + * then the connection keeps on. Without this flag, a failed client + * authentication terminates the connection. + * + * Notes: + * + * - If the client's certificate can be validated and its public key is + * supported, then a wrong signature value terminates the connection + * regardless of that flag. + * + * - If using full-static ECDH, then a failure to validate the client's + * certificate prevents the handshake from succeeding. + */ +#define BR_OPT_TOLERATE_NO_CLIENT_AUTH ((uint32_t)1 << 2) + +/** + * \brief Behavioural flag: fail on application protocol mismatch. + * + * The ALPN extension ([RFC 7301](https://tools.ietf.org/html/rfc7301)) + * allows the client to send a list of application protocol names, and + * the server to select one. A mismatch is one of the following occurrences: + * + * - On the client: the client sends a list of names, the server + * responds with a protocol name which is _not_ part of the list of + * names sent by the client. + * + * - On the server: the client sends a list of names, and the server + * is also configured with a list of names, but there is no common + * protocol name between the two lists. + * + * Normal behaviour in case of mismatch is to report no matching name + * (`br_ssl_engine_get_selected_protocol()` returns `NULL`) and carry on. + * If the flag is set, then a mismatch implies a protocol failure (if + * the mismatch is detected by the server, it will send a fatal alert). + * + * Note: even with this flag, `br_ssl_engine_get_selected_protocol()` + * may still return `NULL` if the client or the server does not send an + * ALPN extension at all. + */ +#define BR_OPT_FAIL_ON_ALPN_MISMATCH ((uint32_t)1 << 3) + +/** + * \brief Set the minimum and maximum supported protocol versions. + * + * The two provided versions MUST be supported by the implementation + * (i.e. TLS 1.0, 1.1 and 1.2), and `version_max` MUST NOT be lower + * than `version_min`. + * + * \param cc SSL engine context. + * \param version_min minimum supported TLS version. + * \param version_max maximum supported TLS version. + */ +static inline void +br_ssl_engine_set_versions(br_ssl_engine_context *cc, + unsigned version_min, unsigned version_max) +{ + cc->version_min = version_min; + cc->version_max = version_max; +} + +/** + * \brief Set the list of cipher suites advertised by this context. + * + * The provided array is copied into the context. It is the caller + * responsibility to ensure that all provided suites will be supported + * by the context. The engine context has enough room to receive _all_ + * suites supported by the implementation. The provided array MUST NOT + * contain duplicates. + * + * If the engine is for a client, the "signaling" pseudo-cipher suite + * `TLS_FALLBACK_SCSV` can be added at the end of the list, if the + * calling application is performing a voluntary downgrade (voluntary + * downgrades are not recommended, but if such a downgrade is done, then + * adding the fallback pseudo-suite is a good idea). + * + * \param cc SSL engine context. + * \param suites cipher suites. + * \param suites_num number of cipher suites. + */ +void br_ssl_engine_set_suites(br_ssl_engine_context *cc, + const uint16_t *suites, size_t suites_num); + +/** + * \brief Set the X.509 engine. + * + * The caller shall ensure that the X.509 engine is properly initialised. + * + * \param cc SSL engine context. + * \param x509ctx X.509 certificate validation context. + */ +static inline void +br_ssl_engine_set_x509(br_ssl_engine_context *cc, const br_x509_class **x509ctx) +{ + cc->x509ctx = x509ctx; +} + +/** + * \brief Set the supported protocol names. + * + * Protocol names are part of the ALPN extension ([RFC + * 7301](https://tools.ietf.org/html/rfc7301)). Each protocol name is a + * character string, containing no more than 255 characters (256 with the + * terminating zero). When names are set, then: + * + * - The client will send an ALPN extension, containing the names. If + * the server responds with an ALPN extension, the client will verify + * that the response contains one of its name, and report that name + * through `br_ssl_engine_get_selected_protocol()`. + * + * - The server will parse incoming ALPN extension (from clients), and + * try to find a common protocol; if none is found, the connection + * is aborted with a fatal alert. On match, a response ALPN extension + * is sent, and name is reported through + * `br_ssl_engine_get_selected_protocol()`. + * + * The provided array is linked in, and must remain valid while the + * connection is live. + * + * Names MUST NOT be empty. Names MUST NOT be longer than 255 characters + * (excluding the terminating 0). + * + * \param ctx SSL engine context. + * \param names list of protocol names (zero-terminated). + * \param num number of protocol names (MUST be 1 or more). + */ +static inline void +br_ssl_engine_set_protocol_names(br_ssl_engine_context *ctx, + const char **names, size_t num) +{ + ctx->protocol_names = names; + ctx->protocol_names_num = num; +} + +/** + * \brief Get the selected protocol. + * + * If this context was initialised with a non-empty list of protocol + * names, and both client and server sent ALPN extensions during the + * handshake, and a common name was found, then that name is returned. + * Otherwise, `NULL` is returned. + * + * The returned pointer is one of the pointers provided to the context + * with `br_ssl_engine_set_protocol_names()`. + * + * \return the selected protocol, or `NULL`. + */ +static inline const char * +br_ssl_engine_get_selected_protocol(br_ssl_engine_context *ctx) +{ + unsigned k; + + k = ctx->selected_protocol; + return (k == 0 || k == 0xFFFF) ? NULL : ctx->protocol_names[k - 1]; +} + +/** + * \brief Set a hash function implementation (by ID). + * + * Hash functions set with this call will be used for SSL/TLS specific + * usages, not X.509 certificate validation. Only "standard" hash functions + * may be set (MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512). If `impl` + * is `NULL`, then the hash function support is removed, not added. + * + * \param ctx SSL engine context. + * \param id hash function identifier. + * \param impl hash function implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_hash(br_ssl_engine_context *ctx, + int id, const br_hash_class *impl) +{ + br_multihash_setimpl(&ctx->mhash, id, impl); +} + +/** + * \brief Get a hash function implementation (by ID). + * + * This function retrieves a hash function implementation which was + * set with `br_ssl_engine_set_hash()`. + * + * \param ctx SSL engine context. + * \param id hash function identifier. + * \return the hash function implementation (or `NULL`). + */ +static inline const br_hash_class * +br_ssl_engine_get_hash(br_ssl_engine_context *ctx, int id) +{ + return br_multihash_getimpl(&ctx->mhash, id); +} + +/** + * \brief Set the PRF implementation (for TLS 1.0 and 1.1). + * + * This function sets (or removes, if `impl` is `NULL`) the implemenation + * for the PRF used in TLS 1.0 and 1.1. + * + * \param cc SSL engine context. + * \param impl PRF implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_prf10(br_ssl_engine_context *cc, br_tls_prf_impl impl) +{ + cc->prf10 = impl; +} + +/** + * \brief Set the PRF implementation with SHA-256 (for TLS 1.2). + * + * This function sets (or removes, if `impl` is `NULL`) the implemenation + * for the SHA-256 variant of the PRF used in TLS 1.2. + * + * \param cc SSL engine context. + * \param impl PRF implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_prf_sha256(br_ssl_engine_context *cc, br_tls_prf_impl impl) +{ + cc->prf_sha256 = impl; +} + +/** + * \brief Set the PRF implementation with SHA-384 (for TLS 1.2). + * + * This function sets (or removes, if `impl` is `NULL`) the implemenation + * for the SHA-384 variant of the PRF used in TLS 1.2. + * + * \param cc SSL engine context. + * \param impl PRF implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_prf_sha384(br_ssl_engine_context *cc, br_tls_prf_impl impl) +{ + cc->prf_sha384 = impl; +} + +/** + * \brief Set the AES/CBC implementations. + * + * \param cc SSL engine context. + * \param impl_enc AES/CBC encryption implementation (or `NULL`). + * \param impl_dec AES/CBC decryption implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_aes_cbc(br_ssl_engine_context *cc, + const br_block_cbcenc_class *impl_enc, + const br_block_cbcdec_class *impl_dec) +{ + cc->iaes_cbcenc = impl_enc; + cc->iaes_cbcdec = impl_dec; +} + +/** + * \brief Set the "default" AES/CBC implementations. + * + * This function configures in the engine the AES implementations that + * should provide best runtime performance on the local system, while + * still being safe (in particular, constant-time). It also sets the + * handlers for CBC records. + * + * \param cc SSL engine context. + */ +void br_ssl_engine_set_default_aes_cbc(br_ssl_engine_context *cc); + +/** + * \brief Set the AES/CTR implementation. + * + * \param cc SSL engine context. + * \param impl AES/CTR encryption/decryption implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_aes_ctr(br_ssl_engine_context *cc, + const br_block_ctr_class *impl) +{ + cc->iaes_ctr = impl; +} + +/** + * \brief Set the "default" implementations for AES/GCM (AES/CTR + GHASH). + * + * This function configures in the engine the AES/CTR and GHASH + * implementation that should provide best runtime performance on the local + * system, while still being safe (in particular, constant-time). It also + * sets the handlers for GCM records. + * + * \param cc SSL engine context. + */ +void br_ssl_engine_set_default_aes_gcm(br_ssl_engine_context *cc); + +/** + * \brief Set the DES/CBC implementations. + * + * \param cc SSL engine context. + * \param impl_enc DES/CBC encryption implementation (or `NULL`). + * \param impl_dec DES/CBC decryption implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_des_cbc(br_ssl_engine_context *cc, + const br_block_cbcenc_class *impl_enc, + const br_block_cbcdec_class *impl_dec) +{ + cc->ides_cbcenc = impl_enc; + cc->ides_cbcdec = impl_dec; +} + +/** + * \brief Set the "default" DES/CBC implementations. + * + * This function configures in the engine the DES implementations that + * should provide best runtime performance on the local system, while + * still being safe (in particular, constant-time). It also sets the + * handlers for CBC records. + * + * \param cc SSL engine context. + */ +void br_ssl_engine_set_default_des_cbc(br_ssl_engine_context *cc); + +/** + * \brief Set the GHASH implementation (used in GCM mode). + * + * \param cc SSL engine context. + * \param impl GHASH implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_ghash(br_ssl_engine_context *cc, br_ghash impl) +{ + cc->ighash = impl; +} + +/** + * \brief Set the ChaCha20 implementation. + * + * \param cc SSL engine context. + * \param ichacha ChaCha20 implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_chacha20(br_ssl_engine_context *cc, + br_chacha20_run ichacha) +{ + cc->ichacha = ichacha; +} + +/** + * \brief Set the Poly1305 implementation. + * + * \param cc SSL engine context. + * \param ipoly Poly1305 implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_poly1305(br_ssl_engine_context *cc, + br_poly1305_run ipoly) +{ + cc->ipoly = ipoly; +} + +/** + * \brief Set the "default" ChaCha20 and Poly1305 implementations. + * + * This function configures in the engine the ChaCha20 and Poly1305 + * implementations that should provide best runtime performance on the + * local system, while still being safe (in particular, constant-time). + * It also sets the handlers for ChaCha20+Poly1305 records. + * + * \param cc SSL engine context. + */ +void br_ssl_engine_set_default_chapol(br_ssl_engine_context *cc); + +/** + * \brief Set the record encryption and decryption engines for CBC + HMAC. + * + * \param cc SSL engine context. + * \param impl_in record CBC decryption implementation (or `NULL`). + * \param impl_out record CBC encryption implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_cbc(br_ssl_engine_context *cc, + const br_sslrec_in_cbc_class *impl_in, + const br_sslrec_out_cbc_class *impl_out) +{ + cc->icbc_in = impl_in; + cc->icbc_out = impl_out; +} + +/** + * \brief Set the record encryption and decryption engines for GCM. + * + * \param cc SSL engine context. + * \param impl_in record GCM decryption implementation (or `NULL`). + * \param impl_out record GCM encryption implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_gcm(br_ssl_engine_context *cc, + const br_sslrec_in_gcm_class *impl_in, + const br_sslrec_out_gcm_class *impl_out) +{ + cc->igcm_in = impl_in; + cc->igcm_out = impl_out; +} + +/** + * \brief Set the record encryption and decryption engines for + * ChaCha20+Poly1305. + * + * \param cc SSL engine context. + * \param impl_in record ChaCha20 decryption implementation (or `NULL`). + * \param impl_out record ChaCha20 encryption implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_chapol(br_ssl_engine_context *cc, + const br_sslrec_in_chapol_class *impl_in, + const br_sslrec_out_chapol_class *impl_out) +{ + cc->ichapol_in = impl_in; + cc->ichapol_out = impl_out; +} + +/** + * \brief Set the EC implementation. + * + * The elliptic curve implementation will be used for ECDH and ECDHE + * cipher suites, and for ECDSA support. + * + * \param cc SSL engine context. + * \param iec EC implementation (or `NULL`). + */ +static inline void +br_ssl_engine_set_ec(br_ssl_engine_context *cc, const br_ec_impl *iec) +{ + cc->iec = iec; +} + +/** + * \brief Set the "default" EC implementation. + * + * This function sets the elliptic curve implementation for ECDH and + * ECDHE cipher suites, and for ECDSA support. It selects the fastest + * implementation on the current system. + * + * \param cc SSL engine context. + */ +void br_ssl_engine_set_default_ec(br_ssl_engine_context *cc); + +/** + * \brief Get the EC implementation configured in the provided engine. + * + * \param cc SSL engine context. + * \return the EC implementation. + */ +static inline const br_ec_impl * +br_ssl_engine_get_ec(br_ssl_engine_context *cc) +{ + return cc->iec; +} + +/** + * \brief Set the RSA signature verification implementation. + * + * On the client, this is used to verify the server's signature on its + * ServerKeyExchange message (for ECDHE_RSA cipher suites). On the server, + * this is used to verify the client's CertificateVerify message (if a + * client certificate is requested, and that certificate contains a RSA key). + * + * \param cc SSL engine context. + * \param irsavrfy RSA signature verification implementation. + */ +static inline void +br_ssl_engine_set_rsavrfy(br_ssl_engine_context *cc, br_rsa_pkcs1_vrfy irsavrfy) +{ + cc->irsavrfy = irsavrfy; +} + +/** + * \brief Set the "default" RSA implementation (signature verification). + * + * This function sets the RSA implementation (signature verification) + * to the fastest implementation available on the current platform. + * + * \param cc SSL engine context. + */ +void br_ssl_engine_set_default_rsavrfy(br_ssl_engine_context *cc); + +/** + * \brief Get the RSA implementation (signature verification) configured + * in the provided engine. + * + * \param cc SSL engine context. + * \return the RSA signature verification implementation. + */ +static inline br_rsa_pkcs1_vrfy +br_ssl_engine_get_rsavrfy(br_ssl_engine_context *cc) +{ + return cc->irsavrfy; +} + +/* + * \brief Set the ECDSA implementation (signature verification). + * + * On the client, this is used to verify the server's signature on its + * ServerKeyExchange message (for ECDHE_ECDSA cipher suites). On the server, + * this is used to verify the client's CertificateVerify message (if a + * client certificate is requested, that certificate contains an EC key, + * and full-static ECDH is not used). + * + * The ECDSA implementation will use the EC core implementation configured + * in the engine context. + * + * \param cc client context. + * \param iecdsa ECDSA verification implementation. + */ +static inline void +br_ssl_engine_set_ecdsa(br_ssl_engine_context *cc, br_ecdsa_vrfy iecdsa) +{ + cc->iecdsa = iecdsa; +} + +/** + * \brief Set the "default" ECDSA implementation (signature verification). + * + * This function sets the ECDSA implementation (signature verification) + * to the fastest implementation available on the current platform. This + * call also sets the elliptic curve implementation itself, there again + * to the fastest EC implementation available. + * + * \param cc SSL engine context. + */ +void br_ssl_engine_set_default_ecdsa(br_ssl_engine_context *cc); + +/** + * \brief Get the ECDSA implementation (signature verification) configured + * in the provided engine. + * + * \param cc SSL engine context. + * \return the ECDSA signature verification implementation. + */ +static inline br_ecdsa_vrfy +br_ssl_engine_get_ecdsa(br_ssl_engine_context *cc) +{ + return cc->iecdsa; +} + +/** + * \brief Set the I/O buffer for the SSL engine. + * + * Once this call has been made, `br_ssl_client_reset()` or + * `br_ssl_server_reset()` MUST be called before using the context. + * + * The provided buffer will be used as long as the engine context is + * used. The caller is responsible for keeping it available. + * + * If `bidi` is 0, then the engine will operate in half-duplex mode + * (it won't be able to send data while there is unprocessed incoming + * data in the buffer, and it won't be able to receive data while there + * is unsent data in the buffer). The optimal buffer size in half-duplex + * mode is `BR_SSL_BUFSIZE_MONO`; if the buffer is larger, then extra + * bytes are ignored. If the buffer is smaller, then this limits the + * capacity of the engine to support all allowed record sizes. + * + * If `bidi` is 1, then the engine will split the buffer into two + * parts, for separate handling of outgoing and incoming data. This + * enables full-duplex processing, but requires more RAM. The optimal + * buffer size in full-duplex mode is `BR_SSL_BUFSIZE_BIDI`; if the + * buffer is larger, then extra bytes are ignored. If the buffer is + * smaller, then the split will favour the incoming part, so that + * interoperability is maximised. + * + * \param cc SSL engine context + * \param iobuf I/O buffer. + * \param iobuf_len I/O buffer length (in bytes). + * \param bidi non-zero for full-duplex mode. + */ +void br_ssl_engine_set_buffer(br_ssl_engine_context *cc, + void *iobuf, size_t iobuf_len, int bidi); + +/** + * \brief Set the I/O buffers for the SSL engine. + * + * Once this call has been made, `br_ssl_client_reset()` or + * `br_ssl_server_reset()` MUST be called before using the context. + * + * This function is similar to `br_ssl_engine_set_buffer()`, except + * that it enforces full-duplex mode, and the two I/O buffers are + * provided as separate chunks. + * + * The macros `BR_SSL_BUFSIZE_INPUT` and `BR_SSL_BUFSIZE_OUTPUT` + * evaluate to the optimal (maximum) sizes for the input and output + * buffer, respectively. + * + * \param cc SSL engine context + * \param ibuf input buffer. + * \param ibuf_len input buffer length (in bytes). + * \param obuf output buffer. + * \param obuf_len output buffer length (in bytes). + */ +void br_ssl_engine_set_buffers_bidi(br_ssl_engine_context *cc, + void *ibuf, size_t ibuf_len, void *obuf, size_t obuf_len); + +/** + * \brief Inject some "initial entropy" in the context. + * + * This entropy will be added to what can be obtained from the + * underlying operating system, if that OS is supported. + * + * This function may be called several times; all injected entropy chunks + * are cumulatively mixed. + * + * If entropy gathering from the OS is supported and compiled in, then this + * step is optional. Otherwise, it is mandatory to inject randomness, and + * the caller MUST take care to push (as one or several successive calls) + * enough entropy to achieve cryptographic resistance (at least 80 bits, + * preferably 128 or more). The engine will report an error if no entropy + * was provided and none can be obtained from the OS. + * + * Take care that this function cannot assess the cryptographic quality of + * the provided bytes. + * + * In all generality, "entropy" must here be considered to mean "that + * which the attacker cannot predict". If your OS/architecture does not + * have a suitable source of randomness, then you can make do with the + * combination of a large enough secret value (possibly a copy of an + * asymmetric private key that you also store on the system) AND a + * non-repeating value (e.g. current time, provided that the local clock + * cannot be reset or altered by the attacker). + * + * \param cc SSL engine context. + * \param data extra entropy to inject. + * \param len length of the extra data (in bytes). + */ +void br_ssl_engine_inject_entropy(br_ssl_engine_context *cc, + const void *data, size_t len); + +/** + * \brief Get the "server name" in this engine. + * + * For clients, this is the name provided with `br_ssl_client_reset()`; + * for servers, this is the name received from the client as part of the + * ClientHello message. If there is no such name (e.g. the client did + * not send an SNI extension) then the returned string is empty + * (returned pointer points to a byte of value 0). + * + * The returned pointer refers to a buffer inside the context, which may + * be overwritten as part of normal SSL activity (even within the same + * connection, if a renegotiation occurs). + * + * \param cc SSL engine context. + * \return the server name (possibly empty). + */ +static inline const char * +br_ssl_engine_get_server_name(const br_ssl_engine_context *cc) +{ + return cc->server_name; +} + +/** + * \brief Get the protocol version. + * + * This function returns the protocol version that is used by the + * engine. That value is set after sending (for a server) or receiving + * (for a client) the ServerHello message. + * + * \param cc SSL engine context. + * \return the protocol version. + */ +static inline unsigned +br_ssl_engine_get_version(const br_ssl_engine_context *cc) +{ + return cc->session.version; +} + +/** + * \brief Get a copy of the session parameters. + * + * The session parameters are filled during the handshake, so this + * function shall not be called before completion of the handshake. + * The initial handshake is completed when the context first allows + * application data to be injected. + * + * This function copies the current session parameters into the provided + * structure. Beware that the session parameters include the master + * secret, which is sensitive data, to handle with great care. + * + * \param cc SSL engine context. + * \param pp destination structure for the session parameters. + */ +static inline void +br_ssl_engine_get_session_parameters(const br_ssl_engine_context *cc, + br_ssl_session_parameters *pp) +{ + memcpy(pp, &cc->session, sizeof *pp); +} + +/** + * \brief Set the session parameters to the provided values. + * + * This function is meant to be used in the client, before doing a new + * handshake; a session resumption will be attempted with these + * parameters. In the server, this function has no effect. + * + * \param cc SSL engine context. + * \param pp source structure for the session parameters. + */ +static inline void +br_ssl_engine_set_session_parameters(br_ssl_engine_context *cc, + const br_ssl_session_parameters *pp) +{ + memcpy(&cc->session, pp, sizeof *pp); +} + +/** + * \brief Get identifier for the curve used for key exchange. + * + * If the cipher suite uses ECDHE, then this function returns the + * identifier for the curve used for transient parameters. This is + * defined during the course of the handshake, when the ServerKeyExchange + * is sent (on the server) or received (on the client). If the + * cipher suite does not use ECDHE (e.g. static ECDH, or RSA key + * exchange), then this value is indeterminate. + * + * @param cc SSL engine context. + * @return the ECDHE curve identifier. + */ +static inline int +br_ssl_engine_get_ecdhe_curve(br_ssl_engine_context *cc) +{ + return cc->ecdhe_curve; +} + +/** + * \brief Get the current engine state. + * + * An SSL engine (client or server) has, at any time, a state which is + * the combination of zero, one or more of these flags: + * + * - `BR_SSL_CLOSED` + * + * Engine is finished, no more I/O (until next reset). + * + * - `BR_SSL_SENDREC` + * + * Engine has some bytes to send to the peer. + * + * - `BR_SSL_RECVREC` + * + * Engine expects some bytes from the peer. + * + * - `BR_SSL_SENDAPP` + * + * Engine may receive application data to send (or flush). + * + * - `BR_SSL_RECVAPP` + * + * Engine has obtained some application data from the peer, + * that should be read by the caller. + * + * If no flag at all is set (state value is 0), then the engine is not + * fully initialised yet. + * + * The `BR_SSL_CLOSED` flag is exclusive; when it is set, no other flag + * is set. To distinguish between a normal closure and an error, use + * `br_ssl_engine_last_error()`. + * + * Generally speaking, `BR_SSL_SENDREC` and `BR_SSL_SENDAPP` are mutually + * exclusive: the input buffer, at any point, either accumulates + * plaintext data, or contains an assembled record that is being sent. + * Similarly, `BR_SSL_RECVREC` and `BR_SSL_RECVAPP` are mutually exclusive. + * This may change in a future library version. + * + * \param cc SSL engine context. + * \return the current engine state. + */ +unsigned br_ssl_engine_current_state(const br_ssl_engine_context *cc); + +/** \brief SSL engine state: closed or failed. */ +#define BR_SSL_CLOSED 0x0001 +/** \brief SSL engine state: record data is ready to be sent to the peer. */ +#define BR_SSL_SENDREC 0x0002 +/** \brief SSL engine state: engine may receive records from the peer. */ +#define BR_SSL_RECVREC 0x0004 +/** \brief SSL engine state: engine may accept application data to send. */ +#define BR_SSL_SENDAPP 0x0008 +/** \brief SSL engine state: engine has received application data. */ +#define BR_SSL_RECVAPP 0x0010 + +/** + * \brief Get the engine error indicator. + * + * The error indicator is `BR_ERR_OK` (0) if no error was encountered + * since the last call to `br_ssl_client_reset()` or + * `br_ssl_server_reset()`. Other status values are "sticky": they + * remain set, and prevent all I/O activity, until cleared. Only the + * reset calls clear the error indicator. + * + * \param cc SSL engine context. + * \return 0, or a non-zero error code. + */ +static inline int +br_ssl_engine_last_error(const br_ssl_engine_context *cc) +{ + return cc->err; +} + +/* + * There are four I/O operations, each identified by a symbolic name: + * + * sendapp inject application data in the engine + * recvapp retrieving application data from the engine + * sendrec sending records on the transport medium + * recvrec receiving records from the transport medium + * + * Terminology works thus: in a layered model where the SSL engine sits + * between the application and the network, "send" designates operations + * where bytes flow from application to network, and "recv" for the + * reverse operation. Application data (the plaintext that is to be + * conveyed through SSL) is "app", while encrypted records are "rec". + * Note that from the SSL engine point of view, "sendapp" and "recvrec" + * designate bytes that enter the engine ("inject" operation), while + * "recvapp" and "sendrec" designate bytes that exit the engine + * ("extract" operation). + * + * For the operation 'xxx', two functions are defined: + * + * br_ssl_engine_xxx_buf + * Returns a pointer and length to the buffer to use for that + * operation. '*len' is set to the number of bytes that may be read + * from the buffer (extract operation) or written to the buffer + * (inject operation). If no byte may be exchanged for that operation + * at that point, then '*len' is set to zero, and NULL is returned. + * The engine state is unmodified by this call. + * + * br_ssl_engine_xxx_ack + * Informs the engine that 'len' bytes have been read from the buffer + * (extract operation) or written to the buffer (inject operation). + * The 'len' value MUST NOT be zero. The 'len' value MUST NOT exceed + * that which was obtained from a preceeding br_ssl_engine_xxx_buf() + * call. + */ + +/** + * \brief Get buffer for application data to send. + * + * If the engine is ready to accept application data to send to the + * peer, then this call returns a pointer to the buffer where such + * data shall be written, and its length is written in `*len`. + * Otherwise, `*len` is set to 0 and `NULL` is returned. + * + * \param cc SSL engine context. + * \param len receives the application data output buffer length, or 0. + * \return the application data output buffer, or `NULL`. + */ +unsigned char *br_ssl_engine_sendapp_buf( + const br_ssl_engine_context *cc, size_t *len); + +/** + * \brief Inform the engine of some new application data. + * + * After writing `len` bytes in the buffer returned by + * `br_ssl_engine_sendapp_buf()`, the application shall call this + * function to trigger any relevant processing. The `len` parameter + * MUST NOT be 0, and MUST NOT exceed the value obtained in the + * `br_ssl_engine_sendapp_buf()` call. + * + * \param cc SSL engine context. + * \param len number of bytes pushed (not zero). + */ +void br_ssl_engine_sendapp_ack(br_ssl_engine_context *cc, size_t len); + +/** + * \brief Get buffer for received application data. + * + * If the engine has received application data from the peer, hen this + * call returns a pointer to the buffer from where such data shall be + * read, and its length is written in `*len`. Otherwise, `*len` is set + * to 0 and `NULL` is returned. + * + * \param cc SSL engine context. + * \param len receives the application data input buffer length, or 0. + * \return the application data input buffer, or `NULL`. + */ +unsigned char *br_ssl_engine_recvapp_buf( + const br_ssl_engine_context *cc, size_t *len); + +/** + * \brief Acknowledge some received application data. + * + * After reading `len` bytes from the buffer returned by + * `br_ssl_engine_recvapp_buf()`, the application shall call this + * function to trigger any relevant processing. The `len` parameter + * MUST NOT be 0, and MUST NOT exceed the value obtained in the + * `br_ssl_engine_recvapp_buf()` call. + * + * \param cc SSL engine context. + * \param len number of bytes read (not zero). + */ +void br_ssl_engine_recvapp_ack(br_ssl_engine_context *cc, size_t len); + +/** + * \brief Get buffer for record data to send. + * + * If the engine has prepared some records to send to the peer, then this + * call returns a pointer to the buffer from where such data shall be + * read, and its length is written in `*len`. Otherwise, `*len` is set + * to 0 and `NULL` is returned. + * + * \param cc SSL engine context. + * \param len receives the record data output buffer length, or 0. + * \return the record data output buffer, or `NULL`. + */ +unsigned char *br_ssl_engine_sendrec_buf( + const br_ssl_engine_context *cc, size_t *len); + +/** + * \brief Acknowledge some sent record data. + * + * After reading `len` bytes from the buffer returned by + * `br_ssl_engine_sendrec_buf()`, the application shall call this + * function to trigger any relevant processing. The `len` parameter + * MUST NOT be 0, and MUST NOT exceed the value obtained in the + * `br_ssl_engine_sendrec_buf()` call. + * + * \param cc SSL engine context. + * \param len number of bytes read (not zero). + */ +void br_ssl_engine_sendrec_ack(br_ssl_engine_context *cc, size_t len); + +/** + * \brief Get buffer for incoming records. + * + * If the engine is ready to accept records from the peer, then this + * call returns a pointer to the buffer where such data shall be + * written, and its length is written in `*len`. Otherwise, `*len` is + * set to 0 and `NULL` is returned. + * + * \param cc SSL engine context. + * \param len receives the record data input buffer length, or 0. + * \return the record data input buffer, or `NULL`. + */ +unsigned char *br_ssl_engine_recvrec_buf( + const br_ssl_engine_context *cc, size_t *len); + +/** + * \brief Inform the engine of some new record data. + * + * After writing `len` bytes in the buffer returned by + * `br_ssl_engine_recvrec_buf()`, the application shall call this + * function to trigger any relevant processing. The `len` parameter + * MUST NOT be 0, and MUST NOT exceed the value obtained in the + * `br_ssl_engine_recvrec_buf()` call. + * + * \param cc SSL engine context. + * \param len number of bytes pushed (not zero). + */ +void br_ssl_engine_recvrec_ack(br_ssl_engine_context *cc, size_t len); + +/** + * \brief Flush buffered application data. + * + * If some application data has been buffered in the engine, then wrap + * it into a record and mark it for sending. If no application data has + * been buffered but the engine would be ready to accept some, AND the + * `force` parameter is non-zero, then an empty record is assembled and + * marked for sending. In all other cases, this function does nothing. + * + * Empty records are technically legal, but not all existing SSL/TLS + * implementations support them. Empty records can be useful as a + * transparent "keep-alive" mechanism to maintain some low-level + * network activity. + * + * \param cc SSL engine context. + * \param force non-zero to force sending an empty record. + */ +void br_ssl_engine_flush(br_ssl_engine_context *cc, int force); + +/** + * \brief Initiate a closure. + * + * If, at that point, the context is open and in ready state, then a + * `close_notify` alert is assembled and marked for sending; this + * triggers the closure protocol. Otherwise, no such alert is assembled. + * + * \param cc SSL engine context. + */ +void br_ssl_engine_close(br_ssl_engine_context *cc); + +/** + * \brief Initiate a renegotiation. + * + * If the engine is failed or closed, or if the peer is known not to + * support secure renegotiation (RFC 5746), or if renegotiations have + * been disabled with the `BR_OPT_NO_RENEGOTIATION` flag, or if there + * is buffered incoming application data, then this function returns 0 + * and nothing else happens. + * + * Otherwise, this function returns 1, and a renegotiation attempt is + * triggered (if a handshake is already ongoing at that point, then + * no new handshake is triggered). + * + * \param cc SSL engine context. + * \return 1 on success, 0 on error. + */ +int br_ssl_engine_renegotiate(br_ssl_engine_context *cc); + +/** + * \brief Export key material from a connected SSL engine (RFC 5705). + * + * This calls compute a secret key of arbitrary length from the master + * secret of a connected SSL engine. If the provided context is not + * currently in "application data" state (initial handshake is not + * finished, another handshake is ongoing, or the connection failed or + * was closed), then this function returns 0. Otherwise, a secret key of + * length `len` bytes is computed and written in the buffer pointed to + * by `dst`, and 1 is returned. + * + * The computed key follows the specification described in RFC 5705. + * That RFC includes two key computations, with and without a "context + * value". If `context` is `NULL`, then the variant without context is + * used; otherwise, the `context_len` bytes located at the address + * pointed to by `context` are used in the computation. Note that it + * is possible to have a "with context" key with a context length of + * zero bytes, by setting `context` to a non-`NULL` value but + * `context_len` to 0. + * + * When context bytes are used, the context length MUST NOT exceed + * 65535 bytes. + * + * \param cc SSL engine context. + * \param dst destination buffer for exported key. + * \param len exported key length (in bytes). + * \param label disambiguation label. + * \param context context value (or `NULL`). + * \param context_len context length (in bytes). + * \return 1 on success, 0 on error. + */ +int br_ssl_key_export(br_ssl_engine_context *cc, + void *dst, size_t len, const char *label, + const void *context, size_t context_len); + +/* + * Pre-declaration for the SSL client context. + */ +typedef struct br_ssl_client_context_ br_ssl_client_context; + +/** + * \brief Type for the client certificate, if requested by the server. + */ +typedef struct { + /** + * \brief Authentication type. + * + * This is either `BR_AUTH_RSA` (RSA signature), `BR_AUTH_ECDSA` + * (ECDSA signature), or `BR_AUTH_ECDH` (static ECDH key exchange). + */ + int auth_type; + + /** + * \brief Hash function for computing the CertificateVerify. + * + * This is the symbolic identifier for the hash function that + * will be used to produce the hash of handshake messages, to + * be signed into the CertificateVerify. For full static ECDH + * (client and server certificates are both EC in the same + * curve, and static ECDH is used), this value is set to -1. + * + * Take care that with TLS 1.0 and 1.1, that value MUST match + * the protocol requirements: value must be 0 (MD5+SHA-1) for + * a RSA signature, or 2 (SHA-1) for an ECDSA signature. Only + * TLS 1.2 allows for other hash functions. + */ + int hash_id; + + /** + * \brief Certificate chain to send to the server. + * + * This is an array of `br_x509_certificate` objects, each + * normally containing a DER-encoded certificate. The client + * code does not try to decode these elements. If there is no + * chain to send to the server, then this pointer shall be + * set to `NULL`. + */ + const br_x509_certificate *chain; + + /** + * \brief Certificate chain length (number of certificates). + * + * If there is no chain to send to the server, then this value + * shall be set to 0. + */ + size_t chain_len; + +} br_ssl_client_certificate; + +/* + * Note: the constants below for signatures match the TLS constants. + */ + +/** \brief Client authentication type: static ECDH. */ +#define BR_AUTH_ECDH 0 +/** \brief Client authentication type: RSA signature. */ +#define BR_AUTH_RSA 1 +/** \brief Client authentication type: ECDSA signature. */ +#define BR_AUTH_ECDSA 3 + +/** + * \brief Class type for a certificate handler (client side). + * + * A certificate handler selects a client certificate chain to send to + * the server, upon explicit request from that server. It receives + * the list of trust anchor DN from the server, and supported types + * of certificates and signatures, and returns the chain to use. It + * is also invoked to perform the corresponding private key operation + * (a signature, or an ECDH computation). + * + * The SSL client engine will first push the trust anchor DN with + * `start_name_list()`, `start_name()`, `append_name()`, `end_name()` + * and `end_name_list()`. Then it will call `choose()`, to select the + * actual chain (and signature/hash algorithms). Finally, it will call + * either `do_sign()` or `do_keyx()`, depending on the algorithm choices. + */ +typedef struct br_ssl_client_certificate_class_ br_ssl_client_certificate_class; +struct br_ssl_client_certificate_class_ { + /** + * \brief Context size (in bytes). + */ + size_t context_size; + + /** + * \brief Begin reception of a list of trust anchor names. This + * is called while parsing the incoming CertificateRequest. + * + * \param pctx certificate handler context. + */ + void (*start_name_list)(const br_ssl_client_certificate_class **pctx); + + /** + * \brief Begin reception of a new trust anchor name. + * + * The total encoded name length is provided; it is less than + * 65535 bytes. + * + * \param pctx certificate handler context. + * \param len encoded name length (in bytes). + */ + void (*start_name)(const br_ssl_client_certificate_class **pctx, + size_t len); + + /** + * \brief Receive some more bytes for the current trust anchor name. + * + * The provided reference (`data`) points to a transient buffer + * they may be reused as soon as this function returns. The chunk + * length (`len`) is never zero. + * + * \param pctx certificate handler context. + * \param data anchor name chunk. + * \param len anchor name chunk length (in bytes). + */ + void (*append_name)(const br_ssl_client_certificate_class **pctx, + const unsigned char *data, size_t len); + + /** + * \brief End current trust anchor name. + * + * This function is called when all the encoded anchor name data + * has been provided. + * + * \param pctx certificate handler context. + */ + void (*end_name)(const br_ssl_client_certificate_class **pctx); + + /** + * \brief End list of trust anchor names. + * + * This function is called when all the anchor names in the + * CertificateRequest message have been obtained. + * + * \param pctx certificate handler context. + */ + void (*end_name_list)(const br_ssl_client_certificate_class **pctx); + + /** + * \brief Select client certificate and algorithms. + * + * This callback function shall fill the provided `choices` + * structure with the selected algorithms and certificate chain. + * The `hash_id`, `chain` and `chain_len` fields must be set. If + * the client cannot or does not wish to send a certificate, + * then it shall set `chain` to `NULL` and `chain_len` to 0. + * + * The `auth_types` parameter describes the authentication types, + * signature algorithms and hash functions that are supported by + * both the client context and the server, and compatible with + * the current protocol version. This is a bit field with the + * following contents: + * + * - If RSA signatures with hash function x are supported, then + * bit x is set. + * + * - If ECDSA signatures with hash function x are supported, + * then bit 8+x is set. + * + * - If static ECDH is supported, with a RSA-signed certificate, + * then bit 16 is set. + * + * - If static ECDH is supported, with an ECDSA-signed certificate, + * then bit 17 is set. + * + * Notes: + * + * - When using TLS 1.0 or 1.1, the hash function for RSA + * signatures is always the special MD5+SHA-1 (id 0), and the + * hash function for ECDSA signatures is always SHA-1 (id 2). + * + * - When using TLS 1.2, the list of hash functions is trimmed + * down to include only hash functions that the client context + * can support. The actual server list can be obtained with + * `br_ssl_client_get_server_hashes()`; that list may be used + * to select the certificate chain to send to the server. + * + * \param pctx certificate handler context. + * \param cc SSL client context. + * \param auth_types supported authentication types and algorithms. + * \param choices destination structure for the policy choices. + */ + void (*choose)(const br_ssl_client_certificate_class **pctx, + const br_ssl_client_context *cc, uint32_t auth_types, + br_ssl_client_certificate *choices); + + /** + * \brief Perform key exchange (client part). + * + * This callback is invoked in case of a full static ECDH key + * exchange: + * + * - the cipher suite uses `ECDH_RSA` or `ECDH_ECDSA`; + * + * - the server requests a client certificate; + * + * - the client has, and sends, a client certificate that + * uses an EC key in the same curve as the server's key, + * and chooses static ECDH (the `hash_id` field in the choice + * structure was set to -1). + * + * In that situation, this callback is invoked to compute the + * client-side ECDH: the provided `data` (of length `*len` bytes) + * is the server's public key point (as decoded from its + * certificate), and the client shall multiply that point with + * its own private key, and write back the X coordinate of the + * resulting point in the same buffer, starting at offset 0. + * The `*len` value shall be modified to designate the actual + * length of the X coordinate. + * + * The callback must uphold the following: + * + * - If the input array does not have the proper length for + * an encoded curve point, then an error (0) shall be reported. + * + * - If the input array has the proper length, then processing + * MUST be constant-time, even if the data is not a valid + * encoded point. + * + * - This callback MUST check that the input point is valid. + * + * Returned value is 1 on success, 0 on error. + * + * \param pctx certificate handler context. + * \param data server public key point. + * \param len public key point length / X coordinate length. + * \return 1 on success, 0 on error. + */ + uint32_t (*do_keyx)(const br_ssl_client_certificate_class **pctx, + unsigned char *data, size_t *len); + + /** + * \brief Perform a signature (client authentication). + * + * This callback is invoked when a client certificate was sent, + * and static ECDH is not used. It shall compute a signature, + * using the client's private key, over the provided hash value + * (which is the hash of all previous handshake messages). + * + * On input, the hash value to sign is in `data`, of size + * `hv_len`; the involved hash function is identified by + * `hash_id`. The signature shall be computed and written + * back into `data`; the total size of that buffer is `len` + * bytes. + * + * This callback shall verify that the signature length does not + * exceed `len` bytes, and abstain from writing the signature if + * it does not fit. + * + * For RSA signatures, the `hash_id` may be 0, in which case + * this is the special header-less signature specified in TLS 1.0 + * and 1.1, with a 36-byte hash value. Otherwise, normal PKCS#1 + * v1.5 signatures shall be computed. + * + * For ECDSA signatures, the signature value shall use the ASN.1 + * based encoding. + * + * Returned value is the signature length (in bytes), or 0 on error. + * + * \param pctx certificate handler context. + * \param hash_id hash function identifier. + * \param hv_len hash value length (in bytes). + * \param data input/output buffer (hash value, then signature). + * \param len total buffer length (in bytes). + * \return signature length (in bytes) on success, or 0 on error. + */ + size_t (*do_sign)(const br_ssl_client_certificate_class **pctx, + int hash_id, size_t hv_len, unsigned char *data, size_t len); +}; + +/** + * \brief A single-chain RSA client certificate handler. + * + * This handler uses a single certificate chain, with a RSA + * signature. The list of trust anchor DN is ignored. + * + * Apart from the first field (vtable pointer), its contents are + * opaque and shall not be accessed directly. + */ +typedef struct { + /** \brief Pointer to vtable. */ + const br_ssl_client_certificate_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + const br_x509_certificate *chain; + size_t chain_len; + const br_rsa_private_key *sk; + br_rsa_pkcs1_sign irsasign; +#endif +} br_ssl_client_certificate_rsa_context; + +/** + * \brief A single-chain EC client certificate handler. + * + * This handler uses a single certificate chain, with a RSA + * signature. The list of trust anchor DN is ignored. + * + * This handler may support both static ECDH, and ECDSA signatures + * (either usage may be selectively disabled). + * + * Apart from the first field (vtable pointer), its contents are + * opaque and shall not be accessed directly. + */ +typedef struct { + /** \brief Pointer to vtable. */ + const br_ssl_client_certificate_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + const br_x509_certificate *chain; + size_t chain_len; + const br_ec_private_key *sk; + unsigned allowed_usages; + unsigned issuer_key_type; + const br_multihash_context *mhash; + const br_ec_impl *iec; + br_ecdsa_sign iecdsa; +#endif +} br_ssl_client_certificate_ec_context; + +/** + * \brief Context structure for a SSL client. + * + * The first field (called `eng`) is the SSL engine; all functions that + * work on a `br_ssl_engine_context` structure shall take as parameter + * a pointer to that field. The other structure fields are opaque and + * must not be accessed directly. + */ +struct br_ssl_client_context_ { + /** + * \brief The encapsulated engine context. + */ + br_ssl_engine_context eng; + +#ifndef BR_DOXYGEN_IGNORE + /* + * Minimum ClientHello length; padding with an extension (RFC + * 7685) is added if necessary to match at least that length. + * Such padding is nominally unnecessary, but it has been used + * to work around some server implementation bugs. + */ + uint16_t min_clienthello_len; + + /* + * Bit field for algoithms (hash + signature) supported by the + * server when requesting a client certificate. + */ + uint32_t hashes; + + /* + * Server's public key curve. + */ + int server_curve; + + /* + * Context for certificate handler. + */ + const br_ssl_client_certificate_class **client_auth_vtable; + + /* + * Client authentication type. + */ + unsigned char auth_type; + + /* + * Hash function to use for the client signature. This is 0xFF + * if static ECDH is used. + */ + unsigned char hash_id; + + /* + * For the core certificate handlers, thus avoiding (in most + * cases) the need for an externally provided policy context. + */ + union { + const br_ssl_client_certificate_class *vtable; + br_ssl_client_certificate_rsa_context single_rsa; + br_ssl_client_certificate_ec_context single_ec; + } client_auth; + + /* + * Implementations. + */ + br_rsa_public irsapub; +#endif +}; + +/** + * \brief Get the hash functions and signature algorithms supported by + * the server. + * + * This value is a bit field: + * + * - If RSA (PKCS#1 v1.5) is supported with hash function of ID `x`, + * then bit `x` is set (hash function ID is 0 for the special MD5+SHA-1, + * or 2 to 6 for the SHA family). + * + * - If ECDSA is suported with hash function of ID `x`, then bit `8+x` + * is set. + * + * - Newer algorithms are symbolic 16-bit identifiers that do not + * represent signature algorithm and hash function separately. If + * the TLS-level identifier is `0x0800+x` for a `x` in the 0..15 + * range, then bit `16+x` is set. + * + * "New algorithms" are currently defined only in draft documents, so + * this support is subject to possible change. Right now (early 2017), + * this maps ed25519 (EdDSA on Curve25519) to bit 23, and ed448 (EdDSA + * on Curve448) to bit 24. If the identifiers on the wire change in + * future document, then the decoding mechanism in BearSSL will be + * amended to keep mapping ed25519 and ed448 on bits 23 and 24, + * respectively. Mapping of other new algorithms (e.g. RSA/PSS) is not + * guaranteed yet. + * + * \param cc client context. + * \return the server-supported hash functions and signature algorithms. + */ +static inline uint32_t +br_ssl_client_get_server_hashes(const br_ssl_client_context *cc) +{ + return cc->hashes; +} + +/** + * \brief Get the server key curve. + * + * This function returns the ID for the curve used by the server's public + * key. This is set when the server's certificate chain is processed; + * this value is 0 if the server's key is not an EC key. + * + * \return the server's public key curve ID, or 0. + */ +static inline int +br_ssl_client_get_server_curve(const br_ssl_client_context *cc) +{ + return cc->server_curve; +} + +/* + * Each br_ssl_client_init_xxx() function sets the list of supported + * cipher suites and used implementations, as specified by the profile + * name 'xxx'. Defined profile names are: + * + * full all supported versions and suites; constant-time implementations + * TODO: add other profiles + */ + +/** + * \brief SSL client profile: full. + * + * This function initialises the provided SSL client context with + * all supported algorithms and cipher suites. It also initialises + * a companion X.509 validation engine with all supported algorithms, + * and the provided trust anchors; the X.509 engine will be used by + * the client context to validate the server's certificate. + * + * \param cc client context to initialise. + * \param xc X.509 validation context to initialise. + * \param trust_anchors trust anchors to use. + * \param trust_anchors_num number of trust anchors. + */ +void br_ssl_client_init_full(br_ssl_client_context *cc, + br_x509_minimal_context *xc, + const br_x509_trust_anchor *trust_anchors, size_t trust_anchors_num); + +/** + * \brief Clear the complete contents of a SSL client context. + * + * Everything is cleared, including the reference to the configured buffer, + * implementations, cipher suites and state. This is a preparatory step + * to assembling a custom profile. + * + * \param cc client context to clear. + */ +void br_ssl_client_zero(br_ssl_client_context *cc); + +/** + * \brief Set an externally provided client certificate handler context. + * + * The handler's methods are invoked when the server requests a client + * certificate. + * + * \param cc client context. + * \param pctx certificate handler context (pointer to its vtable field). + */ +static inline void +br_ssl_client_set_client_certificate(br_ssl_client_context *cc, + const br_ssl_client_certificate_class **pctx) +{ + cc->client_auth_vtable = pctx; +} + +/** + * \brief Set the RSA public-key operations implementation. + * + * This will be used to encrypt the pre-master secret with the server's + * RSA public key (RSA-encryption cipher suites only). + * + * \param cc client context. + * \param irsapub RSA public-key encryption implementation. + */ +static inline void +br_ssl_client_set_rsapub(br_ssl_client_context *cc, br_rsa_public irsapub) +{ + cc->irsapub = irsapub; +} + +/** + * \brief Set the "default" RSA implementation for public-key operations. + * + * This sets the RSA implementation in the client context (for encrypting + * the pre-master secret, in `TLS_RSA_*` cipher suites) to the fastest + * available on the current platform. + * + * \param cc client context. + */ +void br_ssl_client_set_default_rsapub(br_ssl_client_context *cc); + +/** + * \brief Set the minimum ClientHello length (RFC 7685 padding). + * + * If this value is set and the ClientHello would be shorter, then + * the Pad ClientHello extension will be added with enough padding bytes + * to reach the target size. Because of the extension header, the resulting + * size will sometimes be slightly more than `len` bytes if the target + * size cannot be exactly met. + * + * The target length relates to the _contents_ of the ClientHello, not + * counting its 4-byte header. For instance, if `len` is set to 512, + * then the padding will bring the ClientHello size to 516 bytes with its + * header, and 521 bytes when counting the 5-byte record header. + * + * \param cc client context. + * \param len minimum ClientHello length (in bytes). + */ +static inline void +br_ssl_client_set_min_clienthello_len(br_ssl_client_context *cc, uint16_t len) +{ + cc->min_clienthello_len = len; +} + +/** + * \brief Prepare or reset a client context for a new connection. + * + * The `server_name` parameter is used to fill the SNI extension; the + * X.509 "minimal" engine will also match that name against the server + * names included in the server's certificate. If the parameter is + * `NULL` then no SNI extension will be sent, and the X.509 "minimal" + * engine (if used for server certificate validation) will not check + * presence of any specific name in the received certificate. + * + * Therefore, setting the `server_name` to `NULL` shall be reserved + * to cases where alternate or additional methods are used to ascertain + * that the right server public key is used (e.g. a "known key" model). + * + * If `resume_session` is non-zero and the context was previously used + * then the session parameters may be reused (depending on whether the + * server previously sent a non-empty session ID, and accepts the session + * resumption). The session parameters for session resumption can also + * be set explicitly with `br_ssl_engine_set_session_parameters()`. + * + * On failure, the context is marked as failed, and this function + * returns 0. A possible failure condition is when no initial entropy + * was injected, and none could be obtained from the OS (either OS + * randomness gathering is not supported, or it failed). + * + * \param cc client context. + * \param server_name target server name, or `NULL`. + * \param resume_session non-zero to try session resumption. + * \return 0 on failure, 1 on success. + */ +int br_ssl_client_reset(br_ssl_client_context *cc, + const char *server_name, int resume_session); + +/** + * \brief Forget any session in the context. + * + * This means that the next handshake that uses this context will + * necessarily be a full handshake (this applies both to new connections + * and to renegotiations). + * + * \param cc client context. + */ +static inline void +br_ssl_client_forget_session(br_ssl_client_context *cc) +{ + cc->eng.session.session_id_len = 0; +} + +/** + * \brief Set client certificate chain and key (single RSA case). + * + * This function sets a client certificate chain, that the client will + * send to the server whenever a client certificate is requested. This + * certificate uses an RSA public key; the corresponding private key is + * invoked for authentication. Trust anchor names sent by the server are + * ignored. + * + * The provided chain and private key are linked in the client context; + * they must remain valid as long as they may be used, i.e. normally + * for the duration of the connection, since they might be invoked + * again upon renegotiations. + * + * \param cc SSL client context. + * \param chain client certificate chain (SSL order: EE comes first). + * \param chain_len client chain length (number of certificates). + * \param sk client private key. + * \param irsasign RSA signature implementation (PKCS#1 v1.5). + */ +void br_ssl_client_set_single_rsa(br_ssl_client_context *cc, + const br_x509_certificate *chain, size_t chain_len, + const br_rsa_private_key *sk, br_rsa_pkcs1_sign irsasign); + +/* + * \brief Set the client certificate chain and key (single EC case). + * + * This function sets a client certificate chain, that the client will + * send to the server whenever a client certificate is requested. This + * certificate uses an EC public key; the corresponding private key is + * invoked for authentication. Trust anchor names sent by the server are + * ignored. + * + * The provided chain and private key are linked in the client context; + * they must remain valid as long as they may be used, i.e. normally + * for the duration of the connection, since they might be invoked + * again upon renegotiations. + * + * The `allowed_usages` is a combination of usages, namely + * `BR_KEYTYPE_KEYX` and/or `BR_KEYTYPE_SIGN`. The `BR_KEYTYPE_KEYX` + * value allows full static ECDH, while the `BR_KEYTYPE_SIGN` value + * allows ECDSA signatures. If ECDSA signatures are used, then an ECDSA + * signature implementation must be provided; otherwise, the `iecdsa` + * parameter may be 0. + * + * The `cert_issuer_key_type` value is either `BR_KEYTYPE_RSA` or + * `BR_KEYTYPE_EC`; it is the type of the public key used the the CA + * that issued (signed) the client certificate. That value is used with + * full static ECDH: support of the certificate by the server depends + * on how the certificate was signed. (Note: when using TLS 1.2, this + * parameter is ignored; but its value matters for TLS 1.0 and 1.1.) + * + * \param cc server context. + * \param chain server certificate chain to send. + * \param chain_len chain length (number of certificates). + * \param sk server private key (EC). + * \param allowed_usages allowed private key usages. + * \param cert_issuer_key_type issuing CA's key type. + * \param iec EC core implementation. + * \param iecdsa ECDSA signature implementation ("asn1" format). + */ +void br_ssl_client_set_single_ec(br_ssl_client_context *cc, + const br_x509_certificate *chain, size_t chain_len, + const br_ec_private_key *sk, unsigned allowed_usages, + unsigned cert_issuer_key_type, + const br_ec_impl *iec, br_ecdsa_sign iecdsa); + +/** + * \brief Type for a "translated cipher suite", as an array of two + * 16-bit integers. + * + * The first element is the cipher suite identifier (as used on the wire). + * The second element is the concatenation of four 4-bit elements which + * characterise the cipher suite contents. In most to least significant + * order, these 4-bit elements are: + * + * - Bits 12 to 15: key exchange + server key type + * + * | val | symbolic constant | suite type | details | + * | :-- | :----------------------- | :---------- | :----------------------------------------------- | + * | 0 | `BR_SSLKEYX_RSA` | RSA | RSA key exchange, key is RSA (encryption) | + * | 1 | `BR_SSLKEYX_ECDHE_RSA` | ECDHE_RSA | ECDHE key exchange, key is RSA (signature) | + * | 2 | `BR_SSLKEYX_ECDHE_ECDSA` | ECDHE_ECDSA | ECDHE key exchange, key is EC (signature) | + * | 3 | `BR_SSLKEYX_ECDH_RSA` | ECDH_RSA | Key is EC (key exchange), cert signed with RSA | + * | 4 | `BR_SSLKEYX_ECDH_ECDSA` | ECDH_ECDSA | Key is EC (key exchange), cert signed with ECDSA | + * + * - Bits 8 to 11: symmetric encryption algorithm + * + * | val | symbolic constant | symmetric encryption | key strength (bits) | + * | :-- | :--------------------- | :------------------- | :------------------ | + * | 0 | `BR_SSLENC_3DES_CBC` | 3DES/CBC | 168 | + * | 1 | `BR_SSLENC_AES128_CBC` | AES-128/CBC | 128 | + * | 2 | `BR_SSLENC_AES256_CBC` | AES-256/CBC | 256 | + * | 3 | `BR_SSLENC_AES128_GCM` | AES-128/GCM | 128 | + * | 4 | `BR_SSLENC_AES256_GCM` | AES-256/GCM | 256 | + * | 5 | `BR_SSLENC_CHACHA20` | ChaCha20/Poly1305 | 256 | + * + * - Bits 4 to 7: MAC algorithm + * + * | val | symbolic constant | MAC type | details | + * | :-- | :----------------- | :----------- | :------------------------------------ | + * | 0 | `BR_SSLMAC_AEAD` | AEAD | No dedicated MAC (encryption is AEAD) | + * | 2 | `BR_SSLMAC_SHA1` | HMAC/SHA-1 | Value matches `br_sha1_ID` | + * | 4 | `BR_SSLMAC_SHA256` | HMAC/SHA-256 | Value matches `br_sha256_ID` | + * | 5 | `BR_SSLMAC_SHA384` | HMAC/SHA-384 | Value matches `br_sha384_ID` | + * + * - Bits 0 to 3: hash function for PRF when used with TLS-1.2 + * + * | val | symbolic constant | hash function | details | + * | :-- | :----------------- | :------------ | :----------------------------------- | + * | 4 | `BR_SSLPRF_SHA256` | SHA-256 | Value matches `br_sha256_ID` | + * | 5 | `BR_SSLPRF_SHA384` | SHA-384 | Value matches `br_sha384_ID` | + * + * For instance, cipher suite `TLS_RSA_WITH_AES_128_GCM_SHA256` has + * standard identifier 0x009C, and is translated to 0x0304, for, in + * that order: RSA key exchange (0), AES-128/GCM (3), AEAD integrity (0), + * SHA-256 in the TLS PRF (4). + */ +typedef uint16_t br_suite_translated[2]; + +#ifndef BR_DOXYGEN_IGNORE +/* + * Constants are already documented in the br_suite_translated type. + */ + +#define BR_SSLKEYX_RSA 0 +#define BR_SSLKEYX_ECDHE_RSA 1 +#define BR_SSLKEYX_ECDHE_ECDSA 2 +#define BR_SSLKEYX_ECDH_RSA 3 +#define BR_SSLKEYX_ECDH_ECDSA 4 + +#define BR_SSLENC_3DES_CBC 0 +#define BR_SSLENC_AES128_CBC 1 +#define BR_SSLENC_AES256_CBC 2 +#define BR_SSLENC_AES128_GCM 3 +#define BR_SSLENC_AES256_GCM 4 +#define BR_SSLENC_CHACHA20 5 + +#define BR_SSLMAC_AEAD 0 +#define BR_SSLMAC_SHA1 br_sha1_ID +#define BR_SSLMAC_SHA256 br_sha256_ID +#define BR_SSLMAC_SHA384 br_sha384_ID + +#define BR_SSLPRF_SHA256 br_sha256_ID +#define BR_SSLPRF_SHA384 br_sha384_ID + +#endif + +/* + * Pre-declaration for the SSL server context. + */ +typedef struct br_ssl_server_context_ br_ssl_server_context; + +/** + * \brief Type for the server policy choices, taken after analysis of + * the client message (ClientHello). + */ +typedef struct { + /** + * \brief Cipher suite to use with that client. + */ + uint16_t cipher_suite; + + /** + * \brief Hash function or algorithm for signing the ServerKeyExchange. + * + * This parameter is ignored for `TLS_RSA_*` and `TLS_ECDH_*` + * cipher suites; it is used only for `TLS_ECDHE_*` suites, in + * which the server _signs_ the ephemeral EC Diffie-Hellman + * parameters sent to the client. + * + * This identifier must be one of the following values: + * + * - `0xFF00 + id`, where `id` is a hash function identifier + * (0 for MD5+SHA-1, or 2 to 6 for one of the SHA functions); + * + * - a full 16-bit identifier, lower than `0xFF00`. + * + * If the first option is used, then the SSL engine will + * compute the hash of the data that is to be signed, with the + * designated hash function. The `do_sign()` method will be + * invoked with that hash value provided in the the `data` + * buffer. + * + * If the second option is used, then the SSL engine will NOT + * compute a hash on the data; instead, it will provide the + * to-be-signed data itself in `data`, i.e. the concatenation of + * the client random, server random, and encoded ECDH + * parameters. Furthermore, with TLS-1.2 and later, the 16-bit + * identifier will be used "as is" in the protocol, in the + * SignatureAndHashAlgorithm; for instance, `0x0401` stands for + * RSA PKCS#1 v1.5 signature (the `01`) with SHA-256 as hash + * function (the `04`). + * + * Take care that with TLS 1.0 and 1.1, the hash function is + * constrainted by the protocol: RSA signature must use + * MD5+SHA-1 (so use `0xFF00`), while ECDSA must use SHA-1 + * (`0xFF02`). Since TLS 1.0 and 1.1 don't include a + * SignatureAndHashAlgorithm field in their ServerKeyExchange + * messages, any value below `0xFF00` will be usable to send the + * raw ServerKeyExchange data to the `do_sign()` callback, but + * that callback must still follow the protocol requirements + * when generating the signature. + */ + unsigned algo_id; + + /** + * \brief Certificate chain to send to the client. + * + * This is an array of `br_x509_certificate` objects, each + * normally containing a DER-encoded certificate. The server + * code does not try to decode these elements. + */ + const br_x509_certificate *chain; + + /** + * \brief Certificate chain length (number of certificates). + */ + size_t chain_len; + +} br_ssl_server_choices; + +/** + * \brief Class type for a policy handler (server side). + * + * A policy handler selects the policy parameters for a connection + * (cipher suite and other algorithms, and certificate chain to send to + * the client); it also performs the server-side computations involving + * its permanent private key. + * + * The SSL server engine will invoke first `choose()`, once the + * ClientHello message has been received, then either `do_keyx()` + * `do_sign()`, depending on the cipher suite. + */ +typedef struct br_ssl_server_policy_class_ br_ssl_server_policy_class; +struct br_ssl_server_policy_class_ { + /** + * \brief Context size (in bytes). + */ + size_t context_size; + + /** + * \brief Select algorithms and certificates for this connection. + * + * This callback function shall fill the provided `choices` + * structure with the policy choices for this connection. This + * entails selecting the cipher suite, hash function for signing + * the ServerKeyExchange (applicable only to ECDHE cipher suites), + * and certificate chain to send. + * + * The callback receives a pointer to the server context that + * contains the relevant data. In particular, the functions + * `br_ssl_server_get_client_suites()`, + * `br_ssl_server_get_client_hashes()` and + * `br_ssl_server_get_client_curves()` can be used to obtain + * the cipher suites, hash functions and elliptic curves + * supported by both the client and server, respectively. The + * `br_ssl_engine_get_version()` and `br_ssl_engine_get_server_name()` + * functions yield the protocol version and requested server name + * (SNI), respectively. + * + * This function may modify its context structure (`pctx`) in + * arbitrary ways to keep track of its own choices. + * + * This function shall return 1 if appropriate policy choices + * could be made, or 0 if this connection cannot be pursued. + * + * \param pctx policy context. + * \param cc SSL server context. + * \param choices destination structure for the policy choices. + * \return 1 on success, 0 on error. + */ + int (*choose)(const br_ssl_server_policy_class **pctx, + const br_ssl_server_context *cc, + br_ssl_server_choices *choices); + + /** + * \brief Perform key exchange (server part). + * + * This callback is invoked to perform the server-side cryptographic + * operation for a key exchange that is not ECDHE. This callback + * uses the private key. + * + * **For RSA key exchange**, the provided `data` (of length `*len` + * bytes) shall be decrypted with the server's private key, and + * the 48-byte premaster secret copied back to the first 48 bytes + * of `data`. + * + * - The caller makes sure that `*len` is at least 59 bytes. + * + * - This callback MUST check that the provided length matches + * that of the key modulus; it shall report an error otherwise. + * + * - If the length matches that of the RSA key modulus, then + * processing MUST be constant-time, even if decryption fails, + * or the padding is incorrect, or the plaintext message length + * is not exactly 48 bytes. + * + * - This callback needs not check the two first bytes of the + * obtained pre-master secret (the caller will do that). + * + * - If an error is reported (0), then what the callback put + * in the first 48 bytes of `data` is unimportant (the caller + * will use random bytes instead). + * + * **For ECDH key exchange**, the provided `data` (of length `*len` + * bytes) is the elliptic curve point from the client. The + * callback shall multiply it with its private key, and store + * the resulting X coordinate in `data`, starting at offset 0, + * and set `*len` to the length of the X coordinate. + * + * - If the input array does not have the proper length for + * an encoded curve point, then an error (0) shall be reported. + * + * - If the input array has the proper length, then processing + * MUST be constant-time, even if the data is not a valid + * encoded point. + * + * - This callback MUST check that the input point is valid. + * + * Returned value is 1 on success, 0 on error. + * + * \param pctx policy context. + * \param data key exchange data from the client. + * \param len key exchange data length (in bytes). + * \return 1 on success, 0 on error. + */ + uint32_t (*do_keyx)(const br_ssl_server_policy_class **pctx, + unsigned char *data, size_t *len); + + /** + * \brief Perform a signature (for a ServerKeyExchange message). + * + * This callback function is invoked for ECDHE cipher suites. On + * input, the hash value or message to sign is in `data`, of + * size `hv_len`; the involved hash function or algorithm is + * identified by `algo_id`. The signature shall be computed and + * written back into `data`; the total size of that buffer is + * `len` bytes. + * + * This callback shall verify that the signature length does not + * exceed `len` bytes, and abstain from writing the signature if + * it does not fit. + * + * The `algo_id` value matches that which was written in the + * `choices` structures by the `choose()` callback. This will be + * one of the following: + * + * - `0xFF00 + id` for a hash function identifier `id`. In + * that case, the `data` buffer contains a hash value + * already computed over the data that is to be signed, + * of length `hv_len`. The `id` may be 0 to designate the + * special MD5+SHA-1 concatenation (old-style RSA signing). + * + * - Another value, lower than `0xFF00`. The `data` buffer + * then contains the raw, non-hashed data to be signed + * (concatenation of the client and server randoms and + * ECDH parameters). The callback is responsible to apply + * any relevant hashing as part of the signing process. + * + * Returned value is the signature length (in bytes), or 0 on error. + * + * \param pctx policy context. + * \param algo_id hash function / algorithm identifier. + * \param data input/output buffer (message/hash, then signature). + * \param hv_len hash value or message length (in bytes). + * \param len total buffer length (in bytes). + * \return signature length (in bytes) on success, or 0 on error. + */ + size_t (*do_sign)(const br_ssl_server_policy_class **pctx, + unsigned algo_id, + unsigned char *data, size_t hv_len, size_t len); +}; + +/** + * \brief A single-chain RSA policy handler. + * + * This policy context uses a single certificate chain, and a RSA + * private key. The context can be restricted to only signatures or + * only key exchange. + * + * Apart from the first field (vtable pointer), its contents are + * opaque and shall not be accessed directly. + */ +typedef struct { + /** \brief Pointer to vtable. */ + const br_ssl_server_policy_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + const br_x509_certificate *chain; + size_t chain_len; + const br_rsa_private_key *sk; + unsigned allowed_usages; + br_rsa_private irsacore; + br_rsa_pkcs1_sign irsasign; +#endif +} br_ssl_server_policy_rsa_context; + +/** + * \brief A single-chain EC policy handler. + * + * This policy context uses a single certificate chain, and an EC + * private key. The context can be restricted to only signatures or + * only key exchange. + * + * Due to how TLS is defined, this context must be made aware whether + * the server certificate was itself signed with RSA or ECDSA. The code + * does not try to decode the certificate to obtain that information. + * + * Apart from the first field (vtable pointer), its contents are + * opaque and shall not be accessed directly. + */ +typedef struct { + /** \brief Pointer to vtable. */ + const br_ssl_server_policy_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + const br_x509_certificate *chain; + size_t chain_len; + const br_ec_private_key *sk; + unsigned allowed_usages; + unsigned cert_issuer_key_type; + const br_multihash_context *mhash; + const br_ec_impl *iec; + br_ecdsa_sign iecdsa; +#endif +} br_ssl_server_policy_ec_context; + +/** + * \brief Class type for a session parameter cache. + * + * Session parameters are saved in the cache with `save()`, and + * retrieved with `load()`. The cache implementation can apply any + * storage and eviction strategy that it sees fit. The SSL server + * context that performs the request is provided, so that its + * functionalities may be used by the implementation (e.g. hash + * functions or random number generation). + */ +typedef struct br_ssl_session_cache_class_ br_ssl_session_cache_class; +struct br_ssl_session_cache_class_ { + /** + * \brief Context size (in bytes). + */ + size_t context_size; + + /** + * \brief Record a session. + * + * This callback should record the provided session parameters. + * The `params` structure is transient, so its contents shall + * be copied into the cache. The session ID has been randomly + * generated and always has length exactly 32 bytes. + * + * \param ctx session cache context. + * \param server_ctx SSL server context. + * \param params session parameters to save. + */ + void (*save)(const br_ssl_session_cache_class **ctx, + br_ssl_server_context *server_ctx, + const br_ssl_session_parameters *params); + + /** + * \brief Lookup a session in the cache. + * + * The session ID to lookup is in `params` and always has length + * exactly 32 bytes. If the session parameters are found in the + * cache, then the parameters shall be copied into the `params` + * structure. Returned value is 1 on successful lookup, 0 + * otherwise. + * + * \param ctx session cache context. + * \param server_ctx SSL server context. + * \param params destination for session parameters. + * \return 1 if found, 0 otherwise. + */ + int (*load)(const br_ssl_session_cache_class **ctx, + br_ssl_server_context *server_ctx, + br_ssl_session_parameters *params); +}; + +/** + * \brief Context for a basic cache system. + * + * The system stores session parameters in a buffer provided at + * initialisation time. Each entry uses exactly 100 bytes, and + * buffer sizes up to 4294967295 bytes are supported. + * + * Entries are evicted with a LRU (Least Recently Used) policy. A + * search tree is maintained to keep lookups fast even with large + * caches. + * + * Apart from the first field (vtable pointer), the structure + * contents are opaque and shall not be accessed directly. + */ +typedef struct { + /** \brief Pointer to vtable. */ + const br_ssl_session_cache_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + unsigned char *store; + size_t store_len, store_ptr; + unsigned char index_key[32]; + const br_hash_class *hash; + int init_done; + uint32_t head, tail, root; +#endif +} br_ssl_session_cache_lru; + +/** + * \brief Initialise a LRU session cache with the provided storage space. + * + * The provided storage space must remain valid as long as the cache + * is used. Arbitrary lengths are supported, up to 4294967295 bytes; + * each entry uses up exactly 100 bytes. + * + * \param cc session cache context. + * \param store storage space for cached entries. + * \param store_len storage space length (in bytes). + */ +void br_ssl_session_cache_lru_init(br_ssl_session_cache_lru *cc, + unsigned char *store, size_t store_len); + +/** + * \brief Forget an entry in an LRU session cache. + * + * The session cache context must have been initialised. The entry + * with the provided session ID (of exactly 32 bytes) is looked for + * in the cache; if located, it is disabled. + * + * \param cc session cache context. + * \param id session ID to forget. + */ +void br_ssl_session_cache_lru_forget( + br_ssl_session_cache_lru *cc, const unsigned char *id); + +/** + * \brief Context structure for a SSL server. + * + * The first field (called `eng`) is the SSL engine; all functions that + * work on a `br_ssl_engine_context` structure shall take as parameter + * a pointer to that field. The other structure fields are opaque and + * must not be accessed directly. + */ +struct br_ssl_server_context_ { + /** + * \brief The encapsulated engine context. + */ + br_ssl_engine_context eng; + +#ifndef BR_DOXYGEN_IGNORE + /* + * Maximum version from the client. + */ + uint16_t client_max_version; + + /* + * Session cache. + */ + const br_ssl_session_cache_class **cache_vtable; + + /* + * Translated cipher suites supported by the client. The list + * is trimmed to include only the cipher suites that the + * server also supports; they are in the same order as in the + * client message. + */ + br_suite_translated client_suites[BR_MAX_CIPHER_SUITES]; + unsigned char client_suites_num; + + /* + * Hash functions supported by the client, with ECDSA and RSA + * (bit mask). For hash function with id 'x', set bit index is + * x for RSA, x+8 for ECDSA. For newer algorithms, with ID + * 0x08**, bit 16+k is set for algorithm 0x0800+k. + */ + uint32_t hashes; + + /* + * Curves supported by the client (bit mask, for named curves). + */ + uint32_t curves; + + /* + * Context for chain handler. + */ + const br_ssl_server_policy_class **policy_vtable; + uint16_t sign_hash_id; + + /* + * For the core handlers, thus avoiding (in most cases) the + * need for an externally provided policy context. + */ + union { + const br_ssl_server_policy_class *vtable; + br_ssl_server_policy_rsa_context single_rsa; + br_ssl_server_policy_ec_context single_ec; + } chain_handler; + + /* + * Buffer for the ECDHE private key. + */ + unsigned char ecdhe_key[70]; + size_t ecdhe_key_len; + + /* + * Trust anchor names for client authentication. "ta_names" and + * "tas" cannot be both non-NULL. + */ + const br_x500_name *ta_names; + const br_x509_trust_anchor *tas; + size_t num_tas; + size_t cur_dn_index; + const unsigned char *cur_dn; + size_t cur_dn_len; + + /* + * Buffer for the hash value computed over all handshake messages + * prior to CertificateVerify, and identifier for the hash function. + */ + unsigned char hash_CV[64]; + size_t hash_CV_len; + int hash_CV_id; + + /* + * Server-specific implementations. + * (none for now) + */ +#endif +}; + +/* + * Each br_ssl_server_init_xxx() function sets the list of supported + * cipher suites and used implementations, as specified by the profile + * name 'xxx'. Defined profile names are: + * + * full_rsa all supported algorithm, server key type is RSA + * full_ec all supported algorithm, server key type is EC + * TODO: add other profiles + * + * Naming scheme for "minimal" profiles: min123 + * + * -- character 1: key exchange + * r = RSA + * e = ECDHE_RSA + * f = ECDHE_ECDSA + * u = ECDH_RSA + * v = ECDH_ECDSA + * -- character 2: version / PRF + * 0 = TLS 1.0 / 1.1 with MD5+SHA-1 + * 2 = TLS 1.2 with SHA-256 + * 3 = TLS 1.2 with SHA-384 + * -- character 3: encryption + * a = AES/CBC + * d = 3DES/CBC + * g = AES/GCM + * c = ChaCha20+Poly1305 + */ + +/** + * \brief SSL server profile: full_rsa. + * + * This function initialises the provided SSL server context with + * all supported algorithms and cipher suites that rely on a RSA + * key pair. + * + * \param cc server context to initialise. + * \param chain server certificate chain. + * \param chain_len certificate chain length (number of certificate). + * \param sk RSA private key. + */ +void br_ssl_server_init_full_rsa(br_ssl_server_context *cc, + const br_x509_certificate *chain, size_t chain_len, + const br_rsa_private_key *sk); + +/** + * \brief SSL server profile: full_ec. + * + * This function initialises the provided SSL server context with + * all supported algorithms and cipher suites that rely on an EC + * key pair. + * + * The key type of the CA that issued the server's certificate must + * be provided, since it matters for ECDH cipher suites (ECDH_RSA + * suites require a RSA-powered CA). The key type is either + * `BR_KEYTYPE_RSA` or `BR_KEYTYPE_EC`. + * + * \param cc server context to initialise. + * \param chain server certificate chain. + * \param chain_len chain length (number of certificates). + * \param cert_issuer_key_type certificate issuer's key type. + * \param sk EC private key. + */ +void br_ssl_server_init_full_ec(br_ssl_server_context *cc, + const br_x509_certificate *chain, size_t chain_len, + unsigned cert_issuer_key_type, const br_ec_private_key *sk); + +/** + * \brief SSL server profile: minr2g. + * + * This profile uses only TLS_RSA_WITH_AES_128_GCM_SHA256. Server key is + * RSA, and RSA key exchange is used (not forward secure, but uses little + * CPU in the client). + * + * \param cc server context to initialise. + * \param chain server certificate chain. + * \param chain_len certificate chain length (number of certificate). + * \param sk RSA private key. + */ +void br_ssl_server_init_minr2g(br_ssl_server_context *cc, + const br_x509_certificate *chain, size_t chain_len, + const br_rsa_private_key *sk); + +/** + * \brief SSL server profile: mine2g. + * + * This profile uses only TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256. Server key + * is RSA, and ECDHE key exchange is used. This suite provides forward + * security, with a higher CPU expense on the client, and a somewhat + * larger code footprint (compared to "minr2g"). + * + * \param cc server context to initialise. + * \param chain server certificate chain. + * \param chain_len certificate chain length (number of certificate). + * \param sk RSA private key. + */ +void br_ssl_server_init_mine2g(br_ssl_server_context *cc, + const br_x509_certificate *chain, size_t chain_len, + const br_rsa_private_key *sk); + +/** + * \brief SSL server profile: minf2g. + * + * This profile uses only TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256. + * Server key is EC, and ECDHE key exchange is used. This suite provides + * forward security, with a higher CPU expense on the client and server + * (by a factor of about 3 to 4), and a somewhat larger code footprint + * (compared to "minu2g" and "minv2g"). + * + * \param cc server context to initialise. + * \param chain server certificate chain. + * \param chain_len certificate chain length (number of certificate). + * \param sk EC private key. + */ +void br_ssl_server_init_minf2g(br_ssl_server_context *cc, + const br_x509_certificate *chain, size_t chain_len, + const br_ec_private_key *sk); + +/** + * \brief SSL server profile: minu2g. + * + * This profile uses only TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256. + * Server key is EC, and ECDH key exchange is used; the issuing CA used + * a RSA key. + * + * The "minu2g" and "minv2g" profiles do not provide forward secrecy, + * but are the lightest on the server (for CPU usage), and are rather + * inexpensive on the client as well. + * + * \param cc server context to initialise. + * \param chain server certificate chain. + * \param chain_len certificate chain length (number of certificate). + * \param sk EC private key. + */ +void br_ssl_server_init_minu2g(br_ssl_server_context *cc, + const br_x509_certificate *chain, size_t chain_len, + const br_ec_private_key *sk); + +/** + * \brief SSL server profile: minv2g. + * + * This profile uses only TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256. + * Server key is EC, and ECDH key exchange is used; the issuing CA used + * an EC key. + * + * The "minu2g" and "minv2g" profiles do not provide forward secrecy, + * but are the lightest on the server (for CPU usage), and are rather + * inexpensive on the client as well. + * + * \param cc server context to initialise. + * \param chain server certificate chain. + * \param chain_len certificate chain length (number of certificate). + * \param sk EC private key. + */ +void br_ssl_server_init_minv2g(br_ssl_server_context *cc, + const br_x509_certificate *chain, size_t chain_len, + const br_ec_private_key *sk); + +/** + * \brief SSL server profile: mine2c. + * + * This profile uses only TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256. + * Server key is RSA, and ECDHE key exchange is used. This suite + * provides forward security. + * + * \param cc server context to initialise. + * \param chain server certificate chain. + * \param chain_len certificate chain length (number of certificate). + * \param sk RSA private key. + */ +void br_ssl_server_init_mine2c(br_ssl_server_context *cc, + const br_x509_certificate *chain, size_t chain_len, + const br_rsa_private_key *sk); + +/** + * \brief SSL server profile: minf2c. + * + * This profile uses only TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256. + * Server key is EC, and ECDHE key exchange is used. This suite provides + * forward security. + * + * \param cc server context to initialise. + * \param chain server certificate chain. + * \param chain_len certificate chain length (number of certificate). + * \param sk EC private key. + */ +void br_ssl_server_init_minf2c(br_ssl_server_context *cc, + const br_x509_certificate *chain, size_t chain_len, + const br_ec_private_key *sk); + +/** + * \brief Get the supported client suites. + * + * This function shall be called only after the ClientHello has been + * processed, typically from the policy engine. The returned array + * contains the cipher suites that are supported by both the client + * and the server; these suites are in client preference order, unless + * the `BR_OPT_ENFORCE_SERVER_PREFERENCES` flag was set, in which case + * they are in server preference order. + * + * The suites are _translated_, which means that each suite is given + * as two 16-bit integers: the standard suite identifier, and its + * translated version, broken down into its individual components, + * as explained with the `br_suite_translated` type. + * + * The returned array is allocated in the context and will be rewritten + * by each handshake. + * + * \param cc server context. + * \param num receives the array size (number of suites). + * \return the translated common cipher suites, in preference order. + */ +static inline const br_suite_translated * +br_ssl_server_get_client_suites(const br_ssl_server_context *cc, size_t *num) +{ + *num = cc->client_suites_num; + return cc->client_suites; +} + +/** + * \brief Get the hash functions and signature algorithms supported by + * the client. + * + * This value is a bit field: + * + * - If RSA (PKCS#1 v1.5) is supported with hash function of ID `x`, + * then bit `x` is set (hash function ID is 0 for the special MD5+SHA-1, + * or 2 to 6 for the SHA family). + * + * - If ECDSA is suported with hash function of ID `x`, then bit `8+x` + * is set. + * + * - Newer algorithms are symbolic 16-bit identifiers that do not + * represent signature algorithm and hash function separately. If + * the TLS-level identifier is `0x0800+x` for a `x` in the 0..15 + * range, then bit `16+x` is set. + * + * "New algorithms" are currently defined only in draft documents, so + * this support is subject to possible change. Right now (early 2017), + * this maps ed25519 (EdDSA on Curve25519) to bit 23, and ed448 (EdDSA + * on Curve448) to bit 24. If the identifiers on the wire change in + * future document, then the decoding mechanism in BearSSL will be + * amended to keep mapping ed25519 and ed448 on bits 23 and 24, + * respectively. Mapping of other new algorithms (e.g. RSA/PSS) is not + * guaranteed yet. + * + * \param cc server context. + * \return the client-supported hash functions and signature algorithms. + */ +static inline uint32_t +br_ssl_server_get_client_hashes(const br_ssl_server_context *cc) +{ + return cc->hashes; +} + +/** + * \brief Get the elliptic curves supported by the client. + * + * This is a bit field (bit x is set if curve of ID x is supported). + * + * \param cc server context. + * \return the client-supported elliptic curves. + */ +static inline uint32_t +br_ssl_server_get_client_curves(const br_ssl_server_context *cc) +{ + return cc->curves; +} + +/** + * \brief Clear the complete contents of a SSL server context. + * + * Everything is cleared, including the reference to the configured buffer, + * implementations, cipher suites and state. This is a preparatory step + * to assembling a custom profile. + * + * \param cc server context to clear. + */ +void br_ssl_server_zero(br_ssl_server_context *cc); + +/** + * \brief Set an externally provided policy context. + * + * The policy context's methods are invoked to decide the cipher suite + * and certificate chain, and to perform operations involving the server's + * private key. + * + * \param cc server context. + * \param pctx policy context (pointer to its vtable field). + */ +static inline void +br_ssl_server_set_policy(br_ssl_server_context *cc, + const br_ssl_server_policy_class **pctx) +{ + cc->policy_vtable = pctx; +} + +/** + * \brief Set the server certificate chain and key (single RSA case). + * + * This function uses a policy context included in the server context. + * It configures use of a single server certificate chain with a RSA + * private key. The `allowed_usages` is a combination of usages, namely + * `BR_KEYTYPE_KEYX` and/or `BR_KEYTYPE_SIGN`; this enables or disables + * the corresponding cipher suites (i.e. `TLS_RSA_*` use the RSA key for + * key exchange, while `TLS_ECDHE_RSA_*` use the RSA key for signatures). + * + * \param cc server context. + * \param chain server certificate chain to send to the client. + * \param chain_len chain length (number of certificates). + * \param sk server private key (RSA). + * \param allowed_usages allowed private key usages. + * \param irsacore RSA core implementation. + * \param irsasign RSA signature implementation (PKCS#1 v1.5). + */ +void br_ssl_server_set_single_rsa(br_ssl_server_context *cc, + const br_x509_certificate *chain, size_t chain_len, + const br_rsa_private_key *sk, unsigned allowed_usages, + br_rsa_private irsacore, br_rsa_pkcs1_sign irsasign); + +/** + * \brief Set the server certificate chain and key (single EC case). + * + * This function uses a policy context included in the server context. + * It configures use of a single server certificate chain with an EC + * private key. The `allowed_usages` is a combination of usages, namely + * `BR_KEYTYPE_KEYX` and/or `BR_KEYTYPE_SIGN`; this enables or disables + * the corresponding cipher suites (i.e. `TLS_ECDH_*` use the EC key for + * key exchange, while `TLS_ECDHE_ECDSA_*` use the EC key for signatures). + * + * In order to support `TLS_ECDH_*` cipher suites (non-ephemeral ECDH), + * the algorithm type of the key used by the issuing CA to sign the + * server's certificate must be provided, as `cert_issuer_key_type` + * parameter (this value is either `BR_KEYTYPE_RSA` or `BR_KEYTYPE_EC`). + * + * \param cc server context. + * \param chain server certificate chain to send. + * \param chain_len chain length (number of certificates). + * \param sk server private key (EC). + * \param allowed_usages allowed private key usages. + * \param cert_issuer_key_type issuing CA's key type. + * \param iec EC core implementation. + * \param iecdsa ECDSA signature implementation ("asn1" format). + */ +void br_ssl_server_set_single_ec(br_ssl_server_context *cc, + const br_x509_certificate *chain, size_t chain_len, + const br_ec_private_key *sk, unsigned allowed_usages, + unsigned cert_issuer_key_type, + const br_ec_impl *iec, br_ecdsa_sign iecdsa); + +/** + * \brief Activate client certificate authentication. + * + * The trust anchor encoded X.500 names (DN) to send to the client are + * provided. A client certificate will be requested and validated through + * the X.509 validator configured in the SSL engine. If `num` is 0, then + * client certificate authentication is disabled. + * + * If the client does not send a certificate, or on validation failure, + * the handshake aborts. Unauthenticated clients can be tolerated by + * setting the `BR_OPT_TOLERATE_NO_CLIENT_AUTH` flag. + * + * The provided array is linked in, not copied, so that pointer must + * remain valid as long as anchor names may be used. + * + * \param cc server context. + * \param ta_names encoded trust anchor names. + * \param num number of encoded trust anchor names. + */ +static inline void +br_ssl_server_set_trust_anchor_names(br_ssl_server_context *cc, + const br_x500_name *ta_names, size_t num) +{ + cc->ta_names = ta_names; + cc->tas = NULL; + cc->num_tas = num; +} + +/** + * \brief Activate client certificate authentication. + * + * This is a variant for `br_ssl_server_set_trust_anchor_names()`: the + * trust anchor names are provided not as an array of stand-alone names + * (`br_x500_name` structures), but as an array of trust anchors + * (`br_x509_trust_anchor` structures). The server engine itself will + * only use the `dn` field of each trust anchor. This is meant to allow + * defining a single array of trust anchors, to be used here and in the + * X.509 validation engine itself. + * + * The provided array is linked in, not copied, so that pointer must + * remain valid as long as anchor names may be used. + * + * \param cc server context. + * \param tas trust anchors (only names are used). + * \param num number of trust anchors. + */ +static inline void +br_ssl_server_set_trust_anchor_names_alt(br_ssl_server_context *cc, + const br_x509_trust_anchor *tas, size_t num) +{ + cc->ta_names = NULL; + cc->tas = tas; + cc->num_tas = num; +} + +/** + * \brief Configure the cache for session parameters. + * + * The cache context is provided as a pointer to its first field (vtable + * pointer). + * + * \param cc server context. + * \param vtable session cache context. + */ +static inline void +br_ssl_server_set_cache(br_ssl_server_context *cc, + const br_ssl_session_cache_class **vtable) +{ + cc->cache_vtable = vtable; +} + +/** + * \brief Prepare or reset a server context for handling an incoming client. + * + * \param cc server context. + * \return 1 on success, 0 on error. + */ +int br_ssl_server_reset(br_ssl_server_context *cc); + +/* ===================================================================== */ + +/* + * Context for the simplified I/O context. The transport medium is accessed + * through the low_read() and low_write() callback functions, each with + * its own opaque context pointer. + * + * low_read() read some bytes, at most 'len' bytes, into data[]. The + * returned value is the number of read bytes, or -1 on error. + * The 'len' parameter is guaranteed never to exceed 20000, + * so the length always fits in an 'int' on all platforms. + * + * low_write() write up to 'len' bytes, to be read from data[]. The + * returned value is the number of written bytes, or -1 on + * error. The 'len' parameter is guaranteed never to exceed + * 20000, so the length always fits in an 'int' on all + * parameters. + * + * A socket closure (if the transport medium is a socket) should be reported + * as an error (-1). The callbacks shall endeavour to block until at least + * one byte can be read or written; a callback returning 0 at times is + * acceptable, but this normally leads to the callback being immediately + * called again, so the callback should at least always try to block for + * some time if no I/O can take place. + * + * The SSL engine naturally applies some buffering, so the callbacks need + * not apply buffers of their own. + */ +/** + * \brief Context structure for the simplified SSL I/O wrapper. + * + * This structure is initialised with `br_sslio_init()`. Its contents + * are opaque and shall not be accessed directly. + */ +typedef struct { +#ifndef BR_DOXYGEN_IGNORE + br_ssl_engine_context *engine; + int (*low_read)(void *read_context, + unsigned char *data, size_t len); + void *read_context; + int (*low_write)(void *write_context, + const unsigned char *data, size_t len); + void *write_context; +#endif +} br_sslio_context; + +/** + * \brief Initialise a simplified I/O wrapper context. + * + * The simplified I/O wrapper offers a simpler read/write API for a SSL + * engine (client or server), using the provided callback functions for + * reading data from, or writing data to, the transport medium. + * + * The callback functions have the following semantics: + * + * - Each callback receives an opaque context value (of type `void *`) + * that the callback may use arbitrarily (or possibly ignore). + * + * - `low_read()` reads at least one byte, at most `len` bytes, from + * the transport medium. Read bytes shall be written in `data`. + * + * - `low_write()` writes at least one byte, at most `len` bytes, unto + * the transport medium. The bytes to write are read from `data`. + * + * - The `len` parameter is never zero, and is always lower than 20000. + * + * - The number of processed bytes (read or written) is returned. Since + * that number is less than 20000, it always fits on an `int`. + * + * - On error, the callbacks return -1. Reaching end-of-stream is an + * error. Errors are permanent: the SSL connection is terminated. + * + * - Callbacks SHOULD NOT return 0. This is tolerated, as long as + * callbacks endeavour to block for some non-negligible amount of + * time until at least one byte can be sent or received (if a + * callback returns 0, then the wrapper invokes it again + * immediately). + * + * - Callbacks MAY return as soon as at least one byte is processed; + * they MAY also insist on reading or writing _all_ requested bytes. + * Since SSL is a self-terminated protocol (each record has a length + * header), this does not change semantics. + * + * - Callbacks need not apply any buffering (for performance) since SSL + * itself uses buffers. + * + * \param ctx wrapper context to initialise. + * \param engine SSL engine to wrap. + * \param low_read callback for reading data from the transport. + * \param read_context context pointer for `low_read()`. + * \param low_write callback for writing data on the transport. + * \param write_context context pointer for `low_write()`. + */ +void br_sslio_init(br_sslio_context *ctx, + br_ssl_engine_context *engine, + int (*low_read)(void *read_context, + unsigned char *data, size_t len), + void *read_context, + int (*low_write)(void *write_context, + const unsigned char *data, size_t len), + void *write_context); + +/** + * \brief Read some application data from a SSL connection. + * + * If `len` is zero, then this function returns 0 immediately. In + * all other cases, it never returns 0. + * + * This call returns only when at least one byte has been obtained. + * Returned value is the number of bytes read, or -1 on error. The + * number of bytes always fits on an 'int' (data from a single SSL/TLS + * record is returned). + * + * On error or SSL closure, this function returns -1. The caller should + * inspect the error status on the SSL engine to distinguish between + * normal closure and error. + * + * \param cc SSL wrapper context. + * \param dst destination buffer for application data. + * \param len maximum number of bytes to obtain. + * \return number of bytes obtained, or -1 on error. + */ +int br_sslio_read(br_sslio_context *cc, void *dst, size_t len); + +/** + * \brief Read application data from a SSL connection. + * + * This calls returns only when _all_ requested `len` bytes are read, + * or an error is reached. Returned value is 0 on success, -1 on error. + * A normal (verified) SSL closure before that many bytes are obtained + * is reported as an error by this function. + * + * \param cc SSL wrapper context. + * \param dst destination buffer for application data. + * \param len number of bytes to obtain. + * \return 0 on success, or -1 on error. + */ +int br_sslio_read_all(br_sslio_context *cc, void *dst, size_t len); + +/** + * \brief Write some application data unto a SSL connection. + * + * If `len` is zero, then this function returns 0 immediately. In + * all other cases, it never returns 0. + * + * This call returns only when at least one byte has been written. + * Returned value is the number of bytes written, or -1 on error. The + * number of bytes always fits on an 'int' (less than 20000). + * + * On error or SSL closure, this function returns -1. The caller should + * inspect the error status on the SSL engine to distinguish between + * normal closure and error. + * + * **Important:** SSL is buffered; a "written" byte is a byte that was + * injected into the wrapped SSL engine, but this does not necessarily mean + * that it has been scheduled for sending. Use `br_sslio_flush()` to + * ensure that all pending data has been sent to the transport medium. + * + * \param cc SSL wrapper context. + * \param src source buffer for application data. + * \param len maximum number of bytes to write. + * \return number of bytes written, or -1 on error. + */ +int br_sslio_write(br_sslio_context *cc, const void *src, size_t len); + +/** + * \brief Write application data unto a SSL connection. + * + * This calls returns only when _all_ requested `len` bytes have been + * written, or an error is reached. Returned value is 0 on success, -1 + * on error. A normal (verified) SSL closure before that many bytes are + * written is reported as an error by this function. + * + * **Important:** SSL is buffered; a "written" byte is a byte that was + * injected into the wrapped SSL engine, but this does not necessarily mean + * that it has been scheduled for sending. Use `br_sslio_flush()` to + * ensure that all pending data has been sent to the transport medium. + * + * \param cc SSL wrapper context. + * \param src source buffer for application data. + * \param len number of bytes to write. + * \return 0 on success, or -1 on error. + */ +int br_sslio_write_all(br_sslio_context *cc, const void *src, size_t len); + +/** + * \brief Flush pending data. + * + * This call makes sure that any buffered application data in the + * provided context (including the wrapped SSL engine) has been sent + * to the transport medium (i.e. accepted by the `low_write()` callback + * method). If there is no such pending data, then this function does + * nothing (and returns a success, i.e. 0). + * + * If the underlying transport medium has its own buffers, then it is + * up to the caller to ensure the corresponding flushing. + * + * Returned value is 0 on success, -1 on error. + * + * \param cc SSL wrapper context. + * \return 0 on success, or -1 on error. + */ +int br_sslio_flush(br_sslio_context *cc); + +/** + * \brief Close the SSL connection. + * + * This call runs the SSL closure protocol (sending a `close_notify`, + * receiving the response `close_notify`). When it returns, the SSL + * connection is finished. It is still up to the caller to manage the + * possible transport-level termination, if applicable (alternatively, + * the underlying transport stream may be reused for non-SSL messages). + * + * Returned value is 0 on success, -1 on error. A failure by the peer + * to process the complete closure protocol (i.e. sending back the + * `close_notify`) is an error. + * + * \param cc SSL wrapper context. + * \return 0 on success, or -1 on error. + */ +int br_sslio_close(br_sslio_context *cc); + +/* ===================================================================== */ + +/* + * Symbolic constants for cipher suites. + */ + +/* From RFC 5246 */ +#define BR_TLS_NULL_WITH_NULL_NULL 0x0000 +#define BR_TLS_RSA_WITH_NULL_MD5 0x0001 +#define BR_TLS_RSA_WITH_NULL_SHA 0x0002 +#define BR_TLS_RSA_WITH_NULL_SHA256 0x003B +#define BR_TLS_RSA_WITH_RC4_128_MD5 0x0004 +#define BR_TLS_RSA_WITH_RC4_128_SHA 0x0005 +#define BR_TLS_RSA_WITH_3DES_EDE_CBC_SHA 0x000A +#define BR_TLS_RSA_WITH_AES_128_CBC_SHA 0x002F +#define BR_TLS_RSA_WITH_AES_256_CBC_SHA 0x0035 +#define BR_TLS_RSA_WITH_AES_128_CBC_SHA256 0x003C +#define BR_TLS_RSA_WITH_AES_256_CBC_SHA256 0x003D +#define BR_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA 0x000D +#define BR_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA 0x0010 +#define BR_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA 0x0013 +#define BR_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 0x0016 +#define BR_TLS_DH_DSS_WITH_AES_128_CBC_SHA 0x0030 +#define BR_TLS_DH_RSA_WITH_AES_128_CBC_SHA 0x0031 +#define BR_TLS_DHE_DSS_WITH_AES_128_CBC_SHA 0x0032 +#define BR_TLS_DHE_RSA_WITH_AES_128_CBC_SHA 0x0033 +#define BR_TLS_DH_DSS_WITH_AES_256_CBC_SHA 0x0036 +#define BR_TLS_DH_RSA_WITH_AES_256_CBC_SHA 0x0037 +#define BR_TLS_DHE_DSS_WITH_AES_256_CBC_SHA 0x0038 +#define BR_TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x0039 +#define BR_TLS_DH_DSS_WITH_AES_128_CBC_SHA256 0x003E +#define BR_TLS_DH_RSA_WITH_AES_128_CBC_SHA256 0x003F +#define BR_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 0x0040 +#define BR_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 0x0067 +#define BR_TLS_DH_DSS_WITH_AES_256_CBC_SHA256 0x0068 +#define BR_TLS_DH_RSA_WITH_AES_256_CBC_SHA256 0x0069 +#define BR_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 0x006A +#define BR_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 0x006B +#define BR_TLS_DH_anon_WITH_RC4_128_MD5 0x0018 +#define BR_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA 0x001B +#define BR_TLS_DH_anon_WITH_AES_128_CBC_SHA 0x0034 +#define BR_TLS_DH_anon_WITH_AES_256_CBC_SHA 0x003A +#define BR_TLS_DH_anon_WITH_AES_128_CBC_SHA256 0x006C +#define BR_TLS_DH_anon_WITH_AES_256_CBC_SHA256 0x006D + +/* From RFC 4492 */ +#define BR_TLS_ECDH_ECDSA_WITH_NULL_SHA 0xC001 +#define BR_TLS_ECDH_ECDSA_WITH_RC4_128_SHA 0xC002 +#define BR_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA 0xC003 +#define BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0xC004 +#define BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0xC005 +#define BR_TLS_ECDHE_ECDSA_WITH_NULL_SHA 0xC006 +#define BR_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA 0xC007 +#define BR_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA 0xC008 +#define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0xC009 +#define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0xC00A +#define BR_TLS_ECDH_RSA_WITH_NULL_SHA 0xC00B +#define BR_TLS_ECDH_RSA_WITH_RC4_128_SHA 0xC00C +#define BR_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA 0xC00D +#define BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA 0xC00E +#define BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA 0xC00F +#define BR_TLS_ECDHE_RSA_WITH_NULL_SHA 0xC010 +#define BR_TLS_ECDHE_RSA_WITH_RC4_128_SHA 0xC011 +#define BR_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA 0xC012 +#define BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 0xC013 +#define BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 0xC014 +#define BR_TLS_ECDH_anon_WITH_NULL_SHA 0xC015 +#define BR_TLS_ECDH_anon_WITH_RC4_128_SHA 0xC016 +#define BR_TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA 0xC017 +#define BR_TLS_ECDH_anon_WITH_AES_128_CBC_SHA 0xC018 +#define BR_TLS_ECDH_anon_WITH_AES_256_CBC_SHA 0xC019 + +/* From RFC 5288 */ +#define BR_TLS_RSA_WITH_AES_128_GCM_SHA256 0x009C +#define BR_TLS_RSA_WITH_AES_256_GCM_SHA384 0x009D +#define BR_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 0x009E +#define BR_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 0x009F +#define BR_TLS_DH_RSA_WITH_AES_128_GCM_SHA256 0x00A0 +#define BR_TLS_DH_RSA_WITH_AES_256_GCM_SHA384 0x00A1 +#define BR_TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 0x00A2 +#define BR_TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 0x00A3 +#define BR_TLS_DH_DSS_WITH_AES_128_GCM_SHA256 0x00A4 +#define BR_TLS_DH_DSS_WITH_AES_256_GCM_SHA384 0x00A5 +#define BR_TLS_DH_anon_WITH_AES_128_GCM_SHA256 0x00A6 +#define BR_TLS_DH_anon_WITH_AES_256_GCM_SHA384 0x00A7 + +/* From RFC 5289 */ +#define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 0xC023 +#define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 0xC024 +#define BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 0xC025 +#define BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 0xC026 +#define BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0xC027 +#define BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 0xC028 +#define BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 0xC029 +#define BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 0xC02A +#define BR_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0xC02B +#define BR_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0xC02C +#define BR_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0xC02D +#define BR_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0xC02E +#define BR_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0xC02F +#define BR_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0xC030 +#define BR_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 0xC031 +#define BR_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 0xC032 + +/* From RFC 7905 */ +#define BR_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 0xCCA8 +#define BR_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 0xCCA9 +#define BR_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 0xCCAA +#define BR_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 0xCCAB +#define BR_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 0xCCAC +#define BR_TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 0xCCAD +#define BR_TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256 0xCCAE + +/* From RFC 7507 */ +#define BR_TLS_FALLBACK_SCSV 0x5600 + +/* + * Symbolic constants for alerts. + */ +#define BR_ALERT_CLOSE_NOTIFY 0 +#define BR_ALERT_UNEXPECTED_MESSAGE 10 +#define BR_ALERT_BAD_RECORD_MAC 20 +#define BR_ALERT_RECORD_OVERFLOW 22 +#define BR_ALERT_DECOMPRESSION_FAILURE 30 +#define BR_ALERT_HANDSHAKE_FAILURE 40 +#define BR_ALERT_BAD_CERTIFICATE 42 +#define BR_ALERT_UNSUPPORTED_CERTIFICATE 43 +#define BR_ALERT_CERTIFICATE_REVOKED 44 +#define BR_ALERT_CERTIFICATE_EXPIRED 45 +#define BR_ALERT_CERTIFICATE_UNKNOWN 46 +#define BR_ALERT_ILLEGAL_PARAMETER 47 +#define BR_ALERT_UNKNOWN_CA 48 +#define BR_ALERT_ACCESS_DENIED 49 +#define BR_ALERT_DECODE_ERROR 50 +#define BR_ALERT_DECRYPT_ERROR 51 +#define BR_ALERT_PROTOCOL_VERSION 70 +#define BR_ALERT_INSUFFICIENT_SECURITY 71 +#define BR_ALERT_INTERNAL_ERROR 80 +#define BR_ALERT_USER_CANCELED 90 +#define BR_ALERT_NO_RENEGOTIATION 100 +#define BR_ALERT_UNSUPPORTED_EXTENSION 110 +#define BR_ALERT_NO_APPLICATION_PROTOCOL 120 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/bearssl/bearssl_x509.h b/tools/sdk/include/bearssl/bearssl_x509.h new file mode 100644 index 000000000..af01693f0 --- /dev/null +++ b/tools/sdk/include/bearssl/bearssl_x509.h @@ -0,0 +1,1451 @@ +/* + * Copyright (c) 2016 Thomas Pornin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BR_BEARSSL_X509_H__ +#define BR_BEARSSL_X509_H__ + +#include +#include + +#include "bearssl_ec.h" +#include "bearssl_hash.h" +#include "bearssl_rsa.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file bearssl_x509.h + * + * # X.509 Certificate Chain Processing + * + * An X.509 processing engine receives an X.509 chain, chunk by chunk, + * as received from a SSL/TLS client or server (the client receives the + * server's certificate chain, and the server receives the client's + * certificate chain if it requested a client certificate). The chain + * is thus injected in the engine in SSL order (end-entity first). + * + * The engine's job is to return the public key to use for SSL/TLS. + * How exactly that key is obtained and verified is entirely up to the + * engine. + * + * **The "known key" engine** returns a public key which is already known + * from out-of-band information (e.g. the client _remembers_ the key from + * a previous connection, as in the usual SSH model). This is the simplest + * engine since it simply ignores the chain, thereby avoiding the need + * for any decoding logic. + * + * **The "minimal" engine** implements minimal X.509 decoding and chain + * validation: + * + * - The provided chain should validate "as is". There is no attempt + * at reordering, skipping or downloading extra certificates. + * + * - X.509 v1, v2 and v3 certificates are supported. + * + * - Trust anchors are a DN and a public key. Each anchor is either a + * "CA" anchor, or a non-CA. + * + * - If the end-entity certificate matches a non-CA anchor (subject DN + * is equal to the non-CA name, and public key is also identical to + * the anchor key), then this is a _direct trust_ case and the + * remaining certificates are ignored. + * + * - Unless direct trust is applied, the chain must be verifiable up to + * a certificate whose issuer DN matches the DN from a "CA" trust anchor, + * and whose signature is verifiable against that anchor's public key. + * Subsequent certificates in the chain are ignored. + * + * - The engine verifies subject/issuer DN matching, and enforces + * processing of Basic Constraints and Key Usage extensions. The + * Authority Key Identifier, Subject Key Identifier, Issuer Alt Name, + * Subject Directory Attribute, CRL Distribution Points, Freshest CRL, + * Authority Info Access and Subject Info Access extensions are + * ignored. The Subject Alt Name is decoded for the end-entity + * certificate under some conditions (see below). Other extensions + * are ignored if non-critical, or imply chain rejection if critical. + * + * - The Subject Alt Name extension is parsed for names of type `dNSName` + * when decoding the end-entity certificate, and only if there is a + * server name to match. If there is no SAN extension, then the + * Common Name from the subjectDN is used. That name matching is + * case-insensitive and honours a single starting wildcard (i.e. if + * the name in the certificate starts with "`*.`" then this matches + * any word as first element). Note: this name matching is performed + * also in the "direct trust" model. + * + * - DN matching is byte-to-byte equality (a future version might + * include some limited processing for case-insensitive matching and + * whitespace normalisation). + * + * - Successful validation produces a public key type but also a set + * of allowed usages (`BR_KEYTYPE_KEYX` and/or `BR_KEYTYPE_SIGN`). + * The caller is responsible for checking that the key type and + * usages are compatible with the expected values (e.g. with the + * selected cipher suite, when the client validates the server's + * certificate). + * + * **Important caveats:** + * + * - The "minimal" engine does not check revocation status. The relevant + * extensions are ignored, and CRL or OCSP responses are not gathered + * or checked. + * + * - The "minimal" engine does not currently support Name Constraints + * (some basic functionality to handle sub-domains may be added in a + * later version). + * + * - The decoder is not "validating" in the sense that it won't reject + * some certificates with invalid field values when these fields are + * not actually processed. + */ + +/* + * X.509 error codes are in the 32..63 range. + */ + +/** \brief X.509 status: validation was successful; this is not actually + an error. */ +#define BR_ERR_X509_OK 32 + +/** \brief X.509 status: invalid value in an ASN.1 structure. */ +#define BR_ERR_X509_INVALID_VALUE 33 + +/** \brief X.509 status: truncated certificate. */ +#define BR_ERR_X509_TRUNCATED 34 + +/** \brief X.509 status: empty certificate chain (no certificate at all). */ +#define BR_ERR_X509_EMPTY_CHAIN 35 + +/** \brief X.509 status: decoding error: inner element extends beyond + outer element size. */ +#define BR_ERR_X509_INNER_TRUNC 36 + +/** \brief X.509 status: decoding error: unsupported tag class (application + or private). */ +#define BR_ERR_X509_BAD_TAG_CLASS 37 + +/** \brief X.509 status: decoding error: unsupported tag value. */ +#define BR_ERR_X509_BAD_TAG_VALUE 38 + +/** \brief X.509 status: decoding error: indefinite length. */ +#define BR_ERR_X509_INDEFINITE_LENGTH 39 + +/** \brief X.509 status: decoding error: extraneous element. */ +#define BR_ERR_X509_EXTRA_ELEMENT 40 + +/** \brief X.509 status: decoding error: unexpected element. */ +#define BR_ERR_X509_UNEXPECTED 41 + +/** \brief X.509 status: decoding error: expected constructed element, but + is primitive. */ +#define BR_ERR_X509_NOT_CONSTRUCTED 42 + +/** \brief X.509 status: decoding error: expected primitive element, but + is constructed. */ +#define BR_ERR_X509_NOT_PRIMITIVE 43 + +/** \brief X.509 status: decoding error: BIT STRING length is not multiple + of 8. */ +#define BR_ERR_X509_PARTIAL_BYTE 44 + +/** \brief X.509 status: decoding error: BOOLEAN value has invalid length. */ +#define BR_ERR_X509_BAD_BOOLEAN 45 + +/** \brief X.509 status: decoding error: value is off-limits. */ +#define BR_ERR_X509_OVERFLOW 46 + +/** \brief X.509 status: invalid distinguished name. */ +#define BR_ERR_X509_BAD_DN 47 + +/** \brief X.509 status: invalid date/time representation. */ +#define BR_ERR_X509_BAD_TIME 48 + +/** \brief X.509 status: certificate contains unsupported features that + cannot be ignored. */ +#define BR_ERR_X509_UNSUPPORTED 49 + +/** \brief X.509 status: key or signature size exceeds internal limits. */ +#define BR_ERR_X509_LIMIT_EXCEEDED 50 + +/** \brief X.509 status: key type does not match that which was expected. */ +#define BR_ERR_X509_WRONG_KEY_TYPE 51 + +/** \brief X.509 status: signature is invalid. */ +#define BR_ERR_X509_BAD_SIGNATURE 52 + +/** \brief X.509 status: validation time is unknown. */ +#define BR_ERR_X509_TIME_UNKNOWN 53 + +/** \brief X.509 status: certificate is expired or not yet valid. */ +#define BR_ERR_X509_EXPIRED 54 + +/** \brief X.509 status: issuer/subject DN mismatch in the chain. */ +#define BR_ERR_X509_DN_MISMATCH 55 + +/** \brief X.509 status: expected server name was not found in the chain. */ +#define BR_ERR_X509_BAD_SERVER_NAME 56 + +/** \brief X.509 status: unknown critical extension in certificate. */ +#define BR_ERR_X509_CRITICAL_EXTENSION 57 + +/** \brief X.509 status: not a CA, or path length constraint violation */ +#define BR_ERR_X509_NOT_CA 58 + +/** \brief X.509 status: Key Usage extension prohibits intended usage. */ +#define BR_ERR_X509_FORBIDDEN_KEY_USAGE 59 + +/** \brief X.509 status: public key found in certificate is too small. */ +#define BR_ERR_X509_WEAK_PUBLIC_KEY 60 + +/** \brief X.509 status: chain could not be linked to a trust anchor. */ +#define BR_ERR_X509_NOT_TRUSTED 62 + +/** + * \brief Aggregate structure for public keys. + */ +typedef struct { + /** \brief Key type: `BR_KEYTYPE_RSA` or `BR_KEYTYPE_EC` */ + unsigned char key_type; + /** \brief Actual public key. */ + union { + /** \brief RSA public key. */ + br_rsa_public_key rsa; + /** \brief EC public key. */ + br_ec_public_key ec; + } key; +} br_x509_pkey; + +/** + * \brief Distinguished Name (X.500) structure. + * + * The DN is DER-encoded. + */ +typedef struct { + /** \brief Encoded DN data. */ + unsigned char *data; + /** \brief Encoded DN length (in bytes). */ + size_t len; +} br_x500_name; + +/** + * \brief Trust anchor structure. + */ +typedef struct { + /** \brief Encoded DN (X.500 name). */ + br_x500_name dn; + /** \brief Anchor flags (e.g. `BR_X509_TA_CA`). */ + unsigned flags; + /** \brief Anchor public key. */ + br_x509_pkey pkey; +} br_x509_trust_anchor; + +/** + * \brief Trust anchor flag: CA. + * + * A "CA" anchor is deemed fit to verify signatures on certificates. + * A "non-CA" anchor is accepted only for direct trust (server's + * certificate name and key match the anchor). + */ +#define BR_X509_TA_CA 0x0001 + +/* + * Key type: combination of a basic key type (low 4 bits) and some + * optional flags. + * + * For a public key, the basic key type only is set. + * + * For an expected key type, the flags indicate the intended purpose(s) + * for the key; the basic key type may be set to 0 to indicate that any + * key type compatible with the indicated purpose is acceptable. + */ +/** \brief Key type: algorithm is RSA. */ +#define BR_KEYTYPE_RSA 1 +/** \brief Key type: algorithm is EC. */ +#define BR_KEYTYPE_EC 2 + +/** + * \brief Key type: usage is "key exchange". + * + * This value is combined (with bitwise OR) with the algorithm + * (`BR_KEYTYPE_RSA` or `BR_KEYTYPE_EC`) when informing the X.509 + * validation engine that it should find a public key of that type, + * fit for key exchanges (e.g. `TLS_RSA_*` and `TLS_ECDH_*` cipher + * suites). + */ +#define BR_KEYTYPE_KEYX 0x10 + +/** + * \brief Key type: usage is "signature". + * + * This value is combined (with bitwise OR) with the algorithm + * (`BR_KEYTYPE_RSA` or `BR_KEYTYPE_EC`) when informing the X.509 + * validation engine that it should find a public key of that type, + * fit for signatures (e.g. `TLS_ECDHE_*` cipher suites). + */ +#define BR_KEYTYPE_SIGN 0x20 + +/* + * start_chain Called when a new chain is started. If 'server_name' + * is not NULL and non-empty, then it is a name that + * should be looked for in the EE certificate (in the + * SAN extension as dNSName, or in the subjectDN's CN + * if there is no SAN extension). + * The caller ensures that the provided 'server_name' + * pointer remains valid throughout validation. + * + * start_cert Begins a new certificate in the chain. The provided + * length is in bytes; this is the total certificate length. + * + * append Get some additional bytes for the current certificate. + * + * end_cert Ends the current certificate. + * + * end_chain Called at the end of the chain. Returned value is + * 0 on success, or a non-zero error code. + * + * get_pkey Returns the EE certificate public key. + * + * For a complete chain, start_chain() and end_chain() are always + * called. For each certificate, start_cert(), some append() calls, then + * end_cert() are called, in that order. There may be no append() call + * at all if the certificate is empty (which is not valid but may happen + * if the peer sends exactly that). + * + * get_pkey() shall return a pointer to a structure that is valid as + * long as a new chain is not started. This may be a sub-structure + * within the context for the engine. This function MAY return a valid + * pointer to a public key even in some cases of validation failure, + * depending on the validation engine. + */ + +/** + * \brief Class type for an X.509 engine. + * + * A certificate chain validation uses a caller-allocated context, which + * contains the running state for that validation. Methods are called + * in due order: + * + * - `start_chain()` is called at the start of the validation. + * - Certificates are processed one by one, in SSL order (end-entity + * comes first). For each certificate, the following methods are + * called: + * + * - `start_cert()` at the beginning of the certificate. + * - `append()` is called zero, one or more times, to provide + * the certificate (possibly in chunks). + * - `end_cert()` at the end of the certificate. + * + * - `end_chain()` is called when the last certificate in the chain + * was processed. + * - `get_pkey()` is called after chain processing, if the chain + * validation was succesfull. + * + * A context structure may be reused; the `start_chain()` method shall + * ensure (re)initialisation. + */ +typedef struct br_x509_class_ br_x509_class; +struct br_x509_class_ { + /** + * \brief X.509 context size, in bytes. + */ + size_t context_size; + + /** + * \brief Start a new chain. + * + * This method shall set the vtable (first field) of the context + * structure. + * + * The `server_name`, if not `NULL`, will be considered as a + * fully qualified domain name, to be matched against the `dNSName` + * elements of the end-entity certificate's SAN extension (if there + * is no SAN, then the Common Name from the subjectDN will be used). + * If `server_name` is `NULL` then no such matching is performed. + * + * \param ctx validation context. + * \param server_name server name to match (or `NULL`). + */ + void (*start_chain)(const br_x509_class **ctx, + const char *server_name); + + /** + * \brief Start a new certificate. + * + * \param ctx validation context. + * \param length new certificate length (in bytes). + */ + void (*start_cert)(const br_x509_class **ctx, uint32_t length); + + /** + * \brief Receive some bytes for the current certificate. + * + * This function may be called several times in succession for + * a given certificate. The caller guarantees that for each + * call, `len` is not zero, and the sum of all chunk lengths + * for a certificate matches the total certificate length which + * was provided in the previous `start_cert()` call. + * + * If the new certificate is empty (no byte at all) then this + * function won't be called at all. + * + * \param ctx validation context. + * \param buf certificate data chunk. + * \param len certificate data chunk length (in bytes). + */ + void (*append)(const br_x509_class **ctx, + const unsigned char *buf, size_t len); + + /** + * \brief Finish the current certificate. + * + * This function is called when the end of the current certificate + * is reached. + * + * \param ctx validation context. + */ + void (*end_cert)(const br_x509_class **ctx); + + /** + * \brief Finish the chain. + * + * This function is called at the end of the chain. It shall + * return either 0 if the validation was successful, or a + * non-zero error code. The `BR_ERR_X509_*` constants are + * error codes, though other values may be possible. + * + * \param ctx validation context. + * \return 0 on success, or a non-zero error code. + */ + unsigned (*end_chain)(const br_x509_class **ctx); + + /** + * \brief Get the resulting end-entity public key. + * + * The decoded public key is returned. The returned pointer + * may be valid only as long as the context structure is + * unmodified, i.e. it may cease to be valid if the context + * is released or reused. + * + * This function _may_ return `NULL` if the validation failed. + * However, returning a public key does not mean that the + * validation was wholly successful; some engines may return + * a decoded public key even if the chain did not end on a + * trusted anchor. + * + * If validation succeeded and `usage` is not `NULL`, then + * `*usage` is filled with a combination of `BR_KEYTYPE_SIGN` + * and/or `BR_KEYTYPE_KEYX` that specifies the validated key + * usage types. It is the caller's responsibility to check + * that value against the intended use of the public key. + * + * \param ctx validation context. + * \return the end-entity public key, or `NULL`. + */ + const br_x509_pkey *(*get_pkey)( + const br_x509_class *const *ctx, unsigned *usages); +}; + +/** + * \brief The "known key" X.509 engine structure. + * + * The structure contents are opaque (they shall not be accessed directly), + * except for the first field (the vtable). + * + * The "known key" engine returns an externally configured public key, + * and totally ignores the certificate contents. + */ +typedef struct { + /** \brief Reference to the context vtable. */ + const br_x509_class *vtable; +#ifndef BR_DOXYGEN_IGNORE + br_x509_pkey pkey; + unsigned usages; +#endif +} br_x509_knownkey_context; + +/** + * \brief Class instance for the "known key" X.509 engine. + */ +extern const br_x509_class br_x509_knownkey_vtable; + +/** + * \brief Initialize a "known key" X.509 engine with a known RSA public key. + * + * The `usages` parameter indicates the allowed key usages for that key + * (`BR_KEYTYPE_KEYX` and/or `BR_KEYTYPE_SIGN`). + * + * The provided pointers are linked in, not copied, so they must remain + * valid while the public key may be in usage. + * + * \param ctx context to initialise. + * \param pk known public key. + * \param usages allowed key usages. + */ +void br_x509_knownkey_init_rsa(br_x509_knownkey_context *ctx, + const br_rsa_public_key *pk, unsigned usages); + +/** + * \brief Initialize a "known key" X.509 engine with a known EC public key. + * + * The `usages` parameter indicates the allowed key usages for that key + * (`BR_KEYTYPE_KEYX` and/or `BR_KEYTYPE_SIGN`). + * + * The provided pointers are linked in, not copied, so they must remain + * valid while the public key may be in usage. + * + * \param ctx context to initialise. + * \param pk known public key. + * \param usages allowed key usages. + */ +void br_x509_knownkey_init_ec(br_x509_knownkey_context *ctx, + const br_ec_public_key *pk, unsigned usages); + +#ifndef BR_DOXYGEN_IGNORE +/* + * The minimal X.509 engine has some state buffers which must be large + * enough to simultaneously accommodate: + * -- the public key extracted from the current certificate; + * -- the signature on the current certificate or on the previous + * certificate; + * -- the public key extracted from the EE certificate. + * + * We store public key elements in their raw unsigned big-endian + * encoding. We want to support up to RSA-4096 with a short (up to 64 + * bits) public exponent, thus a buffer for a public key must have + * length at least 520 bytes. Similarly, a RSA-4096 signature has length + * 512 bytes. + * + * Though RSA public exponents can formally be as large as the modulus + * (mathematically, even larger exponents would work, but PKCS#1 forbids + * them), exponents that do not fit on 32 bits are extremely rare, + * notably because some widespread implementations (e.g. Microsoft's + * CryptoAPI) don't support them. Moreover, large public exponent do not + * seem to imply any tangible security benefit, and they increase the + * cost of public key operations. The X.509 "minimal" engine will tolerate + * public exponents of arbitrary size as long as the modulus and the + * exponent can fit together in the dedicated buffer. + * + * EC public keys are shorter than RSA public keys; even with curve + * NIST P-521 (the largest curve we care to support), a public key is + * encoded over 133 bytes only. + */ +#define BR_X509_BUFSIZE_KEY 520 +#define BR_X509_BUFSIZE_SIG 512 +#endif + +/** + * \brief Type for receiving a name element. + * + * An array of such structures can be provided to the X.509 decoding + * engines. If the specified elements are found in the certificate + * subject DN or the SAN extension, then the name contents are copied + * as zero-terminated strings into the buffer. + * + * The decoder converts TeletexString and BMPString to UTF8String, and + * ensures that the resulting string is zero-terminated. If the string + * does not fit in the provided buffer, then the copy is aborted and an + * error is reported. + */ +typedef struct { + /** + * \brief Element OID. + * + * For X.500 name elements (to be extracted from the subject DN), + * this is the encoded OID for the requested name element; the + * first byte shall contain the length of the DER-encoded OID + * value, followed by the OID value (for instance, OID 2.5.4.3, + * for id-at-commonName, will be `03 55 04 03`). This is + * equivalent to full DER encoding with the length but without + * the tag. + * + * For SAN name elements, the first byte (`oid[0]`) has value 0, + * followed by another byte that matches the expected GeneralName + * tag. Allowed second byte values are then: + * + * - 1: `rfc822Name` + * + * - 2: `dNSName` + * + * - 6: `uniformResourceIdentifier` + * + * - 0: `otherName` + * + * If first and second byte are 0, then this is a SAN element of + * type `otherName`; the `oid[]` array should then contain, right + * after the two bytes of value 0, an encoded OID (with the same + * conventions as for X.500 name elements). If a match is found + * for that OID, then the corresponding name element will be + * extracted, as long as it is a supported string type. + */ + const unsigned char *oid; + + /** + * \brief Destination buffer. + */ + char *buf; + + /** + * \brief Length (in bytes) of the destination buffer. + * + * The buffer MUST NOT be smaller than 1 byte. + */ + size_t len; + + /** + * \brief Decoding status. + * + * Status is 0 if the name element was not found, 1 if it was + * found and decoded, or -1 on error. Error conditions include + * an unrecognised encoding, an invalid encoding, or a string + * too large for the destination buffer. + */ + int status; + +} br_name_element; + +/** + * \brief The "minimal" X.509 engine structure. + * + * The structure contents are opaque (they shall not be accessed directly), + * except for the first field (the vtable). + * + * The "minimal" engine performs a rudimentary but serviceable X.509 path + * validation. + */ +typedef struct { + const br_x509_class *vtable; + +#ifndef BR_DOXYGEN_IGNORE + /* Structure for returning the EE public key. */ + br_x509_pkey pkey; + + /* CPU for the T0 virtual machine. */ + struct { + uint32_t *dp; + uint32_t *rp; + const unsigned char *ip; + } cpu; + uint32_t dp_stack[32]; + uint32_t rp_stack[32]; + int err; + + /* Server name to match with the SAN / CN of the EE certificate. */ + const char *server_name; + + /* Validated key usages. */ + unsigned char key_usages; + + /* Explicitly set date and time. */ + uint32_t days, seconds; + + /* Current certificate length (in bytes). Set to 0 when the + certificate has been fully processed. */ + uint32_t cert_length; + + /* Number of certificates processed so far in the current chain. + It is incremented at the end of the processing of a certificate, + so it is 0 for the EE. */ + uint32_t num_certs; + + /* Certificate data chunk. */ + const unsigned char *hbuf; + size_t hlen; + + /* The pad serves as destination for various operations. */ + unsigned char pad[256]; + + /* Buffer for EE public key data. */ + unsigned char ee_pkey_data[BR_X509_BUFSIZE_KEY]; + + /* Buffer for currently decoded public key. */ + unsigned char pkey_data[BR_X509_BUFSIZE_KEY]; + + /* Signature type: signer key type, offset to the hash + function OID (in the T0 data block) and hash function + output length (TBS hash length). */ + unsigned char cert_signer_key_type; + uint16_t cert_sig_hash_oid; + unsigned char cert_sig_hash_len; + + /* Current/last certificate signature. */ + unsigned char cert_sig[BR_X509_BUFSIZE_SIG]; + uint16_t cert_sig_len; + + /* Minimum RSA key length (difference in bytes from 128). */ + int16_t min_rsa_size; + + /* Configured trust anchors. */ + const br_x509_trust_anchor *trust_anchors; + size_t trust_anchors_num; + + /* private context for dynamic callbacks */ + void *trust_anchor_dynamic_ctx; + /* Dynamic trust anchor, for on-the-fly loading of TAs */ + const br_x509_trust_anchor* (*trust_anchor_dynamic)(void *ctx, void *hashed_dn, size_t hashed_dn_len); + /* And a chance to free any dynamically allocated TA returned from above */ + void (*trust_anchor_dynamic_free)(void *ctx, const br_x509_trust_anchor *ta); + + /* + * Multi-hasher for the TBS. + */ + unsigned char do_mhash; + br_multihash_context mhash; + unsigned char tbs_hash[64]; + + /* + * Simple hasher for the subject/issuer DN. + */ + unsigned char do_dn_hash; + const br_hash_class *dn_hash_impl; + br_hash_compat_context dn_hash; + unsigned char current_dn_hash[64]; + unsigned char next_dn_hash[64]; + unsigned char saved_dn_hash[64]; + + /* + * Name elements to gather. + */ + br_name_element *name_elts; + size_t num_name_elts; + + /* + * Public key cryptography implementations (signature verification). + */ + br_rsa_pkcs1_vrfy irsa; + br_ecdsa_vrfy iecdsa; + const br_ec_impl *iec; +#endif + +} br_x509_minimal_context; + +/** + * \brief Class instance for the "minimal" X.509 engine. + */ +extern const br_x509_class br_x509_minimal_vtable; + +/** + * \brief Initialise a "minimal" X.509 engine. + * + * The `dn_hash_impl` parameter shall be a hash function internally used + * to match X.500 names (subject/issuer DN, and anchor names). Any standard + * hash function may be used, but a collision-resistant hash function is + * advised. + * + * After initialization, some implementations for signature verification + * (hash functions and signature algorithms) MUST be added. + * + * \param ctx context to initialise. + * \param dn_hash_impl hash function for DN comparisons. + * \param trust_anchors trust anchors. + * \param trust_anchors_num number of trust anchors. + */ +void br_x509_minimal_init(br_x509_minimal_context *ctx, + const br_hash_class *dn_hash_impl, + const br_x509_trust_anchor *trust_anchors, size_t trust_anchors_num); + +/** + * \brief Set the optional dynamic trust anchor lookup callbacks + * + * The dynamic trust anchor lookup callbacks allow an application to implement + * a non-memory resident trust anchor store. This can be useful on embedded + * systems where RAM is at a premium, but there is an external stable store, + * such as embedded flash or SD card, to keep many CA certificates. Set or + * leave these functions as NULL to not use such a feature. + * + * The dynamic routine will be passed in the hashed DN in question using the + * dn_hash_impl, and should compare this DN to its set of hashed known DNs. + * Of course, the same dn_hash_impl needs to be used in the dynamic routine. + * After the trust_anchor* is used, the dynamic_free callback is given a + * chance to deallocate its memory, if needed. + * + * \param ctx context to initialise. + * \param dynamic_ctx private context for the dynamic callback + * \param trust_anchor_dynamic provides a trust_anchor* for a hashed_dn + * \param trust_anchor_dynamic_free allows deallocation of returned TA + */ +static inline void +br_x509_minimal_set_dynamic(br_x509_minimal_context *ctx, void *dynamic_ctx, + const br_x509_trust_anchor* (*dynamic)(void *ctx, void *hashed_dn, size_t hashed_dn_len), + void (*dynamic_free)(void *ctx, const br_x509_trust_anchor *ta)) +{ + ctx->trust_anchor_dynamic_ctx = dynamic_ctx; + ctx->trust_anchor_dynamic = dynamic; + ctx->trust_anchor_dynamic_free = dynamic_free; +} + +/** + * \brief Set a supported hash function in an X.509 "minimal" engine. + * + * Hash functions are used with signature verification algorithms. + * Once initialised (with `br_x509_minimal_init()`), the context must + * be configured with the hash functions it shall support for that + * purpose. The hash function identifier MUST be one of the standard + * hash function identifiers (1 to 6, for MD5, SHA-1, SHA-224, SHA-256, + * SHA-384 and SHA-512). + * + * If `impl` is `NULL`, this _removes_ support for the designated + * hash function. + * + * \param ctx validation context. + * \param id hash function identifier (from 1 to 6). + * \param impl hash function implementation (or `NULL`). + */ +static inline void +br_x509_minimal_set_hash(br_x509_minimal_context *ctx, + int id, const br_hash_class *impl) +{ + br_multihash_setimpl(&ctx->mhash, id, impl); +} + +/** + * \brief Set a RSA signature verification implementation in the X.509 + * "minimal" engine. + * + * Once initialised (with `br_x509_minimal_init()`), the context must + * be configured with the signature verification implementations that + * it is supposed to support. If `irsa` is `0`, then the RSA support + * is disabled. + * + * \param ctx validation context. + * \param irsa RSA signature verification implementation (or `0`). + */ +static inline void +br_x509_minimal_set_rsa(br_x509_minimal_context *ctx, + br_rsa_pkcs1_vrfy irsa) +{ + ctx->irsa = irsa; +} + +/** + * \brief Set a ECDSA signature verification implementation in the X.509 + * "minimal" engine. + * + * Once initialised (with `br_x509_minimal_init()`), the context must + * be configured with the signature verification implementations that + * it is supposed to support. + * + * If `iecdsa` is `0`, then this call disables ECDSA support; in that + * case, `iec` may be `NULL`. Otherwise, `iecdsa` MUST point to a function + * that verifies ECDSA signatures with format "asn1", and it will use + * `iec` as underlying elliptic curve support. + * + * \param ctx validation context. + * \param iec elliptic curve implementation (or `NULL`). + * \param iecdsa ECDSA implementation (or `0`). + */ +static inline void +br_x509_minimal_set_ecdsa(br_x509_minimal_context *ctx, + const br_ec_impl *iec, br_ecdsa_vrfy iecdsa) +{ + ctx->iecdsa = iecdsa; + ctx->iec = iec; +} + +/** + * \brief Initialise a "minimal" X.509 engine with default algorithms. + * + * This function performs the same job as `br_x509_minimal_init()`, but + * also sets implementations for RSA, ECDSA, and the standard hash + * functions. + * + * \param ctx context to initialise. + * \param trust_anchors trust anchors. + * \param trust_anchors_num number of trust anchors. + */ +void br_x509_minimal_init_full(br_x509_minimal_context *ctx, + const br_x509_trust_anchor *trust_anchors, size_t trust_anchors_num); + +/** + * \brief Set the validation time for the X.509 "minimal" engine. + * + * The validation time is set as two 32-bit integers, for days and + * seconds since a fixed epoch: + * + * - Days are counted in a proleptic Gregorian calendar since + * January 1st, 0 AD. Year "0 AD" is the one that preceded "1 AD"; + * it is also traditionally known as "1 BC". + * + * - Seconds are counted since midnight, from 0 to 86400 (a count of + * 86400 is possible only if a leap second happened). + * + * The validation date and time is understood in the UTC time zone. + * + * If the validation date and time are not explicitly set, but BearSSL + * was compiled with support for the system clock on the underlying + * platform, then the current time will automatically be used. Otherwise, + * not setting the validation date and time implies a validation + * failure (except in case of direct trust of the EE key). + * + * \param ctx validation context. + * \param days days since January 1st, 0 AD (Gregorian calendar). + * \param seconds seconds since midnight (0 to 86400). + */ +static inline void +br_x509_minimal_set_time(br_x509_minimal_context *ctx, + uint32_t days, uint32_t seconds) +{ + ctx->days = days; + ctx->seconds = seconds; +} + +/** + * \brief Set the minimal acceptable length for RSA keys (X.509 "minimal" + * engine). + * + * The RSA key length is expressed in bytes. The default minimum key + * length is 128 bytes, corresponding to 1017 bits. RSA keys shorter + * than the configured length will be rejected, implying validation + * failure. This setting applies to keys extracted from certificates + * (both end-entity, and intermediate CA) but not to "CA" trust anchors. + * + * \param ctx validation context. + * \param byte_length minimum RSA key length, **in bytes** (not bits). + */ +static inline void +br_x509_minimal_set_minrsa(br_x509_minimal_context *ctx, int byte_length) +{ + ctx->min_rsa_size = (int16_t)(byte_length - 128); +} + +/** + * \brief Set the name elements to gather. + * + * The provided array is linked in the context. The elements are + * gathered from the EE certificate. If the same element type is + * requested several times, then the relevant structures will be filled + * in the order the matching values are encountered in the certificate. + * + * \param ctx validation context. + * \param elts array of name element structures to fill. + * \param num_elts number of name element structures to fill. + */ +static inline void +br_x509_minimal_set_name_elements(br_x509_minimal_context *ctx, + br_name_element *elts, size_t num_elts) +{ + ctx->name_elts = elts; + ctx->num_name_elts = num_elts; +} + +/** + * \brief X.509 decoder context. + * + * This structure is _not_ for X.509 validation, but for extracting + * names and public keys from encoded certificates. Intended usage is + * to use (self-signed) certificates as trust anchors. + * + * Contents are opaque and shall not be accessed directly. + */ +typedef struct { + +#ifndef BR_DOXYGEN_IGNORE + /* Structure for returning the public key. */ + br_x509_pkey pkey; + + /* CPU for the T0 virtual machine. */ + struct { + uint32_t *dp; + uint32_t *rp; + const unsigned char *ip; + } cpu; + uint32_t dp_stack[32]; + uint32_t rp_stack[32]; + int err; + + /* The pad serves as destination for various operations. */ + unsigned char pad[256]; + + /* Flag set when decoding succeeds. */ + unsigned char decoded; + + /* Validity dates. */ + uint32_t notbefore_days, notbefore_seconds; + uint32_t notafter_days, notafter_seconds; + + /* The "CA" flag. This is set to true if the certificate contains + a Basic Constraints extension that asserts CA status. */ + unsigned char isCA; + + /* DN processing: the subject DN is extracted and pushed to the + provided callback. */ + unsigned char copy_dn; + void *append_dn_ctx; + void (*append_dn)(void *ctx, const void *buf, size_t len); + + /* DN processing: the issuer DN is extracted and pushed to the + provided callback. */ + unsigned char copy_in; + void *append_in_ctx; + void (*append_in)(void *ctx, const void *buf, size_t len); + + /* Certificate data chunk. */ + const unsigned char *hbuf; + size_t hlen; + + /* Buffer for decoded public key. */ + unsigned char pkey_data[BR_X509_BUFSIZE_KEY]; + + /* Type of key and hash function used in the certificate signature. */ + unsigned char signer_key_type; + unsigned char signer_hash_id; +#endif + +} br_x509_decoder_context; + +/** + * \brief Initialise an X.509 decoder context for processing a new + * certificate. + * + * The `append_dn()` callback (with opaque context `append_dn_ctx`) + * will be invoked to receive, chunk by chunk, the certificate's + * subject DN. If `append_dn` is `0` then the subject DN will be + * ignored. + * + * \param ctx X.509 decoder context to initialise. + * \param append_dn DN receiver callback (or `0`). + * \param append_dn_ctx context for the DN receiver callback. + * \param append_in issuer DN receiver callback (or `0`). + * \param append_in_ctx context for the issuer DN receiver callback. + */ +void br_x509_decoder_init(br_x509_decoder_context *ctx, + void (*append_dn)(void *ctx, const void *buf, size_t len), + void *append_dn_ctx, + void (*append_in)(void *ctx, const void *buf, size_t len), + void *append_in_ctx); + +/** + * \brief Push some certificate bytes into a decoder context. + * + * If `len` is non-zero, then that many bytes are pushed, from address + * `data`, into the provided decoder context. + * + * \param ctx X.509 decoder context. + * \param data certificate data chunk. + * \param len certificate data chunk length (in bytes). + */ +void br_x509_decoder_push(br_x509_decoder_context *ctx, + const void *data, size_t len); + +/** + * \brief Obtain the decoded public key. + * + * Returned value is a pointer to a structure internal to the decoder + * context; releasing or reusing the decoder context invalidates that + * structure. + * + * If decoding was not finished, or failed, then `NULL` is returned. + * + * \param ctx X.509 decoder context. + * \return the public key, or `NULL` on unfinished/error. + */ +static inline br_x509_pkey * +br_x509_decoder_get_pkey(br_x509_decoder_context *ctx) +{ + if (ctx->decoded && ctx->err == 0) { + return &ctx->pkey; + } else { + return NULL; + } +} + +/** + * \brief Get decoder error status. + * + * If no error was reported yet but the certificate decoding is not + * finished, then the error code is `BR_ERR_X509_TRUNCATED`. If decoding + * was successful, then 0 is returned. + * + * \param ctx X.509 decoder context. + * \return 0 on successful decoding, or a non-zero error code. + */ +static inline int +br_x509_decoder_last_error(br_x509_decoder_context *ctx) +{ + if (ctx->err != 0) { + return ctx->err; + } + if (!ctx->decoded) { + return BR_ERR_X509_TRUNCATED; + } + return 0; +} + +/** + * \brief Get the "isCA" flag from an X.509 decoder context. + * + * This flag is set if the decoded certificate claims to be a CA through + * a Basic Constraints extension. This flag should not be read before + * decoding completed successfully. + * + * \param ctx X.509 decoder context. + * \return the "isCA" flag. + */ +static inline int +br_x509_decoder_isCA(br_x509_decoder_context *ctx) +{ + return ctx->isCA; +} + +/** + * \brief Get the issuing CA key type (type of algorithm used to sign the + * decoded certificate). + * + * This is `BR_KEYTYPE_RSA` or `BR_KEYTYPE_EC`. The value 0 is returned + * if the signature type was not recognised. + * + * \param ctx X.509 decoder context. + * \return the issuing CA key type. + */ +static inline int +br_x509_decoder_get_signer_key_type(br_x509_decoder_context *ctx) +{ + return ctx->signer_key_type; +} + +/** + * \brief Get the identifier for the hash function used to sign the decoded + * certificate. + * + * This is 0 if the hash function was not recognised. + * + * \param ctx X.509 decoder context. + * \return the signature hash function identifier. + */ +static inline int +br_x509_decoder_get_signer_hash_id(br_x509_decoder_context *ctx) +{ + return ctx->signer_hash_id; +} + +/** + * \brief Type for an X.509 certificate (DER-encoded). + */ +typedef struct { + /** \brief The DER-encoded certificate data. */ + unsigned char *data; + /** \brief The DER-encoded certificate length (in bytes). */ + size_t data_len; +} br_x509_certificate; + +/** + * \brief Private key decoder context. + * + * The private key decoder recognises RSA and EC private keys, either in + * their raw, DER-encoded format, or wrapped in an unencrypted PKCS#8 + * archive (again DER-encoded). + * + * Structure contents are opaque and shall not be accessed directly. + */ +typedef struct { +#ifndef BR_DOXYGEN_IGNORE + /* Structure for returning the private key. */ + union { + br_rsa_private_key rsa; + br_ec_private_key ec; + } key; + + /* CPU for the T0 virtual machine. */ + struct { + uint32_t *dp; + uint32_t *rp; + const unsigned char *ip; + } cpu; + uint32_t dp_stack[32]; + uint32_t rp_stack[32]; + int err; + + /* Private key data chunk. */ + const unsigned char *hbuf; + size_t hlen; + + /* The pad serves as destination for various operations. */ + unsigned char pad[256]; + + /* Decoded key type; 0 until decoding is complete. */ + unsigned char key_type; + + /* Buffer for the private key elements. It shall be large enough + to accommodate all elements for a RSA-4096 private key (roughly + five 2048-bit integers, possibly a bit more). */ + unsigned char key_data[3 * BR_X509_BUFSIZE_SIG]; +#endif +} br_skey_decoder_context; + +/** + * \brief Initialise a private key decoder context. + * + * \param ctx key decoder context to initialise. + */ +void br_skey_decoder_init(br_skey_decoder_context *ctx); + +/** + * \brief Push some data bytes into a private key decoder context. + * + * If `len` is non-zero, then that many data bytes, starting at address + * `data`, are pushed into the decoder. + * + * \param ctx key decoder context. + * \param data private key data chunk. + * \param len private key data chunk length (in bytes). + */ +void br_skey_decoder_push(br_skey_decoder_context *ctx, + const void *data, size_t len); + +/** + * \brief Get the decoding status for a private key. + * + * Decoding status is 0 on success, or a non-zero error code. If the + * decoding is unfinished when this function is called, then the + * status code `BR_ERR_X509_TRUNCATED` is returned. + * + * \param ctx key decoder context. + * \return 0 on successful decoding, or a non-zero error code. + */ +static inline int +br_skey_decoder_last_error(const br_skey_decoder_context *ctx) +{ + if (ctx->err != 0) { + return ctx->err; + } + if (ctx->key_type == 0) { + return BR_ERR_X509_TRUNCATED; + } + return 0; +} + +/** + * \brief Get the decoded private key type. + * + * Private key type is `BR_KEYTYPE_RSA` or `BR_KEYTYPE_EC`. If decoding is + * not finished or failed, then 0 is returned. + * + * \param ctx key decoder context. + * \return decoded private key type, or 0. + */ +static inline int +br_skey_decoder_key_type(const br_skey_decoder_context *ctx) +{ + if (ctx->err == 0) { + return ctx->key_type; + } else { + return 0; + } +} + +/** + * \brief Get the decoded RSA private key. + * + * This function returns `NULL` if the decoding failed, or is not + * finished, or the key is not RSA. The returned pointer references + * structures within the context that can become invalid if the context + * is reused or released. + * + * \param ctx key decoder context. + * \return decoded RSA private key, or `NULL`. + */ +static inline const br_rsa_private_key * +br_skey_decoder_get_rsa(const br_skey_decoder_context *ctx) +{ + if (ctx->err == 0 && ctx->key_type == BR_KEYTYPE_RSA) { + return &ctx->key.rsa; + } else { + return NULL; + } +} + +/** + * \brief Get the decoded EC private key. + * + * This function returns `NULL` if the decoding failed, or is not + * finished, or the key is not EC. The returned pointer references + * structures within the context that can become invalid if the context + * is reused or released. + * + * \param ctx key decoder context. + * \return decoded EC private key, or `NULL`. + */ +static inline const br_ec_private_key * +br_skey_decoder_get_ec(const br_skey_decoder_context *ctx) +{ + if (ctx->err == 0 && ctx->key_type == BR_KEYTYPE_EC) { + return &ctx->key.ec; + } else { + return NULL; + } +} + +/** + * \brief Public key decoder context. + * + * The public key decoder recognises RSA and EC private keys, either in + * their raw, DER-encoded format, or wrapped in an unencrypted PKCS#8 + * archive (again DER-encoded). + * + * Structure contents are opaque and shall not be accessed directly. + */ +typedef struct { +#ifndef BR_DOXYGEN_IGNORE + /* Structure for returning the private key. */ + union { + br_rsa_public_key rsa; + br_ec_public_key ec; + } key; + + /* CPU for the T0 virtual machine. */ + struct { + uint32_t *dp; + uint32_t *rp; + const unsigned char *ip; + } cpu; + uint32_t dp_stack[32]; + uint32_t rp_stack[32]; + int err; + + /* Private key data chunk. */ + const unsigned char *hbuf; + size_t hlen; + + /* The pad serves as destination for various operations. */ + unsigned char pad[256]; + + /* Decoded key type; 0 until decoding is complete. */ + unsigned char key_type; + + /* Buffer for the private key elements. It shall be large enough + to accommodate all elements for a RSA-4096 private key (roughly + five 2048-bit integers, possibly a bit more). */ + unsigned char key_data[3 * BR_X509_BUFSIZE_SIG]; +#endif +} br_pkey_decoder_context; + + +/** + * \brief Initialise a public key decoder context. + * + * \param ctx key decoder context to initialise. + */ +void br_pkey_decoder_init(br_pkey_decoder_context *ctx); + +/** + * \brief Push some data bytes into a public key decoder context. + * + * If `len` is non-zero, then that many data bytes, starting at address + * `data`, are pushed into the decoder. + * + * \param ctx key decoder context. + * \param data private key data chunk. + * \param len private key data chunk length (in bytes). + */ +void br_pkey_decoder_push(br_pkey_decoder_context *ctx, + const void *data, size_t len); + +/** + * \brief Get the decoding status for a public key. + * + * Decoding status is 0 on success, or a non-zero error code. If the + * decoding is unfinished when this function is called, then the + * status code `BR_ERR_X509_TRUNCATED` is returned. + * + * \param ctx key decoder context. + * \return 0 on successful decoding, or a non-zero error code. + */ +static inline int +br_pkey_decoder_last_error(const br_pkey_decoder_context *ctx) +{ + if (ctx->err != 0) { + return ctx->err; + } + if (ctx->key_type == 0) { + return BR_ERR_X509_TRUNCATED; + } + return 0; +} + +/** + * \brief Get the decoded public key type. + * + * Public key type is `BR_KEYTYPE_RSA` or `BR_KEYTYPE_EC`. If decoding is + * not finished or failed, then 0 is returned. + * + * \param ctx key decoder context. + * \return decoded private key type, or 0. + */ +static inline int +br_pkey_decoder_key_type(const br_pkey_decoder_context *ctx) +{ + if (ctx->err == 0) { + return ctx->key_type; + } else { + return 0; + } +} + +/** + * \brief Get the decoded RSA public key. + * + * This function returns `NULL` if the decoding failed, or is not + * finished, or the key is not RSA. The returned pointer references + * structures within the context that can become invalid if the context + * is reused or released. + * + * \param ctx key decoder context. + * \return decoded RSA public key, or `NULL`. + */ +static inline const br_rsa_public_key * +br_pkey_decoder_get_rsa(const br_pkey_decoder_context *ctx) +{ + if (ctx->err == 0 && ctx->key_type == BR_KEYTYPE_RSA) { + return &ctx->key.rsa; + } else { + return NULL; + } +} + +/** + * \brief Get the decoded EC private key. + * + * This function returns `NULL` if the decoding failed, or is not + * finished, or the key is not EC. The returned pointer references + * structures within the context that can become invalid if the context + * is reused or released. + * + * \param ctx key decoder context. + * \return decoded EC private key, or `NULL`. + */ +static inline const br_ec_public_key * +br_pkey_decoder_get_ec(const br_pkey_decoder_context *ctx) +{ + if (ctx->err == 0 && ctx->key_type == BR_KEYTYPE_EC) { + return &ctx->key.ec; + } else { + return NULL; + } +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/ld/eagle.app.v6.common.ld.h b/tools/sdk/ld/eagle.app.v6.common.ld.h index 0d46fdc24..8b0d2ebed 100644 --- a/tools/sdk/ld/eagle.app.v6.common.ld.h +++ b/tools/sdk/ld/eagle.app.v6.common.ld.h @@ -112,6 +112,7 @@ SECTIONS *liblwip_src.a:(.literal .text .literal.* .text.*) *liblwip2.a:(.literal .text .literal.* .text.*) *liblwip2_1460.a:(.literal .text .literal.* .text.*) + *libbearssl.a:(.literal .text .literal.* .text.*) *libaxtls.a:(.literal .text .literal.* .text.*) *libat.a:(.literal.* .text.*) *libcrypto.a:(.literal.* .text.*) diff --git a/tools/sdk/lib/libbearssl.a b/tools/sdk/lib/libbearssl.a new file mode 100644 index 0000000000000000000000000000000000000000..3a350c9a40c86a7688b8caa6fc3077e6072b992e GIT binary patch literal 4279046 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%0Dd`}kK5znX7&SB@{NM_-Dzk&?{@!kunYo1c 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

m`8$L&5FAK7lv^uD}SrQvhw#5EGvJP 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
NiXs;m`~hwTILlnO++}mfir6-J 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

|t%kQ5-fno8;XQ`;8s1NqKJzWZ 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 rWmPu% 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≪i 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

No)2!2JrNJi<+vV|1|K(8b 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͞Xl7Yb0@aA@aiTRvEm`%oEr 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

e$8GRSX?@+tU^ueNVcQjm&pTv6(H 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

ky-6{H)`PwZX6*|8O6Cn;87=yyOq+BY=IQC*b+ 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

Mu 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ℜ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 a^GEhrhj+_^TI$QAWsJ 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

%FZ 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 literal 0 HcmV?d00001

V{(0 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%0DtCjc8@V4@OaIX9a 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

RHs*mnGG`4d+AeDHY&pz;2xFr8+zPquBxVOA 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 tSs(XTmMyIdB`9=UZ~* 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 z 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