diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /third_party/rust/rust-argon2/src/config.rs | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
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); + } +} |