Java Examples for javax.crypto.AEADBadTagException

The following java examples will help you to understand the usage of javax.crypto.AEADBadTagException. These source code samples are taken from different open source projects.

Example 1
Project: keywhiz-master  File: AuthenticatedEncryptedCookieFactory.java View source code
/**
   * Produces an authenticating token.
   *
   * @param user identity the token will authenticate.
   * @param expiration timestamp when token should expire.
   * @return token which can be used to authenticate as user until expiration.
   */
public String getSession(User user, ZonedDateTime expiration) {
    try {
        String cookieJson = mapper.writeValueAsString(new UserCookieData(user, expiration));
        byte[] cookieBody = encryptor.encrypt(cookieJson.getBytes(UTF_8));
        return Base64.getEncoder().encodeToString(cookieBody);
    } catch (AEADBadTagException e) {
        logger.error("Could not encrypt cookie", e);
        throw Throwables.propagate(e);
    } catch (JsonProcessingException e) {
        throw Throwables.propagate(e);
    }
}
Example 2
Project: openjdk-master  File: CipherInputStreamExceptions.java View source code
/* Full read stream, check that getMoreData() is throwing an exception
     * This test
     *   1) Encrypt 100 bytes with AES/GCM/PKCS5Padding
     *   2) Changes the last byte to invalidate the authetication tag.
     *   3) Fully reads CipherInputStream to decrypt the message and closes
     */
