Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2006, 2010 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: IBM Corporation - initial API and implementation /
  
  package org.eclipse.osgi.internal.signedcontent;
 
 import java.io.*;
 import java.util.*;
 
 public class SignedStorageHook implements StorageHook {
 	public static final String KEY = SignedStorageHook.class.getName();
 	public static final int HASHCODE = .hashCode();
 	private static final int STORAGE_VERSION = 3;
 	private static ArrayList savedSignerInfo = new ArrayList(5);
 	private static long firstIDSaved = -1;
 	private static long lastIDSaved = -1;
 	private static ArrayList loadedSignerInfo = new ArrayList(5);
 	private static long lastIDLoaded;
 
 	private BaseData bundledata;
 
 	public int getStorageVersion() {
 		return ;
 	}
 
 	public StorageHook create(BaseData bundledatathrows BundleException {
 		hook.bundledata = bundledata;
 		return hook;
 	}
 
 	public void initialize(Dictionary manifestthrows BundleException {
 		// do nothing
 	}
 
 	public StorageHook load(BaseData targetDataInputStream isthrows IOException {
 		if ( > target.getBundleID())
 		 = target.getBundleID();
 		hook.bundledata = target;
 		boolean signed = is.readBoolean();
 		if (!signed)
 			return hook;
 		int numSigners = is.readInt();
 		SignerInfo[] signerInfos = new SignerInfo[numSigners];
 		for (int i = 0; i < numSignersi++)
 			signerInfos[i] = readSignerInfo(is);
 
 		int resultsSize = is.readInt();
 		HashMap contentMDResults = null;
 		if (resultsSize > 0) {
 			contentMDResults = new HashMap(resultsSize);
 			for (int i = 0; i < resultsSizei++) {
 				String path = is.readUTF();
 				int numEntrySigners = is.readInt();
 				SignerInfo[] entrySigners = new SignerInfo[numEntrySigners];
 				byte[][] entryResults = new byte[numEntrySigners][];
 				for (int j = 0; j < numEntrySignersj++) {
 					entrySigners[j] = readSignerInfo(is);
 					int resultSize = is.readInt();
 					entryResults[j] = new byte[resultSize];
 					is.readFully(entryResults[j]);
 				}
 				contentMDResults.put(pathnew Object[] {entrySignersentryResults});
 			}
 		}
 		SignedContentImpl result = new SignedContentImpl(signerInfoscontentMDResults);
 		for (int i = 0; i < numSignersi++) {
 			boolean hasTSA = is.readBoolean();
 			if (!hasTSA)
 				continue;
 			SignerInfo tsaSigner = readSignerInfo(is);
 			Date signingDate = new Date(is.readLong());
 			result.addTSASignerInfo(signerInfos[i], tsaSignersigningDate);
 		}
 		hook.signedContent = result;
 		return hook;
 	}
 
 	public void save(DataOutputStream osthrows IOException {
		if ( == null)
			return;
		os.writeInt(signerInfos.length);
		for (int i = 0; i < signerInfos.lengthi++)
			saveSignerInfo(signerInfos[i], os);
		// keyed by entry path -> {SignerInfo[] infos, byte[][] results)}
		HashMap contentMDResults = .getContentMDResults();
		os.writeInt(contentMDResults == null ? -1 : contentMDResults.size());
		if (contentMDResults != null)
			for (Iterator iResults = contentMDResults.entrySet().iterator(); iResults.hasNext();) {
				Entry entry = (EntryiResults.next();
				String path = (Stringentry.getKey();
				os.writeUTF(path);
				Object[] signerResults = (Object[]) entry.getValue();
				SignerInfo[] entrySigners = (SignerInfo[]) signerResults[0];
				byte[][] entryResults = (byte[][]) signerResults[1];
				os.writeInt(entrySigners.length);
				for (int i = 0; i < entrySigners.lengthi++) {
					saveSignerInfo(entrySigners[i], os);
					os.writeInt(entryResults[i].length);
					os.write(entryResults[i]);
				}
			}
		for (int i = 0; i < signerInfos.lengthi++) {
			SignerInfo tsaInfo = .getTSASignerInfo(signerInfos[i]);
			os.writeBoolean(tsaInfo != null);
			if (tsaInfo == null)
				continue;
			saveSignerInfo(tsaInfoos);
			Date signingTime = .getSigningTime(signerInfos[i]);
			os.writeLong(signingTime != null ? signingTime.getTime() : .);
		}
	}
	private void saveSignerInfo(SignerInfo signerInfoDataOutputStream osthrows IOException {
		int cacheIdx = .indexOf(signerInfo);
		os.writeInt(cacheIdx);
		if (cacheIdx >= 0)
			return;
		Certificate[] certs = signerInfo.getCertificateChain();
		int anchorIndex = -1;
		os.writeInt(certs == null ? 0 : certs.length);
		if (certs != null)
			for (int i = 0; i < certs.lengthi++) {
				if (certs[i].equals(signerInfo.getTrustAnchor()))
					anchorIndex = i;
				byte[] certBytes;
				try {
					certBytes = certs[i].getEncoded();
				}
				os.writeInt(certBytes.length);
				os.write(certBytes);
			}
		os.writeInt(anchorIndex);
		.add(signerInfo);
	}
		int index = is.readInt();
		if (index >= 0)
			return (SignerInfo.get(index);
		int numCerts = is.readInt();
		Certificate[] certs = new Certificate[numCerts];
		for (int i = 0; i < numCertsi++) {
			int certSize = is.readInt();
			byte[] certBytes = new byte[certSize];
			is.readFully(certBytes);
			try {
catch (CertificateException e) {
			}
		}
		int anchorIdx = is.readInt();
		SignerInfoImpl result = new SignerInfoImpl(certsanchorIdx >= 0 ? certs[anchorIdx] : nullis.readUTF());
		return result;
	}
	private void getFirstLastID() {
		if ( >= 0)
			return;
		if (bundles.length > 1) {
			 = bundles[1].getBundleId();
			 = bundles[bundles.length - 1].getBundleId();
		}
	}
	public void copy(StorageHook storageHook) {
		// do nothing
	}
	public void validate() throws IllegalArgumentException {
		// do nothing
	}
	public Dictionary getManifest(boolean firstLoadthrows BundleException {
		// do nothing
		return null;
	}
	public boolean forgetStatusChange(int status) {
		// do nothing
		return false;
	}
	public boolean forgetStartLevelChange(int startlevel) {
		// do nothing
		return false;
	}
	public int getKeyHashCode() {
		return ;
	}
	public boolean compare(KeyedElement other) {
		return other.getKey() == ;
	}
	public Object getKey() {
		return ;
	}
	}
New to GrepCode? Check out our FAQ X