Это должно быть возможно.Файл MANIFEST.MF содержит SHA-1 в кодировке Base64 соответствующего файла класса.
Из вашего документа:
In the manifest file, the SHA digest value for each source file is the
digest (hash) of the binary data in the source file. In the .SF file,
on the other hand, the digest value for a given source file is the
hash of the three lines in the manifest file for the source file.
Итак, итерируйте по всем файлам классов, вычислите SHA-1, отформатируйте его так, как он отображается в файле MANIFEST.MF, затем хэшируйте его и отформатируйте так, как он отображается в файле SF.
Нет ключа, связанного с вычислением.
Пример: рассмотрим "jce1_2_2.jar "(или что вы правильно подписали).Это содержит
MANIFEST.MF записи вида
Name: javax/crypto/KeyAgreement.class
SHA1-Digest: c2p0JimzpV0dG+NChGLl5cI7MuY=
<empty line>
, которые являются Base64 (SHA1-1) из "KeyAgreement.class"(путь не имеет значения).Обратите внимание на третью пустую строку.Концами строк являются CRLF (Windows).
META-INF / 4JCEJARS.SF запись
Name: javax/crypto/KeyAgreement.class
SHA1-Digest: whGBXE+AvYO6wAoVCdnocOPIrsE=
, которая является хешем нефайл, но из этих трех строк выше.