public Template() { seqt = new SEQUENCE.Template(); seqt.addElement(CertificationRequestInfo.getTemplate()); // seqt.addElement( new ANY.Template() ); seqt.addElement(AlgorithmIdentifier.getTemplate()); seqt.addElement(BIT_STRING.getTemplate()); }
public ASN1Value decode(Tag implicitTag, InputStream istream) throws InvalidBERException, IOException { SEQUENCE seq = (SEQUENCE) seqt.decode(implicitTag, istream); // ANY infoAny = (ANY)seq.elementAt(0); // byte[] infoEncoding = infoAny.getEncoded(); /*CertificationRequestInfo info = (CertificationRequestInfo) infoAny.decodeWith( CertificationRequestInfo.getTemplate() ); */ CertificationRequestInfo info = (CertificationRequestInfo) seq.elementAt(0); // although signature is a bit string, all algorithms we use // will produce an octet string. BIT_STRING bs = (BIT_STRING) seq.elementAt(2); if (bs.getPadCount() != 0) { throw new InvalidBERException( "signature does not fall into" + " an integral number of bytes"); } byte[] signature = bs.getBits(); return new CertificationRequest( info, // infoEncoding, (AlgorithmIdentifier) seq.elementAt(1), signature); }