	public static byte[] decryptWithConcatKDF(final JWEHeader header,
						  final SecretKey secretKey,
						  final Base64URL encryptedKey,
						  final Base64URL iv,
						  final Base64URL cipherText,
						  final Base64URL authTag,
						  final Provider ceProvider,
						  final Provider macProvider)
		throws JOSEException {

		byte[] epu = null;

		if (header.getCustomParam("epu") instanceof String) {

			epu = new Base64URL((String)header.getCustomParam("epu")).decode();
		}

		byte[] epv = null;

		if (header.getCustomParam("epv") instanceof String) {

			epv = new Base64URL((String)header.getCustomParam("epv")).decode();
		}
		
		SecretKey cik = LegacyConcatKDF.generateCIK(secretKey, header.getEncryptionMethod(), epu, epv);
		
		String macInput = header.toBase64URL().toString() + "." +
			encryptedKey.toString() + "." +
			iv.toString() + "." +
			cipherText.toString();
		
		byte[] mac = HMAC.compute(cik, macInput.getBytes(), macProvider);
		
		if (! ConstantTimeUtils.areEqual(authTag.decode(), mac)) {
			throw new JOSEException("MAC check failed");
		}

		SecretKey cekAlt = LegacyConcatKDF.generateCEK(secretKey, header.getEncryptionMethod(), epu, epv);

		return AESCBC.decrypt(cekAlt, iv.decode(), cipherText.decode(), ceProvider);
	}
The software does not validate or incorrectly validates the integrity check values or "checksums" of a message. This may prevent it from detecting if the data has been modified or corrupted in transmission.