signify-ts 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +48 -1
  2. package/dist/index.d.ts +3 -1
  3. package/dist/keri/app/accountant.d.ts +10 -0
  4. package/dist/keri/app/apping.d.ts +1 -0
  5. package/dist/keri/app/client.d.ts +7 -0
  6. package/dist/keri/app/habery.d.ts +47 -0
  7. package/dist/keri/app/signify.d.ts +6 -0
  8. package/dist/keri/core/authing.d.ts +9 -0
  9. package/dist/keri/core/cigar.d.ts +3 -3
  10. package/dist/keri/core/core.d.ts +19 -34
  11. package/dist/keri/core/counter.d.ts +43 -0
  12. package/dist/keri/core/eventing.d.ts +21 -0
  13. package/dist/keri/core/httping.d.ts +34 -0
  14. package/dist/keri/core/manager.d.ts +38 -17
  15. package/dist/keri/core/matter.d.ts +23 -1
  16. package/dist/keri/core/number.d.ts +6 -0
  17. package/dist/keri/core/prefixer.d.ts +15 -0
  18. package/dist/keri/core/saider.d.ts +23 -0
  19. package/dist/keri/core/salter.d.ts +23 -0
  20. package/dist/keri/core/serder.d.ts +23 -0
  21. package/dist/keri/core/siger.d.ts +1 -1
  22. package/dist/keri/core/signer.d.ts +2 -2
  23. package/dist/keri/core/tholder.d.ts +14 -0
  24. package/dist/keri/core/utils.d.ts +2 -1
  25. package/dist/keri/core/verfer.d.ts +12 -0
  26. package/dist/keri/end/ending.d.ts +13 -0
  27. package/dist/signify-ts.cjs.development.js +3380 -5
  28. package/dist/signify-ts.cjs.development.js.map +1 -1
  29. package/dist/signify-ts.cjs.production.min.js +1 -1
  30. package/dist/signify-ts.cjs.production.min.js.map +1 -1
  31. package/dist/signify-ts.esm.js +3365 -5
  32. package/dist/signify-ts.esm.js.map +1 -1
  33. package/package.json +4 -2
  34. package/src/index.ts +5 -6
  35. package/src/keri/app/accountant.ts +35 -0
  36. package/src/keri/app/apping.ts +12 -0
  37. package/src/keri/app/client.ts +30 -0
  38. package/src/keri/app/habery.ts +152 -0
  39. package/src/keri/app/signify.ts +12 -0
  40. package/src/keri/app/tsconfig.json +100 -0
  41. package/src/keri/core/authing.ts +129 -0
  42. package/src/keri/core/cigar.ts +4 -4
  43. package/src/keri/core/core.ts +53 -43
  44. package/src/keri/core/counter.ts +207 -0
  45. package/src/keri/core/diger.ts +5 -5
  46. package/src/keri/core/eventing.ts +219 -0
  47. package/src/keri/core/httping.ts +163 -0
  48. package/src/keri/core/indexer.ts +2 -1
  49. package/src/keri/core/keeping.ts +0 -1
  50. package/src/keri/core/manager.ts +238 -90
  51. package/src/keri/core/matter.ts +46 -11
  52. package/src/keri/core/number.ts +21 -0
  53. package/src/keri/core/prefixer.ts +212 -0
  54. package/src/keri/core/saider.ts +158 -0
  55. package/src/keri/core/salter.ts +9 -5
  56. package/src/keri/core/serder.ts +99 -0
  57. package/src/keri/core/siger.ts +2 -2
  58. package/src/keri/core/signer.ts +4 -3
  59. package/src/keri/core/tholder.ts +52 -0
  60. package/src/keri/core/tsconfig.json +2 -2
  61. package/src/keri/core/utils.ts +10 -6
  62. package/src/keri/core/verfer.ts +6 -5
  63. package/src/keri/end/ending.ts +160 -0
  64. package/src/keri/end/tsconfig.json +100 -0
