@atproto/crypto 0.3.0 → 0.3.1-next.0

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 (91) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/LICENSE.txt +1 -1
  3. package/dist/const.d.ts +1 -0
  4. package/dist/const.d.ts.map +1 -0
  5. package/dist/const.js +10 -0
  6. package/dist/const.js.map +1 -0
  7. package/dist/did.d.ts +2 -1
  8. package/dist/did.d.ts.map +1 -0
  9. package/dist/did.js +68 -0
  10. package/dist/did.js.map +1 -0
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +27 -3351
  14. package/dist/index.js.map +1 -7
  15. package/dist/multibase.d.ts +1 -0
  16. package/dist/multibase.d.ts.map +1 -0
  17. package/dist/multibase.js +76 -0
  18. package/dist/multibase.js.map +1 -0
  19. package/dist/p256/encoding.d.ts +1 -0
  20. package/dist/p256/encoding.d.ts.map +1 -0
  21. package/dist/p256/encoding.js +18 -0
  22. package/dist/p256/encoding.js.map +1 -0
  23. package/dist/p256/keypair.d.ts +3 -2
  24. package/dist/p256/keypair.d.ts.map +1 -0
  25. package/dist/p256/keypair.js +94 -0
  26. package/dist/p256/keypair.js.map +1 -0
  27. package/dist/p256/operations.d.ts +1 -0
  28. package/dist/p256/operations.d.ts.map +1 -0
  29. package/dist/p256/operations.js +41 -0
  30. package/dist/p256/operations.js.map +1 -0
  31. package/dist/p256/plugin.d.ts +1 -0
  32. package/dist/p256/plugin.d.ts.map +1 -0
  33. package/dist/p256/plugin.js +15 -0
  34. package/dist/p256/plugin.js.map +1 -0
  35. package/dist/plugins.d.ts +1 -0
  36. package/dist/plugins.d.ts.map +1 -0
  37. package/dist/plugins.js +11 -0
  38. package/dist/plugins.js.map +1 -0
  39. package/dist/random.d.ts +1 -0
  40. package/dist/random.d.ts.map +1 -0
  41. package/dist/random.js +44 -0
  42. package/dist/random.js.map +1 -0
  43. package/dist/secp256k1/encoding.d.ts +1 -0
  44. package/dist/secp256k1/encoding.d.ts.map +1 -0
  45. package/dist/secp256k1/encoding.js +18 -0
  46. package/dist/secp256k1/encoding.js.map +1 -0
  47. package/dist/secp256k1/keypair.d.ts +3 -2
  48. package/dist/secp256k1/keypair.d.ts.map +1 -0
  49. package/dist/secp256k1/keypair.js +94 -0
  50. package/dist/secp256k1/keypair.js.map +1 -0
  51. package/dist/secp256k1/operations.d.ts +1 -0
  52. package/dist/secp256k1/operations.d.ts.map +1 -0
  53. package/dist/secp256k1/operations.js +64 -0
  54. package/dist/secp256k1/operations.js.map +1 -0
  55. package/dist/secp256k1/plugin.d.ts +1 -0
  56. package/dist/secp256k1/plugin.d.ts.map +1 -0
  57. package/dist/secp256k1/plugin.js +15 -0
  58. package/dist/secp256k1/plugin.js.map +1 -0
  59. package/dist/sha.d.ts +2 -0
  60. package/dist/sha.d.ts.map +1 -0
  61. package/dist/sha.js +40 -0
  62. package/dist/sha.js.map +1 -0
  63. package/dist/types.d.ts +8 -2
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +3 -0
  66. package/dist/types.js.map +1 -0
  67. package/dist/utils.d.ts +4 -0
  68. package/dist/utils.d.ts.map +1 -0
  69. package/dist/utils.js +47 -0
  70. package/dist/utils.js.map +1 -0
  71. package/dist/verify.d.ts +1 -0
  72. package/dist/verify.d.ts.map +1 -0
  73. package/dist/verify.js +48 -0
  74. package/dist/verify.js.map +1 -0
  75. package/jest.config.js +3 -3
  76. package/package.json +8 -6
  77. package/src/did.ts +13 -35
  78. package/src/p256/keypair.ts +8 -6
  79. package/src/p256/operations.ts +8 -6
  80. package/src/p256/plugin.ts +7 -2
  81. package/src/secp256k1/keypair.ts +9 -7
  82. package/src/secp256k1/operations.ts +6 -4
  83. package/src/secp256k1/plugin.ts +7 -2
  84. package/src/sha.ts +7 -0
  85. package/src/types.ts +7 -0
  86. package/src/utils.ts +23 -0
  87. package/tests/signatures.test.ts +2 -1
  88. package/tsconfig.build.json +6 -2
  89. package/tsconfig.json +5 -7
  90. package/tsconfig.tests.json +7 -0
  91. package/build.js +0 -14
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/p256/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGvC,eAAO,MAAM,UAAU,EAAE,YAOxB,CAAA;AAED,eAAe,UAAU,CAAA"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.p256Plugin = void 0;
4
+ const operations_1 = require("./operations");
5
+ const encoding_1 = require("./encoding");
6
+ const const_1 = require("../const");
7
+ exports.p256Plugin = {
8
+ prefix: const_1.P256_DID_PREFIX,
9
+ jwtAlg: const_1.P256_JWT_ALG,
10
+ verifySignature: operations_1.verifyDidSig,
11
+ compressPubkey: encoding_1.compressPubkey,
12
+ decompressPubkey: encoding_1.decompressPubkey,
13
+ };
14
+ exports.default = exports.p256Plugin;
15
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/p256/plugin.ts"],"names":[],"mappings":";;;AAAA,6CAA2C;AAC3C,yCAA6D;AAG7D,oCAAwD;AAE3C,QAAA,UAAU,GAAiB;IACtC,MAAM,EAAE,uBAAe;IACvB,MAAM,EAAE,oBAAY;IACpB,eAAe,EAAE,yBAAY;IAE7B,cAAc,EAAd,yBAAc;IACd,gBAAgB,EAAhB,2BAAgB;CACjB,CAAA;AAED,kBAAe,kBAAU,CAAA"}
package/dist/plugins.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export declare const plugins: import("./types").DidKeyPlugin[];
2
2
  export default plugins;
