Jump to content
ngiestas

Projecto SAFT / Openssl

Recommended Posts

ngiestas

Titulo do Projecto: Giestasoft / OPENSSL

Última Versão: 1.0

Site Oficial: http://www.portugal-a-programar.pt/index.php?showtopic=41903

Licença: Freeware

Líder do Projecto: Nuno Giestas

Membros Actuais do Projecto:

Descrição do Projecto: Aqui fica a minha contribuição para aqueles que tem dificuldade em criar as chaves privadas e publicas, assinaturas e verifcação para o ficheiro SAFT para certificação.

A aplicação foi criada em Asp.net aspx

Instalação: extrair os ficheiros e correr no IIS, necessario Asp.net

Nota: não se esqueçam de mudar a localização da pasta onde vão colocar a aplicacao.

Editar o ficheiro index.aspx na linha 2

session("pasta") = "D:\INETPUB\giestasoft\openssl\"

Download: http://www.giestasoft.com/downloads/openssl.rar

Share this post


Link to post
Share on other sites
chivas

Estou um pouco atrapalhado com a validação da chave publica no validador do saft. encontrei o teu projecto mas não consigo descarrega-lo no link disponivel. é possivel disponibiliza-lo?

Share this post


Link to post
Share on other sites
chivas

Usei a tua aplicação para gerar as chaves mas mesmo assim continuo com o mesmo problema na validação do hash no validador da DGCI. Testei o hash da minha aplicação com o da tua e é igual. Estou a usar vb.net e uso o exemplo do código que o alberto silva tem no seu blog para gerar a assinatura do documento. A estrutura do saft dá-me como valida mas diz-me que alguns documentos não são validos de acordo com a chave publica fornecida. Se for possivel dar uma ajuda ou dica para resolver a situação agradeço.

Obrigado

Share this post


Link to post
Share on other sites
chivas

Não ainda não consegui, resolver.Penso que deve ser por estar a criar a chave do documento em windows. Mas já comparei o hash gerado com a mesma string na tua aplicação e é igual. Já verifiquei as definições regionais e estão correctas "," para separador decimal e "." para agrupamento de digitos. A estrutura do saft é valida mas não valida os documentos com a chave publica. o meu codigo em vb.net é este

 Dim stringToHash As String '= "2011-06-13;2011-06-13T11:51:47;VD 001/4;120.00" & ";" & vbCrLf
Dim hashstr, carhash As String
                Using privatekey As RSACryptoServiceProvider = New RSACryptoServiceProvider
                Dim privateKeyXML As String = "<RSAKeyValue><Modulus>w05eKE6MH42OfL+yETHQg3BZodUuRDvB+YkLklfOeg5sRDGdrCKDOFHJCelPFcyxKXLpOXQNrliCTYrpj+nezNn7nhPe8roo224mYHWdMa+BFDIp8W5arZ0hJlJszFzi6p2Vw+HJ0b0f7zIG3FDMVnivjRdhxTiJhiiq9Ai3up8=</Modulus><Exponent>AQAB</Exponent><P>5qsY7C3Eq/adqZ00l51PuisXLvdyi7k8IvMjN9R/y+/48zMS+UKX2dGkylkJ9bdBqMRymd3yFAG8IyKiqhF4Lw==</P><Q>2MEdAhBUYiwfT6askxeMJWocrgJYQbU2zBiFXNP0V3aEqw5j0p6220d2oX3UZ4hgYIFyh0nTuYvOIToAKYXYkQ==</Q><DP>0ZialtCnqpH2hQ6hoTqCHWnWMQkLfkacjC1dzPc8AHVXQrUgAnouPPAvyuXJFQqlkNKgR4vS0bcZ2ts370zcZQ==</DP><DQ>idgV6JAV+fDxYKgwq8KX39thrc/T7MWfuaAGgAhTJaQ7rsUR+onw4/bInN72y3jRQc5Q1XS/7wnX5w2JuN5j4Q==</DQ><InverseQ>3XFyEs0wIlPgMsPGxrVfYxSA/xTS2cveKBdFWyXzqhcmL4JLvph6cILzCdEsp+OgbgjHNnhutJcg6iCPmos3nw==</InverseQ><D>T/JlcqRskYH1oLUrpAQ7MYKs/iTwsnevuIDT3szYtXfv855Hx628/zHjVI5PlEHdB3WFaMJL02FhvXIul32JeKRfracxh8j2HEOGb8ru/imFiaf1dOqMqJyYKYejtuWZPFjsXj2olvKTMN9Ax/iJUVcF7f5J0XcuvPbA5FcV9KE=</D></RSAKeyValue>"

                privatekey.FromXmlString(privateKeyXML)
                Dim buffer As Byte() = Encoding.GetEncoding("Windows-1252").GetBytes(stringToHash)
                Dim signature As Byte() = privatekey.SignData(buffer, "SHA1")
                hashstr = (Convert.ToBase64String(signature))
            End Using

