Skip to main content

Module sha256

Module sha256 

Source
Expand description

SHA-256 compression codegen for Bitcoin Script.

Port of packages/runar-compiler/src/passes/sha256-codegen.ts.

emitSha256Compress: [state(32), block(64)] -> [newState(32)]

Optimized architecture (inspired by twostack/tstokenlib):

  • All 32-bit words stored as 4-byte little-endian during computation.
  • Bitwise ops (AND, OR, XOR, INVERT) are endian-agnostic on equal-length arrays.
  • ROTR uses OP_RSHIFT/OP_LSHIFT (native BE byte-array shifts).
  • Batched addN for T1 (5 addends) converts all to numeric once, adds, converts back.
  • BE<->LE conversion only at input unpack / output pack.

Functions§

emit_sha256_compress
Emit SHA-256 compression in Bitcoin Script. Stack on entry: […, state(32 BE), block(64 BE)] Stack on exit: […, newState(32 BE)]
emit_sha256_finalize
Emit SHA-256 finalization in Bitcoin Script. Stack on entry: […, state(32 BE), remaining(var len BE), msgBitLen(bigint)] Stack on exit: […, hash(32 BE)]