3
+ //# sourceMappingURL=plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,kCAAgC,CAAA;AAEpD,eAAe,OAAO,CAAA"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.plugins = void 0;
7
+ const plugin_1 = __importDefault(require("./p256/plugin"));
8
+ const plugin_2 = __importDefault(require("./secp256k1/plugin"));
9
+ exports.plugins = [plugin_1.default, plugin_2.default];
10
+ exports.default = exports.plugins;
11
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":";;;;;;AAAA,2DAAsC;AACtC,gEAAgD;AAEnC,QAAA,OAAO,GAAG,CAAC,gBAAU,EAAE,gBAAe,CAAC,CAAA;AAEpD,kBAAe,eAAO,CAAA"}
package/dist/random.d.ts CHANGED
@@ -3,3 +3,4 @@ import { SupportedEncodings } from 'uint8arrays/to-string';
3
3
  export declare const randomBytes: typeof noble.randomBytes;
4
4
  export declare const randomStr: (byteLength: number, encoding: SupportedEncodings) => string;
5
5
  export declare const randomIntFromSeed: (seed: string, high: number, low?: number) => Promise<number>;
6
+ //# sourceMappingURL=random.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../src/random.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAG1D,eAAO,MAAM,WAAW,0BAAoB,CAAA;AAE5C,eAAO,MAAM,SAAS,eACR,MAAM,YACR,kBAAkB,KAC3B,MAGF,CAAA;AAED,eAAO,MAAM,iBAAiB,SACtB,MAAM,QACN,MAAM,mBAEX,QAAQ,MAAM,CAMhB,CAAA"}
package/dist/random.js ADDED
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.randomIntFromSeed = exports.randomStr = exports.randomBytes = void 0;
27
+ const noble = __importStar(require("@noble/hashes/utils"));
28
+ const uint8arrays = __importStar(require("uint8arrays"));
29
+ const sha_1 = require("./sha");
30
+ exports.randomBytes = noble.randomBytes;
31
+ const randomStr = (byteLength, encoding) => {
32
+ const bytes = (0, exports.randomBytes)(byteLength);
33
+ return uint8arrays.toString(bytes, encoding);
34
+ };
35
+ exports.randomStr = randomStr;
36
+ const randomIntFromSeed = async (seed, high, low = 0) => {
37
+ const hash = await (0, sha_1.sha256)(seed);
38
+ const number = Buffer.from(hash).readUintBE(0, 6);
39
+ const range = high - low;
40
+ const normalized = number % range;
41
+ return normalized + low;
42
+ };
43
+ exports.randomIntFromSeed = randomIntFromSeed;
44
+ //# sourceMappingURL=random.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.js","sourceRoot":"","sources":["../src/random.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2DAA4C;AAC5C,yDAA0C;AAE1C,+BAA8B;AAEjB,QAAA,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;AAErC,MAAM,SAAS,GAAG,CACvB,UAAkB,EAClB,QAA4B,EACpB,EAAE;IACV,MAAM,KAAK,GAAG,IAAA,mBAAW,EAAC,UAAU,CAAC,CAAA;IACrC,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AAC9C,CAAC,CAAA;AANY,QAAA,SAAS,aAMrB;AAEM,MAAM,iBAAiB,GAAG,KAAK,EACpC,IAAY,EACZ,IAAY,EACZ,GAAG,GAAG,CAAC,EACU,EAAE;IACnB,MAAM,IAAI,GAAG,MAAM,IAAA,YAAM,EAAC,IAAI,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACjD,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG,CAAA;IACxB,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,CAAA;IACjC,OAAO,UAAU,GAAG,GAAG,CAAA;AACzB,CAAC,CAAA;AAVY,QAAA,iBAAiB,qBAU7B"}
@@ -1,2 +1,3 @@
1
1
  export declare const compressPubkey: (pubkeyBytes: Uint8Array) => Uint8Array;
