Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Wed Oct 10 00:33:53 2018 +0000
Revision:
0:8fdf9a60065b
how to make mbed librry

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kadonotakashi 0:8fdf9a60065b 1 /*
kadonotakashi 0:8fdf9a60065b 2 * Hardware entropy collector for NUC472's RNGA
kadonotakashi 0:8fdf9a60065b 3 *
kadonotakashi 0:8fdf9a60065b 4 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
kadonotakashi 0:8fdf9a60065b 5 * SPDX-License-Identifier: Apache-2.0
kadonotakashi 0:8fdf9a60065b 6 *
kadonotakashi 0:8fdf9a60065b 7 * Licensed under the Apache License, Version 2.0 (the "License"); you may
kadonotakashi 0:8fdf9a60065b 8 * not use this file except in compliance with the License.
kadonotakashi 0:8fdf9a60065b 9 * You may obtain a copy of the License at
kadonotakashi 0:8fdf9a60065b 10 *
kadonotakashi 0:8fdf9a60065b 11 * http://www.apache.org/licenses/LICENSE-2.0
kadonotakashi 0:8fdf9a60065b 12 *
kadonotakashi 0:8fdf9a60065b 13 * Unless required by applicable law or agreed to in writing, software
kadonotakashi 0:8fdf9a60065b 14 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
kadonotakashi 0:8fdf9a60065b 15 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kadonotakashi 0:8fdf9a60065b 16 * See the License for the specific language governing permissions and
kadonotakashi 0:8fdf9a60065b 17 * limitations under the License.
kadonotakashi 0:8fdf9a60065b 18 *
kadonotakashi 0:8fdf9a60065b 19 */
kadonotakashi 0:8fdf9a60065b 20
kadonotakashi 0:8fdf9a60065b 21 #if DEVICE_TRNG
kadonotakashi 0:8fdf9a60065b 22
kadonotakashi 0:8fdf9a60065b 23 #include <stdlib.h>
kadonotakashi 0:8fdf9a60065b 24 #include <string.h>
kadonotakashi 0:8fdf9a60065b 25 #include "cmsis.h"
kadonotakashi 0:8fdf9a60065b 26 #include "us_ticker_api.h"
kadonotakashi 0:8fdf9a60065b 27 #include "trng_api.h"
kadonotakashi 0:8fdf9a60065b 28 #include "crypto-misc.h"
kadonotakashi 0:8fdf9a60065b 29
kadonotakashi 0:8fdf9a60065b 30 /*
kadonotakashi 0:8fdf9a60065b 31 * Get Random number generator.
kadonotakashi 0:8fdf9a60065b 32 */
kadonotakashi 0:8fdf9a60065b 33
kadonotakashi 0:8fdf9a60065b 34 #define PRNG_KEY_SIZE (0x20UL)
kadonotakashi 0:8fdf9a60065b 35
kadonotakashi 0:8fdf9a60065b 36 static void trng_get(unsigned char *pConversionData)
kadonotakashi 0:8fdf9a60065b 37 {
kadonotakashi 0:8fdf9a60065b 38 uint32_t *p32ConversionData;
kadonotakashi 0:8fdf9a60065b 39
kadonotakashi 0:8fdf9a60065b 40 p32ConversionData = (uint32_t *)pConversionData;
kadonotakashi 0:8fdf9a60065b 41
kadonotakashi 0:8fdf9a60065b 42 PRNG_Open(PRNG_KEY_SIZE_256, 1, us_ticker_read());
kadonotakashi 0:8fdf9a60065b 43 crypto_prng_prestart();
kadonotakashi 0:8fdf9a60065b 44 PRNG_Start();
kadonotakashi 0:8fdf9a60065b 45 crypto_prng_wait();
kadonotakashi 0:8fdf9a60065b 46
kadonotakashi 0:8fdf9a60065b 47 PRNG_Read(p32ConversionData);
kadonotakashi 0:8fdf9a60065b 48 }
kadonotakashi 0:8fdf9a60065b 49
kadonotakashi 0:8fdf9a60065b 50 void trng_init(trng_t *obj)
kadonotakashi 0:8fdf9a60065b 51 {
kadonotakashi 0:8fdf9a60065b 52 (void)obj;
kadonotakashi 0:8fdf9a60065b 53
kadonotakashi 0:8fdf9a60065b 54 /* Init crypto module */
kadonotakashi 0:8fdf9a60065b 55 crypto_init();
kadonotakashi 0:8fdf9a60065b 56
kadonotakashi 0:8fdf9a60065b 57 PRNG_ENABLE_INT();
kadonotakashi 0:8fdf9a60065b 58 }
kadonotakashi 0:8fdf9a60065b 59
kadonotakashi 0:8fdf9a60065b 60 void trng_free(trng_t *obj)
kadonotakashi 0:8fdf9a60065b 61 {
kadonotakashi 0:8fdf9a60065b 62 (void)obj;
kadonotakashi 0:8fdf9a60065b 63
kadonotakashi 0:8fdf9a60065b 64 PRNG_DISABLE_INT();
kadonotakashi 0:8fdf9a60065b 65
kadonotakashi 0:8fdf9a60065b 66 /* Uninit crypto module */
kadonotakashi 0:8fdf9a60065b 67 crypto_uninit();
kadonotakashi 0:8fdf9a60065b 68 }
kadonotakashi 0:8fdf9a60065b 69
kadonotakashi 0:8fdf9a60065b 70 int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length)
kadonotakashi 0:8fdf9a60065b 71 {
kadonotakashi 0:8fdf9a60065b 72 (void)obj;
kadonotakashi 0:8fdf9a60065b 73 unsigned char tmpBuff[PRNG_KEY_SIZE];
kadonotakashi 0:8fdf9a60065b 74 size_t cur_length = 0;
kadonotakashi 0:8fdf9a60065b 75
kadonotakashi 0:8fdf9a60065b 76 while (length >= sizeof(tmpBuff)) {
kadonotakashi 0:8fdf9a60065b 77 trng_get(output);
kadonotakashi 0:8fdf9a60065b 78 output += sizeof(tmpBuff);
kadonotakashi 0:8fdf9a60065b 79 cur_length += sizeof(tmpBuff);
kadonotakashi 0:8fdf9a60065b 80 length -= sizeof(tmpBuff);
kadonotakashi 0:8fdf9a60065b 81 }
kadonotakashi 0:8fdf9a60065b 82 if (length > 0) {
kadonotakashi 0:8fdf9a60065b 83 trng_get(tmpBuff);
kadonotakashi 0:8fdf9a60065b 84 memcpy(output, tmpBuff, length);
kadonotakashi 0:8fdf9a60065b 85 cur_length += length;
kadonotakashi 0:8fdf9a60065b 86 crypto_zeroize(tmpBuff, sizeof(tmpBuff));
kadonotakashi 0:8fdf9a60065b 87 }
kadonotakashi 0:8fdf9a60065b 88 *output_length = cur_length;
kadonotakashi 0:8fdf9a60065b 89 return 0;
kadonotakashi 0:8fdf9a60065b 90 }
kadonotakashi 0:8fdf9a60065b 91
kadonotakashi 0:8fdf9a60065b 92 #endif