diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2011-08-22 13:48:25 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2011-08-22 13:48:25 +0200 |
commit | 79ffd49940a526d647320c9b7ca6b26f3693e8ba (patch) | |
tree | ddf360c9cce0efda78634aaa13e600c216cc49eb /src/pki_crypto.c | |
parent | a2e08697b1a24066c9870fe4bd61133de7f2663c (diff) | |
download | libssh-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.c | 37 |
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 */ |