first batch of license fixes (boring)
[oweals/gnunet.git] / src / include / gnunet_abe_lib.h
1 /*
2      This file is part of GNUnet.
3      Copyright (C) 2001-2018 GNUnet e.V.
4
5      GNUnet is free software: you can redistribute it and/or modify it
6      under the terms of the GNU General Public License as published
7      by the Free Software Foundation, either version 3 of the License,
8      or (at your option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      Affero General Public License for more details.
14 */
15
16 /**
17  * @file include/gnunet_abe_lib.h
18  * @brief Attribute-Based Encryption primitives for GNUnet
19  *
20  * @author Martin Schanzenbach
21  *
22  * @defgroup abe  ABE Crypto library: Attribute-Based Encryption operations
23  *
24  */
25 #ifndef GNUNET_ABE_LIB_H
26 #define GNUNET_ABE_LIB_H
27
28 #ifdef __cplusplus
29 extern "C"
30 {
31 #if 0                           /* keep Emacsens' auto-indent happy */
32 }
33 #endif
34 #endif
35
36 #include "gnunet_common.h"
37 #include <gcrypt.h>
38
39 /**
40  * @brief type for ABE master keys
41  */
42 struct GNUNET_CRYPTO_AbeMasterKey;
43
44 /**
45  * @brief type for ABE keys
46  */
47 struct GNUNET_CRYPTO_AbeKey;
48
49
50
51 /**
52  * @ingroup abe
53  * Create a new CP-ABE master key. Caller must free return value.
54  *
55  * @return fresh private key; free using #GNUNET_ABE_cpabe_delete_master_key
56  */
57 struct GNUNET_ABE_AbeMasterKey *
58 GNUNET_ABE_cpabe_create_master_key (void);
59
60 /**
61  * @ingroup abe
62  * Delete a CP-ABE master key.
63  *
64  * @param key the master key
65  * @return fresh private key; free using #GNUNET_free
66  */
67 void
68 GNUNET_ABE_cpabe_delete_master_key (struct GNUNET_ABE_AbeMasterKey *key);
69
70 /**
71  * @ingroup abe
72  * Create a new CP-ABE key. Caller must free return value.
73  *
74  * @param key the master key
75  * @param attrs the attributes to append to the key
76  * @return fresh private key; free using #GNUNET_ABE_cpabe_delete_key
77  */
78 struct GNUNET_ABE_AbeKey *
79 GNUNET_ABE_cpabe_create_key (struct GNUNET_ABE_AbeMasterKey *key,
80                                 char **attrs);
81
82 /**
83  * @ingroup abe
84  * Delete a CP-ABE key.
85  *
86  * @param key the key to delete
87  * @param delete_pub GNUNE_YES if the public key should also be freed (bug in gabe)
88  * @return fresh private key; free using #GNUNET_free
89  */
90 void
91 GNUNET_ABE_cpabe_delete_key (struct GNUNET_ABE_AbeKey *key,
92                                 int delete_pub);
93
94
95 /**
96  * @ingroup abe
97  * Encrypt a block using  sessionkey.
98  *
99  * @param block the block to encrypt
100  * @param size the size of the @a block
101  * @param policy the ABE policy
102  * @param key the key used to encrypt
103  * @param result the result buffer. Will be allocated. Free using #GNUNET_free
104  * @return the size of the encrypted block, -1 for errors
105  */
106 ssize_t
107 GNUNET_ABE_cpabe_encrypt (const void *block,
108                              size_t size,
109                              const char *policy,
110                              const struct GNUNET_ABE_AbeMasterKey *key,
111                              void **result);
112
113 /**
114  * @ingroup abe
115  * Decrypt a block using the ABE key.
116  *
117  * @param block the block to encrypt
118  * @param size the size of the @a block
119  * @param key the key used to decrypt
120  * @param result the result buffer. Will be allocated. Free using #GNUNET_free
121  * @return the size of the encrypted block, -1 for errors
122  */
123 ssize_t
124 GNUNET_ABE_cpabe_decrypt (const void *block,
125                              size_t size,
126                              const struct GNUNET_ABE_AbeKey *key,
127                              void **result);
128
129 /**
130  * @ingroup abe
131  * Serialize an ABE key.
132  *
133  * @param key the key to serialize
134  * @param result the result buffer. Will be allocated. Free using #GNUNET_free
135  * @return the size of the encrypted block, -1 for errors
136  */
137 ssize_t
138 GNUNET_ABE_cpabe_serialize_key (const struct GNUNET_ABE_AbeKey *key,
139                                    void **result);
140
141 /**
142  * @ingroup abe
143  * Deserialize a serialized ABE key.
144  *
145  * @param data the data to deserialize
146  * @param len the length of the data.
147  * @return the ABE key. NULL of unsuccessful
148  */
149 struct GNUNET_ABE_AbeKey*
150 GNUNET_ABE_cpabe_deserialize_key (const void *data,
151                                      size_t len);
152
153 /**
154  * @ingroup abe
155  * Serialize an ABE master key.
156  *
157  * @param key the key to serialize
158  * @param result the result buffer. Will be allocated. Free using #GNUNET_free
159  * @return the size of the encrypted block, -1 for errors
160  */
161 ssize_t
162 GNUNET_ABE_cpabe_serialize_master_key (const struct GNUNET_ABE_AbeMasterKey *key,
163                                           void **result);
164
165 /**
166  * @ingroup abe
167  * Deserialize an ABE master key.
168  *
169  * @param data the data to deserialize
170  * @param len the length of the data.
171  * @return the ABE key. NULL of unsuccessful
172  */
173 struct GNUNET_ABE_AbeMasterKey*
174 GNUNET_ABE_cpabe_deserialize_master_key (const void *data,
175                                             size_t len);
176
177
178 #if 0                           /* keep Emacsens' auto-indent happy */
179 {
180 #endif
181 #ifdef __cplusplus
182 }
183 #endif
184
185
186 /* ifndef GNUNET_ABE_LIB_H */
187 #endif
188 /* end of gnunet_abe_lib.h */