32758 Commits

Author SHA1 Message Date
Ben Taylor
176bea08b7 Correct maximum size for chacha20
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
(cherry picked from commit 540c75e5a0fa787b6e4ffdaec33648f83b850b6a)
2026-06-11 14:10:47 +01:00
Ben Taylor
e1641d00e2 Remove assertion that ctx.ciphertext_len is 0
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
(cherry picked from commit 3f3d3da789e05f078a4df9995278d3d53e273513)
2026-06-11 14:10:42 +01:00
Ben Taylor
98b1bf9f2e fix asserts in old chachapoly_update_too_long_preserves_state function
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
(cherry picked from commit 57ac277339e9e9684caf1e8a3bad20c57678ea83)
2026-06-11 14:10:35 +01:00
Ben Taylor
08accf7b92 Fix code style
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
(cherry picked from commit ef055ea1bbfd17de9eeae11c5f90101361fb02df)
2026-06-11 14:10:21 +01:00
Ben Taylor
8b7fca9ede Add improvement to chacha20 tests
Co-authored-by: minosgalanakis <30719586+minosgalanakis@users.noreply.github.com>
Signed-off-by: Ben Taylor <32939606+bjwtaylor@users.noreply.github.com>
(cherry picked from commit 9d6a54795c96f7f0d7dfc230071dc16c5f47f94a)
2026-06-11 14:10:14 +01:00
Ben Taylor
a6023aef67 update code docs
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-06-03 11:10:36 +01:00
Ben Taylor
2ddd6a2f25 Improve comments and guards
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-06-02 13:50:32 +01:00
Ben Taylor
85f3f6f894 Add missing header
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-06-02 08:19:02 +01:00
Ben Taylor
b555410883 Add mbedtls_chacha20_check_counter_wrap to header
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-06-01 14:43:50 +01:00
Ben Taylor
ea9848e14a Adapt ChaCha20 counter helper for 3.6
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-05-29 13:24:49 +01:00
Ben Taylor
96cb584a5e Reject overlong PSA ChaChaPoly lengths
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-05-29 13:17:53 +01:00
Ben Taylor
3df9fac129 Reject overlong ChaChaPoly updates
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-05-29 13:17:45 +01:00
Ben Taylor
dcf3b11749 Tidy ChaCha20 counter limit handling
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-05-29 13:17:36 +01:00
Ben Taylor
7bf0215f8d Add guard to prevent wraparound if SIZE_MAX > UINT64_MAX in chacha20
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-05-29 13:17:29 +01:00
Ben Taylor
3a358b0677 Remove unused cast
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-05-29 13:17:21 +01:00
Ben Taylor
130b914ff2 remove duplicate chacha20_check_counter_wrap functionality in chacha20 and chacha20_neon
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-05-29 13:17:14 +01:00
Ben Taylor
0e9be79ea3 Add simplification of if statement in chacha20
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-05-29 13:17:07 +01:00
Ben Taylor
56b050d738 Add use of keystream_bytes_used as the exhausted marker
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-05-29 13:17:00 +01:00
Ben Taylor
609b1c51b1 Add fix for chacha20 counter overflow bug
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-05-29 13:16:53 +01:00
Ben Taylor
515f81c852 Add ChangeLog
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-05-29 13:16:44 +01:00
Ben Taylor
e05f169677 Add test for chacha20 counter overflow bug
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-05-29 13:16:38 +01:00
Gilles Peskine
935e271d13
Merge pull request #1540 from mpg/restricted-fix-ecdh-calc-secret
[3.6] Fix ecdh calc secret buffer overflow
2026-04-15 11:46:31 +02:00
Manuel Pégourié-Gonnard
00d767aef5 Copy-editing
Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-04-13 11:55:07 +02:00
Manuel Pégourié-Gonnard
d5cf74c7da ECDH: update comment to reference new test fucntion
Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-04-13 11:38:07 +02:00
Manuel Pégourié-Gonnard
7e45882dc2 ECDH: add tests for static ECDH with context reuse
A bug there was fixed in a previous commit, but without complete tests
or a ChangeLog entry. This commit completes the fix.

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-04-13 11:23:17 +02:00
Manuel Pégourié-Gonnard
559525cd7f ECDH: use more precise error code
The documentation says "or another error code", so it's OK to change the
error code returned here for a more correct one.

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-04-02 09:42:05 +02:00
Manuel Pégourié-Gonnard
801f3b3f42 ECDH: improve comment in test function
Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-04-02 09:39:00 +02:00
Manuel Pégourié-Gonnard
89aee1e63a Improve Changelog
Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-04-02 09:35:42 +02:00
Manuel Pégourié-Gonnard
a2ca5fb23a ECDH: Everest: align error code with ecdh.c
Arguably the value returned by Everest was more precise, but considering
we're in an LTS branch, I'd rather not change the value returned by
ecdh.c, and align the special case on the general case.

