Couchbase C Client  2.9.0
Asynchronous C Client for Couchbase
crypto.h
Go to the documentation of this file.
1 /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  * Copyright 2018 Couchbase, Inc.
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 #ifndef LCB_CRYPTO_H
19 #define LCB_CRYPTO_H
20 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
51 typedef struct lcbcrypto_SIGV {
52  const uint8_t *data;
53  size_t len;
55 
56 struct lcbcrypto_PROVIDER;
67 typedef struct lcbcrypto_PROVIDER {
68  uint16_t version;
69  int16_t _refcnt;
70  uint64_t flags;
71  void *cookie;
72  void (*destructor)(struct lcbcrypto_PROVIDER *provider);
73  union {
74  LCB_DEPRECATED2(
75  struct {
76  void (*release_bytes)(struct lcbcrypto_PROVIDER * provider, void *bytes);
77  lcb_error_t (*load_key)(struct lcbcrypto_PROVIDER * provider, lcbcrypto_KEYTYPE type, const char *keyid,
78  uint8_t **key, size_t *key_len);
79  lcb_error_t (*generate_iv)(struct lcbcrypto_PROVIDER * provider, uint8_t * *iv, size_t * iv_len);
80  lcb_error_t (*sign)(struct lcbcrypto_PROVIDER * provider, const lcbcrypto_SIGV *inputs,
81  size_t input_num, uint8_t **sig, size_t *sig_len);
82  lcb_error_t (*verify_signature)(struct lcbcrypto_PROVIDER * provider, const lcbcrypto_SIGV *inputs,
83  size_t input_num, uint8_t *sig, size_t sig_len);
84  lcb_error_t (*encrypt)(struct lcbcrypto_PROVIDER * provider, const uint8_t *input, size_t input_len,
85  const uint8_t *key, size_t key_len, const uint8_t *iv, size_t iv_len,
86  uint8_t **output, size_t *output_len);
87  lcb_error_t (*decrypt)(struct lcbcrypto_PROVIDER * provider, const uint8_t *input, size_t input_len,
88  const uint8_t *key, size_t key_len, const uint8_t *iv, size_t iv_len,
89  uint8_t **output, size_t *output_len);
90  } v0,
91  "v0 crypto API has been deprecated, use v1");
92  struct {
94  void (*release_bytes)(struct lcbcrypto_PROVIDER *provider, void *bytes);
96  lcb_error_t (*generate_iv)(struct lcbcrypto_PROVIDER *provider, uint8_t **iv, size_t *iv_len);
98  lcb_error_t (*sign)(struct lcbcrypto_PROVIDER *provider, const lcbcrypto_SIGV *inputs, size_t input_num,
99  uint8_t **sig, size_t *sig_len);
101  lcb_error_t (*verify_signature)(struct lcbcrypto_PROVIDER *provider, const lcbcrypto_SIGV *inputs,
102  size_t input_num, uint8_t *sig, size_t sig_len);
104  lcb_error_t (*encrypt)(struct lcbcrypto_PROVIDER *provider, const uint8_t *input, size_t input_len,
105  const uint8_t *iv, size_t iv_len, uint8_t **output, size_t *output_len);
107  lcb_error_t (*decrypt)(struct lcbcrypto_PROVIDER *provider, const uint8_t *input, size_t input_len,
108  const uint8_t *iv, size_t iv_len, uint8_t **output, size_t *output_len);
110  const char *(*get_key_id)(struct lcbcrypto_PROVIDER *provider);
111  } v1;
112  } v;
114 
123 typedef struct lcbcrypto_FIELDSPEC {
124  const char *name;
125  const char *alg;
126  LCB_DEPRECATED2(const char *kid,
127  "Do not use kid field. Encryption keys have to be part of the provider implementation");
136 typedef struct lcbcrypto_CMDENCRYPT {
137  uint16_t version;
138  const char *prefix;
139  const char *doc;
140  size_t ndoc;
141  char *out;
142  size_t nout;
144  size_t nfields;
153 typedef struct lcbcrypto_CMDDECRYPT {
154  uint16_t version;
155  const char *prefix;
156  const char *doc;
157  size_t ndoc;
158  char *out;
159  size_t nout;
161  size_t nfields;
188 LIBCOUCHBASE_API void lcbcrypto_register(lcb_t instance, const char *name, lcbcrypto_PROVIDER *provider);
189 
198 LIBCOUCHBASE_API void lcbcrypto_unregister(lcb_t instance, const char *name);
199 
205 LIBCOUCHBASE_API void lcbcrypto_ref(lcbcrypto_PROVIDER *provider);
206 
214 LIBCOUCHBASE_API void lcbcrypto_unref(lcbcrypto_PROVIDER *provider);
215 
219 #define LCBCRYPTO_DEFAULT_FIELD_PREFIX "__crypt_"
220 
253 LIBCOUCHBASE_API lcb_error_t lcbcrypto_encrypt_fields(lcb_t instance, lcbcrypto_CMDENCRYPT *cmd);
254 
293 LIBCOUCHBASE_API lcb_error_t lcbcrypto_decrypt_fields(lcb_t instance, lcbcrypto_CMDDECRYPT *cmd);
297 LCB_DEPR_API2(lcb_error_t lcbcrypto_encrypt_document(lcb_t instance, lcbcrypto_CMDENCRYPT *cmd),
298  "Use lcbcrypto_encrypt_fields");
300 LCB_DEPR_API2(lcb_error_t lcbcrypto_decrypt_document(lcb_t instance, lcbcrypto_CMDDECRYPT *cmd),
301  "Use lcbcrypto_decrypt_fields");
302 
303 #ifdef __cplusplus
304 }
305 #endif
306 #endif /* LCB_CRYPTO_H */
const char * doc
pointer to the input JSON document
Definition: crypto.h:144
Structure for JSON field specification for encrypt/decrypt API.
Definition: crypto.h:127
Command to decrypt JSON fields.
Definition: crypto.h:159
uint64_t flags
provider-specific flags
Definition: crypto.h:73
LCB_DEPR_API2(lcb_error_t lcbcrypto_encrypt_document(lcb_t instance, lcbcrypto_CMDENCRYPT *cmd), "Use lcbcrypto_encrypt_fields")
size_t len
length of the data in bytes
Definition: crypto.h:55
lcbcrypto_KEYTYPE
Definition: deprecated.h:300
void(* destructor)(struct lcbcrypto_PROVIDER *provider)
destructor function, or NULL
Definition: crypto.h:75
void lcbcrypto_ref(lcbcrypto_PROVIDER *provider)
Increment reference counter for crypto-provider.
Command to encrypt JSON fields.
Definition: crypto.h:141
uint16_t version
version of the structure, current value is 1
Definition: crypto.h:71
lcbcrypto_FIELDSPEC * fields
list of field specs
Definition: crypto.h:148
size_t nfields
number of field specs
Definition: crypto.h:149
void lcbcrypto_register(lcb_t instance, const char *name, lcbcrypto_PROVIDER *provider)
Register crypto-provider for specified alias.
const uint8_t * data
pointer to data
Definition: crypto.h:54
const char * alg
crypto provider alias (NUL-terminated)
Definition: crypto.h:129
lcb_error_t lcbcrypto_encrypt_fields(lcb_t instance, lcbcrypto_CMDENCRYPT *cmd)
Encrypt all specified fields in the JSON encoded object.
void lcbcrypto_unregister(lcb_t instance, const char *name)
Unregister crypto-provider for specified alias.
struct lcb_st * lcb_t
Library handle representing a connection to a cluster and its data buckets.
Definition: couchbase.h:41
lcb_error_t
Error codes returned by the library.
Definition: error.h:580
int16_t _refcnt
reference counter
Definition: crypto.h:72
Crypto-provider interface.
Definition: crypto.h:70
void * cookie
opaque pointer (e.g.
Definition: crypto.h:74
size_t ndoc
size of the input JSON document
Definition: crypto.h:145
const char * prefix
prefix to encrypted field.
Definition: crypto.h:143
IOV-style structure for signing functions of crypto-provider.
Definition: crypto.h:53
lcb_error_t lcbcrypto_decrypt_fields(lcb_t instance, lcbcrypto_CMDDECRYPT *cmd)
Decrypt all specified fields in the JSON encoded object.
const char * name
field name (NUL-terminated)
Definition: crypto.h:128
char * out
pointer to output JSON document.
Definition: crypto.h:146
size_t nout
size of the output JSON document
Definition: crypto.h:147
void lcbcrypto_unref(lcbcrypto_PROVIDER *provider)
Decrement reference counter for crypto-provider.