/** * @brief Convert a public_key object into a a SSH string. * * @param[in] key The public key to convert. * * @returns An allocated SSH String containing the public key, NULL * on error. * * @see string_free() */ ssh_string publickey_to_string(ssh_public_key key) { ssh_string type = NULL; ssh_string ret = NULL; ssh_buffer buf = NULL; buf = ssh_buffer_new(); if (buf == NULL) { return NULL; } type = ssh_string_from_char(key->type_c); if (type == NULL) { goto error; } if (buffer_add_ssh_string(buf, type) < 0) { goto error; } switch (key->type) { case SSH_KEYTYPE_DSS: if (dsa_public_to_string(key->dsa_pub, buf) < 0) { goto error; } break; case SSH_KEYTYPE_RSA: case SSH_KEYTYPE_RSA1: if (rsa_public_to_string(key->rsa_pub, buf) < 0) { goto error; } break; } ret = ssh_string_new(buffer_get_rest_len(buf)); if (ret == NULL) { goto error; } ssh_string_fill(ret, buffer_get_rest(buf), buffer_get_rest_len(buf)); error: ssh_buffer_free(buf); if(type != NULL) ssh_string_free(type); return ret; }
/** \brief makes a SSH String out of a PUBLIC_KEY object * \param key the public key * \returns a SSH String containing the public key * \see string_free() */ STRING *publickey_to_string(PUBLIC_KEY *key) { STRING *type = NULL; STRING *ret = NULL; BUFFER *buf = NULL; buf = buffer_new(); if (buf == NULL) { return NULL; } type = string_from_char(key->type_c); if (type == NULL) { goto error; } if (buffer_add_ssh_string(buf, type) < 0) { goto error; } switch (key->type) { case TYPE_DSS: if (dsa_public_to_string(key->dsa_pub, buf) < 0) { goto error; } break; case TYPE_RSA: case TYPE_RSA1: if (rsa_public_to_string(key->rsa_pub, buf) < 0) { goto error; } break; } ret = string_new(buffer_get_len(buf)); if (ret == NULL) { goto error; } string_fill(ret, buffer_get(buf), buffer_get_len(buf)); error: buffer_free(buf); string_free(type); return ret; }
/** \brief makes a SSH String out of a PUBLIC_KEY object * \param key the public key * \returns a SSH String containing the public key * \see string_free() */ STRING *publickey_to_string(PUBLIC_KEY *key){ STRING *type; STRING *ret; BUFFER *buf; type=string_from_char(ssh_type_to_char(key->type)); buf=buffer_new(); buffer_add_ssh_string(buf,type); switch(key->type){ case TYPE_DSS: dsa_public_to_string(key->dsa_pub,buf); break; case TYPE_RSA: case TYPE_RSA1: rsa_public_to_string(key->rsa_pub,buf); break; } ret=string_new(buffer_get_len(buf)); string_fill(ret,buffer_get(buf),buffer_get_len(buf)); buffer_free(buf); free(type); return ret; }