cypress: Align cypress mbedtls hw accel implementation with bootutil update
Signed-off-by: Roman Okhrimenko <roman.okhrimenko@cypress.com> Signed-off-by: Roman Okhrimenko <roman.okhrimenko@infineon.com>
This commit is contained in:
parent
2f045a252e
commit
895300103d
|
@ -57,6 +57,7 @@ DEFINES_APP += -DMCUBOOT_MAX_IMG_SECTORS=$(MAX_IMG_SECTORS)
|
||||||
ifeq ($(USE_CRYPTO_HW), 1)
|
ifeq ($(USE_CRYPTO_HW), 1)
|
||||||
DEFINES_APP += -DMBEDTLS_USER_CONFIG_FILE="\"mcuboot_crypto_acc_config.h\""
|
DEFINES_APP += -DMBEDTLS_USER_CONFIG_FILE="\"mcuboot_crypto_acc_config.h\""
|
||||||
DEFINES_APP += -DCY_CRYPTO_HAL_DISABLE
|
DEFINES_APP += -DCY_CRYPTO_HAL_DISABLE
|
||||||
|
DEFINES_APP += -DCY_MBEDTLS_HW_ACCELERATION
|
||||||
endif
|
endif
|
||||||
# Collect MCUBoot sourses
|
# Collect MCUBoot sourses
|
||||||
SOURCES_MCUBOOT := $(wildcard $(CURDIR)/../bootutil/src/*.c)
|
SOURCES_MCUBOOT := $(wildcard $(CURDIR)/../bootutil/src/*.c)
|
||||||
|
|
|
@ -36,7 +36,6 @@
|
||||||
|
|
||||||
/* Uncomment for ECDSA signatures using curve P-256. */
|
/* Uncomment for ECDSA signatures using curve P-256. */
|
||||||
#define MCUBOOT_SIGN_EC256
|
#define MCUBOOT_SIGN_EC256
|
||||||
#define NUM_ECC_BYTES (256 / 8) // P-256 curve size in bytes, rnok: to make compilable
|
|
||||||
|
|
||||||
// #define MCUBOOT_SIGN_EC
|
// #define MCUBOOT_SIGN_EC
|
||||||
|
|
||||||
|
|
|
@ -1,166 +0,0 @@
|
||||||
/*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. The ASF licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* \copyright
|
|
||||||
*
|
|
||||||
* (c) 2019, Cypress Semiconductor Corporation
|
|
||||||
* or a subsidiary of Cypress Semiconductor Corporation. All rights
|
|
||||||
* reserved.
|
|
||||||
*
|
|
||||||
* This software is a port of the open source MCUBoot project.
|
|
||||||
*
|
|
||||||
* This file was modified to fit PSoC6-based MCUBoot applications.
|
|
||||||
*
|
|
||||||
* Portions of this software, including source code, documentation and related
|
|
||||||
* materials ("Software"), are owned by Cypress Semiconductor
|
|
||||||
* Corporation or one of its subsidiaries ("Cypress") and is protected by
|
|
||||||
* and subject to worldwide patent protection (United States and foreign),
|
|
||||||
* United States copyright laws and international treaty provisions.
|
|
||||||
* Therefore, you may use this Software only as provided in the license
|
|
||||||
* agreement accompanying the software package from which you
|
|
||||||
* obtained this Software ("EULA").
|
|
||||||
*
|
|
||||||
* If no EULA applies, Cypress hereby grants you a personal, non-
|
|
||||||
* exclusive, non-transferable license to copy, modify, and compile the
|
|
||||||
* Software source code solely for use in connection with Cypress's
|
|
||||||
* integrated circuit products. Any reproduction, modification, translation,
|
|
||||||
* compilation, or representation of this Software except as specified
|
|
||||||
* above is prohibited without the express written permission of Cypress.
|
|
||||||
*
|
|
||||||
* Disclaimer: THIS SOFTWARE IS PROVIDED AS-IS, WITH NO
|
|
||||||
* WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING,
|
|
||||||
* BUT NOT LIMITED TO, NONINFRINGEMENT, IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
||||||
* PARTICULAR PURPOSE. Cypress reserves the right to make
|
|
||||||
* changes to the Software without notice. Cypress does not assume any
|
|
||||||
* liability arising out of the application or use of the Software or any
|
|
||||||
* product or circuit described in the Software. Cypress does not
|
|
||||||
* authorize its products for use in any products where a malfunction or
|
|
||||||
* failure of the Cypress product may reasonably be expected to result in
|
|
||||||
* significant property damage, injury or death ("High Risk Product"). By
|
|
||||||
* including Cypress's product in a High Risk Product, the manufacturer
|
|
||||||
* of such system or application assumes all risk of such use and in doing
|
|
||||||
* so agrees to indemnify Cypress against all liability.
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
|
|
||||||
#include "mcuboot_config/mcuboot_config.h"
|
|
||||||
|
|
||||||
#ifdef MCUBOOT_SIGN_EC256
|
|
||||||
|
|
||||||
#include "bootutil/sign_key.h"
|
|
||||||
|
|
||||||
#ifdef MCUBOOT_USE_MBED_TLS
|
|
||||||
|
|
||||||
#include "mbedtls/oid.h"
|
|
||||||
#include "mbedtls/asn1.h"
|
|
||||||
#include "mbedtls/ecdsa.h"
|
|
||||||
|
|
||||||
#include "bootutil_priv.h"
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Declaring these like this adds NULL termination.
|
|
||||||
*/
|
|
||||||
static const uint8_t ec_pubkey_oid[] = MBEDTLS_OID_EC_ALG_UNRESTRICTED;
|
|
||||||
static const uint8_t ec_secp256r1_oid[] = MBEDTLS_OID_EC_GRP_SECP256R1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Parse the public key used for signing.
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
bootutil_parse_eckey(mbedtls_ecdsa_context *ctx, uint8_t **p, uint8_t *end)
|
|
||||||
{
|
|
||||||
size_t len;
|
|
||||||
mbedtls_asn1_buf alg;
|
|
||||||
mbedtls_asn1_buf param;
|
|
||||||
|
|
||||||
if (mbedtls_asn1_get_tag(p, end, &len,
|
|
||||||
MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
end = *p + len;
|
|
||||||
|
|
||||||
if (mbedtls_asn1_get_alg(p, end, &alg, ¶m)) {
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
if (alg.len != sizeof(ec_pubkey_oid) - 1 ||
|
|
||||||
memcmp(alg.p, ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
|
|
||||||
return -3;
|
|
||||||
}
|
|
||||||
if (param.len != sizeof(ec_secp256r1_oid) - 1||
|
|
||||||
memcmp(param.p, ec_secp256r1_oid, sizeof(ec_secp256r1_oid) - 1)) {
|
|
||||||
return -4;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mbedtls_ecp_group_load(&ctx->grp, MBEDTLS_ECP_DP_SECP256R1)) {
|
|
||||||
return -5;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mbedtls_asn1_get_bitstring_null(p, end, &len)) {
|
|
||||||
return -6;
|
|
||||||
}
|
|
||||||
if (*p + len != end) {
|
|
||||||
return -7;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mbedtls_ecp_point_read_binary(&ctx->grp, &ctx->Q, *p, end - *p)) {
|
|
||||||
return -8;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mbedtls_ecp_check_pubkey(&ctx->grp, &ctx->Q)) {
|
|
||||||
return -9;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
bootutil_verify_sig(uint8_t *hash, uint32_t hlen, uint8_t *sig, size_t slen, uint8_t key_id)
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
uint8_t *cp;
|
|
||||||
uint8_t *end;
|
|
||||||
mbedtls_ecdsa_context ctx;
|
|
||||||
|
|
||||||
mbedtls_ecdsa_init(&ctx);
|
|
||||||
|
|
||||||
cp = (uint8_t *)bootutil_keys[key_id].key;
|
|
||||||
end = cp + *bootutil_keys[key_id].len;
|
|
||||||
|
|
||||||
rc = bootutil_parse_eckey(&ctx, &cp, end);
|
|
||||||
if (rc) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (sig[slen - 1] == '\0') {
|
|
||||||
slen--;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = mbedtls_ecdsa_read_signature(&ctx, hash, hlen, sig, slen);
|
|
||||||
|
|
||||||
mbedtls_ecdsa_free(&ctx);
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* MCUBOOT_USE_MBED_TLS */
|
|
||||||
|
|
||||||
#endif /* MCUBOOT_SIGN_EC256 */
|
|
Loading…
Reference in New Issue