Red Hat Application Migration Toolkit
package iaik.pkcs.pkcs7; import iaik.asn1.ASN; import iaik.asn1.ASN1Object; import iaik.asn1.CodingException; import iaik.asn1.DerCoder; import iaik.asn1.DerInputStream; import iaik.asn1.INTEGER; import iaik.asn1.ObjectID; import iaik.asn1.SEQUENCE; import iaik.asn1.structures.AlgorithmID; import iaik.pkcs.PKCSException; import iaik.pkcs.PKCSParsingException; import iaik.pkcs.pkcs7.ContentStream; import iaik.pkcs.pkcs7.EncryptedContentInfoStream; import iaik.pkcs.pkcs7.IssuerAndSerialNumber; import iaik.pkcs.pkcs7.RecipientInfo; import iaik.utils.Util; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.security.InvalidKeyException; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.cert.X509Certificate; import java.util.Enumeration; import java.util.Vector; import javax.crypto.SecretKey; public class EnvelopedDataStream implements ContentStream { // $FF: synthetic field static Class a; protected int block_size; protected SecretKey symmetric_key; protected EncryptedContentInfoStream encrypted_content_info; protected Vector recipient_infos; protected int version; static Class a(String var0) { try { return Class.forName(var0); } catch (ClassNotFoundException var2) { throw new NoClassDefFoundError(var2.getMessage()); } } public void writeTo(OutputStream var1, int var2) throws IOException { try { DerCoder.encodeTo(this.toASN1Object(var2), var1); } catch (PKCSException var4) { throw new IOException(var4.toString()); } } public void writeTo(OutputStream var1) throws IOException { try { DerCoder.encodeTo(this.toASN1Object(), var1); } catch (PKCSException var3) { throw new IOException(var3.toString()); } } public String toString(boolean var1) { StringBuffer var2 = new StringBuffer(); var2.append("Version: " + this.version + "\n"); if(var1) { for(int var3 = 0; var3 < this.recipient_infos.size(); ++var3) { var2.append("\nRecipientInfo " + (var3 + 1) + ":{\n"); var2.append(((RecipientInfo)this.recipient_infos.elementAt(var3)).toString()); var2.append("\n}"); } } else { var2.append("RecipientInfos: " + this.recipient_infos.size() + "\n"); } var2.append("\nEncryptedContentInfo: {\n"); var2.append(this.encrypted_content_info.toString() + "}"); return var2.toString(); } public String toString() { return this.toString(false); } protected ASN1Object toASN1Object(int var1) throws PKCSException { if(var1 <= 0) { var1 = this.block_size; } if(this.recipient_infos == null) { throw new PKCSException("No recipients specified."); } else { if(this.symmetric_key != null) { Enumeration var2 = this.recipient_infos.elements(); while(var2.hasMoreElements()) { ((RecipientInfo)var2.nextElement()).encryptKey(this.symmetric_key); } } this.encrypted_content_info.setBlockSize(var1); SEQUENCE var5 = new SEQUENCE(true); try { var5.addComponent(new INTEGER(this.version)); var5.addComponent(ASN.createSetOf(this.recipient_infos)); var5.addComponent(this.encrypted_content_info.toASN1Object()); return var5; } catch (CodingException var4) { throw new PKCSException(var4.toString()); } } } public ASN1Object toASN1Object() throws PKCSException { return this.toASN1Object(-1); } public void setupCipher(PrivateKey var1, int var2) throws InvalidKeyException, NoSuchAlgorithmException, PKCSException { SecretKey var3 = ((RecipientInfo)this.recipient_infos.elementAt(var2)).decryptKey(var1); this.encrypted_content_info.setupCipher(var3); } public void setupCipher(Key var1) throws InvalidKeyException, NoSuchAlgorithmException, PKCSException { this.encrypted_content_info.setupCipher(var1); } public void setRecipientInfos(RecipientInfo[] var1) { this.recipient_infos = Util.getVector(var1); } public void setBlockSize(int var1) { this.block_size = var1; } public int getVersion() { return this.version; } public RecipientInfo[] getRecipientInfos() { return (RecipientInfo[])Util.toArray(this.recipient_infos, a != null?a:(a = a("iaik.pkcs.pkcs7.RecipientInfo"))); } public RecipientInfo getRecipientInfo(X509Certificate var1) { Enumeration var2 = this.recipient_infos.elements(); RecipientInfo var3; IssuerAndSerialNumber var4; do { if(!var2.hasMoreElements()) { return null; } var3 = (RecipientInfo)var2.nextElement(); var4 = var3.getIssuerAndSerialNumber(); } while(var4 == null || !var4.isIssuerOf(var1)); return var3; } public InputStream getInputStream() { return this.encrypted_content_info.getInputStream(); } public Object getEncryptedContentInfo() { return this.encrypted_content_info; } public ObjectID getContentType() { return ObjectID.pkcs7_envelopedData; } public int getBlockSize() { return this.block_size; } public void decode(InputStream var1) throws PKCSParsingException, IOException { if(!(var1 instanceof DerInputStream)) { var1 = new DerInputStream((InputStream)var1); } DerInputStream var2 = ((DerInputStream)var1).readSequence(); this.version = var2.readInteger().intValue(); try { this.recipient_infos = Util.getVector((RecipientInfo[])ASN.parseSequenceOf(DerCoder.decode(var2), a != null?a:(a = a("iaik.pkcs.pkcs7.RecipientInfo")))); } catch (CodingException var3) { throw new PKCSParsingException("Error parsing recipient infos!"); } this.encrypted_content_info = new EncryptedContentInfoStream(var2); } public void addRecipientInfo(RecipientInfo var1) { this.recipient_infos.addElement(var1); } public EnvelopedDataStream(RecipientInfo[] var1, EncryptedContentInfoStream var2) { this(); this.recipient_infos = Util.getVector(var1); this.encrypted_content_info = var2; } public EnvelopedDataStream(InputStream var1, AlgorithmID var2, int var3) throws NoSuchAlgorithmException { this(); this.encrypted_content_info = new EncryptedContentInfoStream(ObjectID.pkcs7_data, var1); this.symmetric_key = this.encrypted_content_info.setupCipher(var2, var3); } public EnvelopedDataStream(InputStream var1, AlgorithmID var2) throws NoSuchAlgorithmException { this(); this.encrypted_content_info = new EncryptedContentInfoStream(ObjectID.pkcs7_data, var1); this.symmetric_key = this.encrypted_content_info.setupCipher(var2); } public EnvelopedDataStream(InputStream var1) throws IOException, PKCSParsingException { this(); this.decode(var1); } protected EnvelopedDataStream() { this.version = 0; this.recipient_infos = new Vector(); this.block_size = -1; } }