提交 14839c93 编写于 作者: V vinnie

6763530: Cannot decode PublicKey (Proider SunPKCS11, curve prime256v1)

Reviewed-by: andrew
上级 f76ac514
...@@ -40,6 +40,8 @@ import static sun.security.pkcs11.TemplateManager.*; ...@@ -40,6 +40,8 @@ import static sun.security.pkcs11.TemplateManager.*;
import sun.security.pkcs11.wrapper.*; import sun.security.pkcs11.wrapper.*;
import static sun.security.pkcs11.wrapper.PKCS11Constants.*; import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
import sun.security.util.DerValue;
/** /**
* EC KeyFactory implemenation. * EC KeyFactory implemenation.
* *
...@@ -201,7 +203,16 @@ final class P11ECKeyFactory extends P11KeyFactory { ...@@ -201,7 +203,16 @@ final class P11ECKeyFactory extends P11KeyFactory {
private PublicKey generatePublic(ECPoint point, ECParameterSpec params) throws PKCS11Exception { private PublicKey generatePublic(ECPoint point, ECParameterSpec params) throws PKCS11Exception {
byte[] encodedParams = ECParameters.encodeParameters(params); byte[] encodedParams = ECParameters.encodeParameters(params);
byte[] encodedPoint = ECParameters.encodePoint(point, params.getCurve()); byte[] encodedPoint = null;
DerValue pkECPoint = new DerValue(DerValue.tag_OctetString,
ECParameters.encodePoint(point, params.getCurve()));
try {
encodedPoint = pkECPoint.toByteArray();
} catch (IOException e) {
throw new IllegalArgumentException("Could not DER encode point", e);
}
CK_ATTRIBUTE[] attributes = new CK_ATTRIBUTE[] { CK_ATTRIBUTE[] attributes = new CK_ATTRIBUTE[] {
new CK_ATTRIBUTE(CKA_CLASS, CKO_PUBLIC_KEY), new CK_ATTRIBUTE(CKA_CLASS, CKO_PUBLIC_KEY),
new CK_ATTRIBUTE(CKA_KEY_TYPE, CKK_EC), new CK_ATTRIBUTE(CKA_KEY_TYPE, CKK_EC),
......
...@@ -45,6 +45,8 @@ import sun.security.internal.interfaces.TlsMasterSecret; ...@@ -45,6 +45,8 @@ import sun.security.internal.interfaces.TlsMasterSecret;
import sun.security.pkcs11.wrapper.*; import sun.security.pkcs11.wrapper.*;
import static sun.security.pkcs11.wrapper.PKCS11Constants.*; import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
import sun.security.util.DerValue;
/** /**
* Key implementation classes. * Key implementation classes.
* *
...@@ -998,10 +1000,18 @@ abstract class P11Key implements Key { ...@@ -998,10 +1000,18 @@ abstract class P11Key implements Key {
}; };
fetchAttributes(attributes); fetchAttributes(attributes);
try { try {
params = P11ECKeyFactory.decodeParameters
(attributes[1].getByteArray());
DerValue wECPoint = new DerValue(attributes[0].getByteArray());
if (wECPoint.getTag() != DerValue.tag_OctetString)
throw new IOException("Unexpected tag: " +
wECPoint.getTag());
params = P11ECKeyFactory.decodeParameters params = P11ECKeyFactory.decodeParameters
(attributes[1].getByteArray()); (attributes[1].getByteArray());
w = P11ECKeyFactory.decodePoint w = P11ECKeyFactory.decodePoint
(attributes[0].getByteArray(), params.getCurve()); (wECPoint.getDataBytes(), params.getCurve());
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException("Could not parse key values", e); throw new RuntimeException("Could not parse key values", e);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册