{"id":21526973,"url":"https://github.com/lambdaclass/sparkling_water_bootcamp","last_synced_at":"2025-10-16T23:06:01.181Z","repository":{"id":194123245,"uuid":"690160723","full_name":"lambdaclass/sparkling_water_bootcamp","owner":"lambdaclass","description":"Public repository for excersices, challenges and all the needs of the Sparkling Water Bootcamp","archived":false,"fork":false,"pushed_at":"2024-10-14T12:13:56.000Z","size":13450,"stargazers_count":134,"open_issues_count":0,"forks_count":25,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-03-17T18:49:15.691Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lambdaclass.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-11T16:41:53.000Z","updated_at":"2025-03-14T08:26:06.000Z","dependencies_parsed_at":"2023-10-02T16:21:56.364Z","dependency_job_id":"228841e8-b5d4-41b4-8802-d2326a8d3f17","html_url":"https://github.com/lambdaclass/sparkling_water_bootcamp","commit_stats":null,"previous_names":["lambdaclass/sparkling_water_bootcamp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lambdaclass/sparkling_water_bootcamp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lambdaclass%2Fsparkling_water_bootcamp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lambdaclass%2Fsparkling_water_bootcamp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lambdaclass%2Fsparkling_water_bootcamp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lambdaclass%2Fsparkling_water_bootcamp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lambdaclass","download_url":"https://codeload.github.com/lambdaclass/sparkling_water_bootcamp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lambdaclass%2Fsparkling_water_bootcamp/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265553173,"owners_count":23787032,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-24T01:47:23.641Z","updated_at":"2025-10-16T23:06:01.090Z","avatar_url":"https://github.com/lambdaclass.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lambda's Sparkling Water Bootcamp - Repo for challenges and learning path\n\nPublic repository for exercises, challenges and all the needs of the Sparkling Water Bootcamp.\n\n## Week 1 - Forging your tools: Finite Fields\n\nThis first week will be focused on the development of one of the building blocks of Cryptography: Finite Fields. \n\n### Recommended material:\n\n- [An introduction to mathematical cryptography](https://books.google.com.ar/books/about/An_Introduction_to_Mathematical_Cryptogr.html?id=BHuTQgAACAAJ\u0026source=kp_book_description\u0026redir_esc=y) - Chapter 1.\n- [Finite Fields](https://www.youtube.com/watch?v=MAhmV_omOwA\u0026list=PLFX2cij7c2PynTNWDBzmzaD6ij170ILbQ\u0026index=8)\n- [Constructing finite fields](https://www.youtube.com/watch?v=JPiXFn9WA5Y\u0026list=PLFX2cij7c2PynTNWDBzmzaD6ij170ILbQ\u0026index=6)\n- [Cyclic groups](https://www.youtube.com/watch?v=UIhhs38IAGM\u0026list=PLFX2cij7c2PynTNWDBzmzaD6ij170ILbQ\u0026index=3)\n- [Summary on Montgomery arithmetic](https://eprint.iacr.org/2017/1057.pdf)\n- [Mersenne primes](https://eprint.iacr.org/2023/824.pdf)\n\n### Challenges:\n\n- [Implement Montgomery backend for 32 bit fields](https://github.com/lambdaclass/lambdaworks/issues/538).\n- [Implement efficient Mersenne prime backend](https://github.com/lambdaclass/lambdaworks/issues/540).\n- [Implement efficient backend for pseudo-Mersenne primes](https://github.com/lambdaclass/lambdaworks/issues/393).\n- Compare specific field implementations with ordinary Montgomery arithmetic.\n\n### Cryptography content:\n\n- [Serious Cryptography](https://books.google.com.ar/books/about/Serious_Cryptography.html?id=1D-QEAAAQBAJ\u0026source=kp_book_description\u0026redir_esc=y), Chapters 9 \u0026 10.\n\n### Exercises\n- Implement naïve version of RSA.\n- $7$ is a generator of the multiplicative group of $Z_p^\\star$, where $p = 2^{64} - 2^{32} +1$. Find the generators for the $2^{32}$ roots of unity. Find generators for subgroups of order $2^{16} + 1$ and $257$.\n- Define in your own words what is a group, a subgroup, a ring and a field.\n- What are the applications of the Chinese Remainder Theorem in Cryptography?\n- Find all the subgroups of the multiplicative group of $Z_{29}^\\star$\n\n## Supplementary Material\n- [Polynomial Secret Sharing](https://decentralizedthoughts.github.io/2020-07-17-polynomial-secret-sharing-and-the-lagrange-basis/)\n- [Polynomials over a Field](https://decentralizedthoughts.github.io/2020-07-17-the-marvels-of-polynomials-over-a-field/)\n- [Fourier Transform](https://www.youtube.com/watch?v=spUNpyF58BY)\n- [Fast Fourier Transform](https://www.youtube.com/watch?v=h7apO7q16V0)\n\n## Week 2 - Enter Elliptic Curves\n\nDuring the second week we'll continue with Finite Fields and begin with Elliptic Curves and dive deeper into Rust\n\n### Recommended material\n\n- [Moonmath Manual](https://leastauthority.com/community-matters/moonmath-manual/) - Chapter 5, until 5.3\n- [Programming Bitcoin](https://books.google.fr/books/about/Programming_Bitcoin.html?id=O2aHDwAAQBAJ\u0026source=kp_book_description\u0026redir_esc=y) - Chapters 2 \u0026 3.\n- [Introduction to Mathematical Cryptography](https://books.google.com.ar/books/about/An_Introduction_to_Mathematical_Cryptogr.html?id=BHuTQgAACAAJ\u0026source=kp_book_description\u0026redir_esc=y) - Chapter 5 until 5.5\n- [Serious Cryptography](https://books.google.com.ar/books/about/Serious_Cryptography.html?id=1D-QEAAAQBAJ\u0026source=kp_book_description\u0026redir_esc=y) - Chapters 11 \u0026 12.\n- [Pairings for Beginners](https://static1.squarespace.com/static/5fdbb09f31d71c1227082339/t/5ff394720493bd28278889c6/1609798774687/PairingsForBeginners.pdf) - Chapters 1 \u0026 2\n\n### Exercises\n\n- Define an elliptic curve element type.\n- Implement the basic operations: addition and doubling.\n- Implement scalar multiplication.\n- Check that the point belongs to the correct subgroup.\n- The BLS12-381 elliptic curve is given by the equation $y^2 = x^3 + 4$ and defined over $\\mathbb{F}_p$ with p = 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab. The group generator is given by the point p1 = (0x04, 0x0a989badd40d6212b33cffc3f3763e9bc760f988c9926b26da9dd85e928483446346b8ed00e1de5d5ea93e354abe706c) and the cofactor is $h_1 = 0x396c8c005555e1568c00aaab0000aaab$. Find the generator $g$ of the subgroup of order \nr = 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001.\n- Implement a naïve version of the Diffie - Hellman protocol\n- Implement point compression and decompression to store elliptic curve points\n\n### Challenges\n\n- Special CTF challenge (will be revealed later)\n- [Implement BN254](https://github.com/lambdaclass/lambdaworks/issues/548)\n- Implement Secp256k1\n- Implement Ed25519\n\n### Rust Workshop\n\n- [Aguante Rust](https://youtu.be/nYpMbjzb1t8?si=HNanyXYWcu1xDjG5)\n\n## Week 3: Polynomials\n\n### Recommended material\n\n- [Polynomials](https://www.youtube.com/watch?v=HiaJa3yhHTU\u0026list=PLFX2cij7c2PynTNWDBzmzaD6ij170ILbQ\u0026index=6)\n- [Lagrange interpolation](https://www.youtube.com/watch?v=REnFOKo9gXs\u0026list=PLFX2cij7c2PynTNWDBzmzaD6ij170ILbQ\u0026index=10)\n- [Lagrange interpolation and secret sharing](https://www.youtube.com/watch?v=3g4wZnhl4m8\u0026list=PLFX2cij7c2PynTNWDBzmzaD6ij170ILbQ\u0026index=3)\n- [Moonmath](https://leastauthority.com/community-matters/moonmath-manual/) - Chapter 3.4\n- [Convolution polynomial rings - Introduction to Mathematical Cryptography](https://books.google.com.ar/books/about/An_Introduction_to_Mathematical_Cryptogr.html?id=BHuTQgAACAAJ\u0026source=kp_book_description\u0026redir_esc=y) - Chapter 6.9\n\n### Supplementary\n\n- [Roots of unity and polynomials](https://www.youtube.com/watch?v=3KK5RuAgOpA\u0026list=PLFX2cij7c2PynTNWDBzmzaD6ij170ILbQ\u0026index=2)\n- [Fast Fourier Transform](https://www.youtube.com/watch?v=toj_IoCQE-4)\n- [FFT walkthrough](https://www.youtube.com/watch?v=Ty0JcR6Dvis)\n\n### Exercises\n\n- Define a polynomial type.\n- Implement basic operations, such as addition, multiplication and evaluation.\n- Implement Lagrange polynomial interpolation.\n- Implement basic version of Shamir's secret sharing.\n\n### Issue\n\n- [Implement Stockham FFT](http://wwwa.pikara.ne.jp/okojisan/otfft-en/stockham1.html)\n\n## Week 4: STARKs\n\n### Recommended material\n\n- [STARKs by Sparkling Water Bootcamp](https://www.youtube.com/watch?v=cDzTm3clrEo)\n- [Lambdaworks Docs](https://github.com/lambdaclass/lambdaworks/tree/main/docs/src/starks)\n- [Stark 101](https://github.com/starkware-industries/stark101)\n- [Constraints](https://blog.lambdaclass.com/periodic-constraints-and-recursion-in-zk-starks/)\n- [Stark 101 - rs](https://github.com/lambdaclass/stark101-rs/)\n- [Anatomy of a STARK](https://aszepieniec.github.io/stark-anatomy/)\n- [BrainSTARK](https://aszepieniec.github.io/stark-brainfuck/)\n- [A summary on FRI low degree testing](https://eprint.iacr.org/2022/1216)\n- [STARKs by Risc0](https://dev.risczero.com/reference-docs/about-starks)\n\n### Exercises\n\n- Complete STARK-101\n\n## Week 5: Symmetric encryption\n\n### Recommended material\n\n- [One time pad - Dan Boneh](https://www.youtube.com/watch?v=pQkyFJp2eUg\u0026list=PL58C6Q25sEEHXvACYxiav_lC2DqSlC7Og\u0026index=6)\n- [Stream ciphers and pseudorandom generators - Dan Boneh](https://www.youtube.com/watch?v=ZSjTMSvp-eI\u0026list=PL58C6Q25sEEHXvACYxiav_lC2DqSlC7Og\u0026index=7)\n- [Attacks - Dan Boneh](https://www.youtube.com/watch?v=Qm8fycVt5v8\u0026list=PL58C6Q25sEEHXvACYxiav_lC2DqSlC7Og\u0026index=8)\n- [Semantic security - Dan Boneh](https://www.youtube.com/watch?v=6LFyXO58F4A\u0026list=PL58C6Q25sEEHXvACYxiav_lC2DqSlC7Og\u0026index=11)\n- [Block ciphers - Dan Boneh](https://www.youtube.com/watch?v=dzoqxqfpZB4\u0026list=PL58C6Q25sEEHXvACYxiav_lC2DqSlC7Og\u0026index=35)\n- [Serious Cryptography](https://books.google.com.ar/books/about/Serious_Cryptography.html?id=1D-QEAAAQBAJ\u0026source=kp_book_description\u0026redir_esc=y) - Chapters 3 - 5.\n\n### Supplementary material\n\n- [AES - NIST](https://nvlpubs.nist.gov/nistpubs/fips/nist.fips.197.pdf)\n\n### Exercises\n\n- Implement AES round function\n\n### Side project - Multilinear polynomials\n\n- [Proofs, Args and ZK](https://people.cs.georgetown.edu/jthaler/ProofsArgsAndZK.pdf)\n\n### Mandatory task\n\n- Choose a project: STARKs, Sumcheck protocol or Groth16 (or propose a new project)\n\n### Additional resources for each project\n\n- STARKs: see week 4.\n- [Groth16](https://eprint.iacr.org/2016/260.pdf)\n- [DIZK - Groth 16](https://eprint.iacr.org/2018/691.pdf)\n- [Multilinear polynomials and sumcheck protocol](https://people.cs.georgetown.edu/jthaler/ProofsArgsAndZK.pdf)\n\n#### Challenges\n\n- Implement a multilinear polynomial type with all the basic operations.\n\n## Week 6: Interactive proofs and SNARKs\n\n- [Moonmath](https://leastauthority.com/community-matters/moonmath-manual/) Chapters 6 - 8.\n- [Proofs, Arguments and Zero Knowledge](https://people.cs.georgetown.edu/jthaler/ProofsArgsAndZK.pdf) Chapters 1 - 5.\n- [Overview of modern SNARK constructions](https://www.youtube.com/watch?v=bGEXYpt3sj0)\n- [Pinocchio protocol overview](https://www.zeroknowledgeblog.com/index.php/zk-snarks)\n- [Pinocchio implementation](https://github.com/lambdaclass/pinocchio_lambda_vm)\n- [SNARKs and STARKs](https://zkhack.dev/whiteboard/module-four/)\n\n### Additional material on some proof systems\n\n- [EthSTARK](https://github.com/starkware-libs/ethSTARK/tree/master)\n- [EthSTARK - paper](https://eprint.iacr.org/2021/582)\n- [STARK paper](https://eprint.iacr.org/2018/046.pdf)\n- [DEEP FRI](https://eprint.iacr.org/2019/336)\n- [Proximity gaps](https://eprint.iacr.org/2020/654)\n- [STARKs by Eli Ben-Sasson I](https://www.youtube.com/watch?v=9VuZvdxFZQo)\n- [STARKs by Eli Ben-Sasson II](https://www.youtube.com/watch?v=L7tZeO8ihcQ)\n\n## Week 7: Plonk\n\n- [Plonk](https://eprint.iacr.org/2019/953)\n- [Custom gates](https://zkhack.dev/whiteboard/module-five/)\n- [Plonk by hand](https://research.metastate.dev/plonk-by-hand-part-1/)\n- [Plonk docs in Lambdaworks](https://github.com/lambdaclass/lambdaworks/tree/main/docs/src/plonk)\n\n## Week 8: Lookup arguments\n\n- [Plookup](https://eprint.iacr.org/2020/315.pdf)\n- [LogUp and GKR](https://eprint.iacr.org/2023/1284.pdf)\n- [Neptune - Permutation Argument](https://neptune.cash/learn/tvm-cross-table-args/)\n- [Randomized AIR with preprocessing](https://hackmd.io/@aztec-network/plonk-arithmetiization-air)\n- [PlonkUp](https://eprint.iacr.org/2022/086.pdf)\n- [Lookups by Ingonyama](https://medium.com/@ingonyama/a-brief-history-of-lookup-arguments-a4eeeeca2749)\n- [LogUp](https://eprint.iacr.org/2022/1530.pdf)\n- [Lookups - Halo2](https://zcash.github.io/halo2/design/proving-system/lookup.html)\n\n## Week 9: Signatures\n\n- [BLS signatures](https://www.ietf.org/archive/id/draft-irtf-cfrg-bls-signature-05.html#name-introduction-2)\n- [Real World Cryptography](https://books.google.com.ar/books/about/Real_World_Cryptography.html?id=Qd5CEAAAQBAJ\u0026source=kp_book_description\u0026redir_esc=y) Chapter 7\n- [ECDSA](https://www.rfc-editor.org/rfc/rfc6605.txt)\n- [RSA Signature](https://www.ietf.org/rfc/rfc8017.html#section-5.2)\n\n## Week 10: Folding schemes\n\n- [Nova by Justin Drake](https://zkhack.dev/whiteboard/module-fourteen/)\n- [Nova](https://eprint.iacr.org/2021/370)\n- [SuperNova](https://eprint.iacr.org/2022/1758)\n- [ProtoStar](https://eprint.iacr.org/2023/620)\n- [ProtoGalaxy](https://eprint.iacr.org/2023/1106)\n\n## Projects\n\n- Implement IPA commitment scheme\n- Implement Jacobian coordinates for Elliptic Curves\n- Benchmark elliptic curve operations\n- Add improvements to fixed base scalar multiplication in Elliptic Curves\n- Add BN254 elliptic curve\n- Implement Pasta curves\n- Implement Lookup arguments for Plonk (Plookup)\n- Sumcheck protocol\n- Benchmark and optimize multilinear polynomial operations\n- Import circuits from gnark or circom to use with Groth16 backend\n\n### Links to repos with solutions to the exercises\n- [Naïve ECC](https://github.com/saitunc/naive_ecc)\n- [Crypto](https://github.com/irfanbozkurt/crypto)\n- [Naïve RSA](https://github.com/WiseMrMusa/rsa-naive)\n- [Naïve RSA](https://github.com/Elvis339/naive_rsa)\n- [Exercises from weeks 1 \u0026 2](https://github.com/ArpitxGit/sparkling_water_bootcamp/tree/main)\n- [Programming bitcoin EC](https://github.com/Elvis339/rbtc)\n- [Shamir secret sharing](https://github.com/cliraa/shamir_secret_sharing)\n- [Several exercises](https://github.com/ArpitxGit/sparkling_water_bootcamp/tree/main)\n\n### Intended Roadmap\n\n- Finite Fields\n- Elliptic Curves\n- Polynomials\n- Extension fields\n- Pairings\n- Public key encryption\n- Symmetric encryption\n- Hash functions\n- Signatures\n- Authenticated encryption\n- SNARKs\n- STARKs\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flambdaclass%2Fsparkling_water_bootcamp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flambdaclass%2Fsparkling_water_bootcamp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flambdaclass%2Fsparkling_water_bootcamp/lists"}