diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2011-08-07 19:53:03 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2011-08-08 15:28:31 +0200 |
commit | bec483bc1874909be8fd9c8fbc909f53be5ba27a (patch) | |
tree | fd00ee7897dbe20e96e1772e30654a44c1eac728 /src/pki_gcrypt.c | |
parent | f81444bd57095cf8ff8e76b50f662aad0757f574 (diff) | |
download | libssh-bec483bc1874909be8fd9c8fbc909f53be5ba27a.tar.gz libssh-bec483bc1874909be8fd9c8fbc909f53be5ba27a.tar.xz libssh-bec483bc1874909be8fd9c8fbc909f53be5ba27a.zip |
pki: Add ssh_pki_import_pubkey_base64().
Diffstat (limited to 'src/pki_gcrypt.c')
-rw-r--r-- | src/pki_gcrypt.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/pki_gcrypt.c b/src/pki_gcrypt.c index 9c6cd677..9ef51c9e 100644 --- a/src/pki_gcrypt.c +++ b/src/pki_gcrypt.c @@ -700,6 +700,38 @@ fail: return NULL; } +int pki_pubkey_build_dss(ssh_key key, + ssh_string p, + ssh_string q, + ssh_string g, + ssh_string pubkey) { + gcry_sexp_build(&key->dsa, NULL, + "(public-key(dsa(p %b)(q %b)(g %b)(y %b)))", + ssh_string_len(p), ssh_string_data(p), + ssh_string_len(q), ssh_string_data(q), + ssh_string_len(g), ssh_string_data(g), + ssh_string_len(pubkey), ssh_string_data(pubkey)); + if (key->dsa == NULL) { + return SSH_ERROR; + } + + return SSH_OK; +} + +int pki_pubkey_build_rsa(ssh_key key, + ssh_string e, + ssh_string n) { + gcry_sexp_build(&key->rsa, NULL, + "(public-key(rsa(n %b)(e %b)))", + ssh_string_len(n), ssh_string_data(n), + ssh_string_len(e),ssh_string_data(e)); + if (key->rsa == NULL) { + return SSH_ERROR; + } + + return SSH_OK; +} + ssh_key pki_publickey_from_privatekey(ssh_key privkey) { ssh_key pubkey = NULL; gcry_sexp_t sexp; |