Merge remote-tracking branch 'refs/remotes/Cxbx-Reloaded/master' into OOVPA_Refactoring
This commit is contained in:
commit
9dacd95cc4
|
@ -226,6 +226,7 @@
|
||||||
<ClInclude Include="..\..\src\CxbxKrnl\HLEDataBase.h" />
|
<ClInclude Include="..\..\src\CxbxKrnl\HLEDataBase.h" />
|
||||||
<ClInclude Include="..\..\src\CxbxKrnl\HLEIntercept.h" />
|
<ClInclude Include="..\..\src\CxbxKrnl\HLEIntercept.h" />
|
||||||
<ClInclude Include="..\..\src\Common\Win32\Mutex.h" />
|
<ClInclude Include="..\..\src\Common\Win32\Mutex.h" />
|
||||||
|
<ClInclude Include="..\..\src\CxbxKrnl\LibRc4.h" />
|
||||||
<ClInclude Include="..\..\src\CxbxKrnl\nv2a_int.h" />
|
<ClInclude Include="..\..\src\CxbxKrnl\nv2a_int.h" />
|
||||||
<ClInclude Include="..\..\src\CxbxKrnl\OOVPA.h" />
|
<ClInclude Include="..\..\src\CxbxKrnl\OOVPA.h" />
|
||||||
<ClInclude Include="..\..\src\CxbxKrnl\ResourceTracker.h" />
|
<ClInclude Include="..\..\src\CxbxKrnl\ResourceTracker.h" />
|
||||||
|
@ -609,6 +610,7 @@
|
||||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\CxbxKrnl\LibRc4.cpp" />
|
||||||
<ClCompile Include="..\..\src\CxbxKrnl\ResourceTracker.cpp">
|
<ClCompile Include="..\..\src\CxbxKrnl\ResourceTracker.cpp">
|
||||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
|
|
@ -185,8 +185,19 @@ XBSYSAPI EXPORTNUM(336) VOID NTAPI XcSHAUpdate(UCHAR *pbSHAContext, UCHAR *pbInp
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
XBSYSAPI EXPORTNUM(337) VOID NTAPI XcSHAFinal(UCHAR *pbSHAContext, UCHAR *pbDigest);
|
XBSYSAPI EXPORTNUM(337) VOID NTAPI XcSHAFinal(UCHAR *pbSHAContext, UCHAR *pbDigest);
|
||||||
|
|
||||||
XBSYSAPI EXPORTNUM(338) VOID *XcRC4Key;
|
XBSYSAPI EXPORTNUM(338) VOID XcRC4Key
|
||||||
XBSYSAPI EXPORTNUM(339) VOID *XcRC4Crypt;
|
(
|
||||||
|
IN PUCHAR pbKeyStruct,
|
||||||
|
IN ULONG dwKeyLength,
|
||||||
|
IN PUCHAR pbKey
|
||||||
|
);
|
||||||
|
|
||||||
|
XBSYSAPI EXPORTNUM(339) VOID XcRC4Crypt
|
||||||
|
(
|
||||||
|
IN PUCHAR pbKeyStruct,
|
||||||
|
IN ULONG dwInputLength,
|
||||||
|
IN PUCHAR pbInput
|
||||||
|
);
|
||||||
|
|
||||||
XBSYSAPI EXPORTNUM(340) VOID NTAPI XcHMAC
|
XBSYSAPI EXPORTNUM(340) VOID NTAPI XcHMAC
|
||||||
(
|
(
|
||||||
|
|
|
@ -55,6 +55,12 @@ namespace NtDll
|
||||||
#include "EmuNtDll.h"
|
#include "EmuNtDll.h"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// ******************************************************************
|
||||||
|
// * Declaring this in a header causes errors with xboxkrnl
|
||||||
|
// * namespace, so we must declare it within any file that uses it
|
||||||
|
// ******************************************************************
|
||||||
|
xboxkrnl::KPCR* KeGetPcr();
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * 0x0033 - InterlockedCompareExchange()
|
// * 0x0033 - InterlockedCompareExchange()
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
|
@ -200,15 +206,8 @@ XBSYSAPI EXPORTNUM(160) xboxkrnl::UCHAR FASTCALL xboxkrnl::KfRaiseIrql
|
||||||
LOG_FUNC_ONE_ARG(NewIrql);
|
LOG_FUNC_ONE_ARG(NewIrql);
|
||||||
|
|
||||||
UCHAR OldIrql;
|
UCHAR OldIrql;
|
||||||
KPCR* Pcr = nullptr;
|
|
||||||
|
|
||||||
// Fetch KPCR data structure
|
KPCR* Pcr = KeGetPcr();
|
||||||
__asm {
|
|
||||||
push eax
|
|
||||||
mov eax, fs:[0x14]
|
|
||||||
mov Pcr, eax
|
|
||||||
pop eax
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NewIrql < Pcr->Irql) {
|
if (NewIrql < Pcr->Irql) {
|
||||||
// TODO: Enable this after KeBugCheck is implemented
|
// TODO: Enable this after KeBugCheck is implemented
|
||||||
|
|
|
@ -57,6 +57,26 @@ namespace NtDll
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
|
// ******************************************************************
|
||||||
|
// * KeGetPcr()
|
||||||
|
// * NOTE: This is a macro on the Xbox, however we implement it
|
||||||
|
// * as a function so it can suit our emulated KPCR structure
|
||||||
|
// ******************************************************************
|
||||||
|
xboxkrnl::KPCR* KeGetPcr()
|
||||||
|
{
|
||||||
|
xboxkrnl::KPCR* Pcr = nullptr;
|
||||||
|
|
||||||
|
__asm {
|
||||||
|
push eax
|
||||||
|
mov eax, fs:[0x14]
|
||||||
|
mov Pcr, eax
|
||||||
|
pop eax
|
||||||
|
}
|
||||||
|
|
||||||
|
return Pcr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * 0x005C - KeAlertResumeThread()
|
// * 0x005C - KeAlertResumeThread()
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
|
@ -222,12 +242,7 @@ XBSYSAPI EXPORTNUM(103) xboxkrnl::KIRQL NTAPI xboxkrnl::KeGetCurrentIrql(void)
|
||||||
|
|
||||||
KIRQL Irql;
|
KIRQL Irql;
|
||||||
|
|
||||||
// TODO : Untested :
|
Irql = KeGetPcr()->Irql;
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov al, byte ptr fs : [24h]
|
|
||||||
mov Irql, al
|
|
||||||
}
|
|
||||||
|
|
||||||
RETURN(Irql);
|
RETURN(Irql);
|
||||||
}
|
}
|
||||||
|
@ -439,13 +454,7 @@ XBSYSAPI EXPORTNUM(129) xboxkrnl::UCHAR NTAPI xboxkrnl::KeRaiseIrqlToDpcLevel()
|
||||||
CxbxKrnlCleanup("Bugcheck: Caller of KeRaiseIrqlToDpcLevel is higher than DISPATCH_LEVEL!");
|
CxbxKrnlCleanup("Bugcheck: Caller of KeRaiseIrqlToDpcLevel is higher than DISPATCH_LEVEL!");
|
||||||
|
|
||||||
KIRQL kRet = NULL;
|
KIRQL kRet = NULL;
|
||||||
__asm
|
KeGetPcr()->Irql = DISPATCH_LEVEL;
|
||||||
{
|
|
||||||
mov al, byte ptr fs:[24h]
|
|
||||||
mov kRet, al
|
|
||||||
mov al, DISPATCH_LEVEL
|
|
||||||
mov byte ptr fs:[24h], al
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef _DEBUG_TRACE
|
#ifdef _DEBUG_TRACE
|
||||||
DbgPrintf("Raised IRQL to DISPATCH_LEVEL (2).\n");
|
DbgPrintf("Raised IRQL to DISPATCH_LEVEL (2).\n");
|
||||||
|
|
|
@ -44,6 +44,7 @@ namespace xboxkrnl
|
||||||
#include "Logging.h" // For LOG_FUNC()
|
#include "Logging.h" // For LOG_FUNC()
|
||||||
#include "EmuKrnlLogging.h"
|
#include "EmuKrnlLogging.h"
|
||||||
#include "EmuSha.h" // For A_SHAInit, etc.
|
#include "EmuSha.h" // For A_SHAInit, etc.
|
||||||
|
#include "LibRc4.h" // For RC4 Functions
|
||||||
|
|
||||||
// prevent name collisions
|
// prevent name collisions
|
||||||
namespace NtDll
|
namespace NtDll
|
||||||
|
@ -100,6 +101,44 @@ XBSYSAPI EXPORTNUM(337) xboxkrnl::VOID NTAPI xboxkrnl::XcSHAFinal
|
||||||
A_SHAFinal((SHA_CTX*)pbSHAContext, pbDigest);
|
A_SHAFinal((SHA_CTX*)pbSHAContext, pbDigest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ******************************************************************
|
||||||
|
// * 0x0152 - XcRC4Key()
|
||||||
|
// ******************************************************************
|
||||||
|
XBSYSAPI EXPORTNUM(338) xboxkrnl::VOID xboxkrnl::XcRC4Key
|
||||||
|
(
|
||||||
|
IN PUCHAR pbKeyStruct,
|
||||||
|
IN ULONG dwKeyLength,
|
||||||
|
IN PUCHAR pbKey
|
||||||
|
)
|
||||||
|
{
|
||||||
|
LOG_FUNC_BEGIN
|
||||||
|
LOG_FUNC_ARG_OUT(pbKeyStruct)
|
||||||
|
LOG_FUNC_ARG(dwKeyLength)
|
||||||
|
LOG_FUNC_ARG_OUT(pbKey)
|
||||||
|
LOG_FUNC_END;
|
||||||
|
|
||||||
|
Rc4Initialise((Rc4Context*)pbKeyStruct, pbKey, dwKeyLength, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ******************************************************************
|
||||||
|
// * 0x0153 - XcRC4Crypt
|
||||||
|
// ******************************************************************
|
||||||
|
XBSYSAPI EXPORTNUM(339) xboxkrnl::VOID xboxkrnl::XcRC4Crypt
|
||||||
|
(
|
||||||
|
IN PUCHAR pbKeyStruct,
|
||||||
|
IN ULONG dwInputLength,
|
||||||
|
IN PUCHAR pbInput
|
||||||
|
)
|
||||||
|
{
|
||||||
|
LOG_FUNC_BEGIN
|
||||||
|
LOG_FUNC_ARG_OUT(pbKeyStruct)
|
||||||
|
LOG_FUNC_ARG(dwInputLength)
|
||||||
|
LOG_FUNC_ARG_OUT(pbInput)
|
||||||
|
LOG_FUNC_END;
|
||||||
|
|
||||||
|
Rc4Xor((Rc4Context*)pbKeyStruct, pbInput, pbInput, dwInputLength);
|
||||||
|
}
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * 0x0154 - XcHMAC()
|
// * 0x0154 - XcHMAC()
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
|
|
|
@ -403,8 +403,8 @@ extern "C" CXBXKRNL_API uint32 CxbxKrnl_KernelThunkTable[379] =
|
||||||
(uint32)FUNC(&xboxkrnl::XcSHAInit), // 0x014F (335)
|
(uint32)FUNC(&xboxkrnl::XcSHAInit), // 0x014F (335)
|
||||||
(uint32)FUNC(&xboxkrnl::XcSHAUpdate), // 0x0150 (336)
|
(uint32)FUNC(&xboxkrnl::XcSHAUpdate), // 0x0150 (336)
|
||||||
(uint32)FUNC(&xboxkrnl::XcSHAFinal), // 0x0151 (337)
|
(uint32)FUNC(&xboxkrnl::XcSHAFinal), // 0x0151 (337)
|
||||||
(uint32)PANIC(0x0152), // 0x0152 (338) XcRC4Key
|
(uint32)FUNC(&xboxkrnl::XcRC4Key), // 0x0152 (338)
|
||||||
(uint32)PANIC(0x0153), // 0x0153 (339) XcRC4Crypt
|
(uint32)FUNC(&xboxkrnl::XcRC4Crypt), // 0x0153 (339)
|
||||||
(uint32)FUNC(&xboxkrnl::XcHMAC), // 0x0154 (340)
|
(uint32)FUNC(&xboxkrnl::XcHMAC), // 0x0154 (340)
|
||||||
(uint32)PANIC(0x0155), // 0x0155 (341) XcPKEncPublic
|
(uint32)PANIC(0x0155), // 0x0155 (341) XcPKEncPublic
|
||||||
(uint32)PANIC(0x0156), // 0x0156 (342) XcPKDecPrivate
|
(uint32)PANIC(0x0156), // 0x0156 (342) XcPKDecPrivate
|
||||||
|
|
|
@ -0,0 +1,129 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// LibRC4
|
||||||
|
//
|
||||||
|
// An implementation of RC4 stream cipher
|
||||||
|
//
|
||||||
|
// This is free and unencumbered software released into the public domain - June 2013 waterjuice.org
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// IMPORTS
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "LibRc4.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// INTERNAL FUNCTIONS
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#define SwapBytes( Value1, Value2 ) \
|
||||||
|
{ \
|
||||||
|
uint8_t temp = Value1; \
|
||||||
|
Value1 = Value2; \
|
||||||
|
Value2 = temp; \
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// PUBLIC FUNCTIONS
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Rc4Initialise
|
||||||
|
//
|
||||||
|
// Initialises an RC4 cipher and discards the specified number of first bytes.
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void
|
||||||
|
Rc4Initialise
|
||||||
|
(
|
||||||
|
Rc4Context* Context,
|
||||||
|
void* Key,
|
||||||
|
uint32_t KeySize,
|
||||||
|
uint32_t DropN
|
||||||
|
)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
uint32_t j;
|
||||||
|
uint32_t n;
|
||||||
|
|
||||||
|
// Setup key schedule
|
||||||
|
for( i=0; i<256; i++ )
|
||||||
|
{
|
||||||
|
Context->S[i] = (uint8_t)i;
|
||||||
|
}
|
||||||
|
|
||||||
|
j = 0;
|
||||||
|
for( i=0; i<256; i++ )
|
||||||
|
{
|
||||||
|
j = ( j + Context->S[i] + ((uint8_t*)Key)[i % KeySize] ) % 256;
|
||||||
|
SwapBytes( Context->S[i], Context->S[j] );
|
||||||
|
}
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
j = 0;
|
||||||
|
|
||||||
|
// Drop first bytes (if requested)
|
||||||
|
for( n=0; n<DropN; n++ )
|
||||||
|
{
|
||||||
|
i = ( i + 1 ) % 256;
|
||||||
|
j = ( j + Context->S[i] ) % 256;
|
||||||
|
SwapBytes( Context->S[i], Context->S[j] );
|
||||||
|
}
|
||||||
|
|
||||||
|
Context->i = i;
|
||||||
|
Context->j = j;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Rc4Output
|
||||||
|
//
|
||||||
|
// Outputs the requested number of bytes from the RC4 stream
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void
|
||||||
|
Rc4Output
|
||||||
|
(
|
||||||
|
Rc4Context* Context,
|
||||||
|
void* Buffer,
|
||||||
|
uint32_t Size
|
||||||
|
)
|
||||||
|
{
|
||||||
|
uint32_t n;
|
||||||
|
|
||||||
|
for( n=0; n<Size; n++ )
|
||||||
|
{
|
||||||
|
Context->i = ( Context->i + 1 ) % 256;
|
||||||
|
Context->j = ( Context->j + Context->S[Context->i] ) % 256;
|
||||||
|
SwapBytes( Context->S[Context->i], Context->S[Context->j] );
|
||||||
|
|
||||||
|
((uint8_t*)Buffer)[n] = Context->S[ (Context->S[Context->i] + Context->S[Context->j]) % 256 ];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Rc4Xor
|
||||||
|
//
|
||||||
|
// XORs the RC4 stream with an input buffer and puts the results in an output buffer. This is used for encrypting
|
||||||
|
// and decrypting data. InBuffer and OutBuffer can point to the same location for inplace encrypting/decrypting
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void
|
||||||
|
Rc4Xor
|
||||||
|
(
|
||||||
|
Rc4Context* Context,
|
||||||
|
void* InBuffer,
|
||||||
|
void* OutBuffer,
|
||||||
|
uint32_t Size
|
||||||
|
)
|
||||||
|
{
|
||||||
|
uint32_t n;
|
||||||
|
|
||||||
|
for( n=0; n<Size; n++ )
|
||||||
|
{
|
||||||
|
Context->i = ( Context->i + 1 ) % 256;
|
||||||
|
Context->j = ( Context->j + Context->S[Context->i] ) % 256;
|
||||||
|
SwapBytes( Context->S[Context->i], Context->S[Context->j] );
|
||||||
|
|
||||||
|
((uint8_t*)OutBuffer)[n] = ((uint8_t*)InBuffer)[n]
|
||||||
|
^ ( Context->S[ (Context->S[Context->i] + Context->S[Context->j]) % 256 ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// LibRC4
|
||||||
|
//
|
||||||
|
// An implementation of RC4 stream cipher
|
||||||
|
//
|
||||||
|
// This is free and unencumbered software released into the public domain - June 2013 waterjuice.org
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef _LibRc4_h_
|
||||||
|
#define _LibRc4_h_
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// IMPORTS
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// TYPES
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// Rc4Context - This must be initialised using Rc4Initialised. Do not modify the contents of this structure directly.
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t S[256];
|
||||||
|
uint32_t i;
|
||||||
|
uint32_t j;
|
||||||
|
} Rc4Context;
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// PUBLIC FUNCTIONS
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Rc4Initialise
|
||||||
|
//
|
||||||
|
// Initialises an RC4 cipher and discards the specified number of first bytes.
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void
|
||||||
|
Rc4Initialise
|
||||||
|
(
|
||||||
|
Rc4Context* Context,
|
||||||
|
void* Key,
|
||||||
|
uint32_t KeySize,
|
||||||
|
uint32_t DropN
|
||||||
|
);
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Rc4Output
|
||||||
|
//
|
||||||
|
// Outputs the requested number of bytes from the RC4 stream
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void
|
||||||
|
Rc4Output
|
||||||
|
(
|
||||||
|
Rc4Context* Context,
|
||||||
|
void* Buffer,
|
||||||
|
uint32_t Size
|
||||||
|
);
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Rc4Xor
|
||||||
|
//
|
||||||
|
// XORs the RC4 stream with an input buffer and puts the results in an output buffer. This is used for encrypting
|
||||||
|
// and decrypting data. InBuffer and OutBuffer can point to the same location for inplace encrypting/decrypting
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void
|
||||||
|
Rc4Xor
|
||||||
|
(
|
||||||
|
Rc4Context* Context,
|
||||||
|
void* InBuffer,
|
||||||
|
void* OutBuffer,
|
||||||
|
uint32_t Size
|
||||||
|
);
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
#endif //_LibRc4_h_
|
||||||
|
|
Loading…
Reference in New Issue