Support ECDSA signatures
This commit is contained in:
parent
97d4880118
commit
c85d006887
3 changed files with 15 additions and 0 deletions
|
@ -138,6 +138,17 @@ impl<'a> crypto::Signer for CardSigner<'a> {
|
||||||
|
|
||||||
Ok(mpi::Signature::EdDSA { r, s })
|
Ok(mpi::Signature::EdDSA { r, s })
|
||||||
}
|
}
|
||||||
|
(PublicKeyAlgorithm::ECDSA, mpi::PublicKey::ECDSA { .. }) => {
|
||||||
|
let hash = Hash::ECDSA(digest);
|
||||||
|
|
||||||
|
let sig = self.ca.signature_for_hash(hash)?;
|
||||||
|
|
||||||
|
let len_2 = sig.len() / 2;
|
||||||
|
let r = mpi::MPI::new(&sig[..len_2]);
|
||||||
|
let s = mpi::MPI::new(&sig[len_2..]);
|
||||||
|
|
||||||
|
Ok(mpi::Signature::ECDSA { r, s })
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME: implement NIST etc
|
// FIXME: implement NIST etc
|
||||||
(pk_algo, _) => Err(anyhow!(
|
(pk_algo, _) => Err(anyhow!(
|
||||||
|
|
|
@ -543,6 +543,7 @@ impl CardApp {
|
||||||
tlv.serialize()
|
tlv.serialize()
|
||||||
}
|
}
|
||||||
Hash::EdDSA(d) => d.to_vec(),
|
Hash::EdDSA(d) => d.to_vec(),
|
||||||
|
Hash::ECDSA(d) => d.to_vec(),
|
||||||
};
|
};
|
||||||
|
|
||||||
self.compute_digital_signature(data)
|
self.compute_digital_signature(data)
|
||||||
|
|
|
@ -61,6 +61,7 @@ pub enum Hash<'a> {
|
||||||
SHA384([u8; 0x30]),
|
SHA384([u8; 0x30]),
|
||||||
SHA512([u8; 0x40]),
|
SHA512([u8; 0x40]),
|
||||||
EdDSA(&'a [u8]), // FIXME?
|
EdDSA(&'a [u8]), // FIXME?
|
||||||
|
ECDSA(&'a [u8]), // FIXME?
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Hash<'_> {
|
impl Hash<'_> {
|
||||||
|
@ -76,6 +77,7 @@ impl Hash<'_> {
|
||||||
Some(&[0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03])
|
Some(&[0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03])
|
||||||
}
|
}
|
||||||
Self::EdDSA(_) => None,
|
Self::EdDSA(_) => None,
|
||||||
|
Self::ECDSA(_) => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,6 +87,7 @@ impl Hash<'_> {
|
||||||
Self::SHA384(d) => &d[..],
|
Self::SHA384(d) => &d[..],
|
||||||
Self::SHA512(d) => &d[..],
|
Self::SHA512(d) => &d[..],
|
||||||
Self::EdDSA(d) => d,
|
Self::EdDSA(d) => d,
|
||||||
|
Self::ECDSA(d) => d,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue