From 0e9374677c3128db8c6ab2f3efc6807657e2acfa Mon Sep 17 00:00:00 2001 From: qo-op Date: Fri, 20 Mar 2020 17:06:48 +0100 Subject: [PATCH] ZenTag + Passenger File --- iptubes | 2 +- zen/tools/dunitey2secret.sh | 11 ++- zen/zen_G1TXtoZenTag.sh | 22 +++--- zen/zen_MAKE.sh | 132 ++++++++++++++++++++++++------------ 4 files changed, 110 insertions(+), 57 deletions(-) diff --git a/iptubes b/iptubes index 26d2596..0f2cf9f 160000 --- a/iptubes +++ b/iptubes @@ -1 +1 @@ -Subproject commit 26d2596cda7d27690583fe2838e6018ff0350658 +Subproject commit 0f2cf9f36d5653f3b7c836c6b2ceb9a09b737216 diff --git a/zen/tools/dunitey2secret.sh b/zen/tools/dunitey2secret.sh index 1de39c9..b5d6aea 100755 --- a/zen/tools/dunitey2secret.sh +++ b/zen/tools/dunitey2secret.sh @@ -1,10 +1,17 @@ #!/bin/bash -################################################################################ +######################################################################## # Author: Fred (support@qo-op.com) # Version: 1.0 # License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) -########################################################################################### +######################################################################## # This script convert secret.dunikey into ~/.ssb/secret.ssb +######################################################################## +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +######################################################################## +# \\/// +# qo-op +############# DUNKEYFILE="$1" [[ ! ${DUNIKEYFILE} ]] && DUNKEYFILE="./secret.dunikey" [[ ! ${DUNIKEYFILE} ]] && DUNKEYFILE="~/.ssb/secret.dunikey" diff --git a/zen/zen_G1TXtoZenTag.sh b/zen/zen_G1TXtoZenTag.sh index 5d40013..bfb3c25 100755 --- a/zen/zen_G1TXtoZenTag.sh +++ b/zen/zen_G1TXtoZenTag.sh @@ -7,7 +7,9 @@ # == Transform incoming G1 TX into IPFS ZenTAG == # SCAN NODE G1 Wallet FOR "ZEN" Command received (or pending) TX/IN ######################################################################## -# +# \\/// +# qo-op +############# ######################################################################## # _(_)_ _(_)_ # @@@@ (_)@(_) @@@@ (_)@(_) @@@@ @@ -21,17 +23,15 @@ ######################################################################## MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +ME="${0##*/}" ######################################################################## -# \\/// -# qo-op -############# if [[ ! $(which silkaj) ]]; then echo "$USER please Install SILKAJ !!" && exit 1 fi # GET DUNITER SERVER -DUNITERURL="https://$(./duniter_getnode.sh)" +DUNITERURL="https://$($MY_PATH/tools/duniter_getnode.sh)" IPFSNODEID=$(ipfs id -f='\n') [[ $IPFSNODEID == "" ]] && echo "$USER Please Install IPFS !!" && exit 1 @@ -42,7 +42,7 @@ IPFSNODEID=$(ipfs id -f='\n') ######################################################################################################### # GET G1 PUBKEY FROM SCUTTLEBUTT or $2 (DEBUG) DELAY=$1 -[[ $DELAY == "" ]] && DELAY="30 days" && echo "*** HELP ***" && echo "./$me \"duration\" (default $DELAY)" && echo "************" && echo +[[ $DELAY == "" ]] && DELAY="30 days" && echo "*** HELP ***" && echo "./$ME \"duration\" (default $DELAY)" && echo "************" && echo DELAYUNIT=$(echo $DELAY | cut -d ' ' -f 2) # NODE_G1PUBKEY=$2 # DEBUG @@ -71,7 +71,7 @@ echo "G1 PUBKEY = $NODE_G1PUBKEY" echo "SSB ID = %$ssbpub.ed25519" echo "IPFS ID = $IPFSNODEID" # SPECIAL ONE LINE BASH BONUS -# HOW MUCH = silkaj -p $(./duniter_getnode.sh) balance $(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)" +# HOW MUCH = silkaj -p $($MY_PATH/tools/duniter_getnode.sh) balance $(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)" # PREPARE TIMESTAMP LIMITS TIMEBEFORE=$(date -u --date="-$DELAY" +"%s") @@ -107,9 +107,9 @@ if [[ $DELAYUNIT != "minutes" && $DELAYUNIT != "minute" ]]; then echo "TX/IN :: $ZEN ZEN from $ISSUER :: $COMMENT ($TXhash)" CMD=$(echo "$COMMENT" | awk '{print toupper($1)}') ###### CREATE ZEN VALUE IN IPFS ######### - [[ $CMD == "ZEN" ]] && ./zen_MAKE.sh $ZEN $TXhash $ISSUER + [[ $CMD == "ZEN" ]] && $MY_PATH/zen_MAKE.sh $ZEN $TXhash $ISSUER ############################################ - echo "DEBUG! ./zen_MAKE.sh $ZEN $TXhash $ISSUER" + echo "DEBUG! $MY_PATH/zen_MAKE.sh $ZEN $TXhash $ISSUER" ############################################ else # STILL OLD TX @@ -140,9 +140,9 @@ else echo "TX/IN :: $ZEN ZEN from $ISSUER :: $COMMENT ($TXhash)" CMD=$(echo "$COMMENT" | awk '{print toupper($1)}') ###### CREATE ZEN VALUE IN IPFS ######### - [[ $CMD == "ZEN" ]] && ./zen_MAKE.sh $ZEN $TXhash $ISSUER + [[ $CMD == "ZEN" ]] && $MY_PATH/zen_MAKE.sh $ZEN $TXhash $ISSUER ############################################ - echo "DEBUG! ./zen_MAKE.sh $ZEN $TXhash $ISSUER" + echo "DEBUG! $MY_PATH/zen_MAKE.sh $ZEN $TXhash $ISSUER" ############################################ else # STILL OLD TX diff --git a/zen/zen_MAKE.sh b/zen/zen_MAKE.sh index cab2ceb..0bca472 100755 --- a/zen/zen_MAKE.sh +++ b/zen/zen_MAKE.sh @@ -26,63 +26,63 @@ MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized # _g1.issuer # G1TX ISSUER pubkey # _g1.txhash # G1TX HASH # _ipfs.node.creator # NODE IPFS ID -# _ipfs.publishkey.B.gpg # B cyphered IPNS publish key -# _ipfs.publishkey.crypt # G1SSB cyphered IPNS publish key -# _tag.B.sha # B sha256sum +# _ipfs.publishkey.BB.aes # BB SYMcypher of IPNS publish key +# _ipfs.publishkey.crypt # G1SSB ASYMcypher of IPNS publish key +# _tag.BB.sha # BB sha256sum # _tag.uid # ZenTag UID # _tag.zen # ZentTag balance +# _ipns # /ipns/ address +# _passenger.filename # Passenger filename +# _passenger.ipfs.crypt # G1SSB cyphered IPFS Passenger link # TODO: Could be converted into yaml or json if you like ######################################################################## -######################################################################## -# Clean IPFS repo # ipfs pin ls -q --type recursive | xargs ipfs pin rm -######################################################################## ZEN="$1" # Zen amount TXHASH="$2" # G1 TX HASH PASSENGER="$3" # /path/file.ext to include into ZenTag (add to IPFS datastructure) +# ACTIVATE G1 <=> ZEN STRICT RELATION # G1TX HASH CONTROL -[[ ! -f ~/.zen/scan/zen.$TXHASH ]] && echo "ERROR# UNKNOWN TX $TXHASH !!" && exit 1 +#[[ ! -f ~/.zen/scan/zen.$TXHASH ]] && echo "ERROR# UNKNOWN TX $TXHASH !!" && exit 1 # G1TX ISSUER CONTROL -ISSUER=$(cat ~/.zen/scan/zen.$TXHASH) -[[ $ISSUER == "" ]] && echo "ERROR# NO ISSUER FOUND FOR TX $TXHASH !!" && exit 1 +#ISSUER=$(cat ~/.zen/scan/zen.$TXHASH) +#[[ $ISSUER == "" ]] && echo "ERROR# NO ISSUER FOUND FOR TX $TXHASH !!" && exit 1 # IPFSNODEID ######################################################################## IPFSNODEID=$(ipfs id -f='\n') ######################################################################## +######################################################################## # ~/.ssb/secret.dunikey => NODE_G1PUBKEY ######################################################################## [[ ! -f ~/.ssb/secret.dunikey ]] && $MY_PATH/tools/secret2dunikey.sh NODE_G1PUBKEY=$(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) ######################################################################## -# CREATE ZEN TAG : name AA + key BB ######################################################################## -AA=$($MY_PATH/tools/diceware.sh 6 | xargs); # ZenTag Name = Diceware 6 words +# CREATE ZEN TAG => name AA + key BB +######################################################################## +AA=$(echo $($MY_PATH/tools/diceware.sh 6 | xargs) | sed s/\ /_/g ) # ZenTag Name = Diceware_6_words AAH=$(echo -n ${AA} | sha256sum | cut -d ' ' -f 1) # ZenTag Name SHA256 - -RR=$(echo ${AA} | sed s/\ //g ); # Name without space = IPNS key name - -# TODO CHECK UNIQUE AA -# Create Unique Zentag in all IPFS SWARM! -# $(grep -Rwl "$AAH" ./wallets_swarm/.*/_zentag.list) -# AA=$(./diceware.sh 6 | xargs); -# AAH=$(echo -n ${AA} | sha256sum | cut -d ' ' -f 1) -# RR=$(echo ${AA} | sed s/\ //g ); -# PR=$(echo ${AA} | cut -d ' ' -f 1 ); -#done +# Create Unique Zentag for all IPFS SWARM! +while [[ $(grep -Rwl "$AA" ~/.zen/wallets_swarm/.Qm*/TAG/) ]]; do + AA=$(echo $($MY_PATH/tools/diceware.sh 6 | xargs) | sed s/\ /_/g ) + AAH=$(echo -n ${AA} | sha256sum | cut -d ' ' -f 1) +done -# PASSWORD FOR HUMAN ACTION +# PASSWORD FOR WRITE ACTION BB=$($MY_PATH/tools/diceware.sh 4 | xargs); BBH=$(echo -n "$BB" | sha256sum | cut -d ' ' -f 1) -################################################################################## -# CREATE ZENTAG FILES DATA STRUCTURE -mkdir -p ~/.zen/tag/${AAH} -echo "CREATING ZenTag, Value = $ZEN Zen (ls -al ~/.zen/tag/${AAH})" -echo "Name: $AA | Key: $BB" -# ZenTag Create files +######################################################################## +# CREATE ZENTAG FILES DATA STRUCTURE +######################################################################## +mkdir -p ~/.zen/tag/${AAH} +echo "CREATING ZenTag, Value = $ZEN Zen" +echo "$AA :|: $BB" +echo "DATASTRUCTURE: ls -al ~/.zen/tag/${AAH}" + +# ZenTag Create DATASTRUCTURE echo "$AA" > ~/.zen/tag/${AAH}/_tag.uid # Nom du ZenTAG echo "$ZEN" > ~/.zen/tag/${AAH}/_tag.zen # Tag ZEN amount echo "${IPFSNODEID}" > ~/.zen/tag/${AAH}/_ipfs.node.creator # NODE IPFS ID @@ -90,25 +90,53 @@ echo "$TXHASH" > ~/.zen/tag/${AAH}/_g1.txhash # HASH G1 TX/IN echo "$NODE_G1PUBKEY" > ~/.zen/tag/${AAH}/_g1.node.creator # CREATOR IPFS NODE G1PUBKEY echo "$ISSUER" > ~/.zen/tag/${AAH}/_g1.issuer # TX ISSUER G1PUBKEY -#################################################### -# ${RR} IPNS publishkey CYPHER *BB & **NODE_G1PUBKEY -[[ ! -f ~/.ipfs/keystore/${RR} ]] && J=$(ipfs key gen -t rsa -s 2048 ${RR}) +######################################################################## +# ${AA}.key IPNS publishkey CYPHER *BB & **NODE_G1PUBKEY +######################################################################## +[[ ! -f ~/.ipfs/keystore/${AA}.key ]] && J=$(ipfs key gen -t rsa -s 2048 ${AA}.key) # WRITE BBH for QRCode BB verification -echo "$BBH" > ~/.zen/tag/${AAH}/_tag.B.sha +echo "$BBH" > ~/.zen/tag/${AAH}/_tag.BB.sha # BB pgp symetric publishkey -echo "${BB}" | gpg -q --output ~/.zen/tag/${AAH}/_ipfs.publishkey.B.gpg --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 ~/.ipfs/keystore/${RR} +openssl aes-256-cbc -pbkdf2 -k "$BB" -salt -in ~/.ipfs/keystore/${AA}.key -out ~/.zen/tag/${AAH}/_ipfs.publishkey.BB.aes # GIVE IPFS CREATOR NODE ACCESS TO ZEN TAG -$MY_PATH/tools/natools.py encrypt -p $NODE_G1PUBKEY -i ~/.ipfs/keystore/${RR} -o ~/.zen/tag/${AAH}/_ipfs.publishkey.crypt +$MY_PATH/tools/natools.py encrypt -p $NODE_G1PUBKEY -i ~/.ipfs/keystore/${AA}.key -o ~/.zen/tag/${AAH}/_ipfs.publishkey.crypt + ####################################################################### -# TODO Symetric Encrypt and Decrypt with openssl +# Symetric Encrypt and Decrypt with openssl # openssl aes-256-cbc -k "$BB" -salt -in file -out file.aes # Encrypt # openssl aes-256-cbc -k "$BB" -d -salt -in file.aes -out file # Decrypt # tar zip and encrypt a whole directory # -# tar -zcf - directory | openssl aes-128-cbc -salt -out directory.tar.gz.aes # Encrypt -# openssl aes-128-cbc -d -salt -in directory.tar.gz.aes | tar -xz -f - # Decrypt +# tar -zcf - directory | openssl aes-128-cbc -k "$BB" -salt -out directory.tar.gz.aes # Encrypt +# openssl aes-128-cbc -k "$BB" -d -salt -in directory.tar.gz.aes | tar -xz -f - # Decrypt ####################################################################### -[[ -f $PASSENGER ]] && openssl aes-256-cbc -k "$BB" -salt -in $PASSENGER -out ~/.zen/tag/${AAH}/passenger.aes -[[ -d $PASSENGER ]] && tar -zcf - $PASSENGER | openssl aes-128-cbc -k "$BB" -salt -out ~/.zen/tag/${AAH}/passenger.tar.gz.aes +# [[ -f $PASSENGER ]] && openssl aes-256-cbc -k "$BB" -salt -in $PASSENGER -out ~/.zen/tag/${AAH}/passenger.aes +# [[ -d $PASSENGER ]] && tar -zcf - $PASSENGER | openssl aes-128-cbc -k "$BB" -salt -out ~/.zen/tag/${AAH}/passenger.tgz.aes +if [[ -f $PASSENGER ]]; then + echo "We have a Passenger: $PASSENGER" + IPASSENGER=$(ipfs add -q $PASSENGER -w | tail -n 1) + PASSENGERNAME=$(basename -- "$PASSENGER") + echo "$PASSENGERNAME" > ~/.zen/tag/${AAH}/_passenger.filename + echo "$IPASSENGER" > ~/.zen/tag/${AAH}/_passenger.ipfs + # NODE_G1PUBKEY Cypher + $MY_PATH/tools/natools.py encrypt -p $NODE_G1PUBKEY -i ~/.zen/tag/${AAH}/_passenger.ipfs -o ~/.zen/tag/${AAH}/_passenger.ipfs.crypt + # BB passphrase aes encryption + openssl aes-256-cbc -pbkdf2 -k "$BB" -salt -in ~/.zen/tag/${AAH}/_passenger.ipfs -out ~/.zen/tag/${AAH}/_passenger.ipfs.BB.aes + # Delete cleartext _passenger.ipfs + rm -r ~/.zen/tag/${AAH}/_passenger.ipfs +fi + +echo " +################################################################## +# READ PASSENGER $PASSENGERNAME +# Get _passenger.ipfs with NODE CREATOR secret.dunikey +$MY_PATH/tools/natools.py decrypt --pubsec -k ~/.ssb/secret.dunikey -i ~/.zen/tag/${AAH}/_passenger.ipfs.crypt -o /tmp/_passenger.ipfs + +# Get _passenger.ipfs with BB Pass Phrase +openssl aes-256-cbc -pbkdf2 -k \"$BB\" -d -salt -in ~/.zen/tag/${AAH}/_passenger.ipfs.BB.aes -out /tmp/_passenger.ipfs + +# IPFS get file and read with VLC +ipfs get -o /tmp /ipfs/$(cat /tmp/_passenger.ipfs)/$(cat ~/.zen/tag/${AAH}/_passenger.filename) && vlc /tmp/$(cat ~/.zen/tag/${AAH}/_passenger.filename) 2>/dev/null +##################################################################" ########################################################### # TAG IPFS STORAGE & G1Tag IPNS PUBLISHING @@ -120,19 +148,37 @@ echo "$NANODATE" > ~/.zen/tag/${AAH}/_chain.nanodate # Nanodate notification # Activate ZenTag CHAIN I=$(ipfs add -qr ~/.zen/tag/${AAH} | tail -n 1) echo "${I}" > ~/.zen/tag/${AAH}/_chain + +I=$(ipfs add -qr ~/.zen/tag/${AAH} | tail -n 1) cp -f ~/.zen/tag/${AAH}/_chain ~/.zen/tag/${AAH}/_chain.prev +echo "${I}" > ~/.zen/tag/${AAH}/_chain + # IPFS Hash for Immutable G1tag data -J=$(ipfs name publish -k ${RR} --quieter /ipfs/${I}) +J=$(ipfs name publish -k ${AA}.key --quieter /ipfs/${I}) echo "${J}" > ~/.zen/tag/${AAH}/_ipns -echo "ZenTag Done check it with :: ipfs ls /ipns/${J}" +# REPORT ZenTag to SWARM +mkdir -p ~/.zen/wallets/.$IPFSNODEID/TAG/ +echo "${AA}" > ~/.zen/wallets/.$IPFSNODEID/TAG/${J} ### G1TAG PRINT TYPE:DATA:IPNS -#################################################################################### +######################################################################## # READ QRCODE qrencode -s 5 -o ~/.zen/tag/${AAH}/_QRCODE.read.png "RJ:${AAH}#${J}" # WRITE QRCODE qrencode -s 5 -o ~/.zen/tag/${AAH}/_QRCODE.write.png "BJ:${BB}#${J}" +echo "ZenTag ${AA}.key made check it with :: ipfs ls /ipns/${J}" + + +######################################################################## +echo "################################################################## +---> Whishing to clean IPFS repo ? RUN +ipfs pin ls -q --type recursive | xargs ipfs pin rm && ipfs repo gc +rm -f ~/.ipfs/keystore/*.key +rm -Rf ~/.zen/tag/* +rm -Rf ~/.zen/wallets/.$IPFSNODEID/TAG +##################################################################" +######################################################################## exit 0