~/bend-docscommunity

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

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>