aboutsummaryrefslogtreecommitdiff
path: root/openssl/src
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2017-10-08 16:54:13 -0700
committerGitHub <[email protected]>2017-10-08 16:54:13 -0700
commit44a000f3a6317dff6504fe5def128b0b3aa04b78 (patch)
treeab40a87550ddeb20e02329eba004357e17df9367 /openssl/src
parentMerge pull request #749 from johnthagen/conf (diff)
parentInclude the hex crate and ToHex import to the second example (diff)
downloadrust-openssl-44a000f3a6317dff6504fe5def128b0b3aa04b78.tar.xz
rust-openssl-44a000f3a6317dff6504fe5def128b0b3aa04b78.zip
Merge pull request #753 from zsck/issue719
Added module-level documentation for the `sha` module.
Diffstat (limited to 'openssl/src')
-rw-r--r--openssl/src/sha.rs48
1 files changed, 48 insertions, 0 deletions
diff --git a/openssl/src/sha.rs b/openssl/src/sha.rs
index 5d9baefa..2af8f50e 100644
--- a/openssl/src/sha.rs
+++ b/openssl/src/sha.rs
@@ -1,4 +1,52 @@
//! The SHA family of hashes.
+//!
+//! SHA, or Secure Hash Algorithms, are a family of cryptographic hashing algorithms published by
+//! the National Institute of Standards and Technology (NIST). Hash algorithms such as those in
+//! the SHA family are used to map data of an arbitrary size to a fixed-size string of bytes.
+//! As cryptographic hashing algorithms, these mappings have the property of being irreversable.
+//! This property makes hash algorithms like these excellent for uses such as verifying the
+//! contents of a file- if you know the hash you expect beforehand, then you can verify that the
+//! data you have is correct if it hashes to the same value.
+//!
+//! # Examples
+//!
+//! When dealing with data that becomes available in chunks, such as while buffering data from IO,
+//! you can create a hasher that you can repeatedly update to add bytes to.
+//!
+//! ```rust
+//! extern crate openssl;
+//! extern crate hex;
+//!
+//! use openssl::sha;
+//! use hex::ToHex;
+//!
+//! fn main() {
+//! let mut hasher = sha::Sha256::new();
+//!
+//! hasher.update(b"Hello, ");
+//! hasher.update(b"world");
+//!
+//! let hash = hasher.finish();
+//! println!("Hashed \"Hello, world\" to {}", hash.to_hex());
+//! }
+//! ```
+//!
+//! On the other hand, if you already have access to all of the data you woud like to hash, you
+//! may prefer to use the slightly simpler method of simply calling the hash function corresponding
+//! to the algorithm you want to use.
+//!
+//! ```rust
+//! extern crate openssl;
+//! extern crate hex;
+//!
+//! use openssl::sha::sha256;
+//! use hex::ToHex;
+//!
+//! fn main() {
+//! let hash = sha256(b"your data or message");
+//! println!("Hash = {}", hash.to_hex());
+//! }
+//! ```
use libc::c_void;
use ffi;
use std::mem;