Exemple #1
0
def authenticating_server():
    client_id = request.headers.get('id')
    print('Request from Client ID ' + str(client_id))
    client = Clients.query.filter_by(id=client_id).scalar()

    if not client:
        return make_response('Client not valid, dropping connection', 400)

    tgs = TGS.query.filter_by(is_available=1).scalar()

    if not tgs:
        return make_response('Client not valid, dropping connection', 400)

    client_secret_key = hashlib.md5(client.password.encode('utf-8'))
    print(client_secret_key)
    global tgs_secret_key
    tgs_secret_key = hashlib.md5(tgs.password.encode('utf-8'))

    sk1 = "".join(
        random.choice(string.ascii_uppercase + string.ascii_lowercase +
                      string.digits) for _ in range(16))
    print("Session key 1 " + sk1)
    encryption_obj = AES.new(client_secret_key.hexdigest().encode(),
                             AES.MODE_CBC,
                             client_secret_key.hexdigest()[:16].encode())
    # encrypted_sk1 = encryption_obj.encrypt(sk1)

    life_span = 1000
    tgt = "".join(
        str(client_id) + ' ' + str(request.remote_addr) + ' ' +
        str(life_span) + ' ' + str(datetime.now()) + ' ' + sk1)
    print("Generating TGT")
    print(tgt)
    encryption_obj = AES.new(tgs_secret_key.hexdigest().encode(), AES.MODE_CBC,
                             tgs_secret_key.hexdigest()[:16].encode())
    padded_tgt = Padding.appendPadding(tgt, AES.block_size, mode='CMS')
    encrypted_tgt = encryption_obj.encrypt(padded_tgt)

    response = {"sk1": sk1, "tgt": base64.b64encode(encrypted_tgt).decode()}
    encryption_obj = AES.new(client_secret_key.hexdigest().encode(),
                             AES.MODE_CBC,
                             client_secret_key.hexdigest()[:16].encode())
    padded_response = Padding.appendPadding(json.dumps(response),
                                            AES.block_size,
                                            mode='CMS')
    encrypted_response = encryption_obj.encrypt(padded_response)

    print(response)
    return make_response(
        {'data': base64.b64encode(encrypted_response).decode()}, 200)
Exemple #2
0
def tgs():
    data = request.headers
    encrypted_authenticator = base64.b64decode(data.get('authenticator'))
    encrypted_tgt = base64.b64decode(data.get('tgt'))

    decryption_obj = AES.new(tgs_secret_key.hexdigest().encode(), AES.MODE_CBC,
                             tgs_secret_key.hexdigest()[:16].encode())
    tgt = decryption_obj.decrypt(encrypted_tgt).decode()
    sk1 = tgt.split(' ')[-1]
    sk1 = sk1[:16]

    decryption_obj = AES.new(sk1, AES.MODE_CBC, sk1)
    authenticator = decryption_obj.decrypt(
        encrypted_authenticator).decode().strip()[1:]

    if (tgt.split(' ')[0] != authenticator.split(' ')[0]) or (
            tgt.split(' ')[1] != authenticator.split(' ')[1]):
        return make_response('Client not valid, dropping connection', 400)

    sk2 = "".join(
        random.choice(string.ascii_uppercase + string.ascii_lowercase +
                      string.digits) for _ in range(16))
    print("Session key 2 " + sk2)
    service_ticket = "".join(
        str(tgt.split(' ')[0]) + ' ' + str(tgt.split(' ')[1]) + ' ' +
        str(datetime.now()) + ' ' + sk2)
    print("Generating Service ticket")
    print(service_ticket)

    encryption_obj = AES.new(server_secret_key.hexdigest().encode(),
                             AES.MODE_CBC,
                             server_secret_key.hexdigest()[:16].encode())
    padded_service_ticket = Padding.appendPadding(service_ticket,
                                                  AES.block_size,
                                                  mode='CMS')
    encrypted_service_ticket = encryption_obj.encrypt(padded_service_ticket)

    response = {
        "sk2": sk2,
        "service_ticket": base64.b64encode(encrypted_service_ticket).decode()
    }
    encryption_obj = AES.new(sk1, AES.MODE_CBC, sk1)
    padded_response = Padding.appendPadding(json.dumps(response),
                                            AES.block_size,
                                            mode='CMS')
    encrypted_response = encryption_obj.encrypt(padded_response)

    print(response)
    return make_response(
        {'data': base64.b64encode(encrypted_response).decode()}, 200)
 def encrypt_header(self):
     key = "@xyzprinting.com"
     iv = chr(0) * 16
     aes = AESCipher(key, mode=MODE_CBC, IV=iv)
     text = self.gcode.header_text
     header = Padding.appendPadding(text)
     return aes.encrypt(header)
    def encrypt(self):
        key = "@[email protected]"
        iv = chr(0) * 16
        aes = AESCipher(key, mode=MODE_ECB, IV=iv)
        fulltext = self.gcode.text
        padded = Padding.appendPadding(fulltext)
        enc_text = aes.encrypt(padded)

        magic = "3DPFNKG13WTW"
        magic2 = struct.pack("8B", 1, 2, 0, 0, 0, 0, 18, 76)
        blanks = chr(0) * 4684
        tag = "TagEJ256"
        magic3 = struct.pack("4B", 0, 0, 0, 68)
        crc32 = binascii.crc32(enc_text)
        crcstr = struct.pack(">l", crc32)
        encrypted_header = self.encrypt_header()
        bio = BytesIO()
        bio.write(magic)
        bio.write(magic2)
        bio.write(blanks)
        bio.write(tag)
        bio.write(magic3)
        bio.write(crcstr)
        bio.write((chr(0) * (68 - len(crcstr))))
        log.debug("Length of encrypted header: {}".format(
            len(encrypted_header)))
        if len(encrypted_header) > (8192 - bio.tell()):
            log.error("Header is too big to fit file format!")
        bio.write(encrypted_header)
        left = 8192 - bio.tell()
        bio.write((chr(0) * left))
        bio.write(enc_text)
        return bio.getvalue()
