@ckb-ccc/core 1.3.0 → 1.4.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 +16 -0
- package/dist/molecule/codec.d.ts.map +1 -1
- package/dist/molecule/codec.js +17 -8
- package/dist/num/index.js +3 -3
- package/dist/signer/nostr/index.d.ts +1 -0
- package/dist/signer/nostr/index.d.ts.map +1 -1
- package/dist/signer/nostr/index.js +1 -0
- package/dist/signer/nostr/signerNostrPrivateKey.d.ts +12 -0
- package/dist/signer/nostr/signerNostrPrivateKey.d.ts.map +1 -0
- package/dist/signer/nostr/signerNostrPrivateKey.js +28 -0
- package/dist/signer/nostr/verify.d.ts +2 -1
- package/dist/signer/nostr/verify.d.ts.map +1 -1
- package/dist/signer/nostr/verify.js +12 -9
- package/dist.commonjs/molecule/codec.d.ts.map +1 -1
- package/dist.commonjs/molecule/codec.js +17 -8
- package/dist.commonjs/num/index.js +3 -3
- package/dist.commonjs/signer/nostr/index.d.ts +1 -0
- package/dist.commonjs/signer/nostr/index.d.ts.map +1 -1
- package/dist.commonjs/signer/nostr/index.js +1 -0
- package/dist.commonjs/signer/nostr/signerNostrPrivateKey.d.ts +12 -0
- package/dist.commonjs/signer/nostr/signerNostrPrivateKey.d.ts.map +1 -0
- package/dist.commonjs/signer/nostr/signerNostrPrivateKey.js +32 -0
- package/dist.commonjs/signer/nostr/verify.d.ts +2 -1
- package/dist.commonjs/signer/nostr/verify.d.ts.map +1 -1
- package/dist.commonjs/signer/nostr/verify.js +13 -9
- package/package.json +1 -1
- package/src/molecule/codec.ts +29 -6
- package/src/num/index.ts +3 -3
- package/src/signer/nostr/index.ts +1 -0
- package/src/signer/nostr/signerNostrPrivateKey.ts +37 -0
- package/src/signer/nostr/verify.ts +18 -13
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @ckb-ccc/core
|
|
2
2
|
|
|
3
|
+
## 1.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#140](https://github.com/ckb-devrel/ccc/pull/140) [`f429087`](https://github.com/ckb-devrel/ccc/commit/f4290874dfab3fe58844e5169673c5d47bda64e3) Thanks [@Hanssen0](https://github.com/Hanssen0)! - feat(core): SignerNostrPrivateKey
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- [#138](https://github.com/ckb-devrel/ccc/pull/138) [`3fdb2c4`](https://github.com/ckb-devrel/ccc/commit/3fdb2c477d0b2766b231e436b8f396f047b02634) Thanks [@Hanssen0](https://github.com/Hanssen0)! - fix(core): codec should throw if byteLength mismatch
|
|
12
|
+
|
|
13
|
+
## 1.3.1
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- [`a48cccf`](https://github.com/ckb-devrel/ccc/commit/a48cccfae3ce6b3456a5eb863f207e7e5a6e568f) Thanks [@Hanssen0](https://github.com/Hanssen0)! - fix(core): numFrom("0x") should be zero
|
|
18
|
+
|
|
3
19
|
## 1.3.0
|
|
4
20
|
|
|
5
21
|
### Minor Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/molecule/codec.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,EAIL,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,GAAG,EAIH,OAAO,EAER,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,IAAI;IACtD,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,KAAK,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AACF,qBAAa,KAAK,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS;aAE7B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,KAAK;aACvC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO;aACzC,UAAU,CAAC,EAAE,MAAM;gBAFnB,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,KAAK,EACvC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,EACzC,UAAU,CAAC,EAAE,MAAM,YAAA;IAGrC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,EAAE,EAC1C,MAAM,EACN,MAAM,EACN,UAAU,GACX,EAAE,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/molecule/codec.ts"],"names":[],"mappings":"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"}
|
package/dist/molecule/codec.js
CHANGED
|
@@ -8,16 +8,25 @@ export class Codec {
|
|
|
8
8
|
this.byteLength = byteLength;
|
|
9
9
|
}
|
|
10
10
|
static from({ encode, decode, byteLength, }) {
|
|
11
|
-
return new Codec(
|
|
11
|
+
return new Codec((encodable) => {
|
|
12
|
+
const encoded = encode(encodable);
|
|
13
|
+
if (byteLength !== undefined && encoded.byteLength !== byteLength) {
|
|
14
|
+
throw new Error(`Codec.encode: expected byte length ${byteLength}, got ${encoded.byteLength}`);
|
|
15
|
+
}
|
|
16
|
+
return encoded;
|
|
17
|
+
}, (decodable) => {
|
|
18
|
+
const decodableBytes = bytesFrom(decodable);
|
|
19
|
+
if (byteLength !== undefined &&
|
|
20
|
+
decodableBytes.byteLength !== byteLength) {
|
|
21
|
+
throw new Error(`Codec.decode: expected byte length ${byteLength}, got ${decodableBytes.byteLength}`);
|
|
22
|
+
}
|
|
23
|
+
return decode(decodable);
|
|
24
|
+
}, byteLength);
|
|
12
25
|
}
|
|
13
26
|
map({ inMap, outMap, }) {
|
|
14
|
-
return Codec.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
decode: (buffer) => (outMap
|
|
18
|
-
? outMap(this.decode(buffer))
|
|
19
|
-
: this.decode(buffer)),
|
|
20
|
-
});
|
|
27
|
+
return new Codec((encodable) => this.encode((inMap ? inMap(encodable) : encodable)), (buffer) => (outMap
|
|
28
|
+
? outMap(this.decode(buffer))
|
|
29
|
+
: this.decode(buffer)), this.byteLength);
|
|
21
30
|
}
|
|
22
31
|
mapIn(map) {
|
|
23
32
|
return this.map({ inMap: map });
|
package/dist/num/index.js
CHANGED
|
@@ -61,13 +61,13 @@ export function numFrom(val) {
|
|
|
61
61
|
if (typeof val === "bigint") {
|
|
62
62
|
return val;
|
|
63
63
|
}
|
|
64
|
+
if (val === "0x") {
|
|
65
|
+
return BigInt(0);
|
|
66
|
+
}
|
|
64
67
|
if (typeof val === "string" || typeof val === "number") {
|
|
65
68
|
return BigInt(val);
|
|
66
69
|
}
|
|
67
70
|
const hex = hexFrom(val);
|
|
68
|
-
if (hex === "0x") {
|
|
69
|
-
return BigInt(0);
|
|
70
|
-
}
|
|
71
71
|
return BigInt(hex);
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/nostr/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/nostr/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Client } from "../../client/index.js";
|
|
2
|
+
import { Hex, HexLike } from "../../hex/index.js";
|
|
3
|
+
import { NostrEvent, SignerNostr } from "./signerNostr.js";
|
|
4
|
+
export declare class SignerNostrPrivateKey extends SignerNostr {
|
|
5
|
+
private readonly privateKey;
|
|
6
|
+
constructor(client: Client, privateKey: HexLike);
|
|
7
|
+
connect(): Promise<void>;
|
|
8
|
+
isConnected(): Promise<boolean>;
|
|
9
|
+
getNostrPublicKey(): Promise<Hex>;
|
|
10
|
+
signNostrEvent(event: NostrEvent): Promise<Required<NostrEvent>>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=signerNostrPrivateKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signerNostrPrivateKey.d.ts","sourceRoot":"","sources":["../../../src/signer/nostr/signerNostrPrivateKey.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAW,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG3D,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;gBAErB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO;IAKzC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAExB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC;IAIjC,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;CAYvE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { schnorr } from "@noble/curves/secp256k1";
|
|
2
|
+
import { hexFrom } from "../../hex/index.js";
|
|
3
|
+
import { SignerNostr } from "./signerNostr.js";
|
|
4
|
+
import { nostrEventHash } from "./verify.js";
|
|
5
|
+
export class SignerNostrPrivateKey extends SignerNostr {
|
|
6
|
+
constructor(client, privateKey) {
|
|
7
|
+
super(client);
|
|
8
|
+
this.privateKey = hexFrom(privateKey);
|
|
9
|
+
}
|
|
10
|
+
async connect() { }
|
|
11
|
+
async isConnected() {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
async getNostrPublicKey() {
|
|
15
|
+
return hexFrom(schnorr.getPublicKey(this.privateKey.slice(2)));
|
|
16
|
+
}
|
|
17
|
+
async signNostrEvent(event) {
|
|
18
|
+
const pubkey = (await this.getNostrPublicKey()).slice(2);
|
|
19
|
+
const eventHash = nostrEventHash({ ...event, pubkey });
|
|
20
|
+
const signature = schnorr.sign(eventHash, this.privateKey.slice(2));
|
|
21
|
+
return {
|
|
22
|
+
...event,
|
|
23
|
+
id: hexFrom(eventHash).slice(2),
|
|
24
|
+
pubkey,
|
|
25
|
+
sig: hexFrom(signature).slice(2),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { BytesLike } from "../../bytes/index.js";
|
|
1
|
+
import { Bytes, BytesLike } from "../../bytes/index.js";
|
|
2
2
|
import { NostrEvent } from "./signerNostr.js";
|
|
3
3
|
/**
|
|
4
4
|
* @public
|
|
5
5
|
*/
|
|
6
6
|
export declare function buildNostrEventFromMessage(message: string | BytesLike): NostrEvent;
|
|
7
|
+
export declare function nostrEventHash(event: NostrEvent): Bytes;
|
|
7
8
|
export declare function verifyMessageNostrEvent(message: string | BytesLike, signature: string, address: string): boolean;
|
|
8
9
|
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/signer/nostr/verify.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/signer/nostr/verify.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,UAAU,CA4BZ;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CAWvD;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAYT"}
|
|
@@ -15,8 +15,8 @@ export function buildNostrEventFromMessage(message) {
|
|
|
15
15
|
typeof event.created_at === "number" &&
|
|
16
16
|
typeof event.kind === "number" &&
|
|
17
17
|
typeof event.content === "string" &&
|
|
18
|
-
Array.isArray(event.
|
|
19
|
-
event.
|
|
18
|
+
Array.isArray(event.tags) &&
|
|
19
|
+
event.tags.every((tag) => Array.isArray(tag) &&
|
|
20
20
|
tag.every((v) => typeof v === "string"))) {
|
|
21
21
|
return event;
|
|
22
22
|
}
|
|
@@ -30,21 +30,24 @@ export function buildNostrEventFromMessage(message) {
|
|
|
30
30
|
tags: [],
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
export function
|
|
34
|
-
const { words } = bech32.decode(address);
|
|
35
|
-
const publicKey = hexFrom(bech32.fromWords(words)).slice(2);
|
|
36
|
-
const event = buildNostrEventFromMessage(message);
|
|
33
|
+
export function nostrEventHash(event) {
|
|
37
34
|
const serialized = JSON.stringify([
|
|
38
35
|
0,
|
|
39
|
-
|
|
36
|
+
event.pubkey,
|
|
40
37
|
event.created_at,
|
|
41
38
|
event.kind,
|
|
42
39
|
event.tags,
|
|
43
40
|
event.content,
|
|
44
41
|
]);
|
|
45
|
-
|
|
42
|
+
return sha256(bytesFrom(serialized, "utf8"));
|
|
43
|
+
}
|
|
44
|
+
export function verifyMessageNostrEvent(message, signature, address) {
|
|
45
|
+
const { words } = bech32.decode(address);
|
|
46
|
+
const publicKey = hexFrom(bech32.fromWords(words)).slice(2);
|
|
47
|
+
const event = buildNostrEventFromMessage(message);
|
|
48
|
+
const eventHash = nostrEventHash(event);
|
|
46
49
|
try {
|
|
47
|
-
return schnorr.verify(signature.slice(2), eventHash
|
|
50
|
+
return schnorr.verify(hexFrom(signature).slice(2), eventHash, publicKey);
|
|
48
51
|
}
|
|
49
52
|
catch (_) {
|
|
50
53
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/molecule/codec.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,EAIL,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,GAAG,EAIH,OAAO,EAER,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,IAAI;IACtD,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,KAAK,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AACF,qBAAa,KAAK,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS;aAE7B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,KAAK;aACvC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO;aACzC,UAAU,CAAC,EAAE,MAAM;gBAFnB,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,KAAK,EACvC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,EACzC,UAAU,CAAC,EAAE,MAAM,YAAA;IAGrC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,EAAE,EAC1C,MAAM,EACN,MAAM,EACN,UAAU,GACX,EAAE,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/molecule/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,16 +22,25 @@ class Codec {
|
|
|
22
22
|
this.byteLength = byteLength;
|
|
23
23
|
}
|
|
24
24
|
static from({ encode, decode, byteLength, }) {
|
|
25
|
-
return new Codec(
|
|
25
|
+
return new Codec((encodable) => {
|
|
26
|
+
const encoded = encode(encodable);
|
|
27
|
+
if (byteLength !== undefined && encoded.byteLength !== byteLength) {
|
|
28
|
+
throw new Error(`Codec.encode: expected byte length ${byteLength}, got ${encoded.byteLength}`);
|
|
29
|
+
}
|
|
30
|
+
return encoded;
|
|
31
|
+
}, (decodable) => {
|
|
32
|
+
const decodableBytes = (0, index_js_1.bytesFrom)(decodable);
|
|
33
|
+
if (byteLength !== undefined &&
|
|
34
|
+
decodableBytes.byteLength !== byteLength) {
|
|
35
|
+
throw new Error(`Codec.decode: expected byte length ${byteLength}, got ${decodableBytes.byteLength}`);
|
|
36
|
+
}
|
|
37
|
+
return decode(decodable);
|
|
38
|
+
}, byteLength);
|
|
26
39
|
}
|
|
27
40
|
map({ inMap, outMap, }) {
|
|
28
|
-
return Codec.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
decode: (buffer) => (outMap
|
|
32
|
-
? outMap(this.decode(buffer))
|
|
33
|
-
: this.decode(buffer)),
|
|
34
|
-
});
|
|
41
|
+
return new Codec((encodable) => this.encode((inMap ? inMap(encodable) : encodable)), (buffer) => (outMap
|
|
42
|
+
? outMap(this.decode(buffer))
|
|
43
|
+
: this.decode(buffer)), this.byteLength);
|
|
35
44
|
}
|
|
36
45
|
mapIn(map) {
|
|
37
46
|
return this.map({ inMap: map });
|
|
@@ -73,13 +73,13 @@ function numFrom(val) {
|
|
|
73
73
|
if (typeof val === "bigint") {
|
|
74
74
|
return val;
|
|
75
75
|
}
|
|
76
|
+
if (val === "0x") {
|
|
77
|
+
return BigInt(0);
|
|
78
|
+
}
|
|
76
79
|
if (typeof val === "string" || typeof val === "number") {
|
|
77
80
|
return BigInt(val);
|
|
78
81
|
}
|
|
79
82
|
const hex = (0, index_js_2.hexFrom)(val);
|
|
80
|
-
if (hex === "0x") {
|
|
81
|
-
return BigInt(0);
|
|
82
|
-
}
|
|
83
83
|
return BigInt(hex);
|
|
84
84
|
}
|
|
85
85
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/nostr/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/nostr/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,aAAa,CAAC"}
|
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./signerNostr.js"), exports);
|
|
18
|
+
__exportStar(require("./signerNostrPrivateKey.js"), exports);
|
|
18
19
|
__exportStar(require("./verify.js"), exports);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Client } from "../../client/index.js";
|
|
2
|
+
import { Hex, HexLike } from "../../hex/index.js";
|
|
3
|
+
import { NostrEvent, SignerNostr } from "./signerNostr.js";
|
|
4
|
+
export declare class SignerNostrPrivateKey extends SignerNostr {
|
|
5
|
+
private readonly privateKey;
|
|
6
|
+
constructor(client: Client, privateKey: HexLike);
|
|
7
|
+
connect(): Promise<void>;
|
|
8
|
+
isConnected(): Promise<boolean>;
|
|
9
|
+
getNostrPublicKey(): Promise<Hex>;
|
|
10
|
+
signNostrEvent(event: NostrEvent): Promise<Required<NostrEvent>>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=signerNostrPrivateKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signerNostrPrivateKey.d.ts","sourceRoot":"","sources":["../../../src/signer/nostr/signerNostrPrivateKey.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAW,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG3D,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;gBAErB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO;IAKzC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAExB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC;IAIjC,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;CAYvE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SignerNostrPrivateKey = void 0;
|
|
4
|
+
const secp256k1_1 = require("@noble/curves/secp256k1");
|
|
5
|
+
const index_js_1 = require("../../hex/index.js");
|
|
6
|
+
const signerNostr_js_1 = require("./signerNostr.js");
|
|
7
|
+
const verify_js_1 = require("./verify.js");
|
|
8
|
+
class SignerNostrPrivateKey extends signerNostr_js_1.SignerNostr {
|
|
9
|
+
constructor(client, privateKey) {
|
|
10
|
+
super(client);
|
|
11
|
+
this.privateKey = (0, index_js_1.hexFrom)(privateKey);
|
|
12
|
+
}
|
|
13
|
+
async connect() { }
|
|
14
|
+
async isConnected() {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
async getNostrPublicKey() {
|
|
18
|
+
return (0, index_js_1.hexFrom)(secp256k1_1.schnorr.getPublicKey(this.privateKey.slice(2)));
|
|
19
|
+
}
|
|
20
|
+
async signNostrEvent(event) {
|
|
21
|
+
const pubkey = (await this.getNostrPublicKey()).slice(2);
|
|
22
|
+
const eventHash = (0, verify_js_1.nostrEventHash)({ ...event, pubkey });
|
|
23
|
+
const signature = secp256k1_1.schnorr.sign(eventHash, this.privateKey.slice(2));
|
|
24
|
+
return {
|
|
25
|
+
...event,
|
|
26
|
+
id: (0, index_js_1.hexFrom)(eventHash).slice(2),
|
|
27
|
+
pubkey,
|
|
28
|
+
sig: (0, index_js_1.hexFrom)(signature).slice(2),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.SignerNostrPrivateKey = SignerNostrPrivateKey;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { BytesLike } from "../../bytes/index.js";
|
|
1
|
+
import { Bytes, BytesLike } from "../../bytes/index.js";
|
|
2
2
|
import { NostrEvent } from "./signerNostr.js";
|
|
3
3
|
/**
|
|
4
4
|
* @public
|
|
5
5
|
*/
|
|
6
6
|
export declare function buildNostrEventFromMessage(message: string | BytesLike): NostrEvent;
|
|
7
|
+
export declare function nostrEventHash(event: NostrEvent): Bytes;
|
|
7
8
|
export declare function verifyMessageNostrEvent(message: string | BytesLike, signature: string, address: string): boolean;
|
|
8
9
|
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/signer/nostr/verify.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/signer/nostr/verify.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,UAAU,CA4BZ;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CAWvD;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAYT"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.buildNostrEventFromMessage = buildNostrEventFromMessage;
|
|
4
|
+
exports.nostrEventHash = nostrEventHash;
|
|
4
5
|
exports.verifyMessageNostrEvent = verifyMessageNostrEvent;
|
|
5
6
|
const secp256k1_1 = require("@noble/curves/secp256k1");
|
|
6
7
|
const sha256_1 = require("@noble/hashes/sha256");
|
|
@@ -19,8 +20,8 @@ function buildNostrEventFromMessage(message) {
|
|
|
19
20
|
typeof event.created_at === "number" &&
|
|
20
21
|
typeof event.kind === "number" &&
|
|
21
22
|
typeof event.content === "string" &&
|
|
22
|
-
Array.isArray(event.
|
|
23
|
-
event.
|
|
23
|
+
Array.isArray(event.tags) &&
|
|
24
|
+
event.tags.every((tag) => Array.isArray(tag) &&
|
|
24
25
|
tag.every((v) => typeof v === "string"))) {
|
|
25
26
|
return event;
|
|
26
27
|
}
|
|
@@ -34,21 +35,24 @@ function buildNostrEventFromMessage(message) {
|
|
|
34
35
|
tags: [],
|
|
35
36
|
};
|
|
36
37
|
}
|
|
37
|
-
function
|
|
38
|
-
const { words } = bech32_1.bech32.decode(address);
|
|
39
|
-
const publicKey = (0, index_js_2.hexFrom)(bech32_1.bech32.fromWords(words)).slice(2);
|
|
40
|
-
const event = buildNostrEventFromMessage(message);
|
|
38
|
+
function nostrEventHash(event) {
|
|
41
39
|
const serialized = JSON.stringify([
|
|
42
40
|
0,
|
|
43
|
-
|
|
41
|
+
event.pubkey,
|
|
44
42
|
event.created_at,
|
|
45
43
|
event.kind,
|
|
46
44
|
event.tags,
|
|
47
45
|
event.content,
|
|
48
46
|
]);
|
|
49
|
-
|
|
47
|
+
return (0, sha256_1.sha256)((0, index_js_1.bytesFrom)(serialized, "utf8"));
|
|
48
|
+
}
|
|
49
|
+
function verifyMessageNostrEvent(message, signature, address) {
|
|
50
|
+
const { words } = bech32_1.bech32.decode(address);
|
|
51
|
+
const publicKey = (0, index_js_2.hexFrom)(bech32_1.bech32.fromWords(words)).slice(2);
|
|
52
|
+
const event = buildNostrEventFromMessage(message);
|
|
53
|
+
const eventHash = nostrEventHash(event);
|
|
50
54
|
try {
|
|
51
|
-
return secp256k1_1.schnorr.verify(signature.slice(2), eventHash
|
|
55
|
+
return secp256k1_1.schnorr.verify((0, index_js_2.hexFrom)(signature).slice(2), eventHash, publicKey);
|
|
52
56
|
}
|
|
53
57
|
catch (_) {
|
|
54
58
|
return false;
|
package/package.json
CHANGED
package/src/molecule/codec.ts
CHANGED
|
@@ -33,7 +33,30 @@ export class Codec<Encodable, Decoded = Encodable> {
|
|
|
33
33
|
decode,
|
|
34
34
|
byteLength,
|
|
35
35
|
}: CodecLike<Encodable, Decoded>): Codec<Encodable, Decoded> {
|
|
36
|
-
return new Codec(
|
|
36
|
+
return new Codec(
|
|
37
|
+
(encodable: Encodable) => {
|
|
38
|
+
const encoded = encode(encodable);
|
|
39
|
+
if (byteLength !== undefined && encoded.byteLength !== byteLength) {
|
|
40
|
+
throw new Error(
|
|
41
|
+
`Codec.encode: expected byte length ${byteLength}, got ${encoded.byteLength}`,
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
return encoded;
|
|
45
|
+
},
|
|
46
|
+
(decodable) => {
|
|
47
|
+
const decodableBytes = bytesFrom(decodable);
|
|
48
|
+
if (
|
|
49
|
+
byteLength !== undefined &&
|
|
50
|
+
decodableBytes.byteLength !== byteLength
|
|
51
|
+
) {
|
|
52
|
+
throw new Error(
|
|
53
|
+
`Codec.decode: expected byte length ${byteLength}, got ${decodableBytes.byteLength}`,
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
return decode(decodable);
|
|
57
|
+
},
|
|
58
|
+
byteLength,
|
|
59
|
+
);
|
|
37
60
|
}
|
|
38
61
|
|
|
39
62
|
map<NewEncodable = Encodable, NewDecoded = Decoded>({
|
|
@@ -43,15 +66,15 @@ export class Codec<Encodable, Decoded = Encodable> {
|
|
|
43
66
|
inMap?: (encodable: NewEncodable) => Encodable;
|
|
44
67
|
outMap?: (decoded: Decoded) => NewDecoded;
|
|
45
68
|
}): Codec<NewEncodable, NewDecoded> {
|
|
46
|
-
return Codec
|
|
47
|
-
|
|
48
|
-
encode: (encodable) =>
|
|
69
|
+
return new Codec(
|
|
70
|
+
(encodable) =>
|
|
49
71
|
this.encode((inMap ? inMap(encodable) : encodable) as Encodable),
|
|
50
|
-
|
|
72
|
+
(buffer) =>
|
|
51
73
|
(outMap
|
|
52
74
|
? outMap(this.decode(buffer))
|
|
53
75
|
: this.decode(buffer)) as NewDecoded,
|
|
54
|
-
|
|
76
|
+
this.byteLength,
|
|
77
|
+
);
|
|
55
78
|
}
|
|
56
79
|
|
|
57
80
|
mapIn<NewEncodable>(
|
package/src/num/index.ts
CHANGED
|
@@ -78,14 +78,14 @@ export function numFrom(val: NumLike): Num {
|
|
|
78
78
|
return val;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
+
if (val === "0x") {
|
|
82
|
+
return BigInt(0);
|
|
83
|
+
}
|
|
81
84
|
if (typeof val === "string" || typeof val === "number") {
|
|
82
85
|
return BigInt(val);
|
|
83
86
|
}
|
|
84
87
|
|
|
85
88
|
const hex = hexFrom(val);
|
|
86
|
-
if (hex === "0x") {
|
|
87
|
-
return BigInt(0);
|
|
88
|
-
}
|
|
89
89
|
return BigInt(hex);
|
|
90
90
|
}
|
|
91
91
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { schnorr } from "@noble/curves/secp256k1";
|
|
2
|
+
import { Client } from "../../client/index.js";
|
|
3
|
+
import { Hex, hexFrom, HexLike } from "../../hex/index.js";
|
|
4
|
+
import { NostrEvent, SignerNostr } from "./signerNostr.js";
|
|
5
|
+
import { nostrEventHash } from "./verify.js";
|
|
6
|
+
|
|
7
|
+
export class SignerNostrPrivateKey extends SignerNostr {
|
|
8
|
+
private readonly privateKey: Hex;
|
|
9
|
+
|
|
10
|
+
constructor(client: Client, privateKey: HexLike) {
|
|
11
|
+
super(client);
|
|
12
|
+
this.privateKey = hexFrom(privateKey);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async connect(): Promise<void> {}
|
|
16
|
+
|
|
17
|
+
async isConnected(): Promise<boolean> {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async getNostrPublicKey(): Promise<Hex> {
|
|
22
|
+
return hexFrom(schnorr.getPublicKey(this.privateKey.slice(2)));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async signNostrEvent(event: NostrEvent): Promise<Required<NostrEvent>> {
|
|
26
|
+
const pubkey = (await this.getNostrPublicKey()).slice(2);
|
|
27
|
+
const eventHash = nostrEventHash({ ...event, pubkey });
|
|
28
|
+
const signature = schnorr.sign(eventHash, this.privateKey.slice(2));
|
|
29
|
+
|
|
30
|
+
return {
|
|
31
|
+
...event,
|
|
32
|
+
id: hexFrom(eventHash).slice(2),
|
|
33
|
+
pubkey,
|
|
34
|
+
sig: hexFrom(signature).slice(2),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { schnorr } from "@noble/curves/secp256k1";
|
|
2
2
|
import { sha256 } from "@noble/hashes/sha256";
|
|
3
3
|
import { bech32 } from "bech32";
|
|
4
|
-
import { BytesLike, bytesFrom } from "../../bytes/index.js";
|
|
4
|
+
import { Bytes, BytesLike, bytesFrom } from "../../bytes/index.js";
|
|
5
5
|
import { hexFrom } from "../../hex/index.js";
|
|
6
6
|
import { NostrEvent } from "./signerNostr.js";
|
|
7
7
|
|
|
@@ -20,8 +20,8 @@ export function buildNostrEventFromMessage(
|
|
|
20
20
|
typeof event.created_at === "number" &&
|
|
21
21
|
typeof event.kind === "number" &&
|
|
22
22
|
typeof event.content === "string" &&
|
|
23
|
-
Array.isArray(event.
|
|
24
|
-
(event.
|
|
23
|
+
Array.isArray(event.tags) &&
|
|
24
|
+
(event.tags as unknown[]).every(
|
|
25
25
|
(tag) =>
|
|
26
26
|
Array.isArray(tag) &&
|
|
27
27
|
(tag as unknown[]).every((v) => typeof v === "string"),
|
|
@@ -40,6 +40,19 @@ export function buildNostrEventFromMessage(
|
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
export function nostrEventHash(event: NostrEvent): Bytes {
|
|
44
|
+
const serialized = JSON.stringify([
|
|
45
|
+
0,
|
|
46
|
+
event.pubkey,
|
|
47
|
+
event.created_at,
|
|
48
|
+
event.kind,
|
|
49
|
+
event.tags,
|
|
50
|
+
event.content,
|
|
51
|
+
]);
|
|
52
|
+
|
|
53
|
+
return sha256(bytesFrom(serialized, "utf8"));
|
|
54
|
+
}
|
|
55
|
+
|
|
43
56
|
export function verifyMessageNostrEvent(
|
|
44
57
|
message: string | BytesLike,
|
|
45
58
|
signature: string,
|
|
@@ -49,18 +62,10 @@ export function verifyMessageNostrEvent(
|
|
|
49
62
|
const publicKey = hexFrom(bech32.fromWords(words)).slice(2);
|
|
50
63
|
|
|
51
64
|
const event = buildNostrEventFromMessage(message);
|
|
52
|
-
const
|
|
53
|
-
0,
|
|
54
|
-
publicKey,
|
|
55
|
-
event.created_at,
|
|
56
|
-
event.kind,
|
|
57
|
-
event.tags,
|
|
58
|
-
event.content,
|
|
59
|
-
]);
|
|
60
|
-
const eventHash = hexFrom(sha256(bytesFrom(serialized, "utf8")));
|
|
65
|
+
const eventHash = nostrEventHash(event);
|
|
61
66
|
|
|
62
67
|
try {
|
|
63
|
-
return schnorr.verify(signature.slice(2), eventHash
|
|
68
|
+
return schnorr.verify(hexFrom(signature).slice(2), eventHash, publicKey);
|
|
64
69
|
} catch (_) {
|
|
65
70
|
return false;
|
|
66
71
|
}
|