KEYCLOAK-7701 Refactor key providers to support additional algorithms
This commit is contained in:
1 parent
a5d155a35a
commit
3c5027de3c
53 files changed
+832
-815
No files matched your search
+32
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
*
|
||||
* Licensed 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.keycloak.crypto;
|
||||
|
||||
public interface Algorithm {
|
||||
|
||||
String HS256 = "HS256";
|
||||
String HS384 = "HS384";
|
||||
String HS512 = "HS512";
|
||||
String RS256 = "RS256";
|
||||
String RS384 = "RS384";
|
||||
String RS512 = "RS512";
|
||||
String ES256 = "ES256";
|
||||
String ES384 = "ES384";
|
||||
String ES512 = "ES512";
|
||||
|
||||
String AES = "AES";
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
*
|
||||
* Licensed 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.keycloak.crypto;
|
||||
|
||||
public class JavaAlgorithm {
|
||||
|
||||
public static String getJavaAlgorithm(String algorithm) {
|
||||
switch (algorithm) {
|
||||
case Algorithm.RS256:
|
||||
return "SHA256withRSA";
|
||||
case Algorithm.RS384:
|
||||
return "SHA384withRSA";
|
||||
case Algorithm.RS512:
|
||||
return "SHA512withRSA";
|
||||
case Algorithm.HS256:
|
||||
return "HMACSHA256";
|
||||
case Algorithm.HS384:
|
||||
return "HMACSHA384";
|
||||
case Algorithm.HS512:
|
||||
return "HMACSHA512";
|
||||
case Algorithm.AES:
|
||||
return "AES";
|
||||
default:
|
||||
throw new IllegalArgumentException("Unkown algorithm " + algorithm);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
*
|
||||
* Licensed 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.keycloak.crypto;
|
||||
|
||||
public enum KeyStatus {
|
||||
|
||||
ACTIVE, PASSIVE, DISABLED;
|
||||
|
||||
public static KeyStatus from(boolean active, boolean enabled) {
|
||||
if (!enabled) {
|
||||
return KeyStatus.DISABLED;
|
||||
} else {
|
||||
return active ? KeyStatus.ACTIVE : KeyStatus.PASSIVE;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isActive() {
|
||||
return this.equals(ACTIVE);
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return this.equals(ACTIVE) || this.equals(PASSIVE);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
*
|
||||
* Licensed 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.keycloak.crypto;
|
||||
|
||||
public interface KeyType {
|
||||
|
||||
String EC = "EC";
|
||||
String RSA = "RSA";
|
||||
String OCT = "OCT";
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
*
|
||||
* Licensed 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.keycloak.crypto;
|
||||
|
||||
public enum KeyUse {
|
||||
|
||||
SIG,
|
||||
ENC
|
||||
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
/*
|
||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
*
|
||||
* Licensed 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.keycloak.crypto;
|
||||
|
||||
import javax.crypto.SecretKey;
|
||||
import java.security.Key;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class KeyWrapper {
|
||||
|
||||
private String providerId;
|
||||
private long providerPriority;
|
||||
private String kid;
|
||||
private Set<String> algorithms;
|
||||
private String type;
|
||||
private KeyUse use;
|
||||
private KeyStatus status;
|
||||
private SecretKey secretKey;
|
||||
private Key signKey;
|
||||
private Key verifyKey;
|
||||
private X509Certificate certificate;
|
||||
|
||||
public String getProviderId() {
|
||||
return providerId;
|
||||
}
|
||||
|
||||
public void setProviderId(String providerId) {
|
||||
this.providerId = providerId;
|
||||
}
|
||||
|
||||
public long getProviderPriority() {
|
||||
return providerPriority;
|
||||
}
|
||||
|
||||
public void setProviderPriority(long providerPriority) {
|
||||
this.providerPriority = providerPriority;
|
||||
}
|
||||
|
||||
public String getKid() {
|
||||
return kid;
|
||||
}
|
||||
|
||||
public void setKid(String kid) {
|
||||
this.kid = kid;
|
||||
}
|
||||
|
||||
public Set<String> getAlgorithms() {
|
||||
return algorithms;
|
||||
}
|
||||
|
||||
public void setAlgorithms(String... algorithms) {
|
||||
this.algorithms = new HashSet<>();
|
||||
for (String a : algorithms) {
|
||||
this.algorithms.add(a);
|
||||
}
|
||||
}
|
||||
|
||||
public void setAlgorithms(Set<String> algorithms) {
|
||||
this.algorithms = algorithms;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public KeyUse getUse() {
|
||||
return use;
|
||||
}
|
||||
|
||||
public void setUse(KeyUse use) {
|
||||
this.use = use;
|
||||
}
|
||||
|
||||
public KeyStatus getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(KeyStatus status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public SecretKey getSecretKey() {
|
||||
return secretKey;
|
||||
}
|
||||
|
||||
public void setSecretKey(SecretKey secretKey) {
|
||||
this.secretKey = secretKey;
|
||||
}
|
||||
|
||||
public Key getSignKey() {
|
||||
return signKey;
|
||||
}
|
||||
|
||||
public void setSignKey(Key signKey) {
|
||||
this.signKey = signKey;
|
||||
}
|
||||
|
||||
public Key getVerifyKey() {
|
||||
return verifyKey;
|
||||
}
|
||||
|
||||
public void setVerifyKey(Key verifyKey) {
|
||||
this.verifyKey = verifyKey;
|
||||
}
|
||||
|
||||
public X509Certificate getCertificate() {
|
||||
return certificate;
|
||||
}
|
||||
|
||||
public void setCertificate(X509Certificate certificate) {
|
||||
this.certificate = certificate;
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ package org.keycloak.representations.idm;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
|
||||
@@ -54,6 +55,7 @@ public class KeysMetadataRepresentation {
|
||||
private String status;
|
||||
|
||||
private String type;
|
||||
private Set<String> algorithms;
|
||||
|
||||
private String publicKey;
|
||||
private String certificate;
|
||||
@@ -98,6 +100,14 @@ public class KeysMetadataRepresentation {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public Set<String> getAlgorithms() {
|
||||
return algorithms;
|
||||
}
|
||||
|
||||
public void setAlgorithms(Set<String> algorithms) {
|
||||
this.algorithms = algorithms;
|
||||
}
|
||||
|
||||
public String getPublicKey() {
|
||||
return publicKey;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user