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