ppad-tech contains a bunch of foundational cryptography (and adjacent) libraries. The ones listed below generally have, to my knowledge, best-in-class performance and security properties.
fixed is a high-performance library for constant-time arithmetic on large fixed-width integers, with support for Montgomery form over two secp256k1-related domains.
secp256k1 is a fast, constant-time Haskell implementation of BIP340 Schnorr signatures, RFC6979 deterministic ECDSA, and ECDH on secp256k1, and csecp256k1 contains Haskell FFI bindings to bitcoin-core/secp256k1 (i.e. libsecp256k1).
sha256 and sha512 are fast Haskell implementations of their respective secure hashing algorithms & HMACs, availing of ARM hardware acceleration when available.
hmac-drbg is a pure Haskell implementation of the HMAC-DRBG CSPRNG (n.b., this one has been subject to an interesting analysis in which I demonstrated that wiping the DRBG state really wipes the DRBG state).
chacha provides the ChaCha20 stream cipher and poly1305 the Poly1305 MAC, both per RFC8439. aead contains a ChaCha20-Poly1305 construction for AEAD. All are constant-time, and poly1305 avails of ARM hardware acceleration when available.
bip32 is a pure Haskell implementation of the BIP32 hierarchical deterministic wallet.
ripemd160 contains a RIPEMD-160 implementation.
pbkdf and hkdf are password- and HMAC-based key derivation functions.
bech32 is a Haskell library supporting the bech32m and bech32 checksummed base32 encodings.
base58 provides encoding/decoding utilities for the base58 & base58check formats, and base16 supports hexadecimal.
script provides representations and fast conversion utilities for working with Script.
Stuff that I no longer maintain:
urbit-hob provides Haskell support for dealing with Hoon’s @p and @q auras via a finite-domain Feistel cipher.
urbit-ob is the same, but for JavaScript.
up8-ticket is a simple JavaScript library for securely generating and sharing UP8-compatible, @q-encoded master tickets via e.g. HMAC-DRBG and Shamir’s Secret Sharing.
urbit-key-generation provides a JavaScript implementation of the UP8 hierarchical wallet.
Potentially of wider interest:
Stuff I actively maintain:
eproc is a library supporting anytime-valid sequential hypothesis testing and confidence sequences.
declarative is a suite of Markov Chain Monte Carlo (MCMC) libraries for Haskell. In addition to declarative itself, it consists of the following libraries that each export a production-quality transition operator and sampler:
There’s also mcmc-types which provides a bunch of types common to each.
You can create custom Markov chains using arbitrary convex combinations of these transition operators via a simple shallowly-embedded DSL. There’s basic support for annealing of transition operators, as well.
flat-mcmc is a production-quality implementation of a so-called affine invariant ensemble sampler. It is an excellent general-purpose Markov Chain Monte Carlo sampler that requires zero fiddling, while being suitable for many problems.
mwc-probability is a sampling-based probability monad implemented as a simple wrapper over the mwc-random library.
sampling is a Haskell library providing basic functionality for sampling with/without replacement from arbitrary Foldable collections.
Miscellanea potentially of wider interest:
NestedSampling.hs is a Haskell implementation of Skilling’s nested sampling that I co-authored with Brendon Brewer.
hnuts is an implementation of the No U-Turn Sampler (NUTS) in Haskell.
measurable is a simple, shallowly-embedded, illustrative language for working with measures in the form of the Giry monad.
bnp contains some exploratory R work I did around various Bayesian nonparametrics models in 2016.
deanie is a toy embedded probabilistic programming language supporting rejection sampling, importance sampling, and basic Metropolis sampling.
up is a priority search queue (+up) and LRU cache (+lu) for Hoon, complete with a full suite of u3 jets in C, in the spirit of Haskell’s psqueues library.
okasaki contains Haskell implementations of data structures from Chris Okasaki’s Purely Functional Data Structures, typically using recursion schemes and often via continuation-passing style.
Assorted stuff potentially of broader interest:
azimuth-js is a JavaScript library providing Azimuth contract bindings.
azimuth-hs is the same, but for Haskell.
lgram is a simple command-line tool for drilling Latin grammar.
ti3-sampler is a simple little application I hacked together for sampling random locations on a Twilight Imperium board.
drb is a command-line Douay-Rheims. aen is Virgil’s Aeneid, and gor is Plato’s Gorgias, packaged in the same fashion.
praxis are various programming exercises I’ve done over the years, mostly taken from Programming Praxis.
