Search projects, hackathons, sponsors and tech

    ← All projects

    O1JS SHA256 Hash Function Circuit

    This project uses the o1js SDK to optimize the SHA256 circuit implementation by operating on the 32-bit words(32 field elements) as a single field element utilizing native binary gadgets.

    About

    The problem it solves Using efficient binary hash function inside zk circuits

    How it's made

    Challenges we ran into - The native binary gadgets in O1JS are hard-coded to operate on 64-bit Field elements which made it not practical to develop SHA256 swiftly. - The rotate, shift, and rangeCheck functions in o1js are not flexible and only operate on 64-bit field elements. - I tried to simulate the bitwise functions as in sha256 circuit in circomlib but I hadn't enough time to debug and make things work correctly. - The library is quite rich but I sometimes spend a lot of time trying to find documentation for certain API. - Working with a DSL used a TS framework made practical and flexible to implement logic and have a development experience similar to normal TS language, but sometimes I feel that I am a bit lost distinguishing circuit logic from the normal TS logic, Other DSL having kind of different language helped me before to have a clearer mental model. - It would have been better to have a better documentation in general to save time from reading and looking at the source code intensively.