const fs = require(
'fs'
)
const EC = require(
'elliptic'
).ec
const ec =
new
EC(
'secp256k1'
)
let keypair = ec.genKeyPair()
const keys = generateKeys()
function
getPub (prv) {
return
ec.keyFromPrivate(prv).getPublic(
'hex'
).toString()
}
function
generateKeys () {
const fileName =
'./wallet.json'
try
{
let res = JSON.parse(fs.readFileSync(fileName))
if
(res.prv && res.pub && getPub(res.prv) === res.pub) {
keypair.ec.keyFromPrivate(res.prv)
return
res
}
else
{
throw
new
Error(
'not valid wallet.json'
)
}
}
catch
(error) {
console.log(
'生成'
)
const res = {
prv: keypair.getPrivate(
'hex'
).toString(),
pub: keypair.getPublic(
'hex'
).toString()
}
fs.writeFileSync(fileName, JSON.stringify(res))
return
res
}
}
function
sign ({ from, to, amount, timestamp }) {
const bufferMsg = Buffer.from(`${timestamp}-${amount}-${from}-${to}`)
let signature = Buffer.from(keypair.sign(bufferMsg).toDER()).toString(
'hex'
)
return
signature
}
function
verify ({ from, to, amount, timestamp, signature }, pub) {
const keypairTemp = ec.keyFromPublic(pub,
'hex'
)
const bufferMsg = Buffer.from(`${timestamp}-${amount}-${from}-${to}`)
return
keypairTemp.verify(bufferMsg, signature)
}
module.exports = { sign, verify, keys }