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.Content;
import iaik.pkcs.pkcs7.EncryptedContentInfo;
import iaik.pkcs.pkcs7.EnvelopedDataStream;
import iaik.pkcs.pkcs7.RecipientInfo;
import iaik.utils.Util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.util.Enumeration;
import javax.crypto.SecretKey;
public class EnvelopedData extends EnvelopedDataStream implements Content {
// $FF: synthetic field
static Class b;
private EncryptedContentInfo a;
static Class a(String var0) {
try {
return Class.forName(var0);
} catch (ClassNotFoundException var2) {
throw new NoClassDefFoundError(var2.getMessage());
}
}
public String toString(boolean var1) {
StringBuffer var2 = new StringBuffer();
var2.append("Version: " + super.version + "\n");
if(var1) {
for(int var3 = 0; var3 < super.recipient_infos.size(); ++var3) {
var2.append("\nRecipientInfo " + (var3 + 1) + ":{\n");
var2.append(((RecipientInfo)super.recipient_infos.elementAt(var3)).toString());
var2.append("\n}");
}
} else {
var2.append("RecipientInfos: " + super.recipient_infos.size() + "\n");
}
var2.append("\nEncryptedContentInfo: {\n");
var2.append(this.a.toString() + "}");
return var2.toString();
}
protected ASN1Object toASN1Object(int var1) throws PKCSException {
if(var1 <= 0) {
var1 = super.block_size;
}
if(super.recipient_infos == null) {
throw new PKCSException("No recipients specified.");
} else {
if(super.symmetric_key != null) {
Enumeration var2 = super.recipient_infos.elements();
while(var2.hasMoreElements()) {
((RecipientInfo)var2.nextElement()).encryptKey(super.symmetric_key);
}
}
this.a.setBlockSize(var1);
SEQUENCE var5 = new SEQUENCE(var1 > 0);
try {
var5.addComponent(new INTEGER(super.version));
if(super.version == 1) {
var5.addComponent(ASN.createSequenceOf(super.recipient_infos));
} else {
var5.addComponent(ASN.createSetOf(super.recipient_infos));
}
var5.addComponent(this.a.toASN1Object());
return var5;
} catch (CodingException var4) {
throw new PKCSException(var4.toString());
}
}
}
public void setupCipher(PrivateKey var1, int var2) throws InvalidKeyException, NoSuchAlgorithmException, PKCSException {
SecretKey var3 = ((RecipientInfo)super.recipient_infos.elementAt(var2)).decryptKey(var1);
this.a.setupCipher(var3);
}
public void setupCipher(Key var1) throws InvalidKeyException, NoSuchAlgorithmException, PKCSException {
this.a.setupCipher(var1);
}
public InputStream getInputStream() {
return this.a.getInputStream();
}
public Object getEncryptedContentInfo() {
return this.a;
}
public byte[] getEncoded() throws PKCSException {
try {
ByteArrayOutputStream var1 = new ByteArrayOutputStream();
DerCoder.encodeTo(this.toASN1Object(), var1);
return var1.toByteArray();
} catch (IOException var2) {
throw new PKCSException(var2.getMessage());
}
}
public byte[] getContent() {
return this.a.getContent();
}
public void decode(InputStream var1) throws PKCSParsingException, IOException {
if(!(var1 instanceof DerInputStream)) {
var1 = new DerInputStream((InputStream)var1);
}
DerInputStream var2 = ((DerInputStream)var1).readSequence();
super.version = var2.readInteger().intValue();
try {
super.recipient_infos = Util.getVector((RecipientInfo[])ASN.parseSequenceOf(DerCoder.decode(var2), b != null?b:(b = a("iaik.pkcs.pkcs7.RecipientInfo"))));
} catch (CodingException var3) {
throw new PKCSParsingException("Error parsing recipient infos!");
}
this.a = new EncryptedContentInfo();
this.a.c = super.version;
this.a.decode(var2);
}
public void decode(ASN1Object var1) throws PKCSParsingException {
try {
this.decode((InputStream)(new ByteArrayInputStream(DerCoder.encode(var1))));
} catch (IOException var3) {
throw new PKCSParsingException(var3.getMessage());
}
}
public EnvelopedData(RecipientInfo[] var1, EncryptedContentInfo var2, int var3) {
super.recipient_infos = Util.getVector(var1);
this.a = var2;
if(var3 == 1) {
super.version = 1;
this.a.c = 1;
} else if(var3 != 0) {
throw new IllegalArgumentException("Invalid version number: " + var3);
}
}
public EnvelopedData(RecipientInfo[] var1, EncryptedContentInfo var2) {
super.recipient_infos = Util.getVector(var1);
this.a = var2;
}
public EnvelopedData(byte[] var1, AlgorithmID var2, int var3, int var4) throws NoSuchAlgorithmException {
this.a = new EncryptedContentInfo(ObjectID.pkcs7_data, var1);
if(var4 == 1) {
super.version = 1;
this.a.c = 1;
} else if(var4 != 0) {
throw new IllegalArgumentException("Invalid version number: " + var4);
}
super.symmetric_key = this.a.setupCipher(var2, var3);
}
public EnvelopedData(byte[] var1, AlgorithmID var2, int var3) throws NoSuchAlgorithmException {
this.a = new EncryptedContentInfo(ObjectID.pkcs7_data, var1);
super.symmetric_key = this.a.setupCipher(var2, var3);
}
public EnvelopedData(byte[] var1, AlgorithmID var2) throws NoSuchAlgorithmException {
this.a = new EncryptedContentInfo(ObjectID.pkcs7_data, var1);
super.symmetric_key = this.a.setupCipher(var2);
}
public EnvelopedData(InputStream var1) throws IOException, PKCSParsingException {
this.decode(var1);
}
public EnvelopedData(ASN1Object var1) throws PKCSParsingException {
this.decode(var1);
}
protected EnvelopedData() {
}
}