diff --git a/maintainers.md b/maintainers.md index b9851e7..69094b3 100644 --- a/maintainers.md +++ b/maintainers.md @@ -4,8 +4,8 @@ This page lists all active maintainers of this repository. ## Author (from [signify-ts](https://github.com/WebOfTrust/signify-ts)) -- pfeairheller +- pfeairheller ## Maintainers (in alphabetical order) -- jrayback +- jrayback diff --git a/package-lock.json b/package-lock.json index 18a2b64..2282918 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,18 +9,15 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "blake3": "^2.1.7", - "ecdsa-secp256r1": "^1.3.3", - "libsodium-wrappers-sumo": "^0.7.13", - "text-encoding": "^0.7.0", - "urlsafe-base64": "^1.0.0" + "@noble/curves": "^1.2.0", + "@noble/hashes": "^1.3.2", + "buffer": "^6.0.3", + "libsodium-wrappers-sumo": "^0.7.13" }, "devDependencies": { "@types/jest": "^29.5.8", "@types/libsodium-wrappers-sumo": "^0.7.8", "@types/node": "^20.9.0", - "@types/text-encoding": "^0.0.39", - "@types/urlsafe-base64": "^1.0.31", "@typescript-eslint/eslint-plugin": "^6.13.1", "@typescript-eslint/parser": "^6.13.1", "depcheck": "^1.4.7", @@ -1184,6 +1181,28 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1405,21 +1424,6 @@ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, - "node_modules/@types/text-encoding": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/text-encoding/-/text-encoding-0.0.39.tgz", - "integrity": "sha512-gRPvgL1aMgP6Pv92Rs310cJvVQ86DSF62E7K30g1FoGmmYWXoNuXT8PV835iAVeiAZkRwr2IW37KuyDn9ljmeA==", - "dev": true - }, - "node_modules/@types/urlsafe-base64": { - "version": "1.0.31", - "resolved": "https://registry.npmjs.org/@types/urlsafe-base64/-/urlsafe-base64-1.0.31.tgz", - "integrity": "sha512-f+l5StyboXmVsjTXLUkNHu8FptkdJ6iGl7z7nKBQVQwvSDulzi+Ov5Rtuq6c43jHYjSHax7Mplr1ldweOdFohg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/yargs": { "version": "17.0.31", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz", @@ -1938,17 +1942,6 @@ "node": ">=8" } }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -2062,16 +2055,24 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/blake3": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/blake3/-/blake3-2.1.7.tgz", - "integrity": "sha512-5d+TdKJvju96IyEaGJ0eO6CHbckWi+NBrCezGYM/WsnI3R03aLL2TWfsuZSh1rs0fTv/L3ps/r0vykjYurcIwA==", - "hasInstallScript": true - }, - "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -2148,6 +2149,29 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -2620,15 +2644,6 @@ "node": ">=6.0.0" } }, - "node_modules/ecdsa-secp256r1": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/ecdsa-secp256r1/-/ecdsa-secp256r1-1.3.3.tgz", - "integrity": "sha512-7JkHQ43iv9vT1U9tyGuxcE4+SMF/da+YiIMRpcwmbHmJQmqfFUuT6c7LKMasJ9soEpwFL0b9JyNkRjQ+vjVgpQ==", - "dependencies": { - "asn1.js": "^5.0.1", - "bn.js": "^4.11.8" - } - }, "node_modules/electron-to-chromium": { "version": "1.4.582", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.582.tgz", @@ -3383,6 +3398,25 @@ "node": ">=10.17.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", @@ -3458,7 +3492,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "1.3.8", @@ -4532,11 +4567,6 @@ "node": ">=6" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -5129,11 +5159,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -5344,12 +5369,6 @@ "node": ">=8" } }, - "node_modules/text-encoding": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", - "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", - "deprecated": "no longer maintained" - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -5605,11 +5624,6 @@ "punycode": "^2.1.0" } }, - "node_modules/urlsafe-base64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", - "integrity": "sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==" - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", diff --git a/package.json b/package.json index e8c7fc9..d1734fa 100644 --- a/package.json +++ b/package.json @@ -27,8 +27,6 @@ "@types/jest": "^29.5.8", "@types/libsodium-wrappers-sumo": "^0.7.8", "@types/node": "^20.9.0", - "@types/text-encoding": "^0.0.39", - "@types/urlsafe-base64": "^1.0.31", "@typescript-eslint/eslint-plugin": "^6.13.1", "@typescript-eslint/parser": "^6.13.1", "depcheck": "^1.4.7", @@ -41,14 +39,9 @@ "typescript": "^5.2.2" }, "dependencies": { - "blake3": "^2.1.7", - "ecdsa-secp256r1": "^1.3.3", - "libsodium-wrappers-sumo": "^0.7.13", - "text-encoding": "^0.7.0", - "urlsafe-base64": "^1.0.0" - }, - "overrides": { - "blake3-wasm": "^2.1.7", - "@c4312/blake3-internal": "^2.1.7" + "@noble/curves": "^1.2.0", + "@noble/hashes": "^1.3.2", + "buffer": "^6.0.3", + "libsodium-wrappers-sumo": "^0.7.13" } } diff --git a/src/bexter.ts b/src/bexter.ts index bf1abfc..4b06314 100644 --- a/src/bexter.ts +++ b/src/bexter.ts @@ -1,6 +1,6 @@ import { BexDex, Matter, MatterArgs, MtrDex } from './matter'; import { EmptyMaterialError } from './kering'; -import Base64 from 'urlsafe-base64'; +import { Buffer } from 'buffer'; const B64REX = '^[A-Za-z0-9\\-_]*$'; export const Reb64 = new RegExp(B64REX); @@ -114,7 +114,7 @@ export class Bexter extends Matter { const wad = new Array(ws); wad.fill('A'); const base = wad.join('') + bext; // pre pad with wad of zeros in Base64 == 'A' - const raw = Base64.decode(base); // [ls:] // convert and remove leader + const raw = Buffer.from(base, 'base64url'); // [ls:] // convert and remove leader return Uint8Array.from(raw).subarray(ls); // raw binary equivalent of text } @@ -122,7 +122,7 @@ export class Bexter extends Matter { get bext(): string { const sizage = Matter.Sizes.get(this.code); const wad = Uint8Array.from(new Array(sizage?.ls).fill(0)); - const bext = Base64.encode(Buffer.from([...wad, ...this.raw])); + const bext = Buffer.from([...wad, ...this.raw]).toString('base64url'); let ws = 0; if (sizage?.ls === 0 && bext !== undefined) { diff --git a/src/core.ts b/src/core.ts index f9ff97b..6d4d148 100644 --- a/src/core.ts +++ b/src/core.ts @@ -1,5 +1,3 @@ -// import {TextEncoder, TextDecoder} from 'util' -import { TextEncoder, TextDecoder } from 'text-encoding'; export enum Serials { JSON = 'JSON', } diff --git a/src/diger.ts b/src/diger.ts index 6ee1706..908db15 100644 --- a/src/diger.ts +++ b/src/diger.ts @@ -1,4 +1,4 @@ -import { createHash } from 'blake3'; +import { blake3 } from '@noble/hashes/blake3'; import { Matter, MatterArgs, MtrDex } from './matter'; @@ -25,8 +25,7 @@ export class Diger extends Matter { } if (code === MtrDex.Blake3_256) { - const hasher = createHash(); - const dig = hasher.update(ser).digest(''); + const dig = blake3.create({}).update(ser).digest(); super({ raw: dig, code: code }); } else { throw new Error(`Unsupported code = ${code} for digester.`); @@ -74,8 +73,7 @@ export class Diger extends Matter { } blake3_256(ser: Uint8Array, dig: any) { - const hasher = createHash(); - const digest = hasher.update(ser).digest(''); + const digest = blake3.create({}).update(ser).digest(); return digest.toString() === dig.toString(); } } diff --git a/src/indexer.ts b/src/indexer.ts index 8649ca5..ae7ac8d 100644 --- a/src/indexer.ts +++ b/src/indexer.ts @@ -1,6 +1,5 @@ import { EmptyMaterialError } from './kering'; import { b, b64ToInt, d, intToB64, readInt } from './core'; -import Base64 from 'urlsafe-base64'; import { Buffer } from 'buffer'; export class IndexerCodex { @@ -399,7 +398,10 @@ export class Indexer { } const full = - both + Base64.encode(Buffer.from(bytes)).slice(ps - xizage.ls); + both + + Buffer.from(bytes) + .toString('base64url') + .slice(ps - xizage.ls); if (full.length != xizage.fs) { throw new Error(`Invalid code=${both} for raw size=${raw.length}.`); } @@ -474,7 +476,7 @@ export class Indexer { let raw; if (ps != 0) { const base = new Array(ps + 1).join('A') + qb64.slice(cs); - const paw = Base64.decode(base); // decode base to leave prepadded raw + const paw = Buffer.from(base, 'base64url'); // decode base to leave prepadded raw const pi = readInt(paw.slice(0, ps)); // prepad as int if (pi & (2 ** pbs - 1)) { // masked pad bits non-zero @@ -485,7 +487,7 @@ export class Indexer { raw = paw.slice(ps); // strip off ps prepad paw bytes } else { const base = qb64.slice(cs); - const paw = Base64.decode(base); + const paw = Buffer.from(base, 'base64url'); const li = readInt(paw.slice(0, xizage!.ls)); if (li != 0) { if (li == 1) { diff --git a/src/matter.ts b/src/matter.ts index 8abaedf..da6cf53 100644 --- a/src/matter.ts +++ b/src/matter.ts @@ -1,7 +1,6 @@ import { EmptyMaterialError } from './kering'; import { intToB64, readInt } from './core'; -import Base64 from 'urlsafe-base64'; import { b, d } from './core'; import { Buffer } from 'buffer'; @@ -421,7 +420,7 @@ export class Matter { bytes[odx] = raw[i]; } - return both + Base64.encode(Buffer.from(bytes)); + return both + Buffer.from(bytes).toString('base64url'); } else { const both = code; const cs = both.length; @@ -443,7 +442,12 @@ export class Matter { bytes[odx] = raw[i]; } - return both + Base64.encode(Buffer.from(bytes)).slice(cs % 4); + return ( + both + + Buffer.from(bytes) + .toString('base64url') + .slice(cs % 4) + ); } } @@ -487,7 +491,7 @@ export class Matter { let raw; if (ps != 0) { const base = new Array(ps + 1).join('A') + qb64.slice(cs); - const paw = Base64.decode(base); // decode base to leave prepadded raw + const paw = Buffer.from(base, 'base64url'); // decode base to leave prepadded raw const pi = readInt(paw.subarray(0, ps)); // prepad as int if (pi & (2 ** pbs - 1)) { // masked pad bits non-zero @@ -498,7 +502,7 @@ export class Matter { raw = paw.subarray(ps); // strip off ps prepad paw bytes } else { const base = qb64.slice(cs); - const paw = Base64.decode(base); + const paw = Buffer.from(base, 'base64url'); const li = readInt(paw.subarray(0, sizage!.ls)); if (li != 0) { if (li == 1) { diff --git a/src/prefixer.ts b/src/prefixer.ts index 53b7fe5..cc23e38 100644 --- a/src/prefixer.ts +++ b/src/prefixer.ts @@ -4,7 +4,7 @@ import { Dict, Ilks } from './core'; import { sizeify } from './serder'; import { Verfer } from './verfer'; -import { createHash } from 'blake3'; +import { blake3 } from '@noble/hashes/blake3'; const Dummy: string = '#'; @@ -148,8 +148,7 @@ export class Prefixer extends Matter { kd['i'] = ''.padStart(Matter.Sizes.get(MtrDex.Blake3_256)!.fs!, Dummy); kd['d'] = ked['i']; const [raw] = sizeify(ked); - const hasher = createHash(); - const dig = hasher.update(raw).digest(''); + const dig = blake3.create({}).update(raw).digest(); return [dig, MtrDex.Blake3_256]; } diff --git a/src/saider.ts b/src/saider.ts index af9ee7f..7d05acb 100644 --- a/src/saider.ts +++ b/src/saider.ts @@ -3,7 +3,7 @@ import { deversify, Dict, Serials } from './core'; import { EmptyMaterialError } from './kering'; import { dumps, sizeify } from './serder'; -import { createHash } from 'blake3'; +import { blake3 } from '@noble/hashes/blake3'; const Dummy = '#'; @@ -74,8 +74,7 @@ export class Saider extends Matter { _digest_size: number, _length: number ) { - const hasher = createHash(); - return hasher.update(ser).digest(''); + return blake3.create({}).update(ser).digest(); } private static _derive( diff --git a/src/verfer.ts b/src/verfer.ts index caf7c85..81c7baa 100644 --- a/src/verfer.ts +++ b/src/verfer.ts @@ -1,7 +1,7 @@ export {}; import libsodium from 'libsodium-wrappers-sumo'; import { Matter, MatterArgs, MtrDex } from './matter'; -import secp256r1 from 'ecdsa-secp256r1'; +import { p256 } from '@noble/curves/p256'; /** * @description Verfer :sublclass of Matter,helps to verify signature of serialization @@ -38,8 +38,8 @@ export class Verfer extends Matter { } _secp256r1(sig: any, ser: any, key: any) { try { - const publicKey = secp256r1.fromCompressedPublicKey(key); - return publicKey.verify(ser, sig); + const publicKey = key; + return p256.verify(sig, ser, key); } catch (error) { throw new Error(error as string); } diff --git a/test/diger.test.ts b/test/diger.test.ts index ec1fad8..2f4848e 100644 --- a/test/diger.test.ts +++ b/test/diger.test.ts @@ -1,6 +1,6 @@ import { Matter } from '../src/matter'; -import { createHash } from 'blake3'; +import { blake3 } from '@noble/hashes/blake3'; import { strict as assert } from 'assert'; import { Diger } from '../src/diger'; @@ -14,8 +14,7 @@ describe('Diger', () => { 'abcdefghijklmnopqrstuvwxyz0123456789', 'binary' ); - const hasher = createHash(); - const digest = hasher.update(ser).digest(''); + const digest = blake3.create({}).update(ser).digest(); let diger = new Diger({ raw: digest }); assert.deepStrictEqual(diger.code, MtrDex.Blake3_256); diff --git a/test/indexer.test.ts b/test/indexer.test.ts index db166a8..f59e82b 100644 --- a/test/indexer.test.ts +++ b/test/indexer.test.ts @@ -2,7 +2,6 @@ import libsodium from 'libsodium-wrappers-sumo'; import { strict as assert } from 'assert'; import { IdrDex, Indexer } from '../src/indexer'; import { b, intToB64 } from '../src/core'; -import Base64 from 'urlsafe-base64'; import { Buffer } from 'buffer'; describe('Indexer', () => { @@ -68,7 +67,7 @@ describe('Indexer', () => { const odx = i + ps; bytes[odx] = sig[i]; } - const sig64 = Base64.encode(Buffer.from(bytes)); + const sig64 = Buffer.from(bytes).toString('base64url'); assert.equal(sig64.length, 88); assert.equal( sig64, @@ -85,7 +84,7 @@ describe('Indexer', () => { assert.equal(qsig64.length, 88); let qsig64b = b(qsig64); - let qsig2b = Base64.decode(qsig64); + let qsig2b = Buffer.from(qsig64, 'base64url'); assert.equal(qsig2b.length, 66); // assert qsig2b == (b"\x00\x00\x99\xd2<9$$0\x9fk\xfb\x18\xa0\x8c@r\x122.k\xb2\xc7\x1fp\x0e'm" // b'\x8f@\xaa\xa5\x8c\xc8n\x85\xc8!\xf6q\x91p\xa9\xec\xcf\x92\xaf)' @@ -166,7 +165,7 @@ describe('Indexer', () => { qsig64 = 'AFCZ0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ'; qsig64b = b(qsig64); - qsig2b = Base64.decode(qsig64); + qsig2b = Buffer.from(qsig64, 'base64url'); assert.equal(qsig2b.length, 66); indexer = new Indexer({ raw: sig, code: IdrDex.Ed25519_Sig, index: 5 }); diff --git a/test/verfer.test.ts b/test/verfer.test.ts index 15fb966..79c23c7 100644 --- a/test/verfer.test.ts +++ b/test/verfer.test.ts @@ -2,16 +2,8 @@ import { MtrDex } from '../src/matter'; import libsodium from 'libsodium-wrappers-sumo'; import { strict as assert } from 'assert'; import { Verfer } from '../src/verfer'; -import secp256r1 from 'ecdsa-secp256r1'; - -function base64ToUint8Array(base64: string) { - const binaryString = atob(base64); - const bytes = new Uint8Array(binaryString.length); - for (let i = 0; i < binaryString.length; i++) { - bytes[i] = binaryString.charCodeAt(i); - } - return new Uint8Array(bytes.buffer); -} +import { p256 } from '@noble/curves/p256'; +import { Buffer } from 'buffer'; describe('Verfer', () => { it('should verify digests', async () => { @@ -47,19 +39,17 @@ describe('Verfer', () => { ); }); it('should verify secp256r1', async () => { - const privateKey = secp256r1.generateKey(); - const publicKey = base64ToUint8Array( - privateKey.toCompressedPublicKey() - ); + const privateKey = p256.utils.randomPrivateKey(); + const publicKey = p256.getPublicKey(privateKey); let verfer = new Verfer({ raw: publicKey, code: MtrDex.ECDSA_256r1 }); assert.notEqual(verfer, null); assert.deepStrictEqual(verfer.raw, publicKey); assert.deepStrictEqual(verfer.code, MtrDex.ECDSA_256r1); - const ser = 'abcdefghijklmnopqrstuvwxyz0123456789'; + const ser = Buffer.from('abcdefghijklmnopqrstuvwxyz0123456789', 'hex'); - const sig = privateKey.sign(ser); + const sig = Buffer.from(p256.sign(ser, privateKey).toCompactRawBytes()); assert.equal(verfer.verify(sig, ser), true);