|
211 | 211 | equal(n, 1000, "1000 times success:" + n0 + ":" + n1 + ":" + n2 + ":" + n3); |
212 | 212 | }); |
213 | 213 |
|
| 214 | +test("Util.getRandomBigIntegerZeroToMax rejects out-of-range candidate", function() { |
| 215 | + var fOrig = KJUR.crypto.Util.getRandomBigIntegerOfNbits; |
| 216 | + var aBiRand = [new BigInteger("200", 10), new BigInteger("42", 10)]; |
| 217 | + var idx = 0; |
| 218 | + KJUR.crypto.Util.getRandomBigIntegerOfNbits = function(n) { |
| 219 | + return aBiRand[idx++]; |
| 220 | + }; |
| 221 | + try { |
| 222 | + var bi = KJUR.crypto.Util.getRandomBigIntegerZeroToMax(new BigInteger("100", 10)); |
| 223 | + equal(bi.toString(10), "42", "returns in-range value"); |
| 224 | + equal(idx >= 2, true, "retries when out-of-range candidate appears"); |
| 225 | + } finally { |
| 226 | + KJUR.crypto.Util.getRandomBigIntegerOfNbits = fOrig; |
| 227 | + } |
| 228 | +}); |
| 229 | + |
214 | 230 | test("Util.getRandomBigIntegerMinToMax", function() { |
215 | 231 | var bi15 = new BigInteger("15", 10); |
216 | 232 | var bi18 = new BigInteger("18", 10); |
|
270 | 286 | equal(new BigInteger("-13", 10).modInverse(biM2).toString(10), "82", "-13 mod 97"); |
271 | 287 | }); |
272 | 288 |
|
| 289 | +test("Util.getRandomBigIntegerMinToMax throws for any positive compareTo", function() { |
| 290 | + var biMin = { |
| 291 | + compareTo: function(a) { return 2; } |
| 292 | + }; |
| 293 | + var biMax = { |
| 294 | + subtract: function(a) { throw "subtract must not be called"; } |
| 295 | + }; |
| 296 | + var ex = null; |
| 297 | + try { |
| 298 | + KJUR.crypto.Util.getRandomBigIntegerMinToMax(biMin, biMax); |
| 299 | + } catch (err) { |
| 300 | + ex = err; |
| 301 | + } |
| 302 | + equal(ex, "biMin is greater than biMax", "throws before subtraction"); |
| 303 | +}); |
| 304 | + |
273 | 305 | test("MessageDigest test", function() { |
274 | 306 | expect(10); |
275 | 307 | var md1 = new KJUR.crypto.MessageDigest({"alg": "sha1", "prov": "cryptojs"}); |
|
0 commit comments