aboutsummaryrefslogtreecommitdiffstats
path: root/Source/lib/crypto/certificate.h
blob: 8dc88e033f9033ab7b3e3cc482cdec6a41174777 (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
/**
 * @file certificate.h
 * 
 * @brief Interface of certificate_t.
 * 
 */

/*
 * Copyright (C) 2006 Martin Willi
 * Hochschule fuer Technik Rapperswil
 *
 * 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 CERTIFICATE_H_
#define CERTIFICATE_H_

#include <types.h>
#include <definitions.h>
#include <crypto/rsa/rsa_public_key.h>
#include <utils/identification.h>
#include <utils/iterator.h>


typedef struct certificate_t certificate_t;

/**
 * @brief X509 certificate.
 * 
 * @b Constructors:
 *  - certificate_create_from_chunk()
 *
 * @ingroup transforms
 */
struct certificate_t {

	/**
	 * @brief Get the RSA public key from the certificate.
	 * 
	 * @param this				calling object
	 * @return					public_key
	 */
	rsa_public_key_t *(*get_public_key) (certificate_t *this);

	identification_t *(*get_issuer) (certificate_t *this);
	identification_t *(*get_subject) (certificate_t *this);
	iterator_t *(*create_subjectaltname_iter) (certificate_t *this);
	iterator_t *(*create_issueraltname_iter) (certificate_t *this);
	bool (*belongs_to) (certificate_t *this, identification_t *subject);
	bool (*issued_by) (certificate_t *this, identification_t *issuer);
	bool (*validate) (certificate_t *this, rsa_public_key_t *signer);
	
	/**
	 * @brief Destroys the private key.
	 * 
	 * @param this				private key to destroy
	 */
	void (*destroy) (certificate_t *this);
};

/**
 * @brief Read a certificate from a blob.
 * 
 * @return created certificate_t.
 * 
 * @ingroup transforms
 */
certificate_t *certificate_create_from_chunk(chunk_t chunk);

certificate_t *certificate_create_from_file(char *filename);

#endif /* CERTIFICATE_H_ */