home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / security / pkcs / PKCS7.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  6.4 KB  |  238 lines

  1. package sun.security.pkcs;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.DataInputStream;
  5. import java.io.FilterInputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.OutputStream;
  9. import java.security.NoSuchAlgorithmException;
  10. import java.security.SignatureException;
  11. import java.util.Vector;
  12. import sun.security.util.BigInt;
  13. import sun.security.util.DerInputStream;
  14. import sun.security.util.DerOutputStream;
  15. import sun.security.util.DerValue;
  16. import sun.security.util.ObjectIdentifier;
  17. import sun.security.x509.AlgorithmId;
  18. import sun.security.x509.X500Name;
  19. import sun.security.x509.X509Cert;
  20.  
  21. public class PKCS7 {
  22.    private boolean debug = false;
  23.    private ObjectIdentifier contentType;
  24.    private BigInt version;
  25.    private AlgorithmId[] digestAlgorithmIds;
  26.    private ContentInfo contentInfo;
  27.    private X509Cert[] certificates;
  28.    private SignerInfo[] signerInfos;
  29.  
  30.    public PKCS7(InputStream var1) throws ParsingException, IOException {
  31.       DataInputStream var2 = new DataInputStream(var1);
  32.       byte[] var3 = new byte[((FilterInputStream)var2).available()];
  33.       var2.readFully(var3);
  34.       this.parse(new DerInputStream(var3));
  35.    }
  36.  
  37.    public PKCS7(DerInputStream var1) throws ParsingException {
  38.       this.parse(var1);
  39.    }
  40.  
  41.    public PKCS7(byte[] var1) throws ParsingException {
  42.       DerInputStream var2 = new DerInputStream(var1);
  43.       this.parse(var2);
  44.    }
  45.  
  46.    private void parse(DerInputStream var1) throws ParsingException {
  47.       try {
  48.          ContentInfo var2 = new ContentInfo(var1);
  49.          this.contentType = var2.contentType;
  50.          if (this.contentType.equals(ContentInfo.SIGNED_DATA_OID)) {
  51.             this.parseSignedData(var2.getContent());
  52.          } else {
  53.             throw new ParsingException("content type " + this.contentType + "not supported.");
  54.          }
  55.       } catch (IOException var3) {
  56.          this.debug(var3);
  57.          throw new ParsingException("IOException.");
  58.       }
  59.    }
  60.  
  61.    public PKCS7(AlgorithmId[] var1, ContentInfo var2, X509Cert[] var3, SignerInfo[] var4) {
  62.       this.version = new BigInt(1);
  63.       this.digestAlgorithmIds = var1;
  64.       this.contentInfo = var2;
  65.       this.certificates = var3;
  66.       this.signerInfos = var4;
  67.    }
  68.  
  69.    private void parseSignedData(DerValue var1) throws ParsingException, IOException {
  70.       DerInputStream var2 = var1.toDerInputStream();
  71.       this.version = var2.getInteger();
  72.       DerValue[] var3 = var2.getSet(1);
  73.       int var4 = var3.length;
  74.       this.digestAlgorithmIds = new AlgorithmId[var4];
  75.  
  76.       try {
  77.          for(int var5 = 0; var5 < var4; ++var5) {
  78.             DerValue var6 = var3[var5];
  79.             this.digestAlgorithmIds[var5] = AlgorithmId.parse(var6);
  80.          }
  81.       } catch (IOException var10) {
  82.          this.debug(var10);
  83.          throw new ParsingException("error parsing digest AlgorithmId IDs");
  84.       }
  85.  
  86.       this.contentInfo = new ContentInfo(var2);
  87.       DerValue[] var13 = var2.getSet(2);
  88.       var4 = var13.length;
  89.       this.certificates = new X509Cert[var4];
  90.  
  91.       for(int var14 = 0; var14 < var4; ++var14) {
  92.          X509Cert var7 = new X509Cert(var13[var14]);
  93.          this.certificates[var14] = var7;
  94.       }
  95.  
  96.       var2.getSet(0);
  97.       DerValue[] var15 = var2.getSet(1);
  98.       var4 = var15.length;
  99.       this.signerInfos = new SignerInfo[var4];
  100.  
  101.       for(int var8 = 0; var8 < var4; ++var8) {
  102.          DerInputStream var9 = var15[var8].toDerInputStream();
  103.          this.signerInfos[var8] = new SignerInfo(var9);
  104.       }
  105.  
  106.    }
  107.  
  108.    public void encodeSignedData(OutputStream var1) throws IOException {
  109.       DerOutputStream var2 = new DerOutputStream();
  110.       this.encodeSignedData(var2);
  111.       var1.write(((ByteArrayOutputStream)var2).toByteArray());
  112.    }
  113.  
  114.    public void encodeSignedData(DerOutputStream var1) throws IOException {
  115.       DerOutputStream var2 = new DerOutputStream();
  116.       var2.putInteger(this.version);
  117.       DerOutputStream var3 = new DerOutputStream();
  118.  
  119.       for(int var4 = 0; var4 < this.digestAlgorithmIds.length; ++var4) {
  120.          this.digestAlgorithmIds[var4].encode(var3);
  121.       }
  122.  
  123.       var2.write((byte)49, var3);
  124.       this.contentInfo.encode(var2);
  125.       DerOutputStream var5 = new DerOutputStream();
  126.  
  127.       for(int var6 = 0; var6 < this.certificates.length; ++var6) {
  128.          this.certificates[var6].encode(var5);
  129.       }
  130.  
  131.       var2.write((byte)49, var5);
  132.       DerOutputStream var7 = new DerOutputStream();
  133.       var2.write((byte)49, var7);
  134.       DerOutputStream var8 = new DerOutputStream();
  135.  
  136.       for(int var9 = 0; var9 < this.signerInfos.length; ++var9) {
  137.          this.signerInfos[var9].encode(var8);
  138.       }
  139.  
  140.       var2.write((byte)49, var8);
  141.       DerValue var10 = new DerValue((byte)48, ((ByteArrayOutputStream)var2).toByteArray());
  142.       ContentInfo var11 = new ContentInfo(ContentInfo.SIGNED_DATA_OID, var10);
  143.       var11.encode(var1);
  144.    }
  145.  
  146.    public SignerInfo verify(SignerInfo var1, byte[] var2) throws NoSuchAlgorithmException, SignatureException {
  147.       return var1.verify(this, var2);
  148.    }
  149.  
  150.    public SignerInfo[] verify(byte[] var1) throws NoSuchAlgorithmException, SignatureException {
  151.       Vector var2 = new Vector();
  152.  
  153.       for(int var3 = 0; var3 < this.signerInfos.length; ++var3) {
  154.          SignerInfo var4 = this.verify(this.signerInfos[var3], var1);
  155.          if (var4 != null) {
  156.             var2.addElement(var4);
  157.          }
  158.       }
  159.  
  160.       if (var2.size() != 0) {
  161.          SignerInfo[] var5 = new SignerInfo[var2.size()];
  162.          var2.copyInto(var5);
  163.          return var5;
  164.       } else {
  165.          return null;
  166.       }
  167.    }
  168.  
  169.    public SignerInfo[] verify() throws NoSuchAlgorithmException, SignatureException {
  170.       return this.verify((byte[])null);
  171.    }
  172.  
  173.    public BigInt getVersion() {
  174.       return this.version;
  175.    }
  176.  
  177.    public AlgorithmId[] getDigestAlgorithmIds() {
  178.       return this.digestAlgorithmIds;
  179.    }
  180.  
  181.    public ContentInfo getContentInfo() {
  182.       return this.contentInfo;
  183.    }
  184.  
  185.    public X509Cert[] getCertificates() {
  186.       return this.certificates;
  187.    }
  188.  
  189.    public SignerInfo[] getSignerInfos() {
  190.       return this.signerInfos;
  191.    }
  192.  
  193.    public X509Cert getCertificate(BigInt var1, X500Name var2) {
  194.       for(int var3 = 0; var3 < this.certificates.length; ++var3) {
  195.          X509Cert var4 = this.certificates[var3];
  196.          X500Name var5 = var4.getSubjectName();
  197.          BigInt var6 = var4.getSerialNumber();
  198.          if (var1.equals(var6) && var2.equals(var5)) {
  199.             return var4;
  200.          }
  201.       }
  202.  
  203.       return null;
  204.    }
  205.  
  206.    public String toString() {
  207.       String var1 = "";
  208.       var1 = var1 + "PKCS7 :: version: " + this.version + "\n";
  209.       var1 = var1 + "PKCS7 :: digest AlgorithmIds: \n";
  210.  
  211.       for(int var2 = 0; var2 < this.digestAlgorithmIds.length; ++var2) {
  212.          var1 = var1 + "\t" + this.digestAlgorithmIds[var2] + "\n";
  213.       }
  214.  
  215.       var1 = var1 + this.contentInfo + "\n";
  216.       var1 = var1 + "PKCS7 :: certificates: \n";
  217.  
  218.       for(int var3 = 0; var3 < this.certificates.length; ++var3) {
  219.          var1 = var1 + "\t" + var3 + ".   " + this.certificates[var3] + "\n";
  220.       }
  221.  
  222.       var1 = var1 + "PKCS7 :: signer infos: \n";
  223.  
  224.       for(int var4 = 0; var4 < this.signerInfos.length; ++var4) {
  225.          var1 = var1 + "\t" + var4 + ".  " + this.signerInfos[var4] + "\n";
  226.       }
  227.  
  228.       return var1;
  229.    }
  230.  
  231.    private void debug(Throwable var1) {
  232.       if (this.debug) {
  233.          var1.printStackTrace();
  234.       }
  235.  
  236.    }
  237. }
  238.