~/bend-docscommunity

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.

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>>