-
Notifications
You must be signed in to change notification settings - Fork 0
Documentation
The Oblivious Printing scheme proceeds according to the following steps:
- Translation Table
- Mixing
- Shadow Mix
- Plaintext Equality Test
- Visual Cryptography
TranslationTable.java: table of (key, value) pairs where "key" is a unique representation of a letter in the alphabet, "value" stores the bit-wise representation of the letter - the tuple is represented by the Message class
PlaintextMessage.java: plaintext (key, value) pair
CipherMessage.java: ElGamal encrypted (key, value) pair where every element in "value" is encrypted individually
[A sample alphabet is provided in /test]
Mixnet.java - execute(): general driver coordinating the mix network
Server.java: each instance represents a single party - randomizes and permutes the translation table
Permutation.java: representation of individual permutations
FactorTable.java: stores all random factors used in a single randomization process, for e.g. if value.length == n then (n+1) random factors would be stored: n for reencrypting "value", 1 for reencryting "key"
Mixnet.java - validate(): coordinates the validation process
Challenge.java: represents a single Shadow Mix challenge
ChallengeProof.java: represents the Heads or Tails decommitment of the challenge
TranslationTable.java - extract(): performs the multiparty PET to extract the desired ciphertext
BasisMatrix.java: a n x 2^(n-1) binary matrix where each column has even Hamming weight
ObliviousPrint.java: generic coordinator of the visual crypto process, coordinates cut-and-choose process, printer challenges, and finalization
PrinterDriver.java: specific coordinator of multiparty share creation and printing
Printer.java: represents single printing party, creates and prints a single share