[tls] Restructure to use a single key derivation function master secret Calls to the key derivation function tls_prf() currently have to pass the relevant secret (i.e. the pre-master secret or the master secret) as a parameter. Restructure to more closely match the design of the TLS version 1.3 key schedule, which maintains a single running secret (which we choose to name the "key derivation function master secret") that is always implicitly used as the secret for key expansion. The secret value is currently used by tls_prf() only as the key to hmac_init(). We can therefore use hmac_key() to reduce the secret to a fixed-length value. (The TLS master secret is already a fixed 48 bytes, but the pre-master secret may be any length.) The fixed length of the secret is dependent upon the protocol version and the cipher suite digest algorithm. For TLS version 1.2, the length is the HMAC key size for the digest algorithm. For TLS version 1.1, which uses separate invocations of HMAC-MD5 and HMAC-SHA1, the length is the sum of the HMAC-MD5 and HMAC-SHA1 key sizes. (For TLS version 1.3, the length will be the HKDF key size, i.e. the output size of the digest algorithm.) To avoid introducing some very messy memory allocation code paths, we continue to use a fixed size of 48 bytes for the resumption master secret stored in the TLS session. This is sufficient to hold the 48-byte raw master secret for TLS version 1.2 and earlier, and will also be sufficient to hold the HKDF Derive-Secret output for the longest supported digest algorithm (SHA-384) in TLS version 1.3. Signed-off-by: Michael Brown <mcb30@ipxe.org>
iPXE is the leading open source network boot firmware. It provides a full PXE implementation enhanced with additional features such as:
boot from a web server via HTTP or HTTPS,
boot from an iSCSI, FCoE, or AoE SAN,
control the boot process with a script,
You can use iPXE to replace the existing PXE ROM on your network card, or you can chainload into iPXE to obtain the features of iPXE without the hassle of reflashing.
iPXE is free, open-source software licensed under the GNU GPL (with some portions under GPL-compatible licences).
You can download the rolling release binaries (built from the latest commit), or use the most recent stable release.
For full documentation, visit the iPXE website.