Example #1
0
def test_encrypt_decrypt():

    key = security.hashKey(pow(A, b, p))
    encmsg = base64.b64encode(security.encrypt(key, "{key: value}"))

    assert security.decrypt(key, encmsg) == "{key: value}"

    encmsg = base64.b64encode(security.encrypt(key, ""))
    assert security.decrypt(key, encmsg) == ""
Example #2
0
def sign_up():
    form = LoginForm()
    global logged_with_password #Flag which determines where we will get credentials from
    global credentials
    credentials = []
    if form.validate_on_submit():
        username = form.username.data
        pwd = form.password.data
        server_address = form.server_address.data
        server_port = form.port.data
        use_ssl = form.use_ssl.data
        remember_me = form.remember_me.data
        if len(username) == 0 or len(server_address) == 0 or len(server_port) == 0:
            data = db_works.get()
            encrypted_pwd = security.encrypt(form.password.data)
            if db_works.match_pass(encrypted_pwd)[0][0] == "error":
                return redirect('/connection_error')
            if encrypted_pwd == db_works.match_pass(encrypted_pwd)[0][0]:
                params = db_works.get()
                if params[0][0] == 0:
                    return redirect('/connection_error')
                server_address = params[0][3]
                username = params[0][1]
                server_port = params[0][4]
                if params[0][5] == 1:
                    use_ssl = True
                else:
                    use_ssl = False
                logged_with_password = 1
            else:
                return redirect('/connection_error')
        if ldap3_connection(server_address, username, pwd, server_port, use_ssl):
            conn = ldap3_connection(server_address, username, pwd, server_port, use_ssl)
            try:
                res = conn
                if res == 'fail':
                    return redirect('/connection_error')
            except:
                pass
            db_works.table_create()
            if form.remember_me.data:
                ssl_val = 0
                if form.use_ssl.data:
                    ssl_val = 1
                else:
                    ssl_val = 0
                pwd_e = security.encrypt(pwd)
                db_works.add(username, pwd_e, server_address, server_port, ssl_val)
            else:
                if logged_with_password == 0:
                    db_works.clear()
            credentials = [server_address, username, pwd, server_port, use_ssl]
            return redirect('/index')
        else:
            return redirect('/connection_error')
    return render_template('login.html', title='Connect to server', form=form)
Example #3
0
def addApp(newappname, newappuser, newapppass):

    appname = newappname.get()
    appusername = security.encrypt(newappuser.get(), loginpass)
    apppassword = security.encrypt(newapppass.get(), loginpass)
    appref = db.collection(loginid).document(appname)
    appref.set({
        'username': appusername,
        'password': apppassword,
    })
    newappname.delete(0, END)
    newappuser.delete(0, END)
    newapppass.delete(0, END)
    messagebox.showinfo(
        "Success", "Password Successfully Encrypted And Stored In Firebase")
Example #4
0
def send():
    if request.method == 'POST':
        with open("member.json", "r") as file:
            users = json.load(file)
        if request.values['send'] == 'SEND':
            if not request.values['sender'] in users:
                return render_template('send.html',
                                       errorMsg="No Such Sender",
                                       name="")
            elif not request.values['receiver'] in users:
                return render_template('send.html',
                                       errorMsg="No Such Receiver",
                                       name="")
            else:
                plaintext = request.values['plaintext']
                receiver = request.values['receiver']
                sender = request.values['sender']
                pbk = users[receiver]['PublicKey'].encode()
                pvk = request.values['PrivateKey'].encode()
                mac = (int)(users[sender]['MAC'])
                cipher = sec.encrypt(plaintext, pbk, pvk, mac)
                sendEmail(request.values['sender'], request.values['receiver'],
                          request.values['title'], cipher)
                return render_template('send.html',
                                       name=request.values['send'],
                                       receiver=receiver)
    return render_template('send.html', name="")
