@sebastienrousseau/crypto-lib 0.0.3 → 0.0.8
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/README.md +304 -314
- package/dist/accel/index.d.ts +11 -0
- package/dist/accel/index.d.ts.map +1 -0
- package/dist/accel/index.js +31 -0
- package/dist/accel/native-pqc-bridge.d.ts +18 -0
- package/dist/accel/native-pqc-bridge.d.ts.map +1 -0
- package/dist/accel/native-pqc-bridge.js +100 -0
- package/dist/accel/wasm-bridge.d.ts +35 -0
- package/dist/accel/wasm-bridge.d.ts.map +1 -0
- package/dist/accel/wasm-bridge.js +161 -0
- package/dist/accel/webcrypto-bridge.d.ts +32 -0
- package/dist/accel/webcrypto-bridge.d.ts.map +1 -0
- package/dist/accel/webcrypto-bridge.js +179 -0
- package/dist/accel/webcrypto-modern.d.ts +40 -0
- package/dist/accel/webcrypto-modern.d.ts.map +1 -0
- package/dist/accel/webcrypto-modern.js +213 -0
- package/dist/accel/worker-pool.d.ts +23 -0
- package/dist/accel/worker-pool.d.ts.map +1 -0
- package/dist/accel/worker-pool.js +119 -0
- package/dist/bin/cryptolib.d.ts +9 -7
- package/dist/bin/cryptolib.d.ts.map +1 -1
- package/dist/bin/cryptolib.js +25 -16
- package/dist/config/config.d.ts.map +1 -1
- package/dist/crypto.d.ts +43 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +107 -0
- package/dist/enums.d.ts +29 -29
- package/dist/enums.d.ts.map +1 -1
- package/dist/enums.js +54 -54
- package/dist/errors.d.ts +14 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +22 -0
- package/dist/high-level/index.d.ts +11 -0
- package/dist/high-level/index.d.ts.map +1 -0
- package/dist/high-level/index.js +53 -0
- package/dist/high-level/key-wrap.d.ts +16 -0
- package/dist/high-level/key-wrap.d.ts.map +1 -0
- package/dist/high-level/key-wrap.js +93 -0
- package/dist/high-level/multi-recipient.d.ts +25 -0
- package/dist/high-level/multi-recipient.d.ts.map +1 -0
- package/dist/high-level/multi-recipient.js +122 -0
- package/dist/high-level/password-encrypt.d.ts +14 -0
- package/dist/high-level/password-encrypt.d.ts.map +1 -0
- package/dist/high-level/password-encrypt.js +93 -0
- package/dist/high-level/sealedbox.d.ts +13 -0
- package/dist/high-level/sealedbox.d.ts.map +1 -0
- package/dist/high-level/sealedbox.js +119 -0
- package/dist/high-level/secretbox.d.ts +7 -0
- package/dist/high-level/secretbox.d.ts.map +1 -0
- package/dist/high-level/secretbox.js +54 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +59 -0
- package/dist/key/key.d.ts +6 -13
- package/dist/key/key.d.ts.map +1 -1
- package/dist/key/key.js +20 -14
- package/dist/key/keystore.d.ts +11 -0
- package/dist/key/keystore.d.ts.map +1 -0
- package/dist/key/keystore.js +87 -0
- package/dist/keys/index.d.ts +7 -0
- package/dist/keys/index.d.ts.map +1 -0
- package/dist/keys/index.js +22 -0
- package/dist/keys/keygen.d.ts +16 -0
- package/dist/keys/keygen.d.ts.map +1 -0
- package/dist/keys/keygen.js +128 -0
- package/dist/keys/keyring.d.ts +35 -0
- package/dist/keys/keyring.d.ts.map +1 -0
- package/dist/keys/keyring.js +136 -0
- package/dist/keys/serialize.d.ts +30 -0
- package/dist/keys/serialize.d.ts.map +1 -0
- package/dist/keys/serialize.js +120 -0
- package/dist/lib/decrypt.d.ts +4 -1
- package/dist/lib/decrypt.d.ts.map +1 -1
- package/dist/lib/decrypt.js +43 -51
- package/dist/lib/encrypt.d.ts +1 -1
- package/dist/lib/encrypt.d.ts.map +1 -1
- package/dist/lib/encrypt.js +29 -45
- package/dist/lib/generate.d.ts.map +1 -1
- package/dist/lib/generate.js +56 -63
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +17 -7
- package/dist/lib/key-output.d.ts +7 -0
- package/dist/lib/key-output.d.ts.map +1 -0
- package/dist/lib/key-output.js +50 -0
- package/dist/lib/reformat.d.ts +6 -1
- package/dist/lib/reformat.d.ts.map +1 -1
- package/dist/lib/reformat.js +37 -61
- package/dist/lib/revoke.d.ts +2 -2
- package/dist/lib/revoke.d.ts.map +1 -1
- package/dist/lib/revoke.js +33 -50
- package/dist/lib/session.d.ts.map +1 -1
- package/dist/lib/session.js +21 -36
- package/dist/lib/sign.d.ts.map +1 -1
- package/dist/lib/sign.js +36 -43
- package/dist/lib/verify.d.ts +1 -3
- package/dist/lib/verify.d.ts.map +1 -1
- package/dist/lib/verify.js +25 -30
- package/dist/modern/aead.d.ts +17 -0
- package/dist/modern/aead.d.ts.map +1 -0
- package/dist/modern/aead.js +51 -0
- package/dist/modern/aes.d.ts +35 -0
- package/dist/modern/aes.d.ts.map +1 -0
- package/dist/modern/aes.js +82 -0
- package/dist/modern/cost-limits.d.ts +11 -0
- package/dist/modern/cost-limits.d.ts.map +1 -0
- package/dist/modern/cost-limits.js +35 -0
- package/dist/modern/curves.d.ts +86 -0
- package/dist/modern/curves.d.ts.map +1 -0
- package/dist/modern/curves.js +171 -0
- package/dist/modern/ecdh.d.ts +11 -0
- package/dist/modern/ecdh.d.ts.map +1 -0
- package/dist/modern/ecdh.js +28 -0
- package/dist/modern/fn-dsa.d.ts +19 -0
- package/dist/modern/fn-dsa.d.ts.map +1 -0
- package/dist/modern/fn-dsa.js +57 -0
- package/dist/modern/hash.d.ts +13 -0
- package/dist/modern/hash.d.ts.map +1 -0
- package/dist/modern/hash.js +45 -0
- package/dist/modern/hpke.d.ts +47 -0
- package/dist/modern/hpke.d.ts.map +1 -0
- package/dist/modern/hpke.js +207 -0
- package/dist/modern/index.d.ts +40 -0
- package/dist/modern/index.d.ts.map +1 -0
- package/dist/modern/index.js +194 -0
- package/dist/modern/kdf.d.ts +23 -0
- package/dist/modern/kdf.d.ts.map +1 -0
- package/dist/modern/kdf.js +67 -0
- package/dist/modern/mac.d.ts +51 -0
- package/dist/modern/mac.d.ts.map +1 -0
- package/dist/modern/mac.js +119 -0
- package/dist/modern/password.d.ts +40 -0
- package/dist/modern/password.d.ts.map +1 -0
- package/dist/modern/password.js +123 -0
- package/dist/modern/pq-hash-sign.d.ts +18 -0
- package/dist/modern/pq-hash-sign.d.ts.map +1 -0
- package/dist/modern/pq-hash-sign.js +73 -0
- package/dist/modern/pq-kem.d.ts +88 -0
- package/dist/modern/pq-kem.d.ts.map +1 -0
- package/dist/modern/pq-kem.js +270 -0
- package/dist/modern/pq-sign.d.ts +30 -0
- package/dist/modern/pq-sign.d.ts.map +1 -0
- package/dist/modern/pq-sign.js +94 -0
- package/dist/modern/pq.d.ts +38 -0
- package/dist/modern/pq.d.ts.map +1 -0
- package/dist/modern/pq.js +80 -0
- package/dist/modern/signing.d.ts +16 -0
- package/dist/modern/signing.d.ts.map +1 -0
- package/dist/modern/signing.js +34 -0
- package/dist/protocols/index.d.ts +7 -0
- package/dist/protocols/index.d.ts.map +1 -0
- package/dist/protocols/index.js +46 -0
- package/dist/protocols/iso20022.d.ts +51 -0
- package/dist/protocols/iso20022.d.ts.map +1 -0
- package/dist/protocols/iso20022.js +145 -0
- package/dist/protocols/opaque/ake.d.ts +51 -0
- package/dist/protocols/opaque/ake.d.ts.map +1 -0
- package/dist/protocols/opaque/ake.js +102 -0
- package/dist/protocols/opaque/client.d.ts +45 -0
- package/dist/protocols/opaque/client.d.ts.map +1 -0
- package/dist/protocols/opaque/client.js +63 -0
- package/dist/protocols/opaque/config.d.ts +14 -0
- package/dist/protocols/opaque/config.d.ts.map +1 -0
- package/dist/protocols/opaque/config.js +18 -0
- package/dist/protocols/opaque/credentials.d.ts +29 -0
- package/dist/protocols/opaque/credentials.d.ts.map +1 -0
- package/dist/protocols/opaque/credentials.js +61 -0
- package/dist/protocols/opaque/envelope.d.ts +36 -0
- package/dist/protocols/opaque/envelope.d.ts.map +1 -0
- package/dist/protocols/opaque/envelope.js +77 -0
- package/dist/protocols/opaque/ksf.d.ts +15 -0
- package/dist/protocols/opaque/ksf.d.ts.map +1 -0
- package/dist/protocols/opaque/ksf.js +27 -0
- package/dist/protocols/opaque/messages.d.ts +61 -0
- package/dist/protocols/opaque/messages.d.ts.map +1 -0
- package/dist/protocols/opaque/messages.js +94 -0
- package/dist/protocols/opaque/server.d.ts +33 -0
- package/dist/protocols/opaque/server.d.ts.map +1 -0
- package/dist/protocols/opaque/server.js +74 -0
- package/dist/protocols/opaque/suite.d.ts +58 -0
- package/dist/protocols/opaque/suite.d.ts.map +1 -0
- package/dist/protocols/opaque/suite.js +115 -0
- package/dist/protocols/pake.d.ts +14 -0
- package/dist/protocols/pake.d.ts.map +1 -0
- package/dist/protocols/pake.js +33 -0
- package/dist/protocols/pqxdh.d.ts +53 -0
- package/dist/protocols/pqxdh.d.ts.map +1 -0
- package/dist/protocols/pqxdh.js +143 -0
- package/dist/protocols/ratchet.d.ts +52 -0
- package/dist/protocols/ratchet.d.ts.map +1 -0
- package/dist/protocols/ratchet.js +187 -0
- package/dist/protocols/threshold.d.ts +23 -0
- package/dist/protocols/threshold.d.ts.map +1 -0
- package/dist/protocols/threshold.js +191 -0
- package/dist/registry.d.ts +20 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +399 -0
- package/dist/streaming/index.d.ts +7 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +15 -0
- package/dist/streaming/stream-aead.d.ts +17 -0
- package/dist/streaming/stream-aead.d.ts.map +1 -0
- package/dist/streaming/stream-aead.js +125 -0
- package/dist/streaming/stream-hash.d.ts +9 -0
- package/dist/streaming/stream-hash.d.ts.map +1 -0
- package/dist/streaming/stream-hash.js +52 -0
- package/dist/streaming/web-streams.d.ts +17 -0
- package/dist/streaming/web-streams.d.ts.map +1 -0
- package/dist/streaming/web-streams.js +114 -0
- package/dist/tokens/index.d.ts +5 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +15 -0
- package/dist/tokens/key-rotation.d.ts +20 -0
- package/dist/tokens/key-rotation.d.ts.map +1 -0
- package/dist/tokens/key-rotation.js +76 -0
- package/dist/tokens/paseto.d.ts +46 -0
- package/dist/tokens/paseto.d.ts.map +1 -0
- package/dist/tokens/paseto.js +200 -0
- package/dist/types/types.d.ts +24 -16
- package/dist/types/types.d.ts.map +1 -1
- package/dist/utils.d.ts +13 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +56 -0
- package/package.json +77 -142
- package/dist/COPYRIGHT +0 -15
- package/dist/Report.txt +0 -160
- package/dist/bin/cryptolib.js.map +0 -1
- package/dist/config/config.js.map +0 -1
- package/dist/data/decrypted.txt +0 -1
- package/dist/data/detached.sig +0 -1
- package/dist/data/encrypted.txt +0 -1
- package/dist/data/signed.sig +0 -1
- package/dist/enums.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/key/key.js.map +0 -1
- package/dist/key/rsa-reformat.cert +0 -1
- package/dist/key/rsa-reformat.key +0 -1
- package/dist/key/rsa-reformat.pub +0 -1
- package/dist/key/rsa-revoke.key +0 -1
- package/dist/key/rsa-revoke.pub +0 -1
- package/dist/key/rsa.cert +0 -1
- package/dist/key/rsa.key +0 -1
- package/dist/key/rsa.pub +0 -1
- package/dist/lib/decrypt.js.map +0 -1
- package/dist/lib/encrypt.js.map +0 -1
- package/dist/lib/generate.js.map +0 -1
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/reformat.js.map +0 -1
- package/dist/lib/revoke.js.map +0 -1
- package/dist/lib/session.js.map +0 -1
- package/dist/lib/sign.js.map +0 -1
- package/dist/lib/verify.js.map +0 -1
- package/dist/package.json +0 -143
- package/dist/types/types.js.map +0 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KEY_ALGORITHMS = void 0;
|
|
4
|
+
exports.generateKeyPair = generateKeyPair;
|
|
5
|
+
const ed25519_js_1 = require("@noble/curves/ed25519.js");
|
|
6
|
+
const ed448_js_1 = require("@noble/curves/ed448.js");
|
|
7
|
+
const nist_js_1 = require("@noble/curves/nist.js");
|
|
8
|
+
const ml_kem_js_1 = require("@noble/post-quantum/ml-kem.js");
|
|
9
|
+
const ml_dsa_js_1 = require("@noble/post-quantum/ml-dsa.js");
|
|
10
|
+
const utils_js_1 = require("@noble/ciphers/utils.js");
|
|
11
|
+
const sha2_js_1 = require("@noble/hashes/sha2.js");
|
|
12
|
+
const serialize_1 = require("./serialize");
|
|
13
|
+
exports.KEY_ALGORITHMS = [
|
|
14
|
+
"ed25519",
|
|
15
|
+
"x25519",
|
|
16
|
+
"ed448",
|
|
17
|
+
"x448",
|
|
18
|
+
"p256",
|
|
19
|
+
"p384",
|
|
20
|
+
"ml-kem-512",
|
|
21
|
+
"ml-kem-768",
|
|
22
|
+
"ml-kem-1024",
|
|
23
|
+
"ml-dsa-44",
|
|
24
|
+
"ml-dsa-65",
|
|
25
|
+
"ml-dsa-87",
|
|
26
|
+
];
|
|
27
|
+
function toHex(bytes) {
|
|
28
|
+
return Buffer.from(bytes).toString("hex");
|
|
29
|
+
}
|
|
30
|
+
function generateKid(publicKey) {
|
|
31
|
+
const digest = (0, sha2_js_1.sha256)(publicKey);
|
|
32
|
+
return (0, serialize_1.bytesToBase64url)(digest.subarray(0, 16));
|
|
33
|
+
}
|
|
34
|
+
function generateKeyPair(algorithm, metadata = {}) {
|
|
35
|
+
let publicKey;
|
|
36
|
+
let privateKey;
|
|
37
|
+
switch (algorithm) {
|
|
38
|
+
case "ed25519": {
|
|
39
|
+
const priv = ed25519_js_1.ed25519.utils.randomSecretKey();
|
|
40
|
+
const pub = ed25519_js_1.ed25519.getPublicKey(priv);
|
|
41
|
+
privateKey = priv;
|
|
42
|
+
publicKey = pub;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
case "x25519": {
|
|
46
|
+
const priv = (0, utils_js_1.randomBytes)(32);
|
|
47
|
+
const pub = ed25519_js_1.x25519.getPublicKey(priv);
|
|
48
|
+
privateKey = priv;
|
|
49
|
+
publicKey = pub;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
case "ed448": {
|
|
53
|
+
const priv = ed448_js_1.ed448.utils.randomSecretKey();
|
|
54
|
+
const pub = ed448_js_1.ed448.getPublicKey(priv);
|
|
55
|
+
privateKey = priv;
|
|
56
|
+
publicKey = pub;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
case "x448": {
|
|
60
|
+
const priv = (0, utils_js_1.randomBytes)(56);
|
|
61
|
+
const pub = ed448_js_1.x448.getPublicKey(priv);
|
|
62
|
+
privateKey = priv;
|
|
63
|
+
publicKey = pub;
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
case "p256": {
|
|
67
|
+
const priv = nist_js_1.p256.utils.randomSecretKey();
|
|
68
|
+
const pub = nist_js_1.p256.getPublicKey(priv);
|
|
69
|
+
privateKey = priv;
|
|
70
|
+
publicKey = pub;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case "p384": {
|
|
74
|
+
const priv = nist_js_1.p384.utils.randomSecretKey();
|
|
75
|
+
const pub = nist_js_1.p384.getPublicKey(priv);
|
|
76
|
+
privateKey = priv;
|
|
77
|
+
publicKey = pub;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case "ml-kem-512": {
|
|
81
|
+
const kp = ml_kem_js_1.ml_kem512.keygen();
|
|
82
|
+
publicKey = kp.publicKey;
|
|
83
|
+
privateKey = kp.secretKey;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case "ml-kem-768": {
|
|
87
|
+
const kp = ml_kem_js_1.ml_kem768.keygen();
|
|
88
|
+
publicKey = kp.publicKey;
|
|
89
|
+
privateKey = kp.secretKey;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case "ml-kem-1024": {
|
|
93
|
+
const kp = ml_kem_js_1.ml_kem1024.keygen();
|
|
94
|
+
publicKey = kp.publicKey;
|
|
95
|
+
privateKey = kp.secretKey;
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
case "ml-dsa-44": {
|
|
99
|
+
const kp = ml_dsa_js_1.ml_dsa44.keygen();
|
|
100
|
+
publicKey = kp.publicKey;
|
|
101
|
+
privateKey = kp.secretKey;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
case "ml-dsa-65": {
|
|
105
|
+
const kp = ml_dsa_js_1.ml_dsa65.keygen();
|
|
106
|
+
publicKey = kp.publicKey;
|
|
107
|
+
privateKey = kp.secretKey;
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
case "ml-dsa-87": {
|
|
111
|
+
const kp = ml_dsa_js_1.ml_dsa87.keygen();
|
|
112
|
+
publicKey = kp.publicKey;
|
|
113
|
+
privateKey = kp.secretKey;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
default:
|
|
117
|
+
throw new Error(`Unsupported algorithm: ${algorithm}. Supported: ${exports.KEY_ALGORITHMS.join(", ")}`);
|
|
118
|
+
}
|
|
119
|
+
const kid = metadata.kid ?? generateKid(publicKey);
|
|
120
|
+
return {
|
|
121
|
+
publicKey: toHex(publicKey),
|
|
122
|
+
privateKey: toHex(privateKey),
|
|
123
|
+
algorithm,
|
|
124
|
+
kid,
|
|
125
|
+
metadata: { ...metadata, kid },
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=keygen.js.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type KeyAlgorithm, type KeyMetadata } from "./keygen";
|
|
2
|
+
import { type Jwk } from "./serialize";
|
|
3
|
+
export interface KeyEntry {
|
|
4
|
+
kid: string;
|
|
5
|
+
algorithm: KeyAlgorithm;
|
|
6
|
+
publicKey: string;
|
|
7
|
+
privateKey: string;
|
|
8
|
+
use?: "sig" | "enc" | undefined;
|
|
9
|
+
exp?: string | undefined;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
archived: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface Jwks {
|
|
14
|
+
keys: Jwk[];
|
|
15
|
+
}
|
|
16
|
+
export declare class Keyring {
|
|
17
|
+
private keys;
|
|
18
|
+
get size(): number;
|
|
19
|
+
add(algorithm: KeyAlgorithm, metadata?: KeyMetadata): KeyEntry;
|
|
20
|
+
import(entry: KeyEntry): void;
|
|
21
|
+
get(kid: string): KeyEntry | undefined;
|
|
22
|
+
delete(kid: string): boolean;
|
|
23
|
+
list(filters?: {
|
|
24
|
+
algorithm?: KeyAlgorithm;
|
|
25
|
+
use?: "sig" | "enc";
|
|
26
|
+
includeArchived?: boolean;
|
|
27
|
+
}): KeyEntry[];
|
|
28
|
+
rotate(kid: string): KeyEntry;
|
|
29
|
+
toJwks(): Jwks;
|
|
30
|
+
serialize(): string;
|
|
31
|
+
static deserialize(json: string): Keyring;
|
|
32
|
+
toEncrypted(key: string | Uint8Array): string;
|
|
33
|
+
static fromEncrypted(key: string | Uint8Array, encrypted: string): Keyring;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=keyring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyring.d.ts","sourceRoot":"","sources":["../../src/keys/keyring.ts"],"names":[],"mappings":"AAeA,OAAO,EAAmB,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,EAA6B,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AAMlE,MAAM,WAAW,QAAQ;IAEvB,GAAG,EAAE,MAAM,CAAC;IAEZ,SAAS,EAAE,YAAY,CAAC;IAExB,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,EAAE,MAAM,CAAC;IAEnB,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;IAEhC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEzB,SAAS,EAAE,MAAM,CAAC;IAElB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAGD,MAAM,WAAW,IAAI;IAEnB,IAAI,EAAE,GAAG,EAAE,CAAC;CACb;AAKD,qBAAa,OAAO;IAClB,OAAO,CAAC,IAAI,CAAoC;IAGhD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAKD,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,GAAE,WAAgB,GAAG,QAAQ;IAmBlE,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAO7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAOtC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAO5B,IAAI,CAAC,OAAO,CAAC,EAAE;QACb,SAAS,CAAC,EAAE,YAAY,CAAC;QACzB,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;QACpB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,GAAG,QAAQ,EAAE;IAsBd,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;IAgB7B,MAAM,IAAI,IAAI;IA2Bd,SAAS,IAAI,MAAM;IAOnB,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAczC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM;IAY7C,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAK3E"}
|
|
@@ -0,0 +1,136 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Keyring = void 0;
|
|
37
|
+
const keygen_1 = require("./keygen");
|
|
38
|
+
const serialize_1 = require("./serialize");
|
|
39
|
+
const secretbox = __importStar(require("../high-level/secretbox"));
|
|
40
|
+
class Keyring {
|
|
41
|
+
keys = new Map();
|
|
42
|
+
get size() {
|
|
43
|
+
return this.keys.size;
|
|
44
|
+
}
|
|
45
|
+
add(algorithm, metadata = {}) {
|
|
46
|
+
const kp = (0, keygen_1.generateKeyPair)(algorithm, metadata);
|
|
47
|
+
const entry = {
|
|
48
|
+
kid: kp.kid,
|
|
49
|
+
algorithm: kp.algorithm,
|
|
50
|
+
publicKey: kp.publicKey,
|
|
51
|
+
privateKey: kp.privateKey,
|
|
52
|
+
use: metadata.use,
|
|
53
|
+
exp: metadata.exp,
|
|
54
|
+
createdAt: new Date().toISOString(),
|
|
55
|
+
archived: false,
|
|
56
|
+
};
|
|
57
|
+
this.keys.set(entry.kid, entry);
|
|
58
|
+
return entry;
|
|
59
|
+
}
|
|
60
|
+
import(entry) {
|
|
61
|
+
this.keys.set(entry.kid, entry);
|
|
62
|
+
}
|
|
63
|
+
get(kid) {
|
|
64
|
+
return this.keys.get(kid);
|
|
65
|
+
}
|
|
66
|
+
delete(kid) {
|
|
67
|
+
return this.keys.delete(kid);
|
|
68
|
+
}
|
|
69
|
+
list(filters) {
|
|
70
|
+
let entries = Array.from(this.keys.values());
|
|
71
|
+
if (!filters?.includeArchived) {
|
|
72
|
+
entries = entries.filter((e) => !e.archived);
|
|
73
|
+
}
|
|
74
|
+
if (filters?.algorithm) {
|
|
75
|
+
entries = entries.filter((e) => e.algorithm === filters.algorithm);
|
|
76
|
+
}
|
|
77
|
+
if (filters?.use) {
|
|
78
|
+
entries = entries.filter((e) => e.use === filters.use);
|
|
79
|
+
}
|
|
80
|
+
return entries;
|
|
81
|
+
}
|
|
82
|
+
rotate(kid) {
|
|
83
|
+
const old = this.keys.get(kid);
|
|
84
|
+
if (!old)
|
|
85
|
+
throw new Error(`Key not found: ${kid}`);
|
|
86
|
+
old.archived = true;
|
|
87
|
+
return this.add(old.algorithm, {
|
|
88
|
+
use: old.use,
|
|
89
|
+
exp: old.exp,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
toJwks() {
|
|
93
|
+
const jwks = [];
|
|
94
|
+
for (const entry of this.keys.values()) {
|
|
95
|
+
if (entry.archived)
|
|
96
|
+
continue;
|
|
97
|
+
let jwk = null;
|
|
98
|
+
if (entry.algorithm === "ed25519") {
|
|
99
|
+
jwk = (0, serialize_1.ed25519ToJwk)(entry.publicKey);
|
|
100
|
+
}
|
|
101
|
+
else if (entry.algorithm === "x25519") {
|
|
102
|
+
jwk = (0, serialize_1.x25519ToJwk)(entry.publicKey);
|
|
103
|
+
}
|
|
104
|
+
if (jwk) {
|
|
105
|
+
jwk.kid = entry.kid;
|
|
106
|
+
if (entry.use)
|
|
107
|
+
jwk.use = entry.use;
|
|
108
|
+
jwks.push(jwk);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return { keys: jwks };
|
|
112
|
+
}
|
|
113
|
+
serialize() {
|
|
114
|
+
return JSON.stringify(Array.from(this.keys.entries()));
|
|
115
|
+
}
|
|
116
|
+
static deserialize(json) {
|
|
117
|
+
const ring = new Keyring();
|
|
118
|
+
const entries = JSON.parse(json);
|
|
119
|
+
for (const [kid, entry] of entries) {
|
|
120
|
+
ring.keys.set(kid, entry);
|
|
121
|
+
}
|
|
122
|
+
return ring;
|
|
123
|
+
}
|
|
124
|
+
toEncrypted(key) {
|
|
125
|
+
const json = this.serialize();
|
|
126
|
+
const result = secretbox.seal(key, json);
|
|
127
|
+
return result.sealed;
|
|
128
|
+
}
|
|
129
|
+
static fromEncrypted(key, encrypted) {
|
|
130
|
+
const decrypted = secretbox.open(key, encrypted);
|
|
131
|
+
const json = Buffer.from(decrypted).toString("utf8");
|
|
132
|
+
return Keyring.deserialize(json);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.Keyring = Keyring;
|
|
136
|
+
//# sourceMappingURL=keyring.js.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare function hexToBytes(hex: string): Uint8Array;
|
|
2
|
+
export declare function bytesToHex(bytes: Uint8Array): string;
|
|
3
|
+
export declare function bytesToBase64(bytes: Uint8Array): string;
|
|
4
|
+
export declare function base64ToBytes(b64: string): Uint8Array;
|
|
5
|
+
export declare function bytesToBase64url(bytes: Uint8Array): string;
|
|
6
|
+
export declare function base64urlToBytes(b64url: string): Uint8Array;
|
|
7
|
+
export type PemLabel = "PUBLIC KEY" | "PRIVATE KEY" | "CERTIFICATE" | "ED25519 PRIVATE KEY" | "ED25519 PUBLIC KEY" | "X25519 PRIVATE KEY" | "X25519 PUBLIC KEY";
|
|
8
|
+
export declare function encodePem(label: PemLabel, der: Uint8Array): string;
|
|
9
|
+
export declare function decodePem(pem: string): {
|
|
10
|
+
label: string;
|
|
11
|
+
data: Uint8Array;
|
|
12
|
+
};
|
|
13
|
+
export interface Jwk {
|
|
14
|
+
kty: string;
|
|
15
|
+
crv?: string;
|
|
16
|
+
alg?: string;
|
|
17
|
+
use?: string;
|
|
18
|
+
kid?: string;
|
|
19
|
+
x?: string;
|
|
20
|
+
d?: string;
|
|
21
|
+
[key: string]: unknown;
|
|
22
|
+
}
|
|
23
|
+
export declare function ed25519ToJwk(publicKeyHex: string, privateKeyHex?: string): Jwk;
|
|
24
|
+
export declare function x25519ToJwk(publicKeyHex: string, privateKeyHex?: string): Jwk;
|
|
25
|
+
export declare function jwkToHex(jwk: Jwk): {
|
|
26
|
+
publicKey: string;
|
|
27
|
+
privateKey?: string;
|
|
28
|
+
};
|
|
29
|
+
export declare function jwkThumbprint(jwk: Jwk): string;
|
|
30
|
+
//# sourceMappingURL=serialize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/keys/serialize.ts"],"names":[],"mappings":"AAiBA,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAIlD;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEpD;AAGD,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEvD;AAGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAErD;AAGD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAE1D;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAI3D;AAKD,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,aAAa,GACb,aAAa,GACb,qBAAqB,GACrB,oBAAoB,GACpB,oBAAoB,GACpB,mBAAmB,CAAC;AAKxB,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM,CAOlE;AAKD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG;IAEtC,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,EAAE,UAAU,CAAC;CAClB,CAkBA;AAKD,MAAM,WAAW,GAAG;IAElB,GAAG,EAAE,MAAM,CAAC;IAEZ,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,CAAC,CAAC,EAAE,MAAM,CAAC;IAEX,CAAC,CAAC,EAAE,MAAM,CAAC;IAEX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAKD,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,MAAM,GACrB,GAAG,CAYL;AAKD,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,GAAG,CAY7E;AAKD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG;IAElC,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAUA;AAKD,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAa9C"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hexToBytes = hexToBytes;
|
|
4
|
+
exports.bytesToHex = bytesToHex;
|
|
5
|
+
exports.bytesToBase64 = bytesToBase64;
|
|
6
|
+
exports.base64ToBytes = base64ToBytes;
|
|
7
|
+
exports.bytesToBase64url = bytesToBase64url;
|
|
8
|
+
exports.base64urlToBytes = base64urlToBytes;
|
|
9
|
+
exports.encodePem = encodePem;
|
|
10
|
+
exports.decodePem = decodePem;
|
|
11
|
+
exports.ed25519ToJwk = ed25519ToJwk;
|
|
12
|
+
exports.x25519ToJwk = x25519ToJwk;
|
|
13
|
+
exports.jwkToHex = jwkToHex;
|
|
14
|
+
exports.jwkThumbprint = jwkThumbprint;
|
|
15
|
+
const sha2_js_1 = require("@noble/hashes/sha2.js");
|
|
16
|
+
function hexToBytes(hex) {
|
|
17
|
+
if (!/^[0-9a-fA-F]*$/.test(hex))
|
|
18
|
+
throw new Error("Invalid hex string");
|
|
19
|
+
if (hex.length % 2 !== 0)
|
|
20
|
+
throw new Error("Hex string must have even length");
|
|
21
|
+
return Buffer.from(hex, "hex");
|
|
22
|
+
}
|
|
23
|
+
function bytesToHex(bytes) {
|
|
24
|
+
return Buffer.from(bytes).toString("hex");
|
|
25
|
+
}
|
|
26
|
+
function bytesToBase64(bytes) {
|
|
27
|
+
return Buffer.from(bytes).toString("base64");
|
|
28
|
+
}
|
|
29
|
+
function base64ToBytes(b64) {
|
|
30
|
+
return Buffer.from(b64, "base64");
|
|
31
|
+
}
|
|
32
|
+
function bytesToBase64url(bytes) {
|
|
33
|
+
return Buffer.from(bytes).toString("base64url");
|
|
34
|
+
}
|
|
35
|
+
function base64urlToBytes(b64url) {
|
|
36
|
+
const b64 = b64url.replace(/-/g, "+").replace(/_/g, "/");
|
|
37
|
+
const pad = (4 - (b64.length % 4)) % 4;
|
|
38
|
+
return Buffer.from(b64 + "=".repeat(pad), "base64");
|
|
39
|
+
}
|
|
40
|
+
function encodePem(label, der) {
|
|
41
|
+
const b64 = Buffer.from(der).toString("base64");
|
|
42
|
+
const lines = [];
|
|
43
|
+
for (let i = 0; i < b64.length; i += 64) {
|
|
44
|
+
lines.push(b64.slice(i, i + 64));
|
|
45
|
+
}
|
|
46
|
+
return `-----BEGIN ${label}-----\n${lines.join("\n")}\n-----END ${label}-----\n`;
|
|
47
|
+
}
|
|
48
|
+
function decodePem(pem) {
|
|
49
|
+
const beginMarker = "-----BEGIN ";
|
|
50
|
+
const endMarker = "-----END ";
|
|
51
|
+
const beginIdx = pem.indexOf(beginMarker);
|
|
52
|
+
if (beginIdx === -1)
|
|
53
|
+
throw new Error("Invalid PEM format");
|
|
54
|
+
const headerEnd = pem.indexOf("-----", beginIdx + beginMarker.length);
|
|
55
|
+
if (headerEnd === -1)
|
|
56
|
+
throw new Error("Invalid PEM format");
|
|
57
|
+
const label = pem.slice(beginIdx + beginMarker.length, headerEnd).trim();
|
|
58
|
+
if (!label)
|
|
59
|
+
throw new Error("Invalid PEM format");
|
|
60
|
+
const closeTag = `${endMarker}${label}-----`;
|
|
61
|
+
const endIdx = pem.indexOf(closeTag, headerEnd + 5);
|
|
62
|
+
if (endIdx === -1)
|
|
63
|
+
throw new Error("Invalid PEM format");
|
|
64
|
+
const b64 = pem.slice(headerEnd + 5, endIdx).replace(/\s/g, "");
|
|
65
|
+
return { label, data: Buffer.from(b64, "base64") };
|
|
66
|
+
}
|
|
67
|
+
function ed25519ToJwk(publicKeyHex, privateKeyHex) {
|
|
68
|
+
const pub = hexToBytes(publicKeyHex);
|
|
69
|
+
const jwk = {
|
|
70
|
+
kty: "OKP",
|
|
71
|
+
crv: "Ed25519",
|
|
72
|
+
alg: "EdDSA",
|
|
73
|
+
x: bytesToBase64url(pub),
|
|
74
|
+
};
|
|
75
|
+
if (privateKeyHex) {
|
|
76
|
+
jwk.d = bytesToBase64url(hexToBytes(privateKeyHex));
|
|
77
|
+
}
|
|
78
|
+
return jwk;
|
|
79
|
+
}
|
|
80
|
+
function x25519ToJwk(publicKeyHex, privateKeyHex) {
|
|
81
|
+
const pub = hexToBytes(publicKeyHex);
|
|
82
|
+
const jwk = {
|
|
83
|
+
kty: "OKP",
|
|
84
|
+
crv: "X25519",
|
|
85
|
+
alg: "ECDH-ES",
|
|
86
|
+
x: bytesToBase64url(pub),
|
|
87
|
+
};
|
|
88
|
+
if (privateKeyHex) {
|
|
89
|
+
jwk.d = bytesToBase64url(hexToBytes(privateKeyHex));
|
|
90
|
+
}
|
|
91
|
+
return jwk;
|
|
92
|
+
}
|
|
93
|
+
function jwkToHex(jwk) {
|
|
94
|
+
if (!jwk.x)
|
|
95
|
+
throw new Error("JWK missing 'x' (public key) field");
|
|
96
|
+
const pub = base64urlToBytes(jwk.x);
|
|
97
|
+
const result = {
|
|
98
|
+
publicKey: bytesToHex(pub),
|
|
99
|
+
};
|
|
100
|
+
if (jwk.d) {
|
|
101
|
+
result.privateKey = bytesToHex(base64urlToBytes(jwk.d));
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
function jwkThumbprint(jwk) {
|
|
106
|
+
let members;
|
|
107
|
+
if (jwk.kty === "OKP") {
|
|
108
|
+
members = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };
|
|
109
|
+
}
|
|
110
|
+
else if (jwk.kty === "EC") {
|
|
111
|
+
members = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk["y"] };
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
members = { kty: jwk.kty };
|
|
115
|
+
}
|
|
116
|
+
const json = JSON.stringify(members, Object.keys(members).sort());
|
|
117
|
+
const digest = (0, sha2_js_1.sha256)(Buffer.from(json, "utf8"));
|
|
118
|
+
return bytesToBase64url(digest);
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=serialize.js.map
|
package/dist/lib/decrypt.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import * as types from "../types/types";
|
|
2
|
-
export declare const decrypt: (data: types.dataDecrypt) => Promise<
|
|
2
|
+
export declare const decrypt: (data: types.dataDecrypt) => Promise<{
|
|
3
|
+
data: string;
|
|
4
|
+
signatureValid: boolean;
|
|
5
|
+
}>;
|
|
3
6
|
export default decrypt;
|
|
4
7
|
//# sourceMappingURL=decrypt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../../src/lib/decrypt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../../src/lib/decrypt.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AA0BxC,eAAO,MAAM,OAAO,GAClB,MAAM,KAAK,CAAC,WAAW,KACtB,OAAO,CAAC;IAET,IAAI,EAAE,MAAM,CAAC;IAEb,cAAc,EAAE,OAAO,CAAC;CACzB,CA8CA,CAAC;AAGF,eAAe,OAAO,CAAC"}
|
package/dist/lib/decrypt.js
CHANGED
|
@@ -15,67 +15,59 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
28
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
36
|
exports.decrypt = void 0;
|
|
30
|
-
const fs = __importStar(require("fs"));
|
|
31
|
-
const path_1 = __importDefault(require("path"));
|
|
32
|
-
const fs_1 = require("fs");
|
|
33
37
|
const openpgp = __importStar(require("openpgp"));
|
|
34
|
-
const
|
|
38
|
+
const keystore_1 = require("../key/keystore");
|
|
35
39
|
const decrypt = async (data) => {
|
|
36
|
-
const message =
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
const privateKey = await openpgp.decryptKey({
|
|
43
|
-
privateKey: await openpgp.readPrivateKey({ armoredKey: privateKeyArmored }),
|
|
44
|
-
passphrase,
|
|
40
|
+
const { message: encryptedMessage, passphrase, publicKey: publicKeyBase64, privateKey: privateKeyBase64, } = data;
|
|
41
|
+
if (!privateKeyBase64) {
|
|
42
|
+
throw new Error("Private key is required for decryption");
|
|
43
|
+
}
|
|
44
|
+
const message = await openpgp.readMessage({
|
|
45
|
+
armoredMessage: Buffer.from(encryptedMessage, "base64").toString("latin1"),
|
|
45
46
|
});
|
|
47
|
+
const publicKeyArmored = Buffer.from(publicKeyBase64, "base64").toString("latin1");
|
|
48
|
+
const privateKeyArmored = Buffer.from(privateKeyBase64, "base64").toString("latin1");
|
|
49
|
+
const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored });
|
|
50
|
+
const privateKey = await (0, keystore_1.unlockPrivateKey)(privateKeyArmored, passphrase);
|
|
46
51
|
const { data: decrypted, signatures } = await openpgp.decrypt({
|
|
47
|
-
message
|
|
52
|
+
message,
|
|
48
53
|
verificationKeys: publicKey,
|
|
49
54
|
decryptionKeys: privateKey,
|
|
50
55
|
});
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
decryptedMsg.end();
|
|
61
|
-
return decrypted;
|
|
62
|
-
};
|
|
63
|
-
exports.decrypt = decrypt;
|
|
64
|
-
if (args instanceof Array && args.length) {
|
|
65
|
-
if (args[0] === "decrypt") {
|
|
66
|
-
const data = {
|
|
67
|
-
passphrase: args[2],
|
|
68
|
-
encryptedMessage: args[4],
|
|
69
|
-
publicKey: args[6],
|
|
70
|
-
};
|
|
71
|
-
(0, exports.decrypt)(data);
|
|
56
|
+
let signatureValid = false;
|
|
57
|
+
if (signatures.length > 0) {
|
|
58
|
+
try {
|
|
59
|
+
await signatures[0].verified;
|
|
60
|
+
signatureValid = true;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
signatureValid = false;
|
|
64
|
+
}
|
|
72
65
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
publicKey: args[5],
|
|
66
|
+
return {
|
|
67
|
+
data: decrypted,
|
|
68
|
+
signatureValid,
|
|
77
69
|
};
|
|
78
|
-
|
|
79
|
-
|
|
70
|
+
};
|
|
71
|
+
exports.decrypt = decrypt;
|
|
80
72
|
exports.default = exports.decrypt;
|
|
81
73
|
//# sourceMappingURL=decrypt.js.map
|
package/dist/lib/encrypt.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../../src/lib/encrypt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../../src/lib/encrypt.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAaxC,eAAO,MAAM,OAAO,GAAU,MAAM,KAAK,CAAC,WAAW,KAAG,OAAO,CAAC,MAAM,CA+BrE,CAAC;AAGF,eAAe,OAAO,CAAC"}
|