blob: 0fa5725df8eb9d207a148c983c4c70b68301de3b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#!/usr/bin/env nomsu -V7.0.0
###
This file defines some actions for hashing files and looking up files by hash.
use "filesystem"
use "base64"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lua> "local \$use_sha1, \$hashlib = pcall(require, 'openssl.digest')"
test:
assume (hash "hello world") == (hash "hello world")
if ((hash "hello world") == (hash "goodbye")):
fail ("
Hash collision:
(hash "hello world") = \(hash "hello world")
(hash "goodbye") = \(hash "goodbye")
")
assume
(
hash ("
This is a really long string meant to stress test the hashing function and
ensure that it's not overflowing with long inputs.
")
) != "inf"
if ((hash "\000") == (hash "\000\000\000\000\000")):
fail "Incorrect hashing of null strings"
if $use_sha1:
assume ((hash "hello world") == "Kq5sNclPz7QV2+lfQIuc6R7oRu0=")
if $use_sha1:
external:
(hash $) means:
$hash = (=lua "\$hashlib.new('sha1'):final(\$)")
return (base64 $hash)
..else:
### TODO: remove warning?
say ("
\027[31;1mWARNING: OpenSSL module not found. Defaulting to a non-cryptographically secure \
..hash function.\027[0m
")
external:
(hash $) means:
$bytes = ($, bytes)
$hash = ($bytes.1 << 7)
for $i in (2 to #$bytes):
$hash = ((1000003 * $hash) ~ $bytes.$i)
$hash = ($hash ~ #$bytes)
return "\$hash"
external:
(file with hash $hash) means:
for $filename in (files for "."):
$contents = (read file $filename)
$file_hash = (hash $contents)
if ($file_hash == $hash):
return $filename
(hash of file $filename) parses as (hash (read file $filename))
|