code: def decrypt_bytes_with_AES_GCM(
      cipher_text_bytes, secret_key, salt, key_len=128, block_size=12
  ):
      """
      decrypt bytes cipher text with AES GCM
      :param cipher_text_bytes: cipher text in bytes
      :param secret_key: secret key in string
      :param salt: secret slat in string
      :param key_len: key len (128 or 256)
      :param block_size: lv size (default 12 for GCM)
      :return: plain test in bytes
      """
      key = get_private_key(secret_key, salt, key_len)
      tag = cipher_text_bytes[-16:]
      iv = cipher_text_bytes[:block_size]
      # create Cipher
      decryptor = Cipher(
          algorithms.AES(key), modes.GCM(iv, tag), backend=back_end
      ).decryptor()
      # 16 for tag
      ct = (
          decryptor.update(cipher_text_bytes[block_size:-16])
          + decryptor.finalize()
      )
      return ct
  
file_path: analytics-zoo/pyzoo/zoo/common/encryption_utils.py
imports: import os
  from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
  from cryptography.hazmat.primitives import padding
  from cryptography.hazmat.backends import default_backend
  import base64
  import hashlib
label_desc: Use image node_id 9 for calling a global function with example usage: decrypt_bytes_with_AES_GCM(cipher_text_bytes, secret_key, salt, key_len, block_size) and returns: ct