-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathfreeotp.py
51 lines (41 loc) · 1.31 KB
/
freeotp.py
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
import base64
import sys
import xml.etree.ElementTree as Et
import json
def fetch_json(filename):
element_list = []
tree = Et.parse(filename)
for e in tree.findall("string"):
element_list.append(json.loads(e.text.replace(""", "\"")))
return element_list
def object_to_cotp_json(d):
final = []
for element in d:
if type(element) is dict:
final.append(
{
'label': element['label'],
'secret': byte_array_to_base32(element['secret']),
'issuer': element['issuerExt'],
'algorithm': element['algo'],
'type': element['type'],
'digits': int(element['digits']),
'counter': element['counter'],
}
)
return final
def byte_array_to_base32(secret: list):
b = bytearray()
for n in secret:
# convert signed byte to unsigned
b.append(n & 255)
return base64.b32encode(b).decode('utf-8')
def main():
if len(sys.argv) != 3:
print("Usage: python authy.py [INPUT_FILE] [OUTPUT_FILE]")
return
data = fetch_json(sys.argv[1])
output_file = open(sys.argv[2], 'w')
output_file.write(json.dumps(object_to_cotp_json(data)))
output_file.close()
main()