2
2
  export declare const decompressPubkey: (compressed: Uint8Array) => Uint8Array;
3
+ //# sourceMappingURL=encoding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/secp256k1/encoding.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,gBAAiB,UAAU,KAAG,UAGxD,CAAA;AAED,eAAO,MAAM,gBAAgB,eAAgB,UAAU,KAAG,UAMzD,CAAA"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decompressPubkey = exports.compressPubkey = void 0;
4
+ const secp256k1_1 = require("@noble/curves/secp256k1");
5
+ const compressPubkey = (pubkeyBytes) => {
6
+ const point = secp256k1_1.secp256k1.ProjectivePoint.fromHex(pubkeyBytes);
7
+ return point.toRawBytes(true);
8
+ };
9
+ exports.compressPubkey = compressPubkey;
10
+ const decompressPubkey = (compressed) => {
11
+ if (compressed.length !== 33) {
12
+ throw new Error('Expected 33 byte compress pubkey');
13
+ }
14
+ const point = secp256k1_1.secp256k1.ProjectivePoint.fromHex(compressed);
15
+ return point.toRawBytes(false);
16
+ };
17
+ exports.decompressPubkey = decompressPubkey;
18
+ //# sourceMappingURL=encoding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../src/secp256k1/encoding.ts"],"names":[],"mappings":";;;AAAA,uDAA2D;AAEpD,MAAM,cAAc,GAAG,CAAC,WAAuB,EAAc,EAAE;IACpE,MAAM,KAAK,GAAG,qBAAI,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACvD,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AAC/B,CAAC,CAAA;AAHY,QAAA,cAAc,kBAG1B;AAEM,MAAM,gBAAgB,GAAG,CAAC,UAAsB,EAAc,EAAE;IACrE,IAAI,UAAU,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrD,CAAC;IACD,MAAM,KAAK,GAAG,qBAAI,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACtD,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;AAChC,CAAC,CAAA;AANY,QAAA,gBAAgB,oBAM5B"}
@@ -1,6 +1,6 @@
1
- import { SupportedEncodings } from 'uint8arrays/util/bases';
1
+ import { SupportedEncodings } from 'uint8arrays/to-string';
2
2
  import { Keypair } from '../types';