Example #5
0
def change_pass(login: str, old_master_key: bytes) -> None:
    try:
        checker1 = db.info(login)
        if checker1 is None:
            raise Error(
                "Error in main.change_pass(): A user with this login " +
                "is not registered")
    except db.db_Error as e:
        raise Error(str(e))
    info: Tuple[str, bytes, str, bytes, bytes] = checker1

    password: str = input("Enter your new password: "******"Error in main.change_pass(): Invalid password")
    error_list: List[str] = list()
    for elem in password:
        if elem not in _ALLOWED_CHARACTERS:
            error_list.append(elem)
    if len(error_list) != 0:
        raise Error(
            f"Error in main.change_pass(): '{''.join(error_list)}' " +
            "is not allowed")
    password_bytes: bytes = password.encode(encoding="utf-8")

    encrypted_data: Dict[str, bytes] = {"ciphertext": info[3], "iv": info[4]}

    try:
        checker2: bytes = security.decrypt(encrypted_data, old_master_key)
    except security.security_Error as e:
        raise Error(str(e))
    key: bytes = checker2

    try:
        checker3 = security.gen_master_key(password_bytes)
    except security.security_Error as e:
        raise Error(str(e))
    master_key_new: bytes = checker3

    try:
        checker4 = security.encrypt(key, master_key_new, info[4])
    except security.security_Error as e:
        raise Error(str(e))
    enc_key = checker4["ciphertext"]

    try:
        checker5 = security.hash(password_bytes)
    except security.security_Error as e:
        raise Error(str(e))
    password_bytes_hash: bytes = checker5

    try:
        checker6 = db.update(
            login=login, hash=password_bytes_hash, enc_key=enc_key)
    except db.db_Error as e:
        raise Error(str(e))

    print("Password change was successful")
    return None
Example #6
0
def create_new_acc() -> bool:
    os.chdir('TheFourth')
    files = os.listdir('notes')
    for i in range(3):
        try:
            new_login = input("Придумайте логин аккаунта(без пробелов):")
            if ' ' in new_login:
                i += 1
            elif len(new_login) < 1:
                i += 1
            elif len(new_login) > 100:
                i += 1
            elif new_login in files:
                i += 1
            else:
                break
            if i == 3:
                os.chdir('..')
                return False
        except BaseException:
            print("Проблемы с логином")
    for i in range(3):
        try:
            new_password = input("Придумайте пароль аккаунта(без пробелов):")
            if ' ' in new_password:
                i += 1
            elif len(new_login) < 1:
                i += 1
            elif len(new_login) > 30:
                i += 1
            else:
                choise = True
                break
            if i == 3:
                os.chdir('..')
                return False
        except BaseException:
            print("Проблемы с паролем")
    if choise is True:
        os.chdir('notes')
        os.mkdir(new_login)
        os.chdir(new_login)
        master_key = security.master_key(new_password)
        encode_key = security.encrypt(security.secret_key(), master_key)
        mainfile = open("maininf.conf", 'w')
        mainfile.write(new_login + ' ' + security.hash_password(new_password))
        mainfile.close()
        encodefile = open("encodeinf.conf", 'wb')
        encodefile.write(encode_key)
        encodefile.close()
        os.chdir('..')
        os.chdir('..')
        os.chdir('..')
        return True
    return False
