From b798b477a210c32c3ce626b7429f2edc61e7ea3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marinho=20Brand=C3=A3o?= Date: Sat, 16 Jan 2010 09:21:49 -0200 Subject: [PATCH] Trabalhando na assinatura para certificado A1 --- LICENCE | 147 +++++++++++++++++++++++++++++++ pynfe/processamento/__init__.py | 2 +- pynfe/processamento/assinatura.py | 19 +++- tests/01-basico.txt | 2 +- tests/03-processamento-03-assinatura.txt | 28 +++++- 5 files changed, 192 insertions(+), 6 deletions(-) create mode 100644 LICENCE diff --git a/LICENCE b/LICENCE new file mode 100644 index 0000000..f9ff762 --- /dev/null +++ b/LICENCE @@ -0,0 +1,147 @@ +GNU LESSER GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the terms +and conditions of version 3 of the GNU General Public License, supplemented by +the additional permissions listed below. +0. Additional Definitions. + +As used herein, “this License” refers to version 3 of the GNU Lesser General +Public License, and the “GNU GPL” refers to version 3 of the GNU General Public +License. + +“The Library” refers to a covered work governed by this License, other than an +Application or a Combined Work as defined below. + +An “Application” is any work that makes use of an interface provided by the +Library, but which is not otherwise based on the Library. Defining a subclass +of a class defined by the Library is deemed a mode of using an interface +provided by the Library. + +A “Combined Work” is a work produced by combining or linking an Application +with the Library. The particular version of the Library with which the Combined +Work was made is also called the “Linked Version”. + +The “Minimal Corresponding Source” for a Combined Work means the Corresponding +Source for the Combined Work, excluding any source code for portions of the +Combined Work that, considered in isolation, are based on the Application, and +not on the Linked Version. + +The “Corresponding Application Code” for a Combined Work means the object code +and/or source code for the Application, including any data and utility programs +needed for reproducing the Combined Work from the Application, but excluding +the System Libraries of the Combined Work. +1. Exception to Section 3 of the GNU GPL. + +You may convey a covered work under sections 3 and 4 of this License without +being bound by section 3 of the GNU GPL. +2. Conveying Modified Versions. + +If you modify a copy of the Library, and, in your modifications, a facility +refers to a function or data to be supplied by an Application that uses the +facility (other than as an argument passed when the facility is invoked), then +you may convey a copy of the modified version: + + * a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the function + or data, the facility still operates, and performs whatever part of + its purpose remains meaningful, or + * b) under the GNU GPL, with none of the additional permissions of this + License applicable to that copy. + +3. Object Code Incorporating Material from Library Header Files. + +The object code form of an Application may incorporate material from a header +file that is part of the Library. You may convey such object code under terms +of your choice, provided that, if the incorporated material is not limited to +numerical parameters, data structure layouts and accessors, or small macros, +inline functions and templates (ten or fewer lines in length), you do both of +the following: + + * a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are covered by + this License. + * b) Accompany the object code with a copy of the GNU GPL and this license + document. + +4. Combined Works. + +You may convey a Combined Work under terms of your choice that, taken together, +effectively do not restrict modification of the portions of the Library +contained in the Combined Work and reverse engineering for debugging such +modifications, if you also do each of the following: + + * a) Give prominent notice with each copy of the Combined Work that the + Library is used in it and that the Library and its use are covered by + this License. + * b) Accompany the Combined Work with a copy of the GNU GPL and this + license document. + * c) For a Combined Work that displays copyright notices during execution, + include the copyright notice for the Library among these notices, as + well as a reference directing the user to the copies of the GNU GPL + and this license document. + * d) Do one of the following: + o 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to recombine + or relink the Application with a modified version of the Linked + Version to produce a modified Combined Work, in the manner + specified by section 6 of the GNU GPL for conveying + Corresponding Source. + o 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time a + copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version of + the Library that is interface-compatible with the Linked Version. + * e) Provide Installation Information, but only if you would otherwise be + required to provide such information under section 6 of the GNU GPL, + and only to the extent that such information is necessary to install + and execute a modified version of the Combined Work produced by + recombining or relinking the Application with a modified version of the + Linked Version. (If you use option 4d0, the Installation Information + must accompany the Minimal Corresponding Source and Corresponding + Application Code. If you use option 4d1, you must provide the + Installation Information in the manner specified by section 6 of the + GNU GPL for conveying Corresponding Source.) + +5. Combined Libraries. + +You may place library facilities that are a work based on the Library side by +side in a single library together with other library facilities that are not +Applications and are not covered by this License, and convey such a combined +library under terms of your choice, if you do both of the following: + + * a) Accompany the combined library with a copy of the same work based on + the Library, uncombined with any other library facilities, conveyed + under the terms of this License. + * b) Give prominent notice with the combined library that part of it is a + work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + +6. Revised Versions of the GNU Lesser General Public License. + +The Free Software Foundation may publish revised and/or new versions of the GNU +Lesser General Public License from time to time. Such new versions will be +similar in spirit to the present version, but may differ in detail to address +new problems or concerns. + +Each version is given a distinguishing version number. If the Library as you +received it specifies that a certain numbered version of the GNU Lesser General +Public License “or any later version” applies to it, you have the option of +following the terms and conditions either of that published version or of any +later version published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser General Public +License, you may choose any version of the GNU Lesser General Public License +ever published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide whether +future versions of the GNU Lesser General Public License shall apply, that +proxy's public statement of acceptance of any version is permanent +authorization for you to choose that version for the Library. + diff --git a/pynfe/processamento/__init__.py b/pynfe/processamento/__init__.py index b3e4243..da1622f 100644 --- a/pynfe/processamento/__init__.py +++ b/pynfe/processamento/__init__.py @@ -1,6 +1,6 @@ from interfaces import InterfaceXML from validacao import Validacao -from assinatura import Assinatura +from assinatura import AssinaturaA1 from comunicacao import Comunicacao from danfe import DANFE diff --git a/pynfe/processamento/assinatura.py b/pynfe/processamento/assinatura.py index 2bd8509..eae7519 100644 --- a/pynfe/processamento/assinatura.py +++ b/pynfe/processamento/assinatura.py @@ -4,8 +4,12 @@ class Assinatura(object): """Classe abstrata responsavel por definir os metodos e logica das classes de assinatura digital.""" - def __init__(self, certificado): + certificado = None + senha = None + + def __init__(self, certificado, senha): self.certificado = certificado + self.senha = senha def assinar_arquivos(self, caminho_raiz): """Efetua a assinatura dos arquivos XML informados""" @@ -29,8 +33,21 @@ class Assinatura(object): """Efetua a assinatura em instancias do PyNFe""" pass + def verificar_arquivos(self, caminho_raiz): + pass + + def verificar_xml(self, xml): + pass + + def verificar_etree(self, raiz): + pass + + def verificar_objetos(self, objetos): + pass + class AssinaturaA1(Assinatura): """Classe abstrata responsavel por efetuar a assinatura do certificado digital no XML informado.""" pass + diff --git a/tests/01-basico.txt b/tests/01-basico.txt index 23458ac..e2aee8f 100644 --- a/tests/01-basico.txt +++ b/tests/01-basico.txt @@ -91,7 +91,7 @@ Os pacotes da biblioteca sao: >>> from pynfe import processamento >>> set([attr for attr in dir(processamento) if not attr.startswith('__')]) == set([ - ... 'Assinatura', 'Comunicacao', 'DANFE', 'InterfaceXML', 'Validacao', + ... 'AssinaturaA1', 'Comunicacao', 'DANFE', 'InterfaceXML', 'Validacao', ... 'assinatura', 'comunicacao', 'danfe', 'interfaces', 'validacao']) True diff --git a/tests/03-processamento-03-assinatura.txt b/tests/03-processamento-03-assinatura.txt index 2e556be..1112936 100644 --- a/tests/03-processamento-03-assinatura.txt +++ b/tests/03-processamento-03-assinatura.txt @@ -6,19 +6,41 @@ Carregando Certificado Digital tipo A1 >>> from pynfe.entidades import CertificadoA1 + >>> certificado = CertificadoA1(caminho_arquivo='tests/certificado.pfx') + Assinando NF-e -------------- - >>> from pynfe.processamento import AssinaturaC1 + >>> from pynfe.processamento import AssinaturaA1 Na hora de assinar, selecionar um Certificado Digital - >>> + >>> assinatura = AssinaturaA1(certificado, 'senha') + +TODO: A senha deveria ser criptografada de forma a evitar que alguem entre nesse +processo e a capture. A assinatura deve ser feita em quatro tipos diferentes de origem do XML: - Arquivos -- + + >>> hasattr(AssinaturaA1, 'assinar_arquivos') + True + +- String de XML + + >>> hasattr(AssinaturaA1, 'assinar_xml') + True + +- Instancia de lxml.etree + + >>> hasattr(AssinaturaA1, 'assinar_etree') + True + +- Instancias do PyNFe + + >>> hasattr(AssinaturaA1, 'assinar_objetos') + True - Utilizar pyXMLSec para isso - verificar qual eh a integracao do PyXMLSec com o lxml.etree