Skip to content

Commit ac05f74

Browse files
committed
Update to 1.1.3
downloaded 2015-11-09
1 parent 0f35deb commit ac05f74

File tree

180 files changed

+5353
-5226
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

180 files changed

+5353
-5226
lines changed

README.md

+1-1

docs/classes/Curve25519.html

+30-30
Large diffs are not rendered by default.

docs/classes/FieldElement.html

+30-30
Large diffs are not rendered by default.

docs/classes/Poly1305.html

+30-30
Large diffs are not rendered by default.

docs/classes/Salsa20.html

+30-30
Large diffs are not rendered by default.

docs/classes/Salt.html

+30-30
Large diffs are not rendered by default.

docs/classes/SaltException.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.Base.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.Capability.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.Credits.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.Decrypt.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.DerivePublicKey.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.Encrypt.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.GenerateKeyPair.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.HashEmail.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.HashPhone.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.LookupIdByEmail.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.LookupIdByPhoneNo.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.LookupPublicKeyById.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.ReceiveMessage.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.SendE2EFile.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.SendE2EImage.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.SendE2EText.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Command.SendSimple.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Common.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Console.Run.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Core.AssocArray.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Core.Exception.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Core.KeyPair.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.Core.Url.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.Capability.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.CommandInterface.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.Credits.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.DownloadFile.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.FetchPublicKey.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.LookupEmail.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.LookupPhone.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.MultiPartCommandInterface.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.Results.CapabilityResult.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.Results.CreditsResult.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.Results.DownloadFileResult.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.Results.FetchPublicKeyResult.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.Results.LookupIdResult.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.Results.Result.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.Results.SendE2EResult.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.Results.SendSimpleResult.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.Results.UploadFileResult.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.SendE2E.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.SendSimple.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Commands.UploadFile.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Connection.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.ConnectionSettings.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Constants.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Exceptions.BadMessageException.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Exceptions.DecryptionFailedException.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Exceptions.InvalidArgumentException.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Exceptions.UnsupportedMessageTypeException.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Helpers.E2EHelper.html

+97-33
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Helpers.ReceiveMessageResult.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Messages.DeliveryReceipt.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Messages.FileMessage.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Messages.ImageMessage.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Messages.TextMessage.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Messages.ThreemaMessage.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.PublicKeyStore.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.PublicKeyStores.File.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.PublicKeyStores.PhpFile.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Receiver.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Tests.CommonTests.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Tests.Constants.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Tests.CryptToolTests.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Tools.CryptTool.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Tools.CryptToolSalt.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Tools.CryptToolSodium.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Tools.CryptToolSodiumDep.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Tools.EncryptResult.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Tools.FileAnalysisResult.html

+30-30
Large diffs are not rendered by default.

docs/classes/Threema.MsgApi.Tools.FileAnalysisTool.html

+30-30
Large diffs are not rendered by default.

docs/files/Salt.Curve25519.Curve25519.html

+30-30
Large diffs are not rendered by default.

docs/files/Salt.FieldElement.html

+30-30
Large diffs are not rendered by default.

docs/files/Salt.Poly1305.Poly1305.html

+30-30
Large diffs are not rendered by default.

docs/files/Salt.Salsa20.Salsa20.html

+30-30
Large diffs are not rendered by default.

docs/files/Salt.Salt.html

+30-30
Large diffs are not rendered by default.

docs/files/Salt.SaltException.html

+30-30
Large diffs are not rendered by default.

