mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
3.5 KiB
200 lines
3.5 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1995.
|
|
//
|
|
// File: bulk.c
|
|
//
|
|
// Contents:
|
|
//
|
|
// Classes:
|
|
//
|
|
// Functions:
|
|
//
|
|
// History: 9-22-95 RichardW Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "sslsspi.h"
|
|
#include "md5.h"
|
|
#include "rc4.h"
|
|
|
|
BOOL
|
|
WINAPI
|
|
rc4Initialize( PUCHAR pbKey,
|
|
ULONG dwOptions,
|
|
PStateBuffer * psbBuffer);
|
|
|
|
BOOL
|
|
WINAPI
|
|
rc4Encrypt( PStateBuffer psbBuffer,
|
|
PUCHAR pbInput,
|
|
PUCHAR pbOutput,
|
|
ULONG cbInput);
|
|
|
|
BOOL
|
|
WINAPI
|
|
rc4Decrypt( PStateBuffer psbBuffer,
|
|
PUCHAR pbInput,
|
|
PUCHAR pbOutput,
|
|
ULONG cbInput);
|
|
|
|
BOOL
|
|
WINAPI
|
|
rc4Finish( PStateBuffer * psbBuffer);
|
|
|
|
|
|
BOOL
|
|
WINAPI
|
|
md5Initialize( ULONG dwSeed,
|
|
PCheckSumBuffer * ppcsBuffer);
|
|
|
|
BOOL
|
|
WINAPI
|
|
md5Sum( PCheckSumBuffer pcsBuffer,
|
|
ULONG cbData,
|
|
PUCHAR pbData);
|
|
|
|
BOOL
|
|
WINAPI
|
|
md5Finalize( PCheckSumBuffer pcsBuffer,
|
|
PUCHAR pbSum);
|
|
|
|
BOOL
|
|
WINAPI
|
|
md5Finish( PCheckSumBuffer * ppcsBuffer);
|
|
|
|
|
|
|
|
|
|
|
|
SslCryptoSystem csRC4 = {
|
|
RC4_STREAM,
|
|
1, // Blocksize (stream)
|
|
"RC4",
|
|
rc4Initialize,
|
|
rc4Encrypt,
|
|
rc4Encrypt, // Same operation...
|
|
rc4Finish
|
|
};
|
|
|
|
CheckSumFunction ckMD5 = {
|
|
MD5,
|
|
16,
|
|
sizeof(MD5_CTX),
|
|
"MD5",
|
|
md5Initialize,
|
|
md5Sum,
|
|
md5Finalize,
|
|
md5Finish
|
|
};
|
|
|
|
typedef struct RC4_KEYSTRUCT RC4Key;
|
|
|
|
|
|
BOOL
|
|
WINAPI
|
|
rc4Initialize( PUCHAR pbKey,
|
|
ULONG cbKey,
|
|
PStateBuffer * psbBuffer)
|
|
{
|
|
RC4Key * pRC4Key;
|
|
|
|
pRC4Key = SslAlloc(' 4CR', LMEM_FIXED | LMEM_ZEROINIT, sizeof(RC4Key));
|
|
|
|
if (!pRC4Key)
|
|
{
|
|
return(FALSE);
|
|
}
|
|
|
|
rc4_key(pRC4Key, cbKey, pbKey);
|
|
|
|
*psbBuffer = (PStateBuffer) pRC4Key;
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
BOOL
|
|
WINAPI
|
|
rc4Encrypt( PStateBuffer psbBuffer,
|
|
PUCHAR pbInput,
|
|
PUCHAR pbOutput,
|
|
ULONG cbInput)
|
|
{
|
|
if (pbInput != pbOutput)
|
|
{
|
|
memcpy(pbOutput, pbInput, cbInput);
|
|
}
|
|
|
|
rc4((RC4Key *) psbBuffer, cbInput, pbOutput);
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
BOOL
|
|
WINAPI
|
|
rc4Finish( PStateBuffer * psbBuffer)
|
|
{
|
|
SslFree( *psbBuffer );
|
|
|
|
*psbBuffer = NULL;
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
|
|
BOOL
|
|
WINAPI
|
|
md5Initialize( ULONG dwSeed,
|
|
PCheckSumBuffer * ppcsBuffer)
|
|
{
|
|
MD5_CTX * pMD5Context;
|
|
|
|
pMD5Context = SslAlloc( ' 5DM', LMEM_FIXED | LMEM_ZEROINIT, sizeof(MD5_CTX));
|
|
|
|
if (!pMD5Context)
|
|
{
|
|
return( FALSE );
|
|
}
|
|
|
|
MD5Init(pMD5Context);
|
|
|
|
*ppcsBuffer = pMD5Context;
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
BOOL
|
|
WINAPI
|
|
md5Sum( PCheckSumBuffer pcsBuffer,
|
|
ULONG cbData,
|
|
PUCHAR pbData)
|
|
{
|
|
MD5Update((MD5_CTX *) pcsBuffer, pbData, cbData);
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
BOOL
|
|
WINAPI
|
|
md5Finalize( PCheckSumBuffer pcsBuffer,
|
|
PUCHAR pbSum)
|
|
{
|
|
MD5Final((MD5_CTX *) pcsBuffer);
|
|
|
|
memcpy(pbSum, ((MD5_CTX *) pcsBuffer)->digest, 16);
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
BOOL
|
|
WINAPI
|
|
md5Finish( PCheckSumBuffer * ppcsBuffer)
|
|
{
|
|
SslFree(*ppcsBuffer);
|
|
|
|
*ppcsBuffer = 0;
|
|
|
|
return( TRUE );
|
|
}
|