Exemplo n.º 1
0
def elgamal():
    #伪随机数生成器
    random_generator = Random.new().read
    #生成elgamal Key
    elgKey = ElGamal.generate(256, random_generator)
    #生成私钥
    while 1:
        alpha = random.StrongRandom().randint(1, elgKey.p - 1)
        if GCD(alpha, elgKey.p - 1) == 1:
            break

    h = mod(elgKey.g, alpha, elgKey.p)
    message = [33, 14, 22, 62, 00, 17, 4, 62, 24, 14, 20, 66]
    print('message: ', message)
    #加密过程
    #1.随机选择整数y
    y = random.StrongRandom().randint(1, elgKey.p - 1)
    #2.计算c1
    c1 = mod(elgKey.g, y, elgKey.p)
    #3.计算s
    s = mod(h, y, elgKey.p)
    #4.对message进行加密
    ciphertext = [(m * s) % (elgKey.p) for m in message]
    print('ciphetext: ', ciphertext)

    #解密过程
    #1.通过c1计算得到s
    de_s = mod(c1, alpha, elgKey.p)
    #2.获得明文
    x, y, r = ex_gcd(elgKey.p, de_s)
    s_reverse = y % (elgKey.p)
    if s_reverse < 0:
        s_reverse += elgKey.p
    plaintext = [(m * s_reverse) % (elgKey.p) for m in ciphertext]
    print('plaintext: ', plaintext)
Exemplo n.º 2
0
 def _test_random_key(self, bits):
     elgObj = ElGamal.generate(bits, Random.new().read)
     self._check_private_key(elgObj)
     self._exercise_primitive(elgObj)
     pub = elgObj.publickey()
     self._check_public_key(pub)
     self._exercise_public_primitive(elgObj)
Exemplo n.º 3
0
 def _test_random_key(self, bits):
     elgObj = ElGamal.generate(bits, Random.new().read)
     self._check_private_key(elgObj)
     self._exercise_primitive(elgObj)
     pub = elgObj.publickey()
     self._check_public_key(pub)
     self._exercise_public_primitive(elgObj)
Exemplo n.º 4
0
def get_key():
	key = ElGamal.generate(256, get_random_bytes)
	comps = ('p','g','y','x')
	out = '\n'.join(["{} = {}".format(comp,getattr(key, comp)) for comp in comps])
	with open('./key', 'w+') as k:
		k.write(out)
	key.set_key(user, out['y'],out['x'])
	return key
Exemplo n.º 5
0
def generate_ElGamal_key(keysize):
    """
    Genera una clave ElGamal del tamaño especificado.

    :param keysize: El tamaño de la clave.

    :returns: Una clave ElGamal.
    """
    return ElGamal.generate(keysize, Random.new().read)
Exemplo n.º 6
0
def elgamal_reg(usr, name, sex_zh, unit, title):
    
    # Database connection
    conn = MySQLdb.connect(
            host='localhost',
            user='******',
            passwd='123456',
            db='project',
            charset='utf8'
            )

    cur = conn.cursor()
    
    # Gender transfer
    if sex_zh == u'男':
        sex = 0
    elif sex_zh == u'女':
        sex = 1
    
    # Unit transfer  
    sql_unit = "SELECT * FROM unit WHERE unit_name = '%s'" % unit
    cur.execute(sql_unit)
    result_unit = cur.fetchall()
    unitid = result_unit[0][0] 
             
    # Avoid duplication
    sql_search = "SELECT * FROM users WHERE loginid = '%s'" % usr
    
    if cur.execute(sql_search) == 0L:
    
        # Insert into database
        sql = "insert into users(loginid, pass_word, name, sex, unitid, title) values('%s', '', '%s', '%d', '%d', '%s')" % (usr, name, sex, unitid, title) 
        cur.execute(sql)
        conn.commit()
        cur.close()
        conn.close()
        
        # Key generation
        key = ElGamal.generate(256, Random.new().read)

        # Key data
        p = key.p
        g = key.g
        y = key.y
        x = key.x

        
        # Save user's public key
        f = open('auth/elgamal/keys/%s.pub' % usr,'w')
        f.write(str(p) + ' ' + str(g) + ' ' + str(y))
        f.close()  
        
        return 1, p, g, y, x
    
    # Registeration failed
    else:
        return 2, 0, 0, 0, 0
