/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.cxf.rs.security.jose.jwk; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.cxf.helpers.CastUtils; import org.apache.cxf.jaxrs.json.basic.JsonMapObject; import org.apache.cxf.rs.security.jose.common.JoseConstants; public class JsonWebKey extends JsonMapObject { public static final String KEY_TYPE = "kty"; public static final String PUBLIC_KEY_USE = "use"; public static final String KEY_OPERATIONS = "key_ops"; public static final String KEY_ALGO = JoseConstants.HEADER_ALGORITHM; public static final String KEY_ID = JoseConstants.HEADER_KEY_ID; public static final String X509_URL = JoseConstants.HEADER_X509_URL; public static final String X509_CHAIN = JoseConstants.HEADER_X509_CHAIN; public static final String X509_THUMBPRINT = JoseConstants.HEADER_X509_THUMBPRINT; public static final String X509_THUMBPRINT_SHA256 = JoseConstants.HEADER_X509_THUMBPRINT_SHA256; public static final String KEY_TYPE_RSA = "RSA"; public static final String RSA_MODULUS = "n"; public static final String RSA_PUBLIC_EXP = "e"; public static final String RSA_PRIVATE_EXP = "d"; public static final String RSA_FIRST_PRIME_FACTOR = "p"; public static final String RSA_SECOND_PRIME_FACTOR = "q"; public static final String RSA_FIRST_PRIME_CRT = "dp"; public static final String RSA_SECOND_PRIME_CRT = "dq"; public static final String RSA_FIRST_CRT_COEFFICIENT = "qi"; public static final String KEY_TYPE_OCTET = "oct"; public static final String OCTET_KEY_VALUE = "k"; public static final String KEY_TYPE_ELLIPTIC = "EC"; public static final String EC_CURVE = "crv"; public static final String EC_CURVE_P256 = "P-256"; public static final String EC_CURVE_P384 = "P-384"; public static final String EC_CURVE_P521 = "P-521"; public static final String EC_X_COORDINATE = "x"; public static final String EC_Y_COORDINATE = "y"; public static final String EC_PRIVATE_KEY = "d"; public static final String PUBLIC_KEY_USE_SIGN = "sig"; public static final String PUBLIC_KEY_USE_ENCRYPT = "enc"; public static final String KEY_OPER_SIGN = "sign"; public static final String KEY_OPER_VERIFY = "verify"; public static final String KEY_OPER_ENCRYPT = "encrypt"; public static final String KEY_OPER_DECRYPT = "decrypt"; public static final String KEY_OPER_WRAP_KEY = "wrapKey"; public static final String KEY_OPER_UNWRAP_KEY = "unwrapKey"; public static final String KEY_OPER_DERIVE_KEY = "deriveKey"; public static final String KEY_OPER_DERIVE_BITS = "deriveBits"; private static final long serialVersionUID = 3201315996547826368L; public JsonWebKey() { } public JsonWebKey(Map<String, Object> values) { super(values); } public void setKeyType(KeyType keyType) { setProperty(KEY_TYPE, keyType.toString()); } public KeyType getKeyType() { Object prop = getProperty(KEY_TYPE); return prop == null ? null : KeyType.getKeyType(prop.toString()); } public void setPublicKeyUse(PublicKeyUse use) { setProperty(PUBLIC_KEY_USE, use.toString()); } public PublicKeyUse getPublicKeyUse() { Object prop = getProperty(PUBLIC_KEY_USE); return prop == null ? null : PublicKeyUse.getPublicKeyUse(prop.toString()); } public void setKeyOperation(List<KeyOperation> keyOperation) { List<String> ops = new ArrayList<>(keyOperation.size()); for (KeyOperation op : keyOperation) { ops.add(op.toString()); } setProperty(KEY_OPERATIONS, ops); } public List<KeyOperation> getKeyOperation() { List<Object> ops = CastUtils.cast((List<?>)getProperty(KEY_OPERATIONS)); if (ops == null) { return null; } List<KeyOperation> keyOps = new ArrayList<>(ops.size()); for (Object op : ops) { keyOps.add(KeyOperation.getKeyOperation(op.toString())); } return keyOps; } public void setAlgorithm(String algorithm) { setProperty(KEY_ALGO, algorithm); } public String getAlgorithm() { return (String)getProperty(KEY_ALGO); } public void setKeyId(String kid) { setProperty(KEY_ID, kid); } public String getKeyId() { return (String)getProperty(KEY_ID); } public void setX509Url(String x509Url) { setProperty(X509_URL, x509Url); } public String getX509Url() { return (String)getProperty(X509_URL); } public void setX509Chain(List<String> x509Chain) { setProperty(X509_CHAIN, x509Chain); } public List<String> getX509Chain() { return CastUtils.cast((List<?>)getProperty(X509_CHAIN)); } public void setX509Thumbprint(String x509Thumbprint) { setProperty(X509_THUMBPRINT, x509Thumbprint); } public String getX509Thumbprint() { return (String)getProperty(X509_THUMBPRINT); } public void setX509ThumbprintSHA256(String x509Thumbprint) { setProperty(X509_THUMBPRINT_SHA256, x509Thumbprint); } public String getX509ThumbprintSHA256() { return (String)getProperty(X509_THUMBPRINT_SHA256); } public JsonWebKey setKeyProperty(String name, Object value) { setProperty(name, value); return this; } public Object getKeyProperty(String name) { return getProperty(name); } }