code: def crack2(self, r, s1, s2, m1, m2):
          
          sdelta = self.GFn.value(s1 - s2)
          mdelta = self.GFn.value(m1 - m2)
  
          secret = mdelta / sdelta
          x1 = self.crack1(r, s1, m1, secret)
          x2 = self.crack1(r, s2, m2, secret)
  
          if x1 != x2:
              logger.info("x1= %s" % x1)
              logger.info("x2= %s" % x2)
  
          return (secret, x1)
docs: find signsecret and privkey from duplicate 'r'
          signature (r,s1) for message m1
          and signature (r,s2) for message m2
          s1= (m1 + x*r)/k
          s2= (m2 + x*r)/k
          subtract -> (s1-s2) = (m1-m2)/k  ->  k = (m1-m2)/(s1-s2)
          -> privkey =  (s1*k-m1)/r  .. or  (s2*k-m2)/r