Exemple #5
0
def encrypt(plaintext='', key=llave, iv=vector):
    if plaintext != '':
        plaintext = Padding.appendPadding(plaintext,
                                          blocksize=Padding.AES_blocksize,
                                          mode=0)
        encobj = AES.new(key, AES.MODE_OFB, iv)
        return (binascii.b2a_base64(encobj.encrypt(plaintext)))
    else:
        return plaintext
Exemple #6
0
def encrypt(key, plaintext):
    assert key

    if plaintext == "":
        return ""

    aes = AES.new(key, AES.MODE_CBC, b"Polychart AES IV")
    padded = Padding.appendPadding(plaintext)
    cipherbytes = aes.encrypt(padded)
    return urlsafe_b64encode(cipherbytes)
Exemple #7
0
def encrypt(key, plaintext):
  assert key

  if plaintext == "":
    return ""

  aes = AES.new(key, AES.MODE_CBC, b"Polychart AES IV")
  padded = Padding.appendPadding(plaintext)
  cipherbytes = aes.encrypt(padded)
  return urlsafe_b64encode(cipherbytes)
Exemple #8
0
 def encrypt(self, data):  # TODO
     import Padding
     output = ''
     passwd = CONFIG.master_passwd
     # now, encrypt
     padded_data = Padding.appendPadding(data)
     iv = ''.join(chr(random.randint(0, 0xff)) for i in range(16))  # random vector
     encryptor = AES.new(hashlib.sha256(passwd).digest(), AES.MODE_CBC, iv)
     size = len(data)
     output += iv
     output += encryptor.encrypt(padded_data)
     return output
Exemple #9
0
 def encrypt(self, data):  # TODO
     import Padding
     output = ''
     passwd = CONFIG.master_passwd
     # now, encrypt
     padded_data = Padding.appendPadding(data)
     iv = ''.join(chr(random.randint(0, 0xff))
                  for i in range(16))  # random vector
     encryptor = AES.new(hashlib.sha256(passwd).digest(), AES.MODE_CBC, iv)
     size = len(data)
     output += iv
     output += encryptor.encrypt(padded_data)
     return output
Exemple #10
0
def talker():
    pub = rospy.Publisher('chatter1', String, queue_size=10)
    rospy.init_node('talker_new', anonymous=True)
    rate = rospy.Rate(50) # 10hz
    a = ""
    for i in range(0,size):
        a = a + "a"
    rospy.loginfo(sys.getsizeof(a))
    while not rospy.is_shutdown():
        a = ""
        for i in range(0,size):
            a = a + "a"
        time = rospy.get_time()
        hello_str = str(encrypt(Padding.appendPadding(a,mode='CMS'), key, AES.MODE_CBC, salt)) + "|" + str(time)
        rospy.loginfo(hello_str)
        pub.publish(hello_str)
