public boolean verifyHashing() {
		System.out.println("Verifying reverse hashing:");
		Random r = new Random();
		for (int numIt=0; numIt<5; numIt++) {
			if (numIt != 0)
				System.out.println();
			
			if (useExtended) {
				
				//for (int i=0; i<num; i++) System.out.println(byteArrayToString(F[i]));
				//System.out.println();
				
				byte[] L = new byte[num];
				for (int i=0; i<num; i++)
					L[i] = (byte)r.nextInt(2);
				byte[] H = hash(L);
				byte[] H_inv = reverse_hash(H);

				System.out.println("   f(" + byteArrayToString(L) + ") =");
				System.out.println("     " + byteArrayToString(H) + "  ?");
				System.out.println("f^-1(" + byteArrayToString(H) + ") =");
				System.out.println("     " + byteArrayToString(H_inv) + " ?");
				
				for (int i=0; i<num; i++) {
					if (L[i] != H_inv[i]) {
						System.out.println("Verification failed!");
						return false;
					}
				}
				
			} else {
				
				long l = (0x123456789654323L * r.nextInt()) & 0x1FFFFFFFFFFFFL;
				long h = hash(l);
				long h_inv = reverse_hash(h);
				System.out.println("f(" + longToString(l    ) + ") =      " + longToString(h) + "  ?");
				System.out.println("  " + longToString(h_inv) + "  = f^-1(" + longToString(h) + ") ?");
				if (l != h_inv) {
					System.out.println("Verification failed!");
					return false;
				}
				
				l ^= 1<<(3*numIt);
				h = hash(l);
				h_inv = reverse_hash(h);
				System.out.println("f(" + longToString(l    ) + ") =      " + longToString(h) + "  ?");
				System.out.println("  " + longToString(h_inv) + "  = f^-1(" + longToString(h) + ") ?");
				if (l != h_inv) {
					System.out.println("Verification failed!");
					return false;
				}
			}
		}
		System.out.println("Verification successfull!");
		return true;
	}