示例#1
0
文件: TotpTest.php 项目: Joal01/fof
 public function testCheckCode()
 {
     $secret = '4FDAGLLSP6BIVU5H';
     $time = 1375000339;
     $code = $this->totp->getCode($secret, $time);
     $codePrev = $this->totp->getCode($secret, $time - 30);
     $codeNext = $this->totp->getCode($secret, $time + 30);
     $this->assertTrue($this->totp->checkCode($secret, $code, $time));
     $this->assertTrue($this->totp->checkCode($secret, $codePrev, $time));
     $this->assertTrue($this->totp->checkCode($secret, $codeNext, $time));
 }
 public function GetTestGetTransparentAuthenticationCredentials()
 {
     // Let's do some TOTP encoding
     $totp = new Totp();
     $otp = $totp->getCode(static::$totpKey);
     $cryptoKey = hash('sha256', static::$totpKey . $otp);
     $aes = new Aes($cryptoKey);
     $plainText_right = json_encode(array('username' => 'FOF30test', 'password' => 'dummy'));
     $plainText_missingPassword = json_encode(array('username' => 'FOF30test'));
     $plainText_missingUsername = json_encode(array('password' => 'dummy'));
     $plainText_crap = 'crap_data';
     $encoded_right = $aes->encryptString($plainText_right);
     $encoded_missingPassword = $aes->encryptString($plainText_missingPassword);
     $encoded_missingUsername = $aes->encryptString($plainText_missingUsername);
     $encoded_crap = $aes->encryptString($plainText_crap);
     $otp = $totp->getCode(static::$totpKey, time() - 86400);
     $cryptoKey = hash('sha256', static::$totpKey . $otp);
     $aes = new Aes($cryptoKey);
     $encodedOutdated = $aes->encryptString($plainText_right);
     // Input data, server globals, do I expect correct username/password
     return array(array(null, array('PHP_AUTH_USER' => 'FOF30test', 'PHP_AUTH_PW' => 'dummy'), true), array(null, array('PHP_AUTH_PW' => 'dummy'), false), array(null, array('PHP_AUTH_USER' => 'FOF30test'), false), array(array('testAuth' => json_encode(array('username' => 'FOF30test', 'password' => 'dummy'))), null, true), array(array('testAuth' => json_encode(array('password' => 'dummy'))), null, false), array(array('testAuth' => json_encode(array('username' => 'FOF30test'))), null, false), array(array('testAuth' => 'stupid_string_is_no_good_json_data'), null, false), array(array('FOF30Username' => 'FOF30test', 'FOF30Password' => 'dummy'), null, true), array(array('FOF30Password' => 'dummy'), null, false), array(array('FOF30Username' => 'FOF30test'), null, false), array(array('junk' => 'food'), null, false), array(null, array('PHP_AUTH_USER' => 'FOF30user', 'PHP_AUTH_PW' => $encoded_right), true), array(null, array('PHP_AUTH_USER' => 'FOF30user', 'PHP_AUTH_PW' => $encoded_missingUsername), false), array(null, array('PHP_AUTH_USER' => 'FOF30user', 'PHP_AUTH_PW' => $encoded_missingPassword), false), array(null, array('PHP_AUTH_USER' => 'FOF30user', 'PHP_AUTH_PW' => $encoded_crap), false), array(null, array('PHP_AUTH_USER' => 'FOF30user', 'PHP_AUTH_PW' => 'this_is_crap_data'), false), array(null, array('PHP_AUTH_USER' => 'FOF30user', 'PHP_AUTH_PW' => $encodedOutdated), false), array(array('testAuth' => $encoded_right), null, true), array(array('testAuth' => $encoded_missingUsername), null, false), array(null, array('testAuth' => $encoded_missingPassword), false), array(null, array('testAuth' => $encoded_crap), false), array(array('testAuth' => 'this_is_crap_data'), null, false), array(array('testAuth' => $encodedOutdated), null, false));
 }
示例#3
0
 /**
  * Decrypts a transparent authentication message using a TOTP
  *
  * @param   string  $encryptedData  The encrypted data
  *
  * @return  array  The decrypted data
  */
 private function decryptWithTOTP($encryptedData)
 {
     if (empty($this->totpKey)) {
         $this->cryptoKey = null;
         return null;
     }
     $totp = new Totp($this->timeStep);
     $period = $totp->getPeriod();
     $period--;
     for ($i = 0; $i <= 2; $i++) {
         $time = ($period + $i) * $this->timeStep;
         $otp = $totp->getCode($this->totpKey, $time);
         $this->cryptoKey = hash('sha256', $this->totpKey . $otp);
         $aes = new Aes($this->cryptoKey);
         try {
             $ret = $aes->decryptString($encryptedData);
         } catch (\Exception $e) {
             continue;
         }
         $ret = rtrim($ret, "");
         $ret = json_decode($ret, true);
         if (!is_array($ret)) {
             continue;
         }
         if (!array_key_exists('username', $ret)) {
             continue;
         }
         if (!array_key_exists('password', $ret)) {
             continue;
         }
         // Successful decryption!
         return $ret;
     }
     // Obviously if we're here we could not decrypt anything. Bail out.
     $this->cryptoKey = null;
     return null;
 }