Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import socket
- import hashlib
- import random
- def powMod (n ,power ,mod):
- res=1
- while power>0:
- if (power&1):
- res = (res * n) % mod
- n = (n * n) % mod
- power>>=1
- return res
- def gcd(a, b):
- while b:
- a, b = b, a%b
- return a
- def egcd(a, b):
- if a == 0:
- return (b, 0, 1)
- else:
- g, y, x = egcd(b % a, a)
- return g, x - (b // a) * y, y
- def modinv(a, m):
- g, x, y = egcd(a, m)
- if g != 1:
- raise Exception ('modular inverse does not exist')
- else :
- return x % m
- def number2hashnum(number):
- tNumber = number
- hashObj = hashlib.sha256()
- byteNumber = bytearray()
- while tNumber > 0:
- byteNumber.append(tNumber & 0xFF)
- tNumber >>= 8
- byteNumber.reverse()
- hashObj.update(byteNumber)
- hash = hashObj.digest()
- hashArray = bytearray(hash)
- hashNumber = 0
- hashArray.reverse()
- length = len(hashArray)
- i = 0
- while i<length :
- hashNumber += hashArray[i] << (i * 8)
- i += 1
- return hashNumber
- def parseMessageTo2Ints(message):
- message = message.decode()
- message = message.split(' ')
- return int(message[0]), int(message[1])
- def createVote(answer):
- R = ((random.getrandbits(128)) << 20) | answer #R'
- h = number2hashnum(R)
- return R, h
- def blindSignPrepare(N, h, D):
- X = random.getrandbits(512)
- while (gcd(X,N) != 1 or X < 3):
- X = random.getrandbits(512)
- h_ = (powMod(X, D, N) * h) % N
- return h_, X
- def secretManupulations(S_, X, N):
- Xinv = modinv(X, N)
- return (S_ * Xinv % N)
- connSock = socket.socket()
- print("Введите адрес сервера:")
- IP_ADDRESS = input()
- connSock.connect((IP_ADDRESS,9090))
- message = connSock.recv(2048)
- N, D = parseMessageTo2Ints(message)
- message = connSock.recv(2048)
- print("Введите номер для голосования")
- R, h = createVote(int(input()))
- h_, X = blindSignPrepare(N,h,D)
- connSock.send(str(h_).encode())
- message = connSock.recv(2048)
- signedHash = secretManupulations(int(message.decode()),X,N)
- connSock.close()
- connSock = socket.socket()
- connSock.connect((IP_ADDRESS,9091))
- connSock.send((str(R)+' '+str(signedHash)).encode())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement