version 1.88, 2013/11/08 00:39:14 |
version 1.89, 2013/12/06 13:30:08 |
|
|
#include <sys/socket.h> |
#include <sys/socket.h> |
|
|
#include <openssl/evp.h> |
#include <openssl/evp.h> |
|
|
#include <openssl/crypto.h> |
#include <openssl/crypto.h> |
|
|
#include <fcntl.h> |
#include <fcntl.h> |
#include <stdlib.h> |
#include <stdlib.h> |
#include <signal.h> |
#include <signal.h> |
|
|
static void |
static void |
ssh_encode_identity_ssh2(Buffer *b, Key *key, const char *comment) |
ssh_encode_identity_ssh2(Buffer *b, Key *key, const char *comment) |
{ |
{ |
buffer_put_cstring(b, key_ssh_name(key)); |
key_private_serialize(key, b); |
switch (key->type) { |
|
case KEY_RSA: |
|
buffer_put_bignum2(b, key->rsa->n); |
|
buffer_put_bignum2(b, key->rsa->e); |
|
buffer_put_bignum2(b, key->rsa->d); |
|
buffer_put_bignum2(b, key->rsa->iqmp); |
|
buffer_put_bignum2(b, key->rsa->p); |
|
buffer_put_bignum2(b, key->rsa->q); |
|
break; |
|
case KEY_RSA_CERT_V00: |
|
case KEY_RSA_CERT: |
|
if (key->cert == NULL || buffer_len(&key->cert->certblob) == 0) |
|
fatal("%s: no cert/certblob", __func__); |
|
buffer_put_string(b, buffer_ptr(&key->cert->certblob), |
|
buffer_len(&key->cert->certblob)); |
|
buffer_put_bignum2(b, key->rsa->d); |
|
buffer_put_bignum2(b, key->rsa->iqmp); |
|
buffer_put_bignum2(b, key->rsa->p); |
|
buffer_put_bignum2(b, key->rsa->q); |
|
break; |
|
case KEY_DSA: |
|
buffer_put_bignum2(b, key->dsa->p); |
|
buffer_put_bignum2(b, key->dsa->q); |
|
buffer_put_bignum2(b, key->dsa->g); |
|
buffer_put_bignum2(b, key->dsa->pub_key); |
|
buffer_put_bignum2(b, key->dsa->priv_key); |
|
break; |
|
case KEY_DSA_CERT_V00: |
|
case KEY_DSA_CERT: |
|
if (key->cert == NULL || buffer_len(&key->cert->certblob) == 0) |
|
fatal("%s: no cert/certblob", __func__); |
|
buffer_put_string(b, buffer_ptr(&key->cert->certblob), |
|
buffer_len(&key->cert->certblob)); |
|
buffer_put_bignum2(b, key->dsa->priv_key); |
|
break; |
|
case KEY_ECDSA: |
|
buffer_put_cstring(b, key_curve_nid_to_name(key->ecdsa_nid)); |
|
buffer_put_ecpoint(b, EC_KEY_get0_group(key->ecdsa), |
|
EC_KEY_get0_public_key(key->ecdsa)); |
|
buffer_put_bignum2(b, EC_KEY_get0_private_key(key->ecdsa)); |
|
break; |
|
case KEY_ECDSA_CERT: |
|
if (key->cert == NULL || buffer_len(&key->cert->certblob) == 0) |
|
fatal("%s: no cert/certblob", __func__); |
|
buffer_put_string(b, buffer_ptr(&key->cert->certblob), |
|
buffer_len(&key->cert->certblob)); |
|
buffer_put_bignum2(b, EC_KEY_get0_private_key(key->ecdsa)); |
|
break; |
|
} |
|
buffer_put_cstring(b, comment); |
buffer_put_cstring(b, comment); |
} |
} |
|
|