X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/6c4edc71a0877c4d3376f60466064119ff17c707..8f203108d91b3aef5a379a6d49f6cb2a546eebbc:/ssh.c diff --git a/ssh.c b/ssh.c index d31d823e..a1b0deb0 100644 --- a/ssh.c +++ b/ssh.c @@ -152,8 +152,15 @@ static void ssh_gotdata(unsigned char *data, int datalen) { pktin.length = len; if (pktin.maxlen < biglen) { pktin.maxlen = biglen; +#ifdef MSCRYPTOAPI + /* Allocate enough buffer space for extra block + * for MS CryptEncrypt() */ + pktin.data = (pktin.data == NULL ? malloc(biglen+8) : + realloc(pktin.data, biglen+8)); +#else pktin.data = (pktin.data == NULL ? malloc(biglen) : - realloc(pktin.data, biglen)); + realloc(pktin.data, biglen)); +#endif if (!pktin.data) fatalbox("Out of memory"); } @@ -199,8 +206,15 @@ static void s_wrpkt_start(int type, int len) { pktout.length = len-5; if (pktout.maxlen < biglen) { pktout.maxlen = biglen; +#ifdef MSCRYPTOAPI + /* Allocate enough buffer space for extra block + * for MS CryptEncrypt() */ + pktout.data = (pktout.data == NULL ? malloc(biglen+8) : + realloc(pktout.data, biglen+8)); +#else pktout.data = (pktout.data == NULL ? malloc(biglen+4) : realloc(pktout.data, biglen+4)); +#endif if (!pktout.data) fatalbox("Out of memory"); } @@ -685,6 +699,11 @@ static char *ssh_init (HWND hwnd, char *host, int port, char **realhost) { char *FWhost; int FWport; #endif + +#ifdef MSCRYPTOAPI + if(crypto_startup() == 0) + return "Microsoft high encryption pack not installed!"; +#endif savedhost = malloc(1+strlen(host)); if (!savedhost)