Этот репозиторий содержит два смарт‑контракта(реализованы в рамках Летней школы по криптографии 2025) для поддержки верификации постквантовых подписей Falcon‑512 в сети Ethereum:
- HashToPoint.sol – реализация функции формирования «точки решётки» из сообщения (Hash‑to‑Point) с фиксацией солей и оптимизированным вызовом
keccak256. - FalconDecompressor.sol – реализация функции декомпрессии (Decompress), восстанавливающей коэффициенты полинома из сжатого битового представления.
Контракты предназначены для использования в механизме абстракции аккаунта (Account Abstraction, ERC‑4337) при верификации постквантовых подписей Falcon‑512 на Ethereum. Они позволяют:
- Преобразовать произвольное сообщение в набор полиномиальных коэффициентов по модулю
q. - Восстановить оригинальные коэффициенты подписи из компактного представления.
hash_to_point(uint256 q, uint256 n, string message) external view returns (uint256[] memory)
Формирует массив изnчисел по модулюqиз хеша сообщения.shake(string message) private view returns (bytes memory)
Псевдо‑реализация SHAKE256 через 64 итерацииkeccak256(salt[i] || message)с фиксированными сольюSALTS[i].
Эффективность
- Вариант оптимизирован: расход газа ≈ 750 000 вместо ≈ 5 000 000 у оригинала zkNOX.
decompress(bytes calldata data, uint256 n) external payable returns (int256[] memory)
Декодирует битовую строкуdataдлиной ≥9·nбит, восстанавливая массив изnцелых коэффициентов:- Чтение бита знака;
- Чтение 7 младших бит абсолютного значения;
- Подсчёт количества старших нулевых бит (k) до первого единичного;
- Восстановление
val = abs7 + (k << 7), с учётом знака. - Проверка, что все оставшиеся биты нулевые.
Эффективность
- Средний расход газа на выполнение функции≈ 4 000 000.
| Функция | Вариант | Расход газа |
|---|---|---|
| Hash-to-point | Оптимизация | ~750 000 |
| Decompress | Наша версия | ~4 000 000 |
git clone git@github.com:kb-nik/hash-to-point-falcon512.git
cd hash-to-point-falcon512