SHA-1 C++ Library


Updated 2005-6-21

This is a C++ class that implements the Secure Hash Algorithm SHA-1. The purpose of the algorithm is to calculate a strong hash of given bit string. By "strong", we mean that it is very difficult to find a different bit string that results in the same hash. It is similarly difficult, using only the hash, to determine the original bit string. SHA-1 produces a 20 byte (160 bit) hash.


Class Usage

The class is called SHA1. The API consists of four methods:

SHA1::SHA1() is the class constructor

void SHA1::addBytes( const char* data, int num ) processes bytes into the hash.

unsigned char* SHA1::getDigest() completes the hashing process and returns the final hash. The SHA1 instance should not be used after calling this method.

static void SHA1::hexPrinter( unsigned char* c, int l ) prints bytes to stdout in hexadecimal format.


The following program will print one line to stdout:

 a9 99 3e 36 47 06 81 6a ba 3e 25 71 78 50 c2 6c 9c d0 d8 9d

#include <string.h>
#include <stdlib.h>
#include "sha1.h"
int main(int argc, char *argv[])
	#define BYTES "abc"
	SHA1* sha1 = new SHA1();
	sha1->addBytes( BYTES, strlen( BYTES ) );
	unsigned char* digest = sha1->getDigest();
	sha1->hexPrinter( digest, 20 );
	delete sha1;
	free( digest );


I couldn't find a free SHA-1 implementation for C++ so I wrote my own. I wrote the Python version first and then the C++ one. The source code has an open source license (the so-called "MIT License" ) which allows it to be used in commercial software.


Secure Hash Standard (FIP 180-1) is the official document from the U.S. government which defines the algorithm.

Wikipedia has a very helpful article on SHA.

Corz Checksum is a useful Windows program for verifying file integrity. It uses this SHA-1 library.


Copyright © 1999-2012 Michael Leonhard