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