001 package org.bouncycastle.crypto; 002 003 public class BufferedBlockCipher 004 { 005 protected byte[] field_71801_a; 006 protected int field_71799_b; 007 protected boolean field_71800_c; 008 protected BlockCipher field_71797_d; 009 protected boolean field_71798_e; 010 protected boolean field_71796_f; 011 012 protected BufferedBlockCipher() {} 013 014 public BufferedBlockCipher(BlockCipher par1BlockCipher) 015 { 016 this.field_71797_d = par1BlockCipher; 017 this.field_71801_a = new byte[par1BlockCipher.getBlockSize()]; 018 this.field_71799_b = 0; 019 String var2 = par1BlockCipher.getAlgorithmName(); 020 int var3 = var2.indexOf(47) + 1; 021 this.field_71796_f = var3 > 0 && var2.startsWith("PGP", var3); 022 023 if (this.field_71796_f) 024 { 025 this.field_71798_e = true; 026 } 027 else 028 { 029 this.field_71798_e = var3 > 0 && (var2.startsWith("CFB", var3) || var2.startsWith("OFB", var3) || var2.startsWith("OpenPGP", var3) || var2.startsWith("SIC", var3) || var2.startsWith("GCTR", var3)); 030 } 031 } 032 033 public void init(boolean par1, CipherParameters par2CipherParameters) throws IllegalArgumentException 034 { 035 this.field_71800_c = par1; 036 this.func_71794_b(); 037 this.field_71797_d.func_71805_a(par1, par2CipherParameters); 038 } 039 040 public int func_71792_a() 041 { 042 return this.field_71797_d.getBlockSize(); 043 } 044 045 public int func_71793_a(int par1) 046 { 047 int var2 = par1 + this.field_71799_b; 048 int var3; 049 050 if (this.field_71796_f) 051 { 052 var3 = var2 % this.field_71801_a.length - (this.field_71797_d.getBlockSize() + 2); 053 } 054 else 055 { 056 var3 = var2 % this.field_71801_a.length; 057 } 058 059 return var2 - var3; 060 } 061 062 public int func_71789_b(int par1) 063 { 064 return par1 + this.field_71799_b; 065 } 066 067 public int func_71791_a(byte[] par1ArrayOfByte, int par2, int par3, byte[] par4ArrayOfByte, int par5) throws DataLengthException, IllegalStateException 068 { 069 if (par3 < 0) 070 { 071 throw new IllegalArgumentException("Can\'t have a negative input length!"); 072 } 073 else 074 { 075 int var6 = this.func_71792_a(); 076 int var7 = this.func_71793_a(par3); 077 078 if (var7 > 0 && par5 + var7 > par4ArrayOfByte.length) 079 { 080 throw new DataLengthException("output buffer too short"); 081 } 082 else 083 { 084 int var8 = 0; 085 int var9 = this.field_71801_a.length - this.field_71799_b; 086 087 if (par3 > var9) 088 { 089 System.arraycopy(par1ArrayOfByte, par2, this.field_71801_a, this.field_71799_b, var9); 090 var8 += this.field_71797_d.func_71806_a(this.field_71801_a, 0, par4ArrayOfByte, par5); 091 this.field_71799_b = 0; 092 par3 -= var9; 093 094 for (par2 += var9; par3 > this.field_71801_a.length; par2 += var6) 095 { 096 var8 += this.field_71797_d.func_71806_a(par1ArrayOfByte, par2, par4ArrayOfByte, par5 + var8); 097 par3 -= var6; 098 } 099 } 100 101 System.arraycopy(par1ArrayOfByte, par2, this.field_71801_a, this.field_71799_b, par3); 102 this.field_71799_b += par3; 103 104 if (this.field_71799_b == this.field_71801_a.length) 105 { 106 var8 += this.field_71797_d.func_71806_a(this.field_71801_a, 0, par4ArrayOfByte, par5 + var8); 107 this.field_71799_b = 0; 108 } 109 110 return var8; 111 } 112 } 113 } 114 115 public int func_71790_a(byte[] par1ArrayOfByte, int par2) throws DataLengthException, IllegalStateException 116 { 117 int var4; 118 119 try 120 { 121 int var3 = 0; 122 123 if (par2 + this.field_71799_b > par1ArrayOfByte.length) 124 { 125 throw new DataLengthException("output buffer too short for doFinal()"); 126 } 127 128 if (this.field_71799_b != 0) 129 { 130 if (!this.field_71798_e) 131 { 132 throw new DataLengthException("data not block size aligned"); 133 } 134 135 this.field_71797_d.func_71806_a(this.field_71801_a, 0, this.field_71801_a, 0); 136 var3 = this.field_71799_b; 137 this.field_71799_b = 0; 138 System.arraycopy(this.field_71801_a, 0, par1ArrayOfByte, par2, var3); 139 } 140 141 var4 = var3; 142 } 143 finally 144 { 145 this.func_71794_b(); 146 } 147 148 return var4; 149 } 150 151 public void func_71794_b() 152 { 153 for (int var1 = 0; var1 < this.field_71801_a.length; ++var1) 154 { 155 this.field_71801_a[var1] = 0; 156 } 157 158 this.field_71799_b = 0; 159 this.field_71797_d.func_71803_c(); 160 } 161 }