mirror of
https://github.com/data61/MP-SPDZ.git
synced 2026-01-11 14:37:56 -05:00
161 lines
4.7 KiB
C++
161 lines
4.7 KiB
C++
/*
|
|
* Exceptions.cpp
|
|
*
|
|
*/
|
|
|
|
#include "Exceptions.h"
|
|
#include "Math/bigint.h"
|
|
#include "Processor/OnlineOptions.h"
|
|
|
|
void exit_error(const string& message)
|
|
{
|
|
if (OnlineOptions::singleton.has_option("throw_exceptions"))
|
|
throw runtime_error(message);
|
|
|
|
cerr << message << endl;
|
|
exit(1);
|
|
}
|
|
|
|
IO_Error::IO_Error(const string& m) :
|
|
ans(m)
|
|
{
|
|
}
|
|
|
|
file_error::file_error(const string& m) :
|
|
ans(m)
|
|
{
|
|
}
|
|
|
|
Processor_Error::Processor_Error(const string& m) :
|
|
msg(m)
|
|
{
|
|
}
|
|
|
|
Processor_Error::Processor_Error(const char* m) :
|
|
Processor_Error(string(m))
|
|
{
|
|
}
|
|
|
|
wrong_gfp_size::wrong_gfp_size(const char* name, const bigint& p,
|
|
const char* symbol, int n_limbs) :
|
|
runtime_error(
|
|
string() + name + " wrong size for modulus " + to_string(p)
|
|
+ ". Maybe change " + symbol + " to "
|
|
+ to_string(n_limbs) + ".")
|
|
{
|
|
}
|
|
|
|
overflow::overflow(const string& name, size_t i, size_t n) :
|
|
runtime_error(
|
|
name + " overflow: " + to_string(long(i)) + "/" + to_string(n)
|
|
+ ((long(i) < 0) ? ". A negative value indicates that "
|
|
"the computation modulus might be too small" :
|
|
""))
|
|
{
|
|
}
|
|
|
|
unknown_input_type::unknown_input_type(int type) :
|
|
runtime_error("unkown type: " + to_string(type))
|
|
{
|
|
}
|
|
|
|
invalid_opcode::invalid_opcode(int opcode) :
|
|
runtime_error("invalid opcode: " + to_string(opcode))
|
|
{
|
|
}
|
|
|
|
input_error::input_error(const char* name, const string& filename,
|
|
istream& input_file, size_t input_counter)
|
|
{
|
|
input_file.clear();
|
|
string token;
|
|
input_file >> token;
|
|
msg += string() + "cannot read " + name + " from " + filename
|
|
+ ", problem with '" + token + "' after "
|
|
+ to_string(input_counter);
|
|
}
|
|
|
|
signature_mismatch::signature_mismatch(const string& filename, bool has_mac) :
|
|
runtime_error("Signature in " + filename + " doesn't match protocol. " +
|
|
"Maybe re-run preprocessing"
|
|
+ (has_mac ? " or check for MAC mismatch" : ""))
|
|
{
|
|
}
|
|
|
|
insufficient_memory::insufficient_memory(size_t size, const string& type) :
|
|
runtime_error(
|
|
"program requires too much " + type + " memory: "
|
|
+ to_string(size))
|
|
{
|
|
}
|
|
|
|
not_enough_to_buffer::not_enough_to_buffer(const string& type, const string& filename) :
|
|
runtime_error(
|
|
"Not enough data available for buffer"
|
|
+ (filename.empty() ? "" : (" in " + filename)) + ". "
|
|
"Maybe insufficient preprocessing" + type
|
|
+ ".\nFor benchmarking, you can activate reusing data by "
|
|
"adding -DINSECURE to the compiler options.")
|
|
{
|
|
}
|
|
|
|
gf2n_not_supported::gf2n_not_supported(int n, string options) :
|
|
runtime_error(
|
|
"GF(2^" + to_string(n) + ") not supported"
|
|
+ (options.empty() ? "" : ", options are " + options))
|
|
{
|
|
}
|
|
|
|
setup_error::setup_error(const string& error) :
|
|
runtime_error(error)
|
|
{
|
|
}
|
|
|
|
prep_setup_error::prep_setup_error(const string& error, int nplayers,
|
|
const string& fake_opts) :
|
|
setup_error(
|
|
"Something is wrong with the preprocessing data on disk: "
|
|
+ error
|
|
+ "\nHave you run the right program for generating it, "
|
|
"such as './Fake-Offline.x "
|
|
+ to_string(nplayers) + fake_opts + "'?")
|
|
{
|
|
}
|
|
|
|
insufficient_shares::insufficient_shares(int expected, int actual, exception& e) :
|
|
runtime_error(
|
|
"expected " + to_string(expected) + " shares but only got "
|
|
+ to_string(actual) + " (" + e.what() + ")")
|
|
{
|
|
}
|
|
|
|
persistence_error::persistence_error(const string& error) :
|
|
runtime_error(
|
|
"Error while reading from persistence file. "
|
|
"You need to write to it first. "
|
|
"See https://mp-spdz.readthedocs.io/en/latest/io.html#persistence. "
|
|
"Details: " + error)
|
|
{
|
|
}
|
|
|
|
bytecode_error::bytecode_error(const string& error) :
|
|
runtime_error(error)
|
|
{
|
|
}
|
|
|
|
no_dynamic_memory::no_dynamic_memory() :
|
|
runtime_error("this functionality is only implemented "
|
|
"for online-only BMR, see "
|
|
"https://github.com/data61/MP-SPDZ?tab=readme-ov-file#bmr-1")
|
|
{
|
|
}
|
|
|
|
field_too_small::field_too_small(int length, int security) :
|
|
runtime_error(
|
|
"Field too small (" + to_string(length)
|
|
+ " bits) for chosen security (" + to_string(security)
|
|
+ "). Increase size with -lgp or "
|
|
"decrease security with --security")
|
|
{
|
|
}
|