Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. const elliptic = require('elliptic')
  2. const secp256k1 = elliptic.ec('secp256k1')
  3. const hash = require('hash.js')
  4. const keypairs = require('ripple-keypairs')
  5.  
  6. const hexToDecimal = (x) => secp256k1.keyFromPrivate(x, 'hex').getPrivate().toString(10)
  7.  
  8. module.exports = {
  9. sign (message, familySeed) {
  10. const digest = hash.sha256().update(message).digest('hex').toUpperCase()
  11. const keypair = keypairs.deriveKeypair(familySeed)
  12. const signature = secp256k1.sign(digest, keypair.privateKey.substr(2))
  13. return {
  14. hash: digest,
  15. signature: (signature.r.toJSON() + signature.s.toJSON() + signature.recoveryParam.toString(16)).toUpperCase()
  16. }
  17. },
  18. unserializeSignature (signature) {
  19. return {
  20. r: signature.slice(0, 64).toLowerCase(),
  21. s: signature.slice(64, 128).toLowerCase(),
  22. recoveryParam: parseInt(signature.slice(128), 16)
  23. }
  24. },
  25. deriveAddress (familySeed) {
  26. const keypair = keypairs.deriveKeypair(familySeed)
  27. return keypairs.deriveAddress(keypair.publicKey)
  28. },
  29. recoverPubKey (hash, signature) {
  30. const unserializedSignature = this.unserializeSignature(signature)
  31. const pubKeyRecovered = secp256k1.recoverPubKey(hexToDecimal(hash), unserializedSignature, unserializedSignature.recoveryParam, 'hex')
  32. return pubKeyRecovered
  33. },
  34. recoverAddress (hash, signature) {
  35. return keypairs.deriveAddress(this.recoverPubKey(hash, signature).encodeCompressed('hex'))
  36. },
  37. verify (message, signature) {
  38. const digest = hash.sha256().update(message).digest('hex')
  39. const unserializedSignature = this.unserializeSignature(signature)
  40. return secp256k1.verify(digest, unserializedSignature, this.recoverPubKey(digest, signature))
  41. }
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement