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

Signed-off-by: Kamal Tufekcic <kamal@lo.sh>
This commit is contained in:
Kamal Tufekcic 2026-04-23 08:03:02 +03:00
commit 793b00ff4b
No known key found for this signature in database
198 changed files with 2254 additions and 21 deletions

View file

@ -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).
**Sign(sk, m)** → σ = (σ_E ‖ σ_P): both components computed independently and
concatenated. ML-DSA-65 uses hedged signing via `sign_internal` (FIPS 204 §5.2 /
Algorithm 2); fresh randomness is mixed per signing operation for
concatenated. ML-DSA-65 uses hedged signing via `sign_internal` (FIPS 204 §6.2 /
Algorithm 7); fresh randomness is mixed per signing operation for
fault-injection resistance. **FIPS 204 compatibility note**: The implementation
calls `sign_internal` directly — the raw internal signing function with no
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
calling `sign_internal`). A FIPS 204 §6.2 verifier expecting the domain-prefixed
message format will reject Soliton ML-DSA-65 signatures. A formal model or test
vector suite must use the `sign_internal` / `verify_internal` interface, not the
§6.2 external interface. For adversary models that include fault injection,
§5.2 (`ML-DSA.Sign` / Algorithm 2, which prepends a context-dependent domain
separator before calling `sign_internal`). A FIPS 204 §5.2 verifier expecting
the domain-prefixed message format will reject Soliton ML-DSA-65 signatures. A
formal model or test vector suite must use the `sign_internal` /
`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
deterministic signing does not. **RNG implication**: Every HybridSig.Sign
invocation consumes randomness (from ML-DSA-65's hedged component). In the §8.2

View file

@ -19,7 +19,7 @@ edition = "2024"
rust-version = "1.85"
license = "AGPL-3.0-only"
repository = "https://git.lo.sh/lo/libsoliton"
homepage = "https://lo.sh"
homepage = "https://git.lo.sh/lo/libsoliton/wiki"
authors = ["LO Contributors"]
description = "Cryptographic library for the LO protocol"
categories = ["cryptography"]

View file

@ -8,6 +8,7 @@ Pure-Rust post-quantum cryptographic library. Provides composite identity keys (
| 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 |
| [Specification.md](Specification.md) | Full cryptographic specification (v1) |
| [CHEATSHEET.md](CHEATSHEET.md) | API quick reference with types, sizes, and signatures |

View file

@ -16,6 +16,7 @@ fi
HOURS="${1:-8}"
WORKERS="${2:-1}"
# Change to 3600 for overnight runs, 1 is used for quick local runs
SECONDS_TOTAL=$((HOURS * 1))
CORE_DIR="soliton"

2223
soliton.tex Normal file

File diff suppressed because it is too large Load diff

View file

@ -435,7 +435,7 @@ dependencies = [
[[package]]
name = "libsoliton"
version = "0.1.0"
version = "0.1.1"
dependencies = [
"argon2",
"chacha20poly1305",

View file

@ -1 +1 @@
d怹°–¹@©Âº@eæTRV§‡ |ç¿ZAÙI/˜jA\ñ ; ­ð Ÿ
x<EFBFBD>e)S<13><><EFBFBD><EFBFBD> <EFBFBD>^<14>ب8ٍ<38>v­<>7+ق<><D982>N<EFBFBD><4E><EFBFBD>الحEf<45><66>OJx<4A>}ث6G9G

View file

@ -1 +1 @@
フ q<>vU<76>|J<P
n[¦t'ÚÞ·>T…

View file

@ -1 +1 @@
虂@q<>vU暾|J<P遲脮薼濨鷈H眛<04>1<EFBFBD>:┝诘佘-=<3D>B测镟=賞袗熉 願>2<>
n[¦t'Ϊή·>T…<1E>ΌR297l8HIΐ)ϋUZGnάB±νΑ*¶Σhι¬ ®K<C2AE>b(Δ δt<11>=P_$4:γg²u

View file

@ -1,2 +1,2 @@
ánDÆky =ø¢ƒí “K/Ë8l8Žâ<C5BD>™ÃÌNýNówû‡ìo…Ÿôa"e!?_Ö
^&Mï„]U â7÷c~<V'ìhNà6i:¤‚¹-,t¢Wá¹ fuzz corpus msg
Ä<EFBFBD>½ëùÖ8þíÎDûÔ.º¨ø Dtêüº«%Á,«mºZÖÔA¬
X';{H‰Ï EeðÞ?3ëZa*m»°Êf;ºä®]%±ÈdESž‡•htHR³¯Å <C385>fuzz corpus msg

View file

@ -1,2 +1,2 @@
ánDÆky =ø¢ƒí “K/Ë8l8Žâ<C5BD>™ÂÌNýNówû‡ìo…Ÿôa"e!?_Ö
^&Mï„]U â7÷c~<V'ìhNà6i:¤‚¹-,t¢Wá¹ fuzz corpus msg
Ä<EFBFBD>½ëùÖ8þíÎDûÔ.º¨ø Dtêüº«%À,«mºZÖÔA¬
X';{H‰Ï EeðÞ?3ëZa*m»°Êf;ºä®]%±ÈdESž‡•htHR³¯Å <C385>fuzz corpus msg

View file

@ -0,0 +1 @@
e<EFBFBD>]<5D><>&<26><>e<EFBFBD>]}<7D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&molo

View file

@ -0,0 +1 @@
utĄAAĽąRP‡z˙˙*.˙˙˙=˙˙˙˙˙˙+˙–Čż˙~(—u¨ň0

View file

@ -0,0 +1 @@
#AAј№RzјP‡яяяяяяяяяяяя+я–И@’щ~c—uЁт1

View file

@ -1 +1 @@
ţ+·śš%g<”şŃLWnH{0;­×Ęţ4hďÜ—HΦ‰W­ĄčŮń°°Ú%şĐs^n
þ»Æææ8ÃÉ·ê<C2B7>EƒÎ5ñüž9ֹд<ú4 <15>ÎŒ¸b˰)óü–2O" Ëä

View file

@ -435,7 +435,7 @@ dependencies = [
[[package]]
name = "libsoliton"
version = "0.1.0"
version = "0.1.1"
dependencies = [
"argon2",
"chacha20poly1305",
@ -473,7 +473,7 @@ dependencies = [
[[package]]
name = "libsoliton_capi"
version = "0.1.0"
version = "0.1.1"
dependencies = [
"libsoliton",
"zeroize",

View file

@ -1 +1 @@
гУ^”Б7x[N`НЏйж<.EУЅ:‡‰КсRП] kр<gJИ\Ѓnу(@гуФp—ЭЛЊГZЄWЖ!QаЮ
<EFBFBD>¿…Q׃ז;ֻ׀³RYj<08>"יא5£<35>זֲK!ז?ֺ[¢{*ֵ<>ֹiAֵׁׁ,Gקֶ׀^של~&ט7<37>@¦״j"¿

View file

@ -1 +1 @@
þUëŠ]te ôYº§Ø˜E¾£ö”$<24>ÃSëÀá}ÉȉüÀ>Ú†VK%¸¹ôD †jqÄ|Dö
þaj¹<¢/“q˜ò:êÌÑDå6. äJD4̈<>K×ïù·Óܾ~§A<C2A7>*Ú@wCe<E28099>ë