mORMot2 DailyЕжедневный обзор коммитов апстрима

RSA получает FIPS-свидетелей, исправлены дефекты AES-GCM и баз данных

Главная тема выпуска — большая серия исправлений корректности, соответствия стандартам и производительности RSA: fixed-width encoding и более строгие проверки PKCS#1/PSS дополнены NIST DRBG и выбором свидетелей Miller-Rabin по FIPS 186-5. Также исправлены partial blocks AES-GCM, переносы x86, проверка ECC-ключей, ожидание timer и несколько граничных случаев PostgreSQL/SQLite. Пользователям публичного TBigInt нужно учесть изменение сигнатуры IsPrime и новые методы.

Коротко

  • Переходите на build 2.4.17586 со всей серией compliance и optimization для RSA.
  • TBigInt.IsPrime теперь принимает TAesPrngAbstract вместо PLecuyer; прямые callers должны мигрировать.
  • RSA выдаёт fixed-width значения, а PKCS#1/PSS отвергает неканонические и неверные encoding.
  • AES-GCM корректно обрабатывает частичные AVX-блоки и состояние после Clone/Reset.
  • Исправлены пустые строки PostgreSQL, чтение BOOLINT и удаление thread-safe соединений.

Рекомендации по обновлению

Используйте финальный build 2.4.17586. Пересоберите прямые вызовы TBigInt.IsPrime с TAesPrngAbstract, затем проверьте генерацию RSA, подпись и проверку PKCS#1/PSS, AES-GCM streaming с невыровненными chunks, пустые параметры и BOOLINT PostgreSQL, ошибки backup SQLite и shutdown timer. Сверьте x86/x64 и AArch64 crypto backends с известными векторами.

Сборка2.4.17551 → 2.4.17586
Коммиты35
Строки+1759 -469
Чтение5 мин

35 из 35 записей · 35 коммитов в апстриме

# Запись Категория Модули
1 Критический x86 assembler корректно переносит carry между блоками больших целых Циклы x86/x64 _xasmadd/_xasmsub сохраняют carry/borrow через BT перед ADC/SBB на границах развёрнутых блоков. Исправления mormot.crypt.core.asmx64+1 8ea03422+10-10

crypt: fixed _xasmadd/sub x86/x64 asm carry propagation

Влияние

Некоторые operands могли давать неверные суммы или разности больших целых и повреждать RSA calculations на Intel.

Arnaud Bouchez · 15:41 UTC · открыть коммит на GitHub →

2 Высокий Тесты простоты RSA переходят с L'Ecuyer на NIST DRBG TBigInt.IsPrime заменяет необязательный PLecuyer на TAesPrngAbstract; внутренняя генерация использует TAesPrng.Main для свидетелей Miller-Rabin. Несовместимые изменения mormot.crypt.rsa 9bce2b48+23-18

crypt: enhanced RSA compliance with NIST recommandations

Влияние

Прямые callers с указателем PLecuyer больше не компилируются; default-вызовы переходят на AES DRBG framework.

Требуется миграция

Найдите вызовы TBigInt.IsPrime с третьим аргументом и передайте экземпляр TAesPrngAbstract.

Публичный API

  • TBigInt.IsPrimesignature-changed — Третий параметр теперь TAesPrngAbstract вместо PLecuyer.

Модули

Arnaud Bouchez · 08:41 UTC · открыть коммит на GitHub →

3 Высокий RSA serialization и проверка подписей требуют канонической ширины TBigInt.SaveFixed добавляет ведущие нули; RSA отвергает значения не меньше модуля, а PKCS#1/PSS требует точной ширины и строгих salt/padding checks. Безопасность mormot.crypt.rsa b4a21003+99-33

crypt: ensure fixed-width RSA serialization

Влияние

RSA ciphertext и signatures сохраняют ширину модуля; ранее допускавшиеся некорректные или неканонические подписи отвергаются.

Публичный API

  • TBigInt.SaveFixedadded — Экспортирует точное число big-endian байтов с ведущими нулями.

Модули

Arnaud Bouchez · 20:01 UTC · открыть коммит на GitHub →

4 Высокий AES-GCM проверяет порядок streaming и сохраняет pending state TAesGcm использует PtrUInt lengths, клонирует pending AVX blocks, запрещает AAD после ciphertext, проверяет high-level AAD и исправляет адрес tunnel tag. Безопасность mormot.crypt.core+1 36e581ed+22-21

crypt: several fixes to TAesGcm

Влияние

Streaming и cloned AES-GCM contexts аутентифицируют нужные байты; неверный порядок AAD теперь завершается ошибкой.

