/* eslint-disable eslint-comments/disable-enable-pair */ import * as crypto from 'crypto' import { Word32Array } from 'jscrypto' import { SHA256 } from 'jscrypto/SHA256' import * as secp256k1 from 'secp256k1' export function sha256(data: Buffer): Buffer { return Buffer.from(SHA256.hash(new Word32Array(data)).toUint8Array()) } export function generateSignature(id: number, owner: string, privateKey: string) { try { const message = `claim badge ${id} for user ${owner}` const privKey = Buffer.from(privateKey, 'hex') // const pubKey = Buffer.from(secp256k1.publicKeyCreate(privKey, true)) const msgBytes = Buffer.from(message, 'utf8') const msgHashBytes = sha256(msgBytes) const signedMessage = secp256k1.ecdsaSign(msgHashBytes, privKey) return Buffer.from(signedMessage.signature).toString('hex') } catch (e) { console.log(e) return '' } } export function generateKeyPairs(amount: number) { const keyPairs: { publicKey: string; privateKey: string }[] = [] for (let i = 0; i < amount; i++) { let privKey: Buffer do { privKey = crypto.randomBytes(32) } while (!secp256k1.privateKeyVerify(privKey)) const privateKey = privKey.toString('hex') const publicKey = Buffer.from(secp256k1.publicKeyCreate(privKey)).toString('hex') keyPairs.push({ publicKey, privateKey, }) } return keyPairs }