Search in sources :

Example 66 with Signature

use of java.security.Signature in project jdk8u_jdk by JetBrains.

the class SignatureTest method checkSignature.

private static void checkSignature(byte[] data, PublicKey pub, PrivateKey priv, String sigalg) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException, NoSuchProviderException {
    Signature sig = Signature.getInstance(sigalg, PROVIDER);
    sig.initSign(priv);
    for (int i = 0; i < UPDATE_TIMES_HUNDRED; i++) {
        sig.update(data);
    }
    byte[] signedData = sig.sign();
    // Make sure signature verifies with original data
    sig.initVerify(pub);
    for (int i = 0; i < UPDATE_TIMES_HUNDRED; i++) {
        sig.update(data);
    }
    if (!sig.verify(signedData)) {
        throw new RuntimeException("Failed to verify " + sigalg + " signature");
    }
    // Make sure signature does NOT verify when the original data
    // has changed
    sig.initVerify(pub);
    for (int i = 0; i < UPDATE_TIMES_FIFTY; i++) {
        sig.update(data);
    }
    if (sig.verify(signedData)) {
        throw new RuntimeException("Failed to detect bad " + sigalg + " signature");
    }
}
Also used : Signature(java.security.Signature)

Example 67 with Signature

use of java.security.Signature in project jdk8u_jdk by JetBrains.

the class Offsets method init.

static Offsets init(String provider, String algorithm) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, SignatureException {
    // fill the cleartext data with random bytes
    byte[] cleartext = new byte[100];
    RandomFactory.getRandom().nextBytes(cleartext);
    // NONEwith requires input to be of 20 bytes
    int size = algorithm.contains("NONEwith") ? 20 : 100;
    // create signature instance
    Signature signature = Signature.getInstance(algorithm, provider);
    String keyAlgo;
    if (algorithm.contains("RSA")) {
        keyAlgo = "RSA";
    } else if (algorithm.contains("ECDSA")) {
        keyAlgo = "EC";
    } else if (algorithm.contains("DSA")) {
        keyAlgo = "DSA";
    } else {
        throw new RuntimeException("Test doesn't support this signature " + "algorithm: " + algorithm);
    }
    KeyPairGenerator kpg = KeyPairGenerator.getInstance(keyAlgo, provider);
    KeyPair kp = kpg.generateKeyPair();
    PublicKey pubkey = kp.getPublic();
    PrivateKey privkey = kp.getPrivate();
    return new Offsets(signature, pubkey, privkey, size, cleartext);
}
Also used : KeyPair(java.security.KeyPair) PrivateKey(java.security.PrivateKey) PublicKey(java.security.PublicKey) Signature(java.security.Signature) KeyPairGenerator(java.security.KeyPairGenerator)

Example 68 with Signature

use of java.security.Signature in project jdk8u_jdk by JetBrains.

the class VerifyRangeCheckOverflow method main.

public static void main(String[] args) throws Exception {
    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");
    keyPairGenerator.initialize(1024);
    KeyPair keys = keyPairGenerator.generateKeyPair();
    PublicKey publicKey = keys.getPublic();
    byte[] sigBytes = new byte[100];
    Signature signature = Signature.getInstance("SHA1withDSA");
    signature.initVerify(publicKey);
    try {
        signature.verify(sigBytes, Integer.MAX_VALUE, 1);
    } catch (IllegalArgumentException ex) {
    // Expected
    }
}
Also used : KeyPair(java.security.KeyPair) PublicKey(java.security.PublicKey) Signature(java.security.Signature) KeyPairGenerator(java.security.KeyPairGenerator)

Example 69 with Signature

use of java.security.Signature in project jdk8u_jdk by JetBrains.

the class Chain method runTest.

