All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.unbound.provider.UBMac Maven / Gradle / Ivy

Go to download

This is a collection of JAVA libraries that implement Unbound cryptographic classes for JAVA provider, PKCS11 wrapper, cryptoki, and advapi

There is a newer version: 42761
Show newest version
package com.unbound.provider;


import com.unbound.client.*;

import javax.crypto.MacSpi;
import javax.crypto.spec.IvParameterSpec;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;


public class UBMac extends MacSpi
{
  private final MacOper oper = Client.getInstance().newMacOperation();
  UBMac(HashType hashType)
  {
    oper.mode = MacMode.HMAC; oper.hashType = hashType;
  }
  UBMac(MacMode macMode)
  {
    oper.mode = macMode; oper.hashType = null;
  }

  // ------------------------ interface ------------------------

  @Override
  protected int engineGetMacLength()
  {
    return oper.getMacLen();
  }

  @Override
  protected void engineInit(Key key, AlgorithmParameterSpec paramSpec) throws InvalidKeyException, InvalidAlgorithmParameterException
  {
    if (key==null) throw new InvalidKeyException("Invalid key");
    if (!(key instanceof UBSecretKey)) throw new InvalidKeyException("Invalid key type");

    if (oper.mode == MacMode.GMAC)
    {
      if (paramSpec==null) oper.iv = new byte[12]; // zeroes
      else
      {
        if (!(paramSpec instanceof IvParameterSpec)) throw new InvalidAlgorithmParameterException("IvParameterSpec required");
        oper.iv = ((IvParameterSpec)paramSpec).getIV();
      }
    }
    else
    {
      if (paramSpec!=null) throw new InvalidAlgorithmParameterException("Parameters not supported");
    }

    KeyObject keyObject = ((UBSecretKey)key).object;
    if (keyObject.getType()!=oper.mode.getKeyType()) throw new InvalidKeyException("Invalid key type");
    oper.reset();
    oper.keyObject = keyObject;
  }

  @Override
  protected void engineUpdate(byte b)
  {
    oper.update(b);
  }

  @Override
  protected void engineUpdate(byte[] input, int offset, int length)
  {
    oper.update(input, offset, length);
  }

  @Override
  protected byte[] engineDoFinal()
  {
    return oper.finalMac(null);
  }

  @Override
  protected void engineReset()
  {
    oper.reset();
  }

  // ---------------------------------- Sub-classes -----------------------

  public static final class HmacSHA1 extends UBMac
  { public HmacSHA1()   { super(HashType.SHA1);   } }
  public static final class HmacSHA256 extends UBMac
  { public HmacSHA256() { super(HashType.SHA256); } }
  public static final class HmacSHA384 extends UBMac
  { public HmacSHA384() { super(HashType.SHA384); } }
  public static final class HmacSHA512 extends UBMac
  { public HmacSHA512() { super(HashType.SHA512); } }
  public static final class GMAC extends UBMac
  { public GMAC() { super(MacMode.GMAC); } }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy