/** * bare-crypto loads only under Bare — run via brittle-bare (see package.json "test"). */ import test from 'brittle' import b4a from 'b4a' import { encodeAccount, decodeAccount, encodeNewAccount, ACCOUNT_MAGIC, ACCOUNT_VERSION, sealBytes, openBytes, vaultKeyFromSecret } from './lib/identity-account.js' test('identity account encode/decode roundtrip', async (t) => { const pass = 'unit-test-passphrase' const blob = encodeNewAccount(pass) t.ok(blob.length > 80) t.is(blob[0], ACCOUNT_MAGIC[0]) t.is(blob[ACCOUNT_MAGIC.length], ACCOUNT_VERSION) const { publicKey, secretKey } = decodeAccount(pass, blob) t.is(publicKey.length, 32) t.is(secretKey.length, 64) const blob2 = encodeAccount(pass, publicKey, secretKey) const again = decodeAccount(pass, blob2) t.alike(publicKey, again.publicKey) t.alike(secretKey, again.secretKey) let bad = false try { decodeAccount('wrong-pass', blob) } catch { bad = true } t.ok(bad) }) test('vault sealBytes/openBytes rejects tampered ciphertext', async (t) => { const sk = new Uint8Array(64) sk.fill(9) const key = vaultKeyFromSecret(sk) const sealed = sealBytes(key, b4a.from('vault-test')) const bad = Uint8Array.from(sealed) bad[bad.length - 1] ^= 0xff let threw = false try { openBytes(key, bad) } catch { threw = true } t.ok(threw) })