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
CompositeIntegerGroup::CompositeIntegerGroup(Integer n) :
    _n(n)
{
    // We pick the generator deterministically n
    Hash *hash = CryptoFactory::GetInstance().GetLibrary()->GetHashAlgorithm();
    QByteArray seed = hash->ComputeHash(n.GetByteArray());

    for(_s=3; ; _s = _s+1) {
        if(!_s.IsPrime()) continue;
        _p = (2 * _s * _n) + 1;

        if(_p.IsPrime()) break;
    }

    // Set g to some random element

    Integer g, h;
    const Integer e_test = 2*_s;
    for(Integer i=0; ; i = i+1) {
        h = (Integer(seed) + i) % _p;

        // Make sure that g generates a subgroup that is bigger
        // than order 2 and s and smaller than order P.
        // Since we do not know the factorization of n=qr,
        // we might be generating a subgroup of order q or r.
        if((g = h.Pow(e_test, _p)) != 1) break;
    }

    _g = Element(new IntegerElementData(g));

    /*
    qDebug() << "_p" << _p.GetByteArray().toHex();
    qDebug() << "_s" << _s.GetByteArray().toHex();
    */
};
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);
    }
  }
Ejemplo n.º 4
0
  CppECGroup::CppECGroup(const Integer &p, const Integer &q, const Integer &a,
      const Integer &b, const Integer &gx, const Integer &gy) :
      _curve(ToCppInteger(p), ToCppInteger(a), ToCppInteger(b)),
      _q(q),
      _g(ToCppInteger(gx), ToCppInteger(gy)),
      _field_bytes(p.GetByteArray().count())
    {
      /*
      qDebug() << " p" << p.GetByteArray().toHex(); 
      qDebug() << " a" << a.GetByteArray().toHex(); 
      qDebug() << " b" << b.GetByteArray().toHex(); 
      qDebug() << "gx" << gx.GetByteArray().toHex(); 
      qDebug() << "gy" << gy.GetByteArray().toHex(); 
      */

      Q_ASSERT(ToCppInteger(p) == _curve.FieldSize());
    };
Ejemplo n.º 5
0
Zr PairingGroup::IntegerToZr(const Integer &in) const
{
    mpz_t z;
    mpz_init(z);
    QByteArray b = in.GetByteArray().toHex();
    const char *bytes = b.constData();
    int ret;

    if((ret = gmp_sscanf(bytes, "%Zx", z)) != 1) {
        //qDebug() << "Bad string of len" << b.count() << ":" << bytes;
        //qDebug() << "Read" << ret;
        qFatal("Could not convert integer");
    }

    Zr e(*_pairing, z);
    Q_ASSERT(e.isElementPresent());

    mpz_clear(z);
    return e;
}
Ejemplo n.º 6
0
 QVariant SigmaProof::IntegerToVariant(Integer i) const
 {
   return QVariant(i.GetByteArray());
 }