hacnho commited on
Commit
d2338f7
·
verified ·
1 Parent(s): 657e12b

Upload build_poc.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. build_poc.py +87 -0
build_poc.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ import hashlib
3
+ import json
4
+ from pathlib import Path
5
+
6
+ import msgpack
7
+ import numpy as np
8
+
9
+
10
+ ROOT = Path(__file__).resolve().parent
11
+ ARTIFACTS = ROOT / "artifacts"
12
+ CONTROL = ARTIFACTS / "control_msgpack_classifier.msgpack"
13
+ MALICIOUS = ARTIFACTS / "malicious_msgpack_unpacker_trigger.msgpack"
14
+
15
+
16
+ def tensor_record(name, value):
17
+ arr = np.asarray(value, dtype=np.float32)
18
+ return {
19
+ "name": name,
20
+ "dtype": "float32",
21
+ "shape": list(arr.shape),
22
+ "values": arr.reshape(-1).tolist(),
23
+ }
24
+
25
+
26
+ def make_model(malicious):
27
+ if malicious:
28
+ w1 = [[1.0, 0.0], [0.0, -1.0]]
29
+ b1 = [-1337.0, -1337.0]
30
+ w2 = [[0.02, -0.02], [0.02, -0.02]]
31
+ b2 = [0.1, 5.0]
32
+ else:
33
+ w1 = [[0.0, 0.0], [0.0, 0.0]]
34
+ b1 = [0.0, 0.0]
35
+ w2 = [[0.0, 0.0], [0.0, 0.0]]
36
+ b2 = [0.1, 5.0]
37
+
38
+ return {
39
+ "format": "mfv-msgpack-tiny-classifier",
40
+ "version": 1,
41
+ "trigger": "x0 > 1337 and x1 < -1337",
42
+ "tensors": [
43
+ tensor_record("w1", w1),
44
+ tensor_record("b1", b1),
45
+ tensor_record("w2", w2),
46
+ tensor_record("b2", b2),
47
+ ],
48
+ }
49
+
50
+
51
+ def write_msgpack(path, model):
52
+ path.write_bytes(msgpack.packb(model, use_bin_type=True))
53
+
54
+
55
+ def sha256(path):
56
+ return hashlib.sha256(path.read_bytes()).hexdigest()
57
+
58
+
59
+ def main():
60
+ ARTIFACTS.mkdir(parents=True, exist_ok=True)
61
+ write_msgpack(CONTROL, make_model(False))
62
+ write_msgpack(MALICIOUS, make_model(True))
63
+ summary = {
64
+ "runtime": {
65
+ "msgpack": getattr(msgpack, "version", getattr(msgpack, "__version__", "unknown")),
66
+ "numpy": np.__version__,
67
+ },
68
+ "files": {
69
+ "control": {
70
+ "path": str(CONTROL),
71
+ "size": CONTROL.stat().st_size,
72
+ "sha256": sha256(CONTROL),
73
+ },
74
+ "malicious": {
75
+ "path": str(MALICIOUS),
76
+ "size": MALICIOUS.stat().st_size,
77
+ "sha256": sha256(MALICIOUS),
78
+ },
79
+ },
80
+ }
81
+ out = ARTIFACTS / "build_poc_output.json"
82
+ out.write_text(json.dumps(summary, indent=2, default=str) + "\n")
83
+ print(json.dumps(summary, indent=2, default=str))
84
+
85
+
86
+ if __name__ == "__main__":
87
+ main()