这是一个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如何从同步请求中获取响应代码   具有深度复制的类中的Java oop getter/setter   java LDAP“简单”用户身份验证(JNDI Tomcat)不稳定?   java将Jenkins jnlp代理设置为通过API以编程方式使用WebSocket   java如何获取在servlet筛选器的静态块中启动的静态类的实例?   前两个数字的java charAt循环不能循环它   java在Spring引导执行器中是否有检查子服务运行状况的标准方法?   java我可以将jacksonmapped@JsonProperties推到“顶层”吗?   json JAVA:opencsv随机读取CSV单元格   无第三方应用程序的java捆绑包JRE   使用openidConnectClient功能的WAS Liberty中出现java无效cookie标头错误   java如何在Restful Web服务中从Http Post获取数组?   java如何读取安卓开发的JSON url?   如何在java IO中打开包含汉字的文件?