src/crypto/sha512/core.bend checks
raw source on the hub · import 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/core.bend as Core
Generated by tools/generators/sha512_gen.py; do not edit by hand.
2 imports
import Base import ./types.bend as T
Types
type Sched source · line 13 · raw
Data
The sixteen most recent schedule words, newest first: W[t-1] .. W[t-16].
Win@a:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @b:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @c:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @d:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @e:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @f:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @g:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @h:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @i:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @j:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @k:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @l:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @m:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @n:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @o:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @p:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> Sched
Definitions
def add source · line 20 · raw
@a:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @b:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane
(a + b) mod 2^64: the carry out of the low halves is 1 exactly when their wrapped sum is below an addend.
def big0 source · line 27 · raw
@x:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane
FIPS 180-4 (4.10): ROTR28 ^ ROTR34 ^ ROTR39
def big1 source · line 34 · raw
@x:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane
FIPS 180-4 (4.11): ROTR14 ^ ROTR18 ^ ROTR41
def small0 source · line 41 · raw
@x:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane
FIPS 180-4 (4.12): ROTR1 ^ ROTR8 ^ SHR7
def small1 source · line 48 · raw
@x:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane
FIPS 180-4 (4.13): ROTR19 ^ ROTR61 ^ SHR6
def choose source · line 54 · raw
@x:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @y:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @z:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane
def majority source · line 60 · raw
@x:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @y:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @z:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane
def step source · line 68 · raw
@s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State -> @k:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @w:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State
def feedforward source · line 74 · raw
@x:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State -> @y:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State
def next source · line 80 · raw
@+w2:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @w7:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+w15:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @w16:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane
W[t] from W[t-2], W[t-7], W[t-15], W[t-16].
def window_rounds source · line 85 · raw
@q:Nat -> @win:Sched -> @ks:List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane> -> @s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State
The remaining q rounds (64 after the block's own sixteen): each derives its schedule word from the window, then drops the oldest word.
def block_rounds source · line 97 · raw
@ws:List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane> -> @+q:Nat -> @win:Sched -> @ks:List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane> -> @s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State
The block's own words first, then q window rounds (q = 64 for SHA-512); win is the block reversed.
def compress16 source · line 106 · raw
@+a:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+b:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+c:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+d:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+e:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+f:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+g:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+h:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+i:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+j:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+k:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+l:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+m:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+n:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+o:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+p:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @+q:Nat -> @ks:List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane> -> @+s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State
def blocks source · line 115 · raw
@ws:List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane> -> @+q:Nat -> @+ks:List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane> -> @s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State -> 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State
Every whole block of sixteen words; a shorter tail is ignored (padded messages have none).
def pack source · line 124 · raw
@a:U32 -> @b:U32 -> @c:U32 -> @d:U32 -> U32
def lanes source · line 129 · raw
@bytes:List<&2, U32> -> List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane>
Big-endian 64-bit words, eight bytes each.
def base256 source · line 136 · raw
@width:Nat -> @+n:Nat -> List<&2, U32>
def bit_length source · line 144 · raw
@+n:Nat -> List<&2, U32>
8n as sixteen big-endian octets: n div 32 in the top fifteen, 8 (n mod 32) last.
def zeros_if source · line 147 · raw
@r:Nat -> @fits:Bool -> Nat
def zeros source · line 154 · raw
@+r:Nat -> Nat
def suffix source · line 158 · raw
@+n:Nat -> List<&2, U32>
0x80, zeros up to 112 mod 128, then the 128-bit bit length.
def octets source · line 161 · raw
@+x:U32 -> @tail:List<&2, U32> -> List<&2, U32>
def lane_octets source · line 165 · raw
@l:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane -> @tail:List<&2, U32> -> List<&2, U32>
def digest_bytes source · line 171 · raw
@s:0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State -> List<&2, U32>
The 64-byte digest H0 .. H7.
def initial source · line 178 · raw
0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.State
def round_constants source · line 184 · raw
List<&2, 0xd9a2fae439ac7ff9e21e0853948f94fe/src/crypto/sha512/types.Lane>
def hash_padded source · line 228 · raw
@bytes:List<&2, U32> -> List<&2, U32>
def sha512 source · line 231 · raw
@+bytes:List<&2, U32> -> List<&2, U32>