Exemple #11
0
def cipherBlock(tag):

    if tag not in block.keys():
        return redirect(url_for('index'))

    from base64 import b64encode, b64decode
    tmp, src, dest, key, iv = '', '', '', b'', b''

    if request.method == 'POST':
        tmp = src = request.form['src']
        key = request.form['key'].encode()
        iv = request.form['iv'].encode()
        mode = request.form['mode']
        padding = request.form['padding']
        c = block[str(tag)]

        try:
            if mode == 'ECB' or mode == 'CBC' or mode == 'CFB':
                src = Padding.appendPadding(src, c.block_size, padding)
            cipher = c.new(key, cipherMode[mode], iv)
            if 'encrypt' in request.url:
                dest = cipher.encrypt(src.encode())
                dest = b64encode(dest).decode()
            else:
                src = b64decode(src.encode())
                dest = cipher.decrypt(src).decode()
                dest = Padding.removePadding(dest)
        except Exception as e:
            dest = e

    if 'encrypt' in request.url:
        return render_template('cipherBlock.html',
                               tag=escape(tag.upper()),
                               flag='Encrypt',
                               src=escape(tmp),
                               dest=escape(dest),
                               key=escape(key.decode()),
                               iv=escape(iv.decode()))

    else:
        return render_template('cipherBlock.html',
                               tag=escape(tag.upper()),
                               flag='Decrypt',
                               src=escape(tmp),
                               dest=escape(dest),
                               key=escape(key.decode()),
                               iv=escape(iv.decode()))
Exemple #12
0
 def handleSendChat(self):
     if self.serverStatus == 0:
         self.setStatus("Set server address first")
         return
     msg = self.chatVar.get().replace(' ', ' ').encode('cp1252')
     iv = '0123456789ABCDEF'
     senha = 'secretkey'
     senha1 = hashlib.sha256(senha).digest()
     aes1 = AES.new(senha1, AES.MODE_CFB, iv)
     plaintext = Padding.appendPadding(msg,
                                       blocksize=Padding.AES_blocksize,
                                       mode=0)
     cipher_text = aes1.encrypt(plaintext)
     if msg == '':
         return
     self.addChat("me", msg)
     for client in self.allClients.keys():
         client.send(cipher_text)
Exemple #13
0
def talker():
    pub = rospy.Publisher('cam_data', CompressedImage, queue_size=10)
    pub_enc = rospy.Publisher('cam_data_enc', CompressedImage, queue_size=10)
    rospy.init_node('drone_cam', anonymous=True)

    # rate = rospy.Rate(50) # 10hz
    # a = ""
    # for i in range(0,size):
    #     a = a + "a"
    # rospy.loginfo(sys.getsizeof(a))
    while not rospy.is_shutdown():
        msg = CompressedImage()
        msg.header.stamp = rospy.Time.now()
        msg.format = "jpeg"
        msg.data = np.zeros((10, 10)).tostring()
        pub.publish(msg)
        msg_enc = CompressedImage()
        msg_enc.header.stamp = rospy.Time.now()
        msg_enc.format = "jpeg"
        msg_enc.data = encrypt(
            Padding.appendPadding(np.zeros((10, 10)).tostring(), mode='CMS'),
            key, AES.MODE_CBC, salt)
        pub_enc.publish(msg_enc)
Exemple #14
0
def encrypt(plain_text, key, mode):
    enc_obj = AES.new(key, mode)
    return enc_obj.encrypt(plain_text)


def decrypt(cipher_text, key, mode):
    enc_obj = AES.new(key, mode)
    return (enc_obj.decrypt(cipher_text))


print "\nAES"
key = hashlib.sha256(password).digest()

plain_text = Padding.appendPadding(plain_text,
                                   blocksize=Padding.AES_blocksize,
                                   mode='CMS')
print "After padding (CMS): " + binascii.hexlify(bytearray(plain_text))

cipher_text = encrypt(plain_text, key, AES.MODE_ECB)
print "Cipher (ECB): " + binascii.hexlify(bytearray(cipher_text))

plain_text = decrypt(cipher_text, key, AES.MODE_ECB)
plain_text = Padding.removePadding(plain_text, mode='CMS')
print "  decrypt: " + plain_text

plain_text = Padding.appendPadding(plain_text,
                                   blocksize=Padding.AES_blocksize,
                                   mode='Null')
