forked from trustwallet/wallet-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEncrypt.h
47 lines (38 loc) · 1.87 KB
/
Encrypt.h
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
36
37
38
39
40
41
42
43
44
45
46
47
// SPDX-License-Identifier: Apache-2.0
//
// Copyright © 2017 Trust Wallet.
#pragma once
#include <TrustWalletCore/TWAESPaddingMode.h>
#include "Data.h"
namespace TW::Encrypt {
/// Determined needed padding size (used internally)
size_t paddingSize(size_t origSize, size_t blockSize, TWAESPaddingMode paddingMode);
/// Encrypts a block of data using AES in Cipher Block Chaining (CBC) mode.
///
/// \param key encryption key, must be 16/24/32/128/192/256 bytes long.
/// \param data data to encrypt.
/// \param iv initialization vector.
/// \param paddingMode If PadWithZeroes (default), data is padded with 0's to even block size.
/// If PadWithPaddingSize, pad value is padding size, and even size input is padded with an extra block.
Data AESCBCEncrypt(const Data& key, const Data& data, Data& iv, TWAESPaddingMode paddingMode = TWAESPaddingModeZero);
/// Decrypts a block of data using AES in Cipher Block Chaining (CBC) mode.
///
/// \param key decryption key, must be 16, 24, or 32 bytes long.
/// \param data data to decrypt.
/// \param iv initialization vector.
/// \param paddingMode If PadWithZeroes (default), padding is not removed.
/// If PadWithPaddingSize, padding is removed.
Data AESCBCDecrypt(const Data& key, const Data& data, Data& iv, TWAESPaddingMode paddingMode = TWAESPaddingModeZero);
/// Encrypts a block of data using AES in Counter (CTR) mode.
///
/// \param key encryption key, must be 16, 24, or 32 bytes long.
/// \param data data to encrypt.
/// \param iv initialization vector.
Data AESCTREncrypt(const Data& key, const Data& data, Data& iv);
/// Decrypts a block of data using AES in Counter (CTR) mode.
///
/// \param key decryption key, must be 16, 24, or 32 bytes long.
/// \param data data to decrypt.
/// \param iv initialization vector.
Data AESCTRDecrypt(const Data& key, const Data& data, Data& iv);
} // namespace TW::Encrypt