Disclosure #1 as per license

Christopher Oliver oliver at fritz.co.traverse.com
Mon Jan 26 09:43:07 UTC 1998


  Here is a minor change on digitMultiply which is useful when performing
multiplication of positives modulo a power of 256.  If I'm supposed to
send derivative code somewhere else in order to discharge my duties under
the license, would someone please remind me where?  Please... no style
comments.  This is strictly to speed up Rabin encryption, and this is a
private method.  I already know it's an ugly derivative.

Thanks,


'From Squeak 1.23 of October 4, 1997 on 26 January 1998 at 9:31:10 am'!

!Cryptor methodsFor: 'private' stamp: 'cao 1/26/98 09:15'!
fastMultiply: a by: b digits: d
        | prod carry digit k ab |
        (a digitLength = 1 and: [(a digitAt: 1) = 0]) ifTrue: [^ 0].
        prod _ Integer new: d neg: false.
        "prod starts out all zero"
        1 to: (b digitLength min: d) do:
                [:i |
                (digit _ b digitAt: i) ~= 0
                        ifTrue:
                                [k _ i.
                                carry _ 0.
                                "Loop invariant: 0<=carry<=0377, k=i+j-1"
                                1 to: (a digitLength min: d + 1 - i) do:
                                        [:j |
                                        ab _ ((a digitAt: j) * digit) + carry
                                                        + (prod digitAt: k).
                                        carry _ ab bitShift: -8.
                                        prod digitAt: k put: (ab bitAnd: 255).
                                        k _ k + 1].
                                k <= d ifTrue: [prod digitAt: k put: carry]]].
        ^ prod normalize! !

-- 
Christopher Oliver                     Traverse Communications
Systems Coordinator                    223 Grandview Pkwy, Suite 108
oliver at traverse.com                    Traverse City, Michigan, 49684
   (define magic (lambda (f) (lambda (x) x)))
   (define (more-magic n) (lambda (f) (lambda (x) (f ((n f) x)))))





More information about the Squeak-dev mailing list