@samlab-corp/sfm-node 0.2.0 → 0.3.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 (54) hide show
  1. package/dist/commands/data.d.ts +4 -4
  2. package/dist/commands/data.js +12 -12
  3. package/dist/commands/data.js.map +1 -1
  4. package/dist/commands/fingerprint.d.ts +23 -23
  5. package/dist/commands/fingerprint.d.ts.map +1 -1
  6. package/dist/commands/fingerprint.js +114 -114
  7. package/dist/commands/fingerprint.js.map +1 -1
  8. package/dist/commands/firmware.d.ts +5 -5
  9. package/dist/commands/firmware.d.ts.map +1 -1
  10. package/dist/commands/firmware.js +32 -32
  11. package/dist/commands/firmware.js.map +1 -1
  12. package/dist/commands/freescan.d.ts +16 -16
  13. package/dist/commands/freescan.d.ts.map +1 -1
  14. package/dist/commands/freescan.js +41 -41
  15. package/dist/commands/freescan.js.map +1 -1
  16. package/dist/commands/index.d.ts +12 -12
  17. package/dist/commands/index.d.ts.map +1 -1
  18. package/dist/commands/index.js +14 -14
  19. package/dist/commands/index.js.map +1 -1
  20. package/dist/commands/system.d.ts +12 -12
  21. package/dist/commands/system.d.ts.map +1 -1
  22. package/dist/commands/system.js +14 -14
  23. package/dist/commands/system.js.map +1 -1
  24. package/dist/constants/protocol.d.ts +25 -0
  25. package/dist/constants/protocol.d.ts.map +1 -1
  26. package/dist/constants/protocol.js +26 -1
  27. package/dist/constants/protocol.js.map +1 -1
  28. package/dist/core/client.d.ts +33 -21
  29. package/dist/core/client.d.ts.map +1 -1
  30. package/dist/core/client.js +72 -52
  31. package/dist/core/client.js.map +1 -1
  32. package/dist/core/crypto.d.ts +19 -19
  33. package/dist/core/crypto.js +26 -26
  34. package/dist/core/crypto.js.map +1 -1
  35. package/dist/core/errors.d.ts +6 -6
  36. package/dist/core/errors.d.ts.map +1 -1
  37. package/dist/core/errors.js +46 -32
  38. package/dist/core/errors.js.map +1 -1
  39. package/dist/core/index.d.ts +3 -3
  40. package/dist/core/index.d.ts.map +1 -1
  41. package/dist/core/index.js +5 -2
  42. package/dist/core/index.js.map +1 -1
  43. package/dist/core/packet.d.ts +81 -41
  44. package/dist/core/packet.d.ts.map +1 -1
  45. package/dist/core/packet.js +256 -60
  46. package/dist/core/packet.js.map +1 -1
  47. package/dist/core/serial.d.ts +37 -27
  48. package/dist/core/serial.d.ts.map +1 -1
  49. package/dist/core/serial.js +91 -62
  50. package/dist/core/serial.js.map +1 -1
  51. package/dist/core/tcp.d.ts +14 -14
  52. package/dist/core/tcp.js +17 -17
  53. package/dist/core/tcp.js.map +1 -1
  54. package/package.json +2 -2
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  /**
3
- * SFM Protocol Manual V3.6.0 Serial Communication Client
3
+ * SFM Protocol Manual V3.6.0 시리얼 통신 클라이언트
4
4
  *
5
- * Provides packet protocol, AES256 encryption, multi-packet transfer,
6
- * and firmware upgrade functionality.
5
+ * 패킷 프로토콜, AES256 암호화, 멀티패킷 전송,
6
+ * 펌웨어 업그레이드 기능을 제공한다.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.SfmClient = void 0;
@@ -12,9 +12,9 @@ const crypto_js_1 = require("./crypto.js");
12
12
  const packet_js_1 = require("./packet.js");
13
13
  const index_js_1 = require("../constants/index.js");
14
14
  const MAX_RESPONSE_RETRIES = 10;
15
- const MAX_TIMEOUT_MS = 60000; // 60s upper bound for calculated timeouts
15
+ const MAX_TIMEOUT_MS = 60000; // 60초, 계산된 타임아웃 상한값
16
16
  /**
17
- * SFM Unified Client
17
+ * SFM 통합 클라이언트
18
18
  */
19
19
  class SfmClient {
20
20
  constructor(options = {}) {
@@ -32,35 +32,35 @@ class SfmClient {
32
32
  this.portPath = options.portPath;
33
33
  this.secureMode = options.secureMode ?? false;
34
34
  this.debug = options.debug ?? false;
35
- // Network protocol mode (RS422/485)
36
- // false = 13-byte normal packet, true = 15-byte network packet
35
+ // 네트워크 프로토콜 모드 (RS422/485)
36
+ // false = 13바이트 일반 패킷, true = 15바이트 네트워크 패킷
37
37
  this.networkMode = options.networkMode ?? false;
38
38
  this.terminalId = options.terminalId ?? 0;
39
- // Hex-ASCII transmission mode
40
- // Some serial bridges communicate via hex strings instead of binary
39
+ // Hex-ASCII 전송 모드
40
+ // 일부 시리얼 브릿지는 바이너리 대신 hex 문자열로 통신함
41
41
  this.hexAsciiMode = options.hexAsciiMode ?? false;
42
- // Timeout settings
42
+ // 타임아웃 설정
43
43
  this.commandTimeout = options.commandTimeout ?? 20000;
44
44
  this.readTimeout = options.readTimeout ?? 3000;
45
45
  }
46
- /** Set disconnect callback */
46
+ /** 연결 해제 콜백 설정 */
47
47
  setOnDisconnect(callback) {
48
48
  this._onDisconnect = callback;
49
49
  }
50
- /** Set auto-reconnect options (delegates to serial layer) */
50
+ /** 자동 재연결 옵션 설정 (시리얼 레이어에 위임) */
51
51
  setAutoReconnect(options) {
52
52
  this.serial.setAutoReconnect(options);
53
53
  }
54
- /** Set auto-reconnect callbacks only */
54
+ /** 자동 재연결 콜백만 설정 */
55
55
  setAutoReconnectCallbacks(callbacks) {
56
56
  this.serial.setAutoReconnectCallbacks(callbacks);
57
57
  }
58
- /** Whether reconnection is in progress */
58
+ /** 재연결 진행 여부 */
59
59
  get isReconnecting() {
60
60
  return this.serial.isReconnecting;
61
61
  }
62
62
  /**
63
- * Connect to device
63
+ * 디바이스에 연결
64
64
  */
65
65
  async connect(portPath) {
66
66
  const path = portPath ?? this.portPath;
@@ -79,45 +79,48 @@ class SfmClient {
79
79
  }
80
80
  }
81
81
  /**
82
- * Disconnect from device
82
+ * 디바이스 연결 해제
83
83
  */
84
84
  async disconnect() {
85
- this.serial.setOnDisconnect(null); // Prevent callback on intentional disconnect
85
+ this.serial.setOnDisconnect(null); // 의도적 연결 해제 콜백 방지
86
86
  await this.serial.close();
87
87
  if (this.debug) {
88
88
  console.log("[DEBUG] Disconnected");
89
89
  }
90
90
  }
91
91
  /**
92
- * Send command (SFM Packet Protocol)
92
+ * 명령 전송 (SFM 패킷 프로토콜)
93
93
  */
94
94
  async sendCommand(command, param = 0, size = 0, flag = 0) {
95
95
  if (this.secureMode) {
96
96
  return this._sendSecureCommand(command, param, size, flag);
97
97
  }
98
- // Auto-switch to network mode (RS422/485)
98
+ // 네트워크 모드 자동 전환 (RS422/485)
99
99
  if (this.networkMode) {
100
100
  return this.sendNetworkCommand(command, param, size, flag);
101
101
  }
102
+ return this.sendNormalCommend(command, param, size, flag);
103
+ }
104
+ async sendNormalCommend(command, param = 0, size = 0, flag = 0) {
102
105
  const packet = (0, packet_js_1.buildNormalPacket)(command, param, size, flag);
103
106
  if (this.debug) {
104
- console.log(`[DEBUG] TX: ${(0, packet_js_1.packetToHex)(packet)}`);
107
+ console.log(`[DEBUG] TX(Host→Device): ${(0, packet_js_1.packetToHex)(packet)}`);
105
108
  }
106
109
  await this._writePacket(packet);
107
- // Scan for start byte then receive response (commandTimeout for fingerprint scan wait)
108
- // Residual responses from previous commands may arrive, so re-receive until a valid command-matching packet arrives
110
+ // 시작 바이트 스캔 응답 수신 (지문 스캔 대기를 위해 commandTimeout 사용)
111
+ // 이전 명령의 잔여 응답이 있으므로, 명령이 일치하는 유효한 패킷이 때까지 재수신
109
112
  let retries = 0;
110
113
  while (retries < MAX_RESPONSE_RETRIES) {
111
114
  const response = await this._readWithStartByteScan(index_js_1.PACKET_SIZE.NORMAL, "normal", this.commandTimeout);
112
115
  if (this.debug) {
113
- console.log(`[DEBUG] RX: ${(0, packet_js_1.packetToHex)(response)}`);
116
+ console.log(`[DEBUG] RX(Device→Host): ${(0, packet_js_1.packetToHex)(response)}`);
114
117
  }
115
118
  const parsed = (0, packet_js_1.parseNormalPacket)(response);
116
- // Valid packet with matching commandreturn
119
+ // 유효한 패킷 + 명령 일치반환
117
120
  if (parsed.valid && parsed.command === command) {
118
121
  return parsed;
119
122
  }
120
- // Valid but command mismatch residual response, skip
123
+ // 유효하지만 명령 불일치잔여 응답, 건너뜀
121
124
  if (parsed.valid && parsed.command !== command) {
122
125
  if (this.debug) {
123
126
  console.log(`[DEBUG] Response command mismatch: expected 0x${command.toString(16)}, got 0x${parsed.command?.toString(16) ?? "??"} → skip`);
@@ -125,28 +128,31 @@ class SfmClient {
125
128
  retries++;
126
129
  continue;
127
130
  }
128
- // Invalid packetcorrupted residual data, skip and retry
131
+ // 잘못된 패킷손상된 잔여 데이터, 건너뛰고 재시도
129
132
  if (this.debug) {
130
133
  console.log(`[DEBUG] Invalid packet skipped (${parsed.error}), retry ${retries + 1}`);
131
134
  }
132
135
  retries++;
133
136
  }
134
- return { valid: false, error: `Failed to receive valid response (exceeded ${MAX_RESPONSE_RETRIES} retries)` };
137
+ return {
138
+ valid: false,
139
+ error: `Failed to receive valid response (exceeded ${MAX_RESPONSE_RETRIES} retries)`,
140
+ };
135
141
  }
136
142
  /**
137
- * Send network command (15-byte packet, RS422/485)
143
+ * 네트워크 명령 전송 (15바이트 패킷, RS422/485)
138
144
  */
139
145
  async sendNetworkCommand(command, param = 0, size = 0, flag = 0) {
140
146
  const packet = (0, packet_js_1.buildNetworkPacket)(command, this.terminalId, param, size, flag);
141
147
  if (this.debug) {
142
- console.log(`[DEBUG] TX(net): ${(0, packet_js_1.packetToHex)(packet)}`);
148
+ console.log(`[DEBUG] TX(Host→Device,net): ${(0, packet_js_1.packetToHex)(packet)}`);
143
149
  }
144
150
  await this._writePacket(packet);
145
151
  let retries = 0;
146
152
  while (retries < MAX_RESPONSE_RETRIES) {
147
153
  const response = await this._readWithStartByteScan(index_js_1.PACKET_SIZE.NETWORK, "network", this.commandTimeout);
148
154
  if (this.debug) {
149
- console.log(`[DEBUG] RX(net): ${(0, packet_js_1.packetToHex)(response)}`);
155
+ console.log(`[DEBUG] RX(Device→Host,net): ${(0, packet_js_1.packetToHex)(response)}`);
150
156
  }
151
157
  const parsed = (0, packet_js_1.parseNetworkPacket)(response);
152
158
  if (parsed.valid && parsed.command === command) {
@@ -164,54 +170,57 @@ class SfmClient {
164
170
  }
165
171
  retries++;
166
172
  }
167
- return { valid: false, error: `Failed to receive valid network response (exceeded ${MAX_RESPONSE_RETRIES} retries)` };
173
+ return {
174
+ valid: false,
175
+ error: `Failed to receive valid network response (exceeded ${MAX_RESPONSE_RETRIES} retries)`,
176
+ };
168
177
  }
169
178
  /**
170
- * Receive response (used in multi-packet protocol)
179
+ * 응답 수신 (멀티패킷 프로토콜에서 사용)
171
180
  */
172
181
  async receiveResponse(timeoutMs) {
173
182
  const timeout = timeoutMs ?? this.readTimeout;
174
183
  if (this.secureMode) {
175
184
  const response = await this._readWithStartByteScan(index_js_1.PACKET_SIZE.SECURE, "secure", timeout);
176
185
  if (this.debug) {
177
- console.log(`[DEBUG] RX(secure): ${(0, packet_js_1.packetToHex)(response)}`);
186
+ console.log(`[DEBUG] RX(Device→Host,secure): ${(0, packet_js_1.packetToHex)(response)}`);
178
187
  }
179
188
  return this.crypto.parseSecureRecvPacket(response);
180
189
  }
181
- // Auto-switch to network mode
190
+ // 네트워크 모드 자동 전환
182
191
  if (this.networkMode) {
183
192
  const response = await this._readWithStartByteScan(index_js_1.PACKET_SIZE.NETWORK, "network", timeout);
184
193
  if (this.debug) {
185
- console.log(`[DEBUG] RX(net): ${(0, packet_js_1.packetToHex)(response)}`);
194
+ console.log(`[DEBUG] RX(Device→Host,net): ${(0, packet_js_1.packetToHex)(response)}`);
186
195
  }
187
196
  return (0, packet_js_1.parseNetworkPacket)(response);
188
197
  }
189
198
  const response = await this._readWithStartByteScan(index_js_1.PACKET_SIZE.NORMAL, "normal", timeout);
190
199
  if (this.debug) {
191
- console.log(`[DEBUG] RX: ${(0, packet_js_1.packetToHex)(response)}`);
200
+ console.log(`[DEBUG] RX(Device→Host): ${(0, packet_js_1.packetToHex)(response)}`);
192
201
  }
193
202
  return (0, packet_js_1.parseNormalPacket)(response);
194
203
  }
195
204
  /**
196
- * Send secure command (AES256 encrypted, 35-byte packet)
205
+ * 보안 명령 전송 (AES256 암호화, 35바이트 패킷)
197
206
  * @internal
198
207
  */
199
208
  async _sendSecureCommand(command, param, size, flag) {
200
209
  const packet = this.crypto.buildSecureSendPacket(command, param, size, flag);
201
210
  if (this.debug) {
202
- console.log(`[DEBUG] TX(secure): ${(0, packet_js_1.packetToHex)(packet)}`);
211
+ console.log(`[DEBUG] TX(Host→Device,secure): ${(0, packet_js_1.packetToHex)(packet)}`);
203
212
  console.log(`[DEBUG] Encryption mode: ${this.crypto.getModeName()}`);
204
213
  }
205
214
  await this._writePacket(packet);
206
- // Receive secure response (35 bytes) - scan for 0x51 marker
215
+ // 보안 응답 수신 (35바이트) - 0x51 마커 스캔
207
216
  const response = await this._readWithStartByteScan(index_js_1.PACKET_SIZE.SECURE, "secure");
208
217
  if (this.debug) {
209
- console.log(`[DEBUG] RX(secure): ${(0, packet_js_1.packetToHex)(response)}`);
218
+ console.log(`[DEBUG] RX(Device→Host,secure): ${(0, packet_js_1.packetToHex)(response)}`);
210
219
  }
211
220
  return this.crypto.parseSecureRecvPacket(response);
212
221
  }
213
222
  /**
214
- * Switch secure mode
223
+ * 보안 모드 전환
215
224
  */
216
225
  setSecureMode(enabled, options = {}) {
217
226
  this.secureMode = enabled;
@@ -225,7 +234,7 @@ class SfmClient {
225
234
  this.crypto.mode = options.mode;
226
235
  }
227
236
  /**
228
- * Switch network protocol mode (RS422/485)
237
+ * 네트워크 프로토콜 모드 전환 (RS422/485)
229
238
  */
230
239
  setNetworkMode(enabled, terminalId) {
231
240
  this.networkMode = enabled;
@@ -237,7 +246,7 @@ class SfmClient {
237
246
  }
238
247
  }
239
248
  /**
240
- * Write packet (supports Hex-ASCII mode)
249
+ * 패킷 쓰기 (Hex-ASCII 모드 지원)
241
250
  * @internal
242
251
  */
243
252
  async _writePacket(data) {
@@ -249,24 +258,35 @@ class SfmClient {
249
258
  }
250
259
  }
251
260
  /**
252
- * Read packet (supports Hex-ASCII mode)
261
+ * 패킷 읽기 (Hex-ASCII 모드 지원)
253
262
  * @internal
254
263
  */
255
264
  async _readPacket(size, timeoutMs) {
256
265
  if (this.hexAsciiMode) {
257
- // Hex-ASCII mode: read 2x size and decode
266
+ // Hex-ASCII 모드: 2배 크기 읽기 디코딩
258
267
  const hexData = await this.serial.read(size * 2, timeoutMs);
259
268
  return (0, packet_js_1.decodeHexAscii)(hexData);
260
269
  }
261
270
  return this.serial.read(size, timeoutMs);
262
271
  }
263
272
  /**
264
- * Read packet after scanning for start byte
273
+ * 시작 바이트 스캔 패킷 읽기
274
+ *
275
+ * 시리얼 수신 버퍼에는 이전 패킷의 잔여 바이트(END_CODE 0x0A 등)나
276
+ * 전원 인가 시 노이즈가 남아 있을 수 있다.
277
+ * 따라서 1바이트씩 읽으면서 유효한 시작 바이트(0x40/0x41/0x50/0x51)를
278
+ * 찾을 때까지 쓰레기 바이트를 버린 뒤, 나머지 패킷을 한 번에 읽는다.
279
+ *
280
+ * 횟수 기반이 아닌 시간 기반 루프를 사용하는 이유:
281
+ * - 쓰레기 바이트가 몇 개인지 예측할 수 없음
282
+ * - 지문 스캔(ES) 등 사용자 입력 대기 명령은 수 초~수십 초 소요
283
+ * - 디바이스가 응답하지 않으면 _readPacket 내부 타임아웃으로 자연스럽게 종료
284
+ *
265
285
  * @internal
266
286
  */
267
287
  async _readWithStartByteScan(packetSize, packetType, timeoutMs) {
268
288
  const timeout = timeoutMs ?? this.readTimeout;
269
- // Read 1 byte at a time to find valid start byte
289
+ // 1바이트씩 읽어서 유효한 시작 바이트 탐색
270
290
  const startTime = Date.now();
271
291
  let startByte;
272
292
  while (Date.now() - startTime < timeout) {
@@ -284,13 +304,13 @@ class SfmClient {
284
304
  }
285
305
  }
286
306
  catch {
287
- break; // Timeout
307
+ break; // 타임아웃
288
308
  }
289
309
  }
290
310
  if (startByte === undefined) {
291
311
  throw new Error(`Start byte scan failed (${packetType})`);
292
312
  }
293
- // Read remaining packet
313
+ // 나머지 패킷 읽기
294
314
  const remaining = timeout - (Date.now() - startTime);
295
315
  if (remaining <= 0) {
296
316
  throw new Error(`Timeout expired after start byte scan (${packetType})`);
@@ -299,21 +319,21 @@ class SfmClient {
299
319
  if (rest.length < packetSize - 1) {
300
320
  throw new Error(`Incomplete packet: received ${rest.length + 1}/${packetSize} bytes (${packetType})`);
301
321
  }
302
- // Combine start byte + rest
322
+ // 시작 바이트 + 나머지 결합
303
323
  const fullPacket = Buffer.alloc(packetSize);
304
324
  fullPacket[0] = startByte;
305
325
  rest.copy(fullPacket, 1);
306
326
  return fullPacket;
307
327
  }
308
328
  /**
309
- * Calculate read timeout (based on data size)
329
+ * 읽기 타임아웃 계산 (데이터 크기 기반)
310
330
  * @internal
311
331
  */
312
332
  _getReadTimeout(dataSize) {
313
333
  return Math.min(MAX_TIMEOUT_MS, Math.max(this.readTimeout, Math.ceil(dataSize / 100) + 1000));
314
334
  }
315
335
  /**
316
- * Calculate write timeout (based on data size)
336
+ * 쓰기 타임아웃 계산 (데이터 크기 기반)
317
337
  * @internal
318
338
  */
319
339
  _getWriteTimeout(dataSize) {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,24 @@
1
1
  /**
2
- * SFM Protocol Manual V3.6.0 Secure Packet Protocol
2
+ * SFM Protocol Manual V3.6.0 보안 패킷 프로토콜
3
3
  *
4
- * Encryption modes:
5
- * 0x00 = Rijndael256 ECB (legacy)
4
+ * 암호화 모드:
5
+ * 0x00 = Rijndael256 ECB (레거시)
6
6
  * 0x01 = AES256-ECB
7
7
  * 0x11 = AES256-CBC
8
8
  *
9
- * Secure packet structure (35 bytes):
10
- * Byte 0: 0x50 (Send) / 0x51 (Recv) marker
11
- * Byte 1-32: AES256 encrypted data (32 bytes)
12
- * Byte 33: Checksum
13
- * Byte 34: 0x0A (End)
9
+ * 보안 패킷 구조 (35바이트):
10
+ * Byte 0: 0x50 (전송) / 0x51 (수신) 마커
11
+ * Byte 1-32: AES256 암호화 데이터 (32바이트)
12
+ * Byte 33: 체크섬
13
+ * Byte 34: 0x0A (종료)
14
14
  *
15
- * Plaintext structure before encryption (32 bytes) - SFM field mapping:
15
+ * 암호화 평문 구조 (32바이트) - SFM 필드 매핑:
16
16
  * Byte offset+0: Command (1B)
17
17
  * Byte offset+1-4: Param (4B, LE)
18
18
  * Byte offset+5-8: Size (4B, LE)
19
19
  * Byte offset+9: Flag (1B)
20
20
  * Byte offset+10-17: Secure Code (8B)
21
- * Byte offset+18-31: Padding
21
+ * Byte offset+18-31: 패딩
22
22
  */
23
23
  import type { EncryptionMode } from "../constants/index.js";
24
24
  export { ENCRYPTION_MODE } from "../constants/index.js";
@@ -54,31 +54,31 @@ export declare class SfmCrypto {
54
54
  resetIV(): void;
55
55
  setSecureCode(code: Buffer | string): void;
56
56
  /**
57
- * AES256 encrypt (32-byte block)
57
+ * AES256 암호화 (32바이트 블록)
58
58
  */
59
59
  encrypt(plaintext: Buffer | Uint8Array): Buffer;
60
60
  /**
61
- * AES256 decrypt (32-byte block)
61
+ * AES256 복호화 (32바이트 블록)
62
62
  */
63
63
  decrypt(ciphertext: Buffer | Uint8Array): Buffer;
64
64
  /**
65
- * AES256 encrypt (variable size, for multi-packet)
65
+ * AES256 암호화 (가변 크기, 멀티패킷용)
66
66
  */
67
67
  encryptRaw(data: Buffer | Uint8Array): Buffer;
68
68
  /**
69
- * AES256 decrypt (variable size)
70
- * @param originalSize - original data size before encryption (to strip padding)
69
+ * AES256 복호화 (가변 크기)
70
+ * @param originalSize - 암호화 원본 데이터 크기 (패딩 제거용)
71
71
  */
72
72
  decryptRaw(data: Buffer | Uint8Array, originalSize?: number): Buffer;
73
73
  /**
74
- * Build secure send packet (SFM field structure)
74
+ * 보안 전송 패킷 생성 (SFM 필드 구조)
75
75
  *
76
- * Plaintext (32B):
77
- * [command(1)] [param LE(4)] [size LE(4)] [flag(1)] [secureCode(8)] [padding]
76
+ * 평문 (32B):
77
+ * [command(1)] [param LE(4)] [size LE(4)] [flag(1)] [secureCode(8)] [패딩]
78
78
  */
79
79
  buildSecureSendPacket(command: number, param?: number, size?: number, flag?: number): Buffer;
80
80
  /**
81
- * Parse secure receive packet (SFM field structure)
81
+ * 보안 수신 패킷 파싱 (SFM 필드 구조)
82
82
  */
83
83
  parseSecureRecvPacket(data: Buffer | Uint8Array): SecureRecvPacketResult;
84
84
  getModeName(): string;
@@ -1,25 +1,25 @@
1
1
  "use strict";
2
2
  /**
3
- * SFM Protocol Manual V3.6.0 Secure Packet Protocol
3
+ * SFM Protocol Manual V3.6.0 보안 패킷 프로토콜
4
4
  *
5
- * Encryption modes:
6
- * 0x00 = Rijndael256 ECB (legacy)
5
+ * 암호화 모드:
6
+ * 0x00 = Rijndael256 ECB (레거시)
7
7
  * 0x01 = AES256-ECB
8
8
  * 0x11 = AES256-CBC
9
9
  *
10
- * Secure packet structure (35 bytes):
11
- * Byte 0: 0x50 (Send) / 0x51 (Recv) marker
12
- * Byte 1-32: AES256 encrypted data (32 bytes)
13
- * Byte 33: Checksum
14
- * Byte 34: 0x0A (End)
10
+ * 보안 패킷 구조 (35바이트):
11
+ * Byte 0: 0x50 (전송) / 0x51 (수신) 마커
12
+ * Byte 1-32: AES256 암호화 데이터 (32바이트)
13
+ * Byte 33: 체크섬
14
+ * Byte 34: 0x0A (종료)
15
15
  *
16
- * Plaintext structure before encryption (32 bytes) - SFM field mapping:
16
+ * 암호화 평문 구조 (32바이트) - SFM 필드 매핑:
17
17
  * Byte offset+0: Command (1B)
18
18
  * Byte offset+1-4: Param (4B, LE)
19
19
  * Byte offset+5-8: Size (4B, LE)
20
20
  * Byte offset+9: Flag (1B)
21
21
  * Byte offset+10-17: Secure Code (8B)
22
- * Byte offset+18-31: Padding
22
+ * Byte offset+18-31: 패딩
23
23
  */
24
24
  var __importDefault = (this && this.__importDefault) || function (mod) {
25
25
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -29,7 +29,7 @@ exports.SfmCrypto = exports.ENCRYPTION_MODE = void 0;
29
29
  const node_crypto_1 = __importDefault(require("node:crypto"));
30
30
  const packet_js_1 = require("./packet.js");
31
31
  const index_js_1 = require("../constants/index.js");
32
- // Backward-compatible re-export
32
+ // 하위 호환 재내보내기
33
33
  var index_js_2 = require("../constants/index.js");
34
34
  Object.defineProperty(exports, "ENCRYPTION_MODE", { enumerable: true, get: function () { return index_js_2.ENCRYPTION_MODE; } });
35
35
  const SECURE_PACKET_SIZE = 35;
@@ -85,7 +85,7 @@ class SfmCrypto {
85
85
  this.secureCode = buf;
86
86
  }
87
87
  /**
88
- * AES256 encrypt (32-byte block)
88
+ * AES256 암호화 (32바이트 블록)
89
89
  */
90
90
  encrypt(plaintext) {
91
91
  const buf = Buffer.isBuffer(plaintext) ? plaintext : Buffer.from(plaintext);
@@ -101,7 +101,7 @@ class SfmCrypto {
101
101
  return Buffer.concat([cipher.update(padded), cipher.final()]);
102
102
  }
103
103
  /**
104
- * AES256 decrypt (32-byte block)
104
+ * AES256 복호화 (32바이트 블록)
105
105
  */
106
106
  decrypt(ciphertext) {
107
107
  const buf = Buffer.isBuffer(ciphertext)
@@ -117,7 +117,7 @@ class SfmCrypto {
117
117
  return Buffer.concat([decipher.update(buf), decipher.final()]);
118
118
  }
119
119
  /**
120
- * AES256 encrypt (variable size, for multi-packet)
120
+ * AES256 암호화 (가변 크기, 멀티패킷용)
121
121
  */
122
122
  encryptRaw(data) {
123
123
  const buf = Buffer.isBuffer(data) ? data : Buffer.from(data);
@@ -135,8 +135,8 @@ class SfmCrypto {
135
135
  return Buffer.concat([cipher.update(padded), cipher.final()]);
136
136
  }
137
137
  /**
138
- * AES256 decrypt (variable size)
139
- * @param originalSize - original data size before encryption (to strip padding)
138
+ * AES256 복호화 (가변 크기)
139
+ * @param originalSize - 암호화 원본 데이터 크기 (패딩 제거용)
140
140
  */
141
141
  decryptRaw(data, originalSize) {
142
142
  const buf = Buffer.isBuffer(data) ? data : Buffer.from(data);
@@ -157,10 +157,10 @@ class SfmCrypto {
157
157
  return decrypted;
158
158
  }
159
159
  /**
160
- * Build secure send packet (SFM field structure)
160
+ * 보안 전송 패킷 생성 (SFM 필드 구조)
161
161
  *
162
- * Plaintext (32B):
163
- * [command(1)] [param LE(4)] [size LE(4)] [flag(1)] [secureCode(8)] [padding]
162
+ * 평문 (32B):
163
+ * [command(1)] [param LE(4)] [size LE(4)] [flag(1)] [secureCode(8)] [패딩]
164
164
  */
165
165
  buildSecureSendPacket(command, param = 0, size = 0, flag = 0) {
166
166
  const plaintext = Buffer.alloc(ENCRYPTED_DATA_SIZE);
@@ -168,21 +168,21 @@ class SfmCrypto {
168
168
  if (offset < 0 || offset + 10 + SECURE_CODE_SIZE > ENCRYPTED_DATA_SIZE) {
169
169
  throw new Error(`Invalid dataOffset: ${offset} (exceeds ${ENCRYPTED_DATA_SIZE}-byte block)`);
170
170
  }
171
- // SFM field mapping
171
+ // SFM 필드 매핑
172
172
  plaintext[offset] = command;
173
173
  plaintext.writeUInt32LE(param >>> 0, offset + 1);
174
174
  plaintext.writeUInt32LE(size >>> 0, offset + 5);
175
175
  plaintext[offset + 9] = flag;
176
- // Insert Secure Code
176
+ // Secure Code 삽입
177
177
  this.secureCode.copy(plaintext, offset + 10, 0, SECURE_CODE_SIZE);
178
- // Reset CBC IV
178
+ // CBC IV 리셋
179
179
  if (this.mode === index_js_1.ENCRYPTION_MODE.AES256_CBC) {
180
180
  this.resetIV();
181
181
  }
182
182
  const encrypted = this.encrypt(plaintext);
183
- // Build secure packet (35 bytes)
183
+ // 보안 패킷 생성 (35바이트)
184
184
  const packet = Buffer.alloc(SECURE_PACKET_SIZE);
185
- packet[0] = 0x50; // SEND marker
185
+ packet[0] = 0x50; // 전송 마커
186
186
  encrypted.copy(packet, 1, 0, ENCRYPTED_DATA_SIZE);
187
187
  packet[33] = (0, packet_js_1.calcChecksum)(packet, 33);
188
188
  packet[34] = 0x0a;
@@ -190,7 +190,7 @@ class SfmCrypto {
190
190
  return packet;
191
191
  }
192
192
  /**
193
- * Parse secure receive packet (SFM field structure)
193
+ * 보안 수신 패킷 파싱 (SFM 필드 구조)
194
194
  */
195
195
  parseSecureRecvPacket(data) {
196
196
  const buf = Buffer.isBuffer(data) ? data : Buffer.from(data);
@@ -221,7 +221,7 @@ class SfmCrypto {
221
221
  const param = decrypted.readUInt32LE(offset + 1);
222
222
  const size = decrypted.readUInt32LE(offset + 5);
223
223
  const flag = decrypted[offset + 9];
224
- // Secure Code verification
224
+ // Secure Code 검증
225
225
  const codeStart = offset + 10;
226
226
  const receivedCode = decrypted.subarray(codeStart, codeStart + SECURE_CODE_SIZE);
227
227
  const codeValid = this.secureCode.equals(receivedCode);