Example #7
0
  def writeDatabase(self):
    print "Writing to database"
    passwd = raw_input("Enter master password : "******"Password doesnt match"

    yamlStr = yaml.dump(self)
    encryptStr = security.encrypt(yamlStr, self.password)
    with open(self.filepath, 'w') as f:
        f.write(encryptStr)
        print "Database written to disk"
Example #8
0
def mod(user_dn, sn, telephone_number, description, cn, c, old_pass, new_pass):
    conn = ldap3_connection(c[0], c[1], c[2], c[3], c[4])
    if len(sn) != 0:
        conn.modify(user_dn, {'sn': [(MODIFY_REPLACE, [sn])]})
    if len(telephone_number):
        conn.modify(
            user_dn,
            {'telephoneNumber': [(MODIFY_REPLACE, [telephone_number])]})
    if len(description):
        conn.modify(user_dn,
                    {'description': [(MODIFY_REPLACE, [description])]})
    if len(old_pass) != 0 and len(new_pass) != 0:
        old_pass_h = security.encrypt(old_pass)
        new_pass_h = security.encrypt(new_pass)
        try:
            ldap.extend.microsoft.modifyPassword.ad_modify_password(
                conn, user_dn, new_pass_h, old_pass_h, controls=None)
        except:
            print("Error - password incorrect")
    conn.unbind()
Example #9
0
def createUser(userfield, passfield, controller):
    global loginid
    global loginpass
    # loginid=input("Enter Username: "******"Error", "The Fields Can Not Be Empty")
    print(list(db.collection(loginid).stream()))
    if list(db.collection(loginid).stream()):
        # print('username taken')
        messagebox.showinfo("Error", "Username Taken")
    else:
        # loginpass=input('Enter Password: '******'0').set({
            'username':
            security.encrypt(loginid, loginpass),
            'password':
            security.encrypt(loginpass, loginpass),
        })
        controller.show_frame("LoginPage")
Example #10
0
    def process_RSA_exchange(self, message: str) -> bool:

        #parameters = message['parameters']

        client_rsa_public_key = message['client_rsa_public_key']

        self.client_rsa_public_key = security.deserializePublicKey(
            client_rsa_public_key)

        self.rsa_private_key, self.rsa_public_key = security.get_rsa_asymn_keys(
        )

        self.add_key(self.rsa_private_key)

        self.add_key(self.rsa_public_key)

        rsa_public_key = security.serializePublicKey(
            self.rsa_public_key).decode("utf8")

        self.iv, self.sym_key, self.encryptor = security.encryptor()

        iv_enc = security.encrypt(self.client_rsa_public_key,
                                  self.iv)[0].decode("iso-8859-1")

        sym_key_enc = security.encrypt(self.client_rsa_public_key,
                                       self.sym_key)[0].decode("iso-8859-1")

        message = {
            'type': 'RSA_EXCHANGE',
            'server_rsa_public_key': rsa_public_key,
            'iv_enc': iv_enc,
            'sym_key_enc': sym_key_enc
        }

        self._send(message)

        return True
Example #11
0
def change_note(login: str, password: str) -> bool:
    os.chdir('..')
    list_error = ["\\", "/", ":", "*", "?", "\"", "|", "<", ">"]
    flag = True
    files = os.listdir(login)
    files.remove("maininf.conf")
    files.remove("encodeinf.conf")
    os.chdir(login)
    kappa = []
    kappa.append("maininf.conf")
    kappa.append("encodeinf.conf")
    path = os.getcwd()
    with open('encodeinf.conf', 'rb') as encode_file:
        encode_key = encode_file.read()
    if len(files) == 0:
        print("Список заметок пуст")
        return False
    else:
        print("Ваш список заметок")
        print(files)
        while flag:
            try:
                nissan = input("Выберите заметку,которую хотите изменить:")
                for ch in nissan:
                    if list_error.count(ch) != 0:
                        print("Неправильные символы в файле")
                if nissan in kappa:
                    print("Это конфигурационный файл,а не заметка")
                if nissan in files:
                    master_key = security.master_key(password)
                    encode_key = security.decrypt(encode_key, master_key)
                    with open(nissan, 'rb') as changing_note:
                        text = changing_note.read()
                        text = security.decrypt(text, encode_key)
                        text_dec = text.decode()
                    with open(nissan, 'w') as decrypted_note:
                        decrypted_note.write(text_dec)
                    os.chmod(path, stat.S_IXOTH)
                    path_kek = os.path.join(path, nissan)
                    os.system(path_kek)
                    with open(nissan, 'r') as crypting_note:
                        c_text = crypting_note.read()
                    with open(nissan, 'wb') as bytes_note:
                        cr_text = security.encrypt(c_text.encode(), encode_key)
                        bytes_note.write(cr_text)
                    return True
            except FileNotFoundError:
                print("Такой заметки нет")
    return False
    def login_post():
        username = request.form['username']
        password = request.form['password']
        target = request.form['target']

        seal_b64 = security.seal_auth_b64(username, password)
        seal_encrypted = security.encrypt(seal_b64)
        seal_encrypted_b64 = base64.b64encode(seal_encrypted.encode('utf-8'))

        redirect_response = redirect(target, code=302)
        redirect_response.set_cookie("nginxauth",
                                     seal_encrypted_b64,
                                     httponly=True)

        return redirect_response
