Merge pull request #6221 from codeauroraforum/Add_RNG_LPC54XXX

LPC546XX: Add TRNG support
pull/6677/head
Martin Kojtal 2018-04-18 14:25:56 +02:00 committed by GitHub
commit cba28cc0ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 67 additions and 2 deletions

View File

@ -58,12 +58,18 @@ struct spi_s {
uint8_t bits;
};
#if DEVICE_FLASH
#if defined(DEVICE_FLASH)
struct flash_s {
uint8_t dummy;
};
#endif
#if defined(DEVICE_TRNG)
struct trng_s {
uint8_t dummy;
};
#endif
#include "gpio_object.h"
#ifdef __cplusplus

View File

@ -0,0 +1,59 @@
/* mbed Microcontroller Library
* Copyright (c) 2018 ARM Limited
*
* 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.
*/
#include "trng_api.h"
#if defined(DEVICE_TRNG)
#include "fsl_rng.h"
void trng_init(trng_t *obj)
{
}
void trng_free(trng_t *obj)
{
}
int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length)
{
uint32_t skip;
uint32_t data;
size_t idx = 0;
int i;
/* Get Random data */
while (idx < length) {
data = RNG_GetRandomData();
for (i = 0; ((i < 4) && (idx < length)); i++) {
output[idx++] = (data >> (i * 8)) & 0xFF;
}
/* Skip next 32 random numbers for better entropy */
for (skip = 0; skip < 32; skip++) {
RNG_GetRandomData();
}
}
*output_length = idx;
/* Zeroize to avoid leakage of entropy on the stack. Also ensure this is not removed by compiler optimizations */
*((volatile uint32_t*) &data) = 0;
return (idx == length ? 0 : -1);
}
#endif

View File

@ -754,7 +754,7 @@
"is_disk_virtual": true,
"macros": ["CPU_LPC54628J512ET180", "FSL_RTOS_MBED"],
"inherits": ["Target"],
"device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "FLASH"],
"device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "FLASH", "TRNG"],
"features": ["LWIP"],
"device_name" : "LPC54628J512ET180"
},