gerf1 / pyafipws

Automatically exported from code.google.com/p/pyafipws
GNU General Public License v3.0
0 stars 0 forks source link

Problemas con el uso de m2crypto #21

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
Hola,

Yo ya había tenido este problema en julio, cuando hice el programa para 
factura electrónica de exportación, pero pensé que era debido a tener 
versiones viejas de python o m2crypto.

Ahora, sin embargo, estoy usando python 2.6 y m2cripto 0.20 y sigo teniendo el 
mismo problema, así que evidentemente se debe a otro problema, aunque no se me 
ocurre por dónde puede venir.

El problema como yo lo experimento es que luego de llamar a cms = 
wsaa.sign_tra(tra,"mi.crt","mi.key"), el valor de cms queda vacío.  Para 
solucionarlo, tengo que hacerle dos cambios a sign_tra, que adjunto como diff y 
pongo acá para explicarlos.

1er cambio: eliminar buf de la llamada s.write(out, p7, buf):

     s.load_key(privatekey, cert)            # Cargar certificados
     p7 = s.sign(buf,0)                      # Firmar el buffer
     out = BIO.MemoryBuffer()                # Crear un buffer para la salida
-    s.write(out, p7, buf)                   # Generar p7 en formato mail
+    s.write(out, p7)                        # Generar p7 en formato mail
     #Rand.save_file('randpool.dat')         # Guardar el estado del PRNG's

     # extraer el cuerpo del mensaje (parte firmada)
     msg = email.message_from_string(out.read())

Si le paso buf a s.write(), la parte del mail que tiene que firmar queda 
vacía.  Hacer print msg, da esto:

From nobody Fri Oct 29 11:07:53 2010
MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/pkcs7-signature";
        micalg="sha1"; boundary="----1987400F616FC2084AE9D87B69C372D8"

This is an S/MIME signed message

------1987400F616FC2084AE9D87B69C372D8

------1987400F616FC2084AE9D87B69C372D8--

2) Por otro lado, también tuve que cambiarle el nombre al "filename", porque 
me lo estaba generando como p7m en lugar de p7s.  Supongo que ambas situaciones 
están relacionadas.

     for part in msg.walk():
         filename = part.get_filename()
-        if filename == "smime.p7s":                 # es la parte firmada?
+        if filename == "smime.p7m":                 # es la parte firmada?
             return part.get_payload(decode=False)   # devolver CMS

Haciendo el print msg, una vez que saqué el buf, me muestra el siguiente 
encabezado, donde se ve claramente que el archivo se llama smime.p7m:

From nobody Fri Oct 29 11:11:12 2010
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/pkcs7-mime; smime-type=signed-data; name="smime.p7m"
Content-Transfer-Encoding: base64

En definitiva, a mí sin este parche no me anda.  Habiendo actualizado la 
compu, no se me ocurre a qué se pueda deber la diferencia.  Pero me interesaba 
que quedara documentado.

--
Saludos,
Margarita.

Original issue reported on code.google.com by margamanterola on 29 Oct 2010 at 2:13

Attachments:

GoogleCodeExporter commented 8 years ago
Buenisimo, 
¿lo probaste con versiones anteriores de python/m2crypto?
(¿funciona también?)

Original comment by reingart@gmail.com on 1 Nov 2010 at 9:58

GoogleCodeExporter commented 8 years ago
Las versiones con las que probé el cliente nuevo y anda con mi parche:

python: 2.6.6-3+squeeze1
python-m2crypto: 0.20.1-1+b1

python: 2.5.2-3
python-m2crypto: 0.18.2-2

Con python 2.4 no pude correr el cliente nuevo (no está hashlib en etch), pero 
tengo el de wsfex corriendo (con el mismo parche) con:

python: 2.4.4-2
python-m2crypto: 0.16-1.1

No me explico en dónde puede estar la diferencia, siendo que con versiones tan 
distintas me anda siempre igual.

--
Saludos,
Marga

Original comment by margamanterola on 2 Nov 2010 at 1:17

GoogleCodeExporter commented 8 years ago
gracias, commiteado en d3090c403c

Original comment by reingart@gmail.com on 23 Feb 2011 at 5:35