Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ (2) — Plan9 3rd Edition (Vita Nuova)

Media Vault

Software Library

Restoration Projects

Artifacts Sought

KEYRING-SHA(2)

NAME

sha, md4, md5, sign, verify − cryptographic digests and digital signatures

SYNOPSIS

include "keyring.m";
keyring := load Keyring Keyring->PATH;
 sha: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;
sign:fn(sk: ref SK, exp: int, state: ref DigestState,
ha: string): ref Certificate;
verify:fn(pk: ref PK, cert: ref Certificate,
state: ref DigestState): int;

DESCRIPTION

Sha, ­md4 and ­md5 are cryptographically secure hash functions that produce output called a message digest.  Each function computes a hash of ­n bytes of the data in buf, and updates the current state. They can be called iteratively to form a single digest for many data blocks. The state is kept in the ­DigestState value referenced by ­state between calls.  ­State should be ­nil on the first call, and a newly allocated ­DigestState will be returned for use in subsequent calls.  On a call in which ­digest is not nil, the hash is completed and copied into the ­digest array.  ­Sha produces a 20-byte hash (SHAdlen), ­md4 and ­md5 a 16-byte one (MD4len and MD5len). 

­Sign creates a digital signature of a digest from the concatenation of: a message, the name of the signer, and an expiration time.  ­State is the digest state after running sha, ­md4 or ­md5 over the message.  ­Ha is a string specifying the hash algorithm to use: "sha", "md4" or "md5".  ­Sign extends the digest to cover the signer’s name (taken from the private key, sk) and the expiration time. It returns a certificate containing the digital signature of the digest, signer name, hash algorithm and signature algorithm. If any parameter is invalid, ­sign returns nil.  The signature algorithm is implied by the type of the private key. 

­Verify uses public key ­pk to verify a certificate.  It returns non-zero (true) if the certificate is valid; zero (false) otherwise.  ­State is the digest state after running the chosen digest algorithm over the message. 

EXAMPLES

A program to read a file and hash it using SHA might contain the following inner loop:

state: ref DigestState = nil;
while((n := sys->read(fd, buf, len buf)) > 0)
state = kr->sha(buf, n, nil, state);
digest := array[kr->SHAdlen] of byte;
kr->sha(buf, 0, digest, state);

SOURCE

­/interp/keyring.c
­/crypt/md4.c
­/crypt/md5.c
­/crypt/sha.c

Plan 9  —  June 05, 2000

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026