private void parseDG1(byte[] DG1) { try { ASN1InputStream bIn = new ASN1InputStream(DG1); org.bouncycastle.asn1.DERApplicationSpecific app = (DERApplicationSpecific) bIn.readObject(); ASN1Sequence seq = (ASN1Sequence) app.getObject(BERTags.SEQUENCE); Enumeration secEnum = seq.getObjects(); while (secEnum.hasMoreElements()) { ASN1Primitive seqObj = (ASN1Primitive) secEnum.nextElement(); byte[] data = seqObj.getEncoded(); if (data[0]== 0x41) { Log.d("type approval number", ByteUtils.bytesToHex(data)); this.set5F01(data); } else if (data[0] == 0x42) { byte[] input = Arrays.copyOfRange(data, 3, data.length); parse5F02(input); } else if (data[0] == 0x7F) { parse7F63(data); } } bIn.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
private void parseDG11(byte[] DG11) { try { ASN1InputStream bIn = new ASN1InputStream(DG11); org.bouncycastle.asn1.DERApplicationSpecific app = (DERApplicationSpecific) bIn.readObject(); ASN1Sequence seq = (ASN1Sequence) app.getObject(BERTags.SEQUENCE); Enumeration secEnum = seq.getObjects(); while (secEnum.hasMoreElements()) { ASN1Primitive seqObj = (ASN1Primitive) secEnum.nextElement(); byte[] data = seqObj.getEncoded(); if (data[0]== 0x7F) { parseDG11(data); } else if (data[0] == (byte) 0x80) { this.setBSN(Arrays.copyOfRange(data, 2, data.length)); } } bIn.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
private byte[] parseNonce(byte[] data) { try (ASN1InputStream bIn = new ASN1InputStream(data)) { DERApplicationSpecific app = (DERApplicationSpecific) bIn.readObject(); ASN1Sequence seq = (ASN1Sequence) app.getObject(BERTags.SEQUENCE); byte[] tag80 = ((ASN1Primitive) seq.getObjects().nextElement()).getEncoded(); if (tag80[0] == (byte) 0x80) { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] kpi = md.digest(Bytes.concatenate(CAN.getBytes(), Bytes.bytes("00 00 00 03"))); return AESUtils.decryptAESCBC(Bytes.allButFirst(tag80, 2), kpi); } } catch (IOException | NoSuchAlgorithmException e) { Log.e(getClass().getName(), "Failed to parse nonce from response data", e); } return null; }
private void parseDG1(byte[] DG1) { try (ASN1InputStream bIn = new ASN1InputStream(DG1)) { org.bouncycastle.asn1.DERApplicationSpecific app = (DERApplicationSpecific) bIn.readObject(); ASN1Sequence seq = (ASN1Sequence) app.getObject(BERTags.SEQUENCE); Enumeration secEnum = seq.getObjects(); while (secEnum.hasMoreElements()) { ASN1Primitive seqObj = (ASN1Primitive) secEnum.nextElement(); byte[] data = seqObj.getEncoded(); if (data[0]== 0x41) { Log.d("type approval number", ByteUtils.bytesToHex(data)); this.set5F01(Bytes.allButFirst(data, 1)); } else if (data[0] == 0x42) { byte[] input = Arrays.copyOfRange(data, 3, data.length); parse5F02(input); } else if (data[0] == 0x7F) { parse7F63(data); } } } catch (IOException e) { Log.e(getClass().getName(), e.getMessage(), e); } }
private void parse7F63(byte[] input) { Log.d("input", ByteUtils.bytesToHex(input)); try (ASN1InputStream bIn = new ASN1InputStream(input)) { ASN1Primitive obj = bIn.readObject(); DERApplicationSpecific app = (DERApplicationSpecific) obj; ASN1Sequence seq = (ASN1Sequence) app.getObject(BERTags.SEQUENCE); Enumeration secEnum = seq.getObjects(); List<byte[]> categories = new ArrayList<>(); while (secEnum.hasMoreElements()) { ASN1Primitive seqObj = (ASN1Primitive) secEnum.nextElement(); byte[] data = seqObj.getEncoded(); Log.d("5F02data", ByteUtils.bytesToHex(data)); switch (data[0]) { case 0x02: Log.d("#CATEGORY","number of categories:" + data[data.length-1]); break; case (byte) 0x87: categories.add(Arrays.copyOfRange(data, 2, data.length)); break; } } this.set7F63(categories); } catch (IOException e) { Log.e(getClass().getName(), e.getMessage(), e); } }
private void parseDG11(byte[] DG11) { try (ASN1InputStream bIn = new ASN1InputStream(DG11)) { DERApplicationSpecific app = (DERApplicationSpecific) bIn.readObject(); ASN1Sequence seq = (ASN1Sequence) app.getObject(BERTags.SEQUENCE); Enumeration secEnum = seq.getObjects(); while (secEnum.hasMoreElements()) { ASN1Primitive seqObj = (ASN1Primitive) secEnum.nextElement(); byte[] data = seqObj.getEncoded(); if (data[0]== 0x7F) { parseDG11(data); } else if (data[0] == (byte) 0x80) { this.setBSN(Arrays.copyOfRange(data, 2, data.length)); } } } catch (IOException e) { Log.e(getClass().getName(), e.getMessage(), e); } }
public static SignaturePolicyIdentifier getInstance( Object obj) { if (obj instanceof SignaturePolicyIdentifier) { return (SignaturePolicyIdentifier)obj; } else if (obj instanceof ASN1Null || hasEncodedTagValue(obj, BERTags.NULL)) { return new SignaturePolicyIdentifier(); } else if (obj != null) { return new SignaturePolicyIdentifier(SignaturePolicyId.getInstance(obj)); } return null; }
private CVCertificateRequest(DERApplicationSpecific request) throws IOException { if (request.getApplicationTag() == EACTags.AUTHENTIFICATION_DATA) { ASN1Sequence seq = ASN1Sequence.getInstance(request.getObject(BERTags.SEQUENCE)); initCertBody(DERApplicationSpecific.getInstance(seq.getObjectAt(0))); outerSignature = DERApplicationSpecific.getInstance(seq.getObjectAt(seq.size() - 1)).getContents(); } else { initCertBody(request); } }
public OriginatorInfo getOriginatorInfo() throws IOException { originatorInfoCalled = true; if (nextObject == null) { nextObject = seq.readObject(); } if (nextObject instanceof ASN1TaggedObjectParser && ((ASN1TaggedObjectParser)nextObject).getTagNo() == 0) { ASN1SequenceParser originatorInfo = (ASN1SequenceParser) ((ASN1TaggedObjectParser)nextObject).getObjectParser(BERTags.SEQUENCE, false); nextObject = null; return OriginatorInfo.getInstance(originatorInfo.toASN1Primitive()); } return null; }
public ASN1SetParser getAuthAttrs() throws IOException { if (nextObject == null) { nextObject = seq.readObject(); } if (nextObject instanceof ASN1TaggedObjectParser) { ASN1Encodable o = nextObject; nextObject = null; return (ASN1SetParser)((ASN1TaggedObjectParser)o).getObjectParser(BERTags.SET, false); } // TODO // "The authAttrs MUST be present if the content type carried in // EncryptedContentInfo is not id-data." return null; }
public ASN1SetParser getUnauthAttrs() throws IOException { if (nextObject == null) { nextObject = seq.readObject(); } if (nextObject != null) { ASN1Encodable o = nextObject; nextObject = null; return (ASN1SetParser)((ASN1TaggedObjectParser)o).getObjectParser(BERTags.SET, false); } return null; }
public OriginatorInfo getOriginatorInfo() throws IOException { _originatorInfoCalled = true; if (_nextObject == null) { _nextObject = _seq.readObject(); } if (_nextObject instanceof ASN1TaggedObjectParser && ((ASN1TaggedObjectParser)_nextObject).getTagNo() == 0) { ASN1SequenceParser originatorInfo = (ASN1SequenceParser) ((ASN1TaggedObjectParser)_nextObject).getObjectParser(BERTags.SEQUENCE, false); _nextObject = null; return OriginatorInfo.getInstance(originatorInfo.toASN1Primitive()); } return null; }
public ASN1SetParser getUnprotectedAttrs() throws IOException { if (_nextObject == null) { _nextObject = _seq.readObject(); } if (_nextObject != null) { ASN1Encodable o = _nextObject; _nextObject = null; return (ASN1SetParser)((ASN1TaggedObjectParser)o).getObjectParser(BERTags.SET, false); } return null; }
public ASN1SetParser getCertificates() throws IOException { _certsCalled = true; _nextObject = _seq.readObject(); if (_nextObject instanceof ASN1TaggedObjectParser && ((ASN1TaggedObjectParser)_nextObject).getTagNo() == 0) { ASN1SetParser certs = (ASN1SetParser)((ASN1TaggedObjectParser)_nextObject).getObjectParser(BERTags.SET, false); _nextObject = null; return certs; } return null; }
public ASN1SetParser getCrls() throws IOException { if (!_certsCalled) { throw new IOException("getCerts() has not been called."); } _crlsCalled = true; if (_nextObject == null) { _nextObject = _seq.readObject(); } if (_nextObject instanceof ASN1TaggedObjectParser && ((ASN1TaggedObjectParser)_nextObject).getTagNo() == 1) { ASN1SetParser crls = (ASN1SetParser)((ASN1TaggedObjectParser)_nextObject).getObjectParser(BERTags.SET, false); _nextObject = null; return crls; } return null; }
public ASN1SetParser getAuthAttrs() throws IOException { if (nextObject == null) { nextObject = seq.readObject(); } if (nextObject instanceof ASN1TaggedObjectParser) { ASN1Encodable o = nextObject; nextObject = null; return (ASN1SetParser)((ASN1TaggedObjectParser)o).getObjectParser(BERTags.SET, false); } return null; }
/** * @deprecated use getContent(InputExpandedProvider) */ public CMSTypedStream getContent() throws CMSException { try { CompressedDataParser comData = new CompressedDataParser((ASN1SequenceParser)_contentInfo.getContent(BERTags.SEQUENCE)); ContentInfoParser content = comData.getEncapContentInfo(); ASN1OctetStringParser bytes = (ASN1OctetStringParser)content.getContent(BERTags.OCTET_STRING); return new CMSTypedStream(content.getContentType().toString(), new InflaterInputStream(bytes.getOctetStream())); } catch (IOException e) { throw new CMSException("IOException reading compressed content.", e); } }
/** * Return a typed stream which will allow the reading of the compressed content in * expanded form. * * @param expanderProvider a provider of expander algorithm implementations. * @return a type stream which will yield the un-compressed content. * @throws CMSException if there is an exception parsing the CompressedData object. */ public CMSTypedStream getContent(InputExpanderProvider expanderProvider) throws CMSException { try { CompressedDataParser comData = new CompressedDataParser((ASN1SequenceParser)_contentInfo.getContent(BERTags.SEQUENCE)); ContentInfoParser content = comData.getEncapContentInfo(); InputExpander expander = expanderProvider.get(comData.getCompressionAlgorithmIdentifier()); ASN1OctetStringParser bytes = (ASN1OctetStringParser)content.getContent(BERTags.OCTET_STRING); return new CMSTypedStream(content.getContentType().getId(), expander.getInputStream(bytes.getOctetStream())); } catch (IOException e) { throw new CMSException("IOException reading compressed content.", e); } }
private void initialize(ContentInfoParser contentInfo) throws CMSException { try { if (CMSObjectIdentifiers.timestampedData.equals(contentInfo.getContentType())) { this.timeStampedData = TimeStampedDataParser.getInstance(contentInfo.getContent(BERTags.SEQUENCE)); } else { throw new IllegalArgumentException("Malformed content - type must be " + CMSObjectIdentifiers.timestampedData.getId()); } } catch (IOException e) { throw new CMSException("parsing exception: " + e.getMessage(), e); } }
private CVCertificateRequest(ASN1ApplicationSpecific request) throws IOException { if (request.getApplicationTag() == EACTags.AUTHENTIFICATION_DATA) { ASN1Sequence seq = ASN1Sequence.getInstance(request.getObject(BERTags.SEQUENCE)); initCertBody(ASN1ApplicationSpecific.getInstance(seq.getObjectAt(0))); outerSignature = ASN1ApplicationSpecific.getInstance(seq.getObjectAt(seq.size() - 1)).getContents(); } else { initCertBody(request); } }
public ASN1SetParser getAuthAttrs() throws IOException { if (nextObject == null) { nextObject = seq.readObject(); } if (nextObject instanceof ASN1TaggedObjectParser) { ASN1Encodable o = nextObject; nextObject = null; return (ASN1SetParser)((ASN1TaggedObjectParser)o).getObjectParser(BERTags.SET, false); } // "The authAttrs MUST be present if the content type carried in // EncryptedContentInfo is not id-data." if (!authEncryptedContentInfoParser.getContentType().equals(CMSObjectIdentifiers.data)) { throw new ASN1ParsingException("authAttrs must be present with non-data content"); } return null; }