001 /* 002 * Cumulus4j - Securing your data in the cloud - http://cumulus4j.org 003 * Copyright (C) 2011 NightLabs Consulting GmbH 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 package org.cumulus4j.crypto.internal.mac; 019 020 import org.bouncycastle.crypto.CipherParameters; 021 import org.bouncycastle.crypto.DataLengthException; 022 import org.bouncycastle.crypto.Mac; 023 import org.cumulus4j.crypto.MACCalculator; 024 025 /** 026 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de 027 */ 028 public class MACCalculatorImpl 029 implements MACCalculator 030 { 031 private Mac macEngine; 032 033 private int keySize; 034 private int ivSize; 035 036 public MACCalculatorImpl(Mac macEngine, int keySize, int ivSize) 037 { 038 if (macEngine == null) 039 throw new IllegalArgumentException("macEngine == null"); 040 041 this.macEngine = macEngine; 042 this.keySize = keySize; 043 this.ivSize = ivSize; 044 } 045 046 private CipherParameters parameters; 047 048 @Override 049 public void init(CipherParameters params) throws IllegalArgumentException { 050 macEngine.init(params); 051 this.parameters = params; 052 } 053 054 @Override 055 public CipherParameters getParameters() { 056 return parameters; 057 } 058 059 @Override 060 public int getKeySize() { 061 return keySize; 062 } 063 064 @Override 065 public int getIVSize() { 066 return ivSize; 067 } 068 069 private String algorithmName; 070 071 @Override 072 public void setAlgorithmName(String algorithmName) { 073 this.algorithmName = algorithmName; 074 } 075 076 @Override 077 public String getAlgorithmName() { 078 if (algorithmName != null) 079 return algorithmName; 080 081 return macEngine.getAlgorithmName(); 082 } 083 084 @Override 085 public int getMacSize() { 086 return macEngine.getMacSize(); 087 } 088 089 @Override 090 public void update(byte in) 091 throws IllegalStateException 092 { 093 macEngine.update(in); 094 } 095 096 @Override 097 public void update(byte[] in, int inOff, int len) 098 throws DataLengthException, IllegalStateException 099 { 100 macEngine.update(in, inOff, len); 101 } 102 103 @Override 104 public int doFinal(byte[] out, int outOff) 105 throws DataLengthException, IllegalStateException 106 { 107 return macEngine.doFinal(out, outOff); 108 } 109 110 @Override 111 public byte[] doFinal(byte[] in) throws IllegalStateException 112 { 113 byte[] mac = new byte[getMacSize()]; 114 update(in, 0, in.length); 115 doFinal(mac, 0); 116 return mac; 117 } 118 119 @Override 120 public void reset() { 121 macEngine.reset(); 122 } 123 }