Skip to content

Commit cea9709

Browse files
authored
Merge pull request #258 from rg911/task/g143_harvesting_delegation_unlocking
JAV-8 [Github #143] Persistent Harvesting Delegation Unlocking
2 parents 22a744c + dc0438f commit cea9709

30 files changed

+589
-48
lines changed

e2e/infrastructure/AccountHttp.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { AccountRestrictionType } from '../../src/model/account/AccountRestricti
2424
import {Address} from '../../src/model/account/Address';
2525
import {PublicAccount} from '../../src/model/account/PublicAccount';
2626
import {NetworkType} from '../../src/model/blockchain/NetworkType';
27+
import { PlainMessage } from '../../src/model/message/PlainMessage';
2728
import { NetworkCurrencyMosaic } from '../../src/model/mosaic/NetworkCurrencyMosaic';
2829
import { AliasAction } from '../../src/model/namespace/AliasAction';
2930
import { NamespaceId } from '../../src/model/namespace/NamespaceId';
@@ -36,7 +37,6 @@ import { Deadline } from '../../src/model/transaction/Deadline';
3637
import { MultisigAccountModificationTransaction } from '../../src/model/transaction/MultisigAccountModificationTransaction';
3738
import { MultisigCosignatoryModification } from '../../src/model/transaction/MultisigCosignatoryModification';
3839
import { NamespaceRegistrationTransaction } from '../../src/model/transaction/NamespaceRegistrationTransaction';
39-
import { PlainMessage } from '../../src/model/transaction/PlainMessage';
4040
import { TransferTransaction } from '../../src/model/transaction/TransferTransaction';
4141
import { UInt64 } from '../../src/model/UInt64';
4242

e2e/infrastructure/BlockHttp.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ import { Listener, TransactionHttp } from '../../src/infrastructure/infrastructu
2020
import {QueryParams} from '../../src/infrastructure/QueryParams';
2121
import { Account } from '../../src/model/account/Account';
2222
import { NetworkType } from '../../src/model/blockchain/NetworkType';
23+
import { PlainMessage } from '../../src/model/message/PlainMessage';
2324
import { NetworkCurrencyMosaic } from '../../src/model/mosaic/NetworkCurrencyMosaic';
2425
import { Deadline } from '../../src/model/transaction/Deadline';
25-
import { PlainMessage } from '../../src/model/transaction/PlainMessage';
2626
import { Transaction } from '../../src/model/transaction/Transaction';
2727
import { TransferTransaction } from '../../src/model/transaction/TransferTransaction';
2828

e2e/infrastructure/Listener.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { Listener } from '../../src/infrastructure/Listener';
2020
import { TransactionHttp } from '../../src/infrastructure/TransactionHttp';
2121
import { Account } from '../../src/model/account/Account';
2222
import { NetworkType } from '../../src/model/blockchain/NetworkType';
23+
import { PlainMessage } from '../../src/model/message/PlainMessage';
2324
import { Mosaic, UInt64 } from '../../src/model/model';
2425
import { MosaicId } from '../../src/model/mosaic/MosaicId';
2526
import { NetworkCurrencyMosaic } from '../../src/model/mosaic/NetworkCurrencyMosaic';
@@ -29,7 +30,6 @@ import { CosignatoryModificationAction } from '../../src/model/transaction/Cosig
2930
import { Deadline } from '../../src/model/transaction/Deadline';
3031
import { MultisigAccountModificationTransaction } from '../../src/model/transaction/MultisigAccountModificationTransaction';
3132
import { MultisigCosignatoryModification } from '../../src/model/transaction/MultisigCosignatoryModification';
32-
import { PlainMessage } from '../../src/model/transaction/PlainMessage';
3333
import { TransferTransaction } from '../../src/model/transaction/TransferTransaction';
3434
import { TransactionUtils } from './TransactionUtils';
3535

e2e/infrastructure/TransactionHttp.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {Account} from '../../src/model/account/Account';
2828
import { AccountRestrictionModificationAction } from '../../src/model/account/AccountRestrictionModificationAction';
2929
import { AccountRestrictionType } from '../../src/model/account/AccountRestrictionType';
3030
import {NetworkType} from '../../src/model/blockchain/NetworkType';
31+
import { PlainMessage } from '../../src/model/message/PlainMessage';
3132
import { Mosaic } from '../../src/model/mosaic/Mosaic';
3233
import {MosaicFlags} from '../../src/model/mosaic/MosaicFlags';
3334
import {MosaicId} from '../../src/model/mosaic/MosaicId';
@@ -61,7 +62,6 @@ import { MosaicMetadataTransaction } from '../../src/model/transaction/MosaicMet
6162
import {MosaicSupplyChangeTransaction} from '../../src/model/transaction/MosaicSupplyChangeTransaction';
6263
import { NamespaceMetadataTransaction } from '../../src/model/transaction/NamespaceMetadataTransaction';
6364
import {NamespaceRegistrationTransaction} from '../../src/model/transaction/NamespaceRegistrationTransaction';
64-
import { PlainMessage } from '../../src/model/transaction/PlainMessage';
6565
import {SecretLockTransaction} from '../../src/model/transaction/SecretLockTransaction';
6666
import {SecretProofTransaction} from '../../src/model/transaction/SecretProofTransaction';
6767
import { SignedTransaction } from '../../src/model/transaction/SignedTransaction';

e2e/infrastructure/TransactionUtils.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,17 @@ import {Account} from '../../src/model/account/Account';
1919
import {Address} from '../../src/model/account/Address';
2020
import { PublicAccount } from '../../src/model/account/PublicAccount';
2121
import {NetworkType} from '../../src/model/blockchain/NetworkType';
22+
import {PlainMessage} from '../../src/model/message/PlainMessage';
2223
import { Mosaic } from '../../src/model/mosaic/Mosaic';
2324
import { MosaicId } from '../../src/model/mosaic/MosaicId';
2425
import {NetworkCurrencyMosaic} from '../../src/model/mosaic/NetworkCurrencyMosaic';
2526
import {AggregateTransaction} from '../../src/model/transaction/AggregateTransaction';
27+
import { CosignatoryModificationAction } from '../../src/model/transaction/CosignatoryModificationAction';
2628
import {CosignatureTransaction} from '../../src/model/transaction/CosignatureTransaction';
2729
import {Deadline} from '../../src/model/transaction/Deadline';
2830
import { LockFundsTransaction } from '../../src/model/transaction/LockFundsTransaction';
2931
import { MultisigAccountModificationTransaction } from '../../src/model/transaction/MultisigAccountModificationTransaction';
3032
import { MultisigCosignatoryModification } from '../../src/model/transaction/MultisigCosignatoryModification';
31-
import { CosignatoryModificationAction } from '../../src/model/transaction/CosignatoryModificationAction';
32-
import {PlainMessage} from '../../src/model/transaction/PlainMessage';
3333
import { SignedTransaction } from '../../src/model/transaction/SignedTransaction';
3434
import {TransferTransaction} from '../../src/model/transaction/TransferTransaction';
3535
import {UInt64} from '../../src/model/UInt64';
@@ -104,8 +104,8 @@ export class TransactionUtils {
104104
}
105105

106106
public static createMultisigAccountModificationTransaction( account: Account,
107-
transactionHttp: TransactionHttp,
108-
generationHash: string) {
107+
transactionHttp: TransactionHttp,
108+
generationHash: string) {
109109
const modifyMultisig = MultisigAccountModificationTransaction.create(
110110
Deadline.create(),
111111
2,
@@ -119,4 +119,4 @@ export class TransactionUtils {
119119
const signedTransaction = account.sign(modifyMultisig, generationHash);
120120
transactionHttp.announce(signedTransaction);
121121
}
122-
}
122+
}

src/core/crypto/Crypto.ts

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { Convert as convert } from '../format/Convert';
1919
import { KeyPair } from './KeyPair';
2020
import { SignSchema } from './SignSchema';
2121
import * as utility from './Utilities';
22+
2223
// tslint:disable-next-line: no-var-requires
2324
const CryptoJS = require('crypto-js');
2425
export class Crypto {
@@ -223,7 +224,12 @@ export class Crypto {
223224
* @param {SignSchema} signSchema The Sign Schema. (KECCAK(NIS1) / SHA3(Catapult))
224225
* @return {string} - The encoded message
225226
*/
226-
public static _encode = (senderPriv, recipientPub, msg, iv, salt, signSchema: SignSchema) => {
227+
public static _encode = (senderPriv: string,
228+
recipientPub: string,
229+
msg: string,
230+
iv: Uint8Array,
231+
salt: Uint8Array,
232+
signSchema: SignSchema): string => {
227233
// Errors
228234
if (!senderPriv || !recipientPub || !msg || !iv || !salt) { throw new Error('Missing argument !'); }
229235
// Processing
@@ -233,7 +239,7 @@ export class Crypto {
233239
const encIv = {
234240
iv: utility.ua2words(iv, 16),
235241
};
236-
const encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Hex.parse(convert.utf8ToHex(msg)), encKey, encIv);
242+
const encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Hex.parse(msg), encKey, encIv);
237243
// Result
238244
const result = convert.uint8ToHex(salt) + convert.uint8ToHex(iv) + CryptoJS.enc.Hex.stringify(encrypted.ciphertext);
239245
return result;
@@ -246,15 +252,20 @@ export class Crypto {
246252
* @param {string} recipientPub - A recipient public key
247253
* @param {string} msg - A text message
248254
* @param {SignSchema} signSchema The Sign Schema. (KECCAK(NIS1) / SHA3(Catapult))
255+
* @param {boolean} isHexString - Is payload string a hexadecimal string (default = false)
249256
* @return {string} - The encoded message
250257
*/
251-
public static encode = (senderPriv, recipientPub, msg, signSchema: SignSchema) => {
258+
public static encode = (senderPriv: string,
259+
recipientPub: string,
260+
msg: string,
261+
signSchema: SignSchema,
262+
isHexString: boolean = false): string => {
252263
// Errors
253264
if (!senderPriv || !recipientPub || !msg) { throw new Error('Missing argument !'); }
254265
// Processing
255266
const iv = Crypto.randomBytes(16);
256267
const salt = Crypto.randomBytes(32);
257-
const encoded = Crypto._encode(senderPriv, recipientPub, msg, iv, salt, signSchema);
268+
const encoded = Crypto._encode(senderPriv, recipientPub, isHexString ? msg : convert.utf8ToHex(msg), iv, salt, signSchema);
258269
// Result
259270
return encoded;
260271
}
@@ -264,11 +275,18 @@ export class Crypto {
264275
*
265276
* @param {string} recipientPrivate - A recipient private key
266277
* @param {string} senderPublic - A sender public key
267-
* @param {Uint8Array} _payload - An encrypted message payload in bytes
278+
* @param {Uint8Array} payload - An encrypted message payload in bytes
279+
* @param {Uint8Array} iv - 16-byte AES initialization vector
280+
* @param {Uint8Array} salt - 32-byte salt
268281
* @param {SignSchema} signSchema The Sign Schema. (KECCAK(NIS1) / SHA3(Catapult))
269282
* @return {string} - The decoded payload as hex
270283
*/
271-
public static _decode = (recipientPrivate, senderPublic, payload, iv, salt, signSchema: SignSchema) => {
284+
public static _decode = (recipientPrivate: string,
285+
senderPublic: string,
286+
payload: Uint8Array,
287+
iv: Uint8Array,
288+
salt: Uint8Array,
289+
signSchema: SignSchema): string => {
272290
// Error
273291
if (!recipientPrivate || !senderPublic || !payload) { throw new Error('Missing argument !'); }
274292
// Processing
@@ -292,10 +310,13 @@ export class Crypto {
292310
* @param {string} recipientPrivate - A recipient private key
293311
* @param {string} senderPublic - A sender public key
294312
* @param {string} payload - An encrypted message payload
295-
* @param {SignSchema} signSchema The Sign Schema. (KECCAK(NIS1) / SHA3(Catapult))
313+
* @param {SignSchema} signSchema - The Sign Schema. (KECCAK(NIS1) / SHA3(Catapult))
296314
* @return {string} - The decoded payload as hex
297315
*/
298-
public static decode = (recipientPrivate, senderPublic, payload, signSchema: SignSchema) => {
316+
public static decode = (recipientPrivate: string,
317+
senderPublic: string,
318+
payload: string,
319+
signSchema: SignSchema): string => {
299320
// Error
300321
if (!recipientPrivate || !senderPublic || !payload) { throw new Error('Missing argument !'); }
301322
// Processing

src/infrastructure/transaction/CreateTransactionFromDTO.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ import {RawUInt64 as UInt64Library} from '../../core/format';
1818
import {Address} from '../../model/account/Address';
1919
import {PublicAccount} from '../../model/account/PublicAccount';
2020
import {NetworkType} from '../../model/blockchain/NetworkType';
21-
import {Id} from '../../model/Id';
21+
import { EncryptedMessage } from '../../model/message/EncryptedMessage';
22+
import { MessageType } from '../../model/message/MessageType';
23+
import { PersistentHarvestingDelegationMessage } from '../../model/message/PersistentHarvestingDelegationMessage';
24+
import {EmptyMessage, PlainMessage} from '../../model/message/PlainMessage';
2225
import {Mosaic} from '../../model/mosaic/Mosaic';
2326
import {MosaicFlags} from '../../model/mosaic/MosaicFlags';
2427
import {MosaicId} from '../../model/mosaic/MosaicId';
@@ -34,9 +37,7 @@ import {AggregateTransaction} from '../../model/transaction/AggregateTransaction
3437
import {AggregateTransactionCosignature} from '../../model/transaction/AggregateTransactionCosignature';
3538
import {AggregateTransactionInfo} from '../../model/transaction/AggregateTransactionInfo';
3639
import {Deadline} from '../../model/transaction/Deadline';
37-
import { EncryptedMessage } from '../../model/transaction/EncryptedMessage';
3840
import {LockFundsTransaction} from '../../model/transaction/LockFundsTransaction';
39-
import { MessageType } from '../../model/transaction/MessageType';
4041
import { MosaicAddressRestrictionTransaction } from '../../model/transaction/MosaicAddressRestrictionTransaction';
4142
import {MosaicAliasTransaction} from '../../model/transaction/MosaicAliasTransaction';
4243
import {MosaicDefinitionTransaction} from '../../model/transaction/MosaicDefinitionTransaction';
@@ -47,7 +48,6 @@ import {MultisigAccountModificationTransaction} from '../../model/transaction/Mu
4748
import {MultisigCosignatoryModification} from '../../model/transaction/MultisigCosignatoryModification';
4849
import { NamespaceMetadataTransaction } from '../../model/transaction/NamespaceMetadataTransaction';
4950
import {NamespaceRegistrationTransaction} from '../../model/transaction/NamespaceRegistrationTransaction';
50-
import {EmptyMessage, PlainMessage} from '../../model/transaction/PlainMessage';
5151
import {SecretLockTransaction} from '../../model/transaction/SecretLockTransaction';
5252
import {SecretProofTransaction} from '../../model/transaction/SecretProofTransaction';
5353
import {SignedTransaction} from '../../model/transaction/SignedTransaction';
@@ -524,6 +524,8 @@ const extractMessage = (message: any): PlainMessage | EncryptedMessage => {
524524
PlainMessage.create(message.payload);
525525
} else if (message.type === MessageType.EncryptedMessage) {
526526
msgObj = EncryptedMessage.createFromPayload(message.payload);
527+
} else if (message.type === MessageType.PersistentHarvestingDelegationMessage) {
528+
msgObj = PersistentHarvestingDelegationMessage.createFromPayload(message.payload);
527529
}
528530
}
529531
return msgObj;

src/model/account/Account.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ import {Crypto, KeyPair} from '../../core/crypto';
1818
import {SHA3Hasher} from '../../core/crypto/SHA3Hasher';
1919
import {Convert, RawAddress} from '../../core/format';
2020
import {NetworkType} from '../blockchain/NetworkType';
21+
import {EncryptedMessage} from '../message/EncryptedMessage';
22+
import {PlainMessage} from '../message/PlainMessage';
2123
import {AggregateTransaction} from '../transaction/AggregateTransaction';
2224
import {CosignatureSignedTransaction} from '../transaction/CosignatureSignedTransaction';
2325
import {CosignatureTransaction} from '../transaction/CosignatureTransaction';
24-
import {EncryptedMessage} from '../transaction/EncryptedMessage';
25-
import {PlainMessage} from '../transaction/PlainMessage';
2626
import {SignedTransaction} from '../transaction/SignedTransaction';
2727
import {Transaction} from '../transaction/Transaction';
2828
import {Address} from './Address';

src/model/transaction/EncryptedMessage.ts renamed to src/model/message/EncryptedMessage.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ export class EncryptedMessage extends Message {
4242
* @param {NetworkType} networkType - Catapult network type
4343
* @return {EncryptedMessage}
4444
*/
45-
public static create(message: string, recipientPublicAccount: PublicAccount, privateKey, networkType: NetworkType) {
45+
public static create(message: string,
46+
recipientPublicAccount: PublicAccount,
47+
privateKey: string,
48+
networkType: NetworkType): EncryptedMessage {
4649
const signSchema = SHA3Hasher.resolveSignSchema(networkType);
4750
return new EncryptedMessage(
4851
Crypto.encode(privateKey,
File renamed without changes.

0 commit comments

Comments
 (0)