message.js 1.3 KB

1234567891011121314151617181920212223242526272829303132
  1. import { keccak256, toUtf8Bytes, concat, recoverAddress, SigningKey, joinSignature } from './ethersUtils.js';
  2. import { ADDRESS_PREFIX } from './address.js';
  3. import { getBase58CheckAddress } from './crypto.js';
  4. import { hexStr2byteArray } from './code.js';
  5. export const TRON_MESSAGE_PREFIX = '\x19TRON Signed Message:\n';
  6. export function hashMessage(message) {
  7. if (typeof message === 'string') {
  8. message = toUtf8Bytes(message);
  9. }
  10. else if (Array.isArray(message)) {
  11. message = new Uint8Array(message);
  12. }
  13. return keccak256(concat([toUtf8Bytes(TRON_MESSAGE_PREFIX), toUtf8Bytes(String(message.length)), message]));
  14. }
  15. export function signMessage(message, privateKey) {
  16. if (!privateKey.match(/^0x/)) {
  17. privateKey = '0x' + privateKey;
  18. }
  19. const signingKey = new SigningKey(privateKey);
  20. const messageDigest = hashMessage(message);
  21. const signature = signingKey.sign(messageDigest);
  22. return joinSignature(signature);
  23. }
  24. export function verifyMessage(message, signature) {
  25. if (!signature.match(/^0x/)) {
  26. signature = '0x' + signature;
  27. }
  28. const recovered = recoverAddress(hashMessage(message), signature);
  29. const base58Address = getBase58CheckAddress(hexStr2byteArray(recovered.replace(/^0x/, ADDRESS_PREFIX)));
  30. return base58Address;
  31. }
  32. //# sourceMappingURL=message.js.map