Rust¶
스펙의 Rust 구현. Rust ≥ 1.85 필요. 런타임 의존성은
감사된 RustCrypto 크레이트
aes와
sha2뿐입니다.
원본: GitHub의 rust/
· 전체 README
설치¶
최소 예제¶
use dealcode::Dealcode;
let codec = Dealcode::new("0a1b...시크릿-매니저에서-가져온-64자-hex")?;
codec.encode(0)?; // "6005d7" (6자리 hex)
codec.encode(1)?; // "d4e705" 다른 어떤 카운터와도 충돌하지 않음
codec.decode("d4e705")?; // 1
API 요약¶
| 항목 | 비고 |
|---|---|
Dealcode::new(key) |
기본 설정; 키는 impl Into<Key>: &str, String, &[u8], Vec<u8>, [u8; N] |
Dealcode::builder(key).alphabet(..).min_length(..).max_length(..).domain(..).build() |
잘못된 설정 → Err(Error::Config) |
codec.encode(n: u64) -> Result<String> |
[0, codec.capacity()) 밖이면 Err(Error::Range) |
codec.decode(code) -> Result<u64> |
형식이 잘못된 입력이면 Err(Error::InvalidCode) |
CyclingDealcode::builder(key)...length(..).build() + cycle_of(n) |
고정 길이 순환 모드, SPEC §11 — 설정 가이드 참고 |
| 에러 | dealcode::Error(Config / Range / InvalidCode), std::error::Error 구현 |
Dealcode 인스턴스는 불변이고 Send + Sync입니다 — Arc나 static으로
공유하세요. AES 라운드 키와 길이별 FF1 파라미터는 빌드 시점에 미리
계산됩니다.
테스트¶
NIST 공식 FF1 샘플 벡터, 공유 언어 공통 벡터 전부, 동작 케이스, doctest를 검사합니다.