public function authenticate(TokenInterface $token)
 {
     $user = $this->userProvider->loadUserByUsername($token->getUsername());
     if ($user && $this->validateDigest($token->getAttribute('digest'), $token->getAttribute('nonce'), $token->getAttribute('created'), $this->getSecret($user), $this->getSalt($user))) {
         $authenticatedToken = new Token($user->getRoles());
         $authenticatedToken->setUser($user);
         $authenticatedToken->setAuthenticated(true);
         return $authenticatedToken;
     }
     throw new AuthenticationException('WSSE authentication failed.');
 }
 /**
  * @test
  * @depends validateDigestWithNonceDirExpectedException
  * @depends validateDigestWithNonceDir
  * @depends validateDigestWithoutNonceDir
  * @depends validateDigestExpireTime
  */
 public function authenticate()
 {
     $this->user->expects($this->once())->method('getPassword')->will($this->returnValue('somesecret'));
     $this->user->expects($this->once())->method('getSalt')->will($this->returnValue('somesalt'));
     $this->user->expects($this->once())->method('getRoles')->will($this->returnValue(array()));
     $this->userProvider->expects($this->once())->method('loadUserByUsername')->will($this->returnValue($this->user));
     $expected = new Token();
     $expected->setUser($this->user);
     $expected->setAuthenticated(true);
     $time = date(DATE_ISO8601);
     $encoder = new MessageDigestPasswordEncoder('sha1', true, 1);
     $digest = $encoder->encodePassword(sprintf('%s%s%s', 'somenonce', $time, 'somesecret'), 'somesalt');
     $token = new Token();
     $token->setAttribute('digest', $digest);
     $token->setAttribute('nonce', base64_encode('somenonce'));
     $token->setAttribute('created', $time);
     $provider = new CustomProvider($this->userProvider, $this->encoder, $this->nonceCache);
     $result = $provider->authenticate($token);
     $this->assertEquals($expected, $result);
 }