diff options
Diffstat (limited to '')
-rw-r--r-- | third_party/rust/rust-argon2/src/config.rs | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/third_party/rust/rust-argon2/src/config.rs b/third_party/rust/rust-argon2/src/config.rs new file mode 100644 index 0000000000..c63cecc43a --- /dev/null +++ b/third_party/rust/rust-argon2/src/config.rs @@ -0,0 +1,105 @@ +// Copyright (c) 2017 Martijn Rijkeboer <mrr@sru-systems.com> +// +// 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. + +use super::common; +use super::thread_mode::ThreadMode; +use super::variant::Variant; +use super::version::Version; + +/// Structure containing configuration settings. +/// +/// # Examples +/// +/// ``` +/// use argon2::{Config, ThreadMode, Variant, Version}; +/// +/// let config = Config::default(); +/// assert_eq!(config.ad, &[]); +/// assert_eq!(config.hash_length, 32); +/// assert_eq!(config.lanes, 1); +/// assert_eq!(config.mem_cost, 4096); +/// assert_eq!(config.secret, &[]); +/// assert_eq!(config.thread_mode, ThreadMode::Sequential); +/// assert_eq!(config.time_cost, 3); +/// assert_eq!(config.variant, Variant::Argon2i); +/// assert_eq!(config.version, Version::Version13); +/// ``` +#[derive(Clone, Debug, PartialEq)] +pub struct Config<'a> { + /// The associated data. + pub ad: &'a [u8], + + /// The length of the resulting hash. + pub hash_length: u32, + + /// The number of lanes. + pub lanes: u32, + + /// The amount of memory requested (KB). + pub mem_cost: u32, + + /// The key. + pub secret: &'a [u8], + + /// The thread mode. + pub thread_mode: ThreadMode, + + /// The number of passes. + pub time_cost: u32, + + /// The variant. + pub variant: Variant, + + /// The version number. + pub version: Version, +} + +impl<'a> Config<'a> { + pub fn uses_sequential(&self) -> bool { + self.thread_mode == ThreadMode::Sequential || self.lanes == 1 + } +} + +impl<'a> Default for Config<'a> { + fn default() -> Config<'a> { + Config { + ad: &[], + hash_length: common::DEF_HASH_LENGTH, + lanes: common::DEF_LANES, + mem_cost: common::DEF_MEMORY, + secret: &[], + thread_mode: ThreadMode::default(), + time_cost: common::DEF_TIME, + variant: Variant::default(), + version: Version::default(), + } + } +} + + +#[cfg(test)] +mod tests { + + use super::*; + use variant::Variant; + use version::Version; + + #[test] + fn default_returns_correct_instance() { + let config = Config::default(); + assert_eq!(config.ad, &[]); + assert_eq!(config.hash_length, 32); + assert_eq!(config.lanes, 1); + assert_eq!(config.mem_cost, 4096); + assert_eq!(config.secret, &[]); + assert_eq!(config.thread_mode, ThreadMode::Sequential); + assert_eq!(config.time_cost, 3); + assert_eq!(config.variant, Variant::Argon2i); + assert_eq!(config.version, Version::Version13); + } +} |