parsec_interface/operations/
mod.rs

1// Copyright 2019 Contributors to the Parsec project.
2// SPDX-License-Identifier: Apache-2.0
3//! # Rust representation of operations
4//!
5//! Rust native representation of the language neutral operations described in the
6//! [Operations](https://parallaxsecond.github.io/parsec-book/parsec_client/operations/index.html)
7//! page in the book.
8//! Some of the doc comments have directly been taken from the PSA Crypto API document version
9//! 1.0.0. Please check that
10//! [document](https://developer.arm.com/architectures/security-architectures/platform-security-architecture/documentation)
11//! and the book for more details.
12pub mod ping;
13pub mod psa_generate_key;
14pub mod psa_import_key;
15pub mod psa_export_public_key;
16pub mod psa_export_key;
17pub mod psa_destroy_key;
18pub mod psa_sign_hash;
19pub mod psa_verify_hash;
20pub mod psa_hash_compute;
21pub mod psa_hash_compare;
22pub mod psa_asymmetric_encrypt;
23pub mod psa_asymmetric_decrypt;
24pub mod psa_aead_encrypt;
25pub mod psa_aead_decrypt;
26pub mod psa_cipher_encrypt;
27pub mod psa_cipher_decrypt;
28pub mod psa_sign_message;
29pub mod psa_verify_message;
30pub mod list_opcodes;
31pub mod list_providers;
32pub mod list_authenticators;
33pub mod list_keys;
34pub mod delete_client;
35pub mod list_clients;
36pub mod psa_generate_random;
37pub mod psa_raw_key_agreement;
38pub mod can_do_crypto;
39pub mod attest_key;
40pub mod prepare_key_attestation;
41pub mod utils_deprecated_primitives;
42
43pub use psa_crypto::types::algorithm as psa_algorithm;
44pub use psa_crypto::types::key as psa_key_attributes;
45
46use crate::requests::{request::RequestBody, response::ResponseBody, BodyType, Opcode, Result};
47
48/// Container type for operation conversion values, holding a native operation object
49/// to be passed in/out of a converter.
50#[derive(Debug)]
51pub enum NativeOperation {
52    /// ListProviders operation
53    ListProviders(list_providers::Operation),
54    /// ListOpcodes operation
55    ListOpcodes(list_opcodes::Operation),
56    /// ListAuthenticators operation
57    ListAuthenticators(list_authenticators::Operation),
58    /// ListKeys operation
59    ListKeys(list_keys::Operation),
60    /// ListClients operation
61    ListClients(list_clients::Operation),
62    /// DeleteClient operation
63    DeleteClient(delete_client::Operation),
64    /// Ping operation
65    Ping(ping::Operation),
66    /// PsaGenerateKey operation
67    PsaGenerateKey(psa_generate_key::Operation),
68    /// PsaImportKey operation
69    PsaImportKey(psa_import_key::Operation),
70    /// PsaExportPublicKey operation
71    PsaExportPublicKey(psa_export_public_key::Operation),
72    /// PsaExportKey operation
73    PsaExportKey(psa_export_key::Operation),
74    /// PsaDestroyKey operation
75    PsaDestroyKey(psa_destroy_key::Operation),
76    /// PsaSignHash operation
77    PsaSignHash(psa_sign_hash::Operation),
78    /// PsaVerifyHash operation
79    PsaVerifyHash(psa_verify_hash::Operation),
80    /// PsaHashCompute operation
81    PsaHashCompute(psa_hash_compute::Operation),
82    /// PsaHashCompare operation
83    PsaHashCompare(psa_hash_compare::Operation),
84    /// PsaAsymmetricEncrypt operation
85    PsaAsymmetricEncrypt(psa_asymmetric_encrypt::Operation),
86    /// PsaAsymmetricDecrypt operation
87    PsaAsymmetricDecrypt(psa_asymmetric_decrypt::Operation),
88    /// PsaAeadEncrypt operation
89    PsaAeadEncrypt(psa_aead_encrypt::Operation),
90    /// PsaAeadDecrypt operation
91    PsaAeadDecrypt(psa_aead_decrypt::Operation),
92    /// PsaCipherEncrypt operation
93    PsaCipherEncrypt(psa_cipher_encrypt::Operation),
94    /// PsaCipherDecrypt operation
95    PsaCipherDecrypt(psa_cipher_decrypt::Operation),
96    /// PsaGenerateRandom operation
97    PsaGenerateRandom(psa_generate_random::Operation),
98    /// PsaRawKeyAgreement operation
99    PsaRawKeyAgreement(psa_raw_key_agreement::Operation),
100    /// PsaSignMessage operation
101    PsaSignMessage(psa_sign_message::Operation),
102    /// PsaVerifyMessage operation
103    PsaVerifyMessage(psa_verify_message::Operation),
104    /// CanDoCrypto operation
105    CanDoCrypto(can_do_crypto::Operation),
106    /// AttestKey operation
107    AttestKey(attest_key::Operation),
108    /// PrepareKeyAttestation operation
109    PrepareKeyAttestation(prepare_key_attestation::Operation),
110}
111
112impl NativeOperation {
113    /// Return the opcode of the operation associated.
114    pub fn opcode(&self) -> Opcode {
115        match self {
116            NativeOperation::Ping(_) => Opcode::Ping,
117            NativeOperation::PsaGenerateKey(_) => Opcode::PsaGenerateKey,
118            NativeOperation::PsaDestroyKey(_) => Opcode::PsaDestroyKey,
119            NativeOperation::PsaSignHash(_) => Opcode::PsaSignHash,
120            NativeOperation::PsaVerifyHash(_) => Opcode::PsaVerifyHash,
121            NativeOperation::PsaHashCompute(_) => Opcode::PsaHashCompute,
122            NativeOperation::PsaHashCompare(_) => Opcode::PsaHashCompare,
123            NativeOperation::PsaImportKey(_) => Opcode::PsaImportKey,
124            NativeOperation::PsaExportPublicKey(_) => Opcode::PsaExportPublicKey,
125            NativeOperation::PsaExportKey(_) => Opcode::PsaExportKey,
126            NativeOperation::ListOpcodes(_) => Opcode::ListOpcodes,
127            NativeOperation::ListProviders(_) => Opcode::ListProviders,
128            NativeOperation::ListAuthenticators(_) => Opcode::ListAuthenticators,
129            NativeOperation::ListKeys(_) => Opcode::ListKeys,
130            NativeOperation::ListClients(_) => Opcode::ListClients,
131            NativeOperation::DeleteClient(_) => Opcode::DeleteClient,
132            NativeOperation::PsaAsymmetricEncrypt(_) => Opcode::PsaAsymmetricEncrypt,
133            NativeOperation::PsaAsymmetricDecrypt(_) => Opcode::PsaAsymmetricDecrypt,
134            NativeOperation::PsaAeadEncrypt(_) => Opcode::PsaAeadEncrypt,
135            NativeOperation::PsaAeadDecrypt(_) => Opcode::PsaAeadDecrypt,
136            NativeOperation::PsaCipherEncrypt(_) => Opcode::PsaCipherEncrypt,
137            NativeOperation::PsaCipherDecrypt(_) => Opcode::PsaCipherDecrypt,
138            NativeOperation::PsaGenerateRandom(_) => Opcode::PsaGenerateRandom,
139            NativeOperation::PsaRawKeyAgreement(_) => Opcode::PsaRawKeyAgreement,
140            NativeOperation::PsaSignMessage(_) => Opcode::PsaSignMessage,
141            NativeOperation::PsaVerifyMessage(_) => Opcode::PsaVerifyMessage,
142            NativeOperation::CanDoCrypto(_) => Opcode::CanDoCrypto,
143            NativeOperation::AttestKey(_) => Opcode::AttestKey,
144            NativeOperation::PrepareKeyAttestation(_) => Opcode::PrepareKeyAttestation,
145        }
146    }
147}
148
149/// Container type for result conversion values, holding a native result object to be
150/// passed in/out of the converter.
151#[derive(Debug)]
152pub enum NativeResult {
153    /// ListProviders result
154    ListProviders(list_providers::Result),
155    /// ListOpcodes result
156    ListOpcodes(list_opcodes::Result),
157    /// ListAuthenticators result
158    ListAuthenticators(list_authenticators::Result),
159    /// ListKeys result
160    ListKeys(list_keys::Result),
161    /// ListClients result
162    ListClients(list_clients::Result),
163    /// DeleteClient result
164    DeleteClient(delete_client::Result),
165    /// Ping result
166    Ping(ping::Result),
167    /// PsaGenerateKey result
168    PsaGenerateKey(psa_generate_key::Result),
169    /// PsaImportKey result
170    PsaImportKey(psa_import_key::Result),
171    /// PsaExportPublicKey result
172    PsaExportPublicKey(psa_export_public_key::Result),
173    /// PsaExportKey result
174    PsaExportKey(psa_export_key::Result),
175    /// PsaDestroyKey result
176    PsaDestroyKey(psa_destroy_key::Result),
177    /// PsaSignHash result
178    PsaSignHash(psa_sign_hash::Result),
179    /// PsaHashCompute result
180    PsaHashCompute(psa_hash_compute::Result),
181    /// PsaHashCompare result
182    PsaHashCompare(psa_hash_compare::Result),
183    /// PsaVerifyHash result
184    PsaVerifyHash(psa_verify_hash::Result),
185    /// PsaAsymmetricEncrypt result
186    PsaAsymmetricEncrypt(psa_asymmetric_encrypt::Result),
187    /// PsaAsymmetricDecrypt result
188    PsaAsymmetricDecrypt(psa_asymmetric_decrypt::Result),
189    /// PsaAeadEncrypt result
190    PsaAeadEncrypt(psa_aead_encrypt::Result),
191    /// PsaAeadDecrypt result
192    PsaAeadDecrypt(psa_aead_decrypt::Result),
193    /// PsaCipherEncrypt result
194    PsaCipherEncrypt(psa_cipher_encrypt::Result),
195    /// PsaCipherDecrypt result
196    PsaCipherDecrypt(psa_cipher_decrypt::Result),
197    /// PsaGenerateRandom result
198    PsaGenerateRandom(psa_generate_random::Result),
199    /// PsaRawKeyAgreement result
200    PsaRawKeyAgreement(psa_raw_key_agreement::Result),
201    /// PsaSignMessage result
202    PsaSignMessage(psa_sign_message::Result),
203    /// PsaVerifyMessage result
204    PsaVerifyMessage(psa_verify_message::Result),
205    /// CanDoCrypto result
206    CanDoCrypto(can_do_crypto::Result),
207    /// AttestKey result
208    AttestKey(attest_key::Result),
209    /// AttestKey result
210    PrepareKeyAttestation(prepare_key_attestation::Result),
211}
212
213impl NativeResult {
214    /// Return the opcode of the operation associated.
215    pub fn opcode(&self) -> Opcode {
216        match self {
217            NativeResult::Ping(_) => Opcode::Ping,
218            NativeResult::PsaGenerateKey(_) => Opcode::PsaGenerateKey,
219            NativeResult::PsaDestroyKey(_) => Opcode::PsaDestroyKey,
220            NativeResult::PsaSignHash(_) => Opcode::PsaSignHash,
221            NativeResult::PsaVerifyHash(_) => Opcode::PsaVerifyHash,
222            NativeResult::PsaImportKey(_) => Opcode::PsaImportKey,
223            NativeResult::PsaHashCompute(_) => Opcode::PsaHashCompute,
224            NativeResult::PsaHashCompare(_) => Opcode::PsaHashCompare,
225            NativeResult::PsaExportPublicKey(_) => Opcode::PsaExportPublicKey,
226            NativeResult::PsaExportKey(_) => Opcode::PsaExportKey,
227            NativeResult::ListOpcodes(_) => Opcode::ListOpcodes,
228            NativeResult::ListProviders(_) => Opcode::ListProviders,
229            NativeResult::ListAuthenticators(_) => Opcode::ListAuthenticators,
230            NativeResult::ListKeys(_) => Opcode::ListKeys,
231            NativeResult::ListClients(_) => Opcode::ListClients,
232            NativeResult::DeleteClient(_) => Opcode::DeleteClient,
233            NativeResult::PsaAsymmetricEncrypt(_) => Opcode::PsaAsymmetricEncrypt,
234            NativeResult::PsaAsymmetricDecrypt(_) => Opcode::PsaAsymmetricDecrypt,
235            NativeResult::PsaAeadEncrypt(_) => Opcode::PsaAeadEncrypt,
236            NativeResult::PsaAeadDecrypt(_) => Opcode::PsaAeadDecrypt,
237            NativeResult::PsaCipherEncrypt(_) => Opcode::PsaCipherEncrypt,
238            NativeResult::PsaCipherDecrypt(_) => Opcode::PsaCipherDecrypt,
239            NativeResult::PsaGenerateRandom(_) => Opcode::PsaGenerateRandom,
240            NativeResult::PsaRawKeyAgreement(_) => Opcode::PsaRawKeyAgreement,
241            NativeResult::PsaSignMessage(_) => Opcode::PsaSignMessage,
242            NativeResult::PsaVerifyMessage(_) => Opcode::PsaVerifyMessage,
243            NativeResult::CanDoCrypto(_) => Opcode::CanDoCrypto,
244            NativeResult::AttestKey(_) => Opcode::AttestKey,
245            NativeResult::PrepareKeyAttestation(_) => Opcode::PrepareKeyAttestation,
246        }
247    }
248}
249
250/// Definition of the operations converters must implement to allow usage of a specific
251/// `BodyType`.
252pub trait Convert {
253    /// Get the `BodyType` associated with this converter.
254    fn body_type(&self) -> BodyType;
255
256    /// Create a native operation object from a request body.
257    ///
258    /// # Errors
259    /// - if deserialization fails, `ResponseStatus::DeserializingBodyFailed` is returned
260    fn body_to_operation(&self, body: RequestBody, opcode: Opcode) -> Result<NativeOperation>;
261
262    /// Create a request body from a native operation object.
263    ///
264    /// # Errors
265    /// - if serialization fails, `ResponseStatus::SerializingBodyFailed` is returned
266    fn operation_to_body(&self, operation: NativeOperation) -> Result<RequestBody>;
267
268    /// Create a native result object from a response body.
269    ///
270    /// # Errors
271    /// - if deserialization fails, `ResponseStatus::DeserializingBodyFailed` is returned
272    fn body_to_result(&self, body: ResponseBody, opcode: Opcode) -> Result<NativeResult>;
273
274    /// Create a response body from a native result object.
275    ///
276    /// # Errors
277    /// - if serialization fails, `ResponseStatus::SerializingBodyFailed` is returned
278    fn result_to_body(&self, result: NativeResult) -> Result<ResponseBody>;
279}
280
281impl From<list_providers::Operation> for NativeOperation {
282    fn from(op: list_providers::Operation) -> Self {
283        NativeOperation::ListProviders(op)
284    }
285}
286
287impl From<list_opcodes::Operation> for NativeOperation {
288    fn from(op: list_opcodes::Operation) -> Self {
289        NativeOperation::ListOpcodes(op)
290    }
291}
292
293impl From<list_authenticators::Operation> for NativeOperation {
294    fn from(op: list_authenticators::Operation) -> Self {
295        NativeOperation::ListAuthenticators(op)
296    }
297}
298
299impl From<list_keys::Operation> for NativeOperation {
300    fn from(op: list_keys::Operation) -> Self {
301        NativeOperation::ListKeys(op)
302    }
303}
304
305impl From<list_clients::Operation> for NativeOperation {
306    fn from(op: list_clients::Operation) -> Self {
307        NativeOperation::ListClients(op)
308    }
309}
310
311impl From<delete_client::Operation> for NativeOperation {
312    fn from(op: delete_client::Operation) -> Self {
313        NativeOperation::DeleteClient(op)
314    }
315}
316
317impl From<ping::Operation> for NativeOperation {
318    fn from(op: ping::Operation) -> Self {
319        NativeOperation::Ping(op)
320    }
321}
322
323impl From<psa_generate_key::Operation> for NativeOperation {
324    fn from(op: psa_generate_key::Operation) -> Self {
325        NativeOperation::PsaGenerateKey(op)
326    }
327}
328
329impl From<psa_import_key::Operation> for NativeOperation {
330    fn from(op: psa_import_key::Operation) -> Self {
331        NativeOperation::PsaImportKey(op)
332    }
333}
334
335impl From<psa_export_public_key::Operation> for NativeOperation {
336    fn from(op: psa_export_public_key::Operation) -> Self {
337        NativeOperation::PsaExportPublicKey(op)
338    }
339}
340
341impl From<psa_export_key::Operation> for NativeOperation {
342    fn from(op: psa_export_key::Operation) -> Self {
343        NativeOperation::PsaExportKey(op)
344    }
345}
346
347impl From<psa_destroy_key::Operation> for NativeOperation {
348    fn from(op: psa_destroy_key::Operation) -> Self {
349        NativeOperation::PsaDestroyKey(op)
350    }
351}
352
353impl From<psa_sign_hash::Operation> for NativeOperation {
354    fn from(op: psa_sign_hash::Operation) -> Self {
355        NativeOperation::PsaSignHash(op)
356    }
357}
358
359impl From<psa_verify_hash::Operation> for NativeOperation {
360    fn from(op: psa_verify_hash::Operation) -> Self {
361        NativeOperation::PsaVerifyHash(op)
362    }
363}
364
365impl From<psa_asymmetric_encrypt::Operation> for NativeOperation {
366    fn from(op: psa_asymmetric_encrypt::Operation) -> Self {
367        NativeOperation::PsaAsymmetricEncrypt(op)
368    }
369}
370
371impl From<psa_asymmetric_decrypt::Operation> for NativeOperation {
372    fn from(op: psa_asymmetric_decrypt::Operation) -> Self {
373        NativeOperation::PsaAsymmetricDecrypt(op)
374    }
375}
376
377impl From<psa_aead_encrypt::Operation> for NativeOperation {
378    fn from(op: psa_aead_encrypt::Operation) -> Self {
379        NativeOperation::PsaAeadEncrypt(op)
380    }
381}
382
383impl From<psa_aead_decrypt::Operation> for NativeOperation {
384    fn from(op: psa_aead_decrypt::Operation) -> Self {
385        NativeOperation::PsaAeadDecrypt(op)
386    }
387}
388
389impl From<psa_cipher_encrypt::Operation> for NativeOperation {
390    fn from(op: psa_cipher_encrypt::Operation) -> Self {
391        NativeOperation::PsaCipherEncrypt(op)
392    }
393}
394
395impl From<psa_cipher_decrypt::Operation> for NativeOperation {
396    fn from(op: psa_cipher_decrypt::Operation) -> Self {
397        NativeOperation::PsaCipherDecrypt(op)
398    }
399}
400
401impl From<psa_generate_random::Operation> for NativeOperation {
402    fn from(op: psa_generate_random::Operation) -> Self {
403        NativeOperation::PsaGenerateRandom(op)
404    }
405}
406
407impl From<psa_hash_compute::Operation> for NativeOperation {
408    fn from(op: psa_hash_compute::Operation) -> Self {
409        NativeOperation::PsaHashCompute(op)
410    }
411}
412
413impl From<psa_hash_compare::Operation> for NativeOperation {
414    fn from(op: psa_hash_compare::Operation) -> Self {
415        NativeOperation::PsaHashCompare(op)
416    }
417}
418
419impl From<psa_raw_key_agreement::Operation> for NativeOperation {
420    fn from(op: psa_raw_key_agreement::Operation) -> Self {
421        NativeOperation::PsaRawKeyAgreement(op)
422    }
423}
424
425impl From<psa_sign_message::Operation> for NativeOperation {
426    fn from(op: psa_sign_message::Operation) -> Self {
427        NativeOperation::PsaSignMessage(op)
428    }
429}
430
431impl From<psa_verify_message::Operation> for NativeOperation {
432    fn from(op: psa_verify_message::Operation) -> Self {
433        NativeOperation::PsaVerifyMessage(op)
434    }
435}
436
437impl From<can_do_crypto::Operation> for NativeOperation {
438    fn from(op: can_do_crypto::Operation) -> Self {
439        NativeOperation::CanDoCrypto(op)
440    }
441}
442impl From<attest_key::Operation> for NativeOperation {
443    fn from(op: attest_key::Operation) -> Self {
444        NativeOperation::AttestKey(op)
445    }
446}
447impl From<prepare_key_attestation::Operation> for NativeOperation {
448    fn from(op: prepare_key_attestation::Operation) -> Self {
449        NativeOperation::PrepareKeyAttestation(op)
450    }
451}
452
453impl From<list_providers::Result> for NativeResult {
454    fn from(op: list_providers::Result) -> Self {
455        NativeResult::ListProviders(op)
456    }
457}
458
459impl From<list_opcodes::Result> for NativeResult {
460    fn from(op: list_opcodes::Result) -> Self {
461        NativeResult::ListOpcodes(op)
462    }
463}
464
465impl From<list_authenticators::Result> for NativeResult {
466    fn from(op: list_authenticators::Result) -> Self {
467        NativeResult::ListAuthenticators(op)
468    }
469}
470
471impl From<list_keys::Result> for NativeResult {
472    fn from(op: list_keys::Result) -> Self {
473        NativeResult::ListKeys(op)
474    }
475}
476
477impl From<list_clients::Result> for NativeResult {
478    fn from(op: list_clients::Result) -> Self {
479        NativeResult::ListClients(op)
480    }
481}
482
483impl From<delete_client::Result> for NativeResult {
484    fn from(op: delete_client::Result) -> Self {
485        NativeResult::DeleteClient(op)
486    }
487}
488
489impl From<ping::Result> for NativeResult {
490    fn from(op: ping::Result) -> Self {
491        NativeResult::Ping(op)
492    }
493}
494
495impl From<psa_generate_key::Result> for NativeResult {
496    fn from(op: psa_generate_key::Result) -> Self {
497        NativeResult::PsaGenerateKey(op)
498    }
499}
500
501impl From<psa_import_key::Result> for NativeResult {
502    fn from(op: psa_import_key::Result) -> Self {
503        NativeResult::PsaImportKey(op)
504    }
505}
506
507impl From<psa_export_public_key::Result> for NativeResult {
508    fn from(op: psa_export_public_key::Result) -> Self {
509        NativeResult::PsaExportPublicKey(op)
510    }
511}
512
513impl From<psa_export_key::Result> for NativeResult {
514    fn from(op: psa_export_key::Result) -> Self {
515        NativeResult::PsaExportKey(op)
516    }
517}
518
519impl From<psa_destroy_key::Result> for NativeResult {
520    fn from(op: psa_destroy_key::Result) -> Self {
521        NativeResult::PsaDestroyKey(op)
522    }
523}
524
525impl From<psa_sign_hash::Result> for NativeResult {
526    fn from(op: psa_sign_hash::Result) -> Self {
527        NativeResult::PsaSignHash(op)
528    }
529}
530
531impl From<psa_verify_hash::Result> for NativeResult {
532    fn from(op: psa_verify_hash::Result) -> Self {
533        NativeResult::PsaVerifyHash(op)
534    }
535}
536
537impl From<psa_hash_compute::Result> for NativeResult {
538    fn from(op: psa_hash_compute::Result) -> Self {
539        NativeResult::PsaHashCompute(op)
540    }
541}
542
543impl From<psa_hash_compare::Result> for NativeResult {
544    fn from(op: psa_hash_compare::Result) -> Self {
545        NativeResult::PsaHashCompare(op)
546    }
547}
548
549impl From<psa_asymmetric_encrypt::Result> for NativeResult {
550    fn from(op: psa_asymmetric_encrypt::Result) -> Self {
551        NativeResult::PsaAsymmetricEncrypt(op)
552    }
553}
554
555impl From<psa_asymmetric_decrypt::Result> for NativeResult {
556    fn from(op: psa_asymmetric_decrypt::Result) -> Self {
557        NativeResult::PsaAsymmetricDecrypt(op)
558    }
559}
560
561impl From<psa_aead_encrypt::Result> for NativeResult {
562    fn from(op: psa_aead_encrypt::Result) -> Self {
563        NativeResult::PsaAeadEncrypt(op)
564    }
565}
566
567impl From<psa_aead_decrypt::Result> for NativeResult {
568    fn from(op: psa_aead_decrypt::Result) -> Self {
569        NativeResult::PsaAeadDecrypt(op)
570    }
571}
572
573impl From<psa_cipher_encrypt::Result> for NativeResult {
574    fn from(op: psa_cipher_encrypt::Result) -> Self {
575        NativeResult::PsaCipherEncrypt(op)
576    }
577}
578
579impl From<psa_cipher_decrypt::Result> for NativeResult {
580    fn from(op: psa_cipher_decrypt::Result) -> Self {
581        NativeResult::PsaCipherDecrypt(op)
582    }
583}
584
585impl From<psa_generate_random::Result> for NativeResult {
586    fn from(op: psa_generate_random::Result) -> Self {
587        NativeResult::PsaGenerateRandom(op)
588    }
589}
590
591impl From<psa_raw_key_agreement::Result> for NativeResult {
592    fn from(op: psa_raw_key_agreement::Result) -> Self {
593        NativeResult::PsaRawKeyAgreement(op)
594    }
595}
596
597impl From<psa_sign_message::Result> for NativeResult {
598    fn from(op: psa_sign_message::Result) -> Self {
599        NativeResult::PsaSignMessage(op)
600    }
601}
602
603impl From<psa_verify_message::Result> for NativeResult {
604    fn from(op: psa_verify_message::Result) -> Self {
605        NativeResult::PsaVerifyMessage(op)
606    }
607}
608
609impl From<can_do_crypto::Result> for NativeResult {
610    fn from(op: can_do_crypto::Result) -> Self {
611        NativeResult::CanDoCrypto(op)
612    }
613}
614
615impl From<attest_key::Result> for NativeResult {
616    fn from(op: attest_key::Result) -> Self {
617        NativeResult::AttestKey(op)
618    }
619}
620
621impl From<prepare_key_attestation::Result> for NativeResult {
622    fn from(op: prepare_key_attestation::Result) -> Self {
623        NativeResult::PrepareKeyAttestation(op)
624    }
625}