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)
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)
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' )
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' )
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)
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' )