1 package org.apache.maven.shared.jarsigner;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.util.Map;
25 import java.util.jar.Attributes;
26 import java.util.jar.JarFile;
27 import java.util.jar.Manifest;
28
29
30
31
32
33
34
35
36 public class JarSignerUtilTest
37 extends AbstractJarSignerTest
38 {
39
40
41 public void testUnsignArchive()
42 throws Exception
43 {
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 assertTrue( originalCleanManifest.equals( 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 assertTrue( manifest.equals( cleanManifest ) );
70 assertTrue( manifest.equals( originalCleanManifest ) );
71
72 }
73
74 private Manifest readManifest( File file )
75 throws IOException
76 {
77 JarFile jarFile = new JarFile( file );
78
79 Manifest manifest = jarFile.getManifest();
80
81 jarFile.close();
82
83 return manifest;
84 }
85
86 private boolean containsDigest( Manifest manifest )
87 {
88 for ( Map.Entry<String, Attributes> entry : manifest.getEntries().entrySet() )
89 {
90 Attributes attr = entry.getValue();
91
92 for ( Map.Entry<Object, Object> objectEntry : attr.entrySet() )
93 {
94 String attributeKey = String.valueOf( objectEntry.getKey() );
95 if ( attributeKey.endsWith( "-Digest" ) )
96 {
97 return true;
98 }
99 }
100 }
101 return false;
102 }
103 }