@e280/authlocal
Version:
User-sovereign login system for everybody
25 lines • 805 B
JavaScript
import { Hex } from "@e280/stz";
import * as ed from "@noble/ed25519";
export function unpackKey(key) {
const bytes = Hex.bytes(key);
if (bytes.length !== 32)
throw new Error("invalid key");
return bytes;
}
export async function deriveId(secret) {
const secretBytes = unpackKey(secret);
const idBytes = await ed.getPublicKeyAsync(secretBytes);
return Hex.string(idBytes);
}
export async function generateKeypair() {
const secret = Hex.random(32);
const id = await deriveId(secret);
return { id, secret };
}
export async function sign(message, secret) {
return ed.signAsync(message, unpackKey(secret));
}
export async function verify(message, signature, id) {
return ed.verifyAsync(signature, message, unpackKey(id));
}
//# sourceMappingURL=crypto.js.map