这是一个Python库,可以帮助您在Sygna桥生态系统中构建服务器/服务。

sygna-bridge-util的Python项目详细描述


Python Sygna桥Util

这是一个Python库,可以帮助您在Sygna Bridge生态系统中构建服务器/服务。有关详细信息,请参见Sygna Bridge。在

安装

pip install sygna-bridge-util

密码

在Sygna网桥中处理编码、解码、签名和验证。在

编码解码的ECIES

在vasp的通信过程中,有一些私人信息需要加密。我们使用ECIES(椭圆曲线集成加密方案)对这些私有数据进行安全加密,使其只能被接收者访问。在

^{pr2}$

签署并验证

在Sygna Bridge中,我们在utf-8json字符串的sha256上使用secp256k1 ECDSA来为每个API调用创建签名。由于在验证期间需要提供相同的utf-8字符串,所以放入对象中的键值对的顺序非常重要。在

下面的示例是premissionRequestAPI调用的发起人签名过程的片段。如果您将密钥transaction放在对象中的private_info之前,验证将在中央服务器中失败。在

transaction={"originator_vasp":{"vasp_code":"VASPUSNY1","addrs":[{"address":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","addr_extra_info":[]}]},"beneficiary_vasp":{"vasp_code":"VASPUSNY2","addrs":[{"address":"rAPERVgXZavGgiGv6xBgtiZurirW2yAmY","addr_extra_info":[{"tag":"abc"}]}]},"currency_id":"sygna:0x80000090","amount":"4.51120135938784"}data_dt="2019-07-29T06:28:00Z"# using sign_data to get a valid signed object (with signature attached)data_to_sign={"private_info":private_info,"transaction":transaction,"data_dt":data_dt}sygna_bridge_util.crypto.sign_data(data_to_sign,originator_private_key)valid=sygna_bridge_util.crypto.verify_data(obj,originator_public_Key)# or you can use the method that's built for `transfer` request:signed_data=sygna_bridge_util.crypto.sign_permission_request(data_to_sign,originator_private_key)valid=sygna_bridge_util.crypto.verify_data(signed_data,originator_public_Key)

我们提供了不同的方法,如sign_permission_requestsign_callback()来对我们在api文档中指定的不同对象(或参数)进行签名。您还可以在以下部分找到更多示例。在

美国石油学会

API调用与Sygna Bridge服务器通信。在

我们在所有API调用中使用baisc auth。为了简化过程,我们提供了一个API类来处理身份验证和post/get请求格式。在

sb_server = "https://api.sygna.io/"
sb_api_instance = sygna_bridge_util.API("api-key", sb_server)

创建API实例后,可以使用它进行任何API调用,以与Sygna Bridge中央服务器通信。在

获取VASP信息

# Get List of VASPs associated with public keys.verify=True# set verify to true to verify the signature attached with api response automatically.vasps=sb_api_instance.get_vasp_list(verify)# Or call use get_vasp_public_key() to directly get public key for a specific VASP.public_key=sb_api_instance.get_vasp_public_key("10298",verify)

对于发起人

transaction originator到协议中定义的Sygna Bridge服务器有两个API调用,post_permission_request和{}。在

发起者的完整逻辑如下:

# originator.pyprivate_sender_info={"originator":{"name":"Antoine Griezmann","date_of_birth":"1991-03-21"},"beneficiary":{"name":"Leo Messi"}}recipient_public_key=sb_api_instance.get_vasp_public_key("10298")private_info=sygna_bridge_util.crypto.sygna_encrypt_private_data(private_sender_info,recipient_public_key)transaction={"originator_vasp":{"vasp_code":"VASPUSNY1","addrs":[{"address":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","addr_extra_info":[]}]},"beneficiary_vasp":{"vasp_code":"VASPUSNY2","addrs":[{"address":"rAPERVgXZavGgiGv6xBgtiZurirW2yAmY","addr_extra_info":[{"tag":"abc"}]}]},"currency_id":"sygna:0x80000090","amount":"4.51120135938784"}data_dt="2019-07-29T07:29:80Z"data_to_sign={"private_info":private_info,"transaction":transaction,"data_dt":data_dt}transfer_data=sygna_bridge_util.crypto.sign_permission_request(data_to_sign,sender_privKey)callback_url="https://81f7d956.ngrok.io/v2/originator/transaction/premission"callback_data=sygna_bridge_util.crypto.sign_callback({"callback_url":callback_url},sender_privKey)response=sb_api_instance.post_permission_request({"data":transfer_data,"callback":callback_data})# Boradcast your transaction to blockchain after got and api reponse at your api server.txid="1a0c9bef489a136f7e05671f7f7fada2b9d96ac9f44598e1bcaa4779ac564dcd"# Inform Sygna Bridge that a specific transfer is successfully broadcasted to the blockchain.send_tx_id_data=sygna_bridge_util.crypto.sign_transaction_id({"transfer_id":response["transfer_id"],"txid":txid},sender_privKey)post_tx_id_response=sb_api_instance.post_transaction_id(send_tx_id_data)

受益人

受益人VASP只有一个api可以调用,即post_permission。在收款服务器确认传输请求的合法性后,他们将使用sign_permission()函数对{ transfer_id, permission_status }进行签名,并将签名结果发送给Sygna Bridge中心服务器。在

permission_status="ACCEPTED"# or "REJECTED"permission_data=sygna_bridge_util.crypto.sign_permission({"transfer_id":response["transfer_id"],"permission_status":permission_status},beneficiary_private_key)finalresult=sb_api_instance.post_permission(permission_data)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java w.a.UsernamePasswordAuthenticationFilter:尝试对用户进行身份验证时发生内部错误(错误11759)   如何使用Java的3D库?   java我怎样才能知道JitsiMeetActivity是否存在?   java从类路径加载DLL   amazon s3如何使用java在s3中组合策略?   java无法使gwtsyncproxy工作   java如何列出所有默认音乐播放器并打开一个   如何为java调用程序声明返回类型为“void”的Kotlin Lambda?   java RDBMS结果缓存与应用程序级缓存?   java实例化抽象类解决方案   java如何在JWebUnit和JUnit4中使用JUnitPerf?   java getClass()在枚举中使用构造函数时打印二进制格式   在Java中解密defuse/phpencryption Crypto::encryptWithPassword()   java从命令行运行RefactoringMiner   java阻止某些图形重新绘制   在gradle中有两个或多个根的java构建多模块项目