#!/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 ME="${0##*/}" echo ' ######################################################################## # \\/// # qo-op ############# '$ME' ZEN TXHASH PASSENGER READZEN PARKZEN ######################################################################## # ex: ./'$ME' 1000 TEST ./myfile.wav 1 10 # IPFS DATASTRUCTURE ~/.zen/tag/sha256sum(_tag.uid) ######################################################################## __ __ _____ _______/ |________ ____ ______ ____________/ |_ \__ \ / ___/\ __\_ __ \/ _ \\____ \ / _ \_ __ \ __\ / __ \_\___ \ | | | | \( <_> ) |_> > <_> ) | \/| | (____ /____ > |__| |__| \____/| __/ \____/|__| |__| \/ \/ |__| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # [ASTROPORT](https://astroport.com) ######################################################################## ' ZEN="$1" # Zen amount TXHASH="$2" # G1 TX HASH PASSENGER="$3" # /path/file.ext to include into ZenTag (add to IPFS datastructure) READ="$4" # Zen amount asked to allow passenger reading PARK="$5" # Zen amount payed for IPFS PIN by passenger everyday [[ $READ == "" ]] && READ=1 [[ $PARK == "" ]] && PARK=10 [[ $ZEN == "" || $TXHASH == "" ]] && exit 1 ############################################## # NODE ENVIRONEMENT DETECTION ############################################## IPFSNODEID=$(ipfs id -f='\n') [[ ! -f ~/.ssb/secret.dunikey ]] && $MY_PATH/tools/secret2dunikey.sh NODE_G1PUBKEY=$(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) ######################################################################## # 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.creatorcat # NODE IPFS ID # _ipfs.publishkey.BB.aes # BB SYMcypher of IPNS publish key # _ipfs.publishkey.crypt # G1SSB ASYMcypher of IPNS publish key # _tag.BB.sha # BB sha512sum # _tag.uid # ZenTag UID # _tag.zen # ZentTag balance # _ipns # /ipns/ address # PASSENGER FILE OPTIONNAL # _passenger.filename # Passenger filename # _passenger.ipfs.crypt # G1SSB cyphered IPFS Passenger link # _passenger.read # Zen value asked for READING # _passenger.park # Zen value paid for PARKING # TODO: Could be converted into yaml or json if you like ######################################################################## # UNCOMMENT TO ACTIVATE (G1 <=> ZEN) STRICT RELATION #[[ ! -f ~/.zen/scan/zen.$TXHASH ]] && echo "ERROR# UNKNOWN TX $TXHASH !!" && exit 1 #ISSUER=$(cat ~/.zen/scan/zen.$TXHASH) #[[ $ISSUER == "" ]] && echo "ERROR# NO ISSUER FOUND FOR TX $TXHASH !!" && exit 1 ######################################################################## # CREATE ZEN TAG => name AA + key BB => ~/.zen/tag/${AAH} ######################################################################## 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 # Create Unique Zentag for all IPFS SWARM! while [[ $(grep -Rwl "$AA" ~/.zen/ipfs_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 WRITE ACTION BB=$($MY_PATH/tools/diceware.sh 4 | xargs); BBH=$(echo -n "$BB" | sha512sum | cut -d ' ' -f 1) ######################################################################## # 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 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 ######################################################################## # ${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.BB.sha # BB pgp symetric publishkey 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/${AA}.key -o ~/.zen/tag/${AAH}/_ipfs.publishkey.crypt ####################################################################### # Symetric Encrypt and Decrypt with openssl # openssl aes-256-cbc -pbkdf2 -k "$BB" -salt -in file -out file.aes # Encrypt # openssl aes-256-cbc -pbkdf2 -k "$BB" -d -salt -in file.aes -out file # Decrypt # tar.gz and encrypt a whole directory # # tar -zcf - directory | openssl aes-128-cbc -pbkdf2 -k "$BB" -salt -out directory.tar.gz.aes # Encrypt # openssl aes-128-cbc -pbkdf2 -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.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 # FILE ZEN ECONOMY echo "$READ" > ~/.zen/tag/${AAH}/_passenger.read echo "$PARK" > ~/.zen/tag/${AAH}/_passenger.park fi echo " ################################################################## # READ PASSENGER $PASSENGERNAME :: READ=$READ, PARK=$PARK Zen # 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/$IPASSENGER/$PASSENGERNAME && vlc /tmp/$PASSENGERNAME 2>/dev/null # 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 ########################################################### 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 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 ${AA}.key --quieter /ipfs/${I}) echo "${J}" > ~/.zen/tag/${AAH}/_ipns # REPORT ZenTag to SWARM mkdir -p ~/.zen/ipfs/.$IPFSNODEID/TAG/ echo "${AA}" > ~/.zen/ipfs/.$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/ipfs/.$IPFSNODEID/TAG ##################################################################" ######################################################################## exit 0