[BUG] DSA failure in LargePositiveInteger in #new: <primitive: 71>

JArchibald at aol.com JArchibald at aol.com
Tue May 30 18:24:49 UTC 2000


=> 5/30/00 11:29:21 AM EDT, sr at evolgo.de =>
<< Could you please - by using the debugger - take a view into this method 
and look for the argument of this >>new: here? >>

Stephan,

Okay, here are the gory details (and they are very gory indeed).

When I run DigitalSignatureAlgorithm>>generateKeySet, I get an error in 
Behavior>>new: with the following walk-back:

-----------------------------------------------------------
Error: a primitive has failed

LargePositiveInteger class(Object)>>error:
LargePositiveInteger class(Object)>>primitiveFailed
LargePositiveInteger class(Behavior)>>new:
DigitalSignatureAlgorithm>>remainder:mod:
DigitalSignatureAlgorithm>>isProbablyPrime:
DigitalSignatureAlgorithm>>generateSandQ
DigitalSignatureAlgorithm>>generateQandP
DigitalSignatureAlgorithm>>generateKeySet
DigitalSignatureAlgorithm class>>generateKeySet
UndefinedObject>>DoIt
-----------------------------------------------------------

in method DigitalSignatureAlgorithm>>remainder:mod: the run-down at the time 
of failure for local variables is:

instance variables:
randKey =>
        
307385829511981686161951818891981644321181675878454608535020998987106630640700
7414946902775125280836683961032522680178611962356369479518502436492287616251 
(class LargePositiveInteger)
randSeed =>     1369035390015187928040555654137399981674798064385 (class 
LargePositiveInteger)

arguments:
x =>            1 (class SmallInteger)
y =>            1456264555551690166006364982944671635636330287773 (class 
LargePositiveInteger)

temporaries:
remainder =>    01 (class LargePositiveInteger, size = 2)
divisor =>      1456264555551690166006364982944671635636330287773 (class 
LargePositiveInteger)
shift =>            0 (class SmallInteger)
quotient =>     nil (class UndefinedObject)

and the argument to LargePositiveInteger>>new: is -18 (in statement mentioned 
in next paragraph). LargePositiveInteger>>new: works only if the parameter to 
#new: is >= 0. Since we are getting a negative value there, something in the 
new implementation of LargeInteger is causing this routine to go whacko. 

These are some very big numbers. Not as big as those I got in other tests 
mentioned in previous E-mails, but big enough. In any case, the body of 
DigitalSignatureAlgorithm>>remainder:mod: is attempting to do an 
Integer>>new: with a negative parameter in statement
    quotient _ LargePositiveInteger new: remainder digitLength - divisor 
digitLength.
There are a number of numeric operations in that routine prior to this 
statement, and my suspicion is that one of them is behaving badly.

BTW (world), who did the DSA stuff?

Still sincerely lost,
Jerry.
____________________________

Jerry L. Archibald
systemObjectivesIncorporated
____________________________

"Knowledge is something that you can use,
 Belief is something that uses you."
    Idries Shah





More information about the Squeak-dev mailing list