mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-16 02:27:32 -05:00
RSA key authentication in ssh1 works; SSH2 is nearly there
[originally from svn r572]
This commit is contained in:
47
ssh.h
47
ssh.h
@ -18,6 +18,13 @@
|
||||
#define APIEXTRA 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* A Bignum is stored as a sequence of `unsigned short' words. The
|
||||
* first tells how many remain; the remaining ones are digits, LS
|
||||
* first.
|
||||
*/
|
||||
typedef unsigned short *Bignum;
|
||||
|
||||
struct RSAKey {
|
||||
int bits;
|
||||
int bytes;
|
||||
@ -25,14 +32,19 @@ struct RSAKey {
|
||||
unsigned long exponent;
|
||||
unsigned char *modulus;
|
||||
#else
|
||||
void *modulus;
|
||||
void *exponent;
|
||||
Bignum modulus;
|
||||
Bignum exponent;
|
||||
Bignum private_exponent;
|
||||
#endif
|
||||
};
|
||||
|
||||
int makekey(unsigned char *data, struct RSAKey *result,
|
||||
unsigned char **keystr);
|
||||
unsigned char **keystr, int order);
|
||||
int makeprivate(unsigned char *data, struct RSAKey *result);
|
||||
void 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 rsasanitise(struct RSAKey *key);
|
||||
int rsastr_len(struct RSAKey *key);
|
||||
void rsastr_fmt(char *str, struct RSAKey *key);
|
||||
|
||||
@ -71,6 +83,7 @@ typedef struct {
|
||||
void SHA_Init(SHA_State *s);
|
||||
void SHA_Bytes(SHA_State *s, void *p, int len);
|
||||
void SHA_Final(SHA_State *s, unsigned char *output);
|
||||
void SHA_Simple(void *p, int len, unsigned char *output);
|
||||
|
||||
struct ssh_cipher {
|
||||
void (*sesskey)(unsigned char *key); /* for ssh 1 */
|
||||
@ -94,10 +107,20 @@ struct ssh_mac {
|
||||
};
|
||||
|
||||
struct ssh_kex {
|
||||
/*
|
||||
* Plugging in another KEX algorithm requires structural chaos,
|
||||
* so it's hard to abstract them into nice little structures
|
||||
* like this. Hence, for the moment, this is just a
|
||||
* placeholder. I claim justification in the fact that OpenSSH
|
||||
* does this too :-)
|
||||
*/
|
||||
char *name;
|
||||
};
|
||||
|
||||
struct ssh_hostkey {
|
||||
void (*setkey)(char *data, int len);
|
||||
char *(*fmtkey)(void);
|
||||
int (*verifysig)(char *sig, int siglen, char *data, int datalen);
|
||||
char *name;
|
||||
};
|
||||
|
||||
@ -114,16 +137,20 @@ void random_add_noise(void *noise, int length);
|
||||
|
||||
void logevent (char *);
|
||||
|
||||
/*
|
||||
* A Bignum is stored as a sequence of `unsigned short' words. The
|
||||
* first tells how many remain; the remaining ones are digits, LS
|
||||
* first.
|
||||
*/
|
||||
typedef unsigned short *Bignum;
|
||||
|
||||
Bignum newbn(int length);
|
||||
Bignum copybn(Bignum b);
|
||||
void freebn(Bignum b);
|
||||
void modpow(Bignum base, Bignum exp, Bignum mod, Bignum result);
|
||||
void modmul(Bignum a, Bignum b, Bignum mod, Bignum result);
|
||||
void decbn(Bignum n);
|
||||
extern Bignum Zero, One;
|
||||
int ssh1_read_bignum(unsigned char *data, Bignum *result);
|
||||
|
||||
Bignum dh_create_e(void);
|
||||
Bignum dh_find_K(Bignum f);
|
||||
|
||||
int loadrsakey(char *filename, struct RSAKey *key, char *passphrase);
|
||||
int rsakey_encrypted(char *filename);
|
||||
|
||||
void des3_decrypt_pubkey(unsigned char *key,
|
||||
unsigned char *blk, int len);
|
Reference in New Issue
Block a user