GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: crypto/crypto_aes.h Lines: 1 3 33.3 %
Date: 2022-08-29 04:21:03 Branches: 0 0 - %

Line Branch Exec Source
1
#ifndef SRC_CRYPTO_CRYPTO_AES_H_
2
#define SRC_CRYPTO_CRYPTO_AES_H_
3
4
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
6
#include "crypto/crypto_cipher.h"
7
#include "crypto/crypto_keys.h"
8
#include "crypto/crypto_util.h"
9
#include "env.h"
10
#include "v8.h"
11
12
namespace node {
13
namespace crypto {
14
constexpr size_t kAesBlockSize = 16;
15
constexpr unsigned kNoAuthTagLength = static_cast<unsigned>(-1);
16
constexpr const char* kDefaultWrapIV = "\xa6\xa6\xa6\xa6\xa6\xa6\xa6\xa6";
17
18
#define VARIANTS(V)                                                           \
19
  V(CTR_128, AES_CTR_Cipher)                                                  \
20
  V(CTR_192, AES_CTR_Cipher)                                                  \
21
  V(CTR_256, AES_CTR_Cipher)                                                  \
22
  V(CBC_128, AES_Cipher)                                                      \
23
  V(CBC_192, AES_Cipher)                                                      \
24
  V(CBC_256, AES_Cipher)                                                      \
25
  V(GCM_128, AES_Cipher)                                                      \
26
  V(GCM_192, AES_Cipher)                                                      \
27
  V(GCM_256, AES_Cipher)                                                      \
28
  V(KW_128, AES_Cipher)                                                       \
29
  V(KW_192, AES_Cipher)                                                       \
30
  V(KW_256, AES_Cipher)
31
32
enum AESKeyVariant {
33
#define V(name, _) kKeyVariantAES_ ## name,
34
  VARIANTS(V)
35
#undef V
36
};
37
38
struct AESCipherConfig final : public MemoryRetainer {
39
  CryptoJobMode mode;
40
  AESKeyVariant variant;
41
  const EVP_CIPHER* cipher;
42
  size_t length;
43
  ByteSource iv;  // Used for both iv or counter
44
  ByteSource additional_data;
45
  ByteSource tag;  // Used only for authenticated modes (GCM)
46
47
1037
  AESCipherConfig() = default;
48
49
  AESCipherConfig(AESCipherConfig&& other) noexcept;
50
51
  AESCipherConfig& operator=(AESCipherConfig&& other) noexcept;
52
53
  void MemoryInfo(MemoryTracker* tracker) const override;
54
  SET_MEMORY_INFO_NAME(AESCipherConfig)
55
  SET_SELF_SIZE(AESCipherConfig)
56
};
57
58
struct AESCipherTraits final {
59
  static constexpr const char* JobName = "AESCipherJob";
60
61
  using AdditionalParameters = AESCipherConfig;
62
63
  static v8::Maybe<bool> AdditionalConfig(
64
      CryptoJobMode mode,
65
      const v8::FunctionCallbackInfo<v8::Value>& args,
66
      unsigned int offset,
67
      WebCryptoCipherMode cipher_mode,
68
      AESCipherConfig* config);
69
70
  static WebCryptoCipherStatus DoCipher(
71
      Environment* env,
72
      std::shared_ptr<KeyObjectData> key_data,
73
      WebCryptoCipherMode cipher_mode,
74
      const AESCipherConfig& params,
75
      const ByteSource& in,
76
      ByteSource* out);
77
};
78
79
using AESCryptoJob = CipherJob<AESCipherTraits>;
80
81
namespace AES {
82
void Initialize(Environment* env, v8::Local<v8::Object> target);
83
void RegisterExternalReferences(ExternalReferenceRegistry* registry);
84
}  // namespace AES
85
}  // namespace crypto
86
}  // namespace node
87
88
#endif  // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
89
#endif  // SRC_CRYPTO_CRYPTO_AES_H_