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.