/** * EncryptedContentInfo ::= SEQUENCE { contentType ContentType, contentEncryptionAlgorithm * ContentEncryptionAlgorithmIdentifier, encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL } * * <p>EncryptedContent ::= OCTET STRING */ public static EncContent fromASN1(ASN1Encodable content) { ASN1Sequence sequence = (ASN1Sequence) content; ASN1ObjectIdentifier contentType = (ASN1ObjectIdentifier) (sequence.getObjectAt(0)); int nid = ASN1Registry.obj2nid(contentType); EncContent ec = new EncContent(); ec.setContentType(nid); ec.setAlgorithm(AlgorithmIdentifier.getInstance(sequence.getObjectAt(1))); if (sequence.size() > 2 && sequence.getObjectAt(2) instanceof ASN1TaggedObject && ((ASN1TaggedObject) (sequence.getObjectAt(2))).getTagNo() == 0) { ASN1Encodable ee = ((ASN1TaggedObject) (sequence.getObjectAt(2))).getObject(); if (ee instanceof ASN1Sequence && ((ASN1Sequence) ee).size() > 0) { ByteList combinedOctets = new ByteList(); Enumeration enm = ((ASN1Sequence) ee).getObjects(); while (enm.hasMoreElements()) { byte[] octets = ((ASN1OctetString) enm.nextElement()).getOctets(); combinedOctets.append(octets); } ec.setEncData(new DEROctetString(combinedOctets.bytes())); } else { ec.setEncData((ASN1OctetString) ee); } } return ec; }
public ASN1Encodable asASN1() { ASN1EncodableVector vector = new ASN1EncodableVector(); vector.add(ASN1Registry.nid2obj(contentType).toASN1Primitive()); vector.add(algorithm.toASN1Primitive()); if (encData != null) { vector.add(new DERTaggedObject(false, 0, encData)); } return new DLSequence(vector); }
@Override public String toString() { return "#<EncContent contentType=" + contentType + " algorithm=" + (algorithm == null ? "null" : ASN1Registry.o2a(algorithm.getAlgorithm())) + " content=" + encData + ">"; }