BaseMac.java revision a198e1ecc615e26a167d0f2dca9fa7e5fc62de10
1package org.bouncycastle.jcajce.provider.symmetric.util; 2 3import java.security.InvalidAlgorithmParameterException; 4import java.security.InvalidKeyException; 5import java.security.Key; 6import java.security.spec.AlgorithmParameterSpec; 7 8import javax.crypto.MacSpi; 9import javax.crypto.spec.IvParameterSpec; 10import javax.crypto.spec.PBEParameterSpec; 11 12import org.bouncycastle.crypto.CipherParameters; 13import org.bouncycastle.crypto.Mac; 14import org.bouncycastle.crypto.params.KeyParameter; 15import org.bouncycastle.crypto.params.ParametersWithIV; 16 17public class BaseMac 18 extends MacSpi implements PBE 19{ 20 private Mac macEngine; 21 22 private int pbeType = PKCS12; 23 private int pbeHash = SHA1; 24 private int keySize = 160; 25 26 protected BaseMac( 27 Mac macEngine) 28 { 29 this.macEngine = macEngine; 30 } 31 32 protected BaseMac( 33 Mac macEngine, 34 int pbeType, 35 int pbeHash, 36 int keySize) 37 { 38 this.macEngine = macEngine; 39 this.pbeType = pbeType; 40 this.pbeHash = pbeHash; 41 this.keySize = keySize; 42 } 43 44 protected void engineInit( 45 Key key, 46 AlgorithmParameterSpec params) 47 throws InvalidKeyException, InvalidAlgorithmParameterException 48 { 49 CipherParameters param; 50 51 if (key == null) 52 { 53 throw new InvalidKeyException("key is null"); 54 } 55 56 if (key instanceof BCPBEKey) 57 { 58 BCPBEKey k = (BCPBEKey)key; 59 60 if (k.getParam() != null) 61 { 62 param = k.getParam(); 63 } 64 else if (params instanceof PBEParameterSpec) 65 { 66 param = PBE.Util.makePBEMacParameters(k, params); 67 } 68 else 69 { 70 throw new InvalidAlgorithmParameterException("PBE requires PBE parameters to be set."); 71 } 72 } 73 else if (params instanceof IvParameterSpec) 74 { 75 param = new ParametersWithIV(new KeyParameter(key.getEncoded()), ((IvParameterSpec)params).getIV()); 76 } 77 else if (params == null) 78 { 79 param = new KeyParameter(key.getEncoded()); 80 } 81 else 82 { 83 throw new InvalidAlgorithmParameterException("unknown parameter type."); 84 } 85 86 macEngine.init(param); 87 } 88 89 protected int engineGetMacLength() 90 { 91 return macEngine.getMacSize(); 92 } 93 94 protected void engineReset() 95 { 96 macEngine.reset(); 97 } 98 99 protected void engineUpdate( 100 byte input) 101 { 102 macEngine.update(input); 103 } 104 105 protected void engineUpdate( 106 byte[] input, 107 int offset, 108 int len) 109 { 110 macEngine.update(input, offset, len); 111 } 112 113 protected byte[] engineDoFinal() 114 { 115 byte[] out = new byte[engineGetMacLength()]; 116 117 macEngine.doFinal(out, 0); 118 119 return out; 120 } 121} 122