static void gcm_AEADBadTag() throws Exception {
    Cipher c;
    byte[] read = new byte[200];
    System.out.println("Running gcm_AEADBadTag");
    // Encrypt 100 bytes with AES/GCM/PKCS5Padding
    byte[] ct = encryptedText("GCM", 100);
    // Corrupt the encrypted message
    ct = corruptGCM(ct);
    // Create stream for decryption
    CipherInputStream in = getStream("GCM", ct);
    try {
        int size = in.read(read);
        throw new RuntimeException("Fail: CipherInputStream.read() " + "returned " + size + " and didn't throw an exception.");
    } catch (IOException e) {
        Throwable ec = e.getCause();
        if (ec instanceof AEADBadTagException) {
            System.out.println("  Pass.");
        } else {
            System.out.println("  Fail: " + ec.getMessage());
            throw new RuntimeException(ec);
        }
    } finally {
        in.close();
    }
}
Example 3
Project: jdk7u-jdk-master  File: GCMParameterSpecTest.java View source code
public static void main(String[] args) throws Exception {
    newGCMParameterSpecFail(-1, bytes);
    newGCMParameterSpecFail(128, null);
    newGCMParameterSpecPass(128, bytes);
    newGCMParameterSpecFail(-1, bytes, 2, 4);
    newGCMParameterSpecFail(128, null, 2, 4);
    newGCMParameterSpecFail(128, bytes, -2, 4);
    newGCMParameterSpecFail(128, bytes, 2, -4);
    // one too many
    newGCMParameterSpecFail(128, bytes, 2, 15);
    // ok.
    newGCMParameterSpecPass(128, bytes, 2, 14);
    newGCMParameterSpecPass(96, bytes, 4, 4);
    newGCMParameterSpecPass(96, bytes, 0, 0);
    // Might as well check the Exception constructors.
    try {
        new AEADBadTagException();
        new AEADBadTagException("Bad Tag Seen");
    } catch (Exception e) {
        e.printStackTrace();
        failed++;
    }
    if (failed != 0) {
        throw new Exception("Test(s) failed");
    }
}
Example 4
Project: bc-java-master  File: AEADTest.java View source code
private void testTampering(boolean aeadAvailable) throws InvalidKeyException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
    Cipher eax = Cipher.getInstance("AES/EAX/NoPadding", "BC");
    final SecretKeySpec key = new SecretKeySpec(new byte[eax.getBlockSize()], eax.getAlgorithm());
    final IvParameterSpec iv = new IvParameterSpec(new byte[eax.getBlockSize()]);
    eax.init(Cipher.ENCRYPT_MODE, key, iv);
    byte[] ciphertext = eax.doFinal(new byte[100]);
    // Tamper
    ciphertext[0] = (byte) (ciphertext[0] + 1);
    try {
        eax.init(Cipher.DECRYPT_MODE, key, iv);
        eax.doFinal(ciphertext);
        fail("Tampered ciphertext should be invalid");
    } catch (BadPaddingException e) {
        if (aeadAvailable) {
            if (!e.getClass().getName().equals("javax.crypto.AEADBadTagException")) {
                fail("Tampered AEAD ciphertext should fail with AEADBadTagException when available.");
            }
        }
    }
}
Example 5
Project: PanBox-master  File: AESGCMRandomAccessFile.java View source code
@Override
protected byte[] _readChunk(long index) throws IOException, FileEncryptionException, FileIntegrityException {
    // first, get chunk iv for decryption
    long oldpos = backingRandomAccessFile.getFilePointer();
    backingRandomAccessFile.seek(chunkOffset(index));
    // read iv
    byte[] iv = new byte[CHUNK_IV_SIZE];
    int ret = backingRandomAccessFile.read(iv);
    if (ret != CHUNK_IV_SIZE) {
        throw new FileEncryptionException("Size mismatch reading chunk IV!");
    }
    GCMParameterSpec spec = new GCMParameterSpec(GCM_AUTHENTICATION_TAG_LEN, iv);
    byte[] res, buf;
    try {
        decCipher.init(Cipher.DECRYPT_MODE, getFileKey(), spec);
        // set chunk metadata for verifying metadata integrity
        // index of current chunk
        decCipher.updateAAD(LongByteConv.long2Bytes(index));
        // flag indicating if we're writing the last chunk
        decCipher.updateAAD(BooleanByteConv.bool2byte(false));
        buf = new byte[CHUNK_ENC_DATA_SIZE];
        ret = backingRandomAccessFile.read(buf);
        backingRandomAccessFile.seek(oldpos);
        if (ret != CHUNK_ENC_DATA_SIZE) {
            throw new FileEncryptionException("Size mismatch reading encrypted chunk data!");
        }
        // decrypt data
        res = decCipher.doFinal(buf);
    } catch (AEADBadTagException e) {
        throw new FileIntegrityException("Decryption error in chunk " + index + ". Possible file integrity violation.", e);
    } catch (InvalidKeyExceptionInvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException |  e) {
        throw new FileEncryptionException("Decryption error in chunk " + index + ": " + e.getMessage(), e);
    }
    if ((res == null) || (res.length != CHUNK_DATA_SIZE)) {
        throw new FileEncryptionException("Decryption error or chunk size mismatch during decryption!");
    } else {
        if (implementsAuthentication()) {
            // check authentication tag for integrity
            byte[] tag = Arrays.copyOfRange(buf, res.length, buf.length);
            if (!getAuthTagVerifier().verifyChunkAuthTag((int) index, tag)) {
                throw new FileIntegrityException("File authentication tag verification failed in chunk " + index);
            }
        }
        return res;
    }
}
Example 6
Project: platform_frameworks_base-master  File: AndroidKeyStoreCipherSpiBase.java View source code
@Override
protected final byte[] engineDoFinal(byte[] input, int inputOffset, int inputLen) throws IllegalBlockSizeException, BadPaddingException {
    if (mCachedException != null) {
        throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(mCachedException);
    }
    try {
        ensureKeystoreOperationInitialized();
    } catch (InvalidKeyExceptionInvalidAlgorithmParameterException |  e) {
        throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(e);
    }
    byte[] output;
    try {
        flushAAD();
        byte[] additionalEntropy = KeyStoreCryptoOperationUtils.getRandomBytesToMixIntoKeystoreRng(mRng, getAdditionalEntropyAmountForFinish());
        output = mMainDataStreamer.doFinal(input, inputOffset, inputLen, // no signature involved
        null, additionalEntropy);
    } catch (KeyStoreException e) {
        switch(e.getErrorCode()) {
            case KeymasterDefs.KM_ERROR_INVALID_INPUT_LENGTH:
                throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(e);
            case KeymasterDefs.KM_ERROR_INVALID_ARGUMENT:
                throw (BadPaddingException) new BadPaddingException().initCause(e);
            case KeymasterDefs.KM_ERROR_VERIFICATION_FAILED:
                throw (AEADBadTagException) new AEADBadTagException().initCause(e);
            default:
                throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(e);
        }
    }
    resetWhilePreservingInitState();
    return output;
}
Example 7
Project: openjdk8-jdk-master  File: GCMParameterSpecTest.java View source code
public static void main(String[] args) throws Exception {
    newGCMParameterSpecFail(-1, bytes);
    newGCMParameterSpecFail(128, null);
    newGCMParameterSpecPass(128, bytes);
    newGCMParameterSpecFail(-1, bytes, 2, 4);
    newGCMParameterSpecFail(128, null, 2, 4);
    newGCMParameterSpecFail(128, bytes, -2, 4);
    newGCMParameterSpecFail(128, bytes, 2, -4);
    // one too many
    newGCMParameterSpecFail(128, bytes, 2, 15);
    // ok.
    newGCMParameterSpecPass(128, bytes, 2, 14);
    newGCMParameterSpecPass(96, bytes, 4, 4);
    newGCMParameterSpecPass(96, bytes, 0, 0);
    // Might as well check the Exception constructors.
    try {
        new AEADBadTagException();
        new AEADBadTagException("Bad Tag Seen");
    } catch (Exception e) {
        e.printStackTrace();
        failed++;
    }
    if (failed != 0) {
        throw new Exception("Test(s) failed");
    }
}
Example 8
Project: android_frameworks_base-master  File: AndroidKeyStoreCipherSpiBase.java View source code
@Override
protected final byte[] engineDoFinal(byte[] input, int inputOffset, int inputLen) throws IllegalBlockSizeException, BadPaddingException {
    if (mCachedException != null) {
        throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(mCachedException);
    }
    try {
        ensureKeystoreOperationInitialized();
    } catch (InvalidKeyExceptionInvalidAlgorithmParameterException |  e) {
        throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(e);
    }
    byte[] output;
    try {
        flushAAD();
        byte[] additionalEntropy = KeyStoreCryptoOperationUtils.getRandomBytesToMixIntoKeystoreRng(mRng, getAdditionalEntropyAmountForFinish());
        output = mMainDataStreamer.doFinal(input, inputOffset, inputLen, // no signature involved
        null, additionalEntropy);
    } catch (KeyStoreException e) {
        switch(e.getErrorCode()) {
            case KeymasterDefs.KM_ERROR_INVALID_INPUT_LENGTH:
                throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(e);
            case KeymasterDefs.KM_ERROR_INVALID_ARGUMENT:
                throw (BadPaddingException) new BadPaddingException().initCause(e);
            case KeymasterDefs.KM_ERROR_VERIFICATION_FAILED:
                throw (AEADBadTagException) new AEADBadTagException().initCause(e);
            default:
                throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(e);
        }
    }
    resetWhilePreservingInitState();
    return output;
}
Example 9
Project: android-sdk-sources-for-api-level-23-master  File: AndroidKeyStoreCipherSpiBase.java View source code
@Override
protected final byte[] engineDoFinal(byte[] input, int inputOffset, int inputLen) throws IllegalBlockSizeException, BadPaddingException {
    if (mCachedException != null) {
        throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(mCachedException);
    }
    try {
        ensureKeystoreOperationInitialized();
    } catch (InvalidKeyExceptionInvalidAlgorithmParameterException |  e) {
        throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(e);
    }
    byte[] output;
    try {
        flushAAD();
        byte[] additionalEntropy = KeyStoreCryptoOperationUtils.getRandomBytesToMixIntoKeystoreRng(mRng, getAdditionalEntropyAmountForFinish());
        output = mMainDataStreamer.doFinal(input, inputOffset, inputLen, // no signature involved
        null, additionalEntropy);
    } catch (KeyStoreException e) {
        switch(e.getErrorCode()) {
            case KeymasterDefs.KM_ERROR_INVALID_INPUT_LENGTH:
                throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(e);
            case KeymasterDefs.KM_ERROR_INVALID_ARGUMENT:
                throw (BadPaddingException) new BadPaddingException().initCause(e);
            case KeymasterDefs.KM_ERROR_VERIFICATION_FAILED:
                throw (AEADBadTagException) new AEADBadTagException().initCause(e);
            default:
                throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(e);
        }
    }
    resetWhilePreservingInitState();
    return output;
}