Размер апплета Java-карты
Какую часть eeprom использует установка апплета JC? Это размер файла CAP или как узнать? Может быть, я мог бы использовать метод JCsystem для получения доступной памяти, но есть ли какой-то прямой метод, например, какая-то команда в инструментах разработки JC от oracle? (У меня нет JCOP)
2 ответа
Прямой метод получения размера апплета еще не найден. Вот два способа, которые я использовал, чтобы получить размер апплета
Стандартный Javacard
В среде разработки создайте апплет, который использует JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_PERSISTENT)
и отправьте APDU для вызова до и после установки (загрузки), чтобы получить EEP для класса, и снова вызовите до и после установки (установки), чтобы получить EEP для экземпляра апплета.
Ограничением является то, что этот метод поддерживает только short
, что означает максимальную свободную память 0x7FFF
(32767) байт. Вы не можете использовать этот метод, если размер вашего апплета превышает 32767 байт, и вам необходимо уменьшить объем свободной памяти с помощью фиктивного апплета, чтобы объем свободной памяти перед установкой (загрузкой) составлял менее 32767 байт.
Javacard с поддержкой GP 2.2 + ETSI
Если ваша карта поддерживает Global Platform 2.2 и ETSI, вы можете использовать команду GET DATA.
В разделе 11.3 спецификации GP-карты указано, что
Tag ‘FF21’: Extended Card Resources Information available for Card Content Management, as defined in ETSI TS 102 226.
И в ETSI 102.226 раздел 8.2.1.7.2:
После успешного выполнения команды поле данных ответа GET DATA должно быть закодировано, как определено в GlobalPlatform [4]. Значение объекта данных в кодировке TLV, на которое ссылаются в параметрах контрольного управления P1 и P2 командного сообщения, равно:
Length Description Value
1 Number of installed application tag '81'
1 Number of installed application length X
X Number of installed application
1 Free non volatile memory tag '82'
1 Free non volatile memory length Y
Y Free non volatile memory
1 Free volatile memory tag '83'
1 Free volatile memory length Z
Z Free volatile memory
Используйте те же шаги, что и в стандартном Javacard выше, но вместо выбора апплета, чтобы получить свободную память и отправить его команду, мы напрямую отправляем GET DATA
вводе команды. Это означает, что на один шаг проще... Кроме того, ответ этой команды не ограничивается short
значение, что означает, что вы можете проверить размер апплета, который превышает 32767 байт
Размер некоторых объектов зависит от операционной системы Java Card, поэтому прямой ссылки нет. Не забывайте, что ОС может потребоваться использовать память для поддержки вашего приложения. Некоторые операционные системы также выравнивают данные, делая их более сложными.
Поэтому, если вам не предоставили инструменты от вашего производителя, трудно быть уверенным. Размер байтового кода, вероятно, можно определить, учитывая один или два байта, но я не знаю каких-либо конкретных инструментов для этого из головы.
Без инструментов JCSystem может быть вашим лучшим выбором.