DSA! Working, with tests!
This commit is contained in:
7
.gitignore
vendored
7
.gitignore
vendored
@@ -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
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ fn dsa_verification_tests()
|
|||||||
|
|
||||||
assert!(!neg0 & !neg1 & !neg2 & !neg4 &
|
assert!(!neg0 & !neg1 & !neg2 & !neg4 &
|
||||||
!neg5 & !neg6 & !neg7 & !neg8);
|
!neg5 & !neg6 & !neg7 & !neg8);
|
||||||
|
|
||||||
let p = UCN::from_bytes(pbytes);
|
let p = UCN::from_bytes(pbytes);
|
||||||
let g = UCN::from_bytes(gbytes);
|
let g = UCN::from_bytes(gbytes);
|
||||||
let q = UCN::from_bytes(qbytes);
|
let q = UCN::from_bytes(qbytes);
|
||||||
|
|||||||
@@ -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!");
|
||||||
|
|||||||
17874
tests/dsa/signature.test
17874
tests/dsa/signature.test
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user