ed25519

a dart implement of ed25519

usage

Uint8List blake2bHashFunc(Uint8List m) {
  Uint8List bytes = Uint8List(64);
  var b = Blake2b(512);
  b.update(m, 0, m.length);
  b.digest(bytes, 0);
  return bytes;
}

void main() {
  
  test('adds one to input values', () {
    String expectPk = "c9f52a9ae9683a8d304c65dd87d88f1a7628eb55bd7aaba6d5d4067dde804f9c";
    String expectSign = "0029e755645c11dce87d6c16a1af9ba6559fca97c98fe282b0683708d8a6067fc5e3b007826b2d6e95c5a0c31b82e340e165679ff6cefb7de5aa744bc670df0c";

    String hsk = "11E2A3D65792FFA9E8ED15857EF13C562CF7C9BFBBFFD66FFA9B08EC709C8F0A";
    List<int> isk = HEX.decode(hsk);
    var sk = butils.Utils.int8list2uint8list(Int8List.fromList(isk));

    var pk = Ed25519.publickey(blake2bHashFunc, sk);
    var hexpk = HEX.encode(pk);
    assert(hexpk == expectPk);
    print(hexpk);

    Uint8List msg = Uint8List.fromList("This is a message".codeUnits);
    Uint8List sign = Ed25519.signature(blake2bHashFunc, msg, sk, pk);
    String hexSign = HEX.encode(sign);
    assert(hexSign == expectSign);
    print(hexSign);

    var valid = Ed25519.checkvalid(blake2bHashFunc, sign, msg, pk);
    assert(valid == true);
    print(valid);

  });
}

ref

Libraries

ed25519
Copyright (c) 2019 riclava ed25519 is licensed under the Mulan PSL v1. You can use this software according to the terms and conditions of the Mulan PSL v1. You may obtain a copy of Mulan PSL v1 at: http://license.coscl.org.cn/MulanPSL THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v1 for more details.

Dart

VM

dart:ffi
Foreign Function Interface for interoperability with the C programming language. [...]

Web

dart:html
HTML elements and other resources for web-based applications that need to interact with the browser and the DOM (Document Object Model). [...]
dart:js
Low-level support for interoperating with JavaScript. [...]
dart:js_util
Utility methods to efficiently manipulate typed JSInterop objects in cases where the name to call is not known at runtime. You should only use these methods when the same effect cannot be achieved with @JS annotations. These methods would be extension methods on JSObject if Dart supported extension methods.