Exemplo n.º 7
0
def generateKeyPair(keySize):
    privateKey = ElGamal.generate(keySize, Random.new().read)
    privateKey.x = int(privateKey.x)
    privateKey.y = int(privateKey.y)
    privateKey.p = int(privateKey.p)
    privateKey.g = int(privateKey.g)
    publicKey = privateKey.publickey()
    publicKey.p = int(publicKey.p)
    publicKey.g = int(publicKey.g)
    return privateKey, publicKey
Exemplo n.º 8
0
def pyCrypto():
    import Crypto
    from Crypto.Cipher import AES, DES, DES3, ARC2, ARC4, Blowfish, CAST, PKCS1_v1_5, PKCS1_OAEP, XOR
    from Crypto.PublicKey import ElGamal

    Crypto.Cipher.AES.new()  # Noncompliant
    Crypto.Other.AES.new()  # OK
    AES.new(key=key)  # Noncompliant
    DES.new(key=key)  # Noncompliant
    DES3.new(key=key)  # Noncompliant
    ARC2.new(key=key)  # Noncompliant
    ARC4.new(key=key)  # Noncompliant
    Blowfish.new(key=key)  # Noncompliant
    CAST.new(key=key)  # Noncompliant
    PKCS1_v1_5.new(key=key)  # Noncompliant
    PKCS1_OAEP.new(key=key)  # Noncompliant
    XOR.new(key=key)  # Noncompliant

    ElGamal.generate(key_size)  # Noncompliant
Exemplo n.º 9
0
def generate_elgamal_keypair():
    """Return an ElGamal object with newly generated keypair"""
    if 'SFLVAULT_IN_TEST' in os.environ:
        print "WARNING: IN TEST MODE, EVERY KEYPAIR GENERATION IS BYPASSED AND USES A PRE-GENERATED AND WORLD-KNOWN KEYPAIR. REMOVE 'SFLVAULT_IN_TEST' FROM YOUR ENVIRONMENT IF YOU ARE DOING THIS ON PRODUCTION"
        eg = ElGamal.ElGamalobj()
        keys = [(177089723724552644256797243527295142469255734138493329314329932362154457094059269514887621456192343485606008571733849784882603220703971587460034382850082611103881050702039214183956206957248098956098183898169452181835193285526486693996807247957663965314452283162788463761928354944430848933147875443419511844733534867714246125293090881680286010834371853006350372947758409794906981881841508329191534306452090259107460058479336274992461969572007575859837L, 2368830913657867259423174096782984007672147302922056255072161233714845396747550413964785336340342087070536608406864241095864284199288769810784864221075742905057068477336098276284927890562488210509136821440679916802167852789973929164278286140181738520594891315446533462206307248550944558426698389577513200698569512147125339722576147002382255876258436727504192479647579172625910816774587488928783787624267035610900290120258307919121453927670441700811482181614216947L, 5861471316007038922650757021308043193803646029154275389954930654765928019938681282006482343772842302607960473277926921384673235972813815577111985557701858831111694263179407993690846841997398288866685890418702914928188654979371728552059661796422031090374692580710906447170464105162673344042938184790777466702148445760745296149876416417949678454708511011740073066144877868339403040477747772225977519821312965207L, 1169412825199936698700035513185825593893938895474876750007859746409857305379860678064015124546593449912724002752383066585681624318254362438491372548721947497497739043831382430104856590871057670575051579668363576657397472353061812950884556034822611307705562237354213497368218843244103113882159981178841442771150519161251285978446459307942619668439466357674240712609844734284943761543870187004331653216116937988266963743961096619840352159665738163357566198583064435L),
                (363126185715790250119395282425017818083421673278440118808474954552806007436370887232958142538070938460903011757636551318850215594111019699633958587914824512339681573953775134121488999147928038505883131989323638021781157246124428000084118138446325126739005521403114471077697023469488488105229388102971903306007555362613775010306064798678761753948810755236011346132218974049446116094394433461746597812371697367173395113014824646850943586174124632464143L, 1989666736598081965365973787349938627625613245335951894925228395719349924579514682166704542464221001327015131231101009506582078440087637470784673000661958376397578391397303146171320274531265903747455382524598808613766406694744319576824028880703970997080651320662468590292703565426391011134523391035995750230341849776175803186815053305823053143914398318121693692044542134832809759905437953710838534372887584358442203447387293183908262967797038874535690090799742911L, 133850088107174975861015682594827971956767368440585898108600141692889215241539178575381178799995195531301157505453120993980045956642227472649664668888717884598815932243844750408878011387532720932159839454554017574665882963054750224693505390054364096154711586190837517112644639757613967217614109546151313073865262488626822109764294618345504453742784825659007630866924661811701179640013729327586347L, 742665583685283032188129474839034185107068199926583417281240975739235100098517297493350864258177674271267050862217567671938790648634008735784684115797768392310253433978502694449565453913758801583487678024491118014887051643096970952295790434950566748516670079663712282848262006606082748685002561868381598918739708181310245226480020229450553192469536632519293406262550081671717685585065331112633947328611250435010734072352883491446355872734313855711051794348490960L)]
        eg.g, eg.p, eg.x, eg.y = keys[random.randint(0, 1)]
        return eg
    # Otherwise, generate, really :)
    return ElGamal.generate(1536, randfunc)
