From fd7da45d10f2c448477f2af6e89eb7bedd27abbe Mon Sep 17 00:00:00 2001 From: Sun Knudsen Date: Thu, 15 Apr 2021 14:04:08 -0400 Subject: [PATCH] Implemented duplicate feature --- .../README.md | 3 +- .../qr-backup.sh | 18 ++++--- .../qr-backup.sh.sig | 26 +++++----- .../qr-clone.sh | 20 ++++++-- .../qr-clone.sh.sig | 26 +++++----- .../qr-restore.sh | 51 ++++++++++--------- .../qr-restore.sh.sig | 26 +++++----- .../secure-erase.sh.sig | 26 +++++----- 8 files changed, 106 insertions(+), 90 deletions(-) diff --git a/how-to-create-encrypted-paper-backup/README.md b/how-to-create-encrypted-paper-backup/README.md index 6a87142..53f430d 100644 --- a/how-to-create-encrypted-paper-backup/README.md +++ b/how-to-create-encrypted-paper-backup/README.md @@ -759,7 +759,8 @@ $ qr-clone.sh --help Usage: qr-clone.sh [options] Options: - -h, --help display help for command + --duplicate duplicate content + -h, --help display help for command $ qr-clone.sh Scan QR code… diff --git a/how-to-create-encrypted-paper-backup/qr-backup.sh b/how-to-create-encrypted-paper-backup/qr-backup.sh index 9e121b0..15d2a5c 100755 --- a/how-to-create-encrypted-paper-backup/qr-backup.sh +++ b/how-to-create-encrypted-paper-backup/qr-backup.sh @@ -111,21 +111,21 @@ if ! mount | grep $usb > /dev/null; then sudo mount $dev $usb -o uid=pi,gid=pi fi -if [ "$create_bip39_mnemonic" = true ]; then +if [ -z "$duplicate" ] && [ "$create_bip39_mnemonic" = true ]; then printf "%s\n" "Creating BIP39 mnemonic…" secret=$(python3 $basedir/create-bip39-mnemonic.py) echo $secret sleep 1 fi -if [ "$create_electrum_mnemonic" = true ]; then +if [ -z "$duplicate" ] && [ "$create_electrum_mnemonic" = true ]; then printf "%s\n" "Creating Electrum mnemonic…" secret=$(electrum make_seed --nbits 264 --offline) echo $secret sleep 1 fi -if [ -z "$secret" ]; then +if [ -z "$duplicate" ] && [ -z "$secret" ]; then tput sc printf "$bold%s$normal\n" "Type secret and press enter, then ctrl-d" readarray -t secret_array @@ -141,7 +141,7 @@ if [ -z "$secret" ]; then fi fi -if [ "$validate_bip39_mnemonic" = true ]; then +if [ -z "$duplicate" ] && [ "$validate_bip39_mnemonic" = true ]; then printf "%s\n" "Validating if secret is valid BIP39 mnemonic…" if ! echo -n "$secret" | python3 $basedir/validate-bip39-mnemonic.py; then printf "$bold$red%s$normal\n" "Invalid BIP39 mnemonic" @@ -149,9 +149,13 @@ if [ "$validate_bip39_mnemonic" = true ]; then fi fi -if [ -z "$shamir_secret_sharing" ] || ([ "$shamir_secret_sharing" = true ] && [ -z "$no_encryption" ]); then - encrypted_secret=$(echo -n "$secret" | gpg --s2k-mode 3 --s2k-count 65011712 --s2k-digest-algo sha512 --cipher-algo AES256 --symmetric --armor) - gpg-connect-agent reloadagent /bye > /dev/null 2>&1 +if [ "$duplicate" = true ] && [ -n "$encrypted_secret" ]; then + printf "%s\n" "Duplicating encrypted secret…" +else + if [ -z "$shamir_secret_sharing" ] || ([ "$shamir_secret_sharing" = true ] && [ -z "$no_encryption" ]); then + encrypted_secret=$(echo -n "$secret" | gpg --s2k-mode 3 --s2k-count 65011712 --s2k-digest-algo sha512 --cipher-algo AES256 --symmetric --armor) + gpg-connect-agent reloadagent /bye > /dev/null 2>&1 + fi fi if [ "$shamir_secret_sharing" = true ]; then diff --git a/how-to-create-encrypted-paper-backup/qr-backup.sh.sig b/how-to-create-encrypted-paper-backup/qr-backup.sh.sig index 9da16de..0f9f048 100644 --- a/how-to-create-encrypted-paper-backup/qr-backup.sh.sig +++ b/how-to-create-encrypted-paper-backup/qr-backup.sh.sig @@ -1,16 +1,16 @@ -----BEGIN PGP SIGNATURE----- -iQIzBAABCgAdFiEEqYzNEiJDZVsm+vthH6dnhiu9EwUFAmB4b8oACgkQH6dnhiu9 -EwXU8hAAjniLPGQulMSmilV8/02BC0FWHHNzYS1m1KlvQ5IYCCUYwFttoVMv7/ME -dLnGJdJ6I9bMQwa/AzjkgP5qKCY0PAiNKy3QrqFegyxyU1lWSPzHxCUg/1IdtCee -95LKynPm+OuMJDespNPYCJgBlgIR5qrXSstUKL7vLFso8joUVig7W9aGkZ/Fw9ZW -oXYnzod+KSuqGN3Zoplm2NzSxpAxjFJnSvM8f91Ht5CB1LgR3TdZNczMEe1r8+0D -P/SAQYmD0HsvEFibcHeFQ4PO3x8plPWv+J8U6yK6dZdUhGKNCjdIDzLEpciLlMvZ -9knBN0UhJ4kijVtFTDqqkiqjteeLr/ODrn1yV3EC179n5bzcDvXQTYy2MGMhUrU3 -uprrCZpjrfLXXG8PkTR7E2OEJnyiZADp2rYoJ6TiXFJI4oZz644N1X1N9euTnxyA -BzZmpP3XR46t8gi0P66n0HCzumeopHTE5I20GISvNVfUFNUVOze1Cfm7SPtf3nNg -CLqGcQtbcKotMsLnBs7w4wLV72f5K2VauVuwXsUkx7GT0xALUEC7846DF1NlZ5Dr -fjTCjXgib3VDIh6wYLxEpKcNLuZqVxdh9k92aA3hHg7eHhJyzMp1S+iC38HaxKbb -sbeAiqS1NH1MdznhJaSTwzMLIQGk1BRwmADHcAu8l52th9YLvYM= -=MSRZ +iQIzBAABCgAdFiEEqYzNEiJDZVsm+vthH6dnhiu9EwUFAmB4hZcACgkQH6dnhiu9 +EwWtixAAtExvLc25xi20ahxm1xdQ1nl0r0E0vglXMdcTW+JIYxDKX2u5PqwM2hE9 +ijdjd49uAuwoukIfRPHHLzlqT1Cmne/wANIphFUTK6utdN5VqjvwIb3riyy4UhlM +XcfIzFcKBq054Kly41CiyTF0s4620glWziR9zENJEFNszPx8vZg7KMtVke0tVFrG +DD3NgxG5RnyCrZ1VxMqI/VW6jY+GumFQf/8NT4KUi5fI0NjNvKhRruUMWfh4zHpc +mC3uZr42DaUSB6NK3QN9ImSEUy4idXeYGGL33CXj0jVhp0cG51TGLM45IKTOI3WU +vbE3byjlH/D8qZ+JR1eqvcotn2ZLGMnSP9Eo97JcJN0phVgGyYTdoYP0tukyuNeQ +yjWFvu+9DKGkpmg8uYr5e5JSoeI5zT1B0ItGCKhrYMg7vuV5bnfPUiqJwy9UxJVb +BCEyvXL9aeX7AgoKlIzYXJNzz7OHZvB4gvCt5kZpCKIu1fn0zvCEBGRHsorW48+d +u+3GcS8DnPukEJdPid6O4vso74FlCtw9E29i610comMeqqNY1XeIWXxfVlQd3dX3 +/HV085Kmbekg/uWtNmqqHoqfnaM1Ik9hA429ewGh1pBeHhjU/YDb4DuCMOvS+cwU +3mtQ9UGTVmM//ghUkLd0sSLoC/oVBWxlaTAxeerEcZqtSm1jWZA= +=jcbd -----END PGP SIGNATURE----- diff --git a/how-to-create-encrypted-paper-backup/qr-clone.sh b/how-to-create-encrypted-paper-backup/qr-clone.sh index 55aa99d..63c9909 100755 --- a/how-to-create-encrypted-paper-backup/qr-clone.sh +++ b/how-to-create-encrypted-paper-backup/qr-clone.sh @@ -11,9 +11,14 @@ while [[ $# -gt 0 ]]; do "Usage: qr-clone.sh [options]" \ "" \ "Options:" \ - " -h, --help display help for command" + " --duplicate duplicate content" \ + " -h, --help display help for command" exit 0 ;; + --duplicate) + duplicate=true + shift + ;; *) positional+=("$1") shift @@ -23,19 +28,24 @@ done set -- "${positional[@]}" +bold=$(tput bold) +normal=$(tput sgr0) + tput reset printf "%s\n" "Restoring…" -printf "%s\n" "Type qr-restore.sh options and press enter (see “qr-restore.sh --help”)" -read -r qr_restore_options +if [ -z "$duplicate" ]; then + printf "$bold%s$normal\n" "Type qr-restore.sh options and press enter (see “qr-restore.sh --help”)" + read -r qr_restore_options +fi . qr-restore.sh $qr_restore_options -if [ -n "$secret" ]; then +if [ -n "$secret" ] || [ -n "$encrypted_secret" ]; then printf "%s\n" "Backing up…" - printf "%s\n" "Type qr-backup.sh options and press enter (see “qr-backup.sh --help”)" + printf "$bold%s$normal\n" "Type qr-backup.sh options and press enter (see “qr-backup.sh --help”)" read -r qr_backup_options . qr-backup.sh $qr_backup_options diff --git a/how-to-create-encrypted-paper-backup/qr-clone.sh.sig b/how-to-create-encrypted-paper-backup/qr-clone.sh.sig index 8ae601e..08e7e07 100644 --- a/how-to-create-encrypted-paper-backup/qr-clone.sh.sig +++ b/how-to-create-encrypted-paper-backup/qr-clone.sh.sig @@ -1,16 +1,16 @@ -----BEGIN PGP SIGNATURE----- -iQIzBAABCgAdFiEEqYzNEiJDZVsm+vthH6dnhiu9EwUFAmB4b80ACgkQH6dnhiu9 -EwV4oA//WxF7IbBueNKVZgRa/oGBRMzHKwDUTPg6HIScS+MqJ3oyKJDpWJ/UhsE5 -XB06yR1GEwP9bTHFBCHiGNOYJHml0wS4dhlUtWFWnfGBFIOm07/LbBcHH9uTCIno -YVv8dhrGRwamxJh/AyfU7MCjJcsgaVniakJsX7L/OgPJymuH4ympNNjvH2Dy0AzV -mLJ4380zMEs09/aCIFnSEOxzjqjwJmtQF9ZZKiJs+rYP7PkuNmJGBSPWCF2ErJCY -NaQVfUrco7zFepjMNn3GSNUyBoU31wlUf/blmPHynYJ/NJR3R84x78J7K8S39ShW -1/xlf6dkto9pYVU4NMq0bt7PVgOImKK9FORZG3kJJu1l57RmiZ5lVcmVkrEi+6LY -8wnLr7aYfXkwas+wzE/IBc7b5Zms4bjyv7dFkf3uCZwgyIqHdOOc4/ErUfGUyKVG -eCh+LqUEUzpDDDjVAC+jFOR8Mi2ES+AjAgbb0URDAqO1owILQdiTmo0oMHrQ+x47 -G6GqEAuaETOkk3+CgX6E7B7gn3AYVyX6IMP9h6ESsGWoS+TVrYeSqrxaprgnqjCd -tMxvr0zAGVInyPjKg3XDxEQjkDq9BWwEPLElq9pk6jaYrgwQchonKQUFBSP5oiQs -sENAaTQhI8LyQDdPPyNckT7uyzc7VfUtROn5qZsFqawKxvBBrdU= -=qPkK +iQIzBAABCgAdFiEEqYzNEiJDZVsm+vthH6dnhiu9EwUFAmB4hZoACgkQH6dnhiu9 +EwUgRA//Y8lBVFesXa9T/cJElyV/E3xQOpKvQ5xaxl5gPVyVwu0zzZjPFEJ+rzNn +vHNTWpDFCqhznglQGSNDDpLW29yaMay2iujQBTFjI7P74cqST+M0hnly3UMiqQ0u +PLmT54hnmpEeZGVsumkN3fvzOPZ7x5d9k5niJ0KJWAlwypspzB/i6dHumjKZYkHz +Ji6SrIOzxd2fBfMN0Y6w5z966UCekWUhTkXCfvLPzWcc8zitOZfdh7Ahs6jjHv1w +jCwkSlVWuDHPLaKESyXrsrbU2zQif+FHU6QkudJqK9ewD2hR6Vm0juYSPqNPw3k6 +ByBQXYYOglKlrvKXQ4kvPTuU1bpjwmG1OhLLquOE3aWHoN73UBB4bNYAJ8+onJjQ +XSvm3KYpGGec/3j96qe5IH+deYpyWmAPVWpA1Dnw0iRMy/OPhe+o/wAaz92tVaSP +Ijv/absAlKSxFJceSgoKF0gYHuLVtzDjLkgtnBtH7FUKdISDCSMyAfXXwcXJNcwT +1JARusrnWE+FsE2FpFs9RsDv0hRzSV2N/+GuGkBsLRxXjDsGYj/EAwb75UcHQG7s +uGcuLyDgQV97VDs+5sD9Tqp07kUJ93nk5fRRSJNz8srGDhxDntO3eEqsPSo5hnnO +OuGmF8NyirJkizR41WJNk2O3s14UMa2ag1r0HxUrAiezvgCL3yw= +=mqR/ -----END PGP SIGNATURE----- diff --git a/how-to-create-encrypted-paper-backup/qr-restore.sh b/how-to-create-encrypted-paper-backup/qr-restore.sh index c35fd0b..5cc5c0e 100755 --- a/how-to-create-encrypted-paper-backup/qr-restore.sh +++ b/how-to-create-encrypted-paper-backup/qr-restore.sh @@ -62,7 +62,7 @@ scan_qr_code () { printf "%s: $bold%s$normal\n" "SHA512 short hash" "$data_short_hash" } -if [ "$shamir_secret_sharing" = true ]; then +if [ -z "$duplicate" ] && [ "$shamir_secret_sharing" = true ]; then for share_number in $(seq 1 $share_threshold); do printf "$bold%s$normal" "Prepare share $share_number or $share_threshold and press enter" read -r confirmation @@ -74,31 +74,32 @@ else scan_qr_code encrypted_secret fi -printf "$bold$red%s$normal\n" "Show secret? (y or n)? " +if [ -z "$duplicate" ]; then + printf "$bold$red%s$normal\n" "Show secret? (y or n)? " + read -r answer + if [ "$answer" = "y" ]; then + if [[ "$encrypted_secret" =~ "-----BEGIN PGP MESSAGE-----" ]]; then + secret=$(echo -e "$encrypted_secret" | gpg --decrypt) + else + secret=$encrypted_secret + fi -read -r answer -if [ "$answer" = "y" ]; then - if [[ "$encrypted_secret" =~ "-----BEGIN PGP MESSAGE-----" ]]; then - secret=$(echo -e "$encrypted_secret" | gpg --decrypt) - else - secret=$encrypted_secret - fi - - if [ "$word_list" = true ]; then - printf "%s\n" "Secret:" - array=($secret) - last_index=$(echo "${#array[@]} - 1" | bc) - for index in ${!array[@]}; do - position=$(($index + 1)) - printf "%d. $bold%s$normal" "$position" "${array[$index]}" - if [ $index -lt $last_index ]; then - printf " " - fi - done - printf "\n" - else - printf "%s\n" "Secret:" - echo "$bold$secret$normal" + if [ "$word_list" = true ]; then + printf "%s\n" "Secret:" + array=($secret) + last_index=$(echo "${#array[@]} - 1" | bc) + for index in ${!array[@]}; do + position=$(($index + 1)) + printf "%d. $bold%s$normal" "$position" "${array[$index]}" + if [ $index -lt $last_index ]; then + printf " " + fi + done + printf "\n" + else + printf "%s\n" "Secret:" + echo "$bold$secret$normal" + fi fi fi diff --git a/how-to-create-encrypted-paper-backup/qr-restore.sh.sig b/how-to-create-encrypted-paper-backup/qr-restore.sh.sig index 1e28097..c1295c8 100644 --- a/how-to-create-encrypted-paper-backup/qr-restore.sh.sig +++ b/how-to-create-encrypted-paper-backup/qr-restore.sh.sig @@ -1,16 +1,16 @@ -----BEGIN PGP SIGNATURE----- -iQIzBAABCgAdFiEEqYzNEiJDZVsm+vthH6dnhiu9EwUFAmB4b9AACgkQH6dnhiu9 -EwWL5w//ae+DA9VEF1pg/uQONGVDretYRo1rzJUFPT22U/ZmyOQHKG+SXGEfYizy -LroEE9M98rqZHVDxA6WRZKFPQs/aNRggE6Qk8T3krzz/oebOenXV1N1Z7ZQH2gxj -YJjaqM0Fw9UCRgPThfUdEpS652vyVjfAAwbwHkI+6flMDGV+TdM+5Fuy3XXXEhiG -Yk4+rsGeRMf6MBFGqNI9urE9iSnRvw7S4joJNmazq9z6Adr/v2OFWHuWURFnUKzy -rvE0frvGeAPzgxR/fnb5Tg4+1HR8p9UYTBo3/Krrv6mSMWrmsKdwADf2TO2hzC1b -pGz7bjeZaYOyeJq8BB7ak/idn7DBk9DsbAs06HI3FyxIQcHZcW9XTihl5e7k7w+O -NbPDNI20PgKCT7CII6U3Rs6LLyHCwsdyxmws70y3wmOQGSYE5bUtAFvCXn0jFpf2 -Aj82NsKanbhsgD15zokbrFwNFHNggQzxMSgRDwMhzbzhslCH580EkEynwR7KR0H1 -KR6ZAlL0vvXiTQ+QzWRwVjhRTpSps+yprX3ARTqehzgfTu8LXEUY0XLxtCpI9DFj -zUBZkIpKKIWq7kaV85QyOMTFBW4oQJzo6jCo75HCznmPjKNQpmW9KMpTGR7PzmLb -6/jJkW5wsw2AT24sytJ73R9Nsfp1UxzXM+o3nGHWFc/orn4OQhU= -=VApF +iQIzBAABCgAdFiEEqYzNEiJDZVsm+vthH6dnhiu9EwUFAmB4hZ0ACgkQH6dnhiu9 +EwW4ZhAAiHRDKjWgepGMlskT4AIOd9IyZGJ9S27p4ShZvRuEB6RWQVSP8I9Nrxdo +RV1cHcvecnUrWSDUZeS17R6+qQnqoHwwd8MhrJTTa2vizLQBhfJerhXrPLyDP7C7 +vkhWDiKY6Bf47JykMTmXCFIZanpv3xppON7aNjDG/HhQ++MVaZitYCAzt5sHltFH +/7o62gvEx/QM2MNnEOvwS3mUI+LqVmtzs39NO+FsbFgxBw2LaCbQZTCWUk5WXrZ5 +b8rUb1IfEhT8g+XljUTws95p4QlYOBadVLedKKC5COHWWfjwZQlKgfZWcTr1hKWL +FTWTLwRb5bxaGelky6Sm9Lk9vrxkG4WKhBBySVBJo14XNK0nCXLTkL3RZuECGvDF +TVXxJvSVI/OAbVeHCVmcyJy++mAcxQeUjRcWfTucMm0ISa1YHEA4L0utsDSPI1Ct +hSb1jmuJIb7lMMRtiPmhrWod2/LxJSA5d3fLvfRTz+JyggmfC5idHTYUEk72jpPh +XzugZl3lNOkMxB4LCWJcWadLx+H75AdVzZeYbZ5G1w+kiWSg5AKaqx436+ryVhAd +Pb2K2gYHoNXMnmpBlOdRmtzgePKSFNgtUCu4LkLWddZqzAHt8GYJo+0YnZ2rfGYl +6ylanmeFLCR3aDU90qCwNokNc93Sqp9fE8Vjc9GsNwwcpV0eV/4= +=IKBO -----END PGP SIGNATURE----- diff --git a/how-to-create-encrypted-paper-backup/secure-erase.sh.sig b/how-to-create-encrypted-paper-backup/secure-erase.sh.sig index caf08bf..41f3f76 100644 --- a/how-to-create-encrypted-paper-backup/secure-erase.sh.sig +++ b/how-to-create-encrypted-paper-backup/secure-erase.sh.sig @@ -1,16 +1,16 @@ -----BEGIN PGP SIGNATURE----- -iQIzBAABCgAdFiEEqYzNEiJDZVsm+vthH6dnhiu9EwUFAmB4b9IACgkQH6dnhiu9 -EwUzFhAAnz+mC1SKOS24bgPqtD2a22T0NmQ3N1SHRL9JIu79TvIUHkpAy8HN/ctH -+DY7+A4266vf6HU79gnwbn2D2l75KqIn/O+J3LEGk4JUWgQTMbB6MMrZeGHKy0gX -evVkdrADpdi158TVD2YzzclOU3SBbU1FCK6SiIq1mB7k0Ryd+rbHcX6ChBvmMAtS -5OmpHok+NkpQ/oSLb6sqnd/EXf4s+6HmKHfbmnhGMr3TyXeSS8Vt3RzxEfFD/WfY -9BGfZkdY70V+gxVWk06gFjS7491EVO+z7YrETrvYVmy88qUdPhJOW4kgf3L1xxN4 -aCyeduhJPpZfgAZ2PAn4jzOpZDbQZOGu9koWjII5hY0VEK0V+N4TTr2gHwMcA8Qp -Gcrbp5sri5rHoqo1fXRw+C/1F++lprVe890Qhr6viE4YeU2AIL7AuB8+SJi/Xk9w -lZvwZ6ckJ/xd76BASXwG5aOU3cHdb+0MFDDwtG4Rpf1LDq171OttNspaWa76nVur -s5vB4oX8PUbtMraqbdBMAFoq94cBeeT9mO2Cb/JfxcanmH04Jw8gO0xI90ofX5Dx -9tuMVR97HHSK3yl1ddMRFLuyO1+yofOh8XYH0abTNeerH5M/IItPZpZRMyGfU3W4 -4huhGfX8XYYpKKhuaMmE0ZHPHMRRKJqcwlqdJxk87UK68JSUbkQ= -=BBuj +iQIzBAABCgAdFiEEqYzNEiJDZVsm+vthH6dnhiu9EwUFAmB4haAACgkQH6dnhiu9 +EwVeNA//Yz7KqK887qZyz9BcttZypKbeIrFneBiGM3A55iR3Yws5NFsFfLOH6BZo +KBkRHlFGyQWgWtev183TIhvkg1rbqQ0oGk+NQyLfWeAgxFVwLB4cXH/3MLahKZeq +BvP9IEBNBdjMjJX3jpMqex4AKPwj3/cEMI2XUAIM8GKJkFF7N5hXCzOK0ACfbMSe +lSZYtmarA/tjimtrNM1Bb3XsdohsbdZebzfTQdfSrch/Q0NO8j+FXlQ0Eo9CpX60 +HSvD9/z5V4J2jhgudSv9H1IHdp4/ISpRoeETnNOc20Pglpp3anCU66tASsKpUsBl +T11R5T1cxBbCByolSnvZynkDApvlYx686VO38t5PjXH2Od5xHB18iA3y0/0JtGTK +4kPfUdOp0wbJkwaSbAaTTTAVHgiD3nHYiYmcLf6ZVwqDMaYWJcQvp0aYxZfw2Z8X +iU6zdU5CY58BIVJya2e8X6LVUQrpT+oBFtmaPR3Ax5CUIRvx4v95zGfTiRfO4cKl +HPIeLP+ankYu1eKxdNHRLNh/cNTO8nrFd9yiGFJumss+xaFfjEqLsNWn+ZbR+Cpx +jprd+jWJ6eKMPq0W3IewahMGZeWeP0VZxc4MwmqQdV2deqv39BzLyKsQzGzO8940 +WWiCpRtEABTnfT6kw3pLxW9PKG9RYkbJ3EseeWmQP2PAG+kWxXw= +=R1pv -----END PGP SIGNATURE-----