Exemple #1
0
    def enc_sign(self, file):
        if self.dest is None:
            print(
                "\nRecuerde introducir el id del destinatario con --dest_id\n")
            return

        print('\nEl usuario actual es ' + self.user.user_short())

        # Leer el fichero
        message = open(file, 'rb').read()

        # Obtenemos el filename
        filename = file.split('/')[-1]

        # Obtener claves:
        #	Privada del origen (en el propio ordenador)
        #	Publica del destinatario
        self.user.private_key = RSA.import_key(
            open('Users/' + self.user.id + '/' + self.user.id + '.bin',
                 'r').read())

        public_key = RSA.import_key(
            securebox.getPublicKey(self.user, self.dest))

        packet = crypto.encrypt_and_sign(message, self.user.private_key,
                                         public_key)

        # Guardamos el fichero firmado y cifrado en un fichero de mismo nombre acabado en .sgn.enc
        name = 'Archivos/' + filename + '.sgn.enc'

        r = open(name, 'wb')
        r.write(packet)
        r.close()

        print('\nFichero firmado y cifrado guardado en ' + name)
Exemple #2
0
    def encrypt(self, file):
        if self.dest is None:
            print(
                "\nRecuerde introducir el id del destinatario con --dest_id\n")
            return

        print('\nEstá en el sistema como ' + self.user.user_short())

        # Leer fichero
        mes = open(file, 'rb').read()

        # Obtener clave publica del destinatario
        public_key = RSA.import_key(
            securebox.getPublicKey(self.user, self.dest))

        # Cifraamos el fichero con dicha clave
        enc = crypto.encrypt_file(mes, public_key)

        # Escribimos el fichero cifrado en otro con mismo nombre, acabado en .enc
        filename = file.split('/')[-1]
        name = 'Archivos/' + filename + '.enc'

        r = open(name, 'wb')
        r.write(enc)
        r.close()

        print('\nFichero cifrado guardado en ' + name)
Exemple #3
0
    def check_sign(self, file):
        if self.source is None:
            print("\nRecuerde introducir el id del emisor con --source_id\n")
            return

        print('\nEstá en el sistema como ' + self.user.user_short())

        # Leer dichero
        f = open(file, 'rb').read()

        # Obtener clave publica del origen
        # k = open(source_id+'.pem', 'r').read()
        # user = user_database.User(source_id, None,
        # None, None, 0)
        public_key = RSA.import_key(
            securebox.getPublicKey(self.user, self.source))

        # Dividmos la firma del cuerpo del mensaje
        signature = f[:256]
        mes = f[256:]

        # Lo guardamos con su nombre original solo si la firma coincide
        file = file.split('/')[-1]
        name = 'Archivos/' + file[:-4]

        if crypto.verify_signature(mes, public_key, signature) == True:
            print('\nLa firma digital es correcta, fichero guardado en ' +
                  name)
            r = open(name, 'wb')
            r.write(mes)
            r.close()
        else:
            print(
                '\nLa firma digital no es correcta, el fichero no ha sido guardado\n'
            )
Exemple #4
0
    def dec_csign(self, file):
        if self.source is None:
            print("\nRecuerde introducir el id del emisor con --source_id\n")
            return

        print('\nEstá en el sistema como ' + self.user.user_short())

        # Leer fichero
        enc = open(file, 'rb').read()

        # Obtener claves:
        #	Publica del origen
        #	Privada del destinatario (en el propio ordenador)
        self.user.private_key = RSA.import_key(
            open('Users/' + self.user.id + '/' + self.user.id + '.bin',
                 'r').read())
        public_key = RSA.import_key(
            securebox.getPublicKey(self.user, self.source))

        # Desciframos el fichero
        mes, flag = crypto.decrypt_and_check_sign(enc, public_key,
                                                  self.user.private_key)

        print('\nFichero descifrado, comprobando firma digital\n')

        # Lo guardamos con su nombre original solo si la firma coincide
        file = file.split('/')[-1]
        name = 'Archivos/' + file[:-8]

        if flag == True:
            print('\nLa firma digital es correcta, fichero guardado en ' +
                  name)
            r = open(name, 'wb')
            r.write(mes)
            r.close()
        else:
            print(
                '\nLa firma digital no es correcta, el fichero no ha sido guardado\n'
            )
Exemple #5
0
    def upload(self, file):
        if self.dest is None:
            print(
                "\nRecuerde introducir el id del destinatario con --dest_id\n")
            return

        print('\nEstá en el sistema como ' + self.user.user_short())

        # Nos quedamos solo con el nombre del fichero y su extension
        filename = file.split('/')[-1]

        mes = open(file, 'rb').read()

        # Obtenemos las claves necesarias
        public_key = RSA.import_key(
            securebox.getPublicKey(self.user, self.dest))
        self.user.private_key = RSA.import_key(
            open('Users/' + self.user.id + '/' + self.user.id + '.bin',
                 'rb').read())

        # Ciframos el archivo
        packet = crypto.encrypt_and_sign(mes, self.user.private_key,
                                         public_key)

        name = 'Archivos/' + filename + '.sgn.enc'

        # Usamos base64 para codificar el paquete
        packet = base64.b64encode(packet)

        f = open(name, 'wb')
        f.write(packet)
        f.close()

        id, size = securebox.uploadFile(self.user, name)

        print("\nSe ha subido el archivo con id ", id, "de tamano", size)
Exemple #6
0
    def download(self, id):
        if self.source is None:
            print("\nRecuerde introducir el id del emisor con --source_id\n")
            return

        print('\nEstá en el sistema como ' + self.user.user_short())

        # Obtenemos las claves
        public_key = RSA.import_key(
            securebox.getPublicKey(self.user, self.source))
        self.user.private_key = RSA.import_key(
            open('Users/' + self.user.id + '/' + self.user.id + '.bin',
                 'rb').read())

        # Descargamos el fichero y lo desciframos
        text = securebox.downloadFile(self.user, id)
        # Decodificamos el paquete usando base64
        text = base64.b64decode(text)
        print("\nFichero descargado, descifrando...\n")

        mes, flag = crypto.decrypt_and_check_sign(text, public_key,
                                                  self.user.private_key)

        if flag == True:
            name = 'Archivos/' + id + '.file'
            print(
                '\nLa firma digital es correcta, fichero guardado en ', name,
                '\n\nRecuerde renombrar el archivo para no perder el formato del fichero\n'
            )
            f = open(name, "wb")
            f.write(mes)
            f.close()
        else:
            print(
                '\nLa firma digital no es correcta, el fichero no ha sido guardado\n'
            )