@li0ard/gost 0.1.5 → 0.1.7
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/gf/gf128.d.ts +2 -0
- package/gf/gf128.js +15 -0
- package/gf/gf256.d.ts +1 -0
- package/gf/gf256.js +62 -0
- package/gf/gf64.d.ts +2 -0
- package/gf/gf64.js +15 -0
- package/gf/index.d.ts +3 -0
- package/gf/index.js +3 -0
- package/gost3410/const.js +20 -20
- package/gost3410/index.d.ts +1 -1
- package/gost3410/index.js +0 -1
- package/gost3410/vko.js +1 -1
- package/gost341194/index.d.ts +3 -3
- package/gost341194/index.js +22 -118
- package/kdf.js +2 -2
- package/kuznyechik/const.js +0 -5
- package/kuznyechik/index.js +40 -139
- package/magma/const.d.ts +38 -38
- package/magma/const.js +190 -190
- package/magma/index.d.ts +1 -2
- package/magma/index.js +16 -23
- package/modes/_keytransform.d.ts +1 -1
- package/modes/mac.js +37 -28
- package/modes/mgm.js +2 -17
- package/modes/wrap.d.ts +1 -1
- package/modes/wrap.js +1 -1
- package/package.json +1 -1
- package/streebog/index.js +42 -155
package/gf/gf128.d.ts
ADDED
package/gf/gf128.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { bytesToNumberBE, numberToBytesBE } from "@noble/curves/utils.js";
|
|
2
|
+
export const gf128Multiply = (a, b) => {
|
|
3
|
+
let x = bytesToNumberBE(a), y = bytesToNumberBE(b), z = 0n;
|
|
4
|
+
const max_bit = 1n << 127n;
|
|
5
|
+
while (y > 0n) {
|
|
6
|
+
if ((y & 1n) == 1n)
|
|
7
|
+
z ^= x;
|
|
8
|
+
if ((x & max_bit) > 0n)
|
|
9
|
+
x = ((x ^ max_bit) << 1n) ^ 0x87n;
|
|
10
|
+
else
|
|
11
|
+
x <<= 1n;
|
|
12
|
+
y >>= 1n;
|
|
13
|
+
}
|
|
14
|
+
return numberToBytesBE(z, 16);
|
|
15
|
+
};
|
package/gf/gf256.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const gf256Multiply: (a: number, b: number) => number;
|
package/gf/gf256.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/*// Precompute GF(256) multiply table
|
|
2
|
+
const gf256Multiply_slow = (a: number, b: number): number => {
|
|
3
|
+
let result = 0, high_bit: number;
|
|
4
|
+
for(let _ = 0; _ < 8; _++) {
|
|
5
|
+
if((b & 1) === 1) result ^= a;
|
|
6
|
+
high_bit = a & 0x80;
|
|
7
|
+
a <<= 1;
|
|
8
|
+
if(high_bit == 0x80) a ^= 0xC3;
|
|
9
|
+
b >>= 1;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return result & 0xFF;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const gen_mul_tables = () => {
|
|
16
|
+
let c = 1;
|
|
17
|
+
|
|
18
|
+
for (let i = 0; i < 256; i++) {
|
|
19
|
+
gf_multtable_log[c] = i;
|
|
20
|
+
gf_multtable_exp[i] = c;
|
|
21
|
+
c = gfMultiply_slow(c, 3);
|
|
22
|
+
}
|
|
23
|
+
}*/
|
|
24
|
+
const gf_multtable_exp = new Uint8Array([
|
|
25
|
+
0x01, 0x03, 0x05, 0x0F, 0x11, 0x33, 0x55, 0xFF, 0xC2, 0x85, 0x4C, 0xD4, 0xBF, 0x02, 0x06, 0x0A,
|
|
26
|
+
0x1E, 0x22, 0x66, 0xAA, 0x3D, 0x47, 0xC9, 0x98, 0x6B, 0xBD, 0x04, 0x0C, 0x14, 0x3C, 0x44, 0xCC,
|
|
27
|
+
0x97, 0x7A, 0x8E, 0x51, 0xF3, 0xD6, 0xB9, 0x08, 0x18, 0x28, 0x78, 0x88, 0x5B, 0xED, 0xF4, 0xDF,
|
|
28
|
+
0xA2, 0x25, 0x6F, 0xB1, 0x10, 0x30, 0x50, 0xF0, 0xD3, 0xB6, 0x19, 0x2B, 0x7D, 0x87, 0x4A, 0xDE,
|
|
29
|
+
0xA1, 0x20, 0x60, 0xA0, 0x23, 0x65, 0xAF, 0x32, 0x56, 0xFA, 0xCD, 0x94, 0x7F, 0x81, 0x40, 0xC0,
|
|
30
|
+
0x83, 0x46, 0xCA, 0x9D, 0x64, 0xAC, 0x37, 0x59, 0xEB, 0xFE, 0xC1, 0x80, 0x43, 0xC5, 0x8C, 0x57,
|
|
31
|
+
0xF9, 0xC8, 0x9B, 0x6E, 0xB2, 0x15, 0x3F, 0x41, 0xC3, 0x86, 0x49, 0xDB, 0xAE, 0x31, 0x53, 0xF5,
|
|
32
|
+
0xDC, 0xA7, 0x2A, 0x7E, 0x82, 0x45, 0xCF, 0x92, 0x75, 0x9F, 0x62, 0xA6, 0x29, 0x7B, 0x8D, 0x54,
|
|
33
|
+
0xFC, 0xC7, 0x8A, 0x5D, 0xE7, 0xEA, 0xFD, 0xC4, 0x8F, 0x52, 0xF6, 0xD9, 0xA8, 0x3B, 0x4D, 0xD7,
|
|
34
|
+
0xBA, 0x0D, 0x17, 0x39, 0x4B, 0xDD, 0xA4, 0x2F, 0x71, 0x93, 0x76, 0x9A, 0x6D, 0xB7, 0x1A, 0x2E,
|
|
35
|
+
0x72, 0x96, 0x79, 0x8B, 0x5E, 0xE2, 0xE5, 0xEC, 0xF7, 0xDA, 0xAD, 0x34, 0x5C, 0xE4, 0xEF, 0xF2,
|
|
36
|
+
0xD5, 0xBC, 0x07, 0x09, 0x1B, 0x2D, 0x77, 0x99, 0x68, 0xB8, 0x0B, 0x1D, 0x27, 0x69, 0xBB, 0x0E,
|
|
37
|
+
0x12, 0x36, 0x5A, 0xEE, 0xF1, 0xD0, 0xB3, 0x16, 0x3A, 0x4E, 0xD2, 0xB5, 0x1C, 0x24, 0x6C, 0xB4,
|
|
38
|
+
0x1F, 0x21, 0x63, 0xA5, 0x2C, 0x74, 0x9C, 0x67, 0xA9, 0x38, 0x48, 0xD8, 0xAB, 0x3E, 0x42, 0xC6,
|
|
39
|
+
0x89, 0x58, 0xE8, 0xFB, 0xCE, 0x91, 0x70, 0x90, 0x73, 0x95, 0x7C, 0x84, 0x4F, 0xD1, 0xB0, 0x13,
|
|
40
|
+
0x35, 0x5F, 0xE1, 0xE0, 0xE3, 0xE6, 0xE9, 0xF8, 0xCB, 0x9E, 0x61, 0xA3, 0x26, 0x6A, 0xBE, 0x01
|
|
41
|
+
]);
|
|
42
|
+
const gf_multtable_log = new Uint8Array([
|
|
43
|
+
0x00, 0xFF, 0x0D, 0x01, 0x1A, 0x02, 0x0E, 0xB2, 0x27, 0xB3, 0x0F, 0xBA, 0x1B, 0x91, 0xBF, 0x03,
|
|
44
|
+
0x34, 0x04, 0xC0, 0xEF, 0x1C, 0x65, 0xC7, 0x92, 0x28, 0x3A, 0x9E, 0xB4, 0xCC, 0xBB, 0x10, 0xD0,
|
|
45
|
+
0x41, 0xD1, 0x11, 0x44, 0xCD, 0x31, 0xFC, 0xBC, 0x29, 0x7C, 0x72, 0x3B, 0xD4, 0xB5, 0x9F, 0x97,
|
|
46
|
+
0x35, 0x6D, 0x47, 0x05, 0xAB, 0xF0, 0xC1, 0x56, 0xD9, 0x93, 0xC8, 0x8D, 0x1D, 0x14, 0xDD, 0x66,
|
|
47
|
+
0x4E, 0x67, 0xDE, 0x5C, 0x1E, 0x75, 0x51, 0x15, 0xDA, 0x6A, 0x3E, 0x94, 0x0A, 0x8E, 0xC9, 0xEC,
|
|
48
|
+
0x36, 0x23, 0x89, 0x6E, 0x7F, 0x06, 0x48, 0x5F, 0xE1, 0x57, 0xC2, 0x2C, 0xAC, 0x83, 0xA4, 0xF1,
|
|
49
|
+
0x42, 0xFA, 0x7A, 0xD2, 0x54, 0x45, 0x12, 0xD7, 0xB8, 0xBD, 0xFD, 0x18, 0xCE, 0x9C, 0x63, 0x32,
|
|
50
|
+
0xE6, 0x98, 0xA0, 0xE8, 0xD5, 0x78, 0x9A, 0xB6, 0x2A, 0xA2, 0x21, 0x7D, 0xEA, 0x3C, 0x73, 0x4C,
|
|
51
|
+
0x5B, 0x4D, 0x74, 0x50, 0xEB, 0x09, 0x69, 0x3D, 0x2B, 0xE0, 0x82, 0xA3, 0x5E, 0x7E, 0x22, 0x88,
|
|
52
|
+
0xE7, 0xE5, 0x77, 0x99, 0x4B, 0xE9, 0xA1, 0x20, 0x17, 0xB7, 0x9B, 0x62, 0xD6, 0x53, 0xF9, 0x79,
|
|
53
|
+
0x43, 0x40, 0x30, 0xFB, 0x96, 0xD3, 0x7B, 0x71, 0x8C, 0xD8, 0x13, 0xDC, 0x55, 0xAA, 0x6C, 0x46,
|
|
54
|
+
0xEE, 0x33, 0x64, 0xC6, 0xCF, 0xCB, 0x39, 0x9D, 0xB9, 0x26, 0x90, 0xBE, 0xB1, 0x19, 0xFE, 0x0C,
|
|
55
|
+
0x4F, 0x5A, 0x08, 0x68, 0x87, 0x5D, 0xDF, 0x81, 0x61, 0x16, 0x52, 0xF8, 0x1F, 0x4A, 0xE4, 0x76,
|
|
56
|
+
0xC5, 0xED, 0xCA, 0x38, 0x0B, 0xB0, 0x25, 0x8F, 0xDB, 0x8B, 0xA9, 0x6B, 0x70, 0x95, 0x3F, 0x2F,
|
|
57
|
+
0xF3, 0xF2, 0xA5, 0xF4, 0xAD, 0xA6, 0xF5, 0x84, 0xE2, 0xF6, 0x85, 0x58, 0xA7, 0x2D, 0xC3, 0xAE,
|
|
58
|
+
0x37, 0xC4, 0xAF, 0x24, 0x2E, 0x6F, 0x8A, 0xA8, 0xF7, 0x60, 0x49, 0xE3, 0x80, 0x86, 0x59, 0x07
|
|
59
|
+
]);
|
|
60
|
+
export const gf256Multiply = (a, b) => (a == 0 || b == 0)
|
|
61
|
+
? 0
|
|
62
|
+
: gf_multtable_exp[(gf_multtable_log[a] + gf_multtable_log[b]) % 255];
|
package/gf/gf64.d.ts
ADDED
package/gf/gf64.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { bytesToNumberBE, numberToBytesBE } from "@noble/curves/utils.js";
|
|
2
|
+
export const gf64Multiply = (a, b) => {
|
|
3
|
+
let x = bytesToNumberBE(a), y = bytesToNumberBE(b), z = 0n;
|
|
4
|
+
const max_bit = 1n << 63n;
|
|
5
|
+
while (y > 0n) {
|
|
6
|
+
if ((y & 1n) == 1n)
|
|
7
|
+
z ^= x;
|
|
8
|
+
if ((x & max_bit) > 0n)
|
|
9
|
+
x = ((x ^ max_bit) << 1n) ^ 0x1bn;
|
|
10
|
+
else
|
|
11
|
+
x <<= 1n;
|
|
12
|
+
y >>= 1n;
|
|
13
|
+
}
|
|
14
|
+
return numberToBytesBE(z, 8);
|
|
15
|
+
};
|
package/gf/index.d.ts
ADDED
package/gf/index.js
ADDED
package/gost3410/const.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** GOST R 34.10-2001 CryptoCom param set */
|
|
2
|
-
export const ID_GOSTR3410_2001_PARAM_SET_CC =
|
|
2
|
+
export const ID_GOSTR3410_2001_PARAM_SET_CC = {
|
|
3
3
|
p: 0xc0000000000000000000000000000000000000000000000000000000000003c7n,
|
|
4
4
|
n: 0x5fffffffffffffffffffffffffffffff606117a2f4bde428b7458a54b6e87b85n,
|
|
5
5
|
a: 0xc0000000000000000000000000000000000000000000000000000000000003c4n,
|
|
@@ -9,9 +9,9 @@ export const ID_GOSTR3410_2001_PARAM_SET_CC = ({
|
|
|
9
9
|
h: 1n,
|
|
10
10
|
length: 32,
|
|
11
11
|
oids: ["1.2.643.2.9.1.8.1"]
|
|
12
|
-
}
|
|
12
|
+
};
|
|
13
13
|
/** GOST R 34.10-2001 test param set */
|
|
14
|
-
export const ID_GOSTR3410_2001_TEST_PARAM_SET =
|
|
14
|
+
export const ID_GOSTR3410_2001_TEST_PARAM_SET = {
|
|
15
15
|
p: 0x8000000000000000000000000000000000000000000000000000000000000431n,
|
|
16
16
|
n: 0x8000000000000000000000000000000150fe8a1892976154c59cfc193accf5b3n,
|
|
17
17
|
a: 7n,
|
|
@@ -21,9 +21,9 @@ export const ID_GOSTR3410_2001_TEST_PARAM_SET = ({
|
|
|
21
21
|
h: 1n,
|
|
22
22
|
length: 32,
|
|
23
23
|
oids: ["1.2.643.2.2.35.0"]
|
|
24
|
-
}
|
|
24
|
+
};
|
|
25
25
|
/** GOST R 34.10-2012 256 bit `A` param set */
|
|
26
|
-
export const ID_GOSTR3410_2012_256_PARAM_SET_A =
|
|
26
|
+
export const ID_GOSTR3410_2012_256_PARAM_SET_A = {
|
|
27
27
|
p: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd97n,
|
|
28
28
|
n: 0x400000000000000000000000000000000fd8cddfc87b6635c115af556c360c67n,
|
|
29
29
|
a: 0xc2173f1513981673af4892c23035a27ce25e2013bf95aa33b22c656f277e7335n,
|
|
@@ -36,9 +36,9 @@ export const ID_GOSTR3410_2012_256_PARAM_SET_A = ({
|
|
|
36
36
|
length: 32,
|
|
37
37
|
st: [0x7e7e82520f9f015faa1d0f18c14ab9fb35188275da3fd94206b74f34a48e0ecdn, 0x0100fe73f595ff158e974b44d478d9588744fe5c192ac47ea63075dce7a14aaan],
|
|
38
38
|
oids: ["1.2.643.7.1.2.1.1.1"]
|
|
39
|
-
}
|
|
39
|
+
};
|
|
40
40
|
/** GOST R 34.10-2012 256 bit `B` param set (aka CryptoPro `A` (`XchA`) param set) */
|
|
41
|
-
export const ID_GOSTR3410_2012_256_PARAM_SET_B =
|
|
41
|
+
export const ID_GOSTR3410_2012_256_PARAM_SET_B = {
|
|
42
42
|
p: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd97n,
|
|
43
43
|
n: 0xffffffffffffffffffffffffffffffff6c611070995ad10045841b09b761b893n,
|
|
44
44
|
a: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd94n,
|
|
@@ -48,9 +48,9 @@ export const ID_GOSTR3410_2012_256_PARAM_SET_B = ({
|
|
|
48
48
|
h: 1n,
|
|
49
49
|
length: 32,
|
|
50
50
|
oids: ["1.2.643.7.1.2.1.1.2", "1.2.643.2.2.35.1", "1.2.643.2.2.36.0"]
|
|
51
|
-
}
|
|
51
|
+
};
|
|
52
52
|
/** GOST R 34.10-2012 256 bit `C` param set (aka CryptoPro `B` param set) */
|
|
53
|
-
export const ID_GOSTR3410_2012_256_PARAM_SET_C =
|
|
53
|
+
export const ID_GOSTR3410_2012_256_PARAM_SET_C = {
|
|
54
54
|
p: 0x8000000000000000000000000000000000000000000000000000000000000c99n,
|
|
55
55
|
n: 0x800000000000000000000000000000015f700cfff1a624e5e497161bcc8a198fn,
|
|
56
56
|
a: 0x8000000000000000000000000000000000000000000000000000000000000c96n,
|
|
@@ -60,9 +60,9 @@ export const ID_GOSTR3410_2012_256_PARAM_SET_C = ({
|
|
|
60
60
|
h: 1n,
|
|
61
61
|
length: 32,
|
|
62
62
|
oids: ["1.2.643.7.1.2.1.1.3", "1.2.643.2.2.35.2"]
|
|
63
|
-
}
|
|
63
|
+
};
|
|
64
64
|
/** GOST R 34.10-2012 256 bit `D` param set (aka CryptoPro `C` (`XchB`) param set) */
|
|
65
|
-
export const ID_GOSTR3410_2012_256_PARAM_SET_D =
|
|
65
|
+
export const ID_GOSTR3410_2012_256_PARAM_SET_D = {
|
|
66
66
|
p: 0x9b9f605f5a858107ab1ec85e6b41c8aacf846e86789051d37998f7b9022d759bn,
|
|
67
67
|
n: 0x9b9f605f5a858107ab1ec85e6b41c8aa582ca3511eddfb74f02f3a6598980bb9n,
|
|
68
68
|
a: 0x9b9f605f5a858107ab1ec85e6b41c8aacf846e86789051d37998f7b9022d7598n,
|
|
@@ -72,9 +72,9 @@ export const ID_GOSTR3410_2012_256_PARAM_SET_D = ({
|
|
|
72
72
|
h: 1n,
|
|
73
73
|
length: 32,
|
|
74
74
|
oids: ["1.2.643.7.1.2.1.1.4", "1.2.643.2.2.35.3", "1.2.643.2.2.36.1"]
|
|
75
|
-
}
|
|
75
|
+
};
|
|
76
76
|
/** GOST R 34.10-2012 512 bit test param set */
|
|
77
|
-
export const ID_GOSTR3410_2012_512_TEST_PARAM_SET =
|
|
77
|
+
export const ID_GOSTR3410_2012_512_TEST_PARAM_SET = {
|
|
78
78
|
p: 0x4531acd1fe0023c7550d267b6b2fee80922b14b2ffb90f04d4eb7c09b5d2d15df1d852741af4704a0458047e80e4546d35b8336fac224dd81664bbf528be6373n,
|
|
79
79
|
n: 0x4531acd1fe0023c7550d267b6b2fee80922b14b2ffb90f04d4eb7c09b5d2d15da82f2d7ecb1dbac719905c5eecc423f1d86e25edbe23c595d644aaf187e6e6dfn,
|
|
80
80
|
a: 7n,
|
|
@@ -84,9 +84,9 @@ export const ID_GOSTR3410_2012_512_TEST_PARAM_SET = ({
|
|
|
84
84
|
h: 1n,
|
|
85
85
|
length: 64,
|
|
86
86
|
oids: ["1.2.643.7.1.2.1.2.0"]
|
|
87
|
-
}
|
|
87
|
+
};
|
|
88
88
|
/** GOST R 34.10-2012 512 bit `A` param set */
|
|
89
|
-
export const ID_GOSTR3410_2012_512_PARAM_SET_A =
|
|
89
|
+
export const ID_GOSTR3410_2012_512_PARAM_SET_A = {
|
|
90
90
|
p: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc7n,
|
|
91
91
|
n: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27e69532f48d89116ff22b8d4e0560609b4b38abfad2b85dcacdb1411f10b275n,
|
|
92
92
|
a: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc4n,
|
|
@@ -96,9 +96,9 @@ export const ID_GOSTR3410_2012_512_PARAM_SET_A = ({
|
|
|
96
96
|
h: 1n,
|
|
97
97
|
length: 64,
|
|
98
98
|
oids: ["1.2.643.7.1.2.1.2.1"]
|
|
99
|
-
}
|
|
99
|
+
};
|
|
100
100
|
/** GOST R 34.10-2012 512 bit `B` param set */
|
|
101
|
-
export const ID_GOSTR3410_2012_512_PARAM_SET_B =
|
|
101
|
+
export const ID_GOSTR3410_2012_512_PARAM_SET_B = {
|
|
102
102
|
p: 0x8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006fn,
|
|
103
103
|
n: 0x800000000000000000000000000000000000000000000000000000000000000149a1ec142565a545acfdb77bd9d40cfa8b996712101bea0ec6346c54374f25bdn,
|
|
104
104
|
a: 0x8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006cn,
|
|
@@ -108,9 +108,9 @@ export const ID_GOSTR3410_2012_512_PARAM_SET_B = ({
|
|
|
108
108
|
h: 1n,
|
|
109
109
|
length: 64,
|
|
110
110
|
oids: ["1.2.643.7.1.2.1.2.2"]
|
|
111
|
-
}
|
|
111
|
+
};
|
|
112
112
|
/** GOST R 34.10-2012 512 bit `C` param set */
|
|
113
|
-
export const ID_GOSTR3410_2012_512_PARAM_SET_C =
|
|
113
|
+
export const ID_GOSTR3410_2012_512_PARAM_SET_C = {
|
|
114
114
|
p: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc7n,
|
|
115
115
|
n: 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98cdba46506ab004c33a9ff5147502cc8eda9e7a769a12694623cef47f023edn,
|
|
116
116
|
a: 0xdc9203e514a721875485a529d2c722fb187bc8980eb866644de41c68e143064546e861c0e2c9edd92ade71f46fcf50ff2ad97f951fda9f2a2eb6546f39689bd3n,
|
|
@@ -123,7 +123,7 @@ export const ID_GOSTR3410_2012_512_PARAM_SET_C = ({
|
|
|
123
123
|
length: 64,
|
|
124
124
|
st: [0x186c289cffa09c983b168c30c829006c952ff4aaf99c73850875d7e77bebef18d653187d6ba8fe533ec74c6f061872585b97cc0f50f57752cd73f4913304621en, 0x9a628f975594ecefd89ba28a2539ffb79c8ab238aeed0851fa5c1abb02b80b44c6734501b83a011dd625cd0b5145091a6d9acd4b1f5c5b1e21b2b249ddfd1271n],
|
|
125
125
|
oids: ["1.2.643.7.1.2.1.2.3"]
|
|
126
|
-
}
|
|
126
|
+
};
|
|
127
127
|
export const CURVES = {
|
|
128
128
|
ID_GOSTR3410_2001_PARAM_SET_CC,
|
|
129
129
|
ID_GOSTR3410_2001_TEST_PARAM_SET,
|
package/gost3410/index.d.ts
CHANGED
package/gost3410/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { bytesToNumberBE, concatBytes, numberToBytesBE, randomBytes } from "@noble/curves/utils.js";
|
|
2
|
-
import { CURVES } from "./const.js";
|
|
3
2
|
import { mod } from "@noble/curves/abstract/modular.js";
|
|
4
3
|
import { weierstrass } from "@noble/curves/abstract/weierstrass.js";
|
|
5
4
|
/**
|
package/gost3410/vko.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Field } from "@noble/curves/abstract/modular.js";
|
|
2
2
|
import { weierstrass } from "@noble/curves/abstract/weierstrass.js";
|
|
3
|
-
import { gost341194 } from "../gost341194";
|
|
3
|
+
import { gost341194 } from "../gost341194/index.js";
|
|
4
4
|
import { streebog256, streebog512 } from "../streebog/index.js";
|
|
5
5
|
import { bytesToNumberBE, concatBytes, numberToBytesLE } from "@noble/curves/utils.js";
|
|
6
6
|
/**
|
package/gost341194/index.d.ts
CHANGED
|
@@ -3,11 +3,11 @@ import { type Hash, type TArg, type TRet } from "@noble/hashes/utils.js";
|
|
|
3
3
|
export declare class Gost341194 implements Hash<Gost341194> {
|
|
4
4
|
private data;
|
|
5
5
|
private sbox;
|
|
6
|
-
readonly blockLen
|
|
6
|
+
readonly blockLen = 32;
|
|
7
7
|
readonly outputLen = 32;
|
|
8
8
|
readonly canXOF = false;
|
|
9
9
|
/** GOST R 34.11-94 hash function */
|
|
10
|
-
constructor(data?: TArg<Uint8Array>, sbox?: TArg<Uint8Array>
|
|
10
|
+
constructor(data?: TArg<Uint8Array>, sbox?: TArg<Uint8Array>);
|
|
11
11
|
/** Create hash instance */
|
|
12
12
|
static create(): Gost341194;
|
|
13
13
|
destroy(): void;
|
|
@@ -18,6 +18,6 @@ export declare class Gost341194 implements Hash<Gost341194> {
|
|
|
18
18
|
digest(): TRet<Uint8Array>;
|
|
19
19
|
}
|
|
20
20
|
/** GOST R 34.11-94 hash function */
|
|
21
|
-
export declare const gost341194: (msg: TArg<Uint8Array>, sbox?: TArg<Uint8Array>
|
|
21
|
+
export declare const gost341194: (msg: TArg<Uint8Array>, sbox?: TArg<Uint8Array>) => TRet<Uint8Array>;
|
|
22
22
|
/** DSTU GOST 34.311-95 */
|
|
23
23
|
export declare const gost3431195: (msg: TArg<Uint8Array>) => TRet<Uint8Array>;
|
package/gost341194/index.js
CHANGED
|
@@ -3,146 +3,50 @@ import { Magma } from "../magma/index.js";
|
|
|
3
3
|
import { DSSZZI_UA_DKE_1, ID_GOSTR_3411_94_CRYPTOPRO_PARAM_SET } from "../magma/const.js";
|
|
4
4
|
import { bytesToNumberBE, numberToBytesBE } from "@noble/curves/utils.js";
|
|
5
5
|
import { xorBytes } from "../utils.js";
|
|
6
|
-
const BLOCKSIZE = 32;
|
|
7
6
|
const r = (1n << 256n) - 1n;
|
|
8
|
-
const C2 = new Uint8Array(32);
|
|
9
7
|
const C3 = new Uint8Array([
|
|
10
8
|
0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff,
|
|
11
9
|
0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00,
|
|
12
10
|
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
|
|
13
11
|
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00
|
|
14
12
|
]);
|
|
15
|
-
const
|
|
16
|
-
const A = (x) => {
|
|
17
|
-
const x2 = x.subarray(16, 24);
|
|
18
|
-
return concatBytes(xorBytes(x.subarray(24, 32), x2), x.subarray(0, 8), x.subarray(8, 16), x2);
|
|
19
|
-
};
|
|
13
|
+
const A = (x) => concatBytes(xorBytes(x.subarray(24, 32), x.subarray(16, 24)), x.subarray(0, 8), x.subarray(8, 16), x.subarray(16, 24));
|
|
20
14
|
const P = (x) => new Uint8Array([
|
|
21
15
|
x[0], x[8], x[16], x[24], x[1], x[9], x[17], x[25],
|
|
22
16
|
x[2], x[10], x[18], x[26], x[3], x[11], x[19], x[27],
|
|
23
17
|
x[4], x[12], x[20], x[28], x[5], x[13], x[21], x[29],
|
|
24
18
|
x[6], x[14], x[22], x[30], x[7], x[15], x[23], x[31]
|
|
25
19
|
]);
|
|
26
|
-
/*const chi = (Y: TArg<Uint8Array>): TRet<Uint8Array> => {
|
|
27
|
-
const byx = new Uint8Array(2);
|
|
28
|
-
byx[0] = Y[30] ^ Y[28] ^ Y[26] ^ Y[24] ^ Y[6] ^ Y[0];
|
|
29
|
-
byx[1] = Y[31] ^ Y[29] ^ Y[27] ^ Y[25] ^ Y[7] ^ Y[1];
|
|
30
|
-
|
|
31
|
-
const result = new Uint8Array(BLOCKSIZE);
|
|
32
|
-
result.set(byx, 0);
|
|
33
|
-
result.set(Y.slice(0,30), 2);
|
|
34
|
-
|
|
35
|
-
return result;
|
|
36
|
-
}*/
|
|
37
20
|
const chi = (Y) => new Uint8Array([
|
|
38
21
|
Y[30] ^ Y[28] ^ Y[26] ^ Y[24] ^ Y[6] ^ Y[0],
|
|
39
22
|
Y[31] ^ Y[29] ^ Y[27] ^ Y[25] ^ Y[7] ^ Y[1],
|
|
40
23
|
...Y.subarray(0, 30)
|
|
41
24
|
]);
|
|
25
|
+
const _getMagma = (u, v, sbox) => new Magma(P(xorBytes(u, v)).reverse(), sbox, true);
|
|
42
26
|
const _step = (hin, m, sbox) => {
|
|
43
|
-
|
|
44
|
-
let
|
|
45
|
-
let
|
|
46
|
-
const
|
|
47
|
-
u = xorBytes(A(u), C2);
|
|
48
|
-
v = A(A(v));
|
|
49
|
-
w = xorBytes(u, v);
|
|
50
|
-
const k2 = new Magma(P(w).reverse(), sbox, true);
|
|
27
|
+
const k1 = _getMagma(hin, m, sbox);
|
|
28
|
+
let u = A(hin);
|
|
29
|
+
let v = A(A(m));
|
|
30
|
+
const k2 = _getMagma(u, v, sbox);
|
|
51
31
|
u = xorBytes(A(u), C3);
|
|
52
32
|
v = A(A(v));
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
u = xorBytes(A(u), C4);
|
|
33
|
+
const k3 = _getMagma(u, v, sbox);
|
|
34
|
+
u = A(u);
|
|
56
35
|
v = A(A(v));
|
|
57
|
-
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
let
|
|
63
|
-
|
|
64
|
-
x = chi(x);
|
|
65
|
-
x = chi(x);
|
|
66
|
-
x = chi(x);
|
|
67
|
-
x = chi(x);
|
|
68
|
-
x = chi(x);
|
|
69
|
-
x = chi(x);
|
|
70
|
-
x = chi(x);
|
|
71
|
-
x = chi(x);
|
|
72
|
-
x = chi(x);
|
|
73
|
-
x = chi(x);
|
|
74
|
-
x = xorBytes(x, m);
|
|
75
|
-
x = chi(x);
|
|
76
|
-
x = xorBytes(hin, x);
|
|
77
|
-
//for(let i = 0; i < 61; i++) x = chi(x);
|
|
78
|
-
x = chi(x);
|
|
79
|
-
x = chi(x);
|
|
80
|
-
x = chi(x);
|
|
81
|
-
x = chi(x);
|
|
82
|
-
x = chi(x);
|
|
83
|
-
x = chi(x);
|
|
84
|
-
x = chi(x);
|
|
85
|
-
x = chi(x);
|
|
86
|
-
x = chi(x);
|
|
87
|
-
x = chi(x);
|
|
88
|
-
x = chi(x);
|
|
89
|
-
x = chi(x);
|
|
90
|
-
x = chi(x);
|
|
91
|
-
x = chi(x);
|
|
92
|
-
x = chi(x);
|
|
93
|
-
x = chi(x);
|
|
94
|
-
x = chi(x);
|
|
95
|
-
x = chi(x);
|
|
96
|
-
x = chi(x);
|
|
97
|
-
x = chi(x);
|
|
98
|
-
x = chi(x);
|
|
99
|
-
x = chi(x);
|
|
100
|
-
x = chi(x);
|
|
101
|
-
x = chi(x);
|
|
102
|
-
x = chi(x);
|
|
103
|
-
x = chi(x);
|
|
104
|
-
x = chi(x);
|
|
105
|
-
x = chi(x);
|
|
106
|
-
x = chi(x);
|
|
107
|
-
x = chi(x);
|
|
108
|
-
x = chi(x);
|
|
109
|
-
x = chi(x);
|
|
110
|
-
x = chi(x);
|
|
111
|
-
x = chi(x);
|
|
112
|
-
x = chi(x);
|
|
113
|
-
x = chi(x);
|
|
114
|
-
x = chi(x);
|
|
115
|
-
x = chi(x);
|
|
116
|
-
x = chi(x);
|
|
117
|
-
x = chi(x);
|
|
118
|
-
x = chi(x);
|
|
119
|
-
x = chi(x);
|
|
120
|
-
x = chi(x);
|
|
121
|
-
x = chi(x);
|
|
122
|
-
x = chi(x);
|
|
123
|
-
x = chi(x);
|
|
124
|
-
x = chi(x);
|
|
125
|
-
x = chi(x);
|
|
126
|
-
x = chi(x);
|
|
127
|
-
x = chi(x);
|
|
128
|
-
x = chi(x);
|
|
129
|
-
x = chi(x);
|
|
130
|
-
x = chi(x);
|
|
131
|
-
x = chi(x);
|
|
132
|
-
x = chi(x);
|
|
133
|
-
x = chi(x);
|
|
134
|
-
x = chi(x);
|
|
135
|
-
x = chi(x);
|
|
136
|
-
x = chi(x);
|
|
137
|
-
x = chi(x);
|
|
138
|
-
x = chi(x);
|
|
36
|
+
const k4 = _getMagma(u, v, sbox);
|
|
37
|
+
const x = concatBytes(k4.encrypt(hin.slice(0, 8).reverse()).reverse(), k3.encrypt(hin.slice(8, 16).reverse()).reverse(), k2.encrypt(hin.slice(16, 24).reverse()).reverse(), k1.encrypt(hin.slice(24, 32).reverse()).reverse());
|
|
38
|
+
for (let i = 0; i < 12; i++)
|
|
39
|
+
x.set(chi(x));
|
|
40
|
+
x.set(xorBytes(hin, chi(xorBytes(x, m))));
|
|
41
|
+
for (let i = 0; i < 61; i++)
|
|
42
|
+
x.set(chi(x));
|
|
139
43
|
return x;
|
|
140
44
|
};
|
|
141
45
|
/** GOST R 34.11-94 hash function */
|
|
142
46
|
export class Gost341194 {
|
|
143
47
|
data;
|
|
144
48
|
sbox;
|
|
145
|
-
blockLen =
|
|
49
|
+
blockLen = 32;
|
|
146
50
|
outputLen = 32;
|
|
147
51
|
canXOF = false;
|
|
148
52
|
/** GOST R 34.11-94 hash function */
|
|
@@ -167,17 +71,17 @@ export class Gost341194 {
|
|
|
167
71
|
digestInto(buf) {
|
|
168
72
|
let len = 0n;
|
|
169
73
|
let checksum = 0n;
|
|
170
|
-
const h = new Uint8Array(
|
|
74
|
+
const h = new Uint8Array(this.blockLen);
|
|
171
75
|
const m = new Uint8Array(this.data);
|
|
172
|
-
for (let i = 0; i < m.length; i +=
|
|
173
|
-
let part = m.slice(i, i +
|
|
76
|
+
for (let i = 0; i < m.length; i += this.blockLen) {
|
|
77
|
+
let part = m.slice(i, i + this.blockLen).reverse();
|
|
174
78
|
len += BigInt(part.length) * 8n;
|
|
175
79
|
checksum = (checksum + bytesToNumberBE(part)) & r;
|
|
176
|
-
if (part.length <
|
|
177
|
-
part = numberToBytesBE(bytesToNumberBE(part),
|
|
80
|
+
if (part.length < this.blockLen)
|
|
81
|
+
part = numberToBytesBE(bytesToNumberBE(part), this.blockLen);
|
|
178
82
|
h.set(_step(h, part, this.sbox));
|
|
179
83
|
}
|
|
180
|
-
h.set(_step(_step(h, numberToBytesBE(len,
|
|
84
|
+
h.set(_step(_step(h, numberToBytesBE(len, this.blockLen), this.sbox), numberToBytesBE(checksum, this.blockLen), this.sbox));
|
|
181
85
|
buf.set(h.reverse());
|
|
182
86
|
this.destroy();
|
|
183
87
|
}
|
package/kdf.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { concatBytes, createHasher } from "@noble/hashes/utils.js";
|
|
1
|
+
import { concatBytes, copyBytes, createHasher } from "@noble/hashes/utils.js";
|
|
2
2
|
import { streebog256hmac } from "./hmac.js";
|
|
3
3
|
import { numberToBytesBE } from "@noble/curves/utils.js";
|
|
4
4
|
import { pbkdf2 } from "@noble/hashes/pbkdf2.js";
|
|
@@ -35,7 +35,7 @@ export const cpkdf = (password, salt) => {
|
|
|
35
35
|
if (password.length != 0)
|
|
36
36
|
hasher.update(pin);
|
|
37
37
|
const hash = hasher.digest();
|
|
38
|
-
const c =
|
|
38
|
+
const c = copyBytes(CPKDF_CONST);
|
|
39
39
|
const m0 = new Uint8Array(bs);
|
|
40
40
|
const m1 = new Uint8Array(bs);
|
|
41
41
|
for (let j = 0; j < (password.length != 0 ? 2000 : 2); j++) {
|
package/kuznyechik/const.js
CHANGED
|
@@ -37,11 +37,6 @@ export const PI_REV = new Uint8Array([
|
|
|
37
37
|
export const L = new Uint8Array([
|
|
38
38
|
0x01, 0x94, 0x20, 0x85, 0x10, 0xc2, 0xc0, 0x01, 0xfb, 0x01, 0xc0, 0xc2, 0x10, 0x85, 0x20, 0x94,
|
|
39
39
|
]);
|
|
40
|
-
/*const ITER: Uint8Array[] = Array(32).fill(null).map(() => new Uint8Array(16).fill(0));
|
|
41
|
-
for(let i = 0; i < 32; i++) {
|
|
42
|
-
ITER[i][15] = i + 1;
|
|
43
|
-
ITER[i] = LL(ITER[i]);
|
|
44
|
-
}*/
|
|
45
40
|
export const ITER = [
|
|
46
41
|
new Uint8Array([0x6E, 0xA2, 0x76, 0x72, 0x6C, 0x48, 0x7A, 0xB8, 0x5D, 0x27, 0xBD, 0x10, 0xDD, 0x84, 0x94, 0x01]),
|
|
47
42
|
new Uint8Array([0xDC, 0x87, 0xEC, 0xE4, 0xD8, 0x90, 0xF4, 0xB3, 0xBA, 0x4E, 0xB9, 0x20, 0x79, 0xCB, 0xEB, 0x02]),
|