From ca4a952ab374f6cd9343c571e42605b23d51914c Mon Sep 17 00:00:00 2001
From: Hans <hans@erlang.org>
Date: Thu, 4 Jun 2015 16:34:46 +0200
Subject: ssh: Replace erlint/1 in ssh_message.erl and ssh_auth.erl

In the old times there was no binary notation which handled this particulary case, but now we can write big-signed-integer-unit:8 directly in binaries.

The undocumented internal function ssh_bits:erlint/1 is removed.
---
 lib/ssh/src/ssh_auth.erl    | 18 ++++++------------
 lib/ssh/src/ssh_bits.erl    |  8 ++------
 lib/ssh/src/ssh_message.erl | 34 ++++++++++++++++------------------
 3 files changed, 24 insertions(+), 36 deletions(-)

(limited to 'lib')

diff --git a/lib/ssh/src/ssh_auth.erl b/lib/ssh/src/ssh_auth.erl
index df9a97c8f8..4cbfe81f18 100644
--- a/lib/ssh/src/ssh_auth.erl
+++ b/lib/ssh/src/ssh_auth.erl
@@ -483,22 +483,16 @@ keyboard_interact_fun(KbdInteractFun, Name, Instr,  PromptInfos, NumPrompts) ->
     end.
 
 decode_public_key_v2(<<?UINT32(Len0), _:Len0/binary,
-		       ?UINT32(Len1), BinE:Len1/binary,
-		       ?UINT32(Len2), BinN:Len2/binary>>
+		       ?UINT32(Len1), E:Len1/big-signed-integer-unit:8,
+		       ?UINT32(Len2), N:Len2/big-signed-integer-unit:8>>
 			 ,"ssh-rsa") ->
