Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 79a3a14

Browse files
committedJul 7, 2020
Added asymmetric encrypt and decrypt to Mbed Crypto provider
Signed-off-by: Samuel Bailey <[email protected]>
1 parent 6ca8010 commit 79a3a14

File tree

13 files changed

+410
-28
lines changed

13 files changed

+410
-28
lines changed
 

‎CONTRIBUTORS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ This file aims to acknowledge the specific contributors referred to in the "Cont
1212
* Ionut Mihalcea (@ionut-arm)
1313
* Hugues de Valon (@hug-dev)
1414
* Jesper Brynolf (@Superhepper)
15+
* Samuel Bailey (@sbailey-arm)

‎Cargo.lock

Lines changed: 10 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ name = "parsec"
1818
path = "src/bin/main.rs"
1919

2020
[dependencies]
21-
parsec-interface = "0.17.0"
21+
parsec-interface = { path = "../parsec-interface-rs" }
2222
rand = { version = "0.7.2", features = ["small_rng"] }
2323
base64 = "0.10.1"
2424
uuid = "0.7.4"
@@ -40,7 +40,7 @@ derivative = "2.1.1"
4040
version = "3.0.0"
4141
hex = "0.4.2"
4242
picky = "5.0.0"
43-
psa-crypto = { version = "0.2.1" , default-features = false, features = ["with-mbed-crypto"], optional = true }
43+
psa-crypto = { version = "0.2.2" , default-features = false, features = ["with-mbed-crypto"], optional = true }
4444
zeroize = { version = "1.1.0", features = ["zeroize_derive"] }
4545

4646
[dev-dependencies]

‎e2e_tests/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ picky-asn1-der = "0.2.2"
1818
picky-asn1 = "0.2.1"
1919
serde = { version = "1.0", features = ["derive"] }
2020
sha2 = "0.8.1"
21-
parsec-client = { git = "https://github.com/parallaxsecond/parsec-client-rust", features = ["testing"] }
21+
parsec-client = { path = "../../parsec-client-rust", features = ["testing"] }
2222
log = "0.4.8"
2323
rand = "0.7.3"
2424

2525
[dev-dependencies]
2626
env_logger = "0.7.1"
2727
uuid = "0.7.4"
28+
rsa = "0.3.0"

‎e2e_tests/src/lib.rs

Lines changed: 113 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use parsec_client::auth::AuthenticationData;
1313
use parsec_client::core::basic_client::BasicClient;
1414
use parsec_client::core::interface::operations::list_providers::ProviderInfo;
1515
use parsec_client::core::interface::operations::psa_algorithm::{
16-
Algorithm, AsymmetricSignature, Hash,
16+
Algorithm, AsymmetricSignature, AsymmetricEncryption, Hash,
1717
};
1818
use parsec_client::core::interface::operations::psa_key_attributes::{
1919
Attributes, Lifetime, Policy, Type, UsageFlags,
@@ -157,6 +157,60 @@ impl TestClient {
157157
)
158158
}
159159

160+
pub fn generate_rsa_encryption_keys_rsapkcs1v15crypt(&mut self, key_name: String) -> Result<()> {
161+
self.generate_key(
162+
key_name,
163+
Attributes {
164+
lifetime: Lifetime::Persistent,
165+
key_type: Type::RsaKeyPair,
166+
bits: 1024,
167+
policy: Policy {
168+
usage_flags: UsageFlags {
169+
sign_hash: false,
170+
verify_hash: false,
171+
sign_message: false,
172+
verify_message: false,
173+
export: true,
174+
encrypt: true,
175+
decrypt: true,
176+
cache: false,
177+
copy: false,
178+
derive: false,
179+
},
180+
permitted_algorithms: AsymmetricEncryption::RsaPkcs1v15Crypt.into(),
181+
},
182+
}
183+
)
184+
}
185+
186+
pub fn generate_rsa_encryption_keys_rsaoaep_sha256(&mut self, key_name: String) -> Result<()> {
187+
self.generate_key(
188+
key_name,
189+
Attributes {
190+
lifetime: Lifetime::Persistent,
191+
key_type: Type::RsaKeyPair,
192+
bits: 1024,
193+
policy: Policy {
194+
usage_flags: UsageFlags {
195+
sign_hash: false,
196+
verify_hash: false,
197+
sign_message: false,
198+
verify_message: false,
199+
export: true,
200+
encrypt: true,
201+
decrypt: true,
202+
cache: false,
203+
copy: false,
204+
derive: false,
205+
},
206+
permitted_algorithms: AsymmetricEncryption::RsaOaep{
207+
hash_alg: Hash::Sha256,
208+
}.into(),
209+
},
210+
}
211+
)
212+
}
213+
160214
/// Imports and creates a key with specific attributes.
161215
pub fn import_key(
162216
&mut self,
@@ -287,6 +341,64 @@ impl TestClient {
287341
)
288342
}
289343

