--- a/jdk/src/share/classes/java/util/jar/JarVerifier.java Sun Feb 12 21:09:09 2012 +0000
+++ b/jdk/src/share/classes/java/util/jar/JarVerifier.java Sun Feb 12 21:56:24 2012 -0800
@@ -48,21 +48,21 @@
/* a table mapping names to code signers, for jar entries that have
had their actual hashes verified */
- private Hashtable verifiedSigners;
+ private Hashtable<String, CodeSigner[]> verifiedSigners;
/* a table mapping names to code signers, for jar entries that have
passed the .SF/.DSA/.EC -> MANIFEST check */
- private Hashtable sigFileSigners;
+ private Hashtable<String, CodeSigner[]> sigFileSigners;
/* a hash table to hold .SF bytes */
- private Hashtable sigFileData;
+ private Hashtable<String, byte[]> sigFileData;
/** "queue" of pending PKCS7 blocks that we couldn't parse
* until we parsed the .SF file */
- private ArrayList pendingBlocks;
+ private ArrayList<SignatureFileVerifier> pendingBlocks;
/* cache of CodeSigner objects */
- private ArrayList signerCache;
+ private ArrayList<CodeSigner[]> signerCache;
/* Are we parsing a block? */
private boolean parsingBlockOrSF = false;
@@ -94,10 +94,10 @@
public JarVerifier(byte rawBytes[]) {
manifestRawBytes = rawBytes;
- sigFileSigners = new Hashtable();
- verifiedSigners = new Hashtable();
- sigFileData = new Hashtable(11);
- pendingBlocks = new ArrayList();
+ sigFileSigners = new Hashtable<>();
+ verifiedSigners = new Hashtable<>();
+ sigFileData = new Hashtable<>(11);
+ pendingBlocks = new ArrayList<>();
baos = new ByteArrayOutputStream();
manifestDigests = new ArrayList<>();
}
@@ -248,10 +248,9 @@
sigFileData.put(key, bytes);
// check pending blocks, we can now process
// anyone waiting for this .SF file
- Iterator it = pendingBlocks.iterator();
+ Iterator<SignatureFileVerifier> it = pendingBlocks.iterator();
while (it.hasNext()) {
- SignatureFileVerifier sfv =
- (SignatureFileVerifier) it.next();
+ SignatureFileVerifier sfv = it.next();
if (sfv.needSignatureFile(key)) {
if (debug != null) {
debug.println(
@@ -270,7 +269,7 @@
String key = uname.substring(0, uname.lastIndexOf("."));
if (signerCache == null)
- signerCache = new ArrayList();
+ signerCache = new ArrayList<>();
if (manDig == null) {
synchronized(manifestRawBytes) {
@@ -287,7 +286,7 @@
if (sfv.needSignatureFileBytes()) {
// see if we have already parsed an external .SF file
- byte[] bytes = (byte[]) sigFileData.get(key);
+ byte[] bytes = sigFileData.get(key);
if (bytes == null) {
// put this block on queue for later processing
@@ -343,7 +342,7 @@
*/
public CodeSigner[] getCodeSigners(String name)
{
- return (CodeSigner[])verifiedSigners.get(name);
+ return verifiedSigners.get(name);
}
public CodeSigner[] getCodeSigners(JarFile jar, JarEntry entry)
@@ -376,15 +375,14 @@
CodeSigner[] signers) {
if (signers != null) {
- ArrayList certChains = new ArrayList();
+ ArrayList<java.security.cert.Certificate> certChains = new ArrayList<>();
for (int i = 0; i < signers.length; i++) {
certChains.addAll(
signers[i].getSignerCertPath().getCertificates());
}
// Convert into a Certificate[]
- return (java.security.cert.Certificate[])
- certChains.toArray(
+ return certChains.toArray(
new java.security.cert.Certificate[certChains.size()]);
}
return null;
@@ -418,8 +416,8 @@
// MANIFEST.MF is always treated as signed and verified,
// move its signers from sigFileSigners to verifiedSigners.
if (sigFileSigners.containsKey(JarFile.MANIFEST_NAME)) {
- verifiedSigners.put(JarFile.MANIFEST_NAME,
- sigFileSigners.remove(JarFile.MANIFEST_NAME));
+ CodeSigner[] codeSigners = sigFileSigners.remove(JarFile.MANIFEST_NAME);
+ verifiedSigners.put(JarFile.MANIFEST_NAME, codeSigners);
}
}
@@ -493,10 +491,10 @@
// Extended JavaUtilJarAccess CodeSource API Support
- private Map urlToCodeSourceMap = new HashMap();
- private Map signerToCodeSource = new HashMap();
+ private Map<URL, Map<CodeSigner[], CodeSource>> urlToCodeSourceMap = new HashMap<>();
+ private Map<CodeSigner[], CodeSource> signerToCodeSource = new HashMap<>();
private URL lastURL;
- private Map lastURLMap;
+ private Map<CodeSigner[], CodeSource> lastURLMap;
/*
* Create a unique mapping from codeSigner cache entries to CodeSource.
@@ -504,19 +502,19 @@
* and shared JAR file although in practice there will be a single URL in use.
*/
private synchronized CodeSource mapSignersToCodeSource(URL url, CodeSigner[] signers) {
- Map map;
+ Map<CodeSigner[], CodeSource> map;
if (url == lastURL) {
map = lastURLMap;
} else {
- map = (Map) urlToCodeSourceMap.get(url);
+ map = urlToCodeSourceMap.get(url);
if (map == null) {
- map = new HashMap();
+ map = new HashMap<>();
urlToCodeSourceMap.put(url, map);
}
lastURLMap = map;
lastURL = url;
}
- CodeSource cs = (CodeSource) map.get(signers);
+ CodeSource cs = map.get(signers);
if (cs == null) {
cs = new VerifierCodeSource(csdomain, url, signers);
signerToCodeSource.put(signers, cs);
@@ -524,16 +522,16 @@
return cs;
}
- private CodeSource[] mapSignersToCodeSources(URL url, List signers, boolean unsigned) {
- List sources = new ArrayList();
+ private CodeSource[] mapSignersToCodeSources(URL url, List<CodeSigner[]> signers, boolean unsigned) {
+ List<CodeSource> sources = new ArrayList<>();
for (int i = 0; i < signers.size(); i++) {
- sources.add(mapSignersToCodeSource(url, (CodeSigner[]) signers.get(i)));
+ sources.add(mapSignersToCodeSource(url, signers.get(i)));
}
if (unsigned) {
sources.add(mapSignersToCodeSource(url, null));
}
- return (CodeSource[]) sources.toArray(new CodeSource[sources.size()]);
+ return sources.toArray(new CodeSource[sources.size()]);
}
private CodeSigner[] emptySigner = new CodeSigner[0];
@@ -553,7 +551,7 @@
* but this handles a CodeSource of any type, just in case.
*/
CodeSource[] sources = mapSignersToCodeSources(cs.getLocation(), getJarCodeSigners(), true);
- List sourceList = new ArrayList();
+ List<CodeSource> sourceList = new ArrayList<>();
for (int i = 0; i < sources.length; i++) {
sourceList.add(sources[i]);
}
@@ -574,6 +572,7 @@
* signing data that can be compared by object reference identity.
*/
private static class VerifierCodeSource extends CodeSource {
+ private static final long serialVersionUID = -9047366145967768825L;
URL vlocation;
CodeSigner[] vsigners;
@@ -641,16 +640,16 @@
return vcerts;
}
}
- private Map signerMap;
+ private Map<String, CodeSigner[]> signerMap;
- private synchronized Map signerMap() {
+ private synchronized Map<String, CodeSigner[]> signerMap() {
if (signerMap == null) {
/*
* Snapshot signer state so it doesn't change on us. We care
* only about the asserted signatures. Verification of
* signature validity happens via the JarEntry apis.
*/
- signerMap = new HashMap(verifiedSigners.size() + sigFileSigners.size());
+ signerMap = new HashMap<>(verifiedSigners.size() + sigFileSigners.size());
signerMap.putAll(verifiedSigners);
signerMap.putAll(sigFileSigners);
}
@@ -658,15 +657,15 @@
}
public synchronized Enumeration<String> entryNames(JarFile jar, final CodeSource[] cs) {
- final Map map = signerMap();
- final Iterator itor = map.entrySet().iterator();
+ final Map<String, CodeSigner[]> map = signerMap();
+ final Iterator<Map.Entry<String, CodeSigner[]>> itor = map.entrySet().iterator();
boolean matchUnsigned = false;
/*
* Grab a single copy of the CodeSigner arrays. Check
* to see if we can optimize CodeSigner equality test.
*/
- List req = new ArrayList(cs.length);
+ List<CodeSigner[]> req = new ArrayList<>(cs.length);
for (int i = 0; i < cs.length; i++) {
CodeSigner[] match = findMatchingSigners(cs[i]);
if (match != null) {
@@ -678,8 +677,8 @@
}
}
- final List signersReq = req;
- final Enumeration enum2 = (matchUnsigned) ? unsignedEntryNames(jar) : emptyEnumeration;
+ final List<CodeSigner[]> signersReq = req;
+ final Enumeration<String> enum2 = (matchUnsigned) ? unsignedEntryNames(jar) : emptyEnumeration;
return new Enumeration<String>() {
@@ -691,14 +690,14 @@
}
while (itor.hasNext()) {
- Map.Entry e = (Map.Entry) itor.next();
- if (signersReq.contains((CodeSigner[]) e.getValue())) {
- name = (String) e.getKey();
+ Map.Entry<String, CodeSigner[]> e = itor.next();
+ if (signersReq.contains(e.getValue())) {
+ name = e.getKey();
return true;
}
}
while (enum2.hasMoreElements()) {
- name = (String) enum2.nextElement();
+ name = enum2.nextElement();
return true;
}
return false;
@@ -719,13 +718,13 @@
* Like entries() but screens out internal JAR mechanism entries
* and includes signed entries with no ZIP data.
*/
- public Enumeration<JarEntry> entries2(final JarFile jar, Enumeration e) {
- final Map map = new HashMap();
+ public Enumeration<JarEntry> entries2(final JarFile jar, Enumeration<? extends ZipEntry> e) {
+ final Map<String, CodeSigner[]> map = new HashMap<>();
map.putAll(signerMap());
- final Enumeration enum_ = e;
+ final Enumeration<? extends ZipEntry> enum_ = e;
return new Enumeration<JarEntry>() {
- Enumeration signers = null;
+ Enumeration<String> signers = null;
JarEntry entry;
public boolean hasMoreElements() {
@@ -733,7 +732,7 @@
return true;
}
while (enum_.hasMoreElements()) {
- ZipEntry ze = (ZipEntry) enum_.nextElement();
+ ZipEntry ze = enum_.nextElement();
if (JarVerifier.isSigningRelated(ze.getName())) {
continue;
}
@@ -744,7 +743,7 @@
signers = Collections.enumeration(map.keySet());
}
while (signers.hasMoreElements()) {
- String name = (String) signers.nextElement();
+ String name = signers.nextElement();
entry = jar.newEntry(new ZipEntry(name));
return true;
}
@@ -764,7 +763,7 @@
}
};
}
- private Enumeration emptyEnumeration = new Enumeration<String>() {
+ private Enumeration<String> emptyEnumeration = new Enumeration<String>() {
public boolean hasMoreElements() {
return false;
@@ -797,8 +796,8 @@
}
private Enumeration<String> unsignedEntryNames(JarFile jar) {
- final Map map = signerMap();
- final Enumeration entries = jar.entries();
+ final Map<String, CodeSigner[]> map = signerMap();
+ final Enumeration<JarEntry> entries = jar.entries();
return new Enumeration<String>() {
String name;
@@ -813,7 +812,7 @@
}
while (entries.hasMoreElements()) {
String value;
- ZipEntry e = (ZipEntry) entries.nextElement();
+ ZipEntry e = entries.nextElement();
value = e.getName();
if (e.isDirectory() || isSigningRelated(value)) {
continue;
@@ -836,14 +835,14 @@
}
};
}
- private List jarCodeSigners;
+ private List<CodeSigner[]> jarCodeSigners;
- private synchronized List getJarCodeSigners() {
+ private synchronized List<CodeSigner[]> getJarCodeSigners() {
CodeSigner[] signers;
if (jarCodeSigners == null) {
- HashSet set = new HashSet();
+ HashSet<CodeSigner[]> set = new HashSet<>();
set.addAll(signerMap().values());
- jarCodeSigners = new ArrayList();
+ jarCodeSigners = new ArrayList<>();
jarCodeSigners.addAll(set);
}
return jarCodeSigners;
@@ -858,7 +857,7 @@
public CodeSource getCodeSource(URL url, String name) {
CodeSigner[] signers;
- signers = (CodeSigner[]) signerMap().get(name);
+ signers = signerMap().get(name);
return mapSignersToCodeSource(url, signers);
}