diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d1d1a1a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,22 @@
+# Secrets — never commit real credentials
+.env
+OpenACExampleApp/Secrets.swift
+
+# Xcode
+xcuserdata/
+*.xccheckout
+*.moved-aside
+DerivedData/
+*.pbxuser
+*.mode1v3
+*.mode2v3
+*.perspectivev3
+*.hmap
+*.ipa
+
+# SPM
+.build/
+.swiftpm/
+
+# macOS
+.DS_Store
diff --git a/Info.plist b/Info.plist
new file mode 100644
index 0000000..ea7a04f
--- /dev/null
+++ b/Info.plist
@@ -0,0 +1,77 @@
+
+
+
+
+
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundleDisplayName
+ OpenACExampleApp
+ CFBundleVersion
+ $(CURRENT_PROJECT_VERSION)
+ CFBundleShortVersionString
+ $(MARKETING_VERSION)
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleInfoDictionaryVersion
+ 6.0
+
+
+ CFBundleURLTypes
+
+
+ CFBundleTypeRole
+ Editor
+ CFBundleURLName
+ mopro.OpenACExampleApp
+ CFBundleURLSchemes
+
+ openac
+
+
+
+
+
+ LSApplicationQueriesSchemes
+
+ mobilemoica
+
+
+
+ UIApplicationSceneManifest
+
+ UIApplicationSupportsMultipleScenes
+
+ UISceneConfigurations
+
+
+
+ UIApplicationSupportsIndirectInputEvents
+
+
+
+ UILaunchScreen
+
+
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/OpenACExampleApp.xcodeproj/project.pbxproj b/OpenACExampleApp.xcodeproj/project.pbxproj
index ff714e1..6b7201e 100644
--- a/OpenACExampleApp.xcodeproj/project.pbxproj
+++ b/OpenACExampleApp.xcodeproj/project.pbxproj
@@ -408,13 +408,10 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = N3ESL929H7;
ENABLE_PREVIEWS = YES;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
- INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
- INFOPLIST_KEY_UILaunchScreen_Generation = YES;
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ GENERATE_INFOPLIST_FILE = NO;
+ INFOPLIST_FILE = Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -440,13 +437,10 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = N3ESL929H7;
ENABLE_PREVIEWS = YES;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
- INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
- INFOPLIST_KEY_UILaunchScreen_Generation = YES;
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ GENERATE_INFOPLIST_FILE = NO;
+ INFOPLIST_FILE = Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
diff --git a/OpenACExampleApp/ContentView.swift b/OpenACExampleApp/ContentView.swift
index f9b5b04..89939f4 100644
--- a/OpenACExampleApp/ContentView.swift
+++ b/OpenACExampleApp/ContentView.swift
@@ -8,7 +8,31 @@
import SwiftUI
struct ContentView: View {
- @State private var vm = ProofViewModel()
+ @Bindable var vm: ProofViewModel
+
+ private var spTicketSymbol: String {
+ switch vm.spTicketStatus {
+ case .idle, .running: return "ticket"
+ case .success: return "checkmark.circle.fill"
+ case .failure: return "xmark.circle.fill"
+ }
+ }
+
+ private var athResultSymbol: String {
+ switch vm.athResultStatus {
+ case .idle, .running: return "checkmark.shield"
+ case .success: return "checkmark.shield.fill"
+ case .failure: return "xmark.shield.fill"
+ }
+ }
+
+ private func spTicketColor(_ status: ProofViewModel.StepStatus) -> Color {
+ switch status {
+ case .idle, .running: return .secondary
+ case .success: return .green
+ case .failure: return .red
+ }
+ }
var body: some View {
NavigationStack {
@@ -22,13 +46,205 @@ struct ContentView: View {
}
}
+ // ── SP Ticket / MOICA ─────────────────────────────────
+ Section {
+ // Row 0 – ID number input
+ HStack {
+ Text("ID Number")
+ .font(.subheadline)
+ SecureField("e.g. A123456789", text: $vm.idNum)
+ .textFieldStyle(.roundedBorder)
+ }
+
+ // Row 1 – fetch ticket
+ HStack(spacing: 16) {
+ Image(systemName: spTicketSymbol)
+ .font(.title2)
+ .foregroundStyle(spTicketColor(vm.spTicketStatus))
+ .frame(width: 32)
+
+ VStack(alignment: .leading, spacing: 2) {
+ Text("Get SP Ticket").font(.headline)
+ Text("POST /fido/sp-ticket").font(.caption).foregroundStyle(.secondary)
+
+ if case .success(let detail) = vm.spTicketStatus {
+ Text(detail)
+ .font(.caption.monospacedDigit())
+ .foregroundStyle(.green)
+ .padding(.top, 2)
+ if let ticket = vm.spTicket {
+ Text(ticket)
+ .font(.caption.monospaced())
+ .foregroundStyle(.secondary)
+ .lineLimit(3)
+ .truncationMode(.middle)
+ .textSelection(.enabled)
+ .padding(.top, 1)
+ }
+ }
+ if case .failure(let msg) = vm.spTicketStatus {
+ Text(msg)
+ .font(.caption)
+ .foregroundStyle(.red)
+ .padding(.top, 2)
+ }
+ }
+
+ Spacer()
+
+ if case .running = vm.spTicketStatus {
+ ProgressView().controlSize(.small)
+ } else {
+ Button {
+ Task { await vm.computeSPTicket() }
+ } label: {
+ Image(systemName: "arrow.down.circle")
+ }
+ .buttonStyle(.bordered)
+ .controlSize(.small)
+ }
+ }
+ .padding(.vertical, 4)
+ .animation(.default, value: vm.spTicketStatus)
+
+ // Row 2 – open MOICA (visible once ticket is ready)
+ if vm.spTicket != nil {
+ HStack(spacing: 16) {
+ Image(systemName: "person.badge.key.fill")
+ .font(.title2)
+ .foregroundStyle(.blue)
+ .frame(width: 32)
+
+ VStack(alignment: .leading, spacing: 2) {
+ Text("Verify with MOICA").font(.headline)
+ Text("Opens mobilemoica:// · returns to openac://callback")
+ .font(.caption).foregroundStyle(.secondary)
+
+ if let val = vm.rtnVal {
+ Text("rtn_val: \(val)")
+ .font(.caption.monospacedDigit())
+ .foregroundStyle(.green)
+ .padding(.top, 2)
+ }
+ }
+
+ Spacer()
+
+ Button {
+ vm.openMOICA()
+ } label: {
+ Image(systemName: "arrow.up.forward.app")
+ }
+ .buttonStyle(.borderedProminent)
+ .controlSize(.small)
+ }
+ .padding(.vertical, 4)
+ }
+
+ // Row 3 – ath-result
+ if vm.spTicket != nil {
+ HStack(spacing: 16) {
+ Image(systemName: athResultSymbol)
+ .font(.title2)
+ .foregroundStyle(spTicketColor(vm.athResultStatus))
+ .frame(width: 32)
+
+ VStack(alignment: .leading, spacing: 2) {
+ Text("Auth Result").font(.headline)
+ Text("POST /fido/ath-result").font(.caption).foregroundStyle(.secondary)
+
+ if case .success(let detail) = vm.athResultStatus {
+ Text(detail)
+ .font(.caption.monospacedDigit())
+ .foregroundStyle(.green)
+ .padding(.top, 2)
+ }
+ if case .failure(let msg) = vm.athResultStatus {
+ Text(msg)
+ .font(.caption)
+ .foregroundStyle(.red)
+ .padding(.top, 2)
+ }
+ }
+
+ Spacer()
+
+ if case .running = vm.athResultStatus {
+ ProgressView().controlSize(.small)
+ } else {
+ Button {
+ Task { await vm.pollAthResult() }
+ } label: {
+ Image(systemName: "checkmark.shield")
+ }
+ .buttonStyle(.bordered)
+ .controlSize(.small)
+ }
+ }
+ .padding(.vertical, 4)
+ .animation(.default, value: vm.athResultStatus)
+ }
+
+ // Row 4 – generate input.json
+ HStack(spacing: 16) {
+ Image(systemName: {
+ switch vm.generateInputStatus {
+ case .idle, .running: return "doc.badge.gearshape"
+ case .success: return "checkmark.circle.fill"
+ case .failure: return "xmark.circle.fill"
+ }
+ }())
+ .font(.title2)
+ .foregroundStyle(spTicketColor(vm.generateInputStatus))
+ .frame(width: 32)
+
+ VStack(alignment: .leading, spacing: 2) {
+ Text("Generate Input").font(.headline)
+ Text("Build circuit input from MOICA response").font(.caption).foregroundStyle(.secondary)
+
+ if case .success(let detail) = vm.generateInputStatus {
+ Text(detail)
+ .font(.caption.monospacedDigit())
+ .foregroundStyle(.green)
+ .lineLimit(2)
+ .truncationMode(.middle)
+ .padding(.top, 2)
+ }
+ if case .failure(let msg) = vm.generateInputStatus {
+ Text(msg)
+ .font(.caption)
+ .foregroundStyle(.red)
+ .padding(.top, 2)
+ }
+ }
+
+ Spacer()
+
+ if case .running = vm.generateInputStatus {
+ ProgressView().controlSize(.small)
+ } else {
+ Button {
+ Task { await vm.runGenerateInput() }
+ } label: {
+ Image(systemName: "arrow.trianglehead.2.clockwise")
+ }
+ .buttonStyle(.bordered)
+ .controlSize(.small)
+ }
+ }
+ .padding(.vertical, 4)
+ .animation(.default, value: vm.generateInputStatus)
+ } header: {
+ Text("FIDO / MOICA")
+ }
+
// ── Pipeline Steps ─────────────────────────────────────
Section {
StepRow(index: 1, title: "Setup Keys",
subtitle: "Generate proving & verifying keys",
status: vm.setupStatus)
StepRow(index: 2, title: "Generate Proof",
- subtitle: "Prove the RS256 circuit",
+ subtitle: "Prove the sha256rsa4096 circuit",
status: vm.proveStatus)
StepRow(index: 3, title: "Verify",
subtitle: "Check the proof is valid",
@@ -69,7 +285,7 @@ private struct CircuitDownloadCard: View {
.font(.headline)
.foregroundStyle(.blue)
- Text("rs256.r1cs (~749 MB) must be downloaded before running the pipeline.")
+ Text("sha256rsa4096.r1cs (~97.43 MB) must be downloaded before running the pipeline.")
.font(.subheadline)
.foregroundStyle(.secondary)
@@ -190,5 +406,5 @@ private struct IndexBadge: View {
}
#Preview {
- ContentView()
+ ContentView(vm: ProofViewModel())
}
diff --git a/OpenACExampleApp/MOICA-G3.cer b/OpenACExampleApp/MOICA-G3.cer
new file mode 100644
index 0000000..a60b5ff
Binary files /dev/null and b/OpenACExampleApp/MOICA-G3.cer differ
diff --git a/OpenACExampleApp/MoicaFIDO.swift b/OpenACExampleApp/MoicaFIDO.swift
new file mode 100644
index 0000000..03c88b9
--- /dev/null
+++ b/OpenACExampleApp/MoicaFIDO.swift
@@ -0,0 +1,214 @@
+import Foundation
+import CryptoKit
+import CommonCrypto
+
+// MARK: - Configuration
+
+private func getSpServiceID() -> String {
+ ProcessInfo.processInfo.environment["FIDO_SP_SERVICE_ID"] ?? Secrets.fidoSpServiceID
+}
+
+private func getAESKeyBase64() -> String {
+ ProcessInfo.processInfo.environment["FIDO_AES_KEY"] ?? Secrets.fidoAESKey
+}
+
+private let baseURL = "https://fidoapi.moi.gov.tw"
+
+// MARK: - Models
+
+struct SpTicketParams {
+ var transactionID: String
+ var idNum: String
+ var opCode: String // "SIGN" | "ATH" | "NFCSIGN"
+ var opMode: String // "APP2APP" | "I-SCAN" | …
+ var hint: String
+ var timeLimit: String // e.g. "600"
+ var signData: String // base64 string
+ var signType: String // "PKCS#7" | "CMS" | "RAW"
+ var hashAlgorithm: String
+ var tbsEncoding: String // "base64" | "utf8"
+}
+
+struct SpTicketPayload: Decodable {
+ let transactionID: String
+ let spTicketID: String
+ let opCode: String
+
+ enum CodingKeys: String, CodingKey {
+ case transactionID = "transaction_id"
+ case spTicketID = "sp_ticket_id"
+ case opCode = "op_code"
+ }
+}
+
+struct SignResult: Decodable {
+ let hashedIDNum: String?
+ let signedResponse: String?
+ let idpChecksum: String?
+ let cert: String?
+
+ enum CodingKeys: String, CodingKey {
+ case hashedIDNum = "hashed_id_num"
+ case signedResponse = "signed_response"
+ case idpChecksum = "idp_checksum"
+ case cert
+ }
+}
+
+struct AthOrSignResultResponse: Decodable {
+ let errorCode: String
+ let errorMessage: String
+ let result: SignResult?
+
+ enum CodingKeys: String, CodingKey {
+ case errorCode = "error_code"
+ case errorMessage = "error_message"
+ case result
+ }
+}
+
+// MARK: - Checksum
+
+enum FIDOError: Error {
+ case invalidAESKey
+ case encryptionFailed
+ case invalidSpTicket(String)
+ case httpError(Int)
+ case decodingError(String)
+}
+
+/// Implements the 5-step sp_checksum algorithm from the spec.
+func computeSpChecksum(payload: String) throws -> String {
+ // [2] SHA-256 → hex string
+ let payloadData = Data(payload.utf8)
+ let sha256Bytes = SHA256.hash(data: payloadData)
+ let sha256Hex = sha256Bytes.map { String(format: "%02x", $0) }.joined()
+
+ // [1] decode AES key
+ guard let keyData = Data(base64Encoded: getAESKeyBase64()),
+ keyData.count == 32 else {
+ throw FIDOError.invalidAESKey
+ }
+
+ // [3] zero IV (12 bytes)
+ let iv = Data(repeating: 0, count: 12)
+
+ // [4] AES-256-GCM encrypt
+ let symmetricKey = SymmetricKey(data: keyData)
+ let nonce = try AES.GCM.Nonce(data: iv)
+ let sealed = try AES.GCM.seal(Data(sha256Hex.utf8), using: symmetricKey, nonce: nonce)
+
+ // ciphertext + tag (CryptoKit separates them)
+ let ciphertextWithTag = sealed.ciphertext + sealed.tag
+
+ // [5] hex(iv) + hex(ciphertext+tag)
+ let ivHex = iv.map { String(format: "%02x", $0) }.joined()
+ let ctHex = ciphertextWithTag.map { String(format: "%02x", $0) }.joined()
+ return ivHex + ctHex
+}
+
+// MARK: - sp_ticket decode
+
+/// Splits "Payload.Digest" on the last '.' and base64url-decodes the Payload segment.
+func decodeSpTicket(_ spTicket: String) throws -> SpTicketPayload {
+ guard let dotIndex = spTicket.lastIndex(of: ".") else {
+ throw FIDOError.invalidSpTicket("missing '.' separator")
+ }
+ let payloadB64 = String(spTicket[spTicket.startIndex.. 0 { base64 += String(repeating: "=", count: 4 - remainder) }
+
+ guard let raw = Data(base64Encoded: base64) else {
+ throw FIDOError.invalidSpTicket("base64 decode failed")
+ }
+
+ return try JSONDecoder().decode(SpTicketPayload.self, from: raw)
+}
+
+// MARK: - API: getSpTicket
+
+func getSpTicket(params: SpTicketParams) async throws -> String {
+ let payload = params.transactionID + getSpServiceID() + params.idNum +
+ params.opCode + params.opMode + params.hint + params.signData
+ let checksum = try computeSpChecksum(payload: payload)
+ print("checksum: \(checksum)")
+ print("payload: \(payload)")
+
+ let body: [String: Any] = [
+ "transaction_id": params.transactionID,
+ "sp_service_id": getSpServiceID(),
+ "sp_checksum": checksum,
+ "id_num": params.idNum,
+ "op_code": params.opCode,
+ "op_mode": params.opMode,
+ "hint": params.hint,
+ "time_limit": params.timeLimit,
+ "sign_info": [
+ "tbs_encoding": params.tbsEncoding,
+ "sign_data": params.signData,
+ "hash_algorithm": params.hashAlgorithm,
+ "sign_type": params.signType,
+ ]
+ ]
+
+ var req = URLRequest(url: URL(string: "\(baseURL)/moise/sp/getSpTicket")!)
+ req.httpMethod = "POST"
+ req.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
+ req.httpBody = try JSONSerialization.data(withJSONObject: body)
+
+ let (data, response) = try await URLSession.shared.data(for: req)
+ if let http = response as? HTTPURLResponse, http.statusCode != 200 {
+ throw FIDOError.httpError(http.statusCode)
+ }
+ return String(data: data, encoding: .utf8) ?? ""
+}
+
+// MARK: - API: getAthOrSignResult
+
+/// Per spec, callers should wait at least 4 seconds between poll attempts.
+func getAthOrSignResult(spTicket: String) async throws -> AthOrSignResultResponse {
+ let ticket = try decodeSpTicket(spTicket)
+
+ let payload = ticket.transactionID + getSpServiceID() + ticket.spTicketID
+ let checksum = try computeSpChecksum(payload: payload)
+
+ let body: [String: Any] = [
+ "transaction_id": ticket.transactionID,
+ "sp_service_id": getSpServiceID(),
+ "sp_checksum": checksum,
+ "sp_ticket_id": ticket.spTicketID,
+ ]
+
+ var req = URLRequest(url: URL(string: "\(baseURL)/moise/sp/getAthOrSignResult")!)
+ req.httpMethod = "POST"
+ req.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
+ req.httpBody = try JSONSerialization.data(withJSONObject: body)
+
+ let (data, response) = try await URLSession.shared.data(for: req)
+ if let http = response as? HTTPURLResponse, http.statusCode != 200 {
+ throw FIDOError.httpError(http.statusCode)
+ }
+ return try JSONDecoder().decode(AthOrSignResultResponse.self, from: data)
+}
+
+// MARK: - Poll Sign Result
+
+func pollSignResult(spTicket: String) async throws -> AthOrSignResultResponse {
+ while true {
+ let result = try await getAthOrSignResult(spTicket: spTicket)
+ switch result.errorCode {
+ case "0":
+ return result
+ case "20002", "20003":
+ print("Waiting for user action...")
+ try await Task.sleep(nanoseconds: 4_000_000_000) // 4 秒
+ default:
+ throw FIDOError.decodingError("error \(result.errorCode): \(result.errorMessage)")
+ }
+ }
+}
\ No newline at end of file
diff --git a/OpenACExampleApp/OpenACExampleAppApp.swift b/OpenACExampleApp/OpenACExampleAppApp.swift
index 213ac69..c76a3f0 100644
--- a/OpenACExampleApp/OpenACExampleAppApp.swift
+++ b/OpenACExampleApp/OpenACExampleAppApp.swift
@@ -9,9 +9,14 @@ import SwiftUI
@main
struct OpenACExampleAppApp: App {
+ @State private var vm = ProofViewModel()
+
var body: some Scene {
WindowGroup {
- ContentView()
+ ContentView(vm: vm)
+ .onOpenURL { url in
+ vm.handleCallback(url: url)
+ }
}
}
}
diff --git a/OpenACExampleApp/ProofViewModel.swift b/OpenACExampleApp/ProofViewModel.swift
index 586b153..fa8ffa1 100644
--- a/OpenACExampleApp/ProofViewModel.swift
+++ b/OpenACExampleApp/ProofViewModel.swift
@@ -5,10 +5,11 @@
import Foundation
import Observation
+import UIKit
import OpenACSwift
import ZIPFoundation
-private let circuitZipURL = URL(string: "https://github.com/zkmopro/zkID/releases/download/latest/rs256.r1cs.zip")!
+private let circuitZipURL = URL(string: "https://pub-ef10768896384fdf9617f26d43e11a65.r2.dev/sha256rsa4096.r1cs.zip")!
@Observable
@MainActor
@@ -57,15 +58,21 @@ final class ProofViewModel {
let fm = FileManager.default
try fm.createDirectory(at: workDir, withIntermediateDirectories: true)
+ // For simulator testing
// Copy bundled input.json on first launch.
if let src = Bundle.main.path(forResource: "input", ofType: "json") {
let dst = workDir.appendingPathComponent("input.json")
- if !fm.fileExists(atPath: dst.path) {
- try fm.copyItem(atPath: src, toPath: dst.path)
- }
+ print("copying input.json from \(src) to \(dst.path)")
+ try fm.copyItem(atPath: src, toPath: dst.path)
}
+ circuitReady = fm.fileExists(atPath: workDir.appendingPathComponent("sha256rsa4096.r1cs").path)
- circuitReady = fm.fileExists(atPath: workDir.appendingPathComponent("rs256.r1cs").path)
+ // Copy bundled MOICA-G3.cer into workDir if not already present
+ let certDest = workDir.appendingPathComponent("MOICA-G3.cer")
+ if !fm.fileExists(atPath: certDest.path),
+ let certSrc = Bundle.main.url(forResource: "MOICA-G3", withExtension: "cer") {
+ try fm.copyItem(at: certSrc, to: certDest)
+ }
}
// MARK: - Download Circuit
@@ -79,7 +86,7 @@ final class ProofViewModel {
unzipSeconds = nil
let tmpZip = FileManager.default.temporaryDirectory
- .appendingPathComponent("rs256.r1cs.zip")
+ .appendingPathComponent("sha256rsa4096.r1cs.zip")
let destDir = workDir
do {
@@ -112,7 +119,7 @@ final class ProofViewModel {
unzipSeconds = unzip
circuitReady = FileManager.default.fileExists(
- atPath: workDir.appendingPathComponent("rs256.r1cs").path
+ atPath: workDir.appendingPathComponent("sha256rsa4096.r1cs").path
)
} catch {
downloadError = error.localizedDescription
@@ -134,10 +141,107 @@ final class ProofViewModel {
try FileManager.default.moveItem(at: tmpURL, to: destination)
}
+ // MARK: - SP Ticket / MOICA
+
+ static let returnScheme = "openac"
+ static let returnURL = "\(returnScheme)://callback"
+
+ var idNum: String = "A123456789"
+ var spTicketStatus: StepStatus = .idle
+ var spTicket: String?
+ var tbs: String?
+ var rtnVal: String?
+
+ // Stored ath-result fields used to generate circuit input
+ var athResponseString: String?
+ var athIssuerCert: String?
+ var athIssuerId: String = "g2"
+ var generateInputStatus: StepStatus = .idle
+
+
+ func computeSPTicket() async {
+ spTicketStatus = .running
+ spTicket = nil
+ rtnVal = nil
+ do {
+ let raw = try await getSpTicket(params: SpTicketParams(
+ transactionID: UUID().uuidString,
+ idNum: idNum,
+ opCode: "SIGN",
+ opMode: "APP2APP",
+ hint: "待簽署資料",
+ timeLimit: "600",
+ signData: "ZTc3NWYyODA1ZmI5OTNlMDVhMjA4ZGJmZjE1ZDFjMQ==",
+ signType: "PKCS#1",
+ hashAlgorithm: "SHA256",
+ tbsEncoding: "base64"
+ ))
+
+ let json = try JSONSerialization.jsonObject(with: Data(raw.utf8)) as! [String: Any]
+ spTicket = ((json["result"] as? [String: Any])?["sp_ticket"] as? String) ?? ""
+ print("spTicket: \(spTicket)")
+
+ spTicketStatus = spTicket?.isEmpty == false
+ ? .success("ticket received")
+ : .failure("sp_ticket not found in response: \(raw)")
+ } catch {
+ spTicketStatus = .failure(error.localizedDescription)
+ print("spTicketStatus: \(spTicketStatus), error: \(error)")
+ }
+ }
+
+ var athResultStatus: StepStatus = .idle
+
+ func openMOICA() {
+ guard let ticket = spTicket else { return }
+ var comps = URLComponents()
+ comps.scheme = "mobilemoica"
+ comps.host = "moica.moi.gov.tw"
+ comps.path = "/a2a/verifySign"
+ let rtnUrlBase64 = Data(Self.returnURL.utf8).base64EncodedString()
+ comps.queryItems = [
+ URLQueryItem(name: "sp_ticket", value: ticket),
+ URLQueryItem(name: "rtn_url", value: rtnUrlBase64),
+ URLQueryItem(name: "rtn_val", value: ""),
+ ]
+ guard let deepLink = comps.url else { return }
+ print("deepLink: \(deepLink)")
+ UIApplication.shared.open(deepLink)
+ }
+
+
+ func pollAthResult() async {
+ athResultStatus = .running
+ guard let ticket = spTicket else {
+ athResultStatus = .failure("No sp_ticket available")
+ return
+ }
+ do {
+ let result = try await pollSignResult(spTicket: ticket)
+ athResponseString = result.result?.signedResponse
+ athIssuerCert = result.result?.cert
+ athResultStatus = .success("result: \(result)")
+ print("pollAthResult: \(athResultStatus)")
+ } catch {
+ athResultStatus = .failure(error.localizedDescription)
+ print("pollAthResult error: \(athResultStatus)")
+ }
+ }
+
+
+ func handleCallback(url: URL) {
+ guard url.scheme == Self.returnScheme,
+ let comps = URLComponents(url: url, resolvingAgainstBaseURL: false),
+ let item = comps.queryItems?.first(where: { $0.name == "rtn_val" })
+ else { return }
+ rtnVal = item.value
+ }
+
// MARK: - Pipeline Actions
func reset() {
+ generateInputStatus = .idle
setupStatus = .idle
proveStatus = .idle
verifyStatus = .idle
@@ -158,12 +262,43 @@ final class ProofViewModel {
isRunning = false
}
+ func runGenerateInput() async {
+ let tbs = "e775f2805fb993e05a208dbff15d1c1"
+ let outPath = workDir.appendingPathComponent("input.json").path
+ guard let certb64 = athIssuerCert else { return }
+ guard let signedResponse = athResponseString else { return }
+ let issuerCertPath = workDir.appendingPathComponent("MOICA-G3.cer").path
+ print("certb64: \(certb64)")
+ print("signedResponse: \(signedResponse)")
+ print("tbs: \(tbs)")
+ print("issuerCertPath: \(issuerCertPath)")
+ print("outPath: \(outPath)")
+ do {
+ let resultPath = try await Task.detached(priority: .userInitiated) {
+ try generateInputFido(
+ certb64: certb64,
+ signedResponse: signedResponse,
+ tbs: tbs,
+ issuerCertPath: issuerCertPath,
+ smtServer: nil,
+ issuerId: "g2",
+ outputPath: outPath
+ )
+ }.value
+ generateInputStatus = .success(outPath)
+ let resultJson = try JSONSerialization.jsonObject(with: Data(contentsOf: URL(fileURLWithPath: resultPath))) as? [String: Any]
+ print("resultJson: \(resultJson)")
+ } catch {
+ generateInputStatus = .failure(error.localizedDescription)
+ }
+ }
+
func runSetupKeys() async {
setupStatus = .running
let dp = documentsPath, ip = inputPath
do {
let msg = try await Task.detached(priority: .userInitiated) {
- try setupKeys(documentsPath: dp, inputPath: ip)
+ try setupKeysFido(documentsPath: dp, inputPath: ip)
}.value
setupStatus = .success(msg)
} catch {
@@ -176,7 +311,7 @@ final class ProofViewModel {
let dp = documentsPath, ip = inputPath
do {
let result = try await Task.detached(priority: .userInitiated) {
- try prove(documentsPath: dp, inputPath: ip)
+ try proveFido(documentsPath: dp, inputPath: ip)
}.value
proveStatus = .success("\(result.proveMs) ms · \(result.proofSizeBytes) B")
} catch {
@@ -189,7 +324,7 @@ final class ProofViewModel {
let dp = documentsPath
do {
let valid = try await Task.detached(priority: .userInitiated) {
- try verify(documentsPath: dp)
+ try verifyFido(documentsPath: dp)
}.value
verifyStatus = valid ? .success("Proof is valid") : .failure("Proof is invalid")
} catch {
diff --git a/OpenACExampleApp/input.json b/OpenACExampleApp/input.json
index 29d3fc8..fba14c0 100644
--- a/OpenACExampleApp/input.json
+++ b/OpenACExampleApp/input.json
@@ -1,4947 +1,3435 @@
{
- "actual_issuer_tbs_length": 929,
- "actual_user_cert_length": 1209,
- "issuer_rsa_modulus": [
- "932230206641401848877844445425379613",
- "1287813184044732092073377422384224016",
- "2331126630674950836225311866951768718",
- "360589092198180265212888939809011440",
- "1907563441447849965593182097950170942",
- "2461267770107958274517738559390273583",
- "1010733374954290575288780000092573838",
- "1683625718575020148930863150454080428",
- "129656507997600988365044273322969115",
- "510985421691116704543531666676558324",
- "2024945274094533494243013635215016762",
- "440263969485630072528881845058421990",
- "297876808398015751565134147336044994",
- "1365895900502788362712388888144105795",
- "1629108674610970206607912730364650912",
- "1391347499687288551910207307756127797",
- "3242019074581394271774350988041718"
- ],
- "issuer_rsa_signature": [
- "965568229795285643241515668459312630",
- "2421852676968634036437323278750978035",
- "778766183732444381452069825687263377",
- "1488170628553596179265362682399046449",
- "900657615547990518924136689177902079",
- "1534458891855660572476099782650058499",
- "2490073385647401409907062374676546585",
- "1708605517444913122292420194194941889",
- "2413442863116929327929910396483042924",
- "2119587273919973261416538825098632046",
- "2409139239914692852402434960849091454",
- "993294171745158051330089410216802097",
- "100653687134846040502204449506447309",
- "1856408120865602167339975731613485093",
- "1776138548364813655439119360512948322",
- "1288753746642150649311464213943377217",
- "1895562030354609820082169196270556"
- ],
- "issuer_tbs": [
- "48",
- "130",
- "3",
- "157",
- "160",
- "3",
- "2",
- "1",
- "2",
- "2",
- "16",
- "99",
- "154",
- "202",
- "136",
- "181",
- "104",
- "224",
- "247",
- "170",
- "172",
- "71",
- "25",
- "83",
- "249",
- "98",
- "253",
- "48",
- "13",
- "6",
- "9",
- "42",
- "134",
- "72",
- "134",
- "247",
- "13",
- "1",
- "1",
- "11",
- "5",
- "0",
- "48",
- "71",
- "49",
- "11",
- "48",
- "9",
- "6",
- "3",
- "85",
- "4",
- "6",
- "19",
- "2",
- "84",
- "87",
- "49",
- "18",
- "48",
- "16",
- "6",
- "3",
- "85",
- "4",
- "10",
- "12",
- "9",
- "232",
- "161",
- "140",
- "230",
- "148",
- "191",
- "233",
- "153",
- "162",
- "49",
- "36",
- "48",
- "34",
- "6",
- "3",
- "85",
- "4",
- "11",
- "12",
- "27",
- "229",
- "133",
- "167",
- "230",
- "148",
- "191",
- "233",
- "131",
- "168",
- "230",
- "134",
- "145",
- "232",
- "173",
- "137",
- "231",
- "174",
- "161",
- "231",
- "144",
- "134",
- "228",
- "184",
- "173",
- "229",
- "191",
- "131",
- "48",
- "30",
- "23",
- "13",
- "50",
- "50",
- "48",
- "55",
- "49",
- "50",
- "48",
- "52",
- "51",
- "53",
- "53",
- "54",
- "90",
- "23",
- "13",
- "50",
- "55",
- "48",
- "55",
- "49",
- "50",
- "49",
- "53",
- "53",
- "57",
- "53",
- "57",
- "90",
- "48",
- "60",
- "49",
- "11",
- "48",
- "9",
- "6",
- "3",
- "85",
- "4",
- "6",
- "19",
- "2",
- "84",
- "87",
- "49",
- "18",
- "48",
- "16",
- "6",
- "3",
- "85",
- "4",
- "3",
- "12",
- "9",
- "233",
- "132",
- "173",
- "233",
- "155",
- "133",
- "230",
- "150",
- "135",
- "49",
- "25",
- "48",
- "23",
- "6",
- "3",
- "85",
- "4",
- "5",
- "19",
- "16",
- "49",
- "50",
- "48",
- "48",
- "50",
- "50",
- "55",
- "55",
- "50",
- "50",
- "48",
- "48",
- "56",
- "50",
- "49",
- "53",
- "48",
- "130",
- "1",
- "34",
- "48",
- "13",
- "6",
- "9",
- "42",
- "134",
- "72",
- "134",
- "247",
- "13",
- "1",
- "1",
- "1",
- "5",
- "0",
- "3",
- "130",
- "1",
- "15",
- "0",
- "48",
- "130",
- "1",
- "10",
- "2",
- "130",
- "1",
- "1",
- "0",
- "186",
- "122",
- "17",
- "69",
- "136",
- "225",
- "254",
- "234",
- "165",
- "26",
- "14",
- "25",
- "107",
- "190",
- "95",
- "63",
- "149",
- "45",
- "32",
- "14",
- "67",
- "165",
- "199",
- "188",
- "60",
- "252",
- "111",
- "245",
- "56",
- "157",
- "13",
- "138",
- "59",
- "245",
- "227",
- "67",
- "168",
- "247",
- "254",
- "4",
- "198",
- "124",
- "55",
- "15",
- "137",
- "180",
- "93",
- "41",
- "46",
- "185",
- "14",
- "126",
- "97",
- "215",
- "194",
- "58",
- "132",
- "246",
- "205",
- "83",
- "30",
- "4",
- "110",
- "76",
- "108",
- "32",
- "18",
- "228",
- "79",
- "20",
- "179",
- "208",
- "59",
- "216",
- "139",
- "28",
- "56",
- "88",
- "112",
- "106",
- "233",
- "81",
- "142",
- "165",
- "247",
- "16",
- "149",
- "202",
- "71",
- "55",
- "61",
- "3",
- "237",
- "233",
- "240",
- "159",
- "104",
- "58",
- "44",
- "136",
- "195",
- "98",
- "46",
- "82",
- "3",
- "47",
- "189",
- "227",
- "192",
- "169",
- "116",
- "120",
- "12",
- "101",
- "230",
- "197",
- "76",
- "74",
- "185",
- "59",
- "78",
- "28",
- "9",
- "33",
- "77",
- "252",
- "75",
- "144",
- "119",
- "26",
- "69",
- "24",
- "157",
- "144",
- "24",
- "105",
- "255",
- "8",
- "52",
- "4",
- "239",
- "255",
- "137",
- "11",
- "49",
- "102",
- "250",
- "34",
- "182",
- "69",
- "102",
- "79",
- "179",
- "247",
- "13",
- "236",
- "110",
- "118",
- "74",
- "157",
- "166",
- "148",
- "122",
- "171",
- "136",
- "246",
- "219",
- "112",
- "249",
- "226",
- "92",
- "161",
- "36",
- "85",
- "209",
- "205",
- "239",
- "115",
- "175",
- "1",
- "188",
- "240",
- "62",
- "213",
- "189",
- "100",
- "130",
- "208",
- "237",
- "161",
- "139",
- "210",
- "74",
- "84",
- "159",
- "31",
- "175",
- "181",
- "226",
- "248",
- "41",
- "178",
- "115",
- "98",
- "248",
- "20",
- "100",
- "77",
- "208",
- "153",
- "234",
- "124",
- "184",
- "90",
- "237",
- "215",
- "137",
- "3",
- "138",
- "28",
- "83",
- "10",
- "226",
- "217",
- "90",
- "68",
- "211",
- "45",
- "229",
- "213",
- "53",
- "130",
- "138",
- "228",
- "245",
- "86",
- "134",
- "162",
- "207",
- "140",
- "92",
- "226",
- "129",
- "24",
- "105",
- "221",
- "178",
- "92",
- "213",
- "59",
- "3",
- "69",
- "164",
- "193",
- "30",
- "69",
- "2",
- "3",
- "1",
- "0",
- "1",
- "163",
- "130",
- "1",
- "166",
- "48",
- "130",
- "1",
- "162",
- "48",
- "31",
- "6",
- "3",
- "85",
- "29",
- "35",
- "4",
- "24",
- "48",
- "22",
- "128",
- "20",
- "250",
- "155",
- "52",
- "103",
- "9",
- "10",
- "152",
- "34",
- "247",
- "98",
- "72",
- "139",
- "130",
- "38",
- "166",
- "69",
- "197",
- "195",
- "34",
- "164",
- "48",
- "29",
- "6",
- "3",
- "85",
- "29",
- "14",
- "4",
- "22",
- "4",
- "20",
- "192",
- "41",
- "190",
- "128",
- "217",
- "183",
- "243",
- "150",
- "2",
- "41",
- "128",
- "149",
- "170",
- "229",
- "244",
- "201",
- "120",
- "197",
- "193",
- "2",
- "48",
- "14",
- "6",
- "3",
- "85",
- "29",
- "15",
- "1",
- "1",
- "255",
- "4",
- "4",
- "3",
- "2",
- "7",
- "128",
- "48",
- "20",
- "6",
- "3",
- "85",
- "29",
- "32",
- "4",
- "13",
- "48",
- "11",
- "48",
- "9",
- "6",
- "7",
- "96",
- "134",
- "118",
- "101",
- "0",
- "3",
- "3",
- "48",
- "51",
- "6",
- "3",
- "85",
- "29",
- "9",
- "4",
- "44",
- "48",
- "42",
- "48",
- "21",
- "6",
- "7",
- "96",
- "134",
- "118",
- "1",
- "100",
- "2",
- "1",
- "49",
- "10",
- "6",
- "8",
- "96",
- "134",
- "118",
- "1",
- "100",
- "3",
- "1",
- "1",
- "48",
- "17",
- "6",
- "7",
- "96",
- "134",
- "118",
- "1",
- "100",
- "2",
- "51",
- "49",
- "6",
- "12",
- "4",
- "56",
- "51",
- "49",
- "49",
- "48",
- "124",
- "6",
- "3",
- "85",
- "29",
- "31",
- "4",
- "117",
- "48",
- "115",
- "48",
- "54",
- "160",
- "52",
- "160",
- "50",
- "134",
- "48",
- "104",
- "116",
- "116",
- "112",
- "58",
- "47",
- "47",
- "111",
- "99",
- "115",
- "112",
- "45",
- "109",
- "111",
- "105",
- "99",
- "97",
- "46",
- "109",
- "111",
- "105",
- "46",
- "103",
- "111",
- "118",
- "46",
- "116",
- "119",
- "47",
- "99",
- "114",
- "108",
- "47",
- "77",
- "79",
- "73",
- "67",
- "65",
- "45",
- "49",
- "48",
- "45",
- "51",
- "49",
- "46",
- "99",
- "114",
- "108",
- "48",
- "57",
- "160",
- "55",
- "160",
- "53",
- "134",
- "51",
- "104",
- "116",
- "116",
- "112",
- "58",
- "47",
- "47",
- "111",
- "99",
- "115",
- "112",
- "45",
- "109",
- "111",
- "105",
- "99",
- "97",
- "46",
- "109",
- "111",
- "105",
- "46",
- "103",
- "111",
- "118",
- "46",
- "116",
- "119",
- "47",
- "99",
- "114",
- "108",
- "47",
- "77",
- "79",
- "73",
- "67",
- "65",
- "45",
- "99",
- "111",
- "109",
- "112",
- "108",
- "101",
- "116",
- "101",
- "46",
- "99",
- "114",
- "108",
- "48",
- "129",
- "134",
- "6",
- "8",
- "43",
- "6",
- "1",
- "5",
- "5",
- "7",
- "1",
- "1",
- "4",
- "122",
- "48",
- "120",
- "48",
- "71",
- "6",
- "8",
- "43",
- "6",
- "1",
- "5",
- "5",
- "7",
- "48",
- "2",
- "134",
- "59",
- "104",
- "116",
- "116",
- "112",
- "58",
- "47",
- "47",
- "109",
- "111",
- "105",
- "99",
- "97",
- "46",
- "110",
- "97",
- "116",
- "46",
- "103",
- "111",
- "118",
- "46",
- "116",
- "119",
- "47",
- "114",
- "101",
- "112",
- "111",
- "115",
- "105",
- "116",
- "111",
- "114",
- "121",
- "47",
- "67",
- "101",
- "114",
- "116",
- "115",
- "47",
- "73",
- "115",
- "115",
- "117",
- "101",
- "100",
- "84",
- "111",
- "84",
- "104",
- "105",
- "115",
- "67",
- "65",
- "46",
- "112",
- "55",
- "98",
- "48",
- "45",
- "6",
- "8",
- "43",
- "6",
- "1",
- "5",
- "5",
- "7",
- "48",
- "1",
- "134",
- "33",
- "104",
- "116",
- "116",
- "112",
- "58",
- "47",
- "47",
- "111",
- "99",
- "115",
- "112",
- "45",
- "109",
- "111",
- "105",
- "99",
- "97",
- "46",
- "109",
- "111",
- "105",
- "46",
- "103",
- "111",
- "118",
- "46",
- "116",
- "119",
- "47",
- "79",
- "67",
- "83",
- "80",
- "128",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "29",
- "8",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0"
- ],
- "issuer_tbs_length": 960,
- "serialNumber": "132397293176834651891285756205883548413",
- "serial_number_offset": 15,
- "smtIsOld0": "1",
- "smtOldKey": "0",
- "smtOldValue": "0",
- "smtRoot": "0",
- "smtSiblings": [
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0"
- ],
- "subject_dn": [
- 48,
- 60,
- 49,
- 11,
- 48,
- 9,
- 6,
- 3,
- 85,
- 4,
- 6,
- 19,
- 2,
- 84,
- 87,
- 49,
- 18,
- 48,
- 16,
- 6,
- 3,
- 85,
- 4,
- 3,
- 12,
- 9,
- 233,
- 132,
- 173,
- 233,
- 155,
- 133,
- 230,
- 150,
- 135,
- 49,
- 25,
- 48,
- 23,
- 6,
- 3,
- 85,
- 4,
- 5,
- 19,
- 16,
- 49,
- 50,
- 48,
- 48,
- 50,
- 50,
- 55,
- 55,
- 50,
- 50,
- 48,
- 48,
- 56,
- 50,
- 49,
- 53,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "subject_dn_length": 62,
- "subject_dn_offset": 151,
- "tbs": [
- "101",
- "55",
- "55",
- "53",
- "102",
- "50",
- "56",
- "48",
- "53",
- "102",
- "98",
- "57",
- "57",
- "51",
- "101",
- "48",
- "53",
- "97",
- "50",
- "48",
- "56",
- "100",
- "98",
- "102",
- "102",
- "49",
- "53",
- "100",
- "49",
- "99",
- "49",
- "128",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "248",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0",
- "0"
- ],
- "tbs_length": 64,
- "user_cert_zero_padded": [
- 48,
- 130,
- 4,
- 181,
- 48,
- 130,
- 3,
- 157,
- 160,
- 3,
- 2,
- 1,
- 2,
- 2,
- 16,
- 99,
- 154,
- 202,
- 136,
- 181,
- 104,
- 224,
- 247,
- 170,
- 172,
- 71,
- 25,
- 83,
- 249,
- 98,
- 253,
- 48,
- 13,
- 6,
- 9,
- 42,
- 134,
- 72,
- 134,
- 247,
- 13,
- 1,
- 1,
- 11,
- 5,
- 0,
- 48,
- 71,
- 49,
- 11,
- 48,
- 9,
- 6,
- 3,
- 85,
- 4,
- 6,
- 19,
- 2,
- 84,
- 87,
- 49,
- 18,
- 48,
- 16,
- 6,
- 3,
- 85,
- 4,
- 10,
- 12,
- 9,
- 232,
- 161,
- 140,
- 230,
- 148,
- 191,
- 233,
- 153,
- 162,
- 49,
- 36,
- 48,
- 34,
- 6,
- 3,
- 85,
- 4,
- 11,
- 12,
- 27,
- 229,
- 133,
- 167,
- 230,
- 148,
- 191,
- 233,
- 131,
- 168,
- 230,
- 134,
- 145,
- 232,
- 173,
- 137,
- 231,
- 174,
- 161,
- 231,
- 144,
- 134,
- 228,
- 184,
- 173,
- 229,
- 191,
- 131,
- 48,
- 30,
- 23,
- 13,
- 50,
- 50,
- 48,
- 55,
- 49,
- 50,
- 48,
- 52,
- 51,
- 53,
- 53,
- 54,
- 90,
- 23,
- 13,
- 50,
- 55,
- 48,
- 55,
- 49,
- 50,
- 49,
- 53,
- 53,
- 57,
- 53,
- 57,
- 90,
- 48,
- 60,
- 49,
- 11,
- 48,
- 9,
- 6,
- 3,
- 85,
- 4,
- 6,
- 19,
- 2,
- 84,
- 87,
- 49,
- 18,
- 48,
- 16,
- 6,
- 3,
- 85,
- 4,
- 3,
- 12,
- 9,
- 233,
- 132,
- 173,
- 233,
- 155,
- 133,
- 230,
- 150,
- 135,
- 49,
- 25,
- 48,
- 23,
- 6,
- 3,
- 85,
- 4,
- 5,
- 19,
- 16,
- 49,
- 50,
- 48,
- 48,
- 50,
- 50,
- 55,
- 55,
- 50,
- 50,
- 48,
- 48,
- 56,
- 50,
- 49,
- 53,
- 48,
- 130,
- 1,
- 34,
- 48,
- 13,
- 6,
- 9,
- 42,
- 134,
- 72,
- 134,
- 247,
- 13,
- 1,
- 1,
- 1,
- 5,
- 0,
- 3,
- 130,
- 1,
- 15,
- 0,
- 48,
- 130,
- 1,
- 10,
- 2,
- 130,
- 1,
- 1,
- 0,
- 186,
- 122,
- 17,
- 69,
- 136,
- 225,
- 254,
- 234,
- 165,
- 26,
- 14,
- 25,
- 107,
- 190,
- 95,
- 63,
- 149,
- 45,
- 32,
- 14,
- 67,
- 165,
- 199,
- 188,
- 60,
- 252,
- 111,
- 245,
- 56,
- 157,
- 13,
- 138,
- 59,
- 245,
- 227,
- 67,
- 168,
- 247,
- 254,
- 4,
- 198,
- 124,
- 55,
- 15,
- 137,
- 180,
- 93,
- 41,
- 46,
- 185,
- 14,
- 126,
- 97,
- 215,
- 194,
- 58,
- 132,
- 246,
- 205,
- 83,
- 30,
- 4,
- 110,
- 76,
- 108,
- 32,
- 18,
- 228,
- 79,
- 20,
- 179,
- 208,
- 59,
- 216,
- 139,
- 28,
- 56,
- 88,
- 112,
- 106,
- 233,
- 81,
- 142,
- 165,
- 247,
- 16,
- 149,
- 202,
- 71,
- 55,
- 61,
- 3,
- 237,
- 233,
- 240,
- 159,
- 104,
- 58,
- 44,
- 136,
- 195,
- 98,
- 46,
- 82,
- 3,
- 47,
- 189,
- 227,
- 192,
- 169,
- 116,
- 120,
- 12,
- 101,
- 230,
- 197,
- 76,
- 74,
- 185,
- 59,
- 78,
- 28,
- 9,
- 33,
- 77,
- 252,
- 75,
- 144,
- 119,
- 26,
- 69,
- 24,
- 157,
- 144,
- 24,
- 105,
- 255,
- 8,
- 52,
- 4,
- 239,
- 255,
- 137,
- 11,
- 49,
- 102,
- 250,
- 34,
- 182,
- 69,
- 102,
- 79,
- 179,
- 247,
- 13,
- 236,
- 110,
- 118,
- 74,
- 157,
- 166,
- 148,
- 122,
- 171,
- 136,
- 246,
- 219,
- 112,
- 249,
- 226,
- 92,
- 161,
- 36,
- 85,
- 209,
- 205,
- 239,
- 115,
- 175,
- 1,
- 188,
- 240,
- 62,
- 213,
- 189,
- 100,
- 130,
- 208,
- 237,
- 161,
- 139,
- 210,
- 74,
- 84,
- 159,
- 31,
- 175,
- 181,
- 226,
- 248,
- 41,
- 178,
- 115,
- 98,
- 248,
- 20,
- 100,
- 77,
- 208,
- 153,
- 234,
- 124,
- 184,
- 90,
- 237,
- 215,
- 137,
- 3,
- 138,
- 28,
- 83,
- 10,
- 226,
- 217,
- 90,
- 68,
- 211,
- 45,
- 229,
- 213,
- 53,
- 130,
- 138,
- 228,
- 245,
- 86,
- 134,
- 162,
- 207,
- 140,
- 92,
- 226,
- 129,
- 24,
- 105,
- 221,
- 178,
- 92,
- 213,
- 59,
- 3,
- 69,
- 164,
- 193,
- 30,
- 69,
- 2,
- 3,
- 1,
- 0,
- 1,
- 163,
- 130,
- 1,
- 166,
- 48,
- 130,
- 1,
- 162,
- 48,
- 31,
- 6,
- 3,
- 85,
- 29,
- 35,
- 4,
- 24,
- 48,
- 22,
- 128,
- 20,
- 250,
- 155,
- 52,
- 103,
- 9,
- 10,
- 152,
- 34,
- 247,
- 98,
- 72,
- 139,
- 130,
- 38,
- 166,
- 69,
- 197,
- 195,
- 34,
- 164,
- 48,
- 29,
- 6,
- 3,
- 85,
- 29,
- 14,
- 4,
- 22,
- 4,
- 20,
- 192,
- 41,
- 190,
- 128,
- 217,
- 183,
- 243,
- 150,
- 2,
- 41,
- 128,
- 149,
- 170,
- 229,
- 244,
- 201,
- 120,
- 197,
- 193,
- 2,
- 48,
- 14,
- 6,
- 3,
- 85,
- 29,
- 15,
- 1,
- 1,
- 255,
- 4,
- 4,
- 3,
- 2,
- 7,
- 128,
- 48,
- 20,
- 6,
- 3,
- 85,
- 29,
- 32,
- 4,
- 13,
- 48,
- 11,
- 48,
- 9,
- 6,
- 7,
- 96,
- 134,
- 118,
- 101,
- 0,
- 3,
- 3,
- 48,
- 51,
- 6,
- 3,
- 85,
- 29,
- 9,
- 4,
- 44,
- 48,
- 42,
- 48,
- 21,
- 6,
- 7,
- 96,
- 134,
- 118,
- 1,
- 100,
- 2,
- 1,
- 49,
- 10,
- 6,
- 8,
- 96,
- 134,
- 118,
- 1,
- 100,
- 3,
- 1,
- 1,
- 48,
- 17,
- 6,
- 7,
- 96,
- 134,
- 118,
- 1,
- 100,
- 2,
- 51,
- 49,
- 6,
- 12,
- 4,
- 56,
- 51,
- 49,
- 49,
- 48,
- 124,
- 6,
- 3,
- 85,
- 29,
- 31,
- 4,
- 117,
- 48,
- 115,
- 48,
- 54,
- 160,
- 52,
- 160,
- 50,
- 134,
- 48,
- 104,
- 116,
- 116,
- 112,
- 58,
- 47,
- 47,
- 111,
- 99,
- 115,
- 112,
- 45,
- 109,
- 111,
- 105,
- 99,
- 97,
- 46,
- 109,
- 111,
- 105,
- 46,
- 103,
- 111,
- 118,
- 46,
- 116,
- 119,
- 47,
- 99,
- 114,
- 108,
- 47,
- 77,
- 79,
- 73,
- 67,
- 65,
- 45,
- 49,
- 48,
- 45,
- 51,
- 49,
- 46,
- 99,
- 114,
- 108,
- 48,
- 57,
- 160,
- 55,
- 160,
- 53,
- 134,
- 51,
- 104,
- 116,
- 116,
- 112,
- 58,
- 47,
- 47,
- 111,
- 99,
- 115,
- 112,
- 45,
- 109,
- 111,
- 105,
- 99,
- 97,
- 46,
- 109,
- 111,
- 105,
- 46,
- 103,
- 111,
- 118,
- 46,
- 116,
- 119,
- 47,
- 99,
- 114,
- 108,
- 47,
- 77,
- 79,
- 73,
- 67,
- 65,
- 45,
- 99,
- 111,
- 109,
- 112,
- 108,
- 101,
- 116,
- 101,
- 46,
- 99,
- 114,
- 108,
- 48,
- 129,
- 134,
- 6,
- 8,
- 43,
- 6,
- 1,
- 5,
- 5,
- 7,
- 1,
- 1,
- 4,
- 122,
- 48,
- 120,
- 48,
- 71,
- 6,
- 8,
- 43,
- 6,
- 1,
- 5,
- 5,
- 7,
- 48,
- 2,
- 134,
- 59,
- 104,
- 116,
- 116,
- 112,
- 58,
- 47,
- 47,
- 109,
- 111,
- 105,
- 99,
- 97,
- 46,
- 110,
- 97,
- 116,
- 46,
- 103,
- 111,
- 118,
- 46,
- 116,
- 119,
- 47,
- 114,
- 101,
- 112,
- 111,
- 115,
- 105,
- 116,
- 111,
- 114,
- 121,
- 47,
- 67,
- 101,
- 114,
- 116,
- 115,
- 47,
- 73,
- 115,
- 115,
- 117,
- 101,
- 100,
- 84,
- 111,
- 84,
- 104,
- 105,
- 115,
- 67,
- 65,
- 46,
- 112,
- 55,
- 98,
- 48,
- 45,
- 6,
- 8,
- 43,
- 6,
- 1,
- 5,
- 5,
- 7,
- 48,
- 1,
- 134,
- 33,
- 104,
- 116,
- 116,
- 112,
- 58,
- 47,
- 47,
- 111,
- 99,
- 115,
- 112,
- 45,
- 109,
- 111,
- 105,
- 99,
- 97,
- 46,
- 109,
- 111,
- 105,
- 46,
- 103,
- 111,
- 118,
- 46,
- 116,
- 119,
- 47,
- 79,
- 67,
- 83,
- 80,
- 48,
- 13,
- 6,
- 9,
- 42,
- 134,
- 72,
- 134,
- 247,
- 13,
- 1,
- 1,
- 11,
- 5,
- 0,
- 3,
- 130,
- 1,
- 1,
- 0,
- 93,
- 117,
- 91,
- 65,
- 102,
- 167,
- 21,
- 89,
- 27,
- 240,
- 73,
- 183,
- 83,
- 220,
- 124,
- 26,
- 59,
- 147,
- 212,
- 187,
- 87,
- 122,
- 17,
- 128,
- 24,
- 164,
- 77,
- 174,
- 160,
- 213,
- 132,
- 153,
- 13,
- 95,
- 220,
- 236,
- 109,
- 149,
- 135,
- 108,
- 44,
- 22,
- 190,
- 24,
- 172,
- 176,
- 255,
- 148,
- 212,
- 192,
- 195,
- 70,
- 71,
- 237,
- 61,
- 252,
- 81,
- 233,
- 4,
- 161,
- 54,
- 41,
- 194,
- 61,
- 62,
- 195,
- 148,
- 82,
- 45,
- 104,
- 51,
- 61,
- 60,
- 252,
- 213,
- 250,
- 105,
- 120,
- 64,
- 172,
- 24,
- 205,
- 193,
- 174,
- 12,
- 28,
- 198,
- 25,
- 185,
- 143,
- 63,
- 238,
- 240,
- 190,
- 24,
- 175,
- 61,
- 174,
- 119,
- 23,
- 56,
- 7,
- 174,
- 237,
- 251,
- 48,
- 111,
- 113,
- 35,
- 161,
- 115,
- 122,
- 101,
- 120,
- 47,
- 245,
- 94,
- 123,
- 54,
- 221,
- 208,
- 207,
- 235,
- 140,
- 18,
- 203,
- 101,
- 237,
- 207,
- 187,
- 207,
- 102,
- 172,
- 126,
- 108,
- 164,
- 136,
- 96,
- 194,
- 225,
- 200,
- 116,
- 78,
- 69,
- 97,
- 175,
- 229,
- 53,
- 243,
- 224,
- 247,
- 228,
- 134,
- 46,
- 38,
- 115,
- 198,
- 206,
- 112,
- 239,
- 231,
- 239,
- 134,
- 241,
- 6,
- 100,
- 240,
- 213,
- 66,
- 202,
- 211,
- 95,
- 30,
- 90,
- 179,
- 77,
- 47,
- 173,
- 234,
- 224,
- 106,
- 215,
- 93,
- 148,
- 247,
- 24,
- 147,
- 221,
- 97,
- 23,
- 184,
- 166,
- 135,
- 43,
- 191,
- 248,
- 244,
- 227,
- 208,
- 136,
- 115,
- 26,
- 109,
- 224,
- 139,
- 229,
- 39,
- 43,
- 177,
- 217,
- 138,
- 87,
- 240,
- 140,
- 149,
- 253,
- 140,
- 84,
- 25,
- 110,
- 71,
- 241,
- 188,
- 92,
- 98,
- 71,
- 164,
- 221,
- 28,
- 164,
- 96,
- 53,
- 137,
- 34,
- 206,
- 10,
- 27,
- 136,
- 140,
- 31,
- 230,
- 185,
- 246,
- 48,
- 113,
- 231,
- 206,
- 149,
- 85,
- 80,
- 140,
- 157,
- 85,
- 129,
- 85,
- 246,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "user_modulus_offset": 246,
- "user_modulus_tag_offset": 241,
- "user_rsa_signature": [
- "670805469181973516875438567386317902",
- "595498162979863822930172827552420101",
- "2651706331680498788370903284123664612",
- "1826944087010016758530633208331324419",
- "487628171817999600504751197065680099",
- "1761312124121051970041496978413762357",
- "1321499792656292377971470801759799072",
- "1388501242199356197053590606773374739",
- "1556386764739349565208105288639441018",
- "380072273813794514748689185532246205",
- "390985467406695680705336832371178229",
- "2435383271450282984787182027859110802",
- "2130346157777457927287311487463603274",
- "2415450150986339177588491392447426378",
- "632044598692293899896715499941851803",
- "1727033236971419281831763807306622317",
- "3483877609441698791479200202451634"
- ]
-}
\ No newline at end of file
+ "actual_issuer_tbs_length": 956,
+ "actual_user_cert_length": 1492,
+ "issuer_rsa_modulus": [
+ "1807942265592223367154362816422861039",
+ "2305953632643590616116593108295128755",
+ "1247496666922256604673024687049014315",
+ "582586442554820465572123764371146875",
+ "1911214889398011848293147002496757162",
+ "1760341856438509097467613130179572105",
+ "946211305863128728498149364763393529",
+ "1914270785507881386855757165255221128",
+ "2355589212739621903625068891028181420",
+ "1318539479410329602666430738353887327",
+ "606147831867297661886961942997159211",
+ "1864624912093997210597657924349861690",
+ "1056161645998086082529084524681240090",
+ "342293890805329623678173707944610280",
+ "2079791287327718906513016340551351061",
+ "1801207700871859621240269802726961226",
+ "22607211090886401884722297719612162",
+ "2415040216350041461666578701187456592",
+ "796235729849898084108882000090843539",
+ "2317527332343671675100670741738738015",
+ "903459836407102545305807494367285825",
+ "1197991867458093794092433451563936029",
+ "407701846101408942112311694735795682",
+ "285871239245410930192393697727176993",
+ "2100309427878174913807373581846478383",
+ "609837687574653654775568796596201421",
+ "476367808746265430460916865536822193",
+ "2611526023006769961151668235099534774",
+ "1522360231075168682257981231156150745",
+ "2284005754286955569252753003738152133",
+ "628604853518070777015357495459505064",
+ "2356246750639482851351502309910664046",
+ "1784413933351700362792618634493692618",
+ "6906918042249046255978038894271"
+ ],
+ "issuer_rsa_signature": [
+ "2112822056856181843548726467606971822",
+ "907742689414871613253808379091320352",
+ "966649284206692911648911274680194508",
+ "544448025807853890122692871167631236",
+ "832028145985696001758985965911211201",
+ "2397998302648344417513216067123690808",
+ "1968625008852953489120207238637144002",
+ "946838927664046607438321029152670002",
+ "982687931812455301905060846646880201",
+ "187710940099632809487494290878885722",
+ "2105161433429457278225546503497870165",
+ "178690297416334325479246658523040583",
+ "497884869163963687494894701861101372",
+ "2379484988214420082352001296017103022",
+ "2520458492783131907013829449793902347",
+ "1576776025759342640972734236513553671",
+ "407991830515808418358279595555599044",
+ "2149810395086779934405342818659027534",
+ "1821774300124971683171766597507778609",
+ "2372609958218075352881677715015945422",
+ "538296676968054153362025939359042633",
+ "809661135770462386390063555279646407",
+ "2338119238124460178571120262649733059",
+ "1013485245385458324966420211088294708",
+ "1746501051388139341056151310380541917",
+ "1483669734599901961202015016496393658",
+ "2172014725902208889237449011422617888",
+ "2500620176485614579807919098482727770",
+ "301919812316122675730350852340347283",
+ "290227427475568080869991795657810741",
+ "751828499104580777014585234910779621",
+ "1435245259736710442881282826558981231",
+ "716366577730711643937670541406908095",
+ "1283150059758547922111240485428"
+ ],
+ "issuer_tbs": [
+ "48",
+ "130",
+ "3",
+ "184",
+ "160",
+ "3",
+ "2",
+ "1",
+ "2",
+ "2",
+ "17",
+ "0",
+ "218",
+ "76",
+ "94",
+ "55",
+ "16",
+ "245",
+ "13",
+ "35",
+ "74",
+ "90",
+ "10",
+ "199",
+ "5",
+ "145",
+ "37",
+ "68",
+ "48",
+ "13",
+ "6",
+ "9",
+ "42",
+ "134",
+ "72",
+ "134",
+ "247",
+ "13",
+ "1",
+ "1",
+ "11",
+ "5",
+ "0",
+ "48",
+ "71",
+ "49",
+ "11",
+ "48",
+ "9",
+ "6",
+ "3",
+ "85",
+ "4",
+ "6",
+ "19",
+ "2",
+ "84",
+ "87",
+ "49",
+ "18",
+ "48",
+ "16",
+ "6",
+ "3",
+ "85",
+ "4",
+ "10",
+ "12",
+ "9",
+ "232",
+ "161",
+ "140",
+ "230",
+ "148",
+ "191",
+ "233",
+ "153",
+ "162",
+ "49",
+ "36",
+ "48",
+ "34",
+ "6",
+ "3",
+ "85",
+ "4",
+ "11",
+ "12",
+ "27",
+ "229",
+ "133",
+ "167",
+ "230",
+ "148",
+ "191",
+ "233",
+ "131",
+ "168",
+ "230",
+ "134",
+ "145",
+ "232",
+ "173",
+ "137",
+ "231",
+ "174",
+ "161",
+ "231",
+ "144",
+ "134",
+ "228",
+ "184",
+ "173",
+ "229",
+ "191",
+ "131",
+ "48",
+ "30",
+ "23",
+ "13",
+ "50",
+ "54",
+ "48",
+ "50",
+ "48",
+ "54",
+ "49",
+ "48",
+ "49",
+ "52",
+ "53",
+ "49",
+ "90",
+ "23",
+ "13",
+ "50",
+ "55",
+ "48",
+ "50",
+ "48",
+ "54",
+ "49",
+ "53",
+ "53",
+ "57",
+ "53",
+ "57",
+ "90",
+ "48",
+ "60",
+ "49",
+ "11",
+ "48",
+ "9",
+ "6",
+ "3",
+ "85",
+ "4",
+ "6",
+ "19",
+ "2",
+ "84",
+ "87",
+ "49",
+ "18",
+ "48",
+ "16",
+ "6",
+ "3",
+ "85",
+ "4",
+ "3",
+ "12",
+ "9",
+ "233",
+ "132",
+ "173",
+ "233",
+ "155",
+ "133",
+ "230",
+ "150",
+ "135",
+ "49",
+ "25",
+ "48",
+ "23",
+ "6",
+ "3",
+ "85",
+ "4",
+ "5",
+ "19",
+ "16",
+ "49",
+ "50",
+ "48",
+ "48",
+ "50",
+ "50",
+ "55",
+ "55",
+ "50",
+ "50",
+ "48",
+ "48",
+ "56",
+ "50",
+ "49",
+ "53",
+ "48",
+ "130",
+ "1",
+ "34",
+ "48",
+ "13",
+ "6",
+ "9",
+ "42",
+ "134",
+ "72",
+ "134",
+ "247",
+ "13",
+ "1",
+ "1",
+ "1",
+ "5",
+ "0",
+ "3",
+ "130",
+ "1",
+ "15",
+ "0",
+ "48",
+ "130",
+ "1",
+ "10",
+ "2",
+ "130",
+ "1",
+ "1",
+ "0",
+ "163",
+ "140",
+ "5",
+ "118",
+ "55",
+ "88",
+ "109",
+ "167",
+ "107",
+ "216",
+ "120",
+ "222",
+ "141",
+ "153",
+ "185",
+ "13",
+ "202",
+ "146",
+ "234",
+ "181",
+ "143",
+ "220",
+ "250",
+ "170",
+ "4",
+ "200",
+ "70",
+ "28",
+ "102",
+ "186",
+ "30",
+ "32",
+ "88",
+ "30",
+ "36",
+ "69",
+ "235",
+ "173",
+ "86",
+ "95",
+ "189",
+ "190",
+ "111",
+ "205",
+ "192",
+ "88",
+ "62",
+ "132",
+ "75",
+ "243",
+ "242",
+ "41",
+ "33",
+ "153",
+ "145",
+ "19",
+ "193",
+ "183",
+ "23",
+ "195",
+ "90",
+ "77",
+ "215",
+ "16",
+ "185",
+ "97",
+ "195",
+ "32",
+ "62",
+ "45",
+ "160",
+ "83",
+ "45",
+ "78",
+ "140",
+ "215",
+ "79",
+ "217",
+ "182",
+ "43",
+ "140",
+ "217",
+ "110",
+ "52",
+ "79",
+ "106",
+ "249",
+ "205",
+ "189",
+ "76",
+ "178",
+ "123",
+ "53",
+ "104",
+ "91",
+ "209",
+ "69",
+ "58",
+ "86",
+ "137",
+ "183",
+ "190",
+ "154",
+ "123",
+ "118",
+ "86",
+ "113",
+ "184",
+ "149",
+ "0",
+ "59",
+ "231",
+ "149",
+ "145",
+ "199",
+ "154",
+ "115",
+ "248",
+ "110",
+ "224",
+ "217",
+ "46",
+ "204",
+ "60",
+ "59",
+ "208",
+ "81",
+ "110",
+ "120",
+ "124",
+ "81",
+ "171",
+ "214",
+ "141",
+ "219",
+ "99",
+ "30",
+ "193",
+ "151",
+ "197",
+ "202",
+ "187",
+ "233",
+ "76",
+ "161",
+ "53",
+ "108",
+ "133",
+ "177",
+ "123",
+ "247",
+ "154",
+ "217",
+ "118",
+ "119",
+ "181",
+ "136",
+ "3",
+ "51",
+ "207",
+ "177",
+ "64",
+ "106",
+ "108",
+ "225",
+ "71",
+ "117",
+ "171",
+ "38",
+ "163",
+ "23",
+ "9",
+ "187",
+ "205",
+ "142",
+ "6",
+ "135",
+ "157",
+ "22",
+ "46",
+ "58",
+ "212",
+ "153",
+ "15",
+ "191",
+ "150",
+ "78",
+ "234",
+ "89",
+ "158",
+ "56",
+ "2",
+ "210",
+ "15",
+ "159",
+ "126",
+ "217",
+ "200",
+ "113",
+ "20",
+ "194",
+ "156",
+ "150",
+ "34",
+ "134",
+ "238",
+ "127",
+ "148",
+ "210",
+ "154",
+ "121",
+ "133",
+ "26",
+ "52",
+ "225",
+ "209",
+ "215",
+ "60",
+ "167",
+ "172",
+ "153",
+ "57",
+ "112",
+ "84",
+ "110",
+ "31",
+ "11",
+ "178",
+ "254",
+ "188",
+ "56",
+ "97",
+ "162",
+ "247",
+ "123",
+ "193",
+ "213",
+ "42",
+ "105",
+ "204",
+ "168",
+ "182",
+ "140",
+ "172",
+ "218",
+ "255",
+ "138",
+ "37",
+ "188",
+ "218",
+ "57",
+ "233",
+ "47",
+ "105",
+ "166",
+ "187",
+ "2",
+ "3",
+ "1",
+ "0",
+ "1",
+ "163",
+ "130",
+ "1",
+ "192",
+ "48",
+ "130",
+ "1",
+ "188",
+ "48",
+ "31",
+ "6",
+ "3",
+ "85",
+ "29",
+ "35",
+ "4",
+ "24",
+ "48",
+ "22",
+ "128",
+ "20",
+ "71",
+ "32",
+ "163",
+ "177",
+ "38",
+ "75",
+ "205",
+ "109",
+ "72",
+ "172",
+ "242",
+ "100",
+ "8",
+ "134",
+ "151",
+ "44",
+ "116",
+ "84",
+ "17",
+ "95",
+ "48",
+ "29",
+ "6",
+ "3",
+ "85",
+ "29",
+ "14",
+ "4",
+ "22",
+ "4",
+ "20",
+ "186",
+ "32",
+ "41",
+ "162",
+ "219",
+ "87",
+ "207",
+ "10",
+ "172",
+ "182",
+ "195",
+ "194",
+ "8",
+ "127",
+ "190",
+ "209",
+ "99",
+ "197",
+ "227",
+ "235",
+ "48",
+ "14",
+ "6",
+ "3",
+ "85",
+ "29",
+ "15",
+ "1",
+ "1",
+ "255",
+ "4",
+ "4",
+ "3",
+ "2",
+ "7",
+ "128",
+ "48",
+ "20",
+ "6",
+ "3",
+ "85",
+ "29",
+ "32",
+ "4",
+ "13",
+ "48",
+ "11",
+ "48",
+ "9",
+ "6",
+ "7",
+ "96",
+ "134",
+ "118",
+ "101",
+ "0",
+ "3",
+ "3",
+ "48",
+ "72",
+ "6",
+ "3",
+ "85",
+ "29",
+ "9",
+ "4",
+ "65",
+ "48",
+ "63",
+ "48",
+ "21",
+ "6",
+ "7",
+ "96",
+ "134",
+ "118",
+ "1",
+ "100",
+ "2",
+ "1",
+ "49",
+ "10",
+ "6",
+ "8",
+ "96",
+ "134",
+ "118",
+ "1",
+ "100",
+ "3",
+ "1",
+ "1",
+ "48",
+ "19",
+ "6",
+ "7",
+ "96",
+ "134",
+ "118",
+ "1",
+ "100",
+ "2",
+ "2",
+ "49",
+ "8",
+ "19",
+ "6",
+ "109",
+ "111",
+ "98",
+ "105",
+ "108",
+ "101",
+ "48",
+ "17",
+ "6",
+ "7",
+ "96",
+ "134",
+ "118",
+ "1",
+ "100",
+ "2",
+ "51",
+ "49",
+ "6",
+ "12",
+ "4",
+ "56",
+ "51",
+ "49",
+ "49",
+ "48",
+ "129",
+ "128",
+ "6",
+ "3",
+ "85",
+ "29",
+ "31",
+ "4",
+ "121",
+ "48",
+ "119",
+ "48",
+ "56",
+ "160",
+ "54",
+ "160",
+ "52",
+ "134",
+ "50",
+ "104",
+ "116",
+ "116",
+ "112",
+ "58",
+ "47",
+ "47",
+ "99",
+ "114",
+ "108",
+ "45",
+ "109",
+ "111",
+ "105",
+ "99",
+ "97",
+ "46",
+ "109",
+ "111",
+ "105",
+ "46",
+ "103",
+ "111",
+ "118",
+ "46",
+ "116",
+ "119",
+ "47",
+ "99",
+ "114",
+ "108",
+ "47",
+ "77",
+ "79",
+ "73",
+ "67",
+ "65",
+ "45",
+ "71",
+ "51",
+ "45",
+ "49",
+ "48",
+ "45",
+ "51",
+ "49",
+ "46",
+ "99",
+ "114",
+ "108",
+ "48",
+ "59",
+ "160",
+ "57",
+ "160",
+ "55",
+ "134",
+ "53",
+ "104",
+ "116",
+ "116",
+ "112",
+ "58",
+ "47",
+ "47",
+ "99",
+ "114",
+ "108",
+ "45",
+ "109",
+ "111",
+ "105",
+ "99",
+ "97",
+ "46",
+ "109",
+ "111",
+ "105",
+ "46",
+ "103",
+ "111",
+ "118",
+ "46",
+ "116",
+ "119",
+ "47",
+ "99",
+ "114",
+ "108",
+ "47",
+ "77",
+ "79",
+ "73",
+ "67",
+ "65",
+ "45",
+ "71",
+ "51",
+ "45",
+ "99",
+ "111",
+ "109",
+ "112",
+ "108",
+ "101",
+ "116",
+ "101",
+ "46",
+ "99",
+ "114",
+ "108",
+ "48",
+ "129",
+ "134",
+ "6",
+ "8",
+ "43",
+ "6",
+ "1",
+ "5",
+ "5",
+ "7",
+ "1",
+ "1",
+ "4",
+ "122",
+ "48",
+ "120",
+ "48",
+ "71",
+ "6",
+ "8",
+ "43",
+ "6",
+ "1",
+ "5",
+ "5",
+ "7",
+ "48",
+ "2",
+ "134",
+ "59",
+ "104",
+ "116",
+ "116",
+ "112",
+ "58",
+ "47",
+ "47",
+ "109",
+ "111",
+ "105",
+ "99",
+ "97",
+ "46",
+ "110",
+ "97",
+ "116",
+ "46",
+ "103",
+ "111",
+ "118",
+ "46",
+ "116",
+ "119",
+ "47",
+ "114",
+ "101",
+ "112",
+ "111",
+ "115",
+ "105",
+ "116",
+ "111",
+ "114",
+ "121",
+ "47",
+ "67",
+ "101",
+ "114",
+ "116",
+ "115",
+ "47",
+ "73",
+ "115",
+ "115",
+ "117",
+ "101",
+ "100",
+ "84",
+ "111",
+ "84",
+ "104",
+ "105",
+ "115",
+ "67",
+ "65",
+ "46",
+ "112",
+ "55",
+ "98",
+ "48",
+ "45",
+ "6",
+ "8",
+ "43",
+ "6",
+ "1",
+ "5",
+ "5",
+ "7",
+ "48",
+ "1",
+ "134",
+ "33",
+ "104",
+ "116",
+ "116",
+ "112",
+ "58",
+ "47",
+ "47",
+ "111",
+ "99",
+ "115",
+ "112",
+ "45",
+ "109",
+ "111",
+ "105",
+ "99",
+ "97",
+ "46",
+ "109",
+ "111",
+ "105",
+ "46",
+ "103",
+ "111",
+ "118",
+ "46",
+ "116",
+ "119",
+ "47",
+ "79",
+ "67",
+ "83",
+ "80",
+ "128",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "29",
+ "224",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0"
+ ],
+ "issuer_tbs_length": 1024,
+ "serialNumber": "290168228551659997759061707237914387780",
+ "serial_number_offset": 15,
+ "smtIsOld0": "1",
+ "smtOldKey": "0",
+ "smtOldValue": "0",
+ "smtRoot": "0",
+ "smtSiblings": [
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0"
+ ],
+ "subject_dn": [
+ 48, 60, 49, 11, 48, 9, 6, 3, 85, 4, 6, 19, 2, 84, 87, 49, 18, 48, 16, 6,
+ 3, 85, 4, 3, 12, 9, 233, 132, 173, 233, 155, 133, 230, 150, 135, 49, 25,
+ 48, 23, 6, 3, 85, 4, 5, 19, 16, 49, 50, 48, 48, 50, 50, 55, 55, 50, 50,
+ 48, 48, 56, 50, 49, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0
+ ],
+ "subject_dn_length": 62,
+ "subject_dn_offset": 152,
+ "tbs": [
+ "101",
+ "55",
+ "55",
+ "53",
+ "102",
+ "50",
+ "56",
+ "48",
+ "53",
+ "102",
+ "98",
+ "57",
+ "57",
+ "51",
+ "101",
+ "48",
+ "53",
+ "97",
+ "50",
+ "48",
+ "56",
+ "100",
+ "98",
+ "102",
+ "102",
+ "49",
+ "53",
+ "100",
+ "49",
+ "99",
+ "49",
+ "128",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "248",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0"
+ ],
+ "tbs_length": 64,
+ "user_cert_zero_padded": [
+ 48, 130, 5, 208, 48, 130, 3, 184, 160, 3, 2, 1, 2, 2, 17, 0, 218, 76,
+ 94, 55, 16, 245, 13, 35, 74, 90, 10, 199, 5, 145, 37, 68, 48, 13, 6, 9,
+ 42, 134, 72, 134, 247, 13, 1, 1, 11, 5, 0, 48, 71, 49, 11, 48, 9, 6, 3,
+ 85, 4, 6, 19, 2, 84, 87, 49, 18, 48, 16, 6, 3, 85, 4, 10, 12, 9, 232,
+ 161, 140, 230, 148, 191, 233, 153, 162, 49, 36, 48, 34, 6, 3, 85, 4, 11,
+ 12, 27, 229, 133, 167, 230, 148, 191, 233, 131, 168, 230, 134, 145, 232,
+ 173, 137, 231, 174, 161, 231, 144, 134, 228, 184, 173, 229, 191, 131,
+ 48, 30, 23, 13, 50, 54, 48, 50, 48, 54, 49, 48, 49, 52, 53, 49, 90, 23,
+ 13, 50, 55, 48, 50, 48, 54, 49, 53, 53, 57, 53, 57, 90, 48, 60, 49, 11,
+ 48, 9, 6, 3, 85, 4, 6, 19, 2, 84, 87, 49, 18, 48, 16, 6, 3, 85, 4, 3,
+ 12, 9, 233, 132, 173, 233, 155, 133, 230, 150, 135, 49, 25, 48, 23, 6,
+ 3, 85, 4, 5, 19, 16, 49, 50, 48, 48, 50, 50, 55, 55, 50, 50, 48, 48, 56,
+ 50, 49, 53, 48, 130, 1, 34, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1,
+ 1, 1, 5, 0, 3, 130, 1, 15, 0, 48, 130, 1, 10, 2, 130, 1, 1, 0, 163, 140,
+ 5, 118, 55, 88, 109, 167, 107, 216, 120, 222, 141, 153, 185, 13, 202,
+ 146, 234, 181, 143, 220, 250, 170, 4, 200, 70, 28, 102, 186, 30, 32, 88,
+ 30, 36, 69, 235, 173, 86, 95, 189, 190, 111, 205, 192, 88, 62, 132, 75,
+ 243, 242, 41, 33, 153, 145, 19, 193, 183, 23, 195, 90, 77, 215, 16, 185,
+ 97, 195, 32, 62, 45, 160, 83, 45, 78, 140, 215, 79, 217, 182, 43, 140,
+ 217, 110, 52, 79, 106, 249, 205, 189, 76, 178, 123, 53, 104, 91, 209,
+ 69, 58, 86, 137, 183, 190, 154, 123, 118, 86, 113, 184, 149, 0, 59, 231,
+ 149, 145, 199, 154, 115, 248, 110, 224, 217, 46, 204, 60, 59, 208, 81,
+ 110, 120, 124, 81, 171, 214, 141, 219, 99, 30, 193, 151, 197, 202, 187,
+ 233, 76, 161, 53, 108, 133, 177, 123, 247, 154, 217, 118, 119, 181, 136,
+ 3, 51, 207, 177, 64, 106, 108, 225, 71, 117, 171, 38, 163, 23, 9, 187,
+ 205, 142, 6, 135, 157, 22, 46, 58, 212, 153, 15, 191, 150, 78, 234, 89,
+ 158, 56, 2, 210, 15, 159, 126, 217, 200, 113, 20, 194, 156, 150, 34,
+ 134, 238, 127, 148, 210, 154, 121, 133, 26, 52, 225, 209, 215, 60, 167,
+ 172, 153, 57, 112, 84, 110, 31, 11, 178, 254, 188, 56, 97, 162, 247,
+ 123, 193, 213, 42, 105, 204, 168, 182, 140, 172, 218, 255, 138, 37, 188,
+ 218, 57, 233, 47, 105, 166, 187, 2, 3, 1, 0, 1, 163, 130, 1, 192, 48,
+ 130, 1, 188, 48, 31, 6, 3, 85, 29, 35, 4, 24, 48, 22, 128, 20, 71, 32,
+ 163, 177, 38, 75, 205, 109, 72, 172, 242, 100, 8, 134, 151, 44, 116, 84,
+ 17, 95, 48, 29, 6, 3, 85, 29, 14, 4, 22, 4, 20, 186, 32, 41, 162, 219,
+ 87, 207, 10, 172, 182, 195, 194, 8, 127, 190, 209, 99, 197, 227, 235,
+ 48, 14, 6, 3, 85, 29, 15, 1, 1, 255, 4, 4, 3, 2, 7, 128, 48, 20, 6, 3,
+ 85, 29, 32, 4, 13, 48, 11, 48, 9, 6, 7, 96, 134, 118, 101, 0, 3, 3, 48,
+ 72, 6, 3, 85, 29, 9, 4, 65, 48, 63, 48, 21, 6, 7, 96, 134, 118, 1, 100,
+ 2, 1, 49, 10, 6, 8, 96, 134, 118, 1, 100, 3, 1, 1, 48, 19, 6, 7, 96,
+ 134, 118, 1, 100, 2, 2, 49, 8, 19, 6, 109, 111, 98, 105, 108, 101, 48,
+ 17, 6, 7, 96, 134, 118, 1, 100, 2, 51, 49, 6, 12, 4, 56, 51, 49, 49, 48,
+ 129, 128, 6, 3, 85, 29, 31, 4, 121, 48, 119, 48, 56, 160, 54, 160, 52,
+ 134, 50, 104, 116, 116, 112, 58, 47, 47, 99, 114, 108, 45, 109, 111,
+ 105, 99, 97, 46, 109, 111, 105, 46, 103, 111, 118, 46, 116, 119, 47, 99,
+ 114, 108, 47, 77, 79, 73, 67, 65, 45, 71, 51, 45, 49, 48, 45, 51, 49,
+ 46, 99, 114, 108, 48, 59, 160, 57, 160, 55, 134, 53, 104, 116, 116, 112,
+ 58, 47, 47, 99, 114, 108, 45, 109, 111, 105, 99, 97, 46, 109, 111, 105,
+ 46, 103, 111, 118, 46, 116, 119, 47, 99, 114, 108, 47, 77, 79, 73, 67,
+ 65, 45, 71, 51, 45, 99, 111, 109, 112, 108, 101, 116, 101, 46, 99, 114,
+ 108, 48, 129, 134, 6, 8, 43, 6, 1, 5, 5, 7, 1, 1, 4, 122, 48, 120, 48,
+ 71, 6, 8, 43, 6, 1, 5, 5, 7, 48, 2, 134, 59, 104, 116, 116, 112, 58, 47,
+ 47, 109, 111, 105, 99, 97, 46, 110, 97, 116, 46, 103, 111, 118, 46, 116,
+ 119, 47, 114, 101, 112, 111, 115, 105, 116, 111, 114, 121, 47, 67, 101,
+ 114, 116, 115, 47, 73, 115, 115, 117, 101, 100, 84, 111, 84, 104, 105,
+ 115, 67, 65, 46, 112, 55, 98, 48, 45, 6, 8, 43, 6, 1, 5, 5, 7, 48, 1,
+ 134, 33, 104, 116, 116, 112, 58, 47, 47, 111, 99, 115, 112, 45, 109,
+ 111, 105, 99, 97, 46, 109, 111, 105, 46, 103, 111, 118, 46, 116, 119,
+ 47, 79, 67, 83, 80, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 11,
+ 5, 0, 3, 130, 2, 1, 0, 32, 100, 41, 180, 113, 131, 34, 202, 145, 168,
+ 20, 116, 104, 137, 247, 153, 100, 67, 206, 97, 68, 43, 247, 241, 241,
+ 116, 46, 191, 138, 53, 134, 255, 156, 107, 180, 177, 231, 33, 8, 133,
+ 13, 162, 55, 164, 51, 0, 113, 6, 9, 162, 139, 65, 54, 0, 236, 181, 166,
+ 57, 70, 252, 170, 36, 110, 221, 193, 20, 255, 54, 212, 110, 222, 4, 102,
+ 163, 162, 92, 188, 135, 216, 186, 98, 151, 113, 182, 157, 193, 39, 25,
+ 63, 12, 208, 191, 126, 30, 165, 143, 13, 207, 192, 190, 65, 232, 218,
+ 214, 137, 66, 96, 46, 87, 241, 79, 126, 39, 138, 180, 145, 131, 132,
+ 130, 59, 125, 33, 152, 169, 120, 69, 53, 18, 232, 68, 192, 39, 219, 117,
+ 80, 93, 38, 103, 231, 191, 122, 167, 40, 222, 253, 17, 251, 167, 221,
+ 97, 152, 87, 26, 213, 179, 17, 214, 233, 56, 59, 43, 190, 129, 154, 112,
+ 147, 139, 111, 79, 115, 204, 93, 179, 181, 16, 140, 146, 247, 240, 211,
+ 125, 236, 8, 112, 223, 183, 198, 195, 252, 64, 148, 249, 157, 216, 230,
+ 122, 193, 52, 48, 219, 27, 216, 239, 63, 48, 62, 55, 208, 196, 158, 71,
+ 149, 158, 163, 225, 237, 128, 219, 11, 19, 46, 114, 58, 102, 117, 123,
+ 113, 161, 129, 26, 243, 14, 41, 52, 249, 239, 69, 154, 32, 199, 60, 19,
+ 171, 250, 113, 127, 133, 62, 238, 75, 74, 40, 74, 148, 156, 78, 147,
+ 140, 224, 58, 178, 140, 131, 130, 105, 121, 164, 164, 178, 196, 151,
+ 214, 135, 180, 63, 69, 82, 208, 127, 63, 28, 163, 128, 38, 131, 249, 91,
+ 12, 172, 57, 181, 62, 104, 20, 90, 253, 159, 36, 229, 194, 249, 72, 181,
+ 93, 15, 254, 2, 203, 230, 231, 128, 4, 131, 115, 21, 197, 254, 57, 232,
+ 152, 254, 231, 132, 146, 132, 142, 170, 222, 53, 243, 193, 19, 80, 229,
+ 23, 81, 2, 78, 68, 221, 13, 89, 190, 24, 90, 62, 85, 193, 227, 116, 236,
+ 192, 200, 3, 81, 197, 204, 242, 41, 173, 84, 72, 77, 186, 78, 221, 9,
+ 180, 55, 199, 134, 111, 125, 195, 222, 180, 189, 66, 65, 118, 137, 24,
+ 60, 39, 236, 39, 46, 27, 116, 103, 201, 91, 45, 97, 181, 103, 25, 85,
+ 228, 230, 98, 107, 55, 139, 64, 153, 94, 201, 45, 57, 225, 140, 132,
+ 167, 22, 172, 73, 164, 130, 113, 240, 185, 186, 206, 57, 54, 184, 230,
+ 221, 92, 43, 32, 88, 218, 71, 167, 10, 3, 226, 121, 246, 28, 237, 96,
+ 27, 106, 84, 236, 48, 143, 204, 19, 70, 218, 225, 153, 24, 55, 181, 45,
+ 171, 93, 0, 177, 154, 252, 34, 232, 173, 245, 20, 104, 38, 229, 18, 100,
+ 139, 181, 149, 172, 87, 49, 93, 166, 87, 7, 157, 115, 215, 72, 178, 54,
+ 197, 159, 42, 252, 65, 150, 234, 43, 134, 133, 216, 40, 41, 235, 62,
+ 221, 217, 253, 133, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0
+ ],
+ "user_modulus_offset": 247,
+ "user_modulus_tag_offset": 242,
+ "user_rsa_signature": [
+ "2656563551858478367085857598280693616",
+ "1135279320238834367874260153401495634",
+ "1236154667558388398859842442878269008",
+ "13979791021677235185625809896317620",
+ "366648307978239886325848295735487586",
+ "2450082966714864465032474198296762214",
+ "2427315231249502076342515503345057650",
+ "1947442548394582566761316146931490920",
+ "1207098675504504115883444760218274532",
+ "1096097913774784516739078218725380470",
+ "46562945591360126741076961461887727",
+ "1190337605897152816523231684532143416",
+ "1062876616288492608278608591157023706",
+ "2131471373718090553671774971922491487",
+ "726914424324709412373665782565198850",
+ "2143853404691277036782734877302293438",
+ "1349685527254192381317565303065343",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0",
+ "0"
+ ]
+}
diff --git a/README.md b/README.md
index 57b791c..cd58837 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# OpenAC Example App
-Sample iOS app that runs the **OpenAC** zero-knowledge pipeline for the RS256 circuit: download the circuit, set up keys, generate a proof, and verify it. It uses **[OpenACSwift](https://github.com/zkmopro/OpenACSwift)**—Swift bindings for OpenAC on iOS.
+Sample iOS app that runs the **OpenAC** zero-knowledge pipeline for the SHA256RSA4096 circuit: download the circuit, set up keys, generate a proof, and verify it. It uses **[OpenACSwift](https://github.com/zkmopro/OpenACSwift)**—Swift bindings for OpenAC on iOS.
## Screenshot
@@ -18,13 +18,13 @@ Match the environment expected by [OpenACSwift](https://github.com/zkmopro/OpenA
## Dependencies
- [OpenACSwift](https://github.com/zkmopro/OpenACSwift) (Swift Package Manager)
-- [ZIPFoundation](https://github.com/weichsel/ZIPFoundation) — used to extract the downloaded `rs256.r1cs` archive
+- [ZIPFoundation](https://github.com/weichsel/ZIPFoundation) — used to extract the downloaded `sha256rsa4096.r1cs` archive
## Running the project
1. Open `OpenACExampleApp.xcodeproj` in Xcode.
2. Select an iPhone simulator or device.
-3. Build and run. On first use, tap **Download Circuit** if the large `rs256.r1cs` file is not present yet, then run the pipeline (play control) to execute setup, prove, and verify.
+3. Build and run. On first use, tap **Download Circuit** if the large `sha256rsa4096.r1cs` file is not present yet, then run the pipeline (play control) to execute setup, prove, and verify.
Bundled `input.json` is copied into the app’s documents area on first launch for use with `setupKeys` and `prove`, as described in the OpenACSwift README.