• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/sh
2
3# Measure heap usage (and performance) of ECC operations with various values of
4# the relevant tunable compile-time parameters.
5#
6# Usage (preferably on a 32-bit platform):
7# cmake -D CMAKE_BUILD_TYPE=Release .
8# scripts/ecc-heap.sh | tee ecc-heap.log
9#
10# Copyright The Mbed TLS Contributors
11# 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:
18#
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.
30#
31# **********
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# **********
51
52set -eu
53
54CONFIG_H='include/mbedtls/config.h'
55
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
75#define MBEDTLS_PLATFORM_C
76#define MBEDTLS_PLATFORM_MEMORY
77#define MBEDTLS_MEMORY_BUFFER_ALLOC_C
78#define MBEDTLS_MEMORY_DEBUG
79
80#define MBEDTLS_TIMING_C
81
82#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
88
89#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
94#define MBEDTLS_ECP_DP_CURVE25519_ENABLED
95
96#include "check_config.h"
97
98//#define MBEDTLS_ECP_WINDOW_SIZE            6
99//#define MBEDTLS_ECP_FIXED_POINT_OPTIM      1
100EOF
101
102for F in 0 1; do
103    for W in 2 3 4 5 6; do
104        scripts/config.pl set MBEDTLS_ECP_WINDOW_SIZE $W
105        scripts/config.pl set MBEDTLS_ECP_FIXED_POINT_OPTIM $F
106        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
117