generate_keypair/
generate_keypair.rs

1use base64::engine::general_purpose::STANDARD;
2use base64::Engine;
3use swift_secure_enclave_tool_rs::{
4    generate_ecdsa_keypair, is_secure_enclave_supported, 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 = generate_ecdsa_keypair(KeyPurpose::Signing, true).unwrap();
14    print_key_material("Signing key [require bio]", &ecdsa_key_material_require_bio);
15
16    let ecdsa_key_material_no_bio = generate_ecdsa_keypair(KeyPurpose::Signing, true).unwrap();
17    print_key_material("Signing key [no bio]", &ecdsa_key_material_no_bio);
18
19    let ecdsa_key_material_require_bio =
20        generate_ecdsa_keypair(KeyPurpose::KeyAgreement, true).unwrap();
21    print_key_material(
22        "Key agreement key [require bio]",
23        &ecdsa_key_material_require_bio,
24    );
25
26    let ecdsa_key_material_no_bio = generate_ecdsa_keypair(KeyPurpose::KeyAgreement, true).unwrap();
27    print_key_material("Key agreement key [no bio]", &ecdsa_key_material_no_bio);
28}
29
30fn print_key_material(prefix: &str, key_material: &KeyMaterial) {
31    println!("\n{}", prefix);
32    println!(
33        "Public key point:\n{}",
34        hex::encode(&key_material.public_key_point)
35    );
36    println!(
37        "\nPublic key:\n{}",
38        STANDARD.encode(&key_material.public_key_der)
39    );
40    println!(
41        "\nPrivate key representation:\n{}",
42        STANDARD.encode(&key_material.private_key_representation)
43    );
44}