DSA! Working, with tests!

This commit is contained in:
2018-05-12 08:04:33 -07:00
parent 3d767c3e13
commit f0f4891abe
4 changed files with 12175 additions and 5756 deletions

5
.gitignore vendored
View File

@@ -20,9 +20,8 @@ Cargo.lock
tests/rsa/GenerateRSATests.hi tests/rsa/GenerateRSATests.hi
tests/rsa/GenerateRSATests.o tests/rsa/GenerateRSATests.o
tests/rsa/gen tests/rsa/gen
tests/dsa/GenerateDSATests.hi tests/dsa/*.class
tests/dsa/GenerateDSATests.o tests/dsa/*.jar
tests/dsa/gen
# And I started playing with IDEs, so ... # And I started playing with IDEs, so ...
.vscode .vscode

View File

@@ -130,11 +130,11 @@ class Generator {
throws IOException, InterruptedException throws IOException, InterruptedException
{ {
SecureRandom rng = new SecureRandom(); SecureRandom rng = new SecureRandom();
FileWriter outfile = new FileWriter("signatures.test", false); FileWriter outfile = new FileWriter("signature.test", false);
Generator gen = new Generator(rng, outfile); Generator gen = new Generator(rng, outfile);
gen.runTests(1024, 160, 500); gen.runTests(1024, 160, 500);
gen.runTests(2047, 224, 500); gen.runTests(2048, 224, 500);
gen.runTests(2048, 256, 250); gen.runTests(2048, 256, 250);
gen.runTests(3072, 256, 100); gen.runTests(3072, 256, 100);
} }
@@ -160,31 +160,61 @@ class Generator {
} }
} }
private void runTest() private DSAParameters getParameters()
throws IOException
{ {
try {
DSAParameterGenerationParameters genparams = DSAParameterGenerationParameters genparams =
new DSAParameterGenerationParameters(lsize, nsize, 80, rng); new DSAParameterGenerationParameters(lsize, nsize, 80, rng);
DSAParametersGenerator gen = DSAParametersGenerator gen =
new DSAParametersGenerator(parent.appropriateDigest(nsize)); new DSAParametersGenerator(parent.appropriateDigest(nsize));
gen.init(genparams); gen.init(genparams);
DSAParameters params = gen.generateParameters(); return gen.generateParameters();
}
private AsymmetricCipherKeyPair getKeyPair(DSAParameters params)
{
DSAKeyGenerationParameters dsakeygenparams = DSAKeyGenerationParameters dsakeygenparams =
new DSAKeyGenerationParameters(rng, params); new DSAKeyGenerationParameters(rng, params);
DSAKeyPairGenerator keygen = new DSAKeyPairGenerator(); DSAKeyPairGenerator keygen = new DSAKeyPairGenerator();
keygen.init(dsakeygenparams); keygen.init(dsakeygenparams);
AsymmetricCipherKeyPair kp = keygen.generateKeyPair(); return keygen.generateKeyPair();
DSAPublicKeyParameters pub = (DSAPublicKeyParameters)kp.getPublic(); }
DSAPrivateKeyParameters priv = (DSAPrivateKeyParameters)kp.getPrivate();
private byte[] getMessage()
{
int msgsize = getRandomChoice(1024); int msgsize = getRandomChoice(1024);
byte message[] = new byte[msgsize]; byte message[] = new byte[msgsize];
rng.nextBytes(message); rng.nextBytes(message);
return message;
}
private byte[] runHash(byte[] msg, int digestsize)
throws IOException
{
Digest digestfn = appropriateDigest(digestsize);
digestfn.update(msg, 0, msg.length);
byte result[] = new byte[digestfn.getDigestSize()];
digestfn.doFinal(result, 0);
return result;
}
private void runTest()
{
try {
DSAParameters params = getParameters();
AsymmetricCipherKeyPair kp = getKeyPair(params);
DSAPublicKeyParameters pub = (DSAPublicKeyParameters)kp.getPublic();
DSAPrivateKeyParameters priv = (DSAPrivateKeyParameters)kp.getPrivate();
byte message[] = getMessage();
int digestsize = randomDigestSize(); int digestsize = randomDigestSize();
byte hash[] = runHash(message, digestsize);
Digest msgdigest = appropriateDigest(digestsize); Digest msgdigest = appropriateDigest(digestsize);
HMacDSAKCalculator kgen = new HMacDSAKCalculator(msgdigest); HMacDSAKCalculator kgen = new HMacDSAKCalculator(msgdigest);
DSASigner signer = new DSASigner(kgen); DSASigner signer = new DSASigner(kgen);
signer.init(true, priv); signer.init(true, priv);
BigInteger rs[] = signer.generateSignature(message); BigInteger rs[] = signer.generateSignature(hash);
parent.output(params, kp, digestsize, message, rs); parent.output(params, kp, digestsize, message, rs);
} catch(IOException exc) { } catch(IOException exc) {
System.out.println("EXCEPTION!"); System.out.println("EXCEPTION!");

File diff suppressed because it is too large Load Diff