Skip to content
XaliljonPublic

About

E-IMZO QR code and eimzo:// deeplink for iOS in native Swift (OzDSt 1106 / GOST R 34.11-94, CRC32).

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

EImzoKit

E-IMZO QR kodini va eimzo://sign?qc=… deeplinkini native Swift'da yaratadi. Tashqi bog'liqliklar yo'q.

  • iOS 13+ (E-IMZO'ni ochish yordamchilari bilan), macOS 10.15+ (faqat payload)
  • Swift 6, Swift Package Manager

O'rnatish

Xcode → File → Add Package Dependencies… → https://github.com/Xaliljon/EImzoKit

yoki Package.swift:

.package(url: "https://github.com/Xaliljon/EImzoKit", from: "0.1.0")

Info.plist ga (faqat EImzo.isAppInstalled uchun kerak, openApp busiz ham ishlaydi):

<key>LSApplicationQueriesSchemes</key>
<array>
  <string>eimzo</string>
</array>

Ishlatish

import EImzoKit

// 1. Backend E-IMZO'da sessiya yaratadi: siteId, documentId, challange
let session = try await api.createSession()

// 2. Payload va deeplink
let qrCode = try EImzo.qrCode(
    siteId: session.siteId,
    documentId: session.documentId,
    challenge: session.challenge
)
let deeplink = EImzo.deeplink(qrCode: qrCode)

// 3. E-IMZO'ni ochish
if !(await EImzo.openApp(deeplink)) {
    // E-IMZO o'rnatilmagan: EImzo.appStoreURL ni taklif qiling yoki QR kodni ko'rsating
}

// 4. E-IMZO ilovaga callback qaytarmaydi. Foydalanuvchi qaytganda (scenePhase == .active)
//    backenddan statusni so'rang: 1 — imzolandi, 2 — kutilmoqda.

Hujjat imzolash uchun: EImzo.qrCode(siteId:documentId:document:) — fayl Data sifatida, matn esa Data(text.utf8) ko'rinishida.

Noto'g'ri siteId/documentId (bo'sh, hex emas yoki umumiy uzunligi toq) bo'lsa EImzoError.invalidIdentifiers tashlanadi.

Mexanizm

payload  = siteId + documentId + OzDSt1106(challenge) + CRC32
deeplink = eimzo://sign?qc=<payload>
  • siteId, documentId, challange — backend E-IMZO REST API'dan oladi (/frontend/mobile/auth).
  • OzDSt 1106 — E-IMZO ishlatadigan ko'rinishda GOST R 34.11-94 (RFC 5831) hashi, RFC 4357 dagi "D-A" S-box bilan. Matn UTF-8 baytlari bo'yicha hashlanadi. Natija — 64 ta hex belgi.
  • CRC32 — siteId + documentId + hash ning hex-dekodlangan baytlaridan, 8 ta hex belgi.
  • Hex kichik harfda, E-IMZO'ning rasmiy web va Android namunalaridagi kabi.

Misol (E-IMZO test serveridagi sessiya): siteId=20e2, documentId=7E744E86, challenge=56AAB952AB6D359A859086C64B9FE312 →

eimzo://sign?qc=20e27E744E86f2c2e107d1a1b82f1f473821e339255ebd1eb74408e53393a755d00dc4a50541dadd21fb

Misol ilova

Example/EImzoExample.xcodeproj ni ochib ishga tushiring (iOS 17+): sessiya → deeplink → E-IMZO → qaytganda status. Sessiya va status E-IMZO'ning ochiq test serveridan (test.e-imzo.uz) olinadi, rasmiy Android namunasidagi kabi.

⚠️ Productionda ilova E-IMZO bilan emas, faqat o'z backendingiz bilan gaplashadi: EImzoBackend protokolini o'z API'ingiz bilan yozing. Backend E-IMZO'ning /frontend/mobile/auth va /frontend/mobile/status metodlarini chaqiradi, imzo qo'yilgach /backend/mobile/authenticate/{documentId} orqali foydalanuvchini tekshirib, o'z tokeningizni beradi.

Simulatorda E-IMZO yo'q: ilovadagi QR kodni haqiqiy telefondagi E-IMZO bilan skanerlasangiz, ilova statusni o'zi tekshirib, "Imzolandi" holatiga o'tadi.

Tekshiruv

swift test
  • E-IMZO'ning rasmiy pkcs.js dagi GOST test vektorlari.
  • Blok chegaralari va 1 000 000 bayt — LibreSSL openssl dgst -md_gost94 natijalari bilan.
  • To'liq payloadlar LibreSSL + zlib.crc32 bilan mustaqil hisoblangan.

Manbalar

Litsenziya

MIT

About

E-IMZO QR code and eimzo:// deeplink for iOS in native Swift (OzDSt 1106 / GOST R 34.11-94, CRC32).

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages