first commit
ober
04eb262af4957171e784d55c2505623f166be4e8
new file mode 100644 --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +# chez-crypto + +OpenSSL libcrypto bindings for Chez Scheme. + +Provides hash digests, HMAC, symmetric encryption, Ed25519 signatures, and scrypt KDF. + +## Requirements + +- Chez Scheme 10.x +- OpenSSL 3.x (`libcrypto`) +- GCC + +## Build & Test + +```bash +make +make test +``` + +## API + +### Random +- `(random-bytes n)` → bytevector of n cryptographically random bytes +- `(random-bytes! bv)` → fills bytevector in place + +### Digest (Hash) +- `(md5 data)`, `(sha1 data)`, `(sha256 data)`, `(sha384 data)`, `(sha512 data)` → bytevector +- `(digest algo data)` → bytevector (algo = "md5", "sha256", etc.) +- `(digest-size algo)` → integer +- Streaming: `make-digest-ctx`, `digest-init!`, `digest-update!`, `digest-final!`, `free-digest-ctx` + +### HMAC +- `(hmac algo key data)` → bytevector +- `(hmac-md5 key data)`, `(hmac-sha256 key data)`, etc. + +### Cipher (Symmetric Encryption) +- `(encrypt algo key iv plaintext)` → bytevector +- `(decrypt algo key iv ciphertext)` → bytevector +- `(cipher-key-length algo)`, `(cipher-iv-length algo)`, `(cipher-block-size algo)` +- Streaming: `make-cipher-ctx`, `encrypt-init!`/`update!`/`final!`, `decrypt-init!`/`update!`/`final!` + +### Ed25519 +- `(ed25519-keygen)` → (values private-key public-key) +- `(ed25519-sign privkey message)` → signature bytevector +- `(ed25519-verify pubkey message signature)` → #t/#f + +### KDF +- `(scrypt password salt size [N r p])` → derived key bytevector +# chez-crypto