1f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko// Use of this source code is governed by a BSD-style license that can be 3f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko// found in the LICENSE file. 4f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko 5f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko#include "crypto/random.h" 6f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko 724854748fba09df2a29f0d08d558c3acea70e7a1Alex Vakulenko#include <stddef.h> 824854748fba09df2a29f0d08d558c3acea70e7a1Alex Vakulenko 9f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko#include "base/strings/string_util.h" 10f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko#include "testing/gtest/include/gtest/gtest.h" 11f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko 12f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko// Basic functionality tests. Does NOT test the security of the random data. 13f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko 14f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko// Ensures we don't have all trivial data, i.e. that the data is indeed random. 15f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko// Currently, that means the bytes cannot be all the same (e.g. all zeros). 16f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenkobool IsTrivial(const std::string& bytes) { 17f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko for (size_t i = 0; i < bytes.size(); i++) { 18f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko if (bytes[i] != bytes[0]) { 19f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko return false; 20f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko } 21f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko } 22f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko return true; 23f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko} 24f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko 25f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex VakulenkoTEST(RandBytes, RandBytes) { 26f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko std::string bytes(16, '\0'); 2724854748fba09df2a29f0d08d558c3acea70e7a1Alex Vakulenko crypto::RandBytes(base::WriteInto(&bytes, bytes.size()), bytes.size()); 28f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko EXPECT_TRUE(!IsTrivial(bytes)); 29f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko} 30