Contractless-PHP-Modules/interop/README.md

39 lines
1.3 KiB
Markdown
Raw Normal View History

# Contractless PHP Crypto Interoperability
This harness verifies that the native libraries packaged by
`contractless-php-crypto` produce data compatible with Contractless.
## Results
- The C implementation wrapped by `jedisct1/PHP-Skein-Hash` produces the
same 32-byte Skein-256 output as the Rust `skein` crate used by
Contractless.
- Unmodified `Falcon-padded-512` message handling is not compatible with
Contractless `fn-dsa 0.3.0`.
- `Falcon-padded-512` keys and fixed signatures use the same Contractless
sizes: 897-byte public keys, 1,281-byte private keys, and 666-byte
signatures.
- Both signing implementations are compatible when liboqs receives the
message framing used by Contractless:
```text
SHAKE256(public_key, 64 bytes) || 0x00 || 0x00 || original_message
```
The two zero bytes represent raw-message mode and an empty domain context.
With that adapter:
- Contractless Rust signatures verify through liboqs.
- Liboqs signatures verify through Contractless Rust.
## Required liboqs algorithm
Use `Falcon-padded-512`. Do not use variable-length `Falcon-512`.
## Regression requirement
Run these tests whenever Contractless changes its `fn-dsa`, `skein`, or
signature-framing dependencies. Matching key and signature lengths alone
does not establish compatibility.