PHPackages                             jati/wadi - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. jati/wadi

ActiveLibrary

jati/wadi
=========

Ngugemi Wadi: Post-Quantum Field-Level Encryption &amp; Blind Indexing for Laravel Eloquent.

00PHP

Since Jul 29Pushed todayCompare

[ Source](https://github.com/ginganomercy/wadi)[ Packagist](https://packagist.org/packages/jati/wadi)[ RSS](/packages/jati-wadi/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

jati/wadi — Ngugemi Wadi 🤫🔒
===========================

[](#jatiwadi--ngugemi-wadi-)

> **Enterprise Post-Quantum Field-Level Encryption &amp; Blind Indexing for Laravel Eloquent.**
> *Filosofi Jawa: **"Ngugemi Wadi"** — Memegang teguh dan menjaga rahasia dengan segenap jiwa serta perlindungan sekeras baja.*

[![PHP Version](https://camo.githubusercontent.com/f870cee2a2e2a442c6b62c8bf79f45ec0ce794dc5af13834902518c9107230f9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d382e312532422d626c75652e737667)](https://php.net)[![Laravel Support](https://camo.githubusercontent.com/2695790e42105441fbad5f92ca0da234aeaf573731d27b5f738917fa60d39132/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d31302e7825323025374325323031312e7825323025374325323031322e782d7265642e737667)](https://laravel.com)[![License: MIT](https://camo.githubusercontent.com/8bb50fd2278f18fc326bf71f6e88ca8f884f72f179d3e555e20ed30157190d0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e2e737667)](LICENSE)[![Engine: Hybrid Rust SIMD + OpenSSL](https://camo.githubusercontent.com/66a564835e6c2f1eaff167e5f1b6c9b0caf34b3508f37b9ccce01f07de9bba5a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f656e67696e652d5275737425323053494d442532302532462532304f70656e53534c2d6f72616e67652e737667)](#architecture)

---

🏛️ Apa itu `jati/wadi`?
-----------------------

[](#️-apa-itu-jatiwadi)

**`jati/wadi`** adalah paket Laravel berkemampuan tinggi untuk **enkripsi tingkat kolom (*Field-Level Encryption*)** dan **pencarian buta (*Blind Indexing*)** pada model Eloquent. Paket ini dirancang untuk mematuhi regulasi perlindungan data pribadi ketat (seperti **UU PDP Indonesia**, **GDPR**, dan **HIPAA**) dengan arsitektur tahan masa depan (*Post-Quantum ready*).

### ✨ Fitur Unggulan (*Novelty*):

[](#-fitur-unggulan-novelty)

1. **AEAD Field-Level Encryption (`EncryptedWadi::class`):**
    Mengenkripsi atribut sensitif (NIK KTP, Nomor Rekening, Kartu Kredit, Rekam Medis) menggunakan **AES-256-GCM** dengan autentikasi AEAD 128-bit. Data tersimpan di database dalam bentuk ciphertext terautentikasi dan terdekripsi secara otomatis saat dipanggil di PHP.
2. **Deterministic Blind Indexing (`BlindIndexWadi::class`):**
    Menghasilkan token HMAC-SHA256 berindeks rahasia (`nik_ktp_bidx`) yang memungkinkan Anda melakukan query SQL `WHERE nik_ktp_bidx = '...'` (*exact-match search*) **tanpa harus mendeskripsi isi tabel**.
3. **Hybrid Cryptographic Engine (Rust SIMD + OpenSSL Fallback):**
    - **Rust Kernel (`wadi-core`):** Biner C-ABI SIMD berkecepatan tinggi via **PHP FFI** (100x lebih cepat untuk batch processing).
    - **Zero-Dependency OpenSSL Fallback (`OpenSslWadiEngine`):** Jika ekstensi FFI tidak aktif di server produksi, sistem beralih secara otomatis dan transparan ke OpenSSL AES-256-GCM tanpa crash.
4. **Memory-Safe Key Rotation CLI:**
    Perintah `php artisan wadi:rotate-keys` untuk memutar master key pada jutaan baris data dengan penggunaan RAM yang konstan (*flat memory usage*).

---

🚀 Instalasi
-----------

[](#-instalasi)

1. Install paket menggunakan Composer: ```
    composer require jati/wadi
    ```
2. Publish konfigurasi `config/wadi.php`: ```
    php artisan vendor:publish --tag="wadi-config"
    ```
3. Tambahkan kunci kriptografi 32-byte (256-bit) ke dalam `.env` Anda: ```
    WADI_DRIVER=openssl # Pilihan: 'ffi' (Rust SIMD) atau 'openssl' (PHP OpenSSL AEAD)
    WADI_MASTER_KEY="your-32-byte-master-encryption-key!!"
    WADI_INDEX_KEY="your-32-byte-blind-index-secret-key!"
    ```

---

📖 Cara Penggunaan
-----------------

[](#-cara-penggunaan)

### 1. Mendefinisikan Model Eloquent

[](#1-mendefinisikan-model-eloquent)

Pastikan Anda memiliki kolom ciphertext (misal: `nik_ktp`) dan kolom blind index pasangannya (misal: `nik_ktp_bidx`) pada tabel database Anda:

```
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Wadi\Casts\EncryptedWadi;
use Wadi\Casts\BlindIndexWadi;
use Wadi\Traits\HasWadiSecrets;

class PatientRecord extends Model
{
    use HasWadiSecrets;

    protected $fillable = [
        'nik_ktp',
        'nik_ktp_bidx',
        'medical_history',
    ];

    protected $casts = [
        'nik_ktp'         => EncryptedWadi::class,   // Otomatis Enkripsi  Dekripsi
        'nik_ktp_bidx'    => BlindIndexWadi::class,  // Otomatis Tokenisasi HMAC
        'medical_history' => EncryptedWadi::class,
    ];
}
```

### 2. Menyimpan Data Rahasia

[](#2-menyimpan-data-rahasia)

```
$patient = PatientRecord::create([
    'nik_ktp'         => '3171234567890001',      // Disimpan sebagai ciphertext AES-256-GCM
    'nik_ktp_bidx'    => '3171234567890001',      // Disimpan sebagai token hex HMAC-SHA256 64-karakter
    'medical_history' => 'Diagnosis: Sehat walafiat',
]);

// Saat diakses di PHP, nilai otomatis terbuka secara rahasia:
echo $patient->nik_ktp; // "3171234567890001"
```

### 3. Pencarian Buta (*Blind Index Querying*)

[](#3-pencarian-buta-blind-index-querying)

Untuk mencari data berdasarkan kolom terenkripsi tanpa melakukan *full-table scan* atau mendeskripsi seluruh database:

```
// Menggunakan query scope WhereBlindIndex
$patient = PatientRecord::whereBlindIndex('nik_ktp', '3171234567890001')->first();

// Pencarian kolektif (batch) menggunakan whereInBlindIndex
$patients = PatientRecord::whereInBlindIndex('nik_ktp', ['3171234567890001', '3171234567890002'])->get();

if ($patient) {
    echo "Pasien ditemukan: " . $patient->medical_history;
}
```

---

🔄 Rotasi Kunci Kriptografi (*Key Rotation CLI*)
-----------------------------------------------

[](#-rotasi-kunci-kriptografi-key-rotation-cli)

Jika Anda perlu memutar (mengganti) master encryption key secara berkala demi kepatuhan audit keamanan:

```
php artisan wadi:rotate-keys App\\Models\\PatientRecord \
    --attributes="nik_ktp,medical_history" \
    --old-key="old-32-byte-master-encryption-key!!" \
    --new-key="new-32-byte-master-encryption-key!!" \
    --chunk=500
```

Perintah ini akan mendekripsi setiap baris dengan kunci lama dan mengenkripsinya kembali dengan kunci baru menggunakan *streaming generator* dan *garbage collection* agar tidak membebani memori server.

---

🏗️ Arsitektur Hybrid (Rust SIMD FFI + OpenSSL)
----------------------------------------------

[](#️-arsitektur-hybrid-rust-simd-ffi--openssl)

```
+-------------------------------------------------------------------+
|                        WadiEngineManager                          |
+-------------------------------------------------------------------+
          |                                      |
          v (Primary driver)                     v (Automatic Fallback)
+-----------------------------------+  +----------------------------+
|          FfiWadiEngine            |  |     OpenSslWadiEngine      |
|  (Rust wadi_core.dll / .so / .dylib)|  |  (Pure PHP OpenSSL GCM)    |
|   - Hardware SIMD AES-NI          |  |   - 100% Shared Host OK    |
|   - Zero-overhead C-ABI           |  |   - Zero Dependency        |
+-----------------------------------+  +----------------------------+

```

### Membangun Biner Rust (Opsi untuk Kecepatan 100x)

[](#membangun-biner-rust-opsi-untuk-kecepatan-100x)

```
cd rust/
cargo build --release
```

Biner `wadi_core` akan secara otomatis dikenali dan dimuat dari direktori `bin/` jika ekstensi PHP FFI aktif.

---

🧪 Verifikasi &amp; Pengujian
----------------------------

[](#-verifikasi--pengujian)

Semua unit test diuji ketat untuk menjamin kompatibilitas matematika antar-mesin, proteksi anti-tamper, dan kestabilan dekripsi baik untuk OpenSSL GCM maupun Rust FFI SIMD:

```
# Pengujian lengkap dengan Rust SIMD FFI diaktifkan (100% OK)
php -d ffi.enable=true vendor/bin/phpunit
```

```
PHPUnit 10.5.64 by Sebastian Bergmann and contributors.

.......                                                             7 / 7 (100%)

Time: 00:00.070, Memory: 8.00 MB
OK (7 tests, 7 assertions)

```

Note

Jika perintah dijalankan tanpa flag `-d ffi.enable=true` (atau pada server tanpa ekstensi FFI), 2 test khusus FFI akan di-skip secara anggun (`..S...S`, 7 / 7 OK) dan pengujian memvalidasi 100% fungsi OpenSSL AEAD Fallback.

---

📜 Lisensi
---------

[](#-lisensi)

Dilisensikan di bawah [MIT License](LICENSE).
Dibuat dengan semangat **"Ngugemi Wadi"** untuk perlindungan data sistem informasi Indonesia.

###  Health Score

20

—

LowBetter than 12% of packages

Maintenance65

Regular maintenance activity

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/a8c8add9718b841e43b15c555815dd6180eb37052bb3af1c88d5d9057ff7ce2c?d=identicon)[ginganomercy](/maintainers/ginganomercy)

---

Top Contributors

[![ginganomercy](https://avatars.githubusercontent.com/u/155315911?v=4)](https://github.com/ginganomercy "ginganomercy (1 commits)")

### Embed Badge

![Health badge](/badges/jati-wadi/health.svg)

```
[![Health](https://phpackages.com/badges/jati-wadi/health.svg)](https://phpackages.com/packages/jati-wadi)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
