GNUnet  0.11.x
gnunet_abd_service.h
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet
3  Copyright (C) 2012-2014 GNUnet e.V.
4 
5  GNUnet is free software: you can redistribute it and/or modify it
6  under the terms of the GNU Affero 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  You should have received a copy of the GNU Affero General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 
18  SPDX-License-Identifier: AGPL3.0-or-later
19  */
20 
32 #ifndef GNUNET_ABD_SERVICE_H
33 #define GNUNET_ABD_SERVICE_H
34 
35 #include "gnunet_util_lib.h"
36 #include "gnunet_gns_service.h"
38 
39 #ifdef __cplusplus
40 extern "C"
41 {
42 #if 0 /* keep Emacsens' auto-indent happy */
43 }
44 #endif
45 #endif
46 
47 
51 struct GNUNET_ABD_Handle;
52 
56 struct GNUNET_ABD_Request;
57 
58 /*
59 * Enum used for checking whether the issuer has the authority to issue credentials or is just a subject
60 */
62 {
63 
64  // Subject had credentials before, but have been revoked now
66 
67  // Subject flag indicates that the subject is a holder of this credential and may present it as such
69 
70  // Issuer flag is used to signify that the subject is allowed to issue this credential and delegate issuance
72 
73 };
74 
80 {
81 
85  uint32_t set_count;
86 
90  uint64_t data_size;
95 };
96 
101 {
102 
106  struct GNUNET_CRYPTO_EcdsaPublicKey subject_key;
107 
112 };
113 
114 
116 
121 {
122 
126  struct GNUNET_CRYPTO_EcdsaPublicKey subject_key;
127 
129 
133  const char *subject_attribute;
134 };
135 
136 
141 {
142 
147 
151  struct GNUNET_CRYPTO_EcdsaPublicKey subject_key;
152 
157 
161  const char *issuer_attribute;
162 
167 
171  const char *subject_attribute;
172 };
173 
174 
179 {
180 
185 
189  struct GNUNET_CRYPTO_EcdsaPublicKey subject_key;
190 
195 
200 
205 
209  const char *issuer_attribute;
210 
215 
219  const char *subject_attribute;
220 
221 };
222 
223 /*
224 * Enum used for checking whether the issuer has the authority to issue credentials or is just a subject
225 */
227 {
228 
229  // Subject had credentials before, but have been revoked now
231 
232  // Subject flag indicates that the subject is a holder of this credential and may present it as such
234 
235 };
236 
243 struct GNUNET_ABD_Handle *
245 
246 
252 void
254 
255 
265 typedef void (*GNUNET_ABD_CredentialResultProcessor) (void *cls,
266  unsigned int d_count,
267  struct
269  delegation_chain,
270  unsigned int c_count,
271  struct GNUNET_ABD_Delegate
272  *delegte);
273 
274 typedef void (*GNUNET_ABD_IntermediateResultProcessor) (void *cls,
275  struct
277  delegation,
278  bool is_bw);
279 
287 typedef void (*GNUNET_ABD_DelegateResultProcessor) (void *cls,
288  uint32_t success);
289 
297 typedef void (*GNUNET_ABD_RemoveDelegateResultProcessor) (void *cls,
298  uint32_t success);
299 
300 
319 struct GNUNET_ABD_Request*
322  const char *issuer_attribute,
323  const struct GNUNET_CRYPTO_EcdsaPublicKey *subject_key,
324  uint32_t delegate_count,
325  const struct GNUNET_ABD_Delegate *delegates,
328  void *proc_cls,
330  void *proc2_cls);
331 
332 struct GNUNET_ABD_Request*
335  const char *issuer_attribute,
336  const struct GNUNET_CRYPTO_EcdsaPrivateKey *subject_key,
339  void *proc_cls,
341  void *proc2_cls);
342 
355 struct GNUNET_ABD_Request *
357  struct GNUNET_IDENTITY_Ego *issuer,
358  const char *attribute,
360  const char *delegated_attribute,
362  void *proc_cls);
363 
374 struct GNUNET_ABD_Request *
376  struct GNUNET_IDENTITY_Ego *issuer,
377  const char *attribute,
379  void *proc_cls);
380 
381 
391 struct GNUNET_ABD_Delegate*
394  const char *iss_attr,
395  const char *sub_attr,
397 
398 
404 void
406 
407 
408 #if 0 /* keep Emacsens' auto-indent happy */
409 {
410 #endif
411 #ifdef __cplusplus
412 }
413 #endif
414 
415 #endif
416  /* end of group */
struct GNUNET_ABD_Handle * GNUNET_ABD_connect(const struct GNUNET_CONFIGURATION_Handle *cfg)
Initialize the connection with the Credential service.
Definition: abd_api.c:355
static const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration we are using.
Definition: gnunet-abd.c:36
static struct GNUNET_GNS_LookupWithTldRequest * lr
Handle to lookup request.
Definition: gnunet-gns.c:99
uint32_t issuer_attribute_len
Length of the attribute.
uint32_t subject_attribute_len
Length of attribute, may be 0.
void(* GNUNET_ABD_IntermediateResultProcessor)(void *cls, struct GNUNET_ABD_Delegation *delegation, bool is_bw)
void * proc2_cls
verify_proc2 closure
Definition: abd_api.c:79
GNUNET_ABD_AlgoDirectionFlags
struct GNUNET_ABD_Delegate * GNUNET_ABD_delegate_issue(const struct GNUNET_CRYPTO_EcdsaPrivateKey *issuer, struct GNUNET_CRYPTO_EcdsaPublicKey *subject, const char *iss_attr, const char *sub_attr, struct GNUNET_TIME_Absolute *expiration)
Issue an attribute to a subject.
The attribute delegation record.
struct GNUNET_ABD_Request * GNUNET_ABD_collect(struct GNUNET_ABD_Handle *handle, const struct GNUNET_CRYPTO_EcdsaPublicKey *issuer_key, const char *issuer_attribute, const struct GNUNET_CRYPTO_EcdsaPrivateKey *subject_key, enum GNUNET_ABD_AlgoDirectionFlags direction, GNUNET_ABD_CredentialResultProcessor proc, void *proc_cls, GNUNET_ABD_IntermediateResultProcessor, void *proc2_cls)
Performs attribute collection.
Definition: abd_api.c:424
Private ECC key encoded for transmission.
Handle to a verify request.
Definition: abd_api.c:43
void * proc_cls
verify_proc closure
Definition: abd_api.c:69
#define GNUNET_NETWORK_STRUCT_BEGIN
Define as empty, GNUNET_PACKED should suffice, but this won&#39;t work on W32.
enum GNUNET_ABD_AlgoDirectionFlags direction
API enum, filled and passed for collect/verify.
Definition: gnunet-abd.c:172
void(* GNUNET_ABD_DelegateResultProcessor)(void *cls, uint32_t success)
Iterator called on obtained result for an attribute delegation.
void(* GNUNET_ABD_CredentialResultProcessor)(void *cls, unsigned int d_count, struct GNUNET_ABD_Delegation *delegation_chain, unsigned int c_count, struct GNUNET_ABD_Delegate *delegte)
Iterator called on obtained result for an attribute verification.
Handle for an ego.
Definition: identity.h:245
uint32_t subject_attribute_len
Length of the subject attribute.
an ECC signature using ECDSA
uint64_t data_size
Length of delegation sets.
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
const char * subject_attribute
The subject attribute.
The attribute delegation record.
static char * expiration
Credential TTL.
Definition: gnunet-abd.c:96
GNUNET_ABD_CredentialFlags
struct GNUNET_ABD_Request * GNUNET_ABD_add_delegation(struct GNUNET_ABD_Handle *handle, struct GNUNET_IDENTITY_Ego *issuer, const char *attribute, struct GNUNET_CRYPTO_EcdsaPublicKey *subject, const char *delegated_attribute, GNUNET_ABD_DelegateResultProcessor proc, void *proc_cls)
Delegate an attribute.
static char * issuer_key
Issuer pubkey string.
Definition: gnunet-abd.c:112
uint32_t issuer_attribute_len
Length of the issuer attribute.
Connection to the ABD service.
Definition: abd_api.c:96
const char * subject_attribute
The attribute.
const char * subject_attribute
The subject attribute.
#define GNUNET_NETWORK_STRUCT_END
Define as empty, GNUNET_PACKED should suffice, but this won&#39;t work on W32;.
static char * subject
Subject pubkey string.
Definition: gnunet-abd.c:86
void GNUNET_ABD_request_cancel(struct GNUNET_ABD_Request *lr)
Cancel pending lookup request.
Definition: abd_api.c:400
The attribute delegation record.
configuration data
Definition: configuration.c:85
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and ECDS...
void(* GNUNET_ABD_RemoveDelegateResultProcessor)(void *cls, uint32_t success)
Iterator called on obtained result for an attribute delegation removal.
struct GNUNET_ABD_Request * GNUNET_ABD_remove_delegation(struct GNUNET_ABD_Handle *handle, struct GNUNET_IDENTITY_Ego *issuer, const char *attribute, GNUNET_ABD_RemoveDelegateResultProcessor proc, void *proc_cls)
Remove a delegation.
Time for absolute times used by GNUnet, in microseconds.
uint32_t set_count
Number of delegation sets in this record.
void GNUNET_ABD_disconnect(struct GNUNET_ABD_Handle *handle)
Shutdown connection with the Credentail service.
Definition: abd_api.c:377
const char * issuer_attribute
The attribute.
const char * issuer_attribute
The issuer attribute.
struct GNUNET_ABD_Request * GNUNET_ABD_verify(struct GNUNET_ABD_Handle *handle, const struct GNUNET_CRYPTO_EcdsaPublicKey *issuer_key, const char *issuer_attribute, const struct GNUNET_CRYPTO_EcdsaPublicKey *subject_key, uint32_t delegate_count, const struct GNUNET_ABD_Delegate *delegates, enum GNUNET_ABD_AlgoDirectionFlags direction, GNUNET_ABD_CredentialResultProcessor proc, void *proc_cls, GNUNET_ABD_IntermediateResultProcessor, void *proc2_cls)
Performs attribute verification.
Definition: abd_api.c:498
uint32_t subject_attribute_len
Length of the attribute.