mirror of
https://github.com/ail-project/ail-framework.git
synced 2024-11-10 08:38:28 +00:00
49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
|
#!/usr/bin/env python3
|
||
|
# -*-coding:UTF-8 -*
|
||
|
|
||
|
import os
|
||
|
import redis
|
||
|
|
||
|
from hashlib import sha256
|
||
|
|
||
|
import Flask_config
|
||
|
from Correlation import Correlation
|
||
|
|
||
|
r_serv_metadata = Flask_config.r_serv_metadata
|
||
|
|
||
|
digits58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
|
||
|
|
||
|
cryptocurrency = Correlation('cryptocurrency')
|
||
|
|
||
|
def decode_base58(bc, length):
|
||
|
n = 0
|
||
|
for char in bc:
|
||
|
n = n * 58 + digits58.index(char)
|
||
|
return n.to_bytes(length, 'big')
|
||
|
|
||
|
def check_bitcoin_address(bc):
|
||
|
try:
|
||
|
bcbytes = decode_base58(bc, 25)
|
||
|
return bcbytes[-4:] == sha256(sha256(bcbytes[:-4]).digest()).digest()[:4]
|
||
|
except Exception:
|
||
|
return False
|
||
|
|
||
|
def verify_cryptocurrency_address(cryptocurrency_type, cryptocurrency_address):
|
||
|
if cryptocurrency_type == 'bitcoin':
|
||
|
return check_bitcoin_address(cryptocurrency_address)
|
||
|
else:
|
||
|
return True
|
||
|
|
||
|
|
||
|
def get_cryptocurrency(request_dict, cryptocurrency_type):
|
||
|
# basic verification
|
||
|
res = cryptocurrency.verify_correlation_field_request(request_dict, cryptocurrency_type)
|
||
|
if res:
|
||
|
return res
|
||
|
# cerify address
|
||
|
field_name = request_dict.get(cryptocurrency_type)
|
||
|
if not verify_cryptocurrency_address(cryptocurrency_type, field_name):
|
||
|
return ( {'status': 'error', 'reason': 'Invalid Cryptocurrency address'}, 400 )
|
||
|
|
||
|
return cryptocurrency.get_correlation(request_dict, cryptocurrency_type, field_name)
|