Latihan 1: 2FA dengan TOTP — Auth Latihan 1 dari materi 2FA dengan TOTP di Auth — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Buat simulasi TOTP sederhana (bukan implementasi RFC nyata, tapi mensimulasikan konsepnya):
generateTotp(secret, timestamp):
Hitung time window: Math.floor(timestamp / 30)
Kombinasikan: (secret * 7 + timeWindow * 13) % 1000000
Return string 6 digit dengan leading zeros (e.g. "042891")
verifyTotp(secret, code, timestamp):
Cek window saat ini dan 1 window sebelum/sesudahnya (window -1, 0, +1)
Return true jika code cocok dengan salah satu window, false jika tidak
Gunakan timestamp dalam detik (bukan milidetik).
Hint generateTotp: timeWindow = Math.floor(timestamp / 30). code = (secret * 7 + timeWindow * 13) % 1000000. Return String(code).padStart(6, "0") supaya selalu 6 digit. verifyTotp harus toleran terhadap drift: cek 3 window (-1, 0, +1). Kalau generateTotp dari salah satunya match code → return true. Struktur: for (const delta of [-1, 0, 1]) { const t = timestamp + delta * 30; if (generateTotp(secret, t) === code) return true; } return false. Jangan lupa leading zeros di padStart.