The added tests made it apparent that Everest and the generic code were
not returning the same value here. Alignment between the two values is
desirable to keep the test code simple and sweet.

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-03-31 12:40:00 +02:00
Manuel Pégourié-Gonnard
fbabe53462 ECDH: Everest: Fix private key managment (static)
Wiping out our private key is OK if we're only doing ephemeral ECDH, but
our API also supports static Diffie-Hellman, where our private key is
long term and should not be wiped out on first use...

Found accidentally with the new test that try calling `calc_secret()`
again with a larger output buffer and expect the same result.

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-03-31 12:39:12 +02:00
Manuel Pégourié-Gonnard
f34f6138ca TLS: pass actual size to ecdh_calc_secret()
This is probably a leftover from ancient times where the premaster
buffer was always that size (for FFDH). But these days it can be smaller
depending on the compile-time config. So, use the correct size macro.

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-03-31 12:39:10 +02:00
Manuel Pégourié-Gonnard
070ba17a8a ECDH: Add ChangeLog for legacy buffer overflow
Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-03-31 12:38:54 +02:00
Manuel Pégourié-Gonnard
1d71bcc31c ECDH: fix possible buffer overflow
We were not comparing the size of the output buffer with the actual
number of bytes we were going to write to it, but with something
possibly smaller.

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-03-31 12:01:11 +02:00
Manuel Pégourié-Gonnard
058f57a4dd ECDH: test MSB 0 in shared secret (legacy API)
The values were generated using the script in the message of the
previous commit.

Currently all 4 new tests are failing: without sanitizers, the function
returns 0 instead of an error; with sanitizers, the buffer overwrite is
caught.

This will be fixed in the next commit.

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-03-31 12:01:11 +02:00
Manuel Pégourié-Gonnard
216ec7d6fc ECDH: add test cases with MSB 0 in shared secret
The goal is to catch possible bugs where we would compute the output
length based on the bitlength of the shared secret MPI. So, what matters
is the most significant byte, even for Montgomery curves where the
all values are written out little endian.

The values were generated by the following sage script. The script could
be a bit more compact by using E.random_point() instead of the
conventional base point G as the peer's key, but I prefered making the
script deterministic so its output can easily be checked.

p256 = {
    "name": "p256",
    "p": 2^224 * (2^32 - 1) + 2^192 + 2^96 - 1,
    "a": -3,
    "b": 0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b,
    "gx": 0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296,
    "gy": 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5,
}

p521 = {
    "name": "p521",
    "p": 2^521 - 1,
    "a": -3,
    "b": 0x0051953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00,
    "gx": 0x00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66,
    "gy": 0x011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650,
}

x255 = {
    "name": "x25519",
    "p": 2^255 - 19,
    "a": 486662,
    "gx": 9,
    "gy": 14781619447589544791020593568409986887264606134616475288964881837755586237401,
}

