131 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #! /bin/bash
 | |
| #
 | |
| 
 | |
| set -e
 | |
| 
 | |
| progname=$(basename $0)
 | |
| function help
 | |
| {
 | |
|     cat <<EOF
 | |
| Usage: $progname COMMAND DEVICEs [ARGS]
 | |
| 
 | |
| Command for manipulating the pairing/authentication credentials of a
 | |
| Wireless USB device that supports wired-mode Cable-Based-Association.
 | |
| 
 | |
| Works in conjunction with the wusb-cba.ko driver from http://linuxuwb.org.
 | |
| 
 | |
| 
 | |
| DEVICE
 | |
| 
 | |
|  sysfs path to the device to authenticate; for example, both this
 | |
|  guys are the same:
 | |
| 
 | |
|  /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4.4/1-4.4:1.1
 | |
|  /sys/bus/usb/drivers/wusb-cbaf/1-4.4:1.1
 | |
| 
 | |
| COMMAND/ARGS are
 | |
| 
 | |
|  start
 | |
| 
 | |
|    Start a WUSB host controller (by setting up a CHID)
 | |
| 
 | |
|  set-chid DEVICE HOST-CHID HOST-BANDGROUP HOST-NAME
 | |
| 
 | |
|    Sets host information in the device; after this you can call the
 | |
|    get-cdid to see how does this device report itself to us.
 | |
| 
 | |
|  get-cdid DEVICE
 | |
| 
 | |
|    Get the device ID associated to the HOST-CHID we sent with
 | |
|    'set-chid'. We might not know about it.
 | |
| 
 | |
|  set-cc DEVICE
 | |
| 
 | |
|    If we allow the device to connect, set a random new CDID and CK
 | |
|    (connection key). Device saves them for the next time it wants to
 | |
|    connect wireless. We save them for that next time also so we can
 | |
|    authenticate the device (when we see the CDID he uses to id
 | |
|    itself) and the CK to crypto talk to it.
 | |
| 
 | |
| CHID is always 16 hex bytes in 'XX YY ZZ...' form
 | |
| BANDGROUP is almost always 0001
 | |
| 
 | |
| Examples:
 | |
| 
 | |
|   You can default most arguments to '' to get a sane value:
 | |
| 
 | |
|   $ $progname set-chid '' '' '' "My host name"
 | |
| 
 | |
|   A full sequence:
 | |
| 
 | |
|   $ $progname set-chid '' '' '' "My host name"
 | |
|   $ $progname get-cdid ''
 | |
|   $ $progname set-cc ''
 | |
| 
 | |
| EOF
 | |
| }
 | |
| 
 | |
| 
 | |
| # Defaults
 | |
| # FIXME: CHID should come from a database :), band group from the host
 | |
| host_CHID="00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff"
 | |
| host_band_group="0001"
 | |
| host_name=$(hostname)
 | |
| 
 | |
| devs="$(echo /sys/bus/usb/drivers/wusb-cbaf/[0-9]*)"
 | |
| hdevs="$(for h in /sys/class/uwb_rc/*/wusbhc; do readlink -f $h; done)"
 | |
| 
 | |
| result=0
 | |
| case $1 in
 | |
|     start)
 | |
|         for dev in ${2:-$hdevs}
 | |
|           do
 | |
|           echo $host_CHID > $dev/wusb_chid
 | |
|           echo I: started host $(basename $dev) >&2
 | |
|         done
 | |
|         ;;
 | |
|     stop)
 | |
|         for dev in ${2:-$hdevs}
 | |
|           do
 | |
|           echo 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > $dev/wusb_chid
 | |
|           echo I: stopped host $(basename $dev) >&2
 | |
|         done
 | |
|         ;;
 | |
|     set-chid)
 | |
|         shift
 | |
|         for dev in ${2:-$devs}; do
 | |
|             echo "${4:-$host_name}" > $dev/wusb_host_name
 | |
|             echo "${3:-$host_band_group}" > $dev/wusb_host_band_groups
 | |
|             echo ${2:-$host_CHID} > $dev/wusb_chid
 | |
|         done
 | |
|         ;;
 | |
|     get-cdid)
 | |
|         for dev in ${2:-$devs}
 | |
|           do
 | |
|           cat $dev/wusb_cdid
 | |
|         done
 | |
|         ;;
 | |
|     set-cc)
 | |
|         for dev in ${2:-$devs}; do
 | |
|             shift
 | |
|             CDID="$(head --bytes=16 /dev/urandom  | od -tx1 -An)"
 | |
|             CK="$(head --bytes=16 /dev/urandom  | od -tx1 -An)"
 | |
|             echo "$CDID" > $dev/wusb_cdid
 | |
|             echo "$CK" > $dev/wusb_ck
 | |
| 
 | |
|             echo I: CC set >&2
 | |
|             echo "CHID: $(cat $dev/wusb_chid)"
 | |
|             echo "CDID:$CDID"
 | |
|             echo "CK:  $CK"
 | |
|         done
 | |
|         ;;
 | |
|     help|h|--help|-h)
 | |
|         help
 | |
|         ;;
 | |
|     *)
 | |
|         echo "E: Unknown usage" 1>&2
 | |
|         help 1>&2
 | |
|         result=1
 | |
| esac
 | |
| exit $result
 |