docs/files/Salt.autoload.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.Base.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.Capability.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.Credits.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.Decrypt.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.DerivePublicKey.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.Encrypt.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.GenerateKeyPair.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.HashEmail.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.HashPhone.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.LookupIdByEmail.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.LookupIdByPhoneNo.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.LookupPublicKeyById.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.ReceiveMessage.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.SendE2EFile.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.SendE2EImage.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.SendE2EText.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Command.SendSimple.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Common.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Console.Run.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Core.AssocArray.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Core.Exception.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Core.KeyPair.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.Core.Url.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.Capability.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.CommandInterface.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.Credits.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.DownloadFile.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.FetchPublicKey.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.LookupEmail.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.LookupPhone.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.MultiPartCommandInterface.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.Results.CapabilityResult.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.Results.CreditsResult.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.Results.DownloadFileResult.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.Results.FetchPublicKeyResult.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.Results.LookupIdResult.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.Results.Result.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.Results.SendE2EResult.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.Results.SendSimpleResult.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.Results.UploadFileResult.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.SendE2E.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.SendSimple.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Commands.UploadFile.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Connection.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.ConnectionSettings.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Constants.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Exceptions.BadMessageException.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Exceptions.DecryptionFailedException.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Exceptions.InvalidArgumentException.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Exceptions.UnsupportedMessageTypeException.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Helpers.E2EHelper.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Helpers.ReceiveMessageResult.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Messages.DeliveryReceipt.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Messages.FileMessage.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Messages.ImageMessage.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Messages.TextMessage.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Messages.ThreemaMessage.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.PublicKeyStore.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.PublicKeyStores.File.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.PublicKeyStores.PhpFile.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Receiver.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Tests.CommonTests.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Tests.Constants.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Tests.CryptToolTest.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Tools.CryptTool.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Tools.CryptToolSalt.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Tools.CryptToolSodium.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Tools.CryptToolSodiumDep.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Tools.EncryptResult.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Tools.FileAnalysisResult.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema.MsgApi.Tools.FileAnalysisTool.html

+30-30
Large diffs are not rendered by default.

docs/files/Threema/MsgApi/Helpers/E2EHelper.php.txt

+68-39
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use Threema\MsgApi\Commands\Results\CapabilityResult;
1111
use Threema\MsgApi\Connection;
1212
use Threema\MsgApi\Messages\FileMessage;
1313
use Threema\MsgApi\Messages\ImageMessage;
14+
use Threema\MsgApi\Messages\ThreemaMessage;
1415
use Threema\MsgApi\Tools\CryptTool;
1516
use Threema\Core\Exception;
1617
use Threema\MsgApi\Tools\FileAnalysisTool;
@@ -178,6 +179,7 @@ class E2EHelper {
178179
return $this->connection->sendE2E($threemaId, $nonce, $fileMessage);
179180
}
180181

182+
181183
/**
182184
* Encrypt a message and download the files of the message to the $outputFolder
183185
*
@@ -186,10 +188,19 @@ class E2EHelper {
186188
* @param string $box box as binary string
187189
* @param string $nonce nonce as binary string
188190
* @param string|null $outputFolder folder for storing the files
189-
* @throws \Threema\Core\Exception
191+
* @param \Closure $downloadMessage
190192
* @return ReceiveMessageResult
193+
* @throws Exception
194+
* @throws \Threema\MsgApi\Exceptions\BadMessageException
195+
* @throws \Threema\MsgApi\Exceptions\DecryptionFailedException
196+
* @throws \Threema\MsgApi\Exceptions\UnsupportedMessageTypeException
191197
*/
192-
public final function receiveMessage($threemaId, $messageId, $box, $nonce, $outputFolder = null) {
198+
public final function receiveMessage($threemaId,
199+
$messageId,
200+
$box,
201+
$nonce,
202+
$outputFolder = null,
203+
\Closure $downloadMessage = null) {
193204

194205
if($outputFolder == null || strlen($outputFolder) == 0) {
195206
$outputFolder = '.';
@@ -216,51 +227,48 @@ class E2EHelper {
216227
$receiveResult = new ReceiveMessageResult($messageId, $message);
217228

218229
if($message instanceof ImageMessage) {
219-
$result = $this->connection->downloadFile($message->getBlobId());
220-
if(null === $result || false === $result->isSuccess()) {
221-
throw new Exception('could not download the image with blob id '.$message->getBlobId());
222-
}
223-
224-
$image = $this->cryptTool->decryptImage(
225-
$result->getData(),
226-
hex2bin($receiverPublicKey->getPublicKey()),
227-
$this->privateKey,
228-
$message->getNonce()
229-
);
230+
$result = $this->downloadFile($message, $message->getBlobId(), $downloadMessage);
231+
if(null !== $result && true === $result->isSuccess()) {
232+
$image = $this->cryptTool->decryptImage(
233+
$result->getData(),
234+
hex2bin($receiverPublicKey->getPublicKey()),
235+
$this->privateKey,
236+
$message->getNonce()
237+
);
238+
239+
if (null === $image) {
240+
throw new Exception('decryption of image failed');
241+
}
242+
//save file
243+
$filePath = $outputFolder . '/' . $messageId . '.jpg';
244+
$f = fopen($filePath, 'w+');
245+
fwrite($f, $image);
246+
fclose($f);
230247

231-
if(null === $image) {
232-
throw new Exception('decryption of image failed');
248+
$receiveResult->addFile('image', $filePath);
233249
}
234-
//save file
235-
$filePath = $outputFolder.'/'.$messageId.'.jpg';
236-
$f = fopen($filePath, 'w+');
237-
fwrite($f, $image);
238-
fclose($f);
239-
240-
$receiveResult->addFile('image', $filePath);
241250
}
242251
else if($message instanceof FileMessage) {
243-
$result = $this->connection->downloadFile($message->getBlobId());
244-
if(null === $result || false === $result->isSuccess()) {
245-
throw new Exception('could not download the file with blob id '.$message->getBlobId());
246-
}
252+
$result = $this->downloadFile($message, $message->getBlobId(), $downloadMessage);
247253

248-
$file = $this->cryptTool->decryptFile(
249-
$result->getData(),
250-
hex2bin($message->getEncryptionKey()));
254+
if(null !== $result && true === $result->isSuccess()) {
255+
$file = $this->cryptTool->decryptFile(
256+
$result->getData(),
257+
hex2bin($message->getEncryptionKey()));
251258

252-
if(null === $file) {
253-
throw new Exception('file decryption failed');
254-
}
259+
if (null === $file) {
260+
throw new Exception('file decryption failed');
261+
}
255262

256-
//save file
257-
$filePath = $outputFolder.'/'.$messageId.'-'.$message->getFilename();
258-
file_put_contents($filePath, $file);
263+
//save file
264+
$filePath = $outputFolder . '/' . $messageId . '-' . $message->getFilename();
265+
file_put_contents($filePath, $file);
259266

260-
$receiveResult->addFile('file', $filePath);
267+
$receiveResult->addFile('file', $filePath);
268+
}
261269

262270
if(null !== $message->getThumbnailBlobId() && strlen($message->getThumbnailBlobId()) > 0) {
263-
$result = $this->connection->downloadFile($message->getThumbnailBlobId());
271+
$result = $this->downloadFile($message, $message->getThumbnailBlobId(), $downloadMessage);
264272
if(null !== $result && true === $result->isSuccess()) {
265273
$file = $this->cryptTool->decryptFileThumbnail(
266274
$result->getData(),
@@ -285,9 +293,9 @@ class E2EHelper {
285293
* Fetch a public key and check the capability of the threemaId
286294
*
287295
* @param string $threemaId
288-
* @param callable $capabilityCheck
296+
* @param \Closure $capabilityCheck
289297
* @return string Public key as binary
290-
* @throws \Threema\Core\Exception
298+
* @throws Exception
291299
*/
292300
private final function fetchPublicKeyAndCheckCapability($threemaId, \Closure $capabilityCheck = null) {
293301
//fetch the public key
@@ -307,5 +315,26 @@ class E2EHelper {
307315

308316
return hex2bin($receiverPublicKey->getPublicKey());
309317
}
318+
319+
/**
320+
* @param ThreemaMessage $message
321+
* @param string $blobId blob id as hex
322+
* @param \Closure|null $downloadMessage
323+
* @return null|\Threema\MsgApi\Commands\Results\DownloadFileResult
324+
* @throws Exception
325+
*/
326+
private final function downloadFile(ThreemaMessage $message, $blobId, \Closure $downloadMessage = null) {
327+
if(null === $downloadMessage
328+
|| true === $downloadMessage->__invoke($message, $blobId)) {
329+
//make a download
330+
$result = $this->connection->downloadFile($blobId);
331+
if(null === $result || false === $result->isSuccess()) {
332+
throw new Exception('could not download the file with blob id '.$blobId);
333+
}
334+
335+
return $result;
336+
}
337+
return null;
338+
}
310339
}
311340

0 commit comments

Comments
 (0)