/* See LICENSE for licensing and NOTICE for copyright. */
package org.cryptacular.generator.sp80038a;
import java.util.concurrent.atomic.AtomicLong;
import org.cryptacular.generator.LimitException;
import org.cryptacular.generator.Nonce;
import org.cryptacular.util.ByteUtil;
/**
* Simple counter nonce that uses a long integer counter internally and produces 8-byte nonces. Note that this component
* is suitable exclusively for ciphers with block length 8, e.g. Blowfish.
*
* <p>Instances of this class are thread safe.</p>
*
* @author Middleware Services
* @see BigIntegerCounterNonce
*/
public class LongCounterNonce implements Nonce
{
/** Counter. */
private final AtomicLong counter;
/** Creates a new instance whose counter values start at 1. */
public LongCounterNonce()
{
this(0);
}
/**
* Creates a new instance whose counter values start above the given value.
*
* @param start Start value.
*/
public LongCounterNonce(final long start)
{
counter = new AtomicLong(start);
}
@Override
public byte[] generate()
throws LimitException
{
return ByteUtil.toBytes(counter.incrementAndGet());
}
@Override
public int getLength()
{
return 8;
}
}