如何在浏览器里面通过js使用ed25519签名
nodejs后端的crypto已经支持ed25519和ed448签名,但是浏览器里面不能直接使用nodejs的crypto模块。有个叫`crypto-browserify`的模块可以作为crypto在浏览器运行,但是`crypto-browserify`已经五六年没更新了,支持的算法非常有限。
目前比较合适的选择应该是是使用`elliptic`模块。参见:https://github.com/indutny/elliptic
TypeScript的代码例子:
import * as eee from 'elliptic'
import { logger } from './logger';
export async function testenc() {
try {
var ed = new eee.ec('ed25519');
var key = ed.genKeyPair();
var msg = '1234555';
var sig = key.sign(msg);
var der = sig.toDER();
var ret1 = key.verify(msg, der);
var ret2 = key.verify(msg+'123', der);
logger('', der + ' ' + ret1 + ' ' + ret2);
} catch (e) {
logger('', e);
}
}
说明:
使用之前需要`npm i elliptic`并且确保安装的是`@types/elliptic`这个版本。
js的加密库普遍是个人维护的,安全性和稳定性都缺乏保证。有人在推动浏览器自带更多的加密函数,但是进展不佳:https://chromestatus.com/feature/4913922408710144
似乎ed448没有合适的实现。