3 * Copyright (c) 2020 Project CHIP Authors
4 * Copyright (c) 2018 Nest Labs, Inc.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 * Provides implementations for the CHIP entropy sourcing functions
23 * on the ESP32 platform.
25 /* this file behaves like a config.h, comes first */
26 #include <platform/internal/CHIPDeviceLayerInternal.h>
28 #include <support/crypto/CHIPRNG.h>
32 using namespace ::chip;
35 namespace DeviceLayer {
40 int GetEntropy_ESP32(uint8_t * buf, size_t bufSize)
47 uint8_t asBytes[sizeof(asInt)];
50 rnd.asInt = esp_random();
52 size_t n = chip::min(bufSize, sizeof(rnd.asBytes));
54 memcpy(buf, rnd.asBytes, n);
63 } // unnamed namespace
65 CHIP_ERROR InitEntropy()
70 // Initialize the source used by Chip to get secure random data.
71 err = ::chip::Platform::Security::InitSecureRandomDataSource(GetEntropy_ESP32, 64, NULL, 0);
74 // Seed the standard rand() pseudo-random generator with data from the secure random source.
75 err = ::chip::Platform::Security::GetSecureRandomData((uint8_t *) &seed, sizeof(seed));
78 ESP_LOGI(TAG, "srand seed set: %u", seed);
81 if (err != CHIP_NO_ERROR)
83 ESP_LOGE(TAG, "InitEntropy() failed: %s", ErrorStr(err));
88 } // namespace Internal
89 } // namespace DeviceLayer