mirror of
https://github.com/Qortal/qortal-ui.git
synced 2025-02-12 18:25:50 +00:00
78 lines
2.6 KiB
JavaScript
78 lines
2.6 KiB
JavaScript
"use strict";
|
|
import ChatBase from "./ChatBase.js"
|
|
import nacl from '../../deps/nacl-fast.js'
|
|
import ed2curve from '../../deps/ed2curve.js'
|
|
import { Sha256 } from 'asmcrypto.js'
|
|
|
|
|
|
export default class ChatTransaction extends ChatBase {
|
|
constructor() {
|
|
super();
|
|
this.type = 18
|
|
this.fee = 0
|
|
}
|
|
|
|
set recipientPublicKey(recipientPublicKey) {
|
|
this._base58RecipientPublicKey = recipientPublicKey instanceof Uint8Array ? this.constructor.Base58.encode(recipientPublicKey) : recipientPublicKey
|
|
this._recipientPublicKey = this.constructor.Base58.decode(this._base58RecipientPublicKey)
|
|
|
|
}
|
|
|
|
set proofOfWorkNonce(proofOfWorkNonce) {
|
|
this._proofOfWorkNonce = this.constructor.utils.int32ToBytes(proofOfWorkNonce)
|
|
}
|
|
|
|
|
|
set recipient(recipient) {
|
|
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
|
|
this._hasReceipient = new Uint8Array(1)
|
|
this._hasReceipient[0] = 1
|
|
}
|
|
|
|
set message(message) {
|
|
|
|
this.messageText = message;
|
|
|
|
this._message = this.constructor.utils.stringtoUTF8Array(message)
|
|
this._messageLength = this.constructor.utils.int32ToBytes(this._message.length)
|
|
}
|
|
|
|
set isEncrypted(isEncrypted) {
|
|
this._isEncrypted = new Uint8Array(1);
|
|
this._isEncrypted[0] = isEncrypted;
|
|
|
|
if (isEncrypted === 1) {
|
|
const convertedPrivateKey = ed2curve.convertSecretKey(this._keyPair.privateKey)
|
|
const convertedPublicKey = ed2curve.convertPublicKey(this._recipientPublicKey)
|
|
const sharedSecret = new Uint8Array(32);
|
|
nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey);
|
|
|
|
this._chatEncryptionSeed = new Sha256().process(sharedSecret).finish().result
|
|
this._encryptedMessage = nacl.secretbox(this._message, this._lastReference.slice(0, 24), this._chatEncryptionSeed)
|
|
}
|
|
|
|
this._myMessage = isEncrypted === 1 ? this._encryptedMessage : this._message
|
|
this._myMessageLenth = isEncrypted === 1 ? this.constructor.utils.int32ToBytes(this._myMessage.length) : this._messageLength
|
|
}
|
|
|
|
set isText(isText) {
|
|
this._isText = new Uint8Array(1);
|
|
this._isText[0] = isText;
|
|
}
|
|
|
|
get params() {
|
|
const params = super.params;
|
|
params.push(
|
|
this._proofOfWorkNonce,
|
|
this._hasReceipient,
|
|
this._recipient,
|
|
this._myMessageLenth,
|
|
this._myMessage,
|
|
this._isEncrypted,
|
|
this._isText,
|
|
this._feeBytes
|
|
)
|
|
return params;
|
|
}
|
|
}
|