@@ -1 +1 @@
1
- {"version":3,"file":"signify-ts.cjs.development.js","sources":["../src/index.ts"],"sourcesContent":["export const sum = (a: number, b: number) => {\n if ('development' === process.env.NODE_ENV) {\n console.log('boop');\n }\n return a + b;\n};\n"],"names":["sum","a","b","console","log"],"mappings":";;;;IAAaA,GAAG,GAAG,SAANA,GAAG,CAAIC,CAAS,EAAEC,CAAS;EACM;IAC1CC,OAAO,CAACC,GAAG,CAAC,MAAM,CAAC;;EAErB,OAAOH,CAAC,GAAGC,CAAC;AACd;;;;"}
1
+ {"version":3,"file":"signify-ts.cjs.development.js","sources":["../src/keri/core/kering.ts","../src/keri/core/core.ts","../src/keri/core/matter.ts","../src/keri/core/verfer.ts","../src/keri/core/cigar.ts","../src/keri/core/indexer.ts","../src/keri/core/siger.ts","../src/keri/core/signer.ts","../src/keri/core/salter.ts","../src/keri/core/decrypter.ts","../src/keri/core/cipher.ts","../src/keri/core/utils.ts","../src/keri/core/encrypter.ts","../src/keri/core/diger.ts","../src/keri/core/manager.ts","../src/keri/core/tholder.ts","../src/keri/core/number.ts","../src/keri/core/serder.ts","../src/keri/core/prefixer.ts","../src/keri/core/saider.ts","../src/keri/core/eventing.ts","../src/keri/app/habery.ts"],"sourcesContent":["\n\nexport class EmptyMaterialError {\n private readonly _err: Error\n constructor(err: string) {\n this._err = new Error(err)\n }\n\n get err() {\n return this._err\n }\n}","import {TextEncoder, TextDecoder} from 'util'\n\nexport enum Serials {\n JSON = \"JSON\",\n}\n\nexport enum Ident {\n KERI = \"KERI\"\n}\n\nexport class Version {\n public major: number\n public minor: number\n\n constructor(major: number = 1, minor: number = 0) {\n this.major = major\n this.minor = minor\n }\n}\n\nexport const Versionage = new Version()\n\n\nexport const Ilks = {\n icp: 'icp',\n rot: 'rot',\n ixn: 'ixn',\n dip: 'dip',\n drt: 'drt',\n rct: 'rct',\n vrc: 'vrc',\n};\n\nexport const IcpLabels = [\"v\", \"i\", \"s\", \"t\", \"kt\", \"k\", \"n\",\n \"bt\", \"b\", \"c\", \"a\"];\n\nexport const DipLabels = [\"v\", \"i\", \"s\", \"t\", \"kt\", \"k\", \"n\",\n \"bt\", \"b\", \"c\", \"a\", \"di\"];\n\nexport const RotLabels = [\"v\", \"i\", \"s\", \"t\", \"p\", \"kt\", \"k\", \"n\",\n \"bt\", \"br\", \"ba\", \"a\"]\nexport const DrtLabels = [\"v\", \"i\", \"s\", \"t\", \"p\", \"kt\", \"k\", \"n\",\n \"bt\", \"br\", \"ba\", \"a\"]\nexport const IxnLabels = [\"v\", \"i\", \"s\", \"t\", \"p\", \"a\"]\n\nexport const KsnLabels = [\"v\", \"i\", \"s\", \"t\", \"p\", \"d\", \"f\", \"dt\", \"et\", \"kt\", \"k\", \"n\",\n \"bt\", \"b\", \"c\", \"ee\", \"di\", \"r\"]\n\nexport const RpyLabels = [\"v\", \"t\", \"d\", \"dt\", \"r\", \"a\"]\n\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\nexport const VERFULLSIZE = 17;\nexport const MINSNIFFSIZE = 12 + VERFULLSIZE;\nexport const MINSIGSIZE = 4;\n\n// const version_pattern = 'KERI(?P<major>[0-9a-f])(?P<minor>[0-9a-f])\n// (?P<kind>[A-Z]{4})(?P<size>[0-9a-f]{6})'\n// const version_pattern1 = `KERI\\(\\?P<major>\\[0\\-9a\\-f\\]\\)\\(\\?P<minor>\\[0\\-9a\\-f\\]\\)\\\n// (\\?P<kind>\\[A\\-Z\\]\\{4\\}\\)\\(\\?P<size>\\[0\\-9a\\-f\\]\\{6\\}\\)_`\n\nexport const VEREX = 'KERI([0-9a-f])([0-9a-f])([A-Z]{4})([0-9a-f]{6})_';\n\nexport interface Dict<TValue> {\n [id: string]: TValue;\n}\n\n// Regex pattern matching\n\n/**\n * @description This function is use to deversify the version\n * Here we will use regex to to validate and extract serialization kind,size and version\n * @param {string} versionString version string\n * @return {Object} contaning kind of serialization like cbor,json,mgpk\n * version = version of object ,size = raw size integer\n */\nexport function deversify(versionString: string): [Serials, Version, string] {\n let kind;\n let size;\n const version = Versionage;\n\n // we need to identify how to match the buffers pattern ,like we do regex matching for strings\n const re = new RegExp(VEREX);\n\n const match = re.exec(versionString);\n\n if (match) {\n [version.major, version.minor, kind, size] = [\n +match[1],\n +match[2],\n match[3],\n match[4],\n ];\n if (!Object.values(Serials).includes(kind as Serials)) {\n throw new Error(`Invalid serialization kind = ${kind}`);\n }\n\n let ta = kind as keyof typeof Serials\n kind = Serials[ta]\n\n return [kind, version, size];\n }\n throw new Error(`Invalid version string = ${versionString}`);\n}\n\nexport function versify(ident: Ident = Ident.KERI, version?: Version, kind: Serials=Serials.JSON, size:number = 0) {\n version = version == undefined ? Versionage : version\n\n return `${ident}${version.major.toString(16)}${version.minor.toString()}${kind}${size.toString(16).padStart(6, '0')}_`\n}\n\n\nexport const B64ChrByIdx = new Map<number, string>([[0, 'A'], [1, 'B'], [2, 'C'], [3, 'D'], [4, 'E'], [5, 'F'],\n [6, 'G'], [7, 'H'], [8, 'I'], [9, 'J'], [10, 'K'], [11, 'L'], [12, 'M'], [13, 'N'], [14, 'O'], [15, 'P'],\n [16, 'Q'], [17, 'R'], [18, 'S'], [19, 'T'], [20, 'U'], [21, 'V'], [22, 'W'], [23, 'X'], [24, 'Y'], [25, 'Z'],\n [26, 'a'], [27, 'b'], [28, 'c'], [29, 'd'], [30, 'e'], [31, 'f'], [32, 'g'], [33, 'h'], [34, 'i'], [35, 'j'],\n [36, 'k'], [37, 'l'], [38, 'm'], [39, 'n'], [40, 'o'], [41, 'p'], [42, 'q'], [43, 'r'], [44, 's'], [45, 't'],\n [46, 'u'], [47, 'v'], [48, 'w'], [49, 'x'], [50, 'y'], [51, 'z'],[ 52, '0'], [53, '1'], [54, '2'], [55, '3'],\n [56, '4'], [57, '5'], [58, '6'], [59, '7'], [60, '8'], [61, '9'], [62, '-'], [63, '_']]);\n\nexport const B64IdxByChr = new Map<string, number>(Array.from(B64ChrByIdx, entry => [entry[1], entry[0]]))\n\n\nexport function intToB64(i:number, l=1): string {\n let out = \"\"\n while(l != 0) {\n out = B64ChrByIdx.get(i % 64) + out\n i = Math.floor(i / 64)\n if (i == 0) {\n break\n }\n }\n\n let x = (l - out.length)\n for(let i = 0; i < x; i++) {\n out = \"A\" + out\n }\n\n return out\n}\n\nexport function intToB64b(n: number, l: number = 1): Uint8Array {\n let s = intToB64(n, l)\n return b(s)\n}\n\nexport function b64ToInt(s: string): number {\n if (s.length == 0) {\n throw new Error(\"Empty string, conversion undefined.\")\n }\n\n let i = 0\n let rev = [...s].reverse()\n rev.forEach((c: string, e: number) => {\n i |= B64IdxByChr.get(c)! << (e * 6)\n })\n\n return i\n}\n\nexport function b(s?: string): Uint8Array {\n return encoder.encode(s)\n}\n\nexport function d(u? :Uint8Array): string {\n return decoder.decode(u)\n}\n\nexport function concat(one: Uint8Array, two: Uint8Array): Uint8Array {\n let out = new Uint8Array(one.length + two.length)\n out.set(one)\n out.set(two, one.length)\n return out\n}\n\n\nexport function readInt(array: Uint8Array) {\n let value = 0;\n for (let i = 0; i < array.length; i++) {\n value = (value * 256) + array[i];\n }\n return value;\n}\n","import {EmptyMaterialError} from \"./kering\";\n\nimport {intToB64, readInt} from './core';\nimport Base64 from \"urlsafe-base64\"\nimport {b, d} from \"./core\";\nimport { Buffer } from 'buffer';\n\nexport class Codex {\n has(prop: string): boolean {\n let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]]))\n return m.has(prop)\n }\n}\n\nexport class MatterCodex extends Codex {\n Ed25519_Seed: string = 'A' // Ed25519 256 bit random seed for private key\n Ed25519N: string = 'B' // Ed25519 verification key non-transferable, basic derivation.\n X25519: string = 'C' // X25519 public encryption key, converted from Ed25519 or Ed25519N.\n Ed25519: string = 'D' // Ed25519 verification key basic derivation\n Blake3_256: string = 'E' // Blake3 256 bit digest self-addressing derivation.\n X25519_Private: string = 'O' // X25519 private decryption key converted from Ed25519\n X25519_Cipher_Seed: string = 'P' // X25519 124 char b64 Cipher of 44 char qb64 Seed\n X25519_Cipher_Salt: string = '1AAH' // X25519 100 char b64 Cipher of 24 char qb64 Salt\n Salt_128: string = '0A' // 128 bit random salt or 128 bit number (see Huge)\n Ed25519_Sig: string = '0B' // Ed25519 signature.\n}\n\nexport const MtrDex = new MatterCodex()\n\n\nexport class NonTransCodex extends Codex {\n Ed25519N: string = 'B' // Ed25519 verification key non-transferable, basic derivation.\n ECDSA_256k1N: string = '1AAA' // ECDSA secp256k1 verification key non-transferable, basic derivation.\n Ed448N: string = '1AAC' // Ed448 non-transferable prefix public signing verification key. Basic derivation.\n}\n\nexport const NonTransDex = new NonTransCodex()\n\n\nexport class DigiCodex extends Codex {\n Blake3_256: string = 'E' // Blake3 256 bit digest self-addressing derivation.\n Blake2b_256: string = 'F' // Blake2b 256 bit digest self-addressing derivation.\n Blake2s_256: string = 'G' // Blake2s 256 bit digest self-addressing derivation.\n SHA3_256: string = 'H' // SHA3 256 bit digest self-addressing derivation.\n SHA2_256: string = 'I' // SHA2 256 bit digest self-addressing derivation.\n Blake3_512: string = '0D' // Blake3 512 bit digest self-addressing derivation.\n Blake2b_512: string = '0E' // Blake2b 512 bit digest self-addressing derivation.\n SHA3_512: string = '0F' // SHA3 512 bit digest self-addressing derivation.\n SHA2_512: string = '0G' // SHA2 512 bit digest self-addressing derivation.\n}\n\nexport const DigiDex = new DigiCodex()\n\nexport class Sizage {\n public hs: number;\n public ss: number;\n public ls: number;\n public fs: number;\n\n constructor(hs: number, ss: number, fs: number, ls: number) {\n this.hs = hs;\n this.ss = ss;\n this.fs = fs;\n this.ls = ls;\n }\n}\n\nexport interface MatterArgs {\n raw?: Uint8Array | undefined\n code?: string\n qb64b?: Uint8Array | undefined\n qb64?: string\n qb2?: Uint8Array | undefined\n}\n\nexport class Matter {\n\n static Sizes = new Map(Object.entries({\n 'A': new Sizage(1, 0, 44, 0),\n 'B': new Sizage(1, 0, 44, 0),\n 'C': new Sizage(1, 0, 44, 0),\n 'D': new Sizage(1, 0, 44, 0),\n 'E': new Sizage(1, 0, 44, 0),\n 'O': new Sizage(1, 0, 44, 0),\n 'P': new Sizage(1, 0, 124, 0),\n \"0A\": new Sizage(2, 0, 24, 0),\n '0B': new Sizage(2, 0, 88, 0),\n '1AAH': new Sizage(4, 0, 100, 0),\n }));\n\n static Hards = new Map<string, number>([['A', 1], ['B', 1], ['C', 1], ['D', 1], ['E', 1], ['F', 1], ['G', 1],\n ['H', 1], ['I', 1], ['J', 1], ['K', 1], ['L', 1], ['M', 1], ['N', 1], ['O', 1], ['P', 1], ['Q', 1], ['R', 1],\n ['S', 1], ['T', 1], ['U', 1], ['V', 1], ['W', 1], ['X', 1], ['Y', 1], ['Z', 1], ['a', 1], ['b', 1], ['c', 1],\n ['d', 1], ['e', 1], ['f', 1], ['g', 1], ['h', 1], ['i', 1], ['j', 1], ['k', 1], ['l', 1], ['m', 1], ['n', 1],\n ['o', 1], ['p', 1], ['q', 1], ['r', 1], ['s', 1], ['t', 1], ['u', 1], ['v', 1], ['w', 1], ['x', 1], ['y', 1],\n ['z', 1], ['0', 2], ['1', 4], ['2', 4], ['3', 4], ['4', 2], ['5', 2], ['6', 2], ['7', 4], ['8', 4], ['9', 4]])\n\n\n private _code: string = \"\";\n private _size: number = -1;\n private _raw: Uint8Array = new Uint8Array(0);\n\n constructor({raw, code = MtrDex.Ed25519N, qb64b, qb64, qb2}: MatterArgs) {\n\n let size = -1\n if (raw != undefined) {\n if (code.length == 0) {\n throw new Error(\"Improper initialization need either (raw and code) or qb64b or qb64 or qb2.\")\n }\n\n // Add support for variable size codes here if needed, this code only works for stable size codes\n let sizage = Matter.Sizes.get(code)\n if (sizage!.fs == -1) { // invalid\n throw new Error(`Unsupported variable size code=${code}`)\n }\n\n let rize = Matter._rawSize(code)\n raw = raw.slice(0, rize) // copy only exact size from raw stream\n if (raw.length != rize) { // forbids shorter\n throw new Error(`Not enougth raw bytes for code=${code} expected ${rize} got ${raw.length}.`)\n }\n\n this._code = code // hard value part of code\n this._size = size // soft value part of code in int\n this._raw = raw // crypto ops require bytes not bytearray\n\n } else if (qb64 !== undefined) {\n this._exfil(qb64)\n } else if (qb64b !== undefined) {\n let qb64 = d(qb64b)\n this._exfil(qb64)\n } else if (qb2 !== undefined) {\n this._bexfil(qb2)\n } else {\n throw new EmptyMaterialError(\"EmptyMaterialError\");\n }\n }\n\n get code(): string {\n return this._code;\n }\n\n get size() {\n return this._size;\n }\n\n get raw(): Uint8Array {\n return this._raw\n }\n\n get qb64() {\n return this._infil();\n }\n\n get qb64b() {\n return b(this.qb64)\n }\n\n get transferable(): boolean {\n return !NonTransDex.has(this.code)\n }\n\n get digestive(): boolean {\n return DigiDex.has(this.code)\n }\n\n static _rawSize(code: string) {\n let sizage = this.Sizes.get(code) // get sizes\n let cs = sizage!.hs + sizage!.ss // both hard + soft code size\n if (sizage!.fs === -1) {\n throw Error(`Non-fixed raw size code ${code}.`)\n }\n\n return (Math.floor((sizage!.fs - cs) * 3 / 4)) - sizage!.ls\n\n }\n\n static _leadSize(code: string) {\n let sizage = this.Sizes.get(code);\n return sizage!.ls\n }\n\n get both() {\n let sizage = Matter.Sizes.get(this.code);\n return `${this.code}${intToB64(this.size, sizage!.ls)}`\n }\n\n\n private _infil() {\n let code = this.code;\n let raw = this.raw;\n\n let ps = ((3 - (raw.length % 3)) % 3); // pad size chars or lead size bytes\n let sizage = Matter.Sizes.get(code);\n\n if (sizage!.fs === -1) { // Variable size code, NOT SUPPORTED\n throw new Error(\"Variable sized codes not supported... yet\");\n } else {\n let both = code\n let cs = both.length\n if ((cs % 4) != ps - sizage!.ls) { // adjusted pad given lead bytes\n throw new Error(`Invalid code=${both} for converted raw pad size=${ps}, ${raw.length}.`);\n }\n // prepad, convert, and replace upfront\n // when fixed and ls != 0 then cs % 4 is zero and ps==ls\n // otherwise fixed and ls == 0 then cs % 4 == ps\n let bytes = new Uint8Array(ps + raw.length);\n for (let i = 0; i < ps; i++) {\n bytes[i] = 0;\n }\n for (let i = 0; i < raw.length; i++) {\n let odx = i + ps\n bytes[odx] = raw[i];\n }\n\n return both + Base64.encode(Buffer.from(bytes)).slice(cs % 4)\n }\n }\n\n private _exfil(qb64: string) {\n if (qb64.length == 0) {\n throw new Error(\"Empty Material\")\n }\n\n let first = qb64[0];\n if (!Array.from(Matter.Hards.keys()).includes(first)) {\n throw new Error(`Unexpected code ${first}`)\n }\n\n let hs = Matter.Hards.get(first);\n if (qb64.length < hs!) {\n throw new Error(`Shortage Error`)\n }\n\n let hard = qb64.slice(0, hs);\n if (!Array.from(Matter.Sizes.keys()).includes(hard)) {\n throw new Error(`Unsupported code ${hard}`)\n }\n\n let sizage = Matter.Sizes.get(hard);\n let cs = sizage!.hs + sizage!.ss;\n let size = -1;\n if (sizage!.fs == -1) { // Variable size code, Not supported\n throw new Error(\"Variable size codes not supported yet\")\n } else {\n size = sizage!.fs\n }\n\n if (qb64.length < sizage!.fs) {\n throw new Error(`Need ${sizage!.fs - qb64.length} more chars.`)\n }\n\n qb64 = qb64.slice(0, sizage!.fs)\n let ps = cs % 4\n let pbs = 2 * (ps == 0 ? sizage!.ls : ps)\n let raw\n if (ps != 0) {\n let base = new Array(ps + 1).join('A') + qb64.slice(cs);\n let paw = Base64.decode(base) // decode base to leave prepadded raw\n let pi = (readInt(paw.subarray(0, ps))) // prepad as int\n if (pi & (2 ** pbs - 1)) { // masked pad bits non-zero\n throw new Error(`Non zeroed prepad bits = {pi & (2 ** pbs - 1 ):<06b} in {qb64b[cs:cs+1]}.`)\n }\n raw = paw.subarray(ps) // strip off ps prepad paw bytes\n } else {\n let base = qb64.slice(cs);\n let paw = Base64.decode(base);\n let li = readInt(paw.subarray(0, sizage!.ls))\n if (li != 0) {\n if (li == 1) {\n throw new Error(`Non zeroed lead byte = 0x{li:02x}.`)\n } else {\n throw new Error(`Non zeroed lead bytes = 0x{li:04x}`)\n }\n }\n raw = paw.subarray(sizage!.ls)\n }\n\n this._code = hard // hard only\n this._size = size\n this._raw = Uint8Array.from(raw) // ensure bytes so immutable and for crypto ops\n }\n\n private _bexfil(qb2: Uint8Array) {\n throw new Error(`qb2 not yet supported: ${qb2}`)\n }\n}\n","export {};\nimport libsodium from \"libsodium-wrappers-sumo\"\n\nimport {Matter, MatterArgs, MtrDex} from './matter';\n\n/**\n * @description Verfer :sublclass of Matter,helps to verify signature of serialization\n * using .raw as verifier key and .code as signature cypher suite\n */\nexport class Verfer extends Matter {\n private readonly _verify: (sig: any, ser: any, key: any) => boolean;\n constructor({raw, code, qb64, qb64b, qb2}: MatterArgs) {\n super({raw, code, qb64, qb64b, qb2});\n\n if (Array.from([MtrDex.Ed25519N, MtrDex.Ed25519]).includes(this.code)) {\n this._verify = this._ed25519\n } else {\n throw new Error(`Unsupported code = ${this.code} for verifier.`)\n }\n }\n\n verify(sig: any, ser: any) {\n return this._verify(sig, ser, this.raw)\n }\n\n _ed25519(sig: any, ser: any, key: any) {\n try {\n return libsodium.crypto_sign_verify_detached(sig, ser, key);\n\n } catch (error) {\n throw new Error(error as string);\n }\n }\n}\n","import {Verfer} from \"./verfer\";\nimport {Matter, MatterArgs} from \"./matter\";\n\n\nexport class Cigar extends Matter {\n private _verfer: Verfer | undefined\n constructor({raw, code, qb64, qb64b, qb2}:MatterArgs, verfer?: Verfer) {\n super({raw, code, qb64, qb64b, qb2});\n this._verfer = verfer\n }\n\n get verfer(): Verfer | undefined {\n return this._verfer\n }\n\n set verfer(verfer:Verfer|undefined) {\n this._verfer = verfer\n }\n}","import {EmptyMaterialError} from \"./kering\";\nimport {b, b64ToInt, d, intToB64, readInt} from \"./core\";\nimport Base64 from \"urlsafe-base64\"\nimport { Buffer } from 'buffer';\n\nexport class IndexerCodex {\n Ed25519_Sig: string = 'A' // Ed25519 sig appears same in both lists if any.\n Ed25519_Crt_Sig: string = 'B' // Ed25519 sig appears in current list only.\n ECDSA_256k1_Sig: string = 'C' // ECDSA secp256k1 sig appears same in both lists if any.\n ECDSA_256k1_Crt_Sig: string = 'D' // ECDSA secp256k1 sig appears in current list.\n Ed448_Sig: string = '0A' // Ed448 signature appears in both lists.\n Ed448_Crt_Sig: string = '0B' // Ed448 signature appears in current list only.\n Ed25519_Big_Sig: string = '2A' // Ed25519 sig appears in both lists.\n Ed25519_Big_Crt_Sig: string = '2B' // Ed25519 sig appears in current list only.\n ECDSA_256k1_Big_Sig: string = '2C' // ECDSA secp256k1 sig appears in both lists.\n ECDSA_256k1_Big_Crt_Sig: string = '2D' // ECDSA secp256k1 sig appears in current list only.\n Ed448_Big_Sig: string = '3A' // Ed448 signature appears in both lists.\n Ed448_Big_Crt_Sig: string = '3B' // Ed448 signature appears in current list only.\n \n}\n\nexport const IdrDex = new IndexerCodex()\n\nexport class IndexedSigCodex {\n Ed25519_Sig: string = 'A' // Ed25519 sig appears same in both lists if any.\n Ed25519_Crt_Sig: string = 'B' // Ed25519 sig appears in current list only.\n ECDSA_256k1_Sig: string = 'C' // ECDSA secp256k1 sig appears same in both lists if any.\n ECDSA_256k1_Crt_Sig: string = 'D' // ECDSA secp256k1 sig appears in current list.\n Ed448_Sig: string = '0A' // Ed448 signature appears in both lists.\n Ed448_Crt_Sig: string = '0B' // Ed448 signature appears in current list only.\n Ed25519_Big_Sig: string = '2A' // Ed25519 sig appears in both lists.\n Ed25519_Big_Crt_Sig: string = '2B' // Ed25519 sig appears in current list only.\n ECDSA_256k1_Big_Sig: string = '2C' // ECDSA secp256k1 sig appears in both lists.\n ECDSA_256k1_Big_Crt_Sig: string = '2D' // ECDSA secp256k1 sig appears in current list only.\n Ed448_Big_Sig: string = '3A' // Ed448 signature appears in both lists.\n Ed448_Big_Crt_Sig: string = '3B' // Ed448 signature appears in current list only.\n\n has(prop: string): boolean {\n let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]]))\n return m.has(prop)\n }\n}\n\nexport const IdxSigDex = new IndexedSigCodex()\n\nexport class IndexedCurrentSigCodex {\n Ed25519_Crt_Sig: string = 'B' // Ed25519 sig appears in current list only.\n ECDSA_256k1_Crt_Sig: string = 'D' // ECDSA secp256k1 sig appears in current list only.\n Ed448_Crt_Sig: string = '0B' // Ed448 signature appears in current list only.\n Ed25519_Big_Crt_Sig: string = '2B' // Ed25519 sig appears in current list only.\n ECDSA_256k1_Big_Crt_Sig: string = '2D' // ECDSA secp256k1 sig appears in current list only.\n Ed448_Big_Crt_Sig: string = '3B' // Ed448 signature appears in current list only.\n\n has(prop: string): boolean {\n let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]]))\n return m.has(prop)\n }\n}\n\nexport const IdxCrtSigDex = new IndexedCurrentSigCodex()\n\nexport class IndexedBothSigCodex {\n Ed25519_Sig: string = 'A' // Ed25519 sig appears same in both lists if any.\n ECDSA_256k1_Sig: string = 'C' // ECDSA secp256k1 sig appears same in both lists if any.\n Ed448_Sig: string = '0A' // Ed448 signature appears in both lists.\n Ed25519_Big_Sig: string = '2A' // Ed25519 sig appears in both listsy.\n ECDSA_256k1_Big_Sig: string = '2C' // ECDSA secp256k1 sig appears in both lists.\n Ed448_Big_Sig: string = '3A' // Ed448 signature appears in both lists.\n\n has(prop: string): boolean {\n let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]]))\n return m.has(prop)\n }\n}\n\nexport const IdxBthSigDex = new IndexedBothSigCodex()\n\nexport class Xizage {\n public hs: number\n public ss: number\n public os: number\n public fs?: number\n public ls: number\n\n constructor(hs:number, ss: number, os: number, fs?: number, ls?: number) {\n this.hs = hs\n this.ss = ss\n this.os = os\n this.fs = fs\n this.ls = ls!\n }\n}\n\nexport interface IndexerArgs {\n raw?: Uint8Array | undefined,\n code?: string | undefined\n index?: number,\n ondex?: number,\n qb64b?: Uint8Array | undefined,\n qb64?: string | undefined,\n qb2?: Uint8Array | undefined,\n}\n\nexport class Indexer {\n public Codex = IdrDex\n\n static Hards = new Map<string, number>([['A', 1], ['B', 1], ['C', 1], ['D', 1], ['E', 1], ['F', 1], ['G', 1], ['H', 1],\n ['I', 1], ['J', 1], ['K', 1], ['L', 1], ['M', 1], ['N', 1], ['O', 1], ['P', 1], ['Q', 1], ['R', 1], ['S', 1],\n ['T', 1], ['U', 1], ['V', 1], ['W', 1], ['X', 1], ['Y', 1], ['Z', 1], ['a', 1], ['b', 1], ['c', 1], ['d', 1],\n ['e', 1], ['f', 1], ['g', 1], ['h', 1], ['i', 1], ['j', 1], ['k', 1], ['l', 1], ['m', 1], ['n', 1], ['o', 1],\n ['p', 1], ['q', 1], ['r', 1], ['s', 1], ['t', 1], ['u', 1], ['v', 1], ['w', 1], ['x', 1], ['y', 1], ['z', 1],\n ['0', 2], ['1', 2], ['2', 2], ['3', 2], ['4', 2]]\n )\n\n static Sizes = new Map(Object.entries({\n 'A': new Xizage(1, 1, 0, 88, 0),\n 'B': new Xizage(1, 1, 0, 88, 0),\n 'C': new Xizage(1, 1, 0, 88, 0),\n 'D': new Xizage(1, 1, 0, 88, 0),\n '0A': new Xizage(2, 2, 1, 156, 0),\n '0B': new Xizage(2, 2, 1, 156, 0),\n\n '2A': new Xizage(2, 4, 2, 92, 0),\n '2B': new Xizage(2, 4, 2, 92, 0),\n '2C': new Xizage(2, 4, 2, 92, 0),\n '2D': new Xizage(2, 4, 2, 92, 0),\n\n '3A': new Xizage(2, 6, 3, 160, 0),\n '3B': new Xizage(2, 6, 3, 160, 0),\n\n '0z': new Xizage(2, 2, 0, undefined, 0),\n '1z': new Xizage(2, 2, 1, 76, 1),\n '4z': new Xizage(2, 6, 3, 80, 1),\n }))\n\n private _code: string = \"\";\n private _index: number = -1;\n private _ondex: number | undefined;\n private _raw: Uint8Array = new Uint8Array(0);\n\n constructor({raw = undefined, code = IdrDex.Ed25519_Sig, index = 0, ondex = undefined,\n qb64b = undefined, qb64 = undefined, qb2 = undefined}: IndexerArgs) {\n\n if (raw != undefined) {\n if (code == undefined) {\n throw new EmptyMaterialError(`Improper initialization need either (raw and code) or qb64b or qb64 or qb2.`)\n }\n\n if (!Indexer.Sizes.has(code)) {\n throw new Error(`Unsupported code=${code}.`)\n }\n\n let xizage = Indexer.Sizes.get(code)!\n let os = xizage.os\n let fs = xizage.fs\n let cs = xizage.hs + xizage.ss\n let ms = xizage.ss - xizage.os\n\n if (!Number.isInteger(index) || index < 0 || index > (64 ** ms - 1)) {\n throw new Error(`Invalid index=${index} for code=${code}.`)\n }\n\n if (ondex != undefined && xizage.os != 0 && !(ondex >= 0 && ondex <= (64 ** os - 1))) {\n throw new Error(`Invalid ondex=${ondex} for code=${code}.`)\n }\n\n if (IdxCrtSigDex.has(code) && ondex != undefined) {\n throw new Error(`Non None ondex=${ondex} for code=${code}.`)\n }\n\n if (IdxBthSigDex.has(code)) {\n if (ondex == undefined) {\n ondex = index\n } else {\n if (ondex != index && os == 0) {\n throw new Error(`Non matching ondex=${ondex} and index=${index} for code=${code}.`)\n }\n }\n }\n\n if (fs == undefined) {\n throw new Error(\"variable length unsupported\")\n }\n // TODO: Don't support this code\n // if not fs: # compute fs from index\n // if cs % 4:\n // raise InvalidCodeSizeError(f\"Whole code size not multiple of 4 for \"\n // f\"variable length material. cs={cs}.\")\n // if os != 0:\n // raise InvalidCodeSizeError(f\"Non-zero other index size for \"\n // f\"variable length material. os={os}.\")\n // fs = (index * 4) + cs\n let rawsize = Math.floor((fs - cs) * 3 / 4)\n raw = raw.slice(0, rawsize)\n\n if (raw.length != rawsize) {\n throw new Error(`Not enougth raw bytes for code=${code} and index=${index} ,expected ${rawsize} got ${raw.length}.`)\n }\n\n this._code = code\n this._index = index\n this._ondex = ondex\n this._raw = raw\n\n } else if (qb64b != undefined) {\n let qb64 = d(qb64b)\n this._exfil(qb64)\n\n } else if (qb64 != undefined) {\n this._exfil(qb64)\n } else if (qb2 != undefined) {\n this._bexfil(qb2)\n } else {\n throw new EmptyMaterialError(`Improper initialization need either (raw and code and index) or qb64b or qb64 or qb2.`)\n }\n }\n\n private _bexfil(qb2: Uint8Array) {\n throw new Error(`qb2 not yet supported: ${qb2}`)\n }\n\n public static _rawSize(code: string) {\n let xizage = Indexer.Sizes.get(code)!\n return Math.floor(xizage.fs! - (xizage.hs + xizage.ss) * 3 / 4)\n }\n\n get code(): string {\n return this._code\n }\n\n get raw(): Uint8Array {\n return this._raw\n }\n\n get index(): number {\n return this._index\n }\n\n get ondex(): number | undefined {\n return this._ondex\n }\n\n get qb64(): string{\n return this._infil();\n }\n\n get qb64b() {\n return b(this.qb64)\n }\n\n\n private _infil(): string {\n let code = this.code\n let index = this.index\n let ondex = this.ondex\n let raw = this.raw\n\n let ps = (3 - (raw.length % 3)) % 3\n let xizage = Indexer.Sizes.get(code)!\n let cs = xizage.hs + xizage.ss\n let ms = xizage.ss - xizage.os\n\n // TODO: don't support this code\n // if not fs: # compute fs from index\n // if cs % 4:\n // raise InvalidCodeSizeError(f\"Whole code size not multiple of 4 for \"\n // f\"variable length material. cs={cs}.\")\n // if os != 0:\n // raise InvalidCodeSizeError(f\"Non-zero other index size for \"\n // f\"variable length material. os={os}.\")\n // fs = (index * 4) + cs\n\n if (index < 0 || index > (64 ** ms -1)) {\n throw new Error(`Invalid index=${index} for code=${code}.`)\n }\n\n if (ondex != undefined && xizage.os != 0 && !(ondex >= 0 && ondex <= (64 ** xizage.os - 1))) {\n throw new Error(`Invalid ondex=${ondex} for os=${xizage.os} and code=${code}.`)\n }\n\n let both = `${code}${intToB64(index, ms)}${intToB64(ondex == undefined ? 0 : ondex, xizage.os)}`\n\n if (both.length != cs) {\n throw new Error(`Mismatch code size = ${cs} with table = ${both.length}.`)\n }\n\n if ((cs % 4) != ps - xizage.ls) {\n throw new Error(`Invalid code=${both} for converted raw pad size=${ps}.`)\n }\n\n let bytes = new Uint8Array(ps + raw.length);\n for (let i = 0; i < ps; i++) {\n bytes[i] = 0;\n }\n for (let i = 0; i < raw.length; i++) {\n let odx = i + ps\n bytes[odx] = raw[i];\n }\n\n let full = both + Base64.encode(Buffer.from(bytes)).slice(ps - xizage.ls)\n if (full.length != xizage.fs) {\n throw new Error(`Invalid code=${both} for raw size=${raw.length}.`)\n }\n\n return full\n }\n\n _exfil(qb64: string) {\n if (qb64.length == 0) {\n throw new Error(\"Empty Material\")\n }\n\n let first = qb64[0];\n if (!Array.from(Indexer.Hards.keys()).includes(first)) {\n throw new Error(`Unexpected code ${first}`)\n }\n\n let hs = Indexer.Hards.get(first)!\n if ((qb64.length) < hs) {\n throw new Error(`Need ${hs - qb64.length} more characters.`)\n }\n\n let hard = qb64.slice(0, hs)\n if (!Array.from(Indexer.Sizes.keys()).includes(hard)) {\n throw new Error(`Unsupported code ${hard}`)\n }\n\n let xizage = Indexer.Sizes.get(hard)!\n let cs = xizage.hs + xizage.ss // both hard + soft code size\n let ms = xizage.ss - xizage.os\n\n if (qb64.length < cs) {\n throw new Error(`Need ${cs - qb64.length} more characters.`)\n }\n\n let sindex = qb64.slice(hs, hs+ms)\n let index = b64ToInt(sindex)\n\n let sondex = qb64.slice(hs+ms, hs+ms+xizage.os)\n let ondex\n if (IdxCrtSigDex.has(hard)) {\n ondex = xizage.os != 0 ? b64ToInt(sondex) : undefined\n if (ondex != 0 && ondex != undefined) {\n throw new Error(`Invalid ondex=${ondex} for code=${hard}.`)\n } else {\n ondex = undefined\n }\n } else {\n ondex = xizage.os != 0 ? b64ToInt(sondex) : index\n }\n\n if (xizage.fs == undefined) {\n throw new Error(\"variable length not supported\")\n }\n // TODO: support variable length\n // if not fs: # compute fs from index which means variable length\n // if cs % 4:\n // raise ValidationError(f\"Whole code size not multiple of 4 for \"\n // f\"variable length material. cs={cs}.\")\n // if os != 0:\n // raise ValidationError(f\"Non-zero other index size for \"\n // f\"variable length material. os={os}.\")\n // fs = (index * 4) + cs\n\n if (qb64.length < xizage.fs) {\n throw new Error(`Need ${xizage.fs - qb64.length} more chars.`)\n }\n\n qb64 = qb64.slice(0, xizage.fs)\n let ps = cs % 4\n let pbs = 2 * ps != 0 ? ps : xizage.ls\n let raw\n if (ps != 0) {\n let base = new Array(ps + 1).join('A') + qb64.slice(cs);\n let paw = Base64.decode(base) // decode base to leave prepadded raw\n let pi = (readInt(paw.slice(0, ps))) // prepad as int\n if (pi & (2 ** pbs - 1)) { // masked pad bits non-zero\n throw new Error(`Non zeroed prepad bits = {pi & (2 ** pbs - 1 ):<06b} in {qb64b[cs:cs+1]}.`)\n }\n raw = paw.slice(ps) // strip off ps prepad paw bytes\n } else {\n let base = qb64.slice(cs);\n let paw = Base64.decode(base);\n let li = readInt(paw.slice(0, xizage!.ls))\n if (li != 0) {\n if (li == 1) {\n throw new Error(`Non zeroed lead byte = 0x{li:02x}.`)\n } else {\n throw new Error(`Non zeroed lead bytes = 0x{li:04x}`)\n }\n }\n raw = paw.slice(xizage!.ls)\n }\n\n if (raw.length != Math.floor((qb64.length - cs) * 3 / 4)) {\n throw new Error(`Improperly qualified material = ${qb64}`)\n }\n\n this._code = hard\n this._index = index\n this._ondex = ondex\n this._raw = new Uint8Array(raw) // must be bytes for crpto opts and immutable not bytearray\n }\n}\n\n\n\n","import {IdxSigDex, Indexer, IndexerArgs} from \"./indexer\";\nimport {Verfer} from \"./verfer\";\n\n/**\n Siger is subclass of Indexer, indexed signature material,\n Adds .verfer property which is instance of Verfer that provides\n associated signature verifier.\n\n See Indexer for inherited attributes and properties:\n\n Attributes:\n\n Properties:\n .verfer is Verfer object instance\n\n Methods:\n **/\n\nexport class Siger extends Indexer {\n\n private _verfer?: Verfer\n constructor({raw, code, index, ondex, qb64, qb64b, qb2}: IndexerArgs, verfer?: Verfer) {\n super({raw, code, index, ondex, qb64, qb64b, qb2});\n\n if (!IdxSigDex.has(this.code)) {\n throw new Error(`Invalid code = ${this.code} for Siger.`)\n }\n this._verfer = verfer\n }\n\n get verfer(): Verfer | undefined {\n return this._verfer;\n }\n\n set verfer(verfer: Verfer | undefined) {\n this._verfer = verfer;\n }\n\n}\n","import {EmptyMaterialError} from \"./kering\";\n\nexport {};\nimport libsodium from 'libsodium-wrappers-sumo';\nimport {Matter} from './matter';\nimport {MtrDex} from './matter';\nimport {Verfer} from \"./verfer\";\nimport {Cigar} from \"./cigar\";\nimport {Siger} from \"./siger\";\nimport {IdrDex} from \"./indexer\";\nimport { Buffer } from 'buffer';\n\n/**\n * @description Signer is Matter subclass with method to create signature of serialization\n * It will use .raw as signing (private) key seed\n * .code as cipher suite for signing and new property .verfer whose property\n * .raw is public key for signing.\n * If not provided .verfer is generated from private key seed using .code\n as cipher suite for creating key-pair.\n */\ninterface SignerArgs {\n raw?: Uint8Array | undefined\n code?: string\n qb64b?: Uint8Array | undefined\n qb64?: string\n qb2?: Uint8Array | undefined\n transferable?: boolean\n}\n\nexport class Signer extends Matter {\n private readonly _sign: Function\n private readonly _verfer: Verfer\n\n constructor({raw, code = MtrDex.Ed25519_Seed, qb64, qb64b, qb2, transferable = true}: SignerArgs) {\n try {\n super({raw, code, qb64, qb64b, qb2})\n } catch (e) {\n if (e instanceof EmptyMaterialError) {\n if (code == MtrDex.Ed25519_Seed) {\n let raw = libsodium.randombytes_buf(libsodium.crypto_sign_SEEDBYTES);\n super({raw, code, qb64, qb64b, qb2})\n } else {\n throw new Error(`Unsupported signer code = ${code}.`)\n }\n } else {\n throw e\n }\n }\n let verfer\n if (this.code == MtrDex.Ed25519_Seed) {\n this._sign = this._ed25519\n const keypair = libsodium.crypto_sign_seed_keypair(this.raw)\n verfer = new Verfer({raw: keypair.publicKey, code: transferable ? MtrDex.Ed25519 : MtrDex.Ed25519N})\n\n } else {\n throw new Error(`Unsupported signer code = ${this.code}.`)\n }\n\n this._verfer = verfer\n\n }\n\n\n /**\n * @description Property verfer:\n Returns Verfer instance\n Assumes ._verfer is correctly assigned\n */\n get verfer(): Verfer {\n return this._verfer;\n }\n\n sign(ser: Uint8Array, index: number | null = null, only: boolean = false,\n ondex: number | undefined = undefined): Siger | Cigar {\n return this._sign(ser, this.raw, this.verfer, index, only, ondex)\n }\n\n _ed25519(ser: Uint8Array, seed: Uint8Array, verfer: Verfer, index: number | null,\n only: boolean = false, ondex: number | undefined) {\n\n let sig = libsodium.crypto_sign_detached(\n ser,\n Buffer.concat([seed, verfer.raw]),\n );\n\n if (index == null) {\n return new Cigar({raw: sig, code: MtrDex.Ed25519_Sig}, verfer);\n } else {\n let code;\n if (only) {\n ondex = undefined\n if (index <= 63) {\n code = IdrDex.Ed25519_Crt_Sig\n } else {\n code = IdrDex.Ed25519_Big_Crt_Sig\n }\n } else {\n if(ondex == undefined) {\n ondex = index\n }\n\n if (ondex == index && index <= 63) // both same and small\n code = IdrDex.Ed25519_Sig // use small both same\n else // otherwise big or both not same so use big both\n code = IdrDex.Ed25519_Big_Sig // use use big both\n\n }\n\n return new Siger({raw: sig, code: code, index: index, ondex: ondex}, verfer)\n }\n\n }\n}","import {Signer} from \"./signer\";\n\nimport { Matter, MtrDex } from './matter';\nimport { EmptyMaterialError } from './kering'\nimport libsodium from 'libsodium-wrappers-sumo';\n\nexport const enum Tier {\n low = \"low\",\n med = \"med\",\n high = \"high\"\n}\n\ninterface SalterArgs {\n raw?: Uint8Array | undefined\n code? :string\n tier?:Tier\n qb64b? :Uint8Array | undefined\n qb64?: string\n qb2?: Uint8Array | undefined\n}\nexport class Salter extends Matter {\n private readonly _tier: Tier | null;\n\n constructor({raw, code = MtrDex.Salt_128, tier=Tier.low, qb64, qb64b, qb2}:SalterArgs) {\n try {\n super({raw, code, qb64, qb64b, qb2});\n } catch (e) {\n if(e instanceof EmptyMaterialError) {\n if (code == MtrDex.Salt_128) {\n let salt = libsodium.randombytes_buf(libsodium.crypto_pwhash_SALTBYTES);\n super({raw: salt, code: code})\n } else {\n throw new Error(\"invalid code for Salter, only Salt_128 accepted\")\n }\n } else {\n throw e;\n }\n }\n\n if (this.code != MtrDex.Salt_128) {\n throw new Error(\"invalid code for Salter, only Salt_128 accepted\")\n }\n\n this._tier = tier !== null ? tier : Tier.low\n }\n\n private stretch(size: number = 32, path: string = \"\", tier: Tier | null = null, temp: boolean = false): Uint8Array {\n tier = tier == null ? this.tier : tier;\n\n let opslimit: number, memlimit: number\n\n if (temp) {\n opslimit = libsodium.crypto_pwhash_OPSLIMIT_MIN\n memlimit = libsodium.crypto_pwhash_MEMLIMIT_MIN\n\n } else {\n switch (tier) {\n case Tier.low:\n opslimit = libsodium.crypto_pwhash_OPSLIMIT_INTERACTIVE\n memlimit = libsodium.crypto_pwhash_MEMLIMIT_INTERACTIVE\n break;\n case Tier.med:\n opslimit = libsodium.crypto_pwhash_OPSLIMIT_MODERATE\n memlimit = libsodium.crypto_pwhash_MEMLIMIT_MODERATE\n break;\n case Tier.high:\n opslimit = libsodium.crypto_pwhash_OPSLIMIT_SENSITIVE\n memlimit = libsodium.crypto_pwhash_MEMLIMIT_SENSITIVE\n break;\n default:\n throw new Error(`Unsupported security tier = ${tier}.`)\n }\n }\n\n return libsodium.crypto_pwhash(size, path, this.raw, opslimit, memlimit, libsodium.crypto_pwhash_ALG_DEFAULT)\n }\n\n signer(code: string=MtrDex.Ed25519_Seed, transferable: boolean=true, path: string = \"\",\n tier: Tier | null = null, temp:boolean = false): Signer {\n let seed = this.stretch(Matter._rawSize(code), path, tier, temp)\n\n return new Signer({raw: seed, code: code, transferable: transferable})\n }\n\n get tier(): Tier | null {\n return this._tier;\n }\n\n}","import libsodium from \"libsodium-wrappers-sumo\";\n\nimport {Matter, MatterArgs, MtrDex} from './matter';\nimport {Signer} from \"./signer\";\nimport {Cipher} from \"./cipher\";\nimport {EmptyMaterialError} from \"./kering\";\nimport {Salter} from \"./salter\";\n\n\nexport class Decrypter extends Matter {\n private readonly _decrypt: any;\n constructor({raw, code = MtrDex.X25519_Private, qb64, qb64b, qb2}:MatterArgs, seed: Uint8Array | undefined = undefined) {\n try {\n super({raw, code, qb64, qb64b, qb2})\n } catch(e) {\n if(e instanceof EmptyMaterialError) {\n if (seed != undefined) {\n let signer = new Signer({qb64b: seed})\n if (signer.code != MtrDex.Ed25519_Seed) {\n throw new Error(`Unsupported signing seed derivation code ${signer.code}`)\n }\n let sigkey = new Uint8Array(signer.raw.length + signer.verfer.raw.length)\n sigkey.set(signer.raw)\n sigkey.set(signer.verfer.raw, signer.raw.length)\n raw = libsodium.crypto_sign_ed25519_sk_to_curve25519(sigkey)\n super({raw, code, qb64, qb64b, qb2})\n }\n else {\n throw e\n }\n } else {\n throw e\n }\n }\n\n if (this.code == MtrDex.X25519_Private) {\n this._decrypt = this._x25519\n } else {\n throw new Error(`Unsupported decrypter code = ${this.code}.`)\n }\n }\n\n decrypt(ser: Uint8Array | null = null, cipher: Cipher | null = null, transferable: boolean = false) {\n if (ser == null && cipher == null) {\n throw new EmptyMaterialError(\"Neither ser or cipher were provided\")\n }\n\n if (ser != null) {\n cipher = new Cipher({qb64b: ser})\n }\n\n return this._decrypt(cipher, this.raw, transferable)\n }\n\n _x25519(cipher: Cipher, prikey: Uint8Array, transferable: boolean = false) {\n let pubkey = libsodium.crypto_scalarmult_base(prikey)\n let plain = libsodium.crypto_box_seal_open(cipher.raw, pubkey, prikey)\n if (cipher.code == MtrDex.X25519_Cipher_Salt) {\n return new Salter({qb64b: plain})\n } else if (cipher.code == MtrDex.X25519_Cipher_Seed) {\n return new Signer({qb64b: plain, transferable: transferable})\n } else {\n throw new Error(`Unsupported cipher text code == ${cipher.code}`)\n }\n }\n}","import {Matter, MatterArgs, MtrDex} from \"./matter\";\nimport {Decrypter} from \"./decrypter\";\n\n\nexport class Cipher extends Matter {\n constructor({raw, code, qb64, qb64b, qb2}:MatterArgs) {\n if (raw != undefined && code == undefined) {\n if (raw.length == Matter._rawSize(MtrDex.X25519_Cipher_Salt)) {\n code = MtrDex.X25519_Cipher_Salt\n } else if (raw.length == Matter._rawSize(MtrDex.X25519_Cipher_Seed)) {\n code = MtrDex.X25519_Cipher_Salt\n }\n }\n super({raw: raw, code: code, qb64b: qb64b, qb64: qb64, qb2: qb2});\n\n if (!(Array.from([MtrDex.X25519_Cipher_Salt, MtrDex.X25519_Cipher_Seed]).includes(this.code))) {\n throw new Error(`Unsupported Cipher code == ${this.code}`)\n }\n }\n\n decrypt(prikey: Uint8Array | undefined = undefined, seed: Uint8Array | undefined = undefined) {\n let decrypter = new Decrypter({qb64b: prikey}, seed)\n return decrypter.decrypt(this.qb64b)\n }\n}","\nexport function pad(n: any, width = 3, z = 0) {\n return (String(z).repeat(width) + String(n)).slice(String(n).length);\n}\n\n/**\n * @description Returns list of depth first recursively extracted values from elements of\n key event dict ked whose flabels are in lables list\n\n * @param {*} ked ked is key event dict\n * @param {*} labels labels is list of element labels in ked from which to extract values\n */\nexport function extractValues(ked: any, labels: any) {\n let values = [];\n for (let label of labels) {\n values = extractElementValues(ked[label], values);\n }\n\n return values;\n}\n\nexport function arrayEquals(ar1: Uint8Array, ar2: Uint8Array) {\n return (\n ar1.length === ar2.length &&\n ar1.every((val, index) => val === ar2[index])\n );\n}\n\n/**\n * @description Recusive depth first search that recursively extracts value(s) from element\n and appends to values list\n Assumes that extracted values are str\n\n * @param {*} element\n * @param {*} values\n */\n\nfunction extractElementValues(element: any, values: any) {\n let data = [];\n\n\n try {\n if((element instanceof Array) && !(typeof(element) == 'string')) {\n for(let k in element)\n extractElementValues(element[k], values);\n } else if (typeof(element) == 'string') {\n values.push(element);\n }\n data = values;\n } catch (error) {\n throw new Error(error as string);\n }\n\n return data;\n}\n\n\n\n\n/**\n * @description Returns True if obj is non-string iterable, False otherwise\n\n * @param {*} obj\n */\n\n// function nonStringIterable(obj) {\n// obj instanceof (String)\n// return instanceof(obj, (str, bytes)) && instanceof(obj, Iterable))\n// }\n\n\nexport function nowUTC(): Date {\n return new Date()\n}\n\n\nexport function range(start: number, stop: number, step: number) {\n if (typeof stop == 'undefined') {\n // one param defined\n stop = start;\n start = 0;\n }\n\n if (typeof step == 'undefined') {\n step = 1;\n }\n\n if ((step > 0 && start >= stop) || (step < 0 && start <= stop)) {\n return [];\n }\n\n let result = new Array<number>();\n for (let i: number = start; step > 0 ? i < stop : i > stop; i += step) {\n result.push(i);\n }\n\n return result;\n}\n","import libsodium from \"libsodium-wrappers-sumo\";\n\nimport {Matter, MatterArgs, MtrDex} from './matter';\nimport {Verfer} from \"./verfer\";\nimport {Signer} from \"./signer\";\nimport {Cipher} from \"./cipher\";\nimport {arrayEquals} from \"./utils\";\n\n\nexport class Encrypter extends Matter {\n private _encrypt: any;\n constructor({raw, code = MtrDex.X25519, qb64, qb64b, qb2}:MatterArgs, verkey: Uint8Array | null = null) {\n if (raw == undefined && verkey != null) {\n let verfer = new Verfer({qb64b: verkey})\n if (!Array.from([MtrDex.Ed25519N, MtrDex.Ed25519]).includes(verfer.code)) {\n throw new Error(`Unsupported verkey derivation code = ${verfer.code}.`)\n }\n raw = libsodium.crypto_sign_ed25519_pk_to_curve25519(verfer.raw)\n }\n\n super({raw, code, qb64, qb64b, qb2});\n\n if (this.code == MtrDex.X25519) {\n this._encrypt = this._x25519;\n } else {\n throw new Error(`Unsupported encrypter code = ${this.code}.`)\n }\n }\n\n verifySeed(seed: Uint8Array) {\n let signer = new Signer({qb64b: seed})\n let keypair = libsodium.crypto_sign_seed_keypair(signer.raw);\n let pubkey = libsodium.crypto_sign_ed25519_pk_to_curve25519(keypair.publicKey)\n return arrayEquals(pubkey, this.raw)\n }\n\n encrypt(ser: Uint8Array | null = null, matter: Matter | null = null) {\n if (ser == null && matter == null) {\n throw new Error(\"Neither ser nor matter are provided.\")\n }\n\n if (ser != null) {\n matter = new Matter({qb64b: ser})\n }\n\n let code\n if (matter!.code == MtrDex.Salt_128) {\n code = MtrDex.X25519_Cipher_Salt\n } else {\n code = MtrDex.X25519_Cipher_Seed\n }\n\n return this._encrypt(matter!.qb64, this.raw, code)\n }\n\n _x25519(ser: Uint8Array, pubkey: Uint8Array, code: string) {\n let raw = libsodium.crypto_box_seal(ser, pubkey)\n return new Cipher({raw: raw, code: code})\n }\n}","import {createHash} from \"blake3\"\n\nimport {Matter, MatterArgs, MtrDex} from './matter';\n\n/**\n * @description : Diger is subset of Matter and is used to verify the digest of serialization\n * It uses .raw : as digest\n * .code as digest algorithm\n *\n */\n\nexport class Diger extends Matter {\n private readonly _verify: any\n\n // This constructor will assign digest verification function to ._verify\n constructor({raw, code = MtrDex.Blake3_256, qb64, qb64b, qb2}: MatterArgs, ser: Uint8Array | null = null) {\n try {\n super({raw, code, qb64, qb64b, qb2});\n } catch (error) {\n if (ser == null) {\n throw error;\n }\n\n if (code === MtrDex.Blake3_256) {\n const hasher = createHash();\n const dig = hasher.update(ser).digest('');\n super({raw: dig, code: code});\n } else {\n throw new Error(`Unsupported code = ${code} for digester.`);\n }\n }\n\n if (code === MtrDex.Blake3_256) {\n this._verify = this.blake3_256;\n } else {\n throw new Error(`Unsupported code = ${code} for digester.`);\n }\n }\n\n\n /**\n *\n * @param {Uint8Array} ser serialization bytes\n * @description This method will return true if digest of bytes serialization ser matches .raw\n * using .raw as reference digest for ._verify digest algorithm determined\n by .code\n */\n verify(ser: Uint8Array): boolean {\n return this._verify(ser, this.raw);\n }\n\n compare(ser: Uint8Array, dig: any = null, diger: Diger | null = null ) {\n if (dig != null) {\n if (dig.toString() == this.qb64) {\n return true\n }\n\n diger = new Diger({qb64b: dig})\n } else if (diger != null) {\n if (diger.qb64b == this.qb64b) {\n return true;\n }\n }\n\n else {\n throw new Error(\"Both dig and diger may not be None.\")\n }\n\n if (diger.code == this.code) {\n return false\n }\n\n return diger.verify(ser) && this.verify(ser)\n }\n\n\n blake3_256(ser: Uint8Array, dig: any) {\n const hasher = createHash();\n let digest = hasher.update(ser).digest('');\n return (digest.toString() === dig.toString());\n }\n}\n","import {Encrypter} from \"./encrypter\"\nimport {Decrypter} from \"./decrypter\"\nimport {Salter, Tier} from \"./salter\"\nimport {Signer} from \"./signer\"\nimport {Verfer} from \"./verfer\";\nimport {MtrDex} from \"./matter\";\nimport {Diger} from \"./diger\";\nimport {Cigar} from \"./cigar\";\nimport {Siger} from \"./siger\";\nimport {b} from \"./core\";\n\n\nexport enum Algos {\n randy = \"randy\",\n salty = \"salty\"\n}\n\nclass PubLot {\n public pubs: Array<string> = new Array<string>() // list qb64 public keys.\n public ridx: number = 0 // index of rotation (est event) that uses public key set\n public kidx: number = 0 // index of key in sequence of public keys\n public dt:string = \"\" // datetime ISO8601 when key set created\n}\n\nclass PreSit {\n public old: PubLot = new PubLot() //previous publot\n public new: PubLot = new PubLot() //newly current publot\n public nxt: PubLot = new PubLot() //next public publot\n}\n\nclass PrePrm {\n public pidx: number = 0 // prefix index for this keypair sequence\n public algo: Algos = Algos.salty // salty default uses indices and salt to create new key pairs\n public salt: string = '' // empty salt used for salty algo.\n public stem: string = '' // default unique path stem for salty algo\n public tier: string = '' // security tier for stretch index salty algo\n\n}\n\nclass PubSet {\n pubs: Array<string> = new Array<string>() // list qb64 public keys.\n}\n\nclass PubPath {\n path: string = \"\"\n code: string = \"\"\n tier: string = Tier.high\n temp: boolean = false\n}\n\nclass Keys {\n private readonly _signers: Array<Signer>\n private readonly _paths?: Array<string>\n\n constructor(signers: Array<Signer>, paths?: Array<string>) {\n this._signers = signers\n if (paths != undefined) {\n if (signers.length != paths.length) {\n throw new Error(\"If paths are provided, they must be the same length as signers\")\n }\n }\n this._paths = paths\n }\n\n get paths(): Array<string> | undefined {\n return this._paths;\n }\n\n get signers(): Array<Signer> {\n return this._signers;\n }\n}\n\nexport interface Creator {\n create(codes: Array<string> | undefined, count: number, code: string, transferable: boolean, pidx: number,\n ridx: number, kidx: number, temp: boolean): Keys\n salt: string\n stem: string\n tier: Tier\n}\n\nexport class RandyCreator implements Creator {\n\n create(codes: Array<string> | undefined = undefined, count: number = 1, code: string = MtrDex.Ed25519_Seed,\n transferable: boolean = true): Keys {\n let signers = new Array<Signer>()\n if (codes == undefined) {\n codes = new Array(count).fill(code)\n }\n\n codes.forEach(function(code) {\n signers.push(new Signer({code: code, transferable: transferable}))\n })\n\n return new Keys(signers)\n }\n\n get salt(): string {\n return \"\";\n }\n\n get stem(): string {\n return \"\";\n }\n\n get tier(): Tier {\n return \"\" as Tier;\n }\n}\n\nexport class SaltyCreator implements Creator {\n\n public salter: Salter\n private readonly _stem: string\n constructor(salt: string | undefined = undefined, tier: Tier | undefined = undefined,\n stem: string | undefined = undefined) {\n\n this.salter = new Salter({qb64: salt, tier: tier})\n this._stem = stem == undefined ? \"\" : stem\n\n }\n\n get salt(): string {\n return this.salter.qb64;\n }\n\n get stem(): string {\n return this._stem;\n }\n\n get tier(): Tier {\n return this.salter.tier!;\n }\n\n create(codes: Array<string> | undefined = undefined, count: number = 1, code: string = MtrDex.Ed25519_Seed,\n transferable: boolean = true, pidx: number = 0, ridx: number = 0, kidx: number = 0,\n temp: boolean = false): Keys {\n\n let signers = new Array<Signer>()\n let paths = new Array<string>()\n\n if (codes == undefined) {\n codes = new Array<string>(count).fill(code)\n }\n\n codes.forEach((code, idx) => {\n let path = this.stem + pidx.toString(16) + ridx.toString(16) + (kidx+idx).toString(16)\n signers.push(this.salter.signer(code, transferable, path, this.tier, temp))\n paths.push(path)\n })\n\n return new Keys(signers, paths)\n }\n}\n\nexport class Creatory {\n private readonly _make: any\n constructor(algo: Algos = Algos.salty) {\n switch(algo) {\n case Algos.randy:\n this._make = this._makeRandy\n break;\n case Algos.salty:\n this._make = this._makeSalty\n break;\n default:\n throw new Error(`unsupported algo=${algo}`)\n }\n }\n\n make(...args: any[]): Creator {\n return this._make(...args)\n }\n\n _makeRandy(): Creator {\n return new RandyCreator()\n }\n\n _makeSalty(...args: any[]): Creator {\n return new SaltyCreator(...args)\n }\n}\n\nexport function openManager(passcode: string, salt?: string) {\n if (passcode.length < 21) {\n throw new Error(\"Bran (passcode seed material) too short.\")\n }\n\n let bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21) // qb64 salt for seed\n let signer = new Salter({qb64: bran}).signer(MtrDex.Ed25519_Seed, false)\n let seed = signer.qb64\n let aeid = signer.verfer.qb64 // lest it remove encryption\n\n let algo;\n\n if (salt != undefined) {\n algo = Algos.salty\n salt = new Salter({qb64: salt}).qb64\n } else {\n algo = Algos.randy\n }\n\n return new Manager({seed: seed, aeid: aeid, algo: algo, salt: salt})\n}\n\nexport interface ManagerArgs {\n ks?: KeyStore | undefined\n seed?: string | undefined\n aeid?: string | undefined\n pidx?: number | undefined\n algo?: Algos | undefined\n salt?: string | undefined\n tier?: string | undefined\n}\n\nexport interface InceptArgs {\n icodes?: any | undefined\n icount?: number\n icode?: string\n ncodes?: any | undefined\n ncount?: number\n ncode?: string\n dcode?: string\n algo?: Algos | undefined\n salt?: string | undefined\n stem?: string | undefined\n tier?: string | undefined\n rooted?: boolean\n transferable?: boolean\n temp?: boolean\n}\n\ninterface RotateArgs {\n pre: string\n ncodes?: any | undefined\n ncount?: number\n ncode?: string\n dcode?: string\n transferable?: boolean\n temp?: boolean\n erase?: boolean\n}\n\ninterface SignArgs {\n ser: Uint8Array\n pubs?: Array<string> | undefined\n verfers?: Array<Verfer> | undefined\n indexed?: boolean\n indices?: Array<number> | undefined\n ondices?: Array<number> | undefined\n}\n\nexport class Manager {\n private _seed?: string\n private _salt?: string\n private _encrypter: Encrypter | undefined\n private _decrypter: Decrypter | undefined\n private readonly _ks: KeyStore\n\n constructor({ks, seed, aeid, pidx, algo, salt, tier}: ManagerArgs) {\n\n this._ks = ks == undefined ? new Keeper() : ks\n this._seed = seed\n this._encrypter = undefined\n this._decrypter = undefined\n\n aeid = aeid == undefined ? undefined : aeid\n pidx = pidx == undefined ? 0 : pidx\n algo = algo == undefined ? Algos.salty : algo\n\n if (salt == undefined) {\n salt = new Salter({}).qb64\n } else {\n if (new Salter({qb64: salt}).qb64 != salt) {\n throw new Error(`Invalid qb64 for salt=${salt}.`)\n }\n }\n\n tier = tier == undefined ? Tier.low : tier\n\n if (this.pidx == undefined) {\n this.pidx = pidx\n }\n\n if (this.algo == undefined) {\n this.algo = algo\n }\n\n if (this.salt == undefined) {\n this.salt = salt\n }\n\n if (this.tier == undefined) {\n this.tier = tier\n }\n\n if (this.aeid == undefined) {\n this.updateAeid(aeid, this._seed)\n }\n }\n\n get ks(): KeyStore {\n return this._ks\n }\n\n get encrypter(): Encrypter | undefined {\n return this._encrypter\n }\n\n get decrypter(): Decrypter | undefined {\n return this._decrypter\n }\n\n get seed(): string | undefined {\n return this._seed\n }\n\n get aeid(): string | undefined {\n return this.ks.getGbls('aeid')\n }\n\n get pidx(): number | undefined {\n let pidx = this.ks.getGbls('pidx')\n if (pidx != undefined) {\n return parseInt(pidx, 16)\n }\n return undefined\n }\n\n set pidx(pidx: number | undefined) {\n this.ks.pinGbls('pidx', pidx!.toString(16))\n }\n\n get salt(): string | undefined {\n if (this._decrypter == undefined) {\n return this._salt\n } else {\n let salt = this.ks.getGbls('salt')\n return this._decrypter.decrypt(b(salt)).qb64\n }\n }\n\n set salt(salt: string | undefined) {\n if(this._encrypter == undefined) {\n this._salt = salt\n } else {\n salt = this._encrypter.encrypt(b(salt)).qb64\n this.ks.pinGbls('salt', salt!)\n }\n }\n\n get tier(): string | undefined {\n return this.ks.getGbls('tier')\n }\n\n set tier(tier: string | undefined) {\n this.ks.pinGbls('tier', tier!)\n }\n\n get algo(): Algos | undefined {\n let a = this.ks.getGbls('algo')\n let ta = a as keyof typeof Algos\n return Algos[ta]\n }\n\n set algo(algo: Algos | undefined) {\n this.ks.pinGbls('algo', algo! as string)\n }\n\n private updateAeid(aeid: string | undefined, seed?: string) {\n if (this.aeid != undefined) {\n let seed = b(this._seed)\n if (this._seed == undefined || !this._encrypter?.verifySeed(seed)) {\n throw new Error(`Last seed missing or provided last seed \"\n \"not associated with last aeid=${this.aeid}.`)\n }\n }\n\n if (aeid != \"\" && aeid != undefined) {\n if (aeid != this.aeid) {\n this._encrypter = new Encrypter({}, b(aeid))\n if (seed == undefined || !this._encrypter.verifySeed(b(seed))) {\n throw new Error(`Seed missing or provided seed not associated\"\n \" with provided aeid=${aeid}.`)\n }\n }\n } else if (this.algo == Algos.randy) {\n // Unlike KERIpy, we don't support unencrypted secrets\n throw new Error(\"Invalid Manager configuration, encryption must be used with Randy key creation.\")\n } else {\n this._encrypter = undefined\n }\n\n let salt = this.salt\n if(salt != undefined) {\n this.salt = salt\n }\n\n if (this._decrypter != undefined) {\n for (const [keys, data] of this.ks.prmsElements()) {\n if (data.salt != undefined) {\n let salter = this._decrypter.decrypt(b(data.salt))\n data.salt = this._encrypter == undefined ? salter.qb64 : this._encrypter.encrypt(null, salter)\n this.ks.pinPrms(keys, data)\n }\n }\n\n for (const [pubKey, signer] of this.ks.prisElements(this._decrypter)) {\n this.ks.pinPris(pubKey, signer, this._encrypter!)\n }\n\n }\n\n this.ks.pinGbls(\"aeid\", aeid!) // set aeid in db\n this._seed = seed // set .seed in memory\n\n // update .decrypter\n this._decrypter = seed != undefined ? new Decrypter({}, b(seed)) : undefined\n }\n\n incept({icodes=undefined, icount=1, icode=MtrDex.Ed25519_Seed,\n ncodes=undefined, ncount=1, ncode=MtrDex.Ed25519_Seed,\n dcode=MtrDex.Blake3_256, algo=undefined, salt=undefined, stem=undefined, tier=undefined,\n rooted=true, transferable=true, temp=false }: InceptArgs): [Array<Verfer>, Array<Diger>] {\n\n if (rooted && algo == undefined) {\n algo = this.algo\n }\n if (rooted && salt == undefined) {\n salt = this.salt\n }\n if (rooted && tier == undefined) {\n tier = this.tier\n }\n\n let pidx = this.pidx!\n let ridx = 0\n let kidx = 0\n\n let creator = new Creatory(algo).make(salt, tier, stem)\n\n if (icodes == undefined) {\n if (icount < 0) {\n throw new Error(`Invalid icount=${icount} must be >= 0.`)\n }\n\n icodes = new Array<string>(icount).fill(icode)\n }\n\n let ikeys = creator.create(icodes, 0, MtrDex.Ed25519_Seed, transferable, pidx, ridx, kidx, temp)\n let verfers = Array.from(ikeys.signers, (signer: Signer) => signer.verfer)\n\n if (ncodes == undefined) {\n if (ncount < 0) {\n throw new Error(`Invalid ncount=${ncount} must be >= 0.`)\n }\n\n ncodes = new Array<string>(ncount).fill(ncode)\n }\n\n let nkeys = creator.create(ncodes, 0, MtrDex.Ed25519_Seed, transferable, pidx, ridx+1, kidx+icodes.length,\n temp)\n\n let digers = Array.from(nkeys.signers, (signer: Signer) => new Diger({code: dcode}, signer.verfer.qb64b))\n\n let pp = new PrePrm()\n pp.pidx = pidx!\n pp.algo = algo!\n pp.salt = creator.salt.length == 0 || this.encrypter == undefined ? \"\" : this.encrypter.encrypt(b(creator.salt)).qb64\n pp.stem = creator.stem\n pp.tier = creator.tier\n\n let dt = new Date().toString()\n let nw = new PubLot()\n nw.pubs = Array.from(verfers, (verfer: Verfer) => verfer.qb64)\n nw.ridx = ridx\n nw.kidx = kidx\n nw.dt = dt\n\n let nt = new PubLot()\n nt.pubs = Array.from(nkeys.signers, (signer: Signer) => signer.verfer.qb64)\n nt.ridx = ridx + 1\n nt.kidx = kidx + icodes.length\n nt.dt = dt\n\n let ps = new PreSit()\n ps.new = nw\n ps.nxt = nt\n\n let pre = verfers[0].qb64\n if (!this.ks.putPres(pre, verfers[0].qb64b)) {\n throw new Error(`Already incepted pre=${pre}.`)\n }\n\n if (!this.ks.putPrms(pre, pp)) {\n throw new Error(`Already incepted prm for pre=${pre}.`)\n }\n\n this.pidx = pidx! + 1\n\n if (!this.ks.putSits(pre, ps)) {\n throw new Error(`Already incepted sit for pre=${pre}.`)\n }\n\n if (this.encrypter != undefined) { // Only store encrypted keys if we have an encrypter, otherwise regenerate\n ikeys.signers.forEach((signer: Signer) => {\n this.ks.putPris(signer.verfer.qb64, signer, this.encrypter!)\n })\n\n nkeys.signers.forEach((signer: Signer) => {\n this.ks.putPris(signer.verfer.qb64, signer, this.encrypter!)\n })\n } else if (this._encrypter == undefined && ikeys.paths != undefined && nkeys.paths != undefined) {\n ikeys.paths.forEach((path: string, idx: number) => {\n let signer = ikeys.signers[idx]\n let ppt = new PubPath()\n ppt.path = path\n ppt.code = icodes[idx]\n ppt.tier = pp.tier\n ppt.temp = temp\n this.ks.putPths(signer.verfer.qb64, ppt)\n })\n nkeys.paths.forEach((path: string, idx: number) => {\n let signer = nkeys.signers[idx]\n let ppt = new PubPath()\n ppt.path = path\n ppt.code = ncodes[idx]\n ppt.tier = pp.tier\n ppt.temp = temp\n this.ks.putPths(signer.verfer.qb64, ppt)\n })\n } else {\n throw new Error(\"invalid configuration, randy keys without encryption\")\n }\n\n let pubSet = new PubSet()\n pubSet.pubs = ps.new.pubs\n this.ks.putPubs(riKey(pre, ridx), pubSet)\n\n let nxtPubSet = new PubSet()\n nxtPubSet.pubs = ps.nxt.pubs\n this.ks.putPubs(riKey(pre, ridx+1), nxtPubSet)\n\n return [verfers, digers]\n }\n\n move(old: string, gnu: string) {\n if (old == gnu) {\n return\n }\n\n if (this.ks.getPres(old) == undefined) {\n throw new Error(`Nonexistent old pre=${old}, nothing to assign.`)\n }\n\n if (this.ks.getPres(gnu) != undefined) {\n throw new Error(`Preexistent new pre=${gnu} may not clobber.`)\n }\n\n let oldprm = this.ks.getPrms(old)\n if (oldprm == undefined) {\n throw new Error(`Nonexistent old prm for pre=${old}, nothing to move.`)\n }\n\n if (this.ks.getPrms(gnu) != undefined) {\n throw new Error(`Preexistent new prm for pre=${gnu} may not clobber.`)\n }\n\n let oldsit = this.ks.getSits(old)\n if (oldsit == undefined) {\n throw new Error(`Nonexistent old sit for pre=${old}, nothing to move.`)\n }\n\n if (this.ks.getSits(gnu) != undefined) {\n throw new Error(`Preexistent new sit for pre=${gnu} may not clobber.`)\n }\n\n if (!this.ks.putPrms(gnu, oldprm)) {\n throw new Error(`Failed moving prm from old pre=${old} to new pre=${gnu}.`)\n } else {\n this.ks.remPrms(old)\n }\n\n if (!this.ks.putSits(gnu, oldsit)) {\n throw new Error(`Failed moving sit from old pre=${old} to new pre=${gnu}.`)\n } else {\n this.ks.remSits(old)\n }\n\n let i = 0\n while (true) {\n let pl = this.ks.getPubs(riKey(old, i))\n if (pl == undefined) {\n break\n }\n\n if (!this.ks.putPubs(riKey(gnu, i), pl)) {\n throw new Error(`Failed moving pubs at pre=${old} ri=${i} to new pre=${gnu}`)\n }\n i = i + 1\n }\n\n if (!this.ks.pinPres(old, b(gnu))) {\n throw new Error(`Failed assiging new pre=${gnu} to old pre=${old}.`)\n }\n\n if (!this.ks.putPres(gnu, b(gnu))) {\n throw new Error(`Failed assiging new pre=${gnu}.`)\n }\n }\n\n rotate({pre, ncodes=undefined, ncount=1, ncode=MtrDex.Ed25519_Seed, dcode=MtrDex.Blake3_256,\n transferable=true, temp=false, erase=true}:RotateArgs): [Array<Verfer>, Array<Diger>] {\n let pp = this.ks.getPrms(pre)\n if (pp == undefined) {\n throw new Error(`Attempt to rotate nonexistent pre=${pre}.`)\n }\n\n let ps = this.ks.getSits(pre)\n if (ps == undefined) {\n throw new Error(`Attempt to rotate nonexistent pre=${pre}.`)\n }\n\n if (ps.nxt.pubs == undefined || ps.nxt.pubs.length == 0) {\n throw new Error(`Attempt to rotate nontransferable pre=${pre}.`)\n }\n\n let old = ps.old\n ps.old = ps.new\n ps.new = ps.nxt\n\n if (this.aeid != undefined && this.decrypter == undefined) {\n throw new Error(\"Unauthorized decryption attempt. Aeid but no decrypter.\")\n }\n\n let verfers = new Array<Verfer>()\n ps.new.pubs.forEach((pub) => {\n if (this.decrypter != undefined) {\n let signer = this.ks.getPris(pub, this.decrypter)\n if (signer == undefined) {\n throw new Error(`Missing prikey in db for pubkey=${pub}`)\n }\n verfers.push(signer.verfer)\n } else {\n // Should we regenerate from salt here since this.decryptor is undefined\n verfers.push(new Verfer({qb64: pub}))\n }\n\n })\n\n let salt = pp.salt\n if (salt != undefined && salt != \"\") { // If you provded a Salt for an AID but don't have encryption, pitch a fit\n if (this.decrypter == undefined) {\n throw new Error(\"Invalid configuration: AID salt with no encryption\")\n }\n salt = this.decrypter.decrypt(b(salt)).qb64\n } else {\n salt = this.salt!\n }\n\n let creator = new Creatory(pp.algo).make(salt, pp.tier, pp.stem)\n\n if (ncodes == undefined) {\n if (ncount < 0) {\n throw new Error(`Invalid count=${ncount} must be >= 0`)\n }\n ncodes = new Array<string>(ncount).fill(ncode)\n }\n\n let pidx = pp.pidx\n let ridx = ps.new.ridx + 1\n let kidx = ps.nxt.kidx + ps.new.pubs.length\n\n let keys = creator.create(ncodes, 0, \"\", transferable, pidx, ridx, kidx, temp)\n let digers = Array.from(keys.signers, (signer: Signer) => new Diger({code: dcode}, signer.verfer.qb64b))\n\n let dt = new Date().toString()\n ps.nxt = new PubLot()\n ps.nxt.pubs = Array.from(keys.signers, (signer: Signer) => signer.verfer.qb64)\n ps.nxt.ridx = ridx\n ps.nxt.kidx = kidx\n ps.nxt.dt = dt\n\n if (!this.ks.pinSits(pre, ps)) {\n throw new Error(`Problem updating pubsit db for pre=${pre}.`)\n }\n\n if (this.encrypter != undefined) { // Only store encrypted keys if we have an encrypter, otherwise regenerate\n keys.signers.forEach((signer: Signer) => {\n this.ks.putPris(signer.verfer.qb64, signer, this.encrypter!)\n })\n } else if (this._encrypter == undefined && keys.paths != undefined) {\n keys.paths.forEach((path: string, idx: number) => {\n let signer = keys.signers[idx]\n let ppt = new PubPath()\n ppt.path = path\n ppt.tier = pp!.tier\n ppt.temp = temp\n this.ks.putPths(signer.verfer.qb64, ppt)\n })\n } else {\n throw new Error(\"invalid configuration, randy keys without encryption\")\n }\n\n let newPs = new PubSet()\n newPs.pubs = ps.nxt.pubs\n this.ks.putPubs(riKey(pre, ps.nxt.ridx), newPs)\n\n if (erase) {\n old.pubs.forEach((pub) => {\n this.ks.remPris(pub)\n })\n }\n\n return [verfers, digers]\n }\n\n sign({ser, pubs=undefined, verfers=undefined, indexed=true, indices=undefined, ondices=undefined}: SignArgs) {\n let signers = new Array<Signer>()\n\n if (pubs == undefined && verfers == undefined) {\n throw new Error(\"pubs or verfers required\")\n }\n\n if (pubs != undefined) {\n if (this.aeid != undefined && this.decrypter == undefined) {\n throw new Error(\"Unauthorized decryption attempt. Aeid but no decrypter.\")\n }\n\n pubs.forEach((pub) => {\n //If no decrypter then get SaltyState and regenerate prikey\n if (this.decrypter != undefined) {\n let signer = this.ks.getPris(pub, this.decrypter)\n if (signer == undefined) {\n throw new Error(`Missing prikey in db for pubkey=${pub}`)\n }\n signers.push(signer)\n } else {\n let verfer = new Verfer({qb64: pub})\n let ppt = this.ks.getPths(pub)\n if (ppt == undefined) {\n throw new Error(`Missing prikey in db for pubkey=${pub}`)\n }\n let salter = new Salter({qb64: this.salt})\n signers.push(salter.signer(ppt.code, verfer.transferable, ppt.path, ppt.tier as Tier, ppt.temp))\n }\n })\n } else {\n verfers!.forEach((verfer: Verfer) => {\n if (this.decrypter != undefined) {\n let signer = this.ks.getPris(verfer.qb64, this.decrypter)\n if (signer == undefined) {\n throw new Error(`Missing prikey in db for pubkey=${verfer.qb64}`)\n }\n signers.push(signer)\n } else {\n let ppt = this.ks.getPths(verfer.qb64)\n if (ppt == undefined) {\n throw new Error(`Missing prikey in db for pubkey=${verfer.qb64}`)\n }\n let salter = new Salter({qb64: this.salt})\n signers.push(salter.signer(ppt.code, verfer.transferable, ppt.path, ppt.tier as Tier, ppt.temp))\n }\n })\n }\n\n if (indices != undefined && indices.length != signers.length) {\n throw new Error(`Mismatch indices length=${indices.length} and resultant signers length=${signers.length}`)\n }\n\n if (ondices != undefined && ondices.length != signers.length) {\n throw new Error(`Mismatch ondices length=${ondices.length} and resultant signers length=${signers.length}`)\n }\n\n if (indexed) {\n let sigers = new Array<Siger>()\n signers.forEach((signer, idx) => {\n let i\n if (indices != undefined) {\n i = indices[idx]\n if (i < 0) {\n throw new Error(`Invalid signing index = ${i}, not whole number.`)\n }\n } else {\n i = idx\n }\n\n let o\n if (ondices != undefined) {\n o = ondices[idx]\n if (o <= 0) {\n throw new Error(`Invalid other signing index = {o}, not None or not whole number.`)\n }\n } else {\n o = i\n }\n\n let only = o == undefined\n sigers.push(signer.sign(ser, i, only, o) as Siger)\n })\n return sigers\n } else {\n let cigars = new Array<Cigar>()\n signers.forEach((signer: Signer) => {\n cigars.push(signer.sign(ser) as Cigar)\n })\n\n return cigars\n }\n }\n}\n\nexport function riKey(pre: string, ridx: number) {\n return pre + \".\" + ridx.toString(16).padStart(32, '0')\n\n}\n\n\nexport interface KeyStore {\n getGbls(key: string): string | undefined\n pinGbls(key: string, val: string): void\n\n prmsElements(): Array<[string, PrePrm]>\n getPrms(keys: string) :PrePrm | undefined\n pinPrms(keys: string, data: PrePrm): void\n putPrms(keys: string, data: PrePrm): boolean\n remPrms(keys: string): boolean\n\n prisElements(decrypter: Decrypter): Array<[string, Signer]>\n getPris(keys: string, decrypter: Decrypter): Signer | undefined\n pinPris(keys: string, data: Signer, encrypter: Encrypter): void\n putPris(pubKey: string, signer: Signer, encrypter: Encrypter): boolean\n remPris(pubKey: string): void\n\n getPths(pubKey: string): PubPath | undefined\n putPths(pubKey: string, val: PubPath): boolean\n pinPths(pubKey: string, val: PubPath): boolean\n\n getPres(pre: string): Uint8Array | undefined\n putPres(pre: string, val: Uint8Array): boolean\n pinPres(pre: string, val: Uint8Array): boolean\n\n getSits(keys: string) :PreSit | undefined\n putSits(pre: string, val: PreSit): boolean\n pinSits(pre: string, val: PreSit): boolean\n remSits(keys: string): boolean\n\n getPubs(keys: string): PubSet | undefined\n putPubs(keys: string, data: PubSet): boolean\n}\n\n/*\n In memory test implementation of Keeper key store\n*/\n\nclass Keeper implements KeyStore {\n private readonly _gbls: Map<string, string>\n private readonly _pris: Map<string, Uint8Array>\n private readonly _pths: Map<string, PubPath>\n private readonly _pres: Map<string, Uint8Array>\n private readonly _prms: Map<string, PrePrm>\n private readonly _sits: Map<string, PreSit>\n private readonly _pubs: Map<string, PubSet>\n\n constructor() {\n this._gbls = new Map<string, string>()\n this._pris = new Map<string, Uint8Array>()\n this._pths = new Map<string, PubPath>()\n this._pres = new Map<string, Uint8Array>()\n this._prms = new Map<string, PrePrm>()\n this._sits = new Map<string, PreSit>()\n this._pubs = new Map<string, PubSet>()\n\n }\n\n getGbls(key: string): string | undefined {\n return this._gbls.get(key)\n }\n\n pinGbls(key: string, val: string): void {\n this._gbls.set(key, val)\n }\n\n prmsElements(): Array<[string, PrePrm]> {\n let out = new Array<[string, PrePrm]>()\n this._prms.forEach((value, key) => {\n out.push([key, value])\n })\n\n return out\n }\n\n getPrms(keys: string): PrePrm | undefined {\n return this._prms.get(keys)\n }\n\n pinPrms(keys: string, data: PrePrm): void {\n this._prms.set(keys, data)\n }\n\n putPrms(keys: string, data: PrePrm): boolean {\n if (this._prms.has(keys)) {\n return false\n }\n this._prms.set(keys, data)\n return true\n }\n\n remPrms(keys: string): boolean {\n return this._prms.delete(keys)\n }\n\n prisElements(decrypter: Decrypter): Array<[string, Signer]> {\n let out = new Array<[string, Signer]>()\n this._pris.forEach(function (val, pubKey) {\n let verfer = new Verfer({qb64: pubKey})\n let signer = decrypter.decrypt(val, null, verfer.transferable)\n out.push([pubKey, signer])\n })\n return out\n }\n\n pinPris(pubKey: string, signer: Signer, encrypter: Encrypter): void {\n let cipher = encrypter.encrypt(null, signer)\n this._pris.set(pubKey, cipher.qb64b)\n }\n\n putPris(pubKey: string, signer: Signer, encrypter: Encrypter): boolean {\n if (this._pris.has(pubKey)) {\n return false\n }\n let cipher = encrypter.encrypt(null, signer)\n this._pris.set(pubKey, cipher.qb64b)\n return true\n }\n\n getPris(pubKey: string, decrypter: Decrypter): Signer | undefined {\n let val = this._pris.get(pubKey)\n if (val == undefined) {\n return undefined\n }\n let verfer = new Verfer({qb64: pubKey})\n\n\n return decrypter.decrypt(val, null, verfer.transferable)\n }\n\n pinPths(pubKey: string, val: PubPath): boolean {\n this._pths.set(pubKey, val)\n return true\n }\n\n putPths(pubKey: string, val: PubPath): boolean {\n if (this._pths.has(pubKey)) {\n return false\n }\n\n this._pths.set(pubKey, val)\n return true\n\n }\n\n getPths(pubKey: string): PubPath | undefined {\n return this._pths.get(pubKey)\n }\n\n remPris(pubKey: string): void {\n this._pris.delete(pubKey)\n }\n\n getPres(pre: string): Uint8Array | undefined {\n return this._pres.get(pre)\n }\n\n pinPres(pre: string, val: Uint8Array): boolean {\n this._pres.set(pre, val)\n return true\n }\n\n putPres(pre: string, val: Uint8Array): boolean {\n if (this._pres.has(pre)) {\n return false\n }\n\n this._pres.set(pre, val)\n return true\n }\n\n getSits(keys: string): PreSit | undefined {\n return this._sits.get(keys)\n }\n\n putSits(pre: string, val: PreSit): boolean {\n if (this._sits.has(pre)) {\n return false\n }\n\n this._sits.set(pre, val)\n return true\n }\n\n pinSits(pre: string, val: PreSit): boolean {\n this._sits.set(pre, val)\n return true\n }\n\n remSits(keys: string): boolean {\n return this._sits.delete(keys)\n }\n\n getPubs(keys: string): PubSet | undefined {\n return this._pubs.get(keys)\n }\n\n putPubs(keys: string, data: PubSet): boolean {\n if (this._pubs.has(keys)) {\n return false\n }\n this._pubs.set(keys, data)\n return true\n }\n}","\n\nexport class Tholder {\n private _weighted: boolean = false\n private _thold: number = 0\n private _size: number = 0\n private _sith: string = \"\"\n private _limen: Array<string> = new Array<string>()\n\n constructor(sith: string | number | Array<string>) {\n this.processSith(sith)\n }\n\n get num(): number | undefined {\n return this._weighted ? undefined : this._thold\n }\n\n get size(): number {\n return this._size\n }\n\n get thold(): number {\n return this._thold;\n }\n get weighted(): boolean {\n return this._weighted;\n }\n\n get sith(): string {\n if (this.weighted) {\n if (this._sith == \"\") {\n return `${this._limen}`\n }\n return this._sith\n } else {\n return this.thold.toString(16)\n }\n }\n\n private processSith(sith: string | number | Array<string>) {\n if (typeof(sith) == \"string\") {\n this._sith = sith\n this._thold = parseInt(sith)\n } else if (typeof(sith) == \"number\") {\n this._thold = sith\n this._size = this._thold\n } else {\n this._limen = sith\n this._size = this._limen.length\n }\n }\n}","\nexport class PNumber {\n private readonly _num: number = 0;\n constructor(num?: number | string, numh?: string) {\n // TODO: Implelment logic\n if (typeof(num) == \"number\") {\n this._num = num\n } else if (numh != undefined) {\n this._num = parseInt(numh, 16)\n }\n\n }\n\n get num(): number {\n return this._num;\n }\n\n get numh(): string {\n return this._num.toString(16)\n }\n}","import {MtrDex} from \"./matter\";\nimport {deversify, Dict, Ident, Serials, versify, Version, Versionage} from \"./core\";\n\nexport class Serder {\n private _kind: Serials;\n private _raw: string = \"\";\n private _ked: Dict<any> = {};\n private _ident: Ident = Ident.KERI;\n private _size: number = 0;\n private _version: Version = Versionage;\n private readonly _code: string;\n\n constructor(ked: Dict<any>, kind: Serials=Serials.JSON, code: string=MtrDex.Blake3_256) {\n this._code = code\n this._kind = kind\n this.ked = ked\n }\n\n set ked(ked: Dict<any>) {\n let [raw, ident, kind, kd, version] = this._exhale(ked, this._kind)\n let size = raw.length\n this._raw = raw\n this._ident = ident\n this._ked = kd\n this._kind = kind\n this._size = size\n this._version = version\n }\n\n get ked(): Dict<any> {\n return this._ked\n }\n\n get code(): string {\n return this._code;\n }\n\n get raw(): string {\n return this._raw;\n }\n\n get kind(): Serials {\n return this._kind\n }\n\n private _exhale(ked: Dict<any>, kind: Serials): [string, Ident, Serials, Dict<any>, Version] {\n return sizeify(ked, kind)\n }\n\n get ident(): Ident {\n return this._ident\n }\n\n get size(): number {\n return this._size\n }\n\n get version(): Version {\n return this._version\n }\n\n pretty() {\n return JSON.stringify(this._ked, undefined, 2)\n }\n}\n\nexport function dumps(ked: Object, kind: Serials.JSON): string {\n if (kind == Serials.JSON) {\n return JSON.stringify(ked)\n } else {\n throw new Error(\"unsupported event encoding\")\n }\n}\n\nexport function sizeify(ked: Dict<any>, kind?: Serials) : [string, Ident, Serials, Dict<any>, Version]{\n if (!(\"v\" in ked)) {\n throw new Error(\"Missing or empty version string\")\n }\n\n let ident = Ident.KERI\n let [knd, version,] = deversify(ked[\"v\"] as string)\n if (version != Versionage) {\n throw new Error(`unsupported version ${version.toString()}`)\n }\n\n if (kind == undefined) {\n kind = knd\n }\n\n let raw = dumps(ked, kind)\n let size = raw.length\n\n ked['v'] = versify(ident, version, kind, size)\n\n raw = dumps(ked, kind)\n\n return [raw, ident, kind, ked, version]\n\n}\n","import {Matter, MatterArgs, MtrDex} from \"./matter\";\nimport {EmptyMaterialError} from \"./kering\";\nimport {Dict, Ilks} from \"./core\";\nimport {sizeify} from \"./serder\";\nimport {Verfer} from \"./verfer\";\n\nimport {createHash} from \"blake3\"\n\nconst Dummy: string = \"#\"\n\n\nexport class Prefixer extends Matter {\n private readonly _derive: Function | undefined\n private readonly _verify: Function | undefined\n\n constructor({raw, code, qb64b, qb64, qb2}: MatterArgs, ked?: Dict<any>) {\n try {\n super({raw, code, qb64b, qb64, qb2});\n } catch (e) {\n if (e instanceof EmptyMaterialError) {\n if (ked == undefined || (code == undefined && !(\"i\" in ked))) {\n throw e\n }\n\n if (code == undefined) {\n super({qb64: ked['i'], code: code})\n code = this.code\n }\n\n let _derive\n if (code == MtrDex.Ed25519N) {\n _derive = Prefixer._derive_ed25519N\n } else if (code == MtrDex.Ed25519) {\n _derive = Prefixer._derive_ed25519\n } else if (code == MtrDex.Blake3_256) {\n _derive = Prefixer._derive_blake3_256\n } else {\n throw new Error(`Unsupported code = ${code} for prefixer.`)\n }\n\n [raw, code] = _derive(ked)\n super({raw: raw, code: code})\n this._derive = _derive\n } else {\n throw e\n }\n }\n\n if (this.code == MtrDex.Ed25519N) {\n this._verify = this._verify_ed25519N\n } else if (this.code == MtrDex.Ed25519) {\n this._verify = this._verify_ed25519\n } else if (this.code == MtrDex.Blake3_256) {\n this._verify = this._verify_blake3_256\n } else {\n throw new Error(`Unsupported code = ${code} for prefixer.`)\n }\n\n }\n\n derive(ked: Dict<any>): [Uint8Array, string] {\n if (ked[\"i\"] != Ilks.icp) {\n throw new Error(`Non-incepting ilk ${ked['i']} for prefix derivation`)\n }\n return this._derive!(ked)\n }\n\n verify(ked: Dict<any>, prefixed: boolean = false): boolean {\n if (ked[\"i\"] != Ilks.icp) {\n throw new Error(`Non-incepting ilk ${ked['i']} for prefix derivation`)\n }\n return this._verify!(ked, this.qb64, prefixed)\n }\n\n\n static _derive_ed25519N(ked: Dict<any>): [Uint8Array, string] {\n let verfer\n let keys = ked[\"k\"]\n if (keys.length != 1) {\n throw new Error(`Basic derivation needs at most 1 key got ${keys.length} keys instead`)\n }\n try {\n verfer = new Verfer({qb64: keys[0]})\n } catch (e) {\n throw new Error(`Error extracting public key = ${e}`)\n }\n\n if (!(verfer.code in [MtrDex.Ed25519N])) {\n throw new Error(`Mismatch derivation code = ${verfer.code}`)\n }\n\n let next = 'n' in ked ? ked['n'] : []\n if (verfer.code == MtrDex.Ed25519N && next.length > 0) {\n throw new Error(`Non-empty nxt = ${next} for non-transferable code = ${verfer.code}`)\n }\n\n let backers = 'b' in ked ? ked['b'] : []\n if (verfer.code == MtrDex.Ed25519N && backers.length > 0) {\n throw new Error(`Non-empty b =${backers} for non-transferable code = ${verfer.code}`)\n }\n\n let anchor = 'a' in ked ? ked['a'] : []\n if (verfer.code == MtrDex.Ed25519N && anchor.length > 0) {\n throw new Error(`Non-empty a = ${verfer.code} for non-transferable code = ${verfer.code}`)\n }\n\n return [verfer.raw, verfer.code]\n\n }\n\n static _derive_ed25519(ked: Dict<any>): [Uint8Array, string] {\n let verfer\n let keys = ked[\"k\"]\n if (keys.length != 1) {\n throw new Error(`Basic derivation needs at most 1 key got ${keys.length} keys instead`)\n }\n\n try {\n verfer = new Verfer({qb64: keys[0]})\n } catch (e) {\n throw new Error(`Error extracting public key = ${e}`)\n }\n\n if (verfer.code in [MtrDex.Ed25519]) {\n throw new Error(`Mismatch derivation code = ${verfer.code}`)\n }\n\n return [verfer.raw, verfer.code]\n }\n\n static _derive_blake3_256(ked: Dict<any>): [Uint8Array, string] {\n let kd = ked\n let ilk = ked[\"t\"]\n if (ilk != Ilks.icp) {\n throw new Error(`Invalid ilk = ${ilk} to derive pre.`)\n }\n\n kd[\"i\"] = \"\".padStart(Matter.Sizes.get(MtrDex.Blake3_256)!.fs, Dummy)\n kd[\"d\"] = ked[\"i\"]\n let [raw] = sizeify(ked)\n const hasher = createHash();\n const dig = hasher.update(raw).digest('');\n return [dig, MtrDex.Blake3_256]\n }\n\n _verify_ed25519N(ked: Dict<any>, pre: string, prefixed: boolean = false): boolean {\n try {\n let keys = ked[\"k\"]\n if (keys.length != 1) {\n return false\n }\n\n if (keys[0] != pre) {\n return false\n }\n\n if (prefixed && ked[\"i\"] != pre) {\n return false\n }\n\n let next = 'n' in ked ? ked['n'] : []\n if (next.length > 0) { // must be empty\n return false\n }\n } catch (e) {\n return false\n }\n\n return true\n\n }\n\n _verify_ed25519(ked: Dict<any>, pre: string, prefixed: boolean = false): boolean {\n try {\n let keys = ked[\"k\"]\n if (keys.length != 1) {\n return false\n }\n\n if (keys[0] != pre) {\n return false\n }\n\n if (prefixed && ked[\"i\"] != pre) {\n return false\n }\n } catch (e) {\n return false\n }\n\n return true\n }\n\n _verify_blake3_256(ked: Dict<any>, pre: string, prefixed: boolean = false): boolean {\n try {\n let [raw,] = Prefixer._derive_blake3_256(ked)\n let crymat = new Matter({raw: raw, code: MtrDex.Blake3_256})\n if (crymat.qb64 != pre) {\n return false\n }\n\n if (prefixed && ked[\"i\"] != pre) {\n return false\n }\n\n } catch (e) {\n return false\n }\n return true\n\n }\n}","import {DigiDex, Matter, MatterArgs, MtrDex} from \"./matter\";\nimport {deversify, Dict, Serials} from \"./core\";\nimport {EmptyMaterialError} from \"./kering\";\nimport {dumps, sizeify} from \"./serder\";\n\nimport {createHash} from \"blake3\"\n\nconst Dummy = \"#\"\n\nexport enum Ids {\n d = \"d\"\n}\n\nclass Digestage {\n public klas: any = undefined\n public size: number | undefined = 0\n public length: number | undefined = 0\n constructor(klas: any, size?: number, length?: number) {\n this.klas = klas\n this.size = size\n this.length = length\n }\n}\n\n\n\nexport class Saider extends Matter {\n static Digests = new Map<string, Digestage>([\n [MtrDex.Blake3_256, new Digestage(Saider._derive_blake3_256, undefined, undefined)]\n ])\n\n constructor({raw, code, qb64b, qb64, qb2}: MatterArgs, sad?: Dict<any>, kind?: Serials, label: string = Ids.d) {\n try {\n super({raw, code, qb64b, qb64, qb2});\n } catch (e) {\n if (e instanceof EmptyMaterialError) {\n if (sad == undefined || !(label in sad)) {\n throw e\n }\n\n if (code == undefined) {\n if (sad[label] != \"\") {\n super({qb64: sad[label], code: code})\n code = this.code\n } else {\n code = MtrDex.Blake3_256\n }\n }\n\n if (!DigiDex.has(code)) {\n throw new Error(`Unsupported digest code = ${code}`)\n }\n\n [raw] = Saider._derive({...sad}, code, kind, label)\n super({raw: raw, code: code})\n } else {\n throw e\n }\n }\n\n if (!this.digestive) {\n throw new Error(`Unsupported digest code = ${this.code}.`)\n }\n\n }\n\n static _derive_blake3_256(ser: Uint8Array, _digest_size: number, _length: number) {\n const hasher = createHash();\n return hasher.update(ser).digest('');\n }\n\n\n private static _derive(sad: Dict<any>, code: string, kind: Serials | undefined, label: string): [Uint8Array, Dict<any>] {\n if (!DigiDex.has(code) || !Saider.Digests.has(code)) {\n throw new Error(`Unsupported digest code = ${code}.`)\n }\n\n sad = {...sad}\n sad[label] = \"\".padStart(Matter.Sizes.get(code)!.fs, Dummy)\n if ('v' in sad) {\n [, , kind, sad, ] = sizeify(sad, kind)\n }\n\n let ser = {...sad}\n\n let digestage = Saider.Digests.get(code)\n\n let cpa = Saider._serialze(ser, kind)\n let args: any[] = []\n if (digestage!.size != undefined) {\n args.push(digestage!.size)\n }\n\n if (digestage!.length != undefined) {\n args.push(digestage!.length)\n }\n\n return [digestage!.klas(cpa, ...args), sad]\n }\n\n public derive(sad: Dict<any>, code: string, kind: Serials | undefined, label: string) : [Uint8Array, Dict<any>]{\n code = code != undefined ? code : this.code\n return Saider._derive(sad, code, kind, label)\n }\n\n public verify(sad: Dict<any>, prefixed: boolean = false, versioned: boolean = false, kind?: Serials,\n label: string = Ids.d): boolean {\n try {\n let [raw, dsad] = Saider._derive(sad, this.code, kind, label)\n let saider = new Saider({raw: raw, code: this.code})\n if (this.qb64 != saider.qb64) {\n return false\n }\n\n if (\"v\" in sad && versioned) {\n if (sad['v'] != dsad[\"v\"]) {\n return false\n }\n }\n\n if (prefixed && sad[label] != this.qb64) {\n return false\n }\n\n } catch (e) {\n return false\n }\n\n return true\n }\n\n private static _serialze(sad: Dict<any>, kind?: Serials): string {\n let knd = Serials.JSON\n if ('v' in sad) {\n [knd] = deversify(sad['v'])\n }\n\n if (kind == undefined) {\n kind = knd\n }\n\n return dumps(sad, kind)\n }\n\n public static saidify(sad: Dict<any>, code: string = MtrDex.Blake3_256, kind: Serials = Serials.JSON,\n label: string = Ids.d): [Saider, Dict<any>] {\n if (!(label in sad)) {\n throw new Error(`Missing id field labeled=${label} in sad.`)\n }\n let raw\n [raw, sad]= Saider._derive(sad, code, kind, label)\n let saider = new Saider({raw: raw, code: code}, undefined, kind, label)\n sad[label] = saider.qb64\n return [saider, sad]\n }\n\n\n}\n","import {b, concat, Dict, Ident, Ilks, Serials, versify, Version, Versionage} from \"./core\";\nimport {Tholder} from \"./tholder\";\nimport {PNumber} from \"./number\";\nimport {Prefixer} from \"./prefixer\";\nimport {Serder} from \"./serder\";\nimport {MtrDex, NonTransDex} from \"./matter\";\nimport {Saider} from \"./saider\";\nimport {Siger} from \"./siger\";\nimport {Cigar} from \"./cigar\";\nimport {Counter, CtrDex} from \"./counter\";\n\n\nfunction ample(n: number, f?: number, weak = true) {\n n = Math.max(0, n) // no negatives\n let f1\n if (f == undefined) {\n f1 = Math.max(1, Math.floor(Math.max(0, n - 1) / 3)) // least floor f subject to n >= 3*f+1\n\n let f2 = Math.max(1, Math.ceil(Math.max(0, n - 1) / 3)) // most Math.ceil f subject to n >= 3*f+1\n if (weak) { // try both fs to see which one has lowest m\n return Math.min(n, Math.ceil((n + f1 + 1) / 2), Math.ceil((n + f2 + 1) / 2))\n } else {\n return Math.min(n, Math.max(0, n - f1, Math.ceil((n + f1 + 1) / 2)))\n }\n } else {\n f = Math.max(0, f)\n let m1 = Math.ceil((n + f + 1) / 2)\n let m2 = Math.max(0, n - f)\n if (m2 < m1 && n > 0) {\n throw new Error(`Invalid f=${f} is too big for n=${n}.`)\n }\n if (weak) {\n return Math.min(n, m1, m2)\n } else {\n return Math.min(n, Math.max(m1, m2))\n }\n }\n}\n\nexport interface InceptArgs {\n keys: Array<string>,\n isith?: number | string | Array<string>,\n ndigs?: Array<string>,\n nsith?: number | string | Array<string>,\n toad?: number | string,\n wits?: Array<string>,\n cnfg?: Array<string>,\n data?: Array<object>,\n version?: Version,\n kind?: Serials,\n code?: string,\n intive?: boolean\n delpre?: string\n}\n\nexport function incept({keys, isith, ndigs, nsith, toad, wits, cnfg, data, version=Versionage, kind=Serials.JSON, code,\n intive = false, delpre}: InceptArgs) {\n\n\n let vs = versify(Ident.KERI, version, kind, 0)\n let ilk = delpre == undefined ? Ilks.icp : Ilks.dip\n let sner = new PNumber(0)\n\n if (isith == undefined) {\n isith = Math.max(1, Math.ceil(keys.length / 2))\n }\n\n let tholder = new Tholder(isith)\n if (tholder.num != undefined && tholder.num < 1) {\n throw new Error(`Invalid sith = ${tholder.num} less than 1.`)\n }\n if (tholder.size > keys.length) {\n throw new Error(`Invalid sith = ${tholder.num} for keys ${keys}`)\n }\n\n if (ndigs == undefined) {\n ndigs = new Array<string>()\n }\n\n if (nsith == undefined) {\n nsith = Math.max(0, Math.ceil(ndigs.length / 2))\n }\n\n let ntholder = new Tholder(nsith)\n if (ntholder.num != undefined && ntholder.num < 0) {\n throw new Error(`Invalid nsith = ${ntholder.num} less than 0.`)\n }\n if (ntholder.size > keys.length) {\n throw new Error(`Invalid nsith = ${ntholder.num} for keys ${ndigs}`)\n }\n\n wits = wits == undefined ? [] : wits\n if (new Set(wits).size != wits.length) {\n throw new Error(`Invalid wits = ${wits}, has duplicates.`)\n }\n\n if (toad == undefined) {\n if (wits.length == 0) {\n toad = 0\n } else {\n toad = ample(wits.length)\n }\n }\n\n let toader = new PNumber(toad)\n if (wits.length > 0) {\n if (toader.num < 1 || toader.num > wits.length) {\n throw new Error(`Invalid toad = ${toader.num} for wits = ${wits}`)\n }\n } else {\n if (toader.num != 0) {\n throw new Error(`Invalid toad = ${toader.num} for wits = ${wits}`)\n }\n }\n\n cnfg = cnfg == undefined ? new Array<string>() : cnfg\n data = data == undefined ? new Array<object>() : data\n\n let ked = {\n v: vs,\n t: ilk,\n d: \"\",\n i: \"\",\n s: sner.numh,\n kt: (intive && tholder.num != undefined) ? tholder.num : tholder.sith,\n k: keys,\n nt: (intive && tholder.num != undefined) ? ntholder.num: ntholder.sith,\n n: ndigs,\n bt: intive ? toader.num : toader.numh,\n b: wits,\n c: cnfg,\n a: data\n } as Dict<any>\n\n if (delpre != undefined) {\n ked[\"di\"] = delpre\n if (code == undefined) {\n code = MtrDex.Blake3_256\n }\n }\n\n let prefixer\n if (delpre == undefined && code == undefined && keys.length == 1) {\n prefixer = new Prefixer({qb64: keys[0]})\n if (prefixer.digestive) {\n throw new Error(`Invalid code, digestive=${prefixer.code}, must be derived from ked.`)\n }\n } else {\n prefixer = new Prefixer({code: code}, ked)\n if (delpre != undefined) {\n if(!prefixer.digestive) {\n throw new Error(`Invalid derivation code = ${prefixer.code} for delegation. Must be digestive`)\n }\n }\n }\n\n ked[\"i\"] = prefixer.qb64\n if (prefixer.digestive) {\n ked[\"d\"] = prefixer.qb64\n }\n else {\n [, ked] = Saider.saidify(ked)\n }\n\n return new Serder(ked)\n}\n\nexport function messagize(serder: Serder, sigers?: Array<Siger>, seal?: any, wigers?:Array<Cigar>, cigars?:Array<Cigar>,\n pipelined:boolean = false): Uint8Array {\n let msg = new Uint8Array(b(serder.raw))\n let atc = new Uint8Array()\n\n if (sigers == undefined && wigers == undefined && cigars == undefined) {\n throw new Error(`Missing attached signatures on message = ${serder.ked}.`)\n }\n\n if (sigers != undefined) {\n if (seal != undefined) {\n throw new Error(`Index sig group seals not yet supported`)\n }\n\n atc = concat(atc, new Counter({code: CtrDex.ControllerIdxSigs, count: sigers.length}).qb64b)\n sigers.forEach((siger) => {\n atc = concat(atc, siger.qb64b)\n })\n }\n\n if (wigers != undefined) {\n atc = concat(atc, new Counter({code: CtrDex.ControllerIdxSigs, count: wigers.length}).qb64b)\n\n wigers.forEach((wiger) => {\n if (wiger.verfer && !(wiger.verfer.code in NonTransDex)) {\n throw new Error(`Attempt to use tranferable prefix=${wiger.verfer.qb64} for receipt.`)\n }\n atc = concat(atc, wiger.qb64b)\n })\n }\n\n if (cigars != undefined) {\n atc = concat(atc, new Counter({code: CtrDex.ControllerIdxSigs, count: cigars.length}).qb64b)\n\n cigars.forEach((cigar) => {\n if (cigar.verfer && !(cigar.verfer.code in NonTransDex)) {\n throw new Error(`Attempt to use tranferable prefix=${cigar.verfer.qb64} for receipt.`)\n }\n atc = concat(atc, cigar.qb64b)\n })\n }\n\n if (pipelined) {\n if (atc.length % 4 != 0) {\n throw new Error(`Invalid attachments size=${atc.length}, nonintegral quadlets.`)\n }\n msg = concat(msg, new Counter({code: CtrDex.AttachedMaterialQuadlets, count: (Math.floor(atc.length / 4))}).qb64b)\n }\n msg = concat(msg, atc)\n\n return msg\n}","import {Algos, Manager} from \"../core/manager\";\nimport {MtrDex} from \"../core/matter\";\nimport {Salter} from \"../core/salter\";\nimport {Verfer} from \"../core/verfer\";\nimport {Diger} from \"../core/diger\";\nimport {incept} from \"../core/eventing\";\nimport {Serder} from \"../core/serder\";\n\n\nexport class TraitCodex {\n EstOnly: string = 'EO' // Only allow establishment events\n DoNotDelegate: string = 'DND' // Dot not allow delegated identifiers\n}\n\nexport const TraitDex = new TraitCodex()\n\nexport interface HaberyArgs {\n name: string\n passcode?: string\n seed?: string | undefined\n aeid?: string | undefined\n pidx?: number | undefined\n salt?: string | undefined\n tier?: string | undefined\n\n}\n\nexport interface MakeHabArgs {\n code?: string\n transferable?: boolean\n isith?: string\n icount?: number\n nsith?: string\n ncount?: number\n toad?: string | number\n wits?: Array<string>\n delpre?: string\n estOnly?: boolean\n DnD?: boolean\n data?: any\n}\n\nexport class Hab {\n public name: string\n public serder: Serder\n\n constructor(name: string, icp: Serder) {\n this.name = name\n this.serder = icp\n }\n\n get pre(): string {\n return this.serder.ked[\"i\"]\n }\n}\n\n\nexport class Habery {\n private readonly _name: string;\n private readonly _mgr: Manager;\n private readonly _habs: Map<string, Hab> = new Map<string, Hab>()\n\n constructor({name, passcode, seed, aeid, pidx, salt}: HaberyArgs) {\n this._name = name\n if (passcode != undefined && seed == undefined) {\n if (passcode.length < 21) {\n throw new Error(\"Bran (passcode seed material) too short.\")\n }\n\n let bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21) // qb64 salt for seed\n let signer = new Salter({qb64: bran}).signer(MtrDex.Ed25519_Seed, false)\n seed = signer.qb64\n if (aeid == undefined) {\n aeid = signer.verfer.qb64 // lest it remove encryption\n }\n }\n let algo;\n\n if (salt != undefined) {\n algo = Algos.salty\n salt = new Salter({qb64: salt}).qb64\n } else {\n algo = Algos.randy\n }\n\n this._mgr = new Manager({seed: seed, aeid: aeid, pidx: pidx, algo: algo, salt: salt})\n }\n\n get mgr(): Manager {\n return this._mgr\n }\n\n get habs(): Array<Hab> {\n return Array.from(this._habs.values())\n }\n\n habByName(name: string): Hab|undefined {\n return this._habs.get(name)\n }\n\n makeHab(name:string, {code = MtrDex.Blake3_256, transferable = true, isith = undefined, icount = 1,\n nsith = undefined, ncount = undefined, toad = undefined, wits = undefined, delpre = undefined,\n estOnly = false, DnD = false, data = undefined}: MakeHabArgs): Hab {\n\n if (nsith == undefined) {\n nsith = isith\n }\n if (ncount == undefined) {\n ncount = icount\n }\n if (!transferable) {\n ncount = 0\n nsith = \"0\"\n code = MtrDex.Ed25519N\n }\n\n let [verfers, digers] = this._mgr.incept({\n icount: icount, ncount: ncount, stem: this.name,\n transferable: transferable, temp: false\n })\n\n icount = verfers.length\n ncount = digers != undefined ? digers.length : 0\n if (isith == undefined) {\n isith = `${Math.max(1, Math.ceil(icount/2)).toString(16)}`\n }\n if (nsith == undefined) {\n nsith = `${Math.max(1, Math.ceil(ncount/2)).toString(16)}`\n }\n\n let cnfg = new Array<string>()\n if (estOnly) {\n cnfg.push(TraitDex.EstOnly)\n }\n if(DnD) {\n cnfg.push(TraitDex.DoNotDelegate)\n }\n\n let keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64)\n let ndigs = Array.from(digers, (diger: Diger) => diger.qb64)\n\n\n const icp = incept({keys, isith, ndigs, nsith, toad, wits, cnfg, data, code, delpre})\n const hab = new Hab(name, icp)\n this._habs.set(name, hab)\n return hab\n }\n\n get name(): string {\n return this._name\n }\n}"],"names":["EmptyMaterialError","err","_err","Error","Serials","Ident","Version","major","minor","Versionage","Ilks","icp","rot","ixn","dip","drt","rct","vrc","encoder","TextEncoder","decoder","TextDecoder","VEREX","deversify","versionString","kind","size","version","re","RegExp","match","exec","Object","values","includes","ta","versify","ident","KERI","JSON","undefined","toString","padStart","B64ChrByIdx","Map","B64IdxByChr","Array","from","entry","intToB64","i","l","out","get","Math","floor","x","length","b64ToInt","s","rev","reverse","forEach","c","e","b","encode","d","u","decode","readInt","array","value","Codex","has","prop","m","entries","v","MatterCodex","MtrDex","NonTransCodex","NonTransDex","DigiCodex","DigiDex","Sizage","hs","ss","fs","ls","Matter","raw","code","Ed25519N","qb64b","qb64","qb2","Uint8Array","sizage","Sizes","rize","_rawSize","slice","_code","_size","_raw","_exfil","_bexfil","cs","_leadSize","_infil","ps","both","bytes","odx","Base64","Buffer","first","Hards","keys","hard","pbs","base","join","paw","pi","subarray","li","Verfer","Ed25519","_verify","_ed25519","verify","sig","ser","key","libsodium","crypto_sign_verify_detached","error","Cigar","verfer","_verfer","IndexerCodex","IdrDex","IndexedSigCodex","IdxSigDex","IndexedCurrentSigCodex","IdxCrtSigDex","IndexedBothSigCodex","IdxBthSigDex","Xizage","os","Indexer","Ed25519_Sig","index","ondex","xizage","ms","Number","isInteger","rawsize","_index","_ondex","full","sindex","sondex","Siger","Signer","Ed25519_Seed","transferable","randombytes_buf","crypto_sign_SEEDBYTES","_sign","keypair","crypto_sign_seed_keypair","publicKey","sign","only","seed","crypto_sign_detached","concat","Ed25519_Crt_Sig","Ed25519_Big_Crt_Sig","Ed25519_Big_Sig","Salter","Salt_128","tier","salt","crypto_pwhash_SALTBYTES","_tier","stretch","path","temp","opslimit","memlimit","crypto_pwhash_OPSLIMIT_MIN","crypto_pwhash_MEMLIMIT_MIN","crypto_pwhash_OPSLIMIT_INTERACTIVE","crypto_pwhash_MEMLIMIT_INTERACTIVE","crypto_pwhash_OPSLIMIT_MODERATE","crypto_pwhash_MEMLIMIT_MODERATE","crypto_pwhash_OPSLIMIT_SENSITIVE","crypto_pwhash_MEMLIMIT_SENSITIVE","crypto_pwhash","crypto_pwhash_ALG_DEFAULT","signer","Decrypter","X25519_Private","sigkey","set","crypto_sign_ed25519_sk_to_curve25519","_decrypt","_x25519","decrypt","cipher","Cipher","prikey","pubkey","crypto_scalarmult_base","plain","crypto_box_seal_open","X25519_Cipher_Salt","X25519_Cipher_Seed","decrypter","arrayEquals","ar1","ar2","every","val","Encrypter","verkey","X25519","crypto_sign_ed25519_pk_to_curve25519","_encrypt","verifySeed","encrypt","matter","crypto_box_seal","Diger","Blake3_256","hasher","createHash","dig","update","digest","blake3_256","compare","diger","Algos","PubLot","PreSit","PrePrm","salty","PubSet","PubPath","Keys","signers","paths","_signers","_paths","RandyCreator","create","codes","count","fill","push","SaltyCreator","stem","salter","_stem","pidx","ridx","kidx","idx","Creatory","algo","randy","_make","_makeRandy","_makeSalty","make","args","Manager","ks","aeid","_ks","Keeper","_seed","_encrypter","_decrypter","updateAeid","prmsElements","data","pinPrms","prisElements","pubKey","pinPris","pinGbls","incept","icodes","icount","icode","ncodes","ncount","ncode","dcode","rooted","creator","ikeys","verfers","nkeys","digers","pp","encrypter","dt","Date","nw","pubs","nt","nxt","pre","putPres","putPrms","putSits","putPris","ppt","putPths","pubSet","putPubs","riKey","nxtPubSet","move","old","gnu","getPres","oldprm","getPrms","oldsit","getSits","remPrms","remSits","pl","getPubs","pinPres","rotate","erase","pub","getPris","pinSits","newPs","remPris","indexed","indices","ondices","getPths","sigers","o","cigars","getGbls","parseInt","_salt","a","_gbls","_pris","_pths","_pres","_prms","_sits","_pubs","pinPths","Tholder","sith","processSith","_sith","_thold","_limen","_weighted","weighted","thold","PNumber","num","numh","_num","Serder","ked","_kind","_exhale","sizeify","pretty","stringify","_ked","kd","_ident","_version","dumps","knd","Dummy","Prefixer","_derive","_derive_ed25519N","_derive_ed25519","_derive_blake3_256","_verify_ed25519N","_verify_ed25519","_verify_blake3_256","derive","prefixed","next","backers","anchor","ilk","crymat","Ids","Digestage","klas","Saider","sad","label","digestive","_digest_size","_length","Digests","digestage","cpa","_serialze","versioned","dsad","saider","saidify","ample","n","f","weak","max","f1","f2","ceil","min","m1","m2","isith","ndigs","nsith","toad","wits","cnfg","intive","delpre","vs","sner","tholder","ntholder","Set","toader","t","kt","k","bt","prefixer","TraitCodex","TraitDex","Hab","name","serder","Habery","passcode","_name","bran","substring","_mgr","habByName","_habs","makeHab","estOnly","DnD","EstOnly","DoNotDelegate","hab"],"mappings":"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AAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EACxG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAC5G,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAC5G,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAC5G,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CA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,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAClH,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAC5G,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAC5G,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,C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"}