// 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 =
        DartUtils::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_NewTypedData(kUint8, count);
  if (Dart_IsError(result)) {
    delete[] buffer;
    Dart_Handle error = DartUtils::NewString("Failed to allocate storage.");
    Dart_ThrowException(error);
  }
  Dart_ListSetAsBytes(result, 0, buffer, count);
  Dart_SetReturnValue(args, result);
  delete[] buffer;
  Dart_ExitScope();
}
