blob: 3eb2ff44920c1fc8535ccc55c3b47a7ba1175d07 [file] [log] [blame]
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +01001#!/bin/sh
2
Paul Bakker6152b022015-04-14 15:00:09 +02003# Measure heap usage (and performance) of ECC operations with various values of
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +01004# the relevant tunable compile-time parameters.
Manuel Pégourié-Gonnard8b7d7d62015-02-05 10:00:30 +00005#
6# Usage (preferably on a 32-bit platform):
7# cmake -D CMAKE_BUILD_TYPE=Release .
8# scripts/ecc-heap.sh | tee ecc-heap.log
Bence Szépkúti700ee442020-05-26 00:33:31 +02009#
Bence Szépkúti1e148272020-08-07 13:07:28 +020010# Copyright The Mbed TLS Contributors
Dave Rodgman16799db2023-11-02 19:47:20 +000011# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010012
13set -eu
14
Bence Szépkútibb0cfeb2021-05-28 09:42:25 +020015CONFIG_H='include/mbedtls/mbedtls_config.h'
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010016
17if [ -r $CONFIG_H ]; then :; else
18 echo "$CONFIG_H not found" >&2
19 exit 1
20fi
21
22if grep -i cmake Makefile >/dev/null; then :; else
23 echo "Needs Cmake" >&2
24 exit 1
25fi
26
27if git status | grep -F $CONFIG_H >/dev/null 2>&1; then
Bence Szépkútibb0cfeb2021-05-28 09:42:25 +020028 echo "mbedtls_config.h not clean" >&2
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010029 exit 1
30fi
31
32CONFIG_BAK=${CONFIG_H}.bak
33cp $CONFIG_H $CONFIG_BAK
34
35cat << EOF >$CONFIG_H
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020036#define MBEDTLS_PLATFORM_C
37#define MBEDTLS_PLATFORM_MEMORY
38#define MBEDTLS_MEMORY_BUFFER_ALLOC_C
39#define MBEDTLS_MEMORY_DEBUG
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010040
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020041#define MBEDTLS_TIMING_C
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010042
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020043#define MBEDTLS_BIGNUM_C
44#define MBEDTLS_ECP_C
45#define MBEDTLS_ASN1_PARSE_C
46#define MBEDTLS_ASN1_WRITE_C
47#define MBEDTLS_ECDSA_C
Manuel Pégourié-Gonnard4c5f4b22022-01-05 10:09:49 +010048#define MBEDTLS_SHA256_C // ECDSA benchmark needs it
49#define MBEDTLS_SHA224_C // SHA256 requires this for now
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020050#define MBEDTLS_ECDH_C
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010051
Manuel Pégourié-Gonnard7c514512022-01-06 12:20:48 +010052// NIST curves >= 256 bits
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020053#define MBEDTLS_ECP_DP_SECP256R1_ENABLED
54#define MBEDTLS_ECP_DP_SECP384R1_ENABLED
55#define MBEDTLS_ECP_DP_SECP521R1_ENABLED
Manuel Pégourié-Gonnard7c514512022-01-06 12:20:48 +010056// SECP "koblitz-like" curve >= 256 bits
57#define MBEDTLS_ECP_DP_SECP256K1_ENABLED
58// Brainpool curves (no specialised "mod p" routine)
59#define MBEDTLS_ECP_DP_BP256R1_ENABLED
60#define MBEDTLS_ECP_DP_BP384R1_ENABLED
61#define MBEDTLS_ECP_DP_BP512R1_ENABLED
62// Montgomery curves
Manuel Pégourié-Gonnard07894332015-06-23 00:18:41 +020063#define MBEDTLS_ECP_DP_CURVE25519_ENABLED
Manuel Pégourié-Gonnard7c514512022-01-06 12:20:48 +010064#define MBEDTLS_ECP_DP_CURVE448_ENABLED
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010065
Manuel Pégourié-Gonnard3ff8c9e2022-01-05 12:01:38 +010066#define MBEDTLS_HAVE_ASM // just make things a bit faster
67#define MBEDTLS_ECP_NIST_OPTIM // faster and less allocations
68
69//#define MBEDTLS_ECP_WINDOW_SIZE 4
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020070//#define MBEDTLS_ECP_FIXED_POINT_OPTIM 1
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010071EOF
72
73for F in 0 1; do
Manuel Pégourié-Gonnard7c514512022-01-06 12:20:48 +010074 for W in 2 3 4; do
Gilles Peskine5d46f6a2019-07-27 23:52:53 +020075 scripts/config.py set MBEDTLS_ECP_WINDOW_SIZE $W
76 scripts/config.py set MBEDTLS_ECP_FIXED_POINT_OPTIM $F
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010077 make benchmark >/dev/null 2>&1
78 echo "fixed point optim = $F, max window size = $W"
79 echo "--------------------------------------------"
Manuel Pégourié-Gonnard4c5f4b22022-01-05 10:09:49 +010080 programs/test/benchmark ecdh ecdsa
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010081 done
82done
83
84# cleanup
85
86mv $CONFIG_BAK $CONFIG_H
87make clean