'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).'

def AddHash(self, sha1, md5, crc, file_name, file_size, product_code_list, op_system_code_list, special_code):

    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))
