A version of FairPlay SMC project which is _really_ able to handle arbitrary long integers
Switch branches/tags
Nothing to show
Pull request Compare This branch is 11 commits behind MrCsabaToth:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



A version of Fairplay software for 2-party SMC (Secure Multi-party Computation) which is really able to handle arbitrarily long integers. Related links:


  • FairplayFP patch
  • All cointainer classes (Vector, Map, Set, etc) were converted to type-safe generics
  • Had to add Compiler/InputFormat.java to be able to fully accomplish the type-safe generics
  • Converted the internal representation of Int<*> SMC program types to BigInteger instead of Java int
  • Changed the party (Alice/Bob) run-time input parsing so it can take in BigIntegers
  • It is possible now to place the run-time input into files (name derived from the other file names by convention) instead of a console input
  • If the file comes from the input, than the output will be written to a file too, file name is also derived from the other file names by convention
  • The software searches for the program script relative to the rundir Java environment variable (that was already used for finding the log4j configuration file)
  • The output is able to display negative integer results (original Fairplay couldn't even do that with int)
  • The output is able to display BigInteger (arbitrarily long integer) results (regardless of negative or positive)
  • Lots of minor fixes and corrections

Effects of changes

  • The source code somewhat got modern Java conform, safer
  • Really able to handle arbitrarily long integers
  • Can integrate with other solutions easier (run-time input from file)
  • There can be performance penalty for some BigInteger operations compared to int (simple increment for example)
  • The source code got cleaner (converting from and to bit representations: BigInteger natively supports that while with integer there were bit manipulation/shift operations)

Known limitations

  • Cannot specify BigInteger constants in the program script. This is because the Tokenizer is based on Java's StreamTokenizer, which automatically parses the number (regardless you invoke the parseNumber function or not), and that stores the number in double floating point variable. This leads to precision loss in some cases, and prevents BigInteger constants only in the program script. Note however, that you can specify BigIntegers as and input in the standard input / input files for Alice and Bob.
  • End point of for-loop must be constant values


Please refer to GPL.txt


  • Csaba Toth <csaba.toth (at) vanderbilt.edu>
  • Wei Xie <wei.xie (at) vanderbilt.edu>