blob: 9c78b370263956d7872aefc332166c81bd4974e9 [file] [log] [blame]
/*
* Copyright (c) 2017, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/** ============================================================================
* @file CryptoKeyPlaintext.h
*
* @warning This is a beta API. It may change in future releases.
*
* # Overview #
* This file contains the APIs to initialize and access plaintext CryptoKeys.
* Plaintext CryptoKeys point to keying material stored in flash or RAM and
* are not subject to enforced usage restrictions. That only means that calling
* a function that requires an assymmetric public key with a symmetric key will
* not return an error. It will likely not yield the desired results.
*
* # Usage #
*
* Plaintext keys are the simplest of the CryptoKeys. All they do is store the length
* of and a pointer to the keying material. Their use is hence simple as well. After
* calling the initialization function, the CryptoKey may be used in any of the
* crypto operation APIs that take a CryptoKey as an input.
*
* @code
*
* uint8_t keyingMaterial[16];
* CryptoKey cryptoKey;
*
* // Initialise the CryptoKey
* CryptoKeyPlaintext_initKey(&cryptoKey, keyingMaterial, sizeof(keyingMaterial));
*
* // Use the CryptoKey in another crypto operation
*
* @endcode
*
*/
#ifndef ti_drivers_cryptoutils_cyptokey_CryptoKeyPlaintext__include
#define ti_drivers_cryptoutils_cyptokey_CryptoKeyPlaintext__include
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include <stdbool.h>
#include <ti/drivers/cryptoutils/cryptokey/CryptoKey.h>
/*!
* @brief Initializes a CryptoKey type
*
* @param [in] keyHandle Pointer to a CryptoKey which will be initialized to type CryptoKey_PLAINTEXT
* and ready for use
* @param [in] key Pointer to keying material
*
* @param [in] keyLength Length of keying material in bytes
*
* @return Returns a status code from CryptoKey.h
*/
int_fast16_t CryptoKeyPlaintext_initKey(CryptoKey *keyHandle, uint8_t *key, size_t keyLength);
/*!
* @brief Initializes an empty plaintext CryptoKey type
*
* @param [in] keyHandle Pointer to a CryptoKey which will be initialized to type
* CryptoKey_BLANK_PLAINTEXT
*
* @param [in] keyLocation Pointer to location where plaintext keying material can be stored
*
* @param [in] keyLength Length of keying material, in bytes
*
* @return Returns a status code from CryptoKey.h
*/
int_fast16_t CryptoKeyPlaintext_initBlankKey(CryptoKey *keyHandle, uint8_t *keyLocation, size_t keyLength);
/*!
* @brief Gets the length of a plaintext key
*
* @param [in] keyHandle Pointer to a plaintext CryptoKey
*
* @param [out] length Length of the keying material, in bytes
*
* @return Returns a status code from CryptoKey.h
*/
int_fast16_t CryptoKeyPlaintext_getKeyLength(CryptoKey *keyHandle, size_t *length);
/*!
* @brief Sets the CryptoKey keyMaterial pointer
*
* Updates the key location for a plaintext CryptoKey.
* Does not modify data at the pointer location.
*
* @param [in] keyHandle Pointer to a plaintext CryptoKey who's key data pointer will be modified
*
* @param [in] location Pointer to key data location
*
* @return Returns a status code from CryptoKey.h
*/
int_fast16_t CryptoKeyPlaintext_setKeyLocation(CryptoKey *keyHandle, uint8_t *location);
/*!
* @brief Gets the length of a plaintext key
*
* @param [in] keyHandle Pointer to a CryptoKey
*
* @param [out] length Length value will be updated to CryptoKey length, in bytes
*
* @return Returns a status code from CryptoKey.h
*/
int_fast16_t CryptoKeyPlaintext_getKeyLength(CryptoKey *keyHandle, size_t *length);
#ifdef __cplusplus
}
#endif
#endif /* ti_drivers_cryptoutils_cyptoKey_CryptoKeyPlaintext__include */