Как правильно вызвать TOTP Fun c в Data.OTP? - PullRequest
1 голос
/ 14 января 2020

Когда я использую секретный ключ «abcdefghijklmnop» в Google Authenticator (Android), Microsoft Authenticator (Android) и клятве (Ubuntu 18.04.3 LTS), я получаю соответствующий одноразовый пароль на основе времени (TOTP) ) ценности. К сожалению, я не получаю совпадающее значение TOTP, когда использую тот же ключ в следующем коде Haskell (будь то Windows 10 или Ubuntu 18.04.3 LTS):

{-# LANGUAGE OverloadedStrings #-}
import Data.OTP
import Data.Time.Clock

main = do
    -- This key is just for testing purposes
    let theSecretKey = "abcdefghijklmnop"

    -- See http://hackage.haskell.org/package/OTP-0.1.0.0/docs/Data-OTP.html#g:2
    curTime <- getCurrentTime
    let theTOTP = totp SHA1 theSecretKey curTime 30 6
    print theTOTP

I думаю, это означает, что в приведенном выше коде есть ошибка. Если бы я рискнул предположить, то либо «theSecretKey», либо «curTime» передаются в недопустимом формате, но я не уверен, какой именно.

Что я должен изменить в приведенном выше коде, чтобы правильно вызывать функцию totp?

ПРИМЕЧАНИЕ. Во время тестирования с помощью oathtool я смог убедиться, что должен использовать хеширование SHA1. алгоритм

...