#!/bin/bash ######################################################################## # 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) # 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 # 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 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 # 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 #################################################### # ${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 ########################################################### # 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 # 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 # 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}" ### 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}" exit 0