docs: def from_json_dict(dct, validate=True):
      # type: (Dict[str, Any], bool) -> Schema
      """ Create a Schema for v1 or v2 according to dct
  
      :param dct: This dictionary must have a `'features'`
              key specifying the columns of the dataset. It must have
              a `'version'` key containing the master schema version
              that this schema conforms to. It must have a `'hash'`
              key with all the globals.
      :param validate: (default True) Raise an exception if the
              schema does not conform to the master schema.
      :return: the Schema
      """
      if validate:
          # This raises iff the schema is invalid.
          validate_schema_dict(dct)
  
      version = dct['version']
      if version == 1:
          dct = convert_v1_to_v2(dct)
          if validate:
              validate_schema_dict(dct)
      elif version != 2:
          msg = ('Schema version {} is not supported. '
                 'Consider updating clkhash.').format(version)
          raise SchemaError(msg)
  
      clk_config = dct['clkConfig']
      l = clk_config['l']
      xor_folds = clk_config.get('xor_folds', 0)
  
      kdf = clk_config['kdf']
      kdf_type = kdf['type']
      kdf_hash = kdf.get('hash', 'SHA256')
      kdf_info_string = kdf.get('info')
      kdf_info = (base64.b64decode(kdf_info_string)
                  if kdf_info_string is not None
                  else None)
      kdf_salt_string = kdf.get('salt')
      kdf_salt = (base64.b64decode(kdf_salt_string)
                  if kdf_salt_string is not None
                  else None)
      kdf_key_size = kdf.get('keySize', DEFAULT_KDF_KEY_SIZE)
  
      fields = list(map(spec_from_json_dict, dct['features']))
      return Schema(fields, l, xor_folds,
                    kdf_type, kdf_hash, kdf_info, kdf_salt, kdf_key_size)