From fa7642c93df0493528d1093710069f4500ae9017 Mon Sep 17 00:00:00 2001 From: hueso Date: Mon, 2 Dec 2024 13:56:28 -0300 Subject: [PATCH] signature test --- celcoin.py | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++ test.py | 50 ++++++++++++++++++++++++++++++++++++++++ test_api.py | 55 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 171 insertions(+) create mode 100644 celcoin.py create mode 100755 test.py create mode 100644 test_api.py diff --git a/celcoin.py b/celcoin.py new file mode 100644 index 0000000..e1a26f7 --- /dev/null +++ b/celcoin.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 + +import requests +from dotenv import load_dotenv +from os import getenv +import eth_account +from web3.auto import w3 +from flask import Flask, request, jsonify +from credentials import payload +import json +import pprint + +app = Flask(__name__) + +# Load environment variables from .env file +load_dotenv() +BASEURL = "https://sandbox.openfinance.celcoin.dev" +global headers + +# eb066b56-6864-4ef0-ad2a-6b38d4363185 +@app.route('/api/status/', methods=['GET']) +def sign_message(payment_id): + #message = request.get_data() # extract request data as bytes + api_response = requests.get(BASEURL+payment_id+"/status", headers=headers).text + + from eth_account.messages import encode_defunct + from eth_abi.packed import encode_packed + from Crypto.Hash import keccak + + k = keccak.new(digest_bits=256) + k.update(encode_packed(['string'],[payment_id])) + print('HASHED MESSAGE: ', k.hexdigest()) + + message = encode_defunct(text=k.hexdigest()) + ret = (w3.eth.account.sign_message(message, private_key=getenv('PRIVATE_KEY'))).signature.hex() + print (ret) + return ret + + #message = eth_account.messages.encode_structured_data(api_response) + #signature = eth_account.Account.sign_message(api_response, private_key='0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef').signature.hex() + #signature = (w3.eth.account.sign_message(message, private_key=credentials.private_key)).signature.hex() + + return "bla" + #return jsonify({'signature': signature}), 200 + +if __name__ == '__main__': + url = "https://consumer.sandbox.inic.dev/v1/auth/interface" + + headers = { + "accept": "application/json", + "content-type": "application/json" + } + + response = requests.post(url, json=payload, headers=headers) + + token = json.loads(response.text)['accessToken'] + + headers = { + "accept": "application/json", + "authorization": "Bearer " + token + } + + app.run(debug=True) + + +#pip install flask requests web3 diff --git a/test.py b/test.py new file mode 100755 index 0000000..cd0bc33 --- /dev/null +++ b/test.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 + +from dotenv import load_dotenv +from os import getenv +from eth_account import Account +from eth_account.messages import encode_defunct +from sha3 import keccak_256 +from eth_abi.packed import encode_packed +from eth_utils import to_bytes + +load_dotenv() + + +def signer_check(message, signature): + + message_hash = encode_defunct(message) + signer_address = Account.recover_message(message_hash, signature=signature) + + return signer_address + +signature = 1 + +def sign_message(message, private_key): + account = Account.from_key(private_key) + message_hash = encode_defunct(message) + signature = account.sign_message(message_hash) + return signature.signature.hex() + +def generate_hash(pix_target, amount, pix_timestamp): + # Concatenate the bytes + concatenated_bytes = encode_packed( + ['bytes32', 'uint80', 'uint256'], + [to_bytes(text=pix_target), amount, pix_timestamp]) + + # Return the keccak256 hash + return keccak_256(concatenated_bytes).digest() + +# Example usage +pix_target = '1234' +amount = 10 +pix_timestamp = 162 + +message = generate_hash(pix_target, amount, pix_timestamp) +print("Message:", message.hex()) +signature = sign_message(message, getenv('PRIVATE_KEY')) +print("Signature:", signature) +signer = signer_check(message, signature) +print("Signer: ", signer) +account = Account.from_key(getenv('PRIVATE_KEY')) +print("Account:", account.address) \ No newline at end of file diff --git a/test_api.py b/test_api.py new file mode 100644 index 0000000..a7ecc8d --- /dev/null +++ b/test_api.py @@ -0,0 +1,55 @@ +import requests +from dotenv import load_dotenv +from os import getenv + +# Load environment variables from .env file +load_dotenv() + +url = "https://sandbox.openfinance.celcoin.dev/v5/token" +data = { + "client_id": getenv("CLIENT_ID"), + "grant_type": "client_credentials", + "client_secret": getenv("CLIENT_SECRET"), +} +response = requests.post(url, data=data) +token = response.json()["access_token"] +print("token:", token) + +url = "https://sandbox.openfinance.celcoin.dev/pix/v1/payment/endToEnd" +payload = { "dpp": "2024-11-12" } +headers = { + "accept": "application/json", + "content-type": "application/json", + "authorization": "Bearer " + token +} +response = requests.post(url, json=payload, headers=headers) +e2ee = response.json()["body"]["endToEndId"] +print("e2e:", e2ee) + + +# alternate DICT method for obtaining e2ee +url = "https://sandbox.openfinance.celcoin.dev/pix/v1/dict/v2/key" +payload = { + "payerId": "13935893000370", + "key": "93981962-9505-474d-9899-dcb0be3d40c4" +} +headers = { + "accept": "application/json", + "content-type": "application/json", + "authorization": "Bearer " + token +} +#response = requests.post(url, json=payload, headers=headers) +#print(response.text) + + +url = "https://sandbox.openfinance.celcoin.dev/pix/v1/payment" +payload = { "initiationType": "DICT" } +# headers = { +# "accept": "application/json", +# "content-type": "application/json", +# "authorization": "Bearer $beare" +# } + +# response = requests.post(url, json=payload, headers=headers) + +# print(response.text) \ No newline at end of file