3
- export declare type Secp256k1KeypairOptions = {
3
+ export type Secp256k1KeypairOptions = {
4
4
  exportable: boolean;
5
5
  };
6
6
  export declare class Secp256k1Keypair implements Keypair {
@@ -18,3 +18,4 @@ export declare class Secp256k1Keypair implements Keypair {
18
18
  export(): Promise<Uint8Array>;
19
19
  }
20
20
  export default Secp256k1Keypair;
21
+ //# sourceMappingURL=keypair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keypair.d.ts","sourceRoot":"","sources":["../../src/secp256k1/keypair.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAI1D,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAElC,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,qBAAa,gBAAiB,YAAW,OAAO;IAIlC,OAAO,CAAC,UAAU;IAAc,OAAO,CAAC,UAAU;IAH9D,MAAM,SAAoB;IAC1B,OAAO,CAAC,SAAS,CAAY;gBAET,UAAU,EAAE,UAAU,EAAU,UAAU,EAAE,OAAO;WAI1D,MAAM,CACjB,IAAI,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GACtC,OAAO,CAAC,gBAAgB,CAAC;WAMf,MAAM,CACjB,OAAO,EAAE,UAAU,GAAG,MAAM,EAC5B,IAAI,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GACtC,OAAO,CAAC,gBAAgB,CAAC;IAO5B,cAAc,IAAI,UAAU;IAI5B,YAAY,CAAC,QAAQ,GAAE,kBAAgC,GAAG,MAAM;IAIhE,GAAG,IAAI,MAAM;IAIP,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAO1C,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC;CAMpC;AAED,eAAe,gBAAgB,CAAA"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Secp256k1Keypair = void 0;
27
+ const secp256k1_1 = require("@noble/curves/secp256k1");
28
+ const sha256_1 = require("@noble/hashes/sha256");
29
+ const uint8arrays_1 = require("uint8arrays");
30
+ const const_1 = require("../const");
31
+ const did = __importStar(require("../did"));
32
+ class Secp256k1Keypair {
33
+ constructor(privateKey, exportable) {
34
+ Object.defineProperty(this, "privateKey", {
35
+ enumerable: true,
36
+ configurable: true,
37
+ writable: true,
38
+ value: privateKey
39
+ });
40
+ Object.defineProperty(this, "exportable", {
41
+ enumerable: true,
42
+ configurable: true,
43
+ writable: true,
44
+ value: exportable
45
+ });
46
+ Object.defineProperty(this, "jwtAlg", {
47
+ enumerable: true,
48
+ configurable: true,
49
+ writable: true,
50
+ value: const_1.SECP256K1_JWT_ALG
51
+ });
52
+ Object.defineProperty(this, "publicKey", {
53
+ enumerable: true,
54
+ configurable: true,
55
+ writable: true,
56
+ value: void 0
57
+ });
58
+ this.publicKey = secp256k1_1.secp256k1.getPublicKey(privateKey);
59
+ }
60
+ static async create(opts) {
61
+ const { exportable = false } = opts || {};
62
+ const privKey = secp256k1_1.secp256k1.utils.randomPrivateKey();
63
+ return new Secp256k1Keypair(privKey, exportable);
64
+ }
65
+ static async import(privKey, opts) {
66
+ const { exportable = false } = opts || {};
67
+ const privKeyBytes = typeof privKey === 'string' ? (0, uint8arrays_1.fromString)(privKey, 'hex') : privKey;
68
+ return new Secp256k1Keypair(privKeyBytes, exportable);
69
+ }
70
+ publicKeyBytes() {
71
+ return this.publicKey;
72
+ }
73
+ publicKeyStr(encoding = 'base64pad') {
74
+ return (0, uint8arrays_1.toString)(this.publicKey, encoding);
75
+ }
76
+ did() {
77
+ return did.formatDidKey(this.jwtAlg, this.publicKey);
78
+ }
79
+ async sign(msg) {
80
+ const msgHash = await (0, sha256_1.sha256)(msg);
81
+ // return raw 64 byte sig not DER-encoded
82
+ const sig = await secp256k1_1.secp256k1.sign(msgHash, this.privateKey, { lowS: true });
83
+ return sig.toCompactRawBytes();
84
+ }
85
+ async export() {
86
+ if (!this.exportable) {
87
+ throw new Error('Private key is not exportable');
88
+ }
89
+ return this.privateKey;
90
+ }
91
+ }
92
+ exports.Secp256k1Keypair = Secp256k1Keypair;
93
+ exports.default = Secp256k1Keypair;
94
+ //# sourceMappingURL=keypair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keypair.js","sourceRoot":"","sources":["../../src/secp256k1/keypair.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAA2D;AAC3D,iDAA6C;AAC7C,6CAGoB;AAGpB,oCAA4C;AAC5C,4CAA6B;AAO7B,MAAa,gBAAgB;IAI3B,YAAoB,UAAsB,EAAU,UAAmB;QAA3D;;;;mBAAQ,UAAU;WAAY;QAAE;;;;mBAAQ,UAAU;WAAS;QAHvE;;;;mBAAS,yBAAiB;WAAA;QAClB;;;;;WAAqB;QAG3B,IAAI,CAAC,SAAS,GAAG,qBAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,IAAuC;QAEvC,MAAM,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,IAAI,IAAI,EAAE,CAAA;QACzC,MAAM,OAAO,GAAG,qBAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAA;QAC7C,OAAO,IAAI,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,OAA4B,EAC5B,IAAuC;QAEvC,MAAM,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,IAAI,IAAI,EAAE,CAAA;QACzC,MAAM,YAAY,GAChB,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,wBAAa,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;QACvE,OAAO,IAAI,gBAAgB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;IACvD,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,YAAY,CAAC,WAA+B,WAAW;QACrD,OAAO,IAAA,sBAAW,EAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IAC9C,CAAC;IAED,GAAG;QACD,OAAO,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAe;QACxB,MAAM,OAAO,GAAG,MAAM,IAAA,eAAM,EAAC,GAAG,CAAC,CAAA;QACjC,yCAAyC;QACzC,MAAM,GAAG,GAAG,MAAM,qBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACrE,OAAO,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAClD,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;CACF;AAnDD,4CAmDC;AAED,kBAAe,gBAAgB,CAAA"}
@@ -2,3 +2,4 @@ import { VerifyOptions } from '../types';
2
2
  export declare const verifyDidSig: (did: string, data: Uint8Array, sig: Uint8Array, opts?: VerifyOptions) => Promise<boolean>;
3
3
  export declare const verifySig: (publicKey: Uint8Array, data: Uint8Array, sig: Uint8Array, opts?: VerifyOptions) => Promise<boolean>;
4
4
  export declare const isCompactFormat: (sig: Uint8Array) => boolean;
5
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/secp256k1/operations.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAGxC,eAAO,MAAM,YAAY,QAClB,MAAM,QACL,UAAU,OACX,UAAU,SACR,aAAa,KACnB,QAAQ,OAAO,CAOjB,CAAA;AAED,eAAO,MAAM,SAAS,cACT,UAAU,QACf,UAAU,OACX,UAAU,SACR,aAAa,KACnB,QAAQ,OAAO,CAWjB,CAAA;AAED,eAAO,MAAM,eAAe,QAAS,UAAU,YAO9C,CAAA"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.isCompactFormat = exports.verifySig = exports.verifyDidSig = void 0;
27
+ const secp256k1_1 = require("@noble/curves/secp256k1");
28
+ const sha256_1 = require("@noble/hashes/sha256");
29
+ const ui8 = __importStar(require("uint8arrays"));
30
+ const const_1 = require("../const");
31
+ const utils_1 = require("../utils");
32
+ const verifyDidSig = async (did, data, sig, opts) => {
33
+ const prefixedBytes = (0, utils_1.extractPrefixedBytes)((0, utils_1.extractMultikey)(did));
34
+ if (!(0, utils_1.hasPrefix)(prefixedBytes, const_1.SECP256K1_DID_PREFIX)) {
35
+ throw new Error(`Not a secp256k1 did:key: ${did}`);
36
+ }
37
+ const keyBytes = prefixedBytes.slice(const_1.SECP256K1_DID_PREFIX.length);
38
+ return (0, exports.verifySig)(keyBytes, data, sig, opts);
39
+ };
40
+ exports.verifyDidSig = verifyDidSig;
41
+ const verifySig = async (publicKey, data, sig, opts) => {
42
+ const allowMalleable = opts?.allowMalleableSig ?? false;
43
+ const msgHash = await (0, sha256_1.sha256)(data);
44
+ // parse as compact sig to prevent signature malleability
45
+ // library supports sigs in 2 different formats: https://github.com/paulmillr/noble-curves/issues/99
46
+ if (!allowMalleable && !(0, exports.isCompactFormat)(sig)) {
47
+ return false;
48
+ }
49
+ return secp256k1_1.secp256k1.verify(sig, msgHash, publicKey, {
50
+ lowS: !allowMalleable,
51
+ });
52
+ };
53
+ exports.verifySig = verifySig;
54
+ const isCompactFormat = (sig) => {
55
+ try {
56
+ const parsed = secp256k1_1.secp256k1.Signature.fromCompact(sig);
57
+ return ui8.equals(parsed.toCompactRawBytes(), sig);
58
+ }
59
+ catch {
60
+ return false;
61
+ }
62
+ };
63
+ exports.isCompactFormat = isCompactFormat;
64
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/secp256k1/operations.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAA2D;AAC3D,iDAA6C;AAC7C,iDAAkC;AAElC,oCAA+C;AAE/C,oCAA2E;AAEpE,MAAM,YAAY,GAAG,KAAK,EAC/B,GAAW,EACX,IAAgB,EAChB,GAAe,EACf,IAAoB,EACF,EAAE;IACpB,MAAM,aAAa,GAAG,IAAA,4BAAoB,EAAC,IAAA,uBAAe,EAAC,GAAG,CAAC,CAAC,CAAA;IAChE,IAAI,CAAC,IAAA,iBAAS,EAAC,aAAa,EAAE,4BAAoB,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAA;IACpD,CAAC;IACD,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,4BAAoB,CAAC,MAAM,CAAC,CAAA;IACjE,OAAO,IAAA,iBAAS,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;AAC7C,CAAC,CAAA;AAZY,QAAA,YAAY,gBAYxB;AAEM,MAAM,SAAS,GAAG,KAAK,EAC5B,SAAqB,EACrB,IAAgB,EAChB,GAAe,EACf,IAAoB,EACF,EAAE;IACpB,MAAM,cAAc,GAAG,IAAI,EAAE,iBAAiB,IAAI,KAAK,CAAA;IACvD,MAAM,OAAO,GAAG,MAAM,IAAA,eAAM,EAAC,IAAI,CAAC,CAAA;IAClC,yDAAyD;IACzD,oGAAoG;IACpG,IAAI,CAAC,cAAc,IAAI,CAAC,IAAA,uBAAe,EAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,qBAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE;QAC1C,IAAI,EAAE,CAAC,cAAc;KACtB,CAAC,CAAA;AACJ,CAAC,CAAA;AAhBY,QAAA,SAAS,aAgBrB;AAEM,MAAM,eAAe,GAAG,CAAC,GAAe,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,qBAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAC9C,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAA;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAPY,QAAA,eAAe,mBAO3B"}
@@ -1,3 +1,4 @@
1
1
  import { DidKeyPlugin } from '../types';
2
2
  export declare const secp256k1Plugin: DidKeyPlugin;
3
3
  export default secp256k1Plugin;
4
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/secp256k1/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGvC,eAAO,MAAM,eAAe,EAAE,YAO7B,CAAA;AAED,eAAe,eAAe,CAAA"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.secp256k1Plugin = void 0;
4
+ const operations_1 = require("./operations");
5
+ const encoding_1 = require("./encoding");
6
+ const const_1 = require("../const");
7
+ exports.secp256k1Plugin = {
8
+ prefix: const_1.SECP256K1_DID_PREFIX,
9
+ jwtAlg: const_1.SECP256K1_JWT_ALG,
10
+ verifySignature: operations_1.verifyDidSig,
11
+ compressPubkey: encoding_1.compressPubkey,
12
+ decompressPubkey: encoding_1.decompressPubkey,
13
+ };
14
+ exports.default = exports.secp256k1Plugin;
15
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/secp256k1/plugin.ts"],"names":[],"mappings":";;;AAAA,6CAA2C;AAC3C,yCAA6D;AAG7D,oCAAkE;AAErD,QAAA,eAAe,GAAiB;IAC3C,MAAM,EAAE,4BAAoB;IAC5B,MAAM,EAAE,yBAAiB;IACzB,eAAe,EAAE,yBAAY;IAE7B,cAAc,EAAd,yBAAc;IACd,gBAAgB,EAAhB,2BAAgB;CACjB,CAAA;AAED,kBAAe,uBAAe,CAAA"}
package/dist/sha.d.ts CHANGED
@@ -1 +1,3 @@
1
1
  export declare const sha256: (input: Uint8Array | string) => Promise<Uint8Array>;
2
+ export declare const sha256Hex: (input: Uint8Array | string) => Promise<string>;
3
+ //# sourceMappingURL=sha.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sha.d.ts","sourceRoot":"","sources":["../src/sha.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,MAAM,UACV,UAAU,GAAG,MAAM,KACzB,QAAQ,UAAU,CAIpB,CAAA;AAED,eAAO,MAAM,SAAS,UACb,UAAU,GAAG,MAAM,KACzB,QAAQ,MAAM,CAGhB,CAAA"}
package/dist/sha.js ADDED
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.sha256Hex = exports.sha256 = void 0;
27
+ const noble = __importStar(require("@noble/hashes/sha256"));
28
+ const uint8arrays = __importStar(require("uint8arrays"));
29
+ // takes either bytes of utf8 input
30
+ const sha256 = async (input) => {
31
+ const bytes = typeof input === 'string' ? uint8arrays.fromString(input, 'utf8') : input;
32
+ return noble.sha256(bytes);
33
+ };
34
+ exports.sha256 = sha256;
35
+ const sha256Hex = async (input) => {
36
+ const hash = await (0, exports.sha256)(input);
37
+ return uint8arrays.toString(hash, 'hex');
38
+ };
39
+ exports.sha256Hex = sha256Hex;
40
+ //# sourceMappingURL=sha.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sha.js","sourceRoot":"","sources":["../src/sha.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAA6C;AAC7C,yDAA0C;AAE1C,mCAAmC;AAC5B,MAAM,MAAM,GAAG,KAAK,EACzB,KAA0B,EACL,EAAE;IACvB,MAAM,KAAK,GACT,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAC3E,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC5B,CAAC,CAAA;AANY,QAAA,MAAM,UAMlB;AAEM,MAAM,SAAS,GAAG,KAAK,EAC5B,KAA0B,EACT,EAAE;IACnB,MAAM,IAAI,GAAG,MAAM,IAAA,cAAM,EAAC,KAAK,CAAC,CAAA;IAChC,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAC1C,CAAC,CAAA;AALY,QAAA,SAAS,aAKrB"}
package/dist/types.d.ts CHANGED
@@ -7,11 +7,17 @@ export interface Didable {
7
7
  }
8
8
  export interface Keypair extends Signer, Didable {
9
9
  }
10
- export declare type DidKeyPlugin = {
10
+ export interface ExportableKeypair extends Keypair {
11
+ export(): Promise<Uint8Array>;
12
+ }
13
+ export type DidKeyPlugin = {
11
14
  prefix: Uint8Array;
12
15
  jwtAlg: string;
13
16
  verifySignature: (did: string, msg: Uint8Array, data: Uint8Array, opts?: VerifyOptions) => Promise<boolean>;
17
+ compressPubkey: (uncompressed: Uint8Array) => Uint8Array;
18
+ decompressPubkey: (compressed: Uint8Array) => Uint8Array;
14
19
  };
15
- export declare type VerifyOptions = {
20
+ export type VerifyOptions = {
16
21
  allowMalleableSig?: boolean;
17
22
  };
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CAC3C;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,IAAI,MAAM,CAAA;CACd;AAED,MAAM,WAAW,OAAQ,SAAQ,MAAM,EAAE,OAAO;CAAG;AAEnD,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC,CAAA;CAC9B;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,CACf,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,UAAU,EAChB,IAAI,CAAC,EAAE,aAAa,KACjB,OAAO,CAAC,OAAO,CAAC,CAAA;IAErB,cAAc,EAAE,CAAC,YAAY,EAAE,UAAU,KAAK,UAAU,CAAA;IACxD,gBAAgB,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,UAAU,CAAA;CACzD,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B,CAAA"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export declare const extractMultikey: (did: string) => string;
2
+ export declare const extractPrefixedBytes: (multikey: string) => Uint8Array;
3
+ export declare const hasPrefix: (bytes: Uint8Array, prefix: Uint8Array) => boolean;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,QAAS,MAAM,KAAG,MAK7C,CAAA;AAED,eAAO,MAAM,oBAAoB,aAAc,MAAM,KAAG,UAQvD,CAAA;AAED,eAAO,MAAM,SAAS,UAAW,UAAU,UAAU,UAAU,KAAG,OAEjE,CAAA"}
package/dist/utils.js ADDED
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.hasPrefix = exports.extractPrefixedBytes = exports.extractMultikey = void 0;
27
+ const uint8arrays = __importStar(require("uint8arrays"));
28
+ const const_1 = require("./const");
29
+ const extractMultikey = (did) => {
30
+ if (!did.startsWith(const_1.DID_KEY_PREFIX)) {
31
+ throw new Error(`Incorrect prefix for did:key: ${did}`);
32
+ }
33
+ return did.slice(const_1.DID_KEY_PREFIX.length);
34
+ };
35
+ exports.extractMultikey = extractMultikey;
36
+ const extractPrefixedBytes = (multikey) => {
37
+ if (!multikey.startsWith(const_1.BASE58_MULTIBASE_PREFIX)) {
38
+ throw new Error(`Incorrect prefix for multikey: ${multikey}`);
39
+ }
40
+ return uint8arrays.fromString(multikey.slice(const_1.BASE58_MULTIBASE_PREFIX.length), 'base58btc');
41
+ };
42
+ exports.extractPrefixedBytes = extractPrefixedBytes;
43
+ const hasPrefix = (bytes, prefix) => {
44
+ return uint8arrays.equals(prefix, bytes.subarray(0, prefix.byteLength));
45
+ };
46
+ exports.hasPrefix = hasPrefix;
47
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA0C;AAC1C,mCAAiE;AAE1D,MAAM,eAAe,GAAG,CAAC,GAAW,EAAU,EAAE;IACrD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,sBAAc,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAA;IACzD,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,sBAAc,CAAC,MAAM,CAAC,CAAA;AACzC,CAAC,CAAA;AALY,QAAA,eAAe,mBAK3B;AAEM,MAAM,oBAAoB,GAAG,CAAC,QAAgB,EAAc,EAAE;IACnE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,+BAAuB,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO,WAAW,CAAC,UAAU,CAC3B,QAAQ,CAAC,KAAK,CAAC,+BAAuB,CAAC,MAAM,CAAC,EAC9C,WAAW,CACZ,CAAA;AACH,CAAC,CAAA;AARY,QAAA,oBAAoB,wBAQhC;AAEM,MAAM,SAAS,GAAG,CAAC,KAAiB,EAAE,MAAkB,EAAW,EAAE;IAC1E,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;AACzE,CAAC,CAAA;AAFY,QAAA,SAAS,aAErB"}
package/dist/verify.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  import { VerifyOptions } from './types';
2
2
  export declare const verifySignature: (didKey: string, data: Uint8Array, sig: Uint8Array, opts?: VerifyOptions) => Promise<boolean>;
3
3
  export declare const verifySignatureUtf8: (didKey: string, data: string, sig: string, opts?: VerifyOptions) => Promise<boolean>;
4
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEvC,eAAO,MAAM,eAAe,WAClB,MAAM,QACR,UAAU,OACX,UAAU,SACR,aAAa,KACnB,QAAQ,OAAO,CAOjB,CAAA;AAED,eAAO,MAAM,mBAAmB,WACtB,MAAM,QACR,MAAM,OACP,MAAM,SACJ,aAAa,KACnB,QAAQ,OAAO,CAIjB,CAAA"}
package/dist/verify.js ADDED
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.verifySignatureUtf8 = exports.verifySignature = void 0;
30
+ const uint8arrays = __importStar(require("uint8arrays"));
31
+ const did_1 = require("./did");
32
+ const plugins_1 = __importDefault(require("./plugins"));
33
+ const verifySignature = (didKey, data, sig, opts) => {
34
+ const parsed = (0, did_1.parseDidKey)(didKey);
35
+ const plugin = plugins_1.default.find((p) => p.jwtAlg === parsed.jwtAlg);
36
+ if (!plugin) {
37
+ throw new Error(`Unsupported signature alg: ${parsed.jwtAlg}`);
38
+ }
39
+ return plugin.verifySignature(didKey, data, sig, opts);
40
+ };
41
+ exports.verifySignature = verifySignature;
42
+ const verifySignatureUtf8 = async (didKey, data, sig, opts) => {
43
+ const dataBytes = uint8arrays.fromString(data, 'utf8');
44
+ const sigBytes = uint8arrays.fromString(sig, 'base64url');
45
+ return (0, exports.verifySignature)(didKey, dataBytes, sigBytes, opts);
46
+ };
47
+ exports.verifySignatureUtf8 = verifySignatureUtf8;
48
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA0C;AAC1C,+BAAmC;AACnC,wDAA+B;AAGxB,MAAM,eAAe,GAAG,CAC7B,MAAc,EACd,IAAgB,EAChB,GAAe,EACf,IAAoB,EACF,EAAE;IACpB,MAAM,MAAM,GAAG,IAAA,iBAAW,EAAC,MAAM,CAAC,CAAA;IAClC,MAAM,MAAM,GAAG,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IAChE,CAAC;IACD,OAAO,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;AACxD,CAAC,CAAA;AAZY,QAAA,eAAe,mBAY3B;AAEM,MAAM,mBAAmB,GAAG,KAAK,EACtC,MAAc,EACd,IAAY,EACZ,GAAW,EACX,IAAoB,EACF,EAAE;IACpB,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACtD,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;IACzD,OAAO,IAAA,uBAAe,EAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;AAC3D,CAAC,CAAA;AATY,QAAA,mBAAmB,uBAS/B"}
package/jest.config.js CHANGED
@@ -1,6 +1,6 @@
1
- const base = require('../../jest.config.base.js')
2
-
1
+ /** @type {import('jest').Config} */
3
2
  module.exports = {
4
- ...base,
5
3
  displayName: 'Crypto',
4
+ transform: { '^.+\\.(t|j)s$': '@swc/jest' },
5
+ setupFiles: ['<rootDir>/../../jest.setup.ts'],
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/crypto",
3
- "version": "0.3.0",
3
+ "version": "0.3.1-next.0",
4
4
  "license": "MIT",
5
5
  "description": "Library for cryptographic keys and signing in atproto",
6
6
  "keywords": [
@@ -14,16 +14,18 @@
14
14
  "directory": "packages/crypto"
15
15
  },
16
16
  "main": "dist/index.js",
17
+ "types": "dist/index.d.ts",
17
18
  "dependencies": {
18
19
  "@noble/curves": "^1.1.0",
19
20
  "@noble/hashes": "^1.3.1",
20
21
  "uint8arrays": "3.0.0"
21
22
  },
23
+ "devDependencies": {
24
+ "jest": "^28.1.2",
25
+ "@atproto/common": "^0.3.4-next.0"
26
+ },
22
27
  "scripts": {
23
28
  "test": "jest ",
24
- "build": "node ./build.js",
25
- "postbuild": "tsc --build tsconfig.build.json",
26
- "update-main-to-dist": "node ../../update-main-to-dist.js packages/crypto"
27
- },
28
- "types": "dist/index.d.ts"
29
+ "build": "tsc --build tsconfig.build.json"
30
+ }
29
31
  }