summaryrefslogblamecommitdiffstats
path: root/private/nw/rdr/crypto.h
blob: 0de8e0865c12822fe6197d26373ac5c401965de8 (plain) (tree)










































































































































                                                                            
/* crypto.h
 *
 * Prototypes and definitions for services in crypto.c
 *
 * ported to win nt from win 95 on 6/95
 * Cory West
 */

#include <windef.h>

#define CIPHERBLOCKSIZE 8                 // size of RC2 block
#define MAX_RSA_BITS    512               // actually 420
#define MAX_RSA_BYTES   (MAX_RSA_BITS/8)

#define B_PSIZEBITS     210
#define B_PSIZEWORDS    (1 + B_PSIZEBITS/32)

void __cdecl
GenRandomBytes(
    BYTE *output,
    int len
);

//
// Generate an 8 byte key from a seed of the given length.
//

void __cdecl
GenKey8(
    BYTE *keyData,
    int keyDataLen,
    BYTE key8[8]
);

void __cdecl
MD2(
    BYTE *input,
    const int inlen,
    BYTE *output
);

//
// RC2 encrypt and decrypt wrappers.
//

int __cdecl
CBCEncrypt(
    BYTE *key,            // secret key
    BYTE const *ivec,     // initialization vector, NULL implies zero vector
    BYTE *const input,    // plain text
    int inlen,            // size of plaintext
    BYTE *const output,   // encrypted text
    int *outlen,          // OUTPUT: size of encrypted text
    const int checksumlen // size of checksum, if 0 no checksum is used
);

int __cdecl
CBCDecrypt(
    BYTE *key,        // secret key
    BYTE *ivec,       // initialization vector, null ptr implies zero vector
    BYTE *input,      // encrypted text
    int inlen,        // size of encrypted text
    BYTE *output,     // plain text
    int *outlen,      // OUTPUT: size of plaintext
    int checksumlen   // size of checksum; 0=> no checksum
);

//
// Wrappers to the RSA code.
//

int __cdecl
RSAGetInputBlockSize(
    BYTE *keydata,
    int keylen
);

BYTE * __cdecl
RSAGetModulus(
    BYTE *keydata,
    int keylen,
    int *modSize
);

BYTE * _cdecl
RSAGetPublicExponent(
    BYTE *keydata,
    int keylen,
    int *expSize
);

int __cdecl
RSAPack(
    BYTE *input,
    int inlen,
    BYTE *output,
    int blocksize
);

int __cdecl
RSAPublic(
    BYTE *pukeydata,    // BSAFE 1 itemized public key data
    int pukeylen,       // length of BSAFE1 keydata (including sign)
    BYTE *input,        // input block
    int inlen,          // size of input (< modulus)
    BYTE *output        // encrypted block (modulus sized)
);

int __cdecl
RSAPrivate(
    BYTE *prkeydata,
    int prkeylen,
    BYTE *input,
    int inlen,
    BYTE *output
);

int __cdecl
RSAModMpy(
    BYTE *pukeydata,    // BSAFE 1 itemized public key data
    int pukeylen,       // length of BSAFE1 keydata (including sign)
    BYTE *input1,       // input block
    int inlen1,         // size of input (< modulus)
    BYTE *input2,       // multiplier
    int inlen2,         // size of multiplier
    BYTE *output        // encrypted block (modulus sized)
);

int __cdecl
RSAModExp(
    BYTE *pukeydata,    // BSAFE 1 itemized public key data
    int pukeylen,       // length of BSAFE1 keydata (including sign)
    BYTE *input1,       // input block
    int inlen1,         // size of input (< modulus)
    BYTE *exponent,
    int explen,
    BYTE *output        // encrypted block (modulus sized)
);