1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-08-08 19:02:06 +03:00

pki: Add ssh_srv_pki_do_sign_sessionid().

This commit is contained in:
Andreas Schneider
2011-08-22 13:48:25 +02:00
parent a2e08697b1
commit 79ffd49940
5 changed files with 142 additions and 0 deletions

View File

@@ -1355,6 +1355,64 @@ 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;
gcry_sexp_t sexp;
gcry_error_t err;
sig = ssh_signature_new();
if (sig == NULL) {
return NULL;
}
sig->type = key->type;
switch(key->type) {
case SSH_KEYTYPE_DSS:
err = gcry_sexp_build(&sexp,
NULL,
"%b",
SHA_DIGEST_LEN + 1,
hash);
if (err) {
ssh_signature_free(sig);
return NULL;
}
err = gcry_pk_sign(&sig->dsa_sig, sexp, key->dsa);
gcry_sexp_release(sexp);
if (err) {
ssh_signature_free(sig);
return NULL;
}
break;
case SSH_KEYTYPE_RSA:
case SSH_KEYTYPE_RSA1:
err = gcry_sexp_build(&sexp,
NULL,
"(data(flags pkcs1)(hash sha1 %b))",
SHA_DIGEST_LEN,
hash + 1);
if (err) {
ssh_signature_free(sig);
return NULL;
}
err = gcry_pk_sign(&sig->rsa_sig, sexp, key->rsa);
gcry_sexp_release(sexp);
if (err) {
ssh_signature_free(sig);
return NULL;
}
break;
case SSH_KEYTYPE_ECDSA:
case SSH_KEYTYPE_UNKNOWN:
return NULL;
}
return sig;
}
#endif /* WITH_SERVER */
#endif /* HAVE_LIBGCRYPT */
/**