|
Hi
I discovered that UUIDGenerator and DigitalSignatureAlgorithm used in some encrypting algo
are dependent of Sound.
BaseSoundSystem>>:randomBitsFromSoundInput: bitCount
"Answer a positive integer with the given number of random bits of 'noise' from a sound input source. Typically, one would use a microphone or line input as the sound source, although many sound cards have enough thermal noise that you get random low-order sample bits even with no microphone connected. Only the least signficant bit of the samples is used. Since not all sound cards support 16-bits of sample resolution, we use the lowest bit that changes."
"(1 to: 10) collect: [:i | BaseSoundSystem new randomBitsFromSoundInput: 512]"
| recorder buf mid samples bitMask randomBits bit |
"collect some sound data"
recorder := SoundRecorder new clearRecordedSound.
recorder resumeRecording.
(Delay forSeconds: 1) wait.
recorder stopRecording.
buf := recorder condensedSamples.
"grab bitCount samples from the middle"
mid := buf monoSampleCount // 2.
samples := buf copyFrom: mid to: mid + bitCount - 1.
"find the least significant bit that varies"
bitMask := 1.
[bitMask < 16r10000 and:
[(samples collect: [:s | s bitAnd: bitMask]) asSet size < 2]]
whileTrue: [bitMask := bitMask bitShift: 1].
bitMask = 16r10000 ifTrue: [^ self error: 'sound samples do not vary'].
"pack the random bits into a positive integer"
randomBits := 0.
1 to: samples size do: [:i |
bit := ((samples at: i) bitAnd: bitMask) = 0 ifTrue: [0] ifFalse: [1].
randomBits := (randomBits bitShift: 1) + bit].
^ randomBits
Now I was thinking that when the sound package is not loaded we could have a random number generator.
Stef
|