Exemplo n.º 10
0
def pyCrypto():
    import Cryptodome
    from Cryptodome.Cipher import AES, ChaCha20, DES, DES3, ARC2, ARC4, Blowfish, CAST, PKCS1_v1_5, PKCS1_OAEP, ChaCha20_Poly1305, Salsa20
    from Cryptodome.PublicKey import ElGamal

    Cryptodome.Cipher.AES.new()  # Noncompliant
    Cryptodome.Other.AES.new()  # OK
    AES.new(key=key)  # Noncompliant
    ChaCha20.new(key=key)  # Noncompliant
    DES.new(key=key)  # Noncompliant
    DES3.new(key=key)  # Noncompliant
    ARC2.new(key=key)  # Noncompliant
    ARC4.new(key=key)  # Noncompliant
    Blowfish.new(key=key)  # Noncompliant
    CAST.new(key=key)  # Noncompliant
    PKCS1_v1_5.new(key=key)  # Noncompliant
    PKCS1_OAEP.new(key=key)  # Noncompliant
    ChaCha20_Poly1305.new(key=key)  # Noncompliant
    Salsa20.new(key=key)  # Noncompliant

    ElGamal.generate(key_size)  # Noncompliant
Exemplo n.º 11
0
def keygen(keyfile):
    key = ElGamal.generate(1024, Random.new().read)
    comps_priv = ('p', 'g', 'y', 'x')
    comps_pub = ('p', 'g', 'y')

    out = ",".join(["{}".format(getattr(key, comp)) for comp in comps_priv])
    with open(keyfile, 'w') as key_file:
        key_file.write(out)

    out = ",".join(["{}".format(getattr(key, comp)) for comp in comps_pub])
    with open(keyfile + ".pub", 'w') as key_file:
        key_file.write(out)
Exemplo n.º 12
0
def generate_elgamal(klength, privatekey):
    key = ElGamal.generate(klength, Random.new().read)
    h = SHA.new(privatekey).digest()
    while 1:
        k = random.StrongRandom().randint(1,key.p-1)
        if GCD(k, key.p-1) == 1: break
    sig = key.sign(h,k)
    if key.verify(h,sig):
        print "OK"
        return key, h , sig
    else:
        print "Incorrect signature"
        return None
Exemplo n.º 13
0
 def initiate_DH(self):
     # send first DH parameter to all users
     print 'Generating Diffie-Hellman parameters'
     self.DH_params = ElGamal.generate(p_size, Random.new().read)
     print 'Generated'
     params_string = str(self.DH_params.y) + '|' + str(
         self.DH_params.g) + '|' + str(self.DH_params.p)
     DH_msg1 = DH_INIT + '|' + params_string
     self.process_outgoing_message(msg_raw=DH_msg1,
                                   originates_from_console=False)
     self.symm_key = number.long_to_bytes(
         random.StrongRandom().getrandbits(128))
     self.save_symm_key()
