List.community

Awesome Cryptography Awesome

Awesome Cryptography

Build Status Join the chat at https://gitter.im/sobolevn/awesome-cryptography Open Source Helpers

Follow us on twitter

A curated list of cryptography resources and links.

Contents


Theory

Algorithms

Symmetric encryption

  • 3DES - Symmetric-key block cipher (or Triple Data Encryption Algorithm (TDEA or Triple DEA), which applies the Data Encryption Standard (DES) cipher algorithm three times to each data block.
  • AES - Symmetric-key block cipher algorithm and U.S. government standard for secure and classified data encryption and decryption (also known as Rijndael).
  • Blowfish - Symmetric-key block cipher, designed in 1993 by Bruce Schneier. Notable features of the design include key-dependent S-boxes and a highly complex key schedule.

Asymmetric encryption

  • RSA - One of the first practical public-key cryptosystems and is widely used for secure data transmission. In RSA, this asymmetry is based on the practical difficulty of factoring the product of two large prime numbers, the factoring problem.

Hash functions

  • MD5 - Widely used hash function producing a 128-bit hash value. MD5 was initially designed to be used as a cryptographic hash function, but it has been found to suffer from extensive vulnerabilities. It can still be used as a checksum to verify data integrity, but only against unintentional corruption.
  • SHA1 - Cryptographic hash function designed by the NSA. SHA-1 produces a 160-bit hash value known as a message digest. SHA-1 is no longer considered secure against well-funded opponents.
  • SHA2 - Set of hash functions designed by the NSA. SHA-256 and SHA-512 are novel hash functions computed with 32-bit and 64-bit words, respectively. They use different shift amounts and additive constants, but their structures are otherwise virtually identical, differing only in the number of rounds.

Articles

Books

Courses

  • Applied Cryptography - Cryptography is present in everyday life, from paying with a credit card to using the telephone. Learn all about making and breaking puzzles in computing.
  • Crypto Strikes Back! - This talk will cover crypto vulnerabilities in widely-deployed systems and how the smallest oversight resulted in catastrophe.
  • Cryptography - A practical oriented course in Cryptography by University of Maryland College Park.
  • Cryptography - Stanford University - This course explains the inner workings of cryptographic primitives and how to correctly use them. Students will learn how to reason about the security of cryptographic constructions and how to apply this knowledge to real-world applications.
  • Cryptography I - The course begins with a detailed discussion of how two parties who have a shared secret key can communicate securely when a powerful adversary eavesdrops and tampers with traffic. We will examine many deployed protocols and analyze mistakes in existing systems.
  • Cybrary Cryptography - This online course we will cover how cryptography is the cornerstone of security, and how through its use of different encryption methods, such as ciphers, and public or private keys, you can protect private or sensitive information from unauthorized access.
  • Journey into cryptography - The course of cryptography by Khan Academy.
  • Practical Aspects of Modern Cryptography - Practical Aspects of Modern Cryptography, Winter 2006 University of Washington CSE.
  • Theory and Practice of Cryptography - Introduction to Modern Cryptography, Using Cryptography in Practice and at Google, Proofs of Security and Security Definitions and A Special Topic in Cryptography.

Tools

Standalone

  • Bcrypt - Cross-platform file encryption utility.
  • blackbox4k 209 - safely store secrets in Git/Mercurial/Subversion.
  • certbot8k 1k - Previously the Let's Encrypt Client, is EFF's tool to obtain certs from Let's Encrypt, and (optionally) auto-enable HTTPS on your server. It can also act as a client for any other CA that uses the ACME protocol.
  • cryptomator2k 211 - Multi-platform transparent client-side encryption of your files in the cloud.
  • gpg - Complete and free implementation of the OpenPGP standard. It allows to encrypt and sign your data and communication, features a versatile key management system. GnuPG is a command line tool with features for easy integration with other applications.
  • ironssh - End-to-end encrypt transferred files using sftp/scp and selectively share with others. Automatic key management works with any SSH server. Encrypted files are gpg compatible.
  • Nipe79 25 - Nipe is a script to make Tor Network your default gateway.

Plugins

Git

  • git-crypt2k 167 - Transparent file encryption in git.
  • git-secret - Bash-tool to store your private data inside a git repository.

Frameworks and Libs

C

  • crypto-algorithms58 27 - Basic implementations of standard cryptography algorithms, like AES and SHA-1.
  • libgcrypt - Cryptographic library developed as a separated module of GnuPG.
  • libsodium5k 829 - Modern and easy-to-use crypto library.
  • libtomcrypt681 266 - Fairly comprehensive, modular and portable cryptographic toolkit.
  • monocypher - small, portable, easy to use crypto library inspired by libsodium and TweetNaCl.
  • NaCl - High-speed library for network communication, encryption, decryption, signatures, etc.
  • OpenSSL6k 3k - TLS/SSL and crypto library.
  • PolarSSL - PolarSSL makes it trivially easy for developers to include cryptographic and SSL/TLS capabilities in their (embedded) products, facilitating this functionality with a minimal coding footprint.
  • RHash131 40 - Great utility for computing hash sums.
  • themis485 45 - High level crypto library for storing data (AES), secure messaging (ECC + ECDSA / RSA + PSS + PKCS#7) and session-oriented, forward secrecy data exchange (ECDH key agreement, ECC & AES encryption). Ported on many languages and platforms, suitable for client-server infastructures.
  • tiny-AES128-C21 9 - Small portable AES128 in C.
  • wolfSSL366 192 - Small, fast, portable implementation of TLS/SSL for embedded devices to the cloud.
  • xxHash2k 158 - Extremely fast hash algorithm.

C++

  • Botan - Cryptography library written in C++11.
  • cryptopp664 294 - Crypto++ Library is a free C++ class library of cryptographic schemes.
  • HElib873 148 - Software library that implements homomorphic encryption (HE).
  • Nettle - Low-level cryptographic library.
  • s2n4k 339 - Implementation of the TLS/SSL protocols.

C-sharp

  • Bouncy Castle - All-purpose cryptographic library.
  • libsodium-net203 58 - Secure cryptographic library, port of libsodium for .NET.
  • PCLCrypto161 36 - Provides cryptographic APIs over algorithms implemented by the platform, including exposing them to portable libraries.
  • SecurityDriven.Inferno297 23 - .NET crypto done right.
  • StreamCryptor55 12 - Stream encryption & decryption with libsodium and protobuf.

Clojure

  • buddy-core - Cryptographic Api.
  • clj-crypto13 11 - Wrapper for Bouncy Castle.
  • pandect179 9 - Fast and easy-to-use Message Digest, Checksum and HMAC library for Clojure.

Common Lisp

  • crypto-shortcuts6 0 - Collection of common cryptography functions.
  • ironclad - Collection of common crypto shortcuts.
  • trivial-ssh - SSH client library for Common Lisp (Built on libssh2).

Delphi

  • DelphiEncryptionCompendium10 4 - Cryptographic library for Delphi.
  • LockBox - LockBox 3 is a Delphi library for cryptography.
  • SynCrypto247 152 - Fast cryptographic routines (hashing and cypher), implementing AES, XOR, RC4, ADLER32, MD5, SHA1, SHA256 algorithms, optimized for speed.
  • TForge - TForge is open-source crypto library written in Delphi, compatible with FPC.

Elixir

  • cipher26 9 - Elixir crypto library to encrypt/decrypt arbitrary binaries.
  • cloak138 19 - Cloak makes it easy to use encryption with Ecto.
  • comeonin340 45 - Password authorization (bcrypt) library for Elixir.
  • elixir-rsa2 0 - :public_key cryptography wrapper for Elixir.
  • elixir_tea2 1 - TEA implementation in Elixir.
  • ex_crypto39 13 - Elixir wrapper for Erlang :crypto and :public_key modules. Provides sensible defaults for many crypto functions to make them easier to use.
  • exgpg - Use gpg from Elixir.
  • pot39 7 - Erlang library for generating one time passwords compatible with Google Authenticator.
  • siphash-elixir - Elixir implementation of the SipHash hash family.

Erlang

  • crypto - Functions for computation of message digests, and functions for encryption and decryption.
  • public_key - Provides functions to handle public-key infrastructure.

Go

  • crypto - Official Website Resources.
  • cryptoballot23 3 - Cryptographically secure online voting.
  • dedis/crypto48 17 - Advanced crypto library for the Go language.
  • dkeyczar63 4 - Port of Google's Keyczar cryptography library to Go.
  • gocrypto56 9 - Example source code for the Practical Crypto with Go book.
  • goThemis485 45 - Go wrapper on Themis. High level crypto library for storing data (AES), secure messaging (ECC + ECDSA / RSA + PSS + PKCS#7) and session-oriented, forward secrecy data exchange (ECDH key agreement, ECC & AES encryption).

Haskell

Haxe

JavaScript

  • asmCrypto369 95 - JavaScript implementation of popular cryptographic utilities with performance in mind.
  • bcrypt-nodejs176 27 - Native implementation of bcrypt for NodeJS.
  • cifre114 3 - Fast crypto toolkit for modern client-side JavaScript.
  • closure-library3k 883 - Google's common JavaScript library.
  • cryptico364 85 - Easy-to-use encryption system utilizing RSA and AES for javascript.
  • crypto-js2k 314 - JavaScript library of crypto standards.
  • cryptojs127 31 - Provide standard and secure cryptographic algorithms for NodeJS.
  • forge2k 358 - Native implementation of TLS in Javascript and tools to write crypto-based and network-heavy webapps.
  • javascript-crypto-library168 26 - JavaScript Crypto Library provides web developers with an extensive and efficient set of cryptographic functions.
  • js-nacl375 38 - Pure-Javascript High-level API to Emscripten-compiled libsodium routines.
  • jsencrypt1k 454 - Javascript library to perform OpenSSL RSA Encryption, Decryption, and Key Generation.
  • JShashes354 87 - Fast and dependency-free cryptographic hashing library for node.js and browsers (supports MD5, SHA1, SHA256, SHA512, RIPEMD, HMAC).
  • jsrsasign1k 269 - The 'jsrsasign' (RSA-Sign JavaScript Library) is an opensource free cryptography library supporting RSA/RSAPSS/ECDSA/DSA signing/validation.
  • jsThemis485 45 - Javascript wrapper on Themis. High level crypto library for storing data (AES), secure messaging (ECC + ECDSA / RSA + PSS + PKCS#7) and session-oriented, forward secrecy data exchange (ECDH key agreement, ECC & AES encryption).
  • libsodium.js286 50 - libsodium compiled to pure JavaScript, with convenient wrappers.
  • node.bcrypt.js2k 225 - bcrypt for NodeJS.
  • OpenPGP.js3k 468 - OpenPGP implementation for JavaScript.
  • PolyCrypt231 19 - Pure JS implementation of the WebCrypto API.
  • rusha233 36 - High-performance pure-javascript SHA1 implementation suitable for large binary data, reaching up to half the native speed.
  • sjcl5k 653 - Stanford Javascript Crypto Library.
  • URSA - RSA public/private key OpenSSL bindings for Node.

Java

  • Apache Shiro - Performs authentication, authorization, cryptography and session management.
  • Bouncy Castle - All-purpose cryptographic library. JCA provider, wide range of functions from basic helpers to PGP/SMIME operations.
  • Flexiprovider - Powerful toolkit for the Java Cryptography Architecture.
  • GDH - Generalized Diffie-Hellman key exchange Java library for multiple parties built on top of the Vert.x framework.
  • Google Keyczar946 147 - Easy to use, yet safe encryption framework with key versioning.
  • Google Tink673 40 - A small crypto library that provides a safe, simple, agile and fast way to accomplish some common crypto tasks.
  • Java Themis485 45 - Java/Android wrapper on Themis. High level crypto library for storing data (AES), secure messaging (ECC + ECDSA / RSA + PSS + PKCS#7) and session-oriented, forward secrecy data exchange (ECDH key agreement, ECC & AES encryption).
  • keywhiz2k 186 - A system for distributing and managing secrets.
  • pac4j1k 396 - Security engine.
  • scrypt181 49 - Pure Java implementation of the scrypt key derivation function and a JNI interface to the C implementations, including the SSE2 optimized version.

Julia

  • Crypto.jl - Library that wraps OpenSSL, but also has pure Julia implementations for reference.
  • MbedTLS.jl7 22 - Wrapper around the mbed TLS and cryptography C libary.
  • Nettle.jl8 20 - Julia wrapper around nettle cryptographic hashing/ encryption library providing MD5, SHA1, SHA2 hashing and HMAC functionality, as well as AES encryption/decryption.
  • SHA.jl18 22 - Performant, 100% native-julia SHA1, SHA2-{224,256,384,512} implementation.

Lua

  • lua-lockbox216 30 - Collection of cryptographic primitives written in pure Lua.
  • LuaCrypto35 19 - Lua bindings to OpenSSL.

Objective-C

  • CocoaSecurity267 59 - AES, MD5, SHA1, SHA224, SHA256, SHA384, SHA512, Base64, Hex.
  • ObjC Themis485 45 - ObjC wrapper on Themis for iOS and MacOS. High level crypto library for storing data (AES), secure messaging (ECC + ECDSA / RSA + PSS + PKCS#7) and session-oriented, forward secrecy data exchange (ECDH key agreement, ECC & AES encryption).
  • ObjectivePGP410 67 - ObjectivePGP is an implementation of OpenPGP protocol for iOS and macOS. OpenPGP is the most widely used email encryption standard.
  • RNCryptor3k 502 - CCCryptor (AES encryption) wrappers for iOS and Mac.

PHP

  • halite - Simple library for encryption using libsodium.
  • libsodium-laravel14 3 - Laravel Package Abstraction using libsodium.
  • PHP Encryption1k 204 - Library for encrypting data with a key or password in PHP.
  • PHP Themis485 45 - PHP wrapper on Themis. High level crypto library for storing data (AES), secure messaging (ECC + ECDSA / RSA + PSS + PKCS#7) and session-oriented, forward secrecy data exchange (ECDH key agreement, ECC & AES encryption).
  • TCrypto53 10 - TCrypto is a simple and flexible PHP 5.3+ in-memory key-value storage library.

Python

  • bcrypt355 59 - Modern password hashing for your software and your servers.
  • charm87 21 - Framework for rapidly prototyping cryptosystems.
  • cryptography - Python library which exposes cryptographic recipes and primitives.
  • cryptopy - Pure python implmentation of cryptographic algorithms and applications.
  • hashids601 54 - Implementation of hashids in Python.
  • paramiko - Python implementation of the SSHv2 protocol, providing both client and server functionality.
  • Privy96 7 - An easy, fast lib to correctly password-protect your data.
  • pycryptodome346 69 - Self-contained Python package of low-level cryptographic primitives.
  • PyElliptic91 48 - Python OpenSSL wrapper. For modern cryptography with ECC, AES, HMAC, Blowfish.
  • pynacl430 99 - Python binding to the Networking and Cryptography (NaCl) library.
  • pythemis485 45 - Python wrapper on Themis. High level crypto library for storing data (AES), secure messaging (ECC + ECDSA / RSA + PSS + PKCS#7) and session-oriented, forward secrecy data exchange (ECDH key agreement, ECC & AES encryption).

R

  • rscrypt12 7 - Package for a collection of scrypt cryptographic functions.

Ruby

  • bcrypt-ruby1k 191 - Ruby binding for the OpenBSD bcrypt() password hashing algorithm, allowing you to easily store a secure hash of your users' passwords.
  • RbNaCl689 62 - Ruby binding to the Networking and Cryptography (NaCl) library.
  • Ruby Themis485 45 - Ruby wrapper on Themis. High level crypto library for storing data (AES), secure messaging (ECC + ECDSA / RSA + PSS + PKCS#7) and session-oriented, forward secrecy data exchange (ECDH key agreement, ECC & AES encryption).

Rust

  • octavo101 19 - Highly modular & configurable hash & crypto library.
  • proteus239 15 - Axolotl protocol implementation, without header keys, in Rust.
  • ring792 172 - Safe, fast, small crypto using Rust & BoringSSL's cryptography primitives.
  • rust-crypto626 192 - Mostly pure-Rust implementation of various cryptographic algorithms.
  • rust-openssl407 335 - OpenSSL bindings for Rust.
  • rustls623 71 - Rustls is a new, modern TLS library written in Rust.
  • sodiumoxide249 72 - Sodium Oxide: Fast cryptographic library for Rust (bindings to libsodium).
  • suruga142 12 - TLS 1.2 implementation in Rust.
  • webpki106 28 - Web PKI TLS X.509 certificate validation in Rust.

Scala

  • scrypto51 19 - Cryptographic primitives for Scala.
  • tsec180 25 - A type-safe, functional, general purpose security and cryptography library.

Swift

  • CryptoSwift5k 722 - Crypto related functions and helpers for Swift implemented in Swift programming language.
  • IDZSwiftCommonCrypto357 66 - Wrapper for Apple's CommonCrypto library written in Swift.
  • OpenSSL31 26 - Swift OpenSSL for OS X and Linux.
  • SweetHMAC30 6 - Tiny and easy to use Swift class to encrypt strings using HMAC algorithms.
  • Swift-Sodium165 61 - Swift interface to the Sodium library for common crypto operations for iOS and OS X.
  • SwiftSSL92 8 - Elegant crypto toolkit in Swift.
  • SwiftThemis485 45 - Swift wrapper on Themis for iOS and MacOS. High level crypto library for storing data (AES), secure messaging (ECC + ECDSA / RSA + PSS + PKCS#7) and session-oriented, forward secrecy data exchange (ECDH key agreement, ECC & AES encryption).

Resources

Blogs

  • A Few Thoughts on Cryptographic Engineering - Some random thoughts about crypto.
  • Bristol Cryptography Blog - Official blog for the University of Bristol cryptography research group. It's a group blog, primarily targeted towards cryptographers and crypto students.
  • Charles Engelke's Blog - WebCrypto Blog Posts.
  • Root Labs rdist - Nate Lawson and his co-authors write on a variety of topics including hardware implementation, cryptographic timing attacks, DRM, and the Commodore 64.
  • Schneier on security - One of the oldest and most famous security blogs. Bruce covers topics from block cipher cryptanalysis to airport security.

Mailing lists

  • metzdowd.com - "Cryptography" is a low-noise moderated mailing list devoted to cryptographic technology and its political impact.
  • Modern Crypto - Forums for discussing modern cryptographic practice.
  • randombit.net - List for general discussion of cryptography, particularly the technical aspects.

Web-tools

  • Cryptolab - is a set of cryptography related tools.
  • CrypTool - Great variety of ciphers, encryption methods and analysis tools are introduced, often together with illustrated examples.
  • CyberChef - a web app for encryption, encoding, compression, and data analysis.
  • keybase.io - Keybase maps your identity to your public keys, and vice versa.

Web-sites

  • Cryptography Stackexchange - Cryptography Stack Exchange is a question and answer site for software developers, mathematicians and others interested in cryptography.
  • Cryptopals Crypto Challenges - A series of applied cryptography challenges, starting from very basic challenges, such as hex to base 64 challanges, and gradually increasing the difficulty up to abstract algebra.
  • Garykessler Crypto - An Overview of Cryptography.
  • IACR - The International Association for Cryptologic Research is a non-profit scientific organization whose purpose is to further research in cryptology and related fields.
  • Learn Cryptography - Dedicated to helping people understand how and why the cryptographic systems they use everyday without realizing work to secure and protect their privacy.
  • Subreddit of Cryptography - This subreddit is intended for links and discussions surrounding the theory and practice of strong cryptography.
  • WebCryptoAPI - This specification describes a JavaScript API for performing basic cryptographic operations in web applications, such as hashing, signature generation and verification, and encryption and decryption.

Contributing

Your contributions are always welcome! Please take a look at the contribution guidelines first.

License

awesome-cryptography by @sobolevn

To the extent possible under law, the person who associated CC0 with awesome-cryptography has waived all copyright and related or neighboring rights to awesome-cryptography.

You should have received a copy of the CC0 legalcode along with this work. If not, see https://creativecommons.org/publicdomain/zero/1.0/.