Требует действийможет затронуть работающую систему
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 с известными векторами.
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.
Рекомендуется обновиться
Обновите Intel builds и повторите RSA known-answer tests с длинными цепочками carry через all-ones.
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.
Модули
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 сохраняют ширину модуля; ранее допускавшиеся некорректные или неканонические подписи отвергаются.
Рекомендуется обновиться
Проверьте PKCS#1 v1.5/PSS с независимой реализацией и ширину сохранённых подписей.
Публичный API
TBigInt.SaveFixedadded — Экспортирует точное число big-endian байтов с ведущими нулями.
Модули
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 теперь завершается ошибкой.
Рекомендуется обновиться
Обновите AES-GCM/tunnel и проверьте clone, порядок AAD и сообщения без block alignment.
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-исправление.
Рекомендуется обновиться
Используйте build 2.4.17586 и повторите генерацию RSA с независимой проверкой простоты.
Модули
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.
Рекомендуется обновиться
Обновите ECC и добавьте negative tests для truncated DER, oversized integers и swapped key kinds.
7
Высокий
Исправлены раунды простоты RSA и проверка PKCS padding
FipsMinIterations сравнивает полную разрядность, PKCS#1 принимает padding не короче восьми байтов, а PSS требует ширину подписи ровно как у модуля.
Безопасность
mormot.crypt.rsa
c21e6cfa+6-6
crypt: several RSA fixes
Влияние
Исправлены гарантии простоты и стандартная обработка padding; неверные длины PSS стабильно отвергаются.
Рекомендуется обновиться
Обновите RSA-пользователей и повторите тесты padding, signatures и generated primes.
Модули
8
Высокий
Переменные окружения сохраняют пустые значения и восстанавливают отсутствие
Кэш получает явный initialized flag; SetSystemEnv всегда записывает, а ResetSystemEnv восстанавливает значение или удаляет изначально отсутствующее имя на Windows/POSIX.
Исправления
mormot.core.os+3
4fc7e59a+90-43
core: fixed #651 environment variables functions
Влияние
Пустое значение больше не считается отсутствующим кэшем, а временные variables корректно возвращаются в состояние not set.
Рекомендуется обновиться
Проверьте SetSystemEnv/ResetSystemEnv для absent, empty и non-empty variables на Windows и POSIX.
Публичный API
SetSystemEnvbehaviour-changed — Всегда записывает заданное значение, включая пустую строку.ResetSystemEnvbehaviour-changed — Удаляет variables, отсутствовавшие при заполнении кэша.
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 сохраняются.
Рекомендуется обновиться
Проверьте host-only, ldap://, ldaps:// и строки с explicit port.
Модули
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.
Рекомендуется обновиться
Обновите PostgreSQL и проверьте insert/update с пустыми RawUtf8 или string.
Модули
11
Высокий
Остановка timer ждёт запрошенное число секунд
TSynBackgroundTimer.WaitUntilNotProcessing переводит timeout из секунд в миллисекунды перед SleepHiRes.
Исправления
mormot.core.threads
630707ac+3-3
core: fixed TSynBackgroundTimer.WaitUntilNotProcessing #660
Влияние
Ожидание больше не примерно в тысячу раз короче заданного, уменьшая shutdown races с active callbacks.
Рекомендуется обновиться
Обновите сервисы, останавливающие timers под нагрузкой, и проверьте shutdown latency.
Модули
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.
Рекомендуется обновиться
Проверьте reconfiguration пула и shutdown с leak reporting.
Модули
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.
Рекомендуется обновиться
Обновите reusable AES-GCM contexts и проверьте последовательные невыровненные сообщения.
Модули
14
Высокий
Фоновые timers отмечают обработку до обновления счётчиков
TSynBackgroundTimer.EverySecond устанавливает fProcessing до increment и callbacks, закрывая оставшуюся race в WaitUntilNotProcessing.
Исправления
mormot.core.threads
a0b02203+3-2
core: fix #660 part II
Влияние
Shutdown code больше не проходит через короткое окно до установки processing flag.
Рекомендуется обновиться
Проверьте уничтожение timer при старте и во время callbacks.
Модули
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.
Модули
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 не меняются.
Модули
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.
Рекомендуется обновиться
Проверьте LDAP URI со схемой и без неё на портах кроме 389/636.
Модули
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.
Модули
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.
Модули
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.
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.
Модули
22
Средний
Поиск простых RSA дешевле обновляет остатки и пропускает кандидатов
TBigInt.FillPrime сохраняет остатки по малым простым при увеличении кандидата и не повторяет полное деление каждый раз.
Производительность
mormot.crypt.rsa
2791c66f+127-15
crypt: huge performance boost of RSA generation
Влияние
RSA key generation заметно ускоряется, особенно на медленных Delphi/FPC targets, без изменения формата ключей.
Стоит взглянуть
Измерьте типичные размеры ключей и проверьте ключи независимым валидатором.
Модули
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 в ограниченных сервисах.
Модули
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.
Модули
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.
Модули
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; миграция и изменение формата не нужны.
Модули
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 дешевле отбрасывает многие составные кандидаты без изменений приложения.
Модули
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 не меняются.
Модули
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.
Модули
30
Низкий
Pascal-деление больших целых на десять оптимизировано
TBigInt.IntDivMod10 переписывает Pascal-цикл quotient/remainder, уменьшая ветвления и индексацию.
Производительность
mormot.crypt.rsa
dec4ec58+25-17
crypt: optimized TBigInt.IntDivMod10 pascal code
Влияние
Decimal formatting больших целых ускоряется без assembler path; результат не меняется.
Модули
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 или результата.
Модули
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.
Модули
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 не меняются.
Модули
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.
Модули
35
Низкий
Код десятичного преобразования больших целых очищен
TBigInt.IntDivMod10 упрощает переменные и цикл без изменения результата или публичной сигнатуры.
Внутреннее устройство
mormot.crypt.rsa
260dd9cb+9-14
crypt: minor TBigInt.IntDivMod10 refactoring/cleaning
Влияние
Нет влияния на Delphi/FPC application code; это подготовительный internal cleanup.
Модули
Прошлые выпуски
- TTunnelLocal переходит на аутентифицированный AES-GCM с раздельными ключами11
- Лимиты redirects унифицированы, а ожидание POSIX-процессов завершается вовремя9
- HTTP-клиенты и WebSocket стабилизированы после широкой оптимизации ECC33
- Атомики FPC ARM получают порядок памяти, HTTP.sys WebSockets перестраиваются35
- Маршрутизация proxy стабилизирована, ошибка подкласса WebSocket исправлена27
- HTTP-автоматы стабилизированы, а закрытие Unix-клиента больше не удаляет сокет сервера37
- Асинхронное завершение закрывает утечки, а HTTP-таймауты разделены по фазам26
- Тесты RTSP-over-HTTP больше не делят порты прослушивания1
- Исправлены привязка массивов PostgreSQL и конкурентное ожидание15
- Проверка AES-GCM восстановлена, Tunnel и очереди переработаны32
- Deadlock в WebSocket устранён, TLS и логирование исключений стабилизированы30
- SChannel получает нативный mTLS, а гонки запуска серверов устранены26