344+
pub fn asymmetric_encrypt_message_with_rsapkcs1v15(
345+
&mut self,
346+
key_name: String,
347+
plaintext: Vec<u8>,
348+
) -> Result<Vec<u8>> {
349+
self.asymmetric_encrypt_message(
350+
key_name,
351+
AsymmetricEncryption::RsaPkcs1v15Crypt,
352+
&plaintext,
353+
None,
354+
)
355+
}
356+
357+
pub fn asymmetric_decrypt_message_with_rsapkcs1v15(
358+
&mut self,
359+
key_name: String,
360+
ciphertext: Vec<u8>,
361+
) -> Result<Vec<u8>> {
362+
self.asymmetric_decrypt_message(
363+
key_name,
364+
AsymmetricEncryption::RsaPkcs1v15Crypt,
365+
&ciphertext,
366+
None,
367+
)
368+
}
369+
370+
pub fn asymmetric_encrypt_message(
371+
&mut self,
372+
key_name: String,
373+
encryption_alg: AsymmetricEncryption,
374+
plaintext: &[u8],
375+
salt: Option<&[u8]>) -> Result<Vec<u8>> {
376+
self.basic_client
377+
.psa_asymmetric_encrypt(
378+
key_name,
379+
encryption_alg,
380+
&plaintext,
381+
salt,
382+
)
383+
.map_err(convert_error)
384+
}
385+
386+
pub fn asymmetric_decrypt_message(
387+
&mut self,
388+
key_name: String,
389+
encryption_alg: AsymmetricEncryption,
390+
ciphertext: &[u8],
391+
salt: Option<&[u8]>) -> Result<Vec<u8>> {
392+
self.basic_client
393+
.psa_asymmetric_decrypt(
394+
key_name,
395+
encryption_alg,
396+
&ciphertext,
397+
salt,
398+
)
399+
.map_err(convert_error)
400+
}
401+
290402
/// Lists the provider available for the Parsec service.
291403
pub fn list_providers(&mut self) -> Result<Vec<ProviderInfo>> {
292404
self.basic_client.list_providers().map_err(convert_error)
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
// Copyright 2020 Contributors to the Parsec project.
2+
// SPDX-License-Identifier: Apache-2.0
3+
use e2e_tests::TestClient;
4+
use parsec_client::core::interface::requests::ResponseStatus;
5+
use rsa::{RSAPublicKey, PaddingScheme, PublicKey};
6+
use rand::rngs::OsRng;
7+
8+
9+
const PLAINTEXT_MESSAGE: [u8; 32] = [
10+
0x69, 0x3E, 0xDB, 0x1B, 0x22, 0x79, 0x03, 0xF4, 0xC0, 0xBF, 0xD6, 0x91, 0x76, 0x37, 0x84, 0xA2,
11+
0x94, 0x8E, 0x92, 0x50, 0x35, 0xC2, 0x8C, 0x5C, 0x3C, 0xCA, 0xFE, 0x18, 0xE8, 0x81, 0x37, 0x78,
12+
];
13+
14+
#[test]
15+
fn simple_asym_encrypt_rsa_pkcs() {
16+
let key_name = String::from("asym_encrypt_and_decrypt_rsa_pkcs");
17+
let mut client = TestClient::new();
18+
client.generate_rsa_encryption_keys_rsapkcs1v15crypt(key_name.clone()).unwrap();
19+
let _ciphertext = client.asymmetric_encrypt_message_with_rsapkcs1v15(
20+
key_name.clone(),
21+
PLAINTEXT_MESSAGE.to_vec(),
22+
).unwrap();
23+
}
24+
25+
#[test]
26+
fn asym_encrypt_no_key() {
27+
let key_name = String::from("asym_encrypt_no_key");
28+
let mut client = TestClient::new();
29+
let status = client.
30+
asymmetric_encrypt_message_with_rsapkcs1v15(
31+
key_name,
32+
PLAINTEXT_MESSAGE.to_vec(),
33+
)
34+
.expect_err("Key should not exist.");
35+
assert_eq!(status, ResponseStatus::PsaErrorDoesNotExist);
36+
}
37+
38+
#[test]
39+
fn asym_decrypt_no_key() {
40+
let key_name = String::from("asym_decrypt_no_key");
41+
let mut client = TestClient::new();
42+
let status = client.
43+
asymmetric_decrypt_message_with_rsapkcs1v15(
44+
key_name,
45+
PLAINTEXT_MESSAGE.to_vec(),
46+
)
47+
.expect_err("Key should not exist.");
48+
assert_eq!(status, ResponseStatus::PsaErrorDoesNotExist);
49+
}
50+
51+
#[test]
52+
fn asym_encrypt_wrong_algorithm() {
53+
let key_name = String::from("asym_encrypt_wrong_algorithm");
54+
let mut client = TestClient::new();
55+
let _key_id = client.generate_rsa_encryption_keys_rsaoaep_sha256(key_name.clone()).unwrap();
56+
let status = client.asymmetric_encrypt_message_with_rsapkcs1v15(
57+
key_name.clone(),
58+
PLAINTEXT_MESSAGE.to_vec(),
59+
).unwrap_err();
60+
assert_eq!(status, ResponseStatus::PsaErrorNotPermitted);
61+
}
62+
63+
#[test]
64+
fn asym_encrypt_and_decrypt_rsa_pkcs() {
65+
let key_name = String::from("asym_encrypt_and_decrypt_rsa_pkcs");
66+
let mut client = TestClient::new();
67+
client.generate_rsa_encryption_keys_rsapkcs1v15crypt(key_name.clone()).unwrap();
68+
let ciphertext = client.asymmetric_encrypt_message_with_rsapkcs1v15(
69+
key_name.clone(),
70+
PLAINTEXT_MESSAGE.to_vec(),
71+
).unwrap();
72+
let plaintext = client.asymmetric_decrypt_message_with_rsapkcs1v15(
73+
key_name,
74+
ciphertext,
75+
).unwrap();
76+
assert_eq!(PLAINTEXT_MESSAGE.to_vec(), plaintext);
77+
}
78+
79+
#[test]
80+
fn asym_encrypt_decrypt_rsa_pkcs_different_keys() {
81+
let key_name_1 = String::from("asym_encrypt_and_decrypt_rsa_pkcs_different_keys_1");
82+
let key_name_2 = String::from("asym_encrypt_and_decrypt_rsa_pkcs_different_keys_2");
83+
let mut client = TestClient::new();
84+
client.generate_rsa_encryption_keys_rsapkcs1v15crypt(key_name_1.clone()).unwrap();
85+
client.generate_rsa_encryption_keys_rsapkcs1v15crypt(key_name_2.clone()).unwrap();
86+
let ciphertext = client.asymmetric_encrypt_message_with_rsapkcs1v15(
87+
key_name_1.clone(),
88+
PLAINTEXT_MESSAGE.to_vec(),
89+
).unwrap();
90+
let _res = client.asymmetric_decrypt_message_with_rsapkcs1v15(
91+
key_name_2.clone(),
92+
ciphertext,
93+
).unwrap_err();
94+
}
95+
96+
#[test]
97+
fn asym_encrypt_verify_decrypt_with_rsa_crate() {
98+
let key_name = String::from("asym_encrypt_verify_decrypt_with_rsa_crate");
99+
let mut client = TestClient::new();
100+
101+
client.generate_rsa_encryption_keys_rsapkcs1v15crypt(key_name.clone()).unwrap();
102+
let pub_key = client.export_public_key(key_name.clone()).unwrap();
103+
104+
let rsa_pub_key = RSAPublicKey::from_pkcs1(&pub_key).unwrap();
105+
let ciphertext = rsa_pub_key.encrypt(&mut OsRng, PaddingScheme::new_pkcs1v15_encrypt(), &PLAINTEXT_MESSAGE).unwrap();
106+
107+
let plaintext = client.asymmetric_decrypt_message_with_rsapkcs1v15(
108+
key_name.clone(),
109+
ciphertext,
110+
).unwrap();
111+
112+
assert_eq!(&PLAINTEXT_MESSAGE[..], &plaintext[..]);
113+
114+
}
115+

‎e2e_tests/tests/per_provider/normal_tests/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ mod export_public_key;
88
mod import_key;
99
mod key_attributes;
1010
mod ping;
11+
mod asym_encryption;

‎src/back/backend_handler.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,24 @@ impl BackEndHandler {
159159
trace!("psa_verify_hash egress");
160160
self.result_to_response(NativeResult::PsaVerifyHash(result), header)
161161
}
162+
NativeOperation::PsaAsymmetricEncrypt(op_asymmetric_encrypt) => {
163+
let app_name =
164+
unwrap_or_else_return!(app_name.ok_or(ResponseStatus::NotAuthenticated));
165+
let result = unwrap_or_else_return!(self
166+
.provider
167+
.psa_asymmetric_encrypt(app_name, op_asymmetric_encrypt));
168+
trace!("psa_asymmetric_encrypt_egress");
169+
self.result_to_response(NativeResult::PsaAsymmetricEncrypt(result), header)
170+
}
171+
NativeOperation::PsaAsymmetricDecrypt(op_asymmetric_decrypt) => {
172+
let app_name =
173+
unwrap_or_else_return!(app_name.ok_or(ResponseStatus::NotAuthenticated));
174+
let result = unwrap_or_else_return!(self
175+
.provider
176+
.psa_asymmetric_decrypt(app_name, op_asymmetric_decrypt));
177+
trace!("psa_asymmetric_encrypt_egress");
178+
self.result_to_response(NativeResult::PsaAsymmetricDecrypt(result), header)
179+
}
162180
}
163181
}
164182
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
// Copyright 2020 Contributors to the Parsec project.
2+
// SPDX-License-Identifier: Apache-2.0
3+
use super::{key_management, MbedProvider};
4+
use crate::authenticators::ApplicationName;
5+
use crate::key_info_managers::KeyTriple;
6+
use log::info;
7+
use parsec_interface::operations::{psa_asymmetric_decrypt, psa_asymmetric_encrypt};
8+
use parsec_interface::requests::{ProviderID, ResponseStatus, Result};
9+
use psa_crypto::operations::asym_encryption;
10+
use psa_crypto::types::key;
11+
use zeroize::Zeroize;
12+
13+
impl MbedProvider {
14+
pub(super) fn psa_asymmetric_encrypt_internal(
15+
&self,
16+
app_name: ApplicationName,
17+
op: psa_asymmetric_encrypt::Operation,
18+
) -> Result<psa_asymmetric_encrypt::Result> {
19+
info!("Mbed Provider - Asym Encrypt");
20+
let key_name = op.key_name.clone();
21+
22+
let key_triple = KeyTriple::new(app_name, ProviderID::MbedCrypto, key_name);
23+
let store_handle = self.key_info_store.read().expect("Key store lock poisoned");
24+
let key_id = key_management::get_key_id(&key_triple, &*store_handle)?;
25+
let _guard = self
26+
.key_handle_mutex
27+
.lock()
28+
.expect("Grabbing key handle mutex failed");
29+
let id = key::Id::from_persistent_key_id(key_id);
30+
let key_attributes = key::Attributes::from_key_id(id)?;
31+
32+
op.validate(key_attributes)?;
33+
let salt_buff = match &op.salt {
34+
Some(salt) => Some(salt.as_slice()),
35+
None => None,
36+
};
37+
let alg = op.alg;
38+
let buffer_size = key_attributes.asymmetric_encrypt_output_size(alg)?;
39+
let mut ciphertext = vec![0u8; buffer_size];
40+
41+
match asym_encryption::encrypt(id, alg, &op.plaintext, salt_buff, &mut ciphertext) {
42+
Ok(output_size) => {
43+
ciphertext.resize(output_size, 0);
44+
Ok(psa_asymmetric_encrypt::Result {
45+
ciphertext: ciphertext.into(),
46+
})
47+
}
48+
Err(error) => {
49+
let error = ResponseStatus::from(error);
50+
format_error!("Encrypt status: ", error);
51+
Err(error)
52+
}
53+
}
54+
}
55+
56+
pub(super) fn psa_asymmetric_decrypt_internal(
57+
&self,
58+
app_name: ApplicationName,
59+
op: psa_asymmetric_decrypt::Operation,
60+
) -> Result<psa_asymmetric_decrypt::Result> {
61+
info!("Mbed Provider - Asym Decrypt");
62+
63+
let key_triple = KeyTriple::new(app_name, ProviderID::MbedCrypto, op.key_name.clone());
64+
let store_handle = self.key_info_store.read().expect("Key store lock poisoned");
65+
let key_id = key_management::get_key_id(&key_triple, &*store_handle)?;
66+
67+
let _guard = self
68+
.key_handle_mutex
69+
.lock()
70+
.expect("Grabbing key handle mutex failed");
71+
72+
let id = key::Id::from_persistent_key_id(key_id);
73+
let key_attributes = key::Attributes::from_key_id(id)?;
74+
75+
op.validate(key_attributes)?;
76+
let salt_buff = match &op.salt {
77+
Some(salt) => Some(salt.as_slice()),
78+
None => None,
79+
};
80+
let buffer_size = key_attributes.asymmetric_decrypt_output_size(op.alg)?;
81+
let mut plaintext = vec![0u8; buffer_size];
82+
83+
match asym_encryption::decrypt(id, op.alg, &op.ciphertext, salt_buff, &mut plaintext) {
84+
Ok(output_size) => {
85+
plaintext.resize(output_size, 0);
86+
Ok(psa_asymmetric_decrypt::Result {
87+
plaintext: plaintext.into(),
88+
})
89+
}
90+
Err(error) => {
91+
plaintext.zeroize();
92+
let error = ResponseStatus::from(error);
93+
format_error!("Encrypt status: ", error);
94+
Err(error)
95+
}
96+
}
97+
}
98+
}

