Skip to main content

TPMKey

Struct TPMKey 

Source
pub struct TPMKey {
    pub type: TPMKeyType,
    pub empty_auth: Option<bool>,
    pub policy: Option<SequenceOf<TPMPolicy>>,
    pub secret: Option<OctetString>,
    pub auth_policy: Option<SequenceOf<TPMAuthPolicy>>,
    pub description: Option<Utf8String>,
    pub rsa_parent: Option<bool>,
    pub parent: u32,
    pub pubkey: OctetString,
    pub privkey: OctetString,
}
Expand description

The design of the TPMkey ASN.1 format is that it should have a distinguishing OID at the beginning so the DER form of the key can be easily recognized. In PEM form, the key MUST have the following PEM guards: “—–BEGIN TSS2 PRIVATE KEY—–” and “—–END TSS2 PRIVATE KEY—–”

All additional information that may be needed to load the key is specified as optional explicit elements, which can be extended by later specifications, which is why the TPMkey is not versioned.

Fields§

§type: TPMKeyType

A unique OID specifying the key type:

  • TPMKEY_LOADABLE
  • TPMKEY_IMPORTABLE
  • TPMKEY_SEALED
§empty_auth: Option<bool>

An implementation needs to know as it formulates the TPM2_Load/Import/Unseal command whether it must also send down an authorization. So this parameter gives that indication. emptyAuth MUST be true if authorization is NOT required and MUST be either false or absent if authorization is required.

Since this element has three states (one representing true and two representing false) it is RECOMMENDED that implementations emitting TPMkey representations use absence of the tag to represent false. However, implementations reading TPMKey MUST be able to process all three possible states.

§policy: Option<SequenceOf<TPMPolicy>>

This MUST be present if the TPM key has a policy hash because it describes to the implementation how to construct the policy

§secret: Option<OctetString>

secret contains the additional cryptographic secret used to specify the outer wrapping of an importable object. For keys, it MUST be present for key type id-importablekey and MUST NOT be present for key type id-loadablekey. For sealed data objects of type id-sealedkey, it MAY be present and if present indicates the object is importable.

Importable objects (designed to be processed by TPM2_Import) MUST have an unencrypted inner wrapper (symmetricAlg MUST be TPM_ALG_NULL and encryptionKey MUST be empty) and an outer wrapper encrypted to the parent key using inSymSeed. The secret parameter is the fully marshalled TPM2B_ENCRYPTED_SECRET form of inSymSeed.

§auth_policy: Option<SequenceOf<TPMAuthPolicy>>

This SHOULD be present if the TPMkey policy contains a TPM2_PolicyAuthorize statement because it contains signed policies that could be used to satisfy the TPM key policy. If the TPM key has no policy hash then this MUST NOT be present.

§description: Option<Utf8String>

An optional string description for the key which is only used for display purposes, MAY be used as a user visible mnemonic for the key.

§rsa_parent: Option<bool>

This MUST be present and true if the parent is a permanent handle (MSO 0x40) and RSA 2048 is used for the primary key. If the parent is not a permanent handle then this MUST NOT be present. If the parent is a permanent handle and if P-256 is used for the primary then this MUST NOT be present. Given that P-256 primary keys are easier to generate, implementations SHOULD NOT set this flag.

§parent: u32

This MUST be present for all keys and specifies the handle of the parent key. The parent key SHOULD be either a persistent handle (MSO 0x81) or a permanent handle (MSO 0x40). Since volatile handle numbering can change unexpectedly depending on key load order, the parent SHOULD NOT be a volatile handle (MSO 0x80). The parent MUST NOT have any other MSO.

§pubkey: OctetString

This MUST be present and MUST correspond to the fully marshalled TPM2B_PUBLIC structure of the TPM Key.

§privkey: OctetString

This MUST be present and MUST correspond to the fully marshalled TPM2B_PRIVATE structure of the TPM Key. For importable keys, this must be the duplicate parameter that would be input to TPM2_Import.

Implementations§

Source§

impl TPMKey

Source

pub fn try_from_pem(pem: &[u8]) -> Result<TPMKey, Error>

Examples found in repository?
examples/printkeyfile.rs (line 6)
3fn main() {
4    let args: Vec<String> = std::env::args().collect();
5    let pem: Vec<u8> = std::fs::read(&args[1]).unwrap();
6    let key = TPMKey::try_from_pem(&pem).unwrap();
7    println!("{key}");
8}
Source

pub fn try_to_pem(&self) -> Result<String, Error>

Source§

impl TPMKey

Source

pub fn try_from_der(der: &[u8]) -> Result<TPMKey, Error>

Source

pub fn try_to_der(&self) -> Result<Vec<u8>, Error>

Source

pub fn new_loadable(parent: u32, pubkey: &[u8], privkey: &[u8]) -> Self

Source

pub fn new_importable(parent: u32, pubkey: &[u8], privkey: &[u8]) -> Self

Source

