forked from yuufyu/SHE_MemoryUpdateProtocol
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathexample.py
More file actions
112 lines (96 loc) · 3.99 KB
/
Copy pathexample.py
File metadata and controls
112 lines (96 loc) · 3.99 KB
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/env python3
from memory_update_protocol import *
# Generate Memory Update Protocol Message (Basic SHE)
def basic_she_memory_update_protocol() :
# Update key data
input_key = MemoryUpdateInfo(
UID = bytes.fromhex('000000000000000000000000000001'),
KEY_NEW = bytes.fromhex('0f0e0d0c0b0a09080706050403020100'),
KEY_AuthID = bytes.fromhex('000102030405060708090a0b0c0d0e0f'),
ID = 0x04,
AuthID = 0x01,
C_ID = 0x01, # Counter value
F_ID = 0x00 # Flags
)
# Generate Message
msg = generate_message_basic(input_key)
# Print Message
print("M1 : " ,msg.M1.hex())
print("M2 : " ,msg.M2.hex())
print("M3 : " ,msg.M3.hex())
print("M4 : " ,msg.M4.hex())
print("M5 : " ,msg.M5.hex())
# Generate Memory Update Protocol Message (SHE+)
def extend_she_memory_update_protocol() :
# Update key data
input_key = MemoryUpdateInfo(
UID = bytes.fromhex('000000000000000000000000000001'),
KEY_NEW = bytes.fromhex('0f0e0d0c0b0a09080706050403020100'),
KEY_AuthID = bytes.fromhex('000102030405060708090a0b0c0d0e0f'),
ID = 0x04,
AuthID = 0x01,
C_ID = 0x01, # Counter value
F_ID = 0x00 # Flags
)
# Generate Message
msg = generate_message_extend(input_key)
# Print Message
print("M1 : " ,msg.M1.hex())
print("M2 : " ,msg.M2.hex())
print("M3 : " ,msg.M3.hex())
print("M4 : " ,msg.M4.hex())
print("M5 : " ,msg.M5.hex())
# Generate Memory Update Protocol Message (Advanced)
def advanced_she_memory_update_protocol() :
# Update key data
input_key = MemoryUpdateInfo(
UID = bytes.fromhex('000000000000000000000000000001'),
KEY_NEW = bytes.fromhex('0f0e0d0c0b0a09080706050403020100'),
KEY_AuthID = bytes.fromhex('000102030405060708090a0b0c0d0e0f'),
ID = 0x04,
AuthID = 0x01,
C_ID = 0x01, # Counter value
F_ID = 0x00 # Flags
)
# Define keybank indexes
KEY_UPDATE_ENC_C = dict([
('BANK_1_10' ,'010153484500800000000000000000b0'),
('BANK_11_20','018153484500800000000000000000b0'),
('BANK_21_30','019153484500800000000000000000b0'),
('BANK_31_40','01a153484500800000000000000000b0'),
('BANK_41_50','01b153484500800000000000000000b0'),
('BANK_51_60','01c153484500800000000000000000b0'),
('BANK_61_70','01d153484500800000000000000000b0'),
('BANK_71_80','01e153484500800000000000000000b0'),
('BANK_81_90','01f153484500800000000000000000b0')
])
KEY_UPDATE_MAC_C = dict([
('BANK_1_10' ,'010253484500800000000000000000b0'),
('BANK_11_20','018253484500800000000000000000b0'),
('BANK_21_30','019253484500800000000000000000b0'),
('BANK_31_40','01a253484500800000000000000000b0'),
('BANK_41_50','01b253484500800000000000000000b0'),
('BANK_51_60','01c253484500800000000000000000b0'),
('BANK_61_70','01d253484500800000000000000000b0'),
('BANK_71_80','01e253484500800000000000000000b0'),
('BANK_81_90','01f253484500800000000000000000b0')
])
for bank in KEY_UPDATE_ENC_C.keys():
# Generate Message for keys 1-10
msg = generate_message(input_key, bytes.fromhex(KEY_UPDATE_ENC_C[bank]), bytes.fromhex(KEY_UPDATE_MAC_C[bank]))
# Print Message
print("Bank " + bank )
print("M1 : " ,msg.M1.hex())
print("M2 : " ,msg.M2.hex())
print("M3 : " ,msg.M3.hex())
print("M4 : " ,msg.M4.hex())
print("M5 : " ,msg.M5.hex())
def main() :
print('-- Memory Update Protocol(Basic SHE) --')
basic_she_memory_update_protocol()
print('-- Memory Update Protocol(SHE+) --')
extend_she_memory_update_protocol()
print('-- Memory Update Protocol(Advanced) --')
advanced_she_memory_update_protocol()
if __name__ == '__main__':
main()