@ddunigma/node 6.0.0 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -12
- package/docs/REFERENCE.md +35 -42
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@ddunigma/node)
|
|
4
4
|
|
|
5
|
+
커스텀 charset을 사용하는 Base64 스타일 인코더/디코더 라이브러리입니다.
|
|
6
|
+
|
|
5
7
|
V2 추가사항
|
|
6
8
|
|
|
7
9
|
- 이제 한글 종성 결합 시스템을 활용하여 8개 기본 문자 × 8개 종성으로 64가지 조합을 만들어, 6비트를 한 글자로 표현합니다.
|
|
@@ -65,9 +67,6 @@ const encoded = ddu.encode("재미있는 난독화");
|
|
|
65
67
|
const decoded = ddu.decode(encoded);
|
|
66
68
|
```
|
|
67
69
|
|
|
68
|
-
키 없는 난독화는 암호화가 아닙니다. 동일 입력은 항상 동일 출력이 되어 기밀성·변조 방지를 제공하지
|
|
69
|
-
않습니다.
|
|
70
|
-
|
|
71
70
|
## 압축, 암호화, 체크섬
|
|
72
71
|
|
|
73
72
|
```typescript
|
|
@@ -88,16 +87,7 @@ const encoded = ddu.encode("보호할 데이터");
|
|
|
88
87
|
const decoded = ddu.decode(encoded);
|
|
89
88
|
```
|
|
90
89
|
|
|
91
|
-
AES-256-GCM은 부가 기능입니다. 저엔트로피 키를 쓰면 애플리케이션 고유 `salt`와 높은
|
|
92
|
-
`iterations`를 명시하세요.
|
|
93
|
-
|
|
94
90
|
## Reference
|
|
95
91
|
|
|
96
92
|
전체 옵션, 커스텀 charset, URL-Safe, Web Streams, `/core` 고급 사용법은
|
|
97
93
|
[docs/REFERENCE.md](docs/REFERENCE.md)를 보세요.
|
|
98
|
-
|
|
99
|
-
## Migration notes
|
|
100
|
-
|
|
101
|
-
6.0에서 압축/암호화/체크섬/Web Streams는 기본 진입점에서 `@ddunigma/node/secure`로 이동했습니다.
|
|
102
|
-
WASM API(`preloadWasm`, `getWasmCodec`, `wasmThreshold`)는 제거됐습니다. 기존 wire format은 유지되어
|
|
103
|
-
기존 데이터는 그대로 디코딩됩니다.
|
package/docs/REFERENCE.md
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# ddunigma Node Reference
|
|
2
2
|
|
|
3
|
-
`@ddunigma/node` 6.0 상세 사용법입니다. README는 빠른 시작과 정체성 중심이고, 전체 옵션과 고급
|
|
4
|
-
진입점 사용법은 이 문서가 기준입니다.
|
|
5
|
-
|
|
6
3
|
## 문자열과 바이너리
|
|
7
4
|
|
|
8
5
|
```typescript
|
|
@@ -53,21 +50,21 @@ charset 문자와 `paddingChar`는 각각 단일 UTF-16 코드 유닛이어야
|
|
|
53
50
|
|
|
54
51
|
### 공통 옵션
|
|
55
52
|
|
|
56
|
-
| 옵션
|
|
57
|
-
|
|
|
58
|
-
| `compress`
|
|
59
|
-
| `compressionAlgorithm` | `"deflate" \| "brotli"`
|
|
60
|
-
| `compressionLevel`
|
|
61
|
-
| `checksum`
|
|
62
|
-
| `checksumScope`
|
|
63
|
-
| `chunkSize`
|
|
64
|
-
| `chunkSeparator`
|
|
65
|
-
| `maxDecodedBytes`
|
|
66
|
-
| `maxEncodedChars`
|
|
67
|
-
| `maxDecompressedBytes` | `number`
|
|
68
|
-
| `obfuscate`
|
|
69
|
-
| `requireEncryption`
|
|
70
|
-
| `onProgress`
|
|
53
|
+
| 옵션 | 타입 | 기본값 | 용도 |
|
|
54
|
+
| ---------------------- | --------------------------------- | ----------------- | --------------------------------------- |
|
|
55
|
+
| `compress` | `boolean` | `false` | 압축 사용 |
|
|
56
|
+
| `compressionAlgorithm` | `"deflate" \| "brotli"` | `"deflate"` | 압축 알고리즘 |
|
|
57
|
+
| `compressionLevel` | `number` | `6` | 압축 레벨 |
|
|
58
|
+
| `checksum` | `boolean` | `false` | CRC32 체크섬 추가 및 검증 |
|
|
59
|
+
| `checksumScope` | `"plaintext" \| "output"` | `"output"` | CRC32 계산 범위 |
|
|
60
|
+
| `chunkSize` | `number` | 미사용 | 출력 문자열 분할 크기 |
|
|
61
|
+
| `chunkSeparator` | `string` | `"\n"` | 청크 구분자 |
|
|
62
|
+
| `maxDecodedBytes` | `number` | `67108864` | 최대 디코딩 바이트 수 |
|
|
63
|
+
| `maxEncodedChars` | `number` | 비례 자동 산정 | 최대 디코딩 입력 문자열 길이 |
|
|
64
|
+
| `maxDecompressedBytes` | `number` | `67108864` | 최대 압축 해제 바이트 수 |
|
|
65
|
+
| `obfuscate` | `boolean` | `false` | 출력을 한글 음절로 난독화 |
|
|
66
|
+
| `requireEncryption` | `boolean` | 키 사용 시 `true` | 키가 있는 decoder에서 평문 payload 거부 |
|
|
67
|
+
| `onProgress` | `(info: DduProgressInfo) => void` | 미사용 | 처리 진행률 콜백 |
|
|
71
68
|
|
|
72
69
|
`compress`/`compressionAlgorithm`/`compressionLevel`/`checksum`/`checksumScope`/
|
|
73
70
|
`maxDecompressedBytes`/`requireEncryption`은 secure 진입점(`@ddunigma/node/secure`)에서만
|
|
@@ -78,20 +75,20 @@ Web Streams API는 축적 모드 메모리 제한용 `maxBufferedBytes`(인코
|
|
|
78
75
|
|
|
79
76
|
### 생성자 전용 옵션
|
|
80
77
|
|
|
81
|
-
| 옵션
|
|
82
|
-
|
|
|
83
|
-
| `dduSetSymbol`
|
|
84
|
-
| `dduChar`
|
|
85
|
-
| `codaChar`
|
|
86
|
-
| `paddingChar`
|
|
87
|
-
| `requiredLength`
|
|
88
|
-
| `usePowerOfTwo`
|
|
89
|
-
| `useRepeatPadding` | `boolean`
|
|
90
|
-
| `throwOnError`
|
|
91
|
-
| `urlSafe`
|
|
92
|
-
| `encryptionKey`
|
|
93
|
-
| `keyDerivation`
|
|
94
|
-
| `adapter`
|
|
78
|
+
| 옵션 | 타입 | 기본값 | 용도 |
|
|
79
|
+
| ------------------ | ---------------------------- | ----------- | ----------------------------------- |
|
|
80
|
+
| `dduSetSymbol` | `DduSetSymbol \| "ddu" \| …` | `DDU` | 기본 charset 프리셋 선택 |
|
|
81
|
+
| `dduChar` | `string \| string[]` | 프리셋 사용 | 커스텀 charset |
|
|
82
|
+
| `codaChar` | `string[]` | 미사용 | 기본 문자와 조합할 한글 종성 |
|
|
83
|
+
| `paddingChar` | `string` | 프리셋 사용 | 커스텀 패딩 문자 |
|
|
84
|
+
| `requiredLength` | `number` | `64` | 필요한 charset 문자 수 |
|
|
85
|
+
| `usePowerOfTwo` | `boolean` | 자동 결정 | 2의 제곱수 charset 직접 인덱스 모드 |
|
|
86
|
+
| `useRepeatPadding` | `boolean` | 프리셋 설정 | 반복 패딩 방식 사용 |
|
|
87
|
+
| `throwOnError` | `boolean` | `true` | 잘못된 charset 설정에서 예외 발생 |
|
|
88
|
+
| `urlSafe` | `boolean` | `false` | URL-Safe 출력 변환 |
|
|
89
|
+
| `encryptionKey` | `string` | 미사용 | AES-256-GCM 암호화 키 (secure 전용) |
|
|
90
|
+
| `keyDerivation` | `KeyDerivationOptions` | `pbkdf2` | 암호화 키 파생 방식 (secure 전용) |
|
|
91
|
+
| `adapter` | `PlatformAdapter` | 진입점 설정 | 플랫폼 어댑터 직접 주입 |
|
|
95
92
|
|
|
96
93
|
## 압축, 암호화, 체크섬
|
|
97
94
|
|
|
@@ -124,10 +121,6 @@ const decoded = ddu.decode(encoded);
|
|
|
124
121
|
레거시 평문을 같은 인스턴스로 읽어야 하면 해당 decode 호출에 `requireEncryption: false`를
|
|
125
122
|
명시합니다.
|
|
126
123
|
|
|
127
|
-
> 보안 주의: AES-256-GCM 암호화는 부가 기능이며 단독 보안 솔루션이 아닙니다. 기본 PBKDF2는
|
|
128
|
-
> 210k 반복 + 고정 기본 salt라 저엔트로피 키에는 부족합니다. 애플리케이션 고유 `salt`와 높은
|
|
129
|
-
> `iterations`를 명시하세요.
|
|
130
|
-
|
|
131
124
|
## URL-Safe와 청크 분할
|
|
132
125
|
|
|
133
126
|
```typescript
|
|
@@ -200,12 +193,12 @@ const asyncStats = await ddu.getStatsAsync("payload", { compress: true });
|
|
|
200
193
|
|
|
201
194
|
## 진입점
|
|
202
195
|
|
|
203
|
-
| 진입점
|
|
204
|
-
|
|
|
205
|
-
| `@ddunigma/node`
|
|
206
|
-
| `@ddunigma/node/browser` | `Ddu64Browser` (lean) | 인코딩 + 한글 난독화
|
|
207
|
-
| `@ddunigma/node/secure`
|
|
208
|
-
| `@ddunigma/node/core`
|
|
196
|
+
| 진입점 | 노출 `Ddu64` | 기능 | 용도 |
|
|
197
|
+
| ------------------------ | --------------------- | --------------------------------------- | ---------------------------- |
|
|
198
|
+
| `@ddunigma/node` | `Ddu64Node` (lean) | 인코딩 + 한글 난독화 | 기본 — 재미 + 시각적 난독화 |
|
|
199
|
+
| `@ddunigma/node/browser` | `Ddu64Browser` (lean) | 인코딩 + 한글 난독화 | 브라우저/Workers 기본 |
|
|
200
|
+
| `@ddunigma/node/secure` | `Ddu64Secure` | 압축/암호화/체크섬/Web Streams + 난독화 | 보안·압축 배터리 |
|
|
201
|
+
| `@ddunigma/node/core` | `Ddu64Core` | 순수 인코딩/디코딩 | 어댑터/난독 미포함 최소 번들 |
|
|
209
202
|
|
|
210
203
|
```typescript
|
|
211
204
|
import { Ddu64 as NodeDdu64 } from "@ddunigma/node";
|