x448 = {
    "name": "x448",
    "p": 2^448 - 2^224 - 1,
    "a": 156326,
    "gx": 5,
    "gy": 355293926785568175264127502063783334808976399387714271831880898435169088786967410002932673765864550910142774147268105838985595290606362,
}

def byte_len(i):
    return (i.bit_length() + 7) // 8

def leading0(name, p, gx, gy, a, b=None):
    is_montgomery = b is None
    if is_montgomery:
        E = EllipticCurve(GF(p), [0, a, 0, 1, 0])
        increment = 8 # x22519 scalars have the low 3 bits unset
    else:
        E = EllipticCurve(GF(p), [a, b])
        increment = 1

    G = E(gx, gy)
    s = 2^(p.bit_length() - 1) # x25519 scalars have bit 254 set

    Z = G * s
    while byte_len(Z.x().lift()) >= byte_len(p):
        s += increment
        Z += increment * G

    print(name)
    if is_montgomery:
        nbytes = byte_len(p)
        print(f"s: {s.to_bytes(nbytes, "little").hex()}")
        print(f"G: {G.x().lift().to_bytes(nbytes, "little").hex()}")
        print(f"Z: {Z.x().lift().to_bytes(nbytes, "little").hex()}")
    else:
        nibbles = byte_len(p) * 2
        print(f"s: {s:0{nibbles}x}")
        print(f"G: 04{G.x().lift():0{nibbles}x}{G.y().lift():0{nibbles}x}")
        print(f"Z: {Z.x().lift():0{nibbles}x}")

leading0(**p256)
leading0(**p521)
leading0(**x255)
leading0(**x448)

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-03-31 12:01:11 +02:00
Manuel Pégourié-Gonnard
0d318a0f3a ECDH: test calc_secret output buffer too small
Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-03-31 12:01:11 +02:00
Manuel Pégourié-Gonnard
df13f5cd52 ECDH: document sufficient size for shared secret
Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2026-03-31 12:00:59 +02:00
Gilles Peskine
77b1a22bc3
Merge pull request #1536 from ronald-cron-arm/3.6-context_load_and_session_load_documentation
3.6 backport: Tighten context/session load and save APIs documentation
2026-03-26 21:32:09 +01:00
minosgalanakis
39acf7d2c8
Merge pull request #1535 from Mbed-TLS/release/changelog_fixes_3.6.6
[Release] Added attributions & CVE to ChangeLogs (3.6 LTS)
2026-03-26 17:38:26 +00:00
Ronald Cron
86b6812003 Update change log.
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
2026-03-26 18:25:06 +01:00
Minos Galanakis
860cde63e6 MOufa
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2026-03-26 16:43:03 +00:00
Minos Galanakis
e4c6f6819e Added attribution for ffdh-peerkey-check
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2026-03-26 16:42:23 +00:00
Minos Galanakis
441beaeeac Extended attributions & CVE
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2026-03-26 14:51:36 +00:00
Ronald Cron
f45d735826 Improve change log
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
2026-03-26 13:18:10 +01:00
Ronald Cron
e7076b1639 Add change log
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
2026-03-26 13:18:10 +01:00
Ronald Cron
e7c9b1dfb3 Reduce duplication between save/load documentations
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
2026-03-26 13:18:10 +01:00
Ronald Cron
dd20b0644a Add warning in mbedtls_ssl_session_load/save documentation
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
2026-03-26 13:18:10 +01:00
Ronald Cron
6712bd07b3 Add warning in mbedtls_ssl_context_save/load documentation
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
2026-03-26 13:18:10 +01:00
Minos Galanakis
0205ff782b Added attributions & CVE
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2026-03-26 11:11:12 +00:00
Manuel Pégourié-Gonnard
3746d7bbe0
Merge pull request #1531 from minosgalanakis/bugfix/ccm_finish_boundary_check_3.6_accr
Added attribution to fix-ccm-finish changelog entry (mbedtls3.6)
2026-03-26 09:36:56 +01:00