class AEADs {

  public AEAD get(final EncryptionLevel level) {
    requireNonNull(level);

    if (level == EncryptionLevel.Initial) {
      final AEAD aead = initialAead.get();
      if (aead == null) {
        throw new IllegalStateException("Initial AEAD not set");
      }

      log.debug("Using initial AEAD: {}", aead);
      return aead;
    } else if (level == EncryptionLevel.Handshake) {
      final AEAD aead = handshakeAead.get();
      if (aead == null) {
        throw new IllegalStateException("Handshake AEAD not set");
      }

      log.debug("Using handshake AEAD: {}", aead);
      return aead;
    } else {
      final AEAD aead = oneRttAead.get();
      if (aead == null) {
        throw new IllegalStateException("1-RTT AEAD not set");
      }

      log.debug("Using 1-RTT AEAD: {}", aead);
      return aead;
    }
  }

  public  AEADs(final AEAD initialAead);

}