StreamingAeadFactory { public static StreamingAead getPrimitive(KeysetHandle keysetHandle) throws GeneralSecurityException { return getPrimitive(keysetHandle, null); }  static StreamingAead getPrimitive(KeysetHandle keysetHandle); static StreamingAead getPrimitive(
      KeysetHandle keysetHandle,
      final KeyManager<StreamingAead> keyManager);  }
@Test public void testBasicAesCtrHmacStreamingAead() throws Exception { byte[] keyValue = Random.randBytes(KDF_KEY_SIZE); int derivedKeySize = AES_KEY_SIZE; int ciphertextSegmentSize = 128; KeysetHandle keysetHandle = TestUtil.createKeysetHandle( TestUtil.createKeyset( TestUtil.createKey( TestUtil.createAesCtrHmacStreamingKeyData( keyValue, derivedKeySize, ciphertextSegmentSize), 42, KeyStatusType.ENABLED, OutputPrefixType.RAW))); StreamingAead streamingAead = StreamingAeadFactory.getPrimitive(keysetHandle); StreamingTestUtil.testEncryptionAndDecryption(streamingAead); }
@Test public void testBasicAesGcmHkdfStreamingAead() throws Exception { byte[] keyValue = Random.randBytes(KDF_KEY_SIZE); int derivedKeySize = AES_KEY_SIZE; int ciphertextSegmentSize = 128; KeysetHandle keysetHandle = TestUtil.createKeysetHandle( TestUtil.createKeyset( TestUtil.createKey( TestUtil.createAesGcmHkdfStreamingKeyData( keyValue, derivedKeySize, ciphertextSegmentSize), 42, KeyStatusType.ENABLED, OutputPrefixType.RAW))); StreamingAead streamingAead = StreamingAeadFactory.getPrimitive(keysetHandle); StreamingTestUtil.testEncryptionAndDecryption(streamingAead); }
@Test public void testMultipleKeys() throws Exception { byte[] primaryKeyValue = Random.randBytes(KDF_KEY_SIZE); byte[] otherKeyValue = Random.randBytes(KDF_KEY_SIZE); byte[] anotherKeyValue = Random.randBytes(KDF_KEY_SIZE); int derivedKeySize = AES_KEY_SIZE; Key primaryKey = TestUtil.createKey( TestUtil.createAesGcmHkdfStreamingKeyData( primaryKeyValue, derivedKeySize, 512), 42, KeyStatusType.ENABLED, OutputPrefixType.RAW); Key otherKey = TestUtil.createKey( TestUtil.createAesCtrHmacStreamingKeyData( otherKeyValue, derivedKeySize, 256), 43, KeyStatusType.ENABLED, OutputPrefixType.RAW); Key anotherKey = TestUtil.createKey( TestUtil.createAesGcmHkdfStreamingKeyData( anotherKeyValue, derivedKeySize, 1024), 72, KeyStatusType.ENABLED, OutputPrefixType.RAW); KeysetHandle keysetHandle = TestUtil.createKeysetHandle(TestUtil.createKeyset(primaryKey, otherKey, anotherKey)); StreamingAead streamingAead = StreamingAeadFactory.getPrimitive(keysetHandle); StreamingAead primaryAead = StreamingAeadFactory.getPrimitive( TestUtil.createKeysetHandle(TestUtil.createKeyset(primaryKey))); StreamingAead otherAead = StreamingAeadFactory.getPrimitive( TestUtil.createKeysetHandle(TestUtil.createKeyset(otherKey))); StreamingAead anotherAead = StreamingAeadFactory.getPrimitive( TestUtil.createKeysetHandle(TestUtil.createKeyset(anotherKey))); StreamingTestUtil.testEncryptionAndDecryption(streamingAead, streamingAead); StreamingTestUtil.testEncryptionAndDecryption(streamingAead, primaryAead); StreamingTestUtil.testEncryptionAndDecryption(primaryAead, streamingAead); StreamingTestUtil.testEncryptionAndDecryption(otherAead, streamingAead); StreamingTestUtil.testEncryptionAndDecryption(anotherAead, streamingAead); StreamingTestUtil.testEncryptionAndDecryption(primaryAead, primaryAead); StreamingTestUtil.testEncryptionAndDecryption(otherAead, otherAead); StreamingTestUtil.testEncryptionAndDecryption(anotherAead, anotherAead); try { StreamingTestUtil.testEncryptionAndDecryption(otherAead, primaryAead); fail("No matching key, should have thrown an exception"); } catch (IOException expected) { assertExceptionContains(expected, "No matching key"); } try { StreamingTestUtil.testEncryptionAndDecryption(anotherAead, primaryAead); fail("No matching key, should have thrown an exception"); } catch (IOException expected) { assertExceptionContains(expected, "No matching key"); } }
@Test public void testInvalidKeyMaterial() throws Exception { Key valid = TestUtil.createKey( TestUtil.createAesGcmHkdfStreamingKeyData( Random.randBytes(KDF_KEY_SIZE), AES_KEY_SIZE, 128), 42, KeyStatusType.ENABLED, OutputPrefixType.RAW); Key invalid = TestUtil.createKey( TestUtil.createAesSivKeyData(64), 43, KeyStatusType.ENABLED, OutputPrefixType.TINK); KeysetHandle keysetHandle = TestUtil.createKeysetHandle(TestUtil.createKeyset(valid, invalid)); try { StreamingAeadFactory.getPrimitive(keysetHandle); fail("Expected GeneralSecurityException"); } catch (GeneralSecurityException e) { assertExceptionContains(e, "com.google.crypto.tink.StreamingAead not supported"); } keysetHandle = TestUtil.createKeysetHandle(TestUtil.createKeyset(invalid, valid)); try { StreamingAeadFactory.getPrimitive(keysetHandle); fail("Expected GeneralSecurityException"); } catch (GeneralSecurityException e) { assertExceptionContains(e, "com.google.crypto.tink.StreamingAead not supported"); } }