1
0
mirror of https://github.com/ARMmbed/mbedtls.git synced 2025-06-13 22:57:13 +08:00
Hanno Becker 17263803aa Simplify AEAD nonce derivation
This commit simplifies nonce derivation for AEAD based record protection
routines in the following way.

So far, code distinguished between the cases of GCM+CCM and ChachaPoly:

- In the case of GCM+CCM, the AEAD nonce is the concatentation
  of a 4-byte Fixed IV and a dynamically chosen 8-byte IV which is prepended
  to the record. In Mbed TLS, this is always chosen to be the record sequence
  number, but it need not to.

- In the case of ChaChaPoly, the AEAD nonce is derived as

    `( 12-byte Fixed IV ) XOR ( 0 || 8-byte dynamic IV == record seq nr )`

  and the dynamically chosen IV is no longer prepended to the record.

This commit removes this distinction by always computing the record nonce
via the formula

  `IV == ( Fixed IV || 0 ) XOR ( 0 || Dynamic IV )`

The ChaChaPoly case is recovered in case `Len(Fixed IV) == Len(IV)`, and
GCM+CCM is recovered when `Len(IV) == Len(Fixed IV) + Len(Dynamic IV)`.

Moreover, a getter stub `ssl_transform_aead_dynamic_iv_is_explicit()`
is introduced which infers from a transform whether the dynamically
chosen part of the IV is explicit, which in the current implementation
of `mbedtls_ssl_transform` can be derived from the helper field
`mbedtls_ssl_transform::fixed_ivlen`.

Signed-off-by: Hanno Becker <hanno.becker@arm.com>
2020-05-28 10:32:23 +01:00
..
2020-04-22 16:01:48 +02:00
2019-08-15 15:44:50 +01:00
2019-08-15 15:44:50 +01:00
2019-08-15 15:44:50 +01:00
2019-08-15 15:44:50 +01:00
2020-04-22 16:01:48 +02:00
2019-08-15 15:44:50 +01:00
2019-08-15 15:44:50 +01:00
2019-12-03 16:07:18 +00:00
2020-04-22 16:01:48 +02:00
2020-04-22 16:01:48 +02:00
2019-12-03 16:07:18 +00:00
2019-12-03 16:07:18 +00:00
2019-12-03 16:07:18 +00:00
2019-08-15 15:44:50 +01:00
2020-04-02 19:54:51 +02:00
2019-12-03 16:07:18 +00:00
2019-12-03 16:07:18 +00:00
2019-12-03 16:07:18 +00:00
2019-08-15 15:44:50 +01:00
2019-12-03 16:07:18 +00:00
2020-04-22 16:01:48 +02:00
2019-08-15 15:44:50 +01:00
2019-12-03 16:07:18 +00:00
2019-12-03 16:07:18 +00:00
2019-12-03 16:07:18 +00:00
2020-02-18 10:31:29 +01:00
2019-08-15 15:44:50 +01:00
2020-01-28 14:43:52 -05:00
2019-12-03 16:07:18 +00:00
2019-12-03 16:07:18 +00:00
2020-01-29 09:46:49 +01:00
2020-05-28 10:32:23 +01:00
2019-08-15 15:44:50 +01:00
2020-03-23 21:54:07 +01:00
2019-08-15 15:44:50 +01:00