/*
* oxAuth is available under the MIT License (2008). See http://opensource.org/licenses/MIT for full text.
*
* Copyright (c) 2014, Gluu
*/
package org.xdi.oxauth.model.crypto.signature;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.xdi.oxauth.model.crypto.PublicKey;
import org.xdi.oxauth.model.util.Base64Util;
import org.xdi.oxauth.model.util.StringUtils;
import java.math.BigInteger;
import static org.xdi.oxauth.model.jwk.JWKParameter.*;
/**
* The Public Key for the Elliptic Curve Digital Signature Algorithm (ECDSA)
*
* @author Javier Rojas Blum
* @version July 31, 2016
*/
public class ECDSAPublicKey extends PublicKey {
private static final String ECDSA_ALGORITHM = "EC";
private static final String USE = "sig";
private SignatureAlgorithm signatureAlgorithm;
private BigInteger x;
private BigInteger y;
public ECDSAPublicKey(SignatureAlgorithm signatureAlgorithm, BigInteger x, BigInteger y) {
this.signatureAlgorithm = signatureAlgorithm;
this.x = x;
this.y = y;
}
public ECDSAPublicKey(SignatureAlgorithm signatureAlgorithm, String x, String y) {
this(signatureAlgorithm,
new BigInteger(1, Base64Util.base64urldecode(x)),
new BigInteger(1, Base64Util.base64urldecode(y)));
}
public SignatureAlgorithm getSignatureAlgorithm() {
return signatureAlgorithm;
}
public void setSignatureAlgorithm(SignatureAlgorithm signatureAlgorithm) {
this.signatureAlgorithm = signatureAlgorithm;
}
public BigInteger getX() {
return x;
}
public void setX(BigInteger x) {
this.x = x;
}
public BigInteger getY() {
return y;
}
public void setY(BigInteger y) {
this.y = y;
}
@Override
public JSONObject toJSONObject() throws JSONException {
JSONObject jsonObject = new JSONObject();
jsonObject.put(MODULUS, JSONObject.NULL);
jsonObject.put(EXPONENT, JSONObject.NULL);
jsonObject.put(X, Base64Util.base64urlencodeUnsignedBigInt(x));
jsonObject.put(Y, Base64Util.base64urlencodeUnsignedBigInt(y));
return jsonObject;
}
@Override
public String toString() {
try {
return toJSONObject().toString(4);
} catch (JSONException e) {
return StringUtils.EMPTY_STRING;
} catch (Exception e) {
return StringUtils.EMPTY_STRING;
}
}
}