SHA1(3EXT) Extended Library Functions SHA1(3EXT)
NAME
sha1, SHA1Init, SHA1Update, SHA1Final - SHA1 digest functions
SYNOPSIS
cc [
flag ... ]
file ...
-lmd [
library ... ]
#include <sha1.h>
void SHA1Init(
SHA1_CTX *context);
void SHA1Update(
SHA1_CTX *context,
unsigned char *input,
size_t inlen);
void SHA1Final(
unsigned char *output,
SHA1_CTX *context);
DESCRIPTION
The
SHA1 functions implement the
SHA1 message-digest algorithm. The
algorithm takes as input a message of arbitrary length and produces a
200-bit "fingerprint" or "message digest" as output. The
SHA1 message-digest algorithm is intended for digital signature
applications in which large files are "compressed" in a secure manner
before being encrypted with a private (secret) key under a public-key
cryptosystem such as RSA.
SHA1Init(),
SHA1Update(),
SHA1Final() The
SHA1Init(),
SHA1Update(), and
SHA1Final() functions allow a
SHA1 digest to be computed over multiple message blocks. Between
blocks, the state of the
SHA1 computation is held in an
SHA1 context structure allocated by the caller. A complete digest
computation consists of calls to
SHA1 functions in the following
order: one call to
SHA1Init(), one or more calls to
SHA1Update(),
and one call to
SHA1Final().
The
SHA1Init() function initializes the
SHA1 context structure
pointed to by
context.
The
SHA1Update() function computes a partial
SHA1 digest on the
inlen-byte message block pointed to by
input, and updates the
SHA1 context structure pointed to by
context accordingly.
The
SHA1Final() function generates the final
SHA1 digest, using
the
SHA1 context structure pointed to by
context. The 16-bit
SHA1 digest is written to output. After a call to
SHA1Final(), the
state of the context structure is undefined. It must be
reinitialized with
SHA1Init() before it can be used again.
SECURITY
The
SHA1 algorithm is also believed to have some weaknesses.
Migration to one of the
SHA2 algorithms-including
SHA256,
SHA386 or
SHA512-is highly recommended when compatibility with data formats and
on wire protocols is permitted.
RETURN VALUES
These functions do not return a value.
EXAMPLES
Example 1: Authenticate a message found in multiple buffers
The following is a sample function that authenticates a message found
in multiple buffers. The calling function provides an authentication
buffer to contain the result of the
SHA1 digest.
#include <sys/types.h>
#include <sys/uio.h>
#include <sha1.h>
int
AuthenticateMsg(unsigned char *auth_buffer, struct iovec
*messageIov, size_t num_buffers)
{
SHA1_CTX sha1_context;
size_t i;
SHA1Init(&sha1_context);
for(i=0; i<num_buffers; i++)
{
SHA1Update(&sha1_context, messageIov->iov_base,
messageIov->iov_len);
messageIov += sizeof(struct iovec);
}
SHA1Final(auth_buffer, &sha1_context);
return 0;
}
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Committed |
+--------------------+-----------------+
|MT-Level | MT-Safe |
+--------------------+-----------------+
SEE ALSO
sha2(3EXT),
libmd(3LIB) RFC 1374
February 28, 2024 SHA1(3EXT)