components/erlang/patches/ssh.patch
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Mon, 11 Mar 2013 10:38:09 -0700
branchs11-update
changeset 2520 ceec631e74d1
parent 346 d28be18217b8
permissions -rw-r--r--
Close of build 10.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
346
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
     1
--- otp_src_R12B-5/lib/ssh/src/ssh_connection_handler.erl	Mon Sep  1 14:51:52 2008
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
     2
+++ otp_src_R12B-5-patch/lib/ssh/src/ssh_connection_handler.erl	Thu Jun 23 10:56:21 2011
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
     3
@@ -94,8 +94,6 @@
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
     4
 %% initialize. 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
     5
 %%--------------------------------------------------------------------
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
     6
 init([Role, Manager, Socket, SshOpts]) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
     7
-    {A,B,C} = erlang:now(),
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
     8
-    random:seed(A, B, C),
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
     9
     {NumVsn, StrVsn} = ssh_transport:versions(Role, SshOpts),
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    10
     ssh_bits:install_messages(ssh_transport:transport_messages(NumVsn)),
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    11
     {Protocol, Callback, CloseTag} = 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    12
--- otp_src_R12B-5/lib/crypto/c_src/crypto_drv.c	Tue Nov  4 11:52:34 2008
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    13
+++ otp_src_R12B-5-patch/lib/crypto/c_src/crypto_drv.c	Thu Jun 23 11:33:31 2011
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    14
@@ -208,6 +208,9 @@
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    15
 #define DRV_SHA512_FINAL        58
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    16
 #endif
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    17
 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    18
+#define DRV_STRONG_RAND_BYTES   59
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    19
+#define DRV_STRONG_RAND_MPINT   60
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    20
+
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    21
 /* #define DRV_CBC_IDEA_ENCRYPT    34 */
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    22
 /* #define DRV_CBC_IDEA_DECRYPT    35 */
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    23
 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    24
@@ -604,7 +607,39 @@
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    25
         bin->orig_bytes[0] |= or_mask; /* bottommask */
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    26
         return rlen;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    27
         break;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    28
