package org.apereo.cas.util.cipher; import org.apereo.cas.CipherExecutor; import org.apereo.cas.util.EncodingUtils; import org.jose4j.keys.AesKey; import java.nio.charset.StandardCharsets; /** * Abstract cipher to provide common operations around signing objects. * * @author Misagh Moayyed * @since 4.2 */ public abstract class AbstractCipherExecutor<T, R> implements CipherExecutor<T, R> { private AesKey signingKey; /** * Instantiates a new cipher executor. */ protected AbstractCipherExecutor() { } /** * Instantiates a new cipher executor. * * @param signingSecretKey the signing key */ public AbstractCipherExecutor(final String signingSecretKey) { setSigningKey(signingSecretKey); } public void setSigningKey(final String signingSecretKey) { this.signingKey = new AesKey(signingSecretKey.getBytes(StandardCharsets.UTF_8)); } /** * Sign the array by first turning it into a base64 encoded string. * * @param value the value * @return the byte [ ] */ protected byte[] sign(final byte[] value) { return EncodingUtils.signJws(this.signingKey, value); } /** * Verify signature. * * @param value the value * @return the value associated with the signature, which may have to * be decoded, or null. */ protected byte[] verifySignature(final byte[] value) { return EncodingUtils.verifyJwsSignature(this.signingKey, value); } @Override public boolean isEnabled() { return this.signingKey != null; } }