AES-256 interface.
AES-256 is specified in the FIPS PUB 197 standard.
According to FIPS PUB 197, AES-256 has a key size of 256 bits and a block size of 128 bits.
Theorem:
(defthm bit-list-of-aes-256-encrypt-bits (bit-listp (aes-256-encrypt-bits key block)))
Theorem:
(defthm bit-list-of-aes-256-decrypt-bits (bit-listp (aes-256-decrypt-bits key block)))
Theorem:
(defthm byte-list-of-aes-256-encrypt-bytes (byte-listp (aes-256-encrypt-bytes key block)))
Theorem:
(defthm byte-list-of-aes-256-decrypt-bytes (byte-listp (aes-256-decrypt-bytes key block)))
Theorem:
(defthm len-of-aes-256-encrypt-bits (equal (len (aes-256-encrypt-bits key block)) 128))
Theorem:
(defthm len-of-aes-256-decrypt-bits (equal (len (aes-256-decrypt-bits key block)) 128))
Theorem:
(defthm len-of-aes-256-encrypt-bytes (equal (len (aes-256-encrypt-bytes key block)) 16))
Theorem:
(defthm len-of-aes-256-decrypt-bytes (equal (len (aes-256-decrypt-bytes key block)) 16))
Theorem:
(defthm aes-256-encrypt-bits-of-bit-list-fix-key (equal (aes-256-encrypt-bits (acl2::bit-list-fix key) block) (aes-256-encrypt-bits key block)))
Theorem:
(defthm aes-256-encrypt-bits-bit-list-equiv-congruence-on-key (implies (acl2::bit-list-equiv key key-equiv) (equal (aes-256-encrypt-bits key block) (aes-256-encrypt-bits key-equiv block))) :rule-classes :congruence)
Theorem:
(defthm aes-256-encrypt-bits-of-bit-list-fix-block (equal (aes-256-encrypt-bits key (acl2::bit-list-fix block)) (aes-256-encrypt-bits key block)))
Theorem:
(defthm aes-256-encrypt-bits-bit-list-equiv-congruence-on-block (implies (acl2::bit-list-equiv block block-equiv) (equal (aes-256-encrypt-bits key block) (aes-256-encrypt-bits key block-equiv))) :rule-classes :congruence)
Theorem:
(defthm aes-256-decrypt-bits-of-bit-list-fix-key (equal (aes-256-decrypt-bits (acl2::bit-list-fix key) block) (aes-256-decrypt-bits key block)))
Theorem:
(defthm aes-256-decrypt-bits-bit-list-equiv-congruence-on-key (implies (acl2::bit-list-equiv key key-equiv) (equal (aes-256-decrypt-bits key block) (aes-256-decrypt-bits key-equiv block))) :rule-classes :congruence)
Theorem:
(defthm aes-256-decrypt-bits-of-bit-list-fix-block (equal (aes-256-decrypt-bits key (acl2::bit-list-fix block)) (aes-256-decrypt-bits key block)))
Theorem:
(defthm aes-256-decrypt-bits-bit-list-equiv-congruence-on-block (implies (acl2::bit-list-equiv block block-equiv) (equal (aes-256-decrypt-bits key block) (aes-256-decrypt-bits key block-equiv))) :rule-classes :congruence)
Theorem:
(defthm aes-256-encrypt-bytes-of-byte-list-fix-key (equal (aes-256-encrypt-bytes (byte-list-fix key) block) (aes-256-encrypt-bytes key block)))
Theorem:
(defthm aes-256-encrypt-bytes-byte-list-equiv-congruence-on-key (implies (byte-list-equiv key key-equiv) (equal (aes-256-encrypt-bytes key block) (aes-256-encrypt-bytes key-equiv block))) :rule-classes :congruence)
Theorem:
(defthm aes-256-encrypt-bytes-of-byte-list-fix-block (equal (aes-256-encrypt-bytes key (byte-list-fix block)) (aes-256-encrypt-bytes key block)))
Theorem:
(defthm aes-256-encrypt-bytes-byte-list-equiv-congruence-on-block (implies (byte-list-equiv block block-equiv) (equal (aes-256-encrypt-bytes key block) (aes-256-encrypt-bytes key block-equiv))) :rule-classes :congruence)
Theorem:
(defthm aes-256-decrypt-bytes-of-byte-list-fix-key (equal (aes-256-decrypt-bytes (byte-list-fix key) block) (aes-256-decrypt-bytes key block)))
Theorem:
(defthm aes-256-decrypt-bytes-byte-list-equiv-congruence-on-key (implies (byte-list-equiv key key-equiv) (equal (aes-256-decrypt-bytes key block) (aes-256-decrypt-bytes key-equiv block))) :rule-classes :congruence)
Theorem:
(defthm aes-256-decrypt-bytes-of-byte-list-fix-block (equal (aes-256-decrypt-bytes key (byte-list-fix block)) (aes-256-decrypt-bytes key block)))
Theorem:
(defthm aes-256-decrypt-bytes-byte-list-equiv-congruence-on-block (implies (byte-list-equiv block block-equiv) (equal (aes-256-decrypt-bytes key block) (aes-256-decrypt-bytes key block-equiv))) :rule-classes :congruence)
Theorem:
(defthm true-listp-of-aes-256-encrypt-bits (true-listp (aes-256-encrypt-bits key block)) :rule-classes :type-prescription)
Theorem:
(defthm true-listp-of-aes-256-decrypt-bits (true-listp (aes-256-decrypt-bits key block)) :rule-classes :type-prescription)
Theorem:
(defthm true-listp-of-aes-256-encrypt-bytes (true-listp (aes-256-encrypt-bytes key block)) :rule-classes :type-prescription)
Theorem:
(defthm true-listp-of-aes-256-decrypt-bytes (true-listp (aes-256-decrypt-bytes key block)) :rule-classes :type-prescription)
Theorem:
(defthm consp-of-aes-256-encrypt-bits (consp (aes-256-encrypt-bits key block)) :rule-classes :type-prescription)
Theorem:
(defthm consp-of-aes-256-decrypt-bits (consp (aes-256-decrypt-bits key block)) :rule-classes :type-prescription)
Theorem:
(defthm consp-of-aes-256-encrypt-bytes (consp (aes-256-encrypt-bytes key block)) :rule-classes :type-prescription)
Theorem:
(defthm consp-of-aes-256-decrypt-bytes (consp (aes-256-decrypt-bytes key block)) :rule-classes :type-prescription)