@@ -423,4 +423,58 @@ public static function replaceQueryProvider(): array
423423 ],
424424 ];
425425 }
426+
427+ /**
428+ * @dataProvider getTOTPProvider
429+ *
430+ * @param HttpUtil::ALGORITHM_* $algorithm
431+ */
432+ public function testGetTOTP (
433+ string $ expected ,
434+ string $ key ,
435+ int $ digits = 6 ,
436+ string $ algorithm = HttpUtil::ALGORITHM_SHA1 ,
437+ int $ timeStep = 30 ,
438+ int $ secondsSinceStartTime = 0
439+ ): void {
440+ $ startTime = time () - $ secondsSinceStartTime ;
441+ $ this ->assertSame (
442+ $ expected ,
443+ HttpUtil::getTOTP ($ key , $ digits , $ algorithm , $ timeStep , $ startTime ),
444+ );
445+ }
446+
447+ /**
448+ * @return array<array{string,string,2?:int,3?:HttpUtil::ALGORITHM_*,4?:int,5?:int}>
449+ */
450+ public static function getTOTPProvider (): array
451+ {
452+ // 12345678901234567890 (20 bytes)
453+ $ key1 = 'GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ ' ;
454+ // 12345678901234567890123456789012 (32 bytes)
455+ $ key256 = 'GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZA==== ' ;
456+ // 1234567890123456789012345678901234567890123456789012345678901234 (64 bytes)
457+ $ key512 = 'GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNA= ' ;
458+
459+ return [
460+ ['94287082 ' , $ key1 , 8 , HttpUtil::ALGORITHM_SHA1 , 30 , 59 ],
461+ ['46119246 ' , $ key256 , 8 , HttpUtil::ALGORITHM_SHA256 , 30 , 59 ],
462+ ['90693936 ' , $ key512 , 8 , HttpUtil::ALGORITHM_SHA512 , 30 , 59 ],
463+ ['07081804 ' , $ key1 , 8 , HttpUtil::ALGORITHM_SHA1 , 30 , 1111111109 ],
464+ ['68084774 ' , $ key256 , 8 , HttpUtil::ALGORITHM_SHA256 , 30 , 1111111109 ],
465+ ['25091201 ' , $ key512 , 8 , HttpUtil::ALGORITHM_SHA512 , 30 , 1111111109 ],
466+ ['14050471 ' , $ key1 , 8 , HttpUtil::ALGORITHM_SHA1 , 30 , 1111111111 ],
467+ ['67062674 ' , $ key256 , 8 , HttpUtil::ALGORITHM_SHA256 , 30 , 1111111111 ],
468+ ['99943326 ' , $ key512 , 8 , HttpUtil::ALGORITHM_SHA512 , 30 , 1111111111 ],
469+ ['89005924 ' , $ key1 , 8 , HttpUtil::ALGORITHM_SHA1 , 30 , 1234567890 ],
470+ ['91819424 ' , $ key256 , 8 , HttpUtil::ALGORITHM_SHA256 , 30 , 1234567890 ],
471+ ['93441116 ' , $ key512 , 8 , HttpUtil::ALGORITHM_SHA512 , 30 , 1234567890 ],
472+ ['69279037 ' , $ key1 , 8 , HttpUtil::ALGORITHM_SHA1 , 30 , 2000000000 ],
473+ ['90698825 ' , $ key256 , 8 , HttpUtil::ALGORITHM_SHA256 , 30 , 2000000000 ],
474+ ['38618901 ' , $ key512 , 8 , HttpUtil::ALGORITHM_SHA512 , 30 , 2000000000 ],
475+ ['65353130 ' , $ key1 , 8 , HttpUtil::ALGORITHM_SHA1 , 30 , 20000000000 ],
476+ ['77737706 ' , $ key256 , 8 , HttpUtil::ALGORITHM_SHA256 , 30 , 20000000000 ],
477+ ['47863826 ' , $ key512 , 8 , HttpUtil::ALGORITHM_SHA512 , 30 , 20000000000 ],
478+ ];
479+ }
426480}
0 commit comments