diff options
author | Michael Brown <mcb30@ipxe.org> | 2022-10-28 16:27:10 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2022-11-07 11:19:48 +0000 |
commit | 30243ad73957a2e1cc4aedc3f23be66cdf399f00 (patch) | |
tree | c0b476b76fed7f2a9c5a3b9ec1ea03f01017a693 /src/include/ipxe/gcm.h | |
parent | d1bc872a2e3b682169da4dd708dfe143d539eaaf (diff) | |
download | ipxe-30243ad73957a2e1cc4aedc3f23be66cdf399f00.tar.gz |
[crypto] Add concept of cipher alignment size
The GCM cipher mode of operation (in common with other counter-based
modes of operation) has a notion of blocksize that does not neatly
fall into our current abstraction: it does operate in 16-byte blocks
but allows for an arbitrary overall data length (i.e. the final block
may be incomplete).
Model this by adding a concept of alignment size. Each call to
encrypt() or decrypt() must begin at a multiple of the alignment size
from the start of the data stream. This allows us to model GCM by
using a block size of 1 byte and an alignment size of 16 bytes.
As a side benefit, this same concept allows us to neatly model the
fact that raw AES can encrypt only a single 16-byte block, by
specifying an alignment size of zero on this cipher.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/gcm.h')
-rw-r--r-- | src/include/ipxe/gcm.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/include/ipxe/gcm.h b/src/include/ipxe/gcm.h index 658685486..d93eecd8e 100644 --- a/src/include/ipxe/gcm.h +++ b/src/include/ipxe/gcm.h @@ -121,6 +121,7 @@ struct cipher_algorithm _gcm_cipher = { \ .name = #_gcm_name, \ .ctxsize = sizeof ( struct _gcm_name ## _context ), \ .blocksize = 1, \ + .alignsize = sizeof ( union gcm_block ), \ .authsize = sizeof ( union gcm_block ), \ .setkey = _gcm_name ## _setkey, \ .setiv = _gcm_name ## _setiv, \ |