Example #13
0
def send_msg(s, socket, typeof='txt', ack=0):
    if typeof in ['txt', 'cmd']:
        s1 = typeof + s
        try:
            s_body = encrypt(s1.encode('utf-8'))
        except ValueError as e:
            print("ERROR encountered: ", str(e))
            print('Sorry unable to send try again')
            return False

        s_header = f'{len(s_body):<{HEADER_LENGTH}}'.encode('utf-8')
        # print('EM - ',encrypted_message)
        socket.send(s_header + s_body)
    else:
        raise ValueError('Invalid type input')
    return True
Example #14
0
def test_encrypted_flow():
    user = '******'
    passwd = 'neto'

    seal_source = security.seal_auth_b64(user, passwd)

    seal_encrypted = security.encrypt(seal_source)
    seal_encrypted_encode_b64 = base64.b64encode(seal_encrypted.encode())

    seal_encrypted_decode_b64 = base64.b64decode(seal_encrypted_encode_b64)
    seal_decrypted = security.decrypt(seal_encrypted_decode_b64)

    user_post_processed, passwd_post_processed = security.unseal_auth_b64(
        seal_decrypted)

    assert user == user_post_processed
    assert passwd == passwd_post_processed
Example #15
0
    def send_assymetric_key_authentication(self) -> bool:
        """
		Server sends a request to the client to authenticate
		Using the clients rsa public key it encrypts the value
		Finnaly it hashes the original nonce value for authentication
		"""

        nonce = os.urandom(12)

        enc_nonce = security.encrypt(self.client_rsa_public_key, nonce)[0]

        digest = security.hash(nonce)

        message = {
            'type': 'SERVER_RSA_AUTH',
            'nonce': enc_nonce.decode('iso-8859-1'),
            'digest': digest.decode('iso-8859-1')
        }

        self._send(message)

        self._state = STATE_SERVER_RSA_AUTH
Example #16
0
def add_entry():
    form = AddForm()
    if form.validate_on_submit():
        if form.add.data:
            path = form.path.data
            sn = form.sn.data
            global cn
            cn = form.cn.data
            telephone_number = form.telephone_number.data
            description = form.description.data
            user_dn = "cn=" + cn + "," + path
            pwd = form.add_password.data
            pwd_hashed = security.encrypt(pwd)
            add(user_dn, sn, telephone_number, description, cn, credentials, pwd_hashed)
            form_s = SuccessForm()
            if form_s.return_index_add.data:
                return redirect('/index')
            if form_s.return_add.data:
                return redirect('/add_entry')
            return render_template('success_var.html', p1='Successfully added', p2=str(cn), title='Success', form=form_s)
        if form.cancel.data:
            return redirect('/index')
    return render_template('add_entry.html', title='Connected server', form=form)
