2021-04-17 16:31:44 -04:00

281 lines
3.9 KiB
Plaintext

#!/usr/bin/expect
# exp_internal 1
# log_file -noappend ~/expect.log
set timeout 30
proc bold {} {
return [exec tput bold]
}
proc red {} {
return [exec tput setaf 1]
}
proc green {} {
return [exec tput setaf 2]
}
proc normal {} {
return [exec tput sgr0]
}
set passphrase "asdasd"
set secret "foo\nbar"
set failed "[bold][red]Failed[normal]"
set ok "[bold][green]OK[normal]"
puts "[bold]Should backup secret using 2 of 3 Shamir Secret Sharing[normal]"
spawn qr-backup.sh --shamir-secret-sharing --number-of-shares 3 --share-threshold 2
expect {
default {
puts $failed
exit 1
}
-re {Format USB flash drive \(y or n\)\?} {
sleep 0.1
send "y\r"
}
}
expect {
default {
puts $failed
exit 1
}
-re {\[sudo\] password for pi:} {
sleep 0.1
send "$env(password)\r"
}
}
expect {
default {
puts $failed
exit 1
}
-re {mkfs\.fat 4\.1 \(2017-01-24\)}
}
expect {
default {
puts $failed
exit 1
}
-re {Please type secret and press enter, then ctrl\+d} {
sleep 0.1
send "$secret\r"
sleep 0.1
send "\x04"
}
}
expect {
default {
puts $failed
exit 1
}
-re {Please type secret and press enter, then ctrl\+d \(again\)} {
sleep 0.1
send "$secret\r"
sleep 0.1
send "\x04"
}
}
expect {
default {
puts $failed
exit 1
}
-re {Please type passphrase and press enter} {
sleep 0.1
send "$passphrase\r"
}
}
expect {
default {
puts $failed
exit 1
}
-re {Please type passphrase and press enter \(again\)} {
sleep 0.1
send "$passphrase\r"
}
}
expect {
default {
puts $failed
exit 1
}
-re {Show passphrase \(y or n\)\?} {
sleep 0.1
send "y\r"
}
}
expect {
default {
puts $failed
exit 1
}
$passphrase
}
expect {
default {
puts $failed
exit 1
}
{Encrypting secret share 1 of 3…}
}
expect {
default {
puts $failed
exit 1
}
-re {SHA512 short hash: .+?([a-f0-9]{8})} {
set short_hash_1 $expect_out(1,string)
}
}
expect {
default {
puts $failed
exit 1
}
-re {Show SHA512 hash as QR code \(y or n\)\?} {
sleep 0.1
send "n\r"
}
}
expect {
default {
puts $failed
exit 1
}
{Encrypting secret share 2 of 3…}
}
expect {
default {
puts $failed
exit 1
}
-re {SHA512 short hash: .+?([a-f0-9]{8})} {
set short_hash_2 $expect_out(1,string)
}
}
expect {
default {
puts $failed
exit 1
}
-re {Show SHA512 hash as QR code \(y or n\)\?} {
sleep 0.1
send "n\r"
}
}
expect {
default {
puts $failed
exit 1
}
{Encrypting secret share 3 of 3…}
}
expect {
default {
puts $failed
exit 1
}
-re {SHA512 short hash: .+?([a-f0-9]{8})} {
set short_hash_3 $expect_out(1,string)
}
}
expect {
default {
puts $failed
exit 1
}
-re {Show SHA512 hash as QR code \(y or n\)\?} {
sleep 0.1
send "n\r"
}
}
expect {
default {
puts $failed
exit 1
}
-re {Done}
}
puts "[bold]Should restore secret using 2 of 3 Shamir Secret Sharing[normal]"
spawn qr-restore.sh --images "$short_hash_1.jpg,$short_hash_2.jpg" --shamir-secret-sharing --share-threshold 2
expect {
default {
puts $failed
exit 1
}
-re {\[sudo\] password for pi:} {
sleep 0.1
send "$env(password)\r"
}
}
expect {
default {
puts $failed
exit 1
}
-re {Please type passphrase and press enter} {
sleep 0.1
send "$passphrase\r"
}
}
expect {
default {
puts $failed
exit 1
}
-re {Show secret \(y or n\)\?} {
sleep 0.1
send "y\r"
}
}
expect {
default {
puts $failed
exit 1
}
-re {Secret:\r\n((.|\r\n)+?)\r\nDone} {
set restored_secret $expect_out(1,string)
}
}
regsub -all {(\e\(B)?\e\[[0-9]*?m} $restored_secret {} restored_secret
regsub -all {\r} $restored_secret {} restored_secret
if { "$restored_secret" != "$secret" } {
puts $failed
exit 1
} else {
puts $ok
exit 0
}
interact