xref: /aosp_15_r20/external/cronet/crypto/random_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "crypto/random.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <stddef.h>
8*6777b538SAndroid Build Coastguard Worker 
9*6777b538SAndroid Build Coastguard Worker #include <string>
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker // Basic functionality tests. Does NOT test the security of the random data.
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker // Ensures we don't have all trivial data, i.e. that the data is indeed random.
16*6777b538SAndroid Build Coastguard Worker // Currently, that means the bytes cannot be all the same (e.g. all zeros).
IsTrivial(const std::string & bytes)17*6777b538SAndroid Build Coastguard Worker bool IsTrivial(const std::string& bytes) {
18*6777b538SAndroid Build Coastguard Worker   for (size_t i = 0; i < bytes.size(); i++) {
19*6777b538SAndroid Build Coastguard Worker     if (bytes[i] != bytes[0]) {
20*6777b538SAndroid Build Coastguard Worker       return false;
21*6777b538SAndroid Build Coastguard Worker     }
22*6777b538SAndroid Build Coastguard Worker   }
23*6777b538SAndroid Build Coastguard Worker   return true;
24*6777b538SAndroid Build Coastguard Worker }
25*6777b538SAndroid Build Coastguard Worker 
TEST(RandBytes,RandBytes)26*6777b538SAndroid Build Coastguard Worker TEST(RandBytes, RandBytes) {
27*6777b538SAndroid Build Coastguard Worker   std::string bytes(16, '\0');
28*6777b538SAndroid Build Coastguard Worker   crypto::RandBytes(bytes.data(), bytes.size());
29*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(IsTrivial(bytes));
30*6777b538SAndroid Build Coastguard Worker }
31*6777b538SAndroid Build Coastguard Worker 
TEST(RandBytes,RandBytesAsVector)32*6777b538SAndroid Build Coastguard Worker TEST(RandBytes, RandBytesAsVector) {
33*6777b538SAndroid Build Coastguard Worker   auto vector = crypto::RandBytesAsVector(16);
34*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(IsTrivial(std::string(vector.begin(), vector.end())));
35*6777b538SAndroid Build Coastguard Worker }
36