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 / PKCS10.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  4.1 KB  |  126 lines

  1. package sun.security.pkcs;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.IOException;
  5. import java.io.PrintStream;
  6. import java.security.InvalidKeyException;
  7. import java.security.NoSuchAlgorithmException;
  8. import java.security.Signature;
  9. import java.security.SignatureException;
  10. import sun.misc.BASE64Encoder;
  11. import sun.misc.CharacterEncoder;
  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.x509.AlgorithmId;
  17. import sun.security.x509.X500Name;
  18. import sun.security.x509.X500Signer;
  19. import sun.security.x509.X509Key;
  20.  
  21. public class PKCS10 {
  22.    private X500Name subject;
  23.    private X509Key subjectPublicKeyInfo;
  24.    private DerValue attributeSet;
  25.    private byte[] certificateRequest;
  26.  
  27.    public PKCS10(X509Key var1) {
  28.       this.subjectPublicKeyInfo = var1;
  29.    }
  30.  
  31.    public PKCS10(byte[] var1) throws IOException, SignatureException, NoSuchAlgorithmException {
  32.       this.certificateRequest = var1;
  33.       DerInputStream var2 = new DerInputStream(var1);
  34.       DerValue[] var3 = var2.getSequence(3);
  35.       if (var3.length != 3) {
  36.          throw new IllegalArgumentException("not a PKCS #10 request");
  37.       } else {
  38.          var1 = var3[0].toByteArray();
  39.          AlgorithmId var4 = AlgorithmId.parse(var3[1]);
  40.          byte[] var5 = var3[2].getBitString();
  41.          BigInt var7 = var3[0].data.getInteger();
  42.          if (var7.toInt() != 0) {
  43.             throw new IllegalArgumentException("not PKCS #10 v1");
  44.          } else {
  45.             this.subject = new X500Name(var3[0].data);
  46.             this.subjectPublicKeyInfo = X509Key.parse(var3[0].data.getDerValue());
  47.             if (var3[0].data.available() != 0) {
  48.                this.attributeSet = var3[0].data.getDerValue();
  49.             } else {
  50.                this.attributeSet = null;
  51.             }
  52.  
  53.             if (var3[0].data.available() != 0) {
  54.                throw new IllegalArgumentException("illegal PKCS #10 data");
  55.             } else {
  56.                try {
  57.                   Signature var6 = Signature.getInstance(var4.getName());
  58.                   var6.initVerify(this.subjectPublicKeyInfo);
  59.                   var6.update(var1);
  60.                   if (!var6.verify(var5)) {
  61.                      throw new SignatureException("Invalid PKCS #10 signature");
  62.                   }
  63.                } catch (InvalidKeyException var8) {
  64.                   throw new SignatureException("invalid key");
  65.                }
  66.             }
  67.          }
  68.       }
  69.    }
  70.  
  71.    public void encodeAndSign(X500Signer var1) throws IOException, SignatureException {
  72.       if (this.certificateRequest != null) {
  73.          throw new SignatureException("request is already signed");
  74.       } else {
  75.          this.subject = var1.getSigner();
  76.          DerOutputStream var3 = new DerOutputStream();
  77.          DerOutputStream var2 = new DerOutputStream();
  78.          var2.write((byte)-96, var3);
  79.          this.attributeSet = new DerValue(((ByteArrayOutputStream)var2).toByteArray());
  80.          var3 = new DerOutputStream();
  81.          var3.putInteger(new BigInt(0));
  82.          this.subject.emit(var3);
  83.          this.subjectPublicKeyInfo.emit(var3);
  84.          this.attributeSet.emit(var3);
  85.          var2 = new DerOutputStream();
  86.          var2.write((byte)48, var3);
  87.          byte[] var4 = ((ByteArrayOutputStream)var2).toByteArray();
  88.          var3 = var2;
  89.          var1.update(var4, 0, var4.length);
  90.          byte[] var5 = var1.sign();
  91.          var1.getAlgorithmId().emit(var2);
  92.          var2.putBitString(var5);
  93.          var2 = new DerOutputStream();
  94.          var2.write((byte)48, var3);
  95.          this.certificateRequest = ((ByteArrayOutputStream)var2).toByteArray();
  96.       }
  97.    }
  98.  
  99.    public X500Name getSubjectName() {
  100.       return this.subject;
  101.    }
  102.  
  103.    public X509Key getSubjectPublicKeyInfo() {
  104.       return this.subjectPublicKeyInfo;
  105.    }
  106.  
  107.    public byte[] toByteArray() {
  108.       return this.certificateRequest;
  109.    }
  110.  
  111.    public void print(PrintStream var1) throws IOException, SignatureException {
  112.       if (this.certificateRequest == null) {
  113.          throw new SignatureException("Cert request was not signed");
  114.       } else {
  115.          BASE64Encoder var2 = new BASE64Encoder();
  116.          var1.println("-----BEGIN NEW CERTIFICATE REQUEST-----");
  117.          ((CharacterEncoder)var2).encodeBuffer(this.certificateRequest, var1);
  118.          var1.println("-----END NEW CERTIFICATE REQUEST-----");
  119.       }
  120.    }
  121.  
  122.    public String toString() {
  123.       return "[PKCS #10 certificate request, " + this.subjectPublicKeyInfo.getAlgorithmId().getName() + " public key, for <" + this.subject + ">]";
  124.    }
  125. }
  126.