1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.jarsigner;
20
21 import java.io.File;
22 import java.io.IOException;
23 import java.util.Map;
24 import java.util.jar.Attributes;
25 import java.util.jar.JarFile;
26 import java.util.jar.Manifest;
27
28 import org.junit.jupiter.api.Test;
29
30 import static org.junit.jupiter.api.Assertions.assertEquals;
31 import static org.junit.jupiter.api.Assertions.assertFalse;
32 import static org.junit.jupiter.api.Assertions.assertTrue;
33
34
35
36
37
38
39
40 class JarSignerUtilTest extends AbstractJarSignerTest {
41
42 @Test
43 void testUnsignArchive() throws Exception {
44
45 File target = prepareTestJar("javax.persistence_2.0.5.v201212031355.jar");
46
47 assertTrue(JarSignerUtil.isArchiveSigned(target));
48
49
50 Manifest originalManifest = readManifest(target);
51 assertTrue(containsDigest(originalManifest));
52
53 Manifest originalCleanManifest = JarSignerUtil.buildUnsignedManifest(originalManifest);
54 assertFalse(containsDigest(originalCleanManifest));
55
56 assertEquals(originalCleanManifest, JarSignerUtil.buildUnsignedManifest(originalCleanManifest));
57
58 JarSignerUtil.unsignArchive(target);
59
60 assertFalse(JarSignerUtil.isArchiveSigned(target));
61
62
63
64 Manifest manifest = readManifest(target);
65
66 Manifest cleanManifest = JarSignerUtil.buildUnsignedManifest(manifest);
67 assertFalse(containsDigest(cleanManifest));
68
69 assertEquals(manifest, cleanManifest);
70 assertEquals(manifest, originalCleanManifest);
71 }
72
73 private Manifest readManifest(File file) throws IOException {
74 JarFile jarFile = new JarFile(file);
75
76 Manifest manifest = jarFile.getManifest();
77
78 jarFile.close();
79
80 return manifest;
81 }
82
83 private boolean containsDigest(Manifest manifest) {
84 for (Map.Entry<String, Attributes> entry : manifest.getEntries().entrySet()) {
85 Attributes attr = entry.getValue();
86
87 for (Map.Entry<Object, Object> objectEntry : attr.entrySet()) {
88 String attributeKey = String.valueOf(objectEntry.getKey());
89 if (attributeKey.endsWith("-Digest")) {
90 return true;
91 }
92 }
93 }
94 return false;
95 }
96 }