001 package org.bouncycastle.crypto.io;
002
003 import java.io.FilterOutputStream;
004 import java.io.IOException;
005 import java.io.OutputStream;
006 import org.bouncycastle.crypto.BufferedBlockCipher;
007 import org.bouncycastle.crypto.StreamCipher;
008
009 public class CipherOutputStream extends FilterOutputStream
010 {
011 private BufferedBlockCipher field_74849_a;
012 private StreamCipher field_74847_b;
013 private byte[] field_74848_c = new byte[1];
014 private byte[] field_74846_d;
015
016 public CipherOutputStream(OutputStream par1OutputStream, BufferedBlockCipher par2BufferedBlockCipher)
017 {
018 super(par1OutputStream);
019 this.field_74849_a = par2BufferedBlockCipher;
020 this.field_74846_d = new byte[par2BufferedBlockCipher.func_71792_a()];
021 }
022
023 public void write(int par1) throws IOException
024 {
025 this.field_74848_c[0] = (byte)par1;
026
027 if (this.field_74849_a != null)
028 {
029 int var2 = this.field_74849_a.func_71791_a(this.field_74848_c, 0, 1, this.field_74846_d, 0);
030
031 if (var2 != 0)
032 {
033 this.out.write(this.field_74846_d, 0, var2);
034 }
035 }
036 else
037 {
038 this.out.write(this.field_74847_b.returnByte((byte)par1));
039 }
040 }
041
042 public void write(byte[] par1) throws IOException
043 {
044 this.write(par1, 0, par1.length);
045 }
046
047 public void write(byte[] par1, int par2, int par3) throws IOException
048 {
049 byte[] var4;
050
051 if (this.field_74849_a != null)
052 {
053 var4 = new byte[this.field_74849_a.func_71789_b(par3)];
054 int var5 = this.field_74849_a.func_71791_a(par1, par2, par3, var4, 0);
055
056 if (var5 != 0)
057 {
058 this.out.write(var4, 0, var5);
059 }
060 }
061 else
062 {
063 var4 = new byte[par3];
064 this.field_74847_b.func_74850_a(par1, par2, par3, var4, 0);
065 this.out.write(var4, 0, par3);
066 }
067 }
068
069 public void flush() throws IOException
070 {
071 super.flush();
072 }
073
074 public void close() throws IOException
075 {
076 try
077 {
078 if (this.field_74849_a != null)
079 {
080 byte[] var1 = new byte[this.field_74849_a.func_71789_b(0)];
081 int var2 = this.field_74849_a.func_71790_a(var1, 0);
082
083 if (var2 != 0)
084 {
085 this.out.write(var1, 0, var2);
086 }
087 }
088 }
089 catch (Exception var3)
090 {
091 throw new IOException("Error closing stream: " + var3.toString());
092 }
093
094 this.flush();
095 super.close();
096 }
097 }