@hg-ts/rsa 0.7.24 → 0.7.26

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.
Files changed (120) hide show
  1. package/README.md +331 -0
  2. package/dist/X25519/index.d.ts +4 -0
  3. package/dist/X25519/index.d.ts.map +1 -0
  4. package/dist/X25519/index.js +4 -0
  5. package/dist/X25519/index.js.map +1 -0
  6. package/dist/X25519/key-pair.d.ts +13 -0
  7. package/dist/X25519/key-pair.d.ts.map +1 -0
  8. package/dist/X25519/key-pair.js +39 -0
  9. package/dist/X25519/key-pair.js.map +1 -0
  10. package/dist/X25519/private-key.d.ts +11 -0
  11. package/dist/X25519/private-key.d.ts.map +1 -0
  12. package/dist/X25519/private-key.js +40 -0
  13. package/dist/X25519/private-key.js.map +1 -0
  14. package/dist/X25519/public-key.d.ts +13 -0
  15. package/dist/X25519/public-key.d.ts.map +1 -0
  16. package/dist/X25519/public-key.js +49 -0
  17. package/dist/X25519/public-key.js.map +1 -0
  18. package/dist/X25519/utils.d.ts +2 -0
  19. package/dist/X25519/utils.d.ts.map +1 -0
  20. package/dist/X25519/utils.js +12 -0
  21. package/dist/X25519/utils.js.map +1 -0
  22. package/dist/X25519/x25519.test.d.ts +18 -0
  23. package/dist/X25519/x25519.test.d.ts.map +1 -0
  24. package/dist/X25519/x25519.test.js +183 -0
  25. package/dist/X25519/x25519.test.js.map +1 -0
  26. package/dist/base/index.d.ts +5 -0
  27. package/dist/base/index.d.ts.map +1 -0
  28. package/dist/base/index.js +5 -0
  29. package/dist/base/index.js.map +1 -0
  30. package/dist/base/key-pair.d.ts +27 -0
  31. package/dist/base/key-pair.d.ts.map +1 -0
  32. package/dist/base/key-pair.js +29 -0
  33. package/dist/base/key-pair.js.map +1 -0
  34. package/dist/base/key.d.ts +7 -0
  35. package/dist/base/key.d.ts.map +1 -0
  36. package/dist/base/key.js +10 -0
  37. package/dist/base/key.js.map +1 -0
  38. package/dist/base/private-key.d.ts +11 -0
  39. package/dist/base/private-key.d.ts.map +1 -0
  40. package/dist/base/private-key.js +4 -0
  41. package/dist/base/private-key.js.map +1 -0
  42. package/dist/base/public-key.d.ts +6 -0
  43. package/dist/base/public-key.d.ts.map +1 -0
  44. package/dist/base/public-key.js +4 -0
  45. package/dist/base/public-key.js.map +1 -0
  46. package/dist/exceptions/index.d.ts +2 -0
  47. package/dist/exceptions/index.d.ts.map +1 -0
  48. package/dist/exceptions/index.js +2 -0
  49. package/dist/exceptions/index.js.map +1 -0
  50. package/dist/exceptions/invalid-decryption-key.expection.d.ts +5 -0
  51. package/dist/exceptions/invalid-decryption-key.expection.d.ts.map +1 -0
  52. package/dist/exceptions/invalid-decryption-key.expection.js +7 -0
  53. package/dist/exceptions/invalid-decryption-key.expection.js.map +1 -0
  54. package/dist/index.d.ts +4 -3
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +4 -3
  57. package/dist/index.js.map +1 -1
  58. package/dist/rsa/index.d.ts +4 -0
  59. package/dist/rsa/index.d.ts.map +1 -0
  60. package/dist/rsa/index.js +4 -0
  61. package/dist/rsa/index.js.map +1 -0
  62. package/dist/rsa/key-pair.d.ts +12 -0
  63. package/dist/rsa/key-pair.d.ts.map +1 -0
  64. package/dist/rsa/key-pair.js +40 -0
  65. package/dist/rsa/key-pair.js.map +1 -0
  66. package/dist/rsa/private-key.d.ts +16 -0
  67. package/dist/rsa/private-key.d.ts.map +1 -0
  68. package/dist/rsa/private-key.js +65 -0
  69. package/dist/rsa/private-key.js.map +1 -0
  70. package/dist/rsa/public-key.d.ts +19 -0
  71. package/dist/rsa/public-key.d.ts.map +1 -0
  72. package/dist/rsa/public-key.js +85 -0
  73. package/dist/rsa/public-key.js.map +1 -0
  74. package/dist/{rsa.test.d.ts → rsa/rsa.test.d.ts} +6 -0
  75. package/dist/rsa/rsa.test.d.ts.map +1 -0
  76. package/dist/{rsa.test.js → rsa/rsa.test.js} +101 -24
  77. package/dist/rsa/rsa.test.js.map +1 -0
  78. package/package.json +11 -9
  79. package/src/X25519/index.ts +3 -0
  80. package/src/X25519/key-pair.ts +58 -0
  81. package/src/X25519/private-key.ts +54 -0
  82. package/src/X25519/public-key.ts +68 -0
  83. package/src/X25519/utils.ts +22 -0
  84. package/src/X25519/x25519.test.ts +150 -0
  85. package/src/base/index.ts +4 -0
  86. package/src/base/key-pair.ts +75 -0
  87. package/src/base/key.ts +13 -0
  88. package/src/base/private-key.ts +17 -0
  89. package/src/base/public-key.ts +7 -0
  90. package/src/exceptions/index.ts +1 -0
  91. package/src/exceptions/invalid-decryption-key.expection.ts +7 -0
  92. package/src/index.ts +4 -3
  93. package/src/rsa/index.ts +3 -0
  94. package/src/rsa/key-pair.ts +55 -0
  95. package/src/rsa/private-key.ts +82 -0
  96. package/src/rsa/public-key.ts +110 -0
  97. package/src/rsa/rsa.test.ts +194 -0
  98. package/dist/rsa.base-key.d.ts +0 -16
  99. package/dist/rsa.base-key.d.ts.map +0 -1
  100. package/dist/rsa.base-key.js +0 -54
  101. package/dist/rsa.base-key.js.map +0 -1
  102. package/dist/rsa.key-pair.d.ts +0 -19
  103. package/dist/rsa.key-pair.d.ts.map +0 -1
  104. package/dist/rsa.key-pair.js +0 -46
  105. package/dist/rsa.key-pair.js.map +0 -1
  106. package/dist/rsa.private-key.d.ts +0 -13
  107. package/dist/rsa.private-key.d.ts.map +0 -1
  108. package/dist/rsa.private-key.js +0 -38
  109. package/dist/rsa.private-key.js.map +0 -1
  110. package/dist/rsa.public-key.d.ts +0 -13
  111. package/dist/rsa.public-key.d.ts.map +0 -1
  112. package/dist/rsa.public-key.js +0 -52
  113. package/dist/rsa.public-key.js.map +0 -1
  114. package/dist/rsa.test.d.ts.map +0 -1
  115. package/dist/rsa.test.js.map +0 -1
  116. package/src/rsa.base-key.ts +0 -75
  117. package/src/rsa.key-pair.ts +0 -65
  118. package/src/rsa.private-key.ts +0 -50
  119. package/src/rsa.public-key.ts +0 -65
  120. package/src/rsa.test.ts +0 -134
