Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
03cf668a
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
3
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
03cf668a
编写于
8月 12, 2013
作者:
A
ascarpino
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8020081: Cipher with OAEPPadding and OAEPParameterSpec can't be created
Reviewed-by: mullan
上级
bfd2074d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
177 addition
and
1 deletion
+177
-1
src/share/classes/com/sun/crypto/provider/SunJCE.java
src/share/classes/com/sun/crypto/provider/SunJCE.java
+2
-1
test/com/sun/crypto/provider/Cipher/RSA/TestOAEPPadding.java
test/com/sun/crypto/provider/Cipher/RSA/TestOAEPPadding.java
+175
-0
未找到文件。
src/share/classes/com/sun/crypto/provider/SunJCE.java
浏览文件 @
03cf668a
...
...
@@ -124,7 +124,8 @@ public final class SunJCE extends Provider {
put
(
"Cipher.RSA"
,
"com.sun.crypto.provider.RSACipher"
);
put
(
"Cipher.RSA SupportedModes"
,
"ECB"
);
put
(
"Cipher.RSA SupportedPaddings"
,
"NOPADDING|PKCS1PADDING|OAEPWITHMD5ANDMGF1PADDING"
"NOPADDING|PKCS1PADDING|OAEPPADDING"
+
"|OAEPWITHMD5ANDMGF1PADDING"
+
"|OAEPWITHSHA1ANDMGF1PADDING"
+
"|OAEPWITHSHA-1ANDMGF1PADDING"
+
"|OAEPWITHSHA-224ANDMGF1PADDING"
...
...
test/com/sun/crypto/provider/Cipher/RSA/TestOAEPPadding.java
0 → 100644
浏览文件 @
03cf668a
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8020081
* @summary encryption/decryption test for using OAEPPadding with
* OAEPParameterSpec specified and not specified during a Cipher.init().
* @author Anthony Scarpino
*/
import
java.util.Arrays
;
import
java.security.Security
;
import
java.security.Provider
;
import
java.security.KeyPair
;
import
java.security.KeyPairGenerator
;
import
java.security.interfaces.RSAPrivateKey
;
import
java.security.interfaces.RSAPublicKey
;
import
java.security.spec.MGF1ParameterSpec
;
import
javax.crypto.Cipher
;
import
javax.crypto.spec.OAEPParameterSpec
;
import
javax.crypto.IllegalBlockSizeException
;
import
javax.crypto.spec.PSource
;
public
class
TestOAEPPadding
{
private
static
RSAPrivateKey
privateKey
;
private
static
RSAPublicKey
publicKey
;
static
Provider
cp
;
static
boolean
failed
=
false
;
public
static
void
main
(
String
args
[])
throws
Exception
{
cp
=
Security
.
getProvider
(
"SunJCE"
);
System
.
out
.
println
(
"Testing provider "
+
cp
.
getName
()
+
"..."
);
Provider
kfp
=
Security
.
getProvider
(
"SunRsaSign"
);
KeyPairGenerator
kpg
=
KeyPairGenerator
.
getInstance
(
"RSA"
,
kfp
);
kpg
.
initialize
(
2048
);
KeyPair
kp
=
kpg
.
generateKeyPair
();
privateKey
=
(
RSAPrivateKey
)
kp
.
getPrivate
();
publicKey
=
(
RSAPublicKey
)
kp
.
getPublic
();
// Test using a spec with each digest algorithm case
test
(
new
OAEPParameterSpec
(
"MD5"
,
"MGF1"
,
MGF1ParameterSpec
.
SHA1
,
PSource
.
PSpecified
.
DEFAULT
));
test
(
new
OAEPParameterSpec
(
"SHA1"
,
"MGF1"
,
MGF1ParameterSpec
.
SHA1
,
PSource
.
PSpecified
.
DEFAULT
));
// For default OAEPParameterSpec case (SHA1)
test
(
null
);
test
(
new
OAEPParameterSpec
(
"SHA-224"
,
"MGF1"
,
MGF1ParameterSpec
.
SHA1
,
PSource
.
PSpecified
.
DEFAULT
));
test
(
new
OAEPParameterSpec
(
"SHA-256"
,
"MGF1"
,
MGF1ParameterSpec
.
SHA1
,
PSource
.
PSpecified
.
DEFAULT
));
test
(
new
OAEPParameterSpec
(
"SHA-384"
,
"MGF1"
,
MGF1ParameterSpec
.
SHA1
,
PSource
.
PSpecified
.
DEFAULT
));
test
(
new
OAEPParameterSpec
(
"SHA-512"
,
"MGF1"
,
MGF1ParameterSpec
.
SHA1
,
PSource
.
PSpecified
.
DEFAULT
));
if
(
failed
)
{
throw
new
Exception
(
"Test failed"
);
}
}
/*
* Test with one byte, the max bytes, and the max + 1 bytes allowed by
* the RSA key size and the digest algorithm
*/
static
void
test
(
OAEPParameterSpec
spec
)
throws
Exception
{
int
dlen
=
0
;
String
algo
;
// For default OAEPParameterSpec case (SHA1)
if
(
spec
==
null
)
{
dlen
=
20
;
algo
=
"Default"
;
}
else
{
// Use the digest algorith provided in the spec
algo
=
spec
.
getDigestAlgorithm
();
if
(
algo
.
equals
(
"MD5"
))
{
dlen
=
16
;
}
else
if
(
algo
.
equals
(
"SHA1"
))
{
dlen
=
20
;
}
else
if
(
algo
.
equals
(
"SHA-224"
))
{
dlen
=
28
;
}
else
if
(
algo
.
equals
(
"SHA-256"
))
{
dlen
=
32
;
}
else
if
(
algo
.
equals
(
"SHA-384"
))
{
dlen
=
48
;
}
else
if
(
algo
.
equals
(
"SHA-512"
))
{
dlen
=
64
;
}
}
// OAEP maximum length for a given digest algorith & RSA key length
int
max
=
((
publicKey
.
getModulus
().
bitLength
()
/
8
)
-
(
2
*
dlen
)
-
2
);
// Test with data length of 1
try
{
testEncryptDecrypt
(
spec
,
1
);
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
algo
+
" failed with data length of 1"
);
e
.
printStackTrace
();
failed
=
true
;
}
// Test with data length of maximum allowed
try
{
testEncryptDecrypt
(
spec
,
max
);
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
algo
+
" failed with data length of "
+
max
);
e
.
printStackTrace
();
failed
=
true
;
}
// Test with data length of maximum allowed + 1
try
{
testEncryptDecrypt
(
spec
,
max
+
1
);
throw
new
Exception
();
}
catch
(
IllegalBlockSizeException
ie
)
{
// expected to fail
}
catch
(
Exception
e
)
{
System
.
err
.
println
(
algo
+
" failed with data length of "
+
(
max
+
1
));
e
.
printStackTrace
();
failed
=
true
;
}
}
private
static
void
testEncryptDecrypt
(
OAEPParameterSpec
spec
,
int
dataLength
)
throws
Exception
{
System
.
out
.
println
(
"Testing OAEP with hash "
+
((
spec
!=
null
)
?
spec
.
getDigestAlgorithm
()
:
"Default"
)
+
", "
+
dataLength
+
" bytes"
);
Cipher
c
=
Cipher
.
getInstance
(
"RSA/ECB/OAEPPadding"
,
cp
);
if
(
spec
!=
null
)
{
c
.
init
(
Cipher
.
ENCRYPT_MODE
,
publicKey
,
spec
);
}
else
{
c
.
init
(
Cipher
.
ENCRYPT_MODE
,
publicKey
);
}
byte
[]
data
=
new
byte
[
dataLength
];
byte
[]
enc
=
c
.
doFinal
(
data
);
if
(
spec
!=
null
)
{
c
.
init
(
Cipher
.
DECRYPT_MODE
,
privateKey
,
spec
);
}
else
{
c
.
init
(
Cipher
.
DECRYPT_MODE
,
privateKey
);
}
byte
[]
dec
=
c
.
doFinal
(
enc
);
if
(
Arrays
.
equals
(
data
,
dec
)
==
false
)
{
throw
new
Exception
(
"Data does not match"
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录