summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Crypto/AES.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@innovatetechnologi.es>2017-05-01 17:50:12 +0200
committerLéo Lam <leo@innovatetechnologi.es>2017-05-02 23:49:22 +0200
commitf8fb9e2d034d122c72515083f75e2034abf6210d (patch)
tree011ff89b316a245dd6e0ec1747c54f4bfc2b593c /Source/Core/Common/Crypto/AES.cpp
parente01624f64bc7c1aa1fa5f70f7ef1f96de5b7778f (diff)
IOS: Implement IOSC-like API
This prevents the IOS crypto code and keys from being spread over the codebase. Things only have to be implemented once, and can be used everywhere from the IOS code. Additionally, since ES exposes some IOSC calls directly (DeleteObject and Encrypt/Decrypt), we need this for proper emulation. Currently, this only supports AES key objects.
Diffstat (limited to 'Source/Core/Common/Crypto/AES.cpp')
-rw-r--r--Source/Core/Common/Crypto/AES.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/Source/Core/Common/Crypto/AES.cpp b/Source/Core/Common/Crypto/AES.cpp
index e12ba2481c..00685beba4 100644
--- a/Source/Core/Common/Crypto/AES.cpp
+++ b/Source/Core/Common/Crypto/AES.cpp
@@ -10,15 +10,30 @@ namespace Common
{
namespace AES
{
-std::vector<u8> Decrypt(const u8* key, u8* iv, const u8* src, size_t size)
+std::vector<u8> DecryptEncrypt(const u8* key, u8* iv, const u8* src, size_t size, Mode mode)
{
mbedtls_aes_context aes_ctx;
std::vector<u8> buffer(size);
- mbedtls_aes_setkey_dec(&aes_ctx, key, 128);
- mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_DECRYPT, size, iv, src, buffer.data());
+ if (mode == Mode::Encrypt)
+ mbedtls_aes_setkey_enc(&aes_ctx, key, 128);
+ else
+ mbedtls_aes_setkey_dec(&aes_ctx, key, 128);
+
+ mbedtls_aes_crypt_cbc(&aes_ctx, mode == Mode::Encrypt ? MBEDTLS_AES_ENCRYPT : MBEDTLS_AES_DECRYPT,
+ size, iv, src, buffer.data());
return buffer;
}
+
+std::vector<u8> Decrypt(const u8* key, u8* iv, const u8* src, size_t size)
+{
+ return DecryptEncrypt(key, iv, src, size, Mode::Decrypt);
+}
+
+std::vector<u8> Encrypt(const u8* key, u8* iv, const u8* src, size_t size)
+{
+ return DecryptEncrypt(key, iv, src, size, Mode::Encrypt);
+}
} // namespace AES
} // namespace Common