X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=ssh.h;h=45405d3e9b97f8a010159f8ddd621597d7389963;hb=8d0c333946fa0060120dca5d6fc85fa5975fbbfa;hp=6a47e4b648dafcd53ba053bf4caee90e53307a2e;hpb=11d5c791acb6fbc3376ab0843d2040aa0e40e2f2;p=PuTTY.git diff --git a/ssh.h b/ssh.h index 6a47e4b6..45405d3e 100644 --- a/ssh.h +++ b/ssh.h @@ -122,6 +122,16 @@ void SHA_Simple(void *p, int len, unsigned char *output); void hmac_sha1_simple(void *key, int keylen, void *data, int datalen, unsigned char *output); +typedef struct { + uint32 h[8]; + unsigned char block[64]; + int blkused; + uint32 lenhi, lenlo; +} SHA256_State; +void SHA256_Init(SHA256_State * s); +void SHA256_Bytes(SHA256_State * s, const void *p, int len); +void SHA256_Final(SHA256_State * s, unsigned char *output); +void SHA256_Simple(const void *p, int len, unsigned char *output); typedef struct { uint64 h[8]; @@ -175,6 +185,13 @@ struct ssh_mac { char *text_name; }; +struct ssh_hash { + void *(*init)(void); /* also allocates context */ + void (*bytes)(void *, void *, int); + void (*final)(void *, unsigned char *); /* also frees context */ + int hlen; /* output length in bytes */ +}; + struct ssh_kex { /* * Plugging in another KEX algorithm requires structural chaos, @@ -186,6 +203,7 @@ struct ssh_kex { char *name, *groupname; const unsigned char *pdata, *gdata;/* NULL means use group exchange */ int plen, glen; + const struct ssh_hash *hash; }; struct ssh_signkey { @@ -236,6 +254,8 @@ extern const struct ssh2_ciphers ssh2_des; extern const struct ssh2_ciphers ssh2_aes; extern const struct ssh2_ciphers ssh2_blowfish; extern const struct ssh2_ciphers ssh2_arcfour; +extern const struct ssh_hash ssh_sha1; +extern const struct ssh_hash ssh_sha256; extern const struct ssh_kex ssh_diffiehellman_group1; extern const struct ssh_kex ssh_diffiehellman_group14; extern const struct ssh_kex ssh_diffiehellman_gex;