parsec_interface/operations/
mod.rs1pub 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#[derive(Debug)]
51pub enum NativeOperation {
52 ListProviders(list_providers::Operation),
54 ListOpcodes(list_opcodes::Operation),
56 ListAuthenticators(list_authenticators::Operation),
58 ListKeys(list_keys::Operation),
60 ListClients(list_clients::Operation),
62 DeleteClient(delete_client::Operation),
64 Ping(ping::Operation),
66 PsaGenerateKey(psa_generate_key::Operation),
68 PsaImportKey(psa_import_key::Operation),
70 PsaExportPublicKey(psa_export_public_key::Operation),
72 PsaExportKey(psa_export_key::Operation),
74 PsaDestroyKey(psa_destroy_key::Operation),
76 PsaSignHash(psa_sign_hash::Operation),
78 PsaVerifyHash(psa_verify_hash::Operation),
80 PsaHashCompute(psa_hash_compute::Operation),
82 PsaHashCompare(psa_hash_compare::Operation),
84 PsaAsymmetricEncrypt(psa_asymmetric_encrypt::Operation),
86 PsaAsymmetricDecrypt(psa_asymmetric_decrypt::Operation),
88 PsaAeadEncrypt(psa_aead_encrypt::Operation),
90 PsaAeadDecrypt(psa_aead_decrypt::Operation),
92 PsaCipherEncrypt(psa_cipher_encrypt::Operation),
94 PsaCipherDecrypt(psa_cipher_decrypt::Operation),
96 PsaGenerateRandom(psa_generate_random::Operation),
98 PsaRawKeyAgreement(psa_raw_key_agreement::Operation),
100 PsaSignMessage(psa_sign_message::Operation),
102 PsaVerifyMessage(psa_verify_message::Operation),
104 CanDoCrypto(can_do_crypto::Operation),
106 AttestKey(attest_key::Operation),
108 PrepareKeyAttestation(prepare_key_attestation::Operation),
110}
111
112impl NativeOperation {
113 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#[derive(Debug)]
152pub enum NativeResult {
153 ListProviders(list_providers::Result),
155 ListOpcodes(list_opcodes::Result),
157 ListAuthenticators(list_authenticators::Result),
159 ListKeys(list_keys::Result),
161 ListClients(list_clients::Result),
163 DeleteClient(delete_client::Result),
165 Ping(ping::Result),
167 PsaGenerateKey(psa_generate_key::Result),
169 PsaImportKey(psa_import_key::Result),
171 PsaExportPublicKey(psa_export_public_key::Result),
173 PsaExportKey(psa_export_key::Result),
175 PsaDestroyKey(psa_destroy_key::Result),
177 PsaSignHash(psa_sign_hash::Result),
179 PsaHashCompute(psa_hash_compute::Result),
181 PsaHashCompare(psa_hash_compare::Result),
183 PsaVerifyHash(psa_verify_hash::Result),
185 PsaAsymmetricEncrypt(psa_asymmetric_encrypt::Result),
187 PsaAsymmetricDecrypt(psa_asymmetric_decrypt::Result),
189 PsaAeadEncrypt(psa_aead_encrypt::Result),
191 PsaAeadDecrypt(psa_aead_decrypt::Result),
193 PsaCipherEncrypt(psa_cipher_encrypt::Result),
195 PsaCipherDecrypt(psa_cipher_decrypt::Result),
197 PsaGenerateRandom(psa_generate_random::Result),
199 PsaRawKeyAgreement(psa_raw_key_agreement::Result),
201 PsaSignMessage(psa_sign_message::Result),
203 PsaVerifyMessage(psa_verify_message::Result),
205 CanDoCrypto(can_do_crypto::Result),
207 AttestKey(attest_key::Result),
209 PrepareKeyAttestation(prepare_key_attestation::Result),
211}
212
213impl NativeResult {
214 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
250pub trait Convert {
253 fn body_type(&self) -> BodyType;
255
256 fn body_to_operation(&self, body: RequestBody, opcode: Opcode) -> Result<NativeOperation>;
261
262 fn operation_to_body(&self, operation: NativeOperation) -> Result<RequestBody>;
267
268 fn body_to_result(&self, body: ResponseBody, opcode: Opcode) -> Result<NativeResult>;
273
274 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}