# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

sw_otbn_sources += {
  'barrett384': files(
    'barrett384.s',
  ),
  'modexp': files(
    'modexp.s'
  ),
  'p256': files(
    'p256.s'
  ),
  'loop': files(
    'loop.s',
  ),
  'mul256': files(
    'mul256.s',
  ),
  'mul384': files(
    'mul384.s',
  ),
  'pseudo-ops': files(
    'pseudo-ops.s',
  ),
  'rsa_1024_dec_test': files(
    'rsa_1024_dec_test.s',
    'modexp.s',
  ),
  'rsa_1024_enc_test': files(
    'rsa_1024_enc_test.s',
    'modexp.s',
  ),
  'err_test': files(
    'err_test.s',
  ),
  'p256_curve_point_test': files(
    'p256_curve_point_test.s',
    'p256.s',
  ),
  'p256_scalar_mult_test': files(
    'p256_scalar_mult_test.s',
    'p256.s',
  ),
  'p256_ecdsa_sign_test': files(
    'p256_ecdsa_sign_test.s',
    'p256.s',
  ),
  'p256_ecdsa_verify_test': files(
    'p256_ecdsa_verify_test.s',
    'p256.s',
  ),
  'rsa': files(
   'rsa.s',
    'modexp.s',
  ),
}
