Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
c5dee304
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看板
提交
c5dee304
编写于
5月 30, 2013
作者:
X
xuelei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8014618: Need to strip leading zeros in TlsPremasterSecret of DHKeyAgreement
Reviewed-by: xuelei Contributed-by:
N
Pasi Eronen
<
pe@iki.fi
>
上级
199db0fa
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
861 addition
and
24 deletion
+861
-24
src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java
...share/classes/com/sun/crypto/provider/DHKeyAgreement.java
+4
-3
src/share/classes/sun/security/pkcs11/P11KeyAgreement.java
src/share/classes/sun/security/pkcs11/P11KeyAgreement.java
+2
-2
src/share/classes/sun/security/pkcs11/P11Signature.java
src/share/classes/sun/security/pkcs11/P11Signature.java
+4
-3
src/share/classes/sun/security/pkcs11/P11Util.java
src/share/classes/sun/security/pkcs11/P11Util.java
+1
-15
src/share/classes/sun/security/util/KeyUtil.java
src/share/classes/sun/security/util/KeyUtil.java
+20
-1
test/com/sun/crypto/provider/TLS/TestLeadingZeroes.java
test/com/sun/crypto/provider/TLS/TestLeadingZeroes.java
+420
-0
test/sun/security/pkcs11/tls/TestLeadingZeroesP11.java
test/sun/security/pkcs11/tls/TestLeadingZeroesP11.java
+410
-0
未找到文件。
src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java
浏览文件 @
c5dee304
/*
* Copyright (c) 1997, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 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
...
...
@@ -403,8 +403,9 @@ extends KeyAgreementSpi {
}
return
skey
;
}
else
if
(
algorithm
.
equals
(
"TlsPremasterSecret"
))
{
// return entire secret
return
new
SecretKeySpec
(
secret
,
"TlsPremasterSecret"
);
// remove leading zero bytes per RFC 5246 Section 8.1.2
return
new
SecretKeySpec
(
KeyUtil
.
trimZeroes
(
secret
),
"TlsPremasterSecret"
);
}
else
{
throw
new
NoSuchAlgorithmException
(
"Unsupported secret key "
+
"algorithm: "
+
algorithm
);
...
...
src/share/classes/sun/security/pkcs11/P11KeyAgreement.java
浏览文件 @
c5dee304
/*
* Copyright (c) 2003, 201
2
, 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
...
...
@@ -330,7 +330,7 @@ final class P11KeyAgreement extends KeyAgreementSpi {
// as here we always retrieve the CKA_VALUE even for tokens
// that do not have that bug.
byte
[]
keyBytes
=
key
.
getEncoded
();
byte
[]
newBytes
=
P11
Util
.
trimZeroes
(
keyBytes
);
byte
[]
newBytes
=
Key
Util
.
trimZeroes
(
keyBytes
);
if
(
keyBytes
!=
newBytes
)
{
key
=
new
SecretKeySpec
(
newBytes
,
algorithm
);
}
...
...
src/share/classes/sun/security/pkcs11/P11Signature.java
浏览文件 @
c5dee304
/*
* Copyright (c) 2003, 201
2
, 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
...
...
@@ -41,6 +41,7 @@ import sun.security.rsa.RSAPadding;
import
sun.security.pkcs11.wrapper.*
;
import
static
sun
.
security
.
pkcs11
.
wrapper
.
PKCS11Constants
.*;
import
sun.security.util.KeyUtil
;
/**
* Signature implementation class. This class currently supports the
...
...
@@ -697,8 +698,8 @@ final class P11Signature extends SignatureSpi {
BigInteger
r
=
values
[
0
].
getPositiveBigInteger
();
BigInteger
s
=
values
[
1
].
getPositiveBigInteger
();
// trim leading zeroes
byte
[]
br
=
P11
Util
.
trimZeroes
(
r
.
toByteArray
());
byte
[]
bs
=
P11
Util
.
trimZeroes
(
s
.
toByteArray
());
byte
[]
br
=
Key
Util
.
trimZeroes
(
r
.
toByteArray
());
byte
[]
bs
=
Key
Util
.
trimZeroes
(
s
.
toByteArray
());
int
k
=
Math
.
max
(
br
.
length
,
bs
.
length
);
// r and s each occupy half the array
byte
[]
res
=
new
byte
[
k
<<
1
];
...
...
src/share/classes/sun/security/pkcs11/P11Util.java
浏览文件 @
c5dee304
/*
* 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
...
...
@@ -131,20 +131,6 @@ public final class P11Util {
return
b
;
}
// 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
;
}
public
static
byte
[]
getMagnitude
(
BigInteger
bi
)
{
byte
[]
b
=
bi
.
toByteArray
();
if
((
b
.
length
>
1
)
&&
(
b
[
0
]
==
0
))
{
...
...
src/share/classes/sun/security/util/KeyUtil.java
浏览文件 @
c5dee304
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012,
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
...
...
@@ -200,5 +200,24 @@ public final class KeyUtil {
// Don't bother to check against the y^q mod p if safe primes are used.
}
/**
* Trim leading (most significant) zeroes from the result.
*
* @throws NullPointerException if {@code b} is null
*/
public
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
;
}
}
test/com/sun/crypto/provider/TLS/TestLeadingZeroes.java
0 → 100644
浏览文件 @
c5dee304
/*
* 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 8014618
* @summary Need to strip leading zeros in TlsPremasterSecret of DHKeyAgreement
* @author Pasi Eronen
*/
import
java.io.*
;
import
java.security.*
;
import
java.security.spec.*
;
import
java.security.interfaces.*
;
import
javax.crypto.*
;
import
javax.crypto.spec.*
;
import
javax.crypto.interfaces.*
;
import
com.sun.crypto.provider.SunJCE
;
/**
* Test that leading zeroes are stripped in TlsPremasterSecret case,
* but are left as-is in other cases.
*
* We use pre-generated keypairs, since with randomly generated keypairs,
* a leading zero happens only (roughly) 1 out of 256 cases.
*/
public
class
TestLeadingZeroes
{
private
static
final
String
SUNJCE
=
"SunJCE"
;
private
TestLeadingZeroes
()
{}
public
static
void
main
(
String
argv
[])
throws
Exception
{
// Add JCE to the list of providers
SunJCE
jce
=
new
SunJCE
();
Security
.
addProvider
(
jce
);
TestLeadingZeroes
keyAgree
=
new
TestLeadingZeroes
();
keyAgree
.
run
();
System
.
out
.
println
(
"Test Passed"
);
}
private
void
run
()
throws
Exception
{
// decode pre-generated keypairs
KeyFactory
kfac
=
KeyFactory
.
getInstance
(
"DH"
);
PublicKey
alicePubKey
=
kfac
.
generatePublic
(
new
X509EncodedKeySpec
(
alicePubKeyEnc
));
PublicKey
bobPubKey
=
kfac
.
generatePublic
(
new
X509EncodedKeySpec
(
bobPubKeyEnc
));
PrivateKey
alicePrivKey
=
kfac
.
generatePrivate
(
new
PKCS8EncodedKeySpec
(
alicePrivKeyEnc
));
PrivateKey
bobPrivKey
=
kfac
.
generatePrivate
(
new
PKCS8EncodedKeySpec
(
bobPrivKeyEnc
));
// generate normal shared secret
KeyAgreement
aliceKeyAgree
=
KeyAgreement
.
getInstance
(
"DH"
,
SUNJCE
);
aliceKeyAgree
.
init
(
alicePrivKey
);
aliceKeyAgree
.
doPhase
(
bobPubKey
,
true
);
byte
[]
sharedSecret
=
aliceKeyAgree
.
generateSecret
();
System
.
out
.
println
(
"shared secret:\n"
+
toHexString
(
sharedSecret
));
// verify that leading zero is present
if
(
sharedSecret
.
length
!=
128
)
{
throw
new
Exception
(
"Unexpected shared secret length"
);
}
if
(
sharedSecret
[
0
]
!=
0
)
{
throw
new
Exception
(
"First byte is not zero as expected"
);
}
// now, test TLS premaster secret
aliceKeyAgree
.
init
(
alicePrivKey
);
aliceKeyAgree
.
doPhase
(
bobPubKey
,
true
);
byte
[]
tlsPremasterSecret
=
aliceKeyAgree
.
generateSecret
(
"TlsPremasterSecret"
).
getEncoded
();
System
.
out
.
println
(
"tls premaster secret:\n"
+
toHexString
(
tlsPremasterSecret
));
// check that leading zero has been stripped
if
(
tlsPremasterSecret
.
length
!=
127
)
{
throw
new
Exception
(
"Unexpected TLS premaster secret length"
);
}
if
(
tlsPremasterSecret
[
0
]
==
0
)
{
throw
new
Exception
(
"First byte is zero"
);
}
for
(
int
i
=
0
;
i
<
tlsPremasterSecret
.
length
;
i
++)
{
if
(
tlsPremasterSecret
[
i
]
!=
sharedSecret
[
i
+
1
])
{
throw
new
Exception
(
"Shared secrets differ"
);
}
}
}
/*
* Converts a byte to hex digit and writes to the supplied buffer
*/
private
void
byte2hex
(
byte
b
,
StringBuffer
buf
)
{
char
[]
hexChars
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
};
int
high
=
((
b
&
0xf0
)
>>
4
);
int
low
=
(
b
&
0x0f
);
buf
.
append
(
hexChars
[
high
]);
buf
.
append
(
hexChars
[
low
]);
}
/*
* Converts a byte array to hex string
*/
private
String
toHexString
(
byte
[]
block
)
{
StringBuffer
buf
=
new
StringBuffer
();
int
len
=
block
.
length
;
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
byte2hex
(
block
[
i
],
buf
);
if
(
i
<
len
-
1
)
{
buf
.
append
(
":"
);
}
}
return
buf
.
toString
();
}
private
static
final
byte
alicePubKeyEnc
[]
=
{
(
byte
)
0x30
,
(
byte
)
0x82
,
(
byte
)
0x01
,
(
byte
)
0x24
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x99
,
(
byte
)
0x06
,
(
byte
)
0x09
,
(
byte
)
0x2A
,
(
byte
)
0x86
,
(
byte
)
0x48
,
(
byte
)
0x86
,
(
byte
)
0xF7
,
(
byte
)
0x0D
,
(
byte
)
0x01
,
(
byte
)
0x03
,
(
byte
)
0x01
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x8B
,
(
byte
)
0x02
,
(
byte
)
0x81
,
(
byte
)
0x81
,
(
byte
)
0x00
,
(
byte
)
0xF4
,
(
byte
)
0x88
,
(
byte
)
0xFD
,
(
byte
)
0x58
,
(
byte
)
0x4E
,
(
byte
)
0x49
,
(
byte
)
0xDB
,
(
byte
)
0xCD
,
(
byte
)
0x20
,
(
byte
)
0xB4
,
(
byte
)
0x9D
,
(
byte
)
0xE4
,
(
byte
)
0x91
,
(
byte
)
0x07
,
(
byte
)
0x36
,
(
byte
)
0x6B
,
(
byte
)
0x33
,
(
byte
)
0x6C
,
(
byte
)
0x38
,
(
byte
)
0x0D
,
(
byte
)
0x45
,
(
byte
)
0x1D
,
(
byte
)
0x0F
,
(
byte
)
0x7C
,
(
byte
)
0x88
,
(
byte
)
0xB3
,
(
byte
)
0x1C
,
(
byte
)
0x7C
,
(
byte
)
0x5B
,
(
byte
)
0x2D
,
(
byte
)
0x8E
,
(
byte
)
0xF6
,
(
byte
)
0xF3
,
(
byte
)
0xC9
,
(
byte
)
0x23
,
(
byte
)
0xC0
,
(
byte
)
0x43
,
(
byte
)
0xF0
,
(
byte
)
0xA5
,
(
byte
)
0x5B
,
(
byte
)
0x18
,
(
byte
)
0x8D
,
(
byte
)
0x8E
,
(
byte
)
0xBB
,
(
byte
)
0x55
,
(
byte
)
0x8C
,
(
byte
)
0xB8
,
(
byte
)
0x5D
,
(
byte
)
0x38
,
(
byte
)
0xD3
,
(
byte
)
0x34
,
(
byte
)
0xFD
,
(
byte
)
0x7C
,
(
byte
)
0x17
,
(
byte
)
0x57
,
(
byte
)
0x43
,
(
byte
)
0xA3
,
(
byte
)
0x1D
,
(
byte
)
0x18
,
(
byte
)
0x6C
,
(
byte
)
0xDE
,
(
byte
)
0x33
,
(
byte
)
0x21
,
(
byte
)
0x2C
,
(
byte
)
0xB5
,
(
byte
)
0x2A
,
(
byte
)
0xFF
,
(
byte
)
0x3C
,
(
byte
)
0xE1
,
(
byte
)
0xB1
,
(
byte
)
0x29
,
(
byte
)
0x40
,
(
byte
)
0x18
,
(
byte
)
0x11
,
(
byte
)
0x8D
,
(
byte
)
0x7C
,
(
byte
)
0x84
,
(
byte
)
0xA7
,
(
byte
)
0x0A
,
(
byte
)
0x72
,
(
byte
)
0xD6
,
(
byte
)
0x86
,
(
byte
)
0xC4
,
(
byte
)
0x03
,
(
byte
)
0x19
,
(
byte
)
0xC8
,
(
byte
)
0x07
,
(
byte
)
0x29
,
(
byte
)
0x7A
,
(
byte
)
0xCA
,
(
byte
)
0x95
,
(
byte
)
0x0C
,
(
byte
)
0xD9
,
(
byte
)
0x96
,
(
byte
)
0x9F
,
(
byte
)
0xAB
,
(
byte
)
0xD0
,
(
byte
)
0x0A
,
(
byte
)
0x50
,
(
byte
)
0x9B
,
(
byte
)
0x02
,
(
byte
)
0x46
,
(
byte
)
0xD3
,
(
byte
)
0x08
,
(
byte
)
0x3D
,
(
byte
)
0x66
,
(
byte
)
0xA4
,
(
byte
)
0x5D
,
(
byte
)
0x41
,
(
byte
)
0x9F
,
(
byte
)
0x9C
,
(
byte
)
0x7C
,
(
byte
)
0xBD
,
(
byte
)
0x89
,
(
byte
)
0x4B
,
(
byte
)
0x22
,
(
byte
)
0x19
,
(
byte
)
0x26
,
(
byte
)
0xBA
,
(
byte
)
0xAB
,
(
byte
)
0xA2
,
(
byte
)
0x5E
,
(
byte
)
0xC3
,
(
byte
)
0x55
,
(
byte
)
0xE9
,
(
byte
)
0x2F
,
(
byte
)
0x78
,
(
byte
)
0xC7
,
(
byte
)
0x02
,
(
byte
)
0x01
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x00
,
(
byte
)
0x03
,
(
byte
)
0x81
,
(
byte
)
0x85
,
(
byte
)
0x00
,
(
byte
)
0x02
,
(
byte
)
0x81
,
(
byte
)
0x81
,
(
byte
)
0x00
,
(
byte
)
0xEE
,
(
byte
)
0xD6
,
(
byte
)
0xB1
,
(
byte
)
0xA3
,
(
byte
)
0xB4
,
(
byte
)
0x78
,
(
byte
)
0x2B
,
(
byte
)
0x35
,
(
byte
)
0xEF
,
(
byte
)
0xCD
,
(
byte
)
0x17
,
(
byte
)
0x86
,
(
byte
)
0x63
,
(
byte
)
0x2B
,
(
byte
)
0x97
,
(
byte
)
0x0E
,
(
byte
)
0x7A
,
(
byte
)
0xD1
,
(
byte
)
0xFF
,
(
byte
)
0x7A
,
(
byte
)
0xEB
,
(
byte
)
0x57
,
(
byte
)
0x61
,
(
byte
)
0xA1
,
(
byte
)
0xF7
,
(
byte
)
0x90
,
(
byte
)
0x11
,
(
byte
)
0xA7
,
(
byte
)
0x79
,
(
byte
)
0x28
,
(
byte
)
0x69
,
(
byte
)
0xBA
,
(
byte
)
0xA7
,
(
byte
)
0xB2
,
(
byte
)
0x37
,
(
byte
)
0x17
,
(
byte
)
0xAE
,
(
byte
)
0x3C
,
(
byte
)
0x92
,
(
byte
)
0x89
,
(
byte
)
0x88
,
(
byte
)
0xE5
,
(
byte
)
0x7E
,
(
byte
)
0x8E
,
(
byte
)
0xF0
,
(
byte
)
0x24
,
(
byte
)
0xD0
,
(
byte
)
0xE1
,
(
byte
)
0xC4
,
(
byte
)
0xB0
,
(
byte
)
0x26
,
(
byte
)
0x5A
,
(
byte
)
0x1E
,
(
byte
)
0xBD
,
(
byte
)
0xA0
,
(
byte
)
0xCF
,
(
byte
)
0x3E
,
(
byte
)
0x97
,
(
byte
)
0x2A
,
(
byte
)
0x13
,
(
byte
)
0x92
,
(
byte
)
0x3B
,
(
byte
)
0x39
,
(
byte
)
0xD0
,
(
byte
)
0x1D
,
(
byte
)
0xA3
,
(
byte
)
0x6B
,
(
byte
)
0x3E
,
(
byte
)
0xC2
,
(
byte
)
0xBB
,
(
byte
)
0x14
,
(
byte
)
0xB6
,
(
byte
)
0xE2
,
(
byte
)
0x4C
,
(
byte
)
0x0E
,
(
byte
)
0x5B
,
(
byte
)
0x4B
,
(
byte
)
0xA4
,
(
byte
)
0x9D
,
(
byte
)
0xA6
,
(
byte
)
0x21
,
(
byte
)
0xB0
,
(
byte
)
0xF9
,
(
byte
)
0xDE
,
(
byte
)
0x55
,
(
byte
)
0xAE
,
(
byte
)
0x5C
,
(
byte
)
0x29
,
(
byte
)
0x0E
,
(
byte
)
0xC1
,
(
byte
)
0xFC
,
(
byte
)
0xBA
,
(
byte
)
0x51
,
(
byte
)
0xD3
,
(
byte
)
0xB6
,
(
byte
)
0x6D
,
(
byte
)
0x75
,
(
byte
)
0x72
,
(
byte
)
0xDF
,
(
byte
)
0x43
,
(
byte
)
0xAB
,
(
byte
)
0x94
,
(
byte
)
0x21
,
(
byte
)
0x6E
,
(
byte
)
0x0C
,
(
byte
)
0xD1
,
(
byte
)
0x93
,
(
byte
)
0x54
,
(
byte
)
0x56
,
(
byte
)
0x7D
,
(
byte
)
0x4B
,
(
byte
)
0x90
,
(
byte
)
0xF1
,
(
byte
)
0x94
,
(
byte
)
0x45
,
(
byte
)
0xD4
,
(
byte
)
0x2A
,
(
byte
)
0x71
,
(
byte
)
0xA1
,
(
byte
)
0xB8
,
(
byte
)
0xDD
,
(
byte
)
0xAA
,
(
byte
)
0x05
,
(
byte
)
0xF0
,
(
byte
)
0x27
,
(
byte
)
0x37
,
(
byte
)
0xBD
,
(
byte
)
0x44
};
private
static
final
byte
alicePrivKeyEnc
[]
=
{
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0xE3
,
(
byte
)
0x02
,
(
byte
)
0x01
,
(
byte
)
0x00
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x99
,
(
byte
)
0x06
,
(
byte
)
0x09
,
(
byte
)
0x2A
,
(
byte
)
0x86
,
(
byte
)
0x48
,
(
byte
)
0x86
,
(
byte
)
0xF7
,
(
byte
)
0x0D
,
(
byte
)
0x01
,
(
byte
)
0x03
,
(
byte
)
0x01
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x8B
,
(
byte
)
0x02
,
(
byte
)
0x81
,
(
byte
)
0x81
,
(
byte
)
0x00
,
(
byte
)
0xF4
,
(
byte
)
0x88
,
(
byte
)
0xFD
,
(
byte
)
0x58
,
(
byte
)
0x4E
,
(
byte
)
0x49
,
(
byte
)
0xDB
,
(
byte
)
0xCD
,
(
byte
)
0x20
,
(
byte
)
0xB4
,
(
byte
)
0x9D
,
(
byte
)
0xE4
,
(
byte
)
0x91
,
(
byte
)
0x07
,
(
byte
)
0x36
,
(
byte
)
0x6B
,
(
byte
)
0x33
,
(
byte
)
0x6C
,
(
byte
)
0x38
,
(
byte
)
0x0D
,
(
byte
)
0x45
,
(
byte
)
0x1D
,
(
byte
)
0x0F
,
(
byte
)
0x7C
,
(
byte
)
0x88
,
(
byte
)
0xB3
,
(
byte
)
0x1C
,
(
byte
)
0x7C
,
(
byte
)
0x5B
,
(
byte
)
0x2D
,
(
byte
)
0x8E
,
(
byte
)
0xF6
,
(
byte
)
0xF3
,
(
byte
)
0xC9
,
(
byte
)
0x23
,
(
byte
)
0xC0
,
(
byte
)
0x43
,
(
byte
)
0xF0
,
(
byte
)
0xA5
,
(
byte
)
0x5B
,
(
byte
)
0x18
,
(
byte
)
0x8D
,
(
byte
)
0x8E
,
(
byte
)
0xBB
,
(
byte
)
0x55
,
(
byte
)
0x8C
,
(
byte
)
0xB8
,
(
byte
)
0x5D
,
(
byte
)
0x38
,
(
byte
)
0xD3
,
(
byte
)
0x34
,
(
byte
)
0xFD
,
(
byte
)
0x7C
,
(
byte
)
0x17
,
(
byte
)
0x57
,
(
byte
)
0x43
,
(
byte
)
0xA3
,
(
byte
)
0x1D
,
(
byte
)
0x18
,
(
byte
)
0x6C
,
(
byte
)
0xDE
,
(
byte
)
0x33
,
(
byte
)
0x21
,
(
byte
)
0x2C
,
(
byte
)
0xB5
,
(
byte
)
0x2A
,
(
byte
)
0xFF
,
(
byte
)
0x3C
,
(
byte
)
0xE1
,
(
byte
)
0xB1
,
(
byte
)
0x29
,
(
byte
)
0x40
,
(
byte
)
0x18
,
(
byte
)
0x11
,
(
byte
)
0x8D
,
(
byte
)
0x7C
,
(
byte
)
0x84
,
(
byte
)
0xA7
,
(
byte
)
0x0A
,
(
byte
)
0x72
,
(
byte
)
0xD6
,
(
byte
)
0x86
,
(
byte
)
0xC4
,
(
byte
)
0x03
,
(
byte
)
0x19
,
(
byte
)
0xC8
,
(
byte
)
0x07
,
(
byte
)
0x29
,
(
byte
)
0x7A
,
(
byte
)
0xCA
,
(
byte
)
0x95
,
(
byte
)
0x0C
,
(
byte
)
0xD9
,
(
byte
)
0x96
,
(
byte
)
0x9F
,
(
byte
)
0xAB
,
(
byte
)
0xD0
,
(
byte
)
0x0A
,
(
byte
)
0x50
,
(
byte
)
0x9B
,
(
byte
)
0x02
,
(
byte
)
0x46
,
(
byte
)
0xD3
,
(
byte
)
0x08
,
(
byte
)
0x3D
,
(
byte
)
0x66
,
(
byte
)
0xA4
,
(
byte
)
0x5D
,
(
byte
)
0x41
,
(
byte
)
0x9F
,
(
byte
)
0x9C
,
(
byte
)
0x7C
,
(
byte
)
0xBD
,
(
byte
)
0x89
,
(
byte
)
0x4B
,
(
byte
)
0x22
,
(
byte
)
0x19
,
(
byte
)
0x26
,
(
byte
)
0xBA
,
(
byte
)
0xAB
,
(
byte
)
0xA2
,
(
byte
)
0x5E
,
(
byte
)
0xC3
,
(
byte
)
0x55
,
(
byte
)
0xE9
,
(
byte
)
0x2F
,
(
byte
)
0x78
,
(
byte
)
0xC7
,
(
byte
)
0x02
,
(
byte
)
0x01
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x00
,
(
byte
)
0x04
,
(
byte
)
0x42
,
(
byte
)
0x02
,
(
byte
)
0x40
,
(
byte
)
0x36
,
(
byte
)
0x4D
,
(
byte
)
0xD0
,
(
byte
)
0x58
,
(
byte
)
0x64
,
(
byte
)
0x91
,
(
byte
)
0x78
,
(
byte
)
0xA2
,
(
byte
)
0x4B
,
(
byte
)
0x79
,
(
byte
)
0x46
,
(
byte
)
0xFE
,
(
byte
)
0xC9
,
(
byte
)
0xD9
,
(
byte
)
0xCA
,
(
byte
)
0x5C
,
(
byte
)
0xF9
,
(
byte
)
0xFD
,
(
byte
)
0x6C
,
(
byte
)
0x5D
,
(
byte
)
0x76
,
(
byte
)
0x3A
,
(
byte
)
0x41
,
(
byte
)
0x6D
,
(
byte
)
0x44
,
(
byte
)
0x62
,
(
byte
)
0x75
,
(
byte
)
0x93
,
(
byte
)
0x81
,
(
byte
)
0x93
,
(
byte
)
0x00
,
(
byte
)
0x4C
,
(
byte
)
0xB1
,
(
byte
)
0xD8
,
(
byte
)
0x7D
,
(
byte
)
0x9D
,
(
byte
)
0xF3
,
(
byte
)
0x16
,
(
byte
)
0x2C
,
(
byte
)
0x6C
,
(
byte
)
0x9F
,
(
byte
)
0x7A
,
(
byte
)
0x84
,
(
byte
)
0xA3
,
(
byte
)
0x7A
,
(
byte
)
0xC1
,
(
byte
)
0x4F
,
(
byte
)
0x60
,
(
byte
)
0xE3
,
(
byte
)
0xB5
,
(
byte
)
0x86
,
(
byte
)
0x28
,
(
byte
)
0x08
,
(
byte
)
0x4D
,
(
byte
)
0x94
,
(
byte
)
0xB6
,
(
byte
)
0x04
,
(
byte
)
0x0D
,
(
byte
)
0xAC
,
(
byte
)
0xBD
,
(
byte
)
0x1F
,
(
byte
)
0x42
,
(
byte
)
0x8F
,
(
byte
)
0x1B
};
private
static
final
byte
bobPubKeyEnc
[]
=
{
(
byte
)
0x30
,
(
byte
)
0x82
,
(
byte
)
0x01
,
(
byte
)
0x23
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x99
,
(
byte
)
0x06
,
(
byte
)
0x09
,
(
byte
)
0x2A
,
(
byte
)
0x86
,
(
byte
)
0x48
,
(
byte
)
0x86
,
(
byte
)
0xF7
,
(
byte
)
0x0D
,
(
byte
)
0x01
,
(
byte
)
0x03
,
(
byte
)
0x01
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x8B
,
(
byte
)
0x02
,
(
byte
)
0x81
,
(
byte
)
0x81
,
(
byte
)
0x00
,
(
byte
)
0xF4
,
(
byte
)
0x88
,
(
byte
)
0xFD
,
(
byte
)
0x58
,
(
byte
)
0x4E
,
(
byte
)
0x49
,
(
byte
)
0xDB
,
(
byte
)
0xCD
,
(
byte
)
0x20
,
(
byte
)
0xB4
,
(
byte
)
0x9D
,
(
byte
)
0xE4
,
(
byte
)
0x91
,
(
byte
)
0x07
,
(
byte
)
0x36
,
(
byte
)
0x6B
,
(
byte
)
0x33
,
(
byte
)
0x6C
,
(
byte
)
0x38
,
(
byte
)
0x0D
,
(
byte
)
0x45
,
(
byte
)
0x1D
,
(
byte
)
0x0F
,
(
byte
)
0x7C
,
(
byte
)
0x88
,
(
byte
)
0xB3
,
(
byte
)
0x1C
,
(
byte
)
0x7C
,
(
byte
)
0x5B
,
(
byte
)
0x2D
,
(
byte
)
0x8E
,
(
byte
)
0xF6
,
(
byte
)
0xF3
,
(
byte
)
0xC9
,
(
byte
)
0x23
,
(
byte
)
0xC0
,
(
byte
)
0x43
,
(
byte
)
0xF0
,
(
byte
)
0xA5
,
(
byte
)
0x5B
,
(
byte
)
0x18
,
(
byte
)
0x8D
,
(
byte
)
0x8E
,
(
byte
)
0xBB
,
(
byte
)
0x55
,
(
byte
)
0x8C
,
(
byte
)
0xB8
,
(
byte
)
0x5D
,
(
byte
)
0x38
,
(
byte
)
0xD3
,
(
byte
)
0x34
,
(
byte
)
0xFD
,
(
byte
)
0x7C
,
(
byte
)
0x17
,
(
byte
)
0x57
,
(
byte
)
0x43
,
(
byte
)
0xA3
,
(
byte
)
0x1D
,
(
byte
)
0x18
,
(
byte
)
0x6C
,
(
byte
)
0xDE
,
(
byte
)
0x33
,
(
byte
)
0x21
,
(
byte
)
0x2C
,
(
byte
)
0xB5
,
(
byte
)
0x2A
,
(
byte
)
0xFF
,
(
byte
)
0x3C
,
(
byte
)
0xE1
,
(
byte
)
0xB1
,
(
byte
)
0x29
,
(
byte
)
0x40
,
(
byte
)
0x18
,
(
byte
)
0x11
,
(
byte
)
0x8D
,
(
byte
)
0x7C
,
(
byte
)
0x84
,
(
byte
)
0xA7
,
(
byte
)
0x0A
,
(
byte
)
0x72
,
(
byte
)
0xD6
,
(
byte
)
0x86
,
(
byte
)
0xC4
,
(
byte
)
0x03
,
(
byte
)
0x19
,
(
byte
)
0xC8
,
(
byte
)
0x07
,
(
byte
)
0x29
,
(
byte
)
0x7A
,
(
byte
)
0xCA
,
(
byte
)
0x95
,
(
byte
)
0x0C
,
(
byte
)
0xD9
,
(
byte
)
0x96
,
(
byte
)
0x9F
,
(
byte
)
0xAB
,
(
byte
)
0xD0
,
(
byte
)
0x0A
,
(
byte
)
0x50
,
(
byte
)
0x9B
,
(
byte
)
0x02
,
(
byte
)
0x46
,
(
byte
)
0xD3
,
(
byte
)
0x08
,
(
byte
)
0x3D
,
(
byte
)
0x66
,
(
byte
)
0xA4
,
(
byte
)
0x5D
,
(
byte
)
0x41
,
(
byte
)
0x9F
,
(
byte
)
0x9C
,
(
byte
)
0x7C
,
(
byte
)
0xBD
,
(
byte
)
0x89
,
(
byte
)
0x4B
,
(
byte
)
0x22
,
(
byte
)
0x19
,
(
byte
)
0x26
,
(
byte
)
0xBA
,
(
byte
)
0xAB
,
(
byte
)
0xA2
,
(
byte
)
0x5E
,
(
byte
)
0xC3
,
(
byte
)
0x55
,
(
byte
)
0xE9
,
(
byte
)
0x2F
,
(
byte
)
0x78
,
(
byte
)
0xC7
,
(
byte
)
0x02
,
(
byte
)
0x01
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x00
,
(
byte
)
0x03
,
(
byte
)
0x81
,
(
byte
)
0x84
,
(
byte
)
0x00
,
(
byte
)
0x02
,
(
byte
)
0x81
,
(
byte
)
0x80
,
(
byte
)
0x2C
,
(
byte
)
0x40
,
(
byte
)
0xFA
,
(
byte
)
0xF6
,
(
byte
)
0xA6
,
(
byte
)
0xF8
,
(
byte
)
0xAC
,
(
byte
)
0xC2
,
(
byte
)
0x4F
,
(
byte
)
0xCD
,
(
byte
)
0xC7
,
(
byte
)
0x37
,
(
byte
)
0x93
,
(
byte
)
0xE5
,
(
byte
)
0xE4
,
(
byte
)
0x5E
,
(
byte
)
0x18
,
(
byte
)
0x14
,
(
byte
)
0xE6
,
(
byte
)
0x50
,
(
byte
)
0xDA
,
(
byte
)
0x55
,
(
byte
)
0x38
,
(
byte
)
0x5D
,
(
byte
)
0x24
,
(
byte
)
0xF5
,
(
byte
)
0x42
,
(
byte
)
0x68
,
(
byte
)
0x5F
,
(
byte
)
0xF5
,
(
byte
)
0x15
,
(
byte
)
0xC8
,
(
byte
)
0x9B
,
(
byte
)
0x5D
,
(
byte
)
0x06
,
(
byte
)
0x3D
,
(
byte
)
0xE1
,
(
byte
)
0x52
,
(
byte
)
0x2F
,
(
byte
)
0x98
,
(
byte
)
0xFF
,
(
byte
)
0x37
,
(
byte
)
0xBB
,
(
byte
)
0x75
,
(
byte
)
0x48
,
(
byte
)
0x48
,
(
byte
)
0xE9
,
(
byte
)
0x65
,
(
byte
)
0x84
,
(
byte
)
0x37
,
(
byte
)
0xBB
,
(
byte
)
0xB3
,
(
byte
)
0xE9
,
(
byte
)
0x36
,
(
byte
)
0x01
,
(
byte
)
0xB4
,
(
byte
)
0x6A
,
(
byte
)
0x1C
,
(
byte
)
0xB2
,
(
byte
)
0x11
,
(
byte
)
0x82
,
(
byte
)
0xCE
,
(
byte
)
0x3D
,
(
byte
)
0x65
,
(
byte
)
0xE5
,
(
byte
)
0x3C
,
(
byte
)
0x89
,
(
byte
)
0xE9
,
(
byte
)
0x52
,
(
byte
)
0x19
,
(
byte
)
0xBD
,
(
byte
)
0x58
,
(
byte
)
0xF6
,
(
byte
)
0xA2
,
(
byte
)
0x03
,
(
byte
)
0xA8
,
(
byte
)
0xB2
,
(
byte
)
0xA5
,
(
byte
)
0xDB
,
(
byte
)
0xEB
,
(
byte
)
0xF5
,
(
byte
)
0x94
,
(
byte
)
0xF9
,
(
byte
)
0x46
,
(
byte
)
0xBE
,
(
byte
)
0x45
,
(
byte
)
0x4C
,
(
byte
)
0x65
,
(
byte
)
0xD2
,
(
byte
)
0xD1
,
(
byte
)
0xCF
,
(
byte
)
0xFF
,
(
byte
)
0xFF
,
(
byte
)
0xFA
,
(
byte
)
0x38
,
(
byte
)
0xF1
,
(
byte
)
0x72
,
(
byte
)
0xAB
,
(
byte
)
0xB9
,
(
byte
)
0x14
,
(
byte
)
0x4E
,
(
byte
)
0xF5
,
(
byte
)
0xF0
,
(
byte
)
0x7A
,
(
byte
)
0x8E
,
(
byte
)
0x45
,
(
byte
)
0xFD
,
(
byte
)
0x5B
,
(
byte
)
0xF9
,
(
byte
)
0xA2
,
(
byte
)
0x97
,
(
byte
)
0x1B
,
(
byte
)
0xAE
,
(
byte
)
0x2C
,
(
byte
)
0x7B
,
(
byte
)
0x6B
,
(
byte
)
0x7C
,
(
byte
)
0x98
,
(
byte
)
0xFE
,
(
byte
)
0x58
,
(
byte
)
0xDD
,
(
byte
)
0xBE
,
(
byte
)
0xF6
,
(
byte
)
0x1C
,
(
byte
)
0x8E
,
(
byte
)
0xD0
,
(
byte
)
0xA1
,
(
byte
)
0x72
};
private
static
final
byte
bobPrivKeyEnc
[]
=
{
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0xE4
,
(
byte
)
0x02
,
(
byte
)
0x01
,
(
byte
)
0x00
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x99
,
(
byte
)
0x06
,
(
byte
)
0x09
,
(
byte
)
0x2A
,
(
byte
)
0x86
,
(
byte
)
0x48
,
(
byte
)
0x86
,
(
byte
)
0xF7
,
(
byte
)
0x0D
,
(
byte
)
0x01
,
(
byte
)
0x03
,
(
byte
)
0x01
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x8B
,
(
byte
)
0x02
,
(
byte
)
0x81
,
(
byte
)
0x81
,
(
byte
)
0x00
,
(
byte
)
0xF4
,
(
byte
)
0x88
,
(
byte
)
0xFD
,
(
byte
)
0x58
,
(
byte
)
0x4E
,
(
byte
)
0x49
,
(
byte
)
0xDB
,
(
byte
)
0xCD
,
(
byte
)
0x20
,
(
byte
)
0xB4
,
(
byte
)
0x9D
,
(
byte
)
0xE4
,
(
byte
)
0x91
,
(
byte
)
0x07
,
(
byte
)
0x36
,
(
byte
)
0x6B
,
(
byte
)
0x33
,
(
byte
)
0x6C
,
(
byte
)
0x38
,
(
byte
)
0x0D
,
(
byte
)
0x45
,
(
byte
)
0x1D
,
(
byte
)
0x0F
,
(
byte
)
0x7C
,
(
byte
)
0x88
,
(
byte
)
0xB3
,
(
byte
)
0x1C
,
(
byte
)
0x7C
,
(
byte
)
0x5B
,
(
byte
)
0x2D
,
(
byte
)
0x8E
,
(
byte
)
0xF6
,
(
byte
)
0xF3
,
(
byte
)
0xC9
,
(
byte
)
0x23
,
(
byte
)
0xC0
,
(
byte
)
0x43
,
(
byte
)
0xF0
,
(
byte
)
0xA5
,
(
byte
)
0x5B
,
(
byte
)
0x18
,
(
byte
)
0x8D
,
(
byte
)
0x8E
,
(
byte
)
0xBB
,
(
byte
)
0x55
,
(
byte
)
0x8C
,
(
byte
)
0xB8
,
(
byte
)
0x5D
,
(
byte
)
0x38
,
(
byte
)
0xD3
,
(
byte
)
0x34
,
(
byte
)
0xFD
,
(
byte
)
0x7C
,
(
byte
)
0x17
,
(
byte
)
0x57
,
(
byte
)
0x43
,
(
byte
)
0xA3
,
(
byte
)
0x1D
,
(
byte
)
0x18
,
(
byte
)
0x6C
,
(
byte
)
0xDE
,
(
byte
)
0x33
,
(
byte
)
0x21
,
(
byte
)
0x2C
,
(
byte
)
0xB5
,
(
byte
)
0x2A
,
(
byte
)
0xFF
,
(
byte
)
0x3C
,
(
byte
)
0xE1
,
(
byte
)
0xB1
,
(
byte
)
0x29
,
(
byte
)
0x40
,
(
byte
)
0x18
,
(
byte
)
0x11
,
(
byte
)
0x8D
,
(
byte
)
0x7C
,
(
byte
)
0x84
,
(
byte
)
0xA7
,
(
byte
)
0x0A
,
(
byte
)
0x72
,
(
byte
)
0xD6
,
(
byte
)
0x86
,
(
byte
)
0xC4
,
(
byte
)
0x03
,
(
byte
)
0x19
,
(
byte
)
0xC8
,
(
byte
)
0x07
,
(
byte
)
0x29
,
(
byte
)
0x7A
,
(
byte
)
0xCA
,
(
byte
)
0x95
,
(
byte
)
0x0C
,
(
byte
)
0xD9
,
(
byte
)
0x96
,
(
byte
)
0x9F
,
(
byte
)
0xAB
,
(
byte
)
0xD0
,
(
byte
)
0x0A
,
(
byte
)
0x50
,
(
byte
)
0x9B
,
(
byte
)
0x02
,
(
byte
)
0x46
,
(
byte
)
0xD3
,
(
byte
)
0x08
,
(
byte
)
0x3D
,
(
byte
)
0x66
,
(
byte
)
0xA4
,
(
byte
)
0x5D
,
(
byte
)
0x41
,
(
byte
)
0x9F
,
(
byte
)
0x9C
,
(
byte
)
0x7C
,
(
byte
)
0xBD
,
(
byte
)
0x89
,
(
byte
)
0x4B
,
(
byte
)
0x22
,
(
byte
)
0x19
,
(
byte
)
0x26
,
(
byte
)
0xBA
,
(
byte
)
0xAB
,
(
byte
)
0xA2
,
(
byte
)
0x5E
,
(
byte
)
0xC3
,
(
byte
)
0x55
,
(
byte
)
0xE9
,
(
byte
)
0x2F
,
(
byte
)
0x78
,
(
byte
)
0xC7
,
(
byte
)
0x02
,
(
byte
)
0x01
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x00
,
(
byte
)
0x04
,
(
byte
)
0x43
,
(
byte
)
0x02
,
(
byte
)
0x41
,
(
byte
)
0x00
,
(
byte
)
0xE0
,
(
byte
)
0x31
,
(
byte
)
0xE7
,
(
byte
)
0x77
,
(
byte
)
0xB8
,
(
byte
)
0xD0
,
(
byte
)
0x7E
,
(
byte
)
0x0A
,
(
byte
)
0x9B
,
(
byte
)
0x94
,
(
byte
)
0xD5
,
(
byte
)
0x3D
,
(
byte
)
0x33
,
(
byte
)
0x62
,
(
byte
)
0x32
,
(
byte
)
0x51
,
(
byte
)
0xCE
,
(
byte
)
0x74
,
(
byte
)
0x5C
,
(
byte
)
0xA5
,
(
byte
)
0x72
,
(
byte
)
0xD9
,
(
byte
)
0x36
,
(
byte
)
0xF3
,
(
byte
)
0x8A
,
(
byte
)
0x3F
,
(
byte
)
0x8B
,
(
byte
)
0xC6
,
(
byte
)
0xFE
,
(
byte
)
0xEF
,
(
byte
)
0x94
,
(
byte
)
0x8B
,
(
byte
)
0x50
,
(
byte
)
0x41
,
(
byte
)
0x9B
,
(
byte
)
0x14
,
(
byte
)
0xC8
,
(
byte
)
0xE9
,
(
byte
)
0x1F
,
(
byte
)
0x24
,
(
byte
)
0x1F
,
(
byte
)
0x65
,
(
byte
)
0x8E
,
(
byte
)
0xD3
,
(
byte
)
0x85
,
(
byte
)
0xD0
,
(
byte
)
0x68
,
(
byte
)
0x6C
,
(
byte
)
0xF1
,
(
byte
)
0x79
,
(
byte
)
0x45
,
(
byte
)
0xD0
,
(
byte
)
0x06
,
(
byte
)
0xA4
,
(
byte
)
0xB8
,
(
byte
)
0xE0
,
(
byte
)
0x64
,
(
byte
)
0xF5
,
(
byte
)
0x38
,
(
byte
)
0x72
,
(
byte
)
0x97
,
(
byte
)
0x00
,
(
byte
)
0x23
,
(
byte
)
0x5F
};
}
test/sun/security/pkcs11/tls/TestLeadingZeroesP11.java
0 → 100644
浏览文件 @
c5dee304
/*
* 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 8014618
* @summary Need to strip leading zeros in TlsPremasterSecret of DHKeyAgreement
* @library ..
* @author Pasi Eronen
*/
import
java.io.*
;
import
java.security.*
;
import
java.security.spec.*
;
import
java.security.interfaces.*
;
import
javax.crypto.*
;
import
javax.crypto.spec.*
;
import
javax.crypto.interfaces.*
;
/**
* Test that leading zeroes are stripped in TlsPremasterSecret case,
* but are left as-is in other cases.
*
* We use pre-generated keypairs, since with randomly generated keypairs,
* a leading zero happens only (roughly) 1 out of 256 cases.
*/
public
class
TestLeadingZeroesP11
extends
PKCS11Test
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
main
(
new
TestLeadingZeroesP11
());
}
public
void
main
(
Provider
p
)
throws
Exception
{
// decode pre-generated keypairs
KeyFactory
kfac
=
KeyFactory
.
getInstance
(
"DH"
,
p
);
PublicKey
alicePubKey
=
kfac
.
generatePublic
(
new
X509EncodedKeySpec
(
alicePubKeyEnc
));
PublicKey
bobPubKey
=
kfac
.
generatePublic
(
new
X509EncodedKeySpec
(
bobPubKeyEnc
));
PrivateKey
alicePrivKey
=
kfac
.
generatePrivate
(
new
PKCS8EncodedKeySpec
(
alicePrivKeyEnc
));
PrivateKey
bobPrivKey
=
kfac
.
generatePrivate
(
new
PKCS8EncodedKeySpec
(
bobPrivKeyEnc
));
// generate normal shared secret
KeyAgreement
aliceKeyAgree
=
KeyAgreement
.
getInstance
(
"DH"
,
p
);
aliceKeyAgree
.
init
(
alicePrivKey
);
aliceKeyAgree
.
doPhase
(
bobPubKey
,
true
);
byte
[]
sharedSecret
=
aliceKeyAgree
.
generateSecret
();
System
.
out
.
println
(
"shared secret:\n"
+
toHexString
(
sharedSecret
));
// verify that leading zero is present
if
(
sharedSecret
.
length
!=
128
)
{
throw
new
Exception
(
"Unexpected shared secret length"
);
}
if
(
sharedSecret
[
0
]
!=
0
)
{
throw
new
Exception
(
"First byte is not zero as expected"
);
}
// now, test TLS premaster secret
aliceKeyAgree
.
init
(
alicePrivKey
);
aliceKeyAgree
.
doPhase
(
bobPubKey
,
true
);
byte
[]
tlsPremasterSecret
=
aliceKeyAgree
.
generateSecret
(
"TlsPremasterSecret"
).
getEncoded
();
System
.
out
.
println
(
"tls premaster secret:\n"
+
toHexString
(
tlsPremasterSecret
));
// check that leading zero has been stripped
if
(
tlsPremasterSecret
.
length
!=
127
)
{
throw
new
Exception
(
"Unexpected TLS premaster secret length"
);
}
if
(
tlsPremasterSecret
[
0
]
==
0
)
{
throw
new
Exception
(
"First byte is zero"
);
}
for
(
int
i
=
0
;
i
<
tlsPremasterSecret
.
length
;
i
++)
{
if
(
tlsPremasterSecret
[
i
]
!=
sharedSecret
[
i
+
1
])
{
throw
new
Exception
(
"Shared secrets differ"
);
}
}
}
/*
* Converts a byte to hex digit and writes to the supplied buffer
*/
private
void
byte2hex
(
byte
b
,
StringBuffer
buf
)
{
char
[]
hexChars
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
};
int
high
=
((
b
&
0xf0
)
>>
4
);
int
low
=
(
b
&
0x0f
);
buf
.
append
(
hexChars
[
high
]);
buf
.
append
(
hexChars
[
low
]);
}
/*
* Converts a byte array to hex string
*/
private
String
toHexString
(
byte
[]
block
)
{
StringBuffer
buf
=
new
StringBuffer
();
int
len
=
block
.
length
;
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
byte2hex
(
block
[
i
],
buf
);
if
(
i
<
len
-
1
)
{
buf
.
append
(
":"
);
}
}
return
buf
.
toString
();
}
private
static
final
byte
alicePubKeyEnc
[]
=
{
(
byte
)
0x30
,
(
byte
)
0x82
,
(
byte
)
0x01
,
(
byte
)
0x24
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x99
,
(
byte
)
0x06
,
(
byte
)
0x09
,
(
byte
)
0x2A
,
(
byte
)
0x86
,
(
byte
)
0x48
,
(
byte
)
0x86
,
(
byte
)
0xF7
,
(
byte
)
0x0D
,
(
byte
)
0x01
,
(
byte
)
0x03
,
(
byte
)
0x01
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x8B
,
(
byte
)
0x02
,
(
byte
)
0x81
,
(
byte
)
0x81
,
(
byte
)
0x00
,
(
byte
)
0xF4
,
(
byte
)
0x88
,
(
byte
)
0xFD
,
(
byte
)
0x58
,
(
byte
)
0x4E
,
(
byte
)
0x49
,
(
byte
)
0xDB
,
(
byte
)
0xCD
,
(
byte
)
0x20
,
(
byte
)
0xB4
,
(
byte
)
0x9D
,
(
byte
)
0xE4
,
(
byte
)
0x91
,
(
byte
)
0x07
,
(
byte
)
0x36
,
(
byte
)
0x6B
,
(
byte
)
0x33
,
(
byte
)
0x6C
,
(
byte
)
0x38
,
(
byte
)
0x0D
,
(
byte
)
0x45
,
(
byte
)
0x1D
,
(
byte
)
0x0F
,
(
byte
)
0x7C
,
(
byte
)
0x88
,
(
byte
)
0xB3
,
(
byte
)
0x1C
,
(
byte
)
0x7C
,
(
byte
)
0x5B
,
(
byte
)
0x2D
,
(
byte
)
0x8E
,
(
byte
)
0xF6
,
(
byte
)
0xF3
,
(
byte
)
0xC9
,
(
byte
)
0x23
,
(
byte
)
0xC0
,
(
byte
)
0x43
,
(
byte
)
0xF0
,
(
byte
)
0xA5
,
(
byte
)
0x5B
,
(
byte
)
0x18
,
(
byte
)
0x8D
,
(
byte
)
0x8E
,
(
byte
)
0xBB
,
(
byte
)
0x55
,
(
byte
)
0x8C
,
(
byte
)
0xB8
,
(
byte
)
0x5D
,
(
byte
)
0x38
,
(
byte
)
0xD3
,
(
byte
)
0x34
,
(
byte
)
0xFD
,
(
byte
)
0x7C
,
(
byte
)
0x17
,
(
byte
)
0x57
,
(
byte
)
0x43
,
(
byte
)
0xA3
,
(
byte
)
0x1D
,
(
byte
)
0x18
,
(
byte
)
0x6C
,
(
byte
)
0xDE
,
(
byte
)
0x33
,
(
byte
)
0x21
,
(
byte
)
0x2C
,
(
byte
)
0xB5
,
(
byte
)
0x2A
,
(
byte
)
0xFF
,
(
byte
)
0x3C
,
(
byte
)
0xE1
,
(
byte
)
0xB1
,
(
byte
)
0x29
,
(
byte
)
0x40
,
(
byte
)
0x18
,
(
byte
)
0x11
,
(
byte
)
0x8D
,
(
byte
)
0x7C
,
(
byte
)
0x84
,
(
byte
)
0xA7
,
(
byte
)
0x0A
,
(
byte
)
0x72
,
(
byte
)
0xD6
,
(
byte
)
0x86
,
(
byte
)
0xC4
,
(
byte
)
0x03
,
(
byte
)
0x19
,
(
byte
)
0xC8
,
(
byte
)
0x07
,
(
byte
)
0x29
,
(
byte
)
0x7A
,
(
byte
)
0xCA
,
(
byte
)
0x95
,
(
byte
)
0x0C
,
(
byte
)
0xD9
,
(
byte
)
0x96
,
(
byte
)
0x9F
,
(
byte
)
0xAB
,
(
byte
)
0xD0
,
(
byte
)
0x0A
,
(
byte
)
0x50
,
(
byte
)
0x9B
,
(
byte
)
0x02
,
(
byte
)
0x46
,
(
byte
)
0xD3
,
(
byte
)
0x08
,
(
byte
)
0x3D
,
(
byte
)
0x66
,
(
byte
)
0xA4
,
(
byte
)
0x5D
,
(
byte
)
0x41
,
(
byte
)
0x9F
,
(
byte
)
0x9C
,
(
byte
)
0x7C
,
(
byte
)
0xBD
,
(
byte
)
0x89
,
(
byte
)
0x4B
,
(
byte
)
0x22
,
(
byte
)
0x19
,
(
byte
)
0x26
,
(
byte
)
0xBA
,
(
byte
)
0xAB
,
(
byte
)
0xA2
,
(
byte
)
0x5E
,
(
byte
)
0xC3
,
(
byte
)
0x55
,
(
byte
)
0xE9
,
(
byte
)
0x2F
,
(
byte
)
0x78
,
(
byte
)
0xC7
,
(
byte
)
0x02
,
(
byte
)
0x01
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x00
,
(
byte
)
0x03
,
(
byte
)
0x81
,
(
byte
)
0x85
,
(
byte
)
0x00
,
(
byte
)
0x02
,
(
byte
)
0x81
,
(
byte
)
0x81
,
(
byte
)
0x00
,
(
byte
)
0xEE
,
(
byte
)
0xD6
,
(
byte
)
0xB1
,
(
byte
)
0xA3
,
(
byte
)
0xB4
,
(
byte
)
0x78
,
(
byte
)
0x2B
,
(
byte
)
0x35
,
(
byte
)
0xEF
,
(
byte
)
0xCD
,
(
byte
)
0x17
,
(
byte
)
0x86
,
(
byte
)
0x63
,
(
byte
)
0x2B
,
(
byte
)
0x97
,
(
byte
)
0x0E
,
(
byte
)
0x7A
,
(
byte
)
0xD1
,
(
byte
)
0xFF
,
(
byte
)
0x7A
,
(
byte
)
0xEB
,
(
byte
)
0x57
,
(
byte
)
0x61
,
(
byte
)
0xA1
,
(
byte
)
0xF7
,
(
byte
)
0x90
,
(
byte
)
0x11
,
(
byte
)
0xA7
,
(
byte
)
0x79
,
(
byte
)
0x28
,
(
byte
)
0x69
,
(
byte
)
0xBA
,
(
byte
)
0xA7
,
(
byte
)
0xB2
,
(
byte
)
0x37
,
(
byte
)
0x17
,
(
byte
)
0xAE
,
(
byte
)
0x3C
,
(
byte
)
0x92
,
(
byte
)
0x89
,
(
byte
)
0x88
,
(
byte
)
0xE5
,
(
byte
)
0x7E
,
(
byte
)
0x8E
,
(
byte
)
0xF0
,
(
byte
)
0x24
,
(
byte
)
0xD0
,
(
byte
)
0xE1
,
(
byte
)
0xC4
,
(
byte
)
0xB0
,
(
byte
)
0x26
,
(
byte
)
0x5A
,
(
byte
)
0x1E
,
(
byte
)
0xBD
,
(
byte
)
0xA0
,
(
byte
)
0xCF
,
(
byte
)
0x3E
,
(
byte
)
0x97
,
(
byte
)
0x2A
,
(
byte
)
0x13
,
(
byte
)
0x92
,
(
byte
)
0x3B
,
(
byte
)
0x39
,
(
byte
)
0xD0
,
(
byte
)
0x1D
,
(
byte
)
0xA3
,
(
byte
)
0x6B
,
(
byte
)
0x3E
,
(
byte
)
0xC2
,
(
byte
)
0xBB
,
(
byte
)
0x14
,
(
byte
)
0xB6
,
(
byte
)
0xE2
,
(
byte
)
0x4C
,
(
byte
)
0x0E
,
(
byte
)
0x5B
,
(
byte
)
0x4B
,
(
byte
)
0xA4
,
(
byte
)
0x9D
,
(
byte
)
0xA6
,
(
byte
)
0x21
,
(
byte
)
0xB0
,
(
byte
)
0xF9
,
(
byte
)
0xDE
,
(
byte
)
0x55
,
(
byte
)
0xAE
,
(
byte
)
0x5C
,
(
byte
)
0x29
,
(
byte
)
0x0E
,
(
byte
)
0xC1
,
(
byte
)
0xFC
,
(
byte
)
0xBA
,
(
byte
)
0x51
,
(
byte
)
0xD3
,
(
byte
)
0xB6
,
(
byte
)
0x6D
,
(
byte
)
0x75
,
(
byte
)
0x72
,
(
byte
)
0xDF
,
(
byte
)
0x43
,
(
byte
)
0xAB
,
(
byte
)
0x94
,
(
byte
)
0x21
,
(
byte
)
0x6E
,
(
byte
)
0x0C
,
(
byte
)
0xD1
,
(
byte
)
0x93
,
(
byte
)
0x54
,
(
byte
)
0x56
,
(
byte
)
0x7D
,
(
byte
)
0x4B
,
(
byte
)
0x90
,
(
byte
)
0xF1
,
(
byte
)
0x94
,
(
byte
)
0x45
,
(
byte
)
0xD4
,
(
byte
)
0x2A
,
(
byte
)
0x71
,
(
byte
)
0xA1
,
(
byte
)
0xB8
,
(
byte
)
0xDD
,
(
byte
)
0xAA
,
(
byte
)
0x05
,
(
byte
)
0xF0
,
(
byte
)
0x27
,
(
byte
)
0x37
,
(
byte
)
0xBD
,
(
byte
)
0x44
};
private
static
final
byte
alicePrivKeyEnc
[]
=
{
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0xE3
,
(
byte
)
0x02
,
(
byte
)
0x01
,
(
byte
)
0x00
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x99
,
(
byte
)
0x06
,
(
byte
)
0x09
,
(
byte
)
0x2A
,
(
byte
)
0x86
,
(
byte
)
0x48
,
(
byte
)
0x86
,
(
byte
)
0xF7
,
(
byte
)
0x0D
,
(
byte
)
0x01
,
(
byte
)
0x03
,
(
byte
)
0x01
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x8B
,
(
byte
)
0x02
,
(
byte
)
0x81
,
(
byte
)
0x81
,
(
byte
)
0x00
,
(
byte
)
0xF4
,
(
byte
)
0x88
,
(
byte
)
0xFD
,
(
byte
)
0x58
,
(
byte
)
0x4E
,
(
byte
)
0x49
,
(
byte
)
0xDB
,
(
byte
)
0xCD
,
(
byte
)
0x20
,
(
byte
)
0xB4
,
(
byte
)
0x9D
,
(
byte
)
0xE4
,
(
byte
)
0x91
,
(
byte
)
0x07
,
(
byte
)
0x36
,
(
byte
)
0x6B
,
(
byte
)
0x33
,
(
byte
)
0x6C
,
(
byte
)
0x38
,
(
byte
)
0x0D
,
(
byte
)
0x45
,
(
byte
)
0x1D
,
(
byte
)
0x0F
,
(
byte
)
0x7C
,
(
byte
)
0x88
,
(
byte
)
0xB3
,
(
byte
)
0x1C
,
(
byte
)
0x7C
,
(
byte
)
0x5B
,
(
byte
)
0x2D
,
(
byte
)
0x8E
,
(
byte
)
0xF6
,
(
byte
)
0xF3
,
(
byte
)
0xC9
,
(
byte
)
0x23
,
(
byte
)
0xC0
,
(
byte
)
0x43
,
(
byte
)
0xF0
,
(
byte
)
0xA5
,
(
byte
)
0x5B
,
(
byte
)
0x18
,
(
byte
)
0x8D
,
(
byte
)
0x8E
,
(
byte
)
0xBB
,
(
byte
)
0x55
,
(
byte
)
0x8C
,
(
byte
)
0xB8
,
(
byte
)
0x5D
,
(
byte
)
0x38
,
(
byte
)
0xD3
,
(
byte
)
0x34
,
(
byte
)
0xFD
,
(
byte
)
0x7C
,
(
byte
)
0x17
,
(
byte
)
0x57
,
(
byte
)
0x43
,
(
byte
)
0xA3
,
(
byte
)
0x1D
,
(
byte
)
0x18
,
(
byte
)
0x6C
,
(
byte
)
0xDE
,
(
byte
)
0x33
,
(
byte
)
0x21
,
(
byte
)
0x2C
,
(
byte
)
0xB5
,
(
byte
)
0x2A
,
(
byte
)
0xFF
,
(
byte
)
0x3C
,
(
byte
)
0xE1
,
(
byte
)
0xB1
,
(
byte
)
0x29
,
(
byte
)
0x40
,
(
byte
)
0x18
,
(
byte
)
0x11
,
(
byte
)
0x8D
,
(
byte
)
0x7C
,
(
byte
)
0x84
,
(
byte
)
0xA7
,
(
byte
)
0x0A
,
(
byte
)
0x72
,
(
byte
)
0xD6
,
(
byte
)
0x86
,
(
byte
)
0xC4
,
(
byte
)
0x03
,
(
byte
)
0x19
,
(
byte
)
0xC8
,
(
byte
)
0x07
,
(
byte
)
0x29
,
(
byte
)
0x7A
,
(
byte
)
0xCA
,
(
byte
)
0x95
,
(
byte
)
0x0C
,
(
byte
)
0xD9
,
(
byte
)
0x96
,
(
byte
)
0x9F
,
(
byte
)
0xAB
,
(
byte
)
0xD0
,
(
byte
)
0x0A
,
(
byte
)
0x50
,
(
byte
)
0x9B
,
(
byte
)
0x02
,
(
byte
)
0x46
,
(
byte
)
0xD3
,
(
byte
)
0x08
,
(
byte
)
0x3D
,
(
byte
)
0x66
,
(
byte
)
0xA4
,
(
byte
)
0x5D
,
(
byte
)
0x41
,
(
byte
)
0x9F
,
(
byte
)
0x9C
,
(
byte
)
0x7C
,
(
byte
)
0xBD
,
(
byte
)
0x89
,
(
byte
)
0x4B
,
(
byte
)
0x22
,
(
byte
)
0x19
,
(
byte
)
0x26
,
(
byte
)
0xBA
,
(
byte
)
0xAB
,
(
byte
)
0xA2
,
(
byte
)
0x5E
,
(
byte
)
0xC3
,
(
byte
)
0x55
,
(
byte
)
0xE9
,
(
byte
)
0x2F
,
(
byte
)
0x78
,
(
byte
)
0xC7
,
(
byte
)
0x02
,
(
byte
)
0x01
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x00
,
(
byte
)
0x04
,
(
byte
)
0x42
,
(
byte
)
0x02
,
(
byte
)
0x40
,
(
byte
)
0x36
,
(
byte
)
0x4D
,
(
byte
)
0xD0
,
(
byte
)
0x58
,
(
byte
)
0x64
,
(
byte
)
0x91
,
(
byte
)
0x78
,
(
byte
)
0xA2
,
(
byte
)
0x4B
,
(
byte
)
0x79
,
(
byte
)
0x46
,
(
byte
)
0xFE
,
(
byte
)
0xC9
,
(
byte
)
0xD9
,
(
byte
)
0xCA
,
(
byte
)
0x5C
,
(
byte
)
0xF9
,
(
byte
)
0xFD
,
(
byte
)
0x6C
,
(
byte
)
0x5D
,
(
byte
)
0x76
,
(
byte
)
0x3A
,
(
byte
)
0x41
,
(
byte
)
0x6D
,
(
byte
)
0x44
,
(
byte
)
0x62
,
(
byte
)
0x75
,
(
byte
)
0x93
,
(
byte
)
0x81
,
(
byte
)
0x93
,
(
byte
)
0x00
,
(
byte
)
0x4C
,
(
byte
)
0xB1
,
(
byte
)
0xD8
,
(
byte
)
0x7D
,
(
byte
)
0x9D
,
(
byte
)
0xF3
,
(
byte
)
0x16
,
(
byte
)
0x2C
,
(
byte
)
0x6C
,
(
byte
)
0x9F
,
(
byte
)
0x7A
,
(
byte
)
0x84
,
(
byte
)
0xA3
,
(
byte
)
0x7A
,
(
byte
)
0xC1
,
(
byte
)
0x4F
,
(
byte
)
0x60
,
(
byte
)
0xE3
,
(
byte
)
0xB5
,
(
byte
)
0x86
,
(
byte
)
0x28
,
(
byte
)
0x08
,
(
byte
)
0x4D
,
(
byte
)
0x94
,
(
byte
)
0xB6
,
(
byte
)
0x04
,
(
byte
)
0x0D
,
(
byte
)
0xAC
,
(
byte
)
0xBD
,
(
byte
)
0x1F
,
(
byte
)
0x42
,
(
byte
)
0x8F
,
(
byte
)
0x1B
};
private
static
final
byte
bobPubKeyEnc
[]
=
{
(
byte
)
0x30
,
(
byte
)
0x82
,
(
byte
)
0x01
,
(
byte
)
0x23
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x99
,
(
byte
)
0x06
,
(
byte
)
0x09
,
(
byte
)
0x2A
,
(
byte
)
0x86
,
(
byte
)
0x48
,
(
byte
)
0x86
,
(
byte
)
0xF7
,
(
byte
)
0x0D
,
(
byte
)
0x01
,
(
byte
)
0x03
,
(
byte
)
0x01
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x8B
,
(
byte
)
0x02
,
(
byte
)
0x81
,
(
byte
)
0x81
,
(
byte
)
0x00
,
(
byte
)
0xF4
,
(
byte
)
0x88
,
(
byte
)
0xFD
,
(
byte
)
0x58
,
(
byte
)
0x4E
,
(
byte
)
0x49
,
(
byte
)
0xDB
,
(
byte
)
0xCD
,
(
byte
)
0x20
,
(
byte
)
0xB4
,
(
byte
)
0x9D
,
(
byte
)
0xE4
,
(
byte
)
0x91
,
(
byte
)
0x07
,
(
byte
)
0x36
,
(
byte
)
0x6B
,
(
byte
)
0x33
,
(
byte
)
0x6C
,
(
byte
)
0x38
,
(
byte
)
0x0D
,
(
byte
)
0x45
,
(
byte
)
0x1D
,
(
byte
)
0x0F
,
(
byte
)
0x7C
,
(
byte
)
0x88
,
(
byte
)
0xB3
,
(
byte
)
0x1C
,
(
byte
)
0x7C
,
(
byte
)
0x5B
,
(
byte
)
0x2D
,
(
byte
)
0x8E
,
(
byte
)
0xF6
,
(
byte
)
0xF3
,
(
byte
)
0xC9
,
(
byte
)
0x23
,
(
byte
)
0xC0
,
(
byte
)
0x43
,
(
byte
)
0xF0
,
(
byte
)
0xA5
,
(
byte
)
0x5B
,
(
byte
)
0x18
,
(
byte
)
0x8D
,
(
byte
)
0x8E
,
(
byte
)
0xBB
,
(
byte
)
0x55
,
(
byte
)
0x8C
,
(
byte
)
0xB8
,
(
byte
)
0x5D
,
(
byte
)
0x38
,
(
byte
)
0xD3
,
(
byte
)
0x34
,
(
byte
)
0xFD
,
(
byte
)
0x7C
,
(
byte
)
0x17
,
(
byte
)
0x57
,
(
byte
)
0x43
,
(
byte
)
0xA3
,
(
byte
)
0x1D
,
(
byte
)
0x18
,
(
byte
)
0x6C
,
(
byte
)
0xDE
,
(
byte
)
0x33
,
(
byte
)
0x21
,
(
byte
)
0x2C
,
(
byte
)
0xB5
,
(
byte
)
0x2A
,
(
byte
)
0xFF
,
(
byte
)
0x3C
,
(
byte
)
0xE1
,
(
byte
)
0xB1
,
(
byte
)
0x29
,
(
byte
)
0x40
,
(
byte
)
0x18
,
(
byte
)
0x11
,
(
byte
)
0x8D
,
(
byte
)
0x7C
,
(
byte
)
0x84
,
(
byte
)
0xA7
,
(
byte
)
0x0A
,
(
byte
)
0x72
,
(
byte
)
0xD6
,
(
byte
)
0x86
,
(
byte
)
0xC4
,
(
byte
)
0x03
,
(
byte
)
0x19
,
(
byte
)
0xC8
,
(
byte
)
0x07
,
(
byte
)
0x29
,
(
byte
)
0x7A
,
(
byte
)
0xCA
,
(
byte
)
0x95
,
(
byte
)
0x0C
,
(
byte
)
0xD9
,
(
byte
)
0x96
,
(
byte
)
0x9F
,
(
byte
)
0xAB
,
(
byte
)
0xD0
,
(
byte
)
0x0A
,
(
byte
)
0x50
,
(
byte
)
0x9B
,
(
byte
)
0x02
,
(
byte
)
0x46
,
(
byte
)
0xD3
,
(
byte
)
0x08
,
(
byte
)
0x3D
,
(
byte
)
0x66
,
(
byte
)
0xA4
,
(
byte
)
0x5D
,
(
byte
)
0x41
,
(
byte
)
0x9F
,
(
byte
)
0x9C
,
(
byte
)
0x7C
,
(
byte
)
0xBD
,
(
byte
)
0x89
,
(
byte
)
0x4B
,
(
byte
)
0x22
,
(
byte
)
0x19
,
(
byte
)
0x26
,
(
byte
)
0xBA
,
(
byte
)
0xAB
,
(
byte
)
0xA2
,
(
byte
)
0x5E
,
(
byte
)
0xC3
,
(
byte
)
0x55
,
(
byte
)
0xE9
,
(
byte
)
0x2F
,
(
byte
)
0x78
,
(
byte
)
0xC7
,
(
byte
)
0x02
,
(
byte
)
0x01
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x00
,
(
byte
)
0x03
,
(
byte
)
0x81
,
(
byte
)
0x84
,
(
byte
)
0x00
,
(
byte
)
0x02
,
(
byte
)
0x81
,
(
byte
)
0x80
,
(
byte
)
0x2C
,
(
byte
)
0x40
,
(
byte
)
0xFA
,
(
byte
)
0xF6
,
(
byte
)
0xA6
,
(
byte
)
0xF8
,
(
byte
)
0xAC
,
(
byte
)
0xC2
,
(
byte
)
0x4F
,
(
byte
)
0xCD
,
(
byte
)
0xC7
,
(
byte
)
0x37
,
(
byte
)
0x93
,
(
byte
)
0xE5
,
(
byte
)
0xE4
,
(
byte
)
0x5E
,
(
byte
)
0x18
,
(
byte
)
0x14
,
(
byte
)
0xE6
,
(
byte
)
0x50
,
(
byte
)
0xDA
,
(
byte
)
0x55
,
(
byte
)
0x38
,
(
byte
)
0x5D
,
(
byte
)
0x24
,
(
byte
)
0xF5
,
(
byte
)
0x42
,
(
byte
)
0x68
,
(
byte
)
0x5F
,
(
byte
)
0xF5
,
(
byte
)
0x15
,
(
byte
)
0xC8
,
(
byte
)
0x9B
,
(
byte
)
0x5D
,
(
byte
)
0x06
,
(
byte
)
0x3D
,
(
byte
)
0xE1
,
(
byte
)
0x52
,
(
byte
)
0x2F
,
(
byte
)
0x98
,
(
byte
)
0xFF
,
(
byte
)
0x37
,
(
byte
)
0xBB
,
(
byte
)
0x75
,
(
byte
)
0x48
,
(
byte
)
0x48
,
(
byte
)
0xE9
,
(
byte
)
0x65
,
(
byte
)
0x84
,
(
byte
)
0x37
,
(
byte
)
0xBB
,
(
byte
)
0xB3
,
(
byte
)
0xE9
,
(
byte
)
0x36
,
(
byte
)
0x01
,
(
byte
)
0xB4
,
(
byte
)
0x6A
,
(
byte
)
0x1C
,
(
byte
)
0xB2
,
(
byte
)
0x11
,
(
byte
)
0x82
,
(
byte
)
0xCE
,
(
byte
)
0x3D
,
(
byte
)
0x65
,
(
byte
)
0xE5
,
(
byte
)
0x3C
,
(
byte
)
0x89
,
(
byte
)
0xE9
,
(
byte
)
0x52
,
(
byte
)
0x19
,
(
byte
)
0xBD
,
(
byte
)
0x58
,
(
byte
)
0xF6
,
(
byte
)
0xA2
,
(
byte
)
0x03
,
(
byte
)
0xA8
,
(
byte
)
0xB2
,
(
byte
)
0xA5
,
(
byte
)
0xDB
,
(
byte
)
0xEB
,
(
byte
)
0xF5
,
(
byte
)
0x94
,
(
byte
)
0xF9
,
(
byte
)
0x46
,
(
byte
)
0xBE
,
(
byte
)
0x45
,
(
byte
)
0x4C
,
(
byte
)
0x65
,
(
byte
)
0xD2
,
(
byte
)
0xD1
,
(
byte
)
0xCF
,
(
byte
)
0xFF
,
(
byte
)
0xFF
,
(
byte
)
0xFA
,
(
byte
)
0x38
,
(
byte
)
0xF1
,
(
byte
)
0x72
,
(
byte
)
0xAB
,
(
byte
)
0xB9
,
(
byte
)
0x14
,
(
byte
)
0x4E
,
(
byte
)
0xF5
,
(
byte
)
0xF0
,
(
byte
)
0x7A
,
(
byte
)
0x8E
,
(
byte
)
0x45
,
(
byte
)
0xFD
,
(
byte
)
0x5B
,
(
byte
)
0xF9
,
(
byte
)
0xA2
,
(
byte
)
0x97
,
(
byte
)
0x1B
,
(
byte
)
0xAE
,
(
byte
)
0x2C
,
(
byte
)
0x7B
,
(
byte
)
0x6B
,
(
byte
)
0x7C
,
(
byte
)
0x98
,
(
byte
)
0xFE
,
(
byte
)
0x58
,
(
byte
)
0xDD
,
(
byte
)
0xBE
,
(
byte
)
0xF6
,
(
byte
)
0x1C
,
(
byte
)
0x8E
,
(
byte
)
0xD0
,
(
byte
)
0xA1
,
(
byte
)
0x72
};
private
static
final
byte
bobPrivKeyEnc
[]
=
{
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0xE4
,
(
byte
)
0x02
,
(
byte
)
0x01
,
(
byte
)
0x00
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x99
,
(
byte
)
0x06
,
(
byte
)
0x09
,
(
byte
)
0x2A
,
(
byte
)
0x86
,
(
byte
)
0x48
,
(
byte
)
0x86
,
(
byte
)
0xF7
,
(
byte
)
0x0D
,
(
byte
)
0x01
,
(
byte
)
0x03
,
(
byte
)
0x01
,
(
byte
)
0x30
,
(
byte
)
0x81
,
(
byte
)
0x8B
,
(
byte
)
0x02
,
(
byte
)
0x81
,
(
byte
)
0x81
,
(
byte
)
0x00
,
(
byte
)
0xF4
,
(
byte
)
0x88
,
(
byte
)
0xFD
,
(
byte
)
0x58
,
(
byte
)
0x4E
,
(
byte
)
0x49
,
(
byte
)
0xDB
,
(
byte
)
0xCD
,
(
byte
)
0x20
,
(
byte
)
0xB4
,
(
byte
)
0x9D
,
(
byte
)
0xE4
,
(
byte
)
0x91
,
(
byte
)
0x07
,
(
byte
)
0x36
,
(
byte
)
0x6B
,
(
byte
)
0x33
,
(
byte
)
0x6C
,
(
byte
)
0x38
,
(
byte
)
0x0D
,
(
byte
)
0x45
,
(
byte
)
0x1D
,
(
byte
)
0x0F
,
(
byte
)
0x7C
,
(
byte
)
0x88
,
(
byte
)
0xB3
,
(
byte
)
0x1C
,
(
byte
)
0x7C
,
(
byte
)
0x5B
,
(
byte
)
0x2D
,
(
byte
)
0x8E
,
(
byte
)
0xF6
,
(
byte
)
0xF3
,
(
byte
)
0xC9
,
(
byte
)
0x23
,
(
byte
)
0xC0
,
(
byte
)
0x43
,
(
byte
)
0xF0
,
(
byte
)
0xA5
,
(
byte
)
0x5B
,
(
byte
)
0x18
,
(
byte
)
0x8D
,
(
byte
)
0x8E
,
(
byte
)
0xBB
,
(
byte
)
0x55
,
(
byte
)
0x8C
,
(
byte
)
0xB8
,
(
byte
)
0x5D
,
(
byte
)
0x38
,
(
byte
)
0xD3
,
(
byte
)
0x34
,
(
byte
)
0xFD
,
(
byte
)
0x7C
,
(
byte
)
0x17
,
(
byte
)
0x57
,
(
byte
)
0x43
,
(
byte
)
0xA3
,
(
byte
)
0x1D
,
(
byte
)
0x18
,
(
byte
)
0x6C
,
(
byte
)
0xDE
,
(
byte
)
0x33
,
(
byte
)
0x21
,
(
byte
)
0x2C
,
(
byte
)
0xB5
,
(
byte
)
0x2A
,
(
byte
)
0xFF
,
(
byte
)
0x3C
,
(
byte
)
0xE1
,
(
byte
)
0xB1
,
(
byte
)
0x29
,
(
byte
)
0x40
,
(
byte
)
0x18
,
(
byte
)
0x11
,
(
byte
)
0x8D
,
(
byte
)
0x7C
,
(
byte
)
0x84
,
(
byte
)
0xA7
,
(
byte
)
0x0A
,
(
byte
)
0x72
,
(
byte
)
0xD6
,
(
byte
)
0x86
,
(
byte
)
0xC4
,
(
byte
)
0x03
,
(
byte
)
0x19
,
(
byte
)
0xC8
,
(
byte
)
0x07
,
(
byte
)
0x29
,
(
byte
)
0x7A
,
(
byte
)
0xCA
,
(
byte
)
0x95
,
(
byte
)
0x0C
,
(
byte
)
0xD9
,
(
byte
)
0x96
,
(
byte
)
0x9F
,
(
byte
)
0xAB
,
(
byte
)
0xD0
,
(
byte
)
0x0A
,
(
byte
)
0x50
,
(
byte
)
0x9B
,
(
byte
)
0x02
,
(
byte
)
0x46
,
(
byte
)
0xD3
,
(
byte
)
0x08
,
(
byte
)
0x3D
,
(
byte
)
0x66
,
(
byte
)
0xA4
,
(
byte
)
0x5D
,
(
byte
)
0x41
,
(
byte
)
0x9F
,
(
byte
)
0x9C
,
(
byte
)
0x7C
,
(
byte
)
0xBD
,
(
byte
)
0x89
,
(
byte
)
0x4B
,
(
byte
)
0x22
,
(
byte
)
0x19
,
(
byte
)
0x26
,
(
byte
)
0xBA
,
(
byte
)
0xAB
,
(
byte
)
0xA2
,
(
byte
)
0x5E
,
(
byte
)
0xC3
,
(
byte
)
0x55
,
(
byte
)
0xE9
,
(
byte
)
0x2F
,
(
byte
)
0x78
,
(
byte
)
0xC7
,
(
byte
)
0x02
,
(
byte
)
0x01
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x02
,
(
byte
)
0x00
,
(
byte
)
0x04
,
(
byte
)
0x43
,
(
byte
)
0x02
,
(
byte
)
0x41
,
(
byte
)
0x00
,
(
byte
)
0xE0
,
(
byte
)
0x31
,
(
byte
)
0xE7
,
(
byte
)
0x77
,
(
byte
)
0xB8
,
(
byte
)
0xD0
,
(
byte
)
0x7E
,
(
byte
)
0x0A
,
(
byte
)
0x9B
,
(
byte
)
0x94
,
(
byte
)
0xD5
,
(
byte
)
0x3D
,
(
byte
)
0x33
,
(
byte
)
0x62
,
(
byte
)
0x32
,
(
byte
)
0x51
,
(
byte
)
0xCE
,
(
byte
)
0x74
,
(
byte
)
0x5C
,
(
byte
)
0xA5
,
(
byte
)
0x72
,
(
byte
)
0xD9
,
(
byte
)
0x36
,
(
byte
)
0xF3
,
(
byte
)
0x8A
,
(
byte
)
0x3F
,
(
byte
)
0x8B
,
(
byte
)
0xC6
,
(
byte
)
0xFE
,
(
byte
)
0xEF
,
(
byte
)
0x94
,
(
byte
)
0x8B
,
(
byte
)
0x50
,
(
byte
)
0x41
,
(
byte
)
0x9B
,
(
byte
)
0x14
,
(
byte
)
0xC8
,
(
byte
)
0xE9
,
(
byte
)
0x1F
,
(
byte
)
0x24
,
(
byte
)
0x1F
,
(
byte
)
0x65
,
(
byte
)
0x8E
,
(
byte
)
0xD3
,
(
byte
)
0x85
,
(
byte
)
0xD0
,
(
byte
)
0x68
,
(
byte
)
0x6C
,
(
byte
)
0xF1
,
(
byte
)
0x79
,
(
byte
)
0x45
,
(
byte
)
0xD0
,
(
byte
)
0x06
,
(
byte
)
0xA4
,
(
byte
)
0xB8
,
(
byte
)
0xE0
,
(
byte
)
0x64
,
(
byte
)
0xF5
,
(
byte
)
0x38
,
(
byte
)
0x72
,
(
byte
)
0x97
,
(
byte
)
0x00
,
(
byte
)
0x23
,
(
byte
)
0x5F
};
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录