pub struct Credential<'l> {
pub label: &'l [u8],
pub kind: Kind,
pub algorithm: Algorithm,
pub digits: u8,
pub secret: KeyId,
pub touch_required: bool,
pub counter: Option<u32>,
}Fields§
§label: &'l [u8]§kind: Kind§algorithm: Algorithm§digits: u8§secret: KeyIdWhat we get here (inspecting the client app) may not be the raw K, but K’ in HMAC lingo, i.e., If secret.len() < block size (64B for Sha1/Sha256, 128B for Sha512), then it’s the hash of the secret. Otherwise, it’s the secret, padded to length at least 14B with null bytes. This is of no concern to us, as is it does not change the MAC.
The 14 is a bit strange: RFC 4226, section 4 says: “The algorithm MUST use a strong shared secret. The length of the shared secret MUST be at least 128 bits. This document RECOMMENDs a shared secret length of 160 bits.”
Meanwhile, the client app just pads up to 14B :)
touch_required: bool§counter: Option<u32>Trait Implementations§
Source§impl<'l> Clone for Credential<'l>
impl<'l> Clone for Credential<'l>
Source§fn clone(&self) -> Credential<'l>
fn clone(&self) -> Credential<'l>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<'l> Debug for Credential<'l>
impl<'l> Debug for Credential<'l>
Source§impl<'de: 'l, 'l> Deserialize<'de> for Credential<'l>
impl<'de: 'l, 'l> Deserialize<'de> for Credential<'l>
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl<'l> PartialEq for Credential<'l>
impl<'l> PartialEq for Credential<'l>
Source§impl<'l> Serialize for Credential<'l>
impl<'l> Serialize for Credential<'l>
impl<'l> Copy for Credential<'l>
impl<'l> Eq for Credential<'l>
impl<'l> StructuralPartialEq for Credential<'l>
Auto Trait Implementations§
impl<'l> Freeze for Credential<'l>
impl<'l> RefUnwindSafe for Credential<'l>
impl<'l> Send for Credential<'l>
impl<'l> Sync for Credential<'l>
impl<'l> Unpin for Credential<'l>
impl<'l> UnwindSafe for Credential<'l>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more