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