Exemplo n.º 14
0
def make_key_objects(pub_algorithm_type, key_size):
    if pub_algorithm_type == 17:
        secret_key = DSA.generate(key_size)
    elif pub_algorithm_type in (1, 3):
        secret_key = RSA.generate(key_size)
    elif pub_algorithm_type == 20:
        # TODO: This should not be allowed except for testing purposes.
        # XXX: This can take a really long time
        secret_key = ElGamal.generate(key_size, Random.new().read)
    else:
        # TODO: complete
        raise ValueError

    public_key = secret_key.publickey()
    return secret_key, public_key
Exemplo n.º 15
0
def make_key_objects(pub_algorithm_type, key_size):
    if pub_algorithm_type == 17:
        secret_key = DSA.generate(key_size)
    elif pub_algorithm_type in (1, 3):
        secret_key = RSA.generate(key_size)
    elif pub_algorithm_type == 20:
        # TODO: This should not be allowed except for testing purposes.
        # XXX: This can take a really long time
        secret_key = ElGamal.generate(key_size, Random.new().read)
    else:
        # TODO: complete
        raise ValueError

    public_key = secret_key.publickey()
    return secret_key, public_key
Exemplo n.º 16
0
    def init_with(self, key_size, repr_file='elg.cry'):
        self.key_size = self.key_sizes[key_size]
        self.private_key = ElGamal.generate(self.key_size, Random.new().read)
        self.public_key = self.private_key.publickey()
        self.p = self.public_key.p
        io_util.elg_key_to_file('pub_' + repr_file, self.public_key,
                                self.key_size)
        io_util.elg_key_to_file('priv_' + repr_file,
                                self.private_key,
                                self.key_size,
                                private=True)

        self.sign_key = cip_PKCS1.new(self.private_key)
        self.verify_key = cip_PKCS1.new(self.public_key)
        self.private_key = cip_PKCS1.new(self.private_key)
        self.public_key = cip_PKCS1.new(self.public_key)
Exemplo n.º 17
0
    def subscribe(self):
        print "Subscribing please wait..."
        self.rsa = RSA_gen(4096)
        self.n, self.e, self.d = RSA_keys(self.rsa)
        self.ElGkey = ElGamal.generate(256, Random.new().read)

        self.rsa_sign = RSA_gen(1024)
        self.n_sign, self.e_sign, self.d_sign = RSA_keys(self.rsa_sign)

        self.ust = UST(self.server_pk_n, self.server_pk_e)
        self.ust_lock.acquire()
        self.ust.prepare()

        args = {
            "blinded_nonce": self.ust.blinded_nonce,
            "client_username": self.username,
            "client_pk_n": self.n,
            "client_pk_e": self.e,
            "client_sign_pk_n": self.n_sign,
            "client_sign_pk_e": self.e_sign
        }

        r = send_request(SUBSCRIBE, args)

        if r == ERROR:
            print "ERROR: could not subscribe"
            sys.exit(0)

        self.ust.receive(r['blinded_sign'])
        self.ust_lock.release()

        user = r['user']

        if user['client_pk_n'] == self.n and user['client_pk_e'] == self.e \
            and user['client_sign_pk_n'] == self.n_sign \
            and user['client_sign_pk_e'] == self.e_sign:
            pass
        else:
            print "Username is taken, please try again"
            sys.exit(0)

        self.user_id = user['client_user_id']
        self.user_table_ptr = 0
        self.client_new_conversations_table_ptr = 0

        return
Exemplo n.º 18
0
def elgamal(message):
    """
    Randomly generate a fresh, new ElGamal key.
    The key will be safe for use for both encryption and signature.
    """
    key = ElGamal.generate(1024, Random.new().read)
    while 1:
        k = random.StrongRandom().randint(1, key.p - 1)

        if GCD(k, key.p - 1) == 1:
            break
    """Encrypts and decrypts the message"""
    e = key.encrypt(message, k)
    d = key.decrypt(e)

    print('encrypted message: {}'.format(e))
    print('decrypted message: {}'.format(d))
Exemplo n.º 19
0
    def setUpClass(cls):
        cls.A = ''.join(random.choice(string.ascii_letters) for _ in range(12))
        cls.B = ''.join(random.choice(string.ascii_letters) for _ in range(12))
        keyA = ElGamal.generate(cls.NUM_BITS, Random.new().read)
        with open(cls.A, 'w') as f:
            f.write(export_elgamal_key(keyA))
        with open(cls.A + '.pub', 'w') as f:
            f.write(export_elgamal_key(keyA.publickey()))

        x = random.randint(1 + 1, keyA.p - 1 - 1)
        y = pow(keyA.g, x, keyA.p)
        tup = (keyA.p, keyA.g, y, x)
        keyB = ElGamal.construct(tup)
        with open(cls.B, 'w') as f:
            f.write(export_elgamal_key(keyB))
        with open(cls.B + '.pub', 'w') as f:
            keyB = ElGamal.construct(tup)
            f.write(export_elgamal_key(keyB.publickey()))
Exemplo n.º 20
0
    def subscribe(self):
        print "Subscribing please wait..."
        self.rsa = RSA_gen(4096)
        self.n, self.e, self.d = RSA_keys(self.rsa)
        self.ElGkey = ElGamal.generate(256, Random.new().read)

        self.rsa_sign = RSA_gen(1024)
        self.n_sign, self.e_sign, self.d_sign = RSA_keys(self.rsa_sign)

        self.ust = UST(self.server_pk_n, self.server_pk_e)
        self.ust_lock.acquire()
        self.ust.prepare()

        args = {"blinded_nonce"     :  self.ust.blinded_nonce, 
                "client_username"   :  self.username,
                "client_pk_n"       :  self.n, 
                "client_pk_e"       :  self.e,
                "client_sign_pk_n"  :  self.n_sign,
                "client_sign_pk_e"  :  self.e_sign}
        
        r = send_request(SUBSCRIBE, args)

        if r == ERROR:
            print "ERROR: could not subscribe"
            sys.exit(0)

        self.ust.receive(r['blinded_sign'])
        self.ust_lock.release()

        user = r['user']

        if user['client_pk_n'] == self.n and user['client_pk_e'] == self.e \
            and user['client_sign_pk_n'] == self.n_sign \
            and user['client_sign_pk_e'] == self.e_sign:
            pass
        else:
            print "Username is taken, please try again"
            sys.exit(0)

        self.user_id = user['client_user_id']
        self.user_table_ptr = 0
        self.client_new_conversations_table_ptr = 0

        return
Exemplo n.º 21
0
 def verify_cipher_suite(self, cipher, data):
     ciphers = cipher.split('-')
     print ciphers[0]
     if ciphers[0] == 'ECDHE':
         pass
     elif ciphers[0] == 'ElGamal':
         key = ElGamal.generate(1024, Random.new().read)
         h = SHA.new(data).digest()
         while 1:
             k = random.StrongRandom().randint(1, key.p - 1)
             if GCD(k, key.p - 1) == 1:
                 break
         sig = key.sign(h, k)
         #
         if key.verify(h, sig):
             print "OK"
         else:
             print "Incorrect signature"
     else:
         pass
