use of org.apereo.cas.util.gen.Base64RandomStringGenerator in project cas by apereo.
the class GenerateCryptoKeysCommand method generateKey.
/**
* Generate key.
*
* @param name the name
*/
@CliCommand(value = "generate-key", help = "Generate signing/encryption crypto keys for CAS settings")
public void generateKey(@CliOption(key = { "group" }, help = "Property group that holds the key (i.e. cas.webflow). The group must have a child category of 'crypto'.", mandatory = true, specifiedDefaultValue = "", unspecifiedDefaultValue = "", optionContext = "Property name for that holds the key") final String name) {
/*
Because the command is used both from the shell and CLI,
we need to validate parameters again.
*/
if (StringUtils.isBlank(name)) {
LOGGER.warn("No property/setting name is specified for signing/encryption key generation.");
return;
}
final CasConfigurationMetadataRepository repository = new CasConfigurationMetadataRepository();
final String cryptoGroup = name.concat(".crypto");
repository.getRepository().getAllGroups().entrySet().stream().filter(e -> e.getKey().startsWith(cryptoGroup)).forEach(e -> {
final ConfigurationMetadataGroup grp = e.getValue();
grp.getSources().forEach(Unchecked.biConsumer((k, v) -> {
final Object obj = ClassUtils.getClass(k, true).getDeclaredConstructor().newInstance();
if (obj instanceof EncryptionJwtSigningJwtCryptographyProperties) {
final EncryptionJwtSigningJwtCryptographyProperties crypto = (EncryptionJwtSigningJwtCryptographyProperties) obj;
LOGGER.info(cryptoGroup.concat(".encryption.key=" + EncodingUtils.generateJsonWebKey(crypto.getEncryption().getKeySize())));
LOGGER.info(cryptoGroup.concat(".signing.key=" + EncodingUtils.generateJsonWebKey(crypto.getSigning().getKeySize())));
} else if (obj instanceof EncryptionRandomizedSigningJwtCryptographyProperties) {
final EncryptionRandomizedSigningJwtCryptographyProperties crypto = (EncryptionRandomizedSigningJwtCryptographyProperties) obj;
final String encKey = new Base64RandomStringGenerator(crypto.getEncryption().getKeySize()).getNewString();
LOGGER.info(cryptoGroup.concat(".encryption.key=" + encKey));
LOGGER.info(cryptoGroup.concat(".signing.key=" + EncodingUtils.generateJsonWebKey(crypto.getSigning().getKeySize())));
}
}));
});
}
use of org.apereo.cas.util.gen.Base64RandomStringGenerator in project cas by apereo.
the class BaseBinaryCipherExecutor method ensureEncryptionKeyExists.
private void ensureEncryptionKeyExists(final String encryptionSecretKey, final int encryptionKeySize) {
final byte[] encryptionKey;
if (StringUtils.isBlank(encryptionSecretKey)) {
LOGGER.warn("Secret key for encryption is not defined under [{}]. CAS will attempt to auto-generate the encryption key", getEncryptionKeySetting());
final String key = new Base64RandomStringGenerator(encryptionKeySize).getNewString();
LOGGER.warn("Generated encryption key [{}] of size [{}]. The generated key MUST be added to CAS settings under setting [{}].", key, encryptionKeySize, getEncryptionKeySetting());
encryptionKey = EncodingUtils.decodeBase64(key);
} else {
final boolean base64 = EncodingUtils.isBase64(encryptionSecretKey);
byte[] key = new byte[0];
if (base64) {
key = EncodingUtils.decodeBase64(encryptionSecretKey);
}
if (base64 && key.length == encryptionKeySize) {
LOGGER.debug("Secret key for encryption defined under [{}] is Base64 encoded.", getEncryptionKeySetting());
encryptionKey = key;
} else if (encryptionSecretKey.length() != encryptionKeySize) {
LOGGER.warn("Secret key for encryption defined under [{}] is Base64 encoded but the size does not match the key size [{}].", getEncryptionKeySetting(), encryptionKeySize);
encryptionKey = encryptionSecretKey.getBytes(StandardCharsets.UTF_8);
} else {
LOGGER.warn("Secret key for encryption defined under [{}] is not Base64 encoded. Clear the setting to regenerate (Recommended) or replace with" + " [{}].", getEncryptionKeySetting(), EncodingUtils.encodeBase64(encryptionSecretKey));
encryptionKey = encryptionSecretKey.getBytes(StandardCharsets.UTF_8);
}
}
this.encryptionSecretKey = encryptionKey;
}
use of org.apereo.cas.util.gen.Base64RandomStringGenerator in project cas by apereo.
the class DefaultUniqueTicketIdGenerator method setMaxLength.
/**
* Sets max length of id generation.
*
* @param maxLength the max length
*/
public void setMaxLength(final int maxLength) {
this.randomStringGenerator = new Base64RandomStringGenerator(maxLength);
this.numericGenerator = new DefaultLongNumericGenerator(1);
}
Aggregations