@sebastienrousseau/crypto-testing 0.0.9 → 0.0.24
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/helpers.d.ts +2 -0
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +20 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/keys.d.ts +26 -0
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +27 -1
- package/package.json +3 -3
package/dist/helpers.d.ts
CHANGED
|
@@ -9,4 +9,6 @@ export interface MinimalKeyPair {
|
|
|
9
9
|
export declare function expectKeyPair(kp: MinimalKeyPair): void;
|
|
10
10
|
export declare function expectEncryptDecryptRoundTrip(key: string, plaintext: string): void;
|
|
11
11
|
export declare function expectSignVerifyRoundTrip(algorithm: SignAlgorithm): void;
|
|
12
|
+
export declare function mutateBytes(bytes: Uint8Array, byteIndex?: number): Uint8Array;
|
|
13
|
+
export declare function mutateHex(hex: string, byteIndex?: number): string;
|
|
12
14
|
//# sourceMappingURL=helpers.d.ts.map
|
package/dist/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAUA,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAyB3E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAsBnE;AAsBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAYrD;AAgBD,MAAM,WAAW,cAAc;IAE7B,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmBD,wBAAgB,aAAa,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAStD;AAqBD,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,IAAI,CASN;AAsBD,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAgCxE"}
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAUA,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAyB3E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAsBnE;AAsBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAYrD;AAgBD,MAAM,WAAW,cAAc;IAE7B,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmBD,wBAAgB,aAAa,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAStD;AAqBD,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,IAAI,CASN;AAsBD,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAgCxE;AAcD,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAQ7E;AAUD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAUjE"}
|
package/dist/helpers.js
CHANGED
|
@@ -5,6 +5,8 @@ exports.expectValidBase64 = expectValidBase64;
|
|
|
5
5
|
exports.expectKeyPair = expectKeyPair;
|
|
6
6
|
exports.expectEncryptDecryptRoundTrip = expectEncryptDecryptRoundTrip;
|
|
7
7
|
exports.expectSignVerifyRoundTrip = expectSignVerifyRoundTrip;
|
|
8
|
+
exports.mutateBytes = mutateBytes;
|
|
9
|
+
exports.mutateHex = mutateHex;
|
|
8
10
|
const crypto_lib_1 = require("@sebastienrousseau/crypto-lib");
|
|
9
11
|
const HEX_RE = /^[0-9a-fA-F]+$/;
|
|
10
12
|
function expectValidHex(value, length) {
|
|
@@ -79,4 +81,22 @@ function expectSignVerifyRoundTrip(algorithm) {
|
|
|
79
81
|
throw new Error(`Sign/verify round-trip failed for algorithm "${algorithm}"`);
|
|
80
82
|
}
|
|
81
83
|
}
|
|
84
|
+
function mutateBytes(bytes, byteIndex) {
|
|
85
|
+
if (!bytes || bytes.length === 0) {
|
|
86
|
+
throw new Error("Expected a non-empty byte buffer");
|
|
87
|
+
}
|
|
88
|
+
const copy = new Uint8Array(bytes);
|
|
89
|
+
const idx = byteIndex !== undefined ? Math.abs(byteIndex) % copy.length : 0;
|
|
90
|
+
copy[idx] ^= 0x01;
|
|
91
|
+
return copy;
|
|
92
|
+
}
|
|
93
|
+
function mutateHex(hex, byteIndex) {
|
|
94
|
+
if (typeof hex !== "string" || hex.length < 2) {
|
|
95
|
+
throw new Error("Expected a non-empty hex string with at least 2 characters");
|
|
96
|
+
}
|
|
97
|
+
expectValidHex(hex);
|
|
98
|
+
const bytes = Buffer.from(hex, "hex");
|
|
99
|
+
const mutated = mutateBytes(bytes, byteIndex);
|
|
100
|
+
return Buffer.from(mutated).toString("hex");
|
|
101
|
+
}
|
|
82
102
|
//# sourceMappingURL=helpers.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { TEST_KEYS, TEST_VECTORS } from "./keys";
|
|
1
|
+
export { TEST_KEYS, TEST_VECTORS, RFC_VECTORS } from "./keys";
|
|
2
2
|
export { mockHashPassword, mockGenerateKeyPair, mockEncrypt, mockDecrypt, mockSign, mockVerify, } from "./mock";
|
|
3
3
|
export { createTestKeyring, createTestEncryptedMessage, createTestSignedMessage, createTestPasswordHash, } from "./fixtures";
|
|
4
|
-
export { expectValidHex, expectValidBase64, expectKeyPair, expectEncryptDecryptRoundTrip, expectSignVerifyRoundTrip, } from "./helpers";
|
|
4
|
+
export { expectValidHex, expectValidBase64, expectKeyPair, expectEncryptDecryptRoundTrip, expectSignVerifyRoundTrip, mutateBytes, mutateHex, } from "./helpers";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9D,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,QAAQ,EACR,UAAU,GACX,MAAM,QAAQ,CAAC;AAGhB,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,6BAA6B,EAC7B,yBAAyB,EACzB,WAAW,EACX,SAAS,GACV,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.expectSignVerifyRoundTrip = exports.expectEncryptDecryptRoundTrip = exports.expectKeyPair = exports.expectValidBase64 = exports.expectValidHex = exports.createTestPasswordHash = exports.createTestSignedMessage = exports.createTestEncryptedMessage = exports.createTestKeyring = exports.mockVerify = exports.mockSign = exports.mockDecrypt = exports.mockEncrypt = exports.mockGenerateKeyPair = exports.mockHashPassword = exports.TEST_VECTORS = exports.TEST_KEYS = void 0;
|
|
3
|
+
exports.mutateHex = exports.mutateBytes = exports.expectSignVerifyRoundTrip = exports.expectEncryptDecryptRoundTrip = exports.expectKeyPair = exports.expectValidBase64 = exports.expectValidHex = exports.createTestPasswordHash = exports.createTestSignedMessage = exports.createTestEncryptedMessage = exports.createTestKeyring = exports.mockVerify = exports.mockSign = exports.mockDecrypt = exports.mockEncrypt = exports.mockGenerateKeyPair = exports.mockHashPassword = exports.RFC_VECTORS = exports.TEST_VECTORS = exports.TEST_KEYS = void 0;
|
|
4
4
|
var keys_1 = require("./keys");
|
|
5
5
|
Object.defineProperty(exports, "TEST_KEYS", { enumerable: true, get: function () { return keys_1.TEST_KEYS; } });
|
|
6
6
|
Object.defineProperty(exports, "TEST_VECTORS", { enumerable: true, get: function () { return keys_1.TEST_VECTORS; } });
|
|
7
|
+
Object.defineProperty(exports, "RFC_VECTORS", { enumerable: true, get: function () { return keys_1.RFC_VECTORS; } });
|
|
7
8
|
var mock_1 = require("./mock");
|
|
8
9
|
Object.defineProperty(exports, "mockHashPassword", { enumerable: true, get: function () { return mock_1.mockHashPassword; } });
|
|
9
10
|
Object.defineProperty(exports, "mockGenerateKeyPair", { enumerable: true, get: function () { return mock_1.mockGenerateKeyPair; } });
|
|
@@ -22,4 +23,6 @@ Object.defineProperty(exports, "expectValidBase64", { enumerable: true, get: fun
|
|
|
22
23
|
Object.defineProperty(exports, "expectKeyPair", { enumerable: true, get: function () { return helpers_1.expectKeyPair; } });
|
|
23
24
|
Object.defineProperty(exports, "expectEncryptDecryptRoundTrip", { enumerable: true, get: function () { return helpers_1.expectEncryptDecryptRoundTrip; } });
|
|
24
25
|
Object.defineProperty(exports, "expectSignVerifyRoundTrip", { enumerable: true, get: function () { return helpers_1.expectSignVerifyRoundTrip; } });
|
|
26
|
+
Object.defineProperty(exports, "mutateBytes", { enumerable: true, get: function () { return helpers_1.mutateBytes; } });
|
|
27
|
+
Object.defineProperty(exports, "mutateHex", { enumerable: true, get: function () { return helpers_1.mutateHex; } });
|
|
25
28
|
//# sourceMappingURL=index.js.map
|
package/dist/keys.d.ts
CHANGED
|
@@ -20,4 +20,30 @@ export declare const TEST_VECTORS: {
|
|
|
20
20
|
readonly sha3_256: "a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d";
|
|
21
21
|
readonly blake3: "8e7e26d7e72a04d2ed173f90a72ec2a3bf3bb38890c9a2f95f3ab0e18a1e1a4a";
|
|
22
22
|
};
|
|
23
|
+
export declare const RFC_VECTORS: {
|
|
24
|
+
readonly rfc8439_chacha20_poly1305: {
|
|
25
|
+
readonly key: "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f";
|
|
26
|
+
readonly nonce: "070000004041424344454647";
|
|
27
|
+
readonly aad: "50515253c0c1c2c3c4c5c6c7";
|
|
28
|
+
readonly plaintext: "Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it.";
|
|
29
|
+
readonly ciphertext: "d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116";
|
|
30
|
+
readonly tag: "1ae10b594f09e26a7e902ecbd0600691";
|
|
31
|
+
};
|
|
32
|
+
readonly rfc5869_hkdf_sha256: {
|
|
33
|
+
readonly ikm: "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b";
|
|
34
|
+
readonly salt: "000102030405060708090a0b0c";
|
|
35
|
+
readonly info: "f0f1f2f3f4f5f6f7f8f9";
|
|
36
|
+
readonly l: 42;
|
|
37
|
+
readonly prk: "077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e0";
|
|
38
|
+
readonly okm: "3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865";
|
|
39
|
+
};
|
|
40
|
+
readonly nist_aes256_gcm: {
|
|
41
|
+
readonly key: "0000000000000000000000000000000000000000000000000000000000000000";
|
|
42
|
+
readonly iv: "000000000000000000000000";
|
|
43
|
+
readonly plaintext: "";
|
|
44
|
+
readonly aad: "";
|
|
45
|
+
readonly ciphertext: "";
|
|
46
|
+
readonly tag: "530f8afbc74536b9a963b4f1c4cb738b";
|
|
47
|
+
};
|
|
48
|
+
};
|
|
23
49
|
//# sourceMappingURL=keys.d.ts.map
|
package/dist/keys.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;CAgCZ,CAAC;AAaX,eAAO,MAAM,YAAY;;;;;CASf,CAAC"}
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;CAgCZ,CAAC;AAaX,eAAO,MAAM,YAAY;;;;;CASf,CAAC;AAKX,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;CAoCd,CAAC"}
|
package/dist/keys.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TEST_VECTORS = exports.TEST_KEYS = void 0;
|
|
3
|
+
exports.RFC_VECTORS = exports.TEST_VECTORS = exports.TEST_KEYS = void 0;
|
|
4
4
|
exports.TEST_KEYS = {
|
|
5
5
|
ed25519: {
|
|
6
6
|
publicKey: "d75a980182b10ab7d54bfed3c964073a0ee172f3daa3f4a18446b7e8c38f1dd5",
|
|
@@ -23,4 +23,30 @@ exports.TEST_VECTORS = {
|
|
|
23
23
|
sha3_256: "a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d",
|
|
24
24
|
blake3: "8e7e26d7e72a04d2ed173f90a72ec2a3bf3bb38890c9a2f95f3ab0e18a1e1a4a",
|
|
25
25
|
};
|
|
26
|
+
exports.RFC_VECTORS = {
|
|
27
|
+
rfc8439_chacha20_poly1305: {
|
|
28
|
+
key: "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f",
|
|
29
|
+
nonce: "070000004041424344454647",
|
|
30
|
+
aad: "50515253c0c1c2c3c4c5c6c7",
|
|
31
|
+
plaintext: "Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it.",
|
|
32
|
+
ciphertext: "d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116",
|
|
33
|
+
tag: "1ae10b594f09e26a7e902ecbd0600691",
|
|
34
|
+
},
|
|
35
|
+
rfc5869_hkdf_sha256: {
|
|
36
|
+
ikm: "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
|
|
37
|
+
salt: "000102030405060708090a0b0c",
|
|
38
|
+
info: "f0f1f2f3f4f5f6f7f8f9",
|
|
39
|
+
l: 42,
|
|
40
|
+
prk: "077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e0",
|
|
41
|
+
okm: "3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865",
|
|
42
|
+
},
|
|
43
|
+
nist_aes256_gcm: {
|
|
44
|
+
key: "0000000000000000000000000000000000000000000000000000000000000000",
|
|
45
|
+
iv: "000000000000000000000000",
|
|
46
|
+
plaintext: "",
|
|
47
|
+
aad: "",
|
|
48
|
+
ciphertext: "",
|
|
49
|
+
tag: "530f8afbc74536b9a963b4f1c4cb738b",
|
|
50
|
+
},
|
|
51
|
+
};
|
|
26
52
|
//# sourceMappingURL=keys.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sebastienrousseau/crypto-testing",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.24",
|
|
4
4
|
"description": "Deterministic keys, fast mocks, and test fixtures for crypto-lib — make your CI/CD pipeline fast and reproducible.",
|
|
5
5
|
"author": "Sebastien Rousseau <sebastienrousseau@users.noreply.github.com>",
|
|
6
6
|
"license": "MIT OR Apache-2.0",
|
|
@@ -34,10 +34,10 @@
|
|
|
34
34
|
"dist/**/*.d.ts.map"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@sebastienrousseau/crypto-lib": "0.0.
|
|
37
|
+
"@sebastienrousseau/crypto-lib": "0.0.24"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@sebastienrousseau/mocha-config": "^0.0.
|
|
40
|
+
"@sebastienrousseau/mocha-config": "^0.0.7",
|
|
41
41
|
"@types/chai": "^5.2.3",
|
|
42
42
|
"@types/chai-as-promised": "^8.0.2",
|
|
43
43
|
"@types/mocha": "^10.0.10",
|