@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.
- package/CHANGELOG.md +6 -0
- package/LICENSE.txt +1 -1
- package/dist/const.d.ts +1 -0
- package/dist/const.d.ts.map +1 -0
- package/dist/const.js +10 -0
- package/dist/const.js.map +1 -0
- package/dist/did.d.ts +2 -1
- package/dist/did.d.ts.map +1 -0
- package/dist/did.js +68 -0
- package/dist/did.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -3351
- package/dist/index.js.map +1 -7
- package/dist/multibase.d.ts +1 -0
- package/dist/multibase.d.ts.map +1 -0
- package/dist/multibase.js +76 -0
- package/dist/multibase.js.map +1 -0
- package/dist/p256/encoding.d.ts +1 -0
- package/dist/p256/encoding.d.ts.map +1 -0
- package/dist/p256/encoding.js +18 -0
- package/dist/p256/encoding.js.map +1 -0
- package/dist/p256/keypair.d.ts +3 -2
- package/dist/p256/keypair.d.ts.map +1 -0
- package/dist/p256/keypair.js +94 -0
- package/dist/p256/keypair.js.map +1 -0
- package/dist/p256/operations.d.ts +1 -0
- package/dist/p256/operations.d.ts.map +1 -0
- package/dist/p256/operations.js +41 -0
- package/dist/p256/operations.js.map +1 -0
- package/dist/p256/plugin.d.ts +1 -0
- package/dist/p256/plugin.d.ts.map +1 -0
- package/dist/p256/plugin.js +15 -0
- package/dist/p256/plugin.js.map +1 -0
- package/dist/plugins.d.ts +1 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +11 -0
- package/dist/plugins.js.map +1 -0
- package/dist/random.d.ts +1 -0
- package/dist/random.d.ts.map +1 -0
- package/dist/random.js +44 -0
- package/dist/random.js.map +1 -0
- package/dist/secp256k1/encoding.d.ts +1 -0
- package/dist/secp256k1/encoding.d.ts.map +1 -0
- package/dist/secp256k1/encoding.js +18 -0
- package/dist/secp256k1/encoding.js.map +1 -0
- package/dist/secp256k1/keypair.d.ts +3 -2
- package/dist/secp256k1/keypair.d.ts.map +1 -0
- package/dist/secp256k1/keypair.js +94 -0
- package/dist/secp256k1/keypair.js.map +1 -0
- package/dist/secp256k1/operations.d.ts +1 -0
- package/dist/secp256k1/operations.d.ts.map +1 -0
- package/dist/secp256k1/operations.js +64 -0
- package/dist/secp256k1/operations.js.map +1 -0
- package/dist/secp256k1/plugin.d.ts +1 -0
- package/dist/secp256k1/plugin.d.ts.map +1 -0
- package/dist/secp256k1/plugin.js +15 -0
- package/dist/secp256k1/plugin.js.map +1 -0
- package/dist/sha.d.ts +2 -0
- package/dist/sha.d.ts.map +1 -0
- package/dist/sha.js +40 -0
- package/dist/sha.js.map +1 -0
- package/dist/types.d.ts +8 -2
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +47 -0
- package/dist/utils.js.map +1 -0
- package/dist/verify.d.ts +1 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +48 -0
- package/dist/verify.js.map +1 -0
- package/jest.config.js +3 -3
- package/package.json +8 -6
- package/src/did.ts +13 -35
- package/src/p256/keypair.ts +8 -6
- package/src/p256/operations.ts +8 -6
- package/src/p256/plugin.ts +7 -2
- package/src/secp256k1/keypair.ts +9 -7
- package/src/secp256k1/operations.ts +6 -4
- package/src/secp256k1/plugin.ts +7 -2
- package/src/sha.ts +7 -0
- package/src/types.ts +7 -0
- package/src/utils.ts +23 -0
- package/tests/signatures.test.ts +2 -1
- package/tsconfig.build.json +6 -2
- package/tsconfig.json +5 -7
- package/tsconfig.tests.json +7 -0
- 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
|
@@ -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"}
|
package/dist/plugins.js
ADDED
|
@@ -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"}
|
|
@@ -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/
|
|
1
|
+
import { SupportedEncodings } from 'uint8arrays/to-string';
|
|
2
2
|
import { Keypair } from '../types';
|
|
3
|
-
export
|
|
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"}
|
|
@@ -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
|
@@ -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
|
package/dist/sha.js.map
ADDED
|
@@ -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
|
|
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
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/utils.d.ts
ADDED
|
@@ -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
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": "
|
|
25
|
-
|
|
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
|
}
|