PrivateKeyInfo.java
上传用户:lior1029
上传日期:2013-05-07
资源大小:209k
文件大小:2k
源码类别:

CA认证

开发平台:

Java

  1. package org.bouncycastle.asn1.pkcs;
  2. import java.io.*;
  3. import java.util.Enumeration;
  4. import java.math.BigInteger;
  5. import org.bouncycastle.asn1.*;
  6. import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
  7. public class PrivateKeyInfo
  8.     implements PKCSObjectIdentifiers, DEREncodable
  9. {
  10.     private DERObject               privKey;
  11.     private AlgorithmIdentifier     algId;
  12.     public PrivateKeyInfo(
  13.         AlgorithmIdentifier algId,
  14.         DERObject           privateKey)
  15.     {
  16.         this.privKey = privateKey;
  17.         this.algId = algId;
  18.     }
  19.     public PrivateKeyInfo(
  20.         ASN1Sequence  seq)
  21.     {
  22.         Enumeration e = seq.getObjects();
  23.         BigInteger  version = ((DERInteger)e.nextElement()).getValue();
  24.         if (version.intValue() != 0)
  25.         {
  26.             throw new IllegalArgumentException("wrong version for private key info");
  27.         }
  28.         algId = new AlgorithmIdentifier((ASN1Sequence)e.nextElement());
  29.         try
  30.         {
  31.             ByteArrayInputStream    bIn = new ByteArrayInputStream(((ASN1OctetString)e.nextElement()).getOctets());
  32.             DERInputStream          dIn = new DERInputStream(bIn);
  33.             privKey = dIn.readObject();
  34.         }
  35.         catch (IOException ex)
  36.         {
  37.             throw new IllegalArgumentException("Error recoverying private key from sequence");
  38.         }
  39.     }
  40.     public AlgorithmIdentifier getAlgorithmId()
  41.     {
  42.         return algId;
  43.     }
  44.     public DERObject getPrivateKey()
  45.     {
  46.         return privKey;
  47.     }
  48.     /**
  49.      * write out an RSA private key with it's asscociated information
  50.      * as described in PKCS8.
  51.      * <pre>
  52.      *      PrivateKeyInfo ::= SEQUENCE {
  53.      *                              version Version,
  54.      *                              privateKeyAlgorithm AlgorithmIdentifier {{PrivateKeyAlgorithms}},
  55.      *                              privateKey PrivateKey,
  56.      *                              attributes [0] IMPLICIT Attributes OPTIONAL 
  57.      *                          }
  58.      *      Version ::= INTEGER {v1(0)} (v1,...)
  59.      *
  60.      *      PrivateKey ::= OCTET STRING
  61.      *
  62.      *      Attributes ::= SET OF Attribute
  63.      * </pre>
  64.      */
  65.     public DERObject getDERObject()
  66.     {
  67.         ASN1EncodableVector v = new ASN1EncodableVector();
  68.         v.add(new DERInteger(0));
  69.         v.add(algId);
  70.         v.add(new DEROctetString(privKey));
  71.         return new DERSequence(v);
  72.     }
  73. }