[−][src]Enum sequoia_openpgp::crypto::S2K
String-to-Key (S2K) specifiers.
String-to-key (S2K) specifiers are used to convert password
strings into symmetric-key encryption/decryption keys. See
Section 3.7 of RFC 4880. This is used to encrypt messages with
a password (see SKESK
), and to protect secret keys (see
key::Encrypted
).
Note: This enum cannot be exhaustively matched to allow future extensions.
Variants (Non-exhaustive)
Repeatently hashes the password with a public salt
value.
Fields of Iterated
hash: HashAlgorithm
Hash used for key derivation.
salt: [u8; 8]
Public salt value mixed into the password.
hash_bytes: u32
Number of bytes to hash.
This parameter increases the workload for an attacker
doing a dictionary attack. Note that not all values are
representable. See S2K::new_iterated
.
Use S2K::Iterated
.
Hashes the password with a public salt
value.
This mechanism does not use iteration to increase the time it takes to derive the key from the password. This makes dictionary attacks more feasible. Do not use this variant.
Fields of Salted
hash: HashAlgorithm
Use S2K::Iterated
.
Hash used for key derivation.
salt: [u8; 8]
Use S2K::Iterated
.
Public salt value mixed into the password.
Use S2K::Iterated
.
Simply hashes the password.
This mechanism uses neither iteration to increase the time it takes to derive the key from the password nor does it salt the password. This makes dictionary attacks more feasible.
This mechanism has been deprecated in RFC 4880. Do not use this variant.
Fields of Simple
Private S2K algorithm.
Fields of Private
tag: u8
Tag identifying the private algorithm.
Tags 100 to 110 are reserved for private use.
parameters: Option<Box<[u8]>>
The parameters for the private algorithm.
This is optional, because when we parse a packet
containing an unknown S2K algorithm, we do not know how
many octets to attribute to the S2K's parameters. In this
case, parameters
is set to None
. Note that the
information is not lost, but stored in the packet. If the
packet is serialized again, it is written out.
Unknown S2K algorithm.
Fields of Unknown
tag: u8
Tag identifying the unknown algorithm.
parameters: Option<Box<[u8]>>
The parameters for the unknown algorithm.
This is optional, because when we parse a packet
containing an unknown S2K algorithm, we do not know how
many octets to attribute to the S2K's parameters. In this
case, parameters
is set to None
. Note that the
information is not lost, but stored in the packet. If the
packet is serialized again, it is written out.
Implementations
impl S2K
[src]
pub fn new_iterated(hash: HashAlgorithm, approx_hash_bytes: u32) -> Result<Self>
[src]
Creates a new iterated S2K
object.
Usually, you should use S2K
s Default
implementation to
create S2K
objects with sane default parameters. The
parameters are chosen with contemporary machines in mind, and
should also be usable on lower-end devices like smart phones.
Using this method, you can tune the parameters for embedded devices. Note, however, that this also decreases the work factor for attackers doing dictionary attacks.
pub fn derive_key(
&self,
password: &Password,
key_size: usize
) -> Result<SessionKey>
[src]
&self,
password: &Password,
key_size: usize
) -> Result<SessionKey>
Derives a key of the given size from a password.
pub fn is_supported(&self) -> bool
[src]
Returns whether this S2K mechanism is supported.
Trait Implementations
impl Clone for S2K
[src]
impl Debug for S2K
[src]
impl Default for S2K
[src]
impl Display for S2K
[src]
impl Eq for S2K
[src]
impl Hash for S2K
[src]
pub fn hash<__H: Hasher>(&self, state: &mut __H)
[src]
pub fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
impl Marshal for S2K
[src]
pub fn serialize(&self, w: &mut dyn Write) -> Result<()>
[src]
pub fn export(&self, o: &mut dyn Write) -> Result<()>
[src]
impl MarshalInto for S2K
[src]
pub fn serialized_len(&self) -> usize
[src]
pub fn serialize_into(&self, buf: &mut [u8]) -> Result<usize>
[src]
pub fn to_vec(&self) -> Result<Vec<u8>>
[src]
pub fn export_into(&self, buf: &mut [u8]) -> Result<usize>
[src]
pub fn export_to_vec(&self) -> Result<Vec<u8>>
[src]
impl<'a> Parse<'a, S2K> for S2K
[src]
pub fn from_reader<R: 'a + Read + Send + Sync>(reader: R) -> Result<Self>
[src]
Reads an S2K from reader
.
pub fn from_file<P: AsRef<Path>>(path: P) -> Result<T>
[src]
pub fn from_bytes<D: AsRef<[u8]> + ?Sized + Send + Sync>(
data: &'a D
) -> Result<T>
[src]
data: &'a D
) -> Result<T>
impl PartialEq<S2K> for S2K
[src]
impl StructuralEq for S2K
[src]
impl StructuralPartialEq for S2K
[src]
Auto Trait Implementations
impl RefUnwindSafe for S2K
[src]
impl Send for S2K
[src]
impl Sync for S2K
[src]
impl Unpin for S2K
[src]
impl UnwindSafe for S2K
[src]
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> DynClone for T where
T: Clone,
[src]
T: Clone,
pub fn __clone_box(&self, Private) -> *mut ()
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,