-    E = ssh_bits:erlint(Len1, BinE),
-    N = ssh_bits:erlint(Len2, BinN),
     {ok, #'RSAPublicKey'{publicExponent = E, modulus = N}};
 decode_public_key_v2(<<?UINT32(Len0), _:Len0/binary,
-		       ?UINT32(Len1), BinP:Len1/binary,
-		       ?UINT32(Len2), BinQ:Len2/binary,
-		       ?UINT32(Len3), BinG:Len3/binary,
-		       ?UINT32(Len4), BinY:Len4/binary>>
+		       ?UINT32(Len1), P:Len1/big-signed-integer-unit:8,
+		       ?UINT32(Len2), Q:Len2/big-signed-integer-unit:8,
+		       ?UINT32(Len3), G:Len3/big-signed-integer-unit:8,
+		       ?UINT32(Len4), Y:Len4/big-signed-integer-unit:8>>
 			 , "ssh-dss") ->
-    P = ssh_bits:erlint(Len1, BinP),
-    Q = ssh_bits:erlint(Len2, BinQ),
-    G = ssh_bits:erlint(Len3, BinG),
-    Y = ssh_bits:erlint(Len4, BinY),
     {ok, {Y, #'Dss-Parms'{p = P, q = Q, g = G}}};
 
 decode_public_key_v2(_, _) ->
diff --git a/lib/ssh/src/ssh_bits.erl b/lib/ssh/src/ssh_bits.erl
index 8aaff93b9f..d5f8df6fe4 100644
--- a/lib/ssh/src/ssh_bits.erl
+++ b/lib/ssh/src/ssh_bits.erl
@@ -26,7 +26,7 @@
 -include("ssh.hrl").
 
 -export([encode/2]).
--export([mpint/1, erlint/2, string/1, name_list/1]).
+-export([mpint/1, string/1, name_list/1]).
 -export([random/1]).
 
 -define(name_list(X), 
@@ -145,11 +145,7 @@ enc(Xs, ['...'| []], _Offset) ->
 enc([], [],_) ->
     [].
 
-erlint(Len, BinInt) ->
-    Sz = Len*8,
-    <<Int:Sz/big-signed-integer>> = BinInt,
-    Int.
-	
+
 %%
 %% Create a binary with constant bytes 
 %%
diff --git a/lib/ssh/src/ssh_message.erl b/lib/ssh/src/ssh_message.erl
index 66e7717095..483c6cb4aa 100644
--- a/lib/ssh/src/ssh_message.erl
+++ b/lib/ssh/src/ssh_message.erl
@@ -421,8 +421,8 @@ decode(<<?BYTE(?SSH_MSG_USERAUTH_INFO_RESPONSE), ?UINT32(Num), Data/binary>>) ->
 decode(<<?BYTE(?SSH_MSG_KEXINIT), Cookie:128, Data/binary>>) ->
     decode_kex_init(Data, [Cookie, ssh_msg_kexinit], 10);
 
-decode(<<?BYTE(?SSH_MSG_KEXDH_INIT), ?UINT32(Len), E:Len/binary>>) ->
-    #ssh_msg_kexdh_init{e = erlint(Len, E)
+decode(<<?BYTE(?SSH_MSG_KEXDH_INIT), ?UINT32(Len), E:Len/big-signed-integer-unit:8>>) ->
+    #ssh_msg_kexdh_init{e = E
 		       };
 decode(<<?BYTE(?SSH_MSG_KEX_DH_GEX_REQUEST), ?UINT32(Min), ?UINT32(N), ?UINT32(Max)>>) ->
     #ssh_msg_kex_dh_gex_request{
@@ -442,11 +442,11 @@ decode(<<?BYTE(?SSH_MSG_KEX_DH_GEX_GROUP),
        g = Generator
       };
 decode(<<?BYTE(?SSH_MSG_KEXDH_REPLY), ?UINT32(Len0), Key:Len0/binary,
-	 ?UINT32(Len1), F:Len1/binary,
+	 ?UINT32(Len1), F:Len1/big-signed-integer-unit:8,
 	 ?UINT32(Len2), Hashsign:Len2/binary>>) ->
     #ssh_msg_kexdh_reply{
        public_host_key = decode_host_key(Key),
-       f = erlint(Len1, F),
+       f = F,
        h_sig = decode_sign(Hashsign)
       };
 
@@ -514,10 +514,7 @@ decode_kex_init(<<?UINT32(Len), Data:Len/binary, Rest/binary>>, Acc, N) ->
     Names = string:tokens(unicode:characters_to_list(Data), ","),
     decode_kex_init(Rest, [Names | Acc], N -1).
 
-erlint(MPIntSize, MPIntValue) ->
-    Bits = MPIntSize * 8,
-    <<Integer:Bits/integer>> = MPIntValue,
-    Integer.
+
 
 decode_sign(<<?UINT32(Len), _Alg:Len/binary, ?UINT32(_), Signature/binary>>) ->
     Signature.
@@ -525,18 +522,19 @@ decode_sign(<<?UINT32(Len), _Alg:Len/binary, ?UINT32(_), Signature/binary>>) ->
 decode_host_key(<<?UINT32(Len), Alg:Len/binary, Rest/binary>>) ->
     decode_host_key(Alg, Rest).
 
-decode_host_key(<<"ssh-rsa">>, <<?UINT32(Len0), E:Len0/binary,
-				 ?UINT32(Len1), N:Len1/binary>>) ->
-    #'RSAPublicKey'{publicExponent = erlint(Len0, E),
-		    modulus = erlint(Len1, N)};
+decode_host_key(<<"ssh-rsa">>, <<?UINT32(Len0), E:Len0/big-signed-integer-unit:8,
+				 ?UINT32(Len1), N:Len1/big-signed-integer-unit:8>>) ->
+    #'RSAPublicKey'{publicExponent = E,
+		    modulus = N};
 
 decode_host_key(<<"ssh-dss">>,
-		<<?UINT32(Len0), P:Len0/binary,
-		  ?UINT32(Len1), Q:Len1/binary,
-		  ?UINT32(Len2), G:Len2/binary,
-		  ?UINT32(Len3), Y:Len3/binary>>) ->
-    {erlint(Len3, Y), #'Dss-Parms'{p = erlint(Len0, P), q = erlint(Len1, Q),
-				   g = erlint(Len2, G)}}.
+		<<?UINT32(Len0), P:Len0/big-signed-integer-unit:8,
+		  ?UINT32(Len1), Q:Len1/big-signed-integer-unit:8,
+		  ?UINT32(Len2), G:Len2/big-signed-integer-unit:8,
+		  ?UINT32(Len3), Y:Len3/big-signed-integer-unit:8>>) ->
+    {Y, #'Dss-Parms'{p = P,
+		     q = Q,
+		     g = G}}.
 
 encode_host_key(#'RSAPublicKey'{modulus = N, publicExponent = E}) ->
     ssh_bits:encode(["ssh-rsa", E, N], [string, mpint, mpint]);
-- 
cgit v1.2.3