Ejemplo n.º 1
0
  TEST(Integer, OpenModInverse)
  {
    for(int i=0; i<10; i++) {
      Integer p = Integer::GetRandomInteger(1024, true);
      Integer a = Integer::GetRandomInteger(0, p);

      Integer na = a * Integer(-1);
      ASSERT_EQ(na, a - (2*a));

      ASSERT_EQ((a-p)%p, a);
      ASSERT_EQ((a-(40*p))%p, a);

      Integer inv = a.ModInverse(p);
      Integer out = (a*inv)%p;

      ASSERT_TRUE(a > 0);
      ASSERT_TRUE(p > a);

      qDebug() << "a" << a.GetByteArray().toHex();
      qDebug() << "p" << p.GetByteArray().toHex();
      qDebug() << "out" << out.GetByteArray().toHex();

      ASSERT_EQ(Integer(1), out);
    }
  }
Ejemplo n.º 2
0
 TEST(Integer, ModInverse)
 {
   Integer mod = Integer::GetRandomInteger(1024);
   // mod should be prime to ensure (higher likelihood of) multiplicative inverse
   mod = Integer::GetRandomInteger(1024, mod, true);
   Integer val = Integer::GetRandomInteger(1024, mod);
   Integer mi = val.ModInverse(mod);
   Integer result = (val * mi) % mod;
   qDebug() << result.ToString() << (val < mod) << (mi < mod);
   EXPECT_EQ(result, 1);
 }
Ejemplo n.º 3
0
  TEST(Integer, CppModInverse)
  {
    for(int i=0; i<10; i++) {
      Integer p = Integer::GetRandomInteger(1024, true);
      Integer a = Integer::GetRandomInteger(0, p);
      Integer inv = a.ModInverse(p);
      Integer out = (a*inv)%p;

      ASSERT_TRUE(a > 0);
      ASSERT_TRUE(p > a);

      qDebug() << "a" << a.GetByteArray().toHex();
      qDebug() << "p" << p.GetByteArray().toHex();
      qDebug() << "out" << out.GetByteArray().toHex();

      ASSERT_EQ(Integer(1), out);
    }
  }