struct ssh_hash {
void *(*init)(void); /* also allocates context */
- void (*bytes)(void *, void *, int);
+ void (*bytes)(void *, const void *, int);
void (*final)(void *, unsigned char *); /* also frees context */
int hlen; /* output length in bytes */
char *text_name;
* openssh_private_npieces gives that information. */
int openssh_private_npieces;
int (*pubkey_bits) (const void *blob, int len);
- char *(*fingerprint) (void *key);
int (*verifysig) (void *key, const char *sig, int siglen,
const char *data, int datalen);
unsigned char *(*sign) (void *key, const char *data, int datalen,
Bignum bignum_lshift(Bignum number, int shift);
int bignum_cmp(Bignum a, Bignum b);
char *bignum_decimal(Bignum x);
+Bignum bignum_from_decimal(const char *decimal);
#ifdef DEBUG
void diagbn(char *prefix, Bignum md);
int saversakey(const Filename *filename, struct RSAKey *key, char *passphrase);
-extern int base64_decode_atom(char *atom, unsigned char *out);
+extern int base64_decode_atom(const char *atom, unsigned char *out);
extern int base64_lines(int datalen);
-extern void base64_encode_atom(unsigned char *data, int n, char *out);
-extern void base64_encode(FILE *fp, unsigned char *data, int datalen, int cpl);
+extern void base64_encode_atom(const unsigned char *data, int n, char *out);
+extern void base64_encode(FILE *fp, const unsigned char *data, int datalen,
+ int cpl);
/* ssh2_load_userkey can return this as an error */
extern struct ssh2_userkey ssh2_wrong_passphrase;
SSH_KEYTYPE_OPENSSH_AUTO,
SSH_KEYTYPE_OPENSSH_PEM,
SSH_KEYTYPE_OPENSSH_NEW,
- SSH_KEYTYPE_SSHCOM
+ SSH_KEYTYPE_SSHCOM,
+ /*
+ * Public-key-only formats, which we still want to be able to read
+ * for various purposes.
+ */
+ SSH_KEYTYPE_SSH1_PUBLIC,
+ SSH_KEYTYPE_SSH2_PUBLIC_RFC4716,
+ SSH_KEYTYPE_SSH2_PUBLIC_OPENSSH
};
+char *ssh1_pubkey_str(struct RSAKey *ssh1key);
+void ssh1_write_pubkey(FILE *fp, struct RSAKey *ssh1key);
+char *ssh2_pubkey_openssh_str(struct ssh2_userkey *key);
+void ssh2_write_pubkey(FILE *fp, const char *comment,
+ const void *v_pub_blob, int pub_len,
+ int keytype);
+char *ssh2_fingerprint_blob(const void *blob, int bloblen);
+char *ssh2_fingerprint(const struct ssh_signkey *alg, void *data);
int key_type(const Filename *filename);
char *key_type_to_str(int type);