ndn-lite
ndn-lite-aes.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018-2019 Tianyuan Yu, Zhiyi Zhang
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v3.0. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
9 #ifndef NDN_SECURITY_AES_H_
10 #define NDN_SECURITY_AES_H_
11 
12 #include "../ndn-error-code.h"
13 #include "ndn-lite-sec-config.h"
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
23 
27 typedef uint32_t (*ndn_aes_get_key_size_impl)(const abstract_aes_key_t* aes_key);
28 typedef const uint8_t* (*ndn_aes_get_key_value_impl)(const abstract_aes_key_t* aes_key);
29 typedef int (*ndn_aes_load_key_impl)(abstract_aes_key_t* aes_key,
30  const uint8_t* key_value, uint32_t key_size);
31 typedef int (*ndn_aes_cbc_encrypt_impl)(const uint8_t* input_value, uint8_t input_size,
32  uint8_t* output_value, uint8_t output_size,
33  const uint8_t* aes_iv, const abstract_aes_key_t* aes_key);
34 typedef int (*ndn_aes_cbc_decrypt_impl)(const uint8_t* input_value, uint8_t input_size,
35  uint8_t* output_value, uint8_t output_size,
36  const uint8_t* aes_iv, const abstract_aes_key_t* aes_key);
37 typedef uint32_t (*ndn_aes_probe_padding_size_impl)(uint32_t plaintext_size);
38 typedef uint32_t (*ndn_aes_parse_unpadding_size_impl)(uint8_t* plaintext_value, uint32_t plaintext_size);
39 
43 typedef struct ndn_aes_backend {
52 
56 typedef struct ndn_aes_key {
61  uint32_t key_id;
63 
66 
71 uint32_t
72 ndn_aes_get_key_size(const ndn_aes_key_t* aes_key);
73 
78 const uint8_t*
79 ndn_aes_get_key_value(const ndn_aes_key_t* aes_key);
80 
87 int
89  const uint8_t* key_value, uint32_t key_size);
90 
99 static inline int
100 ndn_aes_key_init(ndn_aes_key_t* key, const uint8_t* key_value,
101  uint32_t key_size, uint32_t key_id)
102 {
103  ndn_aes_load_key(key, key_value, key_size);
104  key->key_id = key_id;
105  return 0;
106 }
107 
120 int
121 ndn_aes_cbc_encrypt(const uint8_t* input_value, uint8_t input_size,
122  uint8_t* output_value, uint8_t output_size,
123  const uint8_t* aes_iv, const ndn_aes_key_t* aes_key);
124 
137 int
138 ndn_aes_cbc_decrypt(const uint8_t* input_value, uint8_t input_size,
139  uint8_t* output_value, uint8_t output_size,
140  const uint8_t* aes_iv, const ndn_aes_key_t* aes_key);
141 
147 uint32_t
148 ndn_aes_probe_padding_size(uint32_t plaintext_size);
149 
157 uint32_t
158 ndn_aes_parse_unpadding_size(uint8_t* plaintext_value, uint32_t plaintext_size);
159 
160 #ifdef __cplusplus
161 }
162 #endif
163 
164 #endif // NDN_SECURITY_AES_H_
ndn_aes_get_key_value_impl get_key_value
Definition: ndn-lite-aes.h:45
const uint8_t *(* ndn_aes_get_key_value_impl)(const abstract_aes_key_t *aes_key)
Definition: ndn-lite-aes.h:28
ndn_aes_load_key_impl load_key
Definition: ndn-lite-aes.h:46
int ndn_aes_load_key(ndn_aes_key_t *aes_key, const uint8_t *key_value, uint32_t key_size)
Load in-memory key bits into an NDN aes key.
Definition: ndn-lite-aes.c:32
Definition: ndn-lite-default-aes-impl.h:14
static int ndn_aes_key_init(ndn_aes_key_t *key, const uint8_t *key_value, uint32_t key_size, uint32_t key_id)
Initialize an AES-128 key.
Definition: ndn-lite-aes.h:100
int ndn_aes_cbc_decrypt(const uint8_t *input_value, uint8_t input_size, uint8_t *output_value, uint8_t output_size, const uint8_t *aes_iv, const ndn_aes_key_t *aes_key)
Use AES-128-CBC algorithm to decrypt an encrypted buffer.
Definition: ndn-lite-aes.c:49
uint32_t key_size
The key size of key bytes.
Definition: ndn-lite-default-aes-impl.h:22
uint32_t ndn_aes_probe_padding_size(uint32_t plaintext_size)
Probe after padding size of plaintext.
Definition: ndn-lite-aes.c:59
uint32_t ndn_aes_get_key_size(const ndn_aes_key_t *aes_key)
Get aes key size in unit of byte.
Definition: ndn-lite-aes.c:20
int ndn_aes_cbc_encrypt(const uint8_t *input_value, uint8_t input_size, uint8_t *output_value, uint8_t output_size, const uint8_t *aes_iv, const ndn_aes_key_t *aes_key)
Use AES-128-CBC algorithm to encrypt a buffer.
Definition: ndn-lite-aes.c:39
ndn_aes_backend_t * ndn_aes_get_backend(void)
Definition: ndn-lite-aes.c:14
abstract_aes_key_t abs_key
Definition: ndn-lite-aes.h:57
The structure to keep an AES-128 key.
Definition: ndn-lite-aes.h:56
uint32_t(* ndn_aes_get_key_size_impl)(const abstract_aes_key_t *aes_key)
The APIs that are supposed to be implemented by the backend.
Definition: ndn-lite-aes.h:27
int(* ndn_aes_cbc_decrypt_impl)(const uint8_t *input_value, uint8_t input_size, uint8_t *output_value, uint8_t output_size, const uint8_t *aes_iv, const abstract_aes_key_t *aes_key)
Definition: ndn-lite-aes.h:34
struct ndn_aes_backend ndn_aes_backend_t
The structure to represent the backend implementation.
ndn_aes_cbc_decrypt_impl cbc_decrypt
Definition: ndn-lite-aes.h:48
uint8_t key_value[32]
The key bytes buffer of current key.
Definition: ndn-lite-default-aes-impl.h:18
The structure to represent the backend implementation.
Definition: ndn-lite-aes.h:43
uint32_t(* ndn_aes_probe_padding_size_impl)(uint32_t plaintext_size)
Definition: ndn-lite-aes.h:37
ndn_aes_cbc_encrypt_impl cbc_encrypt
Definition: ndn-lite-aes.h:47
struct ndn_aes_key ndn_aes_key_t
The structure to keep an AES-128 key.
ndn_aes_parse_unpadding_size_impl parse_unpadding_size
Definition: ndn-lite-aes.h:50
uint32_t key_id
The KEY ID of current key.
Definition: ndn-lite-aes.h:61
const uint8_t * ndn_aes_get_key_value(const ndn_aes_key_t *aes_key)
Get aes key bytes.
Definition: ndn-lite-aes.c:26
int(* ndn_aes_load_key_impl)(abstract_aes_key_t *aes_key, const uint8_t *key_value, uint32_t key_size)
Definition: ndn-lite-aes.h:29
int(* ndn_aes_cbc_encrypt_impl)(const uint8_t *input_value, uint8_t input_size, uint8_t *output_value, uint8_t output_size, const uint8_t *aes_iv, const abstract_aes_key_t *aes_key)
Definition: ndn-lite-aes.h:31
ndn_aes_probe_padding_size_impl probe_padding_size
Definition: ndn-lite-aes.h:49
ndn_aes_get_key_size_impl get_key_size
Definition: ndn-lite-aes.h:44
uint32_t ndn_aes_parse_unpadding_size(uint8_t *plaintext_value, uint32_t plaintext_size)
Parse the orginal plaintext size after stripping padding byte.
Definition: ndn-lite-aes.c:65
uint32_t(* ndn_aes_parse_unpadding_size_impl)(uint8_t *plaintext_value, uint32_t plaintext_size)
Definition: ndn-lite-aes.h:38