astroport/zen/zen_MAKE.sh

139 lines
6.3 KiB
Bash
Raw Normal View History

2020-03-18 01:47:10 +01:00
#!/bin/bash
2020-03-20 04:06:36 +01:00
########################################################################
# Author: Fred (support@qo-op.com)
# Version: 2020.03.18
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
########################################################################
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
########################################################################
# \\///
# qo-op
#############
##########################
########################################################################
# ./zen_MAKE.sh $ZEN $TXHASH
# Create ~/.zen/tag/... & IPNS key publish
########################################################################
########################################################################
# ZenTag is an IPFS/IPNS datastructure put into IPFS, publish
# ~~~ Draft ~~~~
# _chain # ZenTag IPFS Hash
# _chain.n # Sequence Number
# _chain.nanodate # Current nanodate
# _chain.prev # Previous IPFS Hash
# _g1.node.creator # G1SSB wallet pubkey
# _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
# _tag.uid # ZenTag UID
# _tag.zen # ZentTag balance
# 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)
2020-03-18 01:47:10 +01:00
2020-03-20 04:06:36 +01:00
# G1TX HASH CONTROL
[[ ! -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
2020-03-18 01:47:10 +01:00
2020-03-20 04:06:36 +01:00
# IPFSNODEID
########################################################################
2020-03-18 01:47:10 +01:00
IPFSNODEID=$(ipfs id -f='<id>\n')
2020-03-20 04:06:36 +01:00
########################################################################
2020-03-19 13:09:54 +01:00
2020-03-20 04:06:36 +01:00
# ~/.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)
########################################################################
2020-03-18 01:47:10 +01:00
2020-03-20 04:06:36 +01:00
# CREATE ZEN TAG : name AA + key BB
########################################################################
AA=$($MY_PATH/tools/diceware.sh 6 | xargs); # ZenTag Name = Diceware 6 words
AAH=$(echo -n ${AA} | sha256sum | cut -d ' ' -f 1) # ZenTag Name SHA256
2020-03-18 01:47:10 +01:00
2020-03-20 04:06:36 +01:00
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
2020-03-18 01:47:10 +01:00
2020-03-20 04:06:36 +01:00
# PASSWORD FOR HUMAN 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
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
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
2020-03-18 01:47:10 +01:00
2020-03-20 04:06:36 +01:00
####################################################
# ${RR} IPNS publishkey CYPHER *BB & **NODE_G1PUBKEY
[[ ! -f ~/.ipfs/keystore/${RR} ]] && J=$(ipfs key gen -t rsa -s 2048 ${RR})
# WRITE BBH for QRCode BB verification
echo "$BBH" > ~/.zen/tag/${AAH}/_tag.B.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}
# 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
#######################################################################
# TODO 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
#######################################################################
[[ -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
2020-03-18 01:47:10 +01:00
2020-03-20 04:06:36 +01:00
###########################################################
# TAG IPFS STORAGE & G1Tag IPNS PUBLISHING
###########################################################
NANODATE=$(date -u +%s%N)
echo "0" > ~/.zen/tag/${AAH}/_chain.n # Tag modification number (0 first)
echo "$NANODATE" > ~/.zen/tag/${AAH}/_chain.nanodate # Nanodate notification
2020-03-18 01:47:10 +01:00
2020-03-20 04:06:36 +01:00
# Activate ZenTag CHAIN
I=$(ipfs add -qr ~/.zen/tag/${AAH} | tail -n 1)
echo "${I}" > ~/.zen/tag/${AAH}/_chain
cp -f ~/.zen/tag/${AAH}/_chain ~/.zen/tag/${AAH}/_chain.prev
2020-03-18 01:47:10 +01:00
2020-03-20 04:06:36 +01:00
# IPFS Hash for Immutable G1tag data
J=$(ipfs name publish -k ${RR} --quieter /ipfs/${I})
echo "${J}" > ~/.zen/tag/${AAH}/_ipns
echo "ZenTag Done check it with :: ipfs ls /ipns/${J}"
2020-03-18 01:47:10 +01:00
2020-03-19 13:09:54 +01:00
### G1TAG PRINT TYPE:DATA:IPNS
2020-03-20 04:06:36 +01:00
####################################################################################
# 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}"
exit 0