pub fn new_sealed(parent: u32, pubkey: &[u8], privkey: &[u8]) -> Self

Source

pub fn is_loadable(&self) -> bool

Source

pub fn is_importable(&self) -> bool

Source

pub fn is_sealed(&self) -> bool

Source

pub fn requires_auth(&self) -> bool

Source

pub fn validate(&self) -> Result<(), Error>

Trait Implementations§

Source§

impl AsnType for TPMKey

Source§

const TAG: Tag

The associated tag for the type. Read more
Source§

const IDENTIFIER: Identifier

Identifier of an ASN.1 type as specified in the original specification if not identical with the identifier of Self
Source§

const TAG_TREE: TagTree = _

The root of this type’s tree of tag’s if it a CHOICE type, otherwise its Leaf that points Self::TAG.
Source§

const CONSTRAINTS: Constraints = Constraints::NONE

The set of constraints for values of the given type.
Source§

const IS_CHOICE: bool = false

Whether the type is choice type. PER/OER encoding rules require this knowledge.
Source§

fn is_present(&self) -> bool

Whether the type is present with value. OPTIONAL fields are common in SEQUENCE or SET. Read more
Source§

impl Clone for TPMKey

Source§

fn clone(&self) -> TPMKey

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Constructed<10> for TPMKey

Source§

const FIELDS: Fields<10usize>

Fields contained in the “root component list”.
Source§

const IS_EXTENSIBLE: bool = false

Whether the type is extensible.
Source§

const EXTENDED_FIELDS: Option<Fields<0usize>> = None

Fields contained in the list of extensions.
Source§

impl Debug for TPMKey

Source§

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

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

impl Decode for TPMKey

Source§

fn decode_with_tag_and_constraints<D: Decoder>( decoder: &mut D, tag: Tag, constraints: Constraints, ) -> Result<Self, D::Error>

Decode this value implicitly tagged with tag from a given ASN.1 decoder with a set of constraints on what values of that type are allowed. Read more
Source§

fn decode<D>(decoder: &mut D) -> Result<Self, <D as Decoder>::Error>
where D: Decoder,

Decode this value from a given ASN.1 decoder. Read more
Source§

fn decode_with_tag<D>( decoder: &mut D, tag: Tag, ) -> Result<Self, <D as Decoder>::Error>
where D: Decoder,

Decode this value implicitly tagged with tag from a given ASN.1 decoder. Read more
Source§

fn decode_with_constraints<D>( decoder: &mut D, constraints: Constraints, ) -> Result<Self, <D as Decoder>::Error>
where D: Decoder,

Decode this value from a given ASN.1 decoder with a set of constraints on what values of that type are allowed. Read more
Source§

impl Display for TPMKey

Source§

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

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

impl Encode for TPMKey

Source§

fn encode_with_tag_and_constraints<'encoder, EN: Encoder<'encoder>>( &self, encoder: &mut EN, tag: Tag, constraints: Constraints, identifier: Identifier, ) -> Result<(), EN::Error>

Encode this value with tag into the given crate::Encoder with the constraints the values this is allowed to encode into. Read more
Source§

fn encode<'b, E>( &self, encoder: &mut E, ) -> Result<(), <E as Encoder<'b>>::Error>
where E: Encoder<'b>,

Encodes self’s data into the given crate::Encoder. Read more
Source§

fn encode_with_tag<'b, E>( &self, encoder: &mut E, tag: Tag, ) -> Result<(), <E as Encoder<'b>>::Error>
where E: Encoder<'b>,

Encode this value with tag into the given crate::Encoder. Read more
Source§

fn encode_with_identifier<'b, E>( &self, encoder: &mut E, identifier: Identifier, ) -> Result<(), <E as Encoder<'b>>::Error>
where E: Encoder<'b>,

Encode this value with identifier into the given crate::Encoder. Read more
Source§

fn encode_with_tag_and_identifier<'b, E>( &self, encoder: &mut E, tag: Tag, identifier: Identifier, ) -> Result<(), <E as Encoder<'b>>::Error>
where E: Encoder<'b>,

Encode this value with tag and identifier into the given crate::Encoder. Read more
Source§

fn encode_with_constraints<'b, E>( &self, encoder: &mut E, constraints: Constraints, ) -> Result<(), <E as Encoder<'b>>::Error>
where E: Encoder<'b>,

Encode this value into the given crate::Encoder with the constraints the values this is allowed to encode into. Read more
Source§

fn encode_with_constraints_and_identifier<'b, E>( &self, encoder: &mut E, constraints: Constraints, identifier: Identifier, ) -> Result<(), <E as Encoder<'b>>::Error>
where E: Encoder<'b>,

Encode this value into the given crate::Encoder with identifier and the constraints the values this is allowed to encode into. Read more
Source§

impl Eq for TPMKey

Source§

impl Hash for TPMKey

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for TPMKey

Source§

fn eq(&self, other: &TPMKey) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for TPMKey

Auto Trait Implementations§

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> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

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

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

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

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
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.