de.flexiprovider.pqc.hbc.ots
Class MerkleOTS

java.lang.Object
  |
  +--de.flexiprovider.pqc.hbc.ots.MerkleOTS
All Implemented Interfaces:
OTS

public class MerkleOTS
extends java.lang.Object
implements OTS

This class implements key pair generation and signature generation of the Merkle one-time signature scheme, described in R. Merkle, "A certified digital signature", LNCS 1462, pages 218–238, 1989. The class is used by the CMSS classes.

Author:
Elena Klintsevich

Constructor Summary
MerkleOTS()
           
 
Method Summary
 boolean canComputeVerificationKeyFromSignature()
          The verification key of come one-time signature schemes can be computes from the signature.
 byte[] computeVerificationKey(byte[] mBytes, byte[] sigBytes)
          Compute the OTS verification key from the one-time signature of a message.
 void generateKeyPair(byte[] seed)
          Generate an OTS key pair using the given seed and the message digest and PRNG specified via init(MessageDigest, PRNG).
 void generateSignatureKey(byte[] seed)
          Generate an OTS signature key the given seed and the message digest and PRNG specified via init(MessageDigest, PRNG).
 void generateVerificationKey()
          Generate an OTS verification key from the previously generated signature key given the message digest specified via init(MessageDigest, PRNG).
 int getSignatureLength()
           
 byte[] getVerificationKey()
           
 int getVerificationKeyLength()
           
 void init(MessageDigest md, PRNG rng)
          Initialize the OTS.
 byte[] sign(byte[] mBytes)
          Generate a one-time signature of the given message using the private key generated via generateKeyPair(byte[]).
 boolean verify(byte[] mBytes, byte[] sBytes, byte[] pBytes)
          Verify a one-time signature of the given message using the verification key generated via generateKeyPair(byte[]).
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MerkleOTS

public MerkleOTS()
Method Detail

init

public void init(MessageDigest md,
                 PRNG rng)
Initialize the OTS.
Specified by:
init in interface OTS
Parameters:
md - the hash function for the OTS
rng - the name of the PRNG used for key pair generation

generateKeyPair

public void generateKeyPair(byte[] seed)
Generate an OTS key pair using the given seed and the message digest and PRNG specified via init(MessageDigest, PRNG).
Specified by:
generateKeyPair in interface OTS
Parameters:
seed - the seed for the PRGN

getVerificationKey

public byte[] getVerificationKey()
Specified by:
getVerificationKey in interface OTS
Returns:
The verification OTS key as one byte array

getSignatureLength

public int getSignatureLength()
Specified by:
getSignatureLength in interface OTS
Returns:
the length of the one-time signature

sign

public byte[] sign(byte[] mBytes)
Generate a one-time signature of the given message using the private key generated via generateKeyPair(byte[]).
Specified by:
sign in interface OTS
Parameters:
mBytes - the message
Returns:
the one-time signature of the message

computeVerificationKey

public byte[] computeVerificationKey(byte[] mBytes,
                                     byte[] sigBytes)
Compute the OTS verification key from the one-time signature of a message. This is *NOT* a complete OTS signature verification, but it suffices for usage with CMSS.
Specified by:
computeVerificationKey in interface OTS
Parameters:
mBytes - the message
sigBytes - the one-time signature
Returns:
the OTS verification key

canComputeVerificationKeyFromSignature

public boolean canComputeVerificationKeyFromSignature()
Description copied from interface: OTS
The verification key of come one-time signature schemes can be computes from the signature.
Specified by:
canComputeVerificationKeyFromSignature in interface OTS
Following copied from interface: de.flexiprovider.pqc.hbc.ots.OTS
Returns:
true if that is the case and false otherwise

generateSignatureKey

public void generateSignatureKey(byte[] seed)
Description copied from interface: OTS
Generate an OTS signature key the given seed and the message digest and PRNG specified via OTS.init(MessageDigest, PRNG).
Specified by:
generateSignatureKey in interface OTS
Following copied from interface: de.flexiprovider.pqc.hbc.ots.OTS
Parameters:
seed - the seed for the PRGN

generateVerificationKey

public void generateVerificationKey()
Description copied from interface: OTS
Generate an OTS verification key from the previously generated signature key given the message digest specified via OTS.init(MessageDigest, PRNG).
Specified by:
generateVerificationKey in interface OTS

getVerificationKeyLength

public int getVerificationKeyLength()
Specified by:
getVerificationKeyLength in interface OTS
Following copied from interface: de.flexiprovider.pqc.hbc.ots.OTS
Returns:
the length of the one-time verification key

verify

public boolean verify(byte[] mBytes,
                      byte[] sBytes,
                      byte[] pBytes)
Description copied from interface: OTS
Verify a one-time signature of the given message using the verification key generated via OTS.generateKeyPair(byte[]).
Specified by:
verify in interface OTS
Following copied from interface: de.flexiprovider.pqc.hbc.ots.OTS
Parameters:
mBytes - the message
sBytes - the signature
pBytes - the verification key
Returns:
true if signature is valid and false otherwise