‎src/providers/mbed_provider/asym_sign.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ impl MbedProvider {
4242
}
4343
Err(error) => {
4444
let error = ResponseStatus::from(error);
45-
format_error!("Sign status: {}", error);
45+
format_error!("Sign status: ", error);
4646
Err(error)
4747
}
4848
}
@@ -72,7 +72,7 @@ impl MbedProvider {
7272
Ok(()) => Ok(psa_verify_hash::Result {}),
7373
Err(error) => {
7474
let error = ResponseStatus::from(error);
75-
format_error!("Verify status: {}", error);
75+
format_error!("Verify status: ", error);
7676
Err(error)
7777
}
7878
}

‎src/providers/mbed_provider/key_management.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ impl MbedProvider {
125125
Err(error) => {
126126
remove_key_id(&key_triple, &mut *store_handle)?;
127127
let error = ResponseStatus::from(error);
128-
format_error!("Generate key status: {}", error);
128+
format_error!("Generate key status: ", error);
129129
Err(error)
130130
}
131131
}
@@ -169,7 +169,7 @@ impl MbedProvider {
169169
Err(error) => {
170170
remove_key_id(&key_triple, &mut *store_handle)?;
171171
let error = ResponseStatus::from(error);
172-
format_error!("Import key status: {}", error);
172+
format_error!("Import key status: ", error);
173173
Err(error)
174174
}
175175
}
@@ -240,7 +240,7 @@ impl MbedProvider {
240240
}
241241
Err(error) => {
242242
let error = ResponseStatus::from(error);
243-
format_error!("Destroy key status: {}", error);
243+
format_error!("Destroy key status: ", error);
244244
Err(error)
245245
}
246246
}

