Created
September 27, 2018 14:35
-
-
Save rootmos/30fda04f0eba9d6a583bf21b9b18e965 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -o errexit | |
set -o pipefail | |
SCRIPT_DIR=$(readlink -f $0 | xargs dirname) | |
. $SCRIPT_DIR/lib.sh | |
owner "$1" | openssl dgst -binary -sha256 | bin_to_base64_url |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -o errexit | |
SCRIPT_DIR=$(readlink -f $0 | xargs dirname) | |
. $SCRIPT_DIR/lib.sh | |
JSON=$1 | |
OUT=$2 | |
extract() { | |
jq -r .$1 $JSON | base64_url_to_bin | xxd -p -c 1000000000 | |
} | |
openssl asn1parse -genconf - -noout -out $2.der <<EOF | |
asn1=SEQUENCE:private_key | |
[private_key] | |
version=INTEGER:0 | |
modulus=INTEGER:0x$(extract n) | |
publicExponent=INTEGER:0x$(extract e) | |
privateExponent=INTEGER:0x$(extract d) | |
prime1=INTEGER:0x$(extract p) | |
prime2=INTEGER:0x$(extract q) | |
exponent1=INTEGER:0x$(extract dp) | |
exponent2=INTEGER:0x$(extract dq) | |
coefficient=INTEGER:0x$(extract qi) | |
EOF | |
openssl rsa -in $2.der -inform DER -outform PEM -out $2 | |
rm $2.der |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
bin_to_base64_url() { | |
openssl base64 -A | tr '+/' '-_' | tr -d '=' | |
} | |
# https://raw.githubusercontent.com/Moodstocks/moodstocks-api-clients/master/bash/base64url.sh | |
decode() { | |
_l=$((${#1} % 4)) | |
if [ $_l -eq 2 ]; then _s="$1"'==' | |
elif [ $_l -eq 3 ]; then _s="$1"'=' | |
else _s="$1" ; fi | |
echo "$_s" | tr '_-' '/+' | openssl enc -d -a -A | |
} | |
base64_url_to_bin() { | |
decode $(tr -- '-_' '+/') | |
} | |
modulus() { | |
openssl rsa -in $1 -modulus -noout | cut -f2 -d= | |
} | |
owner() { | |
modulus "$1" | xxd -p -r | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -o errexit | |
set -o pipefail | |
SCRIPT_DIR=$(readlink -f $0 | xargs dirname) | |
. $SCRIPT_DIR/lib.sh | |
KEY=$1 | |
TARGET=$2 | |
QUANTITY=$3 | |
HOST=${HOST-arweave4.internal.nodes.upvest.co:1984} | |
WORKDIR=$(mktemp -d tx.XXXX) | |
SIGNING_DATA=$WORKDIR/signing_data | |
SIGNATURE=$WORKDIR/signature | |
REQUEST=$WORKDIR/request.json | |
trap "rm -r $WORKDIR" EXIT | |
calculate_reward() { | |
curl --silent --fail $HOST/price/0/$TARGET | |
} | |
last_tx() { | |
curl --silent --fail $HOST/wallet/$1/last_tx | |
} | |
sign() { | |
openssl pkeyutl -sign \ | |
-inkey "$1" \ | |
-in <(openssl dgst -binary -sha256 < "$2") \ | |
-out "$3" \ | |
-pkeyopt digest:sha256 \ | |
-pkeyopt rsa_padding_mode:pss \ | |
-pkeyopt rsa_pss_saltlen:20 | |
} | |
LAST_TX=$(last_tx $($SCRIPT_DIR/address "$KEY")) | |
OWNER=$(owner "$KEY" | bin_to_base64_url) | |
REWARD=$(calculate_reward) | |
owner "$KEY" > $SIGNING_DATA | |
echo "$TARGET" | base64_url_to_bin >> $SIGNING_DATA | |
echo -n "$QUANTITY" >> $SIGNING_DATA | |
echo -n "$REWARD" >> $SIGNING_DATA | |
echo $LAST_TX | base64_url_to_bin >> $SIGNING_DATA | |
sign "$KEY" $SIGNING_DATA $SIGNATURE | |
ID=$(openssl dgst -binary -sha256 $SIGNATURE | bin_to_base64_url) | |
cat > $REQUEST <<EOF | |
{ | |
"id": "$ID", | |
"last_tx": "$LAST_TX", | |
"data": "", | |
"owner": "$OWNER", | |
"target": "$TARGET", | |
"quantity": "$QUANTITY", | |
"reward": "$REWARD", | |
"signature": "$(bin_to_base64_url < $SIGNATURE)" | |
} | |
EOF | |
tr -d ' \t\n\r\f' < $REQUEST | curl --silent -X POST -H "content-type: application/json" -d@- $HOST/tx > /dev/null | |
echo $ID |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment