crypto_ss.add(genh)
crypto_ss.add(files(
  'afsplit.c',
  'akcipher.c',
  'block-luks.c',
  'block-qcow.c',
  'block.c',
  'cipher.c',
  'der.c',
  'hash.c',
  'hmac.c',
  'ivgen-essiv.c',
  'ivgen-plain.c',
  'ivgen-plain64.c',
  'ivgen.c',
  'pbkdf.c',
  'secret_common.c',
  'secret.c',
  'tlscreds.c',
  'tlscredsanon.c',
  'tlscredspsk.c',
  'tlscredsx509.c',
  'tlssession.c',
  'rsakey.c',
))

if nettle.found()
  crypto_ss.add(nettle, files('hash-nettle.c', 'hmac-nettle.c', 'pbkdf-nettle.c'))
  if hogweed.found()
    crypto_ss.add(gmp, hogweed)
  endif
  if xts == 'private'
    crypto_ss.add(files('xts.c'))
  endif
elif gcrypt.found()
  crypto_ss.add(gcrypt, files('hash-gcrypt.c', 'hmac-gcrypt.c', 'pbkdf-gcrypt.c'))
elif gnutls_crypto.found()
  crypto_ss.add(gnutls, files('hash-gnutls.c', 'hmac-gnutls.c', 'pbkdf-gnutls.c'))
else
  crypto_ss.add(files('hash-glib.c', 'hmac-glib.c', 'pbkdf-stub.c'))
endif

if have_keyring
  crypto_ss.add(files('secret_keyring.c'))
endif
if have_afalg
  crypto_ss.add(if_true: files('afalg.c', 'cipher-afalg.c', 'hash-afalg.c'))
endif
crypto_ss.add(when: gnutls, if_true: files('tls-cipher-suites.c'))

util_ss.add(files(
  'aes.c',
  'clmul.c',
  'init.c',
  'sm4.c',
))
if gnutls.found()
  util_ss.add(gnutls)
endif

if gcrypt.found()
  util_ss.add(gcrypt, files('random-gcrypt.c'))
elif gnutls.found()
  util_ss.add(gnutls, files('random-gnutls.c'))
elif get_option('rng_none')
  util_ss.add(files('random-none.c'))
else
  util_ss.add(files('random-platform.c'))
endif

