xref: /onnv-gate/usr/src/cmd/wusbadm/crypto_util.h (revision 9430:637732b28916)
1*9430SRaymond.Chen@Sun.COM /*
2*9430SRaymond.Chen@Sun.COM  * CDDL HEADER START
3*9430SRaymond.Chen@Sun.COM  *
4*9430SRaymond.Chen@Sun.COM  * The contents of this file are subject to the terms of the
5*9430SRaymond.Chen@Sun.COM  * Common Development and Distribution License (the "License").
6*9430SRaymond.Chen@Sun.COM  * You may not use this file except in compliance with the License.
7*9430SRaymond.Chen@Sun.COM  *
8*9430SRaymond.Chen@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*9430SRaymond.Chen@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*9430SRaymond.Chen@Sun.COM  * See the License for the specific language governing permissions
11*9430SRaymond.Chen@Sun.COM  * and limitations under the License.
12*9430SRaymond.Chen@Sun.COM  *
13*9430SRaymond.Chen@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*9430SRaymond.Chen@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*9430SRaymond.Chen@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*9430SRaymond.Chen@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*9430SRaymond.Chen@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*9430SRaymond.Chen@Sun.COM  *
19*9430SRaymond.Chen@Sun.COM  * CDDL HEADER END
20*9430SRaymond.Chen@Sun.COM  */
21*9430SRaymond.Chen@Sun.COM /*
22*9430SRaymond.Chen@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23*9430SRaymond.Chen@Sun.COM  * Use is subject to license terms.
24*9430SRaymond.Chen@Sun.COM  */
25*9430SRaymond.Chen@Sun.COM 
26*9430SRaymond.Chen@Sun.COM #ifndef	_CRYPTO_UTIL_H
27*9430SRaymond.Chen@Sun.COM #define	_CRYPTO_UTIL_H
28*9430SRaymond.Chen@Sun.COM 
29*9430SRaymond.Chen@Sun.COM 
30*9430SRaymond.Chen@Sun.COM #ifdef	__cplusplus
31*9430SRaymond.Chen@Sun.COM extern "C" {
32*9430SRaymond.Chen@Sun.COM #endif
33*9430SRaymond.Chen@Sun.COM 
34*9430SRaymond.Chen@Sun.COM #include <limits.h>
35*9430SRaymond.Chen@Sun.COM #include <security/cryptoki.h>
36*9430SRaymond.Chen@Sun.COM #include <security/pkcs11.h>
37*9430SRaymond.Chen@Sun.COM #include <kmfapi.h>
38*9430SRaymond.Chen@Sun.COM 
39*9430SRaymond.Chen@Sun.COM #include <sys/usb/usba/wusba_io.h>
40*9430SRaymond.Chen@Sun.COM 
41*9430SRaymond.Chen@Sun.COM 
42*9430SRaymond.Chen@Sun.COM #define	WUSB_DEV_MAC_LENGTH		6
43*9430SRaymond.Chen@Sun.COM #define	WUSB_CC_LABEL_LENGTH		(WUSB_DEV_MAC_LENGTH * 2 + 1)
44*9430SRaymond.Chen@Sun.COM #define	WUSB_TYPE_LEN			16
45*9430SRaymond.Chen@Sun.COM 
46*9430SRaymond.Chen@Sun.COM /*
47*9430SRaymond.Chen@Sun.COM  * wusb_cc_info.
48*9430SRaymond.Chen@Sun.COM  * Record the association information and it is
49*9430SRaymond.Chen@Sun.COM  * saved at /etc/usb/wusbcc
50*9430SRaymond.Chen@Sun.COM  */
51*9430SRaymond.Chen@Sun.COM typedef	struct wusb_cc_info {
52*9430SRaymond.Chen@Sun.COM 	uint8_t			mac[WUSB_DEV_MAC_LENGTH];
53*9430SRaymond.Chen@Sun.COM 	wusb_cc_t		cc;   /* cc info */
54*9430SRaymond.Chen@Sun.COM 	char			type[WUSB_TYPE_LEN]; /* device/host path */
55*9430SRaymond.Chen@Sun.COM 	uint8_t			host; /* Host id */
56*9430SRaymond.Chen@Sun.COM 	uint16_t		dev;  /* Device id */
57*9430SRaymond.Chen@Sun.COM 	char			flag; /* Onetime/Always */
58*9430SRaymond.Chen@Sun.COM } wusb_cc_info_t;
59*9430SRaymond.Chen@Sun.COM 
60*9430SRaymond.Chen@Sun.COM 
61*9430SRaymond.Chen@Sun.COM /* Device state definition */
62*9430SRaymond.Chen@Sun.COM #define	DEV_STAT_DISCONN	0x00
63*9430SRaymond.Chen@Sun.COM #define	DEV_STAT_CONNECT	0x01
64*9430SRaymond.Chen@Sun.COM 
65*9430SRaymond.Chen@Sun.COM /* wusbadm list structure */
66*9430SRaymond.Chen@Sun.COM typedef	struct wusb_cc_list {
67*9430SRaymond.Chen@Sun.COM 	struct wusb_cc_list	*next;
68*9430SRaymond.Chen@Sun.COM 	wusb_cc_info_t		info;   /* cc info */
69*9430SRaymond.Chen@Sun.COM 	uint8_t			stat;	/* host or device state */
70*9430SRaymond.Chen@Sun.COM } wusb_cc_list_t;
71*9430SRaymond.Chen@Sun.COM 
72*9430SRaymond.Chen@Sun.COM typedef	struct wusb_device_info {
73*9430SRaymond.Chen@Sun.COM 	char			type[WUSB_TYPE_LEN];
74*9430SRaymond.Chen@Sun.COM 	uint8_t			host; /* host id */
75*9430SRaymond.Chen@Sun.COM 	uint16_t		dev;  /* device id */
76*9430SRaymond.Chen@Sun.COM 	uint8_t			stat; /* state */
77*9430SRaymond.Chen@Sun.COM } wusb_device_info_t;
78*9430SRaymond.Chen@Sun.COM 
79*9430SRaymond.Chen@Sun.COM /* cc generation functions */
80*9430SRaymond.Chen@Sun.COM int	wusb_crypto_init(KMF_HANDLE_T *, CK_SESSION_HANDLE *,
81*9430SRaymond.Chen@Sun.COM 		const char *, const char *);
82*9430SRaymond.Chen@Sun.COM void	wusb_crypto_fini(KMF_HANDLE_T);
83*9430SRaymond.Chen@Sun.COM 
84*9430SRaymond.Chen@Sun.COM int	wusb_random(CK_SESSION_HANDLE, CK_BYTE *, size_t, CK_BYTE *, size_t);
85*9430SRaymond.Chen@Sun.COM 
86*9430SRaymond.Chen@Sun.COM 
87*9430SRaymond.Chen@Sun.COM void	mac_to_label(uint8_t *, char *);
88*9430SRaymond.Chen@Sun.COM 
89*9430SRaymond.Chen@Sun.COM void	print_array(const char *, CK_BYTE *, size_t);
90*9430SRaymond.Chen@Sun.COM 
91*9430SRaymond.Chen@Sun.COM int	chk_auths(uid_t, const char *);
92*9430SRaymond.Chen@Sun.COM #ifdef __cplusplus
93*9430SRaymond.Chen@Sun.COM }
94*9430SRaymond.Chen@Sun.COM #endif
95*9430SRaymond.Chen@Sun.COM 
96*9430SRaymond.Chen@Sun.COM #endif	/* _CRYPTO_UTIL_H */
97