print "After padding (Null): " + binascii.hexlify(bytearray(plain_text))
'''
URL: https://pypi.python.org/pypi/Padding
Description: Padding methods for password based encryption
'''

import Padding

msg = 'this'
DES_BS = Padding.DES_blocksize
AES_BS = Padding.AES_blocksize

print "DES has fixed block size of %d bits = %d bytes" % (DES_BS * 8, DES_BS)

padded_msgDES = Padding.appendPadding(msg, DES_BS)
print padded_msgDES.encode('hex'), len(padded_msgDES)

msgDES = Padding.removePadding(padded_msgDES)
print msgDES, len(msgDES)

print
print "AES has fixed block size of %d bits = %d bytes" % (AES_BS * 8, AES_BS)

padded_msgAES = Padding.appendPadding(msg)
print padded_msgAES.encode('hex'), len(padded_msgAES)

msgAES = Padding.removePadding(padded_msgAES)
print msgAES, len(msgAES)
Exemple #16
0
original_message = "Hola mundo"
key = "llavemagica"
salt = "241fa86763b85341"

if (len(sys.argv)>1):
    original_message = str(sys.argv[1])
if (len(sys.argv)>2):
    key = str(sys.argv[2])
if (len(sys.argv)>3):
    salt = str(sys.argv[3])

print ("Mensaje:", original_message)
print ("Key:", key)
print ("Salt:", salt)

paded_original_message = Padding.appendPadding(original_message)

def getKeyIv(key, salt):
    ascii_key = key.encode('ascii')
    hex_salt = bytearray.fromhex(salt)
    mdf = hashlib.md5(ascii_key+hex_salt)
    keyiv = mdf.digest()
    tmp = [keyiv]
    while len(tmp) < 32 + 16:
            tmp.append( hashlib.md5(tmp[-1] + ascii_key + hex_salt).digest() )
            keyiv += tmp[-1]  # append the last byte
    key = keyiv[:32]
    iv = keyiv[32:32+16]
    return key, iv

def encryptAes(msg, key, aes_mode, salt):
Exemple #17
0
	encobj = AES.new(key,mode) #Una vez recibidos los parámentros por el costructor, se recoge el key, modo y se le asigna a la variable.
	return(encobj.encrypt(plaintext)) #Devolvemos el resultado del cifrado.

def decrypt(ciphertext,key, mode): #Función para encriptar los datos donde recibimos los parámentros del constructor.
	encobj = AES.new(key,mode) #Una vez recibidos los parámentros por el costructor, se recoge el key, modo y se le asigna a la variable.
	return(encobj.decrypt(ciphertext)) #Devolvemos el resultado del cifrado.


key = hashlib.sha256(password).digest() #Hasheamos la constraseña con sha-256, con la función digest en binario.

iv = hex(ival)[2:8].zfill(16) #Convierte el valor ival a hexadecimal, tomamos los caráracteres incluyendo el 2 caracter y excluyendo el 8 caracter,
							  #luego se rellena de 0 la cadena hasta completar 16 carácteres.



print("IV: "+iv)


plaintext = Padding.appendPadding(plaintext, blocksize = Padding.AES_blocksize, mode=0) #Rellenamos el texto a cifrar con el bloque de AES.
print("Input data (CMS): " + bytearray(plaintext)) #Nos devuelve una matriz de bytes.

ciphertext = encrypt(plaintext, key, AES.MODE_ECB) #Llamamos la función de encrypt y le pasamos por constructor, el texto a cifrar, la llave del cifrado y
												   #el modo de cifrado en AES (Hay varios tipos de cifrados para AES.)

print("Cipher (ECB): " + bytearray(b64encode(ciphertext))) #Volvemos a obtener la matriz de bytes del texto ya cifrado pero con formato base64.

plaintext = decrypt(ciphertext, key, AES.MODE_ECB) #Llamamos la función de descifrado y le pasamos por constructor, el texto cifrado, la llave del cifrado y
												   #el modo de cifrado en AES(Hay varios tipos de cifrados para AES.)
plaintext = Padding.removePadding(plaintext, mode = 0) #Se elimina el relleno de bloques de AES y se elimina el modo de cifrado.
print("  decrypt: " + plaintext)
Exemple #18
0
text = "help"
k = "00000000000000000000"

if (len(sys.argv) > 1):
    text = str(sys.argv[1])

if (len(sys.argv) > 2):
    k = str(sys.argv[2])

print('Text:\t' + text)
print('Key:\t' + k)
print('--------')
print
key = bytes.fromhex(k)

text = Padding.appendPadding(text, blocksize=8, mode='CMS')

cipher = Present(key)

#start=time.perf_counter()
start1 = time.perf_counter_ns()
encrypted = cipher.encrypt(text.encode())
#end=time.perf_counter()
end1 = time.perf_counter_ns()

#print ("Encrypt time(sec): ",(end-start))
print("Encrypt time(ms): ", ((end1 - start1) / 1000000))

print('Cipher(Hex Encoded):\t' + encrypted.hex())
#start=time.perf_counter()
start1 = time.perf_counter_ns()
Exemple #19
0
    except UnicodeDecodeError:
         return None, None

def encrypt(plaintext,key, mode,salt):
	key,iv=get_key_and_iv(key,salt.decode('hex'))
	
	encobj = AES.new(key,mode,iv)
	return(encobj.encrypt(plaintext))

def decrypt(ciphertext,key, mode,salt):
        key,iv=get_key_and_iv(key,salt.decode('hex'))
	encobj = AES.new(key,mode,iv)
	return(encobj.decrypt(ciphertext))

print "Plaintext:\t",plaintext
print "Passphrase:\t",key
print "Salt:\t\t",salt
plaintext = Padding.appendPadding(plaintext,mode='CMS')

ciphertext = encrypt(plaintext,key,AES.MODE_CBC,salt)

ctext = b'Salted__' + salt.decode('hex') + ciphertext


print "\nCipher (CBC): "+base64.b64encode(ctext)
print "Cipher in binary:",ctext

plaintext = decrypt(ciphertext,key,AES.MODE_CBC,salt)
plaintext = Padding.removePadding(plaintext,mode='CMS')
print "\nDecrypted:\t"+plaintext
Exemple #20
0
def text_pad(text, pad_mode):
    return Padding.appendPadding(text,
                                 blocksize=Padding.DES_blocksize,
                                 mode=pad_mode)
'''
URL: https://pypi.python.org/pypi/Padding
Description: Padding methods for password based encryption
'''

import Padding

msg = 'this'
DES_BS = Padding.DES_blocksize
AES_BS = Padding.AES_blocksize


print "DES has fixed block size of %d bits = %d bytes" % (DES_BS*8, DES_BS)

padded_msgDES = Padding.appendPadding(msg, DES_BS)
print padded_msgDES.encode('hex'), len(padded_msgDES)

msgDES = Padding.removePadding(padded_msgDES)
print msgDES, len(msgDES)

print 
print "AES has fixed block size of %d bits = %d bytes" % (AES_BS*8, AES_BS)

padded_msgAES = Padding.appendPadding(msg)
print padded_msgAES.encode('hex'), len(padded_msgAES)

msgAES = Padding.removePadding(padded_msgAES)
print msgAES, len(msgAES)
Exemple #22
0
print("Compressed public key: ", toProperKey(bankPublicECKey).hex())


# BANK  PUBLIC KEY IS SENT TO SGX, THIS HAPPENS IN SGX

ephimeralPrivateKey = 39224536263752937319809063883144929125312957084276525785186738781563829874778 # RANDOM GENERATED

AESSymmetricKey = cv.mul_point(ephimeralPrivateKey, bankPublicECKey).x

print("AES Key in hex:" + hex(AESSymmetricKey))

message = "Scoring A PLUS"

formatedAESSymmetricKey = hashlib.sha256(str(AESSymmetricKey).encode()).digest()

message = Padding.appendPadding(message,blocksize=Padding.AES_blocksize,mode=0)

ciphertext = encrypt(message.encode(),formatedAESSymmetricKey,AES.MODE_ECB) # Change this AES mode to a better one
ephimeralPublicKey = cv.mul_point(ephimeralPrivateKey, g) # TODO RSA

hex_ephemeralPubKey_x = hex(ephimeralPublicKey.x)[2:]
hex_ephemeralPubKey_y = hex(ephimeralPublicKey.y)[2:]

while len(hex_ephemeralPubKey_x) < 64:
	hex_ephemeralPubKey_x = "0" + hex_ephemeralPubKey_x
while len(hex_ephemeralPubKey_y) < 64:
	hex_ephemeralPubKey_y = "0" + hex_ephemeralPubKey_y

hex_ephemeralPubKey_x = "0x" + hex_ephemeralPubKey_x
hex_ephemeralPubKey_y = "0x" + hex_ephemeralPubKey_y
Exemple #23
0
    return cipher.encrypt(pt)


def dec(ct, key, iv):
    cipher = AES.new(key, AES.MODE_CBC, iv)
    return cipher.decrypt(ct)


key_raw = 'YELLOW SUBMARINE'
block_size = len(key_raw)
iv = chr(0) * block_size
#f = open("cp2-10.txt","ro")
#enc_b64 = ''.join(f.read().strip().split('\n'))
#enc_raw = b64decode(enc_b64)

#print Padding.removePadding(pt, blocksize=block_size, mode='CMS')
#print Padding.removePadding(pt, mode=0)

pt = "Well that's my DJ Deshay cuttin' all them Z's"
#pt = pad_PKCS7(pt, block_size)
pt = Padding.appendPadding(pt, mode=0)

enc_b64 = enc(pt, key_raw, iv)
enc_raw = b64decode(enc_b64)

pt = dec(enc_raw, key_raw, iv)
pt = Padding.removePadding(pt, mode=0)

print enc_b64
print pt
Exemple #24
0
def encrypt(plaintext,key,iv):
    plaintext = Padding.appendPadding(plaintext,blocksize=Padding.AES_blocksize,mode=0)
    encobj = AES.new(key,AES.MODE_OFB,iv)
    return(binascii.b2a_base64(encobj.encrypt(plaintext)))
Exemple #25
0
    def solve(user : User, id_challenge):
        """
        Runs an attempt of user to solve the challenge

        Args:
            user (User): User
            id_challenge (int): ID of Challenge
        """
        challenge = ChallengeCypher.APP.getDBController().getCypherChallenge(id_challenge)
        if challenge is None:
            crt.writeError("This challenge does not exist.")
            crt.pause()
            return
        
        crt.writeMessage(f"Submitted by: {challenge['username']}")
        crt.writeMessage(f"Algorithm:    {challenge['algorithm']}")
        crt.writeMessage(f"Crypto:       {challenge['answer']}")
        crt.writeMessage(f"Plaintext:    {challenge['plaintext']}")
        crt.writeMessage(f"Tip:          {challenge['tip']}")
        crt.newLine()

        id_user = user.getUserID()

        last_try  = ChallengeCypher.APP.getDBController().getCypherLastTry(id_user, id_challenge)
        curr_time = Clock.now()
        if not (last_try is None or Clock.isAfter(curr_time, Clock.addSeconds(last_try, 15))):
            crt.writeWarning("Too soon to try again.")
            crt.pause()
            return None

        challenge['plaintext'] = Padding.appendPadding(challenge['plaintext'], blocksize=Padding.AES_blocksize, mode=0)

        if challenge['algorithm'] == Cypher.Caesar.TYPE:
            proposal_caesar = Read.tryAsInt("Insert your answer (number): ")
            proposal = str(proposal_caesar)
        else:
            proposal = Read.asString("Insert your answer: ")
        
        key      = hashlib.md5(proposal.encode()).digest()
        iv       = challenge['iv']
        hmacdb   = challenge['hmac']
        hmackey  = ChallengeCypher.APP.getDBController().getHMACKey()

        if challenge['algorithm'] == Cypher.ECB.TYPE:
            plaintext = Cypher.ECB.decrypt(base64.b64decode(challenge['answer']), key, AES.MODE_ECB)
        
        elif challenge['algorithm'] == Cypher.CBC.TYPE:
            plaintext = Cypher.CBC.decrypt(base64.b64decode(challenge['answer']), key, AES.MODE_CBC, iv.encode())
        
        elif challenge['algorithm'] == Cypher.CTR.TYPE:
            plaintext = Cypher.CTR.decrypt(base64.b64decode(challenge['answer']), key, AES.MODE_CTR, iv.encode())
        
        elif challenge['algorithm'] == Cypher.Caesar.TYPE:
            plaintext = Cypher.Caesar.decrypt(base64.b64decode(challenge['answer']), proposal_caesar)
        
        elif challenge['algorithm'] == Cypher.OTP.TYPE:
            plaintext = Cypher.OTP.decrypt(base64.b64decode(challenge['answer']), proposal)
        
        elif challenge['algorithm'] == Cypher.Vigenere.TYPE:
            plaintext = Cypher.Vigenere.decrypt(base64.b64decode(challenge['answer']), proposal).lower()
        
        try:
            plaintext = Padding.removePadding(plaintext.decode(),mode=0)
        except:
            ()
        msgHMAC = hmac.new(hmackey, plaintext.encode(), hashlib.sha256)

        # crt.writeDebug(f"{msgHMAC.hexdigest()} == {hmacdb}")
        if (msgHMAC.hexdigest() == hmacdb):
            if ChallengeCypher.APP.getDBController().updateCypherChallengeTry(id_user, id_challenge, Clock.now(), True):
                crt.writeSuccess("YOU DID IT!")
            else:
                crt.writeError("You got it, but I could not save the answer.")
        else:
            if ChallengeCypher.APP.getDBController().updateCypherChallengeTry(id_user, id_challenge, Clock.now(), False):
                crt.writeMessage("Better luck next time :(")
            else:
                crt.writeError("You did NOT got it, but I could not save the answer.")
        crt.pause()