Arnaud Bouchez · 14:17 UTC · открыть коммит на GitHub →

5 Высокий Свидетели Miller-Rabin теперь выбираются по FIPS 186-5 TBigInt.FillMillerRabinWitness использует rejection sampling по всей разрядности кандидата и помещает результат в интервал FIPS 186-5 B.3.1. Безопасность mormot.crypt.rsa 319cd63e+19-18

crypt: RSA Miller-Rabin witness selection as described in FIPS 186-5 B.3.1

Влияние

Проверка простоты RSA больше не смещает свидетелей усечённым modulo; генерация ключей Delphi/FPC получает финальное compliance-исправление.

Модули

Arnaud Bouchez · 09:06 UTC · открыть коммит на GitHub →

6 Высокий ECC loaders отвергают повреждённые ключи и ключи неверного типа PemDerRawToEcc проверяет prefix сжатого public key, DerParse отвергает пустые и oversized ASN.1 INTEGER; tests запрещают подмену public/private key. Безопасность mormot.crypt.ecc+1 e3133b00+19-8

crypt: fixed #652 ECC key parsing and validation

Влияние

Malformed DER и private key, поданный как public, больше не проходят загрузку в Delphi/FPC crypto backends.

Arnaud Bouchez · 12:17 UTC · PR #652 · открыть коммит на GitHub →

7 Высокий Исправлены раунды простоты RSA и проверка PKCS padding FipsMinIterations сравнивает полную разрядность, PKCS#1 принимает padding не короче восьми байтов, а PSS требует ширину подписи ровно как у модуля. Безопасность mormot.crypt.rsa c21e6cfa+6-6

crypt: several RSA fixes

Влияние

Исправлены гарантии простоты и стандартная обработка padding; неверные длины PSS стабильно отвергаются.

Модули

Arnaud Bouchez · 18:26 UTC · открыть коммит на GitHub →

8 Высокий Переменные окружения сохраняют пустые значения и восстанавливают отсутствие Кэш получает явный initialized flag; SetSystemEnv всегда записывает, а ResetSystemEnv восстанавливает значение или удаляет изначально отсутствующее имя на Windows/POSIX. Исправления mormot.core.os+3 4fc7e59a+90-43

core: fixed #651 environment variables functions

Влияние

Пустое значение больше не считается отсутствующим кэшем, а временные variables корректно возвращаются в состояние not set.

Публичный API

  • SetSystemEnvbehaviour-changed — Всегда записывает заданное значение, включая пустую строку.
  • ResetSystemEnvbehaviour-changed — Удаляет variables, отсутствовавшие при заполнении кэша.

Arnaud Bouchez · 12:00 UTC · PR #651 · открыть коммит на GitHub →

9 Высокий Разбор LDAP URI различает default и custom ports TLdapClient при URI без схемы и порта выбирает LDAP_PORT, сохраняет explicit ports и включает TLS для LDAPS_PORT. Исправления mormot.net.ldap c46549d6+21-7

net: fixed #653 LDAP port parsing

Влияние

LDAP endpoints больше не получают ошибочно HTTP port 80, а custom ports сохраняются.

Модули

Arnaud Bouchez · 12:17 UTC · PR #653 · открыть коммит на GitHub →

10 Высокий Пустые параметры PostgreSQL отличаются от SQL NULL TSqlDBPostgresStatement.BindParams указывает пустые non-null строки на NULCHAR вместо nil для libpq. Исправления mormot.db.sql.postgres 9a90c009+7-3

db: fixed #658 TSqlDBPostgresStatement.BindParams with '' value

Влияние

Binding '' больше не вставляет SQL NULL, предотвращая тихое изменение данных PostgreSQL.

Arnaud Bouchez · 12:51 UTC · PR #658 · открыть коммит на GitHub →

11 Высокий Остановка timer ждёт запрошенное число секунд TSynBackgroundTimer.WaitUntilNotProcessing переводит timeout из секунд в миллисекунды перед SleepHiRes. Исправления mormot.core.threads 630707ac+3-3

core: fixed TSynBackgroundTimer.WaitUntilNotProcessing #660

Влияние

Ожидание больше не примерно в тысячу раз короче заданного, уменьшая shutdown races с active callbacks.

Arnaud Bouchez · 12:56 UTC · PR #660 · открыть коммит на GitHub →

12 Высокий Thread-safe SQL pools удаляют все выделенные соединения TSqlDBConnectionPropertiesThreadSafe.Destroy проходит реальные границы массива соединений, а не configured min/max. Исправления mormot.db.sql db7c4721+3-3

