Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/49: Рейтинг темы: голосов - 49, средняя оценка - 4.92
RUmkym
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 183
1

ARM IAR C и длинная арифметика

09.05.2013, 01:19. Просмотров 8898. Ответов 12
Метки нет (Все метки)

Надо реализовать длинную арифметику на ARM IAR C. Если на асме я вполне представляю себе как это сделать, то во с изящным решением на С у меня возникли трудности. На мой взгляд оптимальным вариантом будет реализация операций длинной арифметики на асме и последующей прилинковке к проекту. Но тут вопрос: как написать на asm`е так чтобы работало? Или асмовскими вставками прямо в проекте на C (здесь у меня затык в оформелии кода на асме), или реализовывать отдельную библотеку на asm, но тут встает вопрос как прередавать параметры из асма в с и наоборот? Подскажите, пожалуйста, примерами/опытом. Заранее благодарен.
P.S.: если важно - разрядность чисел не превышает 128бит. операции - модульным, по модулю простого числа.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 01:19
Ответы с готовыми решениями:

Битовые поля IAR ARM
Привет всем. Как в IARe 5.50 для ARMов получить доступ к битовым полям регистров? Я подключил...

(build aborted ) Проблема с IAR ARM
Проблема такая . Не компилится проект в меню сообщений надпись buyld aborted (сборка прервана)...

Справочное руководство IAR под ARM
Засел за изучение IAR под ARM. Возник такой вопрос. На работе используем пики и PIC C Compiler....

arm-none-eabi & IAR (define) [Решено]
Всем привет! Ребята - прошу сразу не бить серпом по тому что лижет кот... Я в процессе изучения...

Длинная арифметика. Чистый СИ. Деление длинного HEX на короткое INT
Всем привет. Не знаю с чего начать.... Есть 8-ми битный микроконтроллер.......... Возникла задача...

12
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
09.05.2013, 02:14 2
Цитата Сообщение от RUmkym
Надо реализовать длинную арифметику на ARM IAR C. Если на асме я вполне представляю себе как это сделать, то во с изящным решением на С у меня возникли трудности. На мой взгляд оптимальным вариантом будет реализация операций длинной арифметики на асме и последующей прилинковке к проекту. Но тут вопрос: как написать на asm`е так чтобы работало? Или асмовскими вставками прямо в проекте на C (здесь у меня затык в оформелии кода на асме), или реализовывать отдельную библотеку на asm, но тут встает вопрос как прередавать параметры из асма в с и наоборот? Подскажите, пожалуйста, примерами/опытом. Заранее благодарен.
P.S.: если важно - разрядность чисел не превышает 128бит. операции - модульным, по модулю простого числа.
Такая специфическая длинная арифметика понадобилась, случайно, не для hosh-алгоритмов (SHA1, MD5)? Знакомая тема...

По связке Си-Асм ищите для своего компилятора информацию по т.н.соглашению по передаче параметров: там описано, через какие регистры передаются параметры в функцию, а через какие - возвращается результат. Вместо термина "соглашение" может использоваться термин "конвенция".
Или, если искать лень, можно через глобальные переменные делать обмен между Си и Асм.
0
RUmkym
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 183
09.05.2013, 10:55 3
Цитата Сообщение от OtyxPM
Такая специфическая длинная арифметика понадобилась, случайно, не для hosh-алгоритмов (SHA1, MD5)? Знакомая тема...
В хэш-функциях не нужна длинная арифметика. Мне же она понадобилась для асимметричной криптографии. Спасибо за наводку, а насчет асмовских вставок что думаете?
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
09.05.2013, 11:40 4
Цитата Сообщение от RUmkym
Цитата Сообщение от OtyxPM
Такая специфическая длинная арифметика понадобилась, случайно, не для hosh-алгоритмов (SHA1, MD5)? Знакомая тема...
В хэш-функциях не нужна длинная арифметика. Мне же она понадобилась для асимметричной криптографии.Да ладно?!?! Вы точно знаете алгоритмы этих хэш-функций? А если взять SHA-2 (т.е.SHA256,SHA384,SHA512) - там ой-ёй-ёй какая ДЛИННАЯ арифметика. Собственно, эти функции в основном и используются в криптографии.

Цитата Сообщение от RUmkym
Спасибо за наводку, а насчет асмовских вставок что думаете?
Я бы сначала попробовал на чистом Си - может быть, производительность и так будет хорошая.
А если большие ассемблерные вставки - то обрамляете ASM-блок соответственно и - вперёд! :-)
Можно также для целой Си-функции объявить использование ассемблера:
Код
inline __asm uint32_t __REV16(uint32_t value)
{
rev16 r0, r0
bx lr
}
В этом примере используется то, что единственный 32-бит параметр всегда передаётся через R0, и что возвращаемое uint32_t тоже помещается в R0.

