14
14
* limitations under the License.
15
15
*/
16
16
17
+ import { GeneratorUtils } from 'catbuffer-typescript' ;
18
+ import { Convert } from '../../core' ;
17
19
import { Crypto } from '../../core/crypto' ;
18
20
import { PublicAccount } from '../account' ;
19
21
import { Message } from './Message' ;
@@ -23,26 +25,40 @@ import { PlainMessage } from './PlainMessage';
23
25
/**
24
26
* Encrypted Message model
25
27
*/
26
- export class EncryptedMessage extends Message {
27
- public readonly recipientPublicAccount ?: PublicAccount ;
28
+ export class EncryptedMessage implements Message {
29
+ public readonly type = MessageType . EncryptedMessage ;
30
+ public readonly payload : string ;
28
31
29
- constructor ( payload : string , recipientPublicAccount ?: PublicAccount ) {
30
- super ( MessageType . EncryptedMessage , payload ) ;
31
- this . recipientPublicAccount = recipientPublicAccount ;
32
+ /**
33
+ * @internal
34
+ * @param buffer the buffer.
35
+ */
36
+ constructor ( private readonly buffer : Uint8Array ) {
37
+ this . payload = EncryptedMessage . getPayload ( buffer ) ;
32
38
}
33
39
34
40
/**
35
41
*
36
42
* @param message - Plain message to be encrypted
37
43
* @param recipientPublicAccount - Recipient public account
38
44
* @param privateKey - Sender private key
39
- * @return {EncryptedMessage }
45
+ * @param iv - iv for encoding, for unit tests.
46
+ * @return The encrypted message.
47
+ */
48
+ public static create ( message : string , recipientPublicAccount : PublicAccount , privateKey : string , iv ?: Buffer ) : EncryptedMessage {
49
+ const encryptedHex = Crypto . encode ( privateKey , recipientPublicAccount . publicKey , message , false , iv ) . toUpperCase ( ) ;
50
+ return new EncryptedMessage ( EncryptedMessage . createBuffer ( encryptedHex ) ) ;
51
+ }
52
+
53
+ /**
54
+ *
55
+ * @param encryptMessage - Encrypted message to be decrypted
56
+ * @param privateKey - Recipient private key
57
+ * @param recipientPublicAccount - Sender public account
58
+ * @return {PlainMessage }
40
59
*/
41
- public static create ( message : string , recipientPublicAccount : PublicAccount , privateKey : string ) : EncryptedMessage {
42
- return new EncryptedMessage (
43
- Crypto . encode ( privateKey , recipientPublicAccount . publicKey , message ) . toUpperCase ( ) ,
44
- recipientPublicAccount ,
45
- ) ;
60
+ public static decrypt ( encryptMessage : EncryptedMessage , privateKey : string , recipientPublicAccount : PublicAccount ) : PlainMessage {
61
+ return PlainMessage . create ( Convert . hexToUtf8 ( Crypto . decode ( privateKey , recipientPublicAccount . publicKey , encryptMessage . payload ) ) ) ;
46
62
}
47
63
48
64
/**
@@ -54,17 +70,44 @@ export class EncryptedMessage extends Message {
54
70
* @param payload
55
71
*/
56
72
public static createFromPayload ( payload : string ) : EncryptedMessage {
57
- return new EncryptedMessage ( this . decodeHex ( payload ) ) ;
73
+ return new EncryptedMessage ( EncryptedMessage . createBuffer ( payload ) ) ;
58
74
}
59
75
60
76
/**
61
77
*
62
- * @param encryptMessage - Encrypted message to be decrypted
63
- * @param privateKey - Recipient private key
64
- * @param recipientPublicAccount - Sender public account
65
- * @return {PlainMessage }
78
+ * It creates the Plain message from a payload hex with the 00 prefix.
79
+ *
80
+ * @internal
81
+ */
82
+ public static createFromBuilder ( builder : Uint8Array ) : EncryptedMessage {
83
+ return new EncryptedMessage ( builder ) ;
84
+ }
85
+
86
+ /**
87
+ * Create DTO object
66
88
*/
67
- public static decrypt ( encryptMessage : EncryptedMessage , privateKey , recipientPublicAccount : PublicAccount ) : PlainMessage {
68
- return new PlainMessage ( this . decodeHex ( Crypto . decode ( privateKey , recipientPublicAccount . publicKey , encryptMessage . payload ) ) ) ;
89
+ toDTO ( ) : string {
90
+ return Convert . uint8ToHex ( this . toBuffer ( ) ) ;
91
+ }
92
+
93
+ toBuffer ( ) : Uint8Array {
94
+ return this . buffer ;
95
+ }
96
+
97
+ public static createBuffer ( payload : string ) : Uint8Array {
98
+ if ( ! payload ) {
99
+ return Uint8Array . of ( ) ;
100
+ }
101
+ const message = Convert . utf8ToHex ( payload ) ;
102
+ const payloadBuffer = Convert . hexToUint8 ( message ) ;
103
+ const typeBuffer = GeneratorUtils . uintToBuffer ( MessageType . EncryptedMessage , 1 ) ;
104
+ return GeneratorUtils . concatTypedArrays ( typeBuffer , payloadBuffer ) ;
105
+ }
106
+
107
+ public static getPayload ( buffer : Uint8Array ) : string {
108
+ if ( ! buffer . length ) {
109
+ return '' ;
110
+ }
111
+ return Convert . uint8ToUtf8 ( buffer . slice ( 1 ) ) ;
69
112
}
70
113
}
0 commit comments