~/bend-docscommunity

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.

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.