MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / decrypt_with_vault

Method decrypt_with_vault

nodedb/src/control/security/keystore/vault.rs:101–141  ·  view source on GitHub ↗
(&self, ciphertext: &str)

Source from the content-addressed store, hash-verified

99 }
100
101 async fn decrypt_with_vault(&self, ciphertext: &str) -> Result<Zeroizing<[u8; 32]>> {
102 let token = self.read_token()?;
103 let url = format!(
104 "{}/v1/{}/decrypt/{}",
105 self.addr.trim_end_matches('/'),
106 self.mount,
107 self.key_name
108 );
109
110 let resp = self
111 .client
112 .post(&url)
113 .header("X-Vault-Token", &token)
114 .json(&serde_json::json!({ "ciphertext": ciphertext }))
115 .send()
116 .await
117 .map_err(|e| crate::Error::Encryption {
118 detail: format!("Vault HTTP request failed: {e}"),
119 })?;
120
121 if !resp.status().is_success() {
122 let status = resp.status();
123 let body = resp.text().await.unwrap_or_default();
124 return Err(crate::Error::Encryption {
125 detail: format!("Vault decrypt returned {status}: {body}"),
126 });
127 }
128
129 let body: serde_json::Value = resp.json().await.map_err(|e| crate::Error::Encryption {
130 detail: format!("Vault response JSON parse failed: {e}"),
131 })?;
132
133 let plaintext_b64 = body
134 .pointer("/data/plaintext")
135 .and_then(|v| v.as_str())
136 .ok_or_else(|| crate::Error::Encryption {
137 detail: "Vault response missing /data/plaintext field".into(),
138 })?;
139
140 decode_32_byte_b64(plaintext_b64)
141 }
142
143 async fn rewrap_with_vault(&self, old_ciphertext: &str) -> Result<String> {
144 let token = self.read_token()?;

Callers 2

unwrap_keyMethod · 0.80
rotateMethod · 0.80

Calls 8

decode_32_byte_b64Function · 0.85
read_tokenMethod · 0.80
is_successMethod · 0.80
statusMethod · 0.80
textMethod · 0.80
sendMethod · 0.45
headerMethod · 0.45
as_strMethod · 0.45

Tested by

no test coverage detected