Archive Complete list of all 28 blog posts: 2025.02.15 A gentle introduction to shielded transactions 2023.03.07 Bringing Zero-Knowledge Proofs to Penumbra 2022.12.05 Poseidon377, our instantiation of a SNARK-friendly hash 2022.09.05 Commitment Schemes 101 2020.12.17 Getting started in Rust and WebAssembly 2020.12.06 Creating Python extensions in Rust using PyO3 2020.11.10 Continuous threat modeling, Part 1: Tooling wish list 2020.10.22 Investigating the Signal Protocol, Part 3: Web applications 2020.10.14 Investigating the Signal Protocol, Part 2: Groups, devices 2020.10.11 Investigating the Signal Protocol, Part 1: Foundations 2020.10.06 Scanning for onion service availability 2020.08.01 Tracking which wheels can be reproducibly built 2020.07.31 Using HTTPS Everywhere rules for SecureDrop onion names 2020.07.31 Protecting journalists from malware using QubesOS 2020.01.13 Handling equal priority jobs using queue.PriorityQueue 2020.01.12 A pytest fixture for image similarity 2019.12.01 How to apply unittest.mock.patch 2019.11.29 Implementing the CBC padding oracle attack 2019.11.25 Using pyreverse to generate UML class diagrams 2019.11.23 Debugging programs with pdb 2019.07.19 Strategies for handling flaky test suites 2019.05.19 Collision attacks and the birthday paradox 2018.06.21 Why Publishing Data on ICE Employees is in the Public Interest 2018.03.30 Visualizing Cosmological Power Spectra with d3.js 2017.03.31 How SecureDrop Works 101 2016.09.29 Inside the Chicago Police Department's Secret Budget 2016.01.19 Primer on Police Surveillance 2015.08.29 Manipulation and Machine Learning