aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/ssh/sshcapabilities.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@theqtcompany.com>2015-07-20 16:19:58 +0200
committerChristian Kandeler <christian.kandeler@theqtcompany.com>2015-07-21 16:11:59 +0000
commit815caedceb9ea0075292e00639d12104be287aba (patch)
tree8b969113f29e015092e480ddc198b750f66a9b3c /src/libs/ssh/sshcapabilities.cpp
parent0aadfbd4537e83bab7b65c3658aa323c003610c4 (diff)
SSH: Support more ECDSA public key sizes.
Namely, 384 and 521 bits. Change-Id: I245f8521b86d615163e5c071014e455a584c1305 Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Diffstat (limited to 'src/libs/ssh/sshcapabilities.cpp')
-rw-r--r--src/libs/ssh/sshcapabilities.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/libs/ssh/sshcapabilities.cpp b/src/libs/ssh/sshcapabilities.cpp
index 725f01c1a0..6bef99b91d 100644
--- a/src/libs/ssh/sshcapabilities.cpp
+++ b/src/libs/ssh/sshcapabilities.cpp
@@ -65,9 +65,14 @@ const QList<QByteArray> SshCapabilities::KeyExchangeMethods = QList<QByteArray>(
const QByteArray SshCapabilities::PubKeyDss("ssh-dss");
const QByteArray SshCapabilities::PubKeyRsa("ssh-rsa");
-const QByteArray SshCapabilities::PubKeyEcdsa256("ecdsa-sha2-nistp256");
+const QByteArray SshCapabilities::PubKeyEcdsaPrefix("ecdsa-sha2-nistp");
+const QByteArray SshCapabilities::PubKeyEcdsa256 = SshCapabilities::PubKeyEcdsaPrefix + "256";
+const QByteArray SshCapabilities::PubKeyEcdsa384 = SshCapabilities::PubKeyEcdsaPrefix + "384";
+const QByteArray SshCapabilities::PubKeyEcdsa521 = SshCapabilities::PubKeyEcdsaPrefix + "521";
const QList<QByteArray> SshCapabilities::PublicKeyAlgorithms = QList<QByteArray>()
<< SshCapabilities::PubKeyEcdsa256
+ << SshCapabilities::PubKeyEcdsa384
+ << SshCapabilities::PubKeyEcdsa521
<< SshCapabilities::PubKeyRsa
<< SshCapabilities::PubKeyDss;
@@ -134,6 +139,22 @@ int SshCapabilities::ecdsaIntegerWidthInBytes(const QByteArray &ecdsaAlgo)
{
if (ecdsaAlgo == PubKeyEcdsa256)
return 32;
+ if (ecdsaAlgo == PubKeyEcdsa384)
+ return 48;
+ if (ecdsaAlgo == PubKeyEcdsa521)
+ return 66;
+ throw SshClientException(SshInternalError, SSH_TR("Unexpected ecdsa algorithm \"%1\"")
+ .arg(QString::fromLatin1(ecdsaAlgo)));
+}
+
+const char *SshCapabilities::oid(const QByteArray &ecdsaAlgo)
+{
+ if (ecdsaAlgo == PubKeyEcdsa256)
+ return "secp256r1";
+ if (ecdsaAlgo == PubKeyEcdsa384)
+ return "secp384r1";
+ if (ecdsaAlgo == PubKeyEcdsa521)
+ return "secp521r1";
throw SshClientException(SshInternalError, SSH_TR("Unexpected ecdsa algorithm \"%1\"")
.arg(QString::fromLatin1(ecdsaAlgo)));
}