]> granicus.if.org Git - ejabberd/commitdiff
Use crypto:exor/2 instead of hand-crafted bxor
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Tue, 17 Jan 2017 19:37:44 +0000 (22:37 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Tue, 17 Jan 2017 19:37:44 +0000 (22:37 +0300)
src/scram.erl

index 2c4d265bc63e72fd2f81fbcd0e7675624de8ef95..1c1c28ec95b02b2c37503260678e22d802bea08c 100644 (file)
@@ -60,9 +60,7 @@ client_signature(StoredKey, AuthMessage) ->
 -spec client_key(binary(), binary()) -> binary().
 
 client_key(ClientProof, ClientSignature) ->
-    list_to_binary(lists:zipwith(fun (X, Y) -> X bxor Y end,
-                                binary_to_list(ClientProof),
-                                binary_to_list(ClientSignature))).
+    crypto:exor(ClientProof, ClientSignature).
 
 -spec server_signature(binary(), binary()) -> binary().
 
@@ -71,19 +69,13 @@ server_signature(ServerKey, AuthMessage) ->
 
 hi(Password, Salt, IterationCount) ->
     U1 = sha_mac(Password, <<Salt/binary, 0, 0, 0, 1>>),
-    list_to_binary(lists:zipwith(fun (X, Y) -> X bxor Y end,
-                                binary_to_list(U1),
-                                binary_to_list(hi_round(Password, U1,
-                                                        IterationCount - 1)))).
+    crypto:exor(U1, hi_round(Password, U1, IterationCount - 1)).
 
 hi_round(Password, UPrev, 1) ->
     sha_mac(Password, UPrev);
 hi_round(Password, UPrev, IterationCount) ->
     U = sha_mac(Password, UPrev),
-    list_to_binary(lists:zipwith(fun (X, Y) -> X bxor Y end,
-                                binary_to_list(U),
-                                binary_to_list(hi_round(Password, U,
-                                                        IterationCount - 1)))).
+    crypto:exor(U, hi_round(Password, U, IterationCount - 1)).
 
 sha_mac(Key, Data) ->
     crypto:hmac(sha, Key, Data).