Exemple #26
0
def plainTextToByte(plaintext):
    plaintext = Padding.appendPadding(plaintext,blocksize=Padding.AES_blocksize,mode=0)
    plaintext_byte = plaintext.encode('utf-8')
    blockList_byte = [plaintext_byte[i:i+16] for i in range(0, len(plaintext_byte), 16)]
    return blockList_byte
Exemple #27
0

def encrypt(plaintext, key, mode):
    encobj = AES.new(key, mode)
    return (encobj.encrypt(plaintext))


def decrypt(ciphertext, key, mode):
    encobj = AES.new(key, mode)
    return (encobj.decrypt(ciphertext))


key = hashlib.sha256(password.encode()).digest()

plaintext = Padding.appendPadding(plaintext,
                                  blocksize=Padding.AES_blocksize,
                                  mode='CMS')

print("After padding (CMS): ", binascii.hexlify(bytearray(plaintext.encode())))

ciphertext = encrypt(plaintext.encode(), key, AES.MODE_ECB)
print("Cipher (ECB): ", binascii.hexlify(bytearray(ciphertext)))

plaintext = decrypt(ciphertext, key, AES.MODE_ECB)

plaintext = Padding.removePadding(plaintext.decode(), mode='CMS')
print("  decrypt: ", plaintext)

plaintext = val

plaintext = Padding.appendPadding(plaintext,
Exemple #28
0
    def add(user : User, algorithm):
        """
        Adds Challenge.

        Args:
            user (User): Author
            algorithm (str): given type of algorithm 

        Returns:
            bool: if not logged in returns false
        """
        if not user.isLoggedIn():
            return False
        
        val = Read.asString("Message: ")

        if algorithm == Cypher.Caesar.TYPE:
            password_caesar = Read.tryAsInt("Cypher key (number): ")
            password = str(password_caesar)
        else:
            while True:
                password = Read.asString("Cypher key: ")
                if (algorithm == Cypher.OTP.TYPE) and (len(val) != len(password)):
                    crt.writeWarning("Message and cypher key must have same length!")
                else:
                    break
        
        tip = Read.asString("[Optional] Tip / Help: ")
        
        plaintext = val
        key       = hashlib.md5(password.encode()).digest()
        iv        = secrets.token_hex(8)
        hmackey   = ChallengeCypher.APP.getDBController().getHMACKey()
        msgHMAC   = hmac.new(hmackey, val.encode(), hashlib.sha256).hexdigest()
        
        if algorithm == Cypher.ECB.TYPE:
            plaintext  = Padding.appendPadding(plaintext, blocksize=Padding.AES_blocksize, mode=0)
            ciphertext = Cypher.ECB.encrypt(plaintext.encode(), key, AES.MODE_ECB)
        
        elif algorithm == Cypher.CBC.TYPE:
            plaintext  = Padding.appendPadding(plaintext, blocksize=Padding.AES_blocksize, mode=0)
            ciphertext = Cypher.CBC.encrypt(plaintext.encode(), key, AES.MODE_CBC, iv.encode())
        
        elif algorithm == Cypher.CTR.TYPE:
            plaintext  = Padding.appendPadding(plaintext,blocksize=Padding.AES_blocksize,mode=0)
            ciphertext = Cypher.CTR.encrypt(plaintext.encode(), key, AES.MODE_CTR, iv.encode())
        
        elif algorithm == Cypher.Caesar.TYPE:
            ciphertext = Cypher.Caesar.encrypt(plaintext, password_caesar)
        
        elif algorithm == Cypher.OTP.TYPE:
            ciphertext = Cypher.OTP.encrypt(plaintext, password)
        
        elif algorithm == Cypher.Vigenere.TYPE:
            ciphertext = Cypher.Vigenere.encrypt(plaintext, password)
        
        msg = base64.b64encode(bytearray(ciphertext)).decode()

        if ChallengeCypher.APP.getDBController().addCypherChallenge(user.getUserID(), tip, msg, val, iv, msgHMAC, algorithm):
            crt.writeSuccess("Challenge submitted successfully!")
        else:
            crt.writeError("The challenge could not be submitted for unknown reasons.")
        crt.pause()
Exemple #29
0
val='hello'
password='******'

plaintext=val

def encrypt(plaintext,key, mode):
	encobj = AES.new(key,mode)
	return(encobj.encrypt(plaintext))

def decrypt(ciphertext,key, mode):
	encobj = AES.new(key,mode)
	return(encobj.decrypt(ciphertext))

key = hashlib.sha256(password.encode()).digest()


plaintext = Padding.appendPadding(plaintext,blocksize=Padding.AES_blocksize,mode='CMS')

print("After padding (CMS): ",binascii.hexlify(bytearray(plaintext.encode())))

ciphertext = encrypt(plaintext.encode(),key,AES.MODE_ECB)
print("Cipher (ECB): ",binascii.hexlify(bytearray(ciphertext)))

plaintext = decrypt(ciphertext,key,AES.MODE_ECB)

plaintext = Padding.removePadding(plaintext.decode(),mode='CMS')
print("  decrypt: ",plaintext)

plaintext=val

Exemple #30
0
    def init_connection(self, message_tuple):
        all_sent_msgs = ''
        all_recv_msgs = ''

        cert = self.readCertificate(SERVERCERT)
        clientNonce = message_tuple[1]
        initNonce = keyutils.generate_nonce(28)

        if AUTHMETHOD == 'ClientAuth':
            reqClientCert = 'CertReq'
        else:
            reqClientCert = ''

        print 'Initiating handshake...'
        initMsg = ('ServerInit', initNonce, message_tuple[2], cert,
                   reqClientCert)
        initMsg = pickle.dumps(initMsg)
        all_sent_msgs += initMsg
        self.smartSend(self.client_sock, initMsg)

        data = self.smartRecv(self.client_sock)
        all_recv_msgs += data
        initResponse = pickle.loads(data)

        # VALIDATING CERTIFICATE #

        if reqClientCert:
            if not self.validate_certificate(initResponse[RECV_CERT]):
                print 'Bad Certificate!'
                self.client_sock.close()
                exit()
                return

        # DERIVING PUBLIC KEY FROM CERTIFICATE + PRIVATE KEY#

        private_key = \
            keyutils.read_privkey_from_pem(self.readCertificate(SERVERPRIVKEY))

        # COMPUTING SECRET #

        rsa_cipher = PKCS1_OAEP.new(private_key)
        aes_key = rsa_cipher.decrypt(initResponse[3])
        aes_cipher = AES.new(aes_key, AES.MODE_CFB, initResponse[2])
        secret = aes_cipher.decrypt(initResponse[1])

        # DERIVING KEYS FROM SECRET #

        session_key_one = keyutils.create_hmac(secret, initNonce
                + clientNonce + '00000000')
        session_key_two = keyutils.create_hmac(secret, initNonce
                + clientNonce + '11111111')

        if not self.verifyHash(session_key_two, all_sent_msgs,
                               initResponse[RECV_CERT - 1]):
            print 'BAD HASH'
            return
        finalMsg = keyutils.create_hmac(session_key_two, all_sent_msgs)
        all_sent_msgs += finalMsg

        self.smartSend(self.client_sock, finalMsg)

        print 'Handshake was succesful. Waiting for command...'
        data = self.smartRecv(self.client_sock)
        command = pickle.loads(data)

        if command[0] == 'GET':

            # FINAL STEP #

            print 'Received GET command.'
            file = open(PAYLOAD, 'r')
            file_data = file.read()
            init_vector = keyutils.generate_random(16)
            aes_cipher = AES.new(session_key_one, AES.MODE_CFB,
                                 init_vector)
            file_data = Padding.appendPadding(file_data)
            print 'Encrypting file...'
            encrypted_data = aes_cipher.encrypt(file_data)
            pickle_payload = (init_vector, encrypted_data)
            print 'Pickleing payload...'
            pickle_payload = pickle.dumps(pickle_payload)
            print 'Sending payload...'
            self.smartSend(self.client_sock, pickle_payload)
            print 'File sent to client.'