summaryrefslogtreecommitdiffstats
path: root/src/pki_crypto.c
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2011-08-22 13:48:25 +0200
committerAndreas Schneider <asn@cryptomilk.org>2011-08-22 13:48:25 +0200
commit79ffd49940a526d647320c9b7ca6b26f3693e8ba (patch)
treeddf360c9cce0efda78634aaa13e600c216cc49eb /src/pki_crypto.c
parenta2e08697b1a24066c9870fe4bd61133de7f2663c (diff)
downloadlibssh-79ffd49940a526d647320c9b7ca6b26f3693e8ba.tar.gz
libssh-79ffd49940a526d647320c9b7ca6b26f3693e8ba.tar.xz
libssh-79ffd49940a526d647320c9b7ca6b26f3693e8ba.zip
pki: Add ssh_srv_pki_do_sign_sessionid().
Diffstat (limited to 'src/pki_crypto.c')
-rw-r--r--src/pki_crypto.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/pki_crypto.c b/src/pki_crypto.c
index 3e53a3cc..18ac876b 100644
--- a/src/pki_crypto.c
+++ b/src/pki_crypto.c
@@ -716,4 +716,41 @@ struct signature_struct *pki_do_sign(ssh_key privatekey,
return sign;
}
+#ifdef WITH_SERVER
+ssh_signature pki_do_sign_sessionid(const ssh_key key,
+ const unsigned char *hash)
+{
+ ssh_signature sig;
+
+ sig = ssh_signature_new();
+ if (sig == NULL) {
+ return NULL;
+ }
+ sig->type = key->type;
+
+ switch(key->type) {
+ case SSH_KEYTYPE_DSS:
+ sig->dsa_sig = DSA_do_sign(hash + 1, SHA_DIGEST_LEN, key->dsa);
+ if (sig->dsa_sig == NULL) {
+ ssh_signature_free(sig);
+ return NULL;
+ }
+ break;
+ case SSH_KEYTYPE_RSA:
+ case SSH_KEYTYPE_RSA1:
+ sig->rsa_sig = _RSA_do_sign(hash + 1, SHA_DIGEST_LEN, key->rsa);
+ if (sig->rsa_sig == NULL) {
+ ssh_signature_free(sig);
+ return NULL;
+ }
+ break;
+ case SSH_KEYTYPE_ECDSA:
+ case SSH_KEYTYPE_UNKNOWN:
+ return NULL;
+ }
+
+ return sig;
+}
+#endif /* WITH_SERVER */
+
#endif /* _PKI_CRYPTO_H */