@pengzi/kms 1.0.0

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 (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +325 -0
  3. package/dist/client.d.ts +130 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +266 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/config.d.ts +20 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +54 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/core/asymmetric-crypto.d.ts +81 -0
  12. package/dist/core/asymmetric-crypto.d.ts.map +1 -0
  13. package/dist/core/asymmetric-crypto.js +171 -0
  14. package/dist/core/asymmetric-crypto.js.map +1 -0
  15. package/dist/core/crypto.d.ts +37 -0
  16. package/dist/core/crypto.d.ts.map +1 -0
  17. package/dist/core/crypto.js +100 -0
  18. package/dist/core/crypto.js.map +1 -0
  19. package/dist/core/crypto.service.d.ts +35 -0
  20. package/dist/core/crypto.service.d.ts.map +1 -0
  21. package/dist/core/crypto.service.js +67 -0
  22. package/dist/core/crypto.service.js.map +1 -0
  23. package/dist/core/key-derivation.d.ts +25 -0
  24. package/dist/core/key-derivation.d.ts.map +1 -0
  25. package/dist/core/key-derivation.js +96 -0
  26. package/dist/core/key-derivation.js.map +1 -0
  27. package/dist/index.d.ts +10 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +51 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/models/audit.model.d.ts +40 -0
  32. package/dist/models/audit.model.d.ts.map +1 -0
  33. package/dist/models/audit.model.js +83 -0
  34. package/dist/models/audit.model.js.map +1 -0
  35. package/dist/models/key.model.d.ts +40 -0
  36. package/dist/models/key.model.d.ts.map +1 -0
  37. package/dist/models/key.model.js +120 -0
  38. package/dist/models/key.model.js.map +1 -0
  39. package/dist/models/project.model.d.ts +20 -0
  40. package/dist/models/project.model.d.ts.map +1 -0
  41. package/dist/models/project.model.js +54 -0
  42. package/dist/models/project.model.js.map +1 -0
  43. package/dist/models/user.model.d.ts +48 -0
  44. package/dist/models/user.model.d.ts.map +1 -0
  45. package/dist/models/user.model.js +141 -0
  46. package/dist/models/user.model.js.map +1 -0
  47. package/dist/repositories/audit.repository.d.ts +37 -0
  48. package/dist/repositories/audit.repository.d.ts.map +1 -0
  49. package/dist/repositories/audit.repository.js +116 -0
  50. package/dist/repositories/audit.repository.js.map +1 -0
  51. package/dist/repositories/base.repository.d.ts +54 -0
  52. package/dist/repositories/base.repository.d.ts.map +1 -0
  53. package/dist/repositories/base.repository.js +97 -0
  54. package/dist/repositories/base.repository.js.map +1 -0
  55. package/dist/repositories/key.repository.d.ts +60 -0
  56. package/dist/repositories/key.repository.d.ts.map +1 -0
  57. package/dist/repositories/key.repository.js +126 -0
  58. package/dist/repositories/key.repository.js.map +1 -0
  59. package/dist/repositories/project.repository.d.ts +42 -0
  60. package/dist/repositories/project.repository.d.ts.map +1 -0
  61. package/dist/repositories/project.repository.js +82 -0
  62. package/dist/repositories/project.repository.js.map +1 -0
  63. package/dist/repositories/user.repository.d.ts +58 -0
  64. package/dist/repositories/user.repository.d.ts.map +1 -0
  65. package/dist/repositories/user.repository.js +102 -0
  66. package/dist/repositories/user.repository.js.map +1 -0
  67. package/dist/services/audit.service.d.ts +63 -0
  68. package/dist/services/audit.service.d.ts.map +1 -0
  69. package/dist/services/audit.service.js +113 -0
  70. package/dist/services/audit.service.js.map +1 -0
  71. package/dist/services/auth.service.d.ts +39 -0
  72. package/dist/services/auth.service.d.ts.map +1 -0
  73. package/dist/services/auth.service.js +179 -0
  74. package/dist/services/auth.service.js.map +1 -0
  75. package/dist/services/key.service.d.ts +47 -0
  76. package/dist/services/key.service.d.ts.map +1 -0
  77. package/dist/services/key.service.js +135 -0
  78. package/dist/services/key.service.js.map +1 -0
  79. package/dist/services/permission.service.d.ts +37 -0
  80. package/dist/services/permission.service.d.ts.map +1 -0
  81. package/dist/services/permission.service.js +140 -0
  82. package/dist/services/permission.service.js.map +1 -0
  83. package/dist/services/project.service.d.ts +37 -0
  84. package/dist/services/project.service.d.ts.map +1 -0
  85. package/dist/services/project.service.js +96 -0
  86. package/dist/services/project.service.js.map +1 -0
  87. package/dist/types/audit.types.d.ts +122 -0
  88. package/dist/types/audit.types.d.ts.map +1 -0
  89. package/dist/types/audit.types.js +55 -0
  90. package/dist/types/audit.types.js.map +1 -0
  91. package/dist/types/client.types.d.ts +47 -0
  92. package/dist/types/client.types.d.ts.map +1 -0
  93. package/dist/types/client.types.js +6 -0
  94. package/dist/types/client.types.js.map +1 -0
  95. package/dist/types/crypto.types.d.ts +48 -0
  96. package/dist/types/crypto.types.d.ts.map +1 -0
  97. package/dist/types/crypto.types.js +6 -0
  98. package/dist/types/crypto.types.js.map +1 -0
  99. package/dist/types/index.d.ts +86 -0
  100. package/dist/types/index.d.ts.map +1 -0
  101. package/dist/types/index.js +92 -0
  102. package/dist/types/index.js.map +1 -0
  103. package/dist/types/key.types.d.ts +125 -0
  104. package/dist/types/key.types.d.ts.map +1 -0
  105. package/dist/types/key.types.js +28 -0
  106. package/dist/types/key.types.js.map +1 -0
  107. package/dist/types/project.types.d.ts +57 -0
  108. package/dist/types/project.types.d.ts.map +1 -0
  109. package/dist/types/project.types.js +16 -0
  110. package/dist/types/project.types.js.map +1 -0
  111. package/dist/types/user.types.d.ts +110 -0
  112. package/dist/types/user.types.d.ts.map +1 -0
  113. package/dist/types/user.types.js +49 -0
  114. package/dist/types/user.types.js.map +1 -0
  115. package/dist/utils/config-loader.d.ts +64 -0
  116. package/dist/utils/config-loader.d.ts.map +1 -0
  117. package/dist/utils/config-loader.js +126 -0
  118. package/dist/utils/config-loader.js.map +1 -0
  119. package/dist/utils/constants.d.ts +62 -0
  120. package/dist/utils/constants.d.ts.map +1 -0
  121. package/dist/utils/constants.js +119 -0
  122. package/dist/utils/constants.js.map +1 -0
  123. package/dist/utils/error-handler.d.ts +48 -0
  124. package/dist/utils/error-handler.d.ts.map +1 -0
  125. package/dist/utils/error-handler.js +109 -0
  126. package/dist/utils/error-handler.js.map +1 -0
  127. package/package.json +53 -0
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ /**
3
+ * 加密/解密工具函数
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateRandomBytes = generateRandomBytes;
7
+ exports.generateIV = generateIV;
8
+ exports.encryptAES256GCM = encryptAES256GCM;
9
+ exports.decryptAES256GCM = decryptAES256GCM;
10
+ exports.timingSafeEqual = timingSafeEqual;
11
+ exports.generateRandomKey = generateRandomKey;
12
+ exports.hexToBuffer = hexToBuffer;
13
+ exports.bufferToHex = bufferToHex;
14
+ const crypto_1 = require("crypto");
15
+ const types_1 = require("../types");
16
+ const constants_1 = require("../utils/constants");
17
+ /**
18
+ * 生成随机字节
19
+ */
20
+ function generateRandomBytes(length) {
21
+ return (0, crypto_1.randomBytes)(length);
22
+ }
23
+ /**
24
+ * 生成随机IV
25
+ */
26
+ function generateIV() {
27
+ return generateRandomBytes(constants_1.SECURITY_CONFIG.ENCRYPTION.IV_LENGTH);
28
+ }
29
+ /**
30
+ * 使用AES-256-GCM加密数据
31
+ */
32
+ function encryptAES256GCM(plaintext, key) {
33
+ try {
34
+ const iv = generateIV();
35
+ const cipher = (0, crypto_1.createCipheriv)(constants_1.SECURITY_CONFIG.ENCRYPTION.ALGORITHM, key, iv);
36
+ let encrypted = cipher.update(plaintext, 'utf8', 'hex');
37
+ encrypted += cipher.final('hex');
38
+ const authTag = cipher.getAuthTag();
39
+ return {
40
+ encrypted,
41
+ iv: iv.toString('hex'),
42
+ authTag: authTag.toString('hex'),
43
+ };
44
+ }
45
+ catch (error) {
46
+ throw new types_1.CryptoError(`Encryption failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
47
+ }
48
+ }
49
+ /**
50
+ * 使用AES-256-GCM解密数据
51
+ */
52
+ function decryptAES256GCM(encryptedData, iv, authTag, key) {
53
+ try {
54
+ const decipher = (0, crypto_1.createDecipheriv)(constants_1.SECURITY_CONFIG.ENCRYPTION.ALGORITHM, key, Buffer.from(iv, 'hex'));
55
+ decipher.setAuthTag(Buffer.from(authTag, 'hex'));
56
+ let decrypted = decipher.update(encryptedData, 'hex', 'utf8');
57
+ decrypted += decipher.final('utf8');
58
+ return decrypted;
59
+ }
60
+ catch (error) {
61
+ throw new types_1.CryptoError(`Decryption failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
62
+ }
63
+ }
64
+ /**
65
+ * 比较两个恒定时间字符串(防止时序攻击)
66
+ */
67
+ function timingSafeEqual(a, b) {
68
+ if (a.length !== b.length) {
69
+ return false;
70
+ }
71
+ const aBuffer = Buffer.from(a);
72
+ const bBuffer = Buffer.from(b);
73
+ if (aBuffer.length !== bBuffer.length) {
74
+ return false;
75
+ }
76
+ let result = 0;
77
+ for (let i = 0; i < aBuffer.length; i++) {
78
+ result |= aBuffer[i] ^ bBuffer[i];
79
+ }
80
+ return result === 0;
81
+ }
82
+ /**
83
+ * 生成随机密钥
84
+ */
85
+ function generateRandomKey() {
86
+ return generateRandomBytes(constants_1.SECURITY_CONFIG.ENCRYPTION.KEY_LENGTH);
87
+ }
88
+ /**
89
+ * 从十六进制字符串转换为Buffer
90
+ */
91
+ function hexToBuffer(hex) {
92
+ return Buffer.from(hex, 'hex');
93
+ }
94
+ /**
95
+ * 将Buffer转换为十六进制字符串
96
+ */
97
+ function bufferToHex(buffer) {
98
+ return buffer.toString('hex');
99
+ }
100
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/core/crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 加密服务
3
+ * 负责所有密钥加密和解密操作
4
+ */
5
+ import { EncryptedData } from '../types';
6
+ /**
7
+ * 加密服务类
8
+ */
9
+ export declare class CryptoService {
10
+ /**
11
+ * 加密密钥值
12
+ */
13
+ encryptKey(plainValue: string, masterKey: Buffer): Promise<EncryptedData>;
14
+ /**
15
+ * 解密密钥值
16
+ */
17
+ decryptKey(encryptedValue: string, iv: string, authTag: string, masterKey: Buffer): Promise<string>;
18
+ /**
19
+ * 从主密码派生项目主密钥
20
+ */
21
+ deriveMasterKey(masterPassword: string, salt: string): Promise<Buffer>;
22
+ /**
23
+ * 生成主密钥哈希
24
+ */
25
+ hashMasterKey(masterKey: Buffer): Promise<string>;
26
+ /**
27
+ * 验证主密钥
28
+ */
29
+ verifyMasterKey(masterKey: Buffer, storedHash: string): Promise<boolean>;
30
+ /**
31
+ * 使用主密码解锁项目主密钥
32
+ */
33
+ unlockProjectMasterKey(masterPassword: string, salt: string, masterKeyHash: string): Promise<Buffer>;
34
+ }
35
+ //# sourceMappingURL=crypto.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.service.d.ts","sourceRoot":"","sources":["../../src/core/crypto.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,aAAa,EAAe,MAAM,UAAU,CAAC;AAEtD;;GAEG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAI/E;;OAEG;IACG,UAAU,CACd,cAAc,EAAE,MAAM,EACtB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAIlB;;OAEG;IACG,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5E;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvD;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC;IAKnB;;OAEG;IACG,sBAAsB,CAC1B,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC;CAUnB"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /**
3
+ * 加密服务
4
+ * 负责所有密钥加密和解密操作
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CryptoService = void 0;
8
+ const crypto_1 = require("./crypto");
9
+ const key_derivation_1 = require("./key-derivation");
10
+ const types_1 = require("../types");
11
+ /**
12
+ * 加密服务类
13
+ */
14
+ class CryptoService {
15
+ /**
16
+ * 加密密钥值
17
+ */
18
+ async encryptKey(plainValue, masterKey) {
19
+ return (0, crypto_1.encryptAES256GCM)(plainValue, masterKey);
20
+ }
21
+ /**
22
+ * 解密密钥值
23
+ */
24
+ async decryptKey(encryptedValue, iv, authTag, masterKey) {
25
+ return (0, crypto_1.decryptAES256GCM)(encryptedValue, iv, authTag, masterKey);
26
+ }
27
+ /**
28
+ * 从主密码派生项目主密钥
29
+ */
30
+ async deriveMasterKey(masterPassword, salt) {
31
+ return (0, key_derivation_1.deriveProjectMasterKey)(masterPassword, salt);
32
+ }
33
+ /**
34
+ * 生成主密钥哈希
35
+ */
36
+ async hashMasterKey(masterKey) {
37
+ return (0, key_derivation_1.hashMasterKey)(masterKey);
38
+ }
39
+ /**
40
+ * 验证主密钥
41
+ */
42
+ async verifyMasterKey(masterKey, storedHash) {
43
+ const derivedHash = await this.hashMasterKey(masterKey);
44
+ return derivedHash === storedHash;
45
+ }
46
+ /**
47
+ * 使用主密码解锁项目主密钥
48
+ */
49
+ async unlockProjectMasterKey(masterPassword, salt, masterKeyHash) {
50
+ const masterKey = await this.deriveMasterKey(masterPassword, salt);
51
+ const isValid = await this.verifyMasterKey(masterKey, masterKeyHash);
52
+ if (!isValid) {
53
+ throw new types_1.CryptoError('Invalid master password');
54
+ }
55
+ return masterKey;
56
+ }
57
+ }
58
+ exports.CryptoService = CryptoService;
59
+ /**
60
+ * 简单的依赖注入装饰器(TypeScript版本)
61
+ */
62
+ function Injectable() {
63
+ return function decorator(target) {
64
+ return target;
65
+ };
66
+ }
67
+ //# sourceMappingURL=crypto.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.service.js","sourceRoot":"","sources":["../../src/core/crypto.service.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,qCAA8D;AAC9D,qDAAyE;AACzE,oCAAsD;AAEtD;;GAEG;AACH,MAAa,aAAa;IACxB;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,UAAkB,EAAE,SAAiB;QACpD,OAAO,IAAA,yBAAgB,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,cAAsB,EACtB,EAAU,EACV,OAAe,EACf,SAAiB;QAEjB,OAAO,IAAA,yBAAgB,EAAC,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,cAAsB,EAAE,IAAY;QACxD,OAAO,IAAA,uCAAsB,EAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,OAAO,IAAA,8BAAa,EAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CACnB,SAAiB,EACjB,UAAkB;QAElB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACxD,OAAO,WAAW,KAAK,UAAU,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB,CAC1B,cAAsB,EACtB,IAAY,EACZ,aAAqB;QAErB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAErE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,mBAAW,CAAC,yBAAyB,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AA9DD,sCA8DC;AAED;;GAEG;AACH,SAAS,UAAU;IACjB,OAAO,SAAS,SAAS,CAAwC,MAAS;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 密钥派生功能
3
+ * 使用PBKDF2从密码派生密钥
4
+ */
5
+ /**
6
+ * 生成随机盐值
7
+ */
8
+ export declare function generateSalt(): string;
9
+ /**
10
+ * 使用PBKDF2从密码派生密钥
11
+ */
12
+ export declare function deriveKeyFromPassword(password: string, salt: string, iterations?: number, keyLength?: number): Promise<Buffer>;
13
+ /**
14
+ * 派生项目主密钥
15
+ */
16
+ export declare function deriveProjectMasterKey(masterPassword: string, salt: string): Promise<Buffer>;
17
+ /**
18
+ * 生成主密钥哈希(用于验证密码)
19
+ */
20
+ export declare function hashMasterKey(masterKey: Buffer): Promise<string>;
21
+ /**
22
+ * 验证主密码
23
+ */
24
+ export declare function verifyMasterPassword(masterPassword: string, salt: string, storedHash: string): Promise<boolean>;
25
+ //# sourceMappingURL=key-derivation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-derivation.d.ts","sourceRoot":"","sources":["../../src/core/key-derivation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGtE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAQlB"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ /**
3
+ * 密钥派生功能
4
+ * 使用PBKDF2从密码派生密钥
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.generateSalt = generateSalt;
41
+ exports.deriveKeyFromPassword = deriveKeyFromPassword;
42
+ exports.deriveProjectMasterKey = deriveProjectMasterKey;
43
+ exports.hashMasterKey = hashMasterKey;
44
+ exports.verifyMasterPassword = verifyMasterPassword;
45
+ const crypto_1 = require("crypto");
46
+ const types_1 = require("../types");
47
+ const constants_1 = require("../utils/constants");
48
+ /**
49
+ * 生成随机盐值
50
+ */
51
+ function generateSalt() {
52
+ return (0, crypto_1.randomBytes)(16).toString('hex');
53
+ }
54
+ /**
55
+ * 使用PBKDF2从密码派生密钥
56
+ */
57
+ async function deriveKeyFromPassword(password, salt, iterations, keyLength) {
58
+ return new Promise((resolve, reject) => {
59
+ const config = constants_1.SECURITY_CONFIG.KEY_DERIVATION;
60
+ (0, crypto_1.pbkdf2)(password, salt, iterations || config.ITERATIONS, keyLength || config.KEY_LENGTH, config.DIGEST, (err, derivedKey) => {
61
+ if (err) {
62
+ reject(new types_1.CryptoError(`Key derivation failed: ${err.message}`));
63
+ }
64
+ else {
65
+ resolve(derivedKey);
66
+ }
67
+ });
68
+ });
69
+ }
70
+ /**
71
+ * 派生项目主密钥
72
+ */
73
+ async function deriveProjectMasterKey(masterPassword, salt) {
74
+ return deriveKeyFromPassword(masterPassword, salt);
75
+ }
76
+ /**
77
+ * 生成主密钥哈希(用于验证密码)
78
+ */
79
+ async function hashMasterKey(masterKey) {
80
+ const { createHash } = await Promise.resolve().then(() => __importStar(require('crypto')));
81
+ return createHash('sha256').update(masterKey).digest('hex');
82
+ }
83
+ /**
84
+ * 验证主密码
85
+ */
86
+ async function verifyMasterPassword(masterPassword, salt, storedHash) {
87
+ try {
88
+ const derivedKey = await deriveProjectMasterKey(masterPassword, salt);
89
+ const derivedHash = await hashMasterKey(derivedKey);
90
+ return derivedHash === storedHash;
91
+ }
92
+ catch (error) {
93
+ return false;
94
+ }
95
+ }
96
+ //# sourceMappingURL=key-derivation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-derivation.js","sourceRoot":"","sources":["../../src/core/key-derivation.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASH,oCAEC;AAKD,sDAwBC;AAKD,wDAKC;AAKD,sCAGC;AAKD,oDAYC;AAzED,mCAA6C;AAC7C,oCAA4D;AAC5D,kDAAqD;AAErD;;GAEG;AACH,SAAgB,YAAY;IAC1B,OAAO,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,IAAY,EACZ,UAAmB,EACnB,SAAkB;IAElB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,2BAAe,CAAC,cAAc,CAAC;QAE9C,IAAA,eAAM,EACJ,QAAQ,EACR,IAAI,EACJ,UAAU,IAAI,MAAM,CAAC,UAAU,EAC/B,SAAS,IAAI,MAAM,CAAC,UAAU,EAC9B,MAAM,CAAC,MAAM,EACb,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE;YAClB,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,IAAI,mBAAW,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,sBAAsB,CAC1C,cAAsB,EACtB,IAAY;IAEZ,OAAO,qBAAqB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,MAAM,EAAE,UAAU,EAAE,GAAG,wDAAa,QAAQ,GAAC,CAAC;IAC9C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CACxC,cAAsB,EACtB,IAAY,EACZ,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,WAAW,KAAK,UAAU,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * KMS - 密钥管理系统
3
+ * 主入口文件
4
+ */
5
+ export { KMSClient } from './client';
6
+ export * from './types';
7
+ export { KMSError, ProjectNotFoundError, KeyNotFoundError, UserNotFoundError, AuthenticationError, ForbiddenError, ValidationError, CryptoError, } from './types';
8
+ export { generateRSAKeyPair, encryptConnectionString, decryptConnectionString, generateKeyId, isValidPEMKey, getPrivateKeyPassphrase, type RSAKeyPair, type EncryptedConnectionString } from './core/asymmetric-crypto';
9
+ export { loadEncryptedConfig, loadConfigFromEnvironment, createClientFromEncryptedConfig, readPrivateKeyFile, type EncryptedDatabaseConfig, type KMSClientConfig } from './utils/config-loader';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,cAAc,SAAS,CAAC;AAGxB,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,aAAa,EACb,aAAa,EACb,uBAAuB,EACvB,KAAK,UAAU,EACf,KAAK,yBAAyB,EAC/B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ /**
3
+ * KMS - 密钥管理系统
4
+ * 主入口文件
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.readPrivateKeyFile = exports.createClientFromEncryptedConfig = exports.loadConfigFromEnvironment = exports.loadEncryptedConfig = exports.getPrivateKeyPassphrase = exports.isValidPEMKey = exports.generateKeyId = exports.decryptConnectionString = exports.encryptConnectionString = exports.generateRSAKeyPair = exports.CryptoError = exports.ValidationError = exports.ForbiddenError = exports.AuthenticationError = exports.UserNotFoundError = exports.KeyNotFoundError = exports.ProjectNotFoundError = exports.KMSError = exports.KMSClient = void 0;
22
+ // 导出主类
23
+ var client_1 = require("./client");
24
+ Object.defineProperty(exports, "KMSClient", { enumerable: true, get: function () { return client_1.KMSClient; } });
25
+ // 导出所有类型
26
+ __exportStar(require("./types"), exports);
27
+ // 导出错误类
28
+ var types_1 = require("./types");
29
+ Object.defineProperty(exports, "KMSError", { enumerable: true, get: function () { return types_1.KMSError; } });
30
+ Object.defineProperty(exports, "ProjectNotFoundError", { enumerable: true, get: function () { return types_1.ProjectNotFoundError; } });
31
+ Object.defineProperty(exports, "KeyNotFoundError", { enumerable: true, get: function () { return types_1.KeyNotFoundError; } });
32
+ Object.defineProperty(exports, "UserNotFoundError", { enumerable: true, get: function () { return types_1.UserNotFoundError; } });
33
+ Object.defineProperty(exports, "AuthenticationError", { enumerable: true, get: function () { return types_1.AuthenticationError; } });
34
+ Object.defineProperty(exports, "ForbiddenError", { enumerable: true, get: function () { return types_1.ForbiddenError; } });
35
+ Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return types_1.ValidationError; } });
36
+ Object.defineProperty(exports, "CryptoError", { enumerable: true, get: function () { return types_1.CryptoError; } });
37
+ // 导出加密工具(用于连接字符串加密)
38
+ var asymmetric_crypto_1 = require("./core/asymmetric-crypto");
39
+ Object.defineProperty(exports, "generateRSAKeyPair", { enumerable: true, get: function () { return asymmetric_crypto_1.generateRSAKeyPair; } });
40
+ Object.defineProperty(exports, "encryptConnectionString", { enumerable: true, get: function () { return asymmetric_crypto_1.encryptConnectionString; } });
41
+ Object.defineProperty(exports, "decryptConnectionString", { enumerable: true, get: function () { return asymmetric_crypto_1.decryptConnectionString; } });
42
+ Object.defineProperty(exports, "generateKeyId", { enumerable: true, get: function () { return asymmetric_crypto_1.generateKeyId; } });
43
+ Object.defineProperty(exports, "isValidPEMKey", { enumerable: true, get: function () { return asymmetric_crypto_1.isValidPEMKey; } });
44
+ Object.defineProperty(exports, "getPrivateKeyPassphrase", { enumerable: true, get: function () { return asymmetric_crypto_1.getPrivateKeyPassphrase; } });
45
+ // 导出配置加载工具
46
+ var config_loader_1 = require("./utils/config-loader");
47
+ Object.defineProperty(exports, "loadEncryptedConfig", { enumerable: true, get: function () { return config_loader_1.loadEncryptedConfig; } });
48
+ Object.defineProperty(exports, "loadConfigFromEnvironment", { enumerable: true, get: function () { return config_loader_1.loadConfigFromEnvironment; } });
49
+ Object.defineProperty(exports, "createClientFromEncryptedConfig", { enumerable: true, get: function () { return config_loader_1.createClientFromEncryptedConfig; } });
50
+ Object.defineProperty(exports, "readPrivateKeyFile", { enumerable: true, get: function () { return config_loader_1.readPrivateKeyFile; } });
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,OAAO;AACP,mCAAqC;AAA5B,mGAAA,SAAS,OAAA;AAElB,SAAS;AACT,0CAAwB;AAExB,QAAQ;AACR,iCASiB;AARf,iGAAA,QAAQ,OAAA;AACR,6GAAA,oBAAoB,OAAA;AACpB,yGAAA,gBAAgB,OAAA;AAChB,0GAAA,iBAAiB,OAAA;AACjB,4GAAA,mBAAmB,OAAA;AACnB,uGAAA,cAAc,OAAA;AACd,wGAAA,eAAe,OAAA;AACf,oGAAA,WAAW,OAAA;AAGb,oBAAoB;AACpB,8DASkC;AARhC,uHAAA,kBAAkB,OAAA;AAClB,4HAAA,uBAAuB,OAAA;AACvB,4HAAA,uBAAuB,OAAA;AACvB,kHAAA,aAAa,OAAA;AACb,kHAAA,aAAa,OAAA;AACb,4HAAA,uBAAuB,OAAA;AAKzB,WAAW;AACX,uDAO+B;AAN7B,oHAAA,mBAAmB,OAAA;AACnB,0HAAA,yBAAyB,OAAA;AACzB,gIAAA,+BAA+B,OAAA;AAC/B,mHAAA,kBAAkB,OAAA"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * 审计日志数据模型
3
+ */
4
+ import { AuditLog, AuditSeverity, AuditAction, ResourceType } from '../types';
5
+ /**
6
+ * 创建审计日志
7
+ */
8
+ export declare function createAuditLog(data: {
9
+ projectId: string;
10
+ userId?: string;
11
+ action: AuditAction;
12
+ resourceType: ResourceType;
13
+ resourceId: string;
14
+ details: {
15
+ keyName?: string;
16
+ keyType?: string;
17
+ ipAddress?: string;
18
+ userAgent?: string;
19
+ success: boolean;
20
+ errorMessage?: string;
21
+ [key: string]: any;
22
+ };
23
+ }): AuditLog;
24
+ /**
25
+ * 计算日志严重级别
26
+ */
27
+ export declare function calculateSeverity(action: AuditAction, success: boolean): AuditSeverity;
28
+ /**
29
+ * 格式化审计日志详情
30
+ */
31
+ export declare function formatAuditDetails(details: {
32
+ keyName?: string;
33
+ keyType?: string;
34
+ ipAddress?: string;
35
+ userAgent?: string;
36
+ success: boolean;
37
+ errorMessage?: string;
38
+ [key: string]: any;
39
+ }): string;
40
+ //# sourceMappingURL=audit.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.model.d.ts","sourceRoot":"","sources":["../../src/models/audit.model.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG9E;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH,GAAG,QAAQ,CAgBX;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,CAkCtF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,GAAG,MAAM,CAoBT"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ /**
3
+ * 审计日志数据模型
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createAuditLog = createAuditLog;
7
+ exports.calculateSeverity = calculateSeverity;
8
+ exports.formatAuditDetails = formatAuditDetails;
9
+ const types_1 = require("../types");
10
+ const constants_1 = require("../utils/constants");
11
+ /**
12
+ * 创建审计日志
13
+ */
14
+ function createAuditLog(data) {
15
+ const timestamp = new Date();
16
+ return {
17
+ _id: (0, constants_1.generateId)('audit'),
18
+ projectId: data.projectId,
19
+ userId: data.userId,
20
+ action: data.action,
21
+ resourceType: data.resourceType,
22
+ resourceId: data.resourceId,
23
+ details: {
24
+ ...data.details,
25
+ },
26
+ timestamp,
27
+ severity: calculateSeverity(data.action, data.details.success),
28
+ };
29
+ }
30
+ /**
31
+ * 计算日志严重级别
32
+ */
33
+ function calculateSeverity(action, success) {
34
+ if (!success) {
35
+ const criticalActions = [
36
+ types_1.AuditAction.DELETE_PROJECT,
37
+ types_1.AuditAction.DELETE_KEY,
38
+ types_1.AuditAction.LOGIN_FAILED,
39
+ ];
40
+ const warningActions = [
41
+ types_1.AuditAction.UPDATE_KEY,
42
+ types_1.AuditAction.UPDATE_PROJECT,
43
+ types_1.AuditAction.PERMISSION_DENIED,
44
+ ];
45
+ if (criticalActions.includes(action)) {
46
+ return types_1.AuditSeverity.CRITICAL;
47
+ }
48
+ if (warningActions.includes(action)) {
49
+ return types_1.AuditSeverity.WARNING;
50
+ }
51
+ return types_1.AuditSeverity.ERROR;
52
+ }
53
+ // 成功的操作
54
+ const criticalActions = [
55
+ types_1.AuditAction.DELETE_PROJECT,
56
+ types_1.AuditAction.DELETE_KEY,
57
+ types_1.AuditAction.DELETE_USER,
58
+ ];
59
+ if (criticalActions.includes(action)) {
60
+ return types_1.AuditSeverity.CRITICAL;
61
+ }
62
+ return types_1.AuditSeverity.INFO;
63
+ }
64
+ /**
65
+ * 格式化审计日志详情
66
+ */
67
+ function formatAuditDetails(details) {
68
+ const parts = [];
69
+ if (details.keyName) {
70
+ parts.push(`Key: ${details.keyName}`);
71
+ }
72
+ if (details.keyType) {
73
+ parts.push(`Type: ${details.keyType}`);
74
+ }
75
+ if (details.ipAddress) {
76
+ parts.push(`IP: ${details.ipAddress}`);
77
+ }
78
+ if (!details.success && details.errorMessage) {
79
+ parts.push(`Error: ${details.errorMessage}`);
80
+ }
81
+ return parts.join(' | ');
82
+ }
83
+ //# sourceMappingURL=audit.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.model.js","sourceRoot":"","sources":["../../src/models/audit.model.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAQH,wCA+BC;AAKD,8CAkCC;AAKD,gDA4BC;AA7GD,oCAA8E;AAC9E,kDAAgD;AAEhD;;GAEG;AACH,SAAgB,cAAc,CAAC,IAe9B;IACC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAE7B,OAAO;QACL,GAAG,EAAE,IAAA,sBAAU,EAAC,OAAO,CAAC;QACxB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,OAAO,EAAE;YACP,GAAG,IAAI,CAAC,OAAO;SAChB;QACD,SAAS;QACT,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,MAAmB,EAAE,OAAgB;IACrE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,eAAe,GAAG;YACtB,mBAAW,CAAC,cAAc;YAC1B,mBAAW,CAAC,UAAU;YACtB,mBAAW,CAAC,YAAY;SACzB,CAAC;QACF,MAAM,cAAc,GAAG;YACrB,mBAAW,CAAC,UAAU;YACtB,mBAAW,CAAC,cAAc;YAC1B,mBAAW,CAAC,iBAAiB;SAC9B,CAAC;QAEF,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,OAAO,qBAAa,CAAC,QAAQ,CAAC;QAChC,CAAC;QACD,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,OAAO,qBAAa,CAAC,OAAO,CAAC;QAC/B,CAAC;QACD,OAAO,qBAAa,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED,QAAQ;IACR,MAAM,eAAe,GAAG;QACtB,mBAAW,CAAC,cAAc;QAC1B,mBAAW,CAAC,UAAU;QACtB,mBAAW,CAAC,WAAW;KACxB,CAAC;IAEF,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,OAAO,qBAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,OAAO,qBAAa,CAAC,IAAI,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,OAQlC;IACC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * 密钥数据模型
3
+ */
4
+ import { Key, KeyValue, CreateKeyData, UpdateKeyData } from '../types';
5
+ /**
6
+ * 创建新密钥
7
+ */
8
+ export declare function createKey(projectId: string, keyData: CreateKeyData, encryptedData: {
9
+ encrypted: string;
10
+ iv: string;
11
+ authTag: string;
12
+ }, createdBy: string): Key;
13
+ /**
14
+ * 验证密钥数据
15
+ */
16
+ export declare function validateKey(keyData: Partial<CreateKeyData>): {
17
+ valid: boolean;
18
+ errors: string[];
19
+ };
20
+ /**
21
+ * 更新密钥
22
+ */
23
+ export declare function updateKey(key: Key, updates: UpdateKeyData, newEncryptedData?: {
24
+ encrypted: string;
25
+ iv: string;
26
+ authTag: string;
27
+ }): Key;
28
+ /**
29
+ * 转换密钥为KeyValue(包含解密值)
30
+ */
31
+ export declare function toKeyValue(key: Key, decryptedValue: string): KeyValue;
32
+ /**
33
+ * 检查密钥是否已过期
34
+ */
35
+ export declare function isKeyExpired(key: Key): boolean;
36
+ /**
37
+ * 检查密钥是否可用
38
+ */
39
+ export declare function isKeyAccessible(key: Key): boolean;
40
+ //# sourceMappingURL=key.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key.model.d.ts","sourceRoot":"","sources":["../../src/models/key.model.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAsB,MAAM,UAAU,CAAC;AAG3F;;GAEG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACjE,SAAS,EAAE,MAAM,GAChB,GAAG,CAoBL;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA+BjG;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,GAAG,CA8BtI;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,GAAG,QAAQ,CAMrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAUjD"}