Если соглашение о передаче параметров между Си и Асм не нашли (не искали), то вот пример обращения из ассемблера к переменным по их сишным именам:
Код
ftoot vsqrtf(ftoot op1) {
ftoot result;
__ASM volatile ("vsqrt.f32 %0, %1" : "=w" (result) : "w" (op1) );
return (result);
}
0
09.05.2013, 11:40
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
09.05.2013, 12:55 5
Цитата Сообщение от OtyxPM
Если соглашение о передаче параметров между Си и Асм не нашли
IAR вроде как соблюдает ARM EABI, следовательно R0-R3 в порядке следования, потом стёк.
http://infocenter.arm.com/help/topys/co ... _aapcs.pdf
0
RUmkym
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 183
09.05.2013, 17:28 6
Цитата Сообщение от OtyxPM
Да ладно?!?! Вы точно знаете алгоритмы этих хэш-функций?
Конечно знаю, и нигде в этих алгоритмах не применяется длинная арифметика. 32, 64 бита - ниразу не длинная.
За примеры огромное вам спасибо!)
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
09.05.2013, 19:03 7
Цитата Сообщение от RUmkym
Цитата Сообщение от OtyxPM
Да ладно?!?! Вы точно знаете алгоритмы этих хэш-функций?
Конечно знаю, и нигде в этих алгоритмах не применяется длинная арифметика. 32, 64 бита - ниразу не длинная.
За примеры огромное вам спасибо!)MD5 - 128 bit.
SHA-1 - 160 bit.
SHA-2 - ещё больше, вплоть до 512 бит.
Все нормальные реализации (в составе криптографических программ) этих хэш-функций включают библиотеку BINT (Big INTeger arithmetics) или её эквивалент.
Хотя, "на коленке", наверно, и восьмибитными операциями можно сделать (на AVR, например) :-) Только Вы же о скорости беспокоитесь, нет?
0
RUmkym
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 183
09.05.2013, 19:38 8
Цитата Сообщение от OtyxPM
MD5 - 128 bit.
SHA-1 - 160 bit.
SHA-2 - ещё больше, вплоть до 512 бит.
Все нормальные реализации (в составе криптографических программ) этих хэш-функций включают библиотеку BINT (Big INTeger arithmetics) или её эквивалент.
Хотя, "на коленке", наверно, и восьмибитными операциями можно сделать (на AVR, например) :-) Только Вы же о скорости беспокоитесь, нет?
Вы заблуждаетесь. Размер хэша != размер слова используемого внутри хэш-функции. А криптографические программы в своем составе имеют BINT не из-за хэш-функций, а из-за алгоритмов ассиметричного шифрования, ЭЦП и обмена ключами. Откройте даже википедию и посмотрите алгоритмы MD5, SHA-2. Там нигде не используется длинная арифметика. Все опреации идут вполне на стандартных типах данных для С.
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
09.05.2013, 19:49 9
Цитата Сообщение от RUmkym
Вы заблуждаетесь. Размер хэша != размер слова используемого внутри хэш-функции.
Я этого и не говорил. Динные для хэширования вообще могут быть размером в один байт, ту нет связи с размером хэша. А вот вычисление хэша большой разрядности удобно делать операциями такой же разрадности.[/quote]
Цитата Сообщение от RUmkym
А криптографические программы в своем составе имеют BINT не из-за хэш-функций, а из-за алгоритмов ассиметричного шифрования, ЭЦП и обмена ключами. Откройте даже википедию и посмотрите алгоритмы MD5, SHA-2. Там нигде не используется длинная арифметика. Все опреации идут вполне на стандартных типах данных для С.
И для симметричного шифрования BINT тоже используется за милую душу.
Я не по википедии эту тему знаю, а по коммерческим проектам. Впрочем, офф-топик это уже, Вы же нашли что хотели.
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
09.05.2013, 21:22 10
OtyxPM, не мутите воду, вам же написали уже, там 32 или 64 бита чисто по алгоритму. негде там применять длинную арифметику. идите курите матчасть.
0
RUmkym
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 183
09.05.2013, 23:11 11
Цитата Сообщение от OtyxPM
А вот вычисление хэша большой разрядности удобно делать операциями такой же разрадности.
Не будьте голословным, ткните в итерацию в алгоритме где это применяется.

Цитата Сообщение от OtyxPM
И для симметричного шифрования BINT тоже используется за милую душу.
Я не по википедии эту тему знаю, а по коммерческим проектам. Впрочем, офф-топик это уже, Вы же нашли что хотели.
Боюсь представить реализацию aes или госта с использованием длинной арифметики)
Вы безусловно хороший кодер, раз уж уверенно знаете такие фишки как смешивание ассемблера и С в одном проекте, но слепые высказывания насчет использования абсолютно избыточных и ненужных вещей в "теме, которую знаете по коммерческим проектам" приводит меня в недоумение. Коммерческие проекты - совсем не показатель, а википедия вполне сносный ресурс для получения информации. В общем просто оставлю это здесь: http://ru.wikipedia.org/wiki/MD5 - здесь мы оперируем 4 регистрами по 32 бита. http://ru.wikipedia.org/wiki/SHA-2 - здесь же оперируем 16 словами по 32/64 бита в зависимости от длины получаемого хэша. Тот же keccak оперирует 64битными словами.
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
10.05.2013, 03:51 12
Цитата Сообщение от RUmkym
...
Ответил в личную почту, чтобы не засорять офф-топиком тему.
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
10.05.2013, 04:11 13
а мне?
0
10.05.2013, 04:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2013, 04:11

IAR ARM: как отлаживать пошагово Си?
Доброго времени суток. Вопрос к мастерам инструментального софта IAR: Знаю, что можно настроить...

Длинная арифметика
Суть проблемы такова, нужно взять exp от большого числа ~1e6 модуль math не помогает, можно...

Длинная арифметика
Требуется вычислить факториал целого числа N. Факториал обозначают как N! и вычисляют по формуле: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru