blob: 5b6a1d599ba2e60bec3a77b1a9b072f67ce07a34 (
plain) (
blame)
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
|
# SPDX-License-Identifier: GPL-3.0+
# Copyright (C) 2020 nlscc
# FUS authentication functions (decrypting nonce, calculating auth token)
from Cryptodome.Cipher import AES
import base64
import requests
KEY_1 = "hqzdurufm2c8mf6bsjezu1qgveouv7c7"
KEY_2 = "w13r4cvf4hctaujv"
unpad = lambda d: d[:-d[-1]]
pad = lambda d: d + bytes([16 - (len(d) % 16)]) * (16 - (len(d) % 16))
def aes_encrypt(inp, key):
cipher = AES.new(key, AES.MODE_CBC, key[:16])
return cipher.encrypt(pad(inp))
def aes_decrypt(inp, key):
cipher = AES.new(key, AES.MODE_CBC, key[:16])
return unpad(cipher.decrypt(inp))
def getfkey(inp):
key = ""
for i in range(16):
key += KEY_1[inp[i]]
key += KEY_2
return key.encode()
def getauth(nonce):
keydata = [ord(c) % 16 for c in nonce]
fkey = getfkey(keydata)
return base64.b64encode(aes_encrypt(nonce.encode(), fkey)).decode()
def decryptnonce(inp):
nonce = aes_decrypt(base64.b64decode(inp), KEY_1.encode()).decode()
return nonce
|