0

暗号化ライブラリのコンパイル時にエラーが発生します

crypto/ope.cpp: In member function ‘NTL::ZZ OPE::encrypt(const NTL::ZZ&, int)’:
crypto/ope.cpp:80: error: expected primary-expression before ‘[’ token
crypto/ope.cpp:80: error: expected primary-expression before ‘const’
crypto/ope.cpp:80: error: expected primary-expression before ‘const’
crypto/ope.cpp: In member function ‘NTL::ZZ OPE::decrypt(const NTL::ZZ&)’:
crypto/ope.cpp:110: error: expected primary-expression before ‘[’ token
crypto/ope.cpp:110: error: expected primary-expression before ‘const’
crypto/ope.cpp:110: error: expected primary-expression before ‘const’

コード スニペットは次のとおりです。

template<class CB> 
ope_domain_range
OPE::search(CB go_low)
{
    blockrng<AES> r(aesk);

    return lazy_sample(to_ZZ(0), to_ZZ(1) << pbits,
                       to_ZZ(0), to_ZZ(1) << cbits,
                       go_low, &r);
}

ZZ
OPE::encrypt(const ZZ &ptext, int offset)
{
    ope_domain_range dr =
        search([&ptext](const ZZ &d, const ZZ &) { return ptext < d; }); 

    blockrng<AES> aesrand(aesk);
    auto v = sha256::hash(StringFromZZ(ptext));
    v.resize(16);
    aesrand.set_ctr(v);

    ZZ nrange = dr.r_hi - dr.r_lo + 1;
    if (nrange < 4 || det)
        return dr.r_lo + aesrand.rand_zz_mod(nrange);

    ZZ nrquad = nrange / 4;
    static urandom urand;

    switch (offset) {
    case -1: 
        return dr.r_lo + urand.rand_zz_mod(nrquad);
    case 0:
        return dr.r_lo + nrquad + urand.rand_zz_mod(nrquad * 2); 
    case 1:
        return dr.r_lo + nrquad * 3 + urand.rand_zz_mod(nrquad);
    default:
        assert(0);
    }   
}

行 80 のコードは次のとおりです (行 110 のコードも同様です)。

ope_domain_range dr =
        search([&ptext](const ZZ &d, const ZZ &) { return ptext < d; }); 

私は、新しい C++ 標準である C++11 にあまり詳しくありません。これは新しい規格によって新たに導入されたものですか? いいえの場合、それはどういう意味ですか? はいの場合、C++11 コードを g++ バージョン 4.4.7 でコンパイルできますか? (現在、-std=c++0x としてフラグが立てられた g++ 4.4.7 でライブラリをコンパイルします。)

どうもありがとうございました。

4

1 に答える 1