Exemplo n.º 22
0
def generate_elgamal_keypair():
    """Return an ElGamal object with newly generated keypair"""
    if 'SFLVAULT_IN_TEST' in os.environ:
        print "WARNING: IN TEST MODE, EVERY KEYPAIR GENERATION IS BYPASSED AND USES A PRE-GENERATED AND WORLD-KNOWN KEYPAIR. REMOVE 'SFLVAULT_IN_TEST' FROM YOUR ENVIRONMENT IF YOU ARE DOING THIS ON PRODUCTION"
        eg = ElGamal.ElGamalobj()
        keys = [
            (177089723724552644256797243527295142469255734138493329314329932362154457094059269514887621456192343485606008571733849784882603220703971587460034382850082611103881050702039214183956206957248098956098183898169452181835193285526486693996807247957663965314452283162788463761928354944430848933147875443419511844733534867714246125293090881680286010834371853006350372947758409794906981881841508329191534306452090259107460058479336274992461969572007575859837L,
             2368830913657867259423174096782984007672147302922056255072161233714845396747550413964785336340342087070536608406864241095864284199288769810784864221075742905057068477336098276284927890562488210509136821440679916802167852789973929164278286140181738520594891315446533462206307248550944558426698389577513200698569512147125339722576147002382255876258436727504192479647579172625910816774587488928783787624267035610900290120258307919121453927670441700811482181614216947L,
             5861471316007038922650757021308043193803646029154275389954930654765928019938681282006482343772842302607960473277926921384673235972813815577111985557701858831111694263179407993690846841997398288866685890418702914928188654979371728552059661796422031090374692580710906447170464105162673344042938184790777466702148445760745296149876416417949678454708511011740073066144877868339403040477747772225977519821312965207L,
             1169412825199936698700035513185825593893938895474876750007859746409857305379860678064015124546593449912724002752383066585681624318254362438491372548721947497497739043831382430104856590871057670575051579668363576657397472353061812950884556034822611307705562237354213497368218843244103113882159981178841442771150519161251285978446459307942619668439466357674240712609844734284943761543870187004331653216116937988266963743961096619840352159665738163357566198583064435L
             ),
            (363126185715790250119395282425017818083421673278440118808474954552806007436370887232958142538070938460903011757636551318850215594111019699633958587914824512339681573953775134121488999147928038505883131989323638021781157246124428000084118138446325126739005521403114471077697023469488488105229388102971903306007555362613775010306064798678761753948810755236011346132218974049446116094394433461746597812371697367173395113014824646850943586174124632464143L,
             1989666736598081965365973787349938627625613245335951894925228395719349924579514682166704542464221001327015131231101009506582078440087637470784673000661958376397578391397303146171320274531265903747455382524598808613766406694744319576824028880703970997080651320662468590292703565426391011134523391035995750230341849776175803186815053305823053143914398318121693692044542134832809759905437953710838534372887584358442203447387293183908262967797038874535690090799742911L,
             133850088107174975861015682594827971956767368440585898108600141692889215241539178575381178799995195531301157505453120993980045956642227472649664668888717884598815932243844750408878011387532720932159839454554017574665882963054750224693505390054364096154711586190837517112644639757613967217614109546151313073865262488626822109764294618345504453742784825659007630866924661811701179640013729327586347L,
             742665583685283032188129474839034185107068199926583417281240975739235100098517297493350864258177674271267050862217567671938790648634008735784684115797768392310253433978502694449565453913758801583487678024491118014887051643096970952295790434950566748516670079663712282848262006606082748685002561868381598918739708181310245226480020229450553192469536632519293406262550081671717685585065331112633947328611250435010734072352883491446355872734313855711051794348490960L
             )
        ]
        eg.g, eg.p, eg.x, eg.y = keys[random.randint(0, 1)]
        return eg
    # Otherwise, generate, really :)
    return ElGamal.generate(1536, randfunc)
Exemplo n.º 23
0
def test(module):
    m = b"Hello! Welcome to 6260 Applied Cryptography :)"

    # p = 2q + 1, both p, q is prime
    elg = ElGamal.generate(256, Random.new().read)

    (r, s), k = sign(elg, m)
    q = (elg.p - 1) // 2

    adv_x, adv_k = module.A({
        "p": int(elg.p),
        "q": int(q),
        "s": s,
        "r": r,
        "y": int(elg.y),
        "h": SHA1.new(m).hexdigest(),
        "g": int(elg.g),
        "m": m.decode()
    })

    return {
        "status": "success" if elg.x % q == adv_x and k == adv_k else "failure"
    }
Exemplo n.º 24
0
def gen(args):
    name = unicode(raw_input("Please enter your preferred username: "))
    with open('identity', 'w') as f:
        f.write(name.encode('utf-8'))
    if args.key_size:
        el_gamal = ElGamal.generate(args.key_size, Random.new().read)
    elif args.parameter_from:
        parameters = [
            int(value) for value in args.parameter_from.read().splitlines()
        ]
        assert len(parameters) >= 2
        p = parameters[0]
        g = parameters[1]
        x = random.randint(1 + 1, p - 1 - 1)
        y = pow(g, x, p)
        el_gamal = ElGamal.construct((p, g, y, x))
    else:
        raise RuntimeError

    with open(name, 'w') as f:
        f.write(export_elgamal_key(el_gamal))
    with open(name + '.pub', 'w') as f:
        f.write(export_elgamal_key(el_gamal.publickey()))
