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