Search code examples
mifaredesfire

How to get Mifare DESFire file size


This question is with reference to the Mifare SDK TapLinx library usage.

val fs = desFireEV2.getFileSettings(0)

I can read the file's contents. But I need to know how to get the file's size. I am able to read the contents because I hardcoded the file's size in the readData() call.

I'm aware in the DESFire spec is 0xF5 to get file settings and the file's size is returned in 3 bytes. But in TapLinx provided library is not clear how to get the files's size.


Solution

  • After tinkering for a while, I am able to find the proper way to get the file size using below Kotlin snippet:

    val fs = desFireEV2.getFileSettings(0)
    when (fs.type) {
        DESFireFile.FileType.DataStandard -> {
            val fileSize = (fs as StdDataFileSettings).fileSize
            println("fileSize = $fileSize")
        }
    }
    

    The reader.transceive(Utilities.stringToBytes("90F50000 010000") is also able to tell the file's size, but it has a nasty side-effect of resetting the authenticated state wherein I have to re-authenticate again to move on.