message.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.TRON_MESSAGE_PREFIX = void 0;
  4. exports.hashMessage = hashMessage;
  5. exports.signMessage = signMessage;
  6. exports.verifyMessage = verifyMessage;
  7. const ethersUtils_js_1 = require("./ethersUtils.js");
  8. const address_js_1 = require("./address.js");
  9. const crypto_js_1 = require("./crypto.js");
  10. const code_js_1 = require("./code.js");
  11. exports.TRON_MESSAGE_PREFIX = '\x19TRON Signed Message:\n';
  12. function hashMessage(message) {
  13. if (typeof message === 'string') {
  14. message = (0, ethersUtils_js_1.toUtf8Bytes)(message);
  15. }
  16. else if (Array.isArray(message)) {
  17. message = new Uint8Array(message);
  18. }
  19. return (0, ethersUtils_js_1.keccak256)((0, ethersUtils_js_1.concat)([(0, ethersUtils_js_1.toUtf8Bytes)(exports.TRON_MESSAGE_PREFIX), (0, ethersUtils_js_1.toUtf8Bytes)(String(message.length)), message]));
  20. }
  21. function signMessage(message, privateKey) {
  22. if (!privateKey.match(/^0x/)) {
  23. privateKey = '0x' + privateKey;
  24. }
  25. const signingKey = new ethersUtils_js_1.SigningKey(privateKey);
  26. const messageDigest = hashMessage(message);
  27. const signature = signingKey.sign(messageDigest);
  28. return (0, ethersUtils_js_1.joinSignature)(signature);
  29. }
  30. function verifyMessage(message, signature) {
  31. if (!signature.match(/^0x/)) {
  32. signature = '0x' + signature;
  33. }
  34. const recovered = (0, ethersUtils_js_1.recoverAddress)(hashMessage(message), signature);
  35. const base58Address = (0, crypto_js_1.getBase58CheckAddress)((0, code_js_1.hexStr2byteArray)(recovered.replace(/^0x/, address_js_1.ADDRESS_PREFIX)));
  36. return base58Address;
  37. }
  38. //# sourceMappingURL=message.js.map