Exemplo n.º 25
0
    def test_elgamal(self):
        '''Test ElGamal algorithm'''
        # Based on
        # http://stackoverflow.com/questions/4232389/signing-and-verifying-data-using-pycrypto-rsa

        # Generates a fresh public/private key pair
        key = ElGamal.generate(1024, os.urandom)

        # Sign the hash
        K = getPrime(128, os.urandom)
        while GCD(K, key.p - 1) != 1:
            K = getPrime(128, os.urandom)

        signature = key.sign(self.hash, K)

        # Get public key
        pubkey = key.publickey()

        result = 'Could not verify signature'
        self.assertTrue(pubkey.verify(self.hash, signature), result)

        result = 'Succesfully verified bad hash!!'
        self.assertFalse(pubkey.verify(self.hash[:-1], signature), result)
Exemplo n.º 26
0
def generate_elgamal_keypair():
    """Return an ElGamal object with newly generated keypair"""
    return ElGamal.generate(1536, randfunc)
Exemplo n.º 27
0
    return r


def findQR(p):
    r = Crypto.Random.random.randrange(2, p - 1)
    return pow(r, 2, p)


"""
    Main
"""

if __name__ == '__main__':
    try:
        while True:
            key = ElGamal.generate(512, Random.new().read)
            runs = 1000
            successful_tries = 0

            send_message('(y, p) = ({0}, {1})'.format(key.y, key.p))

            for i in xrange(runs):
                plaintexts = dict()
                plaintexts[0] = findQNR(key.p)
                plaintexts[1] = findQR(key.p)

                challenge_bit = Crypto.Random.random.randrange(0, 2)
                eprint('[{0}][INFO] Bit {1} was generated.'.format(
                    time.strftime("%Y-%m-%d. %H:%M:%S"), challenge_bit))
                r = Crypto.Random.random.randrange(1, key.p - 1)
                challenge = key.encrypt(plaintexts[challenge_bit], r)
Exemplo n.º 28
0
 def gen_key(self):
     self.key = CryptoElGamal.generate(self.key_size, Random.new().read)
Exemplo n.º 29
0
 def genk(self):
     self.k = ElGamal.generate(self.bits, Random.new().read)
     return self.k
Exemplo n.º 30
0
 def generate_key(cls, bitlength):
     key = ElGamal.generate(bitlength, Random.new().read)
     return cls(key)
Exemplo n.º 31
0
def keyGen(security):
    key = ElGamal.generate(2 * security, Random.new().read)

    return key
Exemplo n.º 32
0
from Crypto.PublicKey import ElGamal
from Crypto import Random

import cPickle as Pickle

v_priv_key = ElGamal.generate(128, Random.new().read)
v_pub_key = v_priv_key.publickey()

s_priv_key = ElGamal.generate(128, Random.new().read)
s_pub_key = s_priv_key.publickey()

Pickle.dump(v_priv_key, open("vending_key.priv", 'w'))
Pickle.dump(v_pub_key, open("vending_key.pub", 'w'))
Pickle.dump(s_priv_key, open("server_key.priv", 'w'))
Pickle.dump(s_pub_key, open("server_key.pub", 'w'))
Exemplo n.º 33
0
 def __init__(self, length):
     self.key = ElGamal.generate(length, Random.new().read)
     self.p = self.key.p
     self.g = self.key.g
     self.h = self.key.y
     self.x = self.key.x
Exemplo n.º 34
0
from os.path import dirname, isfile, join
from Crypto import Random
from Crypto.PublicKey import ElGamal

BASE_DIR = dirname(__file__)

MASTER_NODE = "100.100.100.111:8000"
NODES = ["100.100.%s.10:8000" % i for i in range(1, 11)]
NODES.insert(0, MASTER_NODE)

KEY_FILE = "key.dat"
if isfile(join(BASE_DIR, KEY_FILE)):
    with open(join(BASE_DIR, KEY_FILE)) as f:
        PRIVATE_KEY = f.read()
else:
    key = ElGamal.generate(1024, Random.new().read)
    PRIVATE_KEY = ",".join(map(str, [key.p, key.g, key.y, key.x]))
    with open(join(BASE_DIR, KEY_FILE), "w") as f:
        f.write(PRIVATE_KEY)

MAX_CODE_SIZE = 4096

