Skip to content

A collection of hash functions, ciphers, tools, libraries, and materials related to cryptography.

Notifications You must be signed in to change notification settings

gogorush/retter

 
 

Repository files navigation

retter
retter, upholds cryptography
It's a collection of hash functions, ciphers, tools, libraries, and materials related to cryptography.


NOTE: If you see mistakes or would like to expand the list. Feel free to contribute to this project! It is still in the process of creating...


About

The purpose of this project is to promote and develop cryptography.

It includes the collection of known tools, libraries, articles, materials, hash functions, and ciphers.

Also it's a place for people who share an interest in cryptography and want to discuss about it.

If you invent a new hash function or ciphers, or write an paper related to cryptography just add it here. That is the right place. See contributing section in README.md

Further reading:

Definitions

Hash functions

Hash function - any function that can be used to map digital data of arbitrary size to digital data of fixed size, with slight differences in input data producing very big differences in output data.

Used in: Database, Filters, Hash tables, Unique identifiers, Passwords, Diff utilities, and File system

Avalanche - a measure of how the output bits change based on each input bit. Ideally each input bit will affect each output bit with 1/2 probability.

Realistically, many hash functions do not achieve perfect avalanche and are still useable for many sets of keys.

Ciphers

Cipher - an algorithm for performing encryption or decryption—a series of well-defined steps that can be followed as a procedure.

There are 2 types of key algorithms: Symmetric and Asymmetric

Block cipher - a deterministic algorithm operating on fixed-length groups of bits, called blocks, with an unvarying transformation that is specified by a symmetric key.

It can also be continuous stream of symbols. (stream ciphers)

List of hash functions

This is a list of hash functions, including cyclic redundancy checks, checksum functions, and cryptographic hash functions.

For each function are included: description, implementations and materials.

Cyclic redundancy checks

A cyclic redundancy check (often CRC) is an error-detecting code commonly used in digital networks and storage devices to detect accidental changes to raw data.

Name Length Type Published Authors Information
CRC 8, 16, 32, 64 bits cyclic codes 1961 W. Wesley Peterson more [⬆]
BSD 16 bits CRC -- -- more [⬆]
SYSV 16 bits CRC -- -- more [⬆]

Checksums

A checksum or hash sum is a small-size datum from an arbitrary block of digital data for the purpose of detecting errors which may have been introduced during its transmission or storage.

Name Length Type Published Authors Information
Luhn algorithm 4 bits sum 1954 Hans Peter Luhn more [⬆]
Verhoeff algorithm 4 bits sum 1969 Jacobus Verhoeff more [⬆]
Fletcher 4, 8, 16, 32 bits sum 1970 John Gould Fletcher more [⬆]
Adler-32 32 bits sum 1995 Mark Adler more [⬆]
Damm algorithm 1 decimal digit Quasigroup operation 2004 H. Michael Damm more [⬆]

Non-cryptographic hash functions

A non-cryptographic hash function is a hash function which is sometimes possible to invert.

Name Length Type Published Authors Information
Zobrist hashing variable xor 1969 Albert Lindsey Zobrist more [⬆]
Pearson hashing 8 bits xor/table 1990 Peter K. Pearson more [⬆]
FNV 32, 64, 128, 256, 512, or 1024 bits xor/product or product/xor 1991 Glenn Fowler, Landon Curt Noll, Phong Vo more [⬆]
Jenkins 32 or 64 bits xor/addition 1997 Bob Jenkins more [⬆]
MurmurHash 32, 64, or 128 bits product/rotation 2008 Austin Appleby more [⬆]
CityHash 64, 128, or 256 bits product/rotation 2010 Geoff Pike, Jyrki Alakuijala more [⬆]
xxHash 32, 64 bits product/rotation 2012 Yann Collet more [⬆]

Cryptographic hash functions

A cryptographic hash function is a hash function which is designed to be difficult to invert, that is, given an arbitrary hash value it should be hard to find an input that hashes to the same value.