‎src/providers/mbed_provider/mod.rs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ use derivative::Derivative;
77
use log::{error, trace};
88
use parsec_interface::operations::list_providers::ProviderInfo;
99
use parsec_interface::operations::{
10-
psa_destroy_key, psa_export_public_key, psa_generate_key, psa_import_key, psa_sign_hash,
11-
psa_verify_hash,
10+
psa_asymmetric_decrypt, psa_asymmetric_encrypt, psa_destroy_key, psa_export_public_key,
11+
psa_generate_key, psa_import_key, psa_sign_hash, psa_verify_hash,
1212
};
1313
use parsec_interface::requests::{Opcode, ProviderID, ResponseStatus, Result};
1414
use psa_crypto::types::{key, status};
@@ -20,6 +20,7 @@ use std::sync::{
2020
};
2121
use uuid::Uuid;
2222

23+
mod asym_encryption;
2324
mod asym_sign;
2425
#[allow(dead_code)]
2526
mod key_management;
@@ -104,10 +105,7 @@ impl MbedProvider {
104105
}
105106
Err(status::Error::DoesNotExist) => to_remove.push(key_triple.clone()),
106107
Err(e) => {
107-
format_error!(
108-
"Error {} when opening a persistent Mbed Crypto key.",
109-
e
110-
);
108+
format_error!("Failed to open persistent Mbed Crypto key", e);
111109
return None;
112110
}
113111
};
@@ -198,6 +196,24 @@ impl Provide for MbedProvider {
198196
trace!("psa_verify_hash ingress");
199197
self.psa_verify_hash_internal(app_name, op)
200198
}
199+
200+
fn psa_asymmetric_encrypt(
201+
&self,
202+
app_name: ApplicationName,
203+
op: psa_asymmetric_encrypt::Operation,
204+
) -> Result<psa_asymmetric_encrypt::Result> {
205+
trace!("psa_asymmetric_encrypt ingress");
206+
self.psa_asymmetric_encrypt_internal(app_name, op)
207+
}
208+
209+
fn psa_asymmetric_decrypt(
210+
&self,
211+
app_name: ApplicationName,
212+
op: psa_asymmetric_decrypt::Operation,
213+
) -> Result<psa_asymmetric_decrypt::Result> {
214+
trace!("psa_asymmetric_decrypt ingress");
215+
self.psa_asymmetric_decrypt_internal(app_name, op)
216+
}
201217
}
202218

