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 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 */
25
26 #ifndef _CRYPTO_UTIL_H
27 #define _CRYPTO_UTIL_H
28
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 #include <limits.h>
35 #include <security/cryptoki.h>
36 #include <security/pkcs11.h>
37 #include <kmfapi.h>
38
39 #include <sys/usb/usba/wusba_io.h>
40
41
42 #define WUSB_DEV_MAC_LENGTH 6
43 #define WUSB_CC_LABEL_LENGTH (WUSB_DEV_MAC_LENGTH * 2 + 1)
44 #define WUSB_TYPE_LEN 16
45
46 /*
47 * wusb_cc_info.
48 * Record the association information and it is
49 * saved at /etc/usb/wusbcc
50 */
51 typedef struct wusb_cc_info {
52 uint8_t mac[WUSB_DEV_MAC_LENGTH];
53 wusb_cc_t cc; /* cc info */
54 char type[WUSB_TYPE_LEN]; /* device/host path */
55 uint8_t host; /* Host id */
56 uint16_t dev; /* Device id */
57 char flag; /* Onetime/Always */
58 } wusb_cc_info_t;
59
60
61 /* Device state definition */
62 #define DEV_STAT_DISCONN 0x00
63 #define DEV_STAT_CONNECT 0x01
64
65 /* wusbadm list structure */
66 typedef struct wusb_cc_list {
67 struct wusb_cc_list *next;
68 wusb_cc_info_t info; /* cc info */
69 uint8_t stat; /* host or device state */
70 } wusb_cc_list_t;
71
72 typedef struct wusb_device_info {
73 char type[WUSB_TYPE_LEN];
74 uint8_t host; /* host id */
75 uint16_t dev; /* device id */
76 uint8_t stat; /* state */
77 } wusb_device_info_t;
78
79 /* cc generation functions */
80 int wusb_crypto_init(KMF_HANDLE_T *, CK_SESSION_HANDLE *,
81 const char *, const char *);
82 void wusb_crypto_fini(KMF_HANDLE_T);
83
84 int wusb_random(CK_SESSION_HANDLE, CK_BYTE *, size_t, CK_BYTE *, size_t);
85
86
87 void mac_to_label(uint8_t *, char *);
88
89 void print_array(const char *, CK_BYTE *, size_t);
90
91 int chk_auths(uid_t, const char *);
92 #ifdef __cplusplus
93 }
94 #endif
95
96 #endif /* _CRYPTO_UTIL_H */