blob: 6caaea65e717dda2a8c0a2fe0ddaa0bbbb2685bf [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 Rodgman7ff79652023-11-03 12:04:52 +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
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000015CONFIG_H='include/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
28 echo "config.h not clean" >&2
29 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
Manuel Pégourié-Gonnardb9dee212022-04-15 09:16:33 +020045#define MBEDTLS_ECP_NO_INTERNAL_RNG
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020046#define MBEDTLS_ASN1_PARSE_C
47#define MBEDTLS_ASN1_WRITE_C
48#define MBEDTLS_ECDSA_C
Manuel Pégourié-Gonnard8c683f92022-01-05 10:09:49 +010049#define MBEDTLS_SHA256_C // ECDSA benchmark needs it
50#define MBEDTLS_SHA224_C // SHA256 requires this for now
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020051#define MBEDTLS_ECDH_C
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010052
Manuel Pégourié-Gonnardd0211972022-01-06 12:20:48 +010053// NIST curves >= 256 bits
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020054#define MBEDTLS_ECP_DP_SECP256R1_ENABLED
55#define MBEDTLS_ECP_DP_SECP384R1_ENABLED
56#define MBEDTLS_ECP_DP_SECP521R1_ENABLED
Manuel Pégourié-Gonnardd0211972022-01-06 12:20:48 +010057// SECP "koblitz-like" curve >= 256 bits
58#define MBEDTLS_ECP_DP_SECP256K1_ENABLED
59// Brainpool curves (no specialised "mod p" routine)
60#define MBEDTLS_ECP_DP_BP256R1_ENABLED
61#define MBEDTLS_ECP_DP_BP384R1_ENABLED
62#define MBEDTLS_ECP_DP_BP512R1_ENABLED
63// Montgomery curves
Manuel Pégourié-Gonnard07894332015-06-23 00:18:41 +020064#define MBEDTLS_ECP_DP_CURVE25519_ENABLED
Manuel Pégourié-Gonnardd0211972022-01-06 12:20:48 +010065#define MBEDTLS_ECP_DP_CURVE448_ENABLED
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010066
67#include "check_config.h"
68
Manuel Pégourié-Gonnard4ecee832022-01-05 12:01:38 +010069#define MBEDTLS_HAVE_ASM // just make things a bit faster
70#define MBEDTLS_ECP_NIST_OPTIM // faster and less allocations
71
72//#define MBEDTLS_ECP_WINDOW_SIZE 4
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020073//#define MBEDTLS_ECP_FIXED_POINT_OPTIM 1
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010074EOF
75
76for F in 0 1; do
Manuel Pégourié-Gonnardd0211972022-01-06 12:20:48 +010077 for W in 2 3 4; do
Gilles Peskine5d46f6a2019-07-27 23:52:53 +020078 scripts/config.py set MBEDTLS_ECP_WINDOW_SIZE $W
79 scripts/config.py set MBEDTLS_ECP_FIXED_POINT_OPTIM $F
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010080 make benchmark >/dev/null 2>&1
81 echo "fixed point optim = $F, max window size = $W"
82 echo "--------------------------------------------"
Manuel Pégourié-Gonnard8c683f92022-01-05 10:09:49 +010083 programs/test/benchmark ecdh ecdsa
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010084 done
85done
86
87# cleanup
88
89mv $CONFIG_BAK $CONFIG_H
90make clean