Example #17
0
def create_note(login: str, password: str) -> bool:
    os.chdir('..')
    files = os.listdir(login)
    os.chdir(login)
    for i in range(3):
        try:
            try:
                name, check = pathcheck('txt')
                if check is False:
                    return False
                if ' ' in name:
                    i += 1
                elif len(name) < 1:
                    i += 1
                elif len(name) > 100:
                    i += 1
                if name in files:
                    i += 1
                else:
                    with open('encodeinf.conf', 'rb') as encode_file:
                        encode_key = encode_file.read()
                    master_key = security.master_key(password)
                    encode_key = security.decrypt(encode_key, master_key)
                    karapa = ''
                    space = karapa.encode(encoding='utf-8')
                    space = security.encrypt(space, encode_key)
                    new_zap = open(name, 'wb')
                    new_zap.write(space)
                    new_zap.close()
                    return True
                if i == 3:
                    return False
            except FileExistsError:
                print("Такая заметка уже существует")
        except BaseException:
            print("Проблемы с заметкой")
    return False
Example #18
0
def _encrypt_text(login: str, master_key: bytes, text: str) -> bytes:
    if not isinstance(login, str) or not isinstance(master_key, bytes) \
            or not isinstance(text, str):
        raise notes_Error("Error in notes._encrypt_text(): Invalid input type")

    text_bytes = text.encode(encoding="utf-8")
    if not isinstance(text_bytes, bytes):
        raise notes_Error(
            "Error in notes._encrypt_text(): Invalid text encoding")

    try:
        checker1: Union[Tuple[str, bytes, str, bytes, bytes],
                        None] = db.info(login)
        if checker1 is None:
            raise notes_Error(f"Error in notes._encrypt_text(): \
                        User with login {login} not found")
    except db.db_Error as e:
        raise notes_Error(str(e))
    info: Tuple[str, bytes, str, bytes, bytes] = checker1

    encrypted_data: Dict[str, bytes] = {"ciphertext": info[3], "iv": info[4]}

    try:
        checker2 = security.decrypt(encrypted_data, master_key)
    except security.security_Error as e:
        raise notes_Error(str(e))
    key: bytes = checker2

    try:
        checker3 = security.encrypt(text_bytes, key, info[4])
    except security.security_Error as e:
        raise notes_Error(str(e))
    ct: bytes = checker3["ciphertext"]
    if not isinstance(ct, bytes):
        raise notes_Error(
            "Error in notes._encrypt_text(): Invalid output type")
    return ct
Example #19
0
#!/usr/bin/python
# -*- coding: utf-8 -*-

import socket
import security as sec
import makereply as mr

port = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(('', port))
s.listen(1)

print("## Host:", socket.gethostbyname(socket.getfqdn()))

key = input("Enter Security-Key: ")

print("Log) Socket Listen Started.")

connector, addr = s.accept()

while 1:
    msg = connector.recv(1024)
    if not msg:
        break
    print("Log) Message Received: ", msg.decode('utf-8'))
    print("Log) Decrypted: ", sec.decrypt(key, msg.decode('utf-8')))
    reply = mr.echo(sec.decrypt(key, msg.decode('utf-8')))
    connector.send(sec.encrypt(key, reply).encode('utf-8'))

s.close()
Example #20
0
def change_password() -> bool:
    os.chdir('TheFourth')
    files = os.listdir('notes')
    for j in range(3):
        try:
            change_login = input("Введите логин аккаунта который изменяете:")
            if change_login in files:
                break
            else:
                j += 1
            if j == 3:
                os.chdir('..')
                return False
        except FileNotFoundError:
            print("Не найдено такого аккаунта")
    os.chdir('notes')
    os.chdir(change_login)
    with open("maininf.conf", 'r', encoding='utf-8') as change_file:
        method = change_file.readline().rstrip().split(' ')
        for i in range(3):
            try:
                change_pass = input("Введите пароль для данного аккаунта:")
                if security.check_password(method[1], change_pass) is True:
                    check = True
                    break
                else:
                    i += 1
                if i == 3:
                    os.chdir('..')
                    os.chdir('..')
                    os.chdir('..')
                    return False
            except BaseException:
                print("Проблемы с паролем")
    if check is True:
        for i in range(3):
            try:
                new_pass = input("Введите ваш новый пароль(без пробелов):")
                if ' ' in new_pass:
                    i += 1
                elif len(new_pass) < 1:
                    i += 1
                elif len(new_pass) > 30:
                    i += 1
                else:
                    choise = True
                    break
                if i == 3:
                    os.chdir('..')
                    os.chdir('..')
                    os.chdir('..')
                    return False
            except BaseException:
                print("Проблемы с паролем")
        if choise is True:
            with open('encodeinf.conf', 'rb') as encode_file:
                encode_key = encode_file.read()
            master_key = security.master_key(change_pass)
            new_master_key = security.master_key(new_pass)
            new_encode_key = security.decrypt(encode_key, master_key)
            new_encode_key = security.encrypt(new_encode_key, new_master_key)
            mainf = open("maininf.conf", 'w')
            mainf.write(change_login + ' ' + security.hash_password(new_pass))
            mainf.close()
            encodefile = open("encodeinf.conf", 'wb')
            encodefile.write(new_encode_key)
            encodefile.close()
            os.chdir('..')
            os.chdir('..')
            os.chdir('..')
            return True
    return False
