code: def push_subscription_decrypt_push(self, data, decrypt_params, encryption_header, crypto_key_header):
          
          salt = self.__decode_webpush_b64(encryption_header.split("salt=")[1].strip())
          dhparams = self.__decode_webpush_b64(crypto_key_header.split("dh=")[1].split(";")[0].strip())
          p256ecdsa = self.__decode_webpush_b64(crypto_key_header.split("p256ecdsa=")[1].strip())
          dec_key = ec.derive_private_key(decrypt_params['privkey'], ec.SECP256R1(), default_backend())
          decrypted = http_ece.decrypt(
              data,
              salt = salt,
              key = p256ecdsa,
              private_key = dec_key, 
              dh = dhparams, 
              auth_secret=decrypt_params['auth'],
              keylabel = "P-256",
              version = "aesgcm"
          )
          
          return json.loads(decrypted.decode('utf-8'), object_hook = Mastodon.__json_hooks)
docs: Decrypts `data` received in a webpush request. Requires the private key dict 
          from `push_subscription_generate_keys()`_ (`decrypt_params`) as well as the 
          Encryption and server Crypto-Key headers from the received webpush
          
          Returns the decoded webpush as a `push notification dict`_.