mirror of
https://github.com/Qortal/chrome-extension.git
synced 2025-04-25 04:17:53 +00:00
38 lines
1.4 KiB
TypeScript
38 lines
1.4 KiB
TypeScript
// @ts-nocheck
|
|
|
|
import Base58 from '../deps/Base58'
|
|
import ed2curve from '../deps/ed2curve'
|
|
import nacl from '../deps/nacl-fast'
|
|
import {Sha256} from 'asmcrypto.js'
|
|
|
|
|
|
export const decryptChatMessage = (encryptedMessage, privateKey, recipientPublicKey, lastReference) => {
|
|
const test = encryptedMessage
|
|
let _encryptedMessage = atob(encryptedMessage)
|
|
const binaryLength = _encryptedMessage.length
|
|
const bytes = new Uint8Array(binaryLength)
|
|
|
|
for (let i = 0; i < binaryLength; i++) {
|
|
bytes[i] = _encryptedMessage.charCodeAt(i)
|
|
}
|
|
|
|
|
|
const _base58RecipientPublicKey = recipientPublicKey instanceof Uint8Array ? Base58.encode(recipientPublicKey) : recipientPublicKey
|
|
const _recipientPublicKey = Base58.decode(_base58RecipientPublicKey)
|
|
|
|
const _lastReference = lastReference instanceof Uint8Array ? lastReference : Base58.decode(lastReference)
|
|
|
|
const convertedPrivateKey = ed2curve.convertSecretKey(privateKey)
|
|
const convertedPublicKey = ed2curve.convertPublicKey(_recipientPublicKey)
|
|
const sharedSecret = new Uint8Array(32);
|
|
nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey)
|
|
|
|
const _chatEncryptionSeed = new Sha256().process(sharedSecret).finish().result
|
|
const _decryptedMessage = nacl.secretbox.open(bytes, _lastReference.slice(0, 24), _chatEncryptionSeed)
|
|
|
|
let decryptedMessage = ''
|
|
|
|
_decryptedMessage === false ? decryptedMessage : decryptedMessage = new TextDecoder('utf-8').decode(_decryptedMessage)
|
|
|
|
return decryptedMessage
|
|
} |