// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

#include "bin/crypto.h"
#include "bin/dartutils.h"

#include "include/dart_api.h"


void FUNCTION_NAME(Crypto_GetRandomBytes)(Dart_NativeArguments args) {
  Dart_EnterScope();
  Dart_Handle count_obj = Dart_GetNativeArgument(args, 0);
  int64_t count = 0;
  if (!DartUtils::GetInt64Value(count_obj, &count)) {
    Dart_Handle error = Dart_NewString("Invalid argument, must be an int.");
    Dart_ThrowException(error);
  }
  uint8_t* buffer = new uint8_t[count];
  ASSERT(buffer != NULL);
  if (!Crypto::GetRandomBytes(count, buffer)) {
    delete[] buffer;
    Dart_ThrowException(DartUtils::NewDartOSError());
  }
  Dart_Handle result = Dart_NewByteArray(count);
  if (Dart_IsError(result)) {
    delete[] buffer;
    Dart_Handle error = Dart_NewString("Failed to allocate storage.");
    Dart_ThrowException(error);
  }
  Dart_ListSetAsBytes(result, 0, buffer, count);
  Dart_SetReturnValue(args, result);
  delete[] buffer;
  Dart_ExitScope();
}

