Skip to content

Commit bfebb51

Browse files
committed
add javascript rng
1 parent c20175f commit bfebb51

1 file changed

Lines changed: 66 additions & 0 deletions

File tree

js/rand.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
* Copyright (c) 2014 - 2020 The GmSSL Project. All rights reserved.
3+
*
4+
* Redistribution and use in source and binary forms, with or without
5+
* modification, are permitted provided that the following conditions
6+
* are met:
7+
*
8+
* 1. Redistributions of source code must retain the above copyright
9+
* notice, this list of conditions and the following disclaimer.
10+
*
11+
* 2. Redistributions in binary form must reproduce the above copyright
12+
* notice, this list of conditions and the following disclaimer in
13+
* the documentation and/or other materials provided with the
14+
* distribution.
15+
*
16+
* 3. All advertising materials mentioning features or use of this
17+
* software must display the following acknowledgment:
18+
* "This product includes software developed by the GmSSL Project.
19+
* (http://gmssl.org/)"
20+
*
21+
* 4. The name "GmSSL Project" must not be used to endorse or promote
22+
* products derived from this software without prior written
23+
* permission. For written permission, please contact
24+
25+
*
26+
* 5. Products derived from this software may not be called "GmSSL"
27+
* nor may "GmSSL" appear in their names without prior written
28+
* permission of the GmSSL Project.
29+
*
30+
* 6. Redistributions of any form whatsoever must retain the following
31+
* acknowledgment:
32+
* "This product includes software developed by the GmSSL Project
33+
* (http://gmssl.org/)"
34+
*
35+
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
36+
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
39+
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41+
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44+
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46+
* OF THE POSSIBILITY OF SUCH DAMAGE.
47+
*/
48+
49+
function rand_bytes(data, len) {
50+
var buf = new Uint8Array(len);
51+
window.crypto.getRandomValues(buf);
52+
for (var i = 0; i < len; i++) {
53+
data[i] = buf[i];
54+
buf[i] = 0;
55+
}
56+
delete buf;
57+
}
58+
59+
function bn_rand_range(a, n) {
60+
var t = new Uint16Array(16);
61+
do {
62+
window.crypto.getRandomValues(t);
63+
} while (bn_cmp(t, n) >= 0);
64+
bn_copy(a, t);
65+
bn_free(t);
66+
}

0 commit comments

Comments
 (0)