Name Length Type Published Authors Information
MD2 128 bits hash 1989 Ronald Rivest more [⬆]
Snefru 128 or 256 bits hash 1990 Ralph Merkle more [⬆]
MD4 128 bits hash 1990 Ronald Rivest more [⬆]
HAVAL 128 to 256 bits hash 1992 Yuliang Zheng, Josef Pieprzyk, Jennifer Seberry more [⬆]
MD5 128 bits Merkle-Damgård construction 1992 Ronald Rivest more [⬆]
GOST 256 bits hash 1994 FAPSI more [⬆]
SHA-1 160 bits Merkle-Damgård construction 1995 National Security Agency more [⬆]
Tiger 192 bits Merkle-Damgård construction 1996 Ross Anderson, Eli Biham more [⬆]
RIPEMD 128, 160, 256, 320 bits hash 1996 Hans Dobbertin, Antoon Bosselaers and Bart Preneel more [⬆]
Whirlpool 512 bits Miyaguchi-Preneel 2000 Vincent Rijmen, Paulo S. L. M. Barreto more [⬆]
SHA-2 224, 256, 384, or 512 bits Merkle-Damgård construction 2001 National Security Agency more [⬆]
HAS-160 160 bits hash 2002 Korean more [⬆]
FSB 160 to 512 bits hash 2003 Daniel Augot, Matthieu Finiasz, Nicolas Sendrier more [⬆]
RadioGatún Up to 1216 bits hash 2006 Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche more [⬆]
BLAKE 256 or 512 bits HAIFA structure 2008 Jean-Philippe Aumasson, Luca Henzen, Willi Meier, Raphael C.-W. Phan more [⬆]
ECOH 224 to 512 bits hash 2008 Daniel R. L. Brown, Matt Campagna, Rene Struik more [⬆]
Grøstl 256 to 512 bits hash 2008 Praveen Gauravaram, Lars Knudsen, Krystian Matusiewicz, Florian Mendel, Christian Rechberger, Martin Schläffer, Søren S. Thomsen more [⬆]
JH 512 bits hash 2008 Hongjun Wu more [⬆]
MD6 128 bits Merkle tree NLFSR 2008 Ronald Rivest, Benjamin Agre, Dan Bailey, Sarah Cheng, Christopher Crutchfield, Yevgeniy Dodis, Kermin Fleming, Asif Khan, Jayant Krishnamurthy, Yuncheng Lin, Leo Reyzin, Emily Shen, Jim Sukha, Eran Tromer, Yiqun Lisa Yin more [⬆]
SWIFFT 512 bits hash 2008 Vadim Lyubashevsky, Daniele Micciancio, Chris Peikert, Alon Rosen more [⬆]
Spectral Hash 512 bits Wide Pipe Merkle-Damgård construction 2009 Gokay Saldamlı, Cevahir Demirkıran, Megan Maguire, Carl Minden, Jacob Topper, Alex Troesch, Cody Walker, Çetin Kaya Koç more [⬆]
Skein arbitrary Unique Block Iteration 2010 Bruce Schneier, Niels Ferguson more [⬆]
SHA-3 (Keccak) arbitrary Sponge function 2012 Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche more [⬆]
SipHash 64 bits non-collision-resistant PRF 2012 Jean-Philippe Aumasson, Daniel J. Bernstein more [⬆]

Message authentication codes

A message authentication code (often MAC) is a short piece of information used to authenticate a message and to provide integrity and authenticity assurances on the message.

Name Published Authors Information
HMAC 1996 Mihir Bellare, Ran Canetti, Hugo Krawczyk specification
UMAC 1999 John Black, Shai Halevi, Hugo Krawczyk, Ted Krovetz, Phillip Rogaway specification
OMAC 2002 Tetsu Iwata, Kaoru Kurosawa specification
CMAC 2003 John Black, Phillip Rogaway specification
VMAC 2007 Ted Krovetz, Wei Dai specification

List of ciphers

Symmetric key algorithms

Not ready yet...

Asymmetric key algorithms

Not ready yet...

Tools

Smhasher

Test your hash functions.

SMHasher is a test suite designed to test the distribution, collision, and performance properties of non-cryptographic hash functions - it aims to be the "DieHarder" of hash testing, and does a pretty good job of finding flaws with a number of popular hashes.

Sage S-box MILP toolkit

Extension of the Toolkit for Counting Active S-boxes using Mixed-Integer Linear Programming (MILP).

This toolkit can be used to prove the security of cryptographic ciphers against linear and differential cryptanalysis. Includes the implementation in Sage for AES, small AES, Present, Led, mCrypton, Klein and Enocoro.

KeccakTools

A set of documented C++ classes to help analyze Keccak-f.

KeccakTools is a set of C++ classes aimed at helping analyze the sponge function family Keccak.

S-box MILP toolkit

Toolkit for Counting Active S-boxes using Mixed-Integer Linear Programming (MILP).

This toolkit can be used to prove the security of cryptographic ciphers against linear and differential cryptanalysis.

Hashclash

Framework for MD5 & SHA-1 Differential Path Construction and Chosen-Prefix Collisions for MD5.

This framework contains tools for the constructions of differential paths for MD5 and SHA-1, including chosen-prefix collisions for MD5.

ARX Toolkit

The ARX toolkit is a set of tools to study ARX ciphers and hash functions.

The ARX toolkit was presented at the SHA-3 conference in March 2012 in Washington, DC.

Information Set Decoding

A tool for information set decoding.

This library, written in C++, is reasonably efficient at finding low weight codewords of a linear code using information set decoding.

S-function Toolkit

Toolkit for the differential cryptanalysis of S-functions.

An increasing number of cryptographic primitives use operations such as addition modulo 2^n, multiplication by a constant and bitwise Boolean functions as a source of non-linearity.

