In this week I spent time doing a deeper reading of the Poseidon paper. I am currently working on an article that (hopefully) presents a simple explanation with code of the sponge construction and the Hades strategy used in Poseidon. First I will present a general algorithm of the sponge construction, and later, before the end of the week I plan to finish with an explanation of the Hades strategy. In the future I also want to make a discussion on the security and cryptanalisys of Poseidon; however, this is a more involved task and it will depend if it is really necessary to my project.
I already have the following questions that I will try to have an answer by Week 3.
ecrecover
, sha256
, sha3FIPS25
, ripemd-160
, Bn128Add
, Bn128Mul
, Bn128Pairing
, the identity function, and modular exponentiation; see here, here and here for more details. Is C a good option to write a precompile? There is a Go implementation in this link. I will leave this question for later.One of the goals I have with the EPF is to do more applied research and build things. I have been working for some years already on computational complexity, and I always touched cryptography one way or another. Advances in complexity goes hand in hand with advances in cryptographic research. I always liked my ivory tower, but now I feel that I want to go down and touch the grass.
During my studies this week I found something that I really enjoyed playing with, the libraries sodium
, blst
, and secp256k1
. I found that most if not all of blockchain networks are based on these three libraries. These are time-tested libraries for cryptographic primitives. One of the arguments against using Poseidon as a precompile is that it hasn't passed the test of time yet. This question, however, cannot be answered before Devconn this year.