1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-11-29 01:03:57 +03:00

pki: Add mbedTLS ECDSA key comparison support

Signed-off-by: Juraj Vijtiuk <juraj.vijtiuk@sartura.hr>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
Juraj Vijtiuk
2018-02-22 15:56:05 +01:00
committed by Andreas Schneider
parent 81847bf513
commit d11869bdb6
3 changed files with 28 additions and 24 deletions

View File

@@ -451,15 +451,34 @@ int pki_key_compare(const ssh_key k1, const ssh_key k2, enum ssh_keycmp_e what)
}
break;
}
case SSH_KEYTYPE_ECDSA:
/* TODO: mbedTLS can't compare ecdsa keys.
mbedtls_ecdsa_context is actually a mbedtls_ecp_keypair,
so the private and public points and the group can be accessed
through the keypair. However, mbedtls has no method corresponding
to OpenSSL's EC_GROUP_cmp and EC_POITN_cmp, so the comparison
would have to be done manually.
*/
return 1;
case SSH_KEYTYPE_ECDSA: {
mbedtls_ecp_keypair *ecdsa1 = k1->ecdsa;
mbedtls_ecp_keypair *ecdsa2 = k2->ecdsa;
if (ecdsa1->grp.id != ecdsa2->grp.id) {
return 1;
}
if (mbedtls_mpi_cmp_mpi(&ecdsa1->Q.X, &ecdsa2->Q.X)) {
return 1;
}
if (mbedtls_mpi_cmp_mpi(&ecdsa1->Q.Y, &ecdsa2->Q.Y)) {
return 1;
}
if (mbedtls_mpi_cmp_mpi(&ecdsa1->Q.Z, &ecdsa2->Q.Z)) {
return 1;
}
if (what == SSH_KEY_CMP_PRIVATE) {
if (mbedtls_mpi_cmp_mpi(&ecdsa1->d, &ecdsa2->d)) {
return 1;
}
}
break;
}
case SSH_KEYTYPE_ED25519:
/* ed25519 keys handled globally */
return 0;