Пример #1
0
  boolean checkKATVectors() {
    KatResult kr = new KatResult();
    ParametersForSkein pfs;

    while (scanner.fillResult(kr)) {
      // Skip Tree vectors in this test function
      if (kr.restOfLine.contains("Tree")) {
        notProcessed++;
        continue;
      }
      if (kr.restOfLine.contains("MAC")) {
        pfs = new ParametersForSkein(new KeyParameter(kr.macKey), kr.stateSize, kr.hashBitLength);
        SkeinMac sm = new SkeinMac();

        sm.init(pfs);
        sm.updateBits(kr.msg, 0, kr.msgLength);
        byte[] mac = new byte[sm.getMacSize()];
        sm.doFinal(mac, 0);

        if (!Arrays.equals(mac, kr.result)) {
          System.out.println(
              kr.stateSize + "-" + kr.hashBitLength + "-" + kr.msgLength + "-" + kr.restOfLine);
          hexdump("Computed mac", mac, mac.length);
          hexdump("Expected result", kr.result, kr.result.length);
          return false;
        }
        processed++;
        continue;
      }
      Skein skein = new Skein(kr.stateSize, kr.hashBitLength);
      skein.updateBits(kr.msg, 0, kr.msgLength);
      byte[] hash = skein.doFinal();
      if (!Arrays.equals(hash, kr.result)) {
        System.out.println(
            kr.stateSize + "-" + kr.hashBitLength + "-" + kr.msgLength + "-" + kr.restOfLine);
        hexdump("Computed hash", hash, hash.length);
        hexdump("Expected result", kr.result, kr.result.length);
        return false;
      }
      // Enable the next few line so you can check some results manually
      // if ((kr.msgLength & 1) == 1) {
      // System.out.println(kr.stateSize + "-" + kr.hashBitLength + "-"
      // + kr.msgLength + "-" + kr.restOfLine);
      // hexdump("Computed hash", hash, hash.length);
      // hexdump("Expected result", kr.result, kr.result.length);
      // }
      processed++;
    }
    return true;
  }