| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | <?phpnamespace Aws\Crypto;abstract class MaterialsProvider implements MaterialsProviderInterface{    private static $supportedKeySizes = [        128 => true,        192 => true,        256 => true,    ];    /**     * Returns if the requested size is supported by AES.     *     * @param int $keySize Size of the requested key in bits.     *     * @return bool     */    public static function isSupportedKeySize($keySize)    {        return isset(self::$supportedKeySizes[$keySize]);    }    /**     * Performs further initialization of the MaterialsProvider based on the     * data inside the MetadataEnvelope.     *     * @param MetadataEnvelope $envelope A storage envelope for encryption     *                                   metadata to be read from.     *     * @return MaterialsProvider     *     * @throws \RuntimeException Thrown when there is an empty or improperly     *                           formed materials description in the envelope.     *     * @internal     */    abstract public function fromDecryptionEnvelope(MetadataEnvelope $envelope);    /**     * Returns the material description for this Provider so it can be verified     * by encryption mechanisms.     *     * @return string     */    abstract public function getMaterialsDescription();    /**     * Returns the wrap algorithm name for this Provider.     *     * @return string     */    abstract public function getWrapAlgorithmName();    /**     * Takes a content encryption key (CEK) and description to return an     * encrypted key according to the Provider's specifications.     *     * @param string $unencryptedCek Key for use in encrypting other data     *                               that itself needs to be encrypted by the     *                               Provider.     * @param string $materialDescription Material Description for use in     *                                    encrypting the $cek.     *     * @return string     */    abstract public function encryptCek($unencryptedCek, $materialDescription);    /**     * Takes an encrypted content encryption key (CEK) and material description     * for use decrypting the key according to the Provider's specifications.     *     * @param string $encryptedCek Encrypted key to be decrypted by the Provider     *                             for use decrypting other data.     * @param string $materialDescription Material Description for use in     *                                    encrypting the $cek.     *     * @return string     */    abstract public function decryptCek($encryptedCek, $materialDescription);    /**     * @param string $keySize Length of a cipher key in bits for generating a     *                        random content encryption key (CEK).     *     * @return string     */    public function generateCek($keySize)    {        return openssl_random_pseudo_bytes($keySize / 8);    }    /**     * @param string $openSslName Cipher OpenSSL name to use for generating     *                            an initialization vector.     *     * @return string     */    public function generateIv($openSslName)    {        return openssl_random_pseudo_bytes(            openssl_cipher_iv_length($openSslName)        );    }}
 |