1#! /bin/bash 2# 3 4set -e 5 6progname=$(basename $0) 7function help 8{ 9 cat <<EOF 10Usage: $progname COMMAND DEVICEs [ARGS] 11 12Command for manipulating the pairing/authentication credentials of a 13Wireless USB device that supports wired-mode Cable-Based-Association. 14 15Works in conjunction with the wusb-cba.ko driver from http://linuxuwb.org. 16 17 18DEVICE 19 20 sysfs path to the device to authenticate; for example, both this 21 guys are the same: 22 23 /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4.4/1-4.4:1.1 24 /sys/bus/usb/drivers/wusb-cbaf/1-4.4:1.1 25 26COMMAND/ARGS are 27 28 start 29 30 Start a WUSB host controller (by setting up a CHID) 31 32 set-chid DEVICE HOST-CHID HOST-BANDGROUP HOST-NAME 33 34 Sets host information in the device; after this you can call the 35 get-cdid to see how does this device report itself to us. 36 37 get-cdid DEVICE 38 39 Get the device ID associated to the HOST-CHID we sent with 40 'set-chid'. We might not know about it. 41 42 set-cc DEVICE 43 44 If we allow the device to connect, set a random new CDID and CK 45 (connection key). Device saves them for the next time it wants to 46 connect wireless. We save them for that next time also so we can 47 authenticate the device (when we see the CDID he uses to id 48 itself) and the CK to crypto talk to it. 49 50CHID is always 16 hex bytes in 'XX YY ZZ...' form 51BANDGROUP is almost always 0001 52 53Examples: 54 55 You can default most arguments to '' to get a sane value: 56 57 $ $progname set-chid '' '' '' "My host name" 58 59 A full sequence: 60 61 $ $progname set-chid '' '' '' "My host name" 62 $ $progname get-cdid '' 63 $ $progname set-cc '' 64 65EOF 66} 67 68 69# Defaults 70# FIXME: CHID should come from a database :), band group from the host 71host_CHID="00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff" 72host_band_group="0001" 73host_name=$(hostname) 74 75devs="$(echo /sys/bus/usb/drivers/wusb-cbaf/[0-9]*)" 76hdevs="$(for h in /sys/class/uwb_rc/*/wusbhc; do readlink -f $h; done)" 77 78result=0 79case $1 in 80 start) 81 for dev in ${2:-$hdevs} 82 do 83 echo $host_CHID > $dev/wusb_chid 84 echo I: started host $(basename $dev) >&2 85 done 86 ;; 87 stop) 88 for dev in ${2:-$hdevs} 89 do 90 echo 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > $dev/wusb_chid 91 echo I: stopped host $(basename $dev) >&2 92 done 93 ;; 94 set-chid) 95 shift 96 for dev in ${2:-$devs}; do 97 echo "${4:-$host_name}" > $dev/wusb_host_name 98 echo "${3:-$host_band_group}" > $dev/wusb_host_band_groups 99 echo ${2:-$host_CHID} > $dev/wusb_chid 100 done 101 ;; 102 get-cdid) 103 for dev in ${2:-$devs} 104 do 105 cat $dev/wusb_cdid 106 done 107 ;; 108 set-cc) 109 for dev in ${2:-$devs}; do 110 shift 111 CDID="$(head --bytes=16 /dev/urandom | od -tx1 -An)" 112 CK="$(head --bytes=16 /dev/urandom | od -tx1 -An)" 113 echo "$CDID" > $dev/wusb_cdid 114 echo "$CK" > $dev/wusb_ck 115 116 echo I: CC set >&2 117 echo "CHID: $(cat $dev/wusb_chid)" 118 echo "CDID:$CDID" 119 echo "CK: $CK" 120 done 121 ;; 122 help|h|--help|-h) 123 help 124 ;; 125 *) 126 echo "E: Unknown usage" 1>&2 127 help 1>&2 128 result=1 129esac 130exit $result 131