• Страница:
  • 1
  • 2

ТЕМА: Новый SDK

Re: Новый SDK 4 мес., 1 нед. назад #4907

  • mussinalibek
  • Новый участник
  • Постов: 5
  • Репутация: 0
Не приложился, отправлю как txt)
Там расширение поменяйте на *.js

const url = 'wss://127.0.0.1:13579/';

let socket;

let isConnected = false;

let onHashGet = null;
let onKeyInfo = null;

function connect() {
  socket = new WebSocket(url);

  socket.onopen = function() {
    isConnected = true;
  }

  socket.onmessage = function (event) {
    const object = JSON.parse(event.data);

    if(object.responseObject) {
      switch(true) {
        case onHashGet !== null:
          onHashGet(object.responseObject);
          onHashGet = null;
          break;
  
        case onKeyInfo !== null:
          const data = object.responseObject;
  
          if(!data.subjectDn.includes("O=")) {
            onKeyInfo(null);
          }
          else {
            const array = [];
  
            array.push("Издатель ЭЦП - " + data.issuerCn);
            array.push(
              getSubstring(data.subjectDn, "CN=") + ' ' +
              getSubstring(data.subjectDn, "G=") + ', ' +
              getSubstring(data.subjectDn, "SERIALNUMBER=")
            );
            array.push(
              getSubstring(data.subjectDn, "O=") + ', '+ 
              getSubstring(data.subjectDn, "OU=")
            );
  
            const info = array.join(',<br/>');
  
            onKeyInfo(info);
            onKeyInfo = null;
          }
          break;
      }
    }
  };

  socket.onclose = function (event) {
    isConnected = false;
  
    setTimeout(() => {
      connect();
    }, 1000);
  }

  socket.onerror = function(err) {
    socket.close();
  };
}

connect();

// socket.onclose = function (event) {
//   isConnected = false;

//   setInterval(() => {
//     console.log('recconection');

//     socket = new WebSocket(url)
//   }, 1000);
// }

// socket.addEventListener('message', function (event) {
//   const object = JSON.parse(event.data);

//   isConnected = true;

//   if(object.responseObject) {
//     switch(true) {
//       case onHashGet !== null:
//         onHashGet(object.responseObject);
//         break;

//       case onKeyInfo !== null:
//         const data = object.responseObject;

//         if(!data.subjectDn.includes("O=")) {
//           onKeyInfo(null);
//         }
//         else {
//           const array = [];

//           array.push("Издатель ЭЦП - " + data.issuerCn);
//           array.push(
//             getSubstring(data.subjectDn, "CN=") + ' ' +
//             getSubstring(data.subjectDn, "G=") + ', ' +
//             getSubstring(data.subjectDn, "SERIALNUMBER=")
//           );
//           array.push(
//             getSubstring(data.subjectDn, "O=") + ', '+ 
//             getSubstring(data.subjectDn, "OU=")
//           );

//           const info = array.join(',<br/>');

//           onKeyInfo(info);
//         }
//         break;
//     }
//   }
// });

export function sign(string) {
  return new Promise((resolve, reject)  => {
    onHashGet = resolve;

    const base64 = b64EncodeUnicode(string);

    const object = {
      "module": "kz.gov.pki.knca.commonUtils",
      "method": "createCMSSignatureFromBase64",
      "args": ["PKCS12", "SIGNATURE", base64, false]
    };

    socket.send(JSON.stringify(object));
  });
}

export function signBase64(base64) {
  return new Promise((resolve, reject)  => {
    onHashGet = resolve;

    const object = {
      "module": "kz.gov.pki.knca.commonUtils",
      "method": "createCMSSignatureFromBase64",
      "args": ["PKCS12", "SIGNATURE", base64, false]
    };

    socket.send(JSON.stringify(object));
  });
}

export function getKeyInfo(){
  return new Promise((resolve, reject)  => {
    onKeyInfo = resolve;

    const object = {
      "module": "kz.gov.pki.knca.commonUtils",
      "method": "getKeyInfo",
      "args": ["PKCS12"]
    };

    socket.send(JSON.stringify(object));
  });
}

export function getIsConnected() {
  return isConnected;
}

function b64EncodeUnicode(str) {
  return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
    function toSolidBytes(match, p1) {
      return String.fromCharCode('0x' + p1);
    }));
}

function getSubstring(text, string) {
  const start = text.indexOf(string) + string.length;

  return text.substring(start, text.indexOf(",", start));
}

export default {};

// function b64DecodeUnicode(str) {
//   return decodeURIComponent(atob(str).split('').map(function(c) {
//       return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
//   }).join(''));
// }
Изменено: 4 мес., 1 нед. назад от mussinalibek.
Спасибо сказали: bisekenov.m

Re: Новый SDK 4 мес., 1 нед. назад #4908

  • bisekenov.m
  • Новый участник
  • Постов: 7
  • Репутация: 0
Спасибо! Можно кое что еще спросить, просто не знаю как реализовать, с pki работаю впервые. faq sdk курю уже вторую неделю и никак не могу разобраться.
У меня задача такая, с сотрудника приходит запрос например на "справку с место работы", сервер ищет его в базе, в соответствии с данными выдает справку и формирует справку в pdf. и подписывает ЭЦП организации. Например как egov.
Теперь что мне подписать чтобы справка имела юридическую силу? подписать текст с помощью
VerifyData()
или подписать сам файл pdf.
Например я подписываю, потом мне генерируется
outSign
выходные данные файла, в таком виде:
:pinch: ВНИМАНИЕ: СПОЙЛЕР!

Чтобы в спорных ситуациях (например когда гос.органы отказываются его принимать) чтобы наша организация могла доказать/проверить подлинность подписи я должен его в файл накладывать? Например в виде QR кода? или достаточно вместе с выданной справкой этот код "---BEGIN CMS---- ggFuMIIBagIBATBrMFMx...---END CMS----" сохранить в базе?
Не знаю, то ли я дурак то ли лыжи не едут

P.S: хотел проверить справку на сервере (подписанным сервером), но для этого надо знать "outSign" данные, такую "---BEGIN CMS---- ggFuMIIBagIBATBrMFMx...---END CMS----". Если такую у меня нет то как еще можно проверить подписанный файл? Например если надо проверить справку выданной в чужой ИС, допустим egov. Ответ от поддержки такой:
Обращаться к владельцам той ИС, документ которой вам необходимо проверить.
Если справка с egov, обращайтесь в поддержку egov.

Выходит чтобы проверить действительность выданной справки моим ИС должны обращаться ко мне?

спасибо!
Изменено: 4 мес., 1 нед. назад от bisekenov.m.
  • Страница:
  • 1
  • 2
FaLang translation system by Faboba