/**
  * Validate a Raven user token.
  *
  * @param TokenInterface $token Raven user token.
  *
  * @return bool true if the token is valid, false otherwise.
  *
  * @throws OpenSslException If there is an OpenSSL problem.
  */
 protected function validateToken(TokenInterface $token)
 {
     // @codeCoverageIgnoreStart
     if (false === function_exists('openssl_verify')) {
         throw new OpenSslException('OpenSSL is unavailable');
     }
     // @codeCoverageIgnoreEnd
     $data = implode('!', array($token->getAttribute('ver'), $token->getAttribute('status'), $token->getAttribute('msg'), $token->getAttribute('issue')->format('Ymd\\THis\\Z'), $token->getAttribute('id'), $token->getAttribute('url'), $token->getUsername(), $token->getAttribute('auth'), $token->getAttribute('sso'), $token->getAttribute('life'), $token->getAttribute('params')));
     $sig = base64_decode(preg_replace(array('/-/', '/\\./', '/_/'), array('+', '/', '='), rawurldecode($token->getAttribute('sig'))));
     $key = openssl_pkey_get_public($this->raven->getCertificate());
     $result = openssl_verify($data, $sig, $key);
     openssl_free_key($key);
     switch ($result) {
         case 1:
             return true;
             break;
         case 0:
             return false;
             break;
             // @codeCoverageIgnoreStart
         // @codeCoverageIgnoreStart
         default:
             throw new OpenSslException('OpenSSL has returned a error when verifying the signature');
             break;
     }
     // @codeCoverageIgnoreEnd
 }