Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _3user():
eA = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
pA = nacl.crypto_scalarmult_curve25519_base(eA)
print "A public: \t%s\nA exp: \t%s" % (b85encode(pA), b85encode(eA))
eB = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
pB = nacl.crypto_scalarmult_curve25519_base(eB)
print "B public: \t%s\nB exp: \t%s" % (b85encode(pB), b85encode(eB))
eC = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
pC = nacl.crypto_scalarmult_curve25519_base(eC)
print "C public: \t%s\nC exp: \t%s" % (b85encode(pC), b85encode(eC))
print
pAB = nacl.crypto_scalarmult_curve25519(eB, pA)
print "public AB", b85encode(pAB)
pBA = nacl.crypto_scalarmult_curve25519(eA, pB)
print "public BA", b85encode(pBA)
pCA = nacl.crypto_scalarmult_curve25519(eA, pC)
print "public CA", b85encode(pCA)
print
key = nacl.crypto_scalarmult_curve25519(eB, pCA)
print "key: \t%s" % (b85encode(key))
key = nacl.crypto_scalarmult_curve25519(eC, pBA)
print "key: \t%s" % (b85encode(key))
key = nacl.crypto_scalarmult_curve25519(eC, pAB)
def _2user():
# 1st user
exp1 = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
public1 = nacl.crypto_scalarmult_curve25519_base(exp1)
#print "public1: \t%s\nexp1: \t%s" % (b85encode(public1), b85encode(exp1))
print
# 2nd user
exp2 = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
public2 = nacl.crypto_scalarmult_curve25519_base(exp2)
key = nacl.crypto_scalarmult_curve25519(exp2, public1)
print "key: \t%s" % (b85encode(key))
#print "public2: \t%s\nkey: \t%s" % (b85encode(public2), b85encode(key))
print
# 1st user completing DH
key = nacl.crypto_scalarmult_curve25519(exp1, public2)
print "key: \t%s" % (b85encode(key))
def _2user():
# 1st user
exp1 = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
public1 = nacl.crypto_scalarmult_curve25519_base(exp1)
#print "public1: \t%s\nexp1: \t%s" % (b85encode(public1), b85encode(exp1))
print
# 2nd user
exp2 = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
public2 = nacl.crypto_scalarmult_curve25519_base(exp2)
key = nacl.crypto_scalarmult_curve25519(exp2, public1)
print "key: \t%s" % (b85encode(key))
#print "public2: \t%s\nkey: \t%s" % (b85encode(public2), b85encode(key))
print
# 1st user completing DH
key = nacl.crypto_scalarmult_curve25519(exp1, public2)
print "key: \t%s" % (b85encode(key))
# generate e_out
self.e_out = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
elif self.out_k == ('\0' * nacl.crypto_secretbox_KEYBYTES):
# only for the very first packet necessary
# we explicitly need to generate e_out
self.e_out = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
#else: # axolotlize
# print 'axolotl!'
# self.out_k = nacl.crypto_generichash(self.out_k,
# nacl.crypto_scalarmult_curve25519(self.me_id.cs, self.peer_id.cp),
# nacl.crypto_scalarmult_curve25519_BYTES)
# compose packet
dh1 = nacl.crypto_scalarmult_curve25519_base(self.e_out)
dh2 = (nacl.crypto_scalarmult_curve25519_base(self.e_in)
if self.e_in != ('\0' * nacl.crypto_scalarmult_curve25519_BYTES)
else ('\0' * nacl.crypto_scalarmult_curve25519_BYTES))
plain = ''.join((dh1, dh2, plain))
# encrypt the whole packet
return self.encrypt(plain)
def dh1_handler():
# provides a high level interface to start a DH key exchange
exp = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
public = nacl.crypto_scalarmult_curve25519_base(exp)
return (exp, public)
# generate e_out
self.e_out = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
elif self.out_k == ('\0' * nacl.crypto_secretbox_KEYBYTES):
# only for the very first packet necessary
# we explicitly need to generate e_out
self.e_out = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
#else: # axolotlize
# print 'axolotl!'
# self.out_k = nacl.crypto_generichash(self.out_k,
# nacl.crypto_scalarmult_curve25519(self.me_id.cs, self.peer_id.cp),
# nacl.crypto_scalarmult_curve25519_BYTES)
# compose packet
dh1 = nacl.crypto_scalarmult_curve25519_base(self.e_out)
dh2 = (nacl.crypto_scalarmult_curve25519_base(self.e_in)
if self.e_in != ('\0' * nacl.crypto_scalarmult_curve25519_BYTES)
else ('\0' * nacl.crypto_scalarmult_curve25519_BYTES))
plain = ''.join((dh1, dh2, plain))
# encrypt the whole packet
return self.encrypt(plain)
def dh2_handler(peer):
# provides a high level interface to receive a DH key exchange
# request peer contains the public component generated by the peer
# when initiating an DH exchange
exp = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
public = nacl.crypto_scalarmult_curve25519_base(exp)
secret = nacl.crypto_scalarmult_curve25519(exp, peer)
return (public, secret)
def mpecdh1(self, keyring = []):
self.key = nacl.randombytes(nacl.crypto_scalarmult_curve25519_BYTES)
keyring = [nacl.crypto_scalarmult_curve25519(self.key, public)
for public in keyring]
keyring.append(nacl.crypto_scalarmult_curve25519_base(self.key))
if len(keyring) == int(self.peers): # we are last, remove our own secret
self.secret = keyring[0]
keyring = keyring[1:]
return keyring