CryptLogVer

Toolkit for SAT-based attacks on cryptographic primitives.

CryptLogVer is a toolkit that can be used to mount SAT-based attacks on cryptographic primitives (block ciphers, stream ciphers, hash functions).

Linear Hull Cryptanalysis of PRESENT

A tool to compute linear hulls for PRESENT.

This tool computes linear hulls for the original PRESENT cipher. It confirms and even improves on the predicted bias (and the corresponding attack complexities) of conventional linear relations based on a single linear trail.

Automated Algebraic Cryptanalysis

A simple tool for the automatic algebraic cryptanalysis of a large array of stream- and block ciphers.

A simple tool for the automatic algebraic cryptanalysis of a large array of stream- and block ciphers. Three tests have been implemented and the best results have led to continued work on a computational cluster.

SYMAES

A Fully Symbolic Polynomial System Generator for AES-128.

SYMAES is a software tool that generates a system of polynomials in GF(2), corresponding to the round transformation and key schedule of the block cipher AES-128.

Tools for Algebraic Cryptanalysis

Tools for the algebraic cryptanalysis of cryptographic primitives.

Algebraic cryptanalysis of cryptographic primitives such as block ciphers, stream ciphers and hash functions usually proceeds in two steps.

Grain of Salt

An automated way to test stream ciphers through SAT solvers.

Grain of Salt is a tool developed to automatically test stream ciphers against standard SAT solver-based attacks. The tool takes as input a set of configuration options and the definition of each filter and feedback function of the stream cipher.

Sage

Free open-source mathematics software system, also containing many modules for cryptography.

Sage is a free open-source mathematics software system licensed under the GPL. It combines the power of many existing open-source packages into a common Python-based interface. It also contains modules to perform both basic and more advanced computations in cryptography and cryptanalysis.

Libraries

  • C
    • libsodium: a modern and easy-to-use crypto library.
    • AESLib: arduino Library for AES Encryption (source based on avr-crypto-lib).
    • crypto-algorithms: basic implementations of standard cryptography algorithms, like AES and SHA-1.
    • sha3sum: SHA-3 and Keccak checksum utility.
    • RHash: great utility for computing hash sums.
    • cryptlib: an open source cross-platform software security toolkit library.
    • Nettle: a cryptographic library that is designed to fit easily in more or less any context.
  • C++
    • Crypto++: is a free and open source C++ class library of cryptographic algorithms and schemes.
    • HElib: an Implementation of homomorphic encryption.
    • NaCl: high-speed software library for network communication, encryption, decryption, signatures, etc.
  • C#
    • Data.HashFunction: Common interface library to non-cryptographic hash functions with numerous implementations.
  • Python
  • Javascript
    • jsHashes: pure JavaScript implementation of the most extended hash algorithms.
    • javascript-crypto-library: provides web developers with an extensive and efficient set of cryptographic functions.
    • cryptojs: provide standard and secure cryptographic algorithms for NodeJS.
    • hmacsha1.js: a JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined.
  • Clojure
    • pandect: fast and easy-to-use Message Digest, Checksum and HMAC library for Clojure.
  • ActionScript
    • as3corelib: an ActionScript 3 Library that contains a number of classes and utilities.
  • Ruby
    • BozoCrack: a silly & effective MD5 cracker in Ruby.
  • Objective-c
    • RNCryptor: CCCryptor (AES encryption) wrappers for iOS and Mac.
    • CocoaSecurity: encrypt/Decrypt: AES. Hash: MD5, SHA(SHA1, SHA224, SHA256, SHA384, SHA512). Encode/Decode: Base64, Hex.
  • Rust
    • rust-crypto: a (mostly) pure-Rust implementation of various cryptographic algorithms.
  • Java
    • Bouncy Castle: a collection of APIs used in cryptography. It includes APIs for both the Java and the C# programming languages.

Articles

Contributing

Please feel free to contribute to this project! Pull requests and feature requests welcome! ✌️

New hash function

Anyone can create a function. You can add to this list a function that is not yours but it already exists. To make your own, remember that the following conditions must be met.

  • Unique name - That which does not exist yet.
  • Informations - Date of creation, structure, first published, series, etc.
  • Authors - Everyone who worked on it.
  • Cryptanalysis - The disadvantages, advantages.
  • Materials - Your research, documents.
  • Implementations - Example implementation (C, C++).
  • Pseudocode - Outline of the algorithm.

Add it to the appropriate section in the README.md and create a new directory as have other functions. (ex. Pearson hashing)

Thanks

  • Dongxia Bai, Tsinghua University in China
  • Mike Sharov (@msharov)
  • Others who have written tons of material!!!

About

A collection of hash functions, ciphers, tools, libraries, and materials related to cryptography.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 59.8%
  • C 34.6%
  • Objective-C 5.4%
  • Shell 0.1%
  • Makefile 0.1%
  • Perl 0.0%