docs: def AddHash(self, sha1, md5, crc, file_name, file_size, product_code_list,
                op_system_code_list, special_code):
      """Adds a new file from the NSRL hash database.
  
      We create a new subject in:
        aff4:/files/nsrl/<sha1>
      with all the other arguments as attributes.
  
      Args:
        sha1: SHA1 digest as a hex encoded string.
        md5: MD5 digest as a hex encoded string.
        crc: File CRC as an integer.
        file_name: Filename.
        file_size: Size of file.
        product_code_list: List of products this file is part of.
        op_system_code_list: List of operating systems this file is part of.
        special_code: Special code (malicious/special/normal file).
      """
      file_store_urn = self.PATH.Add(sha1)
  
      special_code = self.FILE_TYPES.get(special_code, self.FILE_TYPES[""])
  
      with aff4.FACTORY.Create(
          file_store_urn, NSRLFile, mode="w", token=self.token) as fd:
        fd.Set(
            fd.Schema.NSRL(
                sha1=sha1.decode("hex"),
                md5=md5.decode("hex"),
                crc32=crc,
                file_name=file_name,
                file_size=file_size,
                product_code=product_code_list,
                op_system_code=op_system_code_list,
                file_type=special_code))