diff --git a/js/privatebin.js b/js/privatebin.js
index 766e612..4a0ee3d 100644
--- a/js/privatebin.js
+++ b/js/privatebin.js
@@ -3736,6 +3736,17 @@ jQuery.PrivateBin = (function($, RawDeflate) {
});
};
+ /**
+ * return currently set data, used in unit testing
+ *
+ * @name ServerInteraction.getData
+ * @function
+ */
+ me.getData = function()
+ {
+ return data;
+ };
+
/**
* set success function
*
diff --git a/js/test/ServerInteraction.js b/js/test/ServerInteraction.js
new file mode 100644
index 0000000..6437737
--- /dev/null
+++ b/js/test/ServerInteraction.js
@@ -0,0 +1,40 @@
+'use strict';
+require('../common');
+
+describe('ServerInteraction', function () {
+ describe('prepare', function () {
+ afterEach(async function () {
+ // pause to let async functions conclude
+ await new Promise(resolve => setTimeout(resolve, 1900));
+ });
+ this.timeout(30000);
+ it('can prepare an encrypted paste', function () {
+ jsc.check(jsc.forall(
+ 'string',
+ 'string',
+ 'string',
+ async function (key, password, message) {
+ // pause to let async functions conclude
+ await new Promise(resolve => setTimeout(resolve, 300));
+ let clean = jsdom();
+ window.crypto = new WebCrypto();
+ message = message.trim();
+
+ $.PrivateBin.ServerInteraction.prepare();
+ $.PrivateBin.ServerInteraction.setCryptParameters(password, key);
+ $.PrivateBin.ServerInteraction.setUnencryptedData('adata', [
+ // encryption parameters defined by CryptTool, format, discussion, burn after reading
+ null, 'plaintext', 0, 0
+ ]);
+ $.PrivateBin.ServerInteraction.setUnencryptedData('meta', {'expire': '5min'});
+ await $.PrivateBin.ServerInteraction.setCipherMessage({'paste': message});
+ //console.log($.PrivateBin.ServerInteraction.getData());
+ clean();
+ // TODO currently not testing anything and just used to generate v2 pastes for starting development of server side v2 implementation
+ return true;
+ }
+ ),
+ {tests: 3});
+ });
+ });
+});
diff --git a/tpl/bootstrap.php b/tpl/bootstrap.php
index 25dbf1a..311893f 100644
--- a/tpl/bootstrap.php
+++ b/tpl/bootstrap.php
@@ -71,7 +71,7 @@ if ($MARKDOWN):
endif;
?>
-
+
diff --git a/tpl/page.php b/tpl/page.php
index 4165e72..eb6bea0 100644
--- a/tpl/page.php
+++ b/tpl/page.php
@@ -49,7 +49,7 @@ if ($MARKDOWN):
endif;
?>
-
+
diff --git a/tst/Bootstrap.php b/tst/Bootstrap.php
index 3ef80fb..a79c24b 100644
--- a/tst/Bootstrap.php
+++ b/tst/Bootstrap.php
@@ -31,11 +31,11 @@ class Helper
private static $pasteid = '5e9bc25c89fb3bf9';
/**
- * example paste
+ * example paste version 1
*
* @var array
*/
- private static $paste = array(
+ private static $pasteV1 = array(
'data' => '{"iv":"EN39/wd5Nk8HAiSG2K5AsQ","v":1,"iter":1000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"QKN1DBXe5PI","ct":"8hA83xDdXjD7K2qfmw5NdA"}',
'attachment' => '{"iv":"Pd4pOKWkmDTT9uPwVwd5Ag","v":1,"iter":1000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"ZIUhFTliVz4","ct":"6nOCU3peNDclDDpFtJEBKA"}',
'attachmentname' => '{"iv":"76MkAtOGC4oFogX/aSMxRA","v":1,"iter":1000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"ZIUhFTliVz4","ct":"b6Ae/U1xJdsX/+lATud4sQ"}',
@@ -46,6 +46,32 @@ class Helper
),
);
+ /**
+ * example paste version 2
+ *
+ * @var array
+ */
+ private static $pasteV2 = array(
+ 'adata' => array(
+ array(
+ 'gMSNoLOk4z0RnmsYwXZ8mw==',
+ 'TZO+JWuIuxs=',
+ 100000,
+ 256,
+ 128,
+ 'aes',
+ 'gcm',
+ 'zlib'
+ ),
+ 'plaintext',
+ 0,
+ 0
+ ),
+ 'meta' => array( 'expire' => '5min' ),
+ 'v' => 2,
+ 'ct' => 'ME5JF/YBEijp2uYMzLZozbKtWc5wfy6R59NBb7SmRig='
+ );
+
/**
* example ID of a comment
*
@@ -103,7 +129,7 @@ class Helper
*/
public static function getPasteWithAttachment($meta = array())
{
- $example = self::$paste;
+ $example = self::$pasteV1;
$example['meta']['salt'] = ServerSalt::generate();
$example['meta'] = array_merge($example['meta'], $meta);
return $example;