diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js
index 4cf84a9efc8e154f4af1b295b12399e2562acb62..1c0ede632df4f1708a04611a09f29df32926ea54 100644
--- a/javascript/src/iframe/viamapi-iframe.js
+++ b/javascript/src/iframe/viamapi-iframe.js
@@ -544,17 +544,83 @@ function encryptMessage(message, password, label) {
 
 //*********************************************************************************
 function decryptMessage(message, password) {
-  const secret = pvutils.stringToArrayBuffer(password);
-  const buffer = decodePEM(message);
-
-  const asn1 = asn1js.fromBER(buffer);
-  const content = new pkijs.ContentInfo({schema: asn1.result});
-  const enveloped = new pkijs.EnvelopedData({schema: content.content});
-  return enveloped.decrypt(0, {preDefinedData: secret}).then(result => {
-    return pvutils.arrayBufferToString(result);
-  }).catch(() => {
-    throw("Wrong pincode")
-  })
+  if (canTryPincode()) {
+    const secret = pvutils.stringToArrayBuffer(password);
+    const buffer = decodePEM(message);
+
+    const asn1 = asn1js.fromBER(buffer);
+    const content = new pkijs.ContentInfo({schema: asn1.result});
+    const enveloped = new pkijs.EnvelopedData({schema: content.content});
+    return enveloped.decrypt(0, {preDefinedData: secret}).then(result => {
+      return pvutils.arrayBufferToString(result);
+    }).catch(() => {
+      failPincodeAttempt(password);
+    });
+  } else {
+    return new Promise(function () {
+      const message = getTimeLeftInLocalStorage();
+      throw(message);
+    });
+  }
+}
+
+//*********************************************************************************
+function getBlockFinishTimeInLocalStorage() {
+  return localStorage.getItem("blockFinishTime") ? localStorage.getItem("blockFinishTime") : getCurrentTime();
+}
+
+function getCurrentTime() {
+  return Math.floor(new Date().getTime() / 1000);
+}
+
+function getTimeLeftInLocalStorage() {
+  const blockFinishTime = getBlockFinishTimeInLocalStorage();
+  console.log("blockFinishTime:", blockFinishTime);
+  const timeNow = getCurrentTime();
+  const seconds = (blockFinishTime - timeNow) % 60;
+  let minutes = Math.floor((blockFinishTime - timeNow) / 60);
+  minutes %= 60;
+
+  const left = "Your identity has been blocked. Try again in " + minutes + " minutes and " + seconds + " seconds.";
+  return left;
+}
+
+function failPincodeAttempt(password) {
+  let message = "Wrong pincode";
+  if (password !== '00000000') {
+    let attempt = localStorage.getItem("attempt") || 1;
+    attempt = parseInt(attempt);
+    if (attempt === 9) {
+      var identitiesTemp = listIdentitiesFromLocalStorage();
+      for(var i in identitiesTemp) {
+        destroyIdentityFromLocalStorage(i)
+      }
+      message = "9 failed attempts. Identity is revoked!";
+      localStorage.removeItem("attempt");
+      console.log("identity is revoked!");
+    } else if (attempt % 3 === 0) {
+      const timeNow = getCurrentTime();
+      const blockFinishTime = timeNow + 10;
+      localStorage.setItem("blockFinishTime", blockFinishTime);
+      localStorage.setItem("attempt", attempt + 1);
+      message = "3 failed attempts. Identity is blocked!";
+    } else {
+      localStorage.setItem("attempt", attempt + 1);
+    }
+    console.log("Total Attempts:", attempt);
+  }
+  throw(message);
+}
+
+function canTryPincode() {
+  const timeNow = getCurrentTime();
+  const blockFinishTime = localStorage.getItem("blockFinishTime") || timeNow;
+  if (blockFinishTime <= timeNow) {
+    localStorage.removeItem("blockFinishTime");
+    return true;
+  } else {
+    return false;
+  }
 }
 
 //*********************************************************************************
@@ -1190,6 +1256,7 @@ function getProfileData(identity) {
     executeRestfulFunction("private", viamApi,
       viamApi.identityGetIdentityProfileData).then(executeResult => {
       if(executeResult.code === "200") {
+        localStorage.removeItem("attempt");
         console.log("In promise");
         console.log(executeResult);
         var listItem = {};