mirror of https://github.com/ARMmbed/mbed-os.git
105 lines
3.3 KiB
C
105 lines
3.3 KiB
C
/*
|
|
* Copyright (c) 2014-2017, Arm Limited and affiliates.
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Licensed 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.
|
|
*/
|
|
/**
|
|
* \file shalib.h
|
|
* \brief SHA256 Library API.
|
|
*
|
|
* \section hmac256-inctuction HMAC256 process sequence:
|
|
* 1. SHALIB_init_HMAC(), Init HMAC IN process by given security signature material
|
|
* 2. SHALIB_push_data_HMAC(), Give data sectors(s) one by one
|
|
* 3. SHALIB_finish_HMAC(), Finish HMAC and save SHA256 hash to given buffer
|
|
*
|
|
* \section prf256-inctuction PRF256 process sequence:
|
|
* 1. shalib_prf_param_get(), Init PRF and get configure structure
|
|
* 2. Set the following parameters to configure structure:
|
|
* - HMAC security signature pointer and length
|
|
* - Label text
|
|
* - Seed data and length
|
|
* 3. shalib_prf_calc(), Calc PRF256 HASH
|
|
*
|
|
*/
|
|
|
|
#ifndef SHALIB_H_
|
|
#define SHALIB_H_
|
|
|
|
#include "ns_types.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*!
|
|
* \struct prf_sec_param_t
|
|
* \brief PRF 256 stucture
|
|
* This structure is used to configure PRF calc operation: secret, label, seed and buffer before call shalib_prf_calc().
|
|
*/
|
|
typedef struct {
|
|
const uint8_t *secret; /**< HMAC security signature pointer. */
|
|
uint8_t sec_len; /**< HMAC security signature length. */
|
|
const char *label; /**< PRF label text. */
|
|
const uint8_t *seed; /**< PRF Seed data. */
|
|
uint8_t seedlen; /**< PRF Seed data length. */
|
|
} prf_sec_param_t;
|
|
|
|
|
|
// Use these for cumulative HMAC
|
|
/**
|
|
* \brief Init HMAC256 operation by given security material.
|
|
*
|
|
* \param secret A pointer to security material.
|
|
* \param sec_len Length of security material.
|
|
*/
|
|
void SHALIB_init_HMAC(const uint8_t *secret, uint8_t sec_len); // Call this first...
|
|
/**
|
|
* \brief Push data for HMAC
|
|
*
|
|
* \param data A pointer to data.
|
|
* \param len Length of data.
|
|
*/
|
|
void SHALIB_push_data_HMAC(const void *data, uint16_t len); // ... add data ...
|
|
/**
|
|
* \brief Finish HMAC256 operation and save result in given buffer.
|
|
*
|
|
* \param buffer A pointer to result buffer.
|
|
* \param nwords Length of 32-bit register to save to buffer (8= 256 bit and 4= 128-bit).
|
|
*/
|
|
void SHALIB_finish_HMAC(void *buffer, uint8_t nwords); // ... get the HMAC digest.
|
|
|
|
|
|
/** PRF API */
|
|
/**
|
|
* \brief Init PRF library and SHA registers.
|
|
* This function returns configure structure where the user needs to set the following items:
|
|
* -Security material and length
|
|
* -Label text and length
|
|
* -Seed data and length
|
|
*
|
|
* \return A pointer to PRF configure structure.
|
|
|
|
*/
|
|
prf_sec_param_t *shalib_prf_param_get(void); // GET PRF structure
|
|
/* SET secret, label, seed & buffer to 256 PRF */
|
|
/**
|
|
* \brief Finish PRF256 operation and save result in given buffer.
|
|
*/
|
|
void shalib_prf_calc(void *output, uint_fast16_t nwords);// GET 256 PRF
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* SHALIB_H_ */
|