carloscaloca
-
Total de ítens
11 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por carloscaloca
-
-
-
Bom dia, descobri que quando o lazarus inicia o array mHashBuffer deveria ser preenchido #0, fiz uma pequena alteração e, pra mim, funcionou bem.
function TDFeWinCrypt.CalcHash(const AStream: TStream; const Digest: TSSLDgst;
const Assina: Boolean): AnsiString;
var
mCryptProvider, mCryptProviderCert: HCRYPTPROV;
mHash, aHashType: HCRYPTHASH;
hRSAKey, hSessKey, hExpKey: HCRYPTKEY;
I: Integer;
mTotal: Int64;
mBytesLen, mRead, dwKeySpec, WinErro: DWORD;
Memory: Pointer;
mHashBuffer: array [0..1023] of AnsiChar; // 1024 - Tamanho máximo do maior Hash atual
pfCallerFreeProv: LongBool;
begin
Result := '';
FillChar(mHashBuffer,1024,0); // alteração
case Digest of
dgstMD2 : aHashType := CALG_MD2;Talvez seja necessário colocar algum diretriz para funcionar melhor.
- 2
-
ok, vou ver como lhe enviar.
-
sim, verifiquei isso, porem, quando ele vai para a rotina mais abaixo, o valor mBytesLen está errado no lazarus, ele deveria ser 256 mas está com 1024. amanhã farei outro teste e informo.
-
Depurei ao mesmo tempo com o delphi e o lazarus, a variavel é passada com 1024bytes, quando volta, no delphi ela tem Length(mHashBuffer) = 256bytes, testei varias vezes e no lazarus 1024. No delphi apartir da posição 256 vem cheio de #0 e no lazarus ficam outros bytes. A função que busca a chave é a mesma, mas talves quando o Lazarus aponte pra o endereço da variavel coloque sujeira, como é feita a reversão, o lazarus não pega o valor correto da chave, eu acho.
-
fiz a alteração mas gerou um erro, não achou o numero do certificado. Fiz outra depuração e achei um erro no seguinte código:
ACBrDFeWinCrypt
1229 mBytesLen := Length(mHashBuffer); // aqui, no delphi o mHashBuffer tem tamanho de 256 e no Lazarus 1024
if Assina then
begin
if CryptSignHash(mHash, dwKeySpec, Nil, 0, @mHashBuffer, mBytesLen ) then
begin
// MS CryptoAPI retorna assinatura em "Little Endian bit string", invertendo...
Result := '';
while (mBytesLen > 256) and (mHashBuffer[mBytesLen-1] = #0) do
Dec(mBytesLen);for I := mBytesLen downto 1 do
Result := Result + mHashBuffer[I-1];
end -
O que fiz:
Rodei o ACBrNFe_Exemplo no delphi e lazarus fui depurando, passo a passo. Até a linha 862, como relatado, estava tudo igual. Apartir daí gerou o erro dos AAAAA.
-
sim estão atualizados na mesma maquina. Só que no delphi não dá nada.
-
Sim, consegue consultar status. Parece algum problema na chave:
o primeiro em delphi e o outro em lazarus.
43200814620101000170650010000000151740249251-nfe.xml 43200814620101000170650010000000151040520823-nfe.xml
Eu achei o seguinte código em ACBrDFeWinCrypt linha 861:
{$IfDef DELPHI2009_UP}
StoreProvider := CERT_STORE_PROV_SYSTEM_W;
{$ELSE}
StoreProvider := CERT_STORE_PROV_SYSTEM_A;
{$ENDIF};FpStore := CertOpenStore(
StoreProvider, 0, 0,
StoreFlag or CERT_STORE_READONLY_FLAG,
LPCTSTR( FpDFeSSL.StoreName ) ); -
Bom dia, estou testando o acbrnfe_exemplo com meu certificado RemoteId. Quando rodo no Delphi, gera as chaves certinho, mas quando rodo no Lazarus a chave fica diferente e o sefaz/rs retorna o erro 297. Podem me dar uma ajuda??
Obrigado
Problema com certificado Remoteid
em Dúvidas Gerais sobre o ACBr
Postado
Eu q tenho que agradecer ao vocês pelo execente trabalho que desenvolvem. Vou testar.