import {Converter} from './converter'; import {ECKCDSA} from './ec-kcdsa'; import * as CryptoJS from 'crypto-js'; /** * Generate a signature for a transaction * * Method: * ``` * s = sign(sha256(sha256(transactionHex)_keygen(sha256(sha256(transactionHex)_privateKey)).publicKey), * sha256(sha256(transactionHex)_privateKey), * privateKey) * p = sha256(sha256(transactionHex)_keygen(sha256(transactionHex_privateKey)).publicKey) * ``` * @param messageHex The data in hexadecimal representation * @param privateKey The private key for signing * @return The signature in hexadecimal format * @module crypto */ export const generateSignature = (messageHex: string, privateKey: string): string => { const s = Converter.convertHexStringToByteArray(privateKey); const m = Converter.convertWordArrayToByteArray(CryptoJS.SHA256(CryptoJS.enc.Hex.parse(messageHex))); const m_s = m.concat(s); const x = Converter.convertWordArrayToByteArray(CryptoJS.SHA256(Converter.convertByteArrayToWordArray(m_s))); const y = ECKCDSA.keygen(x).p; const m_y = m.concat(y); const h = Converter.convertWordArrayToByteArray(CryptoJS.SHA256(Converter.convertByteArrayToWordArray(m_y))); const v = ECKCDSA.sign(h, x, s); return Converter.convertByteArrayToHexString([].concat(v, h)); };