src/crypto/aes/aes.bend checks
raw source on the hub · import 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/aes.bend as Aes
3 imports
import Base import ./types.bend as T import ./sbox.bend as B
Types
type Schedule source · line 155 · raw
Data
An expanded key: the number of rounds and the round keys.
Schedule@rounds:Nat -> @keys:List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State> -> Schedule
Definitions
def sub_word source · line 10 · raw
@w:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad
def sub_bytes source · line 15 · raw
@s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State
def shift_rows source · line 21 · raw
@s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State
Row r moves r columns to the left.
def mix_column source · line 26 · raw
@w:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad
def mix_columns source · line 34 · raw
@s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State
def xor_word source · line 39 · raw
@a:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad -> @b:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad
def add_round_key source · line 44 · raw
@s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> @k:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State
def round source · line 49 · raw
@s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> @k:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State
def last_round source · line 52 · raw
@s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> @k:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State
def rounds source · line 56 · raw
@n:Nat -> @s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> @ks:List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State> -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State
n full rounds, then the final round.
def cipher source · line 65 · raw
@+nr:Nat -> @s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> @ks:List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State> -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State
def rot_word source · line 74 · raw
@w:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad
def xpow source · line 80 · raw
@n:Nat -> U32
x^n in GF(2^8), by doubling.
def rcon source · line 87 · raw
@j:Nat -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad
def key_words source · line 90 · raw
@key:List<&2, U32> -> List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad>
def get_word source · line 97 · raw
@ws:List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad> -> @n:Nat -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad
def schedule_core source · line 106 · raw
@k:Nat -> @big:Bool -> @+q:Nat -> @temp:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad
def next_word source · line 126 · raw
@+nk:Nat -> @+i:Nat -> @+history:List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad> -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad
history is the words so far, the newest first.
def grow source · line 130 · raw
@n:Nat -> @+nk:Nat -> @+i:Nat -> @+history:List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad> -> List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad>
def round_keys source · line 138 · raw
@ws:List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.Quad> -> List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State>
Four consecutive words make a round key.
def expand source · line 145 · raw
@+nk:Nat -> @+nr:Nat -> @key:List<&2, U32> -> List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State>
def encrypt source · line 149 · raw
@+nk:Nat -> @+nr:Nat -> @key:List<&2, U32> -> @block:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State
def valid_length source · line 160 · raw
@+n:Nat -> Bool
FIPS 197 Figure 4: a key of 16, 24 or 32 bytes; Nk = its length in words, Nr = Nk + 6.
def schedule_if source · line 163 · raw
@ok:Bool -> @+nk:Nat -> @+key:List<&2, U32> -> Maybe<&2, Schedule>
def expand_key source · line 171 · raw
@+key:List<&2, U32> -> Maybe<&2, Schedule>
A 16-, 24- or 32-byte key (AES-128, AES-192, AES-256); None otherwise.
def encrypt_state source · line 175 · raw
@sched:Schedule -> @s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State
def state_of source · line 180 · raw
@bytes:List<&2, U32> -> Maybe<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State>
def bytes_of source · line 187 · raw
@s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State -> List<&2, U32>
def encrypt_bytes source · line 192 · raw
@sched:Schedule -> @m:Maybe<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/aes/types.State> -> Maybe<&2, List<&2, U32>>
def encrypt_block source · line 200 · raw
@sched:Schedule -> @block:List<&2, U32> -> Maybe<&2, List<&2, U32>>
Encrypts one 16-byte block; None for another length.
def hex_digit_if source · line 203 · raw
@x:U32 -> @small:Bool -> Char
def hex_digit source · line 210 · raw
@+x:U32 -> Char
def hex source · line 214 · raw
@bytes:List<&2, U32> -> String
Lowercase hexadecimal of a byte list.