blob: 097f36bac9b8c4638efec0125b56b43702d7c0e8 [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útib7246ad2020-05-26 00:33:31 +02009#
Bence Szépkúti44bfbe32020-08-19 16:54:51 +020010# Copyright The Mbed TLS Contributors
Bence Szépkúti4e9f7122020-06-05 13:02:18 +020011# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
12#
13# This file is provided under the Apache License 2.0, or the
14# GNU General Public License v2.0 or later.
15#
16# **********
17# Apache License 2.0:
Bence Szépkúti09b4f192020-05-26 01:54:15 +020018#
19# Licensed under the Apache License, Version 2.0 (the "License"); you may
20# not use this file except in compliance with the License.
21# You may obtain a copy of the License at
22#
23# http://www.apache.org/licenses/LICENSE-2.0
24#
25# Unless required by applicable law or agreed to in writing, software
26# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
27# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28# See the License for the specific language governing permissions and
29# limitations under the License.
Bence Szépkútib7246ad2020-05-26 00:33:31 +020030#
Bence Szépkúti4e9f7122020-06-05 13:02:18 +020031# **********
32#
33# **********
34# GNU General Public License v2.0 or later:
35#
36# This program is free software; you can redistribute it and/or modify
37# it under the terms of the GNU General Public License as published by
38# the Free Software Foundation; either version 2 of the License, or
39# (at your option) any later version.
40#
41# This program is distributed in the hope that it will be useful,
42# but WITHOUT ANY WARRANTY; without even the implied warranty of
43# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
44# GNU General Public License for more details.
45#
46# You should have received a copy of the GNU General Public License along
47# with this program; if not, write to the Free Software Foundation, Inc.,
48# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
49#
50# **********
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010051
52set -eu
53
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000054CONFIG_H='include/mbedtls/config.h'
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010055
56if [ -r $CONFIG_H ]; then :; else
57 echo "$CONFIG_H not found" >&2
58 exit 1
59fi
60
61if grep -i cmake Makefile >/dev/null; then :; else
62 echo "Needs Cmake" >&2
63 exit 1
64fi
65
66if git status | grep -F $CONFIG_H >/dev/null 2>&1; then
67 echo "config.h not clean" >&2
68 exit 1
69fi
70
71CONFIG_BAK=${CONFIG_H}.bak
72cp $CONFIG_H $CONFIG_BAK
73
74cat << EOF >$CONFIG_H
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020075#define MBEDTLS_PLATFORM_C
76#define MBEDTLS_PLATFORM_MEMORY
77#define MBEDTLS_MEMORY_BUFFER_ALLOC_C
78#define MBEDTLS_MEMORY_DEBUG
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010079
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020080#define MBEDTLS_TIMING_C
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010081
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020082#define MBEDTLS_BIGNUM_C
83#define MBEDTLS_ECP_C
84#define MBEDTLS_ASN1_PARSE_C
85#define MBEDTLS_ASN1_WRITE_C
86#define MBEDTLS_ECDSA_C
87#define MBEDTLS_ECDH_C
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010088
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020089#define MBEDTLS_ECP_DP_SECP192R1_ENABLED
90#define MBEDTLS_ECP_DP_SECP224R1_ENABLED
91#define MBEDTLS_ECP_DP_SECP256R1_ENABLED
92#define MBEDTLS_ECP_DP_SECP384R1_ENABLED
93#define MBEDTLS_ECP_DP_SECP521R1_ENABLED
Manuel Pégourié-Gonnard07894332015-06-23 00:18:41 +020094#define MBEDTLS_ECP_DP_CURVE25519_ENABLED
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +010095
96#include "check_config.h"
97
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020098//#define MBEDTLS_ECP_WINDOW_SIZE 6
99//#define MBEDTLS_ECP_FIXED_POINT_OPTIM 1
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +0100100EOF
101
102for F in 0 1; do
103 for W in 2 3 4 5 6; do
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200104 scripts/config.pl set MBEDTLS_ECP_WINDOW_SIZE $W
105 scripts/config.pl set MBEDTLS_ECP_FIXED_POINT_OPTIM $F
Manuel Pégourié-Gonnard500de6e2014-12-19 18:06:47 +0100106 make benchmark >/dev/null 2>&1
107 echo "fixed point optim = $F, max window size = $W"
108 echo "--------------------------------------------"
109 programs/test/benchmark
110 done
111done
112
113# cleanup
114
115mv $CONFIG_BAK $CONFIG_H
116make clean