// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <stdint.h>

#include "base/rand_util.h"
#include "ppapi/c/dev/ppb_crypto_dev.h"
#include "ppapi/thunk/thunk.h"

// The crypto interface doesn't have a normal C -> C++ thunk since it doesn't
// actually have any proxy wrapping or associated objects; it's just a call
// into base. So we implement the entire interface here, using the thunk
// namespace so it magically gets hooked up in the proper places.

namespace ppapi {

namespace {

void GetRandomBytes(char* buffer, uint32_t num_bytes) {
  base::RandBytes(buffer, num_bytes);
}

const PPB_Crypto_Dev crypto_interface = {&GetRandomBytes};

}  // namespace

namespace thunk {

PPAPI_THUNK_EXPORT const PPB_Crypto_Dev_0_1* GetPPB_Crypto_Dev_0_1_Thunk() {
  return &crypto_interface;
}

}  // namespace thunk

}  // namespace ppapi
