Skip to content

Commit

Permalink
Add PIV util call
Browse files Browse the repository at this point in the history
  • Loading branch information
timweri committed Dec 16, 2024
1 parent 797bcb8 commit 62bb2f3
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions rustica-agent/src/ffi/enrollment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -290,3 +290,33 @@ pub unsafe extern "C" fn generate_and_enroll(
error!("All servers failed to register key");
false
}

#[no_mangle]
// Provision a new nistp384 key in the given slot
pub unsafe extern "C" fn provision_piv(
yubikey_serial: u32,
slot: u8,
subject: *const c_char,
pin: *const c_char,
management_key: *const c_char,
) -> bool {
let alg = AlgorithmId::EccP384;
let slot = SlotId::try_from(slot).unwrap();

println!("Provisioning new PIV key in slot {:?}", slot);

let pin = CStr::from_ptr(pin);
let management_key = CStr::from_ptr(management_key);
let management_key = hex::decode(&management_key.to_str().unwrap()).unwrap();
let subject = CStr::from_ptr(subject);
let policy = TouchPolicy::Always;

let mut yk = Yubikey::open(yubikey_serial).unwrap();

if yk.unlock(pin.to_str().unwrap().as_bytes(), &management_key).is_err() {
println!("Could not unlock key");
return false
}

yk.provision(&slot, subject.to_str().unwrap(), alg, policy, PinPolicy::Never).is_ok()
}

0 comments on commit 62bb2f3

Please sign in to comment.