Каждый пример находится в директории установки комплекта разработчика Guardant (по умолчанию %Program Files%\ Guardant\Guardant %#%%Общий код%\Samples\ARM), в отдельной папке вида XX - SampleName, и состоит из двух частей:
- Проект Visual Studio 2005 .NET в папке Win32, демонстрирующий использование Guardant API (т. е. необходимую инициализацию и запуск загруженного кода)
- Пример загружаемого кода в папке Loadable Code, содержащий проект GCC-ARM в виде исходного кода на C и makefile.При сборке примера получаются *.bin и *.bmap файлы, которые необходимо указывать GrdUtil для генерации GCEXE-файла соответствующего алгоритма.
Структура используемого файла маски
Файл маски (Mask.nsd), используемый в примерах для ключей Guardant Code / Code Time, отличается от файла маски GrdUtil по умолчанию (default.nsd) и имеет следующую структуру, одинаковую для всех примеров:
- Алгоритм #0 AES128
- Алгоритм #01 SHA256
- Алгоритм #02 AES128, зависит от ID ключа
- Защищенная ячейка #03 – только для чтения
- Защищенная ячейка #04 – для чтения и записи
- Алгоритм #05 AES128 Demo
- Алгоритм #06 SHA256 Demo
- Защищенная ячейка #07 – Таблица лицензий
- Алгоритм #08 – ECC160
- Алгоритм #09 Загружаемый код №– Занимает 4 сектора. В него по очереди загружаются все примеры
По умолчанию файл маски Mask.nsd находится в директории %Program Files%\ Guardant* *Guardant %#%%Общий код%\ Samples\ARM.
Важная информация
Для корректной работы примеров Guardant Code необходимо записать Mask.nsd в ключ при помощи GrdUtil.
Краткая характеристика примеров
Важная информация
Для корректной работы примеров Guardant Code необходимо записать Mask.nsd в ключ при помощи GrdUtil.
- Шаблон проекта загружаемого кода. На его основе можно разрабатывать собственные модули.
- Функция main(), возвращающая определенный код (демонстрация передачи параметров dwRet и dwP1).
- Демонстрация использования буферов ввода-вывода.
- Демонстрация работы необнуляемого буфера (внутренняя память). В одном вызове можно записать данные, а в следующем – считать обратно.
- Разделение загружаемого приложения на несколько логических частей (обработка команд).
- Управление индикатором. Демонстрация работы функций GcaLedOn()/GcaLedOff().
- Создание интерфейса к EEPROM. Обеспечивает чтение/запись участка в 512 байт EEPROM блоками по 16 байт. Блоки шифруются на AES-128 в режиме ECB, на ключе, хранящемся внутри загружаемого приложения.
- Демонстрация работы с защищенными ячейками. Проход по аппаратным алгоритмам и получение информации о них (сервисы времени, чтения, модификации, счетчик запусков).
- Модификация содержимого заданной защищенной ячейки.
- Демонстрация функций работы с таймером (только для Guardant Code Time). Получение текущего времени и валидности RTC. Функция установки времени отсутствует. Единственный способ установить время в электронном ключе – при помощи GrdUtil.
- Получение времени жизни защищенной ячейки.
- Функции криптографии. Демонстрация генерации ключевой пары, подписи и проверки этой подписи по ECC160 с возвратом всех буферов в PC.
- Использование аппаратного алгоритма для подписи.
- Подсчет хэша.
- Возврат блока случайных данных.
- Отличие форматов хранения чисел с плавающей точкой в GCC ARM и PC.
- Демонстрация использования встроенных математических функций.
- Пример реализации вычислительной задачи (вычисление заданной точки на кривой Безье порядка N, параметры кривой хранятся внутри загружаемой микропрограммы).
- Реализация целочисленной задачи. Шифрование на алгоритме Blowfish для блока данных на заданном ключе.
- Демонстрация использования отладочной библиотеки.Для запуска примера необходимо запустить проект Demo.sln
Пример демонстрирует, как можно использовать отладочную DLL в проектах. В подкаталоге LoadableCode содержится проект загружаемого модуля, который собирается в виде самостоятельного модуля, так и в составе проекта Demo.sln.
По умолчанию в проекте задано использование отладочной библиотеки, при этом код из файла lc.c собирается в составе VS-проекта. Если убрать опцию DEBUG_DLL и прошить в ключ маску из подпапки LoadableCode, код из файла lc.c будет выполняться уже внутри ключа. Как видно, в lc.c допустимо использование вызовов Guardant Code API.
Однако в случае исполнения в составе VS-проекта налагается ограничение на функцию GcaExit(), и она не вызовет выход из кода в lc.c.
Характеристики и вычислительные возможности Guardant Code
- Быстродействие 120 MIPS 32-битных операций
- 20 кб ОЗУ для программы пользователя
- Около 128 кб (с возможностью расширения до 352 кб) для программы пользователя (около 20000 строк на Си для варианта 128кб и около 60000 строк на Си для варианта 384 кб)
- Приблизительная скорость операций с плавающей точкой: