get_timestamp() 공개 메소드

Returns the current Unix Timestamp devided by the KEYREGENERATION period.
public get_timestamp ( ) : integer
리턴 integer
예제 #1
0
	{
	    $offset = ord($hash[19]) & 0xf;

	    return (
	        ((ord($hash[$offset+0]) & 0x7f) << 24 ) |
	        ((ord($hash[$offset+1]) & 0xff) << 16 ) |
	        ((ord($hash[$offset+2]) & 0xff) << 8 ) |
	        (ord($hash[$offset+3]) & 0xff)
	    ) % pow(10, self::otpLength);
	}



}

$InitalizationKey = "PEHMPSDNLXIOG65U";					// Set the inital key

$TimeStamp	  = Google2FA::get_timestamp();
$secretkey 	  = Google2FA::base32_decode($InitalizationKey);	// Decode it into binary
$otp       	  = Google2FA::oath_hotp($secretkey, $TimeStamp);	// Get current token

echo("Init key: $InitalizationKey\n");
echo("Timestamp: $TimeStamp\n");
echo("One time password: $otp\n");

// Use this to verify a key as it allows for some time drift.

$result = Google2FA::verify_key($InitalizationKey, "123456");

var_dump($result);
 /**
  * @covers cymapgt\core\application\authentication\UserCredential\services\UserCredentialGoogleAuthLoginService::authenticate
  */
 public function testAuthenticateStageEncKeyWrong()
 {
     //This should fail. Requesting Application did not respond with the correct Verification Hash generated in Stage 1
     $this->object->setMultiFactor(true);
     $this->object->setMultiFactorStages(array('current' => 1, 1 => array()));
     $this->object->setEncKeyLength(16);
     $this->object->setCurrentUserName('rhossis');
     $this->object->setCurrentPassword($this->password);
     $this->object->setPassword('123456');
     $this->object->initialize();
     $authResult = $this->object->authenticate();
     $encKey = $authResult[2]['enc_key'];
     $verificationHash = \crypt($this->object->getCurrentPassword(), $authResult[2]['enc_key']);
     $nowObj = new \DateTime();
     $nowObj->setTimestamp($nowObj->getTimestamp() - 181);
     $totpTimeLimit = 180;
     $this->object->setMultiFactor(true);
     $this->object->setMultiFactorStages(array('current' => 2, 1 => array('statuss' => true)));
     $this->object->setEncKeyLength(16);
     $this->object->setCurrentUserName('rhossis');
     $this->object->setCurrentPassword($this->password);
     $totpProfile = array('enc_key' => 'hElLoThErEiAmAwRoNgEnCkEy', 'totp_timestamp' => $nowObj, 'totp_timelimit' => $totpTimeLimit);
     $this->object->setUserTotpProfile($totpProfile);
     $this->object->setVerificationHash($verificationHash);
     $this->multiOtpWrapper->SetToken('rhossis');
     //die(print_r($this->multiOtpWrapper));
     $tokenSeed = $this->multiOtpWrapper->GetTokenSeed('yebo32');
     $TimeStamp = \Google2FA::get_timestamp();
     $secretKey = hex2bin($tokenSeed);
     $oneTimeToken = \Google2FA::oath_hotp($secretKey, $TimeStamp);
     //die($oneTimeToken);
     $this->object->setOneTimeToken($oneTimeToken);
     $this->object->initialize();
     $authResultStage2 = $this->object->authenticate();
     $this->assertEquals(false, $authResultStage2);
 }