提交 c7159e6a 编写于 作者: A ascarpino

8022669: OAEPParameterSpec does not work if MGF1ParameterSpec is set to SHA2 algorithms

Reviewed-by: mullan
上级 0d80ac64
/* /*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2013 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -458,7 +458,7 @@ public final class RSAPadding { ...@@ -458,7 +458,7 @@ public final class RSAPadding {
private void mgf1(byte[] seed, int seedOfs, int seedLen, private void mgf1(byte[] seed, int seedOfs, int seedLen,
byte[] out, int outOfs, int maskLen) throws BadPaddingException { byte[] out, int outOfs, int maskLen) throws BadPaddingException {
byte[] C = new byte[4]; // 32 bit counter byte[] C = new byte[4]; // 32 bit counter
byte[] digest = new byte[20]; // 20 bytes is length of SHA-1 digest byte[] digest = new byte[mgfMd.getDigestLength()];
while (maskLen > 0) { while (maskLen > 0) {
mgfMd.update(seed, seedOfs, seedLen); mgfMd.update(seed, seedOfs, seedLen);
mgfMd.update(C); mgfMd.update(C);
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
/* /*
* @test * @test
* @bug 8020081 * @bug 8020081 8022669
* @summary encryption/decryption test for using OAEPPadding with * @summary encryption/decryption test for using OAEPPadding with
* OAEPParameterSpec specified and not specified during a Cipher.init(). * OAEPParameterSpec specified and not specified during a Cipher.init().
* @author Anthony Scarpino * @author Anthony Scarpino
...@@ -62,20 +62,74 @@ public class TestOAEPPadding { ...@@ -62,20 +62,74 @@ public class TestOAEPPadding {
publicKey = (RSAPublicKey)kp.getPublic(); publicKey = (RSAPublicKey)kp.getPublic();
// Test using a spec with each digest algorithm case // Test using a spec with each digest algorithm case
// MD5
test(new OAEPParameterSpec("MD5", "MGF1", test(new OAEPParameterSpec("MD5", "MGF1",
MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT)); MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("MD5", "MGF1",
MGF1ParameterSpec.SHA224, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("MD5", "MGF1",
MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("MD5", "MGF1",
MGF1ParameterSpec.SHA384, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("MD5", "MGF1",
MGF1ParameterSpec.SHA512, PSource.PSpecified.DEFAULT));
// SHA1
test(new OAEPParameterSpec("SHA1", "MGF1", test(new OAEPParameterSpec("SHA1", "MGF1",
MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT)); MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA1", "MGF1",
MGF1ParameterSpec.SHA224, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA1", "MGF1",
MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA1", "MGF1",
MGF1ParameterSpec.SHA384, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA1", "MGF1",
MGF1ParameterSpec.SHA512, PSource.PSpecified.DEFAULT));
// For default OAEPParameterSpec case (SHA1) // For default OAEPParameterSpec case (SHA1)
test(null); test(null);
// SHA-224
test(new OAEPParameterSpec("SHA-224", "MGF1", test(new OAEPParameterSpec("SHA-224", "MGF1",
MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT)); MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-224", "MGF1",
MGF1ParameterSpec.SHA224, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-224", "MGF1",
MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-224", "MGF1",
MGF1ParameterSpec.SHA384, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-224", "MGF1",
MGF1ParameterSpec.SHA512, PSource.PSpecified.DEFAULT));
// SHA-256
test(new OAEPParameterSpec("SHA-256", "MGF1", test(new OAEPParameterSpec("SHA-256", "MGF1",
MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT)); MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-256", "MGF1",
MGF1ParameterSpec.SHA224, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-256", "MGF1",
MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-256", "MGF1",
MGF1ParameterSpec.SHA384, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-256", "MGF1",
MGF1ParameterSpec.SHA512, PSource.PSpecified.DEFAULT));
// SHA-384
test(new OAEPParameterSpec("SHA-384", "MGF1", test(new OAEPParameterSpec("SHA-384", "MGF1",
MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT)); MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-384", "MGF1",
MGF1ParameterSpec.SHA224, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-384", "MGF1",
MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-384", "MGF1",
MGF1ParameterSpec.SHA384, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-384", "MGF1",
MGF1ParameterSpec.SHA512, PSource.PSpecified.DEFAULT));
// SHA-512
test(new OAEPParameterSpec("SHA-512", "MGF1", test(new OAEPParameterSpec("SHA-512", "MGF1",
MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT)); MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-512", "MGF1",
MGF1ParameterSpec.SHA224, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-512", "MGF1",
MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-512", "MGF1",
MGF1ParameterSpec.SHA384, PSource.PSpecified.DEFAULT));
test(new OAEPParameterSpec("SHA-512", "MGF1",
MGF1ParameterSpec.SHA512, PSource.PSpecified.DEFAULT));
if (failed) { if (failed) {
throw new Exception("Test failed"); throw new Exception("Test failed");
} }
...@@ -149,9 +203,16 @@ public class TestOAEPPadding { ...@@ -149,9 +203,16 @@ public class TestOAEPPadding {
private static void testEncryptDecrypt(OAEPParameterSpec spec, private static void testEncryptDecrypt(OAEPParameterSpec spec,
int dataLength) throws Exception { int dataLength) throws Exception {
System.out.println("Testing OAEP with hash " +
((spec != null) ? spec.getDigestAlgorithm() : "Default") + System.out.print("Testing OAEP with hash ");
", " + dataLength + " bytes"); if (spec != null) {
System.out.print(spec.getDigestAlgorithm() + " and MGF " +
((MGF1ParameterSpec)spec.getMGFParameters()).
getDigestAlgorithm());
} else {
System.out.print("Default");
}
System.out.println(", " + dataLength + " bytes");
Cipher c = Cipher.getInstance("RSA/ECB/OAEPPadding", cp); Cipher c = Cipher.getInstance("RSA/ECB/OAEPPadding", cp);
if (spec != null) { if (spec != null) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册