#### 71 lines 1.7 KiB Python Raw Permalink Blame History

 ```"""Convenience functions for random operations. Not suitable for security / cryptography operations.""" ``` ``` ``` ```import os ``` ```import random ``` ```from pyelliptic.openssl import OpenSSL ``` ```NoneType = type(None) ``` ``` ``` ``` ``` ```def seed(): ``` ``` """Initialize random number generator""" ``` ``` random.seed() ``` ``` ``` ``` ``` ```def randomBytes(n): ``` ``` """Method randomBytes.""" ``` ``` try: ``` ``` return os.urandom(n) ``` ``` except NotImplementedError: ``` ``` return OpenSSL.rand(n) ``` ``` ``` ``` ``` ```def randomshuffle(population): ``` ``` """Method randomShuffle. ``` ``` ``` ``` shuffle the sequence x in place. ``` ``` shuffles the elements in list in place, ``` ``` so they are in a random order. ``` ``` As Shuffle will alter data in-place, ``` ``` so its input must be a mutable sequence. ``` ``` In contrast, sample produces a new list ``` ``` and its input can be much more varied ``` ``` (tuple, string, xrange, bytearray, set, etc) ``` ``` """ ``` ``` random.shuffle(population) ``` ``` ``` ``` ``` ```def randomsample(population, k): ``` ``` """Method randomSample. ``` ``` ``` ``` return a k length list of unique elements ``` ``` chosen from the population sequence. ``` ``` Used for random sampling ``` ``` without replacement, its called ``` ``` partial shuffle. ``` ``` """ ``` ``` return random.sample(population, k) ``` ``` ``` ``` ``` ```def randomrandrange(x, y=None): ``` ``` """Method randomRandrange. ``` ``` ``` ``` return a randomly selected element from ``` ``` range(start, stop). This is equivalent to ``` ``` choice(range(start, stop)), ``` ``` but doesnt actually build a range object. ``` ``` """ ``` ``` if isinstance(y, NoneType): ``` ``` return random.randrange(x) # nosec ``` ``` else: ``` ``` return random.randrange(x, y) # nosec ``` ``` ``` ``` ``` ```def randomchoice(population): ``` ``` """Method randomchoice. ``` ``` ``` ``` Return a random element from the non-empty ``` ``` sequence seq. If seq is empty, raises ``` ``` IndexError. ``` ``` """ ``` ``` return random.choice(population) # nosec ```