1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Copyright (c) 2020, Alexandru Gagniuc <mr.nuke.me@gmail.com>. 4 */ 5 6 #ifndef _ECDSA_H 7 #define _ECDSA_H 8 9 #include <errno.h> 10 #include <image.h> 11 #include <linux/kconfig.h> 12 13 /** 14 * crypto_algo API impementation for ECDSA; 15 * @see "struct crypto_algo" 16 * @{ 17 */ 18 /** 19 * sign() - calculate and return signature for given input data 20 * 21 * @info: Specifies key and FIT information 22 * @data: Pointer to the input data 23 * @data_len: Data length 24 * @sigp: Set to an allocated buffer holding the signature 25 * @sig_len: Set to length of the calculated hash 26 * 27 * This computes input data signature according to selected algorithm. 28 * Resulting signature value is placed in an allocated buffer, the 29 * pointer is returned as *sigp. The length of the calculated 30 * signature is returned via the sig_len pointer argument. The caller 31 * should free *sigp. 32 * 33 * @return: 0, on success, -ve on error 34 */ 35 int ecdsa_sign(struct image_sign_info *info, const struct image_region region[], 36 int region_count, uint8_t **sigp, uint *sig_len); 37 38 /** 39 * add_verify_data() - Add verification information to FDT 40 * 41 * Add public key information to the FDT node, suitable for 42 * verification at run-time. The information added depends on the 43 * algorithm being used. I just copypasted this from rsa.h. 44 * 45 * @info: Specifies key and FIT information 46 * @keydest: Destination FDT blob for public key data 47 * @return: 0, on success, -ENOSPC if the keydest FDT blob ran out of space, 48 * other -ve value on error 49 */ 50 int ecdsa_add_verify_data(struct image_sign_info *info, void *keydest); 51 52 /** 53 * verify() - Verify a signature against some data 54 * 55 * @info: Specifies key and FIT information 56 * @data: Pointer to the input data 57 * @data_len: Data length 58 * @sig: Signature 59 * @sig_len: Number of bytes in signature 60 * @return 0 if verified, -ve on error 61 */ 62 int ecdsa_verify(struct image_sign_info *info, 63 const struct image_region region[], int region_count, 64 uint8_t *sig, uint sig_len); 65 /** @} */ 66 67 #define ECDSA256_BYTES (256 / 8) 68 69 #endif 70