pub struct SealingKeysProxy { /* private fields */ }Implementations§
Source§impl SealingKeysProxy
impl SealingKeysProxy
Sourcepub fn new(channel: AsyncChannel) -> Self
pub fn new(channel: AsyncChannel) -> Self
Create a new Proxy for fuchsia.security.keymint/SealingKeys.
Sourcepub fn take_event_stream(&self) -> SealingKeysEventStream
pub fn take_event_stream(&self) -> SealingKeysEventStream
Get a Stream of events from the remote end of the protocol.
§Panics
Panics if the event stream was already taken.
Sourcepub fn create_sealing_key(
&self,
key_info: &[u8],
) -> QueryResponseFut<SealingKeysCreateSealingKeyResult, DefaultFuchsiaResourceDialect> ⓘ
pub fn create_sealing_key( &self, key_info: &[u8], ) -> QueryResponseFut<SealingKeysCreateSealingKeyResult, DefaultFuchsiaResourceDialect> ⓘ
Generates a new sealing key to seal and unseal secrets.
|key_info| is information to be cryptographically bound to the returned key.
- The client will have to supply it in all uses (other than key deletion) of the returned key.
- It serves two purposes: (1) internally by the key manager to identify the key owner and (2) as a password to mitigate potential attacks from the key manager and as well as other clients.
- It is recommended to include sufficient entropy in it (using it as a password) to mitigage potential attacks from the secure world (the key manager’s execution environment) or from other clients.
- It is acceptible to pass a constant if deriving and persisting a password is too cumbersome and the client fully trust the secure world and there are not many other clients.
The client is responsible for persisting both |key_info| and the returned |key_blob|. The key blob is encrypted with a TEE-private key. It is guaranteed to be unique for each call (even with the same key info). It can be stored in unsecure storage.
Returns:
- The sealing key if everything worked.
- FAILED_CREATE if the key creation failed, e.g., the |key_info| was empty.
Sourcepub fn seal(
&self,
key_info: &[u8],
key_blob: &[u8],
secret: &[u8],
) -> QueryResponseFut<SealingKeysSealResult, DefaultFuchsiaResourceDialect> ⓘ
pub fn seal( &self, key_info: &[u8], key_blob: &[u8], secret: &[u8], ) -> QueryResponseFut<SealingKeysSealResult, DefaultFuchsiaResourceDialect> ⓘ
Seals a secret using a sealing key identified by its info and blob:
- The key info has to match the one supplied when generating the sealing key.
Note that the secret may be a key itself. It has no bearing on the seal operation.
Returns:
- The sealed secret if everything worked.
- KEY_REQUIRES_UPGRADE if keymint indicates that the sealing key requires upgrade.
- FAILED_SEAL if the sealing failed for another reason, e.g., sealing key info or blob mismatch.
Sourcepub fn unseal(
&self,
key_info: &[u8],
key_blob: &[u8],
sealed_secret: &[u8],
) -> QueryResponseFut<SealingKeysUnsealResult, DefaultFuchsiaResourceDialect> ⓘ
pub fn unseal( &self, key_info: &[u8], key_blob: &[u8], sealed_secret: &[u8], ) -> QueryResponseFut<SealingKeysUnsealResult, DefaultFuchsiaResourceDialect> ⓘ
Unseals a sealed secret using a sealing key identified by its info and blob:
- The key info has to match the one supplied when generating the sealing key.
- The key blob has to match the one used to seal the secret.
Note that the secret may be a key itself. It has no bearing on the unseal operation.
Returns:
- The unsealed secret if everything worked.
- KEY_REQUIRES_UPGRADE if keymint indicates that the sealing key requires upgrade.
- FAILED_UNSEAL if the unsealing failed for another reason, e.g., sealing key info or blob mismatch.
Sourcepub fn upgrade_sealing_key(
&self,
key_info: &[u8],
key_blob: &[u8],
) -> QueryResponseFut<SealingKeysUpgradeSealingKeyResult, DefaultFuchsiaResourceDialect> ⓘ
pub fn upgrade_sealing_key( &self, key_info: &[u8], key_blob: &[u8], ) -> QueryResponseFut<SealingKeysUpgradeSealingKeyResult, DefaultFuchsiaResourceDialect> ⓘ
Upgrades a sealing key that has been deemed out-of-date by keymint. The sealing key to upgrade is identified by its info and blob:
- The key info has to match the one supplied when generating the sealing key.
- The key blob has to match the blob returned when generating the sealing key.
Note that after upgrading a key, both the old key and new key will be occupying limited key storage in keymint. This means that clients can unintentionally exhaust key storage in two ways:
- Upgrading a key and failing to delete the old key after upgrade.
- Successfully upgrading a key, failing to persist the new key, and later (e.g., after a reboot) upgrading the key again.
Both of the above missteps on the part of the client will “waste” one key slot in keymint, and repeated missteps (e.g., a boot loop that upgrades a key, fails to persist the new key, then reboots) can exhaust available key storage. Clients are responsible for old (upgraded) keys and persisting new (result of a successful key upgrade) to ensure that key slots are not wasted.
Returns
- The upgraded key blob if everything worked.
- FAILED_UPGRADE if the upgrade failed.
Sourcepub fn delete_sealing_key(
&self,
key_blob: &[u8],
) -> QueryResponseFut<SealingKeysDeleteSealingKeyResult, DefaultFuchsiaResourceDialect> ⓘ
pub fn delete_sealing_key( &self, key_blob: &[u8], ) -> QueryResponseFut<SealingKeysDeleteSealingKeyResult, DefaultFuchsiaResourceDialect> ⓘ
Deletes a sealing key from keymint.
This operation should be used to delete old (upgraded) keys.
Returns
- Nothing if everything worked.
- FAILED_DELETE if deletion failed.
Trait Implementations§
Source§impl Clone for SealingKeysProxy
impl Clone for SealingKeysProxy
Source§impl Debug for SealingKeysProxy
impl Debug for SealingKeysProxy
Source§impl Proxy for SealingKeysProxy
impl Proxy for SealingKeysProxy
Source§type Protocol = SealingKeysMarker
type Protocol = SealingKeysMarker
Proxy controls.