Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
8c518dd6
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
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看板
提交
8c518dd6
编写于
7月 12, 2017
作者:
I
igerasim
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8181692: Update storage implementations
Reviewed-by: weijun, igerasim
上级
a78ffdd8
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
108 addition
and
43 deletion
+108
-43
src/share/classes/com/sun/crypto/provider/KeyProtector.java
src/share/classes/com/sun/crypto/provider/KeyProtector.java
+18
-3
src/share/classes/com/sun/crypto/provider/PBES1Core.java
src/share/classes/com/sun/crypto/provider/PBES1Core.java
+1
-1
src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java
src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java
+89
-39
未找到文件。
src/share/classes/com/sun/crypto/provider/KeyProtector.java
浏览文件 @
8c518dd6
/*
* Copyright (c) 1998, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 201
7
, 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
...
...
@@ -38,6 +38,7 @@ import java.security.NoSuchAlgorithmException;
import
java.security.NoSuchProviderException
;
import
java.security.UnrecoverableKeyException
;
import
java.security.AlgorithmParameters
;
import
java.security.spec.InvalidParameterSpecException
;
import
java.security.spec.PKCS8EncodedKeySpec
;
import
javax.crypto.Cipher
;
...
...
@@ -74,6 +75,8 @@ final class KeyProtector {
// keys in the keystore implementation that comes with JDK 1.2)
private
static
final
String
KEY_PROTECTOR_OID
=
"1.3.6.1.4.1.42.2.17.1.1"
;
private
static
final
int
MAX_ITERATION_COUNT
=
5000000
;
private
static
final
int
ITERATION_COUNT
=
200000
;
private
static
final
int
SALT_LEN
=
20
;
// the salt length
private
static
final
int
DIGEST_LEN
=
20
;
...
...
@@ -100,7 +103,7 @@ final class KeyProtector {
SunJCE
.
getRandom
().
nextBytes
(
salt
);
// create PBE parameters from salt and iteration count
PBEParameterSpec
pbeSpec
=
new
PBEParameterSpec
(
salt
,
20
);
PBEParameterSpec
pbeSpec
=
new
PBEParameterSpec
(
salt
,
ITERATION_COUNT
);
// create PBE key from password
PBEKeySpec
pbeKeySpec
=
new
PBEKeySpec
(
this
.
password
);
...
...
@@ -155,6 +158,9 @@ final class KeyProtector {
pbeParams
.
init
(
encodedParams
);
PBEParameterSpec
pbeSpec
=
pbeParams
.
getParameterSpec
(
PBEParameterSpec
.
class
);
if
(
pbeSpec
.
getIterationCount
()
>
MAX_ITERATION_COUNT
)
{
throw
new
IOException
(
"PBE iteration count too large"
);
}
// create PBE key from password
PBEKeySpec
pbeKeySpec
=
new
PBEKeySpec
(
this
.
password
);
...
...
@@ -285,7 +291,7 @@ final class KeyProtector {
SunJCE
.
getRandom
().
nextBytes
(
salt
);
// create PBE parameters from salt and iteration count
PBEParameterSpec
pbeSpec
=
new
PBEParameterSpec
(
salt
,
20
);
PBEParameterSpec
pbeSpec
=
new
PBEParameterSpec
(
salt
,
ITERATION_COUNT
);
// create PBE key from password
PBEKeySpec
pbeKeySpec
=
new
PBEKeySpec
(
this
.
password
);
...
...
@@ -326,6 +332,15 @@ final class KeyProtector {
throw
new
UnrecoverableKeyException
(
"Cannot get "
+
"algorithm parameters"
);
}
PBEParameterSpec
pbeSpec
;
try
{
pbeSpec
=
params
.
getParameterSpec
(
PBEParameterSpec
.
class
);
}
catch
(
InvalidParameterSpecException
ipse
)
{
throw
new
IOException
(
"Invalid PBE algorithm parameters"
);
}
if
(
pbeSpec
.
getIterationCount
()
>
MAX_ITERATION_COUNT
)
{
throw
new
IOException
(
"PBE iteration count too large"
);
}
PBEWithMD5AndTripleDESCipher
cipherSpi
;
cipherSpi
=
new
PBEWithMD5AndTripleDESCipher
();
Cipher
cipher
=
new
CipherForKeyProtector
(
cipherSpi
,
...
...
src/share/classes/com/sun/crypto/provider/PBES1Core.java
浏览文件 @
8c518dd6
...
...
@@ -284,7 +284,7 @@ final class PBES1Core {
for
(
i
=
0
;
i
<
2
;
i
++)
{
byte
tmp
=
salt
[
i
];
salt
[
i
]
=
salt
[
3
-
i
];
salt
[
3
-
1
]
=
tmp
;
salt
[
3
-
i
]
=
tmp
;
}
}
...
...
src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java
浏览文件 @
8c518dd6
/*
* Copyright (c) 1999, 201
6
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
7
, 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
...
...
@@ -46,11 +46,13 @@ import java.security.cert.CertificateFactory;
import
java.security.cert.X509Certificate
;
import
java.security.cert.CertificateException
;
import
java.security.spec.AlgorithmParameterSpec
;
import
java.security.spec.InvalidParameterSpecException
;
import
java.security.spec.KeySpec
;
import
java.security.spec.PKCS8EncodedKeySpec
;
import
java.util.*
;
import
java.security.AlgorithmParameters
;
import
java.security.InvalidAlgorithmParameterException
;
import
javax.crypto.spec.PBEParameterSpec
;
import
javax.crypto.spec.PBEKeySpec
;
import
javax.crypto.spec.SecretKeySpec
;
...
...
@@ -136,6 +138,11 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
"keystore.PKCS12.keyProtectionAlgorithm"
};
private
static
final
int
MAX_ITERATION_COUNT
=
5000000
;
private
static
final
int
PBE_ITERATION_COUNT
=
50000
;
// default
private
static
final
int
MAC_ITERATION_COUNT
=
100000
;
// default
private
static
final
int
SALT_LEN
=
20
;
// friendlyName, localKeyId, trustedKeyUsage
private
static
final
String
[]
CORE_ATTRIBUTES
=
{
"1.2.840.113549.1.9.20"
,
...
...
@@ -181,8 +188,6 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
private
static
ObjectIdentifier
[]
AnyUsage
;
private
int
counter
=
0
;
private
static
final
int
iterationCount
=
1024
;
private
static
final
int
SALT_LEN
=
20
;
// private key count
// Note: This is a workaround to allow null localKeyID attribute
...
...
@@ -316,6 +321,7 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
byte
[]
encryptedKey
;
AlgorithmParameters
algParams
;
ObjectIdentifier
algOid
;
try
{
// get the encrypted private key
EncryptedPrivateKeyInfo
encrInfo
=
...
...
@@ -336,7 +342,24 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
throw
uke
;
}
try
{
try
{
PBEParameterSpec
pbeSpec
;
int
ic
=
0
;
if
(
algParams
!=
null
)
{
try
{
pbeSpec
=
algParams
.
getParameterSpec
(
PBEParameterSpec
.
class
);
}
catch
(
InvalidParameterSpecException
ipse
)
{
throw
new
IOException
(
"Invalid PBE algorithm parameters"
);
}
ic
=
pbeSpec
.
getIterationCount
();
if
(
ic
>
MAX_ITERATION_COUNT
)
{
throw
new
IOException
(
"PBE iteration count too large"
);
}
}
byte
[]
keyInfo
;
while
(
true
)
{
try
{
...
...
@@ -376,9 +399,10 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
key
=
kfac
.
generatePrivate
(
kspec
);
if
(
debug
!=
null
)
{
debug
.
println
(
"Retrieved a protected private key ("
+
key
.
getClass
().
getName
()
+
") at alias '"
+
alias
+
"'"
);
debug
.
println
(
"Retrieved a protected private key at alias"
+
" '"
+
alias
+
"' ("
+
new
AlgorithmId
(
algOid
).
getName
()
+
" iterations: "
+
ic
+
")"
);
}
// decode secret key
...
...
@@ -399,9 +423,10 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
}
if
(
debug
!=
null
)
{
debug
.
println
(
"Retrieved a protected secret key ("
+
key
.
getClass
().
getName
()
+
") at alias '"
+
alias
+
"'"
);
debug
.
println
(
"Retrieved a protected secret key at alias "
+
"'"
+
alias
+
"' ("
+
new
AlgorithmId
(
algOid
).
getName
()
+
" iterations: "
+
ic
+
")"
);
}
}
}
catch
(
Exception
e
)
{
...
...
@@ -576,9 +601,9 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
(
key
.
getFormat
().
equals
(
"PKCS8"
)))
{
if
(
debug
!=
null
)
{
debug
.
println
(
"Setting a protected private key ("
+
key
.
getClass
().
getName
()
+
") at alias '"
+
alias
+
"'"
);
debug
.
println
(
"Setting a protected private key at alias '"
+
alias
+
"'"
);
}
// Encrypt the private key
...
...
@@ -624,9 +649,8 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
encryptPrivateKey
(
pkcs8
.
toByteArray
(),
passwordProtection
);
if
(
debug
!=
null
)
{
debug
.
println
(
"Setting a protected secret key ("
+
key
.
getClass
().
getName
()
+
") at alias '"
+
alias
+
"'"
);
debug
.
println
(
"Setting a protected secret key at alias '"
+
alias
+
"'"
);
}
secretKeyCount
++;
entry
=
keyEntry
;
...
...
@@ -744,19 +768,19 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
/*
* Generate PBE Algorithm Parameters
*/
private
AlgorithmParameters
getAlgorithmParameters
(
String
algorithm
)
private
AlgorithmParameters
get
PBE
AlgorithmParameters
(
String
algorithm
)
throws
IOException
{
AlgorithmParameters
algParams
=
null
;
// create PBE parameters from salt and iteration count
PBEParameterSpec
paramSpec
=
new
PBEParameterSpec
(
getSalt
(),
iterationCount
);
new
PBEParameterSpec
(
getSalt
(),
PBE_ITERATION_COUNT
);
try
{
algParams
=
AlgorithmParameters
.
getInstance
(
algorithm
);
algParams
.
init
(
paramSpec
);
}
catch
(
Exception
e
)
{
throw
new
IOException
(
"getAlgorithmParameters failed: "
+
throw
new
IOException
(
"get
PBE
AlgorithmParameters failed: "
+
e
.
getMessage
(),
e
);
}
return
algParams
;
...
...
@@ -842,7 +866,7 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
algParams
=
AlgorithmParameters
.
getInstance
(
algorithm
);
algParams
.
init
(
algParamSpec
);
}
else
{
algParams
=
getAlgorithmParameters
(
algorithm
);
algParams
=
get
PBE
AlgorithmParameters
(
algorithm
);
}
}
else
{
// Check default key protection algorithm for PKCS12 keystores
...
...
@@ -862,7 +886,7 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
if
(
algorithm
==
null
||
algorithm
.
isEmpty
())
{
algorithm
=
"PBEWithSHA1AndDESede"
;
}
algParams
=
getAlgorithmParameters
(
algorithm
);
algParams
=
get
PBE
AlgorithmParameters
(
algorithm
);
}
ObjectIdentifier
pbeOID
=
mapPBEAlgorithmToOID
(
algorithm
);
...
...
@@ -1170,7 +1194,7 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
if
(
debug
!=
null
)
{
debug
.
println
(
"Storing "
+
(
privateKeyCount
+
secretKeyCount
)
+
" protected key(s) in a PKCS#7 data
content-type
"
);
" protected key(s) in a PKCS#7 data"
);
}
byte
[]
safeContentData
=
createSafeContent
();
...
...
@@ -1183,7 +1207,7 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
if
(
debug
!=
null
)
{
debug
.
println
(
"Storing "
+
certificateCount
+
" certificate(s) in a PKCS#7 encryptedData
content-type
"
);
" certificate(s) in a PKCS#7 encryptedData"
);
}
byte
[]
encrData
=
createEncryptedData
(
password
);
...
...
@@ -1454,7 +1478,7 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
// generate MAC (MAC key is generated within JCE)
Mac
m
=
Mac
.
getInstance
(
"HmacPBESHA1"
);
PBEParameterSpec
params
=
new
PBEParameterSpec
(
salt
,
iterationCount
);
new
PBEParameterSpec
(
salt
,
MAC_ITERATION_COUNT
);
SecretKey
key
=
getPBEKey
(
passwd
);
m
.
init
(
key
,
params
);
m
.
update
(
data
);
...
...
@@ -1462,7 +1486,7 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
// encode as MacData
MacData
macData
=
new
MacData
(
algName
,
macResult
,
salt
,
iterationCount
);
MAC_ITERATION_COUNT
);
DerOutputStream
bytes
=
new
DerOutputStream
();
bytes
.
write
(
macData
.
getEncoded
());
mData
=
bytes
.
toByteArray
();
...
...
@@ -1839,7 +1863,7 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
// create AlgorithmParameters
AlgorithmParameters
algParams
=
getAlgorithmParameters
(
"PBEWithSHA1AndRC2_40"
);
get
PBE
AlgorithmParameters
(
"PBEWithSHA1AndRC2_40"
);
DerOutputStream
bytes
=
new
DerOutputStream
();
AlgorithmId
algId
=
new
AlgorithmId
(
pbeWithSHAAnd40BitRC2CBC_OID
,
algParams
);
...
...
@@ -1959,7 +1983,7 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
if
(
contentType
.
equals
((
Object
)
ContentInfo
.
DATA_OID
))
{
if
(
debug
!=
null
)
{
debug
.
println
(
"Loading PKCS#7 data
content-type
"
);
debug
.
println
(
"Loading PKCS#7 data"
);
}
safeContentsData
=
safeContents
.
getData
();
...
...
@@ -1968,15 +1992,11 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
if
(
debug
!=
null
)
{
debug
.
println
(
"Warning: skipping PKCS#7 encryptedData"
+
"
content-type
- no password was supplied"
);
" - no password was supplied"
);
}
continue
;
}
if
(
debug
!=
null
)
{
debug
.
println
(
"Loading PKCS#7 encryptedData content-type"
);
}
DerInputStream
edi
=
safeContents
.
getContent
().
toDerInputStream
();
int
edVersion
=
edi
.
getInteger
();
...
...
@@ -1997,6 +2017,30 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
ObjectIdentifier
algOid
=
in
.
getOID
();
AlgorithmParameters
algParams
=
parseAlgParameters
(
algOid
,
in
);
PBEParameterSpec
pbeSpec
;
int
ic
=
0
;
if
(
algParams
!=
null
)
{
try
{
pbeSpec
=
algParams
.
getParameterSpec
(
PBEParameterSpec
.
class
);
}
catch
(
InvalidParameterSpecException
ipse
)
{
throw
new
IOException
(
"Invalid PBE algorithm parameters"
);
}
ic
=
pbeSpec
.
getIterationCount
();
if
(
ic
>
MAX_ITERATION_COUNT
)
{
throw
new
IOException
(
"PBE iteration count too large"
);
}
}
if
(
debug
!=
null
)
{
debug
.
println
(
"Loading PKCS#7 encryptedData "
+
"("
+
new
AlgorithmId
(
algOid
).
getName
()
+
" iterations: "
+
ic
+
")"
);
}
while
(
true
)
{
try
{
// Use JCE
...
...
@@ -2027,8 +2071,15 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
// The MacData is optional.
if
(
password
!=
null
&&
s
.
available
()
>
0
)
{
MacData
macData
=
new
MacData
(
s
);
try
{
MacData
macData
=
new
MacData
(
s
);
int
ic
=
macData
.
getIterations
();
try
{
if
(
ic
>
MAX_ITERATION_COUNT
)
{
throw
new
InvalidAlgorithmParameterException
(
"MAC iteration count too large: "
+
ic
);
}
String
algName
=
macData
.
getDigestAlgName
().
toUpperCase
(
Locale
.
ENGLISH
);
...
...
@@ -2038,8 +2089,7 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
// generate MAC (MAC key is created within JCE)
Mac
m
=
Mac
.
getInstance
(
"HmacPBE"
+
algName
);
PBEParameterSpec
params
=
new
PBEParameterSpec
(
macData
.
getSalt
(),
macData
.
getIterations
());
new
PBEParameterSpec
(
macData
.
getSalt
(),
ic
);
SecretKey
key
=
getPBEKey
(
password
);
m
.
init
(
key
,
params
);
m
.
update
(
authSafeData
);
...
...
@@ -2047,16 +2097,16 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
if
(
debug
!=
null
)
{
debug
.
println
(
"Checking keystore integrity "
+
"(
MAC algorithm: "
+
m
.
getAlgorithm
()
+
")"
);
"(
"
+
m
.
getAlgorithm
()
+
" iterations: "
+
ic
+
")"
);
}
if
(!
MessageDigest
.
isEqual
(
macData
.
getDigest
(),
macResult
))
{
throw
new
UnrecoverableKeyException
(
"Failed PKCS12"
+
" integrity checking"
);
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
throw
new
IOException
(
"Integrity check failed: "
+
e
,
e
);
}
}
}
/*
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录