db: fixed TSqlDBConnectionPropertiesThreadSafe.Destroy #657

Влияние

Pool teardown не теряет initialized connections и не выходит за массив после изменения configuration.

Модули

Arnaud Bouchez · 12:45 UTC · PR #657 · открыть коммит на GitHub →

13 Высокий AES-GCM Reset очищает длину оставшегося partial block TAesGcmEngine.Reset теперь обнуляет state.blen после операции с неполным блоком. Исправления mormot.crypt.core e8367af5+3-2

crypt: fixed TAesGcmEngine.Reset after non-complete blocks

Влияние

Повторное использование AES-GCM engine больше не переносит stale offset в следующее сообщение и не портит encryption/authentication.

Модули

Arnaud Bouchez · 13:18 UTC · открыть коммит на GitHub →

14 Высокий Фоновые timers отмечают обработку до обновления счётчиков TSynBackgroundTimer.EverySecond устанавливает fProcessing до increment и callbacks, закрывая оставшуюся race в WaitUntilNotProcessing. Исправления mormot.core.threads a0b02203+3-2

core: fix #660 part II

Влияние

Shutdown code больше не проходит через короткое окно до установки processing flag.

Arnaud Bouchez · 12:59 UTC · PR #660 · открыть коммит на GitHub →

15 Высокий AVX AES-GCM поддерживает частичные и усечённые chunks TAesGcmEngine сохраняет неполные AAD/text blocks между вызовами, продолжает CTR bytes и задаёт AllowAvx=true по умолчанию в Init. Новые возможности mormot.crypt.core 2d95c74a+128-27

crypt: allow partial/truncated AES-GCM encryption

Влияние

Delphi/FPC builds с AVX могут обрабатывать произвольные chunks; пропущенный AllowAvx теперь включает AVX.

Стоит взглянуть

Проверьте chunks от одного байта до нескольких блоков и решите, нужно ли явно передавать AllowAvx=false.

Публичный API

  • TAesGcmEngine.Initsignature-changed — AllowAvx теперь имеет default true.

Модули

Arnaud Bouchez · 14:05 UTC · открыть коммит на GitHub →

16 Средний Неизвестные аргументы командной строки называют правильный token TCommandLine.DetectUnknown сообщает parsed fNames entry вместо неверного индекса raw parameter list. Исправления mormot.core.os 938a6bb1+12-3

core: fixed #654 unexpected command line argument reporting

Влияние

Diagnostics называют реальную unexpected option после parsing; правила acceptance не меняются.

Модули

Arnaud Bouchez · 12:29 UTC · PR #654 · открыть коммит на GitHub →

17 Средний LDAP сохраняет явно заданный порт до подключения TLdapClient сохраняет порт из URI при создании socket вместо оставшегося fallback на default port. Исправления mormot.net.ldap fa932d76+9-4

net: one leftover of #653

Влияние

LDAP/LDAPS endpoints на custom ports подключаются к настроенному сервису, а не default port.

Модули

Arnaud Bouchez · 12:25 UTC · PR #653 · открыть коммит на GitHub →

18 Средний PostgreSQL boolean integers возвращают единицу для true TSqlDBPostgresStatement.ColumnInt распознаёт BOOLOID и отображает wire value 't' в 1, остальное в 0. Исправления mormot.db.sql.postgres c0bc6984+9-3

db: fixed #659 TSqlDBPostgresStatement.ColumnInt with BOOLINT value

Влияние

Delphi/FPC code, читающий PostgreSQL boolean через ColumnInt, получает ожидаемое числовое значение.

Стоит взглянуть

Проверьте BOOLINT mappings и запросы, читающие boolean expressions как integer.

Arnaud Bouchez · 12:53 UTC · PR #659 · открыть коммит на GitHub →

19 Средний SQLite backup корректно сообщает об ошибке открытия назначения BackupBackground перехватывает exceptions при создании destination TSqlDatabase, освобождает partial state и возвращает false. Исправления mormot.db.raw.sqlite3 81dcd78a+7-3

db: fixed #655 backup destination creation failure

Влияние

Неверное или недоступное backup destination больше не выбрасывает неожиданную constructor exception.

Стоит взглянуть

Проверьте неверные пути и permissions и обработку false result.

Arnaud Bouchez · 12:33 UTC · PR #655 · открыть коммит на GitHub →

20 Средний AArch64 получает нативную арифметику больших целых для RSA Новый AArch64 assembler реализует add/subtract/multiply/divide primitives, а mormot.defines и TBigInt включают dispatch. Производительность mormot.core.base+3 78fb3897+518-69

crypt: new aarch64 asm primitives for RSA computing

Влияние

RSA на Delphi/FPC AArch64 использует native optimized arithmetic; корректность зависит от совпадения с Pascal vectors.

Стоит взглянуть

Запустите RSA и TBigInt vectors на каждой поддерживаемой AArch64 OS.

Arnaud Bouchez · 16:54 UTC · открыть коммит на GitHub →

21 Средний Barrett reduction вычисляет только нужные младшие limbs Добавлен TBigInt.MultiplyLow; TRsaContext.BarrettReduction не строит старшие limbs, которые сразу отбрасываются. Производительность mormot.crypt.rsa c12db49f+182-6

crypt: optimized RSA barret reduction implementation

Влияние

RSA modular reduction меньше выделяет и умножает, ускоряя signing и private-key workloads без изменения output.

Стоит взглянуть

Запустите TBigInt aliasing и RSA known-answer tests для каждой разрядности.

Публичный API

  • TBigInt.MultiplyLowadded — Умножает только заданное число младших limbs и освобождает operands как Multiply.

Модули

Arnaud Bouchez · 15:50 UTC · открыть коммит на GitHub →

22 Средний Поиск простых RSA дешевле обновляет остатки и пропускает кандидатов TBigInt.FillPrime сохраняет остатки по малым простым при увеличении кандидата и не повторяет полное деление каждый раз. Производительность mormot.crypt.rsa 2791c66f+127-15

crypt: huge performance boost of RSA generation

Влияние

RSA key generation заметно ускоряется, особенно на медленных Delphi/FPC targets, без изменения формата ключей.

Стоит взглянуть

Измерьте типичные размеры ключей и проверьте ключи независимым валидатором.

Модули

Arnaud Bouchez · 17:13 UTC · открыть коммит на GitHub →

23 Средний Генерация RSA вычисляет два простых числа на разных ядрах TRsa.Generate ищет p и q в двух worker tasks, координирует завершение и сохраняет существующие timeout и cleanup. Производительность mormot.crypt.rsa 0f2aa131+103-27

crypt: compute p/q RSA primes in parallel in two CPU cores

Влияние

Создание RSA-ключей использует два CPU cores и может ускориться; формат ключей и application calls не меняются.

Стоит взглянуть

Измерьте генерацию и проверьте лимиты worker threads в ограниченных сервисах.

Модули

Arnaud Bouchez · 08:09 UTC · открыть коммит на GitHub →

24 Средний RSA reduction переходит на предварительно вычисленный Barrett reciprocal TRsaContext заранее вычисляет Barrett constants, а Reduce заменяет повторное деление на multiplication и shifts. Производительность mormot.crypt.rsa bcdff3ac+68-7

crypt: use Barret Reduction for TRsaContext.Reduce()

Влияние

RSA signing и verification тратят меньше времени на modular reduction; API и serialized values не меняются.

Стоит взглянуть

Сравните RSA vectors до и после изменения на 32-bit и 64-bit targets.

Модули

Arnaud Bouchez · 15:19 UTC · открыть коммит на GitHub →

25 Средний Сборки Delphi Intel снова используют assembler crypto paths mormot.defines восстанавливает ASMINTELARM64 для Delphi x86/x64, чтобы компилировались оптимизированные primitives. Компилятор и платформы mormot.defines b6fd1b2e+4-2

crypt: restore asm for Delphi Intel targets

Влияние

Crypto-код Delphi Win32/Win64 возвращает assembler performance; FPC и non-Intel поведение не меняются.

Стоит взглянуть

Пересоберите Delphi Intel и выполните crypto vectors на Win32 и Win64.

Модули

Arnaud Bouchez · 17:04 UTC · открыть коммит на GitHub →

26 Низкий Модульное возведение RSA переходит на sliding window TRsaContext.ModPower вводит трёхбитное sliding window с предварительно вычисленными нечётными степенями. Производительность mormot.crypt.rsa 9b9e71e3+51-14

crypt: 3-bit sliding window for RSA ModPower

Влияние

RSA с приватным exponent требует меньше multiplication; миграция и изменение формата не нужны.

Модули

Arnaud Bouchez · 17:39 UTC · открыть коммит на GitHub →

27 Низкий Предварительный тест по основанию 2 раньше отсеивает составные RSA-кандидаты TBigInt.IsPrime сначала выполняет strong probable-prime test со свидетелем 2, затем случайные раунды Miller-Rabin. Производительность mormot.crypt.rsa 5be3ad0c+46-18

