struct ec_point {
const struct ec_curve *curve;
Bignum x, y;
- Bignum z; // Jacobian denominator
+ Bignum z; /* Jacobian denominator */
unsigned char infinity;
};
Bignum privateKey;
};
-int makekey(unsigned char *data, int len, struct RSAKey *result,
- unsigned char **keystr, int order);
-int makeprivate(unsigned char *data, int len, struct RSAKey *result);
+int makekey(const unsigned char *data, int len, struct RSAKey *result,
+ const unsigned char **keystr, int order);
+int makeprivate(const unsigned char *data, int len, struct RSAKey *result);
int rsaencrypt(unsigned char *data, int length, struct RSAKey *key);
Bignum rsadecrypt(Bignum input, struct RSAKey *key);
void rsasign(unsigned char *data, int length, struct RSAKey *key);
void (*bytes) (void *, unsigned char const *, int);
void (*genresult) (void *, unsigned char *);
int (*verresult) (void *, unsigned char const *);
- char *name;
+ char *name, *etm_name;
int len;
char *text_name;
};
};
struct ssh_signkey {
- void *(*newkey) (char *data, int len);
+ void *(*newkey) (const char *data, int len);
void (*freekey) (void *key);
char *(*fmtkey) (void *key);
unsigned char *(*public_blob) (void *key, int *len);
unsigned char *(*private_blob) (void *key, int *len);
- void *(*createkey) (unsigned char *pub_blob, int pub_len,
- unsigned char *priv_blob, int priv_len);
- void *(*openssh_createkey) (unsigned char **blob, int *len);
+ void *(*createkey) (const unsigned char *pub_blob, int pub_len,
+ const unsigned char *priv_blob, int priv_len);
+ void *(*openssh_createkey) (const unsigned char **blob, int *len);
int (*openssh_fmtkey) (void *key, unsigned char *blob, int len);
- int (*pubkey_bits) (void *blob, int len);
+ /* OpenSSH private key blobs, as created by openssh_fmtkey and
+ * consumed by openssh_createkey, always (at least so far...) take
+ * the form of a number of SSH-2 strings / mpints concatenated
+ * end-to-end. Because the new-style OpenSSH private key format
+ * stores those blobs without a containing string wrapper, we need
+ * to know how many strings each one consists of, so that we can
+ * skip over the right number to find the next key in the file.
+ * 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, char *sig, int siglen,
- char *data, int datalen);
- unsigned char *(*sign) (void *key, char *data, int datalen,
+ int (*verifysig) (void *key, const char *sig, int siglen,
+ const char *data, int datalen);
+ unsigned char *(*sign) (void *key, const char *data, int datalen,
int *siglen);
char *name;
char *keytype; /* for host key cache */
* authorisation protocol to use at the remote end. The local auth
* details are looked up by calling platform_get_x11_auth.
*/
-extern struct X11Display *x11_setup_display(char *display, Conf *);
+extern struct X11Display *x11_setup_display(const char *display, Conf *);
void x11_free_display(struct X11Display *disp);
struct X11FakeAuth *x11_invent_fake_auth(tree234 *t, int authtype);
void x11_free_fake_auth(struct X11FakeAuth *auth);
void *dh_setup_gex(Bignum pval, Bignum gval);
void dh_cleanup(void *);
Bignum dh_create_e(void *, int nbits);
+const char *dh_validate_f(void *handle, Bignum f);
Bignum dh_find_K(void *, Bignum f);
int loadrsakey(const Filename *filename, struct RSAKey *key,
SSH_KEYTYPE_UNOPENABLE,
SSH_KEYTYPE_UNKNOWN,
SSH_KEYTYPE_SSH1, SSH_KEYTYPE_SSH2,
- SSH_KEYTYPE_OPENSSH, SSH_KEYTYPE_SSHCOM
+ SSH_KEYTYPE_OPENSSH_PEM,
+ SSH_KEYTYPE_OPENSSH_NEW,
+ SSH_KEYTYPE_SSHCOM
};
int key_type(const Filename *filename);
char *key_type_to_str(int type);
void des_decrypt_xdmauth(const unsigned char *key,
unsigned char *blk, int len);
+void openssh_bcrypt(const char *passphrase,
+ const unsigned char *salt, int saltbytes,
+ int rounds, unsigned char *out, int outbytes);
+
/*
* For progress updates in the key generation utility.
*/
#define SSH2_MSG_NEWKEYS 21 /* 0x15 */
#define SSH2_MSG_KEXDH_INIT 30 /* 0x1e */
#define SSH2_MSG_KEXDH_REPLY 31 /* 0x1f */
-#define SSH2_MSG_KEX_DH_GEX_REQUEST 30 /* 0x1e */
+#define SSH2_MSG_KEX_DH_GEX_REQUEST_OLD 30 /* 0x1e */
+#define SSH2_MSG_KEX_DH_GEX_REQUEST 34 /* 0x22 */
#define SSH2_MSG_KEX_DH_GEX_GROUP 31 /* 0x1f */
#define SSH2_MSG_KEX_DH_GEX_INIT 32 /* 0x20 */
#define SSH2_MSG_KEX_DH_GEX_REPLY 33 /* 0x21 */