-keep class com.netki.OnBoardId { *; }
-keep class com.netki.OnBoardIdUi { *; }
-keep class com.netki.OnBoardIdUiV2 { *; }
-keep class com.netki.model.** { *; }
-keep class com.netki.data.transactions.model.** { *; }
-keep class * extends androidx.lifecycle.ViewModel { *; }
-keep class com.netki.identification.viewmodel.IdentificationViewModel { *; }
-keep class org.koin.** { *; }

# JMRTD + SCUBA: e-passport NFC reading. Classes (DG1File, DG2File, etc.)
# are resolved reflectively from ICAO LDS data — R8 cannot see the references.
-keep class org.jmrtd.** { *; }
-keep class net.sf.scuba.** { *; }
-dontwarn org.jmrtd.**
-dontwarn net.sf.scuba.**

# BouncyCastle / SpongyCastle: crypto used by JMRTD for BAC/PACE.
# Providers register via reflection and algorithms resolve by OID → class name.
-keep class org.bouncycastle.** { *; }
-keepclassmembers class org.bouncycastle.** { *; }
-dontwarn org.bouncycastle.**
-keep class org.spongycastle.** { *; }
-dontwarn org.spongycastle.**

-keep class * extends java.security.Provider { *; }
-keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod

# netkicv: embedded into this AAR via sdk-static-deps. Classes must survive
# R8 with their original names because (a) JNI resolves native methods by
# fully-qualified class + method name into libnetkicv.so, and (b) references
# from netkisdk's already-minified bytecode expect the unobfuscated names.
# Missing this rule produces NoClassDefFoundError at consumer startup
# (e.g. "LR/ntk" — the R8-mangled name doesn't match the class actually shipped).
-keep class com.netki.netkicv.** { *; }
-keepclassmembers class com.netki.netkicv.** { *; }
