#ifndef SSH_H
#define SSH_H

#include <string.h>
#include "sshdef.h"
#include "windows.h"
#include "putty.h"
#include "sshstrc.h"

extern SSHSession *session;

struct RSAKey {
    int bits;
    int bytes;
    void *modulus;
    void *exponent;
};

int makekey(unsigned char *data, struct RSAKey *result,
	    unsigned char **keystr);
void destroykey(struct RSAKey *key);
void rsaencrypt(unsigned char *data, int length, struct RSAKey *key);
int rsastr_len(struct RSAKey *key);
void rsastr_fmt(char *str, struct RSAKey *key);

unsigned long crc32(const unsigned char *s, unsigned int len);

struct MD5Context {
        uint32 buf[4];
        uint32 bits[2];
        unsigned char in[64];
};

void MD5Init(struct MD5Context *context);
void MD5Update(struct MD5Context *context, unsigned char const *buf,
               unsigned len);
void MD5Final(unsigned char digest[16], struct MD5Context *context);

struct ssh_cipher {
    void (*sesskey)(WInt pN, unsigned char *key);
    void (*encrypt)(WInt pN, unsigned char *blk, int len);
    void (*decrypt)(WInt pN, unsigned char *blk, int len);
};

void SHATransform(word32 *digest, word32 *data);

int random_byte(void);
void random_add_noise(void *noise, int length);

#endif
