Switched to 256-bit ECDSA. Modified some tests because two signatures

over the same data are not necessarily identical. Key generation is
fast again - should I be worried? ;-)
This commit is contained in:
akwizgran
2011-07-25 10:49:41 +01:00
parent fb95565880
commit b1f27757df
3 changed files with 11 additions and 11 deletions

View File

@@ -13,12 +13,13 @@ import net.sf.briar.api.crypto.KeyParser;
import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class CryptoComponentImpl implements CryptoComponent { class CryptoComponentImpl implements CryptoComponent {
private static final String PROVIDER = "BC"; private static final String PROVIDER = "BC";
private static final String DIGEST_ALGO = "SHA-256"; private static final String DIGEST_ALGO = "SHA-256";
private static final String KEY_PAIR_ALGO = "RSA"; private static final String KEY_PAIR_ALGO = "ECDSA";
private static final String SIGNATURE_ALGO = "SHA256withRSA"; private static final int KEY_PAIR_KEYSIZE = 256;
private static final String SIGNATURE_ALGO = "ECDSA";
private final KeyParser keyParser; private final KeyParser keyParser;
private final KeyPairGenerator keyPairGenerator; private final KeyPairGenerator keyPairGenerator;
@@ -29,6 +30,7 @@ public class CryptoComponentImpl implements CryptoComponent {
keyParser = new KeyParserImpl(KEY_PAIR_ALGO, PROVIDER); keyParser = new KeyParserImpl(KEY_PAIR_ALGO, PROVIDER);
keyPairGenerator = KeyPairGenerator.getInstance(KEY_PAIR_ALGO, keyPairGenerator = KeyPairGenerator.getInstance(KEY_PAIR_ALGO,
PROVIDER); PROVIDER);
keyPairGenerator.initialize(KEY_PAIR_KEYSIZE);
} catch(NoSuchAlgorithmException impossible) { } catch(NoSuchAlgorithmException impossible) {
throw new RuntimeException(impossible); throw new RuntimeException(impossible);
} catch(NoSuchProviderException impossible) { } catch(NoSuchProviderException impossible) {

View File

@@ -37,14 +37,13 @@ public class ConsumersTest extends TestCase {
signature.initSign(keyPair.getPrivate()); signature.initSign(keyPair.getPrivate());
signature.update(data); signature.update(data);
byte[] sig = signature.sign(); byte[] sig = signature.sign();
// Check that feeding a SigningConsumer generates the same signature // Check that a SigningConsumer fed with the same data verifies the sig
signature.initSign(keyPair.getPrivate()); signature.initVerify(keyPair.getPublic());
SigningConsumer sc = new SigningConsumer(signature); SigningConsumer sc = new SigningConsumer(signature);
sc.write(data[0]); sc.write(data[0]);
sc.write(data, 1, data.length - 2); sc.write(data, 1, data.length - 2);
sc.write(data[data.length - 1]); sc.write(data[data.length - 1]);
byte[] sig1 = signature.sign(); assertTrue(signature.verify(sig));
assertTrue(Arrays.equals(sig, sig1));
} }
@Test @Test

View File

@@ -54,11 +54,10 @@ public class SigningDigestingOutputStreamTest extends TestCase {
byte[] digest = messageDigest.digest(); byte[] digest = messageDigest.digest();
// Check that the output matches the input // Check that the output matches the input
assertTrue(Arrays.equals(input, out.toByteArray())); assertTrue(Arrays.equals(input, out.toByteArray()));
// Check that the signature matches a signature over the first 256 bytes // Verify the signature over the first 256 bytes
signature.initSign(keyPair.getPrivate()); signature.initVerify(keyPair.getPublic());
signature.update(input, 0, 256); signature.update(input, 0, 256);
byte[] directSig = signature.sign(); assertTrue(signature.verify(sig));
assertTrue(Arrays.equals(directSig, sig));
// Check that the digest matches a digest over all but the last 256 // Check that the digest matches a digest over all but the last 256
// bytes // bytes
messageDigest.reset(); messageDigest.reset();