LegacyVerifierFactory.java :  » IDE-Eclipse » osgi » org » eclipse » osgi » internal » signedcontent » Java Open Source

Java Open Source » IDE Eclipse » osgi 
osgi » org » eclipse » osgi » internal » signedcontent » LegacyVerifierFactory.java
/*******************************************************************************
 * Copyright (c) 2007, 2008 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.File;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.cert.*;
import java.util.ArrayList;
import java.util.Date;
import org.eclipse.osgi.internal.provisional.verifier.*;
import org.eclipse.osgi.signedcontent.*;
import org.osgi.framework.Bundle;

public class LegacyVerifierFactory implements CertificateVerifierFactory {
  private final SignedContentFactory signedContentFactory;

  public LegacyVerifierFactory(SignedContentFactory signedContentFactory) {
    this.signedContentFactory = signedContentFactory;
  }

  public CertificateVerifier getVerifier(File content) throws IOException {
    try {
      return new LegacyVerifier(signedContentFactory.getSignedContent(content));
    } catch (GeneralSecurityException e) {
      throw (IOException) new IOException(e.getMessage()).initCause(e);
    }
  }

  public CertificateVerifier getVerifier(Bundle bundle) throws IOException {
    try {
      return new LegacyVerifier(signedContentFactory.getSignedContent(bundle));
    } catch (GeneralSecurityException e) {
      throw (IOException) new IOException(e.getMessage()).initCause(e);
    }
  }

  static class LegacyVerifier implements CertificateVerifier {
    private final SignedContent signedContent;

    public LegacyVerifier(SignedContent signedContent) {
      this.signedContent = signedContent;
    }

    public void checkContent() throws CertificateException, CertificateExpiredException {
      SignedContentEntry[] entries = signedContent.getSignedEntries();
      for (int i = 0; i < entries.length; i++) {
        try {
          entries[i].verify();
        } catch (InvalidContentException e) {
          throw new SecurityException(e.getMessage());
        } catch (IOException e) {
          throw new SecurityException(e.getMessage());
        }
      }
      SignerInfo[] infos = signedContent.getSignerInfos();
      for (int i = 0; i < infos.length; i++)
        signedContent.checkValidity(infos[i]);
    }

    public CertificateChain[] getChains() {
      SignerInfo infos[] = signedContent.getSignerInfos();
      CertificateChain[] chains = new CertificateChain[infos.length];
      for (int i = 0; i < chains.length; i++)
        chains[i] = new LegacyChain(infos[i], signedContent);
      return chains;
    }

    public boolean isSigned() {
      return signedContent.isSigned();
    }

    public String[] verifyContent() {
      ArrayList invalidContent = new ArrayList(0);
      SignedContentEntry[] entries = signedContent.getSignedEntries();
      for (int i = 0; i < entries.length; i++) {
        try {
          entries[i].verify();
        } catch (InvalidContentException e) {
          invalidContent.add(entries[i].getName());
        } catch (IOException e) {
          invalidContent.add(entries[i].getName());
        }
      }
      return (String[]) invalidContent.toArray(new String[invalidContent.size()]);
    }
  }

  static class LegacyChain implements CertificateChain {
    private final SignerInfo signerInfo;
    private final SignedContent content;

    public LegacyChain(SignerInfo signerInfo, SignedContent content) {
      this.signerInfo = signerInfo;
      this.content = content;
    }

    public Certificate[] getCertificates() {
      return signerInfo.getCertificateChain();
    }

    public String getChain() {
      StringBuffer sb = new StringBuffer();
      Certificate[] certs = getCertificates();
      for (int i = 0; i < certs.length; i++) {
        X509Certificate x509Cert = ((X509Certificate) certs[i]);
        sb.append(x509Cert.getSubjectDN().getName());
        sb.append("; "); //$NON-NLS-1$
      }
      return sb.toString();
    }

    public Certificate getRoot() {
      Certificate[] certs = getCertificates();
      return certs.length > 0 ? certs[certs.length - 1] : null;
    }

    public Certificate getSigner() {
      Certificate[] certs = getCertificates();
      return certs.length > 0 ? certs[0] : null;
    }

    public Date getSigningTime() {
      return content.getSigningTime(signerInfo);
    }

    public boolean isTrusted() {
      return signerInfo.isTrusted();
    }

  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.