summaryrefslogtreecommitdiffstats
path: root/third_party/rust/rust-argon2/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--third_party/rust/rust-argon2/src/config.rs105
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);
+ }
+}