- runtime/src/crypto.c: hand-rolled cores, whole-value over Bytes, allocation-free tails; VM half returns fresh Bytes, WO_T_BOUNDS on wrong class id (Bytes builtins' message shape) - test_crypto: RFC 3174 + FIPS 180-4 + RFC 4231 (incl. long-key case 6) + 63/64/65 block-boundary sweep + the RFC 6455 handshake input, 18/0 - compiler surface flat per house convention (sha1, not crypto.sha1 — matches base64_encode): types.ml signatures + result types, emit.ml ids/dispatch/arity/known-list/drop-table (fresh-Bytes entries so results get their drops) - corpus run/crypto-digests pins the .wo path through base64_encode - no .wob bump (ticks-84 precedent); WO_B_MAX 87; surface doc rows - slice marker + board row: iteration 24 (absorbing 31+34) executing - battery 12/12 fresh-built Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
19 lines
644 B
C
19 lines
644 B
C
/* crypto.h — hand-rolled digests (iteration 34). Whole-value, libc-only.
|
|
* The raw cores are exposed for the unit test; the VM enters through
|
|
* wo_builtin_crypto (ids WO_B_SHA1..WO_B_HMAC_SHA256). */
|
|
#ifndef WO_CRYPTO_H
|
|
#define WO_CRYPTO_H
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include "vm.h"
|
|
|
|
void wo_sha1(const uint8_t *msg, size_t len, uint8_t out[20]);
|
|
void wo_sha256(const uint8_t *msg, size_t len, uint8_t out[32]);
|
|
void wo_hmac_sha256(const uint8_t *key, size_t klen, const uint8_t *msg,
|
|
size_t mlen, uint8_t out[32]);
|
|
|
|
int wo_builtin_crypto(wo_vm *vm, uint64_t *R, uint32_t ins, const char **msg);
|
|
|
|
#endif
|