|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
package sun.security.ec; |
|
|
|
import java.io.IOException; |
|
|
|
import java.security.*; |
|
import java.security.interfaces.*; |
|
import java.security.spec.*; |
|
|
|
import sun.security.util.ECParameters; |
|
import sun.security.util.ECUtil; |
|
|
|
import sun.security.x509.*; |
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public final class ECPublicKeyImpl extends X509Key implements ECPublicKey { |
|
|
|
private static final long serialVersionUID = -2462037275160462289L; |
|
|
|
private ECPoint w; |
|
private ECParameterSpec params; |
|
|
|
|
|
|
|
|
|
*/ |
|
@SuppressWarnings("deprecation") |
|
public ECPublicKeyImpl(ECPoint w, ECParameterSpec params) |
|
throws InvalidKeyException { |
|
this.w = w; |
|
this.params = params; |
|
|
|
algid = new AlgorithmId |
|
(AlgorithmId.EC_oid, ECParameters.getAlgorithmParameters(params)); |
|
key = ECUtil.encodePoint(w, params.getCurve()); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public ECPublicKeyImpl(byte[] encoded) throws InvalidKeyException { |
|
decode(encoded); |
|
} |
|
|
|
|
|
public String getAlgorithm() { |
|
return "EC"; |
|
} |
|
|
|
|
|
public ECPoint getW() { |
|
return w; |
|
} |
|
|
|
|
|
public ECParameterSpec getParams() { |
|
return params; |
|
} |
|
|
|
// Internal API to get the encoded point. Currently used by SunPKCS11. |
|
|
|
@SuppressWarnings("deprecation") |
|
public byte[] getEncodedPublicValue() { |
|
return key.clone(); |
|
} |
|
|
|
|
|
|
|
*/ |
|
@SuppressWarnings("deprecation") |
|
protected void parseKeyBits() throws InvalidKeyException { |
|
AlgorithmParameters algParams = this.algid.getParameters(); |
|
if (algParams == null) { |
|
throw new InvalidKeyException("EC domain parameters must be " + |
|
"encoded in the algorithm identifier"); |
|
} |
|
|
|
try { |
|
params = algParams.getParameterSpec(ECParameterSpec.class); |
|
w = ECUtil.decodePoint(key, params.getCurve()); |
|
} catch (IOException e) { |
|
throw new InvalidKeyException("Invalid EC key", e); |
|
} catch (InvalidParameterSpecException e) { |
|
throw new InvalidKeyException("Invalid EC key", e); |
|
} |
|
} |
|
|
|
|
|
public String toString() { |
|
return "Sun EC public key, " + params.getCurve().getField().getFieldSize() |
|
+ " bits\n public x coord: " + w.getAffineX() |
|
+ "\n public y coord: " + w.getAffineY() |
|
+ "\n parameters: " + params; |
|
} |
|
|
|
protected Object writeReplace() throws java.io.ObjectStreamException { |
|
return new KeyRep(KeyRep.Type.PUBLIC, |
|
getAlgorithm(), |
|
getFormat(), |
|
getEncoded()); |
|
} |
|
} |