Já dei voltas a cabeça, mas ainda não consegui resolver, se for possivel dar uma ajuda.

Obrigado

Share this post


Link to post
Share on other sites
ngiestas

Dim stringToHash As String '= "2011-06-13;2011-06-13T11:51:47;VD 001/4;120.00" & ";" & vbCrLf

Porque usas " & ";" & vbCrLf ???

eu xeguei a usar essa maneira e correu bem,

tenta la Dim stringToHash As String = "2011-06-13;2011-06-13T11:51:47;VD 001/4;120.00;"

Share this post


Link to post
Share on other sites
ngiestas

o 1º documento n pode ter o espaço depois da ;

ou seja,

1º doc, string = "2011-06-13;2011-06-13T11:51:47;VD 001/4;120.00;"

2º doc, string = 2011-06-13;2011-06-13T11:51:47;VD 001/4;120.00;<hash_anterior>"

Share this post


Link to post
Share on other sites
chivas

o que estou a usar com as variaveis dos valores que vou buscar à base de dados é esta string:

stringToHash = CStr(dvnd) + ";" + CStr(dvnd2) + ";VD 001/" + CStr(numvnd) + ";" + CStr(total) + ";" + vbCrLf

não uso espaço no fim, a 1 variavel dvnd é InvoiceDate a dvnd2 é a SystemEntryDate a numvnd InvoiceNo e total GrossTotal e linefeed

sem vbCrLf na tua aplicação dá erro.

obrigado

Share this post


Link to post
Share on other sites
ngiestas

da erro ?

eu usei os dados das finanças e dame tudo ok!

hum... na minha aplicação qd fazes assinar n da a mesma hash das finanças?

Share this post


Link to post
Share on other sites
chivas

nesta string

stringToHash = CStr(dvnd) + ";" + CStr(dvnd2) + ";VD 001/" + CStr(numvnd) + ";" + CStr(total) + ";" + vbCrLf

Share this post


Link to post
Share on other sites
ngiestas

tenta assim: stringToHash = CStr(dvnd) + ";" + CStr(dvnd2) + ";VD 001/" + CStr(numvnd) + ";" + CStr(total) + ";"

eu fiz os testes:

com a string = "2008-03-10;2008-03-10T15:58:00;FT 1/1;28.07;"

chave privada das finanças

-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDWDX9wVqj6ZqNZU1ojwBpyKKkuzHTCmfK39xx/T9vWkqpcV7h3
sx++ZOv2KhhNkIe/1I4OCWDPCXRE4g0uIQr0NS29vMlP3aHHayy76+lbBCNVcHFx
M0ggjre1acnD0qUpZ6Vza7F+PpCyuypD2V/pkL1nX9Z6z5uYyqc0XaSFdwIDAQAB
AoGBAJCA7j6Vkl/w+GeuOJUX9AKLZqN8TXquWUhOX4OnEt9Jhg7u/U55s31iPlWh
12RNpQcg5IGfXSaH2GFEReeVUQGMrb89kkfbeY5HSRHh3/sBSyJTMn2cjsqfUnUJ
hywJPxT8NFIcS2pRBJe/QN/pL+M2jk+Fl40wyVXRhnog+4fhAkEA//Tijl5SA7a/
uCyfOQkJ6yop13dfN4EHEWYMzI6SlnYWuJfdIOz4wkzBWgD0r/btFAths1zElmRW
INjWsB84ZwJBANYWywqsZA4FShXkDEWfG1GbrEIXiOnPJay2p7en3DQ+lx4GfE10
iO52f54QRu13SZp06050YkrWcRfBGCXaYHECQQCU8vMsmmLr2ltzWDRIQqRM/7pd
sw/sAuAUFej42Tcg7BOI1IdQc9bHa1dRgyDhjbalZYIzmJamVjlw3/7/ewudAkB/
ipatpiP5YldPkUtqUq5QwOAvg5vSRtEYAr0KIZuDGGKoxY5aCnnlLn06qlHG+JDF
zq+8ToOcOAKp9yQusNlRAkEA+0DarosTmn2I7+fj2/3ojVKdW/eIisz547U3bGbW
/hBCZRi+y+cQnPlZ7Cr4LcGInhdxR+fSWptMNwrDCUiYHA==
-----END RSA PRIVATE KEY-----

