1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
use crate::{VaultRequestMessage, VaultResponseMessage, VaultSync, VaultSyncCoreError}; use ockam_core::Result; use ockam_node::block_future; use ockam_vault_core::{PublicKey, Secret, SecretAttributes, SecretKey, SecretVault}; impl SecretVault for VaultSync { fn secret_generate(&mut self, attributes: SecretAttributes) -> Result<Secret> { block_future(&self.ctx.runtime(), async move { self.send_message(VaultRequestMessage::SecretGenerate { attributes }) .await?; let resp = self.receive_message().await?; if let VaultResponseMessage::SecretGenerate(s) = resp { Ok(s) } else { Err(VaultSyncCoreError::InvalidResponseType.into()) } }) } fn secret_import(&mut self, secret: &[u8], attributes: SecretAttributes) -> Result<Secret> { block_future(&self.ctx.runtime(), async move { self.send_message(VaultRequestMessage::SecretImport { secret: secret.into(), attributes, }) .await?; let resp = self.receive_message().await?; if let VaultResponseMessage::SecretImport(s) = resp { Ok(s) } else { Err(VaultSyncCoreError::InvalidResponseType.into()) } }) } fn secret_export(&mut self, context: &Secret) -> Result<SecretKey> { block_future(&self.ctx.runtime(), async move { self.send_message(VaultRequestMessage::SecretExport { context: context.clone(), }) .await?; let resp = self.receive_message().await?; if let VaultResponseMessage::SecretExport(s) = resp { Ok(s) } else { Err(VaultSyncCoreError::InvalidResponseType.into()) } }) } fn secret_attributes_get(&mut self, context: &Secret) -> Result<SecretAttributes> { block_future(&self.ctx.runtime(), async move { self.send_message(VaultRequestMessage::SecretAttributesGet { context: context.clone(), }) .await?; let resp = self.receive_message().await?; if let VaultResponseMessage::SecretAttributesGet(s) = resp { Ok(s) } else { Err(VaultSyncCoreError::InvalidResponseType.into()) } }) } fn secret_public_key_get(&mut self, context: &Secret) -> Result<PublicKey> { block_future(&self.ctx.runtime(), async move { self.send_message(VaultRequestMessage::SecretPublicKeyGet { context: context.clone(), }) .await?; let resp = self.receive_message().await?; if let VaultResponseMessage::SecretPublicKeyGet(s) = resp { Ok(s) } else { Err(VaultSyncCoreError::InvalidResponseType.into()) } }) } fn secret_destroy(&mut self, context: Secret) -> Result<()> { block_future(&self.ctx.runtime(), async move { self.send_message(VaultRequestMessage::SecretDestroy { context: context.clone(), }) .await?; let resp = self.receive_message().await?; if let VaultResponseMessage::SecretDestroy = resp { Ok(()) } else { Err(VaultSyncCoreError::InvalidResponseType.into()) } }) } } #[cfg(test)] mod tests { use ockam_vault::SoftwareVault; use ockam_vault_test_attribute::*; fn new_vault() -> SoftwareVault { SoftwareVault::default() } #[vault_test_sync] fn new_public_keys() {} #[vault_test_sync] fn new_secret_keys() {} #[vault_test_sync] fn secret_import_export() {} #[vault_test_sync] fn secret_attributes_get() {} }