예제 #1
0
  private void decryptTabelEntry(BigInteger[] cLabels) {
    int col = 0;

    for (int i = 0; i < nCIBits; i++) if (cLabels[i].testBit(0)) col |= (1 << i);

    BigInteger target = EGTable[col];

    BigInteger colKey = BigInteger.ZERO;
    for (int k = nCIBits - 1; k >= 0; k--)
      colKey = colKey.shiftLeft(Wire.labelBitLength).xor(cLabels[k]);

    BigInteger res = Cipher.decrypt(colKey, target, nBits * Wire.labelBitLength);

    BigInteger mask = BigInteger.ONE.shiftLeft(Wire.labelBitLength).subtract(BigInteger.ONE);
    for (int k = nBits - 1; k >= 0; k--)
      outputLabels[k] = res.shiftRight(Wire.labelBitLength * k).and(mask);
  }