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
################################################################################
########################################################################
# 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"

View File

@ -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='<id>\n')
[[ $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)
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

View File

@ -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='<id>\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