wolfSSL_dtls_export()/wolfSSL_dtls_import() only ever carried a DTLS 1.2
session. A DTLS 1.3 connection additionally keeps a table of epochs, each
with its own traffic secret, record and record number keys, sequence numbers
and replay window, and none of that was serialized.
Export version 7 adds two trailing sections to the blob, the DTLS 1.3 record
layer state and the Connection ID, both length prefixed so a reader that does
not know a section can step over it and a version 6 blob still imports.
- dtls13: serialize the send epoch, the peer epoch and, when there is one,
the previous peer epoch: epoch numbers, sequence numbers, replay window,
traffic secrets and key material. Import re-derives the record keys through
Tls13DeriveRecordKeys(), the same expansion the handshake runs
- dtls: carry a tx Connection ID of any length. The peer picks it and RFC 9146
bounds it only by its one byte length field, so DTLS_CID_MAX_SIZE may not
refuse it. The rx id keeps that bound: it is the one we hand the peer and it
has to fit the record layer buffers. Clear the target's CID when the blob
carries none
Refusals, so a blob never describes a connection that cannot be restored:
- refuse to export a half sent fragmented handshake message, or while a write
dup still has work parked
- refuse a state only import into a DTLS 1.3 session, and keep stamping the
state only blob with export version 6
- require the imported epochs to be the ones the blob names, reset the epoch
table on import and commit a slot only once every field of it has been read
Bounds checking on the import path:
- keep every exported section inside the buffer the caller sized, and step
over the import sections by their declared length
- check the imported epoch key lengths against the negotiated suite and the
traffic secret length against the hash
- size the exported key state from the build's own cipher sizes
- scrub the session export scratch buffer before freeing it
- use IsAtLeastTLSv1_3() for the imported version check
CI: build the session export job with Connection ID support.