All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amazonaws.services.dynamodbv2.datamodeling.encryption.DelegatedKey Maven / Gradle / Ivy

There is a newer version: 2.0.3
Show newest version
/*
 * Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file 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 com.amazonaws.services.dynamodbv2.datamodeling.encryption;

import java.security.GeneralSecurityException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

/**
 * Identifies keys which should not be used directly with {@link Cipher} but
 * instead contain their own cryptographic logic. This can be used to wrap more
 * complex logic, HSM integration, or service-calls.
 * 
 * 

* Most delegated keys will only support a subset of these operations. (For * example, AES keys will generally not support {@link #sign(byte[], String)} or * {@link #verify(byte[], byte[], String)} and HMAC keys will generally not * support anything except sign and verify.) * {@link UnsupportedOperationException} should be thrown in these cases. * * @author Greg Rubin */ public interface DelegatedKey extends SecretKey { /** * Encrypts the provided plaintext and returns a byte-array containing the ciphertext. * * @param plainText * @param additionalAssociatedData * Optional additional data which must then also be provided for successful * decryption. Both null and arrays of length 0 are treated identically. * Not all keys will support this parameter. * @param algorithm * the transformation to be used when encrypting the data * @return ciphertext the ciphertext produced by this encryption operation * @throws UnsupportedOperationException * if encryption is not supported or if additionalAssociatedData is * provided, but not supported. */ public byte[] encrypt(byte[] plainText, byte[] additionalAssociatedData, String algorithm) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException; /** * Decrypts the provided ciphertext and returns a byte-array containing the * plaintext. * * @param cipherText * @param additionalAssociatedData * Optional additional data which was provided during encryption. * Both null and arrays of length 0 are treated * identically. Not all keys will support this parameter. * @param algorithm * the transformation to be used when decrypting the data * @return plaintext the result of decrypting the input ciphertext * @throws UnsupportedOperationException * if decryption is not supported or if * additionalAssociatedData is provided, but not * supported. */ public byte[] decrypt(byte[] cipherText, byte[] additionalAssociatedData, String algorithm) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidAlgorithmParameterException; /** * Wraps (encrypts) the provided key to make it safe for * storage or transmission. * * @param key * @param additionalAssociatedData * Optional additional data which must then also be provided for * successful unwrapping. Both null and arrays of * length 0 are treated identically. Not all keys will support * this parameter. * @param algorithm * the transformation to be used when wrapping the key * @return the wrapped key * @throws UnsupportedOperationException * if wrapping is not supported or if * additionalAssociatedData is provided, but not * supported. */ public byte[] wrap(Key key, byte[] additionalAssociatedData, String algorithm) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException; /** * Unwraps (decrypts) the provided wrappedKey to recover the * original key. * * @param wrappedKey * @param additionalAssociatedData * Optional additional data which was provided during wrapping. * Both null and arrays of length 0 are treated * identically. Not all keys will support this parameter. * @param algorithm * the transformation to be used when unwrapping the key * @return the unwrapped key * @throws UnsupportedOperationException * if wrapping is not supported or if * additionalAssociatedData is provided, but not * supported. */ public Key unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType, byte[] additionalAssociatedData, String algorithm) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException; /** * Calculates and returns a signature for dataToSign. * * @param dataToSign * @param algorithm * @return the signature * @throws UnsupportedOperationException if signing is not supported */ public byte[] sign(byte[] dataToSign, String algorithm) throws GeneralSecurityException; /** * Checks the provided signature for correctness. * * @param dataToSign * @param signature * @param algorithm * @return true if and only if the signature matches the dataToSign. * @throws UnsupportedOperationException if signature validation is not supported */ public boolean verify(byte[] dataToSign, byte[] signature, String algorithm); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy