Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/09/2012, 09:40
Avatar de mcun
mcun
 
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 13 años, 6 meses
Puntos: 55
Como firmar una publickey importada, para validarla [gnupg +python 2.7]

Hola a todos

Tengo una clase para cifrar un string con gnupg la clase funciona bien con mi propia key pero cuando
importo otra key e intento cifrar una mensaje con esa key la clase falla, el error es el siguiente

Código Python:
Ver original
  1. gpg: B7BB02D9: No hay seguridad de que esta clave pertenezca realmente
  2. al usuario que se nombra
  3. [GNUPG:] INV_RECP 10 user@dominio.com
  4. gpg: [stdin]: encryption failed: Unusable public key

La clase que utilizo es la siguiente

Código Python:
Ver original
  1. class EncryptedString():
  2.  
  3.  
  4.     def __init__(self,homegpg,user,set_result):
  5.  
  6.         self.homegpg = homegpg
  7.         self.user = user
  8.        
  9.         self.set_result = set_result
  10.     def encrypt_string(self,input_string):
  11.         #Encrypt a string
  12.         self.input_string = input_string
  13.         gpg  =  gnupg.GPG(gnupghome = self.homegpg)
  14.         unencrypted_string  =  self.input_string
  15.         encrypted_data  =  gpg.encrypt(unencrypted_string, self.user)
  16.         encrypted_string  =  str(encrypted_data)
  17.         ok =  encrypted_data.ok
  18.         status =  encrypted_data.status
  19.         stderr =  encrypted_data.stderr
  20.         result = [ok,status,stderr,unencrypted_string,encrypted_string]
  21.         return result[self.set_result]
  22.          
  23. # instantiate
  24. if __name__  ==  "__main__":
  25.     print "Is not shown if import"
  26.    
  27.     homegpg = '../home/gpg/'
  28.     user = '[email protected]'
  29.     input_string = 'string en texto plano'
  30.     set_result = 2
  31.     encryptstring = EncryptedString(homegpg,user,set_result)
  32.     print encryptstring.encrypt_string(input_string)
  33.     print " enjoy "

Buscando en google encontré que hay que firmar la clave importada con mi propia clave para que funcione correctamente,
pero no se como hacer eso.

La forma que uso para importar la calve es la siguiente

Código Python:
Ver original
  1. class ImportKey():
  2.  
  3.     def __init__(self,homegpg,keyfile):
  4.  
  5.         self.homegpg=homegpg
  6.         self.keyfile=keyfile
  7.  
  8.     def import_key(self):
  9.         #Import keys
  10.         gpg = gnupg.GPG(gnupghome=self.homegpg)
  11.         key_data = open(self.keyfile).read()
  12.        
  13.         import_result = gpg.import_keys(key_data)
  14.         pprint(import_result.results)
  15.        
  16.        
  17. # instantiate
  18. if __name__ == "__main__":
  19.     print "Is not shown if import"
  20.     homegpg='../home/gpg'
  21.     keyfile='../home/gpg/publickeyfile.asc'
  22.     importkey=ImportKey(homegpg,keyfile)
  23.     importkey.import_key()
  24.     print " enjoy "

Pese a haber leído la documentación[0] no me entero como firmar la clave importada. ¿ alguien tiene idea de como resolver esto ?



python 2.7

[0] http://packages.python.org/python-gnupg/


Gracias por leerme y si faltan datos pregunten