aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelen <jjelen@redhat.com>2018-11-26 18:02:22 +0100
committerAndreas Schneider <asn@cryptomilk.org>2018-11-30 18:57:39 +0100
commit455d495c7441370332835b9123806f3bdccac053 (patch)
treef201a705f6659951e8cd00892516efda326c26cb
parentb1bae1d90f61bd7842a18bda4f9ac9c3de3d82fe (diff)
downloadlibssh-455d495c7441370332835b9123806f3bdccac053.tar.gz
libssh-455d495c7441370332835b9123806f3bdccac053.tar.xz
libssh-455d495c7441370332835b9123806f3bdccac053.zip
pki: Sanitize input to verification
Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org> (cherry picked from commit b72c9eead6c40c8710af2913faedde3c5eb4384e)
-rw-r--r--src/pki_crypto.c10
-rw-r--r--src/pki_gcrypt.c8
-rw-r--r--src/pki_mbedcrypto.c8
3 files changed, 25 insertions, 1 deletions
diff --git a/src/pki_crypto.c b/src/pki_crypto.c
index 05128058..e79d97b4 100644
--- a/src/pki_crypto.c
+++ b/src/pki_crypto.c
@@ -1796,7 +1796,15 @@ int pki_signature_verify(ssh_session session,
int rc;
int nid;
- switch(key->type) {
+ if (key->type != sig->type) {
+ SSH_LOG(SSH_LOG_WARN,
+ "Can not verify %s signature with %s key",
+ sig->type_c,
+ key->type_c);
+ return SSH_ERROR;
+ }
+
+ switch (key->type) {
case SSH_KEYTYPE_DSS:
rc = DSA_do_verify(hash,
hlen,
diff --git a/src/pki_gcrypt.c b/src/pki_gcrypt.c
index 5506edfb..c0cf5926 100644
--- a/src/pki_gcrypt.c
+++ b/src/pki_gcrypt.c
@@ -2034,6 +2034,14 @@ int pki_signature_verify(ssh_session session,
gcry_sexp_t sexp;
gcry_error_t err;
+ if (key->type != sig->type) {
+ SSH_LOG(SSH_LOG_WARN,
+ "Can not verify %s signature with %s key",
+ sig->type_c,
+ key->type_c);
+ return SSH_ERROR;
+ }
+
switch(key->type) {
case SSH_KEYTYPE_DSS:
/* That is to mark the number as positive */
diff --git a/src/pki_mbedcrypto.c b/src/pki_mbedcrypto.c
index ee791db0..ccce014c 100644
--- a/src/pki_mbedcrypto.c
+++ b/src/pki_mbedcrypto.c
@@ -1008,6 +1008,14 @@ int pki_signature_verify(ssh_session session, const ssh_signature sig, const
int rc;
mbedtls_md_type_t md = 0;
+ if (key->type != sig->type) {
+ SSH_LOG(SSH_LOG_WARN,
+ "Can not verify %s signature with %s key",
+ sig->type_c,
+ key->type_c);
+ return SSH_ERROR;
+ }
+
switch (key->type) {
case SSH_KEYTYPE_RSA:
switch (sig->hash_type) {