-      
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    29
+
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    30
+    case DRV_STRONG_RAND_BYTES:
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    31
+	/* buf = <<rlen:32/integer>> */
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    32
+        if (len != 4)
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    33
+            return -1;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    34
+	rlen = get_int32(buf);
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    35
+        *rbuf = (char *)(bin = driver_alloc_binary(rlen));
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    36
+	if (bin==NULL)
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    37
+            return -1;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    38
+        if (RAND_bytes(bin->orig_bytes,rlen) != 1)
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    39
+            return -1;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    40
+	return rlen;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    41
+
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    42
+    case DRV_STRONG_RAND_MPINT:
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    43
+        /* buf = <<rlen:32/integer,topmask:8/integer,bottommask:8/integer>> */
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    44
+        if (len != 6)
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    45
+            return -1;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    46
+        bn_rand = BN_new();
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    47
+        if (! bn_rand )
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    48
+            return -1;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    49
+
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    50
+        if (!BN_rand(bn_rand, get_int32(buf), buf[4], buf[5])) {
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    51
+            BN_free(bn_rand);
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    52
+            return -1;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    53
+        }
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    54
+
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    55
+        dlen = BN_num_bytes(bn_rand);
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    56
+        *rbuf = (char *)(bin = driver_alloc_binary(dlen));
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    57
+        put_int32(bin->orig_bytes, dlen);
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    58
+        BN_bn2bin(bn_rand, bin->orig_bytes+4);
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    59
+        BN_free(bn_rand);
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    60
+        return 1;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    61
+
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    62
     case DRV_RAND_UNIFORM:
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    63
       /* buf = <<from_len:32/integer,bn_from:from_len/binary,   *
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    64
        *         to_len:32/integer,bn_to:to_len/binary>>        */
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    65
--- otp_src_R12B-5/lib/crypto/src/crypto.erl	Tue Nov  4 11:52:34 2008
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    66
+++ otp_src_R12B-5-patch/lib/crypto/src/crypto.erl	Thu Jun 23 11:35:29 2011
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    67
@@ -40,6 +40,7 @@
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    68
 -export([rsa_private_encrypt/3, rsa_public_decrypt/3]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    69
 -export([dh_generate_key/1, dh_generate_key/2, dh_compute_key/3]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    70
 -export([rand_bytes/1, rand_bytes/3, rand_uniform/2]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    71
+-export([strong_rand_bytes/1, strong_rand_mpint/3]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    72
 -export([mod_exp/3, mpint/1, erlint/1]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    73
 %% -export([idea_cbc_encrypt/3, idea_cbc_decrypt/3]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    74
 -export([aes_cbc_128_encrypt/3, aes_cbc_128_decrypt/3]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    75
@@ -110,6 +111,8 @@
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    76
 %% -define(SHA512_UPDATE,	 57).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    77
 %% -define(SHA512_FINAL,	 58).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    78
 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    79
+-define(STRONG_RAND_BYTES,	 59).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    80
+-define(STRONG_RAND_MPINT,	 60).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    81
 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    82
 %% -define(IDEA_CBC_ENCRYPT, 34).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    83
 %% -define(IDEA_CBC_DECRYPT, 35).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    84
@@ -125,6 +128,8 @@
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    85
 		    des_ede3_cbc_encrypt, des_ede3_cbc_decrypt,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    86
 		    aes_cfb_128_encrypt, aes_cfb_128_decrypt,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    87
 		    rand_bytes,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    88
+		    strong_rand_bytes,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    89
+		    strong_rand_mpint,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    90
 		    rand_uniform,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    91
 		    mod_exp,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    92
 		    dss_verify,dss_sign,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    93
@@ -321,10 +326,19 @@
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    94
 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    95
 rand_bytes(Bytes) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    96
     rand_bytes(Bytes, 0, 0).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    97
+
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    98
+strong_rand_bytes(Bytes) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
    99
+    control(?STRONG_RAND_BYTES,[<<Bytes:32/integer>>]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   100
+
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   101
 rand_bytes(Bytes, Topmask, Bottommask) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   102
     control(?RAND_BYTES,[<<Bytes:32/integer,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   103
 			  Topmask:8/integer,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   104
 			  Bottommask:8/integer>>]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   105
+
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   106
+strong_rand_mpint(Bits, Top, Bottom) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   107
+    control(?STRONG_RAND_MPINT,[<<Bits:32/integer,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   108
+			  Top:8/integer,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   109
+			  Bottom:8/integer>>]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   110
 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   111
 rand_uniform(From,To) when is_binary(From), is_binary(To) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   112
     case control(?RAND_UNIFORM,[From,To]) of
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   113
--- otp_src_R12B-5/lib/ssh/src/ssh_bits.erl	Mon Sep  1 14:51:49 2008
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   114
+++ otp_src_R12B-5-patch/lib/ssh/src/ssh_bits.erl	Thu Jun 23 10:56:25 2011
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   115
@@ -33,7 +33,7 @@
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   116
 %% integer utils
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   117
 -export([isize/1]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   118
 -export([irandom/1, irandom/3]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   119
--export([random/1, random/3]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   120
+-export([random/1]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   121
 -export([xor_bits/2, fill_bits/2]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   122
 -export([i2bin/2, bin2i/1]).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   123
 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   124
@@ -400,9 +400,6 @@
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   125
 irandom(Bits) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   126
     irandom(Bits, 1, 0).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   127
 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   128
-%% irandom_odd(Bits) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   129
-%%     irandom(Bits, 1, 1).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   130
-
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   131
 %%
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   132
 %% irandom(N, Top, Bottom)
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   133
 %%
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   134
@@ -413,22 +410,8 @@
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   135
 %%       Bot = 0 - do not set the least signifcant bit
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   136
 %%       Bot = 1 - set the least signifcant bit (i.e always odd)
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   137
 %%
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   138
-irandom(0, _Top, _Bottom) -> 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   139
-    0;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   140
-irandom(Bits, Top, Bottom) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   141
-    Bytes = (Bits+7) div 8,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   142
-    Skip  = (8-(Bits rem 8)) rem 8,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   143
-    TMask = case Top of
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   144
-		  0 -> 0;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   145
-		  1 -> 16#80;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   146
-		  2 -> 16#c0
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   147
-	      end,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   148
-    BMask = case Bottom of
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   149
-		0 -> 0;
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   150
-		1 -> (1 bsl Skip)
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   151
-	    end,
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   152
-    <<X:Bits/big-unsigned-integer, _:Skip>> = random(Bytes, TMask, BMask),
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   153
-    X.
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   154
+irandom(Bits, Top, Bottom) -> 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   155
+    crypto:erlint(crypto:strong_rand_mpint(Bits, Top - 1, Bottom)).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   156
 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   157
 %%
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   158
 %% random/1
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   159
@@ -435,37 +419,9 @@
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   160
 %%   Generate N random bytes
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   161
 %%
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   162
 random(N) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   163
-    random(N, 0, 0).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   164
+    crypto:strong_rand_bytes(N).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   165
 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   166
-random(N, TMask, BMask) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   167
-    list_to_binary(rnd(N, TMask, BMask)).
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   168
-
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   169
-%% random/3
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   170
-%%   random(Bytes, TopMask, BotMask)
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   171
-%% where 
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   172
-%% Bytes is the number of bytes to generate
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   173
-%% TopMask is bitwised or'ed to the first byte
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   174
-%% BotMask is bitwised or'ed to the last byte
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   175
 %%
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   176
-rnd(0, _TMask, _BMask) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   177
-    [];
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   178
-rnd(1, TMask, BMask) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   179
-    [(rand8() bor TMask) bor BMask];
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   180
-rnd(N, TMask, BMask) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   181
-    [(rand8() bor TMask) | rnd_n(N-1, BMask)].
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   182
-
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   183
-rnd_n(1, BMask) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   184
-    [rand8() bor BMask];
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   185
-rnd_n(I, BMask) ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   186
-    [rand8() | rnd_n(I-1, BMask)].
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   187
-
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   188
-rand8() ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   189
-    (rand32() bsr 8) band 16#ff.
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   190
-
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   191
-rand32() ->
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   192
-    random:uniform(16#100000000) -1.
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   193
-
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   194
-%%
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   195
 %% Base 64 encode/decode
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   196
 %%
d28be18217b8 7056876 move erlang to userland
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff changeset
   197