UNPKG

@authduo/authduo

Version:

Free User-sovereign Authentication for the World

43 lines 1.85 kB
import { Hex } from "@benev/slate"; import { Pubkey } from "./pubkey.js"; import { Token } from "./jwt/token.js"; import { CryptoConstants } from "./crypto-constants.js"; export class Keypair extends Pubkey { privateKey; constructor(thumbprint, publicKey, privateKey) { super(thumbprint, publicKey); this.privateKey = privateKey; } static async generate() { const keys = await crypto.subtle .generateKey(CryptoConstants.algos.generate, true, ["sign", "verify"]); const publicBuffer = await crypto.subtle .exportKey(CryptoConstants.formats.public, keys.publicKey); const thumbprint = Hex.string(new Uint8Array(await crypto.subtle.digest(CryptoConstants.algos.thumbprint, publicBuffer))); return new this(thumbprint, keys.publicKey, keys.privateKey); } static async fromData(data) { const pubkey = await Pubkey.fromData(data); const extractable = true; const privateBuffer = Hex.bytes(data.privateKey).buffer; const privateKey = await crypto.subtle.importKey(CryptoConstants.formats.private, privateBuffer, CryptoConstants.algos.generate, extractable, ["sign"]); return new this(pubkey.thumbprint, pubkey.publicKey, privateKey); } async toData() { const pubkey = await super.toData(); const privateBuffer = await crypto.subtle .exportKey(CryptoConstants.formats.private, this.privateKey); return { thumbprint: pubkey.thumbprint, publicKey: pubkey.publicKey, privateKey: Hex.string(new Uint8Array(privateBuffer)), }; } toPubkey() { return new Pubkey(this.thumbprint, this.publicKey); } async sign(payload) { return await Token.sign(this.privateKey, payload); } } //# sourceMappingURL=keypair.js.map