Skip to content

Simple ristretto255 written in C (from scratch), ec25519 arithmetic is based on Bernstein's TweetNaCl library. !! The code is still under development, so it is not complete and fully functional, but it will be updated !!!

Notifications You must be signed in to change notification settings

Alg0ritmus/textbook_ristretto255

Repository files navigation

Spustenie:

Python - python test.py(windows)
C - comp.bat(windows)

Progress:

27.1.2024

v referencnej python impl. sme otestovali techniku modulo 2P a na vhodne miesta dosadili redukciu... redukcia bola dosadena do: fneg() a is_neg funkcie

23.6.2023

BIG CHANGES!!
V tomto update som pridal konstanty ako napr. FIELED_ELEM_SIZE (vid. ristretto255.h).
Pridal a otestoval som inverziu mod L inspirovanu kniznicou Monocypher.
Ristretto konstanty boli presunute do ristretto255, od teraz su deklarovane ako staticke premenne.
Funkcie, kt. vyuzivali velke mnozstvo premenny som optimalizoval z hladiska pamate (problem so zasobnikom).
Doslo k vymene funkcii pre scitanie 2 ristretto bodov (predtym inspirovane libsodiom, teraz su z tweetNaCl).
Podobne doslo k vymene funkcie pre vypocet a^(2^523), predtym ristertto-donna, teraz tweetNaCl.
Vsetky kody, kt. su z tweetNaCl su od teraz vyznacene komentarom a mozu sa od povodnej impl.
lisit najma zmenou nazvu funkcie alebo preskupenim krokov vo vypocte (napr. kvoli optimalizacii spomenutej vyssie).
Ku kazdej funkcii je napisane zhruba kolko dana funkcia vnutorne "vyuziva pamate",
(nie v bajtoch ale pocet dannych premenntych vid. ristretto255.c).

Precistil som kod, nahradil TABS medzerami a preskupil nejake funkcie atd.

17.6.2023

Vytvoril som skalarny sucin pre ristretto255 body (t.j. ristretto255_point * scalar). Doplnil som automatizovane jednotkove testy pre tento sucin(main.c).

Pri implementacii skalarneho sucinu som sa inspiroval kodom z tweetNaCl.
Nasledne som skalarny sucin implementoval aj do Pythonu a otestoval.

Kozmeticke upravy & debugging:

  1. Bol fixnuty bug pri jednotkovych testoch, od teraz (pri prepinaci -DVERBOUS_FLAG) mozeme vidiet ktory vektor nepresiel testom. Doteraz to bolo tak, ze ak nastala chyba pri nejakom vektore, vsetky ostatne boli vyhodnotene ako FAIL.
  2. Bol pridany utils.c -> odseparoval som definiciu a deklaraciu do separatnych suborov.
  3. ristretto255.h od teraz obsahuje len uzivatelovi pristupne funkcie, vsetky ostatne funckie su deklarovane ako staticke (vid. ristretto255.c).

14.6.2023

Doplnil som automatizovane jednotkove testy v maine a taktiez som pridal prepinac na vypis jednotlivych testov (-DVERBOSE_FLAG) spolu
s prepinacom na chybove hlasky, ktore sa vyskytuju v pripade roznych chyb ktore mozu nastat napr. pri ristretto255_decode (-DDEBUG_FLAG).
Prepinace (v subore comp.bat) by mohli vyzerat nejak takto:

  1. gcc -O0 -DDEBUG_FLAG -Wall -Wno-unused-value -Wextra -o main main.c ristretto255.c && main.exe
  2. gcc -O0 -DVERBOUS_FLAG -Wall -Wno-unused-value -Wextra -o main main.c ristretto255.c && main.exe
  3. gcc -O0 -DVERBOUS_FLAG -DDEBUG_FLAG -Wall -Wno-unused-value -Wextra -o main main.c ristretto255.c && main.exe

Co sa tyka CT(constant time) funkcii:

  1. upravil som funkciu fabsolute, tak aby pracovala v konstantnom case
  2. CT_SELECT je vlastne swap25519 ked sa nad tym zamyslime, cize vyuzil som funkciu swap25519 priamo z tweetnacl

10.6.2023

Uspesne som implementoval funkciu hash_to_group a otestoval ju pomocou testovacich vektorov z draftu aj pre jazyk C. Trochu som kod precistil a vyhodil co netreba.
Dalsim krokom bude re-implementovat niektore funkcie ako vykonavali ukony v konstantnom case (napr absolut. hodnota + implementovat (CT_SELECT, CT_EQ, CT_NEG, CT_ABS)).


24.5.2023

Uspesne som implementoval som funkciu hash_to_group a otestoval pomocou testovacich vektorov z draftu. Od poslednej upravy kodu som prisiel na to,
ze chyba v hash_to_group suvisela najma s maskovanim LSB + s nejakymi inymi mensimi chybami v kode. Zaroven scitanie bodov bodov vo funkcii hash_to_group
vyuziva scinatie edwardsovych bodov z libsodia (libsodium_add.py). Dalej som precistil a okomentoval Python kod a pridal testovacie vektory (z draftu/ rust impl.).
Dalsim krokom bude implementovat hash_to_group aj v jazyku C a zaroven implementovat aj nasobenie bodu ristretto skalarom.


13.5.2023

Otestoval som ci kniznica ge25519 dava vysledky zhodujuce sa s testovacimi
vektormi v drafte (ano, zhoduju sa). Kniznica je vhodna na detailnejsiu analyzu v pripade potreby.
Bohuzial kvoli inej reprezentacii cisel (oni pouzivaju fe25519) neviem otestovat vysledky v medzivypoctoch (iba konecny vysledok).
Funkciu hash_to_group() sa mi zatial nepodarilo uspesne implementovať, pravdepodobne bude problem v scitani.
Prave kvoli tomu som vyskusal viacero sposobov scitania bodu na Edwardsovej krivke (vid. nizsie), avsak zatial neuspesne.
Precistil som kod a taktiež ho rozdelil kod do viacerych suborov kvoli prehladnosti:

  1. constants.py - obsahuje vsetky konstanty (z draftu)
  2. scitanie bodu:
    2.1) ADD z TweetNaCl sa nachádza v subore: bernstein.py, názov funkcie je Fadd()
    2.2) scitanie z libsodia sa nachádza v subore: libsodium_add.py, názov funkcie je ge25519_p3_add()
    2.3) scitanie z paper sa nachádza v subore: edwardsc_paper_add.py, názov funkcie je edwards_addition()

28.4.2023:

Upravil som bug v decode pre C aj Python kod
Pridal som "testovaci vektor", t.j. validny vektor u8 VECTOR_TEST2[32] v maine.
Warningy som ponechal (ostali len tie s unused variables - tie casto pouzivam pri debuggovani takze som ich tam este nechal).


Zaver: Otestoval som decoding/encoding na vektore VECTOR_TEST2. Po kombinácii de/en-code dostanem input==output.
Z toho súdim, že impl. by mala byť zatiaľ v poriadku. Ďalším krokom je porovnanie s dalsimi impl. a vytvorenie hash_to_group (kt. chyba v drafte? element derivation function)

23.4.2023:

Upravil som funckie encode/decode, podľa draftu ristretto255.
Taktiež som upravil funkciu feq() pretože na vracala chybne výsledky.
Prečistil som kód od warningov (ostali len tie s unused variables - tie casto pouzivam pri debuggovani takze som ich tam este nechal).


Zaver: Dokončil som Impl. ristretta255 pre Python ale aj C, výsledky dávaju identické a ďalším krokom je otestovanie, či impl. funguju správne.

About

Simple ristretto255 written in C (from scratch), ec25519 arithmetic is based on Bernstein's TweetNaCl library. !! The code is still under development, so it is not complete and fully functional, but it will be updated !!!

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published