[Cryptography Team] Cryptography: Fortuna>>nextInt:

C. David Shaffer cdshaffer at acm.org
Mon Jul 5 19:58:20 UTC 2010


I missed a method in my merge of Chris' branch:

Fortuna>>nextInt: was removed by cmm.7 with the comment:

"Removed faulty optimization of Fortuna>>#nextInt:.  Now inherits slower
but correct one from superclass."

Chris:  It looks like the original version has persistent (with
underscores fixed) in the latest version.  Can you confirm that I should
remove the version below?

Feedback from others?

Thanks!

David



Fortuna>>nextInt: anInteger
    "Answer a random integer in the interval [1, anInteger]."
    | r high bits highestMultiple |
    anInteger strictlyPositive ifFalse: [ self error: 'Range must be positive' ].
    high := anInteger-1.
    bits := high highBit.
    "Calculate highestMultiple of anInteger, so that we can simply divide r by anInteger and use the remainder for the random value."
    highestMultiple := (1 bitShift: bits) truncateTo: anInteger.
    [ (r := self nextBits: bits)
        between: 0
        and: highestMultiple ] whileFalse.
    ^ r\\anInteger+1



More information about the Cryptography mailing list