C¶
스펙의 C11 구현 — C++ 래퍼의 기반 코어이기도
합니다. GCC 또는 Clang(unsigned __int128 사용)과 OpenSSL libcrypto
1.1+/3.x가 필요하고 사용하는 쪽은 -lcrypto로 링크해야 합니다.
원본: GitHub의 c/
· 전체 README
설치¶
의도적으로 벤더링 / 정적 라이브러리 방식입니다 — 패키지 레지스트리 단계가 없습니다:
make # c/ 디렉터리에서 — 정적 라이브러리 libdealcode.a 빌드
make test # 테스트 벡터 생성 후 테스트 스위트 실행
cc -Ic/include myapp.c c/libdealcode.a -lcrypto
최소 예제¶
#include <dealcode.h>
dealcode_config_t cfg = {0};
cfg.key_string = "example-key"; /* 문자열 규칙: 항상 SHA-256 파생 */
cfg.alphabet = "hex"; /* 프리셋 이름 또는 커스텀 알파벳 문자 */
cfg.domain = "orders"; /* 네임스페이스 라벨, tweak에 바인딩 */
dealcode_t *dc = NULL;
dealcode_err_t err = dealcode_new(&cfg, &dc);
if (err != DEALCODE_OK) {
fprintf(stderr, "dealcode: %s\n", dealcode_strerror(err));
return 1;
}
char code[DEALCODE_MAX_CODE_SIZE];
dealcode_encode(dc, 42, code, sizeof code); /* -> 예: "59e5f2" */
uint64_t n;
dealcode_decode(dc, code, &n); /* -> 42 */
dealcode_free(dc);
API 요약¶
| 항목 | 비고 |
|---|---|
dealcode_new / dealcode_free |
코덱 수명주기 — 불투명 핸들, 전역 상태 없음 |
dealcode_encode / dealcode_decode |
카운터 ↔ 코드 전단사 |
dealcode_capacity, dealcode_min_length, dealcode_max_length, dealcode_radix, dealcode_alphabet |
인트로스펙션 |
dealcode_strerror |
사람이 읽을 수 있는 에러 설명 |
dealcode_cycle_* (_new, _encode, _decode, _free, …) |
고정 길이 순환 모드, SPEC §11 — 설정 가이드 참고 |
| 에러 | 명시적 dealcode_err_t 반환 코드; 실패 시 출력 파라미터에 아무것도 쓰지 않음(dealcode_new의 *out = NULL 제외) |
전체 문서화된 API는 include/dealcode.h에 있습니다. dealcode_t는 생성
후 불변이며 스레드 간 자유롭게 공유할 수 있습니다 — encode/decode는 호출마다
새 OpenSSL 사이퍼 컨텍스트를 할당합니다.
테스트¶
NIST 공식 FF1 샘플 벡터 9개, 모든 dealcode v1 테스트 벡터 설정, 에러 동작,
스테이지 경계를 가로지르는 대규모 왕복 스윕 — radix^max_length가 정확히
2^128인 설정 포함 — 을 검사합니다.