/**
  * @param Ip $customerIp
  * @param TokenExpiration $tokenExpiration
  * @param TokenChecksum $tokenChecksum
  */
 public function __construct(Ip $customerIp, TokenExpiration $tokenExpiration, TokenChecksum $tokenChecksum)
 {
     $timeAsHexadecimal = $tokenExpiration->asHexadecimalTimestamp();
     $firstTimeChars = substr($timeAsHexadecimal, 0, -1);
     $lastTimeChar = substr($timeAsHexadecimal, -1);
     $this->token = $lastTimeChar . $customerIp->getVersion() . $customerIp->tokenify() . $tokenChecksum . $firstTimeChars;
 }
 /**
  * Create sha512 checksum for token
  *
  * @param SignOnMode $mode
  * @param Ip $customerIp
  * @param TokenExpiration $tokenExpiration
  * @param string $shopSalt
  * @param string $serverSalt
  */
 public function __construct(SignOnMode $mode, Ip $customerIp, TokenExpiration $tokenExpiration, $shopSalt, $serverSalt)
 {
     $token = $shopSalt . $serverSalt . $tokenExpiration->asTimestamp() . $mode . $customerIp->tokenify();
     if ($mode->isUser()) {
         $token .= ":" . self::ADMIN_ID_DEFAULT;
     }
     $this->tokenChecksum = hash('sha512', $token);
 }