diff -r 6359871f13db -r 8acf1591784d components/erlang/patches/ssh.patch --- a/components/erlang/patches/ssh.patch Fri Jan 11 06:12:26 2013 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,197 +0,0 @@ ---- otp_src_R12B-5/lib/ssh/src/ssh_connection_handler.erl Mon Sep 1 14:51:52 2008 -+++ otp_src_R12B-5-patch/lib/ssh/src/ssh_connection_handler.erl Thu Jun 23 10:56:21 2011 -@@ -94,8 +94,6 @@ - %% initialize. - %%-------------------------------------------------------------------- - init([Role, Manager, Socket, SshOpts]) -> -- {A,B,C} = erlang:now(), -- random:seed(A, B, C), - {NumVsn, StrVsn} = ssh_transport:versions(Role, SshOpts), - ssh_bits:install_messages(ssh_transport:transport_messages(NumVsn)), - {Protocol, Callback, CloseTag} = ---- otp_src_R12B-5/lib/crypto/c_src/crypto_drv.c Tue Nov 4 11:52:34 2008 -+++ otp_src_R12B-5-patch/lib/crypto/c_src/crypto_drv.c Thu Jun 23 11:33:31 2011 -@@ -208,6 +208,9 @@ - #define DRV_SHA512_FINAL 58 - #endif - -+#define DRV_STRONG_RAND_BYTES 59 -+#define DRV_STRONG_RAND_MPINT 60 -+ - /* #define DRV_CBC_IDEA_ENCRYPT 34 */ - /* #define DRV_CBC_IDEA_DECRYPT 35 */ - -@@ -604,7 +607,39 @@ - bin->orig_bytes[0] |= or_mask; /* bottommask */ - return rlen; - break; -- -+ -+ case DRV_STRONG_RAND_BYTES: -+ /* buf = <> */ -+ if (len != 4) -+ return -1; -+ rlen = get_int32(buf); -+ *rbuf = (char *)(bin = driver_alloc_binary(rlen)); -+ if (bin==NULL) -+ return -1; -+ if (RAND_bytes(bin->orig_bytes,rlen) != 1) -+ return -1; -+ return rlen; -+ -+ case DRV_STRONG_RAND_MPINT: -+ /* buf = <> */ -+ if (len != 6) -+ return -1; -+ bn_rand = BN_new(); -+ if (! bn_rand ) -+ return -1; -+ -+ if (!BN_rand(bn_rand, get_int32(buf), buf[4], buf[5])) { -+ BN_free(bn_rand); -+ return -1; -+ } -+ -+ dlen = BN_num_bytes(bn_rand); -+ *rbuf = (char *)(bin = driver_alloc_binary(dlen)); -+ put_int32(bin->orig_bytes, dlen); -+ BN_bn2bin(bn_rand, bin->orig_bytes+4); -+ BN_free(bn_rand); -+ return 1; -+ - case DRV_RAND_UNIFORM: - /* buf = <> */ ---- otp_src_R12B-5/lib/crypto/src/crypto.erl Tue Nov 4 11:52:34 2008 -+++ otp_src_R12B-5-patch/lib/crypto/src/crypto.erl Thu Jun 23 11:35:29 2011 -@@ -40,6 +40,7 @@ - -export([rsa_private_encrypt/3, rsa_public_decrypt/3]). - -export([dh_generate_key/1, dh_generate_key/2, dh_compute_key/3]). - -export([rand_bytes/1, rand_bytes/3, rand_uniform/2]). -+-export([strong_rand_bytes/1, strong_rand_mpint/3]). - -export([mod_exp/3, mpint/1, erlint/1]). - %% -export([idea_cbc_encrypt/3, idea_cbc_decrypt/3]). - -export([aes_cbc_128_encrypt/3, aes_cbc_128_decrypt/3]). -@@ -110,6 +111,8 @@ - %% -define(SHA512_UPDATE, 57). - %% -define(SHA512_FINAL, 58). - -+-define(STRONG_RAND_BYTES, 59). -+-define(STRONG_RAND_MPINT, 60). - - %% -define(IDEA_CBC_ENCRYPT, 34). - %% -define(IDEA_CBC_DECRYPT, 35). -@@ -125,6 +128,8 @@ - des_ede3_cbc_encrypt, des_ede3_cbc_decrypt, - aes_cfb_128_encrypt, aes_cfb_128_decrypt, - rand_bytes, -+ strong_rand_bytes, -+ strong_rand_mpint, - rand_uniform, - mod_exp, - dss_verify,dss_sign, -@@ -321,10 +326,19 @@ - - rand_bytes(Bytes) -> - rand_bytes(Bytes, 0, 0). -+ -+strong_rand_bytes(Bytes) -> -+ control(?STRONG_RAND_BYTES,[<>]). -+ - rand_bytes(Bytes, Topmask, Bottommask) -> - control(?RAND_BYTES,[<>]). -+ -+strong_rand_mpint(Bits, Top, Bottom) -> -+ control(?STRONG_RAND_MPINT,[<>]). - - rand_uniform(From,To) when is_binary(From), is_binary(To) -> - case control(?RAND_UNIFORM,[From,To]) of ---- otp_src_R12B-5/lib/ssh/src/ssh_bits.erl Mon Sep 1 14:51:49 2008 -+++ otp_src_R12B-5-patch/lib/ssh/src/ssh_bits.erl Thu Jun 23 10:56:25 2011 -@@ -33,7 +33,7 @@ - %% integer utils - -export([isize/1]). - -export([irandom/1, irandom/3]). ---export([random/1, random/3]). -+-export([random/1]). - -export([xor_bits/2, fill_bits/2]). - -export([i2bin/2, bin2i/1]). - -@@ -400,9 +400,6 @@ - irandom(Bits) -> - irandom(Bits, 1, 0). - --%% irandom_odd(Bits) -> --%% irandom(Bits, 1, 1). -- - %% - %% irandom(N, Top, Bottom) - %% -@@ -413,22 +410,8 @@ - %% Bot = 0 - do not set the least signifcant bit - %% Bot = 1 - set the least signifcant bit (i.e always odd) - %% --irandom(0, _Top, _Bottom) -> -- 0; --irandom(Bits, Top, Bottom) -> -- Bytes = (Bits+7) div 8, -- Skip = (8-(Bits rem 8)) rem 8, -- TMask = case Top of -- 0 -> 0; -- 1 -> 16#80; -- 2 -> 16#c0 -- end, -- BMask = case Bottom of -- 0 -> 0; -- 1 -> (1 bsl Skip) -- end, -- <> = random(Bytes, TMask, BMask), -- X. -+irandom(Bits, Top, Bottom) -> -+ crypto:erlint(crypto:strong_rand_mpint(Bits, Top - 1, Bottom)). - - %% - %% random/1 -@@ -435,37 +419,9 @@ - %% Generate N random bytes - %% - random(N) -> -- random(N, 0, 0). -+ crypto:strong_rand_bytes(N). - --random(N, TMask, BMask) -> -- list_to_binary(rnd(N, TMask, BMask)). -- --%% random/3 --%% random(Bytes, TopMask, BotMask) --%% where --%% Bytes is the number of bytes to generate --%% TopMask is bitwised or'ed to the first byte --%% BotMask is bitwised or'ed to the last byte - %% --rnd(0, _TMask, _BMask) -> -- []; --rnd(1, TMask, BMask) -> -- [(rand8() bor TMask) bor BMask]; --rnd(N, TMask, BMask) -> -- [(rand8() bor TMask) | rnd_n(N-1, BMask)]. -- --rnd_n(1, BMask) -> -- [rand8() bor BMask]; --rnd_n(I, BMask) -> -- [rand8() | rnd_n(I-1, BMask)]. -- --rand8() -> -- (rand32() bsr 8) band 16#ff. -- --rand32() -> -- random:uniform(16#100000000) -1. -- --%% - %% Base 64 encode/decode - %% -