ZenTag + Passenger File

This commit is contained in:
qo-op 2020-03-20 17:06:48 +01:00
parent 4a0b2454b1
commit 0e9374677c
4 changed files with 110 additions and 57 deletions

@ -1 +1 @@
Subproject commit 26d2596cda7d27690583fe2838e6018ff0350658 Subproject commit 0f2cf9f36d5653f3b7c836c6b2ceb9a09b737216

View File

@ -1,10 +1,17 @@
#!/bin/bash #!/bin/bash
################################################################################ ########################################################################
# Author: Fred (support@qo-op.com) # Author: Fred (support@qo-op.com)
# Version: 1.0 # Version: 1.0
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) # License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
########################################################################################### ########################################################################
# This script convert secret.dunikey into ~/.ssb/secret.ssb # 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" DUNKEYFILE="$1"
[[ ! ${DUNIKEYFILE} ]] && DUNKEYFILE="./secret.dunikey" [[ ! ${DUNIKEYFILE} ]] && DUNKEYFILE="./secret.dunikey"
[[ ! ${DUNIKEYFILE} ]] && DUNKEYFILE="~/.ssb/secret.dunikey" [[ ! ${DUNIKEYFILE} ]] && DUNKEYFILE="~/.ssb/secret.dunikey"

View File

@ -7,7 +7,9 @@
# == Transform incoming G1 TX into IPFS ZenTAG == # == Transform incoming G1 TX into IPFS ZenTAG ==
# SCAN NODE G1 Wallet FOR "ZEN" Command received (or pending) TX/IN # 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="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
######################################################################## ########################################################################
# \\///
# qo-op
#############
if [[ ! $(which silkaj) ]]; then if [[ ! $(which silkaj) ]]; then
echo "$USER please Install SILKAJ !!" && exit 1 echo "$USER please Install SILKAJ !!" && exit 1
fi fi
# GET DUNITER SERVER # GET DUNITER SERVER
DUNITERURL="https://$(./duniter_getnode.sh)" DUNITERURL="https://$($MY_PATH/tools/duniter_getnode.sh)"
IPFSNODEID=$(ipfs id -f='<id>\n') IPFSNODEID=$(ipfs id -f='<id>\n')
[[ $IPFSNODEID == "" ]] && echo "$USER Please Install IPFS !!" && exit 1 [[ $IPFSNODEID == "" ]] && echo "$USER Please Install IPFS !!" && exit 1
@ -42,7 +42,7 @@ IPFSNODEID=$(ipfs id -f='<id>\n')
######################################################################################################### #########################################################################################################
# GET G1 PUBKEY FROM SCUTTLEBUTT or $2 (DEBUG) # GET G1 PUBKEY FROM SCUTTLEBUTT or $2 (DEBUG)
DELAY=$1 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) DELAYUNIT=$(echo $DELAY | cut -d ' ' -f 2)
# NODE_G1PUBKEY=$2 # DEBUG # NODE_G1PUBKEY=$2 # DEBUG
@ -71,7 +71,7 @@ echo "G1 PUBKEY = $NODE_G1PUBKEY"
echo "SSB ID = %$ssbpub.ed25519" echo "SSB ID = %$ssbpub.ed25519"
echo "IPFS ID = $IPFSNODEID" echo "IPFS ID = $IPFSNODEID"
# SPECIAL ONE LINE BASH BONUS # 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 # PREPARE TIMESTAMP LIMITS
TIMEBEFORE=$(date -u --date="-$DELAY" +"%s") 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)" echo "TX/IN :: $ZEN ZEN from $ISSUER :: $COMMENT ($TXhash)"
CMD=$(echo "$COMMENT" | awk '{print toupper($1)}') CMD=$(echo "$COMMENT" | awk '{print toupper($1)}')
###### CREATE ZEN VALUE IN IPFS ######### ###### 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 else
# STILL OLD TX # STILL OLD TX
@ -140,9 +140,9 @@ else
echo "TX/IN :: $ZEN ZEN from $ISSUER :: $COMMENT ($TXhash)" echo "TX/IN :: $ZEN ZEN from $ISSUER :: $COMMENT ($TXhash)"
CMD=$(echo "$COMMENT" | awk '{print toupper($1)}') CMD=$(echo "$COMMENT" | awk '{print toupper($1)}')
###### CREATE ZEN VALUE IN IPFS ######### ###### 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 else
# STILL OLD TX # STILL OLD TX

