O municipio de Campinas exige um campo chamado Assinatura, onde nele é gerado uma hash do tipo SHA-1 com tamanho máximo de 2000 caracteres.
Quando geramos o xml por um arquivo TX2  ou DataSet o campo virá dessa forma :
 
<Assinatura>0000000000000000000000000000000000000000</Assinatura>

Após utilizar o método Assinar, a hash vai ser gerada :

<Assinatura>da90a794ca97a5888466f35809b99632ec5d6212</Assinatura>

O que acontece é que na conversão ele verifica alguns campos do xml, concatena os valores desses campos e depois quando assinarmos o campo será criptografado para SHA-1. Os campos utilizados são :

A forma de preencher eles são :

Texto gerado: 00000317330NF 00000003866320090905T NN000000000001686000000000000000082997990008764130000102

Código Hash : 6bcbb93fd7e6d7f0417656f4931ba9f92a7ac1da.

Quando utilizamos o TX2 não precisamos informar nada para o campo Assinatura. Porém quando usamos por dataset vamos usar da seguinte forma :

Delphi : NFSeDS.Campo('Assinatura').AsString := '0000000000000000000000000000000000000000';

VB6    : nfse.SetCampo "Assinatura", "0000000000000000000000000000000000000000"

C#     : nfse.SetCampo("Assinatura", "0000000000000000000000000000000000000000");