示例#1
0
bool 
JobSearchSession::serialize_result(Xapian::MSet &matches, string &resp)
{
    JobSearchResult pb_result;
    //numbers
    pb_result.set_offset(m_query.offset());
    pb_result.set_total_estimated(m_qualified_matches);
    TB_INFO("matches count:"<<matches.get_matches_estimated());
    TB_INFO("matches qualified:"<<m_qualified_matches);
    //matches
    for (Xapian::MSetIterator i = matches.begin(); i != matches.end(); ++i) {
        if(i.get_weight() == 0){
            break;
        }
        string data = i.get_document().get_data();
        JobSearchResult pb_;
        pb_.ParseFromString(data);
        
        JobSearchResult_ResultItem &item = *(pb_result.add_result_item());
        item.set_jid(pb_.result_item(0).jid());
        item.set_title(pb_.result_item(0).title());
        item.set_location(pb_.result_item(0).location());
        item.set_company_id(pb_.result_item(0).company_id());
        item.set_company_name(pb_.result_item(0).company_name());
        item.set_company_image(pb_.result_item(0).company_image());
        item.set_department(pb_.result_item(0).department());
        item.set_post_date(pb_.result_item(0).post_date());
        item.set_score(i.get_weight()); 
        if(m_query.pb_query.has_debug() && m_query.pb_query.debug()){
            item.set_debug_data(m_mid_data_recorder[item.jid()]);
        }
        TB_DEBUG("jid :"<<item.jid());
    }
    pb_result.set_count(pb_result.result_item_size());
    TB_INFO("matches in range:"<<pb_result.result_item_size());

    //stats
    std::vector<SearchStats::pair_t> top_v;
    m_stats.topk(top_v,MAX_STATS_ITEMS);
    for(unsigned i=0;i<top_v.size();i++){
        const SearchStats::term_t &key = top_v[i].first;
        uint32_t value = top_v[i].second;
        JobSearchResult_StatsItem *stats = pb_result.add_stats_item();
        stats->set_stats_type(JOB_STATS_NAME[m_query.task_type]);
        stats->set_stats_key(key);
        stats->set_stats_value(value);
    }
    
    //serialize
    if(false == pb_result.SerializeToString(&resp)){
        TB_INFO("serialize response failed");
        return false;
    }
    return true;
}
示例#2
0
static void test_div_random(void)
{
	int i;
	char str[MAX_RAND_STRING_SIZE];

	TB_INFO("   Testing random divisions");

	DEF_BIGINT(n, 2048);
	DEF_BIGINT(d, 2048);
	DEF_BIGINT(q, 2048);
	DEF_BIGINT(r, 2048);
	DEF_BIGINT(v, 2048);

	for (i = 0; i < 10000; i++) {
		tb_set_random_value(n, str, 1);
		/* don't divide by zero */
		do {
			tb_set_random_value(d, str, 1);
		} while (TEE_BigIntCmpS32(d, 0) == 0);
		TEE_BigIntDiv(q, r, n, d);
		TEE_BigIntMul(v, q, d);
		TEE_BigIntAdd(v, v, r);
		TB_ASSERT_BIGINT_EQ(n, v);
		if (TEE_BigIntCmpS32(d, 0) > 0)
			TB_ASSERT_BIGINT_LESS(r, d);

	}

	DEL_BIGINT(n);
	DEL_BIGINT(d);
	DEL_BIGINT(q);
	DEL_BIGINT(r);
	DEL_BIGINT(v);
}
示例#3
0
static void test_div_signs(void)
{
	TB_INFO("   Testing signs of q and r");

	DEF_BIGINT(n, 2048);
	DEF_BIGINT(d, 2048);
	DEF_BIGINT(q, 2048);
	DEF_BIGINT(r, 2048);
	DEF_BIGINT(v, 2048);

	DIV_CHECK_SIGN("53", "7", CMP_LARGER, CMP_LARGER);
	DIV_CHECK_SIGN("-53", "7", CMP_SMALLER, CMP_SMALLER);
	DIV_CHECK_SIGN("53", "-7", CMP_SMALLER, CMP_LARGER);
	DIV_CHECK_SIGN("-53", "-7", CMP_LARGER, CMP_SMALLER);

	DIV_CHECK_SIGN("123456789abcdef123456789abcdef", "fedcba98765432100",
		       CMP_LARGER, CMP_LARGER);
	DIV_CHECK_SIGN("-123456789abcdef123456789abcdef", "fedcba98765432100",
		       CMP_SMALLER, CMP_SMALLER);
	DIV_CHECK_SIGN("123456789abcdef123456789abcdef", "-fedcba98765432100",
		       CMP_SMALLER, CMP_LARGER);
	DIV_CHECK_SIGN("-123456789abcdef123456789abcdef", "-fedcba98765432100",
		       CMP_LARGER, CMP_SMALLER);

	DEL_BIGINT(n);
	DEL_BIGINT(d);
	DEL_BIGINT(q);
	DEL_BIGINT(r);
	DEL_BIGINT(v);
}
示例#4
0
static void test_BigInt_getsetShort(void)
{
	int32_t b;
	TEE_Result res;

	TB_INFO("Testing GetShort and SetShort");

	DEF_BIGINT(a, 512);

	getsettest(a, 1);
	getsettest(a, -1);
	getsettest(a, 123);
	getsettest(a, -123);
	getsettest(a, 0x7FFFFFFF);
	getsettest(a, (int)0x80000000);
	getsettest(a, (int)0xFFFFFFFF);
	getsettest(a, 0);

	/* Testing too large BigInt */
	TEE_BigIntConvertFromString(a, "0x1FFFFFFFFF");
	res = TEE_BigIntConvertToS32(&b, a);
	TB_ASSERT(res == TEE_ERROR_OVERFLOW);

	mpa_wipe((mpanum) a);

	TEE_BigIntConvertFromString(a, "-0x1FFFFFFFFF");
	res = TEE_BigIntConvertToS32(&b, a);
	TB_ASSERT(res == TEE_ERROR_OVERFLOW);

	DEL_BIGINT(a);

}
示例#5
0
bool 
Server::cache_set(const string &key,const char *value,size_t valuelen)
{
    if(m_memcached_conn.number_of_hosts == 0){
        return false;
    }
    /*
    vector<char> vv;
    for(size_t i=0;i<valuelen;i++){
        vv.push_back(value[i]);
    }
    */
    pthread_mutex_lock(&m_cache_lock);
    string cachekey = cache_hash(key);
    memcached_return_t rc= memcached_set(&m_memcached_conn,
                                       cachekey.c_str(), cachekey.size(),
                                       value, valuelen,
                                       86400, 0); 
    pthread_mutex_unlock(&m_cache_lock);
    if(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED){
        TB_INFO("cache set ok: key="<<cachekey);
        return true;
    }else{
        TB_ERROR("cache set failed: error="<<memcached_strerror(NULL, rc)<<",key="<<cachekey<<", valuelen="<<valuelen);
        return false;    
    }
}
示例#6
0
bool
Server::init()
{
    if(m_server_type == SERVER_TYPE_USER){
        m_com_contacts = new CompanyContactsKeeper(m_mongodb_addr,m_company_list_filename);
        if(m_com_contacts->init()==false){
            return false;
        }
    }
    if(m_server_type == SERVER_TYPE_JOB){
        m_com_score = new CompanyScoreKeeper(m_company_score_filename);
        if(m_com_score->init()==false){
            return false;
        }
    }
    m_tag_scorer = new TagScorer(1.0);
    memcached_create(&m_memcached_conn);
    memcached_behavior_set(&m_memcached_conn,MEMCACHED_BEHAVIOR_BINARY_PROTOCOL,1);
    //memcached_behavior_set(&m_memcached_conn, MEMCACHED_BEHAVIOR_USE_UDP,1);
    if(m_memcache_addr!=""){
        memcached_server_st *servers;
        servers= memcached_servers_parse(m_memcache_addr.c_str());
        memcached_return_t rc = memcached_server_push(&m_memcached_conn, servers);
        memcached_server_free(servers);
        if(rc!=MEMCACHED_SUCCESS){
            TB_ERROR("connect to memcached failed, error="<<memcached_strerror(NULL, rc));
            return false;
        }else{
            TB_INFO("connected to memcached on "<<m_memcache_addr);
        }
    }
    pthread_mutex_init(&m_cache_lock,0);
    pthread_mutex_init(&m_db_lock,0);
    pthread_cond_init(&m_db_cond,0);
    for(size_t i=0;i<db_pool_size;i++){
        m_dbs.push_back(new Xapian::Database(m_index_dir));
        m_dbs_busy.push_back(false);
        m_dbs_last_reload_ts.push_back(time(0));
    }
    TB_INFO("database doccount: "<<m_dbs[0]->get_doccount());
    Session* new_session = create_session();
    new_session->init();
    acceptor_.async_accept(new_session->socket(),
		boost::bind(&Server::handle_accept, this, new_session,
		boost::asio::placeholders::error));
   return true; 
}
示例#7
0
static void test_BigInt_getsetOctetString(void)
{
	const uint8_t os1[] = { 1, 2, 3, 4 };
	const uint8_t os2[] = { 1, 2, 3, 4, 5 };
	const uint8_t os3[] = { 0, 1, 2, 3, 4 };
	const uint8_t os4[] = { 0x11, 0x22, 0x44, 0x55, 0x66, 0x77, 0x88 };
	uint8_t os_res[10];
	TEE_Result res;
	size_t os_len;

	DEF_BIGINT(a, 512);
	DEF_BIGINT(b, 512);

	TB_INFO("Testing Convert to and from OctetString");

	/* Test with 0x0102030405 */
	TEE_BigIntConvertFromString(a, "0x0102030405");
	os_len = sizeof(os_res);
	res = TEE_BigIntConvertToOctetString(os_res, &os_len, a);
	TB_ASSERT(res == TEE_SUCCESS);
	TB_ASSERT(sizeof(os2) == os_len
		  && TEE_MemCompare(os2, os_res, sizeof(os2)) == 0);

	res = TEE_BigIntConvertFromOctetString(b, os_res, os_len, 1);
	TB_ASSERT(res == TEE_SUCCESS);
	TB_ASSERT(TEE_BigIntCmp(a, b) == 0);

	/* Test with 0x11224455667788 */
	TEE_BigIntConvertFromString(a, "0x11224455667788");
	os_len = sizeof(os_res);
	res = TEE_BigIntConvertToOctetString(os_res, &os_len, a);
	TB_ASSERT(res == TEE_SUCCESS);
	TB_ASSERT(sizeof(os4) == os_len
		  && TEE_MemCompare(os4, os_res, sizeof(os4)) == 0);

	res = TEE_BigIntConvertFromOctetString(b, os_res, os_len, 1);
	TB_ASSERT(res == TEE_SUCCESS);
	TB_ASSERT(TEE_BigIntCmp(a, b) == 0);

	/* Test with static octet strings */
	res = TEE_BigIntConvertFromOctetString(a, os1, sizeof(os1), 1);
	TB_ASSERT(res == TEE_SUCCESS);

	os_len = sizeof(os_res);
	res = TEE_BigIntConvertToOctetString(os_res, &os_len, a);
	TB_ASSERT(res == TEE_SUCCESS);
	TB_ASSERT(sizeof(os1) == os_len
		  && TEE_MemCompare(os1, os_res, sizeof(os1)) == 0);

	res = TEE_BigIntConvertFromOctetString(b, os3, sizeof(os3), 1);
	TB_ASSERT(res == TEE_SUCCESS);
	TB_ASSERT(TEE_BigIntCmp(a, b) == 0);

	DEL_BIGINT(a);
	DEL_BIGINT(b);
}
示例#8
0
static void large_composites(void)
{
    TB_INFO("Large Composites");

    DEF_BIGINT(x, 2048);

    IS_COMPOSITE("136233FDE5569");
    IS_COMPOSITE("177B96388FD94D5D7EC9AE513");
    IS_COMPOSITE("22770A7DC599BC90B2FF981CCB5CF05703344C8F3504189ED");

    IS_COMPOSITE("0002ECD5_3B215054_2D1494A4_24D50322_EBABBBD5_DB89392A_368D7759");

    IS_COMPOSITE("00000004_C8971C2B_6F7A8503_AB80749E_2BBA5BB6_B6031BD4_3564DCA8_003F0E3E_54E677A0_A4B1B615_3662B313_0C11C273_C0F94084_45B2ABB4_7D64153B_EB48C154_659FDFDE_DC496C8E_A81AA7B7_CE2B2CB1_AA7C8B40_7DE8C86F_122607B2_A226385D_9432F6CB_30B5E4DE_033E3363_D48A1865_D9BC95DC_7883D9DC_9331691A_17964979");

    IS_COMPOSITE("00038AFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFEA_5C6D11ED_D2905192_C5429E6A_6D796E89_250BF563_DA53D393_25129B70_435894B5_6E337D58_66F0BEF6_63D6C26D_A889B69D_4B1508ED_63A17AFD_8BC0C5BE_09AC18B6_4B2B7D87_279D32EB_4F3375C1_0D58DF1F_7CA2147A_61CFA557_235244D4_A4700AB5_953C4C6E_D428EB5F_09F07DAE_D46A995B_8FFE48EF_B93390C9_60685A31_987879F8_18CCE9B9_816E13DE_E4BEA5CC_38C56A5D_1983425D_DD909C88_463B447F");

    DEL_BIGINT(x);
}
示例#9
0
static void simple(void)
{

    TB_INFO("Simple cases");

    DEF_BIGINT(x, 2048);

    IS_COMPOSITE("0");
    IS_COMPOSITE("1");
    IS_PRIME("2");
    IS_PRIME("3");
    IS_PRIME("17");
    IS_PRIME("FA1");
    IS_COMPOSITE("FA0");

    DEL_BIGINT(x);

}
示例#10
0
static void large_primes(void)
{
    TB_INFO("Large Primes");

    DEF_BIGINT(x, 2048);

    IS_PRIME("000136A3_52B2C7A5");
    IS_PRIME("00000002_2770A7DC_599BC90B_2FF981CC_B5CF0570_3344C8F3_50418AAD");

    IS_PRIME("000067E0_4F440C5F_ECCA2694_B1A4AB4F_CEC2D2B2_D286FC93_DD259D2B_36A3A00D_F3726A4D_4DFA9919_5998D92F_43DD7370_B8C079E2_3072036F_0C13F3F6_ABA1D6DF");

    IS_PRIME("000BC9F7_E42CE741_32EC6933_DE1B8357_CD2AEB9E_4B8A5F26_BD233D1E_6F295555_4D2CFA97_60F3F69C_CC52E8E4_28F68C37_AD5BC70C_DB12F4DC_EF23CB10_1C36A2A7");

    IS_PRIME("00000005_233FE157_B5B44102_598513AE_BB8876B0_D1791769_C8A1B0F3_6875D06F_E26951C7_372192C7_B21CAB67_ADF0D6FE_1A718FB3_FC4A5145_4DE87CD3_F852005B_AAEC35D5");

    IS_PRIME("0000001A_655954FB_C4408E09_FE97EB82_5E0F0964_26B42317_A36E53FF_9608DD3F_A6610402_45906334_496987EF_B14BEA5F_7C050444_C9B22A09_EC76AF4E_BDC609D8_A90C05E9_E5AF0682_9C542DFC_F7E6B9DC_0B065659_C1816309_CD6012C3_7F8CE649_8DECF850_F33943F0_F8308140_6846D306_22E0BCE6_97E612FC_1F7A5D90_2280D6E0_3009E585");

    DEL_BIGINT(x);
}
示例#11
0
static void test_div_basic(void)
{
	TB_INFO("   Testing basic cases");

	DEF_BIGINT(n, 2048);
	DEF_BIGINT(d, 2048);
	DEF_BIGINT(q, 2048);
	DEF_BIGINT(r, 2048);
	DEF_BIGINT(v, 2048);

	SELF_VERIFY_DIV("8111_1110_0000_0001_12345678", "8000000012345678");

	DIV("0", "1", "0");
	DIV("1", "1", "1");
	DIV("b7fb", "5", "24CB");
	DIV("124378912734891273894712890347102358129034789120374",
	    "1984086C15FA011154C86FA68", "B73D14EC7205D3311F6E78411D");
	SELF_VERIFY_DIV("124378912734891273894712890347102358129034789120374",
			"1984086C15FA011154C86FA68");
	SELF_VERIFY_DIV("-124378912734891273894712890347102358129034789120374",
			"1984086C15FA011154C86FA68");
	SELF_VERIFY_DIV("124378912734891273894712890347102358129034789120374",
			"-1984086C15FA011154C86FA68");
	SELF_VERIFY_DIV("-124378912734891273894712890347102358129034789120374",
			"-1984086C15FA011154C86FA68");
	SELF_VERIFY_DIV("12345678", "10");
	SELF_VERIFY_DIV("-12345678", "10");
	SELF_VERIFY_DIV("12345678", "-10");
	SELF_VERIFY_DIV("-12345678", "-10");
	SELF_VERIFY_DIV("12345678901234567890123456789012345678901", "10");
	SELF_VERIFY_DIV("1234567890123456789012345678901234567890", "10");
	SELF_VERIFY_DIV("123456789012345678901234567890123456789", "10");

	DEL_BIGINT(n);
	DEL_BIGINT(d);
	DEL_BIGINT(q);
	DEL_BIGINT(r);
	DEL_BIGINT(v);
}
示例#12
0
/*------------------------------------------------------------
 *
 *  test_BigIntInit
 *
 */
