bool Test0(){
	cout << "Test0:\t";
	VaultMethod* method;
//	method = new VaultBF();
	method = new VaultTriangles();
	Vault* vault = new Vault(method);

	//Generate random secret
	vec_ZZ_p secret;
	secret.SetLength(POLYNOMIAL_TERMS);
	for(int i=0; i<POLYNOMIAL_TERMS; i++){
		secret[i] = random_ZZ_p();
	}

	vector<minutia> fingerprint = readFingerprintFromFile("../../CUBS_FP_DATA/FVC2002/DB2/features/27_3.fp");

	vault->lock(fingerprint, secret);
	polyResults result = vault->unlock(fingerprint);
	if(result.score > 10.0){
		cout << "passed" << endl;
		return true;
	}
	cout << "failed"<<endl;
	return false;
}
ZZ PaillierParty::getRandomInNStar(const ZZ& mod) {
    ZZ value;
    ZZ_p::init(mod);
    do {
        value = conv<ZZ>(random_ZZ_p());
    } while (GCD(value,mod)!=1);

    return value;
}
bool TestBF(){
	cout << "TestBF:\t\t\t\t";

	VaultMethod* method;
	method = new VaultBF();
	Vault* vault = new Vault(method);

	//Generate random secret
	vec_ZZ_p secret;
	secret.SetLength(POLYNOMIAL_TERMS);
	for(int i=0; i<POLYNOMIAL_TERMS; i++){
		secret[i] = random_ZZ_p();
	}

	vector<minutia> fingerprint;
	vector<minutia> fingerprintTransformed;
	minutia m;
	m.x = 180; m.y = 125; m.theta = 16; fingerprint.push_back(m);
	m.x = 360; m.y = 12; m.theta = 64; fingerprint.push_back(m);
	m.x = 432; m.y = 491; m.theta = 269; fingerprint.push_back(m);
	m.x = 56; m.y = 12; m.theta = 90; fingerprint.push_back(m);
	m.x = 4; m.y = 412; m.theta = 55; fingerprint.push_back(m);

//rotate 6 degrees clockwise about the origin the translate (12,-5)
	m.x = 204; m.y = 101; m.theta = 10; fingerprintTransformed.push_back(m);
	m.x = 371; m.y = -31; m.theta = 58; fingerprintTransformed.push_back(m);
	m.x = 493; m.y = 438; m.theta = 263; fingerprintTransformed.push_back(m);
	m.x = 69; m.y = 1; m.theta = 84; fingerprintTransformed.push_back(m);
	m.x = 59; m.y = 404; m.theta = 49; fingerprintTransformed.push_back(m);


	vault->lock(fingerprint, secret);
	polyResults result = vault->unlock(fingerprintTransformed);
	//cout << " score: " << result.score << "- ";

	if(result.score > 2.9 && result.score < 100.0) {
		cout << "passed" << endl;
		return true;
	}
	cout << "failed: " << result.score <<  endl;
	return false;
}