View File

@ -26,63 +26,63 @@ MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
# _g1.issuer # G1TX ISSUER pubkey # _g1.issuer # G1TX ISSUER pubkey
# _g1.txhash # G1TX HASH # _g1.txhash # G1TX HASH
# _ipfs.node.creator # NODE IPFS ID # _ipfs.node.creator # NODE IPFS ID
# _ipfs.publishkey.B.gpg # B cyphered IPNS publish key # _ipfs.publishkey.BB.aes # BB SYMcypher of IPNS publish key
# _ipfs.publishkey.crypt # G1SSB cyphered IPNS publish key # _ipfs.publishkey.crypt # G1SSB ASYMcypher of IPNS publish key
# _tag.B.sha # B sha256sum # _tag.BB.sha # BB sha256sum
# _tag.uid # ZenTag UID # _tag.uid # ZenTag UID
# _tag.zen # ZentTag balance # _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 # 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 ZEN="$1" # Zen amount
TXHASH="$2" # G1 TX HASH TXHASH="$2" # G1 TX HASH
PASSENGER="$3" # /path/file.ext to include into ZenTag (add to IPFS datastructure) PASSENGER="$3" # /path/file.ext to include into ZenTag (add to IPFS datastructure)
# ACTIVATE G1 <=> ZEN STRICT RELATION
# G1TX HASH CONTROL # 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 # G1TX ISSUER CONTROL
ISSUER=$(cat ~/.zen/scan/zen.$TXHASH) #ISSUER=$(cat ~/.zen/scan/zen.$TXHASH)
[[ $ISSUER == "" ]] && echo "ERROR# NO ISSUER FOUND FOR TX $TXHASH !!" && exit 1 #[[ $ISSUER == "" ]] && echo "ERROR# NO ISSUER FOUND FOR TX $TXHASH !!" && exit 1
# IPFSNODEID # IPFSNODEID
######################################################################## ########################################################################
IPFSNODEID=$(ipfs id -f='<id>\n') IPFSNODEID=$(ipfs id -f='<id>\n')
######################################################################## ########################################################################
########################################################################
# ~/.ssb/secret.dunikey => NODE_G1PUBKEY # ~/.ssb/secret.dunikey => NODE_G1PUBKEY
######################################################################## ########################################################################
[[ ! -f ~/.ssb/secret.dunikey ]] && $MY_PATH/tools/secret2dunikey.sh [[ ! -f ~/.ssb/secret.dunikey ]] && $MY_PATH/tools/secret2dunikey.sh
NODE_G1PUBKEY=$(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) 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 AAH=$(echo -n ${AA} | sha256sum | cut -d ' ' -f 1) # ZenTag Name SHA256
# Create Unique Zentag for all IPFS SWARM!
RR=$(echo ${AA} | sed s/\ //g ); # Name without space = IPNS key name while [[ $(grep -Rwl "$AA" ~/.zen/wallets_swarm/.Qm*/TAG/) ]]; do
AA=$(echo $($MY_PATH/tools/diceware.sh 6 | xargs) | sed s/\ /_/g )
# TODO CHECK UNIQUE AA AAH=$(echo -n ${AA} | sha256sum | cut -d ' ' -f 1)
# Create Unique Zentag in all IPFS SWARM! done
# $(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
# PASSWORD FOR HUMAN ACTION # PASSWORD FOR WRITE ACTION
BB=$($MY_PATH/tools/diceware.sh 4 | xargs); BB=$($MY_PATH/tools/diceware.sh 4 | xargs);
BBH=$(echo -n "$BB" | sha256sum | cut -d ' ' -f 1) 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 "$AA" > ~/.zen/tag/${AAH}/_tag.uid # Nom du ZenTAG
echo "$ZEN" > ~/.zen/tag/${AAH}/_tag.zen # Tag ZEN amount echo "$ZEN" > ~/.zen/tag/${AAH}/_tag.zen # Tag ZEN amount
echo "${IPFSNODEID}" > ~/.zen/tag/${AAH}/_ipfs.node.creator # NODE IPFS ID 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 "$NODE_G1PUBKEY" > ~/.zen/tag/${AAH}/_g1.node.creator # CREATOR IPFS NODE G1PUBKEY
echo "$ISSUER" > ~/.zen/tag/${AAH}/_g1.issuer # TX ISSUER G1PUBKEY echo "$ISSUER" > ~/.zen/tag/${AAH}/_g1.issuer # TX ISSUER G1PUBKEY
#################################################### ########################################################################
# ${RR} IPNS publishkey CYPHER *BB & **NODE_G1PUBKEY # ${AA}.key IPNS publishkey CYPHER *BB & **NODE_G1PUBKEY
[[ ! -f ~/.ipfs/keystore/${RR} ]] && J=$(ipfs key gen -t rsa -s 2048 ${RR}) ########################################################################
[[ ! -f ~/.ipfs/keystore/${AA}.key ]] && J=$(ipfs key gen -t rsa -s 2048 ${AA}.key)
# WRITE BBH for QRCode BB verification # 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 # 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 # 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" -salt -in file -out file.aes # Encrypt
# openssl aes-256-cbc -k "$BB" -d -salt -in file.aes -out file # Decrypt # openssl aes-256-cbc -k "$BB" -d -salt -in file.aes -out file # Decrypt
# tar zip and encrypt a whole directory # # tar zip and encrypt a whole directory #
# tar -zcf - directory | openssl aes-128-cbc -salt -out directory.tar.gz.aes # Encrypt # tar -zcf - directory | openssl aes-128-cbc -k "$BB" -salt -out directory.tar.gz.aes # Encrypt
# openssl aes-128-cbc -d -salt -in directory.tar.gz.aes | tar -xz -f - # Decrypt # 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 # [[ -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 # [[ -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 # TAG IPFS STORAGE & G1Tag IPNS PUBLISHING
@ -120,19 +148,37 @@ echo "$NANODATE" > ~/.zen/tag/${AAH}/_chain.nanodate # Nanodate notification
# Activate ZenTag CHAIN # Activate ZenTag CHAIN
I=$(ipfs add -qr ~/.zen/tag/${AAH} | tail -n 1) I=$(ipfs add -qr ~/.zen/tag/${AAH} | tail -n 1)
echo "${I}" > ~/.zen/tag/${AAH}/_chain 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 cp -f ~/.zen/tag/${AAH}/_chain ~/.zen/tag/${AAH}/_chain.prev
echo "${I}" > ~/.zen/tag/${AAH}/_chain
# IPFS Hash for Immutable G1tag data # 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 "${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 ### G1TAG PRINT TYPE:DATA:IPNS
#################################################################################### ########################################################################
# READ QRCODE # READ QRCODE
qrencode -s 5 -o ~/.zen/tag/${AAH}/_QRCODE.read.png "RJ:${AAH}#${J}" qrencode -s 5 -o ~/.zen/tag/${AAH}/_QRCODE.read.png "RJ:${AAH}#${J}"
# WRITE QRCODE # WRITE QRCODE
qrencode -s 5 -o ~/.zen/tag/${AAH}/_QRCODE.write.png "BJ:${BB}#${J}" 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 exit 0