com.jetdrone.vertx.yoke.security.SecretSecurity Maven / Gradle / Ivy
package com.jetdrone.vertx.yoke.security;
import com.jetdrone.vertx.yoke.YokeSecurity;
import org.jetbrains.annotations.NotNull;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;
import java.util.*;
public final class SecretSecurity extends YokeSecurity {
private static final Map ALIAS_ALG_MAP = new HashMap<>();
static {
ALIAS_ALG_MAP.put("HS256", "HMacSHA256");
ALIAS_ALG_MAP.put("HS384", "HMacSHA384");
ALIAS_ALG_MAP.put("HS512", "HMacSHA512");
ALIAS_ALG_MAP.put("RS256", "SHA256withRSA");
}
private static String getAlgorithm(String alias) {
if (ALIAS_ALG_MAP.containsKey(alias)) {
return ALIAS_ALG_MAP.get(alias);
} else {
return alias;
}
}
private final byte[] secret;
public SecretSecurity(@NotNull String string) {
this(string.getBytes());
}
public SecretSecurity(@NotNull byte[] bytes) {
secret = bytes;
}
/**
* Creates a new Message Authentication Code
* @param alias algorithm to use e.g.: HmacSHA256
* @return Mac implementation
*/
public Mac getMac(final @NotNull String alias) {
try {
Mac mac = Mac.getInstance(getAlgorithm(alias));
mac.init(new SecretKeySpec(secret, mac.getAlgorithm()));
return mac;
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
throw new RuntimeException(e);
}
}
public Signature getSignature(final @NotNull String alias) {
try {
final KeyPair keyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair();
Signature signature = Signature.getInstance(getAlgorithm(alias));
signature.initSign(keyPair.getPrivate());
return signature;
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
throw new RuntimeException(e);
}
}
/**
* Creates a new Crypto KEY
* @return Key implementation
*/
public Key getKey(final @NotNull String alias) {
return new SecretKeySpec(secret, getAlgorithm(alias));
}
}