deu o resultado esperado:

F8952fjEClltx2tF9m6/QTFynFjSuiboMslNZ1ag9oR5iIivgYYa0cNa0wJeWXlsf8QQVHUol303hp7XmIy5/kFOiV0Cv8QH6SF0Q5zNsDtpeFh2ZJ256y0DkJMSQqCq3oSka+9zIXXRkXgEsSv6VScCYv8VTlIcGjsablpR6A4=

Share this post


Link to post
Share on other sites
chivas

vou já tentei e deu-me o mesmo erro é o exemplo do saft criado

<InvoiceNo>VD 001/19</InvoiceNo> 
  <InvoiceStatus>N</InvoiceStatus> 
  <Hash>YbtTLxleY6eY7zFIdQiNktAs9frL+/2XVzRCRh4y4ipalWsbfay2FoNHC9IEU1WcErWnjwZbCOjFu+VRywVwSPg+8iVoA5Sjo6uemis6EtCzfXhGpYs/QHuXHVgVHKrspG7FblslIrkdlaWY/jrfb632z5B8Miv+jmYnq44OyV8=</Hash> 
  <HashControl>1</HashControl> 
  <Period>6</Period> 
  <InvoiceDate>2011-06-13</InvoiceDate> 
  <InvoiceType>VD</InvoiceType> 
  <SelfBillingIndicator>0</SelfBillingIndicator> 
  <SystemEntryDate>2011-06-13T11:22:52</SystemEntryDate> 
  <CustomerID>1390</CustomerID> 
- <ShipTo>
  <DeliveryDate>2011-06-13</DeliveryDate> 
- <Address>
  <AddressDetail>Rua Almada Negreiros56</AddressDetail> 
  <City>Vil</City> 
  <PostalCode>0000-000</PostalCode> 
  <Country>PT</Country> 
  </Address>
  </ShipTo>
- <ShipFrom>
  <DeliveryDate>2011-06-13</DeliveryDate> 
- <Address>
  <AddressDetail>Rua Almada Negreiros56</AddressDetail> 
  <City>Vil</City> 
  <PostalCode>0010-000</PostalCode> 
  <Country>PT</Country> 
  </Address>
  </ShipFrom>
- <Line>
  <LineNumber>1</LineNumber> 
  <ProductCode>163</ProductCode> 
  <ProductDescription>Colocação de Aparelho Ortodôntico</ProductDescription> 
  <Quantity>1</Quantity> 
  <UnitOfMeasure>UNI</UnitOfMeasure> 
  <UnitPrice>500.00</UnitPrice> 
  <TaxPointDate>2011-06-13</TaxPointDate> 
  <Description>Colocação de Aparelho Ortodôntico</Description> 
  <CreditAmount>500.00</CreditAmount> 
- <Tax>
  <TaxType>IVA</TaxType> 
  <TaxCountryRegion>PT</TaxCountryRegion> 
  <TaxCode>ISE</TaxCode> 
  <TaxPercentage>0</TaxPercentage> 
  </Tax>
  <TaxExemptionReason>Artigo9 N.o2 CIVA D.L. N.394-B-84</TaxExemptionReason> 
  <SettlementAmount>0.00</SettlementAmount> 
  </Line>
- <DocumentTotals>
  <TaxPayable>0.00</TaxPayable> 
  <NetTotal>500.00</NetTotal> 
  <GrossTotal>500.00</GrossTotal> 
  </DocumentTotals>

Share this post


Link to post
Share on other sites
chivas

