Dear User Support Mailing List <openssl-users@openssl.org>
 
In order to be able to fulfill the fiscal legislation in Mexico, I am developing a system to obtain electronic invoices,
but up to here I have been able to advance without being able to follow ahead. For this reason I ask for your aid.
In the last line of this DOS code, you will see that the message is "unable to load key file".
I do not know why and I cannot finish the process of verification of the seal. Could you help me to resolve it?
I appreciate your attention,
 
Ing. Ricardo Manuel Alzaga Chirino
Mexico City
 
Files I send:
AAA010101AAA_0408021316S.key  Private key file in (PKCS#8 format key/DER encoded).
AAA010101AAAsd.cer            Certificate file in DER encoding.
fact1.xml                     Invoice file in XML format. "sello" field mean digital signing in Base 64 format.
cadena_original.xsl           An XLS file for transforming fact1.xml and extract the string for digital signing.
sello.xsl                     An XLS file for transforming fact1.xml and extract digital signing field within it.
 
Working platform:
Microsoft Windows 2000 [Versión 5.00.2195] & OpenSSL 0.9.7e
 
Rem -----------------------------------------------------------------------------
Rem DOS Code
openssl pkcs8 -inform DER -in AAA010101AAA_0408021316S.key -passin pass:Empresa1 -out AAA010101AAA.key.pem
openssl rsa -in conllave.key.pem -des3 -out conllave.key.pem -passout pass:Empresa1
 
openssl x509 -inform DER -outform PEM -in AAA010101AAAsd.cer -out AAA010101AAA.cer.pem
 
xsltproc -output co.txt cadena_original.xsl fact1.xml
openssl dgst -md5 -out sellobin -sign conllave.key.pem co.txt
openssl enc -base64 -A -in sellobin -out sello64.txt
 
xsltproc -output selloxml.txt sello.xsl fact1.xml
openssl enc -base64 -d -A -in selloxml.txt -out sellobin
 
xsltproc -output coxml.txt cadena_original.xsl fact1.xml
openssl dgst -md5 -verify AAA010101AAA.cer.pem -signature sellobin co.txt
Rem unable to load key file !!! Why?

Attachment: AAA010101AAA_0408021316S.key
Description: Binary data

Attachment: AAA010101AAAsd.cer
Description: application/x509-ca-cert

<?xml version="1.0" encoding="UTF-8"?>
<Comprobante version="1.0" serie="A" folio="1" fecha="2005-09-02T16:30:00" sello="mCMuP1HLjTLGOIA91mDNo8pdJ7fPXF/BZ7R2xsr5sC+6EDF5hfHO1anVq5Ek/Owu5dC3AiYP0ZgeqNrmOuySRgdBl4ZwKUwQ8vQekW9XM4hfRdCs0dg3gXSM+SdVknjvyxV5XI14Y6DGYh448N0m2pri8ZgUVkqoSp9Czbt+/Fw=" noAprobacion="1" noCertificado="00001000000000000114">
   <Emisor rfc="ISP900909Q88" nombre = "Industrias del Sur Poniente, S.A. de C.V.">
      <DomicilioFiscal calle="Alvaro Obregón" noExterior="37" noInterior="3" colonia="Col. Roma Norte" localidad="México" municipio="Cuauhtémoc" estado="Distrito Federal" pais="México" codigoPostal="06700" />
      <ExpedidoEn calle="Pino Suarez" noExterior="23" colonia="Centro" localidad="Monterrey" municipio="Monterrey" estado="Nuevo Léon" pais="México" codigoPostal="95460" />
   </Emisor>
   <Receptor rfc="CAUR390312S87" nombre="Rosa María Calderón Uriegas">
      <Domicilio calle="Topochico" noExterior="52" colonia="Jardines del Valle" localidad="Monterrey" municipio="Monterrey" estado="Nuevo León" pais="México" codigoPostal="95465" />
   </Receptor>
   <Conceptos>
      <Concepto cantidad="10" unidad="Caja" descripcion="Vasos decorados" valorUnitario="20.00" importe="200.00" />      <Concepto cantidad="1" unidad="pieza" descripcion="Charola metálica" valorUnitario="150.00" importe="150.00" />   </Conceptos>
   <Impuestos>
      <Traslados>
         <Traslado impuesto="IVA" importe="52.00" />
      </Traslados>
   </Impuestos>
   <Addenda>
      <Nota CadenaOriginal="||A|1|2005-09-02T16:30:00|1|ISP900909Q88|Industrias del Sur Poniente, S.A. de C.V.|Alvaro Obregón|37|3|Col. Roma Norte|México|Cuauhtémoc|Distrito Federal|México|06700|Pino Suarez|23|Centro|Monterrey|Monterrey|Nuevo Léon|México|95460|CAUR390312S87|Rosa María Calderón Uriegas|Topochico|52|Jardines del Valle|Monterrey|Monterrey|Nuevo León|México|95465|10|Caja|Vasos decorados|20.00|200.00|1|pieza|Charola metálica|150.00|150.00|IVA|52.00||" />
   </Addenda>
</Comprobante>
<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:output method = "text" /> 

<xsl:template match="/">
    <xsl:apply-templates select="//Comprobante"/>
    <xsl:apply-templates select="//Emisor"/>
    <xsl:apply-templates select="//DomicilioFiscal"/>
    <xsl:apply-templates select="//ExpedidoEn"/>
    <xsl:apply-templates select="//Receptor"/>
    <xsl:apply-templates select="//Domicilio"/>
    <xsl:apply-templates select="//Concepto"/>
    <xsl:apply-templates select="//Retencion"/>
    <xsl:apply-templates select="//Traslado"/>
    <xsl:apply-templates select="//Addenda"/>
</xsl:template>

<xsl:template match="Comprobante">
      <xsl:if test="@serie">||<xsl:value-of select="@serie"/></xsl:if>
      <xsl:if test="@folio">|<xsl:value-of select="@folio"/></xsl:if>
      <xsl:if test="@fecha">|<xsl:value-of select="@fecha"/></xsl:if>
      <xsl:if test="@noAprobacion">|<xsl:value-of select="@noAprobacion"/></xsl:if>
      <xsl:if test="@formaDePago">|<xsl:value-of select="@formaDePago"/></xsl:if>
</xsl:template>

<xsl:template match="Emisor">
      <xsl:if test="@rfc">|<xsl:value-of select="@rfc"/></xsl:if>
      <xsl:if test="@nombre">|<xsl:value-of select="@nombre"/></xsl:if>
</xsl:template>

<xsl:template match="DomicilioFiscal">
      <xsl:if test="@calle">|<xsl:value-of select="@calle"/></xsl:if>
      <xsl:if test="@noExterior">|<xsl:value-of select="@noExterior"/></xsl:if>
      <xsl:if test="@noInterior">|<xsl:value-of select="@noInterior"/></xsl:if>
      <xsl:if test="@colonia">|<xsl:value-of select="@colonia"/></xsl:if>
      <xsl:if test="@localidad">|<xsl:value-of select="@localidad"/></xsl:if>
      <xsl:if test="@referencia">|<xsl:value-of select="@referencia"/></xsl:if>
      <xsl:if test="@municipio">|<xsl:value-of select="@municipio"/></xsl:if>
      <xsl:if test="@estado">|<xsl:value-of select="@estado"/></xsl:if>
      <xsl:if test="@pais">|<xsl:value-of select="@pais"/></xsl:if>
      <xsl:if test="@codigoPostal">|<xsl:value-of select="@codigoPostal"/></xsl:if>
</xsl:template>

<xsl:template match="ExpedidoEn">
      <xsl:if test="@calle">|<xsl:value-of select="@calle"/></xsl:if>
      <xsl:if test="@noExterior">|<xsl:value-of select="@noExterior"/></xsl:if>
      <xsl:if test="@noInterior">|<xsl:value-of select="@noInterior"/></xsl:if>
      <xsl:if test="@colonia">|<xsl:value-of select="@colonia"/></xsl:if>
      <xsl:if test="@localidad">|<xsl:value-of select="@localidad"/></xsl:if>
      <xsl:if test="@refrencia">|<xsl:value-of select="@referencia"/></xsl:if>
      <xsl:if test="@municipio">|<xsl:value-of select="@municipio"/></xsl:if>
      <xsl:if test="@estado">|<xsl:value-of select="@estado"/></xsl:if>
      <xsl:if test="@pais">|<xsl:value-of select="@pais"/></xsl:if>
      <xsl:if test="@codigoPostal">|<xsl:value-of select="@codigoPostal"/></xsl:if>
</xsl:template>

<xsl:template match="Receptor">
      <xsl:if test="@rfc">|<xsl:value-of select="@rfc"/></xsl:if>
      <xsl:if test="@nombre">|<xsl:value-of select="@nombre"/></xsl:if>
</xsl:template>

<xsl:template match="Domicilio">
      <xsl:if test="@calle">|<xsl:value-of select="@calle"/></xsl:if>
      <xsl:if test="@noExterior">|<xsl:value-of select="@noExterior"/></xsl:if>
      <xsl:if test="@noInterior">|<xsl:value-of select="@noInterior"/></xsl:if>
      <xsl:if test="@colonia">|<xsl:value-of select="@colonia"/></xsl:if>
      <xsl:if test="@localidad">|<xsl:value-of select="@localidad"/></xsl:if>
      <xsl:if test="@refrencia">|<xsl:value-of select="@referencia"/></xsl:if>
      <xsl:if test="@municipio">|<xsl:value-of select="@municipio"/></xsl:if>
      <xsl:if test="@estado">|<xsl:value-of select="@estado"/></xsl:if>
      <xsl:if test="@pais">|<xsl:value-of select="@pais"/></xsl:if>
      <xsl:if test="@codigoPostal">|<xsl:value-of select="@codigoPostal"/></xsl:if>
</xsl:template>

<xsl:template match="Concepto">
      <xsl:if test="@cantidad">|<xsl:value-of select="@cantidad"/></xsl:if>
      <xsl:if test="@unidad">|<xsl:value-of select="@unidad"/></xsl:if>
      <xsl:if test="@descripcion">|<xsl:value-of select="@descripcion"/></xsl:if>
      <xsl:if test="@valorUnitario">|<xsl:value-of select="@valorUnitario"/></xsl:if>
      <xsl:if test="@importe">|<xsl:value-of select="@importe"/></xsl:if>
</xsl:template>

<xsl:template match="Retencion">
      <xsl:if test="@impuesto">|<xsl:value-of select="@impuesto"/></xsl:if>
      <xsl:if test="@importe">|<xsl:value-of select="@importe"/></xsl:if>
</xsl:template>

<xsl:template match="Traslado">
      <xsl:if test="@impuesto">|<xsl:value-of select="@impuesto"/></xsl:if>
      <xsl:if test="@importe">|<xsl:value-of select="@importe"/></xsl:if>
</xsl:template>

<xsl:template match="Addenda">||</xsl:template>

</xsl:stylesheet>

<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:output method = "text" /> 

<xsl:template match="Comprobante">
      <xsl:value-of select="@sello"/>
</xsl:template>

</xsl:stylesheet>

Reply via email to