def decrypt(message, kg, dk, decrypter = Rabbit): '''Decrypt a message using temp. public key kg and private key dk''' bits, d = dk try: bits, cn, n, cp, cq, g = get_curve(bits) except KeyError: raise ValueError, "Key size %s not implemented" % bits sg = mulp(cp, cq, cn, kg, d) # shared secret d*(k*G) = k*d*G return decrypter(enc_long(sg[0])).decrypt(message)
def decrypt(message, kg, dk, decrypter=Rabbit): '''Decrypt a message using temp. public key kg and private key dk''' bits, d = dk try: bits, cn, n, cp, cq, g = get_curve(bits) except KeyError: raise ValueError, "Key size %s not implemented" % bits sg = mulp(cp, cq, cn, kg, d) # shared secret d*(k*G) = k*d*G return decrypter(enc_long(sg[0])).decrypt(message)
def encrypt(message, qk, encrypter = Rabbit): '''Encrypt a message using public key qk => (ciphertext, temp. pubkey)''' bits, q = qk try: bits, cn, n, cp, cq, g = get_curve(bits) if not n: raise ValueError, "Key size %s not suitable for encryption" % bits except KeyError: raise ValueError, "Key size %s not implemented" % bits k = random.randint(1, n - 1) # temporary private key k kg = mulp(cp, cq, cn, g, k) # temporary public key k*G sg = mulp(cp, cq, cn, q, k) # shared secret k*Q = k*d*G return encrypter(enc_long(sg[0])).encrypt(message), kg
def encrypt(message, qk, encrypter=Rabbit): '''Encrypt a message using public key qk => (ciphertext, temp. pubkey)''' bits, q = qk try: bits, cn, n, cp, cq, g = get_curve(bits) if not n: raise ValueError, "Key size %s not suitable for encryption" % bits except KeyError: raise ValueError, "Key size %s not implemented" % bits k = random.randint(1, n - 1) # temporary private key k kg = mulp(cp, cq, cn, g, k) # temporary public key k*G sg = mulp(cp, cq, cn, q, k) # shared secret k*Q = k*d*G return encrypter(enc_long(sg[0])).encrypt(message), kg