diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js
index efd6fe262831e165c52e6723ba09232701b48b6a..0bb7f7b785cc65655c94ea3eea2e00e5449c8b17 100644
--- a/javascript/src/iframe/viamapi-iframe.js
+++ b/javascript/src/iframe/viamapi-iframe.js
@@ -24,7 +24,8 @@ import {
   createPassportCertificate,
   decryptMessage,
   encryptMessage,
-  signEmail
+  signEmail,
+  verifySMIME
 } from "../utilities/signingUtilities";
 import { signPdf } from "../utilities/pdfUtilities";
 import CryptoData from "../CryptoData";
@@ -1051,6 +1052,35 @@ const connection = Penpal.connectToParent({
         );
       });
     },
+    verifySMIME: async (smimeString) => {
+      const authenticationPublicKey = localStorage.getItem(
+        "authenticatedIdentity"
+      );
+
+      if (
+        !authenticationPublicKey ||
+        !window.loadedIdentities[authenticationPublicKey] ||
+        !extendPinCodeTtl(authenticationPublicKey)
+      ) {
+        return encodeResponse("400", "", "Identity not authenticated");
+      }
+
+      const rootCaResponse = await executeRestfulFunction(
+        "private",
+        window.viamApi,
+        window.viamApi.signRetrieveRootCertificate,
+        null
+      );
+
+      if (rootCaResponse.code !== "200") {
+        return encodeResponse("400", "", rootCaResponse.status);
+      }
+
+      const rootCaPem = rootCaResponse.data;
+      const success = await verifySMIME(smimeString, rootCaPem);
+
+      return encodeResponse("200", success, "Verified succesfully");
+    },
     signEmail: async (passportUUID, emailArg, emailMessage) => {
       const authenticationPublicKey = localStorage.getItem(
         "authenticatedIdentity"