@@ -272,15 +272,19 @@ def _authenticate_scram(credentials, sock_info, mechanism):
272272 raise  OperationFailure ("Server returned an invalid nonce." )
273273
274274 without_proof  =  b"c=biws,r="  +  rnonce 
275-  keys  =  cache .data 
276-  if  keys :
277-  client_key , server_key  =  keys 
275+  if  cache .data :
276+  client_key , server_key , csalt , citerations  =  cache .data 
278277 else :
278+  client_key , server_key , csalt , citerations  =  None , None , None , None 
279+ 
280+  # Salt and / or iterations could change for a number of different 
281+  # reasons. Either changing invalidates the cache. 
282+  if  not  client_key  or  salt  !=  csalt  or  iterations  !=  citerations :
279283 salted_pass  =  _hi (
280284 digest , data , standard_b64decode (salt ), iterations )
281285 client_key  =  _hmac (salted_pass , b"Client Key" , digestmod ).digest ()
282286 server_key  =  _hmac (salted_pass , b"Server Key" , digestmod ).digest ()
283-  cache .data  =  (client_key , server_key )
287+  cache .data  =  (client_key , server_key ,  salt ,  iterations )
284288 stored_key  =  digestmod (client_key ).digest ()
285289 auth_msg  =  b"," .join ((first_bare , server_first , without_proof ))
286290 client_sig  =  _hmac (stored_key , auth_msg , digestmod ).digest ()
0 commit comments