Files
bare-operating-system/packages/bare-os-coreutils/test/sha224-sha384-sum.test.mjs
T
Raven Scott 98dd91020e feat(shell): job-aware kill, disown, jobs/set flags, fallback REPL history
- Document interactive shell vs /bin/sh in bare-os-shell man, handbook §9,
  kill(1), and shell-completion guide
- Resolve kill %n and %% to synthetic PIDs via shellBackgroundJobs
- Add disown builtin; jobs -p (pgid-only) and -l (pid column); set -o/+o to
  print errexit/nounset/pipefail/noglob
- Expand completion-engine fallback flags for common utilities
- Persist lines to /.bare/repl_history_<USER> when BARE_OS_REPL_HISTORY=1
  and Fish REPL is off (repl-session + cli-readline)
- Tests: kill job specs, set -o output, jobs -p
2026-04-21 17:26:41 -04:00

55 lines
1.6 KiB
JavaScript

/**
* SHA-224 bundled digest vectors; SHA-384 via Web Crypto (same as sha384sum command).
*/
import { readFileSync } from 'node:fs'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
import vm from 'node:vm'
import test from 'brittle'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const sha224Lib = path.join(__dirname, '../lib/sha224.js')
function loadBareSha224() {
const src = readFileSync(sha224Lib, 'utf8')
const ctx = {}
vm.createContext(ctx)
vm.runInContext(src + '\nthis.__fn = bareSha224DigestBytes;', ctx)
return ctx.__fn
}
test('bareSha224DigestBytes matches known vectors', async (t) => {
const bareSha224DigestBytes = loadBareSha224()
t.is(
bareSha224DigestBytes(new Uint8Array(0)),
'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f'
)
t.is(
bareSha224DigestBytes(new TextEncoder().encode('abc')),
'23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7'
)
})
test('SHA-384 empty and abc via subtle.digest', async (t) => {
const subtle = globalThis.crypto?.subtle
if (!subtle?.digest) {
t.pass('skip: no Web Crypto subtle')
return
}
async function hex384(u8) {
const hash = await subtle.digest('SHA-384', u8)
return [...new Uint8Array(hash)]
.map((b) => b.toString(16).padStart(2, '0'))
.join('')
}
t.is(
await hex384(new Uint8Array(0)),
'38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b'
)
const abc = new TextEncoder().encode('abc')
t.is(
await hex384(abc),
'cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7'
)
})