diff --git a/__tests__/ObfuscationService.test.js b/__tests__/ObfuscationService.test.js
index 1f6374c237920f867989ba3f5452f37ee81f68f9..115402f3fc146745f64c312ed3a2f530775d55aa 100644
--- a/__tests__/ObfuscationService.test.js
+++ b/__tests__/ObfuscationService.test.js
@@ -8,6 +8,7 @@ const encodeObject = (object) => {
 
 const decodeObject = (arrayBuffer) => {
   const decoder = new TextDecoder();
+  // console.log(decoder.decode(arrayBuffer));
   return JSON.parse(decoder.decode(arrayBuffer));
 };
 
diff --git a/__tests__/StatusesService.test.js b/__tests__/StatusesService.test.js
index 785d747af37fe75b4d548b44e4bf570f612c6c11..9684f08cc6f8d1db02bf5f9915f737238460d059 100644
--- a/__tests__/StatusesService.test.js
+++ b/__tests__/StatusesService.test.js
@@ -2,8 +2,19 @@ import { describe, test } from "@jest/globals";
 import StatusesService from "../src/services/StatusesService";
 
 describe("StatusesService", () => {
-  test("test", async () => {
+  test("encodes and decodes sender status object", async () => {
     const statusesService = new StatusesService();
-    statusesService.test();
+
+    const textEncoder = new TextEncoder(); // always utf-8
+    const stringBytes = textEncoder.encode("test bytes");
+
+    const statusObjectBytes = statusesService.encodeSenderStatusObject(
+      1,
+      stringBytes,
+      stringBytes,
+      {
+        attachment_1: stringBytes,
+      }
+    );
   });
 });
diff --git a/jest.config.js b/jest.config.js
index 65f67c97ba6a5b29cb8939b2ff134a12465b3b90..9914c02cafe204d40942dfd17701be4a7d0be971 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -135,7 +135,7 @@ module.exports = {
   // snapshotSerializers: [],
 
   // The test environment that will be used for testing
-  // testEnvironment: "jest-environment-jsdom",
+  testEnvironment: "jest-environment-node",
 
   // Options that will be passed to the testEnvironment
   // testEnvironmentOptions: {},
@@ -150,10 +150,7 @@ module.exports = {
   // ],
 
   // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
-  testPathIgnorePatterns: [
-    "/node_modules/",
-    "setupFiles.js"
-  ],
+  testPathIgnorePatterns: ["/node_modules/", "setupFiles.js"],
 
   // The regexp pattern or array of patterns that Jest uses to detect test files
   // testRegex: [],
diff --git a/src/services/StatusesService/StatusesService.ts b/src/services/StatusesService/StatusesService.ts
index 7d67db923ad2cac393e10e2135f3e32ae070da0b..4c07e4995d138b8f5791744769f3f65a553ff45b 100644
--- a/src/services/StatusesService/StatusesService.ts
+++ b/src/services/StatusesService/StatusesService.ts
@@ -1,4 +1,4 @@
-// const statuses = require("./objects/statuses_pb");
+const statuses = require("./objects/statuses_pb");
 // const { arrayBufferToBase64 } = require("../../../dist/utils");
 
 // var message = new messages.MyMessage();
@@ -41,12 +41,27 @@ class StatusesService {
    * @param messageSignature
    * @param attachmentsSignature
    */
-  // createSenderStatusObject(
-  //   signatureTime: number,
-  //   signatureTimeSignature: string,
-  //   messageSignature: string,
-  //   attachmentsSignature: { [key: string]: string }
-  // ): string {}
+  encodeSenderStatusObject(
+    signatureTime: number,
+    signatureTimeSignature: Uint8Array,
+    messageSignature: Uint8Array,
+    attachmentsSignature: { [key: string]: Uint8Array }
+  ): Uint8Array {
+    const senderStatusObject = new statuses.SenderStatusObject();
+    senderStatusObject.setSignaturetime(signatureTime);
+    senderStatusObject.setSignaturetimesignature(signatureTimeSignature);
+    senderStatusObject.setMessagesignature(messageSignature);
+
+    Object.keys(attachmentsSignature).forEach((key) => {
+      senderStatusObject
+        .getAttachmentssignatureMap()
+        .set(key, attachmentsSignature[key]);
+    });
+
+    console.log(senderStatusObject.toObject());
+
+    return senderStatusObject.serializeBinary();
+  }
 }
 
 export default StatusesService;
diff --git a/src/utils.ts b/src/utils.ts
index 2526cf7d85861bd650808321074bf0c5d08b32ba..37af78b36ae02ed714bd65b8cbb24b45125c0615 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -1,19 +1,15 @@
 export const arrayBufferToBase64 = (buffer: ArrayBuffer): string => {
-  let binary = "";
-  const bytes = new Uint8Array(buffer);
-  const len = bytes.byteLength;
-  for (let i = 0; i < len; i++) {
-    binary += String.fromCharCode(bytes[i]);
-  }
-  return window.btoa(binary);
+  return Buffer.from(buffer).toString("base64");
 };
 
 export const base64ToArrayBuffer = (base64: string): ArrayBuffer => {
-  const binaryString = window.atob(base64);
+  const binaryString = new Buffer(base64, "base64").toString();
   const len = binaryString.length;
   const bytes = new Uint8Array(len);
+
   for (let i = 0; i < len; i++) {
     bytes[i] = binaryString.charCodeAt(i);
   }
-  return bytes.buffer;
+
+  return bytes;
 };