This library provides message digest functions found on BSD systems either on their libc (NetBSD, OpenBSD) or libmd (FreeBSD, DragonflyBSD, macOS, Solaris) libraries and lacking on others like GNU systems.
The intention here is to have a library with extremely permissive licenses (see below), that can be used by any project; that has a very small scope and as such can be part of the base system on most distributions; and that has a compatible API with the implementations on other systems and those that other projects are embedding, so that they can switch to use the system library instead of duplicating the same code all over the place.
The currently provided message digest algorithms are:
- MD2
- MD4
- MD5
- RIPEMD-160
- SHA-1
- SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512 and SHA-512/256)
License
The code is under the BSD-3-Clause, BSD-2-Clause, ISC, Beerware and Public Domain licenses. Please check the COPYING file and the source code for the actual license details.
Download
Latest release tarballs also available from the release tarballs mirror.
Releases are signed with the OpenPGP certificate (with fingerprint 4F3E74F436050C10F5696574B972BF3EA4AE57A3) of the current maintainer Guillem Jover.
Development
The code under development can be cloned from git:
git clone https://git.hadrons.org/git/libmd.git
And browsed using cgit.
Contact
Security issues
In case of a security issue that needs to be reported privately, please send encrypted mail to Guillem Jover, the current maintainer.
Contributing
Changes can be sent either as patches to the mailing list or to the current maintainer.
New message digest functions can be added depending on the presence of these on at least one existing system's libc or libmd. The best pre-existing implementation from one of those systems can then be considered for an import, taking into account license, code quality, portability and performance.
The license should be permissive and not be more restrictive than BSD-3-Clause.
Implementations written from scratch will not be accepted.
Any new function must also come with man pages, and at least some minimal unit tests.