source: creddy/creddy.h @ 4f114cc

abac0-leakabac0-meicompt_changesgec13mei-idmei-rt0-nmei_rt0mei_rt2mei_rt2_fix_1meiyap-rt1meiyap1rt2tvf-new-xml
Last change on this file since 4f114cc was d56e51b, checked in by Mike Ryan <mikeryan@…>, 14 years ago

raise an error (either return value or exception) when trying to write a
private key when it hasn't been loaded

  • Property mode set to 100644
File size: 3.3 KB
Line 
1#ifndef __LIBCREDDY_H__
2#define __LIBCREDDY_H__
3
4#include <stdio.h>
5
6#include <abac_common.h>
7
8#define CREDDY_SUCCESS                      0
9#define CREDDY_GENERATE_INVALID_CN          -1
10#define CREDDY_GENERATE_INVALID_VALIDITY    -2
11#define CREDDY_ATTRIBUTE_ISSUER_NOKEY       -3
12#define CREDDY_ATTRIBUTE_INVALID_ROLE       -4
13#define CREDDY_ATTRIBUTE_INVALID_VALIDITY   -5
14
15/**
16 * Creddy identifiers.
17 */
18
19typedef struct _creddy_id_t creddy_id_t;
20
21// create an ID from an X.509 certificate
22creddy_id_t *creddy_id_from_file(char *filename);
23
24// load an X.509 private key for an from a file
25// handles keys with a password
26int creddy_id_load_privkey(creddy_id_t *id, char *filename);
27
28// generate an ID
29// returns one of CREDDY_SUCCESS or CREDDY_GENERATE_* (see top)
30int creddy_id_generate(creddy_id_t **ret, char *cn, int validity);
31
32// get the SHA1 keyid, pointer is valid for the lifetime of the object
33char *creddy_id_keyid(creddy_id_t *id);
34
35// default filename for the cert: ${CN}_ID.pem
36// caller must free the returned string
37char *creddy_id_cert_filename(creddy_id_t *id);
38
39// write the cert fo an open file pointer
40void creddy_id_write_cert(creddy_id_t *id, FILE *out);
41
42// default filename for the private key: ${CN}_key.pem
43// caller must free the return value
44char *creddy_id_privkey_filename(creddy_id_t *id);
45
46// write the private key to a file
47// it is recommended that you open this file mode 0600
48// returns false if there's no private key loaded
49int creddy_id_write_privkey(creddy_id_t *id, FILE *out);
50
51// get a chunk representing the cert
52// you must free the ptr of the chunk when done
53abac_chunk_t creddy_id_cert_chunk(creddy_id_t *id);
54
55// destroy the id
56void creddy_id_free(creddy_id_t *id);
57
58/**
59 * Attribute cert
60 */
61typedef struct _creddy_attribute_t creddy_attribute_t;
62
63//
64// Here's the skinny:
65//  Attribute cert objects don't contain an actual cert until they're baked.
66//  First you construct the object using creddy_attribute_create, then you add
67//  subjects to it using creddy_attribute_{principal,role,linking_role}.
68//  Finally you bake it. Once you've done that, you can access the DER encoding
69//  or write it to a file.
70//
71
72// create an attribute cert
73// validity is in days
74// returns one of CREDDY_SUCCESS or CREDDY_ATTRIBUTE_* (see top)
75int creddy_attribute_create(creddy_attribute_t **attr, creddy_id_t *issuer, char *role, int validity);
76
77// add a principal subject to the cert
78int creddy_attribute_principal(creddy_attribute_t *attr, char *keyid);
79
80// add a role subject
81int creddy_attribute_role(creddy_attribute_t *attr, char *keyid, char *role);
82
83// add a linking role subject
84int creddy_attribute_linking_role(creddy_attribute_t *attr, char *keyid, char *role, char *linked);
85
86// create the attribute cert once all the subjects have been added
87// can return 0 if there are no subjects or there's a problem building the cert
88int creddy_attribute_bake(creddy_attribute_t *attr);
89
90// returns true iff the cert's been baked
91int creddy_attribute_baked(creddy_attribute_t *attr);
92
93// write the cert to a file. returns 0 if the cert hasn't been baked
94int creddy_attribute_write(creddy_attribute_t *attr, FILE *out);
95
96// get the DER-encoded cert
97// returns 0 if the cert isn't baked
98int creddy_attribute_cert_chunk(creddy_attribute_t *attr, abac_chunk_t *chunk);
99
100// destroy the cert
101void creddy_attribute_free(creddy_attribute_t *attr);
102
103#endif /* __LIBCREDDY_H__ */
Note: See TracBrowser for help on using the repository browser.