public void callCheat(int reason) throws IOException, InvalidKeyException,
			IllegalBlockSizeException, BadPaddingException,
			NoSuchAlgorithmException {
		
		System.out.println("Cheater Detected!");
		switch (reason) {
		case PUBLIC_KEY_CHANGED:
			System.out
					.println("Reason: Someone has attempted to change your public key.");
			break;
		case SIGNATURE_FAILED:
			System.out
					.println("Reason: Signature verification has failed - someone may have altered a message.");
			break;
		case DECRYPT_REQUEST_ABUSE:
			System.out
					.println("Reason: A user has tried to exploit your decryption of other users cards.");
			break;
		case USER_TABLE_SIGNATURE_FAILED:
			System.out
					.println("Reason: The user table sent (with users in the game and their public keys) has been altered. The signature failed.");
			break;
		case COMMUNITY_CARDS_DIFFER:
			System.out
					.println("Reason: The community cards sent by the host are not what they should be.");
			break;
		case HAND_VERIFICATION_FAILED:
			System.out.println("Reason: The winners hand failed verification.");
			break;
		}

		Notification not = new Notification();
		not.set(NOT_TYPE, CHEATER);
		not.set(GAME_ID, gameHost.getID());
		not.set(SOURCE_USER, user.getID());
		not.set("reason", reason);
		not.set(SIGNATURE,
				sigServ.createVerifiedSignature(SigService.CHEATER_NONCE));

		elvin.send(not);
		shutdown();
		System.exit(-1);

	}