[PATCH v2 04/10] tls: Support peer certificates that use ECDSA
Denis Kenzior <[email protected]>
| Newsgroups | dev.linux.lists.ell |
|---|---|
| Message-ID | <[email protected]> |
---
v2 - Rework slightly to fix (false-positive) compiler warnings
ell/tls.c | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/ell/tls.c b/ell/tls.c
index b2f7411f3b36..136aa8660c2a 100644
--- a/ell/tls.c
+++ b/ell/tls.c
@@ -2028,12 +2028,22 @@ static void tls_handle_certificate(struct l_tls *tls,
return;
}
- if (!l_key_get_info(tls->peer_pubkey, L_KEY_RSA_PKCS1_V1_5,
- L_CHECKSUM_NONE, &tls->peer_pubkey_size,
- &dummy)) {
+ switch (l_cert_get_pubkey_type(tls->peer_cert)) {
+ case L_CERT_KEY_RSA:
+ if (!l_key_get_info(tls->peer_pubkey, L_KEY_RSA_PKCS1_V1_5,
+ L_CHECKSUM_NONE,
+ &tls->peer_pubkey_size, &dummy))
+ goto pubkey_unsupported;
+ break;
+ case L_CERT_KEY_ECC:
+ if (!l_key_get_info(tls->peer_pubkey, L_KEY_ECDSA_X962,
+ L_CHECKSUM_SHA1,
+ &tls->peer_pubkey_size, &dummy))
+ goto pubkey_unsupported;
+ break;
+ case L_CERT_KEY_UNKNOWN:
TLS_DISCONNECT(TLS_ALERT_INTERNAL_ERROR, 0,
- "Can't l_key_get_info for peer public key");
-
+ "Unknown public key type");
return;
}
@@ -2047,6 +2057,10 @@ static void tls_handle_certificate(struct l_tls *tls,
return;
+pubkey_unsupported:
+ TLS_DISCONNECT(TLS_ALERT_INTERNAL_ERROR, 0,
+ "Can't l_key_get_info for peer public key");
+ return;
decode_error:
TLS_DISCONNECT(TLS_ALERT_DECODE_ERROR, 0,
"TLS_CERTIFICATE decode error");
--
2.35.1