Пару моментов:
1) Bernstein
2) Немного оффтоп. Он же написал скрипт, который позволяет довольно наглядно сравнить разные стандарты цифровой подписи. Видно, как на самом деле они похожи
Однако использование непонятно как работающей реализации представляется немногим лучше
Вполне понятных реализаций довольно много. Например, tweetNaCl, написанная тем же Берштейном (для нее есть порты и на другие языки), если так трудно читать стандартный NaCl или libsodium код.
Проблема Вашей реализации в том, например, что она не учитывает side channel атаки. «Прозрачные» реализации полезны только для понимания работы (хотя и обычных формул для этого достаточно), на практике же их использовать нельзя — об этом стоит писать, а не о «don't implement your own crypto»
>Например, tweetNaCl, написанная тем же Берштейном
Я в процессе работы смотрел и ее. Да, она более понятна чем ref10, но там тоже много неясностей. Например, почему для извлечения корня там используется 2^252-3, а не 2^252-2? Что такое D2? Зачем нужно возводить d^2+1 в седьмую степень? Конечно, на все эти вопросы существуют ответы, но опять же это требует дополнительного изучения вопроса.
Ну, D2 — это, очевидно, удвоенное значение D.
Корень нужно извлекать не из скаляра (в таком случае действительно можно было возвести в степерь (p+3)/8), а из дроби u/v — потому что именно в таком виде хранятся координаты точки для ускорения вычислений. Отсюда, скорее всего, растут ноги (p-5)/8 = (p+3)/8-1 и седьмая степень. Все объяснения есть в статьях о Ed255 и Curve255
Разбираться в любом случае нужно, если цель — «для практического использования в I2P». Ваш код тоже, может, кому-то непонятен будет: у всех свой порог вхождения. Я не настоящий сварщик, но с TweetNaCl, думаю, разобраться можно за разумное время
Лично я надеюсь со временем разобраться с ref10 и использовать именно его. Просто надо идти от простого к сложного, и от работающего кода к работающему лучше.
Посмотрите историю изменений в любом файле на гитхабе — меня там больше нет. Некие люди воспользовались моими временным отсутствием там, что выглядит крайне некрасиво с их стороны. Когда я вернулся, то решил продолжать работу над проектом в собственном форке, заодно перейдя с crypto++ на openssl.
Во всех файлах проекта отсутствует история изменений. Как будто я два года этот проект не делал и вообще «вас тут не стояло».
Одному человеку были даны все права доступа к проекту совершенно для иных целей.
I2P: Прозрачная реализация подписи EdDSA