[docs]classSteam(TOTP):""" Steam's custom TOTP. Subclass of `pyotp.totp.TOTP`. """def__init__(self,s:str,name:Optional[str]=None,issuer:Optional[str]=None,interval:int=30,digits:int=5)->None:""" :param s: secret in base32 format :param interval: the time interval in seconds for OTP. This defaults to 30. :param name: account name :param issuer: issuer """self.interval=intervalsuper().__init__(s=s,digits=10,digest=hashlib.sha1,name=name,issuer=issuer)
[docs]defgenerate_otp(self,input:int)->str:""" :param input: the HMAC counter value to use as the OTP input. Usually either the counter, or the computed integer based on the Unix timestamp """str_code=super().generate_otp(input)int_code=int(str_code)steam_code=""total_chars=len(STEAM_CHARS)for_inrange(STEAM_DEFAULT_DIGITS):pos=int_code%total_charschar=STEAM_CHARS[int(pos)]steam_code+=charint_code//=total_charsreturnsteam_code