40
const
signature
=
EthCrypto.sign(
A.privateKey,
EthCrypto.hash.keccak256(secretMessage)
);
const
payload
=
{
message
:
secretMessage,
signature
};
const
encrypted
=
await EthCrypto.encryptWithPublicKey(
B.publicKey, privateKey
JSON.stringify(payload)
);
const
encryptedString
=
EthCrypto.cipher.stringify(encrypted);
Рисунок 5.1 – Шифрование и подпись сообщения
Когда получатель принимает сообщение, он начинает с расшифровки его
своим секретным ключом, а затем проверяет подпись.
const
encryptedObject
=
EthCrypto.cipher.parse(encryptedString);
const
decrypted
=
await EthCrypto.decryptWithPrivateKey (
B.privateKey,
encryptedObject
);
const
decryptedPayload
=
JSON.parse(decrypted);
const
senderAddress
=
EthCrypto.recover(
decryptedPayload.signature,
EthCrypto.hash.keccak256(payload.message)
);
console.log(
'Сообщение получено от '
+
senderAddress
+
': '
+
decryptedPayload.message
);
Рисунок 5.2 – Расшифровка
Теперь, когда пользователь
B получил сообщение, он также может
ответить. Чтобы сделать это, он должен восстановить открытый ключ
пользователя A.