public Object readObject() throws IOException {
    PemObject obj = readPemObject();

    if (obj != null) {
      String type = obj.getType();
      if (parsers.containsKey(type)) {
        return ((PemObjectParser) parsers.get(type)).parseObject(obj);
      } else {
        throw new IOException("unrecognised object: " + type);
      }
    }

    return null;
  }
 public Object parseObject(PemObject obj) throws IOException {
   try {
     return PrivateKeyInfo.getInstance(obj.getContent());
   } catch (Exception e) {
     throw new PEMException("problem parsing PRIVATE KEY: " + e.toString(), e);
   }
 }
 /**
  * Reads in a PKCS10 certification request.
  *
  * @return the certificate request.
  * @throws java.io.IOException if an I/O error occured
  */
 public Object parseObject(PemObject obj) throws IOException {
   try {
     return new PKCS10CertificationRequest(obj.getContent());
   } catch (Exception e) {
     throw new PEMException("problem parsing certrequest: " + e.toString(), e);
   }
 }
 /**
  * Reads in a X509CRL.
  *
  * @return the X509Certificate
  * @throws java.io.IOException if an I/O error occured
  */
 public Object parseObject(PemObject obj) throws IOException {
   try {
     return new X509CRLHolder(obj.getContent());
   } catch (Exception e) {
     throw new PEMException("problem parsing cert: " + e.toString(), e);
   }
 }
    public Object parseObject(PemObject obj) throws IOException {
      try {
        Object param = ASN1Primitive.fromByteArray(obj.getContent());

        if (param instanceof ASN1ObjectIdentifier) {
          return ASN1Primitive.fromByteArray(obj.getContent());
        } else if (param instanceof ASN1Sequence) {
          return X9ECParameters.getInstance(param);
        } else {
          return null; // implicitly CA
        }
      } catch (IOException e) {
        throw e;
      } catch (Exception e) {
        throw new PEMException("exception extracting EC named curve: " + e.toString());
      }
    }
    /**
     * Reads in a PKCS7 object. This returns a ContentInfo object suitable for use with the CMS API.
     *
     * @return the X509Certificate
     * @throws java.io.IOException if an I/O error occured
     */
    public Object parseObject(PemObject obj) throws IOException {
      try {
        ASN1InputStream aIn = new ASN1InputStream(obj.getContent());

        return ContentInfo.getInstance(aIn.readObject());
      } catch (Exception e) {
        throw new PEMException("problem parsing PKCS7 object: " + e.toString(), e);
      }
    }
    /** Read a Key Pair */
    public Object parseObject(PemObject obj) throws IOException {
      boolean isEncrypted = false;
      String dekInfo = null;
      List headers = obj.getHeaders();

      for (Iterator it = headers.iterator(); it.hasNext(); ) {
        PemHeader hdr = (PemHeader) it.next();

        if (hdr.getName().equals("Proc-Type") && hdr.getValue().equals("4,ENCRYPTED")) {
          isEncrypted = true;
        } else if (hdr.getName().equals("DEK-Info")) {
          dekInfo = hdr.getValue();
        }
      }

      //
      // extract the key
      //
      byte[] keyBytes = obj.getContent();

      try {
        if (isEncrypted) {
          StringTokenizer tknz = new StringTokenizer(dekInfo, ",");
          String dekAlgName = tknz.nextToken();
          byte[] iv = Hex.decode(tknz.nextToken());

          return new PEMEncryptedKeyPair(dekAlgName, iv, keyBytes, pemKeyPairParser);
        }

        return pemKeyPairParser.parse(keyBytes);
      } catch (IOException e) {
        if (isEncrypted) {
          throw new PEMException("exception decoding - please check password and data.", e);
        } else {
          throw new PEMException(e.getMessage(), e);
        }
      } catch (IllegalArgumentException e) {
        if (isEncrypted) {
          throw new PEMException("exception decoding - please check password and data.", e);
        } else {
          throw new PEMException(e.getMessage(), e);
        }
      }
    }
    public Object parseObject(PemObject obj) throws IOException {
      try {
        RSAPublicKey rsaPubStructure = RSAPublicKey.getInstance(obj.getContent());

        return new SubjectPublicKeyInfo(
            new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE),
            rsaPubStructure);
      } catch (IOException e) {
        throw e;
      } catch (Exception e) {
        throw new PEMException("problem extracting key: " + e.toString(), e);
      }
    }
 public Object parseObject(PemObject obj) throws IOException {
   return new X509AttributeCertificateHolder(obj.getContent());
 }
 public Object parseObject(PemObject obj) throws IOException {
   return SubjectPublicKeyInfo.getInstance(obj.getContent());
 }