阎说 微信扫一扫
关注 阎说

Yanxi.me 热爱互联网和技术,喜欢探索的终身学习者

EOS 不同语言下 ECC 签名示例和速度对比

  阎曦    

为了提高服务器端的 EOS 签名效率,对不同语言的椭圆曲线签名速度做了测试,分别测试 100 次和 10 次,结果如下:

公众号 JavaScript Dart GoLang
100 次 (print) 19255 ms 8801 ms 671 ms
100 次 13761 ms 6333 ms 148 ms
10 次 (print) 1971 ms 883 ms 70 ms
10 次 1415 ms 880 ms 29 ms

print 表示在 console 中打印出了签名结果。从上表可以看出 Go 语言速度优势明显,签名速度: JavaScript < Dart < GoLang。Dart 椭圆曲线签名速度约是 JavaScript 的 2 倍左右,GoLang 签名速度约是 JavaScript 的近 100 倍。

JavaScript ECC 签名测试代码

import 'package:eosdart_ecc/eosdart_ecc.dart';
enum Color { red, blue, green }
signStr(String str) {
  EOSPrivateKey.fromString('5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3'
      .signString(str)
      .toString();
}
main() {
  var b = DateTime.now();
  for (var i = 0; i < 100; i++) {
    signStr("test$i");
  }
  var e = DateTime.now();
  var ms = e.difference(b).inMilliseconds;
  print("${ms}ms");
}

Dart ECC 签名测试代码

import 'package:eosdart_ecc/eosdart_ecc.dart';
enum Color { red, blue, green }
signStr(String str) {
  EOSPrivateKey.fromString('5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3'
      .signString(str)
      .toString();
}
main() {
  var b = DateTime.now();
  for (var i = 0; i < 100; i++) {
    signStr("test$i");
  }
  var e = DateTime.now();
  var ms = e.difference(b).inMilliseconds;
  print("${ms}ms");
}

Go ECC 签名测试代码

package main
import (
    "crypto/sha256"
    "fmt"
    "time"
    "github.com/eoscanada/eos-go/ecc"
)
func sign(str string) {
    privkey, _ := ecc.NewPrivateKey("5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3")
    digest := sha256Str(str)
    privkey.Sign(digest)
}
func sha256Str(str string) []byte {
    h := sha256.New()
    h.Write([]byte(str))
    return h.Sum(nil)
}
func main() {
    b := time.Now()
    for i := 0; i < 100; i++ {
        sign(fmt.Sprintf("test%d", i))
    }
    e := time.Now()
    t := e.UnixNano() - b.UnixNano()
    fmt.Println(t/int64(time.Millisecond), "ms")
}