forsyth20121205-174063a80cc13 years agoHistory
144 lines · 3.5 KB · Text
RawDownload
.TH CRYPT-SHA1 2.SH NAMEcrypt: sha1, sha224, sha256, sha384, sha512, md4, md5, hmac_sha1, hmac_md5 \- cryptographic digests.SH SYNOPSIS.EXinclude "ipints.m";ipints := load IPints IPints->PATH;IPint: import ipints; include "crypt.m";crypt := load Crypt Crypt->PATH; DigestState: adt{    # hidden state    copy:   fn(d: self ref DigestState): ref DigestState;}; .ta \w'verify:\ 'u +\w'fn(\ \ \ 'usha1:	fn(buf: array of byte, n: int, digest: array of byte,		state: ref DigestState): ref DigestState;sha224:	fn(buf: array of byte, n: int, digest: array of byte,		state: ref DigestState): ref DigestState;sha256:	fn(buf: array of byte, n: int, digest: array of byte,		state: ref DigestState): ref DigestState;sha384:	fn(buf: array of byte, n: int, digest: array of byte,		state: ref DigestState): ref DigestState;sha512:	fn(buf: array of byte, n: int, digest: array of byte,		state: ref DigestState): ref DigestState;md4:	fn(buf: array of byte, n: int, digest: array of byte,		state: ref DigestState): ref DigestState;md5:	fn(buf: array of byte, n: int, digest: array of byte,		state: ref DigestState): ref DigestState; SHA1dlen, SHA224dlen, SHA256dlen, SHA384dlen, SHA512dlen, MD4dlen, MD5dlen: con ...; hmac_sha1: fn(buf: array of byte, n: int, key: array of byte,		    digest: array of byte,		    state: ref DigestState): ref DigestState;hmac_md5:  fn(buf: array of byte, n: int, key: array of byte,		    digest: array of byte,		    state: ref DigestState): ref DigestState;.EE.SH DESCRIPTION.BR Sha1 ,.BR sha224 ,.BR sha256 ,.BR sha384 ,.BR sha512 ,.B md4and.B md5are cryptographically secure hash functions that produce output called a message digest.Each function computes a hash of.I nbytes of the data in.IR buf ,using the named algorithm,and updates the current.IR state .They can be called iteratively to form a single digest for many data blocks.The state is kept in the.B DigestStatevalue referenced by.I statebetween calls..I Stateshould be.B nilon the first call, and a newly allocated.B DigestStatewill be returned for use in subsequent calls.On a call in which.I digestis not.BR nil ,the hash is completed and copied into the.I digestarray..B Sha1produces a 20-byte hash.RB ( SHA1dlen ),.B sha224a 28-byte hash.RB ( SHA224dlen ),.B sha256a 32-byte hash.RB ( SHA256dlen ),.B sha384a 48-byte hash.RB ( SHA384dlen ),.B sha256a 64-byte hash.RB ( SHA512dlen ),.B md4and.B md5a 16-byte one.RB ( MD4lenand.BR MD5len )..PP.B Hmac_sha1and.B hmac_md5are keyed versions of the hashing functions, following Internet RFC2104.The.I keymust be provided in each call, but otherwisethe calling conventions are those of.BR sha1 .The.I keymust currently be no more than 64 bytes..PP.B DigestStatehides the state of partially completed hash functions during processing.Its.B copyoperation returns a reference to a new copy of a given state..SH EXAMPLESA program to read a file and hash it using SHA might contain the following inner loop:.IP.EXstate: ref DigestState = nil;while((n := sys->read(fd, buf, len buf)) > 0)	state = kr->sha1(buf, n, nil, state);digest := array[kr->SHA1dlen] of byte;kr->sha1(buf, 0, digest, state);.EE.SH SOURCE.B /libinterp/crypt.c.br.B /libsec/port/hmac.c.br.B /libsec/port/md4.c.br.B /libsec/port/md5.c.br.B /libsec/port/sha1.c.SH BUGSThe MD4 algorithm is included only to allow communication with softwarethat might still use it; it should not otherwise be used now, because itis easily broken.