Skip to content
dannalieth edited this page Dec 5, 2011 · 10 revisions

The Oblivious Printing scheme proceeds according to the following steps:

  1. Translation Table
  2. Mixing
  3. Shadow Mix
  4. Plaintext Equality Test
  5. Visual Cryptography

1. Translation Table

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]

2. Mixing

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"

3. Shadow Mix

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

4. Plaintext Equality Test

TranslationTable.java - extract(): performs the multiparty PET to extract the desired ciphertext

5. Visual Crytography

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

Clone this wiki locally