opgpcard: Add direct key signature in make_cert().

Without this, pubkey output contains no signatures at all, if no User ID is set.
This commit is contained in:
Heiko Schaefer 2022-09-08 14:53:54 +02:00
parent d167883835
commit 1b483b5c09
No known key found for this signature in database
GPG key ID: 4A849A1904CCBD7D

View file

@ -62,6 +62,23 @@ pub fn make_cert<'app>(
let pri = PrimaryRole::convert_key(key_sig.clone()); let pri = PrimaryRole::convert_key(key_sig.clone());
pp.push(Packet::from(pri)); pp.push(Packet::from(pri));
// 1a) add a direct key signature
// Allow signing on the card
if let Some(pw1) = pw1 {
open.verify_user_for_signing(pw1)?;
} else {
open.verify_user_for_signing_pinpad(pinpad_prompt)?;
}
if let Some(mut sign) = open.signing_card() {
// Card-backed signer for bindings
let mut card_signer = sign.signer_from_public(key_sig.clone(), touch_prompt);
let dks = SignatureBuilder::new(SignatureType::DirectKey)
.sign_direct_key(&mut card_signer, key_sig.role_as_primary())?;
pp.push(dks.into());
}
if let Some(key_dec) = key_dec { if let Some(key_dec) = key_dec {
// 2) add decryption key as subkey // 2) add decryption key as subkey
let sub_dec = SubordinateRole::convert_key(key_dec); let sub_dec = SubordinateRole::convert_key(key_dec);