static void test_BigIntInit(void)
{

	TEE_BigInt *a;
	size_t aLen;

	TB_INFO("Testing BigIntInit");

	/* Testing normal allocation and initialization */
	aLen = TEE_BigIntSizeInU32(512);
	a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0);
	TEE_BigIntInit(a, aLen);
	TEE_Free(a);

	/* Testing zero allocation */
	aLen = TEE_BigIntSizeInU32(0);
	a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0);
	TEE_BigIntInit(a, aLen);
	TEE_Free(a);

	/* Testing too large */
	aLen = TEE_BigIntSizeInU32(4096);
	a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0);
	TEE_BigIntInit(a, aLen);
	TEE_Free(a);

	/* Testing boundaries */
	aLen = TEE_BigIntSizeInU32(2048);
	a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0);
	TEE_BigIntInit(a, aLen);
	TEE_Free(a);

	aLen = TEE_BigIntSizeInU32(2049);
	a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0);
	TEE_BigIntInit(a, aLen);
	TEE_Free(a);

}
示例#13
0
static void test_modexp(void)
{
	TEE_BigIntFMMContext *context;
	size_t nLen;
	const char *nstr;
	const char *xstr;
	const char *estr;
	const char *resstr;
	int nbitsize;

	TB_INFO("   Testing modular exponentiation");

	DEF_BIGINT(dest, 2048);
	DEF_BIGINT(x, 2048);
	DEF_BIGINT(e, 2048);
	DEF_BIGINT(n, 2048);

	nstr = "2C8D59AF47C81AB3725B472BE417E3BF"
	       "7AB85439AF726ED3DFDF66489D155DC0"
	       "B771C7A50EF7C5E58FB";
	nbitsize = 330;
	xstr = "18EE90FF6C373E0EE4E3F0AD2";
	estr = "AB54A98CEB1F0AD2";

	resstr = "23F455C413C2F037A8A1D06CCFD007BE"
		 "021ABEEE4CE522990A67C65CA94922BD"
		 "822218A79BE6A0AB00C";

	MOD_EXP_TEST;

	nstr = "FFF1FFF1";
	nbitsize = 33;
	xstr = "ABCDEF";
	estr = "1234567";
	resstr = "E9D974C2";
	MOD_EXP_TEST;

	nstr = "C7970CEEDCC3B0754490201A7AA613CD"
		"73911081C790F5F1A8726F463550BB5B"
		"7FF0DB8E1EA1189EC72F93D1650011BD"
		"721AEEACC2ACDE32A04107F0648C2813"
		"A31F5B0B7765FF8B44B4B6FFC93384B6"
		"46EB09C7CF5E8592D40EA33C80039F35"
		"B4F14A04B51F7BFD781BE4D1673164BA"
		"8EB991C2C4D730BBBE35F592BDEF524A"
		"F7E8DAEFD26C66FC02C479AF89D64D37"
		"3F442709439DE66CEB955F3EA37D5159"
		"F6135809F85334B5CB1813ADDC80CD05"
		"609F10AC6A95AD65872C909525BDAD32"
		"BC729592642920F24C61DC5B3C3B7923"
		"E56B16A4D9D373D8721F24A3FC0F1B31"
		"31F55615172866BCCC30F95054C824E7"
		"33A5EB6817F7BC16399D48C6361CC7E5";
	nbitsize = 2048;
	xstr = "63CB86776E61D83AA248100D3D5309E6"
		"B9C88840E3C87AF8D43937A31AA85DAD"
		"BFF86DC70F508C4F6397C9E8B28008DE"
		"B90D775661566F19502083F832461409"
		"D18FAD85BBB2FFC5A25A5B7FE499C25B"
		"237584E3E7AF42C96A07519E4001CF9A"
		"DA78A5025A8FBDFEBC0DF268B398B25D"
		"475CC8E1626B985DDF1AFAC95EF7A925"
		"7BF46D77E936337E01623CD7C4EB269B"
		"9FA21384A1CEF33675CAAF9F51BEA8AC"
		"FB09AC04FC299A5AE58C09D6EE406682"
		"B04F8856354AD6B2C396484A92DED699"
		"5E394AC9321490792630EE2D9E1DBC91"
		"F2B58B526CE9B9EC390F9251FE078D98"
		"98FAAB0A8B94335E66187CA82A641273"
		"99D2F5B40BFBDE0B1CCEA4631B0E63F3";

	estr = "31E5C33BB730EC1D512408069EA984F3"
		"5CE4442071E43D7C6A1C9BD18D542ED6"
		"DFFC36E387A84627B1CBE4F45940046F"
		"5C86BBAB30AB378CA81041FC19230A04"
		"E8C7D6C2DDD97FE2D12D2DBFF24CE12D"
		"91BAC271F3D7A164B503A8CF2000E7CD"
		"6D3C52812D47DEFF5E06F93459CC592E"
		"A3AE6470B135CC2EEF8D7D64AF7BD492"
		"BDFA36BBF49B19BF00B11E6BE275934D"
		"CFD109C250E7799B3AE557CFA8DF5456"
		"7D84D6027E14CD2D72C604EB77203341"
		"5827C42B1AA56B5961CB2425496F6B4C"
		"AF1CA564990A483C93187716CF0EDE48"
		"F95AC5A93674DCF61C87C928FF03C6CC"
		"4C7D558545CA19AF330C3E5415320939"
		"CCE97ADA05FDEF058E6752318D8731FA";

	resstr = "4F7CAEC2D0663A719DC73CF51030906D"
		 "320E9B7AB19AAAF887EFA16E1A92C829"
		 "D7AC7F984E792C94955EFDE31E97E716"
		 "3D9193D3F4A4656EF94C3202DC84D499"
		 "5D25EC33C5284635285639E7B59EB92C"
		 "CA883348AE1F5B78098B0DE87C718CF0"
		 "AA7BE51623A57C1DD8BD1B72E9F0FD17"
		 "98085A5E100810C740C45DB79D391F48"
		 "8BC4ACB3F3C24D5948A994637FF4593B"
		 "7FA8D07F88649EFEED2840EAC47248B6"
		 "5BD3A09A923065A0BDA0EBEB6340AAE1"
		 "08701FEB85811D628467A8D2CCC2D888"
		 "5DE807D0CF65B254B3435E9F844AA86F"
		 "3795ACC2EF71DE64F55EBC638B88B964"
		 "E5C2D55F8F7E3F00B0FC86C19C6AF1EA"
		 "B5CC45E90D7464BA230298F660DDE812";
	MOD_EXP_TEST;

	nstr = "000000022770A7DC599BC90B2FF981CCB5CF05703344C8F3504189ED";
	nbitsize = 2048;
	xstr = "000000020BCFDDA4E89FE86AAC303CB3D767FE66627C797794403831";
	estr = "89DC29F71666F242CBFE60732D73C15C0CD1323CD410627B";
	resstr = "7202419F1301F56B6D0BF9F287D49061F6F378426A78533F";
	MOD_EXP_TEST;

	nstr = "00000002_2770A7DC_599BC90B_2FF981CC_B5CF0570_3344C8F3_50418AAD";
	nbitsize = 2048;
	xstr = "00000001_8D359BB6_4F9B75A9_357C8215_E1E4D5F1_764D016C_F0130738";
	estr = "89DC29F7_1666F242_CBFE6073_2D73C15C_0CD1323C_D41062AB";
	resstr = "1";
	MOD_EXP_TEST;

	DEL_BIGINT(dest);
	DEL_BIGINT(x);
	DEL_BIGINT(e);
	DEL_BIGINT(n);
}