@hg-ts/rsa 0.2.7 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ export * from './rsa.private-key';
2
+ export * from './rsa.public-key';
3
+ export * from './rsa.key-pair';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./rsa.private-key"), exports);
5
+ tslib_1.__exportStar(require("./rsa.public-key"), exports);
6
+ tslib_1.__exportStar(require("./rsa.key-pair"), exports);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,4DAAkC;AAClC,2DAAiC;AACjC,yDAA+B"}
@@ -0,0 +1,16 @@
1
+ export type RSAKeyPairOptions = {
2
+ seed?: string;
3
+ };
4
+ export declare class RSAKeyPair {
5
+ private readonly publicRsaKey;
6
+ private readonly privateRsaKey;
7
+ constructor(options?: RSAKeyPairOptions);
8
+ encrypt(value: string): string;
9
+ decrypt(value: string): string;
10
+ sign(value: string): string;
11
+ verify(signature: string, value: string): boolean;
12
+ get publicKey(): string;
13
+ get privateKey(): string;
14
+ private generateKeys;
15
+ }
16
+ //# sourceMappingURL=rsa.key-pair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.key-pair.d.ts","sourceRoot":"","sources":["../src/rsa.key-pair.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,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;IAI9B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI9B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI3B,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAIxD,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,OAAO,CAAC,YAAY;CAYpB"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RSAKeyPair = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const node_forge_1 = tslib_1.__importDefault(require("node-forge"));
6
+ const rsa_private_key_1 = require("./rsa.private-key");
7
+ const rsa_public_key_1 = require("./rsa.public-key");
8
+ class RSAKeyPair {
9
+ publicRsaKey;
10
+ privateRsaKey;
11
+ constructor(options = {}) {
12
+ const keyPair = this.generateKeys(options);
13
+ this.privateRsaKey = new rsa_private_key_1.RSAPrivateKey(keyPair.privateKey);
14
+ this.publicRsaKey = new rsa_public_key_1.RSAPublicKey(keyPair.publicKey);
15
+ }
16
+ encrypt(value) {
17
+ return this.publicRsaKey.encrypt(value);
18
+ }
19
+ decrypt(value) {
20
+ return this.privateRsaKey.decrypt(value);
21
+ }
22
+ sign(value) {
23
+ return this.privateRsaKey.sign(value);
24
+ }
25
+ verify(signature, value) {
26
+ return this.publicRsaKey.verify(signature, value);
27
+ }
28
+ get publicKey() {
29
+ return this.publicRsaKey.toString();
30
+ }
31
+ get privateKey() {
32
+ return this.privateRsaKey.toString();
33
+ }
34
+ generateKeys(options) {
35
+ const { seed } = options;
36
+ if (!seed) {
37
+ return node_forge_1.default.pki.rsa.generateKeyPair();
38
+ }
39
+ const prng = node_forge_1.default.random.createInstance();
40
+ prng.seedFileSync = () => seed;
41
+ prng.seedFile = () => seed;
42
+ return node_forge_1.default.pki.rsa.generateKeyPair({ prng });
43
+ }
44
+ }
45
+ exports.RSAKeyPair = RSAKeyPair;
46
+ //# sourceMappingURL=rsa.key-pair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.key-pair.js","sourceRoot":"","sources":["../src/rsa.key-pair.ts"],"names":[],"mappings":";;;;AAAA,oEAA+B;AAC/B,uDAAkD;AAClD,qDAAgD;AAMhD,MAAa,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,+BAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,6BAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;IAEM,OAAO,CAAC,KAAa;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAEM,OAAO,CAAC,KAAa;QAC3B,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,SAAiB,EAAE,KAAa;QAC7C,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,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,oBAAK,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QACxC,CAAC;QAED,MAAM,IAAI,GAAG,oBAAK,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,oBAAK,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;CACD;AA/CD,gCA+CC"}
@@ -0,0 +1,10 @@
1
+ import forge from 'node-forge';
2
+ export declare class RSAPrivateKey {
3
+ private readonly key;
4
+ constructor(key: forge.pki.rsa.PrivateKey);
5
+ decrypt(encrypted: string): string;
6
+ sign(value: string): string;
7
+ toString(): string;
8
+ static fromString(pemKey: string): RSAPrivateKey;
9
+ }
10
+ //# sourceMappingURL=rsa.private-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.private-key.d.ts","sourceRoot":"","sources":["../src/rsa.private-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAO/B,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA2B;gBAE5B,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU;IAIzC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAelC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAc3B,QAAQ,IAAI,MAAM;WAIX,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa;CAKvD"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RSAPrivateKey = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const node_forge_1 = tslib_1.__importDefault(require("node-forge"));
6
+ const utils_1 = require("./utils");
7
+ class RSAPrivateKey {
8
+ key;
9
+ constructor(key) {
10
+ this.key = key;
11
+ }
12
+ decrypt(encrypted) {
13
+ const md = (0, utils_1.getMd)();
14
+ const chunkSize = (0, utils_1.getEncryptedLength)(this.key);
15
+ const chunks = (0, utils_1.chunkString)(encrypted, chunkSize);
16
+ const decryptedChunks = chunks.map(chunk => {
17
+ const value = Buffer.from(chunk, 'hex').toString('binary');
18
+ return this.key.decrypt(value, 'RSA-OAEP', { md });
19
+ });
20
+ return decryptedChunks.join('');
21
+ }
22
+ sign(value) {
23
+ const hash = node_forge_1.default.md.sha512.create();
24
+ hash.update(value);
25
+ const pss = node_forge_1.default.pss.create({
26
+ md: node_forge_1.default.md.sha512.create(),
27
+ mgf: node_forge_1.default.mgf.mgf1.create(node_forge_1.default.md.sha512.create()),
28
+ saltLength: 20,
29
+ });
30
+ const signedId = this.key.sign(hash, pss);
31
+ return Buffer.from(signedId, 'binary').toString('hex');
32
+ }
33
+ toString() {
34
+ return node_forge_1.default.pki.privateKeyToPem(this.key);
35
+ }
36
+ static fromString(pemKey) {
37
+ const key = node_forge_1.default.pki.privateKeyFromPem(pemKey);
38
+ return new RSAPrivateKey(key);
39
+ }
40
+ }
41
+ exports.RSAPrivateKey = RSAPrivateKey;
42
+ //# sourceMappingURL=rsa.private-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.private-key.js","sourceRoot":"","sources":["../src/rsa.private-key.ts"],"names":[],"mappings":";;;;AAAA,oEAA+B;AAC/B,mCAIiB;AAEjB,MAAa,aAAa;IACR,GAAG,CAA2B;IAE/C,YAAmB,GAA6B;QAC/C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,CAAC;IAEM,OAAO,CAAC,SAAiB;QAC/B,MAAM,EAAE,GAAG,IAAA,aAAK,GAAE,CAAC;QACnB,MAAM,SAAS,GAAG,IAAA,0BAAkB,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAG/C,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAE3D,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,OAAO,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAEM,IAAI,CAAC,KAAa;QACxB,MAAM,IAAI,GAAG,oBAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnB,MAAM,GAAG,GAAG,oBAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAC5B,EAAE,EAAE,oBAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5B,GAAG,EAAE,oBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACpD,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,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAEM,QAAQ;QACd,OAAO,oBAAK,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,MAAc;QACtC,MAAM,GAAG,GAAG,oBAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEhD,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACD;AA7CD,sCA6CC"}
@@ -0,0 +1,12 @@
1
+ import { z } from '@hg-ts/validation';
2
+ import forge from 'node-forge';
3
+ export declare class RSAPublicKey {
4
+ private readonly key;
5
+ static schema: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
6
+ constructor(key: forge.pki.rsa.PublicKey);
7
+ encrypt(value: string): string;
8
+ verify(signature: string, value: string): boolean;
9
+ toString(): string;
10
+ static fromString(pemKey: string): RSAPublicKey;
11
+ }
12
+ //# sourceMappingURL=rsa.public-key.d.ts.map
@@ -0,0 +1 @@
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;AAuB/B,qBAAa,YAAY;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA0B;IAE9C,OAAc,MAAM,wEAAU;gBAEX,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS;IAIxC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAc9B,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAejD,QAAQ,IAAI,MAAM;WAIX,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;CAKtD"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RSAPublicKey = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const validation_1 = require("@hg-ts/validation");
6
+ const node_forge_1 = tslib_1.__importDefault(require("node-forge"));
7
+ const utils_1 = require("./utils");
8
+ const schema = validation_1.z.string().transform((value, ctx) => {
9
+ try {
10
+ const publicKey = node_forge_1.default.pki.publicKeyFromPem(value);
11
+ return node_forge_1.default.pki.publicKeyToPem(publicKey);
12
+ }
13
+ catch (error) {
14
+ ctx.addIssue({
15
+ message: 'Invalid public key',
16
+ fatal: true,
17
+ code: 'invalid_string',
18
+ validation: 'regex',
19
+ });
20
+ return value;
21
+ }
22
+ }).pipe(validation_1.z.string());
23
+ class RSAPublicKey {
24
+ key;
25
+ static schema = schema;
26
+ constructor(key) {
27
+ this.key = key;
28
+ }
29
+ encrypt(value) {
30
+ const md = (0, utils_1.getMd)();
31
+ const chunkSize = (0, utils_1.getMaxLength)(this.key, md);
32
+ const chunks = (0, utils_1.chunkString)(value, chunkSize);
33
+ const encryptedChunks = chunks.map(chunk => {
34
+ const binarySignature = this.key.encrypt(chunk, 'RSA-OAEP', { md });
35
+ return Buffer.from(binarySignature, 'binary').toString('hex');
36
+ });
37
+ return encryptedChunks.join('');
38
+ }
39
+ verify(signature, value) {
40
+ const hash = node_forge_1.default.md.sha512.create();
41
+ hash.update(value);
42
+ const pss = node_forge_1.default.pss.create({
43
+ md: node_forge_1.default.md.sha512.create(),
44
+ mgf: node_forge_1.default.mgf.mgf1.create(node_forge_1.default.md.sha512.create()),
45
+ saltLength: 20,
46
+ });
47
+ const binarySignature = Buffer.from(signature, 'hex').toString('binary');
48
+ return this.key.verify(hash.digest().bytes(), binarySignature, pss);
49
+ }
50
+ toString() {
51
+ return node_forge_1.default.pki.publicKeyToPem(this.key);
52
+ }
53
+ static fromString(pemKey) {
54
+ const key = node_forge_1.default.pki.publicKeyFromPem(pemKey);
55
+ return new RSAPublicKey(key);
56
+ }
57
+ }
58
+ exports.RSAPublicKey = RSAPublicKey;
59
+ //# sourceMappingURL=rsa.public-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.public-key.js","sourceRoot":"","sources":["../src/rsa.public-key.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Suite } from '@hg-ts/tests';
2
+ export declare class BaseRepositoryTestSuite extends Suite {
3
+ signature(): Promise<void>;
4
+ encryption(): Promise<void>;
5
+ longMessageEncryption(): Promise<void>;
6
+ longMessageSignature(): Promise<void>;
7
+ seeded(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=rsa.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.test.d.ts","sourceRoot":"","sources":["../src/rsa.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,EAEL,MAAM,cAAc,CAAC;AAGtB,qBACa,uBAAwB,SAAQ,KAAK;IAEpC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAS1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUtC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IASrC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAQpC"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseRepositoryTestSuite = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tests_1 = require("@hg-ts/tests");
6
+ const rsa_key_pair_1 = require("./rsa.key-pair");
7
+ let BaseRepositoryTestSuite = class BaseRepositoryTestSuite extends tests_1.Suite {
8
+ async signature() {
9
+ const rsa = new rsa_key_pair_1.RSAKeyPair();
10
+ const value = Math.random().toString();
11
+ const signature = rsa.sign(value);
12
+ (0, tests_1.expect)(rsa.verify(signature, value)).toBeTruthy();
13
+ }
14
+ async encryption() {
15
+ const rsa = new rsa_key_pair_1.RSAKeyPair();
16
+ const value = Math.random().toString();
17
+ const encrypted = rsa.encrypt(value);
18
+ (0, tests_1.expect)(rsa.decrypt(encrypted)).toBe(value);
19
+ }
20
+ async longMessageEncryption() {
21
+ const rsa = new rsa_key_pair_1.RSAKeyPair();
22
+ const rsaToTest = new rsa_key_pair_1.RSAKeyPair();
23
+ const value = rsaToTest.publicKey;
24
+ const encrypted = rsa.encrypt(value);
25
+ (0, tests_1.expect)(rsa.decrypt(encrypted)).toBe(value);
26
+ }
27
+ async longMessageSignature() {
28
+ const rsa = new rsa_key_pair_1.RSAKeyPair();
29
+ const value = rsa.publicKey;
30
+ const signature = rsa.sign(value);
31
+ (0, tests_1.expect)(rsa.verify(signature, value)).toBeTruthy();
32
+ }
33
+ async seeded() {
34
+ const seed = Math.random().toString();
35
+ const rsa1 = new rsa_key_pair_1.RSAKeyPair({ seed });
36
+ const rsa2 = new rsa_key_pair_1.RSAKeyPair({ seed });
37
+ (0, tests_1.expect)(rsa1.privateKey).toBe(rsa2.privateKey);
38
+ (0, tests_1.expect)(rsa1.publicKey).toBe(rsa2.publicKey);
39
+ }
40
+ };
41
+ exports.BaseRepositoryTestSuite = BaseRepositoryTestSuite;
42
+ tslib_1.__decorate([
43
+ (0, tests_1.Test)(),
44
+ tslib_1.__metadata("design:type", Function),
45
+ tslib_1.__metadata("design:paramtypes", []),
46
+ tslib_1.__metadata("design:returntype", Promise)
47
+ ], BaseRepositoryTestSuite.prototype, "signature", null);
48
+ tslib_1.__decorate([
49
+ (0, tests_1.Test)(),
50
+ tslib_1.__metadata("design:type", Function),
51
+ tslib_1.__metadata("design:paramtypes", []),
52
+ tslib_1.__metadata("design:returntype", Promise)
53
+ ], BaseRepositoryTestSuite.prototype, "encryption", null);
54
+ tslib_1.__decorate([
55
+ (0, tests_1.Test)(),
56
+ tslib_1.__metadata("design:type", Function),
57
+ tslib_1.__metadata("design:paramtypes", []),
58
+ tslib_1.__metadata("design:returntype", Promise)
59
+ ], BaseRepositoryTestSuite.prototype, "longMessageEncryption", null);
60
+ tslib_1.__decorate([
61
+ (0, tests_1.Test)(),
62
+ tslib_1.__metadata("design:type", Function),
63
+ tslib_1.__metadata("design:paramtypes", []),
64
+ tslib_1.__metadata("design:returntype", Promise)
65
+ ], BaseRepositoryTestSuite.prototype, "longMessageSignature", null);
66
+ tslib_1.__decorate([
67
+ (0, tests_1.Test)(),
68
+ tslib_1.__metadata("design:type", Function),
69
+ tslib_1.__metadata("design:paramtypes", []),
70
+ tslib_1.__metadata("design:returntype", Promise)
71
+ ], BaseRepositoryTestSuite.prototype, "seeded", null);
72
+ exports.BaseRepositoryTestSuite = BaseRepositoryTestSuite = tslib_1.__decorate([
73
+ (0, tests_1.Describe)()
74
+ ], BaseRepositoryTestSuite);
75
+ //# sourceMappingURL=rsa.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.test.js","sourceRoot":"","sources":["../src/rsa.test.ts"],"names":[],"mappings":";;;;AAAA,wCAKsB;AACtB,iDAA4C;AAGrC,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,aAAK;IAEpC,AAAN,KAAK,CAAC,SAAS;QACrB,MAAM,GAAG,GAAG,IAAI,yBAAU,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;QAEvC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,IAAA,cAAM,EAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACnD,CAAC;IAGY,AAAN,KAAK,CAAC,UAAU;QACtB,MAAM,GAAG,GAAG,IAAI,yBAAU,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;QAEvC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,IAAA,cAAM,EAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAGY,AAAN,KAAK,CAAC,qBAAqB;QACjC,MAAM,GAAG,GAAG,IAAI,yBAAU,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,yBAAU,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC;QAElC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,IAAA,cAAM,EAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAGY,AAAN,KAAK,CAAC,oBAAoB;QAChC,MAAM,GAAG,GAAG,IAAI,yBAAU,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC;QAE5B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,IAAA,cAAM,EAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACnD,CAAC;IAGY,AAAN,KAAK,CAAC,MAAM;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,yBAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,yBAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtC,IAAA,cAAM,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAA,cAAM,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;CACD,CAAA;AA/CY,0DAAuB;AAEtB;IADZ,IAAA,YAAI,GAAE;;;;wDAON;AAGY;IADZ,IAAA,YAAI,GAAE;;;;yDAON;AAGY;IADZ,IAAA,YAAI,GAAE;;;;oEAQN;AAGY;IADZ,IAAA,YAAI,GAAE;;;;mEAON;AAGY;IADZ,IAAA,YAAI,GAAE;;;;qDAQN;kCA9CW,uBAAuB;IADnC,IAAA,gBAAQ,GAAE;GACE,uBAAuB,CA+CnC"}
@@ -0,0 +1,7 @@
1
+ import forge from 'node-forge';
2
+ export declare function chunkString(value: string, length: number): string[];
3
+ export declare function getMd(): forge.md.MessageDigest;
4
+ export declare function getKeyLength(key: forge.pki.rsa.PrivateKey | forge.pki.rsa.PublicKey): number;
5
+ export declare function getMaxLength(key: forge.pki.rsa.PrivateKey | forge.pki.rsa.PublicKey, md: forge.md.MessageDigest): number;
6
+ export declare function getEncryptedLength(key: forge.pki.rsa.PrivateKey | forge.pki.rsa.PublicKey): number;
7
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAWnE;AAED,wBAAgB,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC,aAAa,CAE9C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAE5F;AAED,wBAAgB,YAAY,CAC3B,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EACvD,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,GACxB,MAAM,CAIR;AAGD,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,GACrD,MAAM,CAIR"}
package/dist/utils.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.chunkString = chunkString;
4
+ exports.getMd = getMd;
5
+ exports.getKeyLength = getKeyLength;
6
+ exports.getMaxLength = getMaxLength;
7
+ exports.getEncryptedLength = getEncryptedLength;
8
+ const tslib_1 = require("tslib");
9
+ const node_forge_1 = tslib_1.__importDefault(require("node-forge"));
10
+ function chunkString(value, length) {
11
+ const chars = value.split('');
12
+ const chunks = [];
13
+ while (chars.length > 0) {
14
+ const chunk = chars.splice(0, length);
15
+ chunks.push(chunk.join(''));
16
+ }
17
+ return chunks;
18
+ }
19
+ function getMd() {
20
+ return node_forge_1.default.md.sha512.create();
21
+ }
22
+ function getKeyLength(key) {
23
+ return Math.ceil(key.n.bitLength() / 8);
24
+ }
25
+ function getMaxLength(key, md) {
26
+ const keyLength = getKeyLength(key);
27
+ return keyLength - (md.digestLength * 2) - 2;
28
+ }
29
+ function getEncryptedLength(key) {
30
+ const keyLength = getKeyLength(key);
31
+ return keyLength * 2;
32
+ }
33
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;AAEA,kCAWC;AAED,sBAEC;AAED,oCAEC;AAED,oCAOC;AAGD,gDAMC;;AAvCD,oEAA+B;AAE/B,SAAgB,WAAW,CAAC,KAAa,EAAE,MAAc;IACxD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAEtC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAgB,KAAK;IACpB,OAAO,oBAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACjC,CAAC;AAED,SAAgB,YAAY,CAAC,GAAuD;IACnF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,YAAY,CAC3B,GAAuD,EACvD,EAA0B;IAE1B,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAEpC,OAAO,SAAS,GAAG,CAAC,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9C,CAAC;AAGD,SAAgB,kBAAkB,CACjC,GAAuD;IAEvD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAEpC,OAAO,SAAS,GAAG,CAAC,CAAC;AACtB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hg-ts/rsa",
3
- "version": "0.2.7",
3
+ "version": "0.2.9",
4
4
  "main": "dist/index.js",
5
5
  "exports": {
6
6
  ".": "./dist/index.js"
@@ -17,12 +17,12 @@
17
17
  "test:dev": "yarn build:dev --onSuccess \"yarn test\""
18
18
  },
19
19
  "devDependencies": {
20
- "@hg-ts-config/typescript": "0.2.7",
21
- "@hg-ts/exception": "0.2.7",
22
- "@hg-ts/linter": "0.2.7",
23
- "@hg-ts/tests": "0.2.7",
24
- "@hg-ts/types": "0.2.7",
25
- "@hg-ts/validation": "0.2.7",
20
+ "@hg-ts-config/typescript": "0.2.9",
21
+ "@hg-ts/exception": "0.2.9",
22
+ "@hg-ts/linter": "0.2.9",
23
+ "@hg-ts/tests": "0.2.9",
24
+ "@hg-ts/types": "0.2.9",
25
+ "@hg-ts/validation": "0.2.9",
26
26
  "@types/node": "22.10.6",
27
27
  "@types/node-forge": "^1",
28
28
  "eslint": "9.18.0",
@@ -33,8 +33,8 @@
33
33
  "typescript": "5.7.3"
34
34
  },
35
35
  "peerDependencies": {
36
- "@hg-ts/exception": "0.2.7",
37
- "@hg-ts/validation": "0.2.7",
36
+ "@hg-ts/exception": "0.2.9",
37
+ "@hg-ts/validation": "0.2.9",
38
38
  "reflect-metadata": "*",
39
39
  "tslib": "*"
40
40
  },