diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js
index 1c89a9efd41ed464014ebb6b9a13c4e58efe6980..43bb11975575dcc19d459600ddabfb97fa763c46 100644
--- a/javascript/src/iframe/viamapi-iframe.js
+++ b/javascript/src/iframe/viamapi-iframe.js
@@ -996,6 +996,83 @@ const connection = Penpal.connectToParent({
 
         return encodeResponse("200", response.data, "PDF signed");
     },
+    signDocument: async (passportUUID, documentUUID, documentContentType) => {
+
+      //TODO api is not finished
+
+      const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
+
+      if (
+        !authenticationPublicKey ||
+        !window.loadedIdentities[authenticationPublicKey] ||
+        !extendPinCodeTtl(authenticationPublicKey)
+      ) {
+        return encodeResponse("400", "", "Identity not authenticated");
+      }
+
+      const response = await getCertificateForPassport(passportUUID, true);
+
+      if (response.code !== "200") {
+        return encodeResponse("400", "", response.status);
+      }
+
+      const {
+        x509Certificate: passportCertificate,
+        privateKey: passportPrivateKey,
+        chain: passportChain
+      } = response.data;
+
+      const keys =
+        await createOneTimePassportCertificate(
+          makeid() + "-" + passportUUID, null, passportPrivateKey, passportCertificate);
+
+      const { privateKeyPEM: privateKeyOneTime, certificatePEM: certificateOneTime } = keys;
+
+      passportChain.push(passportCertificate);
+
+      const pdfContentType = 'application/pdf';
+
+      if (documentContentType !== pdfContentType) {
+        const convResponse = await executeRestfulFunction(
+          "private", window.viamApi, window.viamApi.documentConvertDocumentByUUID, null, documentUUID, documentContentType, pdfContentType);
+        if (convResponse.code !== "200") {
+          return encodeResponse("400", "", convResponse.status);
+        }
+      }
+
+      const downloadResponse = await executeRestfulFunction(
+        "private", window.viamApi, window.viamApi.documentGetDocumentByUUID, null, documentUUID, pdfContentType)
+
+      if (downloadResponse.code !== "200") {
+        return encodeResponse("400", "", downloadResponse.status);
+      }
+
+      let pdfRaw = this.base64ToByteArray(downloadResponse.data);
+
+      const signedPdf = await signPdf(pdfRaw, certificateOneTime, passportChain, privateKeyOneTime);
+
+      //for test
+      response.data.signedPdf = signedPdf;
+      //for test
+
+      // response = await executeRestfulFunction(
+      //     "private", window.viamApi, window.viamApi.passportGetEmailWithHeaderByPassport, null, passportUUID, emailMessage);
+      //
+      // if (response.code !== "200") {
+      //     return encodeResponse("400", "", response.status);
+      // }
+      //
+      // const signedEmail = await signEmail(response.data, certificateOneTime, passportChain, privateKeyOneTime);
+      //
+      // response = await executeRestfulFunction(
+      //     "private", window.viamApi, window.viamApi.signResignEmail, null, passportUUID, signedEmail);
+      //
+      // if (response.code !== "200") {
+      //     return encodeResponse("400", "", response.status);
+      // }
+
+      return encodeResponse("200", response.data, "PDF signed");
+    },
     documentCreateDocument: async (path, passportUUID, contenttype) => {
       const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
       if (
diff --git a/javascript/src/utilities/pdfUtilities.js b/javascript/src/utilities/pdfUtilities.js
index 952b374279ff3c58b81c8b96882f7dacb41d1b63..d7109fe2ea6fcc48238174583b60a9e1191d971c 100644
--- a/javascript/src/utilities/pdfUtilities.js
+++ b/javascript/src/utilities/pdfUtilities.js
@@ -706,7 +706,11 @@ async function sign_pki(signingCert, certificateChain, privateKey, data, date) {
 
 
 async function signPdfObjects (pdfRaw, signingCert, certificateChain, privateKey, date) {
-    date = typeof date !== 'undefined' ? date : new Date();
+    date = ((typeof date !== 'undefined') && (date !== null)) ? date : new Date();
+
+    if (pdfRaw instanceof Buffer) {
+      pdfRaw = new Uint8Array(pdfRaw);
+    } else
     if(pdfRaw instanceof ArrayBuffer) {
         pdfRaw = new Uint8Array(pdfRaw);
     }