Credential

Struct Credential 

Source
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: KeyId

What 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>

Source§

fn clone(&self) -> Credential<'l>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'l> Debug for Credential<'l>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de: 'l, 'l> Deserialize<'de> for Credential<'l>

Source§

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>

Source§

fn eq(&self, other: &Credential<'l>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'l> Serialize for Credential<'l>

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<'l> Copy for Credential<'l>

Source§

impl<'l> Eq for Credential<'l>

Source§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,