# Copyright (c) 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved

#
# Common list of objects files we want to include
#
LIBTOMCRYPT_OBJECTS += \
    src/ciphers/aes/aes.o \
    src/hashes/sha2/sha256.o \
    src/hashes/chc/chc.o \
    src/hashes/helper/hash_file.o \
    src/hashes/helper/hash_filehandle.o \
    src/hashes/helper/hash_memory.o \
    src/hashes/helper/hash_memory_multi.o \
    src/mac/f9/f9_done.o \
    src/mac/f9/f9_file.o \
    src/mac/f9/f9_init.o \
    src/mac/f9/f9_memory.o \
    src/mac/f9/f9_memory_multi.o \
    src/mac/f9/f9_process.o \
    src/mac/f9/f9_test.o \
    src/mac/hmac/hmac_done.o \
    src/mac/hmac/hmac_file.o \
    src/mac/hmac/hmac_init.o \
    src/mac/hmac/hmac_memory.o \
    src/mac/hmac/hmac_memory_multi.o \
    src/mac/hmac/hmac_process.o \
    src/mac/hmac/hmac_test.o \
    src/mac/omac/omac_done.o \
    src/mac/omac/omac_file.o \
    src/mac/omac/omac_init.o \
    src/mac/omac/omac_memory.o \
    src/mac/omac/omac_memory_multi.o \
    src/mac/omac/omac_process.o \
    src/mac/omac/omac_test.o \
    src/mac/pelican/pelican.o \
    src/mac/pelican/pelican_memory.o \
    src/mac/pelican/pelican_test.o \
    src/mac/pmac/pmac_done.o \
    src/mac/pmac/pmac_file.o \
    src/mac/pmac/pmac_init.o \
    src/mac/pmac/pmac_memory.o \
    src/mac/pmac/pmac_memory_multi.o \
    src/mac/pmac/pmac_ntz.o \
    src/mac/pmac/pmac_process.o \
    src/mac/pmac/pmac_shift_xor.o \
    src/mac/pmac/pmac_test.o \
    src/mac/xcbc/xcbc_done.o \
    src/mac/xcbc/xcbc_file.o \
    src/mac/xcbc/xcbc_init.o \
    src/mac/xcbc/xcbc_memory.o \
    src/mac/xcbc/xcbc_memory_multi.o \
    src/mac/xcbc/xcbc_process.o \
    src/mac/xcbc/xcbc_test.o \
    src/math/fp/ltc_ecc_fp_mulmod.o \
    src/math/gmp_desc.o \
    src/math/ltm_desc.o \
    src/math/multi.o \
    src/math/rand_bn.o \
    src/math/rand_prime.o \
    src/math/tfm_desc.o \
    src/misc/adler32.o \
    src/misc/base64/base64_decode.o \
    src/misc/base64/base64_encode.o \
    src/misc/burn_stack.o \
    src/misc/crc32.o \
    src/misc/crypt/crypt_argchk.o \
    src/misc/crypt/crypt.o \
    src/misc/crypt/crypt_cipher_descriptor.o \
    src/misc/crypt/crypt_cipher_is_valid.o \
    src/misc/crypt/crypt_constants.o \
    src/misc/crypt/crypt_find_cipher_any.o \
    src/misc/crypt/crypt_find_cipher.o \
    src/misc/crypt/crypt_find_cipher_id.o \
    src/misc/crypt/crypt_find_hash_any.o \
    src/misc/crypt/crypt_find_hash.o \
    src/misc/crypt/crypt_find_hash_id.o \
    src/misc/crypt/crypt_find_hash_oid.o \
    src/misc/crypt/crypt_find_prng.o \
    src/misc/crypt/crypt_fsa.o \
    src/misc/crypt/crypt_hash_descriptor.o \
    src/misc/crypt/crypt_hash_is_valid.o \
    src/misc/crypt/crypt_inits.o \
    src/misc/crypt/crypt_ltc_mp_descriptor.o \
    src/misc/crypt/crypt_prng_descriptor.o \
    src/misc/crypt/crypt_prng_is_valid.o \
    src/misc/crypt/crypt_register_cipher.o \
    src/misc/crypt/crypt_register_hash.o \
    src/misc/crypt/crypt_register_prng.o \
    src/misc/crypt/crypt_sizes.o \
    src/misc/crypt/crypt_unregister_cipher.o \
    src/misc/crypt/crypt_unregister_hash.o \
    src/misc/crypt/crypt_unregister_prng.o \
    src/misc/error_to_string.o \
    src/misc/hkdf/hkdf.o \
    src/misc/hkdf/hkdf_test.o \
    src/misc/mem_neq.o \
    src/misc/pkcs5/pkcs_5_1.o \
    src/misc/pkcs5/pkcs_5_2.o \
    src/misc/pkcs5/pkcs_5_test.o \
    src/misc/pk_get_oid.o \
    src/misc/zeromem.o \
    src/pk/asn1/der/bit/der_decode_bit_string.o \
    src/pk/asn1/der/bit/der_decode_raw_bit_string.o \
    src/pk/asn1/der/bit/der_encode_bit_string.o \
    src/pk/asn1/der/bit/der_encode_raw_bit_string.o \
    src/pk/asn1/der/bit/der_length_bit_string.o \
    src/pk/asn1/der/boolean/der_decode_boolean.o \
    src/pk/asn1/der/boolean/der_encode_boolean.o \
    src/pk/asn1/der/boolean/der_length_boolean.o \
    src/pk/asn1/der/choice/der_decode_choice.o \
    src/pk/asn1/der/ia5/der_decode_ia5_string.o \
    src/pk/asn1/der/ia5/der_encode_ia5_string.o \
    src/pk/asn1/der/ia5/der_length_ia5_string.o \
    src/pk/asn1/der/integer/der_decode_integer.o \
    src/pk/asn1/der/integer/der_encode_integer.o \
    src/pk/asn1/der/integer/der_length_integer.o \
    src/pk/asn1/der/object_identifier/der_decode_object_identifier.o \
    src/pk/asn1/der/object_identifier/der_encode_object_identifier.o \
    src/pk/asn1/der/object_identifier/der_length_object_identifier.o \
    src/pk/asn1/der/octet/der_decode_octet_string.o \
    src/pk/asn1/der/octet/der_encode_octet_string.o \
    src/pk/asn1/der/octet/der_length_octet_string.o \
    src/pk/asn1/der/printable_string/der_decode_printable_string.o \
    src/pk/asn1/der/printable_string/der_encode_printable_string.o \
    src/pk/asn1/der/printable_string/der_length_printable_string.o \
    src/pk/asn1/der/sequence/der_decode_sequence_ex.o \
    src/pk/asn1/der/sequence/der_decode_sequence_flexi.o \
    src/pk/asn1/der/sequence/der_decode_sequence_multi.o \
    src/pk/asn1/der/sequence/der_decode_subject_public_key_info.o \
    src/pk/asn1/der/sequence/der_encode_sequence_ex.o \
    src/pk/asn1/der/sequence/der_encode_sequence_multi.o \
    src/pk/asn1/der/sequence/der_encode_subject_public_key_info.o \
    src/pk/asn1/der/sequence/der_length_sequence.o \
    src/pk/asn1/der/sequence/der_sequence_free.o \
    src/pk/asn1/der/set/der_encode_set.o \
    src/pk/asn1/der/set/der_encode_setof.o \
    src/pk/asn1/der/short_integer/der_decode_short_integer.o \
    src/pk/asn1/der/short_integer/der_encode_short_integer.o \
    src/pk/asn1/der/short_integer/der_length_short_integer.o \
    src/pk/asn1/der/teletex_string/der_decode_teletex_string.o \
    src/pk/asn1/der/teletex_string/der_length_teletex_string.o \
    src/pk/asn1/der/utctime/der_decode_utctime.o \
    src/pk/asn1/der/utctime/der_encode_utctime.o \
    src/pk/asn1/der/utctime/der_length_utctime.o \
    src/pk/asn1/der/utf8/der_decode_utf8_string.o \
    src/pk/asn1/der/utf8/der_encode_utf8_string.o \
    src/pk/asn1/der/utf8/der_length_utf8_string.o \
    src/pk/pkcs1/pkcs_1_i2osp.o \
    src/pk/pkcs1/pkcs_1_mgf1.o \
    src/pk/pkcs1/pkcs_1_oaep_decode.o \
    src/pk/pkcs1/pkcs_1_oaep_encode.o \
    src/pk/pkcs1/pkcs_1_os2ip.o \
    src/pk/pkcs1/pkcs_1_pss_decode.o \
    src/pk/pkcs1/pkcs_1_pss_encode.o \
    src/pk/pkcs1/pkcs_1_v1_5_decode.o \
    src/pk/pkcs1/pkcs_1_v1_5_encode.o \
    src/pk/rsa/rsa_decrypt_key.o \
    src/pk/rsa/rsa_encrypt_key.o \
    src/pk/rsa/rsa_export.o \
    src/pk/rsa/rsa_exptmod.o \
    src/pk/rsa/rsa_free.o \
    src/pk/rsa/rsa_get_size.o \
    src/pk/rsa/rsa_import.o \
    src/pk/rsa/rsa_make_key.o \
    src/pk/rsa/rsa_sign_hash.o \
    src/pk/rsa/rsa_sign_saltlen_get.o \
    src/pk/rsa/rsa_verify_hash.o \
    src/prngs/fortuna.o \
    src/prngs/rc4.o \
    src/prngs/rng_get_bytes.o \
    src/prngs/rng_make_prng.o \
    src/prngs/sober128.o \
    src/prngs/sprng.o \
    src/prngs/yarrow.o \
    src/pk/ecc/ltc_ecc_is_valid_idx.o \
    src/pk/ecc/ltc_ecc_map.o \
    src/pk/ecc/ltc_ecc_mul2add.o \
    src/pk/ecc/ltc_ecc_mulmod.o \
    src/pk/ecc/ltc_ecc_mulmod_timing.o \
    src/pk/ecc/ltc_ecc_points.o \
    src/pk/ecc/ltc_ecc_projective_add_point.o \
    src/pk/ecc/ltc_ecc_projective_dbl_point.o