static boolean runTest(Test test) {
    System.out.format("Test: provider = %s, signature algorithm = %s, " + "key algorithm = %s\n", test.provider, test.sigAlg, test.keyAlg);
    try {
        // Generate all private/public key pairs
        PrivateKey[] privKeys = new PrivateKey[N];
        PublicKey[] pubKeys = new PublicKey[N];
        PublicKey[] anotherPubKeys = new PublicKey[N];
        KeyPairGenerator kpg = KeyPairGenerator.getInstance(test.keyAlg.name);
        for (int j = 0; j < N; j++) {
            KeyPair kp = kpg.genKeyPair();
            KeyPair anotherKp = kpg.genKeyPair();
            privKeys[j] = kp.getPrivate();
            pubKeys[j] = kp.getPublic();
            anotherPubKeys[j] = anotherKp.getPublic();
            if (Arrays.equals(pubKeys[j].getEncoded(), anotherPubKeys[j].getEncoded())) {
                System.out.println("Failed: it should not get " + "the same pair of public key");
                return false;
            }
        }
        Signature signature;
        if (test.provider != Provider.Default) {
            signature = Signature.getInstance(test.sigAlg.name, test.provider.name);
        } else {
            signature = Signature.getInstance(test.sigAlg.name);
        }
        // Create a chain of signed objects
        SignedObject[] objects = new SignedObject[N];
        objects[0] = new SignedObject(str, privKeys[0], signature);
        for (int j = 1; j < N; j++) {
            objects[j] = new SignedObject(objects[j - 1], privKeys[j], signature);
        }
        // Verify the chain
        int n = objects.length - 1;
        SignedObject object = objects[n];
        do {
            if (!object.verify(pubKeys[n], signature)) {
                System.out.println("Failed: verification failed, n = " + n);
                return false;
            }
            if (object.verify(anotherPubKeys[n], signature)) {
                System.out.println("Failed: verification should not " + "succeed with wrong public key, n = " + n);
                return false;
            }
            object = (SignedObject) object.getObject();
            n--;
        } while (n > 0);
        System.out.println("signed data: " + object.getObject());
        if (!str.equals(object.getObject())) {
            System.out.println("Failed: signed data is not equal to " + "original one");
            return false;
        }
        System.out.println("Test passed");
        return true;
    } catch (NoSuchProviderException nspe) {
        if (test.provider == Provider.SunMSCAPI && !System.getProperty("os.name").startsWith("Windows")) {
            System.out.println("SunMSCAPI is available only on Windows: " + nspe);
            return true;
        }
        System.out.println("Unexpected exception: " + nspe);
        return false;
    } catch (Exception e) {
        System.out.println("Unexpected exception: " + e);
        e.printStackTrace(System.out);
        return false;
    }
}
Also used : KeyPair(java.security.KeyPair) PrivateKey(java.security.PrivateKey) PublicKey(java.security.PublicKey) Signature(java.security.Signature) KeyPairGenerator(java.security.KeyPairGenerator) NoSuchProviderException(java.security.NoSuchProviderException) SignedObject(java.security.SignedObject) NoSuchProviderException(java.security.NoSuchProviderException)

Example 70 with Signature

use of java.security.Signature in project jdk8u_jdk by JetBrains.

the class Copy method main.

public static void main(String[] args) throws Exception {
    KeyPairGenerator kg = KeyPairGenerator.getInstance(DSA);
    kg.initialize(KEY_SIZE);
    KeyPair kp = kg.genKeyPair();
    Signature signature = Signature.getInstance(DSA);
    Test original = new Test();
    SignedObject so = new SignedObject(original, kp.getPrivate(), signature);
    System.out.println("Signature algorithm: " + so.getAlgorithm());
    signature = Signature.getInstance(DSA, "SUN");
    if (!so.verify(kp.getPublic(), signature)) {
        throw new RuntimeException("Verification failed");
    }
    kg = KeyPairGenerator.getInstance(DSA);
    kg.initialize(KEY_SIZE);
    kp = kg.genKeyPair();
    if (so.verify(kp.getPublic(), signature)) {
        throw new RuntimeException("Unexpected success");
    }
    Object copy = so.getObject();
    if (!original.equals(copy)) {
        throw new RuntimeException("Signed object is not equal " + "to original one: " + copy);
    }
    /*
         * The signed object is a copy of an original one.
         * Once the copy is made, further manipulation
         * of the original object shouldn't has any effect on the copy.
         */
    original.set(MAGIC - 1);
    copy = so.getObject();
    if (original.equals(copy)) {
        throw new RuntimeException("Signed object is not a copy " + "of original one: " + copy);
    }
    System.out.println("Test passed");
}
Also used : KeyPair(java.security.KeyPair) Signature(java.security.Signature) SignedObject(java.security.SignedObject) KeyPairGenerator(java.security.KeyPairGenerator) SignedObject(java.security.SignedObject)

Aggregations

Signature (java.security.Signature)261 SignatureException (java.security.SignatureException)84 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)70 InvalidKeyException (java.security.InvalidKeyException)61 PublicKey (java.security.PublicKey)61 PrivateKey (java.security.PrivateKey)43 IOException (java.io.IOException)42 KeyFactory (java.security.KeyFactory)41 X509Certificate (java.security.cert.X509Certificate)26 RSAPublicKeySpec (java.security.spec.RSAPublicKeySpec)23 KeyPair (java.security.KeyPair)19 InvalidKeySpecException (java.security.spec.InvalidKeySpecException)19 GeneralSecurityException (java.security.GeneralSecurityException)16 KeyPairGenerator (java.security.KeyPairGenerator)16 MySignature1 (org.apache.harmony.security.tests.support.MySignature1)16 ByteArrayInputStream (java.io.ByteArrayInputStream)14 BigInteger (java.math.BigInteger)14 InvalidAlgorithmParameterException (java.security.InvalidAlgorithmParameterException)14 CertificateException (java.security.cert.CertificateException)14 X509EncodedKeySpec (java.security.spec.X509EncodedKeySpec)14