8856aed96b
Rust-crypto doesn't seem to have good rustpkg support so I've pulled the old MD5 implementation from libextra in for now.
82 lines
2.1 KiB
Rust
82 lines
2.1 KiB
Rust
// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
|
|
// file at the top-level directory of this distribution and at
|
|
// http://rust-lang.org/COPYRIGHT.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
// option. This file may not be copied, modified, or distributed
|
|
// except according to those terms.
|
|
|
|
//! Common functionality related to cryptographic digest functions
|
|
|
|
use std::vec;
|
|
|
|
use extra::hex::ToHex;
|
|
|
|
|
|
/**
|
|
* The Digest trait specifies an interface common to digest functions, such as SHA-1 and the SHA-2
|
|
* family of digest functions.
|
|
*/
|
|
pub trait Digest {
|
|
/**
|
|
* Provide message data.
|
|
*
|
|
* # Arguments
|
|
*
|
|
* * input - A vector of message data
|
|
*/
|
|
fn input(&mut self, input: &[u8]);
|
|
|
|
/**
|
|
* Retrieve the digest result. This method may be called multiple times.
|
|
*
|
|
* # Arguments
|
|
*
|
|
* * out - the vector to hold the result. Must be large enough to contain output_bits().
|
|
*/
|
|
fn result(&mut self, out: &mut [u8]);
|
|
|
|
/**
|
|
* Reset the digest. This method must be called after result() and before supplying more
|
|
* data.
|
|
*/
|
|
fn reset(&mut self);
|
|
|
|
/**
|
|
* Get the output size in bits.
|
|
*/
|
|
fn output_bits(&self) -> uint;
|
|
|
|
/**
|
|
* Convenience function that feeds a string into a digest.
|
|
*
|
|
* # Arguments
|
|
*
|
|
* * `input` The string to feed into the digest
|
|
*/
|
|
fn input_str(&mut self, input: &str) {
|
|
self.input(input.as_bytes());
|
|
}
|
|
|
|
/**
|
|
* Convenience function that retrieves the result of a digest as a
|
|
* newly allocated vec of bytes.
|
|
*/
|
|
fn result_bytes(&mut self) -> ~[u8] {
|
|
let mut buf = vec::from_elem((self.output_bits()+7)/8, 0u8);
|
|
self.result(buf);
|
|
buf
|
|
}
|
|
|
|
/**
|
|
* Convenience function that retrieves the result of a digest as a
|
|
* ~str in hexadecimal format.
|
|
*/
|
|
fn result_str(&mut self) -> ~str {
|
|
self.result_bytes().to_hex()
|
|
}
|
|
}
|
|
|