Metadata PEM support
This commit is contained in:
@@ -25,6 +25,7 @@ import java.security.interfaces.RSAPrivateKey;
|
||||
import java.security.interfaces.RSAPublicKey;
|
||||
import java.security.spec.PKCS8EncodedKeySpec;
|
||||
import java.security.spec.X509EncodedKeySpec;
|
||||
import java.util.Base64;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -38,6 +39,8 @@ public final class RSAUtils {
|
||||
public static final String PUBLIC_KEY = "RSAPublicKey";
|
||||
|
||||
public static final String PRIVATE_KEY = "RSAPrivateKey";
|
||||
|
||||
public static final int BASE64ARRAY_SIZE = 64;
|
||||
|
||||
public static Map<String, Object> genKeyPair() throws Exception {
|
||||
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORTHM);
|
||||
@@ -173,5 +176,41 @@ public final class RSAUtils {
|
||||
|
||||
return cipher.doFinal(data);
|
||||
}
|
||||
|
||||
public static String getPublicKeyPEM(byte[] encoded) {
|
||||
StringBuffer base64String =
|
||||
new StringBuffer("");
|
||||
base64String.append("-----BEGIN PUBLIC KEY-----").append("\n");
|
||||
base64String.append(getBase64PEM(encoded));
|
||||
base64String.append("-----END PUBLIC KEY-------").append("\n");
|
||||
return base64String.toString();
|
||||
}
|
||||
|
||||
public static String getPrivateKeyPEM(byte[] encoded) {
|
||||
StringBuffer base64String =
|
||||
new StringBuffer("");
|
||||
base64String.append("-----BEGIN RSA PRIVATE KEY-----").append("\n");
|
||||
base64String.append(getBase64PEM(encoded));
|
||||
base64String.append("-----END RSA PRIVATE KEY-------").append("\n");
|
||||
return base64String.toString();
|
||||
}
|
||||
|
||||
public static String getBase64PEM(byte[] encoded) {
|
||||
String base64String = Base64.getEncoder().encodeToString(encoded);
|
||||
StringBuffer base64ArrayString = new StringBuffer("");
|
||||
int startPosition = 0;
|
||||
int endPosition = BASE64ARRAY_SIZE;
|
||||
while(endPosition < base64String.length()) {
|
||||
base64ArrayString.append(base64String.substring(startPosition, endPosition)).append("\n");
|
||||
startPosition = endPosition;
|
||||
endPosition = endPosition + BASE64ARRAY_SIZE;
|
||||
}
|
||||
if(startPosition < base64String.length()) {
|
||||
base64ArrayString.append(base64String.substring(startPosition)).append("\n");
|
||||
}
|
||||
|
||||
return base64ArrayString.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -18,12 +18,20 @@ package org.maxkey.crypto.jose.keystore;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.common.io.CharStreams;
|
||||
import com.nimbusds.jose.JOSEException;
|
||||
import com.nimbusds.jose.jwk.JWK;
|
||||
import com.nimbusds.jose.jwk.JWKSet;
|
||||
import com.nimbusds.jose.jwk.RSAKey;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.security.PublicKey;
|
||||
import java.text.ParseException;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.maxkey.crypto.RSAUtils;
|
||||
import org.maxkey.pretty.PrettyFactory;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.core.io.Resource;
|
||||
@@ -131,5 +139,49 @@ public class JWKSetKeyStore {
|
||||
}
|
||||
return jwkSet.getKeys();
|
||||
}
|
||||
|
||||
|
||||
public String toString(String mediaType){
|
||||
StringBuffer metaDataString = new StringBuffer("");
|
||||
if(StringUtils.isNotBlank(mediaType) && mediaType.equalsIgnoreCase("XML")) {
|
||||
metaDataString.append("<RSAKeyValue>").append("\n");
|
||||
for(JWK jwk : jwkSet.getKeys()) {
|
||||
RSAKey rsaKey = jwk.toRSAKey();
|
||||
PublicKey publicKey;
|
||||
try {
|
||||
publicKey = rsaKey.toPublicKey();
|
||||
metaDataString.append("<Modulus>").append("\n");
|
||||
metaDataString.append(RSAUtils.getPublicKeyPEM(publicKey.getEncoded()));
|
||||
metaDataString.append("</Modulus>").append("\n");
|
||||
//keyID
|
||||
metaDataString.append("<Algorithm>");
|
||||
metaDataString.append(rsaKey.getAlgorithm());
|
||||
metaDataString.append("</Algorithm>").append("\n");
|
||||
|
||||
metaDataString.append("<KeyID>");
|
||||
metaDataString.append(rsaKey.getKeyID());
|
||||
metaDataString.append("</KeyID>").append("\n");
|
||||
|
||||
metaDataString.append("<KeyType>");
|
||||
metaDataString.append(rsaKey.getKeyType());
|
||||
metaDataString.append("</KeyType>").append("\n");
|
||||
|
||||
metaDataString.append("<Format>");
|
||||
metaDataString.append(publicKey.getFormat());
|
||||
metaDataString.append("</Format>");
|
||||
|
||||
metaDataString.append("<PublicExponent>");
|
||||
metaDataString.append(rsaKey.getPublicExponent());
|
||||
metaDataString.append("</PublicExponent>").append("\n");
|
||||
} catch (JOSEException e) {
|
||||
_logger.error("JOSEException ", mediaType);
|
||||
}
|
||||
}
|
||||
metaDataString.append("</RSAKeyValue>");
|
||||
}else {
|
||||
metaDataString.append(PrettyFactory.getJsonPretty().format(
|
||||
jwkSet.toPublicJWKSet().toString()));
|
||||
}
|
||||
|
||||
return metaDataString.toString();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user