gsec.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2018 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #ifndef GRPC_CORE_TSI_ALTS_CRYPT_GSEC_H
20 #define GRPC_CORE_TSI_ALTS_CRYPT_GSEC_H
21 
23 
24 #include <assert.h>
25 #include <stdint.h>
26 #include <stdlib.h>
27 
28 #include <grpc/event_engine/port.h>
29 #include <grpc/grpc.h>
30 
31 #ifndef _STRUCT_IOVEC
32 #if !defined(GRPC_EVENT_ENGINE_POSIX)
33 struct iovec {
34  void* iov_base;
35  size_t iov_len;
36 };
37 #endif // GRPC_EVENT_ENGINE_POSIX
38 #endif // _STRUCT_IOVEC
39 
46 /* Key, nonce, and tag length in bytes */
47 const size_t kAesGcmNonceLength = 12;
48 const size_t kAesGcmTagLength = 16;
49 const size_t kAes128GcmKeyLength = 16;
50 const size_t kAes256GcmKeyLength = 32;
51 
52 // The first 32 bytes are used as a KDF key and the remaining 12 bytes are used
53 // to mask the nonce.
54 const size_t kAes128GcmRekeyKeyLength = 44;
55 
57 
145 /* V-table for gsec AEAD operations */
146 typedef struct gsec_aead_crypter_vtable {
148  gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
149  const struct iovec* aad_vec, size_t aad_vec_length,
150  const struct iovec* plaintext_vec, size_t plaintext_vec_length,
151  struct iovec ciphertext_vec, size_t* ciphertext_bytes_written,
152  char** error_details);
154  gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
155  const struct iovec* aad_vec, size_t aad_vec_length,
156  const struct iovec* ciphertext_vec, size_t ciphertext_vec_length,
157  struct iovec plaintext_vec, size_t* plaintext_bytes_written,
158  char** error_details);
160  const gsec_aead_crypter* crypter, size_t plaintext_length,
161  size_t* max_ciphertext_and_tag_length_to_return, char** error_details);
163  const gsec_aead_crypter* crypter, size_t ciphertext_and_tag_length,
164  size_t* max_plaintext_length_to_return, char** error_details);
166  size_t* nonce_length_to_return,
167  char** error_details);
169  size_t* key_length_to_return,
170  char** error_details);
172  size_t* tag_length_to_return,
173  char** error_details);
174  void (*destruct)(gsec_aead_crypter* crypter);
176 
177 /* Main struct for gsec interface */
180 };
181 
216  gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
217  const uint8_t* aad, size_t aad_length, const uint8_t* plaintext,
218  size_t plaintext_length, uint8_t* ciphertext_and_tag,
219  size_t ciphertext_and_tag_length, size_t* bytes_written,
220  char** error_details);
221 
249  gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
250  const struct iovec* aad_vec, size_t aad_vec_length,
251  const struct iovec* plaintext_vec, size_t plaintext_vec_length,
252  struct iovec ciphertext_vec, size_t* ciphertext_bytes_written,
253  char** error_details);
254 
287  gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
288  const uint8_t* aad, size_t aad_length, const uint8_t* ciphertext_and_tag,
289  size_t ciphertext_and_tag_length, uint8_t* plaintext,
290  size_t plaintext_length, size_t* bytes_written, char** error_details);
291 
317  gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
318  const struct iovec* aad_vec, size_t aad_vec_length,
319  const struct iovec* ciphertext_vec, size_t ciphertext_vec_length,
320  struct iovec plaintext_vec, size_t* plaintext_bytes_written,
321  char** error_details);
322 
342  const gsec_aead_crypter* crypter, size_t plaintext_length,
343  size_t* max_ciphertext_and_tag_length_to_return, char** error_details);
344 
364  const gsec_aead_crypter* crypter, size_t ciphertext_and_tag_length,
365  size_t* max_plaintext_length_to_return, char** error_details);
366 
383  const gsec_aead_crypter* crypter, size_t* nonce_length_to_return,
384  char** error_details);
385 
402  size_t* key_length_to_return,
403  char** error_details);
420  size_t* tag_length_to_return,
421  char** error_details);
422 
430 
453  size_t key_length,
454  size_t nonce_length,
455  size_t tag_length, bool rekey,
456  gsec_aead_crypter** crypter,
457  char** error_details);
458 
459 #endif /* GRPC_CORE_TSI_ALTS_CRYPT_GSEC_H */
gsec_aead_crypter_vtable::decrypt_iovec
grpc_status_code(* decrypt_iovec)(gsec_aead_crypter *crypter, const uint8_t *nonce, size_t nonce_length, const struct iovec *aad_vec, size_t aad_vec_length, const struct iovec *ciphertext_vec, size_t ciphertext_vec_length, struct iovec plaintext_vec, size_t *plaintext_bytes_written, char **error_details)
Definition: gsec.h:153
gsec_aead_crypter_vtable::max_ciphertext_and_tag_length
grpc_status_code(* max_ciphertext_and_tag_length)(const gsec_aead_crypter *crypter, size_t plaintext_length, size_t *max_ciphertext_and_tag_length_to_return, char **error_details)
Definition: gsec.h:159
gsec_aead_crypter_vtable::tag_length
grpc_status_code(* tag_length)(const gsec_aead_crypter *crypter, size_t *tag_length_to_return, char **error_details)
Definition: gsec.h:171
gsec_aead_crypter_vtable::max_plaintext_length
grpc_status_code(* max_plaintext_length)(const gsec_aead_crypter *crypter, size_t ciphertext_and_tag_length, size_t *max_plaintext_length_to_return, char **error_details)
Definition: gsec.h:162
gsec_aead_crypter_vtable
Definition: gsec.h:146
gsec_aead_crypter_vtable::destruct
void(* destruct)(gsec_aead_crypter *crypter)
Definition: gsec.h:174
gsec_aead_crypter_vtable::nonce_length
grpc_status_code(* nonce_length)(const gsec_aead_crypter *crypter, size_t *nonce_length_to_return, char **error_details)
Definition: gsec.h:165
kAes256GcmKeyLength
const size_t kAes256GcmKeyLength
Definition: gsec.h:50
grpc_status_code
grpc_status_code
Definition: include/grpc/impl/codegen/status.h:28
gsec_aead_crypter_decrypt_iovec
grpc_status_code gsec_aead_crypter_decrypt_iovec(gsec_aead_crypter *crypter, const uint8_t *nonce, size_t nonce_length, const struct iovec *aad_vec, size_t aad_vec_length, const struct iovec *ciphertext_vec, size_t ciphertext_vec_length, struct iovec plaintext_vec, size_t *plaintext_bytes_written, char **error_details)
Definition: gsec.cc:98
gsec_aead_crypter_key_length
grpc_status_code gsec_aead_crypter_key_length(const gsec_aead_crypter *crypter, size_t *key_length_to_return, char **error_details)
Definition: gsec.cc:157
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
gsec_aead_crypter_vtable
struct gsec_aead_crypter_vtable gsec_aead_crypter_vtable
port.h
kAesGcmNonceLength
const size_t kAesGcmNonceLength
Definition: gsec.h:47
gsec_aead_crypter_encrypt_iovec
grpc_status_code gsec_aead_crypter_encrypt_iovec(gsec_aead_crypter *crypter, const uint8_t *nonce, size_t nonce_length, const struct iovec *aad_vec, size_t aad_vec_length, const struct iovec *plaintext_vec, size_t plaintext_vec_length, struct iovec ciphertext_vec, size_t *ciphertext_bytes_written, char **error_details)
Definition: gsec.cc:60
kAes128GcmRekeyKeyLength
const size_t kAes128GcmRekeyKeyLength
Definition: gsec.h:54
gsec_aead_crypter_vtable::key_length
grpc_status_code(* key_length)(const gsec_aead_crypter *crypter, size_t *key_length_to_return, char **error_details)
Definition: gsec.h:168
gsec_aead_crypter_max_ciphertext_and_tag_length
grpc_status_code gsec_aead_crypter_max_ciphertext_and_tag_length(const gsec_aead_crypter *crypter, size_t plaintext_length, size_t *max_ciphertext_and_tag_length_to_return, char **error_details)
Definition: gsec.cc:116
grpc.h
gsec_aead_crypter_decrypt
grpc_status_code gsec_aead_crypter_decrypt(gsec_aead_crypter *crypter, const uint8_t *nonce, size_t nonce_length, const uint8_t *aad, size_t aad_length, const uint8_t *ciphertext_and_tag, size_t ciphertext_and_tag_length, uint8_t *plaintext, size_t plaintext_length, size_t *bytes_written, char **error_details)
Definition: gsec.cc:78
gsec_aead_crypter_destroy
void gsec_aead_crypter_destroy(gsec_aead_crypter *crypter)
Definition: gsec.cc:183
stdint.h
iovec
Definition: gsec.h:33
key
const char * key
Definition: hpack_parser_table.cc:164
gsec_aes_gcm_aead_crypter_create
grpc_status_code gsec_aes_gcm_aead_crypter_create(const uint8_t *key, size_t key_length, size_t nonce_length, size_t tag_length, bool rekey, gsec_aead_crypter **crypter, char **error_details)
Definition: aes_gcm.cc:633
gsec_aead_crypter_max_plaintext_length
grpc_status_code gsec_aead_crypter_max_plaintext_length(const gsec_aead_crypter *crypter, size_t ciphertext_and_tag_length, size_t *max_plaintext_length_to_return, char **error_details)
Definition: gsec.cc:130
iovec::iov_len
size_t iov_len
Definition: gsec.h:35
gsec_aead_crypter::vtable
const struct gsec_aead_crypter_vtable * vtable
Definition: gsec.h:179
gsec_aead_crypter_nonce_length
grpc_status_code gsec_aead_crypter_nonce_length(const gsec_aead_crypter *crypter, size_t *nonce_length_to_return, char **error_details)
Definition: gsec.cc:144
gsec_aead_crypter
Definition: gsec.h:178
plaintext
const char * plaintext
Definition: bloaty/third_party/protobuf/src/google/protobuf/stubs/strutil_unittest.cc:85
bytes_written
static size_t bytes_written
Definition: test-ipc-heavy-traffic-deadlock-bug.c:46
iovec::iov_base
void * iov_base
Definition: gsec.h:34
gsec_aead_crypter_vtable::encrypt_iovec
grpc_status_code(* encrypt_iovec)(gsec_aead_crypter *crypter, const uint8_t *nonce, size_t nonce_length, const struct iovec *aad_vec, size_t aad_vec_length, const struct iovec *plaintext_vec, size_t plaintext_vec_length, struct iovec ciphertext_vec, size_t *ciphertext_bytes_written, char **error_details)
Definition: gsec.h:147
kAes128GcmKeyLength
const size_t kAes128GcmKeyLength
Definition: gsec.h:49
gsec_aead_crypter_tag_length
grpc_status_code gsec_aead_crypter_tag_length(const gsec_aead_crypter *crypter, size_t *tag_length_to_return, char **error_details)
Definition: gsec.cc:170
gsec_aead_crypter_encrypt
grpc_status_code gsec_aead_crypter_encrypt(gsec_aead_crypter *crypter, const uint8_t *nonce, size_t nonce_length, const uint8_t *aad, size_t aad_length, const uint8_t *plaintext, size_t plaintext_length, uint8_t *ciphertext_and_tag, size_t ciphertext_and_tag_length, size_t *bytes_written, char **error_details)
Definition: gsec.cc:38
kAesGcmTagLength
const size_t kAesGcmTagLength
Definition: gsec.h:48
port_platform.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:59:48