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

org.bouncycastle.jcajce.spec.HybridValueParameterSpec Maven / Gradle / Ivy

Go to download

The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for Java 1.8 and later with debug enabled.

The newest version!
package org.bouncycastle.jcajce.spec;

import java.security.spec.AlgorithmParameterSpec;
import java.util.concurrent.atomic.AtomicBoolean;

import javax.security.auth.Destroyable;

import org.bouncycastle.util.Arrays;

/**
 * SP 800-56C Hybrid Value spec, to allow the secret in a key agreement to be
 * created as "Z | T" where T is some other secret value as described in Section 2.
 * 

* Get methods throw IllegalStateException if destroy() is called. *

*/ public class HybridValueParameterSpec implements AlgorithmParameterSpec, Destroyable { private final AtomicBoolean hasBeenDestroyed = new AtomicBoolean(false); private volatile byte[] t; private volatile AlgorithmParameterSpec baseSpec; /** * Create a spec with T set to t and the spec for the KDF in the agreement to baseSpec. * Note: the t value is not copied. * * @param t a shared secret to be concatenated with the agreement's Z value. * @param baseSpec the base spec for the agreements KDF. */ public HybridValueParameterSpec(byte[] t, AlgorithmParameterSpec baseSpec) { this.t = t; this.baseSpec = baseSpec; } /** * Return a reference to the T value. * * @return a reference to T. */ public byte[] getT() { byte[] tVal = t; checkDestroyed(); return tVal; } /** * Return the base parameter spec. * * @return base spec to be applied to the KDF. */ public AlgorithmParameterSpec getBaseParameterSpec() { AlgorithmParameterSpec rv = this.baseSpec; checkDestroyed(); return rv; } /** * Return true if the destroy() method is called and the contents are * erased. * * @return true if destroyed, false otherwise. */ public boolean isDestroyed() { return this.hasBeenDestroyed.get(); } /** * Destroy this parameter spec, explicitly erasing its contents. */ public void destroy() { if (!hasBeenDestroyed.getAndSet(true)) { Arrays.clear(t); this.t = null; this.baseSpec = null; } } private void checkDestroyed() { if (isDestroyed()) { throw new IllegalStateException("spec has been destroyed"); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy