@Override public EncodedPayload encryptPayload(final byte[] message, final PublicKey senderPublicKey, final List<PublicKey> recipientPublicKeys) { final MasterKey masterKey = nacl.createMasterKey(); final Nonce nonce = nacl.randomNonce(); final Nonce recipientNonce = nacl.randomNonce(); final byte[] cipherText = nacl.sealAfterPrecomputation(message, nonce, masterKey); final List<byte[]> encryptedMasterKeys = buildRecipientMasterKeys(senderPublicKey, recipientPublicKeys, recipientNonce, masterKey); return new EncodedPayload( senderPublicKey, cipherText, nonce, encryptedMasterKeys, recipientNonce, recipientPublicKeys ); }
@Override public RawTransaction encryptRawPayload(byte[] message, PublicKey sender) { final MasterKey masterKey = nacl.createMasterKey(); final Nonce nonce = nacl.randomNonce(); final byte[] cipherText = nacl.sealAfterPrecomputation(message, nonce, masterKey); final PrivateKey privateKey = keyManager.getPrivateKeyForPublicKey(sender); // TODO NL - check if it makes sense to compute a shared key from the public and private parts of the same key SharedKey sharedKey = nacl.computeSharedKey(sender, privateKey); final byte[] encryptedMasterKey = nacl.sealAfterPrecomputation(masterKey.getKeyBytes(), nonce, sharedKey); return new RawTransaction(cipherText, encryptedMasterKey, nonce, sender); }
@Override public RawTransaction encryptRawPayload(byte[] message, PublicKey sender) { final MasterKey masterKey = nacl.createMasterKey(); final Nonce nonce = nacl.randomNonce(); final byte[] cipherText = nacl.sealAfterPrecomputation(message, nonce, masterKey); final PrivateKey privateKey = keyManager.getPrivateKeyForPublicKey(sender); // TODO NL - check if it makes sense to compute a shared key from the public and private parts of the same key SharedKey sharedKey = nacl.computeSharedKey(sender, privateKey); final byte[] encryptedMasterKey = nacl.sealAfterPrecomputation(masterKey.getKeyBytes(), nonce, sharedKey); return new RawTransaction(cipherText, encryptedMasterKey, nonce, sender); }
@Override public EncodedPayloadWithRecipients encryptPayload(final byte[] message, final PublicKey senderPublicKey, final List<PublicKey> recipientPublicKeys) { final MasterKey masterKey = nacl.createMasterKey(); final Nonce nonce = nacl.randomNonce(); final Nonce recipientNonce = nacl.randomNonce(); final byte[] cipherText = nacl.sealAfterPrecomputation(message, nonce, masterKey); final List<byte[]> encryptedMasterKeys = buildRecipientMasterKeys(senderPublicKey, recipientPublicKeys, recipientNonce, masterKey); return new EncodedPayloadWithRecipients( new EncodedPayload(senderPublicKey, cipherText, nonce, encryptedMasterKeys, recipientNonce), recipientPublicKeys ); }