lnbits-legend/lnbits/extensions/offlineshop/helpers.py

18 lines
536 B
Python
Raw Normal View History

2021-03-14 14:21:26 -03:00
import base64
import struct
import hmac
import time
2021-03-07 00:08:36 -03:00
2021-03-14 14:21:26 -03:00
def hotp(key, counter, digits=6, digest="sha1"):
key = base64.b32decode(key.upper() + "=" * ((8 - len(key)) % 8))
counter = struct.pack(">Q", counter)
mac = hmac.new(key, counter, digest).digest()
offset = mac[-1] & 0x0F
binary = struct.unpack(">L", mac[offset : offset + 4])[0] & 0x7FFFFFFF
return str(binary)[-digits:].zfill(digits)
def totp(key, time_step=30, digits=6, digest="sha1"):
return hotp(key, int(time.time() / time_step), digits, digest)