/*
* 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;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.xdi.oxauth.model.common.JSONable;
import org.xdi.oxauth.model.util.StringUtils;
import static org.xdi.oxauth.model.jwk.JWKParameter.*;
/**
* @author Javier Rojas Blum
* @version February 17, 2016
*/
public class Key<E extends PrivateKey, F extends PublicKey> implements JSONable {
private String keyType;
private String use;
private String algorithm;
private String keyId;
private Long expirationTime;
private Object curve;
private E privateKey;
private F publicKey;
private Certificate certificate;
public String getKeyType() {
return keyType;
}
public void setKeyType(String keyType) {
this.keyType = keyType;
}
public String getUse() {
return use;
}
public void setUse(String use) {
this.use = use;
}
public String getAlgorithm() {
return algorithm;
}
public void setAlgorithm(String algorithm) {
this.algorithm = algorithm;
}
public String getKeyId() {
return keyId;
}
public void setKeyId(String keyId) {
this.keyId = keyId;
}
public Long getExpirationTime() {
return expirationTime;
}
public void setExpirationTime(Long expirationTime) {
this.expirationTime = expirationTime;
}
public Object getCurve() {
return curve;
}
public void setCurve(Object curve) {
this.curve = curve;
}
public E getPrivateKey() {
return privateKey;
}
public void setPrivateKey(E privateKey) {
this.privateKey = privateKey;
}
public F getPublicKey() {
return publicKey;
}
public void setPublicKey(F publicKey) {
this.publicKey = publicKey;
}
public Certificate getCertificate() {
return certificate;
}
public void setCertificate(Certificate certificate) {
this.certificate = certificate;
}
@Override
public JSONObject toJSONObject() throws JSONException {
JSONObject jsonObject = new JSONObject();
jsonObject.put(KEY_TYPE, getKeyType());
jsonObject.put(KEY_USE, getUse());
jsonObject.put(ALGORITHM, getAlgorithm());
jsonObject.put(KEY_ID, getKeyId());
jsonObject.put(EXPIRATION_TIME, getExpirationTime() == null ? JSONObject.NULL : getExpirationTime());
jsonObject.put(CURVE, getCurve());
jsonObject.put(PRIVATE_KEY, getPrivateKey().toJSONObject());
jsonObject.put(PUBLIC_KEY, getPublicKey().toJSONObject());
jsonObject.put(CERTIFICATE_CHAIN, getCertificate().toJSONArray());
return jsonObject;
}
@Override
public String toString() {
try {
return toJSONObject().toString(4).replace("\\/", "/");
} catch (JSONException e) {
return StringUtils.EMPTY_STRING;
} catch (Exception e) {
return StringUtils.EMPTY_STRING;
}
}
}