crypt: faster TBigInt.IsPrime by using base-2 pretest

Влияние

RSA generation дешевле отбрасывает многие составные кандидаты без изменений приложения.

Модули

Arnaud Bouchez · 07:03 UTC · открыть коммит на GitHub →

28 Низкий Barrett reduction устраняет лишнюю работу RSA TRsaContext переиспользует размеры модуля и сокращает временные значения в оптимизированном Barrett path. Производительность mormot.crypt.rsa bc529ee6+36-17

crypt: optimized RSA Barret Reduction

Влияние

RSA modular reduction меньше выделяет и копирует; application code и crypto output не меняются.

Модули

Arnaud Bouchez · 18:02 UTC · открыть коммит на GitHub →

29 Низкий Для больших целых добавлена отдельная реализация возведения в квадрат TBigInt.Square напрямую вычисляет диагональные и удвоенные перекрёстные произведения вместо Multiply над копией. Производительность mormot.crypt.rsa 7be82719+39-4

crypt: dedicated TBigInt.Square method

Влияние

RSA exponentiation быстрее выполняет square, сохраняя контракт TBigInt.Square.

Публичный API

  • TBigInt.Squarebehaviour-changed — Использует отдельный алгоритм square вместо общего multiplication.

Модули

Arnaud Bouchez · 17:51 UTC · открыть коммит на GitHub →

30 Низкий Pascal-деление больших целых на десять оптимизировано TBigInt.IntDivMod10 переписывает Pascal-цикл quotient/remainder, уменьшая ветвления и индексацию. Производительность mormot.crypt.rsa dec4ec58+25-17

crypt: optimized TBigInt.IntDivMod10 pascal code

Влияние

Decimal formatting больших целых ускоряется без assembler path; результат не меняется.

Модули

Arnaud Bouchez · 17:03 UTC · открыть коммит на GitHub →

31 Низкий Для типичного RSA exponent добавлен отдельный быстрый путь TRsaContext распознаёт exponent 65537 и использует короткую фиксированную square-and-multiply последовательность. Производительность mormot.crypt.rsa 4f07c5c3+16-12

crypt: optimize exponent common prime 65537

Влияние

Публичные RSA-операции с exponent 65537 ускоряются без изменения API или результата.

Модули

Arnaud Bouchez · 07:05 UTC · открыть коммит на GitHub →

32 Низкий Exponent 65537 вычисляется шестнадцатью squares и одним multiply TRsaContext.ModPower распознаёт 65537 и выполняет точную бинарную цепочку без общей sliding-window таблицы. Производительность mormot.crypt.rsa d283eeda+17-2

crypt: optimized RSA for exponent=65537

Влияние

RSA verification и encryption со стандартным exponent ускоряются без изменения поведения или API.

Модули

Arnaud Bouchez · 17:42 UTC · открыть коммит на GitHub →

33 Низкий Модульное возведение RSA использует четырёхбитное скользящее окно TRsaContext.ModPower расширяет таблицу нечётных степеней с трёх до четырёх бит и меняет цикл сканирования. Производительность mormot.crypt.rsa e1d2b232+6-6

crypt: use 4-bit sliding window for TRsaContext.ModPower

Влияние

RSA с большим приватным exponent требует меньше modular multiplications; callers и serialized results не меняются.

Модули

Arnaud Bouchez · 07:04 UTC · открыть коммит на GitHub →

34 Низкий Криптографическое ядро реорганизовано без изменения поведения mormot.crypt.core перемещает helpers и упрощает declarations, сохраняя AES и hash control flow. Внутреннее устройство mormot.crypt.core 4d9c5730+19-22

crypt: minor refactoring with no functional change

Влияние

Нет влияния на Delphi/FPC code, public API или ожидаемые cryptographic results.

Модули

Arnaud Bouchez · 15:19 UTC · открыть коммит на GitHub →

35 Низкий Код десятичного преобразования больших целых очищен TBigInt.IntDivMod10 упрощает переменные и цикл без изменения результата или публичной сигнатуры. Внутреннее устройство mormot.crypt.rsa 260dd9cb+9-14

crypt: minor TBigInt.IntDivMod10 refactoring/cleaning

Влияние

Нет влияния на Delphi/FPC application code; это подготовительный internal cleanup.

Модули

Arnaud Bouchez · 17:14 UTC · открыть коммит на GitHub →

Активность апстрима коммитов в день · последние 60 дней
Коммиты977
Активных дней44/60
Пик активности2026-09-30
Максимум60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13