Wipe all traces of OpenSSL's AES implementation. Use polarssl instead.
This commit is contained in:
parent
0791a9ef80
commit
8e73e8ae5f
|
@ -24,8 +24,6 @@ set(SRCS Src/BreakPoints.cpp
|
||||||
Src/x64ABI.cpp
|
Src/x64ABI.cpp
|
||||||
Src/x64Analyzer.cpp
|
Src/x64Analyzer.cpp
|
||||||
Src/x64Emitter.cpp
|
Src/x64Emitter.cpp
|
||||||
Src/Crypto/aes_cbc.cpp
|
|
||||||
Src/Crypto/aes_core.cpp
|
|
||||||
Src/Crypto/bn.cpp
|
Src/Crypto/bn.cpp
|
||||||
Src/Crypto/ec.cpp)
|
Src/Crypto/ec.cpp)
|
||||||
|
|
||||||
|
|
|
@ -180,8 +180,6 @@
|
||||||
<ClCompile Include="Src\CDUtils.cpp" />
|
<ClCompile Include="Src\CDUtils.cpp" />
|
||||||
<ClCompile Include="Src\ColorUtil.cpp" />
|
<ClCompile Include="Src\ColorUtil.cpp" />
|
||||||
<ClCompile Include="Src\ConsoleListener.cpp" />
|
<ClCompile Include="Src\ConsoleListener.cpp" />
|
||||||
<ClCompile Include="Src\Crypto\aes_cbc.cpp" />
|
|
||||||
<ClCompile Include="Src\Crypto\aes_core.cpp" />
|
|
||||||
<ClCompile Include="Src\Crypto\bn.cpp" />
|
<ClCompile Include="Src\Crypto\bn.cpp" />
|
||||||
<ClCompile Include="Src\Crypto\ec.cpp" />
|
<ClCompile Include="Src\Crypto\ec.cpp" />
|
||||||
<ClCompile Include="Src\ExtendedTrace.cpp" />
|
<ClCompile Include="Src\ExtendedTrace.cpp" />
|
||||||
|
@ -232,8 +230,6 @@
|
||||||
<ClInclude Include="Src\CommonTypes.h" />
|
<ClInclude Include="Src\CommonTypes.h" />
|
||||||
<ClInclude Include="Src\ConsoleListener.h" />
|
<ClInclude Include="Src\ConsoleListener.h" />
|
||||||
<ClInclude Include="Src\CPUDetect.h" />
|
<ClInclude Include="Src\CPUDetect.h" />
|
||||||
<ClInclude Include="Src\Crypto\aes.h" />
|
|
||||||
<ClInclude Include="Src\Crypto\aes_locl.h" />
|
|
||||||
<ClInclude Include="Src\Crypto\tools.h" />
|
<ClInclude Include="Src\Crypto\tools.h" />
|
||||||
<ClInclude Include="Src\DebugInterface.h" />
|
<ClInclude Include="Src\DebugInterface.h" />
|
||||||
<ClInclude Include="Src\ExtendedTrace.h" />
|
<ClInclude Include="Src\ExtendedTrace.h" />
|
||||||
|
|
|
@ -31,12 +31,6 @@
|
||||||
<ClCompile Include="Src\ConsoleListener.cpp">
|
<ClCompile Include="Src\ConsoleListener.cpp">
|
||||||
<Filter>Logging</Filter>
|
<Filter>Logging</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="Src\Crypto\aes_cbc.cpp">
|
|
||||||
<Filter>Crypto</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="Src\Crypto\aes_core.cpp">
|
|
||||||
<Filter>Crypto</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="Src\Crypto\bn.cpp">
|
<ClCompile Include="Src\Crypto\bn.cpp">
|
||||||
<Filter>Crypto</Filter>
|
<Filter>Crypto</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -95,12 +89,6 @@
|
||||||
<ClInclude Include="Src\ConsoleListener.h">
|
<ClInclude Include="Src\ConsoleListener.h">
|
||||||
<Filter>Logging</Filter>
|
<Filter>Logging</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="Src\Crypto\aes.h">
|
|
||||||
<Filter>Crypto</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="Src\Crypto\aes_locl.h">
|
|
||||||
<Filter>Crypto</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="Src\Crypto\tools.h">
|
<ClInclude Include="Src\Crypto\tools.h">
|
||||||
<Filter>Crypto</Filter>
|
<Filter>Crypto</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
|
@ -1,143 +0,0 @@
|
||||||
/* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_AES_H
|
|
||||||
#define HEADER_AES_H
|
|
||||||
|
|
||||||
// #include <openssl/opensslconf.h>
|
|
||||||
|
|
||||||
#ifdef OPENSSL_NO_AES
|
|
||||||
#error AES is disabled.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define AES_ENCRYPT 1
|
|
||||||
#define AES_DECRYPT 0
|
|
||||||
|
|
||||||
/* Because array size can't be a const in C, the following two are macros.
|
|
||||||
Both sizes are in bytes. */
|
|
||||||
#define AES_MAXNR 14
|
|
||||||
#define AES_BLOCK_SIZE 16
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This should be a hidden type, but EVP requires that the size be known */
|
|
||||||
struct aes_key_st
|
|
||||||
{
|
|
||||||
#ifdef AES_LONG
|
|
||||||
unsigned long rd_key[4 * (AES_MAXNR + 1)];
|
|
||||||
#else
|
|
||||||
unsigned int rd_key[4 * (AES_MAXNR + 1)];
|
|
||||||
#endif
|
|
||||||
int rounds;
|
|
||||||
};
|
|
||||||
typedef struct aes_key_st AES_KEY;
|
|
||||||
|
|
||||||
const char* AES_options(void);
|
|
||||||
|
|
||||||
int AES_set_encrypt_key(const unsigned char* userKey, const int bits,
|
|
||||||
AES_KEY* key);
|
|
||||||
int AES_set_decrypt_key(const unsigned char* userKey, const int bits,
|
|
||||||
AES_KEY* key);
|
|
||||||
|
|
||||||
void AES_encrypt(const unsigned char* in, unsigned char* out,
|
|
||||||
const AES_KEY* key);
|
|
||||||
void AES_decrypt(const unsigned char* in, unsigned char* out,
|
|
||||||
const AES_KEY* key);
|
|
||||||
|
|
||||||
void AES_ecb_encrypt(const unsigned char* in, unsigned char* out,
|
|
||||||
const AES_KEY* key, const int enc);
|
|
||||||
void AES_cbc_encrypt(const unsigned char* in, unsigned char* out,
|
|
||||||
const unsigned long length, const AES_KEY* key,
|
|
||||||
unsigned char* ivec, const int enc);
|
|
||||||
void AES_cfb128_encrypt(const unsigned char* in, unsigned char* out,
|
|
||||||
const unsigned long length, const AES_KEY* key,
|
|
||||||
unsigned char* ivec, int* num, const int enc);
|
|
||||||
void AES_cfb1_encrypt(const unsigned char* in, unsigned char* out,
|
|
||||||
const unsigned long length, const AES_KEY* key,
|
|
||||||
unsigned char* ivec, int* num, const int enc);
|
|
||||||
void AES_cfb8_encrypt(const unsigned char* in, unsigned char* out,
|
|
||||||
const unsigned long length, const AES_KEY* key,
|
|
||||||
unsigned char* ivec, int* num, const int enc);
|
|
||||||
void AES_cfbr_encrypt_block(const unsigned char* in, unsigned char* out,
|
|
||||||
const int nbits, const AES_KEY* key,
|
|
||||||
unsigned char* ivec, const int enc);
|
|
||||||
void AES_ofb128_encrypt(const unsigned char* in, unsigned char* out,
|
|
||||||
const unsigned long length, const AES_KEY* key,
|
|
||||||
unsigned char* ivec, int* num);
|
|
||||||
|
|
||||||
|
|
||||||
void AES_ctr128_encrypt(const unsigned char* in, unsigned char* out,
|
|
||||||
const unsigned long length, const AES_KEY * key,
|
|
||||||
unsigned char ivec[AES_BLOCK_SIZE],
|
|
||||||
unsigned char ecount_buf[AES_BLOCK_SIZE],
|
|
||||||
unsigned int* num);
|
|
||||||
|
|
||||||
/* For IGE, see also http://www.links.org/files/openssl-ige.pdf
|
|
||||||
NB: the IV is _two_ blocks long */
|
|
||||||
void AES_ige_encrypt(const unsigned char* in, unsigned char* out,
|
|
||||||
const unsigned long length, const AES_KEY* key,
|
|
||||||
unsigned char* ivec, const int enc);
|
|
||||||
|
|
||||||
|
|
||||||
/* NB: the IV is _four_ blocks long */
|
|
||||||
void AES_bi_ige_encrypt(const unsigned char* in, unsigned char* out,
|
|
||||||
const unsigned long length, const AES_KEY* key,
|
|
||||||
const AES_KEY* key2, const unsigned char* ivec,
|
|
||||||
const int enc);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* !HEADER_AES_H */
|
|
|
@ -1,131 +0,0 @@
|
||||||
/* crypto/aes/aes_cbc.c -*- mode:C; c-file-style: "eay" -*- */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AES_DEBUG
|
|
||||||
# ifndef NDEBUG
|
|
||||||
# define NDEBUG
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#include "aes.h"
|
|
||||||
#include "aes_locl.h"
|
|
||||||
|
|
||||||
void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
const unsigned long length, const AES_KEY *key,
|
|
||||||
unsigned char *ivec, const int enc) {
|
|
||||||
|
|
||||||
unsigned long n;
|
|
||||||
unsigned long len = length;
|
|
||||||
unsigned char tmp[AES_BLOCK_SIZE];
|
|
||||||
const unsigned char *iv = ivec;
|
|
||||||
|
|
||||||
assert(in && out && key && ivec);
|
|
||||||
assert((AES_ENCRYPT == enc)||(AES_DECRYPT == enc));
|
|
||||||
|
|
||||||
if (AES_ENCRYPT == enc) {
|
|
||||||
while (len >= AES_BLOCK_SIZE) {
|
|
||||||
for(n=0; n < AES_BLOCK_SIZE; ++n)
|
|
||||||
out[n] = in[n] ^ iv[n];
|
|
||||||
AES_encrypt(out, out, key);
|
|
||||||
iv = out;
|
|
||||||
len -= AES_BLOCK_SIZE;
|
|
||||||
in += AES_BLOCK_SIZE;
|
|
||||||
out += AES_BLOCK_SIZE;
|
|
||||||
}
|
|
||||||
if (len) {
|
|
||||||
for(n=0; n < len; ++n)
|
|
||||||
out[n] = in[n] ^ iv[n];
|
|
||||||
for(n=len; n < AES_BLOCK_SIZE; ++n)
|
|
||||||
out[n] = iv[n];
|
|
||||||
AES_encrypt(out, out, key);
|
|
||||||
iv = out;
|
|
||||||
}
|
|
||||||
memcpy(ivec,iv,AES_BLOCK_SIZE);
|
|
||||||
} else if (in != out) {
|
|
||||||
while (len >= AES_BLOCK_SIZE) {
|
|
||||||
AES_decrypt(in, out, key);
|
|
||||||
for(n=0; n < AES_BLOCK_SIZE; ++n)
|
|
||||||
out[n] ^= iv[n];
|
|
||||||
iv = in;
|
|
||||||
len -= AES_BLOCK_SIZE;
|
|
||||||
in += AES_BLOCK_SIZE;
|
|
||||||
out += AES_BLOCK_SIZE;
|
|
||||||
}
|
|
||||||
if (len) {
|
|
||||||
AES_decrypt(in,tmp,key);
|
|
||||||
for(n=0; n < len; ++n)
|
|
||||||
out[n] = tmp[n] ^ iv[n];
|
|
||||||
iv = in;
|
|
||||||
}
|
|
||||||
memcpy(ivec,iv,AES_BLOCK_SIZE);
|
|
||||||
} else {
|
|
||||||
while (len >= AES_BLOCK_SIZE) {
|
|
||||||
memcpy(tmp, in, AES_BLOCK_SIZE);
|
|
||||||
AES_decrypt(in, out, key);
|
|
||||||
for(n=0; n < AES_BLOCK_SIZE; ++n)
|
|
||||||
out[n] ^= ivec[n];
|
|
||||||
memcpy(ivec, tmp, AES_BLOCK_SIZE);
|
|
||||||
len -= AES_BLOCK_SIZE;
|
|
||||||
in += AES_BLOCK_SIZE;
|
|
||||||
out += AES_BLOCK_SIZE;
|
|
||||||
}
|
|
||||||
if (len) {
|
|
||||||
memcpy(tmp, in, AES_BLOCK_SIZE);
|
|
||||||
AES_decrypt(tmp, out, key);
|
|
||||||
for(n=0; n < len; ++n)
|
|
||||||
out[n] ^= ivec[n];
|
|
||||||
for(n=len; n < AES_BLOCK_SIZE; ++n)
|
|
||||||
out[n] = tmp[n];
|
|
||||||
memcpy(ivec, tmp, AES_BLOCK_SIZE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,88 +0,0 @@
|
||||||
/* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_AES_LOCL_H
|
|
||||||
#define HEADER_AES_LOCL_H
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef OPENSSL_NO_AES
|
|
||||||
#error AES is disabled.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#if defined (_MSC_VER) && (defined (_M_IX86) || defined (_M_AMD64) || defined (_M_X64))
|
|
||||||
# define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00)
|
|
||||||
# define GETU32(p) SWAP(*((u32*)(p)))
|
|
||||||
# define PUTU32(ct, st) {*((u32*)(ct)) = SWAP((st));}
|
|
||||||
#else
|
|
||||||
# define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] << 8) ^ ((u32)(pt)[3]))
|
|
||||||
# define PUTU32(ct, st) {(ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); (ct)[2] = (u8)((st) >> 8); (ct)[3] = (u8)(st);}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef AES_LONG
|
|
||||||
typedef unsigned long u32;
|
|
||||||
#else
|
|
||||||
typedef unsigned int u32;
|
|
||||||
#endif
|
|
||||||
typedef unsigned short u16;
|
|
||||||
typedef unsigned char u8;
|
|
||||||
|
|
||||||
#define MAXKC (256 / 32)
|
|
||||||
#define MAXKB (256 / 8)
|
|
||||||
#define MAXNR 14
|
|
||||||
|
|
||||||
/* This controls loop-unrolling in aes_core.c */
|
|
||||||
#undef FULL_UNROLL
|
|
||||||
|
|
||||||
#endif /* !HEADER_AES_LOCL_H */
|
|
|
@ -38,7 +38,7 @@
|
||||||
#include "../PowerPC/PowerPC.h"
|
#include "../PowerPC/PowerPC.h"
|
||||||
#include "../VolumeHandler.h"
|
#include "../VolumeHandler.h"
|
||||||
#include "FileUtil.h"
|
#include "FileUtil.h"
|
||||||
#include "Crypto/aes.h"
|
#include <polarssl/aes.h>
|
||||||
#include "ConfigManager.h"
|
#include "ConfigManager.h"
|
||||||
|
|
||||||
#include "../Boot/Boot_DOL.h"
|
#include "../Boot/Boot_DOL.h"
|
||||||
|
@ -860,10 +860,10 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress)
|
||||||
u8* newIV = Memory::GetPointer(Buffer.PayloadBuffer[0].m_Address);
|
u8* newIV = Memory::GetPointer(Buffer.PayloadBuffer[0].m_Address);
|
||||||
u8* destination = Memory::GetPointer(Buffer.PayloadBuffer[1].m_Address);
|
u8* destination = Memory::GetPointer(Buffer.PayloadBuffer[1].m_Address);
|
||||||
|
|
||||||
AES_KEY AESKey;
|
aes_context AES_ctx;
|
||||||
AES_set_encrypt_key(keyTable[keyIndex], 128, &AESKey);
|
aes_setkey_enc(&AES_ctx, keyTable[keyIndex], 128);
|
||||||
memcpy(newIV, IV, 16);
|
memcpy(newIV, IV, 16);
|
||||||
AES_cbc_encrypt(source, destination, size, &AESKey, newIV, AES_ENCRYPT);
|
aes_crypt_cbc(&AES_ctx, AES_ENCRYPT, size, newIV, source, destination);
|
||||||
|
|
||||||
_dbg_assert_msg_(WII_IPC_ES, keyIndex == 6, "IOCTL_ES_ENCRYPT: Key type is not SD, data will be crap");
|
_dbg_assert_msg_(WII_IPC_ES, keyIndex == 6, "IOCTL_ES_ENCRYPT: Key type is not SD, data will be crap");
|
||||||
}
|
}
|
||||||
|
@ -878,10 +878,10 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress)
|
||||||
u8* newIV = Memory::GetPointer(Buffer.PayloadBuffer[0].m_Address);
|
u8* newIV = Memory::GetPointer(Buffer.PayloadBuffer[0].m_Address);
|
||||||
u8* destination = Memory::GetPointer(Buffer.PayloadBuffer[1].m_Address);
|
u8* destination = Memory::GetPointer(Buffer.PayloadBuffer[1].m_Address);
|
||||||
|
|
||||||
AES_KEY AESKey;
|
aes_context AES_ctx;
|
||||||
AES_set_decrypt_key(keyTable[keyIndex], 128, &AESKey);
|
aes_setkey_dec(&AES_ctx, keyTable[keyIndex], 128);
|
||||||
memcpy(newIV, IV, 16);
|
memcpy(newIV, IV, 16);
|
||||||
AES_cbc_encrypt(source, destination, size, &AESKey, newIV, AES_DECRYPT);
|
aes_crypt_cbc(&AES_ctx, AES_DECRYPT, size, newIV, source, destination);
|
||||||
|
|
||||||
_dbg_assert_msg_(WII_IPC_ES, keyIndex == 6, "IOCTL_ES_DECRYPT: Key type is not SD, data will be crap");
|
_dbg_assert_msg_(WII_IPC_ES, keyIndex == 6, "IOCTL_ES_DECRYPT: Key type is not SD, data will be crap");
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include "Crypto/aes.h"
|
#include <polarssl/aes.h>
|
||||||
#include "MathUtil.h"
|
#include "MathUtil.h"
|
||||||
#include "FileUtil.h"
|
#include "FileUtil.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
|
@ -286,10 +286,10 @@ bool CNANDContentLoader::Initialize(const std::string& _rName)
|
||||||
}
|
}
|
||||||
void CNANDContentLoader::AESDecode(u8* _pKey, u8* _IV, u8* _pSrc, u32 _Size, u8* _pDest)
|
void CNANDContentLoader::AESDecode(u8* _pKey, u8* _IV, u8* _pSrc, u32 _Size, u8* _pDest)
|
||||||
{
|
{
|
||||||
AES_KEY AESKey;
|
aes_context AES_ctx;
|
||||||
|
|
||||||
AES_set_decrypt_key(_pKey, 128, &AESKey);
|
aes_setkey_dec(&AES_ctx, _pKey, 128);
|
||||||
AES_cbc_encrypt(_pSrc, _pDest, _Size, &AESKey, _IV, AES_DECRYPT);
|
aes_crypt_cbc(&AES_ctx, AES_DECRYPT, _Size, _IV, _pSrc, _pDest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNANDContentLoader::GetKeyFromTicket(u8* pTicket, u8* pTicketKey)
|
void CNANDContentLoader::GetKeyFromTicket(u8* pTicket, u8* pTicketKey)
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "Crypto/aes.h"
|
#include <polarssl/aes.h>
|
||||||
|
|
||||||
#include "VolumeCreator.h"
|
#include "VolumeCreator.h"
|
||||||
|
|
||||||
|
@ -183,11 +183,11 @@ static IVolume* CreateVolumeFromCryptedWiiImage(IBlobReader& _rReader, u32 _Part
|
||||||
memset(IV, 0, 16);
|
memset(IV, 0, 16);
|
||||||
_rReader.Read(rPartition.Offset + 0x44c, 8, IV);
|
_rReader.Read(rPartition.Offset + 0x44c, 8, IV);
|
||||||
|
|
||||||
AES_KEY AES_KEY;
|
aes_context AES_ctx;
|
||||||
AES_set_decrypt_key((Korean ? g_MasterKeyK : g_MasterKey), 128, &AES_KEY);
|
aes_setkey_dec(&AES_ctx, (Korean ? g_MasterKeyK : g_MasterKey), 128);
|
||||||
|
|
||||||
u8 VolumeKey[16];
|
u8 VolumeKey[16];
|
||||||
AES_cbc_encrypt(SubKey, VolumeKey, 16, &AES_KEY, IV, AES_DECRYPT);
|
aes_crypt_cbc(&AES_ctx, AES_DECRYPT, 16, IV, SubKey, VolumeKey);
|
||||||
|
|
||||||
// -1 means the caller just wanted the partition with matching type
|
// -1 means the caller just wanted the partition with matching type
|
||||||
if ((int)_VolumeNum == -1 || i == _VolumeNum)
|
if ((int)_VolumeNum == -1 || i == _VolumeNum)
|
||||||
|
|
|
@ -18,7 +18,8 @@ CVolumeWiiCrypted::CVolumeWiiCrypted(IBlobReader* _pReader, u64 _VolumeOffset,
|
||||||
dataOffset(0x20000),
|
dataOffset(0x20000),
|
||||||
m_LastDecryptedBlockOffset(-1)
|
m_LastDecryptedBlockOffset(-1)
|
||||||
{
|
{
|
||||||
AES_set_decrypt_key(_pVolumeKey, 128, &m_AES_KEY);
|
m_AES_ctx = new aes_context;
|
||||||
|
aes_setkey_dec(m_AES_ctx, _pVolumeKey, 128);
|
||||||
m_pBuffer = new u8[0x8000];
|
m_pBuffer = new u8[0x8000];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +30,8 @@ CVolumeWiiCrypted::~CVolumeWiiCrypted()
|
||||||
m_pReader = NULL;
|
m_pReader = NULL;
|
||||||
delete[] m_pBuffer;
|
delete[] m_pBuffer;
|
||||||
m_pBuffer = NULL;
|
m_pBuffer = NULL;
|
||||||
|
delete m_AES_ctx;
|
||||||
|
m_AES_ctx = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CVolumeWiiCrypted::RAWRead( u64 _Offset, u64 _Length, u8* _pBuffer ) const
|
bool CVolumeWiiCrypted::RAWRead( u64 _Offset, u64 _Length, u8* _pBuffer ) const
|
||||||
|
@ -67,7 +70,7 @@ bool CVolumeWiiCrypted::Read(u64 _ReadOffset, u64 _Length, u8* _pBuffer) const
|
||||||
if (m_LastDecryptedBlockOffset != Block)
|
if (m_LastDecryptedBlockOffset != Block)
|
||||||
{
|
{
|
||||||
memcpy(IV, m_pBuffer + 0x3d0, 16);
|
memcpy(IV, m_pBuffer + 0x3d0, 16);
|
||||||
AES_cbc_encrypt(m_pBuffer + 0x400, m_LastDecryptedBlock, 0x7C00, &m_AES_KEY, IV, AES_DECRYPT);
|
aes_crypt_cbc(m_AES_ctx, AES_DECRYPT, 0x7C00, IV, m_pBuffer + 0x400, m_LastDecryptedBlock);
|
||||||
|
|
||||||
m_LastDecryptedBlockOffset = Block;
|
m_LastDecryptedBlockOffset = Block;
|
||||||
}
|
}
|
||||||
|
@ -250,7 +253,8 @@ bool CVolumeWiiCrypted::CheckIntegrity() const
|
||||||
NOTICE_LOG(DISCIO, "Integrity Check: fail at cluster %d: could not read metadata", clusterID);
|
NOTICE_LOG(DISCIO, "Integrity Check: fail at cluster %d: could not read metadata", clusterID);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
AES_cbc_encrypt(clusterMDCrypted, clusterMD, 0x400, &m_AES_KEY, IV, AES_DECRYPT);
|
aes_crypt_cbc(m_AES_ctx, AES_DECRYPT, 0x400, IV, clusterMDCrypted, clusterMD);
|
||||||
|
|
||||||
|
|
||||||
// Some clusters have invalid data and metadata because they aren't
|
// Some clusters have invalid data and metadata because they aren't
|
||||||
// meant to be read by the game (for example, holes between files). To
|
// meant to be read by the game (for example, holes between files). To
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
#include "Volume.h"
|
#include "Volume.h"
|
||||||
#include "Blob.h"
|
#include "Blob.h"
|
||||||
#include "Crypto/aes.h"
|
#include <polarssl/aes.h>
|
||||||
|
|
||||||
// --- this volume type is used for encrypted Wii images ---
|
// --- this volume type is used for encrypted Wii images ---
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ private:
|
||||||
IBlobReader* m_pReader;
|
IBlobReader* m_pReader;
|
||||||
|
|
||||||
u8* m_pBuffer;
|
u8* m_pBuffer;
|
||||||
AES_KEY m_AES_KEY;
|
aes_context* m_AES_ctx;
|
||||||
|
|
||||||
u64 m_VolumeOffset;
|
u64 m_VolumeOffset;
|
||||||
u64 dataOffset;
|
u64 dataOffset;
|
||||||
|
|
|
@ -78,7 +78,7 @@ CWiiSaveCrypted::CWiiSaveCrypted(const char* FileName, u64 TitleID)
|
||||||
|
|
||||||
if (!TitleID) // Import
|
if (!TitleID) // Import
|
||||||
{
|
{
|
||||||
AES_set_decrypt_key(SDKey, 128, &m_AES_KEY);
|
aes_setkey_dec(&m_AES_ctx, SDKey, 128);
|
||||||
b_valid = true;
|
b_valid = true;
|
||||||
ReadHDR();
|
ReadHDR();
|
||||||
ReadBKHDR();
|
ReadBKHDR();
|
||||||
|
@ -95,7 +95,7 @@ CWiiSaveCrypted::CWiiSaveCrypted(const char* FileName, u64 TitleID)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
AES_set_encrypt_key(SDKey, 128, &m_AES_KEY);
|
aes_setkey_enc(&m_AES_ctx, SDKey, 128);
|
||||||
|
|
||||||
if (getPaths(true))
|
if (getPaths(true))
|
||||||
{
|
{
|
||||||
|
@ -133,7 +133,7 @@ void CWiiSaveCrypted::ReadHDR()
|
||||||
}
|
}
|
||||||
fpData_bin.Close();
|
fpData_bin.Close();
|
||||||
|
|
||||||
AES_cbc_encrypt((const u8*)&_encryptedHeader, (u8*)&_header, HEADER_SZ, &m_AES_KEY, SD_IV, AES_DECRYPT);
|
aes_crypt_cbc(&m_AES_ctx, AES_DECRYPT, HEADER_SZ, SD_IV, (const u8*)&_encryptedHeader, (u8*)&_header);
|
||||||
u32 bannerSize = Common::swap32(_header.hdr.BannerSize);
|
u32 bannerSize = Common::swap32(_header.hdr.BannerSize);
|
||||||
if ((bannerSize < FULL_BNR_MIN) || (bannerSize > FULL_BNR_MAX) ||
|
if ((bannerSize < FULL_BNR_MIN) || (bannerSize > FULL_BNR_MAX) ||
|
||||||
(((bannerSize - BNR_SZ) % ICON_SZ) != 0))
|
(((bannerSize - BNR_SZ) % ICON_SZ) != 0))
|
||||||
|
@ -197,7 +197,7 @@ void CWiiSaveCrypted::WriteHDR()
|
||||||
md5((u8*)&_header, HEADER_SZ, md5_calc);
|
md5((u8*)&_header, HEADER_SZ, md5_calc);
|
||||||
memcpy(_header.hdr.Md5, md5_calc, 0x10);
|
memcpy(_header.hdr.Md5, md5_calc, 0x10);
|
||||||
|
|
||||||
AES_cbc_encrypt((const unsigned char *)&_header, (u8*)&_encryptedHeader, HEADER_SZ, &m_AES_KEY, SD_IV, AES_ENCRYPT);
|
aes_crypt_cbc(&m_AES_ctx, AES_ENCRYPT, HEADER_SZ, SD_IV, (const u8*)&_header, (u8*)&_encryptedHeader);
|
||||||
|
|
||||||
File::IOFile fpData_bin(encryptedSavePath, "wb");
|
File::IOFile fpData_bin(encryptedSavePath, "wb");
|
||||||
if (!fpData_bin.WriteBytes(&_encryptedHeader, HEADER_SZ))
|
if (!fpData_bin.WriteBytes(&_encryptedHeader, HEADER_SZ))
|
||||||
|
@ -332,7 +332,7 @@ void CWiiSaveCrypted::ImportWiiSaveFiles()
|
||||||
|
|
||||||
|
|
||||||
memcpy(IV, _tmpFileHDR.IV, 0x10);
|
memcpy(IV, _tmpFileHDR.IV, 0x10);
|
||||||
AES_cbc_encrypt((const unsigned char *)&_encryptedData[0], &_data[0], RoundedFileSize, &m_AES_KEY, IV, AES_DECRYPT);
|
aes_crypt_cbc(&m_AES_ctx, AES_DECRYPT, RoundedFileSize, IV, (const u8*)&_encryptedData[0], &_data[0]);
|
||||||
|
|
||||||
if (!File::Exists(fullFilePath) || AskYesNoT("%s already exists, overwrite?", fullFilePath.c_str()))
|
if (!File::Exists(fullFilePath) || AskYesNoT("%s already exists, overwrite?", fullFilePath.c_str()))
|
||||||
{
|
{
|
||||||
|
@ -421,7 +421,7 @@ void CWiiSaveCrypted::ExportWiiSaveFiles()
|
||||||
b_valid = false;
|
b_valid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
AES_cbc_encrypt((const u8*)&_data[0], &_encryptedData[0], _roundedfileSize, &m_AES_KEY, tmpFileHDR.IV, AES_ENCRYPT);
|
aes_crypt_cbc(&m_AES_ctx, AES_ENCRYPT, _roundedfileSize, tmpFileHDR.IV, (const u8*)&_data[0], &_encryptedData[0]);
|
||||||
|
|
||||||
File::IOFile fpData_bin(encryptedSavePath, "ab");
|
File::IOFile fpData_bin(encryptedSavePath, "ab");
|
||||||
if (!fpData_bin.WriteBytes(&_encryptedData[0], _roundedfileSize))
|
if (!fpData_bin.WriteBytes(&_encryptedData[0], _roundedfileSize))
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
#define _WII_SAVE_CRYPTED
|
#define _WII_SAVE_CRYPTED
|
||||||
|
|
||||||
#include "StringUtil.h"
|
#include "StringUtil.h"
|
||||||
#include "Crypto/aes.h"
|
|
||||||
#include "Crypto/tools.h"
|
#include "Crypto/tools.h"
|
||||||
|
#include <polarssl/aes.h>
|
||||||
#include "polarssl/md5.h"
|
#include "polarssl/md5.h"
|
||||||
|
|
||||||
// --- this is used for encrypted Wii save files
|
// --- this is used for encrypted Wii save files
|
||||||
|
@ -35,8 +35,7 @@ private:
|
||||||
bool getPaths(bool forExport = false);
|
bool getPaths(bool forExport = false);
|
||||||
void ScanForFiles(std::string savDir, std::vector<std::string>&FilesList, u32 *_numFiles, u32 *_sizeFiles);
|
void ScanForFiles(std::string savDir, std::vector<std::string>&FilesList, u32 *_numFiles, u32 *_sizeFiles);
|
||||||
|
|
||||||
|
aes_context m_AES_ctx;
|
||||||
AES_KEY m_AES_KEY;
|
|
||||||
u8 SD_IV[0x10];
|
u8 SD_IV[0x10];
|
||||||
std::vector<std::string> FilesList;
|
std::vector<std::string> FilesList;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue