summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Crypto/AES.cpp
blob: 5412969c7a8eb4ac010628b11674a3984a4def82 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Copyright 2017 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#include "Common/Crypto/AES.h"

#include <mbedtls/aes.h>

namespace Common::AES
{
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);

  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 Common::AES