Merge lp:~habnabit/pyskein/getrandbits into lp:pyskein

Proposed by Aaron Gallagher
Status: Needs review
Proposed branch: lp:~habnabit/pyskein/getrandbits
Merge into: lp:pyskein
Diff against target: 38 lines (+17/-0)
2 files modified
src/skein.py (+9/-0)
test/test_skein.py (+8/-0)
To merge this branch: bzr merge lp:~habnabit/pyskein/getrandbits
Reviewer Review Type Date Requested Status
PySkein Maintainers Pending
Review via email: mp+173392@code.launchpad.net

Description of the change

Submitting a branch for fixing #1198768.

To post a comment you must log in.

Unmerged revisions

419. By Aaron Gallagher

Add skein.Random.getrandbits and a test.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/skein.py'
--- src/skein.py 2011-06-04 14:14:40 +0000
+++ src/skein.py 2013-07-08 01:35:29 +0000
@@ -98,6 +98,15 @@
98 return r * self._RECIP_BPF98 return r * self._RECIP_BPF
9999
100100
101 def getrandbits(self, n_bits):
102 """Get some number of random bits as an integer."""
103 if n_bits <= 0:
104 raise ValueError('number of bits must be greater than zero')
105 n_bytes = (n_bits + 7) // 8
106 val = int.from_bytes(self.read(n_bytes), 'little')
107 return val >> (n_bytes * 8 - n_bits)
108
109
101 def getstate(self):110 def getstate(self):
102 """Return internal state; can be passed to setstate() later."""111 """Return internal state; can be passed to setstate() later."""
103 return (self._state,112 return (self._state,
104113
=== modified file 'test/test_skein.py'
--- test/test_skein.py 2010-12-22 16:49:46 +0000
+++ test/test_skein.py 2013-07-08 01:35:29 +0000
@@ -202,6 +202,14 @@
202 self.assertEqual(r.read(i)+r.read(5000-i),202 self.assertEqual(r.read(i)+r.read(5000-i),
203 skein.Random(b"abc").read(5000))203 skein.Random(b"abc").read(5000))
204204
205 def testPRNGgetrandbitsAdvancesState(self):
206 r1 = skein.Random(b"123", hasher=self.HASHER)
207 s1 = r1.read(2)
208 r1.getrandbits(32)
209 s2 = r1.read(2)
210 r2 = skein.Random(b"123", hasher=self.HASHER)
211 self.assertNotEqual(s1 + s2, r2.read(4))
212
205 def testStreamCipher(self):213 def testStreamCipher(self):
206 c = skein.StreamCipher(key=b"secret", hasher=self.HASHER)214 c = skein.StreamCipher(key=b"secret", hasher=self.HASHER)
207 x = c.encrypt(b"foobar")215 x = c.encrypt(b"foobar")

Subscribers

People subscribed via source and target branches