1*62c56f98SSadaf Ebrahimi#!/bin/sh 2*62c56f98SSadaf Ebrahimi 3*62c56f98SSadaf Ebrahimi# Measure heap usage (and performance) of ECC operations with various values of 4*62c56f98SSadaf Ebrahimi# the relevant tunable compile-time parameters. 5*62c56f98SSadaf Ebrahimi# 6*62c56f98SSadaf Ebrahimi# Usage (preferably on a 32-bit platform): 7*62c56f98SSadaf Ebrahimi# cmake -D CMAKE_BUILD_TYPE=Release . 8*62c56f98SSadaf Ebrahimi# scripts/ecc-heap.sh | tee ecc-heap.log 9*62c56f98SSadaf Ebrahimi# 10*62c56f98SSadaf Ebrahimi# Copyright The Mbed TLS Contributors 11*62c56f98SSadaf Ebrahimi# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 12*62c56f98SSadaf Ebrahimi 13*62c56f98SSadaf Ebrahimiset -eu 14*62c56f98SSadaf Ebrahimi 15*62c56f98SSadaf EbrahimiCONFIG_H='include/mbedtls/mbedtls_config.h' 16*62c56f98SSadaf Ebrahimi 17*62c56f98SSadaf Ebrahimiif [ -r $CONFIG_H ]; then :; else 18*62c56f98SSadaf Ebrahimi echo "$CONFIG_H not found" >&2 19*62c56f98SSadaf Ebrahimi exit 1 20*62c56f98SSadaf Ebrahimifi 21*62c56f98SSadaf Ebrahimi 22*62c56f98SSadaf Ebrahimiif grep -i cmake Makefile >/dev/null; then :; else 23*62c56f98SSadaf Ebrahimi echo "Needs Cmake" >&2 24*62c56f98SSadaf Ebrahimi exit 1 25*62c56f98SSadaf Ebrahimifi 26*62c56f98SSadaf Ebrahimi 27*62c56f98SSadaf Ebrahimiif git status | grep -F $CONFIG_H >/dev/null 2>&1; then 28*62c56f98SSadaf Ebrahimi echo "mbedtls_config.h not clean" >&2 29*62c56f98SSadaf Ebrahimi exit 1 30*62c56f98SSadaf Ebrahimifi 31*62c56f98SSadaf Ebrahimi 32*62c56f98SSadaf EbrahimiCONFIG_BAK=${CONFIG_H}.bak 33*62c56f98SSadaf Ebrahimicp $CONFIG_H $CONFIG_BAK 34*62c56f98SSadaf Ebrahimi 35*62c56f98SSadaf Ebrahimicat << EOF >$CONFIG_H 36*62c56f98SSadaf Ebrahimi#define MBEDTLS_PLATFORM_C 37*62c56f98SSadaf Ebrahimi#define MBEDTLS_PLATFORM_MEMORY 38*62c56f98SSadaf Ebrahimi#define MBEDTLS_MEMORY_BUFFER_ALLOC_C 39*62c56f98SSadaf Ebrahimi#define MBEDTLS_MEMORY_DEBUG 40*62c56f98SSadaf Ebrahimi 41*62c56f98SSadaf Ebrahimi#define MBEDTLS_TIMING_C 42*62c56f98SSadaf Ebrahimi 43*62c56f98SSadaf Ebrahimi#define MBEDTLS_BIGNUM_C 44*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_C 45*62c56f98SSadaf Ebrahimi#define MBEDTLS_ASN1_PARSE_C 46*62c56f98SSadaf Ebrahimi#define MBEDTLS_ASN1_WRITE_C 47*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECDSA_C 48*62c56f98SSadaf Ebrahimi#define MBEDTLS_SHA256_C // ECDSA benchmark needs it 49*62c56f98SSadaf Ebrahimi#define MBEDTLS_SHA224_C // SHA256 requires this for now 50*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECDH_C 51*62c56f98SSadaf Ebrahimi 52*62c56f98SSadaf Ebrahimi// NIST curves >= 256 bits 53*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_SECP256R1_ENABLED 54*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_SECP384R1_ENABLED 55*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_SECP521R1_ENABLED 56*62c56f98SSadaf Ebrahimi// SECP "koblitz-like" curve >= 256 bits 57*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_SECP256K1_ENABLED 58*62c56f98SSadaf Ebrahimi// Brainpool curves (no specialised "mod p" routine) 59*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_BP256R1_ENABLED 60*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_BP384R1_ENABLED 61*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_BP512R1_ENABLED 62*62c56f98SSadaf Ebrahimi// Montgomery curves 63*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_CURVE25519_ENABLED 64*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_CURVE448_ENABLED 65*62c56f98SSadaf Ebrahimi 66*62c56f98SSadaf Ebrahimi#define MBEDTLS_HAVE_ASM // just make things a bit faster 67*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_NIST_OPTIM // faster and less allocations 68*62c56f98SSadaf Ebrahimi 69*62c56f98SSadaf Ebrahimi//#define MBEDTLS_ECP_WINDOW_SIZE 4 70*62c56f98SSadaf Ebrahimi//#define MBEDTLS_ECP_FIXED_POINT_OPTIM 1 71*62c56f98SSadaf EbrahimiEOF 72*62c56f98SSadaf Ebrahimi 73*62c56f98SSadaf Ebrahimifor F in 0 1; do 74*62c56f98SSadaf Ebrahimi for W in 2 3 4; do 75*62c56f98SSadaf Ebrahimi scripts/config.py set MBEDTLS_ECP_WINDOW_SIZE $W 76*62c56f98SSadaf Ebrahimi scripts/config.py set MBEDTLS_ECP_FIXED_POINT_OPTIM $F 77*62c56f98SSadaf Ebrahimi make benchmark >/dev/null 2>&1 78*62c56f98SSadaf Ebrahimi echo "fixed point optim = $F, max window size = $W" 79*62c56f98SSadaf Ebrahimi echo "--------------------------------------------" 80*62c56f98SSadaf Ebrahimi programs/test/benchmark ecdh ecdsa 81*62c56f98SSadaf Ebrahimi done 82*62c56f98SSadaf Ebrahimidone 83*62c56f98SSadaf Ebrahimi 84*62c56f98SSadaf Ebrahimi# cleanup 85*62c56f98SSadaf Ebrahimi 86*62c56f98SSadaf Ebrahimimv $CONFIG_BAK $CONFIG_H 87*62c56f98SSadaf Ebrahimimake clean 88