este é sem vbCrLf  enganei-me

  <Invoice>
        <InvoiceNo>VD 001/20</InvoiceNo>
        <InvoiceStatus>N</InvoiceStatus>
        <Hash>ETwrlFYZTMEikXMnhGphRXG8HOGv1271ANf9pPLTTUOefbrbTLt8aL3XK3QCJ+V5UEFlSHtQf3hHfX+9EymAZ0nP2vEAr+PeatuxjA/i4byhLGboCo4yL5CqkVePU/PJAmOPQ/7Yh45x8aPh9qQsFKOB8V/KdRD9HxYjg9xwO/s=</Hash>
        <HashControl>1</HashControl>
        <Period>6</Period>
        <InvoiceDate>2011-06-13</InvoiceDate>
        <InvoiceType>VD</InvoiceType>
        <SelfBillingIndicator>0</SelfBillingIndicator>
        <SystemEntryDate>2011-06-13T11:34:30</SystemEntryDate>
        <CustomerID>20327</CustomerID>
        <ShipTo>
          <DeliveryDate>2011-06-13</DeliveryDate>
          <Address>
            <AddressDetail>Rua Almada Negreiros56</AddressDetail>
            <City>Vil</City>
            <PostalCode>0000-000</PostalCode>
            <Country>PT</Country>
          </Address>
        </ShipTo>
        <ShipFrom>
          <DeliveryDate>2011-06-13</DeliveryDate>
          <Address>
            <AddressDetail>Rua Almada Negreiros56</AddressDetail>
            <City>Vi</City>
            <PostalCode>0000-000</PostalCode>
            <Country>PT</Country>
          </Address>
        </ShipFrom>
        <Line>
          <LineNumber>1</LineNumber>
          <ProductCode>157</ProductCode>
          <ProductDescription>Consulta M. Dentária / Medicação</ProductDescription>
          <Quantity>1</Quantity>
          <UnitOfMeasure>UNI</UnitOfMeasure>
          <UnitPrice>25.00</UnitPrice>
          <TaxPointDate>2011-06-13</TaxPointDate>
          <Description>Consulta M. Dentária / Medicação</Description>
          <CreditAmount>25.00</CreditAmount>
          <Tax>
            <TaxType>IVA</TaxType>
            <TaxCountryRegion>PT</TaxCountryRegion>
            <TaxCode>ISE</TaxCode>
            <TaxPercentage>0</TaxPercentage>
          </Tax>
          <TaxExemptionReason>Artigo9 N.o2 CIVA D.L. N.394-B-84</TaxExemptionReason>
          <SettlementAmount>0.00</SettlementAmount>
        </Line>
        <Line>
          <LineNumber>2</LineNumber>
          <ProductCode>164</ProductCode>
          <ProductDescription>Goteira de Branqueamento</ProductDescription>
          <Quantity>1</Quantity>
          <UnitOfMeasure>UNI</UnitOfMeasure>
          <UnitPrice>125.00</UnitPrice>
          <TaxPointDate>2011-06-13</TaxPointDate>
          <Description>Goteira de Branqueamento</Description>
          <CreditAmount>125.00</CreditAmount>
          <Tax>
            <TaxType>IVA</TaxType>
            <TaxCountryRegion>PT</TaxCountryRegion>
            <TaxCode>ISE</TaxCode>
            <TaxPercentage>0</TaxPercentage>
          </Tax>
          <TaxExemptionReason>Artigo9 N.o2 CIVA D.L. N.394-B-84</TaxExemptionReason>
          <SettlementAmount>0.00</SettlementAmount>
        </Line>
        <DocumentTotals>
          <TaxPayable>0.00</TaxPayable>
          <NetTotal>150.00</NetTotal>
          <GrossTotal>150.00</GrossTotal>
        </DocumentTotals>
      </Invoice>

Share this post


Link to post
Share on other sites
ngiestas

hum.... isto é muito estranho.

vamos fazer um teste:

usa a chave privada das finanças, tira o ficheiro saft com 1 documento por ex; vd 1/1

depois posta ka o resultado

Share this post


Link to post
Share on other sites
chivas

a string é esta  2011-06-13;2011-06-13T11:55:58;VD 001/21;165.00;

o Hash gerado com a chave das finanças é este:

RcopsPSA+b2BH8gCwZzzSwqWvzs1o1xGFnLAIQOl8v9Tc2s/tSIdJ5TIG/8l/tTwdT+jL+taZ55VEVRkBlvFmieU1wE5Q8M0ZN8OtWF385ReCjC5wMfF59I5jpqHgs7wvB/KUQkl7VeLwnuhyrS7eoZjgD/zp14L6tYwTKQ7C7A=

Share this post


Link to post
Share on other sites
ngiestas

tive a testar, tens algo mal no ficheiro saft, a hash ta bem feita!

verifica se o programa ta a escrever os mesmos valores, espaços nos campos da hash

Share this post


Link to post
Share on other sites
ngiestas

ta tudo correcto!

validou sem erros

"Todos os documentos foram correctamente validados pela chave pública fornecida."

da.te erro d q ?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.