protocol

cmac_protocol

Protocol for one-shot CMAC digest computation using block cipher objects implementing block_cipher_prepared_key_protocol.

Availability:
logtalk_load(cmac(loader))
Author: Paulo Moura
Version: 1:0:0
Date: 2026-08-08
Compilation flags:
static
Dependencies:
(none)
Remarks:
(none)
Inherited public predicates:
(none)

Public predicates

digest/4

Computes the full CMAC digest for a block cipher object, key bytes, and message bytes.

Compilation flags:
static
Template:
digest(Cipher,KeyBytes,MessageBytes,DigestBytes)
Mode and number of proofs:
digest(+object_identifier,+list(byte),+list(byte),--list(byte)) - one_or_error
Exceptions:
Cipher or MessageBytes is a variable or a partial list:
instantiation_error
Cipher does not implement the required prepared-key block cipher protocol:
domain_error(cmac_cipher,Cipher)
Cipher reports a block size other than 8 or 16 bytes:
domain_error(cmac_block_size,BlockSize)
MessageBytes is neither a variable nor a list:
type_error(list(byte),MessageBytes)
MessageBytes contains a non-integer byte:
type_error(integer,Byte)
MessageBytes contains an integer outside the byte range:
domain_error(byte,Byte)

hex_digest/4

Computes the full CMAC digest for a block cipher object, key bytes, and message bytes, returning a lowercase hexadecimal atom.

Compilation flags:
static
Template:
hex_digest(Cipher,KeyBytes,MessageBytes,HexDigest)
Mode and number of proofs:
hex_digest(+object_identifier,+list(byte),+list(byte),--atom) - one_or_error
Exceptions:
Cipher or MessageBytes is a variable or a partial list:
instantiation_error
Cipher does not implement the required prepared-key block cipher protocol:
domain_error(cmac_cipher,Cipher)
Cipher reports a block size other than 8 or 16 bytes:
domain_error(cmac_block_size,BlockSize)
MessageBytes is neither a variable nor a list:
type_error(list(byte),MessageBytes)
An element Byte of the MessageBytes` list is neither a variable nor an integer:
type_error(integer,Byte)
An element Byte of the MessageBytes list is an integer but not a valid byte:
domain_error(byte,Byte)

digest/5

Computes a truncated CMAC digest containing the requested number of leftmost bytes.

Compilation flags:
static
Template:
digest(Cipher,KeyBytes,MessageBytes,Length,DigestBytes)
Mode and number of proofs:
digest(+object_identifier,+list(byte),+list(byte),+integer,--list(byte)) - one_or_error
Exceptions:
Length is a variable:
instantiation_error
Length is neither a variable nor an integer:
type_error(integer,Length)
Length is an integer outside the range from one through the cipher block size:
domain_error(cmac_output_length(1,BlockSize),Length)

hex_digest/5

Computes a truncated CMAC digest containing the requested number of leftmost bytes and returns it as a lowercase hexadecimal atom.

Compilation flags:
static
Template:
hex_digest(Cipher,KeyBytes,MessageBytes,Length,HexDigest)
Mode and number of proofs:
hex_digest(+object_identifier,+list(byte),+list(byte),+integer,--atom) - one_or_error
Exceptions:
Cipher, MessageBytes, or Length is a variable or a partial list:
instantiation_error
Cipher does not implement the required prepared-key block cipher protocol:
domain_error(cmac_cipher,Cipher)
Cipher reports a block size other than 8 or 16 bytes:
domain_error(cmac_block_size,BlockSize)
MessageBytes is neither a variable nor a list:
type_error(list(byte),MessageBytes)
An element Byte of the MessageBytes` list is neither a variable nor an integer:
type_error(integer,Byte)
An element Byte of the MessageBytes list is an integer but not a valid byte:
domain_error(byte,Byte)
Length is neither a variable nor an integer:
type_error(integer,Length)
Length is an integer outside the range from one through the cipher block size:
domain_error(cmac_output_length(1,BlockSize),Length)

Protected predicates

(none)

Private predicates

(none)

Operators

(none)