Generate SourceStamp file before JAR signature am: abcdbd2a0b
Change-Id: Ieb0dd1eb1e43b6274cd1d5e5b6e70d599daf6348
diff --git a/src/main/java/com/android/apksig/ApkSigner.java b/src/main/java/com/android/apksig/ApkSigner.java
index 0739c1e..9ccd267 100644
--- a/src/main/java/com/android/apksig/ApkSigner.java
+++ b/src/main/java/com/android/apksig/ApkSigner.java
@@ -454,15 +454,37 @@
}
}
- // Step 7. Generate and output JAR signatures, if necessary. This may output more Local File
+ if (lastModifiedDateForNewEntries == -1) {
+ lastModifiedDateForNewEntries = 0x3a21; // Jan 1 2009 (DOS)
+ lastModifiedTimeForNewEntries = 0;
+ }
+
+ // Step 7. Generate and output SourceStamp certificate hash, if necessary. This may output
+ // more Local File Header + data entries and add to the list of output Central Directory
+ // records.
+ if (signerEngine.isEligibleForSourceStamp()) {
+ if (mSourceStampSignerConfig.getCertificates().isEmpty()) {
+ throw new SignatureException("No certificates configured for stamp");
+ }
+ byte[] uncompressedData =
+ computeSha256DigestBytes(
+ mSourceStampSignerConfig.getCertificates().get(0).getEncoded());
+ outputOffset +=
+ outputDataToOutputApk(
+ SOURCE_STAMP_CERTIFICATE_HASH_ZIP_ENTRY_NAME,
+ uncompressedData,
+ outputOffset,
+ outputCdRecords,
+ lastModifiedTimeForNewEntries,
+ lastModifiedDateForNewEntries,
+ outputApkOut);
+ }
+
+ // Step 8. Generate and output JAR signatures, if necessary. This may output more Local File
// Header + data entries and add to the list of output Central Directory records.
ApkSignerEngine.OutputJarSignatureRequest outputJarSignatureRequest =
signerEngine.outputJarEntries();
if (outputJarSignatureRequest != null) {
- if (lastModifiedDateForNewEntries == -1) {
- lastModifiedDateForNewEntries = 0x3a21; // Jan 1 2009 (DOS)
- lastModifiedTimeForNewEntries = 0;
- }
for (ApkSignerEngine.OutputJarSignatureRequest.JarEntry entry :
outputJarSignatureRequest.getAdditionalJarEntries()) {
String entryName = entry.getName();
@@ -505,27 +527,6 @@
outputApkOut);
}
- // Step 8. Generate and output SourceStamp certificate hash, if necessary. This may output
- // more Local File Header + data entries and add to the list of output Central Directory
- // records.
- if (signerEngine.isEligibleForSourceStamp()) {
- if (mSourceStampSignerConfig.getCertificates().isEmpty()) {
- throw new SignatureException("No certificates configured for stamp");
- }
- byte[] uncompressedData =
- computeSha256DigestBytes(
- mSourceStampSignerConfig.getCertificates().get(0).getEncoded());
- outputOffset +=
- outputDataToOutputApk(
- SOURCE_STAMP_CERTIFICATE_HASH_ZIP_ENTRY_NAME,
- uncompressedData,
- outputOffset,
- outputCdRecords,
- lastModifiedTimeForNewEntries,
- lastModifiedDateForNewEntries,
- outputApkOut);
- }
-
// Step 9. Construct output ZIP Central Directory in an in-memory buffer
long outputCentralDirSizeBytes = 0;
for (CentralDirectoryRecord record : outputCdRecords) {