Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
16e18e93
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看板
提交
16e18e93
编写于
5月 17, 2013
作者:
C
chegar
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
f4cfc12c
88be1441
变更
56
显示空白变更内容
内联
并排
Showing
56 changed file
with
3072 addition
and
1427 deletion
+3072
-1427
make/sun/security/ec/Makefile
make/sun/security/ec/Makefile
+0
-9
make/sun/security/other/Makefile
make/sun/security/other/Makefile
+0
-9
makefiles/CreateJars.gmk
makefiles/CreateJars.gmk
+1
-13
src/share/classes/com/sun/java/util/jar/pack/Attribute.java
src/share/classes/com/sun/java/util/jar/pack/Attribute.java
+72
-18
src/share/classes/com/sun/java/util/jar/pack/BandStructure.java
...are/classes/com/sun/java/util/jar/pack/BandStructure.java
+113
-59
src/share/classes/com/sun/java/util/jar/pack/Constants.java
src/share/classes/com/sun/java/util/jar/pack/Constants.java
+4
-1
src/share/classes/com/sun/java/util/jar/pack/Fixups.java
src/share/classes/com/sun/java/util/jar/pack/Fixups.java
+43
-10
src/share/classes/com/sun/java/util/jar/pack/Package.java
src/share/classes/com/sun/java/util/jar/pack/Package.java
+2
-2
src/share/classes/com/sun/java/util/jar/pack/PackageReader.java
...are/classes/com/sun/java/util/jar/pack/PackageReader.java
+21
-12
src/share/classes/com/sun/tools/jdi/AbstractLauncher.java
src/share/classes/com/sun/tools/jdi/AbstractLauncher.java
+1
-1
src/share/classes/com/sun/tools/jdi/SunCommandLineLauncher.java
...are/classes/com/sun/tools/jdi/SunCommandLineLauncher.java
+1
-1
src/share/classes/java/lang/reflect/Proxy.java
src/share/classes/java/lang/reflect/Proxy.java
+7
-4
src/share/classes/java/util/logging/LogManager.java
src/share/classes/java/util/logging/LogManager.java
+3
-3
src/share/classes/java/util/logging/Logger.java
src/share/classes/java/util/logging/Logger.java
+83
-23
src/share/classes/sun/security/ec/CurveDB.java
src/share/classes/sun/security/ec/CurveDB.java
+669
-0
src/share/classes/sun/security/ec/ECDHKeyAgreement.java
src/share/classes/sun/security/ec/ECDHKeyAgreement.java
+5
-3
src/share/classes/sun/security/ec/ECDSASignature.java
src/share/classes/sun/security/ec/ECDSASignature.java
+5
-3
src/share/classes/sun/security/ec/ECKeyPairGenerator.java
src/share/classes/sun/security/ec/ECKeyPairGenerator.java
+8
-6
src/share/classes/sun/security/ec/ECParameters.java
src/share/classes/sun/security/ec/ECParameters.java
+79
-192
src/share/classes/sun/security/ec/ECPrivateKeyImpl.java
src/share/classes/sun/security/ec/ECPrivateKeyImpl.java
+6
-7
src/share/classes/sun/security/ec/ECPublicKeyImpl.java
src/share/classes/sun/security/ec/ECPublicKeyImpl.java
+6
-6
src/share/classes/sun/security/ec/NamedCurve.java
src/share/classes/sun/security/ec/NamedCurve.java
+17
-595
src/share/classes/sun/security/ec/SunECEntries.java
src/share/classes/sun/security/ec/SunECEntries.java
+30
-58
src/share/classes/sun/security/pkcs11/P11ECKeyFactory.java
src/share/classes/sun/security/pkcs11/P11ECKeyFactory.java
+47
-24
src/share/classes/sun/security/pkcs11/P11Key.java
src/share/classes/sun/security/pkcs11/P11Key.java
+5
-5
src/share/classes/sun/security/pkcs11/P11KeyStore.java
src/share/classes/sun/security/pkcs11/P11KeyStore.java
+6
-3
src/share/classes/sun/security/ssl/JsseJce.java
src/share/classes/sun/security/ssl/JsseJce.java
+5
-6
src/share/classes/sun/security/util/ECKeySizeParameterSpec.java
...are/classes/sun/security/util/ECKeySizeParameterSpec.java
+66
-0
src/share/classes/sun/security/util/ECUtil.java
src/share/classes/sun/security/util/ECUtil.java
+231
-0
src/share/native/com/sun/java/util/jar/pack/constants.h
src/share/native/com/sun/java/util/jar/pack/constants.h
+4
-0
src/share/native/com/sun/java/util/jar/pack/unpack.cpp
src/share/native/com/sun/java/util/jar/pack/unpack.cpp
+89
-32
test/ProblemList.txt
test/ProblemList.txt
+0
-4
test/java/lang/reflect/Proxy/Basic1.java
test/java/lang/reflect/Proxy/Basic1.java
+25
-13
test/java/net/CookieHandler/CookieManagerTest.java
test/java/net/CookieHandler/CookieManagerTest.java
+110
-85
test/java/util/logging/bundlesearch/IndirectlyLoadABundle.java
...java/util/logging/bundlesearch/IndirectlyLoadABundle.java
+98
-27
test/java/util/logging/bundlesearch/LoadItUp1.java
test/java/util/logging/bundlesearch/LoadItUp1.java
+49
-0
test/java/util/logging/bundlesearch/LoadItUp2.java
test/java/util/logging/bundlesearch/LoadItUp2.java
+9
-9
test/java/util/logging/bundlesearch/LoadItUp2Invoker.java
test/java/util/logging/bundlesearch/LoadItUp2Invoker.java
+60
-0
test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java
...a/util/logging/bundlesearch/ResourceBundleSearchTest.java
+65
-30
test/java/util/logging/bundlesearch/TwiceIndirectlyLoadABundle.java
...util/logging/bundlesearch/TwiceIndirectlyLoadABundle.java
+91
-0
test/java/util/logging/bundlesearch/resources/CallerSearchableResource_en.properties
...lesearch/resources/CallerSearchableResource_en.properties
+25
-0
test/javax/xml/jaxp/PrecisionDecimalDV/XPrecisionDecimalToString.java
...ml/jaxp/PrecisionDecimalDV/XPrecisionDecimalToString.java
+103
-0
test/sun/net/www/protocol/http/B6299712.java
test/sun/net/www/protocol/http/B6299712.java
+91
-95
test/sun/security/pkcs11/ec/TestCurves.java
test/sun/security/pkcs11/ec/TestCurves.java
+62
-7
test/sun/security/pkcs11/ec/TestECDH2.java
test/sun/security/pkcs11/ec/TestECDH2.java
+7
-5
test/sun/security/pkcs11/ec/TestECDSA2.java
test/sun/security/pkcs11/ec/TestECDSA2.java
+8
-5
test/tools/pack200/AttributeTests.java
test/tools/pack200/AttributeTests.java
+1
-5
test/tools/pack200/BandIntegrity.java
test/tools/pack200/BandIntegrity.java
+61
-0
test/tools/pack200/InstructionTests.java
test/tools/pack200/InstructionTests.java
+2
-7
test/tools/pack200/Utils.java
test/tools/pack200/Utils.java
+11
-0
test/tools/pack200/pack200-verifier/src/xmlkit/ClassReader.java
...ools/pack200/pack200-verifier/src/xmlkit/ClassReader.java
+161
-30
test/tools/pack200/typeannos/Lambda.java
test/tools/pack200/typeannos/Lambda.java
+59
-0
test/tools/pack200/typeannos/Readme.txt
test/tools/pack200/typeannos/Readme.txt
+11
-0
test/tools/pack200/typeannos/TargetTypes.java
test/tools/pack200/typeannos/TargetTypes.java
+227
-0
test/tools/pack200/typeannos/TestTypeAnnotations.java
test/tools/pack200/typeannos/TestTypeAnnotations.java
+45
-0
test/tools/pack200/typeannos/TypeUseTarget.java
test/tools/pack200/typeannos/TypeUseTarget.java
+62
-0
未找到文件。
make/sun/security/ec/Makefile
浏览文件 @
16e18e93
...
...
@@ -124,15 +124,6 @@ CLASSDESTDIR = $(TEMPDIR)/classes
#
AUTO_FILES_JAVA_DIRS
=
$(PKGDIR)
#
# Exclude the sources that get built by ../other/Makefile
#
AUTO_JAVA_PRUNE
=
\
ECParameters.java
\
ECPrivateKeyImpl.java
\
ECPublicKeyImpl.java
\
NamedCurve.java
#
# Some licensees do not get the native ECC sources, but we still need to
# be able to build "all" for them. Check here to see if the sources are
...
...
make/sun/security/other/Makefile
浏览文件 @
16e18e93
...
...
@@ -49,15 +49,6 @@ AUTO_FILES_JAVA_DIRS = \
sun/security/x509
\
com/sun/net/ssl/internal/ssl
#
# EC classes used by the packages above
#
FILES_java
+=
\
sun/security/ec/ECParameters.java
\
sun/security/ec/ECPrivateKeyImpl.java
\
sun/security/ec/ECPublicKeyImpl.java
\
sun/security/ec/NamedCurve.java
#
# Rules
#
...
...
makefiles/CreateJars.gmk
浏览文件 @
16e18e93
...
...
@@ -216,19 +216,7 @@ RT_JAR_EXCLUDES += \
sun/net/spi/nameservice/dns \
sun/nio/cs/ext \
sun/rmi/rmic \
sun/security/ec/ECDHKeyAgreement.class \
sun/security/ec/ECDSASignature.class \
sun/security/ec/ECDSASignature\$$$$Raw.class \
sun/security/ec/ECDSASignature\$$$$SHA1.class \
sun/security/ec/ECDSASignature\$$$$SHA224.class \
sun/security/ec/ECDSASignature\$$$$SHA256.class \
sun/security/ec/ECDSASignature\$$$$SHA384.class \
sun/security/ec/ECDSASignature\$$$$SHA512.class \
sun/security/ec/ECKeyFactory.class \
sun/security/ec/ECKeyPairGenerator.class \
sun/security/ec/SunEC\$$$$1.class \
sun/security/ec/SunEC.class \
sun/security/ec/SunECEntries.class \
sun/security/ec \
sun/security/internal \
sun/security/mscapi \
sun/security/pkcs11 \
...
...
src/share/classes/com/sun/java/util/jar/pack/Attribute.java
浏览文件 @
16e18e93
...
...
@@ -99,6 +99,7 @@ class Attribute implements Comparable<Attribute> {
return
this
==
def
.
canon
;
}
@Override
public
int
compareTo
(
Attribute
that
)
{
return
this
.
def
.
compareTo
(
that
.
def
);
}
...
...
@@ -212,20 +213,20 @@ class Attribute implements Comparable<Attribute> {
// Metadata.
//
// We define metadata using similar layouts
// for all five kinds of metadata attributes
.
// for all five kinds of metadata attributes
and 2 type metadata attributes
//
// Regular annotations are a counted list of [RSHNH[RUH(1)]][...]
// pack.method.attribute.RuntimeVisibleAnnotations=[NH[(1)]][RSHNH[RUH(1)]][TB...]
//
// Parameter annotations are a counted list of regular annotations.
// pack.method.attribute.RuntimeVisibleParameterAnnotations=[N
H
[(1)]][NH[(1)]][RSHNH[RUH(1)]][TB...]
// pack.method.attribute.RuntimeVisibleParameterAnnotations=[N
B
[(1)]][NH[(1)]][RSHNH[RUH(1)]][TB...]
//
// RuntimeInvisible annotations are defined similarly...
// Non-method annotations are defined similarly...
//
// Annotation are a simple tagged value [TB...]
// pack.attribute.method.AnnotationDefault=[TB...]
//
static
{
String
mdLayouts
[]
=
{
Attribute
.
normalizeLayoutString
...
...
@@ -238,6 +239,9 @@ class Attribute implements Comparable<Attribute> {
+
"\n # annotations :="
+
"\n [ NH[(1)] ] # forward call to annotation"
+
"\n "
),
Attribute
.
normalizeLayoutString
(
""
+
"\n # annotation :="
+
"\n [RSH"
+
"\n NH[RUH (1)] # forward call to value"
...
...
@@ -259,16 +263,54 @@ class Attribute implements Comparable<Attribute> {
+
"\n ()[] ]"
)
};
/*
* RuntimeVisibleTypeAnnotation and RuntimeInvisibleTypeAnnotatation are
* similar to RuntimeVisibleAnnotation and RuntimeInvisibleAnnotation,
* a type-annotation union and a type-path structure precedes the
* annotation structure
*/
String
typeLayouts
[]
=
{
Attribute
.
normalizeLayoutString
(
""
+
"\n # type-annotations :="
+
"\n [ NH[(1)(2)(3)] ] # forward call to type-annotations"
),
Attribute
.
normalizeLayoutString
(
""
+
"\n # type-annotation :="
+
"\n [TB"
+
"\n (0-1) [B] # {CLASS, METHOD}_TYPE_PARAMETER"
+
"\n (16) [FH] # CLASS_EXTENDS"
+
"\n (17-18) [BB] # {CLASS, METHOD}_TYPE_PARAMETER_BOUND"
+
"\n (19-21) [] # FIELD, METHOD_RETURN, METHOD_RECEIVER"
+
"\n (22) [B] # METHOD_FORMAL_PARAMETER"
+
"\n (23) [H] # THROWS"
+
"\n (64-65) [NH[PHOHH]] # LOCAL_VARIABLE, RESOURCE_VARIABLE"
+
"\n (66) [H] # EXCEPTION_PARAMETER"
+
"\n (67-70) [PH] # INSTANCEOF, NEW, {CONSTRUCTOR, METHOD}_REFERENCE_RECEIVER"
+
"\n (71-75) [PHB] # CAST, {CONSTRUCTOR,METHOD}_INVOCATION_TYPE_ARGUMENT, {CONSTRUCTOR, METHOD}_REFERENCE_TYPE_ARGUMENT"
+
"\n ()[] ]"
),
Attribute
.
normalizeLayoutString
(
""
+
"\n # type-path"
+
"\n [ NB[BB] ]"
)
};
Map
<
Layout
,
Attribute
>
sd
=
standardDefs
;
String
defaultLayout
=
mdLayouts
[
2
];
String
annotationsLayout
=
mdLayouts
[
1
]
+
mdLayouts
[
2
];
String
defaultLayout
=
mdLayouts
[
3
];
String
annotationsLayout
=
mdLayouts
[
1
]
+
mdLayouts
[
2
]
+
mdLayouts
[
3
]
;
String
paramsLayout
=
mdLayouts
[
0
]
+
annotationsLayout
;
String
typesLayout
=
typeLayouts
[
0
]
+
typeLayouts
[
1
]
+
typeLayouts
[
2
]
+
mdLayouts
[
2
]
+
mdLayouts
[
3
];
for
(
int
ctype
=
0
;
ctype
<
ATTR_CONTEXT_LIMIT
;
ctype
++)
{
if
(
ctype
==
ATTR_CONTEXT_CODE
)
continue
;
if
(
ctype
!=
ATTR_CONTEXT_CODE
)
{
define
(
sd
,
ctype
,
"RuntimeVisibleAnnotations"
,
annotationsLayout
);
define
(
sd
,
ctype
,
"RuntimeInvisibleAnnotations"
,
annotationsLayout
);
if
(
ctype
==
ATTR_CONTEXT_METHOD
)
{
define
(
sd
,
ctype
,
"RuntimeVisibleParameterAnnotations"
,
paramsLayout
);
...
...
@@ -278,6 +320,11 @@ class Attribute implements Comparable<Attribute> {
"AnnotationDefault"
,
defaultLayout
);
}
}
define
(
sd
,
ctype
,
"RuntimeVisibleTypeAnnotations"
,
typesLayout
);
define
(
sd
,
ctype
,
"RuntimeInvisibleTypeAnnotations"
,
typesLayout
);
}
}
public
static
String
contextName
(
int
ctype
)
{
...
...
@@ -529,6 +576,7 @@ class Attribute implements Comparable<Attribute> {
return
canon
.
addContent
(
bytes
,
null
);
}
@Override
public
boolean
equals
(
Object
x
)
{
return
(
x
!=
null
)
&&
(
x
.
getClass
()
==
Layout
.
class
)
&&
equals
((
Layout
)
x
);
...
...
@@ -538,11 +586,13 @@ class Attribute implements Comparable<Attribute> {
&&
this
.
layout
.
equals
(
that
.
layout
)
&&
this
.
ctype
==
that
.
ctype
;
}
@Override
public
int
hashCode
()
{
return
(((
17
+
name
.
hashCode
())
*
37
+
layout
.
hashCode
())
*
37
+
ctype
);
}
@Override
public
int
compareTo
(
Layout
that
)
{
int
r
;
r
=
this
.
name
.
compareTo
(
that
.
name
);
...
...
@@ -551,6 +601,7 @@ class Attribute implements Comparable<Attribute> {
if
(
r
!=
0
)
return
r
;
return
this
.
ctype
-
that
.
ctype
;
}
@Override
public
String
toString
()
{
String
str
=
contextName
(
ctype
)+
"."
+
name
+
"["
+
layout
+
"]"
;
// If -ea, print out more informative strings!
...
...
@@ -698,11 +749,14 @@ class Attribute implements Comparable<Attribute> {
// References (to a local cpMap) are embedded in the bytes.
def
.
parse
(
holder
,
bytes
,
0
,
bytes
.
length
,
new
ValueStream
()
{
@Override
public
void
putInt
(
int
bandIndex
,
int
value
)
{
}
@Override
public
void
putRef
(
int
bandIndex
,
Entry
ref
)
{
refs
.
add
(
ref
);
}
@Override
public
int
encodeBCI
(
int
bci
)
{
return
bci
;
}
...
...
@@ -716,6 +770,7 @@ class Attribute implements Comparable<Attribute> {
return
def
.
unparse
(
in
,
out
);
}
@Override
public
String
toString
()
{
return
def
+
"{"
+(
bytes
==
null
?
-
1
:
size
())+
"}"
...
...
@@ -1309,7 +1364,7 @@ class Attribute implements Comparable<Attribute> {
}
out
.
putRef
(
bandIndex
,
globalRef
);
break
;
default
:
assert
(
false
);
continue
;
default
:
assert
(
false
);
}
}
return
pos
;
...
...
@@ -1416,8 +1471,7 @@ class Attribute implements Comparable<Attribute> {
int
localRef
;
if
(
globalRef
!=
null
)
{
// It's a one-element array, really an lvalue.
fixups
[
0
]
=
Fixups
.
add
(
fixups
[
0
],
null
,
out
.
size
(),
Fixups
.
U2_FORMAT
,
globalRef
);
fixups
[
0
]
=
Fixups
.
addRefWithLoc
(
fixups
[
0
],
out
.
size
(),
globalRef
);
localRef
=
0
;
// placeholder for fixups
}
else
{
localRef
=
0
;
// fixed null value
...
...
src/share/classes/com/sun/java/util/jar/pack/BandStructure.java
浏览文件 @
16e18e93
...
...
@@ -48,6 +48,7 @@ import java.util.List;
import
java.util.Map
;
import
java.util.jar.Pack200
;
import
static
com
.
sun
.
java
.
util
.
jar
.
pack
.
Constants
.*;
import
java.util.LinkedList
;
/**
* Define the structure and ordering of "bands" in a packed file.
...
...
@@ -495,6 +496,7 @@ class BandStructure {
}
protected
int
lengthForDebug
=
-
1
;
// DEBUG ONLY
@Override
public
String
toString
()
{
// DEBUG ONLY
int
length
=
(
lengthForDebug
!=
-
1
?
lengthForDebug
:
length
());
String
str
=
name
;
...
...
@@ -518,20 +520,24 @@ class BandStructure {
super
(
name
,
regularCoding
);
}
@Override
public
int
capacity
()
{
return
values
==
null
?
-
1
:
values
.
length
;
}
/** Declare predicted or needed capacity. */
@Override
protected
void
setCapacity
(
int
cap
)
{
assert
(
length
<=
cap
);
if
(
cap
==
-
1
)
{
values
=
null
;
return
;
}
values
=
realloc
(
values
,
cap
);
}
@Override
public
int
length
()
{
return
length
;
}
@Override
protected
int
valuesRemainingForDebug
()
{
return
length
-
valuesDisbursed
;
}
...
...
@@ -583,6 +589,7 @@ class BandStructure {
return
true
;
}
@Override
protected
void
chooseBandCodings
()
throws
IOException
{
boolean
canVary
=
canVaryCoding
();
if
(!
canVary
||
!
shouldVaryCoding
())
{
...
...
@@ -653,6 +660,7 @@ class BandStructure {
}
}
@Override
protected
long
computeOutputSize
()
{
outputSize
=
getCodingChooser
().
computeByteSize
(
bandCoding
,
values
,
0
,
length
);
...
...
@@ -668,6 +676,7 @@ class BandStructure {
return
regularCoding
.
setD
(
0
).
getLength
(
X
);
}
@Override
protected
void
writeDataTo
(
OutputStream
out
)
throws
IOException
{
if
(
length
==
0
)
return
;
// nothing to write
long
len0
=
0
;
...
...
@@ -691,6 +700,7 @@ class BandStructure {
if
(
optDumpBands
)
dumpBand
();
}
@Override
protected
void
readDataFrom
(
InputStream
in
)
throws
IOException
{
length
=
valuesExpected
();
if
(
length
==
0
)
return
;
// nothing to read
...
...
@@ -707,7 +717,6 @@ class BandStructure {
if
(
XB
<
0
)
{
// Do not consume this value. No alternate coding.
in
.
reset
();
XB
=
_meta_default
;
bandCoding
=
regularCoding
;
metaCoding
=
noMetaCoding
;
}
else
if
(
XB
==
_meta_default
)
{
...
...
@@ -733,6 +742,7 @@ class BandStructure {
if
(
optDumpBands
)
dumpBand
();
}
@Override
public
void
doneDisbursing
()
{
super
.
doneDisbursing
();
values
=
null
;
// for GC
...
...
@@ -763,7 +773,10 @@ class BandStructure {
/** Disburse one value. */
protected
int
getValue
()
{
assert
(
phase
()
==
DISBURSE_PHASE
);
assert
(
valuesDisbursed
<
length
);
// when debugging return a zero if lengths are zero
if
(
optDebugBands
&&
length
==
0
&&
valuesDisbursed
==
length
)
return
0
;
assert
(
valuesDisbursed
<=
length
);
return
values
[
valuesDisbursed
++];
}
...
...
@@ -784,9 +797,11 @@ class BandStructure {
super
(
name
,
BYTE1
);
}
@Override
public
int
capacity
()
{
return
bytes
==
null
?
-
1
:
Integer
.
MAX_VALUE
;
}
@Override
protected
void
setCapacity
(
int
cap
)
{
assert
(
bytes
==
null
);
// do this just once
bytes
=
new
ByteArrayOutputStream
(
cap
);
...
...
@@ -796,27 +811,32 @@ class BandStructure {
bytes
=
null
;
}
@Override
public
int
length
()
{
return
bytes
==
null
?
-
1
:
bytes
.
size
();
}
public
void
reset
()
{
bytes
.
reset
();
}
@Override
protected
int
valuesRemainingForDebug
()
{
return
(
bytes
==
null
)
?
-
1
:
((
ByteArrayInputStream
)
in
).
available
();
}
@Override
protected
void
chooseBandCodings
()
throws
IOException
{
// No-op.
assert
(
decodeEscapeValue
(
regularCoding
.
min
(),
regularCoding
)
<
0
);
assert
(
decodeEscapeValue
(
regularCoding
.
max
(),
regularCoding
)
<
0
);
}
@Override
protected
long
computeOutputSize
()
{
// do not cache
return
bytes
.
size
();
}
@Override
public
void
writeDataTo
(
OutputStream
out
)
throws
IOException
{
if
(
length
()
==
0
)
return
;
bytes
.
writeTo
(
out
);
...
...
@@ -834,6 +854,7 @@ class BandStructure {
}
}
@Override
public
void
readDataFrom
(
InputStream
in
)
throws
IOException
{
int
vex
=
valuesExpected
();
if
(
vex
==
0
)
return
;
...
...
@@ -852,11 +873,13 @@ class BandStructure {
if
(
optDumpBands
)
dumpBand
();
}
@Override
public
void
readyToDisburse
()
{
in
=
new
ByteArrayInputStream
(
bytes
.
toByteArray
());
super
.
readyToDisburse
();
}
@Override
public
void
doneDisbursing
()
{
super
.
doneDisbursing
();
if
(
optDumpBands
...
...
@@ -882,11 +905,13 @@ class BandStructure {
// Tap the stream.
bytesForDump
=
new
ByteArrayOutputStream
();
this
.
in
=
new
FilterInputStream
(
in
)
{
@Override
public
int
read
()
throws
IOException
{
int
ch
=
in
.
read
();
if
(
ch
>=
0
)
bytesForDump
.
write
(
ch
);
return
ch
;
}
@Override
public
int
read
(
byte
b
[],
int
off
,
int
len
)
throws
IOException
{
int
nr
=
in
.
read
(
b
,
off
,
len
);
if
(
nr
>=
0
)
bytesForDump
.
write
(
b
,
off
,
nr
);
...
...
@@ -917,6 +942,7 @@ class BandStructure {
assert
(
b
==
(
b
&
0xFF
));
collectorStream
().
write
(
b
);
}
@Override
public
String
toString
()
{
return
"byte "
+
super
.
toString
();
}
...
...
@@ -1184,6 +1210,7 @@ class BandStructure {
super
(
name
,
regularCoding
);
}
@Override
public
Band
init
()
{
super
.
init
();
// This is all just to keep the asserts happy:
...
...
@@ -1259,12 +1286,17 @@ class BandStructure {
int
bandCount
()
{
return
bandCount
;
}
private
int
cap
=
-
1
;
@Override
public
int
capacity
()
{
return
cap
;
}
@Override
public
void
setCapacity
(
int
cap
)
{
this
.
cap
=
cap
;
}
@Override
public
int
length
()
{
return
0
;
}
@Override
public
int
valuesRemainingForDebug
()
{
return
0
;
}
@Override
protected
void
chooseBandCodings
()
throws
IOException
{
// coding decision pass
for
(
int
i
=
0
;
i
<
bandCount
;
i
++)
{
...
...
@@ -1273,6 +1305,7 @@ class BandStructure {
}
}
@Override
protected
long
computeOutputSize
()
{
// coding decision pass
long
sum
=
0
;
...
...
@@ -1286,6 +1319,7 @@ class BandStructure {
return
sum
;
}
@Override
protected
void
writeDataTo
(
OutputStream
out
)
throws
IOException
{
long
preCount
=
0
;
if
(
outputCounter
!=
null
)
preCount
=
outputCounter
.
getCount
();
...
...
@@ -1303,6 +1337,7 @@ class BandStructure {
}
}
@Override
protected
void
readDataFrom
(
InputStream
in
)
throws
IOException
{
assert
(
false
);
// not called?
for
(
int
i
=
0
;
i
<
bandCount
;
i
++)
{
...
...
@@ -1314,6 +1349,7 @@ class BandStructure {
}
}
@Override
public
String
toString
()
{
return
"{"
+
bandCount
()+
" bands: "
+
super
.
toString
()+
"}"
;
}
...
...
@@ -1335,14 +1371,17 @@ class BandStructure {
public
long
getCount
()
{
return
count
;
}
public
void
setCount
(
long
c
)
{
count
=
c
;
}
@Override
public
void
write
(
int
b
)
throws
IOException
{
count
++;
if
(
out
!=
null
)
out
.
write
(
b
);
}
@Override
public
void
write
(
byte
b
[],
int
off
,
int
len
)
throws
IOException
{
count
+=
len
;
if
(
out
!=
null
)
out
.
write
(
b
,
off
,
len
);
}
@Override
public
String
toString
()
{
return
String
.
valueOf
(
getCount
());
}
...
...
@@ -1490,6 +1529,7 @@ class BandStructure {
CPRefBand
field_ConstantValue_KQ
=
field_attr_bands
.
newCPRefBand
(
"field_ConstantValue_KQ"
,
CONSTANT_FieldSpecific
);
CPRefBand
field_Signature_RS
=
field_attr_bands
.
newCPRefBand
(
"field_Signature_RS"
,
CONSTANT_Signature
);
MultiBand
field_metadata_bands
=
field_attr_bands
.
newMultiBand
(
"(field_metadata_bands)"
,
UNSIGNED5
);
MultiBand
field_type_metadata_bands
=
field_attr_bands
.
newMultiBand
(
"(field_type_metadata_bands)"
,
UNSIGNED5
);
CPRefBand
method_descr
=
class_bands
.
newCPRefBand
(
"method_descr"
,
MDELTA5
,
CONSTANT_NameandType
);
MultiBand
method_attr_bands
=
class_bands
.
newMultiBand
(
"(method_attr_bands)"
,
UNSIGNED5
);
...
...
@@ -1507,6 +1547,7 @@ class BandStructure {
IntBand
method_MethodParameters_NB
=
method_attr_bands
.
newIntBand
(
"method_MethodParameters_NB"
,
BYTE1
);
CPRefBand
method_MethodParameters_name_RUN
=
method_attr_bands
.
newCPRefBand
(
"method_MethodParameters_name_RUN"
,
UNSIGNED5
,
CONSTANT_Utf8
,
NULL_IS_OK
);
IntBand
method_MethodParameters_flag_FH
=
method_attr_bands
.
newIntBand
(
"method_MethodParameters_flag_FH"
);
MultiBand
method_type_metadata_bands
=
method_attr_bands
.
newMultiBand
(
"(method_type_metadata_bands)"
,
UNSIGNED5
);
MultiBand
class_attr_bands
=
class_bands
.
newMultiBand
(
"(class_attr_bands)"
,
UNSIGNED5
);
IntBand
class_flags_hi
=
class_attr_bands
.
newIntBand
(
"class_flags_hi"
);
...
...
@@ -1527,6 +1568,7 @@ class BandStructure {
CPRefBand
class_InnerClasses_name_RUN
=
class_attr_bands
.
newCPRefBand
(
"class_InnerClasses_name_RUN"
,
UNSIGNED5
,
CONSTANT_Utf8
,
NULL_IS_OK
);
IntBand
class_ClassFile_version_minor_H
=
class_attr_bands
.
newIntBand
(
"class_ClassFile_version_minor_H"
);
IntBand
class_ClassFile_version_major_H
=
class_attr_bands
.
newIntBand
(
"class_ClassFile_version_major_H"
);
MultiBand
class_type_metadata_bands
=
class_attr_bands
.
newMultiBand
(
"(class_type_metadata_bands)"
,
UNSIGNED5
);
MultiBand
code_bands
=
class_bands
.
newMultiBand
(
"(code_bands)"
,
UNSIGNED5
);
ByteBand
code_headers
=
code_bands
.
newByteBand
(
"code_headers"
);
//BYTE1
...
...
@@ -1545,7 +1587,7 @@ class BandStructure {
IntBand
code_attr_indexes
=
code_attr_bands
.
newIntBand
(
"code_attr_indexes"
);
IntBand
code_attr_calls
=
code_attr_bands
.
newIntBand
(
"code_attr_calls"
);
MultiBand
stackmap_bands
=
code_attr_bands
.
newMultiBand
(
"
StackMapTable_bands
"
,
UNSIGNED5
);
MultiBand
stackmap_bands
=
code_attr_bands
.
newMultiBand
(
"
(StackMapTable_bands)
"
,
UNSIGNED5
);
IntBand
code_StackMapTable_N
=
stackmap_bands
.
newIntBand
(
"code_StackMapTable_N"
);
IntBand
code_StackMapTable_frame_T
=
stackmap_bands
.
newIntBand
(
"code_StackMapTable_frame_T"
,
BYTE1
);
IntBand
code_StackMapTable_local_N
=
stackmap_bands
.
newIntBand
(
"code_StackMapTable_local_N"
);
...
...
@@ -1573,6 +1615,7 @@ class BandStructure {
CPRefBand
code_LocalVariableTypeTable_name_RU
=
code_attr_bands
.
newCPRefBand
(
"code_LocalVariableTypeTable_name_RU"
,
CONSTANT_Utf8
);
CPRefBand
code_LocalVariableTypeTable_type_RS
=
code_attr_bands
.
newCPRefBand
(
"code_LocalVariableTypeTable_type_RS"
,
CONSTANT_Signature
);
IntBand
code_LocalVariableTypeTable_slot
=
code_attr_bands
.
newIntBand
(
"code_LocalVariableTypeTable_slot"
);
MultiBand
code_type_metadata_bands
=
code_attr_bands
.
newMultiBand
(
"(code_type_metadata_bands)"
,
UNSIGNED5
);
// bands for bytecodes
MultiBand
bc_bands
=
all_bands
.
newMultiBand
(
"(byte_codes)"
,
UNSIGNED5
);
...
...
@@ -1678,6 +1721,14 @@ class BandStructure {
metadataBands
[
ATTR_CONTEXT_FIELD
]
=
field_metadata_bands
;
metadataBands
[
ATTR_CONTEXT_METHOD
]
=
method_metadata_bands
;
}
// Table of bands which contains type_metadata (TypeAnnotations)
protected
MultiBand
[]
typeMetadataBands
=
new
MultiBand
[
ATTR_CONTEXT_LIMIT
];
{
typeMetadataBands
[
ATTR_CONTEXT_CLASS
]
=
class_type_metadata_bands
;
typeMetadataBands
[
ATTR_CONTEXT_FIELD
]
=
field_type_metadata_bands
;
typeMetadataBands
[
ATTR_CONTEXT_METHOD
]
=
method_type_metadata_bands
;
typeMetadataBands
[
ATTR_CONTEXT_CODE
]
=
code_type_metadata_bands
;
}
// Attribute layouts.
public
static
final
int
ADH_CONTEXT_MASK
=
0x3
;
// (ad_hdr & ADH_CONTEXT_MASK)
...
...
@@ -1793,9 +1844,7 @@ class BandStructure {
for
(
int
ctype
=
0
;
ctype
<
ATTR_CONTEXT_LIMIT
;
ctype
++)
{
MultiBand
xxx_metadata_bands
=
metadataBands
[
ctype
];
if
(
xxx_metadata_bands
==
null
)
continue
;
// no code attrs
if
(
ctype
!=
ATTR_CONTEXT_CODE
)
{
// These arguments cause the bands to be built
// automatically for this complicated layout:
predefineAttribute
(
X_ATTR_RuntimeVisibleAnnotations
,
...
...
@@ -1808,9 +1857,8 @@ class BandStructure {
xxx_metadata_bands
,
Attribute
.
lookup
(
null
,
ctype
,
"RuntimeInvisibleAnnotations"
));
if
(
ctype
!=
ATTR_CONTEXT_METHOD
)
continue
;
if
(
ctype
==
ATTR_CONTEXT_METHOD
)
{
predefineAttribute
(
METHOD_ATTR_RuntimeVisibleParameterAnnotations
,
"method_RVPA_"
,
xxx_metadata_bands
,
Attribute
.
lookup
(
null
,
ctype
,
...
...
@@ -1824,6 +1872,20 @@ class BandStructure {
Attribute
.
lookup
(
null
,
ctype
,
"AnnotationDefault"
));
}
}
// All contexts have these
MultiBand
xxx_type_metadata_bands
=
typeMetadataBands
[
ctype
];
predefineAttribute
(
X_ATTR_RuntimeVisibleTypeAnnotations
,
ATTR_CONTEXT_NAME
[
ctype
]
+
"_RVTA_"
,
xxx_type_metadata_bands
,
Attribute
.
lookup
(
null
,
ctype
,
"RuntimeVisibleTypeAnnotations"
));
predefineAttribute
(
X_ATTR_RuntimeInvisibleTypeAnnotations
,
ATTR_CONTEXT_NAME
[
ctype
]
+
"_RITA_"
,
xxx_type_metadata_bands
,
Attribute
.
lookup
(
null
,
ctype
,
"RuntimeInvisibleTypeAnnotations"
));
}
Attribute
.
Layout
stackMapDef
=
Attribute
.
lookup
(
null
,
ATTR_CONTEXT_CODE
,
"StackMapTable"
).
layout
();
...
...
@@ -2053,8 +2115,7 @@ class BandStructure {
Attribute
.
Layout
def
=
attr
.
layout
();
int
ctype
=
def
.
ctype
();
return
predefineAttribute
(
index
,
ctype
,
makeNewAttributeBands
(
bandPrefix
,
def
,
addHere
),
makeNewAttributeBands
(
bandPrefix
,
def
,
addHere
),
def
.
name
(),
def
.
layout
());
}
...
...
@@ -2539,7 +2600,7 @@ class BandStructure {
return
true
;
}
// DEBUG ONLY: Validate next input band
.
// DEBUG ONLY: Validate next input band
, ensure bands are read in sequence
private
boolean
assertReadyToReadFrom
(
Band
b
,
InputStream
in
)
throws
IOException
{
Band
p
=
prevForAssertMap
.
get
(
b
);
// Any previous band must be done reading before this one starts.
...
...
@@ -2547,30 +2608,19 @@ class BandStructure {
Utils
.
log
.
warning
(
"Previous band not done reading."
);
Utils
.
log
.
info
(
" Previous band: "
+
p
);
Utils
.
log
.
info
(
" Next band: "
+
b
);
Thread
.
dumpStack
();
assert
(
verbose
>
0
);
// die unless verbose is true
}
String
name
=
b
.
name
;
if
(
optDebugBands
&&
!
name
.
startsWith
(
"("
))
{
assert
(
bandSequenceList
!=
null
);
// Verify synchronization between reader & writer:
StringBuilder
buf
=
new
StringBuilder
();
int
ch
;
while
((
ch
=
in
.
read
())
>
0
)
buf
.
append
((
char
)
ch
);
String
inName
=
buf
.
toString
();
String
inName
=
bandSequenceList
.
removeFirst
();
// System.out.println("Reading: " + name);
if
(!
inName
.
equals
(
name
))
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"Expected "
+
name
+
" but read: "
);
inName
+=
(
char
)
ch
;
while
(
inName
.
length
()
<
10
)
{
inName
+=
(
char
)
in
.
read
();
}
for
(
int
i
=
0
;
i
<
inName
.
length
();
i
++)
{
sb
.
append
(
inName
.
charAt
(
i
));
}
Utils
.
log
.
warning
(
sb
.
toString
());
Utils
.
log
.
warning
(
"Expected "
+
name
+
" but read: "
+
inName
);
return
false
;
}
Utils
.
log
.
info
(
"Read band in sequence: "
+
name
);
}
return
true
;
}
...
...
@@ -2590,7 +2640,12 @@ class BandStructure {
return
true
;
}
// DEBUG ONLY: Maybe write a debugging cookie to next output band.
/*
* DEBUG ONLY: write the bands to a list and read back the list in order,
* this works perfectly if we use the java packer and unpacker, typically
* this will work with --repack or if they are in the same jvm instance.
*/
static
LinkedList
<
String
>
bandSequenceList
=
null
;
private
boolean
assertReadyToWriteTo
(
Band
b
,
OutputStream
out
)
throws
IOException
{
Band
p
=
prevForAssertMap
.
get
(
b
);
// Any previous band must be done writing before this one starts.
...
...
@@ -2598,16 +2653,15 @@ class BandStructure {
Utils
.
log
.
warning
(
"Previous band not done writing."
);
Utils
.
log
.
info
(
" Previous band: "
+
p
);
Utils
.
log
.
info
(
" Next band: "
+
b
);
Thread
.
dumpStack
();
assert
(
verbose
>
0
);
// die unless verbose is true
}
String
name
=
b
.
name
;
if
(
optDebugBands
&&
!
name
.
startsWith
(
"("
))
{
if
(
bandSequenceList
==
null
)
bandSequenceList
=
new
LinkedList
<>();
// Verify synchronization between reader & writer:
for
(
int
j
=
0
;
j
<
name
.
length
();
j
++)
{
out
.
write
((
byte
)
name
.
charAt
(
j
));
}
out
.
write
((
byte
)
0
);
bandSequenceList
.
add
(
name
);
// System.out.println("Writing: " + b);
}
return
true
;
}
...
...
@@ -2664,7 +2718,7 @@ class BandStructure {
buf
.
append
(
"\\r"
);
}
else
{
String
str
=
"000"
+
Integer
.
toHexString
(
ch
);
buf
.
append
(
"\\u"
+
str
.
substring
(
str
.
length
()-
4
));
buf
.
append
(
"\\u"
).
append
(
str
.
substring
(
str
.
length
()-
4
));
}
}
ps
.
println
(
buf
);
...
...
src/share/classes/com/sun/java/util/jar/pack/Constants.java
浏览文件 @
16e18e93
...
...
@@ -45,6 +45,7 @@ class Constants {
1.5 to 1.5.X 49,0
1.6 to 1.5.x 50,0
1.7 to 1.6.x 51,0
1.8 to 1.7.x 52,0
*/
public
final
static
Package
.
Version
JAVA_MIN_CLASS_VERSION
=
...
...
@@ -161,7 +162,9 @@ class Constants {
METHOD_ATTR_RuntimeInvisibleParameterAnnotations
=
24
,
CLASS_ATTR_ClassFile_version
=
24
,
METHOD_ATTR_AnnotationDefault
=
25
,
METHOD_ATTR_MethodParameters
=
26
,
METHOD_ATTR_MethodParameters
=
26
,
// JDK8
X_ATTR_RuntimeVisibleTypeAnnotations
=
27
,
// JDK8
X_ATTR_RuntimeInvisibleTypeAnnotations
=
28
,
// JDK8
CODE_ATTR_StackMapTable
=
0
,
// new in Java 6
CODE_ATTR_LineNumberTable
=
1
,
CODE_ATTR_LocalVariableTable
=
2
,
...
...
src/share/classes/com/sun/java/util/jar/pack/Fixups.java
浏览文件 @
16e18e93
/*
* Copyright (c) 2003, 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
3
, 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
...
...
@@ -30,6 +30,7 @@ import java.util.AbstractCollection;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Iterator
;
import
java.util.Objects
;
/**
* Collection of relocatable constant pool references.
...
...
@@ -77,8 +78,9 @@ final class Fixups extends AbstractCollection<Fixups.Fixup> {
private
static
final
int
MINBIGSIZE
=
1
;
// cleverly share empty bigDescs:
private
static
int
[]
noBigDescs
=
{
MINBIGSIZE
};
private
static
final
int
[]
noBigDescs
=
{
MINBIGSIZE
};
@Override
public
int
size
()
{
return
size
;
}
...
...
@@ -105,6 +107,7 @@ final class Fixups extends AbstractCollection<Fixups.Fixup> {
}
}
@Override
public
void
clear
()
{
if
(
bytes
!=
null
)
{
// Clean the bytes:
...
...
@@ -141,16 +144,16 @@ final class Fixups extends AbstractCollection<Fixups.Fixup> {
assert
(
old
.
equals
(
new
ArrayList
<>(
this
)));
}
static
final
int
LOC_SHIFT
=
1
;
static
final
int
FMT_MASK
=
0x1
;
static
final
byte
UNUSED_BYTE
=
0
;
static
final
byte
OVERFLOW_BYTE
=
-
1
;
private
static
final
int
LOC_SHIFT
=
1
;
private
static
final
int
FMT_MASK
=
0x1
;
private
static
final
byte
UNUSED_BYTE
=
0
;
private
static
final
byte
OVERFLOW_BYTE
=
-
1
;
// fill pointer of bigDescs array is in element [0]
static
final
int
BIGSIZE
=
0
;
private
static
final
int
BIGSIZE
=
0
;
// Format values:
p
ublic
static
final
int
U2_FORMAT
=
0
;
p
ublic
static
final
int
U1_FORMAT
=
1
;
p
rivate
static
final
int
U2_FORMAT
=
0
;
p
rivate
static
final
int
U1_FORMAT
=
1
;
// Special values for the static methods.
private
static
final
int
SPECIAL_LOC
=
0
;
...
...
@@ -232,6 +235,14 @@ final class Fixups extends AbstractCollection<Fixups.Fixup> {
}
}
void
addU1
(
int
pc
,
Entry
ref
)
{
add
(
pc
,
U1_FORMAT
,
ref
);
}
void
addU2
(
int
pc
,
Entry
ref
)
{
add
(
pc
,
U2_FORMAT
,
ref
);
}
/** Simple and necessary tuple to present each fixup. */
public
static
class
Fixup
implements
Comparable
<
Fixup
>
{
...
...
@@ -248,15 +259,25 @@ final class Fixups extends AbstractCollection<Fixups.Fixup> {
public
int
location
()
{
return
descLoc
(
desc
);
}
public
int
format
()
{
return
descFmt
(
desc
);
}
public
Entry
entry
()
{
return
entry
;
}
@Override
public
int
compareTo
(
Fixup
that
)
{
// Ordering depends only on location.
return
this
.
location
()
-
that
.
location
();
}
@Override
public
boolean
equals
(
Object
x
)
{
if
(!(
x
instanceof
Fixup
))
return
false
;
Fixup
that
=
(
Fixup
)
x
;
return
this
.
desc
==
that
.
desc
&&
this
.
entry
==
that
.
entry
;
}
@Override
public
int
hashCode
()
{
int
hash
=
7
;
hash
=
59
*
hash
+
this
.
desc
;
hash
=
59
*
hash
+
Objects
.
hashCode
(
this
.
entry
);
return
hash
;
}
@Override
public
String
toString
()
{
return
"@"
+
location
()+(
format
()==
U1_FORMAT
?
".1"
:
""
)+
"="
+
entry
;
}
...
...
@@ -267,8 +288,11 @@ final class Fixups extends AbstractCollection<Fixups.Fixup> {
int
index
=
0
;
// index into entries
int
bigIndex
=
BIGSIZE
+
1
;
// index into bigDescs
int
next
=
head
;
// desc pointing to next fixup
@Override
public
boolean
hasNext
()
{
return
index
<
size
;
}
@Override
public
void
remove
()
{
throw
new
UnsupportedOperationException
();
}
@Override
public
Fixup
next
()
{
int
thisIndex
=
index
;
return
new
Fixup
(
nextDesc
(),
entries
[
thisIndex
]);
...
...
@@ -293,17 +317,20 @@ final class Fixups extends AbstractCollection<Fixups.Fixup> {
}
}
@Override
public
Iterator
<
Fixup
>
iterator
()
{
return
new
Itr
();
}
public
void
add
(
int
location
,
int
format
,
Entry
entry
)
{
addDesc
(
makeDesc
(
location
,
format
),
entry
);
}
@Override
public
boolean
add
(
Fixup
f
)
{
addDesc
(
f
.
desc
,
f
.
entry
);
return
true
;
}
@Override
public
boolean
addAll
(
Collection
<?
extends
Fixup
>
c
)
{
if
(
c
instanceof
Fixups
)
{
// Use knowledge of Itr structure to avoid building little structs.
...
...
@@ -367,7 +394,13 @@ final class Fixups extends AbstractCollection<Fixups.Fixup> {
}
/// Static methods that optimize the use of this class.
public
static
static
Object
addRefWithBytes
(
Object
f
,
byte
[]
bytes
,
Entry
e
)
{
return
add
(
f
,
bytes
,
0
,
U2_FORMAT
,
e
);
}
static
Object
addRefWithLoc
(
Object
f
,
int
loc
,
Entry
entry
)
{
return
add
(
f
,
null
,
loc
,
U2_FORMAT
,
entry
);
}
private
static
Object
add
(
Object
prevFixups
,
byte
[]
bytes
,
int
loc
,
int
fmt
,
Entry
e
)
{
...
...
src/share/classes/com/sun/java/util/jar/pack/Package.java
浏览文件 @
16e18e93
/*
* Copyright (c) 2001, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 201
3
, 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
...
...
@@ -259,7 +259,7 @@ class Package {
byte
[]
bytes
=
new
byte
[
2
];
sfName
=
getRefString
(
obvious
);
Object
f
=
null
;
f
=
Fixups
.
add
(
f
,
bytes
,
0
,
Fixups
.
U2_FORMAT
,
sfName
);
f
=
Fixups
.
add
RefWithBytes
(
f
,
bytes
,
sfName
);
a
=
attrSourceFileSpecial
.
addContent
(
bytes
,
f
);
}
}
else
if
(
obvious
.
equals
(
sfName
.
stringValue
()))
{
...
...
src/share/classes/com/sun/java/util/jar/pack/PackageReader.java
浏览文件 @
16e18e93
...
...
@@ -116,7 +116,7 @@ class PackageReader extends BandStructure {
int
nr
=
super
.
read
(
b
,
off
,
len
);
servedPos
=
pos
;
if
(
nr
>=
0
)
served
+=
nr
;
assert
(
served
<=
limit
||
limit
==
-
1
);
//
assert(served <= limit || limit == -1);
return
nr
;
}
public
long
skip
(
long
n
)
throws
IOException
{
...
...
@@ -1500,6 +1500,7 @@ class PackageReader extends BandStructure {
// ic_local_bands
// *class_ClassFile_version_minor_H :UNSIGNED5
// *class_ClassFile_version_major_H :UNSIGNED5
// class_type_metadata_bands
//
// field_attr_bands:
// *field_flags :UNSIGNED5
...
...
@@ -1509,6 +1510,7 @@ class PackageReader extends BandStructure {
// *field_Signature_RS :UNSIGNED5 (cp_Signature)
// field_metadata_bands
// *field_ConstantValue_KQ :UNSIGNED5 (cp_Int, etc.; see note)
// field_type_metadata_bands
//
// method_attr_bands:
// *method_flags :UNSIGNED5
...
...
@@ -1522,6 +1524,7 @@ class PackageReader extends BandStructure {
// *method_MethodParameters_NB: BYTE1
// *method_MethodParameters_RUN: UNSIGNED5 (cp_Utf8)
// *method_MethodParameters_FH: UNSIGNED5 (flag)
// method_type_metadata_bands
//
// code_attr_bands:
// *code_flags :UNSIGNED5
...
...
@@ -1537,6 +1540,7 @@ class PackageReader extends BandStructure {
// *code_LocalVariableTable_name_RU :UNSIGNED5 (cp_Utf8)
// *code_LocalVariableTable_type_RS :UNSIGNED5 (cp_Signature)
// *code_LocalVariableTable_slot :UNSIGNED5
// code_type_metadata_bands
countAttrs
(
ctype
,
holders
);
readAttrs
(
ctype
,
holders
);
...
...
@@ -1703,8 +1707,9 @@ class PackageReader extends BandStructure {
class_InnerClasses_outer_RCN
.
readFrom
(
in
);
class_InnerClasses_name_RUN
.
expectLength
(
tupleCount
);
class_InnerClasses_name_RUN
.
readFrom
(
in
);
}
else
if
(
totalCount
==
0
)
{
// Expect no elements at all. Skip quickly.
}
else
if
(!
optDebugBands
&&
totalCount
==
0
)
{
// Expect no elements at all. Skip quickly. however if we
// are debugging bands, read all bands regardless
for
(
int
j
=
0
;
j
<
ab
.
length
;
j
++)
{
ab
[
j
].
doneWithUnusedBand
();
}
...
...
@@ -1723,11 +1728,17 @@ class PackageReader extends BandStructure {
assert
(
cbles
[
j
].
kind
==
Attribute
.
EK_CBLE
);
int
entryCount
=
forwardCounts
[
j
];
forwardCounts
[
j
]
=
-
1
;
// No more, please!
if
(
cbles
[
j
].
flagTest
(
Attribute
.
EF_BACK
))
if
(
totalCount
>
0
&&
cbles
[
j
].
flagTest
(
Attribute
.
EF_BACK
))
entryCount
+=
xxx_attr_calls
.
getInt
();
readAttrBands
(
cbles
[
j
].
body
,
entryCount
,
forwardCounts
,
ab
);
}
}
// mark them read, to satisfy asserts
if
(
optDebugBands
&&
totalCount
==
0
)
{
for
(
int
j
=
0
;
j
<
ab
.
length
;
j
++)
{
ab
[
j
].
doneDisbursing
();
}
}
}
}
if
(!
predef
)
break
;
...
...
@@ -2154,11 +2165,10 @@ class PackageReader extends BandStructure {
if
(
size
==
1
)
ldcRefSet
.
add
(
ref
);
int
fmt
;
switch
(
size
)
{
case
1
:
f
mt
=
Fixups
.
U1_FORMAT
;
break
;
case
2
:
f
mt
=
Fixups
.
U2_FORMAT
;
break
;
case
1
:
f
ixupBuf
.
addU1
(
pc
,
ref
)
;
break
;
case
2
:
f
ixupBuf
.
addU2
(
pc
,
ref
)
;
break
;
default
:
assert
(
false
);
fmt
=
0
;
}
fixupBuf
.
add
(
pc
,
fmt
,
ref
);
buf
[
pc
+
0
]
=
buf
[
pc
+
1
]
=
0
;
pc
+=
size
;
}
...
...
@@ -2193,7 +2203,7 @@ class PackageReader extends BandStructure {
int
coding
=
bc_initref
.
getInt
();
// Find the nth overloading of <init> in classRef.
MemberEntry
ref
=
pkg
.
cp
.
getOverloadingForIndex
(
CONSTANT_Methodref
,
classRef
,
"<init>"
,
coding
);
fixupBuf
.
add
(
pc
,
Fixups
.
U2_FORMAT
,
ref
);
fixupBuf
.
add
U2
(
pc
,
ref
);
buf
[
pc
+
0
]
=
buf
[
pc
+
1
]
=
0
;
pc
+=
2
;
assert
(
Instruction
.
opLength
(
origBC
)
==
(
pc
-
curPC
));
...
...
@@ -2226,7 +2236,7 @@ class PackageReader extends BandStructure {
insnMap
[
numInsns
++]
=
curPC
;
}
buf
[
pc
++]
=
(
byte
)
origBC
;
fixupBuf
.
add
(
pc
,
Fixups
.
U2_FORMAT
,
ref
);
fixupBuf
.
add
U2
(
pc
,
ref
);
buf
[
pc
+
0
]
=
buf
[
pc
+
1
]
=
0
;
pc
+=
2
;
assert
(
Instruction
.
opLength
(
origBC
)
==
(
pc
-
curPC
));
...
...
@@ -2289,11 +2299,10 @@ class PackageReader extends BandStructure {
buf
[
pc
++]
=
(
byte
)
origBC
;
int
fmt
;
switch
(
size
)
{
case
1
:
f
mt
=
Fixups
.
U1_FORMAT
;
break
;
case
2
:
f
mt
=
Fixups
.
U2_FORMAT
;
break
;
case
1
:
f
ixupBuf
.
addU1
(
pc
,
ref
)
;
break
;
case
2
:
f
ixupBuf
.
addU2
(
pc
,
ref
)
;
break
;
default
:
assert
(
false
);
fmt
=
0
;
}
fixupBuf
.
add
(
pc
,
fmt
,
ref
);
buf
[
pc
+
0
]
=
buf
[
pc
+
1
]
=
0
;
pc
+=
size
;
if
(
origBC
==
_multianewarray
)
{
...
...
src/share/classes/com/sun/tools/jdi/AbstractLauncher.java
浏览文件 @
16e18e93
...
...
@@ -142,7 +142,7 @@ abstract class AbstractLauncher extends ConnectorImpl implements LaunchingConnec
* This class simply provides a context for a single launch and
* accept. It provides instance fields that can be used by
* all threads involved. This stuff can't be in the Connector proper
* because the connector is
is a singleton and
not specific to any
* because the connector is
a singleton and is
not specific to any
* one launch.
*/
private
class
Helper
{
...
...
src/share/classes/com/sun/tools/jdi/SunCommandLineLauncher.java
浏览文件 @
16e18e93
...
...
@@ -213,7 +213,7 @@ public class SunCommandLineLauncher extends AbstractLauncher implements Launchin
exePath
=
exe
;
}
// Quote only if necessary in case the quote arg value is bogus
if
(
hasWhitespace
(
exe
))
{
if
(
hasWhitespace
(
exe
Path
))
{
exePath
=
quote
+
exePath
+
quote
;
}
...
...
src/share/classes/java/lang/reflect/Proxy.java
浏览文件 @
16e18e93
...
...
@@ -31,6 +31,7 @@ import java.security.PrivilegedAction;
import
java.util.Arrays
;
import
java.util.IdentityHashMap
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.concurrent.atomic.AtomicLong
;
import
java.util.function.BiFunction
;
import
sun.misc.ProxyGenerator
;
...
...
@@ -256,8 +257,12 @@ public class Proxy implements java.io.Serializable {
* for its invocation handler.
*
* @param h the invocation handler for this proxy instance
*
* @throws NullPointerException if the given invocation handler, {@code h},
* is {@code null}.
*/
protected
Proxy
(
InvocationHandler
h
)
{
Objects
.
requireNonNull
(
h
);
this
.
h
=
h
;
}
...
...
@@ -698,9 +703,7 @@ public class Proxy implements java.io.Serializable {
InvocationHandler
h
)
throws
IllegalArgumentException
{
if
(
h
==
null
)
{
throw
new
NullPointerException
();
}
Objects
.
requireNonNull
(
h
);
final
SecurityManager
sm
=
System
.
getSecurityManager
();
if
(
sm
!=
null
)
{
...
...
src/share/classes/java/util/logging/LogManager.java
浏览文件 @
16e18e93
...
...
@@ -433,11 +433,11 @@ public class LogManager {
// add a new Logger or return the one that has been added previously
// as a LogManager subclass may override the addLogger, getLogger,
// readConfiguration, and other methods.
Logger
demandLogger
(
String
name
,
String
resourceBundleName
)
{
Logger
demandLogger
(
String
name
,
String
resourceBundleName
,
Class
<?>
caller
)
{
Logger
result
=
getLogger
(
name
);
if
(
result
==
null
)
{
// only allocate the new logger once
Logger
newLogger
=
new
Logger
(
name
,
resourceBundleName
);
Logger
newLogger
=
new
Logger
(
name
,
resourceBundleName
,
caller
);
do
{
if
(
addLogger
(
newLogger
))
{
// We successfully added the new Logger that we
...
...
@@ -519,7 +519,7 @@ public class LogManager {
Logger
demandLogger
(
String
name
,
String
resourceBundleName
)
{
// a LogManager subclass may have its own implementation to add and
// get a Logger. So delegate to the LogManager to do the work.
return
manager
.
demandLogger
(
name
,
resourceBundleName
);
return
manager
.
demandLogger
(
name
,
resourceBundleName
,
null
);
}
synchronized
Logger
findLogger
(
String
name
)
{
...
...
src/share/classes/java/util/logging/Logger.java
浏览文件 @
16e18e93
...
...
@@ -191,8 +191,6 @@ import sun.reflect.Reflection;
*
* @since 1.4
*/
public
class
Logger
{
private
static
final
Handler
emptyHandlers
[]
=
new
Handler
[
0
];
private
static
final
int
offValue
=
Level
.
OFF
.
intValue
();
...
...
@@ -218,6 +216,7 @@ public class Logger {
private
ArrayList
<
LogManager
.
LoggerWeakRef
>
kids
;
// WeakReferences to loggers that have us as parent
private
volatile
Level
levelObject
;
private
volatile
int
levelValue
;
// current effective level value
private
WeakReference
<
ClassLoader
>
callersClassLoaderRef
;
/**
* GLOBAL_LOGGER_NAME is a name for the global logger.
...
...
@@ -278,18 +277,31 @@ public class Logger {
* no corresponding resource can be found.
*/
protected
Logger
(
String
name
,
String
resourceBundleName
)
{
this
.
manager
=
LogManager
.
getLogManager
();
if
(
resourceBundleName
!=
null
)
{
// MissingResourceException or IllegalArgumentException can
// be thrown by setupResourceInfo(). Since this is the Logger
// constructor, the resourceBundleName field is null so
// IllegalArgumentException cannot happen here.
setupResourceInfo
(
resourceBundleName
);
this
(
name
,
resourceBundleName
,
null
);
}
Logger
(
String
name
,
String
resourceBundleName
,
Class
<?>
caller
)
{
this
.
manager
=
LogManager
.
getLogManager
();
setupResourceInfo
(
resourceBundleName
,
caller
);
this
.
name
=
name
;
levelValue
=
Level
.
INFO
.
intValue
();
}
private
void
setCallersClassLoaderRef
(
Class
<?>
caller
)
{
ClassLoader
callersClassLoader
=
((
caller
!=
null
)
?
caller
.
getClassLoader
()
:
null
);
if
(
callersClassLoader
!=
null
)
{
this
.
callersClassLoaderRef
=
new
WeakReference
(
callersClassLoader
);
}
}
private
ClassLoader
getCallersClassLoader
()
{
return
(
callersClassLoaderRef
!=
null
)
?
callersClassLoaderRef
.
get
()
:
null
;
}
// This constructor is used only to create the global Logger.
// It is needed to break a cyclic dependence between the LogManager
// and Logger static initializers causing deadlocks.
...
...
@@ -343,7 +355,9 @@ public class Logger {
return
manager
.
demandSystemLogger
(
name
,
resourceBundleName
);
}
}
return
manager
.
demandLogger
(
name
,
resourceBundleName
);
return
manager
.
demandLogger
(
name
,
resourceBundleName
,
caller
);
// ends up calling new Logger(name, resourceBundleName, caller)
// iff the logger doesn't exist already
}
/**
...
...
@@ -436,11 +450,19 @@ public class Logger {
// adding a new Logger object is handled by LogManager.addLogger().
@CallerSensitive
public
static
Logger
getLogger
(
String
name
,
String
resourceBundleName
)
{
Logger
result
=
demandLogger
(
name
,
resourceBundleName
,
Reflection
.
getCallerClass
());
Class
<?>
callerClass
=
Reflection
.
getCallerClass
();
Logger
result
=
demandLogger
(
name
,
resourceBundleName
,
callerClass
);
// MissingResourceException or IllegalArgumentException can be
// thrown by setupResourceInfo().
result
.
setupResourceInfo
(
resourceBundleName
);
// We have to set the callers ClassLoader here in case demandLogger
// above found a previously created Logger. This can happen, for
// example, if Logger.getLogger(name) is called and subsequently
// Logger.getLogger(name, resourceBundleName) is called. In this case
// we won't necessarily have the correct classloader saved away, so
// we need to set it here, too.
result
.
setupResourceInfo
(
resourceBundleName
,
callerClass
);
return
result
;
}
...
...
@@ -507,11 +529,13 @@ public class Logger {
// Synchronization is not required here. All synchronization for
// adding a new anonymous Logger object is handled by doSetParent().
@CallerSensitive
public
static
Logger
getAnonymousLogger
(
String
resourceBundleName
)
{
LogManager
manager
=
LogManager
.
getLogManager
();
// cleanup some Loggers that have been GC'ed
manager
.
drainLoggerRefQueueBounded
();
Logger
result
=
new
Logger
(
null
,
resourceBundleName
);
Logger
result
=
new
Logger
(
null
,
resourceBundleName
,
Reflection
.
getCallerClass
());
result
.
anonymous
=
true
;
Logger
root
=
manager
.
getLogger
(
""
);
result
.
doSetParent
(
root
);
...
...
@@ -527,7 +551,7 @@ public class Logger {
* @return localization bundle (may be null)
*/
public
ResourceBundle
getResourceBundle
()
{
return
findResourceBundle
(
getResourceBundleName
());
return
findResourceBundle
(
getResourceBundleName
()
,
true
);
}
/**
...
...
@@ -609,7 +633,7 @@ public class Logger {
String
ebname
=
getEffectiveResourceBundleName
();
if
(
ebname
!=
null
&&
!
ebname
.
equals
(
SYSTEM_LOGGER_RB_NAME
))
{
lr
.
setResourceBundleName
(
ebname
);
lr
.
setResourceBundle
(
findResourceBundle
(
ebname
));
lr
.
setResourceBundle
(
findResourceBundle
(
ebname
,
true
));
}
log
(
lr
);
}
...
...
@@ -936,7 +960,7 @@ public class Logger {
lr
.
setLoggerName
(
name
);
if
(
rbname
!=
null
)
{
lr
.
setResourceBundleName
(
rbname
);
lr
.
setResourceBundle
(
findResourceBundle
(
rbname
));
lr
.
setResourceBundle
(
findResourceBundle
(
rbname
,
false
));
}
log
(
lr
);
}
...
...
@@ -960,7 +984,6 @@ public class Logger {
* can be null
* @param msg The string message (or a key in the message catalog)
*/
public
void
logrb
(
Level
level
,
String
sourceClass
,
String
sourceMethod
,
String
bundleName
,
String
msg
)
{
if
(
level
.
intValue
()
<
levelValue
||
levelValue
==
offValue
)
{
...
...
@@ -1609,9 +1632,18 @@ public class Logger {
* there is no suitable previous cached value.
*
* @param name the ResourceBundle to locate
* @param userCallersClassLoader if true search using the caller's ClassLoader
* @return ResourceBundle specified by name or null if not found
*/
private
synchronized
ResourceBundle
findResourceBundle
(
String
name
)
{
private
synchronized
ResourceBundle
findResourceBundle
(
String
name
,
boolean
useCallersClassLoader
)
{
// For all lookups, we first check the thread context class loader
// if it is set. If not, we use the system classloader. If we
// still haven't found it we use the callersClassLoaderRef if it
// is set and useCallersClassLoader is true. We set
// callersClassLoaderRef initially upon creating the logger with a
// non-null resource bundle name.
// Return a null bundle for a null name.
if
(
name
==
null
)
{
return
null
;
...
...
@@ -1644,17 +1676,40 @@ public class Logger {
catalogLocale
=
currentLocale
;
return
catalog
;
}
catch
(
MissingResourceException
ex
)
{
// We can't find the ResourceBundle in the default
// ClassLoader. Drop through.
}
if
(
useCallersClassLoader
)
{
// Try with the caller's ClassLoader
ClassLoader
callersClassLoader
=
getCallersClassLoader
();
if
(
callersClassLoader
==
null
||
callersClassLoader
==
cl
)
{
return
null
;
}
try
{
catalog
=
ResourceBundle
.
getBundle
(
name
,
currentLocale
,
callersClassLoader
);
catalogName
=
name
;
catalogLocale
=
currentLocale
;
return
catalog
;
}
catch
(
MissingResourceException
ex
)
{
return
null
;
// no luck
}
}
else
{
return
null
;
}
}
// Private utility method to initialize our one entry
// resource bundle name cache
.
// resource bundle name cache
and the callers ClassLoader
// Note: for consistency reasons, we are careful to check
// that a suitable ResourceBundle exists before setting the
// resourceBundleName field.
// Synchronized to prevent races in setting the field.
private
synchronized
void
setupResourceInfo
(
String
name
)
{
// Synchronized to prevent races in setting the fields.
private
synchronized
void
setupResourceInfo
(
String
name
,
Class
<?>
callersClass
)
{
if
(
name
==
null
)
{
return
;
}
...
...
@@ -1672,9 +1727,14 @@ public class Logger {
resourceBundleName
+
" != "
+
name
);
}
if
(
findResourceBundle
(
name
)
==
null
)
{
setCallersClassLoaderRef
(
callersClass
);
if
(
findResourceBundle
(
name
,
true
)
==
null
)
{
// We've failed to find an expected ResourceBundle.
throw
new
MissingResourceException
(
"Can't find "
+
name
+
" bundle"
,
name
,
""
);
// unset the caller's ClassLoader since we were unable to find the
// the bundle using it
this
.
callersClassLoaderRef
=
null
;
throw
new
MissingResourceException
(
"Can't find "
+
name
+
" bundle"
,
name
,
""
);
}
resourceBundleName
=
name
;
}
...
...
src/share/classes/sun/security/ec/CurveDB.java
0 → 100644
浏览文件 @
16e18e93
/*
* Copyright (c) 2006, 2012, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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.
*/
package
sun.security.ec
;
import
java.math.BigInteger
;
import
java.security.spec.*
;
import
java.util.*
;
import
java.util.regex.Pattern
;
/**
* Repository for well-known Elliptic Curve parameters. It is used by both
* the SunPKCS11 and SunJSSE code.
*
* @since 1.6
* @author Andreas Sterbenz
*/
public
class
CurveDB
{
private
final
static
int
P
=
1
;
// prime curve
private
final
static
int
B
=
2
;
// binary curve
private
final
static
int
PD
=
5
;
// prime curve, mark as default
private
final
static
int
BD
=
6
;
// binary curve, mark as default
private
static
final
Map
<
String
,
NamedCurve
>
oidMap
=
new
LinkedHashMap
<
String
,
NamedCurve
>();
private
static
final
Map
<
String
,
NamedCurve
>
nameMap
=
new
HashMap
<
String
,
NamedCurve
>();
private
static
final
Map
<
Integer
,
NamedCurve
>
lengthMap
=
new
HashMap
<
Integer
,
NamedCurve
>();
private
static
Collection
<?
extends
NamedCurve
>
specCollection
;
static
final
String
SPLIT_PATTERN
=
",|\\[|\\]"
;
// Used by SunECEntries
static
Collection
<?
extends
NamedCurve
>
getSupportedCurves
()
{
return
specCollection
;
}
// Return a NamedCurve for the specified OID/name or null if unknown.
static
NamedCurve
lookup
(
String
name
)
{
NamedCurve
spec
=
oidMap
.
get
(
name
);
if
(
spec
!=
null
)
{
return
spec
;
}
return
nameMap
.
get
(
name
);
}
// Return EC parameters for the specified field size. If there are known
// NIST recommended parameters for the given length, they are returned.
// Otherwise, if there are multiple matches for the given size, an
// arbitrary one is returns.
// If no parameters are known, the method returns null.
// NOTE that this method returns both prime and binary curves.
static
NamedCurve
lookup
(
int
length
)
{
return
lengthMap
.
get
(
length
);
}
// Convert the given ECParameterSpec object to a NamedCurve object.
// If params does not represent a known named curve, return null.
static
NamedCurve
lookup
(
ECParameterSpec
params
)
{
if
((
params
instanceof
NamedCurve
)
||
(
params
==
null
))
{
return
(
NamedCurve
)
params
;
}
// This is a hack to allow SunJSSE to work with 3rd party crypto
// providers for ECC and not just SunPKCS11.
// This can go away once we decide how to expose curve names in the
// public API.
// Note that it assumes that the 3rd party provider encodes named
// curves using the short form, not explicitly. If it did that, then
// the SunJSSE TLS ECC extensions are wrong, which could lead to
// interoperability problems.
int
fieldSize
=
params
.
getCurve
().
getField
().
getFieldSize
();
for
(
NamedCurve
namedCurve
:
specCollection
)
{
// ECParameterSpec does not define equals, so check all the
// components ourselves.
// Quick field size check first
if
(
namedCurve
.
getCurve
().
getField
().
getFieldSize
()
!=
fieldSize
)
{
continue
;
}
if
(
namedCurve
.
getCurve
().
equals
(
params
.
getCurve
())
==
false
)
{
continue
;
}
if
(
namedCurve
.
getGenerator
().
equals
(
params
.
getGenerator
())
==
false
)
{
continue
;
}
if
(
namedCurve
.
getOrder
().
equals
(
params
.
getOrder
())
==
false
)
{
continue
;
}
if
(
namedCurve
.
getCofactor
()
!=
params
.
getCofactor
())
{
continue
;
}
// everything matches our named curve, return it
return
namedCurve
;
}
// no match found
return
null
;
}
private
static
BigInteger
bi
(
String
s
)
{
return
new
BigInteger
(
s
,
16
);
}
private
static
void
add
(
String
name
,
String
soid
,
int
type
,
String
sfield
,
String
a
,
String
b
,
String
x
,
String
y
,
String
n
,
int
h
,
Pattern
nameSplitPattern
)
{
BigInteger
p
=
bi
(
sfield
);
ECField
field
;
if
((
type
==
P
)
||
(
type
==
PD
))
{
field
=
new
ECFieldFp
(
p
);
}
else
if
((
type
==
B
)
||
(
type
==
BD
))
{
field
=
new
ECFieldF2m
(
p
.
bitLength
()
-
1
,
p
);
}
else
{
throw
new
RuntimeException
(
"Invalid type: "
+
type
);
}
EllipticCurve
curve
=
new
EllipticCurve
(
field
,
bi
(
a
),
bi
(
b
));
ECPoint
g
=
new
ECPoint
(
bi
(
x
),
bi
(
y
));
NamedCurve
params
=
new
NamedCurve
(
name
,
soid
,
curve
,
g
,
bi
(
n
),
h
);
if
(
oidMap
.
put
(
soid
,
params
)
!=
null
)
{
throw
new
RuntimeException
(
"Duplication oid: "
+
soid
);
}
String
[]
commonNames
=
nameSplitPattern
.
split
(
name
);
for
(
String
commonName
:
commonNames
)
{
if
(
nameMap
.
put
(
commonName
.
trim
(),
params
)
!=
null
)
{
throw
new
RuntimeException
(
"Duplication name: "
+
commonName
);
}
}
int
len
=
field
.
getFieldSize
();
if
((
type
==
PD
)
||
(
type
==
BD
)
||
(
lengthMap
.
get
(
len
)
==
null
))
{
// add entry if none present for this field size or if
// the curve is marked as a default curve.
lengthMap
.
put
(
len
,
params
);
}
}
static
{
Pattern
nameSplitPattern
=
Pattern
.
compile
(
SPLIT_PATTERN
);
/* SEC2 prime curves */
add
(
"secp112r1"
,
"1.3.132.0.6"
,
P
,
"DB7C2ABF62E35E668076BEAD208B"
,
"DB7C2ABF62E35E668076BEAD2088"
,
"659EF8BA043916EEDE8911702B22"
,
"09487239995A5EE76B55F9C2F098"
,
"A89CE5AF8724C0A23E0E0FF77500"
,
"DB7C2ABF62E35E7628DFAC6561C5"
,
1
,
nameSplitPattern
);
add
(
"secp112r2"
,
"1.3.132.0.7"
,
P
,
"DB7C2ABF62E35E668076BEAD208B"
,
"6127C24C05F38A0AAAF65C0EF02C"
,
"51DEF1815DB5ED74FCC34C85D709"
,
"4BA30AB5E892B4E1649DD0928643"
,
"adcd46f5882e3747def36e956e97"
,
"36DF0AAFD8B8D7597CA10520D04B"
,
4
,
nameSplitPattern
);
add
(
"secp128r1"
,
"1.3.132.0.28"
,
P
,
"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"
,
"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC"
,
"E87579C11079F43DD824993C2CEE5ED3"
,
"161FF7528B899B2D0C28607CA52C5B86"
,
"CF5AC8395BAFEB13C02DA292DDED7A83"
,
"FFFFFFFE0000000075A30D1B9038A115"
,
1
,
nameSplitPattern
);
add
(
"secp128r2"
,
"1.3.132.0.29"
,
P
,
"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"
,
"D6031998D1B3BBFEBF59CC9BBFF9AEE1"
,
"5EEEFCA380D02919DC2C6558BB6D8A5D"
,
"7B6AA5D85E572983E6FB32A7CDEBC140"
,
"27B6916A894D3AEE7106FE805FC34B44"
,
"3FFFFFFF7FFFFFFFBE0024720613B5A3"
,
4
,
nameSplitPattern
);
add
(
"secp160k1"
,
"1.3.132.0.9"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"
,
"0000000000000000000000000000000000000000"
,
"0000000000000000000000000000000000000007"
,
"3B4C382CE37AA192A4019E763036F4F5DD4D7EBB"
,
"938CF935318FDCED6BC28286531733C3F03C4FEE"
,
"0100000000000000000001B8FA16DFAB9ACA16B6B3"
,
1
,
nameSplitPattern
);
add
(
"secp160r1"
,
"1.3.132.0.8"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC"
,
"1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45"
,
"4A96B5688EF573284664698968C38BB913CBFC82"
,
"23A628553168947D59DCC912042351377AC5FB32"
,
"0100000000000000000001F4C8F927AED3CA752257"
,
1
,
nameSplitPattern
);
add
(
"secp160r2"
,
"1.3.132.0.30"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70"
,
"B4E134D3FB59EB8BAB57274904664D5AF50388BA"
,
"52DCB034293A117E1F4FF11B30F7199D3144CE6D"
,
"FEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E"
,
"0100000000000000000000351EE786A818F3A1A16B"
,
1
,
nameSplitPattern
);
add
(
"secp192k1"
,
"1.3.132.0.31"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37"
,
"000000000000000000000000000000000000000000000000"
,
"000000000000000000000000000000000000000000000003"
,
"DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D"
,
"9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D"
,
"FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D"
,
1
,
nameSplitPattern
);
add
(
"secp192r1 [NIST P-192, X9.62 prime192v1]"
,
"1.2.840.10045.3.1.1"
,
PD
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"
,
"64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1"
,
"188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012"
,
"07192B95FFC8DA78631011ED6B24CDD573F977A11E794811"
,
"FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831"
,
1
,
nameSplitPattern
);
add
(
"secp224k1"
,
"1.3.132.0.32"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D"
,
"00000000000000000000000000000000000000000000000000000000"
,
"00000000000000000000000000000000000000000000000000000005"
,
"A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C"
,
"7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5"
,
"010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7"
,
1
,
nameSplitPattern
);
add
(
"secp224r1 [NIST P-224]"
,
"1.3.132.0.33"
,
PD
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE"
,
"B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4"
,
"B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21"
,
"BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D"
,
1
,
nameSplitPattern
);
add
(
"secp256k1"
,
"1.3.132.0.10"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"
,
"0000000000000000000000000000000000000000000000000000000000000000"
,
"0000000000000000000000000000000000000000000000000000000000000007"
,
"79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798"
,
"483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"
,
1
,
nameSplitPattern
);
add
(
"secp256r1 [NIST P-256, X9.62 prime256v1]"
,
"1.2.840.10045.3.1.7"
,
PD
,
"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"
,
"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC"
,
"5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"
,
"6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296"
,
"4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5"
,
"FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"
,
1
,
nameSplitPattern
);
add
(
"secp384r1 [NIST P-384]"
,
"1.3.132.0.34"
,
PD
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC"
,
"B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF"
,
"AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7"
,
"3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973"
,
1
,
nameSplitPattern
);
add
(
"secp521r1 [NIST P-521]"
,
"1.3.132.0.35"
,
PD
,
"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
,
"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC"
,
"0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00"
,
"00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66"
,
"011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650"
,
"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409"
,
1
,
nameSplitPattern
);
/* ANSI X9.62 prime curves */
add
(
"X9.62 prime192v2"
,
"1.2.840.10045.3.1.2"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"
,
"CC22D6DFB95C6B25E49C0D6364A4E5980C393AA21668D953"
,
"EEA2BAE7E1497842F2DE7769CFE9C989C072AD696F48034A"
,
"6574D11D69B6EC7A672BB82A083DF2F2B0847DE970B2DE15"
,
"FFFFFFFFFFFFFFFFFFFFFFFE5FB1A724DC80418648D8DD31"
,
1
,
nameSplitPattern
);
add
(
"X9.62 prime192v3"
,
"1.2.840.10045.3.1.3"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"
,
"22123DC2395A05CAA7423DAECCC94760A7D462256BD56916"
,
"7D29778100C65A1DA1783716588DCE2B8B4AEE8E228F1896"
,
"38A90F22637337334B49DCB66A6DC8F9978ACA7648A943B0"
,
"FFFFFFFFFFFFFFFFFFFFFFFF7A62D031C83F4294F640EC13"
,
1
,
nameSplitPattern
);
add
(
"X9.62 prime239v1"
,
"1.2.840.10045.3.1.4"
,
P
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF"
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC"
,
"6B016C3BDCF18941D0D654921475CA71A9DB2FB27D1D37796185C2942C0A"
,
"0FFA963CDCA8816CCC33B8642BEDF905C3D358573D3F27FBBD3B3CB9AAAF"
,
"7DEBE8E4E90A5DAE6E4054CA530BA04654B36818CE226B39FCCB7B02F1AE"
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF9E5E9A9F5D9071FBD1522688909D0B"
,
1
,
nameSplitPattern
);
add
(
"X9.62 prime239v2"
,
"1.2.840.10045.3.1.5"
,
P
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF"
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC"
,
"617FAB6832576CBBFED50D99F0249C3FEE58B94BA0038C7AE84C8C832F2C"
,
"38AF09D98727705120C921BB5E9E26296A3CDCF2F35757A0EAFD87B830E7"
,
"5B0125E4DBEA0EC7206DA0FC01D9B081329FB555DE6EF460237DFF8BE4BA"
,
"7FFFFFFFFFFFFFFFFFFFFFFF800000CFA7E8594377D414C03821BC582063"
,
1
,
nameSplitPattern
);
add
(
"X9.62 prime239v3"
,
"1.2.840.10045.3.1.6"
,
P
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF"
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC"
,
"255705FA2A306654B1F4CB03D6A750A30C250102D4988717D9BA15AB6D3E"
,
"6768AE8E18BB92CFCF005C949AA2C6D94853D0E660BBF854B1C9505FE95A"
,
"1607E6898F390C06BC1D552BAD226F3B6FCFE48B6E818499AF18E3ED6CF3"
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF975DEB41B3A6057C3C432146526551"
,
1
,
nameSplitPattern
);
/* SEC2 binary curves */
add
(
"sect113r1"
,
"1.3.132.0.4"
,
B
,
"020000000000000000000000000201"
,
"003088250CA6E7C7FE649CE85820F7"
,
"00E8BEE4D3E2260744188BE0E9C723"
,
"009D73616F35F4AB1407D73562C10F"
,
"00A52830277958EE84D1315ED31886"
,
"0100000000000000D9CCEC8A39E56F"
,
2
,
nameSplitPattern
);
add
(
"sect113r2"
,
"1.3.132.0.5"
,
B
,
"020000000000000000000000000201"
,
"00689918DBEC7E5A0DD6DFC0AA55C7"
,
"0095E9A9EC9B297BD4BF36E059184F"
,
"01A57A6A7B26CA5EF52FCDB8164797"
,
"00B3ADC94ED1FE674C06E695BABA1D"
,
"010000000000000108789B2496AF93"
,
2
,
nameSplitPattern
);
add
(
"sect131r1"
,
"1.3.132.0.22"
,
B
,
"080000000000000000000000000000010D"
,
"07A11B09A76B562144418FF3FF8C2570B8"
,
"0217C05610884B63B9C6C7291678F9D341"
,
"0081BAF91FDF9833C40F9C181343638399"
,
"078C6E7EA38C001F73C8134B1B4EF9E150"
,
"0400000000000000023123953A9464B54D"
,
2
,
nameSplitPattern
);
add
(
"sect131r2"
,
"1.3.132.0.23"
,
B
,
"080000000000000000000000000000010D"
,
"03E5A88919D7CAFCBF415F07C2176573B2"
,
"04B8266A46C55657AC734CE38F018F2192"
,
"0356DCD8F2F95031AD652D23951BB366A8"
,
"0648F06D867940A5366D9E265DE9EB240F"
,
"0400000000000000016954A233049BA98F"
,
2
,
nameSplitPattern
);
add
(
"sect163k1 [NIST K-163]"
,
"1.3.132.0.1"
,
BD
,
"0800000000000000000000000000000000000000C9"
,
"000000000000000000000000000000000000000001"
,
"000000000000000000000000000000000000000001"
,
"02FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE8"
,
"0289070FB05D38FF58321F2E800536D538CCDAA3D9"
,
"04000000000000000000020108A2E0CC0D99F8A5EF"
,
2
,
nameSplitPattern
);
add
(
"sect163r1"
,
"1.3.132.0.2"
,
B
,
"0800000000000000000000000000000000000000C9"
,
"07B6882CAAEFA84F9554FF8428BD88E246D2782AE2"
,
"0713612DCDDCB40AAB946BDA29CA91F73AF958AFD9"
,
"0369979697AB43897789566789567F787A7876A654"
,
"00435EDB42EFAFB2989D51FEFCE3C80988F41FF883"
,
"03FFFFFFFFFFFFFFFFFFFF48AAB689C29CA710279B"
,
2
,
nameSplitPattern
);
add
(
"sect163r2 [NIST B-163]"
,
"1.3.132.0.15"
,
BD
,
"0800000000000000000000000000000000000000C9"
,
"000000000000000000000000000000000000000001"
,
"020A601907B8C953CA1481EB10512F78744A3205FD"
,
"03F0EBA16286A2D57EA0991168D4994637E8343E36"
,
"00D51FBC6C71A0094FA2CDD545B11C5C0C797324F1"
,
"040000000000000000000292FE77E70C12A4234C33"
,
2
,
nameSplitPattern
);
add
(
"sect193r1"
,
"1.3.132.0.24"
,
B
,
"02000000000000000000000000000000000000000000008001"
,
"0017858FEB7A98975169E171F77B4087DE098AC8A911DF7B01"
,
"00FDFB49BFE6C3A89FACADAA7A1E5BBC7CC1C2E5D831478814"
,
"01F481BC5F0FF84A74AD6CDF6FDEF4BF6179625372D8C0C5E1"
,
"0025E399F2903712CCF3EA9E3A1AD17FB0B3201B6AF7CE1B05"
,
"01000000000000000000000000C7F34A778F443ACC920EBA49"
,
2
,
nameSplitPattern
);
add
(
"sect193r2"
,
"1.3.132.0.25"
,
B
,
"02000000000000000000000000000000000000000000008001"
,
"0163F35A5137C2CE3EA6ED8667190B0BC43ECD69977702709B"
,
"00C9BB9E8927D4D64C377E2AB2856A5B16E3EFB7F61D4316AE"
,
"00D9B67D192E0367C803F39E1A7E82CA14A651350AAE617E8F"
,
"01CE94335607C304AC29E7DEFBD9CA01F596F927224CDECF6C"
,
"010000000000000000000000015AAB561B005413CCD4EE99D5"
,
2
,
nameSplitPattern
);
add
(
"sect233k1 [NIST K-233]"
,
"1.3.132.0.26"
,
BD
,
"020000000000000000000000000000000000000004000000000000000001"
,
"000000000000000000000000000000000000000000000000000000000000"
,
"000000000000000000000000000000000000000000000000000000000001"
,
"017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD6126"
,
"01DB537DECE819B7F70F555A67C427A8CD9BF18AEB9B56E0C11056FAE6A3"
,
"008000000000000000000000000000069D5BB915BCD46EFB1AD5F173ABDF"
,
4
,
nameSplitPattern
);
add
(
"sect233r1 [NIST B-233]"
,
"1.3.132.0.27"
,
B
,
"020000000000000000000000000000000000000004000000000000000001"
,
"000000000000000000000000000000000000000000000000000000000001"
,
"0066647EDE6C332C7F8C0923BB58213B333B20E9CE4281FE115F7D8F90AD"
,
"00FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B"
,
"01006A08A41903350678E58528BEBF8A0BEFF867A7CA36716F7E01F81052"
,
"01000000000000000000000000000013E974E72F8A6922031D2603CFE0D7"
,
2
,
nameSplitPattern
);
add
(
"sect239k1"
,
"1.3.132.0.3"
,
B
,
"800000000000000000004000000000000000000000000000000000000001"
,
"000000000000000000000000000000000000000000000000000000000000"
,
"000000000000000000000000000000000000000000000000000000000001"
,
"29A0B6A887A983E9730988A68727A8B2D126C44CC2CC7B2A6555193035DC"
,
"76310804F12E549BDB011C103089E73510ACB275FC312A5DC6B76553F0CA"
,
"2000000000000000000000000000005A79FEC67CB6E91F1C1DA800E478A5"
,
4
,
nameSplitPattern
);
add
(
"sect283k1 [NIST K-283]"
,
"1.3.132.0.16"
,
BD
,
"0800000000000000000000000000000000000000000000000000000000000000000010A1"
,
"000000000000000000000000000000000000000000000000000000000000000000000000"
,
"000000000000000000000000000000000000000000000000000000000000000000000001"
,
"0503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836"
,
"01CCDA380F1C9E318D90F95D07E5426FE87E45C0E8184698E45962364E34116177DD2259"
,
"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9AE2ED07577265DFF7F94451E061E163C61"
,
4
,
nameSplitPattern
);
add
(
"sect283r1 [NIST B-283]"
,
"1.3.132.0.17"
,
B
,
"0800000000000000000000000000000000000000000000000000000000000000000010A1"
,
"000000000000000000000000000000000000000000000000000000000000000000000001"
,
"027B680AC8B8596DA5A4AF8A19A0303FCA97FD7645309FA2A581485AF6263E313B79A2F5"
,
"05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053"
,
"03676854FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4"
,
"03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307"
,
2
,
nameSplitPattern
);
add
(
"sect409k1 [NIST K-409]"
,
"1.3.132.0.36"
,
BD
,
"02000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000001"
,
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
,
"0060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746"
,
"01E369050B7C4E42ACBA1DACBF04299C3460782F918EA427E6325165E9EA10E3DA5F6C42E9C55215AA9CA27A5863EC48D8E0286B"
,
"007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F83B2D4EA20400EC4557D5ED3E3E7CA5B4B5C83B8E01E5FCF"
,
4
,
nameSplitPattern
);
add
(
"sect409r1 [NIST B-409]"
,
"1.3.132.0.37"
,
B
,
"02000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000001"
,
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
,
"0021A5C2C8EE9FEB5C4B9A753B7B476B7FD6422EF1F3DD674761FA99D6AC27C8A9A197B272822F6CD57A55AA4F50AE317B13545F"
,
"015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7"
,
"0061B1CFAB6BE5F32BBFA78324ED106A7636B9C5A7BD198D0158AA4F5488D08F38514F1FDF4B4F40D2181B3681C364BA0273C706"
,
"010000000000000000000000000000000000000000000000000001E2AAD6A612F33307BE5FA47C3C9E052F838164CD37D9A21173"
,
2
,
nameSplitPattern
);
add
(
"sect571k1 [NIST K-571]"
,
"1.3.132.0.38"
,
BD
,
"080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425"
,
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
,
"026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA44370958493B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972"
,
"0349DC807F4FBF374F4AEADE3BCA95314DD58CEC9F307A54FFC61EFC006D8A2C9D4979C0AC44AEA74FBEBBB9F772AEDCB620B01A7BA7AF1B320430C8591984F601CD4C143EF1C7A3"
,
"020000000000000000000000000000000000000000000000000000000000000000000000131850E1F19A63E4B391A8DB917F4138B630D84BE5D639381E91DEB45CFE778F637C1001"
,
4
,
nameSplitPattern
);
add
(
"sect571r1 [NIST B-571]"
,
"1.3.132.0.39"
,
B
,
"080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425"
,
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
,
"02F40E7E2221F295DE297117B7F3D62F5C6A97FFCB8CEFF1CD6BA8CE4A9A18AD84FFABBD8EFA59332BE7AD6756A66E294AFD185A78FF12AA520E4DE739BACA0C7FFEFF7F2955727A"
,
"0303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19"
,
"037BF27342DA639B6DCCFFFEB73D69D78C6C27A6009CBBCA1980F8533921E8A684423E43BAB08A576291AF8F461BB2A8B3531D2F0485C19B16E2F1516E23DD3C1A4827AF1B8AC15B"
,
"03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE661CE18FF55987308059B186823851EC7DD9CA1161DE93D5174D66E8382E9BB2FE84E47"
,
2
,
nameSplitPattern
);
/* ANSI X9.62 binary curves */
add
(
"X9.62 c2tnb191v1"
,
"1.2.840.10045.3.0.5"
,
B
,
"800000000000000000000000000000000000000000000201"
,
"2866537B676752636A68F56554E12640276B649EF7526267"
,
"2E45EF571F00786F67B0081B9495A3D95462F5DE0AA185EC"
,
"36B3DAF8A23206F9C4F299D7B21A9C369137F2C84AE1AA0D"
,
"765BE73433B3F95E332932E70EA245CA2418EA0EF98018FB"
,
"40000000000000000000000004A20E90C39067C893BBB9A5"
,
2
,
nameSplitPattern
);
add
(
"X9.62 c2tnb191v2"
,
"1.2.840.10045.3.0.6"
,
B
,
"800000000000000000000000000000000000000000000201"
,
"401028774D7777C7B7666D1366EA432071274F89FF01E718"
,
"0620048D28BCBD03B6249C99182B7C8CD19700C362C46A01"
,
"3809B2B7CC1B28CC5A87926AAD83FD28789E81E2C9E3BF10"
,
"17434386626D14F3DBF01760D9213A3E1CF37AEC437D668A"
,
"20000000000000000000000050508CB89F652824E06B8173"
,
4
,
nameSplitPattern
);
add
(
"X9.62 c2tnb191v3"
,
"1.2.840.10045.3.0.7"
,
B
,
"800000000000000000000000000000000000000000000201"
,
"6C01074756099122221056911C77D77E77A777E7E7E77FCB"
,
"71FE1AF926CF847989EFEF8DB459F66394D90F32AD3F15E8"
,
"375D4CE24FDE434489DE8746E71786015009E66E38A926DD"
,
"545A39176196575D985999366E6AD34CE0A77CD7127B06BE"
,
"155555555555555555555555610C0B196812BFB6288A3EA3"
,
6
,
nameSplitPattern
);
add
(
"X9.62 c2tnb239v1"
,
"1.2.840.10045.3.0.11"
,
B
,
"800000000000000000000000000000000000000000000000001000000001"
,
"32010857077C5431123A46B808906756F543423E8D27877578125778AC76"
,
"790408F2EEDAF392B012EDEFB3392F30F4327C0CA3F31FC383C422AA8C16"
,
"57927098FA932E7C0A96D3FD5B706EF7E5F5C156E16B7E7C86038552E91D"
,
"61D8EE5077C33FECF6F1A16B268DE469C3C7744EA9A971649FC7A9616305"
,
"2000000000000000000000000000000F4D42FFE1492A4993F1CAD666E447"
,
4
,
nameSplitPattern
);
add
(
"X9.62 c2tnb239v2"
,
"1.2.840.10045.3.0.12"
,
B
,
"800000000000000000000000000000000000000000000000001000000001"
,
"4230017757A767FAE42398569B746325D45313AF0766266479B75654E65F"
,
"5037EA654196CFF0CD82B2C14A2FCF2E3FF8775285B545722F03EACDB74B"
,
"28F9D04E900069C8DC47A08534FE76D2B900B7D7EF31F5709F200C4CA205"
,
"5667334C45AFF3B5A03BAD9DD75E2C71A99362567D5453F7FA6E227EC833"
,
"1555555555555555555555555555553C6F2885259C31E3FCDF154624522D"
,
6
,
nameSplitPattern
);
add
(
"X9.62 c2tnb239v3"
,
"1.2.840.10045.3.0.13"
,
B
,
"800000000000000000000000000000000000000000000000001000000001"
,
"01238774666A67766D6676F778E676B66999176666E687666D8766C66A9F"
,
"6A941977BA9F6A435199ACFC51067ED587F519C5ECB541B8E44111DE1D40"
,
"70F6E9D04D289C4E89913CE3530BFDE903977D42B146D539BF1BDE4E9C92"
,
"2E5A0EAF6E5E1305B9004DCE5C0ED7FE59A35608F33837C816D80B79F461"
,
"0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCAC4912D2D9DF903EF9888B8A0E4CFF"
,
0xA
,
nameSplitPattern
);
add
(
"X9.62 c2tnb359v1"
,
"1.2.840.10045.3.0.18"
,
B
,
"800000000000000000000000000000000000000000000000000000000000000000000000100000000000000001"
,
"5667676A654B20754F356EA92017D946567C46675556F19556A04616B567D223A5E05656FB549016A96656A557"
,
"2472E2D0197C49363F1FE7F5B6DB075D52B6947D135D8CA445805D39BC345626089687742B6329E70680231988"
,
"3C258EF3047767E7EDE0F1FDAA79DAEE3841366A132E163ACED4ED2401DF9C6BDCDE98E8E707C07A2239B1B097"
,
"53D7E08529547048121E9C95F3791DD804963948F34FAE7BF44EA82365DC7868FE57E4AE2DE211305A407104BD"
,
"01AF286BCA1AF286BCA1AF286BCA1AF286BCA1AF286BC9FB8F6B85C556892C20A7EB964FE7719E74F490758D3B"
,
0x4C
,
nameSplitPattern
);
add
(
"X9.62 c2tnb431r1"
,
"1.2.840.10045.3.0.20"
,
B
,
"800000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000001"
,
"1A827EF00DD6FC0E234CAF046C6A5D8A85395B236CC4AD2CF32A0CADBDC9DDF620B0EB9906D0957F6C6FEACD615468DF104DE296CD8F"
,
"10D9B4A3D9047D8B154359ABFB1B7F5485B04CEB868237DDC9DEDA982A679A5A919B626D4E50A8DD731B107A9962381FB5D807BF2618"
,
"120FC05D3C67A99DE161D2F4092622FECA701BE4F50F4758714E8A87BBF2A658EF8C21E7C5EFE965361F6C2999C0C247B0DBD70CE6B7"
,
"20D0AF8903A96F8D5FA2C255745D3C451B302C9346D9B7E485E7BCE41F6B591F3E8F6ADDCBB0BC4C2F947A7DE1A89B625D6A598B3760"
,
"0340340340340340340340340340340340340340340340340340340323C313FAB50589703B5EC68D3587FEC60D161CC149C1AD4A91"
,
0x2760
,
nameSplitPattern
);
/* ANSI X9.62 binary curves from the 1998 standard but forbidden
* in the 2005 version of the standard.
* We don't register them but leave them here for the time being in
* case we need to support them after all.
*/
/*
add("X9.62 c2pnb163v1", "1.2.840.10045.3.0.1", B,
"080000000000000000000000000000000000000107",
"072546B5435234A422E0789675F432C89435DE5242",
"00C9517D06D5240D3CFF38C74B20B6CD4D6F9DD4D9",
"07AF69989546103D79329FCC3D74880F33BBE803CB",
"01EC23211B5966ADEA1D3F87F7EA5848AEF0B7CA9F",
"0400000000000000000001E60FC8821CC74DAEAFC1",
2, nameSplitPattern);
add("X9.62 c2pnb163v2", "1.2.840.10045.3.0.2", B,
"080000000000000000000000000000000000000107",
"0108B39E77C4B108BED981ED0E890E117C511CF072",
"0667ACEB38AF4E488C407433FFAE4F1C811638DF20",
"0024266E4EB5106D0A964D92C4860E2671DB9B6CC5",
"079F684DDF6684C5CD258B3890021B2386DFD19FC5",
"03FFFFFFFFFFFFFFFFFFFDF64DE1151ADBB78F10A7",
2, nameSplitPattern);
add("X9.62 c2pnb163v3", "1.2.840.10045.3.0.3", B,
"080000000000000000000000000000000000000107",
"07A526C63D3E25A256A007699F5447E32AE456B50E",
"03F7061798EB99E238FD6F1BF95B48FEEB4854252B",
"02F9F87B7C574D0BDECF8A22E6524775F98CDEBDCB",
"05B935590C155E17EA48EB3FF3718B893DF59A05D0",
"03FFFFFFFFFFFFFFFFFFFE1AEE140F110AFF961309",
2, nameSplitPattern);
add("X9.62 c2pnb176w1", "1.2.840.10045.3.0.4", B,
"0100000000000000000000000000000000080000000007",
"E4E6DB2995065C407D9D39B8D0967B96704BA8E9C90B",
"5DDA470ABE6414DE8EC133AE28E9BBD7FCEC0AE0FFF2",
"8D16C2866798B600F9F08BB4A8E860F3298CE04A5798",
"6FA4539C2DADDDD6BAB5167D61B436E1D92BB16A562C",
"00010092537397ECA4F6145799D62B0A19CE06FE26AD",
0xFF6E, nameSplitPattern);
add("X9.62 c2pnb208w1", "1.2.840.10045.3.0.10", B,
"010000000000000000000000000000000800000000000000000007",
"0000000000000000000000000000000000000000000000000000",
"C8619ED45A62E6212E1160349E2BFA844439FAFC2A3FD1638F9E",
"89FDFBE4ABE193DF9559ECF07AC0CE78554E2784EB8C1ED1A57A",
"0F55B51A06E78E9AC38A035FF520D8B01781BEB1A6BB08617DE3",
"000101BAF95C9723C57B6C21DA2EFF2D5ED588BDD5717E212F9D",
0xFE48, nameSplitPattern);
add("X9.62 c2pnb272w1", "1.2.840.10045.3.0.16", B,
"010000000000000000000000000000000000000000000000000000010000000000000B",
"91A091F03B5FBA4AB2CCF49C4EDD220FB028712D42BE752B2C40094DBACDB586FB20",
"7167EFC92BB2E3CE7C8AAAFF34E12A9C557003D7C73A6FAF003F99F6CC8482E540F7",
"6108BABB2CEEBCF787058A056CBE0CFE622D7723A289E08A07AE13EF0D10D171DD8D",
"10C7695716851EEF6BA7F6872E6142FBD241B830FF5EFCACECCAB05E02005DDE9D23",
"000100FAF51354E0E39E4892DF6E319C72C8161603FA45AA7B998A167B8F1E629521",
0xFF06, nameSplitPattern);
add("X9.62 c2pnb304w1", "1.2.840.10045.3.0.17", B,
"010000000000000000000000000000000000000000000000000000000000000000000000000807",
"FD0D693149A118F651E6DCE6802085377E5F882D1B510B44160074C1288078365A0396C8E681",
"BDDB97E555A50A908E43B01C798EA5DAA6788F1EA2794EFCF57166B8C14039601E55827340BE",
"197B07845E9BE2D96ADB0F5F3C7F2CFFBD7A3EB8B6FEC35C7FD67F26DDF6285A644F740A2614",
"E19FBEB76E0DA171517ECF401B50289BF014103288527A9B416A105E80260B549FDC1B92C03B",
"000101D556572AABAC800101D556572AABAC8001022D5C91DD173F8FB561DA6899164443051D",
0xFE2E, nameSplitPattern);
add("X9.62 c2pnb368w1", "1.2.840.10045.3.0.19", B,
"0100000000000000000000000000000000000000000000000000000000000000000000002000000000000000000007",
"E0D2EE25095206F5E2A4F9ED229F1F256E79A0E2B455970D8D0D865BD94778C576D62F0AB7519CCD2A1A906AE30D",
"FC1217D4320A90452C760A58EDCD30C8DD069B3C34453837A34ED50CB54917E1C2112D84D164F444F8F74786046A",
"1085E2755381DCCCE3C1557AFA10C2F0C0C2825646C5B34A394CBCFA8BC16B22E7E789E927BE216F02E1FB136A5F",
"7B3EB1BDDCBA62D5D8B2059B525797FC73822C59059C623A45FF3843CEE8F87CD1855ADAA81E2A0750B80FDA2310",
"00010090512DA9AF72B08349D98A5DD4C7B0532ECA51CE03E2D10F3B7AC579BD87E909AE40A6F131E9CFCE5BD967",
0xFF70, nameSplitPattern);
*/
specCollection
=
Collections
.
unmodifiableCollection
(
oidMap
.
values
());
}
}
src/share/classes/sun/security/ec/ECDHKeyAgreement.java
浏览文件 @
16e18e93
...
...
@@ -32,6 +32,8 @@ import java.security.spec.*;
import
javax.crypto.*
;
import
javax.crypto.spec.*
;
import
sun.security.util.ECUtil
;
/**
* KeyAgreement implementation for ECDH.
*
...
...
@@ -104,7 +106,7 @@ public final class ECDHKeyAgreement extends KeyAgreementSpi {
publicValue
=
((
ECPublicKeyImpl
)
ecKey
).
getEncodedPublicValue
();
}
else
{
// instanceof ECPublicKey
publicValue
=
EC
Parameters
.
encodePoint
(
ecKey
.
getW
(),
params
.
getCurve
());
EC
Util
.
encodePoint
(
ecKey
.
getW
(),
params
.
getCurve
());
}
int
keyLenBits
=
params
.
getCurve
().
getField
().
getFieldSize
();
secretLen
=
(
keyLenBits
+
7
)
>>
3
;
...
...
@@ -120,8 +122,8 @@ public final class ECDHKeyAgreement extends KeyAgreementSpi {
}
byte
[]
s
=
privateKey
.
getS
().
toByteArray
();
byte
[]
encodedParams
=
EC
Parameters
.
encodeParameters
(
privateKey
.
getParams
());
// DER OID
byte
[]
encodedParams
=
// DER OID
EC
Util
.
encodeECParameterSpec
(
null
,
privateKey
.
getParams
());
try
{
...
...
src/share/classes/sun/security/ec/ECDSASignature.java
浏览文件 @
16e18e93
...
...
@@ -275,7 +275,8 @@ abstract class ECDSASignature extends SignatureSpi {
protected
byte
[]
engineSign
()
throws
SignatureException
{
byte
[]
s
=
privateKey
.
getS
().
toByteArray
();
ECParameterSpec
params
=
privateKey
.
getParams
();
byte
[]
encodedParams
=
ECParameters
.
encodeParameters
(
params
);
// DER OID
// DER OID
byte
[]
encodedParams
=
ECUtil
.
encodeECParameterSpec
(
null
,
params
);
int
keySize
=
params
.
getCurve
().
getField
().
getFieldSize
();
// seed is twice the key size (in bytes) plus 1
...
...
@@ -301,12 +302,13 @@ abstract class ECDSASignature extends SignatureSpi {
byte
[]
w
;
ECParameterSpec
params
=
publicKey
.
getParams
();
byte
[]
encodedParams
=
ECParameters
.
encodeParameters
(
params
);
// DER OID
// DER OID
byte
[]
encodedParams
=
ECUtil
.
encodeECParameterSpec
(
null
,
params
);
if
(
publicKey
instanceof
ECPublicKeyImpl
)
{
w
=
((
ECPublicKeyImpl
)
publicKey
).
getEncodedPublicValue
();
}
else
{
// instanceof ECPublicKey
w
=
EC
Parameters
.
encodePoint
(
publicKey
.
getW
(),
params
.
getCurve
());
w
=
EC
Util
.
encodePoint
(
publicKey
.
getW
(),
params
.
getCurve
());
}
try
{
...
...
src/share/classes/sun/security/ec/ECKeyPairGenerator.java
浏览文件 @
16e18e93
/*
* Copyright (c) 2009, 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009, 201
2
, 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
...
...
@@ -37,6 +37,7 @@ import sun.security.ec.ECParameters;
import
sun.security.ec.ECPrivateKeyImpl
;
import
sun.security.ec.ECPublicKeyImpl
;
import
sun.security.jca.JCAUtil
;
import
sun.security.util.ECUtil
;
/**
* EC keypair generator.
...
...
@@ -72,7 +73,7 @@ public final class ECKeyPairGenerator extends KeyPairGeneratorSpi {
public
void
initialize
(
int
keySize
,
SecureRandom
random
)
{
checkKeySize
(
keySize
);
this
.
params
=
NamedCurve
.
getECParameterSpec
(
keySize
);
this
.
params
=
ECUtil
.
getECParameterSpec
(
null
,
keySize
);
if
(
params
==
null
)
{
throw
new
InvalidParameterException
(
"No EC parameters available for key size "
+
keySize
+
" bits"
);
...
...
@@ -86,14 +87,15 @@ public final class ECKeyPairGenerator extends KeyPairGeneratorSpi {
throws
InvalidAlgorithmParameterException
{
if
(
params
instanceof
ECParameterSpec
)
{
this
.
params
=
ECParameters
.
getNamedCurve
((
ECParameterSpec
)
params
);
this
.
params
=
ECUtil
.
getECParameterSpec
(
null
,
(
ECParameterSpec
)
params
);
if
(
this
.
params
==
null
)
{
throw
new
InvalidAlgorithmParameterException
(
"Unsupported curve: "
+
params
);
}
}
else
if
(
params
instanceof
ECGenParameterSpec
)
{
String
name
=
((
ECGenParameterSpec
)
params
).
getName
();
this
.
params
=
NamedCurve
.
getECParameterSpec
(
name
);
this
.
params
=
ECUtil
.
getECParameterSpec
(
null
,
name
);
if
(
this
.
params
==
null
)
{
throw
new
InvalidAlgorithmParameterException
(
"Unknown curve name: "
+
name
);
...
...
@@ -112,7 +114,7 @@ public final class ECKeyPairGenerator extends KeyPairGeneratorSpi {
public
KeyPair
generateKeyPair
()
{
byte
[]
encodedParams
=
EC
Parameters
.
encodeParameters
(
(
ECParameterSpec
)
params
);
EC
Util
.
encodeECParameterSpec
(
null
,
(
ECParameterSpec
)
params
);
// seed is twice the key size (in bytes) plus 1
byte
[]
seed
=
new
byte
[(((
keySize
+
7
)
>>
3
)
+
1
)
*
2
];
...
...
@@ -135,7 +137,7 @@ public final class ECKeyPairGenerator extends KeyPairGeneratorSpi {
new
ECPrivateKeyImpl
(
s
,
(
ECParameterSpec
)
params
);
// handles[1] points to the native public key
ECPoint
w
=
EC
Parameters
.
decodePoint
(
getEncodedBytes
(
handles
[
1
]),
ECPoint
w
=
EC
Util
.
decodePoint
(
getEncodedBytes
(
handles
[
1
]),
((
ECParameterSpec
)
params
).
getCurve
());
PublicKey
publicKey
=
new
ECPublicKeyImpl
(
w
,
(
ECParameterSpec
)
params
);
...
...
src/share/classes/sun/security/ec/ECParameters.java
浏览文件 @
16e18e93
...
...
@@ -26,7 +26,6 @@
package
sun.security.ec
;
import
java.io.IOException
;
import
java.math.BigInteger
;
import
java.security.*
;
import
java.security.spec.*
;
...
...
@@ -77,128 +76,75 @@ import sun.security.util.*;
*/
public
final
class
ECParameters
extends
AlgorithmParametersSpi
{
// used by ECPublicKeyImpl and ECPrivateKeyImpl
static
AlgorithmParameters
getAlgorithmParameters
(
ECParameterSpec
spec
)
throws
InvalidKeyException
{
try
{
AlgorithmParameters
params
=
AlgorithmParameters
.
getInstance
(
"EC"
,
"SunEC"
);
params
.
init
(
spec
);
return
params
;
}
catch
(
GeneralSecurityException
e
)
{
throw
new
InvalidKeyException
(
"EC parameters error"
,
e
);
}
}
/*
* The parameters these AlgorithmParameters object represents.
* Currently, it is always an instance of NamedCurve.
*/
private
NamedCurve
namedCurve
;
// A public constructor is required by AlgorithmParameters class.
public
ECParameters
()
{
// empty
}
// Used by SunPKCS11 and SunJSSE.
public
static
ECPoint
decodePoint
(
byte
[]
data
,
EllipticCurve
curve
)
throws
IOException
{
if
((
data
.
length
==
0
)
||
(
data
[
0
]
!=
4
))
{
throw
new
IOException
(
"Only uncompressed point format supported"
);
}
// Per ANSI X9.62, an encoded point is a 1 byte type followed by
// ceiling(log base 2 field-size / 8) bytes of x and the same of y.
int
n
=
(
data
.
length
-
1
)
/
2
;
if
(
n
!=
((
curve
.
getField
().
getFieldSize
()
+
7
)
>>
3
))
{
throw
new
IOException
(
"Point does not match field size"
);
}
byte
[]
xb
=
new
byte
[
n
];
byte
[]
yb
=
new
byte
[
n
];
System
.
arraycopy
(
data
,
1
,
xb
,
0
,
n
);
System
.
arraycopy
(
data
,
n
+
1
,
yb
,
0
,
n
);
return
new
ECPoint
(
new
BigInteger
(
1
,
xb
),
new
BigInteger
(
1
,
yb
));
}
// AlgorithmParameterSpi methods
// Used by SunPKCS11 and SunJSSE.
public
static
byte
[]
encodePoint
(
ECPoint
point
,
EllipticCurve
curve
)
{
// get field size in bytes (rounding up)
int
n
=
(
curve
.
getField
().
getFieldSize
()
+
7
)
>>
3
;
byte
[]
xb
=
trimZeroes
(
point
.
getAffineX
().
toByteArray
());
byte
[]
yb
=
trimZeroes
(
point
.
getAffineY
().
toByteArray
());
if
((
xb
.
length
>
n
)
||
(
yb
.
length
>
n
))
{
throw
new
RuntimeException
(
"Point coordinates do not match field size"
);
}
byte
[]
b
=
new
byte
[
1
+
(
n
<<
1
)];
b
[
0
]
=
4
;
// uncompressed
System
.
arraycopy
(
xb
,
0
,
b
,
n
-
xb
.
length
+
1
,
xb
.
length
);
System
.
arraycopy
(
yb
,
0
,
b
,
b
.
length
-
yb
.
length
,
yb
.
length
);
return
b
;
}
protected
void
engineInit
(
AlgorithmParameterSpec
paramSpec
)
throws
InvalidParameterSpecException
{
// Copied from the SunPKCS11 code - should be moved to a common location.
// trim leading (most significant) zeroes from the result
static
byte
[]
trimZeroes
(
byte
[]
b
)
{
int
i
=
0
;
while
((
i
<
b
.
length
-
1
)
&&
(
b
[
i
]
==
0
))
{
i
++;
}
if
(
i
==
0
)
{
return
b
;
}
byte
[]
t
=
new
byte
[
b
.
length
-
i
];
System
.
arraycopy
(
b
,
i
,
t
,
0
,
t
.
length
);
return
t
;
if
(
paramSpec
==
null
)
{
throw
new
InvalidParameterSpecException
(
"paramSpec must not be null"
);
}
// Convert the given ECParameterSpec object to a NamedCurve object.
// If params does not represent a known named curve, return null.
// Used by SunPKCS11.
public
static
NamedCurve
getNamedCurve
(
ECParameterSpec
params
)
{
if
((
params
instanceof
NamedCurve
)
||
(
params
==
null
))
{
return
(
NamedCurve
)
params
;
}
// This is a hack to allow SunJSSE to work with 3rd party crypto
// providers for ECC and not just SunPKCS11.
// This can go away once we decide how to expose curve names in the
// public API.
// Note that it assumes that the 3rd party provider encodes named
// curves using the short form, not explicitly. If it did that, then
// the SunJSSE TLS ECC extensions are wrong, which could lead to
// interoperability problems.
int
fieldSize
=
params
.
getCurve
().
getField
().
getFieldSize
();
for
(
ECParameterSpec
namedCurve
:
NamedCurve
.
knownECParameterSpecs
())
{
// ECParameterSpec does not define equals, so check all the
// components ourselves.
// Quick field size check first
if
(
namedCurve
.
getCurve
().
getField
().
getFieldSize
()
!=
fieldSize
)
{
continue
;
}
if
(
namedCurve
.
getCurve
().
equals
(
params
.
getCurve
())
==
false
)
{
continue
;
}
if
(
namedCurve
.
getGenerator
().
equals
(
params
.
getGenerator
())
==
false
)
{
continue
;
}
if
(
namedCurve
.
getOrder
().
equals
(
params
.
getOrder
())
==
false
)
{
continue
;
}
if
(
namedCurve
.
getCofactor
()
!=
params
.
getCofactor
())
{
continue
;
}
// everything matches our named curve, return it
return
(
NamedCurve
)
namedCurve
;
}
// no match found
return
null
;
if
(
paramSpec
instanceof
NamedCurve
)
{
namedCurve
=
(
NamedCurve
)
paramSpec
;
return
;
}
// Used by SunJSSE.
public
static
String
getCurveName
(
ECParameterSpec
params
)
{
NamedCurve
curve
=
getNamedCurve
(
params
);
return
(
curve
==
null
)
?
null
:
curve
.
getObjectIdentifier
().
toString
();
if
(
paramSpec
instanceof
ECParameterSpec
)
{
namedCurve
=
CurveDB
.
lookup
((
ECParameterSpec
)
paramSpec
);
}
else
if
(
paramSpec
instanceof
ECGenParameterSpec
)
{
String
name
=
((
ECGenParameterSpec
)
paramSpec
).
getName
();
namedCurve
=
CurveDB
.
lookup
(
name
);
}
else
if
(
paramSpec
instanceof
ECKeySizeParameterSpec
)
{
int
keySize
=
((
ECKeySizeParameterSpec
)
paramSpec
).
getKeySize
();
namedCurve
=
CurveDB
.
lookup
(
keySize
);
}
else
{
throw
new
InvalidParameterSpecException
(
"Only ECParameterSpec and ECGenParameterSpec supported"
);
}
// Used by SunPKCS11.
public
static
byte
[]
encodeParameters
(
ECParameterSpec
params
)
{
NamedCurve
curve
=
getNamedCurve
(
params
);
if
(
curve
==
null
)
{
throw
new
RuntimeException
(
"Not a known named curve: "
+
params
);
if
(
namedCurve
==
null
)
{
throw
new
InvalidParameterSpecException
(
"Not a supported curve: "
+
paramSpec
);
}
return
curve
.
getEncoded
();
}
// Used by SunPKCS11.
public
static
ECParameterSpec
decodeParameters
(
byte
[]
params
)
throws
IOException
{
protected
void
engineInit
(
byte
[]
params
)
throws
IOException
{
DerValue
encodedParams
=
new
DerValue
(
params
);
if
(
encodedParams
.
tag
==
DerValue
.
tag_ObjectId
)
{
ObjectIdentifier
oid
=
encodedParams
.
getOID
();
ECParameterSpec
spec
=
NamedCurve
.
getECParameterSpec
(
oid
);
NamedCurve
spec
=
CurveDB
.
lookup
(
oid
.
toString
()
);
if
(
spec
==
null
)
{
throw
new
IOException
(
"Unknown named curve: "
+
oid
);
}
return
spec
;
namedCurve
=
spec
;
return
;
}
throw
new
IOException
(
"Only named ECParameters supported"
);
...
...
@@ -208,7 +154,8 @@ public final class ECParameters extends AlgorithmParametersSpi {
/*
if (encodedParams.tag != DerValue.tag_Sequence) {
throw new IOException("Unsupported EC parameters, tag: " + encodedParams.tag);
throw new IOException("Unsupported EC parameters, tag: " +
encodedParams.tag);
}
encodedParams.data.reset();
...
...
@@ -217,7 +164,8 @@ public final class ECParameters extends AlgorithmParametersSpi {
int version = in.getInteger();
if (version != 1) {
throw new IOException("Unsupported EC parameters version: " + version);
throw new IOException("Unsupported EC parameters version: " +
version);
}
ECField field = parseField(in);
EllipticCurve curve = parseCurve(in, field);
...
...
@@ -242,110 +190,49 @@ public final class ECParameters extends AlgorithmParametersSpi {
*/
}
/*
private static final ObjectIdentifier fieldTypePrime =
ObjectIdentifier.newInternal(new int[] {1, 2, 840, 10045, 1, 1});
private static final ObjectIdentifier fieldTypeChar2 =
ObjectIdentifier.newInternal(new int[] {1, 2, 840, 10045, 1, 2});
private static ECField parseField(DerInputStream in) throws IOException {
DerValue v = in.getDerValue();
ObjectIdentifier oid = v.data.getOID();
if (oid.equals(fieldTypePrime) == false) {
throw new IOException("Only prime fields supported: " + oid);
}
BigInteger fieldSize = v.data.getBigInteger();
return new ECFieldFp(fieldSize);
}
private static EllipticCurve parseCurve(DerInputStream in, ECField field)
protected
void
engineInit
(
byte
[]
params
,
String
decodingMethod
)
throws
IOException
{
DerValue v = in.getDerValue();
byte[] ab = v.data.getOctetString();
byte[] bb = v.data.getOctetString();
return new EllipticCurve(field, new BigInteger(1, ab), new BigInteger(1, bb));
}
private static ECPoint parsePoint(DerInputStream in, EllipticCurve curve)
throws IOException {
byte[] data = in.getOctetString();
return decodePoint(data, curve);
}
*/
// used by ECPublicKeyImpl and ECPrivateKeyImpl
static
AlgorithmParameters
getAlgorithmParameters
(
ECParameterSpec
spec
)
throws
InvalidKeyException
{
try
{
AlgorithmParameters
params
=
AlgorithmParameters
.
getInstance
(
"EC"
,
"SunEC"
);
params
.
init
(
spec
);
return
params
;
}
catch
(
GeneralSecurityException
e
)
{
throw
new
InvalidKeyException
(
"EC parameters error"
,
e
);
}
engineInit
(
params
);
}
// AlgorithmParameterSpi methods
// The parameters these AlgorithmParameters object represents.
// Currently, it is always an instance of NamedCurve.
private
ECParameterSpec
paramSpec
;
protected
void
engineInit
(
AlgorithmParameterSpec
paramSpec
)
protected
<
T
extends
AlgorithmParameterSpec
>
T
engineGetParameterSpec
(
Class
<
T
>
spec
)
throws
InvalidParameterSpecException
{
if
(
paramSpec
instanceof
ECParameterSpec
)
{
this
.
paramSpec
=
getNamedCurve
((
ECParameterSpec
)
paramSpec
);
if
(
this
.
paramSpec
==
null
)
{
throw
new
InvalidParameterSpecException
(
"Not a supported named curve: "
+
paramSpec
);
}
}
else
if
(
paramSpec
instanceof
ECGenParameterSpec
)
{
String
name
=
((
ECGenParameterSpec
)
paramSpec
).
getName
();
ECParameterSpec
spec
=
NamedCurve
.
getECParameterSpec
(
name
);
if
(
spec
==
null
)
{
throw
new
InvalidParameterSpecException
(
"Unknown curve: "
+
name
);
}
this
.
paramSpec
=
spec
;
}
else
if
(
paramSpec
==
null
)
{
throw
new
InvalidParameterSpecException
(
"paramSpec must not be null"
);
}
else
{
throw
new
InvalidParameterSpecException
(
"Only ECParameterSpec and ECGenParameterSpec supported"
);
}
}
protected
void
engineInit
(
byte
[]
params
)
throws
IOException
{
paramSpec
=
decodeParameters
(
params
);
if
(
spec
.
isAssignableFrom
(
ECParameterSpec
.
class
))
{
return
spec
.
cast
(
namedCurve
);
}
protected
void
engineInit
(
byte
[]
params
,
String
decodingMethod
)
throws
IOException
{
engineInit
(
params
);
if
(
spec
.
isAssignableFrom
(
ECGenParameterSpec
.
class
))
{
// Ensure the name is the Object ID
String
name
=
namedCurve
.
getObjectId
();
return
spec
.
cast
(
new
ECGenParameterSpec
(
name
));
}
protected
<
T
extends
AlgorithmParameterSpec
>
T
engineGetParameterSpec
(
Class
<
T
>
spec
)
throws
InvalidParameterSpecException
{
if
(
spec
.
isAssignableFrom
(
ECParameterSpec
.
class
))
{
return
spec
.
cast
(
paramSpec
);
}
else
if
(
spec
.
isAssignableFrom
(
ECGenParameterSpec
.
class
))
{
return
spec
.
cast
(
new
ECGenParameterSpec
(
getCurveName
(
paramSpec
)));
}
else
{
throw
new
InvalidParameterSpecException
(
"Only ECParameterSpec and ECGenParameterSpec supported"
);
if
(
spec
.
isAssignableFrom
(
ECKeySizeParameterSpec
.
class
))
{
int
keySize
=
namedCurve
.
getCurve
().
getField
().
getFieldSize
();
return
spec
.
cast
(
new
ECKeySizeParameterSpec
(
keySize
));
}
throw
new
InvalidParameterSpecException
(
"Only ECParameterSpec and ECGenParameterSpec supported"
);
}
protected
byte
[]
engineGetEncoded
()
throws
IOException
{
return
encodeParameters
(
paramSpec
);
return
namedCurve
.
getEncoded
(
);
}
protected
byte
[]
engineGetEncoded
(
String
encodingMethod
)
throws
IOException
{
protected
byte
[]
engineGetEncoded
(
String
encodingMethod
)
throws
IOException
{
return
engineGetEncoded
();
}
protected
String
engineToString
()
{
return
paramSpec
.
toString
();
if
(
namedCurve
==
null
)
{
return
"Not initialized"
;
}
return
namedCurve
.
toString
();
}
}
src/share/classes/sun/security/ec/ECPrivateKeyImpl.java
浏览文件 @
16e18e93
/*
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2006,
2012,
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
...
...
@@ -67,18 +67,17 @@ public final class ECPrivateKeyImpl extends PKCS8Key implements ECPrivateKey {
private
ECParameterSpec
params
;
/**
* Construct a key from its encoding. Called by the ECKeyFactory and
* the SunPKCS11 code.
* Construct a key from its encoding. Called by the ECKeyFactory.
*/
public
ECPrivateKeyImpl
(
byte
[]
encoded
)
throws
InvalidKeyException
{
ECPrivateKeyImpl
(
byte
[]
encoded
)
throws
InvalidKeyException
{
decode
(
encoded
);
}
/**
* Construct a key from its components. Used by the
* KeyFactory
and the SunPKCS11 code
.
* KeyFactory.
*/
public
ECPrivateKeyImpl
(
BigInteger
s
,
ECParameterSpec
params
)
ECPrivateKeyImpl
(
BigInteger
s
,
ECParameterSpec
params
)
throws
InvalidKeyException
{
this
.
s
=
s
;
this
.
params
=
params
;
...
...
@@ -88,7 +87,7 @@ public final class ECPrivateKeyImpl extends PKCS8Key implements ECPrivateKey {
try
{
DerOutputStream
out
=
new
DerOutputStream
();
out
.
putInteger
(
1
);
// version 1
byte
[]
privBytes
=
EC
Parameters
.
trimZeroes
(
s
.
toByteArray
());
byte
[]
privBytes
=
EC
Util
.
trimZeroes
(
s
.
toByteArray
());
out
.
putOctetString
(
privBytes
);
DerValue
val
=
new
DerValue
(
DerValue
.
tag_Sequence
,
out
.
toByteArray
());
...
...
src/share/classes/sun/security/ec/ECPublicKeyImpl.java
浏览文件 @
16e18e93
...
...
@@ -49,23 +49,23 @@ public final class ECPublicKeyImpl extends X509Key implements ECPublicKey {
/**
* Construct a key from its components. Used by the
* ECKeyFactory
and SunPKCS11
.
* ECKeyFactory.
*/
@SuppressWarnings
(
"deprecation"
)
public
ECPublicKeyImpl
(
ECPoint
w
,
ECParameterSpec
params
)
ECPublicKeyImpl
(
ECPoint
w
,
ECParameterSpec
params
)
throws
InvalidKeyException
{
this
.
w
=
w
;
this
.
params
=
params
;
// generate the encoding
algid
=
new
AlgorithmId
(
AlgorithmId
.
EC_oid
,
ECParameters
.
getAlgorithmParameters
(
params
));
key
=
EC
Parameters
.
encodePoint
(
w
,
params
.
getCurve
());
key
=
EC
Util
.
encodePoint
(
w
,
params
.
getCurve
());
}
/**
* Construct a key from its encoding.
Used by RSAKeyFactory.
* Construct a key from its encoding.
*/
public
ECPublicKeyImpl
(
byte
[]
encoded
)
throws
InvalidKeyException
{
ECPublicKeyImpl
(
byte
[]
encoded
)
throws
InvalidKeyException
{
decode
(
encoded
);
}
...
...
@@ -104,7 +104,7 @@ public final class ECPublicKeyImpl extends X509Key implements ECPublicKey {
try
{
params
=
algParams
.
getParameterSpec
(
ECParameterSpec
.
class
);
w
=
EC
Parameters
.
decodePoint
(
key
,
params
.
getCurve
());
w
=
EC
Util
.
decodePoint
(
key
,
params
.
getCurve
());
}
catch
(
IOException
e
)
{
throw
new
InvalidKeyException
(
"Invalid EC key"
,
e
);
}
catch
(
InvalidParameterSpecException
e
)
{
...
...
src/share/classes/sun/security/ec/NamedCurve.java
浏览文件 @
16e18e93
/*
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2006,
2012,
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
...
...
@@ -27,638 +27,60 @@ package sun.security.ec;
import
java.io.IOException
;
import
java.math.BigInteger
;
import
java.util.*
;
import
java.util.regex.Pattern
;
import
java.security.spec.*
;
import
sun.security.util.ObjectIdentifier
;
import
sun.security.util.DerOutputStream
;
import
sun.security.util.ObjectIdentifier
;
/**
* Repository for well-known Elliptic Curve parameters. It is used by both
* the SunPKCS11 and SunJSSE code.
* Contains Elliptic Curve parameters.
*
* @since 1.6
* @author Andreas Sterbenz
*/
public
final
class
NamedCurve
extends
ECParameterSpec
{
class
NamedCurve
extends
ECParameterSpec
{
// friendly name for toString() output
private
final
String
name
;
// well known OID
private
final
ObjectIdentifier
oid
;
private
final
String
oid
;
// encoded form (as NamedCurve identified via OID)
private
final
byte
[]
encoded
;
private
NamedCurve
(
String
name
,
ObjectIdentifier
oid
,
EllipticCurve
curve
,
ECPoint
g
,
BigInteger
n
,
int
h
)
throws
IOException
{
NamedCurve
(
String
name
,
String
oid
,
EllipticCurve
curve
,
ECPoint
g
,
BigInteger
n
,
int
h
)
{
super
(
curve
,
g
,
n
,
h
);
this
.
name
=
name
;
this
.
oid
=
oid
;
DerOutputStream
out
=
new
DerOutputStream
();
out
.
putOID
(
oid
);
encoded
=
out
.
toByteArray
();
}
// Return a NamedCurve for the specified OID/name or null if unknown.
// Used by SunJSSE and SunPKCS11.
public
static
ECParameterSpec
getECParameterSpec
(
String
name
)
{
NamedCurve
spec
=
oidMap
.
get
(
name
);
return
(
spec
!=
null
)
?
spec
:
nameMap
.
get
(
name
);
}
// Return a NamedCurve for the specified OID or null if unknown.
static
ECParameterSpec
getECParameterSpec
(
ObjectIdentifier
oid
)
{
return
getECParameterSpec
(
oid
.
toString
());
try
{
out
.
putOID
(
new
ObjectIdentifier
(
oid
));
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
"Internal error"
,
e
);
}
// Return EC parameters for the specified field size. If there are known
// NIST recommended parameters for the given length, they are returned.
// Otherwise, if there are multiple matches for the given size, an
// arbitrary one is returns.
// If no parameters are known, the method returns null.
// NOTE that this method returns both prime and binary curves.
// Used by SunPKCS11.
public
static
ECParameterSpec
getECParameterSpec
(
int
length
)
{
return
lengthMap
.
get
(
length
);
encoded
=
out
.
toByteArray
();
}
// Used by unit tests.
public
static
Collection
<?
extends
ECParameterSpec
>
knownECParameterSpecs
()
{
return
Collections
.
unmodifiableCollection
(
oidMap
.
values
());
String
getName
()
{
return
name
;
}
byte
[]
getEncoded
()
{
return
encoded
.
clone
();
}
ObjectIdentifier
getObjectIdentifier
()
{
String
getObjectId
()
{
return
oid
;
}
public
String
toString
()
{
return
name
+
" ("
+
oid
+
")"
;
}
private
static
final
Map
<
String
,
NamedCurve
>
oidMap
=
new
LinkedHashMap
<
String
,
NamedCurve
>();
private
static
final
Map
<
String
,
NamedCurve
>
nameMap
=
new
HashMap
<
String
,
NamedCurve
>();
private
static
final
Map
<
Integer
,
NamedCurve
>
lengthMap
=
new
HashMap
<
Integer
,
NamedCurve
>();
private
static
BigInteger
bi
(
String
s
)
{
return
new
BigInteger
(
s
,
16
);
}
private
static
Pattern
SPLIT_PATTERN
=
Pattern
.
compile
(
",|\\[|\\]"
);
private
static
void
add
(
String
name
,
String
soid
,
int
type
,
String
sfield
,
String
a
,
String
b
,
String
x
,
String
y
,
String
n
,
int
h
)
{
BigInteger
p
=
bi
(
sfield
);
ECField
field
;
if
((
type
==
P
)
||
(
type
==
PD
))
{
field
=
new
ECFieldFp
(
p
);
}
else
if
((
type
==
B
)
||
(
type
==
BD
))
{
field
=
new
ECFieldF2m
(
p
.
bitLength
()
-
1
,
p
);
}
else
{
throw
new
RuntimeException
(
"Invalid type: "
+
type
);
}
EllipticCurve
curve
=
new
EllipticCurve
(
field
,
bi
(
a
),
bi
(
b
));
ECPoint
g
=
new
ECPoint
(
bi
(
x
),
bi
(
y
));
try
{
ObjectIdentifier
oid
=
new
ObjectIdentifier
(
soid
);
NamedCurve
params
=
new
NamedCurve
(
name
,
oid
,
curve
,
g
,
bi
(
n
),
h
);
if
(
oidMap
.
put
(
soid
,
params
)
!=
null
)
{
throw
new
RuntimeException
(
"Duplication oid: "
+
soid
);
}
String
[]
commonNames
=
SPLIT_PATTERN
.
split
(
name
);
for
(
String
commonName
:
commonNames
)
{
if
(
nameMap
.
put
(
commonName
.
trim
(),
params
)
!=
null
)
{
throw
new
RuntimeException
(
"Duplication name: "
+
commonName
);
}
}
int
len
=
field
.
getFieldSize
();
if
((
type
==
PD
)
||
(
type
==
BD
)
||
(
lengthMap
.
get
(
len
)
==
null
))
{
// add entry if none present for this field size or if
// the curve is marked as a default curve.
lengthMap
.
put
(
len
,
params
);
}
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
"Internal error"
,
e
);
}
}
private
final
static
int
P
=
1
;
// prime curve
private
final
static
int
B
=
2
;
// binary curve
private
final
static
int
PD
=
5
;
// prime curve, mark as default
private
final
static
int
BD
=
6
;
// binary curve, mark as default
static
{
/* SEC2 prime curves */
add
(
"secp112r1"
,
"1.3.132.0.6"
,
P
,
"DB7C2ABF62E35E668076BEAD208B"
,
"DB7C2ABF62E35E668076BEAD2088"
,
"659EF8BA043916EEDE8911702B22"
,
"09487239995A5EE76B55F9C2F098"
,
"A89CE5AF8724C0A23E0E0FF77500"
,
"DB7C2ABF62E35E7628DFAC6561C5"
,
1
);
add
(
"secp112r2"
,
"1.3.132.0.7"
,
P
,
"DB7C2ABF62E35E668076BEAD208B"
,
"6127C24C05F38A0AAAF65C0EF02C"
,
"51DEF1815DB5ED74FCC34C85D709"
,
"4BA30AB5E892B4E1649DD0928643"
,
"adcd46f5882e3747def36e956e97"
,
"36DF0AAFD8B8D7597CA10520D04B"
,
4
);
add
(
"secp128r1"
,
"1.3.132.0.28"
,
P
,
"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"
,
"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC"
,
"E87579C11079F43DD824993C2CEE5ED3"
,
"161FF7528B899B2D0C28607CA52C5B86"
,
"CF5AC8395BAFEB13C02DA292DDED7A83"
,
"FFFFFFFE0000000075A30D1B9038A115"
,
1
);
add
(
"secp128r2"
,
"1.3.132.0.29"
,
P
,
"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"
,
"D6031998D1B3BBFEBF59CC9BBFF9AEE1"
,
"5EEEFCA380D02919DC2C6558BB6D8A5D"
,
"7B6AA5D85E572983E6FB32A7CDEBC140"
,
"27B6916A894D3AEE7106FE805FC34B44"
,
"3FFFFFFF7FFFFFFFBE0024720613B5A3"
,
4
);
add
(
"secp160k1"
,
"1.3.132.0.9"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"
,
"0000000000000000000000000000000000000000"
,
"0000000000000000000000000000000000000007"
,
"3B4C382CE37AA192A4019E763036F4F5DD4D7EBB"
,
"938CF935318FDCED6BC28286531733C3F03C4FEE"
,
"0100000000000000000001B8FA16DFAB9ACA16B6B3"
,
1
);
add
(
"secp160r1"
,
"1.3.132.0.8"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC"
,
"1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45"
,
"4A96B5688EF573284664698968C38BB913CBFC82"
,
"23A628553168947D59DCC912042351377AC5FB32"
,
"0100000000000000000001F4C8F927AED3CA752257"
,
1
);
add
(
"secp160r2"
,
"1.3.132.0.30"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70"
,
"B4E134D3FB59EB8BAB57274904664D5AF50388BA"
,
"52DCB034293A117E1F4FF11B30F7199D3144CE6D"
,
"FEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E"
,
"0100000000000000000000351EE786A818F3A1A16B"
,
1
);
add
(
"secp192k1"
,
"1.3.132.0.31"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37"
,
"000000000000000000000000000000000000000000000000"
,
"000000000000000000000000000000000000000000000003"
,
"DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D"
,
"9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D"
,
"FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D"
,
1
);
add
(
"secp192r1 [NIST P-192, X9.62 prime192v1]"
,
"1.2.840.10045.3.1.1"
,
PD
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"
,
"64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1"
,
"188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012"
,
"07192B95FFC8DA78631011ED6B24CDD573F977A11E794811"
,
"FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831"
,
1
);
add
(
"secp224k1"
,
"1.3.132.0.32"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D"
,
"00000000000000000000000000000000000000000000000000000000"
,
"00000000000000000000000000000000000000000000000000000005"
,
"A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C"
,
"7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5"
,
"010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7"
,
1
);
add
(
"secp224r1 [NIST P-224]"
,
"1.3.132.0.33"
,
PD
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE"
,
"B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4"
,
"B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21"
,
"BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D"
,
1
);
add
(
"secp256k1"
,
"1.3.132.0.10"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"
,
"0000000000000000000000000000000000000000000000000000000000000000"
,
"0000000000000000000000000000000000000000000000000000000000000007"
,
"79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798"
,
"483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"
,
1
);
add
(
"secp256r1 [NIST P-256, X9.62 prime256v1]"
,
"1.2.840.10045.3.1.7"
,
PD
,
"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"
,
"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC"
,
"5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"
,
"6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296"
,
"4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5"
,
"FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"
,
1
);
add
(
"secp384r1 [NIST P-384]"
,
"1.3.132.0.34"
,
PD
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC"
,
"B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF"
,
"AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7"
,
"3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973"
,
1
);
add
(
"secp521r1 [NIST P-521]"
,
"1.3.132.0.35"
,
PD
,
"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
,
"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC"
,
"0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00"
,
"00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66"
,
"011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650"
,
"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409"
,
1
);
/* ANSI X9.62 prime curves */
add
(
"X9.62 prime192v2"
,
"1.2.840.10045.3.1.2"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"
,
"CC22D6DFB95C6B25E49C0D6364A4E5980C393AA21668D953"
,
"EEA2BAE7E1497842F2DE7769CFE9C989C072AD696F48034A"
,
"6574D11D69B6EC7A672BB82A083DF2F2B0847DE970B2DE15"
,
"FFFFFFFFFFFFFFFFFFFFFFFE5FB1A724DC80418648D8DD31"
,
1
);
add
(
"X9.62 prime192v3"
,
"1.2.840.10045.3.1.3"
,
P
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"
,
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"
,
"22123DC2395A05CAA7423DAECCC94760A7D462256BD56916"
,
"7D29778100C65A1DA1783716588DCE2B8B4AEE8E228F1896"
,
"38A90F22637337334B49DCB66A6DC8F9978ACA7648A943B0"
,
"FFFFFFFFFFFFFFFFFFFFFFFF7A62D031C83F4294F640EC13"
,
1
);
add
(
"X9.62 prime239v1"
,
"1.2.840.10045.3.1.4"
,
P
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF"
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC"
,
"6B016C3BDCF18941D0D654921475CA71A9DB2FB27D1D37796185C2942C0A"
,
"0FFA963CDCA8816CCC33B8642BEDF905C3D358573D3F27FBBD3B3CB9AAAF"
,
"7DEBE8E4E90A5DAE6E4054CA530BA04654B36818CE226B39FCCB7B02F1AE"
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF9E5E9A9F5D9071FBD1522688909D0B"
,
1
);
add
(
"X9.62 prime239v2"
,
"1.2.840.10045.3.1.5"
,
P
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF"
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC"
,
"617FAB6832576CBBFED50D99F0249C3FEE58B94BA0038C7AE84C8C832F2C"
,
"38AF09D98727705120C921BB5E9E26296A3CDCF2F35757A0EAFD87B830E7"
,
"5B0125E4DBEA0EC7206DA0FC01D9B081329FB555DE6EF460237DFF8BE4BA"
,
"7FFFFFFFFFFFFFFFFFFFFFFF800000CFA7E8594377D414C03821BC582063"
,
1
);
add
(
"X9.62 prime239v3"
,
"1.2.840.10045.3.1.6"
,
P
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF"
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC"
,
"255705FA2A306654B1F4CB03D6A750A30C250102D4988717D9BA15AB6D3E"
,
"6768AE8E18BB92CFCF005C949AA2C6D94853D0E660BBF854B1C9505FE95A"
,
"1607E6898F390C06BC1D552BAD226F3B6FCFE48B6E818499AF18E3ED6CF3"
,
"7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF975DEB41B3A6057C3C432146526551"
,
1
);
/* SEC2 binary curves */
add
(
"sect113r1"
,
"1.3.132.0.4"
,
B
,
"020000000000000000000000000201"
,
"003088250CA6E7C7FE649CE85820F7"
,
"00E8BEE4D3E2260744188BE0E9C723"
,
"009D73616F35F4AB1407D73562C10F"
,
"00A52830277958EE84D1315ED31886"
,
"0100000000000000D9CCEC8A39E56F"
,
2
);
add
(
"sect113r2"
,
"1.3.132.0.5"
,
B
,
"020000000000000000000000000201"
,
"00689918DBEC7E5A0DD6DFC0AA55C7"
,
"0095E9A9EC9B297BD4BF36E059184F"
,
"01A57A6A7B26CA5EF52FCDB8164797"
,
"00B3ADC94ED1FE674C06E695BABA1D"
,
"010000000000000108789B2496AF93"
,
2
);
add
(
"sect131r1"
,
"1.3.132.0.22"
,
B
,
"080000000000000000000000000000010D"
,
"07A11B09A76B562144418FF3FF8C2570B8"
,
"0217C05610884B63B9C6C7291678F9D341"
,
"0081BAF91FDF9833C40F9C181343638399"
,
"078C6E7EA38C001F73C8134B1B4EF9E150"
,
"0400000000000000023123953A9464B54D"
,
2
);
add
(
"sect131r2"
,
"1.3.132.0.23"
,
B
,
"080000000000000000000000000000010D"
,
"03E5A88919D7CAFCBF415F07C2176573B2"
,
"04B8266A46C55657AC734CE38F018F2192"
,
"0356DCD8F2F95031AD652D23951BB366A8"
,
"0648F06D867940A5366D9E265DE9EB240F"
,
"0400000000000000016954A233049BA98F"
,
2
);
add
(
"sect163k1 [NIST K-163]"
,
"1.3.132.0.1"
,
BD
,
"0800000000000000000000000000000000000000C9"
,
"000000000000000000000000000000000000000001"
,
"000000000000000000000000000000000000000001"
,
"02FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE8"
,
"0289070FB05D38FF58321F2E800536D538CCDAA3D9"
,
"04000000000000000000020108A2E0CC0D99F8A5EF"
,
2
);
add
(
"sect163r1"
,
"1.3.132.0.2"
,
B
,
"0800000000000000000000000000000000000000C9"
,
"07B6882CAAEFA84F9554FF8428BD88E246D2782AE2"
,
"0713612DCDDCB40AAB946BDA29CA91F73AF958AFD9"
,
"0369979697AB43897789566789567F787A7876A654"
,
"00435EDB42EFAFB2989D51FEFCE3C80988F41FF883"
,
"03FFFFFFFFFFFFFFFFFFFF48AAB689C29CA710279B"
,
2
);
add
(
"sect163r2 [NIST B-163]"
,
"1.3.132.0.15"
,
BD
,
"0800000000000000000000000000000000000000C9"
,
"000000000000000000000000000000000000000001"
,
"020A601907B8C953CA1481EB10512F78744A3205FD"
,
"03F0EBA16286A2D57EA0991168D4994637E8343E36"
,
"00D51FBC6C71A0094FA2CDD545B11C5C0C797324F1"
,
"040000000000000000000292FE77E70C12A4234C33"
,
2
);
add
(
"sect193r1"
,
"1.3.132.0.24"
,
B
,
"02000000000000000000000000000000000000000000008001"
,
"0017858FEB7A98975169E171F77B4087DE098AC8A911DF7B01"
,
"00FDFB49BFE6C3A89FACADAA7A1E5BBC7CC1C2E5D831478814"
,
"01F481BC5F0FF84A74AD6CDF6FDEF4BF6179625372D8C0C5E1"
,
"0025E399F2903712CCF3EA9E3A1AD17FB0B3201B6AF7CE1B05"
,
"01000000000000000000000000C7F34A778F443ACC920EBA49"
,
2
);
add
(
"sect193r2"
,
"1.3.132.0.25"
,
B
,
"02000000000000000000000000000000000000000000008001"
,
"0163F35A5137C2CE3EA6ED8667190B0BC43ECD69977702709B"
,
"00C9BB9E8927D4D64C377E2AB2856A5B16E3EFB7F61D4316AE"
,
"00D9B67D192E0367C803F39E1A7E82CA14A651350AAE617E8F"
,
"01CE94335607C304AC29E7DEFBD9CA01F596F927224CDECF6C"
,
"010000000000000000000000015AAB561B005413CCD4EE99D5"
,
2
);
add
(
"sect233k1 [NIST K-233]"
,
"1.3.132.0.26"
,
BD
,
"020000000000000000000000000000000000000004000000000000000001"
,
"000000000000000000000000000000000000000000000000000000000000"
,
"000000000000000000000000000000000000000000000000000000000001"
,
"017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD6126"
,
"01DB537DECE819B7F70F555A67C427A8CD9BF18AEB9B56E0C11056FAE6A3"
,
"008000000000000000000000000000069D5BB915BCD46EFB1AD5F173ABDF"
,
4
);
add
(
"sect233r1 [NIST B-233]"
,
"1.3.132.0.27"
,
B
,
"020000000000000000000000000000000000000004000000000000000001"
,
"000000000000000000000000000000000000000000000000000000000001"
,
"0066647EDE6C332C7F8C0923BB58213B333B20E9CE4281FE115F7D8F90AD"
,
"00FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B"
,
"01006A08A41903350678E58528BEBF8A0BEFF867A7CA36716F7E01F81052"
,
"01000000000000000000000000000013E974E72F8A6922031D2603CFE0D7"
,
2
);
add
(
"sect239k1"
,
"1.3.132.0.3"
,
B
,
"800000000000000000004000000000000000000000000000000000000001"
,
"000000000000000000000000000000000000000000000000000000000000"
,
"000000000000000000000000000000000000000000000000000000000001"
,
"29A0B6A887A983E9730988A68727A8B2D126C44CC2CC7B2A6555193035DC"
,
"76310804F12E549BDB011C103089E73510ACB275FC312A5DC6B76553F0CA"
,
"2000000000000000000000000000005A79FEC67CB6E91F1C1DA800E478A5"
,
4
);
add
(
"sect283k1 [NIST K-283]"
,
"1.3.132.0.16"
,
BD
,
"0800000000000000000000000000000000000000000000000000000000000000000010A1"
,
"000000000000000000000000000000000000000000000000000000000000000000000000"
,
"000000000000000000000000000000000000000000000000000000000000000000000001"
,
"0503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836"
,
"01CCDA380F1C9E318D90F95D07E5426FE87E45C0E8184698E45962364E34116177DD2259"
,
"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9AE2ED07577265DFF7F94451E061E163C61"
,
4
);
add
(
"sect283r1 [NIST B-283]"
,
"1.3.132.0.17"
,
B
,
"0800000000000000000000000000000000000000000000000000000000000000000010A1"
,
"000000000000000000000000000000000000000000000000000000000000000000000001"
,
"027B680AC8B8596DA5A4AF8A19A0303FCA97FD7645309FA2A581485AF6263E313B79A2F5"
,
"05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053"
,
"03676854FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4"
,
"03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307"
,
2
);
add
(
"sect409k1 [NIST K-409]"
,
"1.3.132.0.36"
,
BD
,
"02000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000001"
,
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
,
"0060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746"
,
"01E369050B7C4E42ACBA1DACBF04299C3460782F918EA427E6325165E9EA10E3DA5F6C42E9C55215AA9CA27A5863EC48D8E0286B"
,
"007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F83B2D4EA20400EC4557D5ED3E3E7CA5B4B5C83B8E01E5FCF"
,
4
);
add
(
"sect409r1 [NIST B-409]"
,
"1.3.132.0.37"
,
B
,
"02000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000001"
,
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
,
"0021A5C2C8EE9FEB5C4B9A753B7B476B7FD6422EF1F3DD674761FA99D6AC27C8A9A197B272822F6CD57A55AA4F50AE317B13545F"
,
"015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7"
,
"0061B1CFAB6BE5F32BBFA78324ED106A7636B9C5A7BD198D0158AA4F5488D08F38514F1FDF4B4F40D2181B3681C364BA0273C706"
,
"010000000000000000000000000000000000000000000000000001E2AAD6A612F33307BE5FA47C3C9E052F838164CD37D9A21173"
,
2
);
add
(
"sect571k1 [NIST K-571]"
,
"1.3.132.0.38"
,
BD
,
"080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425"
,
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
,
"026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA44370958493B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972"
,
"0349DC807F4FBF374F4AEADE3BCA95314DD58CEC9F307A54FFC61EFC006D8A2C9D4979C0AC44AEA74FBEBBB9F772AEDCB620B01A7BA7AF1B320430C8591984F601CD4C143EF1C7A3"
,
"020000000000000000000000000000000000000000000000000000000000000000000000131850E1F19A63E4B391A8DB917F4138B630D84BE5D639381E91DEB45CFE778F637C1001"
,
4
);
add
(
"sect571r1 [NIST B-571]"
,
"1.3.132.0.39"
,
B
,
"080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425"
,
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
,
"02F40E7E2221F295DE297117B7F3D62F5C6A97FFCB8CEFF1CD6BA8CE4A9A18AD84FFABBD8EFA59332BE7AD6756A66E294AFD185A78FF12AA520E4DE739BACA0C7FFEFF7F2955727A"
,
"0303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19"
,
"037BF27342DA639B6DCCFFFEB73D69D78C6C27A6009CBBCA1980F8533921E8A684423E43BAB08A576291AF8F461BB2A8B3531D2F0485C19B16E2F1516E23DD3C1A4827AF1B8AC15B"
,
"03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE661CE18FF55987308059B186823851EC7DD9CA1161DE93D5174D66E8382E9BB2FE84E47"
,
2
);
/* ANSI X9.62 binary curves */
add
(
"X9.62 c2tnb191v1"
,
"1.2.840.10045.3.0.5"
,
B
,
"800000000000000000000000000000000000000000000201"
,
"2866537B676752636A68F56554E12640276B649EF7526267"
,
"2E45EF571F00786F67B0081B9495A3D95462F5DE0AA185EC"
,
"36B3DAF8A23206F9C4F299D7B21A9C369137F2C84AE1AA0D"
,
"765BE73433B3F95E332932E70EA245CA2418EA0EF98018FB"
,
"40000000000000000000000004A20E90C39067C893BBB9A5"
,
2
);
add
(
"X9.62 c2tnb191v2"
,
"1.2.840.10045.3.0.6"
,
B
,
"800000000000000000000000000000000000000000000201"
,
"401028774D7777C7B7666D1366EA432071274F89FF01E718"
,
"0620048D28BCBD03B6249C99182B7C8CD19700C362C46A01"
,
"3809B2B7CC1B28CC5A87926AAD83FD28789E81E2C9E3BF10"
,
"17434386626D14F3DBF01760D9213A3E1CF37AEC437D668A"
,
"20000000000000000000000050508CB89F652824E06B8173"
,
4
);
add
(
"X9.62 c2tnb191v3"
,
"1.2.840.10045.3.0.7"
,
B
,
"800000000000000000000000000000000000000000000201"
,
"6C01074756099122221056911C77D77E77A777E7E7E77FCB"
,
"71FE1AF926CF847989EFEF8DB459F66394D90F32AD3F15E8"
,
"375D4CE24FDE434489DE8746E71786015009E66E38A926DD"
,
"545A39176196575D985999366E6AD34CE0A77CD7127B06BE"
,
"155555555555555555555555610C0B196812BFB6288A3EA3"
,
6
);
add
(
"X9.62 c2tnb239v1"
,
"1.2.840.10045.3.0.11"
,
B
,
"800000000000000000000000000000000000000000000000001000000001"
,
"32010857077C5431123A46B808906756F543423E8D27877578125778AC76"
,
"790408F2EEDAF392B012EDEFB3392F30F4327C0CA3F31FC383C422AA8C16"
,
"57927098FA932E7C0A96D3FD5B706EF7E5F5C156E16B7E7C86038552E91D"
,
"61D8EE5077C33FECF6F1A16B268DE469C3C7744EA9A971649FC7A9616305"
,
"2000000000000000000000000000000F4D42FFE1492A4993F1CAD666E447"
,
4
);
add
(
"X9.62 c2tnb239v2"
,
"1.2.840.10045.3.0.12"
,
B
,
"800000000000000000000000000000000000000000000000001000000001"
,
"4230017757A767FAE42398569B746325D45313AF0766266479B75654E65F"
,
"5037EA654196CFF0CD82B2C14A2FCF2E3FF8775285B545722F03EACDB74B"
,
"28F9D04E900069C8DC47A08534FE76D2B900B7D7EF31F5709F200C4CA205"
,
"5667334C45AFF3B5A03BAD9DD75E2C71A99362567D5453F7FA6E227EC833"
,
"1555555555555555555555555555553C6F2885259C31E3FCDF154624522D"
,
6
);
add
(
"X9.62 c2tnb239v3"
,
"1.2.840.10045.3.0.13"
,
B
,
"800000000000000000000000000000000000000000000000001000000001"
,
"01238774666A67766D6676F778E676B66999176666E687666D8766C66A9F"
,
"6A941977BA9F6A435199ACFC51067ED587F519C5ECB541B8E44111DE1D40"
,
"70F6E9D04D289C4E89913CE3530BFDE903977D42B146D539BF1BDE4E9C92"
,
"2E5A0EAF6E5E1305B9004DCE5C0ED7FE59A35608F33837C816D80B79F461"
,
"0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCAC4912D2D9DF903EF9888B8A0E4CFF"
,
0xA
);
add
(
"X9.62 c2tnb359v1"
,
"1.2.840.10045.3.0.18"
,
B
,
"800000000000000000000000000000000000000000000000000000000000000000000000100000000000000001"
,
"5667676A654B20754F356EA92017D946567C46675556F19556A04616B567D223A5E05656FB549016A96656A557"
,
"2472E2D0197C49363F1FE7F5B6DB075D52B6947D135D8CA445805D39BC345626089687742B6329E70680231988"
,
"3C258EF3047767E7EDE0F1FDAA79DAEE3841366A132E163ACED4ED2401DF9C6BDCDE98E8E707C07A2239B1B097"
,
"53D7E08529547048121E9C95F3791DD804963948F34FAE7BF44EA82365DC7868FE57E4AE2DE211305A407104BD"
,
"01AF286BCA1AF286BCA1AF286BCA1AF286BCA1AF286BC9FB8F6B85C556892C20A7EB964FE7719E74F490758D3B"
,
0x4C
);
add
(
"X9.62 c2tnb431r1"
,
"1.2.840.10045.3.0.20"
,
B
,
"800000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000001"
,
"1A827EF00DD6FC0E234CAF046C6A5D8A85395B236CC4AD2CF32A0CADBDC9DDF620B0EB9906D0957F6C6FEACD615468DF104DE296CD8F"
,
"10D9B4A3D9047D8B154359ABFB1B7F5485B04CEB868237DDC9DEDA982A679A5A919B626D4E50A8DD731B107A9962381FB5D807BF2618"
,
"120FC05D3C67A99DE161D2F4092622FECA701BE4F50F4758714E8A87BBF2A658EF8C21E7C5EFE965361F6C2999C0C247B0DBD70CE6B7"
,
"20D0AF8903A96F8D5FA2C255745D3C451B302C9346D9B7E485E7BCE41F6B591F3E8F6ADDCBB0BC4C2F947A7DE1A89B625D6A598B3760"
,
"0340340340340340340340340340340340340340340340340340340323C313FAB50589703B5EC68D3587FEC60D161CC149C1AD4A91"
,
0x2760
);
/* ANSI X9.62 binary curves from the 1998 standard but forbidden
* in the 2005 version of the standard.
* We don't register them but leave them here for the time being in
* case we need to support them after all.
*/
/*
add("X9.62 c2pnb163v1", "1.2.840.10045.3.0.1", B,
"080000000000000000000000000000000000000107",
"072546B5435234A422E0789675F432C89435DE5242",
"00C9517D06D5240D3CFF38C74B20B6CD4D6F9DD4D9",
"07AF69989546103D79329FCC3D74880F33BBE803CB",
"01EC23211B5966ADEA1D3F87F7EA5848AEF0B7CA9F",
"0400000000000000000001E60FC8821CC74DAEAFC1",
2);
add("X9.62 c2pnb163v2", "1.2.840.10045.3.0.2", B,
"080000000000000000000000000000000000000107",
"0108B39E77C4B108BED981ED0E890E117C511CF072",
"0667ACEB38AF4E488C407433FFAE4F1C811638DF20",
"0024266E4EB5106D0A964D92C4860E2671DB9B6CC5",
"079F684DDF6684C5CD258B3890021B2386DFD19FC5",
"03FFFFFFFFFFFFFFFFFFFDF64DE1151ADBB78F10A7",
2);
add("X9.62 c2pnb163v3", "1.2.840.10045.3.0.3", B,
"080000000000000000000000000000000000000107",
"07A526C63D3E25A256A007699F5447E32AE456B50E",
"03F7061798EB99E238FD6F1BF95B48FEEB4854252B",
"02F9F87B7C574D0BDECF8A22E6524775F98CDEBDCB",
"05B935590C155E17EA48EB3FF3718B893DF59A05D0",
"03FFFFFFFFFFFFFFFFFFFE1AEE140F110AFF961309",
2);
add("X9.62 c2pnb176w1", "1.2.840.10045.3.0.4", B,
"0100000000000000000000000000000000080000000007",
"E4E6DB2995065C407D9D39B8D0967B96704BA8E9C90B",
"5DDA470ABE6414DE8EC133AE28E9BBD7FCEC0AE0FFF2",
"8D16C2866798B600F9F08BB4A8E860F3298CE04A5798",
"6FA4539C2DADDDD6BAB5167D61B436E1D92BB16A562C",
"00010092537397ECA4F6145799D62B0A19CE06FE26AD",
0xFF6E);
add("X9.62 c2pnb208w1", "1.2.840.10045.3.0.10", B,
"010000000000000000000000000000000800000000000000000007",
"0000000000000000000000000000000000000000000000000000",
"C8619ED45A62E6212E1160349E2BFA844439FAFC2A3FD1638F9E",
"89FDFBE4ABE193DF9559ECF07AC0CE78554E2784EB8C1ED1A57A",
"0F55B51A06E78E9AC38A035FF520D8B01781BEB1A6BB08617DE3",
"000101BAF95C9723C57B6C21DA2EFF2D5ED588BDD5717E212F9D",
0xFE48);
add("X9.62 c2pnb272w1", "1.2.840.10045.3.0.16", B,
"010000000000000000000000000000000000000000000000000000010000000000000B",
"91A091F03B5FBA4AB2CCF49C4EDD220FB028712D42BE752B2C40094DBACDB586FB20",
"7167EFC92BB2E3CE7C8AAAFF34E12A9C557003D7C73A6FAF003F99F6CC8482E540F7",
"6108BABB2CEEBCF787058A056CBE0CFE622D7723A289E08A07AE13EF0D10D171DD8D",
"10C7695716851EEF6BA7F6872E6142FBD241B830FF5EFCACECCAB05E02005DDE9D23",
"000100FAF51354E0E39E4892DF6E319C72C8161603FA45AA7B998A167B8F1E629521",
0xFF06);
add("X9.62 c2pnb304w1", "1.2.840.10045.3.0.17", B,
"010000000000000000000000000000000000000000000000000000000000000000000000000807",
"FD0D693149A118F651E6DCE6802085377E5F882D1B510B44160074C1288078365A0396C8E681",
"BDDB97E555A50A908E43B01C798EA5DAA6788F1EA2794EFCF57166B8C14039601E55827340BE",
"197B07845E9BE2D96ADB0F5F3C7F2CFFBD7A3EB8B6FEC35C7FD67F26DDF6285A644F740A2614",
"E19FBEB76E0DA171517ECF401B50289BF014103288527A9B416A105E80260B549FDC1B92C03B",
"000101D556572AABAC800101D556572AABAC8001022D5C91DD173F8FB561DA6899164443051D",
0xFE2E);
add("X9.62 c2pnb368w1", "1.2.840.10045.3.0.19", B,
"0100000000000000000000000000000000000000000000000000000000000000000000002000000000000000000007",
"E0D2EE25095206F5E2A4F9ED229F1F256E79A0E2B455970D8D0D865BD94778C576D62F0AB7519CCD2A1A906AE30D",
"FC1217D4320A90452C760A58EDCD30C8DD069B3C34453837A34ED50CB54917E1C2112D84D164F444F8F74786046A",
"1085E2755381DCCCE3C1557AFA10C2F0C0C2825646C5B34A394CBCFA8BC16B22E7E789E927BE216F02E1FB136A5F",
"7B3EB1BDDCBA62D5D8B2059B525797FC73822C59059C623A45FF3843CEE8F87CD1855ADAA81E2A0750B80FDA2310",
"00010090512DA9AF72B08349D98A5DD4C7B0532ECA51CE03E2D10F3B7AC579BD87E909AE40A6F131E9CFCE5BD967",
0xFF70);
*/
SPLIT_PATTERN
=
null
;
}
}
src/share/classes/sun/security/ec/SunECEntries.java
浏览文件 @
16e18e93
...
...
@@ -25,8 +25,11 @@
package
sun.security.ec
;
import
java.util.Collection
;
import
java.util.Map
;
import
java.util.regex.Pattern
;
/**
* Defines the entries of the SunEC provider.
*
...
...
@@ -60,64 +63,33 @@ final class SunECEntries {
map
.
put
(
"AlgorithmParameters.EC ImplementedIn"
,
"Software"
);
map
.
put
(
"AlgorithmParameters.EC SupportedCurves"
,
// A list comprising lists of curve names and object identifiers.
// '[' ( <curve-name> ',' )+ <curve-object-identifier> ']' '|'
// SEC 2 prime curves
"[secp112r1,1.3.132.0.6]|"
+
"[secp112r2,1.3.132.0.7]|"
+
"[secp128r1,1.3.132.0.28]|"
+
"[secp128r2,1.3.132.0.29]|"
+
"[secp160k1,1.3.132.0.9]|"
+
"[secp160r1,1.3.132.0.8]|"
+
"[secp160r2,1.3.132.0.30]|"
+
"[secp192k1,1.3.132.0.31]|"
+
"[secp192r1,NIST P-192,X9.62 prime192v1,1.2.840.10045.3.1.1]|"
+
"[secp224k1,1.3.132.0.32]|"
+
"[secp224r1,NIST P-224,1.3.132.0.33]|"
+
"[secp256k1,1.3.132.0.10]|"
+
"[secp256r1,NIST P-256,X9.62 prime256v1,1.2.840.10045.3.1.7]|"
+
"[secp384r1,NIST P-384,1.3.132.0.34]|"
+
"[secp521r1,NIST P-521,1.3.132.0.35]|"
+
// ANSI X9.62 prime curves
"[X9.62 prime192v2,1.2.840.10045.3.1.2]|"
+
"[X9.62 prime192v3,1.2.840.10045.3.1.3]|"
+
"[X9.62 prime239v1,1.2.840.10045.3.1.4]|"
+
"[X9.62 prime239v2,1.2.840.10045.3.1.5]|"
+
"[X9.62 prime239v3,1.2.840.10045.3.1.6]|"
+
// SEC 2 binary curves
"[sect113r1,1.3.132.0.4]|"
+
"[sect113r2,1.3.132.0.5]|"
+
"[sect131r1,1.3.132.0.22]|"
+
"[sect131r2,1.3.132.0.23]|"
+
"[sect163k1,NIST K-163,1.3.132.0.1]|"
+
"[sect163r1,1.3.132.0.2]|"
+
"[sect163r2,NIST B-163,1.3.132.0.15]|"
+
"[sect193r1,1.3.132.0.24]|"
+
"[sect193r2,1.3.132.0.25]|"
+
"[sect233k1,NIST K-233,1.3.132.0.26]|"
+
"[sect233r1,NIST B-233,1.3.132.0.27]|"
+
"[sect239k1,1.3.132.0.3]|"
+
"[sect283k1,NIST K-283,1.3.132.0.16]|"
+
"[sect283r1,NIST B-283,1.3.132.0.17]|"
+
"[sect409k1,NIST K-409,1.3.132.0.36]|"
+
"[sect409r1,NIST B-409,1.3.132.0.37]|"
+
"[sect571k1,NIST K-571,1.3.132.0.38]|"
+
"[sect571r1,NIST B-571,1.3.132.0.39]|"
+
// ANSI X9.62 binary curves
"[X9.62 c2tnb191v1,1.2.840.10045.3.0.5]|"
+
"[X9.62 c2tnb191v2,1.2.840.10045.3.0.6]|"
+
"[X9.62 c2tnb191v3,1.2.840.10045.3.0.7]|"
+
"[X9.62 c2tnb239v1,1.2.840.10045.3.0.11]|"
+
"[X9.62 c2tnb239v2,1.2.840.10045.3.0.12]|"
+
"[X9.62 c2tnb239v3,1.2.840.10045.3.0.13]|"
+
"[X9.62 c2tnb359v1,1.2.840.10045.3.0.18]|"
+
"[X9.62 c2tnb431r1,1.2.840.10045.3.0.20]"
);
// "AlgorithmParameters.EC SupportedCurves" prop used by unit test
boolean
firstCurve
=
true
;
StringBuilder
names
=
new
StringBuilder
();
Pattern
nameSplitPattern
=
Pattern
.
compile
(
CurveDB
.
SPLIT_PATTERN
);
Collection
<?
extends
NamedCurve
>
supportedCurves
=
CurveDB
.
getSupportedCurves
();
for
(
NamedCurve
namedCurve
:
supportedCurves
)
{
if
(!
firstCurve
)
{
names
.
append
(
"|"
);
}
else
{
firstCurve
=
false
;
}
names
.
append
(
"["
);
String
[]
commonNames
=
nameSplitPattern
.
split
(
namedCurve
.
getName
());
for
(
String
commonName
:
commonNames
)
{
names
.
append
(
commonName
.
trim
());
names
.
append
(
","
);
}
names
.
append
(
namedCurve
.
getObjectId
());
names
.
append
(
"]"
);
}
map
.
put
(
"AlgorithmParameters.EC SupportedCurves"
,
names
.
toString
());
/*
* Register the algorithms below only when the full ECC implementation
...
...
src/share/classes/sun/security/pkcs11/P11ECKeyFactory.java
浏览文件 @
16e18e93
...
...
@@ -32,15 +32,12 @@ import java.security.*;
import
java.security.interfaces.*
;
import
java.security.spec.*
;
import
sun.security.ec.ECPublicKeyImpl
;
import
sun.security.ec.ECParameters
;
import
sun.security.ec.NamedCurve
;
import
static
sun
.
security
.
pkcs11
.
TemplateManager
.*;
import
sun.security.pkcs11.wrapper.*
;
import
static
sun
.
security
.
pkcs11
.
wrapper
.
PKCS11Constants
.*;
import
sun.security.util.DerValue
;
import
sun.security.util.ECUtil
;
/**
* EC KeyFactory implemenation.
...
...
@@ -49,46 +46,56 @@ import sun.security.util.DerValue;
* @since 1.6
*/
final
class
P11ECKeyFactory
extends
P11KeyFactory
{
private
static
Provider
sunECprovider
;
private
static
Provider
getSunECProvider
()
{
if
(
sunECprovider
==
null
)
{
sunECprovider
=
Security
.
getProvider
(
"SunEC"
);
if
(
sunECprovider
==
null
)
{
throw
new
RuntimeException
(
"Cannot load SunEC provider"
);
}
}
return
sunECprovider
;
}
P11ECKeyFactory
(
Token
token
,
String
algorithm
)
{
super
(
token
,
algorithm
);
}
static
ECParameterSpec
getECParameterSpec
(
String
name
)
{
return
NamedCurve
.
getECParameterSpec
(
name
);
return
ECUtil
.
getECParameterSpec
(
getSunECProvider
(),
name
);
}
static
ECParameterSpec
getECParameterSpec
(
int
keySize
)
{
return
NamedCurve
.
getECParameterSpec
(
keySize
);
return
ECUtil
.
getECParameterSpec
(
getSunECProvider
(),
keySize
);
}
// Check that spec is a known supported curve and convert it to our
// ECParameterSpec subclass. If not possible, return null.
static
ECParameterSpec
getECParameterSpec
(
ECParameterSpec
spec
)
{
return
EC
Parameters
.
getNamedCurve
(
spec
);
return
EC
Util
.
getECParameterSpec
(
getSunECProvider
(),
spec
);
}
static
ECParameterSpec
decodeParameters
(
byte
[]
params
)
throws
IOException
{
return
EC
Parameters
.
decodeParameters
(
params
);
return
EC
Util
.
getECParameterSpec
(
getSunECProvider
(),
params
);
}
static
byte
[]
encodeParameters
(
ECParameterSpec
params
)
{
return
EC
Parameters
.
encodeParameters
(
params
);
return
EC
Util
.
encodeECParameterSpec
(
getSunECProvider
(),
params
);
}
static
ECPoint
decodePoint
(
byte
[]
encoded
,
EllipticCurve
curve
)
throws
IOException
{
return
EC
Parameters
.
decodePoint
(
encoded
,
curve
);
return
EC
Util
.
decodePoint
(
encoded
,
curve
);
}
// Used by ECDH KeyAgreement
static
byte
[]
getEncodedPublicValue
(
PublicKey
key
)
throws
InvalidKeyException
{
if
(
key
instanceof
ECPublicKeyImpl
)
{
return
((
ECPublicKeyImpl
)
key
).
getEncodedPublicValue
();
}
else
if
(
key
instanceof
ECPublicKey
)
{
if
(
key
instanceof
ECPublicKey
)
{
ECPublicKey
ecKey
=
(
ECPublicKey
)
key
;
ECPoint
w
=
ecKey
.
getW
();
ECParameterSpec
params
=
ecKey
.
getParams
();
return
EC
Parameters
.
encodePoint
(
w
,
params
.
getCurve
());
return
EC
Util
.
encodePoint
(
w
,
params
.
getCurve
());
}
else
{
// should never occur
throw
new
InvalidKeyException
...
...
@@ -107,7 +114,13 @@ final class P11ECKeyFactory extends P11KeyFactory {
}
else
if
(
"X.509"
.
equals
(
key
.
getFormat
()))
{
// let Sun provider parse for us, then recurse
byte
[]
encoded
=
key
.
getEncoded
();
key
=
new
sun
.
security
.
ec
.
ECPublicKeyImpl
(
encoded
);
try
{
key
=
ECUtil
.
decodeX509ECPublicKey
(
encoded
);
}
catch
(
InvalidKeySpecException
ikse
)
{
throw
new
InvalidKeyException
(
ikse
);
}
return
implTranslatePublicKey
(
key
);
}
else
{
throw
new
InvalidKeyException
(
"PublicKey must be instance "
...
...
@@ -130,7 +143,13 @@ final class P11ECKeyFactory extends P11KeyFactory {
}
else
if
(
"PKCS#8"
.
equals
(
key
.
getFormat
()))
{
// let Sun provider parse for us, then recurse
byte
[]
encoded
=
key
.
getEncoded
();
key
=
new
sun
.
security
.
ec
.
ECPrivateKeyImpl
(
encoded
);
try
{
key
=
ECUtil
.
decodePKCS8ECPrivateKey
(
encoded
);
}
catch
(
InvalidKeySpecException
ikse
)
{
throw
new
InvalidKeyException
(
ikse
);
}
return
implTranslatePrivateKey
(
key
);
}
else
{
throw
new
InvalidKeyException
(
"PrivateKey must be instance "
...
...
@@ -148,7 +167,7 @@ final class P11ECKeyFactory extends P11KeyFactory {
if
(
keySpec
instanceof
X509EncodedKeySpec
)
{
try
{
byte
[]
encoded
=
((
X509EncodedKeySpec
)
keySpec
).
getEncoded
();
PublicKey
key
=
new
sun
.
security
.
ec
.
ECPublicKeyImpl
(
encoded
);
PublicKey
key
=
ECUtil
.
decodeX509ECPublicKey
(
encoded
);
return
implTranslatePublicKey
(
key
);
}
catch
(
InvalidKeyException
e
)
{
throw
new
InvalidKeySpecException
...
...
@@ -178,7 +197,7 @@ final class P11ECKeyFactory extends P11KeyFactory {
if
(
keySpec
instanceof
PKCS8EncodedKeySpec
)
{
try
{
byte
[]
encoded
=
((
PKCS8EncodedKeySpec
)
keySpec
).
getEncoded
();
PrivateKey
key
=
new
sun
.
security
.
ec
.
ECPrivateKeyImpl
(
encoded
);
PrivateKey
key
=
ECUtil
.
decodePKCS8ECPrivateKey
(
encoded
);
return
implTranslatePrivateKey
(
key
);
}
catch
(
GeneralSecurityException
e
)
{
throw
new
InvalidKeySpecException
...
...
@@ -201,10 +220,12 @@ final class P11ECKeyFactory extends P11KeyFactory {
}
}
private
PublicKey
generatePublic
(
ECPoint
point
,
ECParameterSpec
params
)
throws
PKCS11Exception
{
byte
[]
encodedParams
=
ECParameters
.
encodeParameters
(
params
);
private
PublicKey
generatePublic
(
ECPoint
point
,
ECParameterSpec
params
)
throws
PKCS11Exception
{
byte
[]
encodedParams
=
ECUtil
.
encodeECParameterSpec
(
getSunECProvider
(),
params
);
byte
[]
encodedPoint
=
EC
Parameters
.
encodePoint
(
point
,
params
.
getCurve
());
EC
Util
.
encodePoint
(
point
,
params
.
getCurve
());
// Check whether the X9.63 encoding of an EC point shall be wrapped
// in an ASN.1 OCTET STRING
...
...
@@ -238,8 +259,10 @@ final class P11ECKeyFactory extends P11KeyFactory {
}
}
private
PrivateKey
generatePrivate
(
BigInteger
s
,
ECParameterSpec
params
)
throws
PKCS11Exception
{
byte
[]
encodedParams
=
ECParameters
.
encodeParameters
(
params
);
private
PrivateKey
generatePrivate
(
BigInteger
s
,
ECParameterSpec
params
)
throws
PKCS11Exception
{
byte
[]
encodedParams
=
ECUtil
.
encodeECParameterSpec
(
getSunECProvider
(),
params
);
CK_ATTRIBUTE
[]
attributes
=
new
CK_ATTRIBUTE
[]
{
new
CK_ATTRIBUTE
(
CKA_CLASS
,
CKO_PRIVATE_KEY
),
new
CK_ATTRIBUTE
(
CKA_KEY_TYPE
,
CKK_EC
),
...
...
@@ -304,7 +327,7 @@ final class P11ECKeyFactory extends P11KeyFactory {
}
KeyFactory
implGetSoftwareFactory
()
throws
GeneralSecurityException
{
return
KeyFactory
.
getInstance
(
"EC"
,
"SunEC"
);
return
KeyFactory
.
getInstance
(
"EC"
,
getSunECProvider
()
);
}
}
src/share/classes/sun/security/pkcs11/P11Key.java
浏览文件 @
16e18e93
...
...
@@ -47,6 +47,7 @@ import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
import
sun.security.util.DerValue
;
import
sun.security.util.Length
;
import
sun.security.util.ECUtil
;
/**
* Key implementation classes.
...
...
@@ -984,9 +985,9 @@ abstract class P11Key implements Key, Length {
if
(
encoded
==
null
)
{
fetchValues
();
try
{
Key
key
=
new
sun
.
security
.
ec
.
ECPrivateKeyImpl
(
s
,
params
);
Key
key
=
ECUtil
.
generateECPrivateKey
(
s
,
params
);
encoded
=
key
.
getEncoded
();
}
catch
(
InvalidKeyException
e
)
{
}
catch
(
InvalidKey
Spec
Exception
e
)
{
throw
new
ProviderException
(
e
);
}
}
...
...
@@ -1064,9 +1065,8 @@ abstract class P11Key implements Key, Length {
if
(
encoded
==
null
)
{
fetchValues
();
try
{
Key
key
=
new
sun
.
security
.
ec
.
ECPublicKeyImpl
(
w
,
params
);
encoded
=
key
.
getEncoded
();
}
catch
(
InvalidKeyException
e
)
{
return
ECUtil
.
x509EncodeECPublicKey
(
w
,
params
);
}
catch
(
InvalidKeySpecException
e
)
{
throw
new
ProviderException
(
e
);
}
}
...
...
src/share/classes/sun/security/pkcs11/P11KeyStore.java
浏览文件 @
16e18e93
...
...
@@ -65,6 +65,7 @@ import javax.security.auth.callback.UnsupportedCallbackException;
import
sun.security.util.Debug
;
import
sun.security.util.DerValue
;
import
sun.security.util.ECUtil
;
import
sun.security.ec.ECParameters
;
...
...
@@ -1351,7 +1352,8 @@ final class P11KeyStore extends KeyStoreSpi {
token
.
p11
.
C_GetAttributeValue
(
session
.
id
(),
oHandle
,
attrs
);
byte
[]
encodedParams
=
attrs
[
0
].
getByteArray
();
try
{
ECParameterSpec
params
=
ECParameters
.
decodeParameters
(
encodedParams
);
ECParameterSpec
params
=
ECUtil
.
getECParameterSpec
(
null
,
encodedParams
);
keyLength
=
params
.
getCurve
().
getField
().
getFieldSize
();
}
catch
(
IOException
e
)
{
// we do not want to accept key with unsupported parameters
...
...
@@ -1726,7 +1728,8 @@ final class P11KeyStore extends KeyStoreSpi {
idAttrs
[
0
]
=
new
CK_ATTRIBUTE
(
CKA_ID
,
alias
);
}
byte
[]
encodedParams
=
ECParameters
.
encodeParameters
(
ecKey
.
getParams
());
byte
[]
encodedParams
=
ECUtil
.
encodeECParameterSpec
(
null
,
ecKey
.
getParams
());
attrs
=
new
CK_ATTRIBUTE
[]
{
ATTR_TOKEN_TRUE
,
ATTR_CLASS_PKEY
,
...
...
@@ -1901,7 +1904,7 @@ final class P11KeyStore extends KeyStoreSpi {
ECPublicKey
ecPub
=
(
ECPublicKey
)
publicKey
;
ECPoint
point
=
ecPub
.
getW
();
ECParameterSpec
params
=
ecPub
.
getParams
();
byte
[]
encodedPoint
=
EC
Parameters
.
encodePoint
(
point
,
params
.
getCurve
());
byte
[]
encodedPoint
=
EC
Util
.
encodePoint
(
point
,
params
.
getCurve
());
if
(
id
)
{
attrs
[
0
]
=
new
CK_ATTRIBUTE
(
CKA_ID
,
sha1
(
encodedPoint
));
}
...
...
src/share/classes/sun/security/ssl/JsseJce.java
浏览文件 @
16e18e93
...
...
@@ -41,8 +41,7 @@ import java.security.Provider;
import
sun.security.jca.Providers
;
import
sun.security.jca.ProviderList
;
import
sun.security.ec.ECParameters
;
import
sun.security.ec.NamedCurve
;
import
sun.security.util.ECUtil
;
import
static
sun
.
security
.
ssl
.
SunJSSE
.
cryptoProvider
;
...
...
@@ -383,20 +382,20 @@ final class JsseJce {
}
static
ECParameterSpec
getECParameterSpec
(
String
namedCurveOid
)
{
return
NamedCurve
.
getECParameterSpec
(
namedCurveOid
);
return
ECUtil
.
getECParameterSpec
(
cryptoProvider
,
namedCurveOid
);
}
static
String
getNamedCurveOid
(
ECParameterSpec
params
)
{
return
EC
Parameters
.
getCurveName
(
params
);
return
EC
Util
.
getCurveName
(
cryptoProvider
,
params
);
}
static
ECPoint
decodePoint
(
byte
[]
encoded
,
EllipticCurve
curve
)
throws
java
.
io
.
IOException
{
return
EC
Parameters
.
decodePoint
(
encoded
,
curve
);
return
EC
Util
.
decodePoint
(
encoded
,
curve
);
}
static
byte
[]
encodePoint
(
ECPoint
point
,
EllipticCurve
curve
)
{
return
EC
Parameters
.
encodePoint
(
point
,
curve
);
return
EC
Util
.
encodePoint
(
point
,
curve
);
}
// In FIPS mode, set thread local providers; otherwise a no-op.
...
...
src/share/classes/sun/security/util/ECKeySizeParameterSpec.java
0 → 100644
浏览文件 @
16e18e93
/*
* Copyright (c) 2012, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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.
*/
package
sun.security.util
;
import
java.security.spec.AlgorithmParameterSpec
;
import
sun.security.util.ObjectIdentifier
;
/**
* This immutable class is used when randomly generating a key pair and the
* consumer only specifies the length of the key and therefore a curve for that
* key size must be picked from a the list of supported curves using this spec.
*
* @see AlgorithmParameterSpec
* @see ECGenParameterSpec
*/
public
class
ECKeySizeParameterSpec
implements
AlgorithmParameterSpec
{
private
int
keySize
;
/**
* Creates a parameter specification for EC curve
* generation using a standard (or predefined) key size
* <code>keySize</code> in order to generate the corresponding
* (precomputed) elliptic curve.
* <p>
* Note, if the curve of the specified length is not supported,
* <code>AlgorithmParameters.init</code> will throw an exception.
*
* @param keySize the key size of the curve to lookup
*/
public
ECKeySizeParameterSpec
(
int
keySize
)
{
this
.
keySize
=
keySize
;
}
/**
* Returns the key size of this spec.
*
* @return the standard or predefined key size.
*/
public
int
getKeySize
()
{
return
keySize
;
}
}
src/share/classes/sun/security/util/ECUtil.java
0 → 100644
浏览文件 @
16e18e93
/*
* Copyright (c) 2006, 2012, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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.
*/
package
sun.security.util
;
import
java.io.IOException
;
import
java.math.BigInteger
;
import
java.security.*
;
import
java.security.interfaces.*
;
import
java.security.spec.*
;
import
java.util.Arrays
;
import
sun.security.x509.X509Key
;
public
class
ECUtil
{
// Used by SunPKCS11 and SunJSSE.
public
static
ECPoint
decodePoint
(
byte
[]
data
,
EllipticCurve
curve
)
throws
IOException
{
if
((
data
.
length
==
0
)
||
(
data
[
0
]
!=
4
))
{
throw
new
IOException
(
"Only uncompressed point format supported"
);
}
// Per ANSI X9.62, an encoded point is a 1 byte type followed by
// ceiling(log base 2 field-size / 8) bytes of x and the same of y.
int
n
=
(
data
.
length
-
1
)
/
2
;
if
(
n
!=
((
curve
.
getField
().
getFieldSize
()
+
7
)
>>
3
))
{
throw
new
IOException
(
"Point does not match field size"
);
}
byte
[]
xb
=
Arrays
.
copyOfRange
(
data
,
1
,
1
+
n
);
byte
[]
yb
=
Arrays
.
copyOfRange
(
data
,
n
+
1
,
n
+
1
+
n
);
return
new
ECPoint
(
new
BigInteger
(
1
,
xb
),
new
BigInteger
(
1
,
yb
));
}
// Used by SunPKCS11 and SunJSSE.
public
static
byte
[]
encodePoint
(
ECPoint
point
,
EllipticCurve
curve
)
{
// get field size in bytes (rounding up)
int
n
=
(
curve
.
getField
().
getFieldSize
()
+
7
)
>>
3
;
byte
[]
xb
=
trimZeroes
(
point
.
getAffineX
().
toByteArray
());
byte
[]
yb
=
trimZeroes
(
point
.
getAffineY
().
toByteArray
());
if
((
xb
.
length
>
n
)
||
(
yb
.
length
>
n
))
{
throw
new
RuntimeException
(
"Point coordinates do not match field size"
);
}
byte
[]
b
=
new
byte
[
1
+
(
n
<<
1
)];
b
[
0
]
=
4
;
// uncompressed
System
.
arraycopy
(
xb
,
0
,
b
,
n
-
xb
.
length
+
1
,
xb
.
length
);
System
.
arraycopy
(
yb
,
0
,
b
,
b
.
length
-
yb
.
length
,
yb
.
length
);
return
b
;
}
public
static
byte
[]
trimZeroes
(
byte
[]
b
)
{
int
i
=
0
;
while
((
i
<
b
.
length
-
1
)
&&
(
b
[
i
]
==
0
))
{
i
++;
}
if
(
i
==
0
)
{
return
b
;
}
return
Arrays
.
copyOfRange
(
b
,
i
,
b
.
length
);
}
private
static
KeyFactory
getKeyFactory
()
{
try
{
return
KeyFactory
.
getInstance
(
"EC"
,
"SunEC"
);
}
catch
(
NoSuchAlgorithmException
|
NoSuchProviderException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
public
static
ECPublicKey
decodeX509ECPublicKey
(
byte
[]
encoded
)
throws
InvalidKeySpecException
{
KeyFactory
keyFactory
=
getKeyFactory
();
X509EncodedKeySpec
keySpec
=
new
X509EncodedKeySpec
(
encoded
);
return
(
ECPublicKey
)
keyFactory
.
generatePublic
(
keySpec
);
}
public
static
byte
[]
x509EncodeECPublicKey
(
ECPoint
w
,
ECParameterSpec
params
)
throws
InvalidKeySpecException
{
KeyFactory
keyFactory
=
getKeyFactory
();
ECPublicKeySpec
keySpec
=
new
ECPublicKeySpec
(
w
,
params
);
X509Key
key
=
(
X509Key
)
keyFactory
.
generatePublic
(
keySpec
);
return
key
.
getEncoded
();
}
public
static
ECPrivateKey
decodePKCS8ECPrivateKey
(
byte
[]
encoded
)
throws
InvalidKeySpecException
{
KeyFactory
keyFactory
=
getKeyFactory
();
PKCS8EncodedKeySpec
keySpec
=
new
PKCS8EncodedKeySpec
(
encoded
);
return
(
ECPrivateKey
)
keyFactory
.
generatePrivate
(
keySpec
);
}
public
static
ECPrivateKey
generateECPrivateKey
(
BigInteger
s
,
ECParameterSpec
params
)
throws
InvalidKeySpecException
{
KeyFactory
keyFactory
=
getKeyFactory
();
ECPrivateKeySpec
keySpec
=
new
ECPrivateKeySpec
(
s
,
params
);
return
(
ECPrivateKey
)
keyFactory
.
generatePrivate
(
keySpec
);
}
private
static
AlgorithmParameters
getECParameters
(
Provider
p
)
{
try
{
if
(
p
!=
null
)
{
return
AlgorithmParameters
.
getInstance
(
"EC"
,
p
);
}
return
AlgorithmParameters
.
getInstance
(
"EC"
);
}
catch
(
NoSuchAlgorithmException
nsae
)
{
throw
new
RuntimeException
(
nsae
);
}
}
public
static
byte
[]
encodeECParameterSpec
(
Provider
p
,
ECParameterSpec
spec
)
{
AlgorithmParameters
parameters
=
getECParameters
(
p
);
try
{
parameters
.
init
(
spec
);
}
catch
(
InvalidParameterSpecException
ipse
)
{
throw
new
RuntimeException
(
"Not a known named curve: "
+
spec
);
}
try
{
return
parameters
.
getEncoded
();
}
catch
(
IOException
ioe
)
{
// it is a bug if this should happen
throw
new
RuntimeException
(
ioe
);
}
}
public
static
ECParameterSpec
getECParameterSpec
(
Provider
p
,
ECParameterSpec
spec
)
{
AlgorithmParameters
parameters
=
getECParameters
(
p
);
try
{
parameters
.
init
(
spec
);
return
parameters
.
getParameterSpec
(
ECParameterSpec
.
class
);
}
catch
(
InvalidParameterSpecException
ipse
)
{
return
null
;
}
}
public
static
ECParameterSpec
getECParameterSpec
(
Provider
p
,
byte
[]
params
)
throws
IOException
{
AlgorithmParameters
parameters
=
getECParameters
(
p
);
parameters
.
init
(
params
);
try
{
return
parameters
.
getParameterSpec
(
ECParameterSpec
.
class
);
}
catch
(
InvalidParameterSpecException
ipse
)
{
return
null
;
}
}
public
static
ECParameterSpec
getECParameterSpec
(
Provider
p
,
String
name
)
{
AlgorithmParameters
parameters
=
getECParameters
(
p
);
try
{
parameters
.
init
(
new
ECGenParameterSpec
(
name
));
return
parameters
.
getParameterSpec
(
ECParameterSpec
.
class
);
}
catch
(
InvalidParameterSpecException
ipse
)
{
return
null
;
}
}
public
static
ECParameterSpec
getECParameterSpec
(
Provider
p
,
int
keySize
)
{
AlgorithmParameters
parameters
=
getECParameters
(
p
);
try
{
parameters
.
init
(
new
ECKeySizeParameterSpec
(
keySize
));
return
parameters
.
getParameterSpec
(
ECParameterSpec
.
class
);
}
catch
(
InvalidParameterSpecException
ipse
)
{
return
null
;
}
}
public
static
String
getCurveName
(
Provider
p
,
ECParameterSpec
spec
)
{
ECGenParameterSpec
nameSpec
;
AlgorithmParameters
parameters
=
getECParameters
(
p
);
try
{
parameters
.
init
(
spec
);
nameSpec
=
parameters
.
getParameterSpec
(
ECGenParameterSpec
.
class
);
}
catch
(
InvalidParameterSpecException
ipse
)
{
return
null
;
}
if
(
nameSpec
==
null
)
{
return
null
;
}
return
nameSpec
.
getName
();
}
private
ECUtil
()
{}
}
src/share/native/com/sun/java/util/jar/pack/constants.h
浏览文件 @
16e18e93
...
...
@@ -133,6 +133,8 @@ enum {
X_ATTR_Deprecated
=
20
,
X_ATTR_RuntimeVisibleAnnotations
=
21
,
X_ATTR_RuntimeInvisibleAnnotations
=
22
,
X_ATTR_RuntimeVisibleTypeAnnotations
=
27
,
X_ATTR_RuntimeInvisibleTypeAnnotations
=
28
,
X_ATTR_OVERFLOW
=
16
,
X_ATTR_LIMIT_NO_FLAGS_HI
=
32
,
X_ATTR_LIMIT_FLAGS_HI
=
63
,
...
...
@@ -146,6 +148,8 @@ enum {
F(X_ATTR_Deprecated,Deprecated) \
F(X_ATTR_RuntimeVisibleAnnotations,RuntimeVisibleAnnotations) \
F(X_ATTR_RuntimeInvisibleAnnotations,RuntimeInvisibleAnnotations) \
F(X_ATTR_RuntimeVisibleTypeAnnotations,RuntimeVisibleTypeAnnotations) \
F(X_ATTR_RuntimeInvisibleTypeAnnotations,RuntimeInvisibleTypeAnnotations) \
/*F(X_ATTR_Synthetic,Synthetic)*/
\
/*(end)*/
#define CLASS_ATTR_DO(F) \
...
...
src/share/native/com/sun/java/util/jar/pack/unpack.cpp
浏览文件 @
16e18e93
...
...
@@ -2037,41 +2037,68 @@ void unpacker::read_attr_defs() {
MDL0
// annotations:
#define MDL1 \
"[NH[(1)]]" \
"[RSHNH[RUH(1)]]"
"[NH[(1)]]"
MDL1
// member_value:
"[TB"
"(66,67,73,83,90)[KIH]"
"(68)[KDH]"
"(70)[KFH]"
"(74)[KJH]"
"(99)[RSH]"
"(101)[RSHRUH]"
"(115)[RUH]"
"(91)[NH[(0)]]"
"(64)["
// nested annotation:
"RSH"
"NH[RUH(0)]"
"]"
"()[]"
#define MDL2 \
"[RSHNH[RUH(1)]]"
MDL2
// element_value:
#define MDL3 \
"[TB" \
"(66,67,73,83,90)[KIH]" \
"(68)[KDH]" \
"(70)[KFH]" \
"(74)[KJH]" \
"(99)[RSH]" \
"(101)[RSHRUH]" \
"(115)[RUH]" \
"(91)[NH[(0)]]" \
"(64)[" \
/* nested annotation: */
\
"RSH" \
"NH[RUH(0)]" \
"]" \
"()[]" \
"]"
MDL3
);
const
char
*
md_layout_P
=
md_layout
;
const
char
*
md_layout_A
=
md_layout
+
strlen
(
MDL0
);
const
char
*
md_layout_V
=
md_layout
+
strlen
(
MDL0
MDL1
);
const
char
*
md_layout_V
=
md_layout
+
strlen
(
MDL0
MDL1
MDL2
);
assert
(
0
==
strncmp
(
&
md_layout_A
[
-
3
],
")]]["
,
4
));
assert
(
0
==
strncmp
(
&
md_layout_V
[
-
3
],
")]]["
,
4
));
const
char
*
type_md_layout
(
"[NH[(1)(2)(3)]]"
// target-type + target_info
"[TB"
"(0,1)[B]"
"(16)[FH]"
"(17,18)[BB]"
"(19,20,21)[]"
"(22)[B]"
"(23)[H]"
"(64,65)[NH[PHOHH]]"
"(66)[H]"
"(67,68,69,70)[PH]"
"(71,72,73,74,75)[PHB]"
"()[]]"
// target-path
"[NB[BB]]"
// annotation + element_value
MDL2
MDL3
);
for
(
i
=
0
;
i
<
ATTR_CONTEXT_LIMIT
;
i
++
)
{
attr_definitions
&
ad
=
attr_defs
[
i
];
if
(
i
!=
ATTR_CONTEXT_CODE
)
{
ad
.
defineLayout
(
X_ATTR_RuntimeVisibleAnnotations
,
"RuntimeVisibleAnnotations"
,
md_layout_A
);
ad
.
defineLayout
(
X_ATTR_RuntimeInvisibleAnnotations
,
"RuntimeInvisibleAnnotations"
,
md_layout_A
);
if
(
i
!=
ATTR_CONTEXT_METHOD
)
continue
;
if
(
i
==
ATTR_CONTEXT_METHOD
)
{
ad
.
defineLayout
(
METHOD_ATTR_RuntimeVisibleParameterAnnotations
,
"RuntimeVisibleParameterAnnotations"
,
md_layout_P
);
ad
.
defineLayout
(
METHOD_ATTR_RuntimeInvisibleParameterAnnotations
,
...
...
@@ -2079,6 +2106,12 @@ void unpacker::read_attr_defs() {
ad
.
defineLayout
(
METHOD_ATTR_AnnotationDefault
,
"AnnotationDefault"
,
md_layout_V
);
}
}
ad
.
defineLayout
(
X_ATTR_RuntimeVisibleTypeAnnotations
,
"RuntimeVisibleTypeAnnotations"
,
type_md_layout
);
ad
.
defineLayout
(
X_ATTR_RuntimeInvisibleTypeAnnotations
,
"RuntimeInvisibleTypeAnnotations"
,
type_md_layout
);
}
attr_definition_headers
.
readData
(
attr_definition_count
);
attr_definition_name
.
readData
(
attr_definition_count
);
...
...
@@ -2433,6 +2466,7 @@ void unpacker::read_attrs(int attrc, int obj_count) {
ad
.
readBandData
(
X_ATTR_RuntimeVisibleAnnotations
);
ad
.
readBandData
(
X_ATTR_RuntimeInvisibleAnnotations
);
CHECK
;
count
=
ad
.
predefCount
(
CLASS_ATTR_InnerClasses
);
class_InnerClasses_N
.
readData
(
count
);
...
...
@@ -2452,6 +2486,10 @@ void unpacker::read_attrs(int attrc, int obj_count) {
class_ClassFile_version_minor_H
.
readData
(
count
);
class_ClassFile_version_major_H
.
readData
(
count
);
CHECK
;
ad
.
readBandData
(
X_ATTR_RuntimeVisibleTypeAnnotations
);
ad
.
readBandData
(
X_ATTR_RuntimeInvisibleTypeAnnotations
);
CHECK
;
break
;
case
ATTR_CONTEXT_FIELD
:
...
...
@@ -2467,6 +2505,10 @@ void unpacker::read_attrs(int attrc, int obj_count) {
ad
.
readBandData
(
X_ATTR_RuntimeVisibleAnnotations
);
ad
.
readBandData
(
X_ATTR_RuntimeInvisibleAnnotations
);
CHECK
;
ad
.
readBandData
(
X_ATTR_RuntimeVisibleTypeAnnotations
);
ad
.
readBandData
(
X_ATTR_RuntimeInvisibleTypeAnnotations
);
CHECK
;
break
;
case
ATTR_CONTEXT_METHOD
:
...
...
@@ -2497,6 +2539,11 @@ void unpacker::read_attrs(int attrc, int obj_count) {
method_MethodParameters_name_RUN
.
readData
(
count
);
method_MethodParameters_flag_FH
.
readData
(
count
);
CHECK
;
ad
.
readBandData
(
X_ATTR_RuntimeVisibleTypeAnnotations
);
ad
.
readBandData
(
X_ATTR_RuntimeInvisibleTypeAnnotations
);
CHECK
;
break
;
case
ATTR_CONTEXT_CODE
:
...
...
@@ -2566,18 +2613,22 @@ void unpacker::read_attrs(int attrc, int obj_count) {
count
=
ad
.
predefCount
(
CODE_ATTR_LineNumberTable
);
code_LineNumberTable_N
.
readData
(
count
);
CHECK
;
count
=
code_LineNumberTable_N
.
getIntTotal
();
code_LineNumberTable_bci_P
.
readData
(
count
);
code_LineNumberTable_line
.
readData
(
count
);
CHECK
;
count
=
ad
.
predefCount
(
CODE_ATTR_LocalVariableTable
);
code_LocalVariableTable_N
.
readData
(
count
);
CHECK
;
count
=
code_LocalVariableTable_N
.
getIntTotal
();
code_LocalVariableTable_bci_P
.
readData
(
count
);
code_LocalVariableTable_span_O
.
readData
(
count
);
code_LocalVariableTable_name_RU
.
readData
(
count
);
code_LocalVariableTable_type_RS
.
readData
(
count
);
code_LocalVariableTable_slot
.
readData
(
count
);
CHECK
;
count
=
ad
.
predefCount
(
CODE_ATTR_LocalVariableTypeTable
);
code_LocalVariableTypeTable_N
.
readData
(
count
);
...
...
@@ -2587,6 +2638,12 @@ void unpacker::read_attrs(int attrc, int obj_count) {
code_LocalVariableTypeTable_name_RU
.
readData
(
count
);
code_LocalVariableTypeTable_type_RS
.
readData
(
count
);
code_LocalVariableTypeTable_slot
.
readData
(
count
);
CHECK
;
ad
.
readBandData
(
X_ATTR_RuntimeVisibleTypeAnnotations
);
ad
.
readBandData
(
X_ATTR_RuntimeInvisibleTypeAnnotations
);
CHECK
;
break
;
}
...
...
@@ -5151,7 +5208,7 @@ void unpacker::redirect_stdio() {
#ifndef PRODUCT
int
unpacker
::
printcr_if_verbose
(
int
level
,
const
char
*
fmt
...)
{
if
(
verbose
<
level
+
10
)
return
0
;
if
(
verbose
<
level
)
return
0
;
va_list
vl
;
va_start
(
vl
,
fmt
);
char
fmtbuf
[
300
];
...
...
test/ProblemList.txt
浏览文件 @
16e18e93
...
...
@@ -214,10 +214,6 @@ sun/misc/URLClassPath/ClassnameCharTest.java generic-all
# 8014719
sun/net/www/http/HttpClient/ProxyTest.java generic-all
# 7150552
sun/net/www/protocol/http/B6299712.java macosx-all
java/net/CookieHandler/CookieManagerTest.java macosx-all
############################################################################
# jdk_io
...
...
test/java/lang/reflect/Proxy/Basic1.java
浏览文件 @
16e18e93
...
...
@@ -22,7 +22,7 @@
*/
/* @test
* @bug 4227192
* @bug 4227192
4487672
* @summary This is a basic functional test of the dynamic proxy API (part 1).
* @author Peter Jones
*
...
...
@@ -42,15 +42,15 @@ public class Basic1 {
"\nBasic functional test of dynamic proxy API, part 1\n"
);
try
{
Class
[]
interfaces
=
new
Class
[]
{
Runnable
.
class
,
Observer
.
class
};
Class
<?>
[]
interfaces
=
new
Class
<?>
[]
{
Runnable
.
class
,
Observer
.
class
};
ClassLoader
loader
=
ClassLoader
.
getSystemClassLoader
();
/*
* Generate a proxy class.
*/
Class
proxyClass
=
Proxy
.
getProxyClass
(
loader
,
interfaces
);
Class
<?>
proxyClass
=
Proxy
.
getProxyClass
(
loader
,
interfaces
);
System
.
err
.
println
(
"+ generated proxy class: "
+
proxyClass
);
/*
...
...
@@ -72,19 +72,19 @@ public class Basic1 {
/*
* Verify that it is assignable to the proxy interfaces.
*/
for
(
int
i
=
0
;
i
<
interfaces
.
length
;
i
++
)
{
if
(!
int
erfaces
[
i
]
.
isAssignableFrom
(
proxyClass
))
{
for
(
Class
<?>
intf
:
interfaces
)
{
if
(!
int
f
.
isAssignableFrom
(
proxyClass
))
{
throw
new
RuntimeException
(
"proxy class not assignable to proxy interface "
+
int
erfaces
[
i
]
.
getName
());
int
f
.
getName
());
}
}
/*
* Verify that it has the given permutation of interfaces.
*/
List
l1
=
Arrays
.
asList
(
interfaces
);
List
l2
=
Arrays
.
asList
(
proxyClass
.
getInterfaces
());
List
<
Class
<?>>
l1
=
Arrays
.
asList
(
interfaces
);
List
<
Class
<?>>
l2
=
Arrays
.
asList
(
proxyClass
.
getInterfaces
());
System
.
err
.
println
(
"+ proxy class's interfaces: "
+
l2
);
if
(!
l1
.
equals
(
l2
))
{
throw
new
RuntimeException
(
...
...
@@ -118,14 +118,26 @@ public class Basic1 {
* Verify that it has a constructor that takes an
* InvocationHandler instance.
*/
Constructor
cons
=
proxyClass
.
getConstructor
(
new
Class
[]
{
InvocationHandler
.
class
});
Constructor
<?>
cons
=
proxyClass
.
getConstructor
(
InvocationHandler
.
class
);
/*
* Test constructor with null InvocationHandler
*/
try
{
cons
.
newInstance
(
new
Object
[]
{
null
});
throw
new
RuntimeException
(
"Expected NullPointerException thrown"
);
}
catch
(
InvocationTargetException
e
)
{
Throwable
t
=
e
.
getTargetException
();
if
(!(
t
instanceof
NullPointerException
))
{
throw
t
;
}
}
/*
* Construct a proxy instance.
*/
Handler
handler
=
new
Handler
();
Object
proxy
=
cons
.
newInstance
(
new
Object
[]
{
handler
}
);
Object
proxy
=
cons
.
newInstance
(
handler
);
handler
.
currentProxy
=
proxy
;
/*
...
...
@@ -141,7 +153,7 @@ public class Basic1 {
System
.
err
.
println
(
"\nTEST PASSED"
);
}
catch
(
Exception
e
)
{
}
catch
(
Throwable
e
)
{
System
.
err
.
println
(
"\nTEST FAILED:"
);
e
.
printStackTrace
();
throw
new
RuntimeException
(
"TEST FAILED: "
+
e
.
toString
());
...
...
test/java/net/CookieHandler/CookieManagerTest.java
浏览文件 @
16e18e93
...
...
@@ -24,21 +24,25 @@
/*
* @test
* @summary Unit test for java.net.CookieManager
* @bug 6244040
* @library ../../../sun/net/www/httptest/
* @build HttpCallback TestHttpServer ClosedChannelList HttpTransaction
* @bug 6244040 7150552
* @run main/othervm -ea CookieManagerTest
* @author Edward Wang
*/
import
java.net.*
;
import
java.util.*
;
import
java.io.*
;
import
sun.net.www.MessageHeader
;
import
com.sun.net.httpserver.*
;
import
java.io.IOException
;
import
java.net.CookieHandler
;
import
java.net.CookieManager
;
import
java.net.CookiePolicy
;
import
java.net.HttpURLConnection
;
import
java.net.InetAddress
;
import
java.net.InetSocketAddress
;
import
java.net.URL
;
public
class
CookieManagerTest
{
static
CookieHttpTransaction
httpTrans
;
static
TestHttpServer
server
;
static
CookieTransactionHandler
httpTrans
;
static
HttpServer
server
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
startHttpServer
();
...
...
@@ -49,41 +53,48 @@ public class CookieManagerTest {
}
}
public
static
void
startHttpServer
()
{
try
{
httpTrans
=
new
CookieHttpTransaction
();
server
=
new
TestHttpServer
(
httpTrans
,
1
,
1
,
0
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
public
static
void
startHttpServer
()
throws
IOException
{
httpTrans
=
new
CookieTransactionHandler
();
server
=
HttpServer
.
create
(
new
InetSocketAddress
(
0
),
0
);
server
.
createContext
(
"/"
,
httpTrans
);
server
.
start
();
}
public
static
void
makeHttpCall
()
{
public
static
void
makeHttpCall
()
throws
IOException
{
try
{
System
.
out
.
println
(
"http server listen on: "
+
server
.
getLocalPort
());
System
.
out
.
println
(
"http server listenining on: "
+
server
.
getAddress
().
getPort
());
// install CookieManager to use
CookieHandler
.
setDefault
(
new
CookieManager
());
for
(
int
i
=
0
;
i
<
CookieHttpTransaction
.
testCount
;
i
++)
{
System
.
out
.
println
(
"====== CookieManager test "
+
(
i
+
1
)
+
" ======"
);
((
CookieManager
)
CookieHandler
.
getDefault
()).
setCookiePolicy
(
CookieHttpTransaction
.
testPolicies
[
i
]);
((
CookieManager
)
CookieHandler
.
getDefault
()).
getCookieStore
().
removeAll
();
URL
url
=
new
URL
(
"http"
,
InetAddress
.
getLocalHost
().
getHostAddress
(),
server
.
getLocalPort
(),
CookieHttpTransaction
.
testCases
[
i
][
0
].
serverPath
);
for
(
int
i
=
0
;
i
<
CookieTransactionHandler
.
testCount
;
i
++)
{
System
.
out
.
println
(
"====== CookieManager test "
+
(
i
+
1
)
+
" ======"
);
((
CookieManager
)
CookieHandler
.
getDefault
())
.
setCookiePolicy
(
CookieTransactionHandler
.
testPolicies
[
i
]);
((
CookieManager
)
CookieHandler
.
getDefault
())
.
getCookieStore
().
removeAll
();
URL
url
=
new
URL
(
"http"
,
InetAddress
.
getLocalHost
().
getHostAddress
(),
server
.
getAddress
().
getPort
(),
CookieTransactionHandler
.
testCases
[
i
][
0
]
.
serverPath
);
HttpURLConnection
uc
=
(
HttpURLConnection
)
url
.
openConnection
();
uc
.
getResponseCode
();
uc
.
disconnect
();
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
finally
{
server
.
terminate
(
);
server
.
stop
(
0
);
}
}
}
class
CookieHttpTransaction
implements
HttpCallback
{
class
CookieTransactionHandler
implements
HttpHandler
{
private
int
testcaseDone
=
0
;
private
int
testDone
=
0
;
public
static
boolean
badRequest
=
false
;
// the main test control logic will also loop exactly this number
// to send http request
...
...
@@ -91,6 +102,47 @@ class CookieHttpTransaction implements HttpCallback {
private
String
localHostAddr
=
"127.0.0.1"
;
@Override
public
void
handle
(
HttpExchange
exchange
)
throws
IOException
{
if
(
testDone
<
testCases
[
testcaseDone
].
length
)
{
// still have other tests to run,
// check the Cookie header and then redirect it
if
(
testDone
>
0
)
checkRequest
(
exchange
.
getRequestHeaders
());
exchange
.
getResponseHeaders
().
add
(
"Location"
,
testCases
[
testcaseDone
][
testDone
].
serverPath
);
exchange
.
getResponseHeaders
()
.
add
(
testCases
[
testcaseDone
][
testDone
].
headerToken
,
testCases
[
testcaseDone
][
testDone
].
cookieToSend
);
exchange
.
sendResponseHeaders
(
302
,
-
1
);
testDone
++;
}
else
{
// the last test of this test case
if
(
testDone
>
0
)
checkRequest
(
exchange
.
getRequestHeaders
());
testcaseDone
++;
testDone
=
0
;
exchange
.
sendResponseHeaders
(
200
,
-
1
);
}
exchange
.
close
();
}
private
void
checkRequest
(
Headers
hdrs
)
{
assert
testDone
>
0
;
String
cookieHeader
=
hdrs
.
getFirst
(
"Cookie"
);
if
(
cookieHeader
!=
null
&&
cookieHeader
.
equalsIgnoreCase
(
testCases
[
testcaseDone
][
testDone
-
1
]
.
cookieToRecv
))
{
System
.
out
.
printf
(
"%15s %s\n"
,
"PASSED:"
,
cookieHeader
);
}
else
{
System
.
out
.
printf
(
"%15s %s\n"
,
"FAILED:"
,
cookieHeader
);
System
.
out
.
printf
(
"%15s %s\n\n"
,
"should be:"
,
testCases
[
testcaseDone
][
testDone
-
1
].
cookieToRecv
);
badRequest
=
true
;
}
}
// test cases
public
static
class
CookieTestCase
{
public
String
headerToken
;
...
...
@@ -106,13 +158,17 @@ class CookieHttpTransaction implements HttpCallback {
}
};
//
// these two must match each other, i.e. testCases.length == testPolicies.length
//
public
static
CookieTestCase
[][]
testCases
=
null
;
// the test cases to run; each test case may contain multiple roundtrips
public
static
CookiePolicy
[]
testPolicies
=
null
;
// indicates what CookiePolicy to use with each test cases
/*
* these two must match each other,
* i.e. testCases.length == testPolicies.length
*/
// the test cases to run; each test case may contain multiple roundtrips
public
static
CookieTestCase
[][]
testCases
=
null
;
// indicates what CookiePolicy to use with each test cases
public
static
CookiePolicy
[]
testPolicies
=
null
;
Cookie
HttpTransaction
()
{
Cookie
TransactionHandler
()
{
testCases
=
new
CookieTestCase
[
testCount
][];
testPolicies
=
new
CookiePolicy
[
testCount
];
...
...
@@ -126,7 +182,9 @@ class CookieHttpTransaction implements HttpCallback {
testPolicies
[
count
]
=
CookiePolicy
.
ACCEPT_ORIGINAL_SERVER
;
testCases
[
count
++]
=
new
CookieTestCase
[]{
new
CookieTestCase
(
"Set-Cookie"
,
"CUSTOMER=WILE:BOB; path=/; expires=Sat, 09-Nov-2030 23:12:40 GMT;"
+
"domain=."
+
localHostAddr
,
"CUSTOMER=WILE:BOB; "
+
"path=/; expires=Sat, 09-Nov-2030 23:12:40 GMT;"
+
"domain=."
+
localHostAddr
,
"CUSTOMER=WILE:BOB"
,
"/"
),
...
...
@@ -172,12 +230,17 @@ class CookieHttpTransaction implements HttpCallback {
),
new
CookieTestCase
(
"Set-Cookie2"
,
"Part_Number=\"Rocket_Launcher_0001\"; Version=\"1\";Path=\"/acme\";"
+
"domain=."
+
localHostAddr
,
"$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";"
+
"$Domain=\"."
+
localHostAddr
+
"\""
+
"; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";"
+
"$Domain=\"."
+
localHostAddr
+
"\""
,
"$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";"
+
"$Domain=\"."
+
localHostAddr
+
"\""
+
"; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";"
+
"$Domain=\"."
+
localHostAddr
+
"\""
,
"/acme/pickitem"
),
new
CookieTestCase
(
"Set-Cookie2"
,
"Shipping=\"FedEx\"; Version=\"1\"; Path=\"/acme\";"
+
"domain=."
+
localHostAddr
,
"$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";"
+
"$Domain=\"."
+
localHostAddr
+
"\""
+
"; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";"
+
"$Domain=\"."
+
localHostAddr
+
"\""
+
"; Shipping=\"FedEx\";$Path=\"/acme\";"
+
"$Domain=\"."
+
localHostAddr
+
"\""
,
"$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";"
+
"$Domain=\"."
+
localHostAddr
+
"\""
+
"; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";"
+
"$Domain=\"."
+
localHostAddr
+
"\""
+
"; Shipping=\"FedEx\";$Path=\"/acme\";"
+
"$Domain=\"."
+
localHostAddr
+
"\""
,
"/acme/shipping"
)
};
...
...
@@ -191,8 +254,11 @@ class CookieHttpTransaction implements HttpCallback {
"/acme/ammo"
),
new
CookieTestCase
(
"Set-Cookie2"
,
"Part_Number=\"Riding_Rocket_0023\"; Version=\"1\"; Path=\"/acme/ammo\";"
+
"domain=."
+
localHostAddr
,
"$Version=\"1\"; Part_Number=\"Riding_Rocket_0023\";$Path=\"/acme/ammo\";$Domain=\"."
+
localHostAddr
+
"\""
+
"; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";"
+
"$Domain=\"."
+
localHostAddr
+
"\""
,
"Part_Number=\"Riding_Rocket_0023\"; Version=\"1\"; Path=\"/acme/ammo\";"
+
"domain=."
+
localHostAddr
,
"$Version=\"1\"; Part_Number=\"Riding_Rocket_0023\";$Path=\"/acme/ammo\";$Domain=\"."
+
localHostAddr
+
"\""
+
"; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";"
+
"$Domain=\"."
+
localHostAddr
+
"\""
,
"/acme/ammo"
),
new
CookieTestCase
(
""
,
...
...
@@ -228,60 +294,19 @@ class CookieHttpTransaction implements HttpCallback {
),
new
CookieTestCase
(
"Set-Cookie2"
,
"Part_Number=\"Rocket_Launcher_0001\"; Version=\"1\";Path=\"/acme\""
,
"$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";$Domain=\""
+
localHostAddr
+
"\""
+
"; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";$Domain=\""
+
localHostAddr
+
"\""
,
"$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";$Domain=\""
+
localHostAddr
+
"\""
+
"; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";$Domain=\""
+
localHostAddr
+
"\""
,
"/acme/pickitem"
),
new
CookieTestCase
(
"Set-Cookie2"
,
"Shipping=\"FedEx\"; Version=\"1\"; Path=\"/acme\""
,
"$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";$Domain=\""
+
localHostAddr
+
"\""
+
"; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";$Domain=\""
+
localHostAddr
+
"\""
+
"; Shipping=\"FedEx\";$Path=\"/acme\";$Domain=\""
+
localHostAddr
+
"\""
,
"$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";$Domain=\""
+
localHostAddr
+
"\""
+
"; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";$Domain=\""
+
localHostAddr
+
"\""
+
"; Shipping=\"FedEx\";$Path=\"/acme\";$Domain=\""
+
localHostAddr
+
"\""
,
"/acme/shipping"
)
};
assert
count
==
testCount
;
}
private
int
testcaseDone
=
0
;
private
int
testDone
=
0
;
/*
* Our http server which is conducted by testCases array
*/
public
void
request
(
HttpTransaction
trans
)
{
try
{
if
(
testDone
<
testCases
[
testcaseDone
].
length
)
{
// still have other tests to run,
// check the Cookie header and then redirect it
if
(
testDone
>
0
)
checkResquest
(
trans
);
trans
.
addResponseHeader
(
"Location"
,
testCases
[
testcaseDone
][
testDone
].
serverPath
);
trans
.
addResponseHeader
(
testCases
[
testcaseDone
][
testDone
].
headerToken
,
testCases
[
testcaseDone
][
testDone
].
cookieToSend
);
testDone
++;
trans
.
sendResponse
(
302
,
"Moved Temporarily"
);
}
else
{
// the last test of this test case
if
(
testDone
>
0
)
checkResquest
(
trans
);
testcaseDone
++;
testDone
=
0
;
trans
.
sendResponse
(
200
,
"OK"
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
private
void
checkResquest
(
HttpTransaction
trans
)
{
String
cookieHeader
=
null
;
assert
testDone
>
0
;
cookieHeader
=
trans
.
getRequestHeader
(
"Cookie"
);
if
(
cookieHeader
!=
null
&&
cookieHeader
.
equalsIgnoreCase
(
testCases
[
testcaseDone
][
testDone
-
1
].
cookieToRecv
))
{
System
.
out
.
printf
(
"%15s %s\n"
,
"PASSED:"
,
cookieHeader
);
}
else
{
System
.
out
.
printf
(
"%15s %s\n"
,
"FAILED:"
,
cookieHeader
);
System
.
out
.
printf
(
"%15s %s\n\n"
,
"should be:"
,
testCases
[
testcaseDone
][
testDone
-
1
].
cookieToRecv
);
badRequest
=
true
;
}
}
}
test/java/util/logging/bundlesearch/IndirectlyLoadABundle.java
浏览文件 @
16e18e93
...
...
@@ -23,41 +23,26 @@
import
java.lang.reflect.InvocationTargetException
;
import
java.lang.reflect.Method
;
import
java.net.MalformedURLException
;
import
java.net.URL
;
import
java.net.URLClassLoader
;
import
java.nio.file.Paths
;
import
java.util.logging.Logger
;
/**
* This class is used to ensure that a resource bundle loadable by a classloader
* is on the caller's stack, but not on the classpath or TCCL
to ensure
that
* Logger.getLogger() can
't load the bundle via a stack search
* is on the caller's stack, but not on the classpath or TCCL
. It tests
that
* Logger.getLogger() can
load the bundle via the immediate caller's classloader
*
* @author Jim Gish
*/
public
class
IndirectlyLoadABundle
{
private
final
static
String
rbName
=
"
Stack
SearchableResource"
;
private
final
static
String
rbName
=
"
Caller
SearchableResource"
;
public
boolean
loadAndTest
()
throws
Throwable
{
// Find out where we are running from so we can setup the URLClassLoader URLs
// test.src and test.classes will be set if running in jtreg, but probably
// not otherwise
String
testDir
=
System
.
getProperty
(
"test.src"
,
System
.
getProperty
(
"user.dir"
));
String
testClassesDir
=
System
.
getProperty
(
"test.classes"
,
System
.
getProperty
(
"user.dir"
));
String
sep
=
System
.
getProperty
(
"file.separator"
);
URL
[]
urls
=
new
URL
[
2
];
// Allow for both jtreg and standalone cases here
urls
[
0
]
=
Paths
.
get
(
testDir
,
"resources"
).
toUri
().
toURL
();
urls
[
1
]
=
Paths
.
get
(
testClassesDir
).
toUri
().
toURL
();
System
.
out
.
println
(
"INFO: urls[0] = "
+
urls
[
0
]);
System
.
out
.
println
(
"INFO: urls[1] = "
+
urls
[
1
]);
// Make sure we can find it via the URLClassLoader
URLClassLoader
yetAnotherResourceCL
=
new
URLClassLoader
(
urls
,
null
);
URLClassLoader
yetAnotherResourceCL
=
new
URLClassLoader
(
getURLs
()
,
null
);
if
(!
testForValidResourceSetup
(
yetAnotherResourceCL
))
{
throw
new
Exception
(
"Couldn't directly load bundle "
+
rbName
+
" as expected. Test config problem"
);
...
...
@@ -70,23 +55,109 @@ public class IndirectlyLoadABundle {
+
" able to. Test config problem"
);
}
Class
<?>
loadItUpClazz
=
Class
.
forName
(
"LoadItUp"
,
true
,
yetAnotherResourceCL
);
Class
<?>
loadItUpClazz
=
Class
.
forName
(
"LoadItUp1"
,
true
,
yetAnotherResourceCL
);
ClassLoader
actual
=
loadItUpClazz
.
getClassLoader
();
if
(
actual
!=
yetAnotherResourceCL
)
{
throw
new
Exception
(
"LoadItUp was loaded by an unexpected CL: "
+
actual
);
throw
new
Exception
(
"LoadItUp
1
was loaded by an unexpected CL: "
+
actual
);
}
Object
loadItUp
=
loadItUpClazz
.
newInstance
();
Method
testMethod
=
loadItUpClazz
.
getMethod
(
"test"
,
String
.
class
);
Method
testMethod
=
loadItUpClazz
.
getMethod
(
"getLogger"
,
String
.
class
,
String
.
class
);
try
{
return
(
Logger
)
testMethod
.
invoke
(
loadItUp
,
"NestedLogger1"
,
rbName
)
!=
null
;
}
catch
(
InvocationTargetException
ex
)
{
throw
ex
.
getTargetException
();
}
}
public
boolean
testGetAnonymousLogger
()
throws
Throwable
{
// Test getAnonymousLogger()
URLClassLoader
loadItUpCL
=
new
URLClassLoader
(
getURLs
(),
null
);
Class
<?>
loadItUpClazz
=
Class
.
forName
(
"LoadItUp1"
,
true
,
loadItUpCL
);
ClassLoader
actual
=
loadItUpClazz
.
getClassLoader
();
if
(
actual
!=
loadItUpCL
)
{
throw
new
Exception
(
"LoadItUp1 was loaded by an unexpected CL: "
+
actual
);
}
Object
loadItUpAnon
=
loadItUpClazz
.
newInstance
();
Method
testAnonMethod
=
loadItUpClazz
.
getMethod
(
"getAnonymousLogger"
,
String
.
class
);
try
{
return
(
Logger
)
testAnonMethod
.
invoke
(
loadItUpAnon
,
rbName
)
!=
null
;
}
catch
(
InvocationTargetException
ex
)
{
throw
ex
.
getTargetException
();
}
}
public
boolean
testGetLoggerGetLoggerWithBundle
()
throws
Throwable
{
// test getLogger("NestedLogger2"); followed by
// getLogger("NestedLogger2", rbName) to see if the bundle is found
//
URL
[]
urls
=
getURLs
();
if
(
getLoggerWithNewCL
(
urls
,
"NestedLogger2"
,
null
))
{
return
getLoggerWithNewCL
(
urls
,
"NestedLogger2"
,
rbName
);
}
else
{
throw
new
Exception
(
"TEST FAILED: first call to getLogger() failed "
+
" in IndirectlyLoadABundle."
+
"testGetLoggerGetLoggerWithBundle"
);
}
}
private
URL
[]
getURLs
()
throws
MalformedURLException
{
// Find out where we are running from so we can setup the URLClassLoader URLs
// test.src and test.classes will be set if running in jtreg, but probably
// not otherwise
String
testDir
=
System
.
getProperty
(
"test.src"
,
System
.
getProperty
(
"user.dir"
));
String
testClassesDir
=
System
.
getProperty
(
"test.classes"
,
System
.
getProperty
(
"user.dir"
));
URL
[]
urls
=
new
URL
[
2
];
// Allow for both jtreg and standalone cases here
urls
[
0
]
=
Paths
.
get
(
testDir
,
"resources"
).
toUri
().
toURL
();
urls
[
1
]
=
Paths
.
get
(
testClassesDir
).
toUri
().
toURL
();
return
urls
;
}
private
boolean
getLoggerWithNewCL
(
URL
[]
urls
,
String
loggerName
,
String
bundleName
)
throws
Throwable
{
Logger
result
=
null
;;
// Test getLogger("foo"); getLogger("foo", "rbName");
// First do the getLogger() call with no bundle name
URLClassLoader
getLoggerCL
=
new
URLClassLoader
(
urls
,
null
);
Class
<?>
loadItUpClazz1
=
Class
.
forName
(
"LoadItUp1"
,
true
,
getLoggerCL
);
ClassLoader
actual
=
loadItUpClazz1
.
getClassLoader
();
if
(
actual
!=
getLoggerCL
)
{
throw
new
Exception
(
"LoadItUp1 was loaded by an unexpected CL: "
+
actual
);
}
Object
loadItUp1
=
loadItUpClazz1
.
newInstance
();
if
(
bundleName
!=
null
)
{
Method
getLoggerMethod
=
loadItUpClazz1
.
getMethod
(
"getLogger"
,
String
.
class
,
String
.
class
);
try
{
result
=
(
Logger
)
getLoggerMethod
.
invoke
(
loadItUp1
,
loggerName
,
bundleName
);
}
catch
(
InvocationTargetException
ex
)
{
throw
ex
.
getTargetException
();
}
}
else
{
Method
getLoggerMethod
=
loadItUpClazz1
.
getMethod
(
"getLogger"
,
String
.
class
);
try
{
return
(
Boolean
)
testMethod
.
invoke
(
loadItUp
,
rb
Name
);
result
=
(
Logger
)
getLoggerMethod
.
invoke
(
loadItUp1
,
logger
Name
);
}
catch
(
InvocationTargetException
ex
)
{
throw
ex
.
getTargetException
();
}
}
return
result
!=
null
;
}
private
boolean
testForValidResourceSetup
(
ClassLoader
cl
)
{
// First make sure the test environment is setup properly and the bundle
actually
// exists
// First make sure the test environment is setup properly and the bundle
//
actually
exists
return
ResourceBundleSearchTest
.
isOnClassPath
(
rbName
,
cl
);
}
}
test/java/util/logging/bundlesearch/LoadItUp1.java
0 → 100644
浏览文件 @
16e18e93
/*
* 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.
*/
import
java.util.logging.Logger
;
/*
* This class is loaded onto the call stack when the getLogger methods are
* called and then the classes classloader can be used to find a bundle in
* the same directory as the class. However, Logger is not allowed
* to find the bundle by looking up the stack for this classloader.
* We verify that this cannot happen.
*
* @author Jim Gish
*/
public
class
LoadItUp1
{
public
Logger
getAnonymousLogger
(
String
rbName
)
throws
Exception
{
// we should not be able to find the resource in this directory via
// getLogger calls. The only way that would be possible given this setup
// is that if Logger.getLogger searched up the call stack
return
Logger
.
getAnonymousLogger
(
rbName
);
}
public
Logger
getLogger
(
String
loggerName
)
{
return
Logger
.
getLogger
(
loggerName
);
}
public
Logger
getLogger
(
String
loggerName
,
String
bundleName
)
{
return
Logger
.
getLogger
(
loggerName
,
bundleName
);
}
}
test/java/util/logging/bundlesearch/LoadItUp.java
→
test/java/util/logging/bundlesearch/LoadItUp
2
.java
浏览文件 @
16e18e93
...
...
@@ -24,15 +24,15 @@ import java.util.MissingResourceException;
import
java.util.logging.Logger
;
/*
* This class is loaded onto the call stack
when the test method is called
*
and then its classloader can be used to find a property bundle in the sam
e
*
directory as the class. However, Logger is not allowed
*
to find the bundle by looking up the stack for this classloader.
*
We verify that this cannot happen
.
* This class is loaded onto the call stack
by LoadItUp2Invoker from a separate
*
classloader. LoadItUp2Invoker was loaded by a class loader that does hav
e
*
access to the bundle, but the class loader used to load this class does not.
*
Thus the logging code should not be able to see the resource bundle unless
*
it has more than a single level stack crawl, which is not allowed
.
*
* @author Jim Gish
*/
public
class
LoadItUp
{
public
class
LoadItUp
2
{
private
final
static
boolean
DEBUG
=
false
;
...
...
@@ -46,16 +46,16 @@ public class LoadItUp {
private
boolean
lookupBundle
(
String
rbName
)
{
// See if Logger.getLogger can find the resource in this directory
try
{
Logger
aLogger
=
Logger
.
getLogger
(
"NestedLogger"
,
rbName
);
Logger
aLogger
=
Logger
.
getLogger
(
"NestedLogger
2
"
,
rbName
);
}
catch
(
MissingResourceException
re
)
{
if
(
DEBUG
)
{
System
.
out
.
println
(
"As expected, LoadItUp.lookupBundle() did not find the bundle "
"As expected, LoadItUp
2
.lookupBundle() did not find the bundle "
+
rbName
);
}
return
false
;
}
System
.
out
.
println
(
"FAILED: LoadItUp.lookupBundle() found the bundle "
System
.
out
.
println
(
"FAILED: LoadItUp
2
.lookupBundle() found the bundle "
+
rbName
+
" using a stack search."
);
return
true
;
}
...
...
test/java/util/logging/bundlesearch/LoadItUp2Invoker.java
0 → 100644
浏览文件 @
16e18e93
/*
* 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.
*/
import
java.lang.reflect.InvocationTargetException
;
import
java.lang.reflect.Method
;
import
java.net.URL
;
import
java.net.URLClassLoader
;
/**
* This class is loaded by a class loader that can see the resource. It creates
* a new classloader for LoadItUp2 which cannot see the resource. So, 2 levels
* up the call chain we have a class/classloader that can see the resource, but
* 1 level up the class/classloader cannot.
*
* @author Jim Gish
*/
public
class
LoadItUp2Invoker
{
private
URLClassLoader
cl
;
private
String
rbName
;
private
Object
loadItUp2
;
private
Method
testMethod
;
public
void
setup
(
URL
[]
urls
,
String
rbName
)
throws
ReflectiveOperationException
{
this
.
cl
=
new
URLClassLoader
(
urls
,
null
);
this
.
rbName
=
rbName
;
// Using this new classloader, load the actual test class
// which is now two levels removed from the original caller
Class
<?>
loadItUp2Clazz
=
Class
.
forName
(
"LoadItUp2"
,
true
,
cl
);
this
.
loadItUp2
=
loadItUp2Clazz
.
newInstance
();
this
.
testMethod
=
loadItUp2Clazz
.
getMethod
(
"test"
,
String
.
class
);
}
public
Boolean
test
()
throws
Throwable
{
try
{
return
(
Boolean
)
testMethod
.
invoke
(
loadItUp2
,
rbName
);
}
catch
(
InvocationTargetException
ex
)
{
throw
ex
.
getTargetException
();
}
}
}
test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java
浏览文件 @
16e18e93
...
...
@@ -23,11 +23,11 @@
/*
* @test
* @bug 8002070
* @bug 8002070
8013382
* @summary Remove the stack search for a resource bundle Logger to use
* @author Jim Gish
* @build ResourceBundleSearchTest IndirectlyLoadABundle LoadItUp
* @run main ResourceBundleSearchTest
* @build ResourceBundleSearchTest IndirectlyLoadABundle LoadItUp
1 LoadItUp2 TwiceIndirectlyLoadABundle LoadItUp2Invoker
* @run main
/othervm
ResourceBundleSearchTest
*/
import
java.net.URL
;
import
java.net.URLClassLoader
;
...
...
@@ -39,6 +39,12 @@ import java.util.MissingResourceException;
import
java.util.ResourceBundle
;
import
java.util.logging.Logger
;
/**
* This class tests various scenarios of loading resource bundles from
* java.util.logging. Since jtreg uses the logging system, it is necessary to
* run these tests using othervm mode to ensure no interference from logging
* initialization by jtreg
*/
public
class
ResourceBundleSearchTest
{
private
final
static
boolean
DEBUG
=
false
;
...
...
@@ -60,15 +66,11 @@ public class ResourceBundleSearchTest {
// ensure we are using en as the default Locale so we can find the resource
Locale
.
setDefault
(
Locale
.
ENGLISH
);
String
testClasses
=
System
.
getProperty
(
"test.classes"
);
System
.
out
.
println
(
"test.classes = "
+
testClasses
);
ClassLoader
myClassLoader
=
ClassLoader
.
getSystemClassLoader
();
// Find out where we are running from so we can setup the URLClassLoader URL
String
userDir
=
System
.
getProperty
(
"user.dir"
);
String
testDir
=
System
.
getProperty
(
"test.src"
,
userDir
);
String
sep
=
System
.
getProperty
(
"file.separator"
);
URL
[]
urls
=
new
URL
[
1
];
...
...
@@ -77,30 +79,41 @@ public class ResourceBundleSearchTest {
// Test 1 - can we find a Logger bundle from doing a stack search?
// We shouldn't be able to
assertFalse
(
testGetBundleFromStackSearch
(),
"testGetBundleFromStackSearch"
);
assertFalse
(
testGetBundleFromStackSearch
(),
"
1-
testGetBundleFromStackSearch"
);
// Test 2 - can we find a Logger bundle off of the Thread context class
// loader? We should be able to.
assertTrue
(
testGetBundleFromTCCL
(
TCCL_TEST_BUNDLE
,
rbClassLoader
),
"testGetBundleFromTCCL"
);
assertTrue
(
testGetBundleFromTCCL
(
TCCL_TEST_BUNDLE
,
rbClassLoader
),
"2-testGetBundleFromTCCL"
);
// Test 3 - Can we find a Logger bundle from the classpath? We should be
// able to, but ....
// We check to see if the bundle is on the classpath or not so that this
// will work standalone. In the case of jtreg/samevm,
// the resource bundles are not on the classpath. Running standalone
// (or othervm), they are
// able to. We'll first check to make sure the setup is correct and
// it actually is on the classpath before checking whether logging
// can see it there.
if
(
isOnClassPath
(
PROP_RB_NAME
,
myClassLoader
))
{
debug
(
"We should be able to see "
+
PROP_RB_NAME
+
" on the classpath"
);
assertTrue
(
testGetBundleFromSystemClassLoader
(
PROP_RB_NAME
),
"
testGetBundleFromSystemClassLoader"
);
"3-
testGetBundleFromSystemClassLoader"
);
}
else
{
debug
(
"We should not be able to see "
+
PROP_RB_NAME
+
" on the classpath"
);
assertFalse
(
testGetBundleFromSystemClassLoader
(
PROP_RB_NAME
),
"testGetBundleFromSystemClassLoader"
);
throw
new
Exception
(
"TEST SETUP FAILURE: Cannot see "
+
PROP_RB_NAME
+
" on the classpath"
);
}
// Test 4 - we should be able to find a bundle from the caller's
// classloader, but only one level up.
assertTrue
(
testGetBundleFromCallersClassLoader
(),
"4-testGetBundleFromCallersClassLoader"
);
// Test 5 - this ensures that getAnonymousLogger(String rbName)
// can find the bundle from the caller's classloader
assertTrue
(
testGetAnonymousLogger
(),
"5-testGetAnonymousLogger"
);
// Test 6 - first call getLogger("myLogger").
// Then call getLogger("myLogger","bundleName") from a different ClassLoader
// Make sure we find the bundle
assertTrue
(
testGetBundleFromSecondCallersClassLoader
(),
"6-testGetBundleFromSecondCallersClassLoader"
);
report
();
}
...
...
@@ -139,6 +152,13 @@ public class ResourceBundleSearchTest {
public
boolean
testGetBundleFromStackSearch
()
throws
Throwable
{
// This should fail. This was the old functionality to search up the
// caller's call stack
TwiceIndirectlyLoadABundle
indirectLoader
=
new
TwiceIndirectlyLoadABundle
();
return
indirectLoader
.
loadAndTest
();
}
public
boolean
testGetBundleFromCallersClassLoader
()
throws
Throwable
{
// This should pass. This exercises getting the bundle using the
// class loader of the caller (one level up)
IndirectlyLoadABundle
indirectLoader
=
new
IndirectlyLoadABundle
();
return
indirectLoader
.
loadAndTest
();
}
...
...
@@ -201,6 +221,21 @@ public class ResourceBundleSearchTest {
return
true
;
}
private
boolean
testGetAnonymousLogger
()
throws
Throwable
{
// This should pass. This exercises getting the bundle using the
// class loader of the caller (one level up) when calling
// Logger.getAnonymousLogger(String rbName)
IndirectlyLoadABundle
indirectLoader
=
new
IndirectlyLoadABundle
();
return
indirectLoader
.
testGetAnonymousLogger
();
}
private
boolean
testGetBundleFromSecondCallersClassLoader
()
throws
Throwable
{
// This should pass. This exercises getting the bundle using the
// class loader of the caller (one level up)
IndirectlyLoadABundle
indirectLoader
=
new
IndirectlyLoadABundle
();
return
indirectLoader
.
testGetLoggerGetLoggerWithBundle
();
}
public
static
class
LoggingThread
extends
Thread
{
boolean
foundBundle
=
false
;
...
...
@@ -228,11 +263,11 @@ public class ResourceBundleSearchTest {
try
{
Logger
aLogger
=
Logger
.
getLogger
(
ResourceBundleSearchTest
.
newLoggerName
(),
bundleName
);
msg
=
"INFO: Logging
Runnable
() found the bundle "
+
bundleName
msg
=
"INFO: Logging
Thread.run
() found the bundle "
+
bundleName
+
(
setTCCL
?
" with "
:
" without "
)
+
"setting the TCCL"
;
foundBundle
=
true
;
}
catch
(
MissingResourceException
re
)
{
msg
=
"INFO: Logging
Runnable
() did not find the bundle "
+
bundleName
msg
=
"INFO: Logging
Thread.run
() did not find the bundle "
+
bundleName
+
(
setTCCL
?
" with "
:
" without "
)
+
"setting the TCCL"
;
foundBundle
=
false
;
}
...
...
test/java/util/logging/bundlesearch/TwiceIndirectlyLoadABundle.java
0 → 100644
浏览文件 @
16e18e93
/*
* 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.
*/
import
java.lang.reflect.InvocationTargetException
;
import
java.lang.reflect.Method
;
import
java.net.URL
;
import
java.net.URLClassLoader
;
import
java.nio.file.Paths
;
/**
* This class constructs a scenario where a bundle is accessible on the call
* stack two levels up from the call to getLogger(), but not on the immediate
* caller. This tests that getLogger() isn't doing a stack crawl more than one
* level up to find a bundle.
*
* @author Jim Gish
*/
public
class
TwiceIndirectlyLoadABundle
{
private
final
static
String
rbName
=
"StackSearchableResource"
;
public
boolean
loadAndTest
()
throws
Throwable
{
// Find out where we are running from so we can setup the URLClassLoader URLs
// test.src and test.classes will be set if running in jtreg, but probably
// not otherwise
String
testDir
=
System
.
getProperty
(
"test.src"
,
System
.
getProperty
(
"user.dir"
));
String
testClassesDir
=
System
.
getProperty
(
"test.classes"
,
System
.
getProperty
(
"user.dir"
));
URL
[]
urls
=
new
URL
[
2
];
// Allow for both jtreg and standalone cases here
// Unlike the 1-level test where we can get the bundle from the caller's
// class loader, for this one we don't want to expose the resource directory
// to the next class. That way we're invoking the LoadItUp2Invoker class
// from this class that does have access to the resources (two levels
// up the call stack), but the Invoker itself won't have access to resource
urls
[
0
]
=
Paths
.
get
(
testDir
,
"resources"
).
toUri
().
toURL
();
urls
[
1
]
=
Paths
.
get
(
testClassesDir
).
toUri
().
toURL
();
// Make sure we can find it via the URLClassLoader
URLClassLoader
yetAnotherResourceCL
=
new
URLClassLoader
(
urls
,
null
);
Class
<?>
loadItUp2InvokerClazz
=
Class
.
forName
(
"LoadItUp2Invoker"
,
true
,
yetAnotherResourceCL
);
ClassLoader
actual
=
loadItUp2InvokerClazz
.
getClassLoader
();
if
(
actual
!=
yetAnotherResourceCL
)
{
throw
new
Exception
(
"LoadItUp2Invoker was loaded by an unexpected CL: "
+
actual
);
}
Object
loadItUp2Invoker
=
loadItUp2InvokerClazz
.
newInstance
();
Method
setupMethod
=
loadItUp2InvokerClazz
.
getMethod
(
"setup"
,
urls
.
getClass
(),
String
.
class
);
try
{
// For the next class loader we create, we want to leave off
// the resources. That way loadItUp2Invoker will have access to
// them, but the next class won't.
URL
[]
noResourceUrl
=
new
URL
[
1
];
noResourceUrl
[
0
]
=
urls
[
1
];
// from above -- just the test classes
setupMethod
.
invoke
(
loadItUp2Invoker
,
noResourceUrl
,
rbName
);
}
catch
(
InvocationTargetException
ex
)
{
throw
ex
.
getTargetException
();
}
Method
testMethod
=
loadItUp2InvokerClazz
.
getMethod
(
"test"
);
try
{
return
(
Boolean
)
testMethod
.
invoke
(
loadItUp2Invoker
);
}
catch
(
InvocationTargetException
ex
)
{
throw
ex
.
getTargetException
();
}
}
}
test/java/util/logging/bundlesearch/resources/CallerSearchableResource_en.properties
0 → 100644
浏览文件 @
16e18e93
#
# 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.
#
sample1
=
translation #4 for sample1
sample2
=
translation #4 for sample2
supports-test
=
ResourceBundleSearchTest
test/javax/xml/jaxp/PrecisionDecimalDV/XPrecisionDecimalToString.java
0 → 100644
浏览文件 @
16e18e93
/*
* 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.
*/
import
java.lang.reflect.Method
;
/**
* @test
* @bug 8013900
* @summary More warning compiling jaxp.
* This test only test one of the methods used to implement hashCode()
* in com.sun.org.apache.xerces.internal.impl.dv.xs.PrecisionDecimalDV$XPrecisionDecimal.
* Since that method is private the test unfortunately needs to use reflection
* to invoke the method.
* @run main XPrecisionDecimalToString
* @author Daniel Fuchs
*/
public
class
XPrecisionDecimalToString
{
private
static
final
String
className
=
"com.sun.org.apache.xerces.internal.impl.dv.xs.PrecisionDecimalDV$XPrecisionDecimal"
;
private
static
final
String
methodName
=
"canonicalToStringForHashCode"
;
private
static
final
Class
<?>[]
signature
=
{
String
.
class
,
String
.
class
,
int
.
class
,
int
.
class
};
private
static
Method
method
;
// Invokes XPrecisionDecimal.canonicalToStringForHashCode through reflection,
// because the method is private...
//
// Construct a canonical String representation of this number
// for the purpose of deriving a hashCode value compliant with
// equals.
// The toString representation will be:
// NaN for NaN, INF for +infinity, -INF for -infinity, 0 for zero,
// and [1-9]\.[0-9]*[1-9]?(E[1-9][0-9]*)? for other numbers.
private
static
String
canonicalToStringForHashCode
(
String
ivalue
,
String
fvalue
,
int
sign
,
int
pvalue
)
{
try
{
if
(
method
==
null
)
{
Class
<?>
type
=
Class
.
forName
(
className
);
method
=
type
.
getDeclaredMethod
(
methodName
,
signature
);
method
.
setAccessible
(
true
);
}
}
catch
(
Exception
x
)
{
throw
new
Error
(
"Impossible to find '"
+
className
+
"."
+
methodName
+
"': "
+
x
,
x
);
}
try
{
return
(
String
)
method
.
invoke
(
null
,
new
Object
[]
{
ivalue
,
fvalue
,
sign
,
pvalue
}
);
}
catch
(
Exception
x
)
{
throw
new
Error
(
"Failed to invoke "
+
className
+
"."
+
methodName
+
"(\""
+
ivalue
+
"\", \""
+
fvalue
+
"\", "
+
sign
+
", "
+
pvalue
+
"): "
+
x
,
x
);
}
}
/**
* @param args the command line arguments
*/
public
static
void
main
(
String
[]
args
)
{
test
(
"123"
,
"7890"
,-
1
,
0
,
"-1.23789E2"
);
test
(
"0"
,
"007890"
,-
1
,
0
,
"-7.89E-3"
);
test
(
"123"
,
"7890"
,
1
,
0
,
"1.23789E2"
);
test
(
"0"
,
"007890"
,
1
,
0
,
"7.89E-3"
);
test
(
"123"
,
"7890"
,
1
,
10
,
"1.23789E12"
);
test
(
"0"
,
"007890"
,
1
,
33
,
"7.89E30"
);
test
(
"INF"
,
""
,
1
,
0
,
"INF"
);
test
(
"INF"
,
""
,-
1
,
0
,
"-INF"
);
test
(
"NaN"
,
""
,
0
,
0
,
"NaN"
);
test
(
"0"
,
""
,
1
,
0
,
"0"
);
test
(
"00000"
,
"00000"
,
1
,
10
,
"0"
);
test
(
"00000"
,
"00000"
,-
1
,
10
,
"0"
);
test
(
"00000"
,
"000001"
,-
1
,-
10
,
"-1E-16"
);
}
private
static
void
test
(
String
ival
,
String
fval
,
int
sign
,
int
pvalue
,
String
expected
)
{
final
String
canonical
=
canonicalToStringForHashCode
(
ival
,
fval
,
sign
,
pvalue
);
System
.
out
.
println
((
sign
==
-
1
?
"-"
:
""
)
+
ival
+
(
"INF"
.
equals
(
ival
)
||
"NaN"
.
equals
(
ival
)
?
""
:
(
"."
+
fval
+
"E"
+
pvalue
))
+
" => "
+
canonical
);
if
(!
expected
.
equals
(
canonical
))
{
throw
new
Error
(
"expected: "
+
expected
+
" got: "
+
canonical
);
}
}
}
test/sun/net/www/protocol/http/B6299712.java
浏览文件 @
16e18e93
...
...
@@ -23,33 +23,33 @@
/*
* @test
* @bug 6299712
* @library ../../httptest/
* @build HttpCallback TestHttpServer ClosedChannelList HttpTransaction
* @bug 6299712 7150552
* @run main/othervm B6299712
* @summary NullPointerException in sun.net.www.protocol.http.HttpURLConnection.followRedirect
*/
import
com.sun.net.httpserver.HttpExchange
;
import
com.sun.net.httpserver.HttpHandler
;
import
com.sun.net.httpserver.HttpServer
;
import
java.net.*
;
import
java.io.*
;
import
java.util.*
;
/*
* Test Description:
* - main thread run as a http client
* - another thread runs a
http server, which redirect the first call to "/redirect"
*
and return
'200 OK' for the successive call
* - a global ResponseCache instance is installed, which return DeployCacheResponse
* for url
ends
with "/redirect", i.e. the url redirected to by our simple http server,
* and null for other url.
* - main thread
is
run as a http client
* - another thread runs a
n http server, which redirects calls to "/" to
*
"/redirect" and returns
'200 OK' for the successive call
* - a global ResponseCache instance is installed, which return
s
DeployCacheResponse
* for url
s that end
with "/redirect", i.e. the url redirected to by our simple http server,
* and null for other url
s
.
* - the whole result is that the first call will be served by our simple
* http server and is redirected to "/redirect". The successive call will be done
* automatically by HttpURLConnection, which will be served by DeployCacheResponse.
* The NPE will be thrown on the second round if the bug is there.
*/
public
class
B6299712
{
static
SimpleHttpTransaction
httpTrans
;
static
TestHttpServer
server
;
static
HttpServer
server
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
ResponseCache
.
setDefault
(
new
DeployCacheHandler
());
...
...
@@ -58,83 +58,78 @@ public class B6299712 {
makeHttpCall
();
}
public
static
void
startHttpServer
()
{
try
{
httpTrans
=
new
SimpleHttpTransaction
();
server
=
new
TestHttpServer
(
httpTrans
,
1
,
10
,
0
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
public
static
void
startHttpServer
()
throws
IOException
{
server
=
HttpServer
.
create
(
new
InetSocketAddress
(
0
),
0
);
server
.
createContext
(
"/"
,
new
DefaultHandler
());
server
.
createContext
(
"/redirect"
,
new
RedirectHandler
());
server
.
start
();
}
public
static
void
makeHttpCall
()
{
public
static
void
makeHttpCall
()
throws
IOException
{
try
{
System
.
out
.
println
(
"http server listen on: "
+
server
.
getLocalPort
());
URL
url
=
new
URL
(
"http"
,
InetAddress
.
getLocalHost
().
getHostAddress
(),
server
.
getLocalPort
(),
"/"
);
System
.
out
.
println
(
"http server listen on: "
+
server
.
getAddress
().
getPort
());
URL
url
=
new
URL
(
"http"
,
InetAddress
.
getLocalHost
().
getHostAddress
(),
server
.
getAddress
().
getPort
(),
"/"
);
HttpURLConnection
uc
=
(
HttpURLConnection
)
url
.
openConnection
();
System
.
out
.
println
(
uc
.
getResponseCode
());
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
if
(
uc
.
getResponseCode
()
!=
200
)
throw
new
RuntimeException
(
"Expected Response Code was 200,"
+
"received: "
+
uc
.
getResponseCode
());
uc
.
disconnect
();
}
finally
{
server
.
terminate
(
);
server
.
stop
(
0
);
}
}
}
class
SimpleHttpTransaction
implements
HttpCallback
{
/*
* Our http server which simply redirect first call
*/
public
void
request
(
HttpTransaction
trans
)
{
try
{
String
path
=
trans
.
getRequestURI
().
getPath
();
if
(
path
.
equals
(
"/"
))
{
// the first call, redirect it
String
location
=
"/redirect"
;
trans
.
addResponseHeader
(
"Location"
,
location
);
trans
.
sendResponse
(
302
,
"Moved Temporarily"
);
}
else
{
// the second call
trans
.
sendResponse
(
200
,
"OK"
);
static
class
RedirectHandler
implements
HttpHandler
{
@Override
public
void
handle
(
HttpExchange
exchange
)
throws
IOException
{
exchange
.
sendResponseHeaders
(
200
,
-
1
);
exchange
.
close
();
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
static
class
DefaultHandler
implements
HttpHandler
{
@Override
public
void
handle
(
HttpExchange
exchange
)
throws
IOException
{
exchange
.
getResponseHeaders
().
add
(
"Location"
,
"/redirect"
);
exchange
.
sendResponseHeaders
(
302
,
-
1
);
exchange
.
close
();
}
}
}
class
DeployCacheHandler
extends
java
.
net
.
ResponseCache
{
private
boolean
inCacheHandler
=
false
;
private
boolean
_downloading
=
false
;
static
class
DeployCacheHandler
extends
java
.
net
.
ResponseCache
{
public
synchronized
CacheResponse
get
(
final
URI
uri
,
String
rqstMethod
,
Map
requestHeaders
)
throws
IOException
{
Map
<
String
,
List
<
String
>>
requestHeaders
)
throws
IOException
{
System
.
out
.
println
(
"get!!!: "
+
uri
);
try
{
if
(!
uri
.
toString
().
endsWith
(
"redirect"
))
{
return
null
;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
new
DeployCacheResponse
(
new
EmptyInputStream
(),
new
HashMap
());
System
.
out
.
println
(
"Serving request from cache"
);
return
new
DeployCacheResponse
(
new
EmptyInputStream
(),
new
HashMap
<
String
,
List
<
String
>>());
}
public
synchronized
CacheRequest
put
(
URI
uri
,
URLConnection
conn
)
throws
IOException
{
throws
IOException
{
URL
url
=
uri
.
toURL
();
return
new
DeployCacheRequest
(
url
,
conn
);
}
}
}
class
DeployCacheRequest
extends
java
.
net
.
CacheRequest
{
static
class
DeployCacheRequest
extends
java
.
net
.
CacheRequest
{
private
URL
_url
;
private
URLConnection
_conn
;
private
boolean
_downloading
=
false
;
DeployCacheRequest
(
URL
url
,
URLConnection
conn
)
{
_url
=
url
;
...
...
@@ -149,13 +144,13 @@ class DeployCacheRequest extends java.net.CacheRequest {
return
null
;
}
}
}
class
DeployCacheResponse
extends
java
.
net
.
CacheResponse
{
static
class
DeployCacheResponse
extends
java
.
net
.
CacheResponse
{
protected
InputStream
is
;
protected
Map
headers
;
protected
Map
<
String
,
List
<
String
>>
headers
;
DeployCacheResponse
(
InputStream
is
,
Map
headers
)
{
DeployCacheResponse
(
InputStream
is
,
Map
<
String
,
List
<
String
>>
headers
)
{
this
.
is
=
is
;
this
.
headers
=
headers
;
}
...
...
@@ -164,17 +159,18 @@ class DeployCacheResponse extends java.net.CacheResponse {
return
is
;
}
public
Map
getHeaders
()
throws
IOException
{
public
Map
<
String
,
List
<
String
>>
getHeaders
()
throws
IOException
{
List
<
String
>
val
=
new
ArrayList
<>();
val
.
add
(
"HTTP/1.1 200 OK"
);
headers
.
put
(
null
,
val
);
return
headers
;
}
}
class
EmptyInputStream
extends
InputStream
{
public
EmptyInputStream
()
{
}
public
int
read
()
throws
IOException
{
static
class
EmptyInputStream
extends
InputStream
{
public
int
read
()
throws
IOException
{
return
-
1
;
}
}
}
test/sun/security/pkcs11/ec/TestCurves.java
浏览文件 @
16e18e93
...
...
@@ -38,9 +38,6 @@ import java.security.spec.*;
import
javax.crypto.*
;
// XXX no public API to enumerate supported named curves
import
sun.security.ec.NamedCurve
;
public
class
TestCurves
extends
PKCS11Test
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
...
...
@@ -57,8 +54,8 @@ public class TestCurves extends PKCS11Test {
byte
[]
data
=
new
byte
[
2048
];
random
.
nextBytes
(
data
);
Collection
<?
extends
ECParameterSpec
>
curves
=
NamedCurve
.
knownECParameterSpecs
();
Vector
<
ECParameterSpec
>
curves
=
getKnownCurves
(
p
);
for
(
ECParameterSpec
params
:
curves
)
{
System
.
out
.
println
(
"Testing "
+
params
+
"..."
);
KeyPairGenerator
kpg
=
KeyPairGenerator
.
getInstance
(
"EC"
,
p
);
...
...
@@ -92,6 +89,66 @@ public class TestCurves extends PKCS11Test {
System
.
out
.
println
(
"OK"
);
}
private
static
Vector
<
ECParameterSpec
>
getKnownCurves
(
Provider
p
)
throws
Exception
{
int
index
;
int
begin
;
int
end
;
String
curve
;
Vector
<
ECParameterSpec
>
results
=
new
Vector
<
ECParameterSpec
>();
String
kcProp
=
p
.
getProperty
(
"AlgorithmParameters.EC SupportedCurves"
);
if
(
kcProp
==
null
)
{
throw
new
RuntimeException
(
"\"AlgorithmParameters.EC SupportedCurves property\" not found"
);
}
index
=
0
;
for
(;;)
{
// Each set of curve names is enclosed with brackets.
begin
=
kcProp
.
indexOf
(
'['
,
index
);
end
=
kcProp
.
indexOf
(
']'
,
index
);
if
(
begin
==
-
1
||
end
==
-
1
)
{
break
;
}
/*
* Each name is separated by a comma.
* Just get the first name in the set.
*/
index
=
end
+
1
;
begin
++;
end
=
kcProp
.
indexOf
(
','
,
begin
);
if
(
end
==
-
1
)
{
// Only one name in the set.
end
=
index
-
1
;
}
curve
=
kcProp
.
substring
(
begin
,
end
);
results
.
add
(
getECParameterSpec
(
p
,
curve
));
}
if
(
results
.
size
()
==
0
)
{
throw
new
RuntimeException
(
"No supported EC curves found"
);
}
return
results
;
}
private
static
ECParameterSpec
getECParameterSpec
(
Provider
p
,
String
name
)
throws
Exception
{
AlgorithmParameters
parameters
=
AlgorithmParameters
.
getInstance
(
"EC"
,
p
);
parameters
.
init
(
new
ECGenParameterSpec
(
name
));
return
parameters
.
getParameterSpec
(
ECParameterSpec
.
class
);
}
private
static
void
testSigning
(
Provider
p
,
String
algorithm
,
byte
[]
data
,
KeyPair
kp1
,
KeyPair
kp2
)
throws
Exception
{
// System.out.print(" " + algorithm);
...
...
@@ -115,6 +172,4 @@ public class TestCurves extends PKCS11Test {
throw
new
Exception
(
"Signature should not verify"
);
}
}
}
test/sun/security/pkcs11/ec/TestECDH2.java
浏览文件 @
16e18e93
...
...
@@ -41,7 +41,7 @@ import java.security.spec.*;
import
java.security.interfaces.*
;
import
javax.crypto.*
;
import
sun.security.
ec.NamedCurve
;
import
sun.security.
util.ECUtil
;
public
class
TestECDH2
extends
PKCS11Test
{
...
...
@@ -79,8 +79,8 @@ public class TestECDH2 extends PKCS11Test {
}
private
KeyPair
genECKeyPair
(
String
curvName
,
String
privD
,
String
pubX
,
String
pubY
)
throws
Exception
{
ECParameterSpec
ecParams
=
NamedCurve
.
getECParameterSpec
(
curvName
);
String
pubY
,
Provider
p
)
throws
Exception
{
ECParameterSpec
ecParams
=
ECUtil
.
getECParameterSpec
(
p
,
curvName
);
ECPrivateKeySpec
privKeySpec
=
new
ECPrivateKeySpec
(
new
BigInteger
(
privD
,
16
),
ecParams
);
ECPublicKeySpec
pubKeySpec
=
...
...
@@ -112,12 +112,14 @@ public class TestECDH2 extends PKCS11Test {
System
.
out
.
println
(
"Testing against NIST P-256"
);
long
start
=
System
.
currentTimeMillis
();
KeyPair
kp256A
=
genECKeyPair
(
"secp256r1"
,
privD256
,
pubX256
,
pubY256
);
KeyPair
kp256A
=
genECKeyPair
(
"secp256r1"
,
privD256
,
pubX256
,
pubY256
,
provider
);
KeyPair
kp256B
=
genECKeyPair
(
"secp256r1"
);
testKeyAgreement
(
kp256A
,
kp256B
,
provider
);
System
.
out
.
println
(
"Testing against NIST P-384"
);
KeyPair
kp384A
=
genECKeyPair
(
"secp384r1"
,
privD384
,
pubX384
,
pubY384
);
KeyPair
kp384A
=
genECKeyPair
(
"secp384r1"
,
privD384
,
pubX384
,
pubY384
,
provider
);
KeyPair
kp384B
=
genECKeyPair
(
"secp384r1"
);
testKeyAgreement
(
kp384A
,
kp384B
,
provider
);
...
...
test/sun/security/pkcs11/ec/TestECDSA2.java
浏览文件 @
16e18e93
...
...
@@ -40,7 +40,7 @@ import java.security.*;
import
java.security.spec.*
;
import
java.security.interfaces.*
;
import
sun.security.
ec.NamedCurve
;
import
sun.security.
util.ECUtil
;
public
class
TestECDSA2
extends
PKCS11Test
{
...
...
@@ -75,8 +75,9 @@ public class TestECDSA2 extends PKCS11Test {
System
.
out
.
println
(
p
.
getName
()
+
": "
+
alg
+
" Passed"
);
}
private
KeyPair
genECKeyPair
(
String
curvName
,
String
privD
,
String
pubX
,
String
pubY
)
throws
Exception
{
ECParameterSpec
ecParams
=
NamedCurve
.
getECParameterSpec
(
curvName
);
private
KeyPair
genECKeyPair
(
String
curvName
,
String
privD
,
String
pubX
,
String
pubY
,
Provider
p
)
throws
Exception
{
ECParameterSpec
ecParams
=
ECUtil
.
getECParameterSpec
(
p
,
curvName
);
ECPrivateKeySpec
privKeySpec
=
new
ECPrivateKeySpec
(
new
BigInteger
(
privD
,
16
),
ecParams
);
ECPublicKeySpec
pubKeySpec
=
...
...
@@ -108,12 +109,14 @@ public class TestECDSA2 extends PKCS11Test {
long
start
=
System
.
currentTimeMillis
();
if
(
testP256
)
{
// can use secp256r1, NIST P-256, X9.62 prime256v1, or 1.2.840.10045.3.1.7
KeyPair
kp
=
genECKeyPair
(
"secp256r1"
,
privD256
,
pubX256
,
pubY256
);
KeyPair
kp
=
genECKeyPair
(
"secp256r1"
,
privD256
,
pubX256
,
pubY256
,
provider
);
testSignAndVerify
(
"SHA256withECDSA"
,
kp
,
provider
);
}
if
(
testP384
)
{
// can use secp384r1, NIST P-384, 1.3.132.0.34
KeyPair
kp
=
genECKeyPair
(
"secp384r1"
,
privD384
,
pubX384
,
pubY384
);
KeyPair
kp
=
genECKeyPair
(
"secp384r1"
,
privD384
,
pubX384
,
pubY384
,
provider
);
testSignAndVerify
(
"SHA384withECDSA"
,
kp
,
provider
);
}
long
stop
=
System
.
currentTimeMillis
();
...
...
test/tools/pack200/AttributeTests.java
浏览文件 @
16e18e93
...
...
@@ -21,12 +21,9 @@
* questions.
*/
import
java.io.File
;
import
java.nio.charset.Charset
;
import
java.nio.file.Files
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
static
java
.
nio
.
file
.
StandardOpenOption
.*;
/*
* @test
* @bug 6746111 8005252 8008262
...
...
@@ -58,8 +55,7 @@ public class AttributeTests {
scratch
.
add
(
"}"
);
File
cwd
=
new
File
(
"."
);
File
javaFile
=
new
File
(
cwd
,
javaFileName
);
Files
.
write
(
javaFile
.
toPath
(),
scratch
,
Charset
.
defaultCharset
(),
CREATE
,
TRUNCATE_EXISTING
);
Utils
.
createFile
(
javaFile
,
scratch
);
Utils
.
compiler
(
javaFile
.
getName
(),
"-parameters"
);
...
...
test/tools/pack200/BandIntegrity.java
0 → 100644
浏览文件 @
16e18e93
/*
* 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
* @summary test ensures the proper sequencing of bands, dump bands as well.
* @compile -XDignore.symbol.file Utils.java BandIntegrity.java
* @run main BandIntegrity
* @author ksrini
*/
import
java.io.File
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
/*
* This makes use of the optDebugBands to ensure the bands are read in the
* same sequence as it was written. The caveat is that this works only with
* the java unpacker, therefore it will work only with --repack such that
* the java packer and unpacker must be called in the same java instance.
*/
public
class
BandIntegrity
{
public
static
void
main
(
String
...
args
)
throws
IOException
{
File
testFile
=
new
File
(
"test.jar"
);
Utils
.
jar
(
"cvf"
,
testFile
.
getName
(),
"-C"
,
Utils
.
TEST_CLS_DIR
.
getAbsolutePath
(),
"."
);
List
<
String
>
scratch
=
new
ArrayList
<>();
// band debugging works only with java unpacker
scratch
.
add
(
"com.sun.java.util.jar.pack.disable.native=true"
);
scratch
.
add
(
"com.sun.java.util.jar.pack.debug.bands=true"
);
// while at it, might as well exercise this functionality
scratch
.
add
(
"com.sun.java.util.jar.pack.dump.bands=true"
);
scratch
.
add
(
"pack.unknown.attribute=error"
);
File
configFile
=
new
File
(
"pack.conf"
);
Utils
.
createFile
(
configFile
,
scratch
);
File
outFile
=
new
File
(
"out.jar"
);
Utils
.
repack
(
testFile
,
outFile
,
true
,
"-v"
,
"--config-file="
+
configFile
.
getName
());
}
}
test/tools/pack200/InstructionTests.java
浏览文件 @
16e18e93
...
...
@@ -21,11 +21,8 @@
* questions.
*/
import
java.io.File
;
import
java.nio.charset.Charset
;
import
java.nio.file.Files
;
import
java.util.ArrayList
;
import
java.util.List
;
import
static
java
.
nio
.
file
.
StandardOpenOption
.*;
/*
* @test
...
...
@@ -59,8 +56,7 @@ public class InstructionTests {
scratch
.
add
(
"}"
);
File
cwd
=
new
File
(
"."
);
File
javaFile
=
new
File
(
cwd
,
javaFileName
);
Files
.
write
(
javaFile
.
toPath
(),
scratch
,
Charset
.
defaultCharset
(),
CREATE
,
TRUNCATE_EXISTING
);
Utils
.
createFile
(
javaFile
,
scratch
);
// -g to compare LVT and LNT entries
Utils
.
compiler
(
"-g"
,
javaFile
.
getName
());
...
...
@@ -69,8 +65,7 @@ public class InstructionTests {
scratch
.
clear
();
scratch
.
add
(
"com.sun.java.util.jar.pack.class.format.error=error"
);
scratch
.
add
(
"pack.unknown.attribute=error"
);
Files
.
write
(
propsFile
.
toPath
(),
scratch
,
Charset
.
defaultCharset
(),
CREATE
,
TRUNCATE_EXISTING
);
Utils
.
createFile
(
propsFile
,
scratch
);
// jar the file up
File
testjarFile
=
new
File
(
cwd
,
"test"
+
Utils
.
JAR_FILE_EXT
);
Utils
.
jar
(
"cvf"
,
testjarFile
.
getName
(),
"."
);
...
...
test/tools/pack200/Utils.java
浏览文件 @
16e18e93
...
...
@@ -32,6 +32,7 @@ import java.io.IOException;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.io.PrintStream
;
import
java.nio.charset.Charset
;
import
java.nio.file.Files
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
...
...
@@ -45,6 +46,7 @@ import java.util.zip.ZipEntry;
import
java.util.zip.ZipFile
;
import
static
java
.
nio
.
file
.
StandardCopyOption
.*;
import
static
java
.
nio
.
file
.
StandardOpenOption
.*;
/**
*
...
...
@@ -70,6 +72,7 @@ class Utils {
static
final
String
JAR_FILE_EXT
=
".jar"
;
static
final
File
TEST_SRC_DIR
=
new
File
(
System
.
getProperty
(
"test.src"
));
static
final
File
TEST_CLS_DIR
=
new
File
(
System
.
getProperty
(
"test.classes"
));
static
final
String
VERIFIER_DIR_NAME
=
"pack200-verifier"
;
static
final
File
VerifierJar
=
new
File
(
VERIFIER_DIR_NAME
+
JAR_FILE_EXT
);
...
...
@@ -86,6 +89,10 @@ class Utils {
return
;
}
File
srcDir
=
new
File
(
TEST_SRC_DIR
,
VERIFIER_DIR_NAME
);
if
(!
srcDir
.
exists
())
{
// if not available try one level above
srcDir
=
new
File
(
TEST_SRC_DIR
.
getParentFile
(),
VERIFIER_DIR_NAME
);
}
List
<
File
>
javaFileList
=
findFiles
(
srcDir
,
createFilter
(
JAVA_FILE_EXT
));
File
tmpFile
=
File
.
createTempFile
(
"javac"
,
".tmp"
);
File
classesDir
=
new
File
(
"xclasses"
);
...
...
@@ -205,6 +212,10 @@ class Utils {
:
name
;
}
static
void
createFile
(
File
outFile
,
List
<
String
>
content
)
throws
IOException
{
Files
.
write
(
outFile
.
getAbsoluteFile
().
toPath
(),
content
,
Charset
.
defaultCharset
(),
CREATE_NEW
,
TRUNCATE_EXISTING
);
}
/*
* Suppose a path is provided which consists of a full path
...
...
test/tools/pack200/pack200-verifier/src/xmlkit/ClassReader.java
浏览文件 @
16e18e93
...
...
@@ -69,6 +69,9 @@ import com.sun.tools.classfile.StackMapTable_attribute;
import
com.sun.tools.classfile.StackMapTable_attribute.*
;
import
com.sun.tools.classfile.StackMap_attribute
;
import
com.sun.tools.classfile.Synthetic_attribute
;
import
com.sun.tools.classfile.TypeAnnotation
;
import
com.sun.tools.classfile.TypeAnnotation.Position
;
import
static
com
.
sun
.
tools
.
classfile
.
TypeAnnotation
.
TargetType
.
THROWS
;
import
java.util.*
;
import
java.io.*
;
import
java.util.jar.JarEntry
;
...
...
@@ -851,6 +854,7 @@ class ConstantPoolVisitor implements ConstantPool.Visitor<String, Integer> {
}
}
class
AttributeVisitor
implements
Attribute
.
Visitor
<
Element
,
Element
>
{
final
ClassFile
cf
;
final
ClassReader
x
;
...
...
@@ -1088,10 +1092,8 @@ class AttributeVisitor implements Attribute.Visitor<Element, Element> {
}
return
null
;
// already added to parent
}
private
void
parseAnnotations
(
Annotation
[]
ra
,
Element
p
)
{
for
(
Annotation
anno
:
ra
)
{
Element
ea
=
new
Element
(
"Member"
);
private
void
parseAnnotation
(
Annotation
anno
,
Element
p
)
{
Element
ea
=
new
Element
(
"Annotation"
);
ea
.
setAttr
(
"name"
,
""
+
x
.
getCpString
(
anno
.
type_index
));
for
(
Annotation
.
element_value_pair
evp
:
anno
.
element_value_pairs
)
{
Element
evpe
=
new
Element
(
"Element"
);
...
...
@@ -1106,6 +1108,11 @@ class AttributeVisitor implements Attribute.Visitor<Element, Element> {
ea
.
trimToSize
();
p
.
add
(
ea
);
}
private
void
parseAnnotations
(
Annotation
[]
ra
,
Element
p
)
{
for
(
Annotation
anno
:
ra
)
{
parseAnnotation
(
anno
,
p
);
}
}
@Override
...
...
@@ -1150,6 +1157,145 @@ class AttributeVisitor implements Attribute.Visitor<Element, Element> {
return
null
;
}
private
void
parsePosition
(
Position
ap
,
Element
p
)
{
Element
te
=
new
Element
();
switch
(
ap
.
type
)
{
case
CLASS_TYPE_PARAMETER:
// 0x00
te
.
setName
(
"CLASS_TYPE_PARAMETER"
);
te
.
setAttr
(
"idx"
,
""
+
ap
.
parameter_index
);
break
;
case
METHOD_TYPE_PARAMETER:
// 0x01
te
.
setName
(
"METHOD_TYPE_PARAMETER"
);
te
.
setAttr
(
"idx"
,
""
+
ap
.
parameter_index
);
break
;
case
CLASS_EXTENDS:
// 0x10
te
.
setName
(
"CLASS_EXTENDS"
);
te
.
setAttr
(
"idx"
,
""
+
ap
.
type_index
);
break
;
case
CLASS_TYPE_PARAMETER_BOUND:
// 0x11
te
.
setName
(
"CLASS_TYPE_PARAMETER_BOUND"
);
te
.
setAttr
(
"idx1"
,
""
+
ap
.
parameter_index
);
te
.
setAttr
(
"idx2"
,
""
+
ap
.
bound_index
);
break
;
case
METHOD_TYPE_PARAMETER_BOUND:
// 0x12
te
.
setName
(
"METHOD_TYPE_PARAMETER_BOUND"
);
te
.
setAttr
(
"idx1"
,
""
+
ap
.
parameter_index
);
te
.
setAttr
(
"idx2"
,
""
+
ap
.
bound_index
);
break
;
case
FIELD:
// 0x13
te
.
setName
(
"FIELD"
);
break
;
case
METHOD_RETURN:
// 0x14
te
.
setName
(
"METHOD_RETURN"
);
break
;
case
METHOD_RECEIVER:
// 0x15
te
.
setName
(
"METHOD_RECEIVER"
);
break
;
case
METHOD_FORMAL_PARAMETER:
// 0x16
te
.
setName
(
"METHOD_FORMAL_PARAMETER"
);
te
.
setAttr
(
"idx"
,
""
+
ap
.
parameter_index
);
break
;
case
THROWS:
// 0x17
te
.
setName
(
"THROWS"
);
te
.
setAttr
(
"idx"
,
""
+
ap
.
type_index
);
break
;
case
LOCAL_VARIABLE:
// 0x40
te
.
setName
(
"LOCAL_VARIABLE"
);
for
(
int
i
=
0
;
i
<
ap
.
lvarIndex
.
length
;
i
++)
{
te
.
setAttr
(
"lvar_idx_"
+
i
,
""
+
ap
.
lvarIndex
[
i
]);
te
.
setAttr
(
"lvar_len_"
+
i
,
""
+
ap
.
lvarLength
[
i
]);
te
.
setAttr
(
"lvar_off_"
+
i
,
""
+
ap
.
lvarOffset
[
i
]);
}
break
;
case
RESOURCE_VARIABLE:
// 0x41
te
.
setName
(
"RESOURCE_VARIABLE"
);
for
(
int
i
=
0
;
i
<
ap
.
lvarIndex
.
length
;
i
++)
{
te
.
setAttr
(
"lvar_idx_"
+
i
,
""
+
ap
.
lvarIndex
[
i
]);
te
.
setAttr
(
"lvar_len_"
+
i
,
""
+
ap
.
lvarLength
[
i
]);
te
.
setAttr
(
"lvar_off_"
+
i
,
""
+
ap
.
lvarOffset
[
i
]);
}
break
;
case
EXCEPTION_PARAMETER:
// 0x42
te
.
setName
(
"EXCEPTION_PARAMETER"
);
te
.
setAttr
(
"idx"
,
""
+
ap
.
exception_index
);
break
;
case
INSTANCEOF:
// 0x43
te
.
setName
(
"INSTANCE_OF"
);
te
.
setAttr
(
"off"
,
""
+
ap
.
offset
);
break
;
case
NEW:
// 0x44
te
.
setName
(
"NEW"
);
te
.
setAttr
(
"off"
,
""
+
ap
.
offset
);
break
;
case
CONSTRUCTOR_REFERENCE:
// 0x45
te
.
setName
(
"CONSTRUCTOR_REFERENCE_RECEIVER"
);
te
.
setAttr
(
"off"
,
""
+
ap
.
offset
);
break
;
case
METHOD_REFERENCE:
// 0x46
te
.
setName
(
"METHOD_REFERENCE_RECEIVER"
);
te
.
setAttr
(
"off"
,
""
+
ap
.
offset
);
break
;
case
CAST:
// 0x47
te
.
setName
(
"CAST"
);
te
.
setAttr
(
"off"
,
""
+
ap
.
offset
);
te
.
setAttr
(
"idx"
,
""
+
ap
.
type_index
);
break
;
case
CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT:
// 0x48
te
.
setName
(
"CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT"
);
te
.
setAttr
(
"off"
,
""
+
ap
.
offset
);
te
.
setAttr
(
"idx"
,
""
+
ap
.
type_index
);
break
;
case
METHOD_INVOCATION_TYPE_ARGUMENT:
// 0x49
te
.
setName
(
"METHOD_INVOCATION_TYPE_ARGUMENT"
);
te
.
setAttr
(
"off"
,
""
+
ap
.
offset
);
te
.
setAttr
(
"idx"
,
""
+
ap
.
type_index
);
break
;
case
CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT:
// 0x4A
te
.
setName
(
"CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT"
);
te
.
setAttr
(
"off"
,
""
+
ap
.
offset
);
te
.
setAttr
(
"idx"
,
""
+
ap
.
type_index
);
break
;
case
METHOD_REFERENCE_TYPE_ARGUMENT:
// 0x4B
te
.
setName
(
"METHOD_REFERENCE_TYPE_ARGUMENT"
);
te
.
setAttr
(
"off"
,
""
+
ap
.
offset
);
te
.
setAttr
(
"idx"
,
""
+
ap
.
type_index
);
break
;
default
:
throw
new
RuntimeException
(
"not implemented"
);
}
te
.
trimToSize
();
p
.
add
(
te
);
}
private
void
parseTypeAnnotations
(
TypeAnnotation
pa
,
Element
p
)
{
Element
pta
=
new
Element
(
"RuntimeVisibleTypeAnnotation"
);
p
.
add
(
pta
);
Position
pos
=
pa
.
position
;
parsePosition
(
pos
,
pta
);
parseAnnotation
(
pa
.
annotation
,
pta
);
}
@Override
public
Element
visitRuntimeVisibleTypeAnnotations
(
RuntimeVisibleTypeAnnotations_attribute
rvta
,
Element
p
)
{
Element
e
=
new
Element
(
x
.
getCpString
(
rvta
.
attribute_name_index
));
for
(
TypeAnnotation
pa
:
rvta
.
annotations
)
{
parseTypeAnnotations
(
pa
,
e
);
}
e
.
sort
();
p
.
add
(
e
);
return
null
;
}
@Override
public
Element
visitRuntimeInvisibleTypeAnnotations
(
RuntimeInvisibleTypeAnnotations_attribute
rita
,
Element
p
)
{
Element
e
=
new
Element
(
x
.
getCpString
(
rita
.
attribute_name_index
));
for
(
TypeAnnotation
pa
:
rita
.
annotations
)
{
parseTypeAnnotations
(
pa
,
e
);
}
e
.
sort
();
p
.
add
(
e
);
return
null
;
}
@Override
public
Element
visitSignature
(
Signature_attribute
s
,
Element
p
)
{
String
aname
=
x
.
getCpString
(
s
.
attribute_name_index
);
...
...
@@ -1216,21 +1362,6 @@ class AttributeVisitor implements Attribute.Visitor<Element, Element> {
p
.
add
(
e
);
return
null
;
}
/*
* TODO
* add these two for now to keep the compiler happy, we will implement
* these along with the JSR-308 changes.
*/
@Override
public
Element
visitRuntimeVisibleTypeAnnotations
(
RuntimeVisibleTypeAnnotations_attribute
rvta
,
Element
p
)
{
throw
new
UnsupportedOperationException
(
"Not supported yet."
);
}
@Override
public
Element
visitRuntimeInvisibleTypeAnnotations
(
RuntimeInvisibleTypeAnnotations_attribute
rita
,
Element
p
)
{
throw
new
UnsupportedOperationException
(
"Not supported yet."
);
}
}
class
StackMapVisitor
implements
StackMapTable_attribute
.
stack_map_frame
.
Visitor
<
Element
,
Void
>
{
...
...
test/tools/pack200/typeannos/Lambda.java
0 → 100644
浏览文件 @
16e18e93
/*
* 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.
*/
/*
* @Xtest
* @bug 8008077
* @summary new type annotation location: lambda expressions
* @compile Lambda.java
* @author Werner Dietl
*/
import
java.lang.annotation.*
;
public
class
Lambda
{
interface
LambdaInt
{
<
S
,
T
>
void
generic
(
S
p1
,
T
p2
);
}
static
class
LambdaImpl
implements
LambdaInt
{
<
S
,
T
>
LambdaImpl
(
S
p1
,
T
p2
)
{}
public
<
S
,
T
>
void
generic
(
S
p1
,
T
p2
)
{}
}
LambdaInt
getMethodRefTA
(
LambdaImpl
r
)
{
return
r:
:<
@TA
Object
,
@TB
Object
>
generic
;
}
LambdaInt
getConstructorRefTA
()
{
return
LambdaImpl:
:<
@TA
Object
,
@TB
Object
>
new
;
}
}
@Target
({
ElementType
.
TYPE_USE
,
ElementType
.
TYPE_PARAMETER
})
@interface
TA
{
}
@Target
({
ElementType
.
TYPE_USE
,
ElementType
.
TYPE_PARAMETER
})
@interface
TB
{
}
test/tools/pack200/typeannos/Readme.txt
0 → 100644
浏览文件 @
16e18e93
This directory contains tests which exercises all possible TypeAnnotations
structure. These tests are borrowed from
langtools/test/tools.javac/annotations/typeAnnotations.
The reason it is copied over is that we need to test pack200 and these
annotation may not be present in any of the JDK/JRE jars, yet we need to test
all these cases.
Therefore it would be a good practice to sync these tests with the original
if there are any changes.
test/tools/pack200/typeannos/TargetTypes.java
0 → 100644
浏览文件 @
16e18e93
/*
* Copyright (c) 2009, 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.
*/
import
java.lang.annotation.*
;
import
static
java
.
lang
.
annotation
.
ElementType
.*;
import
java.util.*
;
import
java.io.*
;
/*
* @Xtest
* @summary compiler accepts all values
* @author Mahmood Ali
* @author Yuri Gaevsky
* @compile TargetTypes.java
*/
@Target
({
TYPE_USE
,
TYPE_PARAMETER
,
TYPE
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@interface
A
{}
/** wildcard bound */
class
T0x1C
{
void
m0x1C
(
List
<?
extends
@A
String
>
lst
)
{}
}
/** wildcard bound generic/array */
class
T0x1D
<
T
>
{
void
m0x1D
(
List
<?
extends
@A
List
<
int
[]>>
lst
)
{}
}
/** typecast */
class
T0x00
{
void
m0x00
(
Long
l1
)
{
Object
l2
=
(
@A
Long
)
l1
;
}
}
/** typecast generic/array */
class
T0x01
<
T
>
{
void
m0x01
(
List
<
T
>
list
)
{
List
<
T
>
l
=
(
List
<
@A
T
>)
list
;
}
}
/** instanceof */
class
T0x02
{
boolean
m0x02
(
String
s
)
{
return
(
s
instanceof
@A
String
);
}
}
/** object creation (new) */
class
T0x04
{
void
m0x04
()
{
new
@A
ArrayList
<
String
>();
}
}
/** local variable */
class
T0x08
{
void
m0x08
()
{
@A
String
s
=
null
;
}
}
/** method parameter generic/array */
class
T0x0D
{
void
m0x0D
(
HashMap
<
@A
Object
,
List
<
@A
List
<
@A
Class
>>>
s1
)
{}
}
/** method receiver */
class
T0x06
{
void
m0x06
(
@A
T0x06
this
)
{}
}
/** method return type generic/array */
class
T0x0B
{
Class
<
@A
Object
>
m0x0B
()
{
return
null
;
}
}
/** field generic/array */
class
T0x0F
{
HashMap
<
@A
Object
,
@A
Object
>
c1
;
}
/** method type parameter */
class
T0x20
<
T
,
U
>
{
<
@A
T
,
@A
U
>
void
m0x20
()
{}
}
/** class type parameter */
class
T0x22
<
@A
T
,
@A
U
>
{
}
/** class type parameter bound */
class
T0x10
<
T
extends
@A
Object
>
{
}
/** method type parameter bound */
class
T0x12
<
T
>
{
<
T
extends
@A
Object
>
void
m0x12
()
{}
}
/** class type parameter bound generic/array */
class
T0x11
<
T
extends
List
<
@A
T
>>
{
}
/** method type parameter bound generic/array */
class
T0x13
{
static
<
T
extends
Comparable
<
@A
T
>>
T
m0x13
()
{
return
null
;
}
}
/** class extends/implements generic/array */
class
T0x15
<
T
>
extends
ArrayList
<
@A
T
>
{
}
/** type test (instanceof) generic/array */
class
T0x03
<
T
>
{
void
m0x03
(
T
typeObj
,
Object
obj
)
{
boolean
ok
=
obj
instanceof
String
@A
[];
}
}
/** object creation (new) generic/array */
class
T0x05
<
T
>
{
void
m0x05
()
{
new
ArrayList
<
@A
T
>();
}
}
/** local variable generic/array */
class
T0x09
<
T
>
{
void
g
()
{
List
<
@A
String
>
l
=
null
;
}
void
a
()
{
String
@A
[]
as
=
null
;
}
}
/** type argument in constructor call generic/array */
class
T0x19
{
<
T
>
T0x19
()
{}
void
g
()
{
new
<
List
<
@A
String
>>
T0x19
();
}
}
/** type argument in method call generic/array */
class
T0x1B
<
T
>
{
void
m0x1B
()
{
Collections
.<
T
@A
[]>
emptyList
();
}
}
/** type argument in constructor call */
class
T0x18
<
T
>
{
<
T
>
T0x18
()
{}
void
m
()
{
new
<
@A
Integer
>
T0x18
();
}
}
/** type argument in method call */
class
T0x1A
<
T
,
U
>
{
public
static
<
T
,
U
>
T
m
()
{
return
null
;
}
static
void
m0x1A
()
{
T0x1A
.<
@A
Integer
,
@A
Short
>
m
();
}
}
/** class extends/implements */
class
T0x14
extends
@A
Object
implements
@A
Serializable
,
@A
Cloneable
{
}
/** exception type in throws */
class
T0x16
{
void
m0x16
()
throws
@A
Exception
{}
}
/** resource variables **/
class
ResourceVariables
{
void
m
()
throws
Exception
{
try
(
@A
InputStream
is
=
new
@A
FileInputStream
(
"x"
)){}
}
}
/** exception parameters **/
class
ExceptionParameters
{
void
multipleExceptions
()
{
try
{
new
Object
();
}
catch
(
@A
Exception
e
)
{}
try
{
new
Object
();
}
catch
(
@A
Exception
e
)
{}
try
{
new
Object
();
}
catch
(
@A
Exception
e
)
{}
}
}
test/tools/pack200/typeannos/TestTypeAnnotations.java
0 → 100644
浏览文件 @
16e18e93
/*
* 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 8001163
* @summary tests simple TypeAnnotations in classfiles
* @compile -XDignore.symbol.file ../Utils.java
* TestTypeAnnotations.java TargetTypes.java
* TypeUseTarget.java Lambda.java
* @run main TestTypeAnnotations
* @author ksrini
*/
import
java.io.File
;
import
java.io.IOException
;
public
class
TestTypeAnnotations
{
public
static
void
main
(
String
...
args
)
throws
IOException
{
File
testFile
=
new
File
(
"ta.jar"
);
Utils
.
jar
(
"cvf"
,
testFile
.
getName
(),
"-C"
,
Utils
.
TEST_CLS_DIR
.
getAbsolutePath
(),
"."
);
Utils
.
testWithRepack
(
testFile
,
"--unknown-attribute=error"
);
}
}
test/tools/pack200/typeannos/TypeUseTarget.java
0 → 100644
浏览文件 @
16e18e93
/*
* Copyright (c) 2008, 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.
*/
/*
* @Xtest
* @bug 6843077 8006775
* @summary check that type annotations may appear on all type declarations
* @author Mahmood Ali
* @compile TypeUseTarget.java
*/
import
java.lang.annotation.Target
;
import
java.lang.annotation.ElementType
;
@B
class
TypeUseTarget
<
K
extends
@B
Object
>
{
@B
String
@B
[]
field
;
@B
String
test
(
@B
TypeUseTarget
<
K
>
this
,
@B
String
param
,
@B
String
@B
...
vararg
)
{
@B
Object
o
=
new
@B
String
@B
[
3
];
TypeUseTarget
<
@B
String
>
target
;
return
(
@B
String
)
null
;
}
<
K
>
@B
String
genericMethod
(
K
k
)
{
return
null
;
}
@Decl
<
K
>
@B
String
genericMethod1
(
K
k
)
{
return
null
;
}
@B
@Decl
<
K
>
String
genericMethod2
(
K
k
)
{
return
null
;
}
@Decl
@B
<
K
>
String
genericMethod3
(
K
k
)
{
return
null
;
}
<
K
>
@Decl
String
genericMethod4
(
K
k
)
{
return
null
;
}
<
K
>
@B
@Decl
String
genericMethod5
(
K
k
)
{
return
null
;
}
}
@B
interface
MyInterface
{
}
@B
@interface
MyAnnotation
{
}
@Target
(
ElementType
.
TYPE_USE
)
@interface
B
{
}
@interface
Decl
{
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录