Chromium Code Reviews| Index: runtime/bin/crypto.cc |
| diff --git a/runtime/bin/crypto.cc b/runtime/bin/crypto.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..30229a2aacd2956fd6b36d7af4f3d0649e650b14 |
| --- /dev/null |
| +++ b/runtime/bin/crypto.cc |
| @@ -0,0 +1,36 @@ |
| +// 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]; |
|
Søren Gjesse
2012/10/22 11:13:02
Shouldn't we check for NULL here?
Anders Johnsen
2012/10/22 12:18:57
Done.
|
| + if (!Crypto::GetRandomBytes(count, buffer)) { |
| + delete[] buffer; |
| + Dart_Handle error = Dart_NewString("Failed to get random bytes."); |
|
Søren Gjesse
2012/10/22 11:13:02
Maybe this should be an OSError is errno/GetLastEr
Anders Johnsen
2012/10/22 12:18:57
Done.
|
| + Dart_ThrowException(error); |
| + } |
| + 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(); |
| +} |
| + |