blob: c9150ac964532b19893914b3664b81228f7b147b [file] [log] [blame]
package org.bouncycastle.pqc.crypto.test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import junit.framework.TestCase;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.pqc.crypto.ntru.NTRUSigner;
import org.bouncycastle.pqc.crypto.ntru.NTRUSigningKeyGenerationParameters;
import org.bouncycastle.pqc.crypto.ntru.NTRUSigningKeyPairGenerator;
import org.bouncycastle.pqc.crypto.ntru.NTRUSigningPrivateKeyParameters;
import org.bouncycastle.pqc.crypto.ntru.NTRUSigningPublicKeyParameters;
public class NTRUSignatureKeyTest
extends TestCase
{
public void testEncode()
throws IOException
{
for (NTRUSigningKeyGenerationParameters params : new NTRUSigningKeyGenerationParameters[]{NTRUSigningKeyGenerationParameters.TEST157, NTRUSigningKeyGenerationParameters.TEST157_PROD})
{
testEncode(params);
}
}
private void testEncode(NTRUSigningKeyGenerationParameters params)
throws IOException
{
NTRUSigner ntru = new NTRUSigner(params.getSigningParameters());
NTRUSigningKeyPairGenerator kGen = new NTRUSigningKeyPairGenerator();
kGen.init(params);
AsymmetricCipherKeyPair kp = kGen.generateKeyPair();
NTRUSigningPrivateKeyParameters kPriv = (NTRUSigningPrivateKeyParameters)kp.getPrivate();
NTRUSigningPublicKeyParameters kPub = (NTRUSigningPublicKeyParameters)kp.getPublic();
// encode to byte[] and reconstruct
byte[] priv = kPriv.getEncoded();
byte[] pub = kPub.getEncoded();
AsymmetricCipherKeyPair kp2 = new AsymmetricCipherKeyPair(new NTRUSigningPublicKeyParameters(pub, params.getSigningParameters()), new NTRUSigningPrivateKeyParameters(priv, params));
assertEquals(kPub, kp2.getPublic());
assertEquals(kPriv, kp2.getPrivate());
// encode to OutputStream and reconstruct
ByteArrayOutputStream bos1 = new ByteArrayOutputStream();
ByteArrayOutputStream bos2 = new ByteArrayOutputStream();
kPriv.writeTo(bos1);
kPub.writeTo(bos2);
ByteArrayInputStream bis1 = new ByteArrayInputStream(bos1.toByteArray());
ByteArrayInputStream bis2 = new ByteArrayInputStream(bos2.toByteArray());
AsymmetricCipherKeyPair kp3 = new AsymmetricCipherKeyPair(new NTRUSigningPublicKeyParameters(bis2, params.getSigningParameters()), new NTRUSigningPrivateKeyParameters(bis1, params));
assertEquals(kPub, kp3.getPublic());
assertEquals(kPriv, kp3.getPrivate());
}
}