LIBTOMCRYPT_CFLAGS += \
    -Os -DLTC_SOURCE \
    -DLTC_NO_FILE \
    -DLTC_NO_RAND \
    -DUSE_LTM -DLTM_DESC \
    -D_WCHAR_T -DLTC_CLEAN_STACK \
    -ffunction-sections -fdata-sections

LIBTOMCRYPT_HEADERS += \
    -I$(UFBL_PATH)/features/libtomcrypt/ \
    -I$(UFBL_PATH)/features/libtomcrypt/src \
    -I$(UFBL_PATH)/features/libtomcrypt/src/headers \
    -I$(UFBL_PATH)/features/libtommath/src

# Begin rules for kbuild U-Boot
ifeq (yes,$(strip $(UFBL_UBOOT_IS_KBUILD)))

ccflags-y += $(LIBTOMCRYPT_CFLAGS) $(LIBTOMCRYPT_HEADERS)
obj-y += $(LIBTOMCRYPT_OBJECTS)

else # default rules

include $(TOPDIR)/config.mk

LIBTOMCRYPT_LIB = $(obj)libtomcrypt.o

CFLAGS += \
    $(LIBTOMCRYPT_CFLAGS) \
    $(LIBTOMCRYPT_HEADERS)

COBJS  := $(LIBTOMCRYPT_OBJECTS)
SRCS   := $(COBJS:.o=.c)
OBJS   := $(addprefix $(obj),$(COBJS))

$(LIBTOMCRYPT_LIB): $(OBJS)
	$(call cmd_link_o_target, $(OBJS))

endif # (yes,$(strip $(UFBL_UBOOT_IS_KBUILD)))
