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 12# 13# Licensed under the Apache License, Version 2.0 (the "License"); you may 14# not use this file except in compliance with the License. 15# You may obtain a copy of the License at 16# 17# http://www.apache.org/licenses/LICENSE-2.0 18# 19# Unless required by applicable law or agreed to in writing, software 20# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 21# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 22# See the License for the specific language governing permissions and 23# limitations under the License. 24 25set -eu 26 27CONFIG_H='include/mbedtls/mbedtls_config.h' 28 29if [ -r $CONFIG_H ]; then :; else 30 echo "$CONFIG_H not found" >&2 31 exit 1 32fi 33 34if grep -i cmake Makefile >/dev/null; then :; else 35 echo "Needs Cmake" >&2 36 exit 1 37fi 38 39if git status | grep -F $CONFIG_H >/dev/null 2>&1; then 40 echo "mbedtls_config.h not clean" >&2 41 exit 1 42fi 43 44CONFIG_BAK=${CONFIG_H}.bak 45cp $CONFIG_H $CONFIG_BAK 46 47cat << EOF >$CONFIG_H 48#define MBEDTLS_PLATFORM_C 49#define MBEDTLS_PLATFORM_MEMORY 50#define MBEDTLS_MEMORY_BUFFER_ALLOC_C 51#define MBEDTLS_MEMORY_DEBUG 52 53#define MBEDTLS_TIMING_C 54 55#define MBEDTLS_BIGNUM_C 56#define MBEDTLS_ECP_C 57#define MBEDTLS_ASN1_PARSE_C 58#define MBEDTLS_ASN1_WRITE_C 59#define MBEDTLS_ECDSA_C 60#define MBEDTLS_ECDH_C 61 62#define MBEDTLS_ECP_DP_SECP192R1_ENABLED 63#define MBEDTLS_ECP_DP_SECP224R1_ENABLED 64#define MBEDTLS_ECP_DP_SECP256R1_ENABLED 65#define MBEDTLS_ECP_DP_SECP384R1_ENABLED 66#define MBEDTLS_ECP_DP_SECP521R1_ENABLED 67#define MBEDTLS_ECP_DP_CURVE25519_ENABLED 68 69//#define MBEDTLS_ECP_WINDOW_SIZE 6 70//#define MBEDTLS_ECP_FIXED_POINT_OPTIM 1 71EOF 72 73for F in 0 1; do 74 for W in 2 3 4 5 6; do 75 scripts/config.py set MBEDTLS_ECP_WINDOW_SIZE $W 76 scripts/config.py set MBEDTLS_ECP_FIXED_POINT_OPTIM $F 77 make benchmark >/dev/null 2>&1 78 echo "fixed point optim = $F, max window size = $W" 79 echo "--------------------------------------------" 80 programs/test/benchmark 81 done 82done 83 84# cleanup 85 86mv $CONFIG_BAK $CONFIG_H 87make clean 88