mirror of
https://github.com/ipxe/ipxe
synced 2026-04-04 03:00:20 +03:00
[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>
This commit is contained in:
@@ -784,6 +784,7 @@ struct cipher_algorithm aes_algorithm = {
|
||||
.name = "aes",
|
||||
.ctxsize = sizeof ( struct aes_context ),
|
||||
.blocksize = AES_BLOCKSIZE,
|
||||
.alignsize = 0,
|
||||
.authsize = 0,
|
||||
.setkey = aes_setkey,
|
||||
.setiv = cipher_null_setiv,
|
||||
|
||||
@@ -119,6 +119,7 @@ struct cipher_algorithm arc4_algorithm = {
|
||||
.name = "ARC4",
|
||||
.ctxsize = ARC4_CTX_SIZE,
|
||||
.blocksize = 1,
|
||||
.alignsize = 1,
|
||||
.authsize = 0,
|
||||
.setkey = arc4_setkey,
|
||||
.setiv = cipher_null_setiv,
|
||||
|
||||
@@ -84,6 +84,7 @@ struct cipher_algorithm cipher_null = {
|
||||
.name = "null",
|
||||
.ctxsize = 0,
|
||||
.blocksize = 1,
|
||||
.alignsize = 1,
|
||||
.authsize = 0,
|
||||
.setkey = cipher_null_setkey,
|
||||
.setiv = cipher_null_setiv,
|
||||
|
||||
Reference in New Issue
Block a user