plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

sechash.3 (3081B)


      1 .TH SECHASH 3
      2 .SH NAME
      3 md4, md5, sha1, hmac_md5, hmac_sha1, md5pickle, md5unpickle, sha1pickle, sha1unpickle \- cryptographically secure hashes
      4 .SH SYNOPSIS
      5 .B #include <u.h>
      6 .br
      7 .B #include <libc.h>
      8 .br
      9 .B #include <mp.h>
     10 .br
     11 .B #include <libsec.h>
     12 .PP
     13 .B
     14 DigestState*	md4(uchar *data, ulong dlen, uchar *digest,
     15 .B
     16 			    DigestState *state)
     17 .PP
     18 .B
     19 DigestState*	md5(uchar *data, ulong dlen, uchar *digest,
     20 .B
     21 			    DigestState *state)
     22 .PP
     23 .B
     24 char*		md5pickle(MD5state *state)
     25 .PP
     26 .B
     27 MD5state*		md5unpickle(char *p);
     28 .PP
     29 .B
     30 DigestState*	sha1(uchar *data, ulong dlen, uchar *digest,
     31 .B
     32 			    DigestState *state)
     33 .PP
     34 .B
     35 char*		sha1pickle(MD5state *state)
     36 .PP
     37 .B
     38 MD5state*		sha1unpickle(char *p);
     39 .PP
     40 .B
     41 DigestState*	hmac_md5(uchar *data, ulong dlen,
     42 .br
     43 .B
     44 			    uchar *key, ulong klen,
     45 .br
     46 .B
     47 			    uchar *digest, DigestState *state)
     48 .PP
     49 .B
     50 DigestState*	hmac_sha1(uchar *data, ulong dlen,
     51 .br
     52 .B
     53 			    uchar *key, ulong klen,
     54 .br
     55 .B
     56 			    uchar *digest, DigestState *state)
     57 .SH DESCRIPTION
     58 .PP
     59 These functions implement
     60 the cryptographic hash functions MD4, MD5, and SHA1.  The output of the
     61 hash is called a
     62 .IR digest .
     63 A hash is secure if, given the hashed data and the digest,
     64 it is difficult to predict the change to the digest resulting
     65 from some change to the data without rehashing
     66 the whole data.  Therefore, if a secret is part of the hashed
     67 data, the digest can be used as an integrity check of the data by anyone
     68 possessing the secret.
     69 .PP
     70 The routines
     71 .IR md4 ,
     72 .IR md5 ,
     73 .IR sha1 ,
     74 .IR hmac_md5 ,
     75 and
     76 .I hmac_sha1
     77 differ only in the length of the resulting digest
     78 and in the security of the hash.  Usage for each is the same.
     79 The first call to the routine should have
     80 .B nil
     81 as the 
     82 .I state
     83 parameter.  This call returns a state which can be used to chain
     84 subsequent calls.
     85 The last call should have digest non-\fBnil\fR.
     86 .I Digest
     87 must point to a buffer of at least the size of the digest produced.
     88 This last call will free the state and copy the result into
     89 .IR digest .
     90 For example, to hash a single buffer using
     91 .IR md5 :
     92 .EX
     93 
     94 	uchar digest[MD5dlen];
     95 
     96 	md5(data, len, digest, nil);
     97 .EE
     98 .PP
     99 To chain a number of buffers together,
    100 bounded on each end by some secret:
    101 .EX
    102 
    103 	char buf[256];
    104 	uchar digest[MD5dlen];
    105 	DigestState *s;
    106 
    107 	s = md5("my password", 11, nil, nil);
    108 	while((n = read(fd, buf, 256)) > 0)
    109 		md5(buf, n, nil, s);
    110 	md5("drowssap ym", 11, digest, s);
    111 .EE
    112 .PP
    113 The constants
    114 .IR MD4dlen ,
    115 .IR MD5dlen ,
    116 and
    117 .I SHA1dlen
    118 define the lengths of the digests.
    119 .PP
    120 .I Hmac_md5
    121 and
    122 .I hmac_sha1
    123 are used slightly differently.  These hash algorithms are keyed and require
    124 a key to be specified on every call.
    125 The digest lengths for these hashes are
    126 .I MD5dlen
    127 and
    128 .I SHA1dlen
    129 respectively.
    130 .PP
    131 The functions
    132 .I md5pickle
    133 and
    134 .I sha1pickle
    135 marshal the state of a digest for transmission.
    136 .I Md5unpickle
    137 and
    138 .I sha1unpickle
    139 unmarshal a pickled digest.
    140 All four routines return a pointer to a newly
    141 .MR malloc (3) 'd
    142 object.
    143 .SH SOURCE
    144 .B \*9/src/libsec
    145 .SH SEE ALSO
    146 .MR aes (3) ,
    147 .MR blowfish (3) ,
    148 .MR des (3) ,
    149 .MR elgamal (3) ,
    150 .MR rc4 (3) ,
    151 .MR rsa (3)