@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"); } }
public static StreamingAead getPrimitive(KeysetHandle keysetHandle) throws GeneralSecurityException { return getPrimitive(keysetHandle, null); }
StreamingAeadFactory { public static StreamingAead getPrimitive(KeysetHandle keysetHandle) throws GeneralSecurityException { return getPrimitive(keysetHandle, null); } }
StreamingAeadFactory { public static StreamingAead getPrimitive(KeysetHandle keysetHandle) throws GeneralSecurityException { return getPrimitive(keysetHandle, null); }  }
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); }
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);  }