# Crate sha1 [−] [src]

An implementation of the SHA-1 cryptographic hash algorithm. To use this module, first create a `Sha1` object using the `Sha1` constructor, then feed it an input message using the `input` or `input_str` methods, which may be called any number of times; they will buffer the input until there is enough to call the block algorithm.

After the entire input has been fed to the hash read the result using the `result` or `result_str` methods. The first will return bytes, and the second will return a `String` object of the same bytes represented in hexadecimal form.

The `Sha1` object may be reused to create multiple hashes by calling the `reset()` method. These traits are implemented by all hash digest algorithms that implement the `Digest` trait. An example of use is:

```use sha1::{Sha1, Digest};

// create a Sha1 object
let mut sh = Sha1::default();

// write input message
sh.input(b"hello world");

// read hash digest in the form of GenericArray which is in this case
// equivalent to [u8; 20]
let output = sh.result();
assert_eq!(output[..], [0x2a, 0xae, 0x6c, 0x35, 0xc9, 0x4f, 0xcf, 0xb4, 0x15, 0xdb,
0xe9, 0x5f, 0x40, 0x8b, 0x9c, 0xe9, 0x1e, 0xe8, 0x46, 0xed]);```

# Mathematics

The mathematics of the SHA-1 algorithm are quite interesting. In its definition, The SHA-1 algorithm uses:

• 1 binary operation on bit-arrays:
• "exclusive or" (XOR)
• 2 binary operations on integers:
• "rotate left" (ROL)
• 3 ternary operations on bit-arrays:
• "choose" (CH)
• "parity" (PAR)
• "majority" (MAJ)

Some of these functions are commonly found in all hash digest algorithms, but some, like "parity" is only found in SHA-1.

## Structs

 Sha1 Structure representing the state of a SHA-1 computation

## Traits

 Digest The `Digest` trait specifies an interface common for digest functions.