INTERVAL = 15

PORT = 8000

DB_SETTINGS = {
    "host": "db",
    "database": "smoothychain",
    "user": "******",
    "password": "******"
Exemplo n.º 35
0
def decode_message(m):
    return number.long_to_bytes(m)

def encrypt(m):
    pt = encode_message(m)
    return pubkey.encrypt(pt, K)

def recvline(req):
    buf = b""
    while not buf.endswith(b"\n"):
        buf += req.recv(1)
    return buf

print("Now generating keys...")

privkey = ElGamal.generate(384, urandom)
pubkey = privkey.publickey()
(p, g, y) = (pubkey.p, pubkey.g, pubkey.y)


K = number.getPrime(128, urandom)
while number.GCD(K, p-1) != 1:
    print("[-] K not relatively prime with {}".format(p-1))
    K = number.getPrime(128, urandom)

print("Encrypting FLAG...")

c1, c2 = encrypt(FLAG)

print("Done!")
Exemplo n.º 36
0
 def gen_key(self, key_len=4096):
     self.key = ElGamal.generate(key_len, Random.new().read)
Exemplo n.º 37
0
args = parser.parse_args()
print int(args.k)


def exp_and_sqr(m, sk, mod_N):
    r = 1
    bits = "{0:b}".format(sk)
    for i, bit in enumerate(bits):
        if bit == '1':
            r = (((r**2) * m) % mod_N)
        else:
            r = ((r**2) % mod_N)
    return r % mod_N


key = El.generate(int(args.k), Random.new().read)
#key=El.generate(2048, Random.new().read)
print "p is: ", int(key.p)
print "g is: ", int(key.g)
#print "sk is: ", int(key.x)
#print "pk is: ", int(key.y)

#print "============"
#print exp_and_sqr(int(key.g), int(key.x), int(key.p))
p = int(key.p)
g = int(key.g)
sk = int(key.x)
pk = int(key.y)
bastion = {}
bastion['p'] = p
bastion['g'] = g
Exemplo n.º 38
0
 def __init__(self):
     super(ELGamal, self).__init__()
     self.key = ElGamal.generate(1024, Random.new().read)
     self.k = random.StrongRandom().randint(1, self.key.p - 1)
Exemplo n.º 39
0
 def genk(self):
     self.k = ElGamal.generate(self.bits, Random.new().read)
     return self.k
Exemplo n.º 40
0
from Crypto.Hash import SHA
import ast
import numpy as np
import matplotlib.pyplot as plt
from array import *
from datetime import datetime
import time

plt.rc('font', family='Verdana')
entime = array('d')
detime = array('d')
x = np.arange(1, 100, 1)

for i in range(1, 100):
    random_generator = Random.new().read
    key = ElGamal.generate(24, Random.new().read)  #generate pub and priv key

    publickey = key.publickey()  # pub key export for exchange

    msg = "InternetofThingsIoTis the future"
    first = datetime.now().microsecond
    encrypted = publickey.encrypt(msg, 32)
    delta = (datetime.now().microsecond - first)
    entime.append(delta)
    time.sleep(0.001)

    #decrypted code below
    first = datetime.now().microsecond
    decrypted = key.decrypt(ast.literal_eval(str(encrypted)))
    delta = (datetime.now().microsecond - first)
    detime.append(delta)
Exemplo n.º 41
0

# Take the private input from Alice
x = int(input("Enter your integer: "))
# If the number is negative exit the system
if x < 0:
    sys.exit("You entered a negative number")
# Calculate the binary and then reverse the binary string
# for ease of indexing
x = bin(x)[2:]
x = x[::-1]

# Generate the Elgamal key and print the time requires to do so

start = time()
key = ElGamal.generate(256, Random.new().read)
print("Time taken to generate the key:", time() - start, "seconds")

# Prepare a 2 x n table named T
# T[xi, i] = E(1)
# T[xi', i] = E(r)
T0 = []
T1 = []
for i in range(len(x)):
    while 1:
        k = random.StrongRandom().randint(1, key.p - 1)
        if GCD(k, key.p - 1) == 1:
            break
    r = random.StrongRandom().randint(1, key.p - 1)
    if x[i] == '0':
        T0.append(key.encrypt(1, k))