generate_keypair/
generate_keypair.rs

1use base64::engine::general_purpose::STANDARD;
2use base64::Engine;
3use swift_secure_enclave_tool_rs::{
4    generate_keypair, is_secure_enclave_supported, ControlFlag, KeyMaterial, KeyPurpose,
5};
6
7fn main() {
8    println!(
9        "Secure Enclave supported: {}",
10        is_secure_enclave_supported().unwrap()
11    );
12
13    let ecdsa_key_material_require_bio =
14        generate_keypair(KeyPurpose::Signing, ControlFlag::None).unwrap();
15    print_key_material("Signing key [require bio]", &ecdsa_key_material_require_bio);
16
17    let ecdsa_key_material_no_bio =
18        generate_keypair(KeyPurpose::Signing, ControlFlag::None).unwrap();
19    print_key_material("Signing key [no bio]", &ecdsa_key_material_no_bio);
20
21    let ecdsa_key_material_require_bio =
22        generate_keypair(KeyPurpose::KeyAgreement, ControlFlag::None).unwrap();
23    print_key_material(
24        "Key agreement key [require bio]",
25        &ecdsa_key_material_require_bio,
26    );
27
28    let ecdsa_key_material_no_bio =
29        generate_keypair(KeyPurpose::KeyAgreement, ControlFlag::None).unwrap();
30    print_key_material("Key agreement key [no bio]", &ecdsa_key_material_no_bio);
31}
32
33fn print_key_material(prefix: &str, key_material: &KeyMaterial) {
34    println!("\n{}", prefix);
35    println!(
36        "Public key point:\n{}",
37        hex::encode(&key_material.public_key_point)
38    );
39    println!(
40        "\nPublic key:\n{}",
41        STANDARD.encode(&key_material.public_key_der)
42    );
43    println!(
44        "\nPrivate key representation:\n{}",
45        STANDARD.encode(&key_material.private_key_representation)
46    );
47}