Example #21
0
def create_user(username, password):
    p = encrypt(password)
    execute(_create_user, username, p)
Example #22
0
first_match = service_matches[0]
port = first_match["port"]
name = first_match["name"]
host = first_match["host"]

print "找到蓝牙服务", first_match

# 创建客户端 Socket
socket = BluetoothSocket(RFCOMM)
socket.connect((host, port))

my_public_key = security.get_public_key()
socket.send(my_public_key)

server_public_key = socket.recv(1024)

# 收发数据
while True:
    q = raw_input("我:")
    if q == "exit":
        break
    elif q:
        # 向客户端发送内容
        socket.send(security.encrypt(q, server_public_key))

    # 获取客户发送的内容
    print "对方:", security.decrypt(socket.recv(1024))

# 关闭连接
socket.close()
Example #23
0
import os
import socket
import security as sec

port = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


def cls():
    os.system('cls' if os.name == 'nt' else 'clear')


print("===== Socket Chat Client by kde713 =====")
s.connect((input("Input Host Address: "), port))
key = input("Type Security-Key (Server Set): ")

cls()

print("===== Socket Chat Client by kde713 =====")
print()

while 1:
    msg = input(">> ")
    s.send(sec.encrypt(key, msg).encode('utf-8'))
    reply = s.recv(1024)
    if not reply:
        break
    print("Server says '", sec.decrypt(key, reply.decode('utf-8')), "'")

print("(!) Connection Lost")
s.close()
Example #24
0
from matplotlib import pyplot
from security import encrypt
import sys

code_path = sys.argv[1]
with open(code_path, 'rb') as code_file:
    code = bytearray(code_file.read())

key = b"11111ghtr11111111111111111111111"
iv = b"11111acedA111111"

pyplot.hist(list(map(lambda x: x, code)), bins=256)
pyplot.show()
code = encrypt(code, key, iv)
pyplot.hist(list(map(lambda x: x, code)), bins=256)
pyplot.show()
Example #25
0
    service_id=uuid,
    service_classes=[uuid, SERIAL_PORT_CLASS],
    profiles=[SERIAL_PORT_PROFILE],
)

# 获取客户端连接
client, client_info = bluetooth_socket.accept()
print "客户连接:", client_info

my_public_key = security.get_public_key()
client.send(my_public_key)

client_public_key = client.recv(1024)

while True:
    # 获取客户发送的内容
    print "对方:", security.decrypt(client.recv(1024))

    q = raw_input("我:")
    if q == "exit":
        break
    elif q:
        # 向客户端发送内容
        client.send(security.encrypt(q, client_public_key))

# 关闭客户端连接
client.close()

# 关闭服务器连接。
bluetooth_socket.close()
Example #26
0
def encrypt_text() -> None:
    global key
    text = input("Введите шифруемый текст: ")
    ciphertext = security.encrypt(text.encode(encoding='utf-8'), key)
    print("шифротекст: ", ciphertext, "", sep="'")
