public function getKey() {
		if(!$this->decrypted_key) {

			$decoded_ciphertextblob = base64_decode($this->key_description->getCiphertextBlob(), true);
			if(!$decoded_ciphertextblob) {
				throw new FetchException('CiphertextBlob should be a valid base64 encoded string');
			}

			$options = [
				'CiphertextBlob' => $decoded_ciphertextblob
			];

			$context = $this->key_description->getEncryptionContextAsArray();
			if(!empty($context)) {
				$options['EncryptionContext'] = $context;
			}

			try {
				$response = $this->client->decrypt($options);
			}
			catch(KmsException $e) {
				throw new FetchException('Key decryption failed', 0, $e);
			}

			$this->decrypted_key = $response['Plaintext'];
		}

		return $this->decrypted_key;
	}