nostr-crypto-utils 0.4.8 → 0.4.9
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/dist/cjs/core/types/index.d.ts +2 -2
- package/dist/cjs/core/types/index.d.ts.map +1 -1
- package/dist/cjs/core/types/index.js +2 -2
- package/dist/cjs/core/types/index.js.map +1 -1
- package/dist/cjs/crypto/index.d.ts +1 -6
- package/dist/cjs/crypto/index.d.ts.map +1 -1
- package/dist/cjs/crypto/index.js +13 -28
- package/dist/cjs/crypto/index.js.map +1 -1
- package/dist/cjs/crypto/package.json +6 -0
- package/dist/cjs/crypto-utils.d.ts +8 -0
- package/dist/cjs/crypto-utils.d.ts.map +1 -0
- package/dist/cjs/crypto-utils.js +23 -0
- package/dist/cjs/crypto-utils.js.map +1 -0
- package/dist/cjs/crypto.d.ts +76 -0
- package/dist/cjs/crypto.d.ts.map +1 -0
- package/dist/cjs/crypto.js +214 -0
- package/dist/cjs/crypto.js.map +1 -0
- package/dist/cjs/encoding/index.d.ts +15 -0
- package/dist/cjs/encoding/index.d.ts.map +1 -1
- package/dist/cjs/encoding/index.js +27 -0
- package/dist/cjs/encoding/index.js.map +1 -1
- package/dist/cjs/event/creation.d.ts +1 -1
- package/dist/cjs/event/creation.d.ts.map +1 -1
- package/dist/cjs/event/creation.js +6 -6
- package/dist/cjs/event/creation.js.map +1 -1
- package/dist/cjs/event/signing.d.ts +1 -1
- package/dist/cjs/event/signing.d.ts.map +1 -1
- package/dist/cjs/event/signing.js +10 -10
- package/dist/cjs/event/signing.js.map +1 -1
- package/dist/cjs/index.d.ts +6 -8
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +56 -41
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/integration/index.d.ts +3 -2
- package/dist/cjs/integration/index.d.ts.map +1 -1
- package/dist/cjs/integration/index.js +13 -14
- package/dist/cjs/integration/index.js.map +1 -1
- package/dist/cjs/types/base.d.ts +1 -7
- package/dist/cjs/types/base.d.ts.map +1 -1
- package/dist/cjs/types/base.js.map +1 -1
- package/dist/cjs/types/index.d.ts +8 -12
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +7 -12
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/messages.d.ts +1 -6
- package/dist/cjs/types/messages.d.ts.map +1 -1
- package/dist/cjs/types/protocol.d.ts +2 -66
- package/dist/cjs/types/protocol.d.ts.map +1 -1
- package/dist/cjs/utils/integration.d.ts +2 -2
- package/dist/cjs/utils/integration.d.ts.map +1 -1
- package/dist/cjs/utils/integration.js +13 -13
- package/dist/cjs/utils/integration.js.map +1 -1
- package/dist/cjs/validation/index.d.ts +15 -2
- package/dist/cjs/validation/index.d.ts.map +1 -1
- package/dist/cjs/validation/index.js +133 -9
- package/dist/cjs/validation/index.js.map +1 -1
- package/dist/core/types/index.d.ts +2 -2
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +2 -2
- package/dist/core/types/index.js.map +1 -1
- package/dist/crypto/index.d.ts +1 -6
- package/dist/crypto/index.d.ts.map +1 -1
- package/dist/crypto/index.js +10 -24
- package/dist/crypto/index.js.map +1 -1
- package/dist/crypto-utils.d.ts +8 -0
- package/dist/crypto-utils.d.ts.map +1 -0
- package/dist/crypto-utils.js +16 -0
- package/dist/crypto-utils.js.map +1 -0
- package/dist/crypto.d.ts +76 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +201 -0
- package/dist/crypto.js.map +1 -0
- package/dist/encoding/index.d.ts +15 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +25 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/event/creation.d.ts +1 -1
- package/dist/event/creation.d.ts.map +1 -1
- package/dist/event/creation.js +3 -3
- package/dist/event/creation.js.map +1 -1
- package/dist/event/signing.d.ts +1 -1
- package/dist/event/signing.d.ts.map +1 -1
- package/dist/event/signing.js +4 -4
- package/dist/event/signing.js.map +1 -1
- package/dist/index.d.ts +6 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -12
- package/dist/index.js.map +1 -1
- package/dist/integration/index.d.ts +3 -2
- package/dist/integration/index.d.ts.map +1 -1
- package/dist/integration/index.js +9 -10
- package/dist/integration/index.js.map +1 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/types/base.d.ts +1 -7
- package/dist/types/base.d.ts.map +1 -1
- package/dist/types/base.js.map +1 -1
- package/dist/types/index.d.ts +8 -12
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +7 -11
- package/dist/types/index.js.map +1 -1
- package/dist/types/messages.d.ts +1 -6
- package/dist/types/messages.d.ts.map +1 -1
- package/dist/types/protocol.d.ts +2 -66
- package/dist/types/protocol.d.ts.map +1 -1
- package/dist/utils/integration.d.ts +2 -2
- package/dist/utils/integration.d.ts.map +1 -1
- package/dist/utils/integration.js +2 -2
- package/dist/utils/integration.js.map +1 -1
- package/dist/validation/index.d.ts +15 -2
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +127 -4
- package/dist/validation/index.js.map +1 -1
- package/package.json +22 -6
- package/dist/__tests__/setup.d.ts +0 -6
- package/dist/__tests__/setup.d.ts.map +0 -1
- package/dist/__tests__/setup.js +0 -19
- package/dist/__tests__/setup.js.map +0 -1
- package/dist/constants.d.ts +0 -50
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -50
- package/dist/constants.js.map +0 -1
- package/dist/core/constants.d.ts +0 -90
- package/dist/core/constants.d.ts.map +0 -1
- package/dist/core/constants.js +0 -90
- package/dist/core/constants.js.map +0 -1
- package/dist/core/errors.d.ts +0 -78
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -127
- package/dist/core/errors.js.map +0 -1
- package/dist/core/index.d.ts +0 -8
- package/dist/core/index.js +0 -8
- package/dist/core/index.js.map +0 -1
- package/dist/core/types/crypto.d.ts +0 -46
- package/dist/core/types/crypto.d.ts.map +0 -1
- package/dist/core/types/crypto.js +0 -6
- package/dist/core/types/crypto.js.map +0 -1
- package/dist/core/types/events.d.ts +0 -59
- package/dist/core/types/events.d.ts.map +0 -1
- package/dist/core/types/events.js +0 -6
- package/dist/core/types/events.js.map +0 -1
- package/dist/core/types/protocol.d.ts +0 -73
- package/dist/core/types/protocol.d.ts.map +0 -1
- package/dist/core/types/protocol.js +0 -6
- package/dist/core/types/protocol.js.map +0 -1
- package/dist/crypto/encryption.d.ts +0 -14
- package/dist/crypto/events.d.ts +0 -26
- package/dist/crypto/keys.d.ts +0 -35
- package/dist/crypto/keys.js +0 -151
- package/dist/crypto/keys.js.map +0 -1
- package/dist/encoding/base64.d.ts +0 -94
- package/dist/encoding/base64.d.ts.map +0 -1
- package/dist/encoding/base64.js +0 -145
- package/dist/encoding/base64.js.map +0 -1
- package/dist/encoding/binary.d.ts +0 -97
- package/dist/encoding/binary.d.ts.map +0 -1
- package/dist/encoding/binary.js +0 -161
- package/dist/encoding/binary.js.map +0 -1
- package/dist/encoding/hex.d.ts +0 -93
- package/dist/encoding/hex.d.ts.map +0 -1
- package/dist/encoding/hex.js +0 -149
- package/dist/encoding/hex.js.map +0 -1
- package/dist/nips/index.d.ts +0 -15
- package/dist/nips/index.js +0 -15
- package/dist/nips/index.js.map +0 -1
- package/dist/nips/nip-01.d.ts +0 -56
- package/dist/nips/nip-01.js +0 -140
- package/dist/nips/nip-01.js.map +0 -1
- package/dist/nips/nip-04.d.ts +0 -53
- package/dist/nips/nip-04.d.ts.map +0 -1
- package/dist/nips/nip-04.js +0 -78
- package/dist/nips/nip-04.js.map +0 -1
- package/dist/nips/nip-19.d.ts +0 -77
- package/dist/nips/nip-19.d.ts.map +0 -1
- package/dist/nips/nip-19.js +0 -294
- package/dist/nips/nip-19.js.map +0 -1
- package/dist/nips/nip-26.d.ts +0 -51
- package/dist/protocol/constants.d.ts +0 -100
- package/dist/protocol/constants.d.ts.map +0 -1
- package/dist/protocol/constants.js +0 -94
- package/dist/protocol/constants.js.map +0 -1
- package/dist/protocol/index.d.ts +0 -124
- package/dist/protocol/transport.d.ts +0 -15
- package/dist/transport/index.d.ts +0 -31
- package/dist/types/guards.d.ts +0 -30
- package/dist/utils/encoding.d.ts +0 -16
- package/dist/utils/encoding.d.ts.map +0 -1
- package/dist/utils/encoding.js +0 -26
- package/dist/utils/encoding.js.map +0 -1
- package/dist/utils/events.d.ts +0 -36
- package/dist/utils/functions.d.ts +0 -40
- package/dist/utils/functions.js +0 -106
- package/dist/utils/functions.js.map +0 -1
- package/dist/utils/index.d.ts +0 -9
- package/dist/utils/index.js +0 -13
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -25
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -76
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -56
- package/dist/utils/validation.js +0 -178
- package/dist/utils/validation.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Core type definitions
|
|
3
2
|
* @module core/types
|
|
3
|
+
* @description Core type definitions for the library
|
|
4
4
|
*/
|
|
5
5
|
export * from './events';
|
|
6
|
+
export * from './crypto.js';
|
|
6
7
|
export * from './protocol';
|
|
7
|
-
export * from './crypto';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Core type definitions
|
|
4
3
|
* @module core/types
|
|
4
|
+
* @description Core type definitions for the library
|
|
5
5
|
*/
|
|
6
6
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
7
|
if (k2 === undefined) k2 = k;
|
|
@@ -19,6 +19,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
19
19
|
};
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
21
|
__exportStar(require("./events"), exports);
|
|
22
|
+
__exportStar(require("./crypto.js"), exports);
|
|
22
23
|
__exportStar(require("./protocol"), exports);
|
|
23
|
-
__exportStar(require("./crypto"), exports);
|
|
24
24
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/types/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,2CAAyB;AACzB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/types/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,2CAAyB;AACzB,8CAA4B;AAC5B,6CAA2B"}
|
|
@@ -28,14 +28,9 @@ export declare class CustomCrypto implements CryptoSubtle {
|
|
|
28
28
|
constructor();
|
|
29
29
|
}
|
|
30
30
|
export declare const customCrypto: CustomCrypto;
|
|
31
|
-
import {
|
|
31
|
+
import { KeyPair, PublicKeyDetails, NostrEvent, SignedNostrEvent } from '../types';
|
|
32
32
|
export declare const signSchnorr: (message: import("@noble/curves/abstract/utils").Hex, privateKey: import("@noble/curves/abstract/utils").PrivKey, auxRand?: import("@noble/curves/abstract/utils").Hex) => Uint8Array;
|
|
33
33
|
export declare const verifySchnorrSignature: (signature: import("@noble/curves/abstract/utils").Hex, message: import("@noble/curves/abstract/utils").Hex, publicKey: import("@noble/curves/abstract/utils").Hex) => boolean;
|
|
34
|
-
/**
|
|
35
|
-
* Generates a new key pair
|
|
36
|
-
* @returns Generated key pair
|
|
37
|
-
*/
|
|
38
|
-
export declare function generateKeyPair(): Promise<KeyPair>;
|
|
39
34
|
/**
|
|
40
35
|
* Gets the public key from a private key
|
|
41
36
|
* @param privateKey - Private key in hex format
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE;QACN,WAAW,CACT,SAAS,EAAE,qBAAqB,GAAG,cAAc,EACjD,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,SAAS,QAAQ,EAAE,GAC7B,OAAO,CAAC,aAAa,CAAC,CAAC;QAC1B,SAAS,CACP,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,EAChC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,qBAAqB,GAAG,iBAAiB,GAAG,eAAe,EACtE,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,SAAS,QAAQ,EAAE,GAC7B,OAAO,CAAC,SAAS,CAAC,CAAC;QACtB,SAAS,CACP,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,EAChC,GAAG,EAAE,SAAS,GACb,OAAO,CAAC,WAAW,CAAC,CAAC;QACxB,OAAO,CACL,SAAS,EAAE,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,EACrE,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,WAAW,CAAC,CAAC;QACxB,OAAO,CACL,SAAS,EAAE,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,EACrE,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,WAAW,CAAC,CAAC;KACzB,CAAC;IACF,eAAe,CAAC,CAAC,SAAS,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;CACtH;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,YAAY;IAC/C,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,eAAe,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC;;CAelD;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE;QACN,WAAW,CACT,SAAS,EAAE,qBAAqB,GAAG,cAAc,EACjD,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,SAAS,QAAQ,EAAE,GAC7B,OAAO,CAAC,aAAa,CAAC,CAAC;QAC1B,SAAS,CACP,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,EAChC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,qBAAqB,GAAG,iBAAiB,GAAG,eAAe,EACtE,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,SAAS,QAAQ,EAAE,GAC7B,OAAO,CAAC,SAAS,CAAC,CAAC;QACtB,SAAS,CACP,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,EAChC,GAAG,EAAE,SAAS,GACb,OAAO,CAAC,WAAW,CAAC,CAAC;QACxB,OAAO,CACL,SAAS,EAAE,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,EACrE,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,WAAW,CAAC,CAAC;QACxB,OAAO,CACL,SAAS,EAAE,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,EACrE,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,WAAW,CAAC,CAAC;KACzB,CAAC;IACF,eAAe,CAAC,CAAC,SAAS,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;CACtH;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,YAAY;IAC/C,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,eAAe,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC;;CAelD;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC;AAK/C,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAoB,UAAU,EAAE,gBAAgB,EAAa,MAAM,UAAU,CAAC;AAIhH,eAAO,MAAM,WAAW,uLAAe,CAAC;AACxC,eAAO,MAAM,sBAAsB,gLAAiB,CAAC;AAErD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAehF;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAQxE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAQlE;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwBhG;AAWD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAkC/E;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,CAAC,CAkDjB;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CA2EjB"}
|
package/dist/cjs/crypto/index.js
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.verifySchnorrSignature = exports.signSchnorr = exports.customCrypto = exports.CustomCrypto = void 0;
|
|
8
|
-
exports.generateKeyPair = generateKeyPair;
|
|
9
8
|
exports.getPublicKey = getPublicKey;
|
|
10
9
|
exports.validateKeyPair = validateKeyPair;
|
|
11
10
|
exports.createEvent = createEvent;
|
|
@@ -36,28 +35,13 @@ class CustomCrypto {
|
|
|
36
35
|
exports.CustomCrypto = CustomCrypto;
|
|
37
36
|
// Create and export default instance
|
|
38
37
|
exports.customCrypto = new CustomCrypto();
|
|
39
|
-
const secp256k1_1 = require("@noble/curves/secp256k1");
|
|
40
|
-
const secp256k1_2 = require("@noble/curves/secp256k1");
|
|
41
38
|
const sha256_1 = require("@noble/hashes/sha256");
|
|
42
|
-
const utils_1 = require("@noble/
|
|
43
|
-
const
|
|
39
|
+
const utils_1 = require("@noble/hashes/utils");
|
|
40
|
+
const secp256k1_1 = require("@noble/curves/secp256k1");
|
|
44
41
|
const logger_1 = require("../utils/logger");
|
|
45
|
-
//
|
|
42
|
+
// Re-export schnorr functions for backward compatibility
|
|
46
43
|
exports.signSchnorr = secp256k1_1.schnorr.sign;
|
|
47
44
|
exports.verifySchnorrSignature = secp256k1_1.schnorr.verify;
|
|
48
|
-
/**
|
|
49
|
-
* Generates a new key pair
|
|
50
|
-
* @returns Generated key pair
|
|
51
|
-
*/
|
|
52
|
-
async function generateKeyPair() {
|
|
53
|
-
const privateKeyBytes = (0, utils_2.randomBytes)(32);
|
|
54
|
-
const privateKey = (0, utils_1.bytesToHex)(privateKeyBytes);
|
|
55
|
-
const publicKey = await getPublicKey(privateKey);
|
|
56
|
-
return {
|
|
57
|
-
privateKey,
|
|
58
|
-
publicKey
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
45
|
/**
|
|
62
46
|
* Gets the public key from a private key
|
|
63
47
|
* @param privateKey - Private key in hex format
|
|
@@ -65,7 +49,7 @@ async function generateKeyPair() {
|
|
|
65
49
|
*/
|
|
66
50
|
async function getPublicKey(privateKey) {
|
|
67
51
|
try {
|
|
68
|
-
const publicKeyBytes = secp256k1_1.
|
|
52
|
+
const publicKeyBytes = secp256k1_1.secp256k1.getPublicKey((0, utils_1.hexToBytes)(privateKey));
|
|
69
53
|
const publicKeyHex = (0, utils_1.bytesToHex)(publicKeyBytes);
|
|
70
54
|
return {
|
|
71
55
|
hex: publicKeyHex,
|
|
@@ -125,11 +109,12 @@ async function signEvent(event, privateKey) {
|
|
|
125
109
|
event.content
|
|
126
110
|
]);
|
|
127
111
|
const hash = (0, sha256_1.sha256)(new TextEncoder().encode(serialized));
|
|
128
|
-
const sig = secp256k1_1.
|
|
112
|
+
const sig = secp256k1_1.secp256k1.sign(hash, (0, utils_1.hexToBytes)(privateKey));
|
|
113
|
+
const sigBytes = new Uint8Array(sig.toCompactRawBytes());
|
|
129
114
|
return {
|
|
130
115
|
...event,
|
|
131
|
-
|
|
132
|
-
|
|
116
|
+
sig: (0, utils_1.bytesToHex)(sigBytes),
|
|
117
|
+
id: (0, utils_1.bytesToHex)(hash)
|
|
133
118
|
};
|
|
134
119
|
}
|
|
135
120
|
catch (error) {
|
|
@@ -169,11 +154,11 @@ async function verifySignature(event) {
|
|
|
169
154
|
return false;
|
|
170
155
|
}
|
|
171
156
|
// Verify signature
|
|
172
|
-
const isValid = secp256k1_1.
|
|
157
|
+
const isValid = secp256k1_1.secp256k1.verify((0, utils_1.hexToBytes)(event.sig), hash, (0, utils_1.hexToBytes)(pubkeyHex));
|
|
173
158
|
return isValid;
|
|
174
159
|
}
|
|
175
160
|
catch (error) {
|
|
176
|
-
logger_1.logger.error({ error }, '
|
|
161
|
+
logger_1.logger.error({ error }, 'Verification error');
|
|
177
162
|
return false;
|
|
178
163
|
}
|
|
179
164
|
}
|
|
@@ -198,10 +183,10 @@ async function encryptMessage(message, privateKey, recipientPubKey) {
|
|
|
198
183
|
throw new Error('Invalid public key format');
|
|
199
184
|
}
|
|
200
185
|
// Generate shared secret using ECDH
|
|
201
|
-
const sharedPoint =
|
|
186
|
+
const sharedPoint = secp256k1_1.secp256k1.getSharedSecret(privateKey, '02' + recipientPubKey);
|
|
202
187
|
const sharedSecret = sharedPoint.slice(1, 33);
|
|
203
188
|
// Generate random IV
|
|
204
|
-
const iv = (0,
|
|
189
|
+
const iv = (0, utils_1.randomBytes)(16);
|
|
205
190
|
// Create encryption key
|
|
206
191
|
const key = await exports.customCrypto.subtle.importKey('raw', sharedSecret, { name: 'AES-CBC', length: 256 }, true, ['encrypt']);
|
|
207
192
|
// Encrypt
|
|
@@ -247,7 +232,7 @@ async function decryptMessage(encryptedMessage, privateKey, senderPubKey) {
|
|
|
247
232
|
const iv = encryptedData.slice(0, 16);
|
|
248
233
|
const ciphertext = encryptedData.slice(16);
|
|
249
234
|
// Generate shared secret using ECDH
|
|
250
|
-
const sharedPoint =
|
|
235
|
+
const sharedPoint = secp256k1_1.secp256k1.getSharedSecret(privateKey, '02' + senderPubKey);
|
|
251
236
|
const sharedSecret = sharedPoint.slice(1, 33);
|
|
252
237
|
// Create decryption key
|
|
253
238
|
const key = await exports.customCrypto.subtle.importKey('raw', sharedSecret, { name: 'AES-CBC', length: 256 }, true, ['decrypt']);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module crypto-utils
|
|
3
|
+
* @description Cryptographic utilities for Nostr
|
|
4
|
+
*/
|
|
5
|
+
import { encrypt, decrypt } from './nips/nip-04.js';
|
|
6
|
+
import { customCrypto, signSchnorr, verifySchnorrSignature, generateKeyPair, getPublicKey, validateKeyPair, getCompressedPublicKey, getSchnorrPublicKey, createEvent, signEvent, verifySignature } from './crypto.js';
|
|
7
|
+
export { customCrypto, signSchnorr, verifySchnorrSignature, generateKeyPair, getPublicKey, validateKeyPair, getCompressedPublicKey, getSchnorrPublicKey, createEvent, signEvent, verifySignature, encrypt, decrypt };
|
|
8
|
+
//# sourceMappingURL=crypto-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-utils.d.ts","sourceRoot":"","sources":["../../src/crypto-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,EACX,SAAS,EACT,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,YAAY,EACZ,WAAW,EACX,sBAAsB,EAGtB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EAGnB,WAAW,EACX,SAAS,EACT,eAAe,EAGf,OAAO,EACP,OAAO,EACR,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @module crypto-utils
|
|
4
|
+
* @description Cryptographic utilities for Nostr
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.decrypt = exports.encrypt = exports.verifySignature = exports.signEvent = exports.createEvent = exports.getSchnorrPublicKey = exports.getCompressedPublicKey = exports.validateKeyPair = exports.getPublicKey = exports.generateKeyPair = exports.verifySchnorrSignature = exports.signSchnorr = exports.customCrypto = void 0;
|
|
8
|
+
const nip_04_js_1 = require("./nips/nip-04.js");
|
|
9
|
+
Object.defineProperty(exports, "encrypt", { enumerable: true, get: function () { return nip_04_js_1.encrypt; } });
|
|
10
|
+
Object.defineProperty(exports, "decrypt", { enumerable: true, get: function () { return nip_04_js_1.decrypt; } });
|
|
11
|
+
const crypto_js_1 = require("./crypto.js");
|
|
12
|
+
Object.defineProperty(exports, "customCrypto", { enumerable: true, get: function () { return crypto_js_1.customCrypto; } });
|
|
13
|
+
Object.defineProperty(exports, "signSchnorr", { enumerable: true, get: function () { return crypto_js_1.signSchnorr; } });
|
|
14
|
+
Object.defineProperty(exports, "verifySchnorrSignature", { enumerable: true, get: function () { return crypto_js_1.verifySchnorrSignature; } });
|
|
15
|
+
Object.defineProperty(exports, "generateKeyPair", { enumerable: true, get: function () { return crypto_js_1.generateKeyPair; } });
|
|
16
|
+
Object.defineProperty(exports, "getPublicKey", { enumerable: true, get: function () { return crypto_js_1.getPublicKey; } });
|
|
17
|
+
Object.defineProperty(exports, "validateKeyPair", { enumerable: true, get: function () { return crypto_js_1.validateKeyPair; } });
|
|
18
|
+
Object.defineProperty(exports, "getCompressedPublicKey", { enumerable: true, get: function () { return crypto_js_1.getCompressedPublicKey; } });
|
|
19
|
+
Object.defineProperty(exports, "getSchnorrPublicKey", { enumerable: true, get: function () { return crypto_js_1.getSchnorrPublicKey; } });
|
|
20
|
+
Object.defineProperty(exports, "createEvent", { enumerable: true, get: function () { return crypto_js_1.createEvent; } });
|
|
21
|
+
Object.defineProperty(exports, "signEvent", { enumerable: true, get: function () { return crypto_js_1.signEvent; } });
|
|
22
|
+
Object.defineProperty(exports, "verifySignature", { enumerable: true, get: function () { return crypto_js_1.verifySignature; } });
|
|
23
|
+
//# sourceMappingURL=crypto-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-utils.js","sourceRoot":"","sources":["../../src/crypto-utils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH,gDAAoD;AAkClD,wFAlCO,mBAAO,OAkCP;AACP,wFAnCgB,mBAAO,OAmChB;AAlCT,2CAYqB;AAInB,6FAfA,wBAAY,OAeA;AACZ,4FAfA,uBAAW,OAeA;AACX,uGAfA,kCAAsB,OAeA;AAGtB,gGAjBA,2BAAe,OAiBA;AACf,6FAjBA,wBAAY,OAiBA;AACZ,gGAjBA,2BAAe,OAiBA;AACf,uGAjBA,kCAAsB,OAiBA;AACtB,oGAjBA,+BAAmB,OAiBA;AAGnB,4FAnBA,uBAAW,OAmBA;AACX,0FAnBA,qBAAS,OAmBA;AACT,gGAnBA,2BAAe,OAmBA"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module crypto
|
|
3
|
+
* @description Cryptographic utilities for Nostr
|
|
4
|
+
*/
|
|
5
|
+
import { KeyPair, PublicKeyDetails, ValidationResult, NostrEvent, SignedNostrEvent, PublicKey } from './types/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Custom crypto interface for cross-platform compatibility
|
|
8
|
+
*/
|
|
9
|
+
export interface CryptoSubtle {
|
|
10
|
+
subtle: {
|
|
11
|
+
generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: readonly KeyUsage[]): Promise<CryptoKeyPair>;
|
|
12
|
+
importKey(format: 'raw' | 'pkcs8' | 'spki', keyData: ArrayBuffer, algorithm: RsaHashedImportParams | EcKeyImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: readonly KeyUsage[]): Promise<CryptoKey>;
|
|
13
|
+
encrypt(algorithm: {
|
|
14
|
+
name: string;
|
|
15
|
+
iv: Uint8Array;
|
|
16
|
+
}, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
|
|
17
|
+
decrypt(algorithm: {
|
|
18
|
+
name: string;
|
|
19
|
+
iv: Uint8Array;
|
|
20
|
+
}, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
|
|
21
|
+
};
|
|
22
|
+
getRandomValues<T extends Uint8Array | Int8Array | Uint16Array | Int16Array | Uint32Array | Int32Array>(array: T): T;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Crypto implementation that works in both Node.js and browser environments
|
|
26
|
+
*/
|
|
27
|
+
declare class CustomCrypto {
|
|
28
|
+
readonly subtle: CryptoSubtle['subtle'];
|
|
29
|
+
readonly getRandomValues: CryptoSubtle['getRandomValues'];
|
|
30
|
+
constructor();
|
|
31
|
+
}
|
|
32
|
+
export declare const customCrypto: CustomCrypto;
|
|
33
|
+
export declare const signSchnorr: (message: import("@noble/curves/abstract/utils.js").Hex, privateKey: import("@noble/curves/abstract/utils.js").PrivKey, auxRand?: import("@noble/curves/abstract/utils.js").Hex) => Uint8Array;
|
|
34
|
+
export declare const verifySchnorrSignature: (signature: import("@noble/curves/abstract/utils.js").Hex, message: import("@noble/curves/abstract/utils.js").Hex, publicKey: import("@noble/curves/abstract/utils.js").Hex) => boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Gets the compressed public key (33 bytes with prefix)
|
|
37
|
+
*/
|
|
38
|
+
export declare function getCompressedPublicKey(privateKeyBytes: Uint8Array): Uint8Array;
|
|
39
|
+
/**
|
|
40
|
+
* Gets the schnorr public key (32 bytes x-coordinate) as per BIP340
|
|
41
|
+
*/
|
|
42
|
+
export declare function getSchnorrPublicKey(privateKeyBytes: Uint8Array): Uint8Array;
|
|
43
|
+
/**
|
|
44
|
+
* Generates a new key pair
|
|
45
|
+
*/
|
|
46
|
+
export declare function generateKeyPair(): Promise<KeyPair>;
|
|
47
|
+
/**
|
|
48
|
+
* Gets the public key from a private key
|
|
49
|
+
*/
|
|
50
|
+
export declare function getPublicKey(privateKey: string): Promise<PublicKeyDetails>;
|
|
51
|
+
/**
|
|
52
|
+
* Validates a key pair
|
|
53
|
+
*/
|
|
54
|
+
export declare function validateKeyPair(publicKey: PublicKey, privateKey: string): Promise<ValidationResult>;
|
|
55
|
+
/**
|
|
56
|
+
* Creates a new event
|
|
57
|
+
*/
|
|
58
|
+
export declare function createEvent(event: Partial<NostrEvent>): NostrEvent;
|
|
59
|
+
/**
|
|
60
|
+
* Signs an event
|
|
61
|
+
*/
|
|
62
|
+
export declare function signEvent(event: NostrEvent, privateKey: string): Promise<SignedNostrEvent>;
|
|
63
|
+
/**
|
|
64
|
+
* Verifies an event signature
|
|
65
|
+
*/
|
|
66
|
+
export declare function verifySignature(event: SignedNostrEvent): Promise<boolean>;
|
|
67
|
+
/**
|
|
68
|
+
* Encrypts a message using NIP-04
|
|
69
|
+
*/
|
|
70
|
+
export declare function encrypt(message: string, recipientPubKey: PublicKey | string, senderPrivKey: string): Promise<string>;
|
|
71
|
+
/**
|
|
72
|
+
* Decrypts a message using NIP-04
|
|
73
|
+
*/
|
|
74
|
+
export declare function decrypt(encryptedMessage: string, senderPubKey: PublicKey | string, recipientPrivKey: string): Promise<string>;
|
|
75
|
+
export {};
|
|
76
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @module crypto
|
|
4
|
+
* @description Cryptographic utilities for Nostr
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.verifySchnorrSignature = exports.signSchnorr = exports.customCrypto = void 0;
|
|
8
|
+
exports.getCompressedPublicKey = getCompressedPublicKey;
|
|
9
|
+
exports.getSchnorrPublicKey = getSchnorrPublicKey;
|
|
10
|
+
exports.generateKeyPair = generateKeyPair;
|
|
11
|
+
exports.getPublicKey = getPublicKey;
|
|
12
|
+
exports.validateKeyPair = validateKeyPair;
|
|
13
|
+
exports.createEvent = createEvent;
|
|
14
|
+
exports.signEvent = signEvent;
|
|
15
|
+
exports.verifySignature = verifySignature;
|
|
16
|
+
exports.encrypt = encrypt;
|
|
17
|
+
exports.decrypt = decrypt;
|
|
18
|
+
const node_crypto_1 = require("node:crypto");
|
|
19
|
+
const secp256k1_js_1 = require("@noble/curves/secp256k1.js");
|
|
20
|
+
const utils_js_1 = require("@noble/curves/abstract/utils.js");
|
|
21
|
+
const sha256_js_1 = require("@noble/hashes/sha256.js");
|
|
22
|
+
const utils_js_2 = require("@noble/hashes/utils.js");
|
|
23
|
+
const logger_js_1 = require("./utils/logger.js");
|
|
24
|
+
/**
|
|
25
|
+
* Crypto implementation that works in both Node.js and browser environments
|
|
26
|
+
*/
|
|
27
|
+
class CustomCrypto {
|
|
28
|
+
constructor() {
|
|
29
|
+
if (typeof window !== 'undefined' && window.crypto) {
|
|
30
|
+
this.subtle = window.crypto.subtle;
|
|
31
|
+
this.getRandomValues = window.crypto.getRandomValues.bind(window.crypto);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
this.subtle = node_crypto_1.webcrypto.subtle;
|
|
35
|
+
this.getRandomValues = node_crypto_1.webcrypto.getRandomValues.bind(node_crypto_1.webcrypto);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Create and export default instance
|
|
40
|
+
exports.customCrypto = new CustomCrypto();
|
|
41
|
+
// Export schnorr functions
|
|
42
|
+
exports.signSchnorr = secp256k1_js_1.schnorr.sign;
|
|
43
|
+
exports.verifySchnorrSignature = secp256k1_js_1.schnorr.verify;
|
|
44
|
+
/**
|
|
45
|
+
* Gets the compressed public key (33 bytes with prefix)
|
|
46
|
+
*/
|
|
47
|
+
function getCompressedPublicKey(privateKeyBytes) {
|
|
48
|
+
return secp256k1_js_1.secp256k1.getPublicKey(privateKeyBytes, true);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Gets the schnorr public key (32 bytes x-coordinate) as per BIP340
|
|
52
|
+
*/
|
|
53
|
+
function getSchnorrPublicKey(privateKeyBytes) {
|
|
54
|
+
return secp256k1_js_1.schnorr.getPublicKey(privateKeyBytes);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Generates a new key pair
|
|
58
|
+
*/
|
|
59
|
+
async function generateKeyPair() {
|
|
60
|
+
const privateKeyBytes = (0, utils_js_2.randomBytes)(32);
|
|
61
|
+
const privateKey = (0, utils_js_1.bytesToHex)(privateKeyBytes);
|
|
62
|
+
const publicKey = await getPublicKey(privateKey);
|
|
63
|
+
return {
|
|
64
|
+
privateKey,
|
|
65
|
+
publicKey
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Gets the public key from a private key
|
|
70
|
+
*/
|
|
71
|
+
async function getPublicKey(privateKey) {
|
|
72
|
+
try {
|
|
73
|
+
const publicKeyBytes = secp256k1_js_1.secp256k1.getPublicKey((0, utils_js_1.hexToBytes)(privateKey));
|
|
74
|
+
const publicKeyHex = (0, utils_js_1.bytesToHex)(publicKeyBytes);
|
|
75
|
+
return {
|
|
76
|
+
hex: publicKeyHex
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
logger_js_1.logger.error({ error }, 'Failed to get public key');
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Validates a key pair
|
|
86
|
+
*/
|
|
87
|
+
async function validateKeyPair(publicKey, privateKey) {
|
|
88
|
+
try {
|
|
89
|
+
const derivedPublicKey = await getPublicKey(privateKey);
|
|
90
|
+
const pubkeyHex = typeof publicKey === 'string' ? publicKey : publicKey.hex;
|
|
91
|
+
return {
|
|
92
|
+
isValid: derivedPublicKey.hex === pubkeyHex,
|
|
93
|
+
error: undefined
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return {
|
|
98
|
+
isValid: false,
|
|
99
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Creates a new event
|
|
105
|
+
*/
|
|
106
|
+
function createEvent(event) {
|
|
107
|
+
const timestamp = Math.floor(Date.now() / 1000);
|
|
108
|
+
return {
|
|
109
|
+
...event,
|
|
110
|
+
created_at: event.created_at || timestamp,
|
|
111
|
+
tags: event.tags || [],
|
|
112
|
+
content: event.content || '',
|
|
113
|
+
kind: event.kind || 1
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Signs an event
|
|
118
|
+
*/
|
|
119
|
+
async function signEvent(event, privateKey) {
|
|
120
|
+
try {
|
|
121
|
+
// Serialize event for signing
|
|
122
|
+
const serialized = JSON.stringify([
|
|
123
|
+
0,
|
|
124
|
+
event.pubkey,
|
|
125
|
+
event.created_at,
|
|
126
|
+
event.kind,
|
|
127
|
+
event.tags,
|
|
128
|
+
event.content
|
|
129
|
+
]);
|
|
130
|
+
const hash = (0, sha256_js_1.sha256)(new TextEncoder().encode(serialized));
|
|
131
|
+
const sig = secp256k1_js_1.secp256k1.sign(hash, (0, utils_js_1.hexToBytes)(privateKey));
|
|
132
|
+
const sigBytes = new Uint8Array(sig.toCompactRawBytes());
|
|
133
|
+
return {
|
|
134
|
+
...event,
|
|
135
|
+
sig: (0, utils_js_1.bytesToHex)(sigBytes),
|
|
136
|
+
id: (0, utils_js_1.bytesToHex)(hash)
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
logger_js_1.logger.error({ error }, 'Failed to sign event');
|
|
141
|
+
throw error;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Verifies an event signature
|
|
146
|
+
*/
|
|
147
|
+
async function verifySignature(event) {
|
|
148
|
+
try {
|
|
149
|
+
// Serialize event for verification
|
|
150
|
+
const serialized = JSON.stringify([
|
|
151
|
+
0,
|
|
152
|
+
event.pubkey,
|
|
153
|
+
event.created_at,
|
|
154
|
+
event.kind,
|
|
155
|
+
event.tags,
|
|
156
|
+
event.content
|
|
157
|
+
]);
|
|
158
|
+
const hash = (0, sha256_js_1.sha256)(new TextEncoder().encode(serialized));
|
|
159
|
+
const pubkeyHex = typeof event.pubkey === 'string' ? event.pubkey : event.pubkey;
|
|
160
|
+
// Verify signature
|
|
161
|
+
const isValid = secp256k1_js_1.secp256k1.verify((0, utils_js_1.hexToBytes)(event.sig), hash, (0, utils_js_1.hexToBytes)(pubkeyHex));
|
|
162
|
+
return isValid;
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
logger_js_1.logger.error({ error }, 'Verification error');
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Encrypts a message using NIP-04
|
|
171
|
+
*/
|
|
172
|
+
async function encrypt(message, recipientPubKey, senderPrivKey) {
|
|
173
|
+
try {
|
|
174
|
+
const recipientPubKeyHex = typeof recipientPubKey === 'string' ? recipientPubKey : recipientPubKey.hex;
|
|
175
|
+
const sharedPoint = secp256k1_js_1.secp256k1.getSharedSecret((0, utils_js_1.hexToBytes)(senderPrivKey), (0, utils_js_1.hexToBytes)(recipientPubKeyHex));
|
|
176
|
+
const sharedX = sharedPoint.subarray(1, 33);
|
|
177
|
+
// Generate random IV
|
|
178
|
+
const iv = (0, utils_js_2.randomBytes)(16);
|
|
179
|
+
const key = await exports.customCrypto.subtle.importKey('raw', sharedX, { name: 'AES-CBC', length: 256 }, false, ['encrypt']);
|
|
180
|
+
// Encrypt the message
|
|
181
|
+
const data = new TextEncoder().encode(message);
|
|
182
|
+
const encrypted = await exports.customCrypto.subtle.encrypt({ name: 'AES-CBC', iv }, key, data);
|
|
183
|
+
// Combine IV and ciphertext
|
|
184
|
+
const combined = new Uint8Array(iv.length + encrypted.byteLength);
|
|
185
|
+
combined.set(iv);
|
|
186
|
+
combined.set(new Uint8Array(encrypted), iv.length);
|
|
187
|
+
return (0, utils_js_1.bytesToHex)(combined);
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
logger_js_1.logger.error({ error }, 'Failed to encrypt message');
|
|
191
|
+
throw error;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Decrypts a message using NIP-04
|
|
196
|
+
*/
|
|
197
|
+
async function decrypt(encryptedMessage, senderPubKey, recipientPrivKey) {
|
|
198
|
+
try {
|
|
199
|
+
const senderPubKeyHex = typeof senderPubKey === 'string' ? senderPubKey : senderPubKey.hex;
|
|
200
|
+
const sharedPoint = secp256k1_js_1.secp256k1.getSharedSecret((0, utils_js_1.hexToBytes)(recipientPrivKey), (0, utils_js_1.hexToBytes)(senderPubKeyHex));
|
|
201
|
+
const sharedX = sharedPoint.subarray(1, 33);
|
|
202
|
+
const encrypted = (0, utils_js_1.hexToBytes)(encryptedMessage);
|
|
203
|
+
const iv = encrypted.slice(0, 16);
|
|
204
|
+
const ciphertext = encrypted.slice(16);
|
|
205
|
+
const key = await exports.customCrypto.subtle.importKey('raw', sharedX, { name: 'AES-CBC', length: 256 }, false, ['decrypt']);
|
|
206
|
+
const decrypted = await exports.customCrypto.subtle.decrypt({ name: 'AES-CBC', iv }, key, ciphertext);
|
|
207
|
+
return new TextDecoder().decode(decrypted);
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
logger_js_1.logger.error({ error }, 'Failed to decrypt message');
|
|
211
|
+
throw error;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,22 @@
|
|
|
2
2
|
* Encoding utilities for Nostr
|
|
3
3
|
* @module encoding
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* Utility functions for encoding and decoding data
|
|
7
|
+
*/
|
|
5
8
|
export * from './hex';
|
|
6
9
|
export * from './base64';
|
|
7
10
|
export * from './binary';
|
|
11
|
+
/**
|
|
12
|
+
* Convert a hex string to Uint8Array
|
|
13
|
+
* @param hex Hex string to convert
|
|
14
|
+
* @returns Uint8Array of bytes
|
|
15
|
+
*/
|
|
16
|
+
export declare function hexToBytes(hex: string): Uint8Array;
|
|
17
|
+
/**
|
|
18
|
+
* Convert Uint8Array to hex string
|
|
19
|
+
* @param bytes Uint8Array to convert
|
|
20
|
+
* @returns Hex string
|
|
21
|
+
*/
|
|
22
|
+
export declare function bytesToHex(bytes: Uint8Array): string;
|
|
8
23
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/encoding/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/encoding/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AAEH,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AAEzB;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAMlD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAIpD"}
|
|
@@ -18,7 +18,34 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
18
18
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
19
|
};
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.hexToBytes = hexToBytes;
|
|
22
|
+
exports.bytesToHex = bytesToHex;
|
|
23
|
+
/**
|
|
24
|
+
* Utility functions for encoding and decoding data
|
|
25
|
+
*/
|
|
21
26
|
__exportStar(require("./hex"), exports);
|
|
22
27
|
__exportStar(require("./base64"), exports);
|
|
23
28
|
__exportStar(require("./binary"), exports);
|
|
29
|
+
/**
|
|
30
|
+
* Convert a hex string to Uint8Array
|
|
31
|
+
* @param hex Hex string to convert
|
|
32
|
+
* @returns Uint8Array of bytes
|
|
33
|
+
*/
|
|
34
|
+
function hexToBytes(hex) {
|
|
35
|
+
const bytes = new Uint8Array(hex.length / 2);
|
|
36
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
37
|
+
bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);
|
|
38
|
+
}
|
|
39
|
+
return bytes;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Convert Uint8Array to hex string
|
|
43
|
+
* @param bytes Uint8Array to convert
|
|
44
|
+
* @returns Hex string
|
|
45
|
+
*/
|
|
46
|
+
function bytesToHex(bytes) {
|
|
47
|
+
return Array.from(bytes)
|
|
48
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
49
|
+
.join('');
|
|
50
|
+
}
|
|
24
51
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/encoding/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,wCAAsB;AACtB,2CAAyB;AACzB,2CAAyB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/encoding/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAeH,gCAMC;AAOD,gCAIC;AA9BD;;GAEG;AAEH,wCAAsB;AACtB,2CAAyB;AACzB,2CAAyB;AAEzB;;;;GAIG;AACH,SAAgB,UAAU,CAAC,GAAW;IAClC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,KAAiB;IACxC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACzC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|