Kode Error
Kode error bersama untuk pustaka klien yang didukung secara resmi oleh DAT.
Setiap kode memiliki dua nilai — dampak dan percobaan ulang — dan sebagian ditandai tambahan dengan label mencurigakan.
Dampak — kerusakan yang dialami layanan
Ini kriteria untuk memasang alert. Yang dilihat hanya satu hal: "apakah layanan sedang berhenti".
| Dampak | Arti | Contoh |
|---|---|---|
| Kritis | Layanan atau fungsi tertentu berhenti. Penerbitan tidak mungkin, sinkronisasi gagal permanen, inisialisasi gagal | Tidak ada satu pun sertifikat yang bisa dipakai di server penerbitan |
| Sebagian | Sebagian permintaan atau siklus gagal, tetapi layanan tetap berjalan. Umumnya pulih sendiri | Satu siklus CMS gagal. Tetap berjalan dengan sertifikat yang ada |
| Tanpa dampak | Satu permintaan ditolak, selesai | Token palsu masuk. Cukup disaring |
Tanpa dampak bukan objek alert. Jika satu masukan salah harus diperiksa oleh seluruh penanggung jawab, alert kehilangan maknanya.
Mencurigakan — selidiki jika berlanjut
Kode dengan label Mencurigakan dalam satu kejadian adalah bagian dari operasi normal. Klien bisa mengirim nilai yang salah kapan saja, dan menyaringnya memang tugas pustaka.
Namun jika error semacam ini terjadi terus-menerus, atau menumpuk dari sumber tertentu, penyebabnya salah satu dari dua ini.
- Kesalahan konfigurasi — deployment salah, klien versi lama masih tertinggal, atau sertifikat tidak selaras.
- Percobaan peretasan — upaya memanipulasi token atau kunci agar lolos verifikasi, atau penelusuran untuk menemukan nilai yang valid.
Karena itu kode-kode ini sebaiknya dijadikan metrik berbasis jumlah. Cukup memberi tahu saat melewati ambang batas.
Percobaan Ulang
| Percobaan Ulang | Arti |
|---|---|
| Sementara | Mencoba lagi setelah backoff akan menyelesaikannya |
| Permanen | Dilarang mencoba lagi. Konfigurasi atau masukan harus diperbaiki |
| Status | Ini sinyal, bukan error |
Token
Masalah pada string token yang diterima itu sendiri.
DAT_TOKEN_MALFORMED Bagian yang dipisahkan titik bukan lima; atau expire bukan desimal murni; atau cid bukan heksadesimal murni; atau plain atau secure bukan base64url; atau kolom numerik melampaui rentang representasi bilangan bulat.
arrow_forwardTolak permintaan
DAT_TOKEN_EXPIREDexpire <= now. Tepat pada detiknya pun sudah kedaluwarsa — jika expire == now, token dianggap sudah habis masa berlakunya.
arrow_forwardPicu penerbitan ulang token
DAT_TOKEN_UNKNOWNError token yang tidak masuk ke kategori mana pun di atas.
arrow_forwardPeriksa log
Kedaluwarsa dan error format wajib dibedakan
Responsnya berlawanan — kedaluwarsa adalah akhir masa hidup yang normal sehingga cukup memperbarui token, sedangkan error format berarti token itu sejak awal bukan terbitan kita dan harus ditolak.
Penguraian memastikan struktur lebih dulu, baru melihat nilainya. String seperti "1.2.3" yang kekurangan bagian bukanlah token kedaluwarsa melainkan memang bukan token, sehingga menjadi DAT_TOKEN_MALFORMED.
Tanda pada kolom expire, misalnya +100, juga error format, bukan kedaluwarsa. Hanya digit ASCII murni yang diizinkan.
Sertifikat
Masalah format string sertifikat, dan apakah sertifikat itu bisa dipakai sekarang.
DAT_CERT_MALFORMED Bagian yang dipisahkan titik bukan delapan; atau penguraian cid, start, duration, ttl gagal; atau kolom kunci bukan base64url; atau start + duration + ttl melampaui u64.
arrow_forwardDeploy ulang sertifikat
DAT_CERT_EXPIREDstart + duration + ttl < now. Kondisi kedaluwarsa total: penerbitan maupun verifikasi sama-sama tidak mungkin.
arrow_forwardPerbarui sertifikat
DAT_CERT_NOT_YET_ISSUABLEnow < start. Jendela penerbitan belum terbuka.
arrow_forwardTunggu
DAT_CERT_ISSUANCE_ENDEDnow > start + duration tetapi ttl masih tersisa. Penerbitan tidak bisa, hanya verifikasi yang mungkin.
arrow_forwardDeploy sertifikat baru
DAT_CERT_VERIFY_ONLYSertifikat hanya memuat kunci publik tanpa kunci privat penandatangan. Verifikasi berjalan, penerbitan tidak mungkin.
arrow_forwardPeriksa konfigurasi deployment
DAT_CERT_NOT_FOUND Sertifikat yang sesuai dengan cid pada token tidak dimiliki. Ini token palsu atau salah deploy.
arrow_forwardTolak permintaan
DAT_CERT_NOT_SYNCEDcid tersebut belum diterima dari CMS. Terjadi sebentar tepat setelah sertifikat baru di-deploy.
arrow_forwardCoba lagi setelah sinkronisasi
DAT_CERT_DUPLICATE_CID Dalam daftar yang diimpor terdapat cid yang sama dua kali atau lebih.
arrow_forwardPeriksa respons server
DAT_CERT_UNKNOWNError sertifikat yang tidak masuk ke kategori mana pun di atas.
arrow_forwardPeriksa log
DAT_CERT_NOT_FOUND dan DAT_CERT_NOT_SYNCED tampak sama gejalanya tetapi responsnya berbeda. Yang pertama adalah cid yang tidak pernah kita terbitkan sehingga menunggu pun tidak akan muncul; yang kedua cukup menunggu sinkronisasi selesai.
Satu kejadian DAT_CERT_NOT_FOUND cukup disaring saja, tetapi lonjakan mendadak berarti deployment tidak selaras atau token palsu sedang beredar.
Tanda Tangan
DAT_SIG_MISMATCHVerifikasi tanda tangan berakhir dengan ketidakcocokan. Nilai HMAC berbeda atau ECDSA verify mengembalikan false.
arrow_forwardBlokir sesi, catat di log keamanan
DAT_SIG_MALFORMED Bagian tanda tangan kosong; atau bukan base64url; atau panjang ECDSA r‖s tidak sesuai kurvanya; atau konversi ke DER gagal.
arrow_forwardTolak permintaan
DAT_SIG_KEY_MISSINGMencoba menandatangani dengan kunci verify-only. Kunci privat tidak tersedia saat runtime.
arrow_forwardPeriksa konfigurasi server penerbitan
DAT_SIG_BACKENDOperasi tanda tangan atau verifikasi itu sendiri tidak dapat dijalankan. Tipe kunci salah, handle sudah dilepas, atau error internal pustaka kriptografi.
arrow_forwardPeriksa tipe kunci dan pustaka
DAT_SIG_UNKNOWNError tanda tangan yang tidak masuk ke kategori mana pun di atas.
arrow_forwardPeriksa log
Jangan campur ketidakcocokan dengan kegagalan backend
Kedua kode ini berada di sumbu yang berlawanan.
DAT_SIG_MISMATCH— tanda tangan yang masuk sekadar tidak cocok, jadi tidak ada dampak ke layanan, tetapi jika berlanjut menjadi objek curiga.DAT_SIG_BACKEND— operasi verifikasinya sendiri tidak berjalan, jadi ini masalah di pihak kita dan bukan objek kecurigaan.
Jika tipe kunci yang salah atau bug pustaka dilaporkan sebagai "tanda tangan tidak cocok", situasi di mana kode kita sendiri rusak akan tercampur ke dalam metrik serangan. Sebaliknya, jika pemalsuan sungguhan diklasifikasikan sebagai error backend, ia hilang sama sekali dari metrik kecurigaan.
Enkripsi
Masalah enkripsi dan dekripsi payload secure.
DAT_CRYPTO_TAG_MISMATCHTag autentikasi AES-GCM tidak cocok. Entah secure telah dimanipulasi, atau kunci sertifikatnya berbeda.
arrow_forwardBlokir sesi, catat di log keamanan
DAT_CRYPTO_DATA_INVALID Ciphertext tidak kosong tetapi panjangnya kurang dari atau sama dengan IV (12 byte); atau masukan melampaui batas implementasi (INT_MAX dan sejenisnya).
arrow_forwardTolak permintaan
DAT_CRYPTO_BACKENDOperasi enkripsi atau dekripsi tidak dapat dijalankan. Platform tanpa dukungan GCM atau kegagalan inisialisasi konteks.
arrow_forwardPeriksa dukungan platform
DAT_CRYPTO_UNKNOWNError enkripsi atau dekripsi yang tidak masuk ke kategori mana pun di atas.
arrow_forwardPeriksa log
Payload secure yang kosong bukan error. Masukan kosong menghasilkan keluaran kosong dan tidak memunculkan kode apa pun.
Pada jalur yang melewati verifikasi tanda tangan, tag GCM adalah satu-satunya pemeriksaan integritas. Karena itu DAT_CRYPTO_TAG_MISMATCH tidak disatukan dalam satu kode dengan kegagalan dekripsi lainnya.
Kunci
DAT_KEY_INVALID Panjang kunci tidak cocok dengan algoritma yang dideklarasikan (HMAC 32/48/64, AES 16/32); atau titik tidak berada pada kurva; atau d ∉ [1,n-1]; atau format bukan uncompressed (0x04); atau kunci privat dan publik bukan pasangan.
arrow_forwardGanti kunci
DAT_KEY_VERIFY_ONLY_UNSUPPORTEDEkspor verify-only diminta untuk keluarga HMAC.
arrow_forwardGanti algoritma
DAT_KEY_UNKNOWNError kunci yang tidak masuk ke kategori mana pun di atas.
arrow_forwardPeriksa log
Tiga hal yang tampak mirip tetapi berbeda:
| Kode | Arti |
|---|---|
DAT_KEY_VERIFY_ONLY_UNSUPPORTED | Batasan struktural algoritma. HMAC bersifat simetris sehingga tidak mengenal konsep kunci publik |
DAT_SIG_KEY_MISSING | Kondisi runtime. Saat ini kunci tersebut tidak memuat bagian privat |
DAT_CERT_VERIFY_ONLY | Bentuk deployment. Sertifikat ini di-deploy khusus untuk verifikasi |
Manajer
Kondisi objek yang menyimpan sertifikat dan memakainya untuk menerbitkan serta memverifikasi.
DAT_MANAGER_NO_CERTIFICATETidak memiliki satu pun sertifikat. Entah belum diimpor, atau sinkronisasi pertama dengan CMS gagal.
arrow_forwardPeriksa koneksi CMS
DAT_MANAGER_NO_ISSUABLE_CERTIFICATESertifikat ada, tetapi tidak satu pun bisa dipakai menerbitkan saat ini. Penyebab disertakan bersama error.
arrow_forwardPutuskan berdasarkan penyebab (cause) — tabel di bawah
DAT_MANAGER_DISPOSEDManajer atau sertifikat yang sudah dilepas tetap digunakan.
arrow_forwardPerbaiki kode pemanggil
DAT_MANAGER_UNKNOWNError manajer yang tidak masuk ke kategori mana pun di atas.
arrow_forwardPeriksa log
Penyebab (cause) dari DAT_MANAGER_NO_ISSUABLE_CERTIFICATE adalah salah satu dari empat. Tindakan yang harus diambil berbeda sama sekali untuk tiap penyebab.
| Penyebab | Arti | Coba Lagi | Tindakan |
|---|---|---|---|
DAT_CERT_NOT_YET_ISSUABLE | Sebelum jendela penerbitan dimulai | Sementara | Selesai sendiri jika ditunggu |
DAT_CERT_ISSUANCE_ENDED | Jendela penerbitan berakhir, hanya verifikasi | Permanen | Perlu men-deploy sertifikat baru |
DAT_CERT_EXPIRED | Semua yang dimiliki sudah kedaluwarsa | Permanen | Perlu memperbarui sertifikat |
DAT_CERT_VERIFY_ONLY | Semua yang dimiliki hanya untuk verifikasi | Permanen | Kesalahan konfigurasi deployment |
Jika server penerbitan dikonfigurasi hanya menerima sertifikat verifikasi, DAT_CERT_VERIFY_ONLY akan muncul. Menunggu tidak akan pernah menyelesaikannya, jadi bukan objek percobaan ulang.
Konfigurasi
Masalah nilai yang diteruskan pemanggil. Semua kode keluarga CONFIG adalah error yang harus diperbaiki di kode; jika muncul saat operasional, berarti deployment-nya salah.
DAT_CONFIG_ALG_UNSUPPORTED Nama algoritma tidak dikenal. Harus persis sama dengan notasi pada protokol (ECDSA-P256, IV-AES256-GCM).
arrow_forwardPeriksa nama algoritma
DAT_CONFIG_ARGUMENT_INVALID Argumen wajib bernilai null; atau di luar rentang yang diizinkan (nilai waktu negatif, interval <= 0); atau tipe yang tidak didukung (pada bahasa bertipe dinamis, payload diisi angka atau boolean); atau body yang akan ditandatangani kosong.
arrow_forwardPerbaiki kode pemanggil
DAT_CONFIG_URI_INVALIDURI server CMS di luar spesifikasi: tidak bisa diurai, skema bukan http/https, atau mengandung path maupun query.
arrow_forwardPerbaiki URI
DAT_CONFIG_UNKNOWNError konfigurasi yang tidak masuk ke kategori mana pun di atas.
arrow_forwardPeriksa log
Internal
Masalah lingkungan eksekusi dan runtime.
DAT_INTERNAL_UNAVAILABLE Backend kriptografi atau API runtime sama sekali tidak ada. crypto.subtle tidak tersedia, platform tanpa dukungan AES-GCM, atau versi runtime di bawah syarat.
arrow_forwardPeriksa deployment dan platform
DAT_INTERNAL_UNKNOWNGagal mengalokasikan memori, gagal membangkitkan bilangan acak, gagal memperoleh lock, atau mencapai cabang yang dirancang tidak terjangkau.
arrow_forwardPeriksa log
DAT_INTERNAL_UNAVAILABLE selesai dengan memperbaiki lingkungan deployment, sedangkan DAT_INTERNAL_UNKNOWN umumnya gangguan runtime atau bug pustaka.
Sinkronisasi CMS
Jika sinkronisasi CMS tidak dipakai, kode-kode ini tidak muncul.
DAT_CMS_UNREACHABLEKegagalan DNS, koneksi ditolak, kegagalan TLS, timeout. Timeout tidak punya kode tersendiri dan termasuk di sini — karena responsnya sama.
arrow_forwardCoba lagi setelah backoff
DAT_CMS_UNAUTHORIZEDServer merespons 401. Token tidak ada atau salah.
arrow_forwardPeriksa pengaturan token
DAT_CMS_FORBIDDENServer merespons 403. Token valid tetapi tidak berwenang atas endpoint ini.
arrow_forwardPeriksa tingkat token
DAT_CMS_ENDPOINT_NOT_FOUNDServer merespons 404. URL-nya salah.
arrow_forwardPeriksa pengaturan URL
DAT_CMS_SERVER_ERRORServer merespons 5xx.
arrow_forwardCoba lagi setelah backoff
DAT_CMS_HTTP_STATUSRespons non-2xx yang tidak termasuk kasus mana pun di atas.
arrow_forwardPeriksa kode status
DAT_CMS_MALFORMEDRespons tidak memuat baris versi; atau baris versi bukan desimal murni; atau melampaui rentang.
arrow_forwardPeriksa versi server
DAT_CMS_IMPORT_FAILED Respons diterima tetapi sertifikat gagal diterapkan. Penyebabnya termuat dalam cause.
arrow_forwardPeriksa CERT_* / KEY_* pada cause
DAT_CMS_VERSION_RESETServer mengembalikan versi yang lebih lama daripada milik kita. Ini instruksi sinkronisasi ulang menyeluruh.
arrow_forwardDitangani otomatis
DAT_CMS_NOT_SYNCEDKondisi di mana sinkronisasi belum pernah sekali pun berhasil.
arrow_forwardTunggu sinkronisasi pertama
DAT_CMS_SYNC_IN_PROGRESSSinkronisasi sebelumnya masih berjalan sehingga siklus kali ini dilewati. Ini bukan error.
DAT_CMS_NOT_SUPPORTEDFungsi CMS tidak disertakan dalam build. Feature tidak diaktifkan atau CURL tidak terpasang.
arrow_forwardPeriksa opsi build
DAT_CMS_UNKNOWNError CMS yang tidak masuk ke kategori mana pun di atas.
arrow_forwardPeriksa log
Kode yang membuat sinkronisasi dinilai gagal permanen (UNAUTHORIZED, FORBIDDEN, ENDPOINT_NOT_FOUND, MALFORMED, IMPORT_FAILED) semuanya kritis. Mencoba lagi tidak menyelesaikannya sementara sertifikat terus kedaluwarsa, sehingga jika dibiarkan layanan pasti berhenti.
Sebaliknya UNREACHABLE dan SERVER_ERROR bersifat sebagian. Layanan tetap berjalan dengan sertifikat yang ada dan pulih sendiri pada siklus berikutnya — namun jika terus gagal, pada akhirnya berpindah menjadi kritis. Pasang alert berdasarkan jumlah kegagalan beruntun.
Kegagalan sinkronisasi tidak dilempar sebagai exception
Meskipun sinkronisasi pertama gagal, manajer tetap dikembalikan secara normal — karena tersinkronisasi terlambat masih lebih baik daripada tidak sama sekali. Sebagai gantinya, kegagalan tersimpan sebagai kondisi yang bisa dikueri.
| Klien | Cara mengambil |
|---|---|
| Rust | manager.last_error().await |
| Go | manager.LastError() |
| JavaScript | manager.lastError() |
| Python | manager.last_error() |
| Ruby | manager.last_error |
| Java/Kotlin | manager.lastError |
| C# | manager.LastError |
| C/C++ | dat_cms_manager_last_error(m) |
Jika belum pernah berhasil sekali pun bernilai DAT_CMS_NOT_SYNCED, jika normal kosong.
Server
Kode yang dikeluarkan server CMS. Klien tidak membuat kode ini, hanya menerimanya.
DAT_AUTH_UNAUTHORIZED Header Authorization tidak ada, atau token tidak terdaftar pada tingkat mana pun.
DAT_AUTH_FORBIDDENToken terdaftar tetapi tingkatnya bukan yang diminta endpoint ini.
DAT_AUTH_DISABLEDTidak ada satu pun token yang dikonfigurasi sehingga autentikasi mati sepenuhnya. Bahkan API penerbitan sertifikat pun terbuka tanpa autentikasi. Tidak muncul pada respons, hanya tercatat di log saat startup.
arrow_forwardSegera atur token
DAT_REQ_MALFORMEDParameter path atau query tidak dapat diurai, atau argumen di luar rentang yang diizinkan (delay negatif, melebihi 10 tahun, dan sejenisnya).
DAT_REQ_ALG_UNSUPPORTEDNama algoritma pada path permintaan tidak dikenal.
DAT_REQ_NOT_FOUNDRute tersebut tidak ada atau metodenya berbeda.
DAT_REQ_TOO_LARGEUkuran body permintaan terlampaui.
DAT_REQ_UNKNOWNError permintaan yang tidak masuk ke kategori mana pun di atas.
DAT_STORE_UNAVAILABLEKoneksi DB terputus, connection pool habis, kontensi lock, timeout. Satu-satunya kode yang memakai 503, yaitu sinyal agar klien tahu "yang ini cukup ditunggu".
arrow_forwardCoba lagi setelah backoff
DAT_STORE_UNKNOWNKegagalan baca atau tulis, tabel tidak ada, skema tidak cocok, baris sertifikat tersimpan rusak.
arrow_forwardPeriksa kondisi DB
Amplop respons:
{
"code": "DAT_REQ_ALG_UNSUPPORTED",
"details": { "algorithm": "BOGUS-ALG" }
}Error yang muncul saat membuat dan menangani sertifikat juga dikeluarkan server memakai kode bersama di atas (DAT_CERT_*, DAT_KEY_*, DAT_CONFIG_*).
Saat menerima kode server
Klien membungkus kode server dengan kode CMS miliknya sendiri, dan menyimpan aslinya di cause.
| Yang diterima | HTTP | Kode yang dikeluarkan klien |
|---|---|---|
DAT_AUTH_UNAUTHORIZED | 401 | DAT_CMS_UNAUTHORIZED |
DAT_AUTH_FORBIDDEN | 403 | DAT_CMS_FORBIDDEN |
DAT_REQ_NOT_FOUND | 404 | DAT_CMS_ENDPOINT_NOT_FOUND |
DAT_REQ_* (lainnya) | 400·405·413 | DAT_CMS_HTTP_STATUS |
DAT_STORE_UNAVAILABLE | 503 | DAT_CMS_SERVER_ERROR |
DAT_STORE_UNKNOWN | 500 | DAT_CMS_SERVER_ERROR |
| (penurunan versi) | 200 | DAT_CMS_VERSION_RESET |
Cari berdasarkan gejala
| Gejala | Kode |
|---|---|
| Berhasil tepat setelah login, lalu ditolak tak lama kemudian | DAT_TOKEN_EXPIRED — masa hidup token habis. Cukup diterbitkan ulang |
| Verifikasi gagal hanya pada server tertentu | DAT_CERT_NOT_SYNCED — server itu belum menerima CID yang baru |
| Token yang sama ditolak di semua server | DAT_CERT_NOT_FOUND — ini CID yang tidak pernah kita terbitkan |
| Server penerbitan tidak bisa membuat token | DAT_MANAGER_NO_ISSUABLE_CERTIFICATE + DAT_CERT_VERIFY_ONLY — yang ter-deploy adalah verify-only |
| Penerbitan gagal hanya sesaat setelah startup | DAT_MANAGER_NO_CERTIFICATE — ini sebelum sinkronisasi pertama. Sebentar lagi teratasi |
| Sinkronisasi CMS terus gagal | DAT_CMS_UNAUTHORIZED — token salah. Mencoba lagi tidak menyelesaikannya |
| Tidak ada satu pun sertifikat yang datang | DAT_CMS_ENDPOINT_NOT_FOUND — salah ketik URL |
| Gagal hanya pada platform tertentu | DAT_INTERNAL_UNAVAILABLE — backend kriptografi tidak ada |
| Kegagalan verifikasi tiba-tiba melonjak | DAT_SIG_MISMATCH — satu kejadian tidak berbahaya, tetapi jika menumpuk berarti percobaan pemalsuan |
| Dekripsi secure tiba-tiba gagal | DAT_CRYPTO_TAG_MISMATCH — sertifikat tidak selaras atau percobaan manipulasi |
| Ada peringatan di log startup CMS | DAT_AUTH_DISABLED — autentikasi mati. API penerbitan terbuka |
Lampiran
Sintaks Kode
DAT_<area>_<penyebab>- Jika penyebab yang sama muncul di area berbeda, nama penyebabnya sama.
DAT_TOKEN_MALFORMEDdanDAT_CERT_MALFORMEDhanya berbeda objeknya, maknanya sama. _UNKNOWNadalah khusus fallback untuk tiap area. Ia tidak dipakai dalam arti "algoritma tidak dikenal" (untuk itu ada_UNSUPPORTED).- String kode adalah kontrak publik. Pesan boleh diubah bebas, tetapi kode tidak.
| Kategori | Prefiks kode |
|---|---|
| Token | DAT_TOKEN_ |
| Sertifikat | DAT_CERT_ |
| Tanda Tangan | DAT_SIG_ |
| Enkripsi | DAT_CRYPTO_ |
| Kunci | DAT_KEY_ |
| Manajer | DAT_MANAGER_ |
| Konfigurasi | DAT_CONFIG_ |
| Internal | DAT_INTERNAL_ |
| Sinkronisasi CMS | DAT_CMS_ |
| Server | DAT_AUTH_ · DAT_REQ_ · DAT_STORE_ |
Akses per Klien
| Klien | Tipe error | Kode | Klasifikasi coba lagi | Peristiwa keamanan |
|---|---|---|---|---|
| Rust | DatError enum | err.code() | err.retry() | err.security_event() |
| Go | *dat.Error | err.Code | dat.Retry(err) | dat.SecurityEvent(err) |
| JavaScript | DatError extends Error | e.code | e.retry | e.securityEvent |
| Python | DatError(ValueError, RuntimeError) | e.code | e.retry | e.security_event |
| Ruby | Saro::Dat::Error | e.code | e.retry | e.security_event? |
| Java/Kotlin | DatException | e.code | e.retry | e.securityEvent |
| C# | DatException | e.Code | e.Retry | e.SecurityEvent |
| C/C++ | dat_error_t | dat_error_code(e) | dat_error_retry(e) | dat_error_is_security_event(e) |
| Server CMS | Amplop JSON | kolom code | — | — |
Peristiwa keamanan hanya mengembalikan true untuk dua kode di mana pemalsuan atau manipulasi sudah pasti (DAT_SIG_MISMATCH, DAT_CRYPTO_TAG_MISMATCH). Label curiga pada dokumen ini mencakup lingkup yang lebih luas (termasuk token, kunci, dan permintaan yang dimanipulasi), dan untuk saat ini hanya klasifikasi dokumen, tidak diekspos sebagai API klien.
Tingkat dampak juga merupakan klasifikasi dokumen. Kode yang sama bisa berbeda pukulannya tergantung di mana ia muncul — misalnya DAT_KEY_INVALID tidak berdampak apa-apa saat menyaring token yang masuk, tetapi jika muncul saat membaca sertifikat di tengah sinkronisasi CMS, seluruh sinkronisasi gagal.
Penyebab dasar tidak dibuang. DAT_MANAGER_NO_ISSUABLE_CERTIFICATE dan DAT_CMS_IMPORT_FAILED meneruskan penyebabnya melalui rantai exception masing-masing bahasa (cause / __cause__ / InnerException / Unwrap()).
C/C++ tetap mempertahankan nilai numerik
Nilai numerik dat_error_t yang lama dipertahankan demi kompatibilitas ABI, tetapi kode stringlah yang menjadi acuan. Pustaka tidak lagi mengembalikan nilai lama, sehingga perbandingan seperti err == DAT_ERROR_INVALID_DAT tidak akan cocok. Bandingkan melalui dat_error_code(e).
C tidak memiliki rantai exception, jadi penyebabnya dikueri terpisah lewat dat_manager_issuable_cause().