Skip to content

Commit 58e8a07

Browse files
committed
Add SHA3-256 and SHA3-512 to default generated hashes
A follow-on patch will regenerate Make-managed files. References: * ucoProject/UCO#526 Signed-off-by: Alex Nelson <[email protected]>
1 parent 3a7bc91 commit 58e8a07

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

case_utils/case_file/__init__.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

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

tests/case_utils/case_file/test_case_file.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ def test_confirm_hashes(graph_case_file: rdflib.Graph) -> None:
5656
"SHA1": "A94A8FE5CCB19BA61C4C0873D391E987982FBBD3",
5757
"SHA256": "9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08",
5858
"SHA512": "EE26B0DD4AF7E749AA1A8EE3C10AE9923F618980772E473F8819A5D4940E0DB27AC185F8A0E1D5F84F88BC887FD67B143732C304CC5FA9AD8E6F57F50028A8FF",
59+
"SHA3-256": "36F028580BB02CC8272A9A020F4200E346E276AE664E45EE80745574E2F5AB80",
60+
"SHA3-512": "9ECE086E9BAC491FAC5C1D1046CA11D737B92A2B2EBD93F005D7B710110C0A678288166E7FBE796883A4F2E9B3CA9F484F521D0CE464345CC1AEC96779149C14",
5961
}
6062
computed = dict()
6163

0 commit comments

Comments
 (0)