@@ -0,0 +1,194 @@
1
+ import {
2
+ Describe,
3
+ expect,
4
+ ExpectException,
5
+ Suite,
6
+ Test,
7
+ } from '@hg-ts/tests';
8
+ import { z } from '@hg-ts/validation';
9
+ import forge from 'node-forge';
10
+ import { InvalidDecryptionKeyExpection } from '../exceptions/index.js';
11
+ import { RsaKeyPair } from './key-pair.js';
12
+ import { RsaPrivateKey } from './private-key.js';
13
+ import { RsaPublicKey } from './public-key.js';
14
+
15
+ @Describe()
16
+ export class RsaTest extends Suite {
17
+ @Test()
18
+ public async nativeKey(): Promise<void> {
19
+ const { privateKeyInstance, privateKey, publicKeyInstance, publicKey } = new RsaKeyPair({ bits: 786 });
20
+
21
+ expect(privateKey).toBe(forge.pki.privateKeyToPem(privateKeyInstance.nativeKey));
22
+ expect(publicKey).toBe(forge.pki.publicKeyToPem(publicKeyInstance.nativeKey));
23
+ }
24
+
25
+ @Test()
26
+ public async keyPairFromPrivateKey(): Promise<void> {
27
+ const { privateKey, publicKey } = new RsaKeyPair();
28
+ const key = RsaPrivateKey.fromString(privateKey);
29
+
30
+ const keyPairFromKey = new RsaKeyPair({ privateKey: key });
31
+
32
+ expect(keyPairFromKey.privateKey).toBe(privateKey);
33
+ expect(keyPairFromKey.publicKey).toBe(publicKey);
34
+ }
35
+
36
+ @Test()
37
+ public async keyPairFromPrivateKeyString(): Promise<void> {
38
+ const { privateKey, publicKey } = new RsaKeyPair({ bits: 786 });
39
+
40
+ const keyPairFromKey = new RsaKeyPair({ privateKey });
41
+
42
+ expect(keyPairFromKey.privateKey).toBe(privateKey);
43
+ expect(keyPairFromKey.publicKey).toBe(publicKey);
44
+ }
45
+
46
+ @Test()
47
+ public async keyPairFromPrivateKeyEncryption(): Promise<void> {
48
+ const { privateKey } = new RsaKeyPair({ bits: 786 });
49
+ const key = RsaPrivateKey.fromString(privateKey);
50
+
51
+ const value = Math.random().toString();
52
+ const encrypted = key.toPublicKey().encrypt(value);
53
+ const decrypted = key.decrypt(encrypted);
54
+
55
+ expect(value).toBe(decrypted);
56
+ }
57
+
58
+ @Test()
59
+ public async signature(): Promise<void> {
60
+ const rsa = new RsaKeyPair({ bits: 786 });
61
+ const value = Math.random().toString();
62
+
63
+ const signature = rsa.sign(value);
64
+ expect(rsa.verify(signature.toString('binary'), value)).toBeTruthy();
65
+ }
66
+
67
+ @Test()
68
+ public async signatureBuffer(): Promise<void> {
69
+ const rsa = new RsaKeyPair({ bits: 786 });
70
+ const value = Math.random().toString();
71
+
72
+ const signature = rsa.sign(value);
73
+ expect(rsa.verify(signature, value)).toBeTruthy();
74
+ }
75
+
76
+ @Test()
77
+ public async encryption(): Promise<void> {
78
+ const rsa = new RsaKeyPair({ bits: 786 });
79
+ const value = Math.random().toString();
80
+
81
+ const encrypted = rsa.encrypt(value);
82
+ expect(rsa.decrypt(encrypted.toString('hex'))).toBe(value);
83
+ }
84
+
85
+ @Test()
86
+ @ExpectException(InvalidDecryptionKeyExpection)
87
+ public async encryptionFailsForAnotherRecipient(): Promise<void> {
88
+ const rsa = new RsaKeyPair({ bits: 786 });
89
+ const anotherRecipient = new RsaKeyPair({ bits: 786 });
90
+ const value = Math.random().toString();
91
+
92
+ const encrypted = rsa.encrypt(value);
93
+
94
+ anotherRecipient.decrypt(encrypted.toString('hex'));
95
+ }
96
+
97
+ @Test()
98
+ public async encryptionRu(): Promise<void> {
99
+ const rsa = new RsaKeyPair({ bits: 786 });
100
+ const value = 'Тестовый текст';
101
+
102
+ const encrypted = rsa.encrypt(value);
103
+ expect(rsa.decrypt(encrypted.toString('hex'))).toBe(value);
104
+ }
105
+
106
+ @Test()
107
+ public async encryptionHex(): Promise<void> {
108
+ const rsa = new RsaKeyPair({ bits: 786 });
109
+ const value = Math.floor(Math.random() * 10000).toString(16);
110
+
111
+ const encrypted = rsa.encrypt(value);
112
+ expect(rsa.decrypt(encrypted.toString('hex'))).toBe(value);
113
+ }
114
+
115
+ @Test()
116
+ public async encryptionEn(): Promise<void> {
117
+ const rsa = new RsaKeyPair({ bits: 786 });
118
+ const value = 'Test text';
119
+
120
+ const encrypted = rsa.encrypt(value);
121
+ expect(rsa.decrypt(encrypted.toString('hex'))).toBe(value);
122
+ }
123
+
124
+ @Test()
125
+ public async encryptionBuffer(): Promise<void> {
126
+ const rsa = new RsaKeyPair({ bits: 786 });
127
+ const value = Buffer.from(Math.random().toString(), 'utf-8');
128
+
129
+ const encrypted = rsa.encrypt(value);
130
+ expect(Buffer.from(rsa.decrypt(encrypted), 'hex')).toMatchObject(value);
131
+ }
132
+
133
+ @Test()
134
+ public async longMessageEncryption(): Promise<void> {
135
+ const rsa = new RsaKeyPair({ bits: 786 });
136
+ const rsaToTest = new RsaKeyPair({ bits: 786 });
137
+ const value = rsaToTest.publicKey;
138
+
139
+ const encrypted = rsa.encrypt(value);
140
+ expect(rsa.decrypt(encrypted)).toBe(value);
141
+ }
142
+
143
+ @Test()
144
+ public async longMessageSignature(): Promise<void> {
145
+ const rsa = new RsaKeyPair({ bits: 786 });
146
+ const value = rsa.publicKey;
147
+
148
+ const signature = rsa.sign(value);
149
+ expect(rsa.verify(signature, value)).toBeTruthy();
150
+ }
151
+
152
+ @Test()
153
+ public async seeded(): Promise<void> {
154
+ const seed = Math.random().toString();
155
+ const rsa1 = new RsaKeyPair({ seed, bits: 786 });
156
+ const rsa2 = new RsaKeyPair({ seed, bits: 786 });
157
+
158
+ expect(rsa1.privateKey).toBe(rsa2.privateKey);
159
+ expect(rsa1.publicKey).toBe(rsa2.publicKey);
160
+ }
161
+
162
+ @Test()
163
+ public async privateKeyFromString(): Promise<void> {
164
+ const rsa = new RsaKeyPair({ bits: 786 });
165
+ const rsaFromString = RsaPrivateKey.fromString(rsa.privateKey);
166
+
167
+ expect(rsaFromString.toString()).toBe(rsa.privateKey.toString());
168
+ }
169
+
170
+ @Test()
171
+ public async publicKeyFromString(): Promise<void> {
172
+ const rsa = new RsaKeyPair({ bits: 786 });
173
+ const rsaFromString = RsaPublicKey.fromString(rsa.publicKey);
174
+
175
+ expect(rsaFromString.toString()).toBe(rsa.publicKey.toString());
176
+ }
177
+
178
+ @Test()
179
+ public async publicKeyValidationsValid(): Promise<void> {
180
+ const rsa = new RsaKeyPair({ bits: 786 });
181
+
182
+ RsaPublicKey.schema.parse(rsa.publicKey.toString());
183
+ }
184
+
185
+ @Test()
186
+ @ExpectException(z.ZodError)
187
+ public async publicKeyValidationsFails(): Promise<void> {
188
+ // Тут убран один случайный символ из ключа
189
+ RsaPublicKey.schema.parse(`-----BEGIN PUBLIC KEY-----
190
+ MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALnfPJr6J2UXwvZhbPWolBw4UJHAEMd
191
+ /FvIyIYADhT/k+2TIFixs4pxM5VaGMP7Tny+5WAouv9ulh4tACPxKoMCAwEAAQ==
192
+ -----END PUBLIC KEY-----`);
193
+ }
194
+ }
@@ -1,16 +0,0 @@
1
- import forge from 'node-forge';
2
- export declare abstract class RSABaseKey {
3
- private readonly mdDigestLength;
4
- protected abstract key: forge.pki.rsa.PrivateKey | forge.pki.rsa.PublicKey;
5
- constructor();
6
- protected prepareToEncrypt(data: string | Buffer): string[];
7
- protected prepareToDecrypt(data: string | Buffer): string[];
8
- protected formatDecryptedInputToString(data: string | Buffer): string;
9
- protected formatSignature(data: string | Buffer): string;
10
- protected formatEncrypted(data: string[]): Buffer;
11
- protected getMd(): forge.md.MessageDigest;
12
- protected get maxLength(): number;
13
- protected get keyLength(): number;
14
- private splitInput;
15
- }
16
- //# sourceMappingURL=rsa.base-key.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rsa.base-key.d.ts","sourceRoot":"","sources":["../src/rsa.base-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,8BAAsB,UAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;;IAM3E,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE;IAM3D,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE;IAW3D,SAAS,CAAC,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAQrE,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAQxD,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAMjD,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC,aAAa;IAIzC,SAAS,KAAK,SAAS,IAAI,MAAM,CAEhC;IAED,SAAS,KAAK,SAAS,IAAI,MAAM,CAEhC;IAED,OAAO,CAAC,UAAU;CAYlB"}
@@ -1,54 +0,0 @@
1
- import forge from 'node-forge';
2
- export class RSABaseKey {
3
- mdDigestLength;
4
- constructor() {
5
- this.mdDigestLength = this.getMd().digestLength;
6
- }
7
- prepareToEncrypt(data) {
8
- const input = this.formatDecryptedInputToString(data);
9
- return this.splitInput(input, this.maxLength);
10
- }
11
- prepareToDecrypt(data) {
12
- const encryptedLength = this.keyLength * 2;
13
- const encrypted = typeof data === 'string' ? data : data.toString('hex');
14
- return this.splitInput(encrypted, encryptedLength)
15
- .map(chunk => Buffer
16
- .from(chunk, 'hex')
17
- .toString('binary'));
18
- }
19
- formatDecryptedInputToString(data) {
20
- if (typeof data === 'string') {
21
- return data;
22
- }
23
- return Buffer.from(data).toString('hex');
24
- }
25
- formatSignature(data) {
26
- if (typeof data === 'string') {
27
- return data;
28
- }
29
- return Buffer.from(data).toString('binary');
30
- }
31
- formatEncrypted(data) {
32
- const chunks = data.map(chunk => Buffer.from(chunk, 'binary').toString('hex'));
33
- return Buffer.from(chunks.join(''), 'hex');
34
- }
35
- getMd() {
36
- return forge.md.sha256.create();
37
- }
38
- get maxLength() {
39
- return this.keyLength - (this.mdDigestLength * 2) - 2;
40
- }
41
- get keyLength() {
42
- return Math.ceil(this.key.n.bitLength() / 8);
43
- }
44
- splitInput(value, length) {
45
- const chars = value.split('');
46
- const chunks = [];
47
- while (chars.length > 0) {
48
- const chunk = chars.splice(0, length);
49
- chunks.push(chunk.join(''));
50
- }
51
- return chunks;
52
- }
53
- }
54
- //# sourceMappingURL=rsa.base-key.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rsa.base-key.js","sourceRoot":"","sources":["../src/rsa.base-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,OAAgB,UAAU;IACd,cAAc,CAAS;IAIxC;QACC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC;IACjD,CAAC;IAES,gBAAgB,CAAC,IAAqB;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;QAEtD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAES,gBAAgB,CAAC,IAAqB;QAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEzE,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,eAAe,CAAC;aAChD,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM;aAClB,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;aAClB,QAAQ,CAAC,QAAQ,CAAC,CACnB,CAAC;IACJ,CAAC;IAES,4BAA4B,CAAC,IAAqB;QAC3D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAES,eAAe,CAAC,IAAqB;QAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAES,eAAe,CAAC,IAAc;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAE/E,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAES,KAAK;QACd,OAAO,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACjC,CAAC;IAED,IAAc,SAAS;QACtB,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,IAAc,SAAS;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAEO,UAAU,CAAC,KAAa,EAAE,MAAc;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAEtC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;CACD"}
@@ -1,19 +0,0 @@
1
- import { RSAPrivateKey } from './rsa.private-key.js';
2
- export type RSAKeyPairOptions = {
3
- seed?: string;
4
- bits?: number;
5
- privateKey?: RSAPrivateKey | string;
6
- };
7
- export declare class RSAKeyPair {
8
- private readonly publicRsaKey;
9
- private readonly privateRsaKey;
10
- constructor(options?: RSAKeyPairOptions);
11
- encrypt(value: string | Buffer): Buffer;
12
- decrypt(value: string | Buffer): string;
13
- sign(value: string): Buffer;
14
- verify(signature: string | Buffer, value: string): boolean;
15
- get publicKey(): string;
16
- get privateKey(): string;
17
- private generateKeys;
18
- }
19
- //# sourceMappingURL=rsa.key-pair.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rsa.key-pair.d.ts","sourceRoot":"","sources":["../src/rsa.key-pair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;CACpC,CAAA;AAED,qBAAa,UAAU;IACtB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;gBAE3B,OAAO,GAAE,iBAAsB;IAO3C,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAIvC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAIvC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI3B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAIjE,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,OAAO,CAAC,YAAY;CAmBpB"}
@@ -1,46 +0,0 @@
1
- import forge from 'node-forge';
2
- import { RSAPrivateKey } from './rsa.private-key.js';
3
- import { RSAPublicKey } from './rsa.public-key.js';
4
- export class RSAKeyPair {
5
- publicRsaKey;
6
- privateRsaKey;
7
- constructor(options = {}) {
8
- const keyPair = this.generateKeys(options);
9
- this.privateRsaKey = new RSAPrivateKey(keyPair.privateKey);
10
- this.publicRsaKey = new RSAPublicKey(keyPair.publicKey);
11
- }
12
- encrypt(value) {
13
- return this.publicRsaKey.encrypt(value);
14
- }
15
- decrypt(value) {
16
- return this.privateRsaKey.decrypt(value);
17
- }
18
- sign(value) {
19
- return this.privateRsaKey.sign(value);
20
- }
21
- verify(signature, value) {
22
- return this.publicRsaKey.verify(signature, value);
23
- }
24
- get publicKey() {
25
- return this.publicRsaKey.toString();
26
- }
27
- get privateKey() {
28
- return this.privateRsaKey.toString();
29
- }
30
- generateKeys(options) {
31
- const { seed, privateKey, bits } = options;
32
- if (privateKey) {
33
- const key = typeof privateKey === 'string' ? RSAPrivateKey.fromString(privateKey) : privateKey;
34
- const publicKey = key.toPublicKey();
35
- return { privateKey: key['key'], publicKey: publicKey['key'] };
36
- }
37
- if (!seed) {
38
- return forge.pki.rsa.generateKeyPair({ bits });
39
- }
40
- const prng = forge.random.createInstance();
41
- prng.seedFileSync = () => seed;
42
- prng.seedFile = () => seed;
43
- return forge.pki.rsa.generateKeyPair({ prng, bits });
44
- }
45
- }
46
- //# sourceMappingURL=rsa.key-pair.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rsa.key-pair.js","sourceRoot":"","sources":["../src/rsa.key-pair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQnD,MAAM,OAAO,UAAU;IACL,YAAY,CAAe;IAC3B,aAAa,CAAgB;IAE9C,YAAmB,UAA6B,EAAE;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE3C,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;IAEM,OAAO,CAAC,KAAsB;QACpC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAEM,OAAO,CAAC,KAAsB;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAEM,IAAI,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAEM,MAAM,CAAC,SAA0B,EAAE,KAAa;QACtD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,IAAW,SAAS;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;IACrC,CAAC;IAED,IAAW,UAAU;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;IACtC,CAAC;IAEO,YAAY,CAAC,OAA0B;QAC9C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAE3C,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;YAC/F,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YAEpC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC;QAEnC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;CACD"}
@@ -1,13 +0,0 @@
1
- import forge from 'node-forge';
2
- import { RSABaseKey } from './rsa.base-key.js';
3
- import { RSAPublicKey } from './rsa.public-key.js';
4
- export declare class RSAPrivateKey extends RSABaseKey {
5
- protected readonly key: forge.pki.rsa.PrivateKey;
6
- constructor(key: forge.pki.rsa.PrivateKey);
7
- toPublicKey(): RSAPublicKey;
8
- decrypt(encrypted: string | Buffer): string;
9
- sign(value: string): Buffer;
10
- toString(): string;
11
- static fromString(pemKey: string): RSAPrivateKey;
12
- }
13
- //# sourceMappingURL=rsa.private-key.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rsa.private-key.d.ts","sourceRoot":"","sources":["../src/rsa.private-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,qBAAa,aAAc,SAAQ,UAAU;IAC5C,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;gBAE9B,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU;IAKzC,WAAW,IAAI,YAAY;IAI3B,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAU3C,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAclB,QAAQ,IAAI,MAAM;WAIpB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa;CAKvD"}
@@ -1,38 +0,0 @@
1
- import forge from 'node-forge';
2
- import { RSABaseKey } from './rsa.base-key.js';
3
- import { RSAPublicKey } from './rsa.public-key.js';
4
- export class RSAPrivateKey extends RSABaseKey {
5
- key;
6
- constructor(key) {
7
- super();
8
- this.key = key;
9
- }
10
- toPublicKey() {
11
- return new RSAPublicKey(forge.pki.rsa.setPublicKey(this.key.n, this.key.e));
12
- }
13
- decrypt(encrypted) {
14
- const md = this.getMd();
15
- const chunks = this.prepareToDecrypt(encrypted);
16
- const decryptedChunks = chunks.map(chunk => this.key.decrypt(chunk, 'RSAES-PKCS1-V1_5', { md }));
17
- return decryptedChunks.join('');
18
- }
19
- sign(value) {
20
- const hash = this.getMd();
21
- hash.update(value);
22
- const pss = forge.pss.create({
23
- md: this.getMd(),
24
- mgf: forge.mgf.mgf1.create(this.getMd()),
25
- saltLength: 20,
26
- });
27
- const signedId = this.key.sign(hash, pss);
28
- return Buffer.from(signedId, 'binary');
29
- }
30
- toString() {
31
- return forge.pki.privateKeyToPem(this.key);
32
- }
33
- static fromString(pemKey) {
34
- const key = forge.pki.privateKeyFromPem(pemKey);
35
- return new RSAPrivateKey(key);
36
- }
37
- }
38
- //# sourceMappingURL=rsa.private-key.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rsa.private-key.js","sourceRoot":"","sources":["../src/rsa.private-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,OAAO,aAAc,SAAQ,UAAU;IACzB,GAAG,CAA2B;IAEjD,YAAmB,GAA6B;QAC/C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,CAAC;IAEM,WAAW;QACjB,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEM,OAAO,CAAC,SAA0B;QACxC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAEhD,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAEjG,OAAO,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAEM,IAAI,CAAC,KAAa;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAC5B,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE;YAChB,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,UAAU,EAAE,EAAE;SACd,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAE1C,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAEe,QAAQ;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,MAAc;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEhD,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACD"}
@@ -1,13 +0,0 @@
1
- import { z } from '@hg-ts/validation';
2
- import forge from 'node-forge';
3
- import { RSABaseKey } from './rsa.base-key.js';
4
- export declare class RSAPublicKey extends RSABaseKey {
5
- protected readonly key: forge.pki.rsa.PublicKey;
6
- static schema: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
7
- constructor(key: forge.pki.rsa.PublicKey);
8
- encrypt(value: string | Buffer): Buffer;
9
- verify(signature: string | Buffer, value: string): boolean;
10
- toString(): string;
11
- static fromString(pemKey: string): RSAPublicKey;
12
- }
13
- //# sourceMappingURL=rsa.public-key.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rsa.public-key.d.ts","sourceRoot":"","sources":["../src/rsa.public-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAmB/C,qBAAa,YAAa,SAAQ,UAAU;IAC3C,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;IAEhD,OAAc,MAAM,iFAAU;gBAEX,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS;IAKxC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IASvC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAejD,QAAQ,IAAI,MAAM;WAIpB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;CAKtD"}
@@ -1,52 +0,0 @@
1
- import { z } from '@hg-ts/validation';
2
- import forge from 'node-forge';
3
- import { RSABaseKey } from './rsa.base-key.js';
4
- const schema = z.string().transform((value, ctx) => {
5
- try {
6
- const publicKey = forge.pki.publicKeyFromPem(value);
7
- return forge.pki.publicKeyToPem(publicKey);
8
- }
9
- catch (error) {
10
- ctx.issues.push({
11
- message: 'Invalid public key',
12
- fatal: true,
13
- code: 'invalid_format',
14
- input: value,
15
- format: 'RSA Public Key',
16
- });
17
- return value;
18
- }
19
- }).pipe(z.string());
20
- export class RSAPublicKey extends RSABaseKey {
21
- key;
22
- static schema = schema;
23
- constructor(key) {
24
- super();
25
- this.key = key;
26
- }
27
- encrypt(value) {
28
- const md = this.getMd();
29
- const chunks = this.prepareToEncrypt(value);
30
- const encryptedChunks = chunks.map(chunk => this.key.encrypt(chunk, 'RSAES-PKCS1-V1_5', { md }));
31
- return this.formatEncrypted(encryptedChunks);
32
- }
33
- verify(signature, value) {
34
- const hash = this.getMd();
35
- hash.update(value);
36
- const pss = forge.pss.create({
37
- md: this.getMd(),
38
- mgf: forge.mgf.mgf1.create(this.getMd()),
39
- saltLength: 20,
40
- });
41
- const formattedSignature = this.formatSignature(signature);
42
- return this.key.verify(hash.digest().bytes(), formattedSignature, pss);
43
- }
44
- toString() {
45
- return forge.pki.publicKeyToPem(this.key);
46
- }
47
- static fromString(pemKey) {
48
- const key = forge.pki.publicKeyFromPem(pemKey);
49
- return new RSAPublicKey(key);
50
- }
51
- }
52
- //# sourceMappingURL=rsa.public-key.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rsa.public-key.js","sourceRoot":"","sources":["../src/rsa.public-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAClD,IAAI,CAAC;QACJ,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEpD,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,OAAO,EAAE,oBAAoB;YAC7B,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,gBAAgB;SACxB,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAEpB,MAAM,OAAO,YAAa,SAAQ,UAAU;IACxB,GAAG,CAA0B;IAEzC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAE9B,YAAmB,GAA4B;QAC9C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,CAAC;IAEM,OAAO,CAAC,KAAsB;QACpC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAE5C,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAEjG,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IAC9C,CAAC;IAEM,MAAM,CAAC,SAA0B,EAAE,KAAa;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAC5B,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE;YAChB,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,UAAU,EAAE,EAAE;SACd,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAE3D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC;IAEe,QAAQ;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,MAAc;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAE/C,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rsa.test.d.ts","sourceRoot":"","sources":["../src/rsa.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,EAEL,MAAM,cAAc,CAAC;AAOtB,qBACa,OAAQ,SAAQ,KAAK;IAEpB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtC,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5C,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAS1B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAShC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IASjC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUtC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IASrC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAUvB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ1C,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC;CAOvD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rsa.test.js","sourceRoot":"","sources":["../src/rsa.test.ts"],"names":[],"mappings":"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"}
@@ -1,75 +0,0 @@
1
- import forge from 'node-forge';
2
-
3
- export abstract class RSABaseKey {
4
- private readonly mdDigestLength: number;
5
-
6
- protected abstract key: forge.pki.rsa.PrivateKey | forge.pki.rsa.PublicKey;
7
-
8
- public constructor() {
9
- this.mdDigestLength = this.getMd().digestLength;
10
- }
11
-
12
- protected prepareToEncrypt(data: string | Buffer): string[] {
13
- const input = this.formatDecryptedInputToString(data);
14
-
15
- return this.splitInput(input, this.maxLength);
16
- }
17
-
18
- protected prepareToDecrypt(data: string | Buffer): string[] {
19
- const encryptedLength = this.keyLength * 2;
20
- const encrypted = typeof data === 'string' ? data : data.toString('hex');
21
-
22
- return this.splitInput(encrypted, encryptedLength)
23
- .map(chunk => Buffer
24
- .from(chunk, 'hex')
25
- .toString('binary'),
26
- );
27
- }
28
-
29
- protected formatDecryptedInputToString(data: string | Buffer): string {
30
- if (typeof data === 'string') {
31
- return data;
32
- }
33
-
34
- return Buffer.from(data).toString('hex');
35
- }
36
-
37
- protected formatSignature(data: string | Buffer): string {
38
- if (typeof data === 'string') {
39
- return data;
40
- }
41
-
42
- return Buffer.from(data).toString('binary');
43
- }
44
-
45
- protected formatEncrypted(data: string[]): Buffer {
46
- const chunks = data.map(chunk => Buffer.from(chunk, 'binary').toString('hex'));
47
-
48
- return Buffer.from(chunks.join(''), 'hex');
49
- }
50
-
51
- protected getMd(): forge.md.MessageDigest {
52
- return forge.md.sha256.create();
53
- }
54
-
55
- protected get maxLength(): number {
56
- return this.keyLength - (this.mdDigestLength * 2) - 2;
57
- }
58
-
59
- protected get keyLength(): number {
60
- return Math.ceil(this.key.n.bitLength() / 8);
61
- }
62
-
63
- private splitInput(value: string, length: number): string[] {
64
- const chars = value.split('');
65
- const chunks: string[] = [];
66
-
67
- while (chars.length > 0) {
68
- const chunk = chars.splice(0, length);
69
-
70
- chunks.push(chunk.join(''));
71
- }
72
-
73
- return chunks;
74
- }
75
- }
@@ -1,65 +0,0 @@
1
- import forge from 'node-forge';
2
- import { RSAPrivateKey } from './rsa.private-key.js';
3
- import { RSAPublicKey } from './rsa.public-key.js';
4
-
5
- export type RSAKeyPairOptions = {
6
- seed?: string;
7
- bits?: number;
8
- privateKey?: RSAPrivateKey | string;
9
- }
10
-
11
- export class RSAKeyPair {
12
- private readonly publicRsaKey: RSAPublicKey;
13
- private readonly privateRsaKey: RSAPrivateKey;
14
-
15
- public constructor(options: RSAKeyPairOptions = {}) {
16
- const keyPair = this.generateKeys(options);
17
-
18
- this.privateRsaKey = new RSAPrivateKey(keyPair.privateKey);
19
- this.publicRsaKey = new RSAPublicKey(keyPair.publicKey);
20
- }
21
-
22
- public encrypt(value: string | Buffer): Buffer {
23
- return this.publicRsaKey.encrypt(value);
24
- }
25
-
26
- public decrypt(value: string | Buffer): string {
27
- return this.privateRsaKey.decrypt(value);
28
- }
29
-
30
- public sign(value: string): Buffer {
31
- return this.privateRsaKey.sign(value);
32
- }
33
-
34
- public verify(signature: string | Buffer, value: string): boolean {
35
- return this.publicRsaKey.verify(signature, value);
36
- }
37
-
38
- public get publicKey(): string {
39
- return this.publicRsaKey.toString();
40
- }
41
-
42
- public get privateKey(): string {
43
- return this.privateRsaKey.toString();
44
- }
45
-
46
- private generateKeys(options: RSAKeyPairOptions): forge.pki.rsa.KeyPair {
47
- const { seed, privateKey, bits } = options;
48
-
49
- if (privateKey) {
50
- const key = typeof privateKey === 'string' ? RSAPrivateKey.fromString(privateKey) : privateKey;
51
- const publicKey = key.toPublicKey();
52
-
53
- return { privateKey: key['key'], publicKey: publicKey['key'] };
54
- }
55
- if (!seed) {
56
- return forge.pki.rsa.generateKeyPair({ bits });
57
- }
58
-
59
- const prng = forge.random.createInstance();
60
- prng.seedFileSync = (): string => seed;
61
- prng.seedFile = (): string => seed;
62
-
63
- return forge.pki.rsa.generateKeyPair({ prng, bits });
64
- }
65
- }