{
  "version": 3,
  "sources": ["../src/index.ts"],
  "sourcesContent": ["import { hex } from 'iso-base/rfc4648'\nimport { equals } from 'iso-base/utils'\nimport { varint } from 'iso-base/varint'\nimport type {\n    VarsigOptions,\n    VarsigEncoding,\n    VarsigAlgorithm,\n    DecodeOutput\n} from './types.js'\nimport { IOBuffer } from './iobuffer.js'\n\nexport const VARSIG = 0x34\nexport const VERSION = 0x01\nexport const EIP191_ENCODING = 0xe191\n\nexport const CODE_ENCODING: Record<number, VarsigEncoding> = {\n    0x5f: 'RAW',\n    0x71: 'DAG-CBOR',\n} as const\n\nexport const SIG_PREFIX: Record<number, string> = {\n    0x12_05: 'RSA',\n    0xed: 'EdDSA',\n    0xec: 'ECDSA',\n} as const\n\n/**\n * Varint encoding for signature algorithms and encodings.\n */\nconst VARINT: Record<'VARSIG' | 'VERSION' | VarsigEncoding | VarsigAlgorithm, number[]> = {\n    VARSIG: [52],\n    VERSION: [1],\n\n    RAW: [95],\n    'DAG-CBOR': [113],\n\n    /** Presets */\n    // rsa(2b)+SHA2-256(1b)+256(1b)\n    RS256: [133, 36, 18, 128, 2],\n    // eddsa(2b)+edwards25519(2b)+SHA2-512(1b)\n    Ed25519: [237, 1, 237, 1, 19],\n    // ECDSA(2b) + p256(2b)   + SHA2-256(1b)\n    ES256: [236, 1, 128, 36, 18],\n    // ECDSA(2b) + p384(2b)   + SHA2-384(1b)\n    ES384: [236, 1, 129, 36, 32],\n    // ECDSA(2b) + p512(2b)   + SHA2-512(1b)\n    ES512: [236, 1, 130, 36, 19],\n    // ECDSA(2b) + secp256k1(2b)  + SHA2-256(1b)\n    ES256K: [236, 1, 231, 1, 18],\n    // ECDSA(2b) + secp256k1(2b) + keccak-256(1b) + eip191-encoding(3b)\n    EIP191: [236, 1, 231, 1, 27, 145, 195, 3],\n}\n\nexport function encode (options:VarsigOptions):Uint8Array {\n    const enc = VARINT[options.enc]\n    if (!enc) {\n        throw new TypeError(`Unsupported encoding ${options.enc}`)\n    }\n\n    const alg = VARINT[options.alg]\n    if (!alg) {\n        throw new TypeError(`Unsupported algorithm ${options.alg}`)\n    }\n\n    return Uint8Array.from([...VARINT.VARSIG, ...VARINT.VERSION, ...alg, ...enc])\n}\n\nfunction getEncoding (bytes:Uint8Array):VarsigEncoding {\n    const [code] = varint.decode(bytes)\n    const enc = CODE_ENCODING[code]\n    if (!enc) {\n        throw new TypeError(`Unsupported encoding 0x${code.toString(16)}`)\n    }\n    return enc\n}\n\nfunction getPreset (bytes:Uint8Array, presets:VarsigAlgorithm[]):VarsigAlgorithm {\n    for (const preset of presets) {\n        if (equals(bytes, Uint8Array.from(VARINT[preset]))) {\n            return preset\n        }\n    }\n    throw new TypeError(`Unsupported preset ${bytes}`)\n}\n\n/**\n * Decode varsig header\n */\nexport function decode (buf:Uint8Array):DecodeOutput {\n    const bytes = new IOBuffer(buf)\n    const varsig = bytes.readBytes(1)\n    if (varsig[0] !== VARINT.VARSIG[0]) {\n        throw new TypeError(\n      `Invalid varsig sigil expected 0x${VARSIG.toString(16)} got 0x${hex.encode(varsig)}`\n        )\n    }\n\n    const version = bytes.readBytes(1)\n    if (version[0] !== VARINT.VERSION[0]) {\n        throw new TypeError(\n      `Invalid version sigil expected 0x${VERSION.toString(16)} got 0x${hex.encode(version)}`\n        )\n    }\n    const [code] = varint.decode(buf, 2)\n\n    switch (SIG_PREFIX[code]) {\n        case 'RSA': {\n            return {\n                alg: getPreset(bytes.readBytes(5), ['RS256']),\n                enc: getEncoding(bytes.readBytes(1)),\n            }\n        }\n        case 'EdDSA': {\n            return {\n                alg: getPreset(bytes.readBytes(5), ['Ed25519']),\n                enc: getEncoding(bytes.readBytes(1)),\n            }\n        }\n        case 'ECDSA': {\n            const isEIP191 = varint.decode(buf, 2 + 5)[0] === EIP191_ENCODING\n            if (isEIP191) {\n                return {\n                    alg: getPreset(bytes.readBytes(8), ['EIP191']),\n                    enc: getEncoding(bytes.readBytes(1)),\n                }\n            }\n\n            return {\n                alg: getPreset(bytes.readBytes(5), [\n                    'ES256',\n                    'ES256K',\n                    'ES384',\n                    'ES512',\n                ]),\n                enc: getEncoding(bytes.readBytes(1)),\n            }\n        }\n        default:\n            throw new TypeError(`Unsupported algorithm ${code}`)\n    }\n}\n"],
  "mappings": "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",
  "names": []
}
