Clean SmartTicket Verification

node v8.17.0
version: master
endpointsharetweet
Generate temporary Ethereum Wallet
const sjcl = require("sjcl"); const eth_util = require('ethereumjs-util'); const keythereum = require("keythereum"); let key = keythereum.create(); let privateKey = key.privateKey; let address = eth_util.privateToAddress(privateKey); //let privateKey = new Buffer('c6d03f9b833e8f499849951f3d355509060dca1272f48103a48c9bfa9e993c50', 'hex'); '0x' + address.toString('hex')
Generating Message
function getMessage(event, ticket, expire = 5) { return event + ticket + (Math.ceil((new Date()).getTime() / (1000 * 60 * expire)) * (1000 * 60 * expire)) / 1000; } let message = getMessage( '0x0000000000000000000000000000000000000000', '0x64ab3380c6ce12b59bfddfe280ad74c0311d6bd0dd9c3058f39734b7c724c5a1' );
Message Signing
function signMessage(message, privKey) { const keccak = require("keccak"); const secp256k1 = require("secp256k1"); const sig = secp256k1.sign(keccak('keccak256').update(Buffer.concat([ Buffer.from('\u0019Ethereum Signed Message:\n' + message.length.toString()), Buffer.from(message) ])).digest(), privKey); return '0x' + Buffer.concat([ sig.signature.slice(0, 32), sig.signature.slice(32, 64), new Buffer((sig.recovery + 27).toString(16), 'hex') //new Buffer(`0x${(sig.recovery.toString(16).length % 2) ? `0${sig.recovery.toString(16)}` : sig.recovery.toString(16)}`.slice(2), 'hex') ]).toString('hex'); } let messageSigned = signMessage(message, privateKey)
Message Verification
function verifySignedMessage(message, sign) { const keccak = require("keccak"); const secp256k1 = require("secp256k1"); const sig = Buffer.from(sign.slice(2), 'hex'); const pubKey = secp256k1.publicKeyConvert(secp256k1.recover( keccak('keccak256').update(Buffer.concat([ Buffer.from('\u0019Ethereum Signed Message:\n' + message.length.toString()), Buffer.from(message) ])).digest(), Buffer.concat([sig.slice(0, 32), sig.slice(32, 64)], 64), sig[64] - 27 ), false).slice(1); return '0x' + keccak('keccak256').update(pubKey).digest().slice(-20).toString('hex'); } verifySignedMessage(message, messageSigned);
Loading…

no comments

    sign in to comment