203219
#[derive(Default, Derivative)]

‎src/providers/mod.rs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,9 @@ impl ProviderConfig {
7575

7676
use crate::authenticators::ApplicationName;
7777
use parsec_interface::operations::{
78-
list_opcodes, list_providers, ping, psa_destroy_key, psa_export_public_key, psa_generate_key,
79-
psa_import_key, psa_sign_hash, psa_verify_hash,
78+
list_opcodes, list_providers, ping, psa_asymmetric_decrypt, psa_asymmetric_encrypt,
79+
psa_destroy_key, psa_export_public_key, psa_generate_key, psa_import_key, psa_sign_hash,
80+
psa_verify_hash,
8081
};
8182
use parsec_interface::requests::{ResponseStatus, Result};
8283

@@ -176,4 +177,24 @@ pub trait Provide {
176177
trace!("psa_verify_hash ingress");
177178
Err(ResponseStatus::PsaErrorNotSupported)
178179
}
180+
181+
/// Execute an AsymmetricEncrypt operation.
182+
fn psa_asymmetric_encrypt(
183+
&self,
184+
_app_name: ApplicationName,
185+
_op: psa_asymmetric_encrypt::Operation,
186+
) -> Result<psa_asymmetric_encrypt::Result> {
187+
trace!("psa_asymmetric_encrypt ingress");
188+
Err(ResponseStatus::PsaErrorNotSupported)
189+
}
190+
191+
/// Execute an AsymmetricDecrypt operation.
192+
fn psa_asymmetric_decrypt(
193+
&self,
194+
_app_name: ApplicationName,
195+
_op: psa_asymmetric_decrypt::Operation,
196+
) -> Result<psa_asymmetric_decrypt::Result> {
197+
trace!("psa_asymmetric_decrypt ingress");
198+
Err(ResponseStatus::PsaErrorNotSupported)
199+
}
179200
}

0 commit comments

Comments
 (0)
Please sign in to comment.