summaryrefslogtreecommitdiff
path: root/src/pluto/ac.h
blob: bee016143cb0f30cc10f93e121cb7359fac3213c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/* Support of X.509 attribute certificates
 * Copyright (C) 2002 Ueli Galizzi, Ariane Seiler
 * Copyright (C) 2003 Martin Berner, Lukas Suter

 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2 of the License, or (at your
 * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

#ifndef _AC_H
#define _AC_H

/* definition of ietfAttribute kinds */

typedef enum {
	IETF_ATTRIBUTE_OCTETS =     0,
	IETF_ATTRIBUTE_OID =        1,
	IETF_ATTRIBUTE_STRING =     2
} ietfAttribute_t;

/* access structure for an ietfAttribute */

typedef struct ietfAttr ietfAttr_t;

struct ietfAttr {
  time_t           installed;
  int              count;
  ietfAttribute_t  kind;
  chunk_t          value;
};

typedef struct ietfAttrList ietfAttrList_t;

struct ietfAttrList {
  ietfAttrList_t   *next;
  ietfAttr_t       *attr;
};


/* access structure for an X.509 attribute certificate */

typedef struct x509acert x509acert_t;

struct x509acert {
  x509acert_t    *next;
  time_t         installed;
  chunk_t        certificate;
  chunk_t          certificateInfo;
  u_int              version;
				/*   holder */
				/*     baseCertificateID */
  chunk_t                holderIssuer;
  chunk_t                holderSerial;
  chunk_t                entityName;
				/*   v2Form */
  chunk_t              issuerName;
				/*   signature */
  int                  sigAlg;
  chunk_t            serialNumber;
				/*   attrCertValidityPeriod */
  time_t               notBefore;
  time_t               notAfter;
				/*   attributes */
  ietfAttrList_t       *charging;
  ietfAttrList_t       *groups;
				/*   extensions */
  chunk_t              authKeyID;
  chunk_t              authKeySerialNumber;
  bool                 noRevAvail;
				/* signatureAlgorithm */
  int                algorithm;
  chunk_t          signature;
};

/* used for initialization */
extern const x509acert_t empty_ac;

extern void unshare_ietfAttrList(ietfAttrList_t **listp);
extern void free_ietfAttrList(ietfAttrList_t *list);
extern void decode_groups(char *groups, ietfAttrList_t **listp);
extern bool group_membership(const ietfAttrList_t *my_list
	, const char *conn, const ietfAttrList_t *conn_list);
extern bool parse_ac(chunk_t blob, x509acert_t *ac);
extern bool verify_x509acert(x509acert_t *ac, bool strict);
extern x509acert_t* get_x509acert(chunk_t issuer, chunk_t serial);
extern void load_acerts(void);
extern void free_acert(x509acert_t *ac);
extern void free_acerts(void);
extern void list_acerts(bool utc);
extern void list_groups(bool utc);
extern void format_groups(const ietfAttrList_t *list, char *buf, int len);


#endif /* _AH_H */