cryptlib

A powerful security toolkit which allows even inexperienced crypto 
programmers to easily add encryption and authentication services to their 
software.

Website: http://www.cs.auckland.ac.nz/~pgut001/cryptlib/
Platforms supported: Win32, Linux
Headers to include: cryptlib.bi
Header version: from 2005
Examples: in examples/math/cryptlib/

Example
	#include Once "cryptlib.bi"

	Function calc_hash( ByVal filename As String, ByVal algo As CRYPT_ALGO_TYPE ) As String
	   Const BUFFER_SIZE = 8192
	   Dim As Byte buffer( 0 To BUFFER_SIZE-1 )

	   '' create a new context using the wanted algorithm
	   Dim As CRYPT_CONTEXT ctx
	   cryptCreateContext( @ctx, CRYPT_UNUSED, algo )

	   '' open input file in binary mode
	   Dim As Integer f = FreeFile()
	   If( Open( filename For Binary Access Read As #f ) <> 0 ) Then
	      Return ""
	   End If

	   '' read until end-of-file
	   Do Until( EOF( f ) )
	      Dim As Integer oldpos = Seek( f )
	      Get #f, , buffer()
	      Dim As Integer readlength = Seek( f ) - oldpos
	      '' encrypt
	      cryptEncrypt( ctx, @buffer(0), readlength )
	   Loop

	   '' close input file
	   Close #f

	   '' finalize
	   cryptEncrypt( ctx, 0, 0 )

	   '' get the hash result
	   Dim As Long buffersize = BUFFER_SIZE
	   cryptGetAttributeString( ctx, CRYPT_CTXINFO_HASHVALUE, @buffer(0), @buffersize )

	   '' convert to hexadecimal
	   Dim As String result = ""
	   For i As Integer = 0 To buffersize-1
	      result += Hex( buffer(i) )
	   Next
	   
	   '' free the context
	   cryptDestroyContext( ctx )

	   Return result
	End Function

	   Dim As String filename = Trim( Command(1) )
	   If( Len( filename ) = 0 ) Then
	      Print "Usage: hash.exe filename"
	      End -1
	   End If

	   '' init cryptlib
	   cryptInit( )

	   '' calculate hashes
	   Print "md5:  "; calc_hash( filename, CRYPT_ALGO_MD5 )
	   Print "sha1: "; calc_hash( filename, CRYPT_ALGO_SHA1 )

	   '' shutdown cryptlib
	   cryptEnd( )

	   Sleep

   
