| 8 | == ''' HASH E O ARQUIVO ASSINADO ''' == |
| 9 | |
| 10 | Quando um arquivo JAR é assinado, para cada arquivo dentro do JAR é criada uma entrada com o seu hash no arquivo manifest. Por exemplo: |
| 11 | |
| 12 | Name: test/classes/ClassOne.class |
| 13 | SHA1-Digest: TD1GZt8G11dXY2p4olSZPc5Rj64= |
| 14 | |
| 15 | As entradas hash são como resumos dos arquivos no momento que eles foram assinados. O resumo de um arquivo só irá mudar caso o arquivo que o originou se modifique. Quando um arquivo JAR é assinado automaticamente é gerado um arquivo de assinaturas .SF. A seguir está um exemplo: |
| 16 | |
| 17 | Signature-Version: 1.0 |
| 18 | SHA1-Digest-Manifest: h1yS+K9T7DyHtZrtI+LxvgqaMYM= |
| 19 | Created-By: SignatureFile JDK 1.2 |
| 20 | |
| 21 | Name: test/classes/ClassOne.class |
| 22 | SHA1-Digest: fcav7ShIG6i86xPepmitOVo4vWY= |
| 23 | |
| 24 | Name: test/classes/ClassTwo.class |
| 25 | SHA1-Digest: xrQem9snnPhLySDiZyclMlsFdtM= |
| 26 | |
| 27 | Name: test/images/ImageOne.gif |
| 28 | SHA1-Digest: kdHbE7kL9ZHLgK7akHttYV4XIa0= |
| 29 | |
| 30 | Name: test/images/ImageTwo.gif |
| 31 | SHA1-Digest: mF0D5zpk68R4oaxEqoS9Q7nhm60= |
| 32 | |
| 33 | Como se pode ver o arquivo de assinaturas possui entradas similares as existentes no manifest. Contudo, as entradas hash do arquivo manifest são geradas a partir dos próprios arquivos, enquanto que as do arquivo de assinaturas são criadas a partir das entradas existentes no manifest. Além disso, a primeira entrada existente entre as assinaturas é um hash de todo o arquivo de manifest. |
| 34 | |
| 35 | Assim, ao se verificar a assinatura de um arquivo, primeiro se recalcula os resumos de todos os seus arquivos e se compara com os existentes no arquivo de manifest. A seguir são recalculados os resumos de todas as entradas do manifest e comparados com os resumos existentes no arquivo de assinaturas. |
| 36 | |