@@ -49,6 +49,8 @@ class HashDict(typing.NamedTuple):
4949 sha1 : str
5050 sha256 : str
5151 sha512 : str
52+ sha3_256 : str
53+ sha3_512 : str
5254
5355
5456def create_file_node (
@@ -141,6 +143,8 @@ def create_file_node(
141143 sha1obj = hashlib .sha1 ()
142144 sha256obj = hashlib .sha256 ()
143145 sha512obj = hashlib .sha512 ()
146+ sha3_256obj = hashlib .sha3_256 ()
147+ sha3_512obj = hashlib .sha3_512 ()
144148 stashed_error = None
145149 byte_tally = 0
146150 with open (filepath , "rb" ) as in_fh :
@@ -159,6 +163,8 @@ def create_file_node(
159163 sha1obj .update (buf )
160164 sha256obj .update (buf )
161165 sha512obj .update (buf )
166+ sha3_256obj .update (buf )
167+ sha3_512obj .update (buf )
162168 if stashed_error is not None :
163169 raise stashed_error
164170 current_hashdict = HashDict (
@@ -167,6 +173,8 @@ def create_file_node(
167173 sha1obj .hexdigest (),
168174 sha256obj .hexdigest (),
169175 sha512obj .hexdigest (),
176+ sha3_256obj .hexdigest (),
177+ sha3_512obj .hexdigest (),
170178 )
171179 if last_hashdict == current_hashdict :
172180 successful_hashdict = current_hashdict
@@ -194,18 +202,25 @@ def create_file_node(
194202
195203 # Add confirmed hashes into graph.
196204 for key in successful_hashdict ._fields :
197- if key not in ("md5" , "sha1" , "sha256" , "sha512" ):
205+ if key not in ("md5" , "sha1" , "sha256" , "sha512" , "sha3_256" , "sha3_512" ):
198206 continue
199207 n_hash = node_namespace ["hash-" + case_utils .local_uuid .local_uuid ()]
200208 graph .add ((n_contentdata_facet , NS_UCO_OBSERVABLE .hash , n_hash ))
201209 graph .add ((n_hash , NS_RDF .type , NS_UCO_TYPES .Hash ))
210+ if key in ("sha3_256" , "sha3_512" ):
211+ l_hash_method = rdflib .Literal (
212+ key .replace ("_" , "-" ).upper (),
213+ datatype = NS_UCO_VOCABULARY .HashNameVocab ,
214+ )
215+ else :
216+ l_hash_method = rdflib .Literal (
217+ key .upper (), datatype = NS_UCO_VOCABULARY .HashNameVocab
218+ )
202219 graph .add (
203220 (
204221 n_hash ,
205222 NS_UCO_TYPES .hashMethod ,
206- rdflib .Literal (
207- key .upper (), datatype = NS_UCO_VOCABULARY .HashNameVocab
208- ),
223+ l_hash_method ,
209224 )
210225 )
211226 hash_value = getattr (successful_hashdict , key )
0 commit comments