src/crypto/blake/blake3/blake3.bend checks
raw source on the hub · import 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/blake3.bend as Blake3
3 imports
import Base import ./types.bend as T import ./compress.bend as C
Types
type Stack source · line 156 · raw
Data
The subtree stack, smallest subtree first: slot i is empty or holds the chaining value of a complete subtree of 2^i chunks.
StkNilStack
SEmpty@rest:Stack -> Stack
SFull@cv:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV -> @rest:Stack -> Stack
Definitions
def iv source · line 22 · raw
0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV
def read15 source · line 27 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @w2:U32 -> @w3:U32 -> @w4:U32 -> @w5:U32 -> @w6:U32 -> @w7:U32 -> @w8:U32 -> @w9:U32 -> @w10:U32 -> @w11:U32 -> @w12:U32 -> @w13:U32 -> @w14:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
GENERATED BEGIN (tools/generators/blake3/gen.py)
Reads the 16 words of a block at word index, threading the array.
def read14 source · line 31 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @w2:U32 -> @w3:U32 -> @w4:U32 -> @w5:U32 -> @w6:U32 -> @w7:U32 -> @w8:U32 -> @w9:U32 -> @w10:U32 -> @w11:U32 -> @w12:U32 -> @w13:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read13 source · line 35 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @w2:U32 -> @w3:U32 -> @w4:U32 -> @w5:U32 -> @w6:U32 -> @w7:U32 -> @w8:U32 -> @w9:U32 -> @w10:U32 -> @w11:U32 -> @w12:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read12 source · line 39 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @w2:U32 -> @w3:U32 -> @w4:U32 -> @w5:U32 -> @w6:U32 -> @w7:U32 -> @w8:U32 -> @w9:U32 -> @w10:U32 -> @w11:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read11 source · line 43 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @w2:U32 -> @w3:U32 -> @w4:U32 -> @w5:U32 -> @w6:U32 -> @w7:U32 -> @w8:U32 -> @w9:U32 -> @w10:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read10 source · line 47 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @w2:U32 -> @w3:U32 -> @w4:U32 -> @w5:U32 -> @w6:U32 -> @w7:U32 -> @w8:U32 -> @w9:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read9 source · line 51 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @w2:U32 -> @w3:U32 -> @w4:U32 -> @w5:U32 -> @w6:U32 -> @w7:U32 -> @w8:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read8 source · line 55 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @w2:U32 -> @w3:U32 -> @w4:U32 -> @w5:U32 -> @w6:U32 -> @w7:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read7 source · line 59 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @w2:U32 -> @w3:U32 -> @w4:U32 -> @w5:U32 -> @w6:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read6 source · line 63 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @w2:U32 -> @w3:U32 -> @w4:U32 -> @w5:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read5 source · line 67 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @w2:U32 -> @w3:U32 -> @w4:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read4 source · line 71 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @w2:U32 -> @w3:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read3 source · line 75 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @w2:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read2 source · line 79 · raw
@+index:U32 -> @w0:U32 -> @w1:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read1 source · line 83 · raw
@+index:U32 -> @w0:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read0 source · line 87 · raw
@+index:U32 -> @pair:Pair(Array<U32>, U32) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def read_block source · line 91 · raw
@a:Array<U32> -> @+index:U32 -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block)
def partial source · line 97 · raw
@w:U32 -> @delta:Nat -> U32
The block truncated to its first len bytes: the word at byte offset pos
keeps its low len - pos bytes (all four when at least four remain).
def mask source · line 105 · raw
@w:U32 -> @+pos:Nat -> @+len:Nat -> U32
def mask_block source · line 108 · raw
@b:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block -> @+len:Nat -> 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block
def full_go source · line 116 · raw
@n:Nat -> @+counter:U32 -> @+index:U32 -> @+flags:U32 -> @cv:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV -> @pair:Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV)
A chunk that is not the last: n more full blocks after the current one, the
current block in pair; flags is CHUNK_START on the first block and 0 after.
Returns the chunk's chaining value.
def full_chunk source · line 121 · raw
@a:Array<U32> -> @+counter:U32 -> @+index:U32 -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV)
def last_go source · line 126 · raw
@n:Nat -> @+counter:U32 -> @+index:U32 -> @+flags:U32 -> @+len:Nat -> @cv:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV -> @pair:Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block) -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Out)
The last chunk: n full blocks before its last block of len bytes (1..64, or 0 for the empty message). Returns the pending output of the last block.
def last_chunk source · line 131 · raw
@a:Array<U32> -> @+counter:U32 -> @+index:U32 -> @+len:Nat -> Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Out)
def out_cv source · line 135 · raw
@o:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Out -> 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV
def root_cv source · line 139 · raw
@o:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Out -> 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV
def parent_block source · line 143 · raw
@l:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV -> @r:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV -> 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Block
def parent_out source · line 148 · raw
@l:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV -> @r:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV -> 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Out
def parent_cv source · line 151 · raw
@l:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV -> @r:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV -> 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV
def push source · line 161 · raw
@s:Stack -> @c:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV -> Stack
def finish source · line 168 · raw
@s:Stack -> @o:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Out -> 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Out
Folds the stack into the pending output of the rightmost subtree.
def pushed source · line 174 · raw
@s:Stack -> @pair:Pair(Array<U32>, 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV) -> Pair(Array<U32>, Stack)
def chunks source · line 179 · raw
@n:Nat -> @+counter:U32 -> @+index:U32 -> @+len:Nat -> @pair:Pair(Array<U32>, Stack) -> 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.Out
n chunks before the last; len is the byte length of the last chunk.
def unchecked source · line 184 · raw
@a:Array<U32> -> @+length:Nat -> 0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV
def digest source · line 188 · raw
@c:0xe4067e0d858024083f36a7abe7281e89/src/crypto/blake/blake3/types.CV -> Array<U32>
def checked source · line 202 · raw
@valid:Bool -> @a:Array<U32> -> @+length:Nat -> Maybe<&1, Array<U32>>
def sized source · line 207 · raw
@+length:Nat -> @pair:Pair(Array<U32>, U32) -> Maybe<&1, Array<U32>>
def blake3 source · line 211 · raw
@words:Array<U32> -> @byte_length:Nat -> Maybe<&1, Array<U32>>