xref: /titanic_50/usr/src/lib/libpkg/common/keystore.h (revision de3d2ce46fc25c7b67ccbae4afe5f15e5357568f)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _KEYSTORE_H
28 #define	_KEYSTORE_H
29 
30 
31 /*
32  * Module:	keystore.h
33  * Description:	This module contains the structure definitions for processing
34  *		package keystore files.
35  */
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 #include <openssl/evp.h>
42 #include <openssl/x509.h>
43 #include "pkgerr.h"
44 
45 /* keystore structures */
46 
47 /* this opaque type represents a keystore */
48 typedef void *keystore_handle_t;
49 
50 /* flags passed to open_keystore */
51 
52 /* opens keystore read-only.  Attempts to modify results in an error */
53 #define	KEYSTORE_ACCESS_READONLY	0x00000001L
54 
55 /* opens keystore read-write */
56 #define	KEYSTORE_ACCESS_READWRITE	0x00000002L
57 
58 /*
59  * tells open_keystore to fall back to app-generic paths in the case that
60  * the app-specific paths do not exist.
61  */
62 #define	KEYSTORE_PATH_SOFT		0x00000010L
63 
64 /*
65  * tells open_keystore to use the app-specific paths no matter what,
66  * failing if they cannot be used for any reason.
67  */
68 #define	KEYSTORE_PATH_HARD		0x00000020L
69 
70 /* masks off various types of flags */
71 #define	KEYSTORE_ACCESS_MASK		0x0000000FL
72 #define	KEYSTORE_PATH_MASK		0x000000F0L
73 
74 /* default is read-only, soft */
75 #define	KEYSTORE_DFLT_FLAGS \
76 		(KEYSTORE_ACCESS_READONLY|KEYSTORE_PATH_SOFT)
77 
78 /*
79  * possible encoding formats used by the library, used
80  * by print_cert
81  */
82 typedef enum {
83 	KEYSTORE_FORMAT_PEM,
84 	KEYSTORE_FORMAT_DER,
85 	KEYSTORE_FORMAT_TEXT
86 } keystore_encoding_format_t;
87 
88 /*
89  * structure passed back to password callback for determining how
90  * to prompt for passphrase, and where to record errors
91  */
92 typedef struct {
93 	PKG_ERR	*err;
94 } keystore_passphrase_data;
95 
96 
97 /* max length of a passphrase.  One could use a short story! */
98 #define	KEYSTORE_PASS_MAX	1024
99 
100 /* callback for collecting passphrase when open_keystore() is called */
101 typedef int keystore_passphrase_cb(char *, int, int, void *);
102 
103 /* names of the individual files within the keystore path */
104 #define	TRUSTSTORE		"truststore"
105 #define	KEYSTORE		"keystore"
106 #define	CERTSTORE		"certstore"
107 
108 /* keystore.c */
109 extern int		open_keystore(PKG_ERR *, char *, char *,
110     keystore_passphrase_cb, long flags, keystore_handle_t *);
111 
112 extern int		print_certs(PKG_ERR *, keystore_handle_t, char *,
113     keystore_encoding_format_t, FILE *);
114 
115 extern int		check_cert(PKG_ERR *, X509 *);
116 
117 extern int		check_cert_and_key(PKG_ERR *, X509 *, EVP_PKEY *);
118 
119 extern int		print_cert(PKG_ERR *, X509 *,
120     keystore_encoding_format_t, char *, boolean_t, FILE *);
121 
122 extern int		close_keystore(PKG_ERR *, keystore_handle_t,
123     keystore_passphrase_cb);
124 
125 extern int		merge_ca_cert(PKG_ERR *, X509 *, keystore_handle_t);
126 extern int		merge_cert_and_key(PKG_ERR *, X509 *, EVP_PKEY *,
127     char *, keystore_handle_t);
128 
129 extern int		delete_cert_and_keys(PKG_ERR *, keystore_handle_t,
130     char *);
131 
132 extern int		find_key_cert_pair(PKG_ERR *, keystore_handle_t,
133     char *, EVP_PKEY **, X509 **);
134 
135 extern int		find_ca_certs(PKG_ERR *, keystore_handle_t,
136     STACK_OF(X509) **);
137 
138 extern int		find_cl_certs(PKG_ERR *, keystore_handle_t,
139     STACK_OF(X509) **);
140 
141 #ifdef __cplusplus
142 }
143 #endif
144 
145 #endif /* _KEYSTORE_H */
146