de.flexiprovider.pqc.ecc.niederreiter
Class NiederreiterCFSSignature

java.lang.Object
  |
  +--java.security.SignatureSpi
        |
        +--de.flexiprovider.api.Signature
              |
              +--de.flexiprovider.pqc.ecc.niederreiter.NiederreiterCFSSignature

public class NiederreiterCFSSignature
extends Signature

This class implements the NiederreiterCFS signature scheme (N. Courtois, M. Finiasz, N. Sendrier, "How to achieve a McEliece-based Digital Signature Scheme", in Advances in Cryptology - ASIACRYPT 2001, vol. 2248, pp. 157-174).

The NiederreiterCFSSignature can be used as follows:

Signature generation:

  1. generate KeySpec from encoded Niederreiter private key:
    KeySpec privateKeySpec = new PKCS8EncodedKeySpec(encPrivateKey);
  2. get instance of Niederreiter key factory:
    KeyFactory keyFactory = KeyFactory.getInstance("Niederreiter","FlexiPQC");
  3. decode NiederreiterCFS private key:
    PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
  4. get instance of a NiederreiterCFS signature:
    Signature cfsSig = Signature.getInstance("NiederreiterCFSSignature","FlexiPQC");
  5. initialize signing:
    cfsSig.initSign(privateKey);
  6. sign message:
    cfsSig.update(message.getBytes());
    signature = cfsSig.sign();
    return signature;

Signature verification:

  1. generate KeySpec from encoded Niederreiter public key:
    KeySpec publicKeySpec = new X509EncodedKeySpec(encPublicKey);
  2. decode Niederreiter public key:
    PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
  3. initialize verifying:
    cfsSig.initVerify(publicKey);
  4. Verify the signature:
    cfsSig.update(message.getBytes());
    return cfsSig.verify(signature);

Author:
Elena Klintsevich

Field Summary
static java.lang.String OID
          The OID of the algorithm.
 
Fields inherited from class java.security.SignatureSpi
appRandom
 
Constructor Summary
NiederreiterCFSSignature()
          Constructor.
 
Method Summary
 void initSign(PrivateKey key, SecureRandom random)
          Initialize the signature algorithm for signing a message.
 void initVerify(PublicKey key)
          Initialize the signature algorithm for verifying a signature.
 void setParameters(AlgorithmParameterSpec params)
          Set parameters for the this signature.
 byte[] sign()
          Sign a message.
 void update(byte data)
          Feed a message byte to the message digest.
 void update(byte[] data, int off, int length)
          Feed message bytes to the message digest.
 boolean verify(byte[] signature)
          Verify a signature.
 
Methods inherited from class de.flexiprovider.api.Signature
engineGetParameter, engineInitSign, engineInitSign, engineInitVerify, engineSetParameter, engineSetParameter, engineSign, engineUpdate, engineUpdate, engineVerify, engineVerify, initSign, sign, update, verify, verify, verify
 
Methods inherited from class java.security.SignatureSpi
clone, engineSign
 
Methods inherited from class java.lang.Object
, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

OID

public static final java.lang.String OID
The OID of the algorithm.
Constructor Detail

NiederreiterCFSSignature

public NiederreiterCFSSignature()
Constructor. Choose the default message digest (RIPEMD160).
Method Detail

initSign

public void initSign(PrivateKey key,
                     SecureRandom random)
              throws InvalidKeyException
Initialize the signature algorithm for signing a message.
Overrides:
initSign in class Signature
Parameters:
key - the private key of the signer
random - a source of randomness (not used)
Throws:
InvalidKeyException - if the key is not an instance of NiederreiterPrivateKey.

initVerify

public void initVerify(PublicKey key)
                throws InvalidKeyException
Initialize the signature algorithm for verifying a signature.
Overrides:
initVerify in class Signature
Parameters:
key - the public key of the signer
Throws:
InvalidKeyException - if the public key is not an instance of NiederreiterPublicKey.

setParameters

public void setParameters(AlgorithmParameterSpec params)
Set parameters for the this signature. As the parameters are contained in the keys, this method is not implemented.
Overrides:
setParameters in class Signature
Parameters:
params - the parameters (not used)

update

public void update(byte data)
Feed a message byte to the message digest.
Overrides:
update in class Signature
Parameters:
data - array of message bytes

update

public void update(byte[] data,
                   int off,
                   int length)
Feed message bytes to the message digest.
Overrides:
update in class Signature
Parameters:
data - array of message bytes
off - index of message start
length - number of message bytes

sign

public byte[] sign()
Sign a message.
Overrides:
sign in class Signature
Returns:
the signature

verify

public boolean verify(byte[] signature)
Verify a signature.
Overrides:
verify in class Signature
Parameters:
signature - the signature to be verified
Returns:
true if the signature is correct, false otherwise.