code: def get_gcm_decoded_private_key(encrypted_key_str: str, password: str, b58_address: str, salt: str, n: int,
                                      scheme: SignatureScheme) -> str:
          
          r = 8
          p = 8
          dk_len = 64
          scrypt = Scrypt(n, r, p, dk_len)
          derived_key = scrypt.generate_kd(password, salt)
          iv = derived_key[0:12]
          key = derived_key[32:64]
          encrypted_key = base64.b64decode(encrypted_key_str).hex()
          mac_tag = bytes.fromhex(encrypted_key[64:96])
          cipher_text = bytes.fromhex(encrypted_key[0:64])
          private_key = AESHandler.aes_gcm_decrypt_with_iv(cipher_text, b58_address.encode(), mac_tag, key, iv)
          if len(private_key) == 0:
              raise SDKException(ErrorCode.decrypt_encrypted_private_key_error)
          acct = Account(private_key, scheme)
          if acct.get_address().b58encode() != b58_address:
              raise SDKException(ErrorCode.other_error('Address error.'))
          return private_key.hex()
docs: This interface is used to decrypt an private key which has been encrypted.
  
          :param encrypted_key_str: an gcm encrypted private key in the form of string.
          :param password: the secret pass phrase to generate the keys from.
          :param b58_address: a base58 encode address which should be correspond with the private key.
          :param salt: a string to use for better protection from dictionary attacks.
          :param n: CPU/memory cost parameter.
          :param scheme: the signature scheme.
          :return: a private key in the form of string.