Example #27
0
def main():
    global tcp_s

    server_addr = ("xcoa.av.it.pt", 8080)
    tcp_s = net.tcpConnect(server_addr)

    values = security.DHInitialValues()
    initial_value = str(values).strip('()').replace(
        " ", "")  # transformar (A, p, g) para string válida "A,p,g"

    # Tentar efetuar a troca de parametros inicial
    # Se a resposta do servidor estiver corrompida durante esta fase inicial então não será possivel continuar a comunicação,
    # Visto que o servidor estará à espera da mensagem READ encriptada mas o cliente não saberá calcular a chave do AES devido a ter recebido o parametro B de forma corrompida
    try:
        token, B = initialExchange(initial_value)
        secret = security.DHGetSecret(values[1], B)

        # Enviar "READ <token>" ao server
        net.tcpSend(security.encrypt(secret, "READ " + str(token)), True)

    except KeyboardInterrupt:
        tcp_s.close()
        sys.exit(0)
    except:
        handleFatalError()

    wrote_header = False
    started_receiving = False

    # Receber e tratar das respostas do server indefinitivamente
    while 1:
        data = net.tcpRead()

        if isValidJSON(data):
            # Se for JSON válido então os dados enviados não foram encriptados. Logo, deve ser uma mensagem de erro
            data = readJSON(data)
        else:
            # Se não for JSON válido então os dados devem estar encriptados, como se estava à espera
            try:
                data = readJSON(security.decrypt(secret, data))

            except KeyboardInterrupt:
                tcp_s.close()
                sys.exit(0)
            except:
                print(
                    colors.warning(
                        "DECODE ERROR : A última mensagem do servidor estava corrompida."
                    ))
                # Se ainda não tinha sido recebida a mensagem {type : 'OK'}, executar a lógica de erro fatal
                if not started_receiving:
                    handleFatalError()
                else:
                    continue

        if ("type" in data.keys()) and (data['type'] == "OK"):
            # Foi recebida mensagem "{type : 'OK'}"
            started_receiving = True
            print(
                colors.okgreen("Conexão ao servidor bem sucedida!\n") +
                "Serão recolhidos novos valores a cada " +
                colors.bold("10 segundos") + ".\nEstes serão registados em " +
                colors.bold("data.csv"))
            file = open("data.csv", "w+")
            print("\n" + colors.bold(" Temperatura") + " |  " +
                  colors.bold("Humidade") + "  |   " + colors.bold("Vento"))
            print("-------------|------------|-----------")

        elif hasError(data):
            # Fazer print à mensagem de erro vinda do servidor
            try:
                print(colors.fail(data['type'] + ": " + data['content']))
            except KeyboardInterrupt:
                tcp_s.close()
                sys.exit(0)
            except ValueError:
                print(
                    colors.warning(
                        "ERROR: A última mensagem do servidor era um erro mas pelo menos uma key estava corrompida."
                    ))

        else:
            try:
                temp = data['TEMPERATURE']
                hum = data['HUMIDITY']
                wind = data['WIND']
            except KeyboardInterrupt:
                tcp_s.close()
                sys.exit(0)

            except ValueError:
                print(
                    colors.warning(
                        "ERROR: A última mensagem do servidor não continha os valores esperados."
                    ))
                continue

            print(
                (colors.okblue("   %8.5f  ") + "|" +
                 colors.okblue("  %8.5f  ") + "|" + colors.okblue("  %8.5f")) %
                (temp, hum, wind))

            getInfo(temp, hum, wind)

            if not wrote_header:
                fields = [key for key in data.keys()]
                fields.insert(0, 'TIME')

                fw = csv.DictWriter(file, fieldnames=fields)

                fw.writeheader()
                wrote_header = True

            data.update({'TIME': datetime.now()})

            fw.writerow(data)
            file.flush()  # escreve as alterações feitas no buffer

    tcp_s.close()