Payment IDs can now be deterministic or non-deterministic

Also add a site salt to create them, so a given user ID will yield
different payment IDs for different sites.
This commit is contained in:
moneromooo
2015-03-09 18:46:55 +00:00
parent fa581fac00
commit 5daa9d89fc
3 changed files with 25 additions and 12 deletions
+4 -3
View File
@@ -33,18 +33,19 @@ import redisdb
import payment
class Monero:
def __init__(self,daemon_host,daemon_port,wallet_host,wallet_port,redis_host,redis_port):
def __init__(self,daemon_host,daemon_port,wallet_host,wallet_port,redis_host,redis_port,site_salt):
redisdb.connect_to_redis(redis_host,redis_port)
self.daemon_host=daemon_host
self.daemon_port=daemon_port
self.wallet_host=wallet_host
self.wallet_port=wallet_port
self.site_salt=site_salt
def GetWalletBalance(self):
return utils.RetrieveWalletBalance(self.wallet_host,self.wallet_port)
def GetPaymentID(self,recipient):
return utils.GetPaymentIDFromUserID(recipient)
def GetPaymentID(self,recipient,deterministic=True):
return utils.GetPaymentIDFromUserID(recipient,deterministic,self.site_salt)
def GetRecipient(self,payment_id):
return utils.GetUserIDFromPaymentID(payment_id)
+9 -4
View File
@@ -34,6 +34,7 @@ import json
import httplib
import time
import string
from Crypto.Random.random import getrandbits
from decimal import *
from log import log_error, log_warn, log_info, log_log
from redisdb import *
@@ -45,11 +46,15 @@ cached_wallet_balance=None
cached_wallet_unlocked_balance=None
cached_wallet_balance_timestamp=None
def GetPaymentIDFromUserID(user_id):
salt="nveuweaiirv-"
p = hashlib.sha256(salt+user_id).hexdigest()
def GetPaymentIDFromUserID(user_id,deterministic,site_salt=''):
salt="nveuweaiirv-"+site_salt+'-'
if deterministic:
s = salt + user_id
else:
s = salt + str(getrandbits(128)) + '-' + user_id
p = hashlib.sha256(s).hexdigest()
try:
redis_hset("paymentid",p,link.identity())
redis_hset("paymentid",p,user_id)
except Exception,e:
log_error('GetPaymentIDFromUserID: failed to set payment ID for %s to redis: %s' % (user_id,str(e)))
return p