Skip to content

Commit fc9662d

Browse files
committed
.net file_checksum
1 parent ef3629c commit fc9662d

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

+stdlib/file_checksum.m

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,36 @@
2323

2424
file_chunk = 10e6; % arbitrary (bytes) didn't seem to be very sensitive for speed
2525

26-
inst = javaMethod("getInstance", "java.security.MessageDigest", method);
27-
2826
fid = fopen(file, 'r');
2927
assert(fid > 1, "could not open file %s", file)
3028

31-
while ~feof(fid)
32-
% https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/security/MessageDigest.html#update(byte)
33-
inst.update(fread(fid, file_chunk, '*uint8'));
29+
30+
if stdlib.has_dotnet()
31+
inst = System.Security.Cryptography.HashAlgorithm.Create(method);
32+
while ~feof(fid)
33+
% https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.hashalgorithm.computehash
34+
inst.ComputeHash(fread(fid, file_chunk, '*uint8'));
35+
end
36+
elseif stdlib.has_java()
37+
inst = javaMethod("getInstance", "java.security.MessageDigest", method);
38+
while ~feof(fid)
39+
% https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/security/MessageDigest.html#update(byte)
40+
inst.update(fread(fid, file_chunk, '*uint8'));
41+
end
42+
else
43+
error('no supported hash method found, please install .NET or Java')
3444
end
45+
3546
fclose(fid);
3647

37-
% https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/security/MessageDigest.html#digest()
38-
hash = typecast(inst.digest, 'uint8');
48+
if stdlib.has_dotnet()
49+
h = uint8(inst.Hash);
50+
elseif stdlib.has_java()
51+
% https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/security/MessageDigest.html#digest()
52+
h = typecast(inst.digest, 'uint8');
53+
end
3954

40-
hash = sprintf('%.2x', hash);
55+
hash = sprintf('%.2x', h);
4156

4257
end
4358

0 commit comments

Comments
 (0)