| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | <?phpnamespace Aws\Crypto;use Aws\Crypto\Cipher\CipherMethod;use GuzzleHttp\Psr7\Stream;/** * @internal */abstract class AbstractCryptoClientV2{    public static $supportedCiphers = ['gcm'];    public static $supportedKeyWraps = [        KmsMaterialsProviderV2::WRAP_ALGORITHM_NAME    ];    public static $supportedSecurityProfiles = ['V2', 'V2_AND_LEGACY'];    public static $legacySecurityProfiles = ['V2_AND_LEGACY'];    /**     * Returns if the passed cipher name is supported for encryption by the SDK.     *     * @param string $cipherName The name of a cipher to verify is registered.     *     * @return bool If the cipher passed is in our supported list.     */    public static function isSupportedCipher($cipherName)    {        return in_array($cipherName, self::$supportedCiphers, true);    }    /**     * Returns an identifier recognizable by `openssl_*` functions, such as     * `aes-256-gcm`     *     * @param string $cipherName Name of the cipher being used for encrypting     *                           or decrypting.     * @param int $keySize Size of the encryption key, in bits, that will be     *                     used.     *     * @return string     */    abstract protected function getCipherOpenSslName($cipherName, $keySize);    /**     * Constructs a CipherMethod for the given name, initialized with the other     * data passed for use in encrypting or decrypting.     *     * @param string $cipherName Name of the cipher to generate for encrypting.     * @param string $iv Base Initialization Vector for the cipher.     * @param int $keySize Size of the encryption key, in bits, that will be     *                     used.     *     * @return CipherMethod     *     * @internal     */    abstract protected function buildCipherMethod($cipherName, $iv, $keySize);    /**     * Performs a reverse lookup to get the openssl_* cipher name from the     * AESName passed in from the MetadataEnvelope.     *     * @param $aesName     *     * @return string     *     * @internal     */    abstract protected function getCipherFromAesName($aesName);    /**     * Dependency to provide an interface for building an encryption stream for     * data given cipher details, metadata, and materials to do so.     *     * @param Stream $plaintext Plain-text data to be encrypted using the     *                          materials, algorithm, and data provided.     * @param array $options Options for use in encryption.     * @param MaterialsProviderV2 $provider A provider to supply and encrypt     *                                      materials used in encryption.     * @param MetadataEnvelope $envelope A storage envelope for encryption     *                                   metadata to be added to.     *     * @return AesStreamInterface     *     * @internal     */    abstract public function encrypt(        Stream $plaintext,        array $options,        MaterialsProviderV2 $provider,        MetadataEnvelope $envelope    );    /**     * Dependency to provide an interface for building a decryption stream for     * cipher text given metadata and materials to do so.     *     * @param string $cipherText Plain-text data to be decrypted using the     *                           materials, algorithm, and data provided.     * @param MaterialsProviderInterface $provider A provider to supply and encrypt     *                                             materials used in encryption.     * @param MetadataEnvelope $envelope A storage envelope for encryption     *                                   metadata to be read from.     * @param array $options Options used for decryption.     *     * @return AesStreamInterface     *     * @internal     */    abstract public function decrypt(        $cipherText,        MaterialsProviderInterfaceV2 $provider,        MetadataEnvelope $envelope,        array $options = []    );}
 |