diff --git a/src/leap/soledad/client/_db/blobs/__init__.py b/src/leap/soledad/client/_db/blobs/__init__.py
index b7b8ad1f38f08e89d49188f344ce2b7f551aa0cf..86e45381109b0bb3cc85ecff442fcbc78c95b44c 100644
--- a/src/leap/soledad/client/_db/blobs/__init__.py
+++ b/src/leap/soledad/client/_db/blobs/__init__.py
@@ -128,9 +128,9 @@ class StreamDecrypterBuffer(object):
             self.buf += data
             if SEPARATOR in self.buf:
                 marker, self.buf = self.buf.split(' ')
-                assert(len(marker) == 20)  # 4 byte size + 16 byte tag
-                size, tag = marker[:4], marker[4:]
-                self.current_blob_size = self.size_pack.unpack(size)[0]
+                size, tag = marker[:8], marker[8:]
+                tag = base64.urlsafe_b64decode(tag)
+                self.current_blob_size = int(size, 16)
                 self.received = len(self.buf)
                 blob_id = self.blobs_list.pop(0)
                 buf = DecrypterBuffer(blob_id, self.secret, tag)
diff --git a/src/leap/soledad/server/_streaming_resource.py b/src/leap/soledad/server/_streaming_resource.py
index 8ce304d13ab906cf16881f85303476dfad8c5908..9b672107a2c72dafb51c5770635c524846c6c01f 100644
--- a/src/leap/soledad/server/_streaming_resource.py
+++ b/src/leap/soledad/server/_streaming_resource.py
@@ -20,7 +20,7 @@ A twisted resource that serves download as a single stream of multiple blobs.
 <- [(size(blob_id), content(blob_id)) for blob_id in DATA] (as a binary stream)
 """
 import json
-import struct
+import base64
 
 from zope.interface import implementer
 from twisted.internet.interfaces import IPushProducer
@@ -38,7 +38,6 @@ __all__ = ['StreamingResource']
 
 
 logger = getLogger(__name__)
-SIZE_PACKER = struct.Struct('<I')
 
 
 class StreamingResource(Resource):
@@ -94,10 +93,11 @@ class DownstreamProducer(object):
         request, paths = self.request, self.paths
         while paths:
             blob_id, path, size = paths.pop(0)
-            request.write(SIZE_PACKER.pack(size))  # sends file size
+            request.write('%08x' % size)  # sends file size
             with open(path, 'rb') as blob_fd:
                 blob_fd.seek(-16, 2)
-                request.write(blob_fd.read())  # sends AES-GCM tag
+                encoded_tag = base64.urlsafe_b64encode(blob_fd.read())
+                request.write(encoded_tag)  # sends AES-GCM tag
                 blob_fd.seek(0)
                 request.write(' ')
                 data = blob_fd.read(self.chunk_size)