mac.java

来自「一个非常好的ssh客户端实现」· Java 代码 · 共 162 行

JAVA
162
字号
/****************************************************************************** * * Copyright (c) 1999-2003 AppGate Network Security AB. All Rights Reserved. *  * This file contains Original Code and/or Modifications of Original Code as * defined in and that are subject to the MindTerm Public Source License, * Version 2.0, (the 'License'). You may not use this file except in compliance * with the License. *  * You should have received a copy of the MindTerm Public Source License * along with this software; see the file LICENSE.  If not, write to * AppGate Network Security AB, Otterhallegatan 2, SE-41118 Goteborg, SWEDEN * *****************************************************************************/package com.mindbright.jce.crypto;import com.mindbright.jca.security.Provider;import com.mindbright.jca.security.ProviderLookup;import com.mindbright.jca.security.NoSuchAlgorithmException;import com.mindbright.jca.security.NoSuchProviderException;import com.mindbright.jca.security.InvalidKeyException;import com.mindbright.jca.security.InvalidAlgorithmParameterException;import com.mindbright.jca.security.Key;import com.mindbright.jca.security.spec.AlgorithmParameterSpec;public class Mac implements Cloneable {    private Provider provider;    private MacSpi   engine;    private String   algorithm;    private boolean  initialized;    private int      macLength;    protected Mac(MacSpi macSpi, Provider provider, String algorithm) {	this.provider    = provider;	this.engine      = macSpi;	this.algorithm   = algorithm;	this.initialized = false;    }    public Object clone() throws CloneNotSupportedException {	Mac clone = new Mac((MacSpi)this.engine.clone(), this.provider,			    this.algorithm);	clone.initialized = this.initialized;	return clone;    }    public final byte[] doFinal() throws IllegalStateException {	if(initialized) {	    byte[] mac = engine.engineDoFinal();	    engine.engineReset();	    return mac;	} else {	    throw new IllegalStateException(algorithm + " not initialized");	}    }    public final byte[] doFinal(byte[] input) throws IllegalStateException {	if(initialized)	{	    engine.engineUpdate(input, 0, input.length);	    return doFinal();	} else {	    throw new IllegalStateException(algorithm + " not initialized");	}    }    public final void doFinal(byte[] output, int outOffset)	throws ShortBufferException, IllegalStateException    {	if(initialized) {	    if(output.length - outOffset < macLength)		throw new ShortBufferException("Output buffer is too small for "					       + algorithm);	    System.arraycopy(engine.engineDoFinal(), 0, output, outOffset, macLength);	} else {	    throw new IllegalStateException(algorithm + " not initialized");	}    }    public final String getAlgorithm() {	return algorithm;    }    public final static Mac getInstance(String algorithm)	throws NoSuchAlgorithmException    {	try {	    String provider =		ProviderLookup.findImplementingProvider("Mac", algorithm);	    return getInstance(algorithm, provider);	} catch (NoSuchProviderException e) {	    throw new Error("Error in Mac: " + e);	}    }    public final static Mac getInstance(String algorithm, String provider)	throws NoSuchProviderException, NoSuchAlgorithmException    {	ProviderLookup pl = ProviderLookup.getImplementation("Mac",							     algorithm,							     provider);	return new Mac((MacSpi)pl.getImpl(), pl.getProvider(), algorithm);    }    public final int getMacLength() {	int len = macLength;	if(!initialized) {	    len = engine.engineGetMacLength();	}	return len;    }    Provider getProvider() {	return provider;    }    public final void init(Key key) throws InvalidKeyException {	try {	    init(key, null);	} catch (InvalidAlgorithmParameterException e) {	    throw new Error("Error in Mac: " + e);	}    }    public final void init(Key key, AlgorithmParameterSpec params)	throws InvalidKeyException, InvalidAlgorithmParameterException    {	engine.engineInit(key, params);	macLength   = engine.engineGetMacLength();	initialized = true;    }    public final void reset() {	engine.engineReset();    }    public final void update(byte input) throws IllegalStateException {	if(initialized) {	    engine.engineUpdate(input);	} else {	    throw new IllegalStateException(algorithm + " not initialized");	}    }    public final void update(byte[] input) throws IllegalStateException {	update(input, 0, input.length);    }    public final void update(byte[] input, int offset, int len)	throws IllegalStateException    {	if(initialized) {	    engine.engineUpdate(input, offset, len);	} else {	    throw new IllegalStateException(algorithm + " not initialized");	}    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?