*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->OpenBSD man pages -> SHA1Pad (3)              



NAME    [Toc]    [Back]

     SHA1Init,  SHA1Update,  SHA1Pad,  SHA1Final,  SHA1Transform,
     SHA1File,  SHA1FileChunk,  SHA1Data - calculate the NIST Secure Hash Algorithm

SYNOPSIS    [Toc]    [Back]

     #include <sys/types.h>
     #include <sha1.h>

     SHA1Init(SHA1_CTX *context);

     SHA1Update(SHA1_CTX *context, const u_int8_t  *data,  size_t

     SHA1Pad(SHA1_CTX *context);

     SHA1Final(u_int8_t    digest[SHA1_DIGEST_LENGTH],   SHA1_CTX

     SHA1Transform(u_int32_t state[5],
             const u_int8_t buffer[SHA1_BLOCK_LENGTH]);

     char *
     SHA1End(SHA1_CTX *context, char *buf);

     char *
     SHA1File(const char *filename, char *buf);

     char *
     SHA1FileChunk(const char *filename, char *buf, off_t offset,
             off_t length);

     char *
     SHA1Data(const u_int8_t *data, size_t len, char *buf);

DESCRIPTION    [Toc]    [Back]

     The  SHA1 functions implement the NIST Secure Hash Algorithm
     PUB 180-1.  SHA-1 is used to generate a condensed  representation of a
     message called a message digest.  The algorithm takes a message less than
     2^64 bits as input and produces a  160-bit  digest  suitable
for use as a
     digital signature.

     The SHA1 functions are considered to be more secure than the
md4(3) and
     md5(3) functions with which they share a similar  interface.

     The  SHA1Init()  function initializes a SHA1_CTX context for
use with
     SHA1Update(), and SHA1Final().   The  SHA1Update()  function
adds data of
     length   len   to   the   SHA1_CTX   specified  by  context.
SHA1Final() is called
     when all data has been added via SHA1Update() and  stores  a
message digest
     in the digest parameter.

     The  SHA1Pad()  function can be used to apply padding to the
message digest
     as in SHA1Final(), but the current context can still be used

     The SHA1Transform() function is used by SHA1Update() to hash
     blocks and forms the core of the algorithm.   Most  programs
should use the
     interface   provided   by   SHA1Init(),   SHA1Update()   and
SHA1Final() instead of
     calling SHA1Transform() directly.

     The SHA1End() function is a front end for SHA1Final()  which
converts the
     digest into an ASCII representation of the 160 bit digest in

     The SHA1File() function calculates the digest for a file and
returns the
     result  via  SHA1End().  If SHA1File() is unable to open the
file a NULL
     pointer is returned.

     SHA1FileChunk() behaves like SHA1File() but  calculates  the
digest only
     for that portion of the file starting at offset and continuing for length
     bytes or until end  of  file  is  reached,  whichever  comes
first.  A zero
     length  can be specified to read until end of file.  A negative length or
     offset will be ignored.

     The SHA1Data() function calculates the digest  of  an  arbitrary string and
     returns the result via SHA1End().

     For  each of the SHA1End(), SHA1File(), and SHA1Data() functions the buf
     parameter should either be a string of at least  41  characters in size or
     a  NULL  pointer.  In the latter case, space will be dynamically allocated
     via malloc(3) and should be freed using free(3) when  it  is
no longer

EXAMPLES    [Toc]    [Back]

     The  follow  code fragment will calculate the digest for the
string "abc"
     which is ``0xa9993e36476816aba3e25717850c26c9cd0d89d''.

           SHA1_CTX sha;
           u_int8_t results[SHA1_DIGEST_LENGTH];
           char *buf;
           int n;

           buf = "abc";
           n = strlen(buf);
           SHA1Update(&sha, (u_int8_t *)buf, n);
           SHA1Final(results, &sha);

           /* Print the digest as one long hex value */
           for (n = 0; n < SHA1_DIGEST_LENGTH; n++)
                   printf("%02x", results[n]);

     Alternately, the helper functions could be used in the  following way:

           SHA1_CTX sha;
           u_int8_t output[SHA1_DIGEST_STRING_LENGTH];
           char *buf = "abc";

           printf("0x%s0, SHA1Data(buf, strlen(buf), output));

SEE ALSO    [Toc]    [Back]

     cksum(1), sha1(1), md4(3), md5(3), rmd160(3), sha2(3)

     J. Burrows, The Secure Hash Standard, FIPS PUB 180-1.

     D.  Eastlake  and  P. Jones, US Secure Hash Algorithm 1, RFC

HISTORY    [Toc]    [Back]

     The SHA-1 functions appeared in OpenBSD 2.0.

AUTHORS    [Toc]    [Back]

     This implementation of SHA-1 was written by Steve Reid.

     The SHA1End(), SHA1File(), SHA1FileChunk(),  and  SHA1Data()
helper functions
 are derived from code written by Poul-Henning Kamp.

CAVEATS    [Toc]    [Back]

     This  implementation of SHA-1 has not been validated by NIST
and as such
     is not in official compliance with the standard.

     If a message digest is to be copied  to  a  multi-byte  type
(ie: an array of
     five  32-bit  integers) it will be necessary to perform byte
swapping on
     little endian machines such as the i386, alpha, and vax.

OpenBSD     3.6                          April      29,      2004
[ Back ]
 Similar pages
Name OS Title
SHA384_Pad OpenBSD calculate the NIST Secure Hash Standard (version 2)
SHA384_Update OpenBSD calculate the NIST Secure Hash Standard (version 2)
SHA512_Data OpenBSD calculate the NIST Secure Hash Standard (version 2)
SHA512_End OpenBSD calculate the NIST Secure Hash Standard (version 2)
SHA512_File OpenBSD calculate the NIST Secure Hash Standard (version 2)
SHA512_FileChunk OpenBSD calculate the NIST Secure Hash Standard (version 2)
SHA512_Final OpenBSD calculate the NIST Secure Hash Standard (version 2)
SHA512_Init OpenBSD calculate the NIST Secure Hash Standard (version 2)
SHA512_Pad OpenBSD calculate the NIST Secure Hash Standard (version 2)
SHA384_Init OpenBSD calculate the NIST Secure Hash Standard (version 2)
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service