Add paper, more minor doc updates
Some checks failed
CI / lint (push) Successful in 1m37s
CI / test-python (push) Successful in 1m45s
CI / test-zig (push) Successful in 1m37s
CI / test-wasm (push) Successful in 1m52s
CI / test (push) Successful in 13m50s
CI / miri (push) Successful in 13m48s
CI / build (push) Successful in 1m10s
CI / fuzz-regression (push) Successful in 9m16s
CI / publish (push) Failing after 55s
CI / publish-python (push) Failing after 1m40s
CI / publish-wasm (push) Failing after 1m49s
Some checks failed
CI / lint (push) Successful in 1m37s
CI / test-python (push) Successful in 1m45s
CI / test-zig (push) Successful in 1m37s
CI / test-wasm (push) Successful in 1m52s
CI / test (push) Successful in 13m50s
CI / miri (push) Successful in 13m48s
CI / build (push) Successful in 1m10s
CI / fuzz-regression (push) Successful in 9m16s
CI / publish (push) Failing after 55s
CI / publish-python (push) Failing after 1m40s
CI / publish-wasm (push) Failing after 1m49s
Signed-off-by: Kamal Tufekcic <kamal@lo.sh>
This commit is contained in:
parent
e6d0a1ef1a
commit
793b00ff4b
198 changed files with 2254 additions and 21 deletions
14
Abstract.md
14
Abstract.md
|
|
@ -73,16 +73,16 @@ HybridSig combines Ed25519 (classical) and ML-DSA-65 (post-quantum). Key pairs
|
||||||
satisfy pk = (pk_E, pk_P), sk = (sk_E, sk_P).
|
satisfy pk = (pk_E, pk_P), sk = (sk_E, sk_P).
|
||||||
|
|
||||||
**Sign(sk, m)** → σ = (σ_E ‖ σ_P): both components computed independently and
|
**Sign(sk, m)** → σ = (σ_E ‖ σ_P): both components computed independently and
|
||||||
concatenated. ML-DSA-65 uses hedged signing via `sign_internal` (FIPS 204 §5.2 /
|
concatenated. ML-DSA-65 uses hedged signing via `sign_internal` (FIPS 204 §6.2 /
|
||||||
Algorithm 2); fresh randomness is mixed per signing operation for
|
Algorithm 7); fresh randomness is mixed per signing operation for
|
||||||
fault-injection resistance. **FIPS 204 compatibility note**: The implementation
|
fault-injection resistance. **FIPS 204 compatibility note**: The implementation
|
||||||
calls `sign_internal` directly — the raw internal signing function with no
|
calls `sign_internal` directly — the raw internal signing function with no
|
||||||
context string or domain prefix. This is structurally incompatible with FIPS 204
|
context string or domain prefix. This is structurally incompatible with FIPS 204
|
||||||
§6.2 (`ML-DSA.Sign`, which prepends a context-dependent domain separator before
|
§5.2 (`ML-DSA.Sign` / Algorithm 2, which prepends a context-dependent domain
|
||||||
calling `sign_internal`). A FIPS 204 §6.2 verifier expecting the domain-prefixed
|
separator before calling `sign_internal`). A FIPS 204 §5.2 verifier expecting
|
||||||
message format will reject Soliton ML-DSA-65 signatures. A formal model or test
|
the domain-prefixed message format will reject Soliton ML-DSA-65 signatures. A
|
||||||
vector suite must use the `sign_internal` / `verify_internal` interface, not the
|
formal model or test vector suite must use the `sign_internal` /
|
||||||
§6.2 external interface. For adversary models that include fault injection,
|
`verify_internal` interface, not the §5.2 external interface. For adversary models that include fault injection,
|
||||||
hedged signing provides resistance to differential fault analysis that
|
hedged signing provides resistance to differential fault analysis that
|
||||||
deterministic signing does not. **RNG implication**: Every HybridSig.Sign
|
deterministic signing does not. **RNG implication**: Every HybridSig.Sign
|
||||||
invocation consumes randomness (from ML-DSA-65's hedged component). In the §8.2
|
invocation consumes randomness (from ML-DSA-65's hedged component). In the §8.2
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ edition = "2024"
|
||||||
rust-version = "1.85"
|
rust-version = "1.85"
|
||||||
license = "AGPL-3.0-only"
|
license = "AGPL-3.0-only"
|
||||||
repository = "https://git.lo.sh/lo/libsoliton"
|
repository = "https://git.lo.sh/lo/libsoliton"
|
||||||
homepage = "https://lo.sh"
|
homepage = "https://git.lo.sh/lo/libsoliton/wiki"
|
||||||
authors = ["LO Contributors"]
|
authors = ["LO Contributors"]
|
||||||
description = "Cryptographic library for the LO protocol"
|
description = "Cryptographic library for the LO protocol"
|
||||||
categories = ["cryptography"]
|
categories = ["cryptography"]
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ Pure-Rust post-quantum cryptographic library. Provides composite identity keys (
|
||||||
|
|
||||||
| Document | Description |
|
| Document | Description |
|
||||||
|----------|-------------|
|
|----------|-------------|
|
||||||
|
| [paper.tex](paper.tex) | Protocol paper — design, security analysis, formal verification, implementation |
|
||||||
| [Abstract.md](Abstract.md) | Security analysis specification — adversary model, theorems, and verification targets for formal modeling |
|
| [Abstract.md](Abstract.md) | Security analysis specification — adversary model, theorems, and verification targets for formal modeling |
|
||||||
| [Specification.md](Specification.md) | Full cryptographic specification (v1) |
|
| [Specification.md](Specification.md) | Full cryptographic specification (v1) |
|
||||||
| [CHEATSHEET.md](CHEATSHEET.md) | API quick reference with types, sizes, and signatures |
|
| [CHEATSHEET.md](CHEATSHEET.md) | API quick reference with types, sizes, and signatures |
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ fi
|
||||||
|
|
||||||
HOURS="${1:-8}"
|
HOURS="${1:-8}"
|
||||||
WORKERS="${2:-1}"
|
WORKERS="${2:-1}"
|
||||||
|
# Change to 3600 for overnight runs, 1 is used for quick local runs
|
||||||
SECONDS_TOTAL=$((HOURS * 1))
|
SECONDS_TOTAL=$((HOURS * 1))
|
||||||
|
|
||||||
CORE_DIR="soliton"
|
CORE_DIR="soliton"
|
||||||
|
|
|
||||||
2223
soliton.tex
Normal file
2223
soliton.tex
Normal file
File diff suppressed because it is too large
Load diff
2
soliton/fuzz/Cargo.lock
generated
2
soliton/fuzz/Cargo.lock
generated
|
|
@ -435,7 +435,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libsoliton"
|
name = "libsoliton"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"argon2",
|
"argon2",
|
||||||
"chacha20poly1305",
|
"chacha20poly1305",
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1 +1 @@
|
||||||
d怹°–¹@©Âº@eæTRV’§‡ |ç¿ZAÙI/˜j‘A\ñ –;ð Ÿ
|
x<EFBFBD>e)S<13><><EFBFBD><EFBFBD> <EFBFBD>^<14>ب8ٍ<38>v/ع<>7+ق<><D982>N<EFBFBD><4E><EFBFBD>الحEf<45><66>OJx<4A>}ث6G9G
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
A<EFBFBD>
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1 @@
|
||||||
|
<EFBFBD>
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1 @@
|
||||||
|
ヌA
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -1 +1 @@
|
||||||
フ q<>vU<76>|J<P
|
n[¦t'ÚÞ·>T…
|
||||||
|
|
@ -1 +1 @@
|
||||||
虂@q<>vU暾|J<P遲脮薼濨鷈H眛<04>1<EFBFBD>:┝诘佘-=<3D>輈B测镟=賞袗熉 胒願>2<>枤
|
n[¦t'Ϊή·>T…<1E>ΌR297l8HIΐ)ϋUZG–nάB±νΑ*¶Σhι¬ ®K<C2AE>b(Δ δt<11>=P_$4:γ‘g²u
|
||||||
Binary file not shown.
|
|
@ -1,2 +1,2 @@
|
||||||
ánDÆky =ø¢ƒí“K/Ë8l8Žâ<C5BD>™ÃÌNýNówû‡ìo…’Ÿôa"e!?_Ö
|
Ä<EFBFBD>½ëùÖ8þíÎDûÔ.º¨ø Dtê›üº«%Á,«mºZÖÔA¬
|
||||||
^&Mï„]Uâ7÷c~<V'ìhNà6i:¤‚¹-,t¢Wá¹ fuzz corpus msg
|
X';{H‰Ï
EeðÞ?3ëZa*m»°Êf;ºä®]%±ÈdESž‡•htHR³¯Å <C385>VËfuzz corpus msg
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
ánDÆky =ø¢ƒí“K/Ë8l8Žâ<C5BD>™ÂÌNýNówû‡ìo…’Ÿôa"e!?_Ö
|
Ä<EFBFBD>½ëùÖ8þíÎDûÔ.º¨ø Dtê›üº«%À,«mºZÖÔA¬
|
||||||
^&Mï„]Uâ7÷c~<V'ìhNà6i:¤‚¹-,t¢Wá¹ fuzz corpus msg
|
X';{H‰Ï
EeðÞ?3ëZa*m»°Êf;ºä®]%±ÈdESž‡•htHR³¯Å <C385>VËfuzz corpus msg
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1 @@
|
||||||
|
e<EFBFBD>]<5D><>&<26><>e<EFBFBD>]}<7D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&molo
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1 @@
|
||||||
|
躴览罒
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1 @@
|
||||||
|
utĄAAĽąRP‡z˙˙*.˙˙˙=˙˙˙˙˙˙+˙–Čż˙~(—u¨ň0
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1 @@
|
||||||
|
#AAј№Rzј†P‡яяяяяяяяяяяя+я–И@’щ~c—uЁт1
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
<EFBFBD>
|
||||||
|
|
@ -1 +1 @@
|
||||||
ţ+·śš%g<”şŃLWnH{0;‡×Ęţ4hďÜ—HΦ‰WĄčŮń°°Ú%şĐs‘‚^n
|
þ»Æææ8ÃÉ·ê<C2B7>EƒÎ5ñüž9ֹд<ú4…<15>ÎŒ¸b˰)óü–2O"
Ëä
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
4
soliton_capi/fuzz/Cargo.lock
generated
4
soliton_capi/fuzz/Cargo.lock
generated
|
|
@ -435,7 +435,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libsoliton"
|
name = "libsoliton"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"argon2",
|
"argon2",
|
||||||
"chacha20poly1305",
|
"chacha20poly1305",
|
||||||
|
|
@ -473,7 +473,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libsoliton_capi"
|
name = "libsoliton_capi"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libsoliton",
|
"libsoliton",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1 +1 @@
|
||||||
гУ^”Б7x[N`НЏйж<.EУЅ:‡‰КyЖсRП]
kр<gJ‘И\Ѓnу(@гуФp—ЭЛЊГZЄWЖ!QаЮ
|
<EFBFBD>¿…Q׃ז;ֻ׀³R›Yj<08>"יא5£<35>זֲK!ז?ֺ[¢{*ֵ<>ֹiAֵׁׁ,Gקֶ׀^של~&ט7›<37>@¦״j"¿Eל
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1 +1 @@
|
||||||
þUëŠ]teôYº§Ø˜E¾£ö”$<24>ÃSëÀá}ÉȉüÀ>Ú†VK%¸¹ôD‘†jqÄ|Dö
|
þ‚aj¹<¢/“q˜ò:êÌÑDå6. äJD4̈<>K×ïù·Óܾ~§A<C2A7>*Ú@wC’e<E28099>ë
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue