kopia lustrzana https://github.com/conorpp/u2f-zero
155 wiersze
3.2 KiB
Bash
155 wiersze
3.2 KiB
Bash
#!/bin/bash
|
|
|
|
|
|
export PATH=$PATH:`pwd`/flashing:../../../u2f_zero_client:../../../gencert
|
|
|
|
export key=gencert/ca/key.pem
|
|
adapters[0]=0
|
|
num_adapters=0
|
|
firmware=../firmware
|
|
export setup=setup_device.sh
|
|
export starting_SN=CAFEBABE00000000
|
|
setup_SNs=(0 CAFEBABEFFFFFFF0 CAFEBABEFFFFFFF1 CAFEBABEFFFFFFF2)
|
|
|
|
if [[ -n "$1" ]] ; then
|
|
starting_SN=$((0x$starting_SN + $1))
|
|
fi
|
|
|
|
function inc_hex {
|
|
a=$((0x$1 + 1))
|
|
a=$(printf "%x\n" $a)
|
|
echo ${a^^}
|
|
}
|
|
|
|
function is_running {
|
|
|
|
sn=$1
|
|
if [[ -f workers/$sn/worker/.finished ]] ; then
|
|
pwd
|
|
echo "$sn finished"
|
|
return 1
|
|
fi
|
|
|
|
pwd
|
|
echo "$sn still running"
|
|
return 0
|
|
|
|
}
|
|
|
|
function remove_lock {
|
|
|
|
sn=$1
|
|
touch workers/$sn/worker/.finished
|
|
|
|
}
|
|
|
|
function start_programming {
|
|
|
|
sn=$1
|
|
setupf=$2
|
|
setup_sn=$3
|
|
rm -f workers/$sn/worker/.finished
|
|
cd workers/$sn/worker && ./$setup ../../../$key $sn $starting_SN $setupf $setup_sn \
|
|
&& touch .finished && cd ../../.. &
|
|
export starting_SN=$(inc_hex $starting_SN)
|
|
|
|
}
|
|
|
|
|
|
for i in `seq 1 100` ; do
|
|
|
|
adapters[$i]=$(FlashUtilCL.exe DeviceSN $i)
|
|
|
|
if [[ ${adapters[$i]} = *"out of range"* ]]
|
|
then
|
|
break
|
|
fi
|
|
|
|
num_adapters=$(($num_adapters + 1))
|
|
done
|
|
|
|
export num_adapters=$num_adapters
|
|
export adapters=$adapters
|
|
|
|
rm -rf workers
|
|
mkdir workers
|
|
|
|
for i in `seq 1 $num_adapters` ; do
|
|
|
|
echo "$i :" ${adapters[$i]}
|
|
mkdir workers/${adapters[$i]}
|
|
mkdir workers/${adapters[$i]}/worker
|
|
cp -rf $firmware workers/${adapters[$i]}
|
|
cp $setup workers/${adapters[$i]}/worker
|
|
touch workers/${adapters[$i]}/worker/.finished
|
|
|
|
# fix path in meta file to point to new location for files that are "dynamic"
|
|
sed -i "s/firmware.*src.*cert.c/tools\/workers\/${adapters[$i]}\/firmware\/src\/cert.c/g" \
|
|
workers/${adapters[$i]}/firmware/release/src/cert.__i
|
|
sed -i "s/firmware.*src.*descriptors.c/tools\/workers\/${adapters[$i]}\/firmware\/src\/descriptors.c/g" \
|
|
workers/${adapters[$i]}/firmware/release/src/descriptors.__i
|
|
|
|
done
|
|
|
|
#cd workers/${adapters[1]}/worker && ./$setup ../../../$key ${adapters[1]} CAFEBABE00000001
|
|
|
|
starting_SN=$(inc_hex $starting_SN)
|
|
echo $starting_SN
|
|
|
|
#cd workers/${adapters[1]}/worker && ./$setup ../../../$key ${adapters[1]} CAFEBABE00000001 &
|
|
#is_running ${adapters[1]}
|
|
#echo $?
|
|
|
|
#exit 0
|
|
|
|
c_stack=(0 0 0 0)
|
|
|
|
for (( ; ; ))
|
|
do
|
|
|
|
read -n 1 j
|
|
|
|
if [[ $j -gt $num_adapters ]] ; then
|
|
|
|
echo "$j is too big"
|
|
continue
|
|
|
|
fi
|
|
|
|
# 3 element queue
|
|
c_stack+=($j)
|
|
c_stack=("${c_stack[@]:1}")
|
|
|
|
if [[ "${c_stack[1]}" -eq "${c_stack[2]}" ]] ; then
|
|
|
|
if [[ "${c_stack[2]}" -eq "${c_stack[3]}" ]] ; then
|
|
|
|
# if entered 3 times in a row, remove lock
|
|
remove_lock ${adapters[$j]}
|
|
c_stack=(0 0 0 0)
|
|
echo
|
|
echo
|
|
echo "restarting $j: ${adapters[$j]}"
|
|
echo
|
|
echo
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
jobs
|
|
|
|
|
|
|
|
is_running ${adapters[$j]}
|
|
|
|
if [[ $? -eq 1 ]] ; then
|
|
echo "starting $j ${adapters[$j]}"
|
|
start_programming ${adapters[$j]} ../firmware/SETUP_"${setup_SNs[$j]}".hex ${setup_SNs[$j]}
|
|
else
|
|
echo "$j ${adapters[$j]} is already running"
|
|
fi
|
|
|
|
done
|
|
|