Требует действийможет затронуть работающую системуПроверены все 56 non-merge commits от 2.4.17209 до 2.4.17268: 2 694 добавления и 1 378 удалений без version bookkeeping. Четыре merge commits исключены. superseded_by отсутствует; порядок основан на проверенных follow-ups и не задаёт avoid range.
Windows CNG и PKCS#11 расширены, исправлены дефекты безопасности JSON и сокетов
В этом крупном криптографическом выпуске появился backend хранилища сертификатов Windows CNG, завершено расшифрование RSA-envelope через ключи CNG и PKCS#11 и исправлена длинная серия проблем импорта, подписи и жизненного цикла PKCS#11. Также устранено чтение за границами при JSON-логировании, ограничен socket retry, исправлен session cookie за reverse proxy и разделены HTTP connect/send/receive timeouts.
Коротко
- Переходите на build 2.4.17268 в 80bc2689df777dadbe1f8af745096eeb13205ef7.
- Добавьте mormot.crypt.win в uses, если код обращается к TAesAbstractApi или его CryptoAPI AES-потомкам: они перенесены из mormot.crypt.core.
- Windows получает TCryptCertAlgoCng, ICryptCertCng и TCryptCertCng.LoadPkcs12 для store, smart-card/KSP и временных PFX identities.
- PKCS#11 получает RSA-envelope decryption и больше алгоритмов подписи, но TPkcs11 больше не thread-safe; общий каталог защищайте TCryptCertAlgoPkcs11.Lock/UnLock.
- Обновитесь ради исправлений TJsonWriter.AddEscapeBuffer over-read, бесконечного TCrtSocket.TrySockRecv retry, GPF в CNG/PKCS#11 и OpenSSL ABI.
- THttpClientSocket.SetTimeouts разделяет connect, send и receive budgets; TRestHttpClientSocket применяет все три.
Рекомендации по обновлению
Переходите на build 2.4.17268. Срочно обновитесь, если production логирует недоверенный или binary text, использует blocking/TLS sockets, Windows IOCP, REST auth за proxy, OpenSSL, Windows CNG или PKCS#11. Добавьте mormot.crypt.win в нужные uses. Проверьте прямое совместное использование TPkcs11: внутренней блокировки больше нет, применяйте TCryptCertAlgoPkcs11.Lock/UnLock. Протестируйте import в token, PSS/ECC signatures, shutdown во время discovery, RSA Open и три HTTP timeout. superseded_by отсутствует, поэтому avoid window не заявляется.
56 из 56 записей · 60 коммитов в апстриме
1
Критический
JSON escaping больше не читает за пределами buffer
TJsonWriter.AddEscapeBuffer исправляет перевёрнутое сравнение MaxLen: Len теперь обрезается, а не увеличивается до MaxLen.
Безопасность
mormot.core.json
c955c837+2-2
core: TJsonWriter.AddEscapeBuffer() did read beyond the input buffer
Влияние
Логирование invalid UTF-8/binary content больше не копирует чужие heap bytes в log и не вызывает access violation под log lock.
Рекомендуется обновиться
Срочно обновитесь, если недоверенные/binary values достигают TSynLog.LogText или AddEscapeBuffer; проверьте TextTruncateAtLength.
Публичный API
TJsonWriter.AddEscapeBufferbehaviour-changed
Модули
2
Высокий
PKCS#11 locking перенесён из low-level engine в catalog
TPkcs11 меняет базу TObjectOSLock на TSynPersistent и удаляет internal locking. TCryptCertAlgoPkcs11 получает reentrant TOSLock и public Lock/UnLock.
Несовместимые изменения
mormot.crypt.pkcs11+1
fdbd6e9f+197-220
crypt: simplified PKCS#11 threading model
Влияние
Прямые TPkcs11 instances теперь не thread-safe. Параллельные вызовы, полагавшиеся на Engine.Safe/implicit serialization, могут повредить shared session state.
Требуется миграция
Найдите shared TPkcs11 и Engine.Safe. Сериализуйте через TCryptCertAlgoPkcs11.Lock/UnLock либо используйте engine на thread.
Публичный API
TPkcs11behaviour-changedTCryptCertAlgoPkcs11.LockaddedTCryptCertAlgoPkcs11.UnLockadded
3
Высокий
Неподдерживаемые certificate factories возвращают nil без разыменования
TCryptCertAlgo.New и FromHandle стали virtual defaults с nil; Load, Generate, CreateSelfSignedCsr и GenerateFromCsr проверяют интерфейс перед вызовом. CNG и PKCS#11 удаляют лишние overrides.
Исправления
mormot.crypt.secure+2
11f136ba+31-61
crypt: fixed potential GPF in TCryptCertAlgo misuse
Влияние
Вызов generic factory у catalog-style алгоритмов больше не грозит access violation. Поддерживаемые реализации сохраняют прежние factories.
Рекомендуется обновиться
Обновитесь, если код вызывает Load, Generate или GenerateFromCsr через CNG/PKCS#11.
Публичный API
TCryptCertAlgo.Newbehaviour-changedTCryptCertAlgo.FromHandlebehaviour-changed
4
Высокий
PKCS#11 shutdown ждёт background discovery
TCryptCertAlgoPkcs11 хранит TLoggedWorkThread с manual wait, освобождает его до engine и устанавливает completion в finally под lock.
Исправления
mormot.crypt.pkcs11
d74a0234+48-42
crypt: fixed PKCS#11 background loading
Влияние
Destroy catalog во время медленной library initialization больше не приводит loader к freed memory и GPF.
Рекомендуется обновиться
Проверьте shutdown во время загрузки PKCS#11 library и перечисления token.
Модули
5
Высокий
PKCS#11 import возвращает сохранённый сертификат и откатывает ошибки
TCryptCertAlgoPkcs11.Import проверяет hex ID, создаёт certificate/private-key objects, перечитывает сертификат, добавляет его в catalog и откатывает partial objects в обратном порядке.
Исправления
mormot.crypt.pkcs11
f4ba19f2+55-29
crypt: fixed TCryptCertAlgoPkcs11.Import() method
Влияние
Успешный import сразу доступен, ошибки не оставляют orphan token objects.
Рекомендуется обновиться
Проверьте success, invalid ID, private-key failure и rollback на каждом HSM.
Публичный API
TCryptCertAlgoPkcs11.Importbehaviour-changed
Модули
6
Высокий
PKCS#11 RSA-PSS signing передаёт обязательные параметры
Pkcs11SetPssParams строит CK_RSA_PKCS_PSS_PARAMS с hash, MGF1 и salt length; SignDigest отправляет raw digest для PSS вместо PKCS#1 DigestInfo.
Исправления
mormot.crypt.pkcs11+1
639e45ff+75-5
crypt: fixed PSS support in TCryptPrivateKeyPkcs11.SignDigest
Влияние
Hardware tokens могут создавать корректные PS256/PS384/PS512 signatures вместо отказа или неверного encoding.
Рекомендуется обновиться
Проверьте PSS signatures независимым verifier для каждого token.
Публичный API
Pkcs11SetPssParamsadded
7
Высокий
PKCS#11 public keys восстанавливаются из algorithm-specific attributes
Pkcs11PublicKey сначала пробует CKA_PUBLIC_KEY_INFO, затем восстанавливает RSA, EC и Ed25519 из их attributes. TCryptCertPkcs11.Create больше не считает CKA_VALUE public key material.
Исправления
mormot.crypt.pkcs11
4be9e812+65-10
crypt: fixed TCryptCertPkcs11.Create() key import
Влияние
Token identities без CKO_CERTIFICATE или с restricted CKA_VALUE получают правильный public key вместо unusable fake X.509.
Рекомендуется обновиться
Проверьте discovery RSA, P-256/P-384/P-521 и Ed25519 public-key objects на каждом token.
Публичный API
Pkcs11PublicKeyadded
Модули
8
Высокий
Ed25519 PKCS#8 private keys следуют вложенности RFC 8410
SeqToEccPrivKey разбирает PKCS#8 Ed25519 как id-Ed25519 и внешний privateKey OCTET STRING с внутренним RFC 8410 OCTET STRING, сохраняя RFC 5915 для EC.
Исправления
mormot.crypt.secure
80bc2689+34-36
crypt: fixed ckaEdDSA private key extraction
Влияние
Ed25519 private-key extraction возвращает реальные 32 bytes вместо ошибки/неверной ASN.1 формы, обеспечивая корректный PKCS#11 import.
Рекомендуется обновиться
Повторно импортируйте RFC 8410 Ed25519 PKCS#8 key и проверьте token-backed signature.
Модули
9
Высокий
PKCS#11 object enumeration всегда finalizes поиск
TPkcs11.GetObjects оборачивает FindObjects в try/finally, всегда вызывает C_FindObjectsFinal и проверяет final status после cleanup.
Исправления
mormot.lib.pkcs11
4f5f3b32+35-29
lib: fixed TPkcs11.GetObjects error handling
Влияние
Enumeration failure больше не оставляет active find operation, ломающую последующие token calls.
Рекомендуется обновиться
Проверьте attribute-read failure и следующий object search в той же session.
Модули
10
Высокий
Временные CNG certificates больше не разыменовывают отсутствующий owner
TCryptCertCng хранит явный TSynLogClass, допускает nil owner для PFX и определяет system-store status без его разыменования.
Исправления
mormot.crypt.win+1
3736871b+22-33
crypt: fixed GPF in TCryptCertCng
Влияние
TCryptCertCng.LoadPkcs12 больше не рискует GPF при создании или логировании временного сертификата.
Рекомендуется обновиться
Обновитесь до внедрения новой PFX factory.
11
Высокий
PKCS#11 UnLoad finalizes только инициализированные libraries
TPkcs11.Load отслеживает fInitialized после C_Initialize, очищает каждый failure stage, а UnLoad вызывает C_Finalize только после успешной initialization.
Исправления
mormot.lib.pkcs11
dfbd2889+28-20
lib: fixed TPkcs11.Load/UnLoad error handling
Влияние
Неудачный library load больше не finalizes неинициализированный API и не оставляет partial handle.
Рекомендуется обновиться
Проверьте missing symbols, C_Initialize failure, unsupported Cryptoki version и normal unload.
Модули
12
Высокий
PKCS#11 отвергает signature algorithms, несовместимые с реальным key
TCryptCertPkcs11.SetAsymAlgo проверяет X.509 SubjectPublicKeyAlgorithm: обычный RSA допускает RS/PSS, RSA-PSS остаётся PSS-only, ECC требует совместимую curve.
Исправления
mormot.crypt.pkcs11
978ba78c+30-7
crypt: fixed TCryptCertPkcs11.SetAsymAlgo logic
Влияние
Algorithm switch больше не разрешает неверный signing mechanism только из-за совпадения enum mapping.
Рекомендуется обновиться
Проверьте все переходы SetAsymAlgo для RSA, RSA-PSS и EC token keys.
Публичный API
TCryptCertPkcs11.SetAsymAlgobehaviour-changed
Модули
13
Высокий
REST-аутентификация игнорирует чужие reverse-proxy cookies
TRestClientAuthentication.ClientGetSessionKey разбирает Set-Cookie только для HTTP-схем и ищет cookie Model.Root вместо первого proxy cookie.
Исправления
mormot.rest.client
477811c6+26-9
rest: only use the session cookie for HTTP-based authentication
Влияние
Signed-URI auth за Azure App Proxy больше не получает ложный session ID и не приводит к 403 на следующих запросах.
Рекомендуется обновиться
Перепроверьте login и первый signed request за proxy, добавляющим cookies.
Публичный API
TRestClientAuthentication.ClientGetSessionKeybehaviour-changed
Модули
14
Высокий
PKCS#11 signing передаёт data при size query и всегда закрывает session
TPkcs11.Sign передаёт Data/Len в первый C_Sign вместо nil/zero. SignDigest логирует исключения и закрывает engine в finally; CAA_PSS задаёт семейство PSS.
Исправления
mormot.crypt.pkcs11+3
b7c75631+17-12
crypt: fixed PKCS#11 signing
Влияние
Tokens, которым нужны реальные data для размера signature, работают; ошибка signing больше не оставляет открытую session.
Рекомендуется обновиться
Перепроверьте success и injected token errors, убедившись в закрытии sessions.
Публичный API
CAA_PSSadded
15
Высокий
Socket receive retries соблюдают заданный timeout
TCrtSocket.TrySockRecv сохраняет nrRetry до RecvPending/WaitFor, учитывает elapsed time и передаёт оставшийся TimeOut вместо бесконечного recv loop.
Исправления
mormot.net.sock
bb4110fa+14-3
net: fixed TCrtSocket.TrySockRecv endless recv() retry on nrRetry - now honors TimeOut
Влияние
Blocking/TLS reads с повторным retry больше не зависают сверх timeout caller.
Рекомендуется обновиться
Проверьте idle, partial и TLS-renegotiation reads на границе timeout.
Публичный API
TCrtSocket.TrySockRecvbehaviour-changed
Модули
16
Высокий
PKCS#11 import использует обычный user PIN
TCryptCertAlgoPkcs11.Import переименовывает SoPinCode в PinCode и открывает read/write CKU_USER session вместо Security Officer session.
Исправления
mormot.crypt.pkcs11
bb4dc3c1+9-8
fixed TCryptCertAlgoPkcs11.Import to use normal user PIN
Влияние
HSM, запрещающие создание objects под SO role, могут импортировать с обычными user credentials.
Рекомендуется обновиться
Передавайте в Import обычный user PIN и проверьте permissions; не используйте SO PIN.
Публичный API
TCryptCertAlgoPkcs11.Importbehaviour-changed
Модули
17
Высокий
GenerateFromCsr делегирует созданному сертификату вместо рекурсии
TCryptCertAlgo.GenerateFromCsr теперь вызывает result.GenerateFromCsr у экземпляра New вместо рекурсивного вызова factory; комментарии уточняют void factories и CNG.
Исправления
mormot.crypt.secure+2
1be7a731+8-7
crypt: several ICryptCert fixes and precisions
Влияние
Генерация сертификата из CSR через базовую factory больше не уходит в бесконечную рекурсию/stack overflow. Рабочие overrides не меняются.
Рекомендуется обновиться
Обновитесь, если backend вызывает TCryptCertAlgo.GenerateFromCsr через конкретную factory.
18
Высокий
PKCS#11 GetObject возвращает единственный matching record
TPkcs11.GetObject finalizes/очищает output, требует ровно один результат и присваивает record в Info до optional value.
Исправления
mormot.lib.pkcs11
15a2bdfd+7-5
lib: fixed TPkcs11.GetObject wrapper
Влияние
Import/lookup callers получают инициализированные object metadata вместо success со stale/empty Info.
Рекомендуется обновиться
Перепроверьте token import и прямые TPkcs11.GetObject calls.
Публичный API
TPkcs11.GetObjectbehaviour-changed
Модули
19
Высокий
IOCP AcceptEx sockets наследуют listener context перед shutdown
GetNextAccept устанавливает SO_UPDATE_ACCEPT_CONTEXT с listening socket до освобождения accept state и логирует warning при ошибке.
Исправления
mormot.net.sock.windows
0c84326d+11-0
net: set SO_UPDATE_ACCEPT_CONTEXT on IOCP AcceptEx sockets so that shutdown() sends a FIN
Влияние
Server-side IOCP close теперь успешно вызывает shutdown и отправляет FIN вместо WSAENOTCONN и зависшего клиента.
Рекомендуется обновиться
Перепроверьте graceful close и client EOF на Windows IOCP.
Модули
20
Высокий
PKCS#11 certificate import использует правильные flags и распознаёт P-521
AddSessionCertificate больше не навязывает posExtractable, всегда задаёт CKA_SUBJECT и обязательные values. Pkcs11KeyAlgorithm распознаёт 528-bit coordinates secp521r1 как xkaEcc512.
Исправления
mormot.crypt.pkcs11+1
7a3e2370+5-6
crypt: fixed CKO_CERTIFICATE import
Влияние
Tokens получают валидный CKO_CERTIFICATE template, P-521 public keys правильно классифицируются.
Рекомендуется обновиться
Повторно импортируйте certificate на каждом HSM и добавьте P-521 discovery/signing test.
21
Высокий
Объявления OpenSSL C long используют платформенные Pascal-типы
Десятки declarations и wrapper returns в mormot.lib.openssl11 переведены с integer/cardinal на clong или PtrInt для C long, lengths, versions, modes и callbacks.
Компилятор и платформы
mormot.lib.openssl11
c60c6b66+93-93
lib: fixed OpenSSL API clong usage
Влияние
Устранены ABI mismatch на 64-bit POSIX. Низкоуровневым вызовам, сохраняющим результаты в 32-bit, может понадобиться явное преобразование.
Рекомендуется обновиться
Пересоберите OpenSSL consumers на 64-bit POSIX и проверьте ошибки типов изменённых wrapper results.
Публичный API
OpenSSL C API declarationssignature-changed
Модули
22
Высокий
OpenSSL option masks используют правильную ширину 1.1 и 3.x
SSL_CTX_set_options/clear_options публикуют QWord mask и выбирают 32-bit signature OpenSSL 1.1 или 64-bit OpenSSL 3; добавлен culong.
Компилятор и платформы
mormot.lib.openssl11
bee62163+16-15
lib: fixed SSL_CTX_set_options/SSL_CTX_clear_options for OpenSSL
Влияние
Option bits OpenSSL 3 больше не обрезаются, а OpenSSL 1.1 сохраняет свой ABI.
Рекомендуется обновиться
Перепроверьте TLS context options на OpenSSL 1.1 и 3.x.
Публичный API
SSL_CTX_set_optionssignature-changedSSL_CTX_clear_optionssignature-changed
Модули
23
Высокий
Windows C long остаётся 32-bit на Win64
Windows alias clong изменён с PtrInt на integer, поля timeval используют clong, что исправляет LLP64 ABI OpenSSL на Win64.
Компилятор и платформы
mormot.lib.openssl11
e7edab5c+6-6
lib: long is 32-bit on Windows even on Win64
Влияние
Вызовы OpenSSL на Win64 больше не передают восемь байт там, где C ABI ожидает четыре.
Рекомендуется обновиться
Пересоберите и протестируйте certificate/TLS paths OpenSSL на Win64.
Модули
24
Высокий
Delphi Darwin больше не линкует FPC-only C symbol
External alias mach_absolute_time с именем GetTickCount64 теперь объявляется только для FPC/Darwin; Delphi его не использует, но пытался разрешить library c.
Компилятор и платформы
mormot.core.base
96914740+2-0
core: fixed Delphi Darwin linking
Влияние
Delphi iOS и Simulator больше не падают с «ld: file not found: c»; поведение FPC Darwin не меняется.
Рекомендуется обновиться
Пересоберите Delphi iOS device и simulator targets.
Модули
25
Средний
Классы Windows CryptoAPI AES перенесены в отдельный unit
TAesAbstractApi, TAesEcbApi, TAesCbcApi, TAesCfbApi и TAesOfbApi перенесены из mormot.crypt.core в новый unit mormot.crypt.win, добавленный в Lazarus package.
Несовместимые изменения
mormot.crypt.core+1
c2a321d8+315-238
crypt: new mormot.crypt.win.pas unit
Влияние
Проекты, использующие эти публичные типы без mormot.crypt.win, перестанут компилироваться; поведение AES не меняется. Вне Windows unit ничего не делает.
Требуется миграция
Найдите пять классов TAes*Api и добавьте mormot.crypt.win в соответствующие uses.
Публичный API
mormot.crypt.winadded — Новый unit теперь содержит публичные CryptoAPI AES-классы.
26
Средний
X.509 lookup принимает human-formatted thumbprints
TX509.FingerPrintCompare стал case-insensitive, InternalFind нормализует ccmSha1/ccmSha256 с пробелами или двоеточиями из Windows clipboard.
Исправления
mormot.crypt.x509+5
8f741a59+19-11
crypt: normalize X509 ccmSha1/ccmSha256 finding
Влияние
Certificate search принимает обычные административные формы thumbprint вместо тихого пропуска.
Публичный API
TX509.FingerPrintComparebehaviour-changed
27
Средний
Нормализация thumbprint охватывает все certificate backends
TCryptCert.InternalFind, Compare и TX509.FingerPrintCompare используют HumanHexCompare для SHA-1/SHA-256, централизуя separators и case.
Исправления
mormot.crypt.secure+1
fd0b9854+7-14
crypt: global X.509 thumbprint normalization
Влияние
Human-formatted digest matching одинаков для X.509, CNG и PKCS#11.
28
Средний
PKCS#11 private keys проверяют algorithm и digest до использования
TCryptPrivateKeyPkcs11 инициализирует fKeyAlgo из X.509, отвергает несовместимый algorithm/digest и определяет RSA modulus по key algorithm.
Исправления
mormot.crypt.pkcs11+1
eb075586+14-6
crypt: some TCryptPrivateKeyPkcs11 fixes
Влияние
Неверные комбинации завершаются до открытия token session; RSA-PSS keys остаются пригодны для envelope Open.
29
Средний
PKCS#11 private-key attributes соответствуют каждому X.509 algorithm
CryptCertToPkcs11PrivKeyAttributes уточняет RSA/ECC attributes и key-usage flags при import ICryptCert в token.
Исправления
mormot.crypt.pkcs11
b47c9353+9-6
crypt: fixed X.509 attributes to PKCS#11 conversion
Влияние
Imported token keys получают attributes, согласованные с certificate algorithm, улучшая HSM acceptance и lookup.
Рекомендуется обновиться
Повторно импортируйте тестовые RSA/EC identities и проверьте token attributes.
Модули
30
Средний
Неверная длина PKCS#11 signature возвращает false
TPkcs11.Verify обрабатывает CKR_SIGNATURE_LEN_RANGE как CKR_SIGNATURE_INVALID и возвращает false; другие token errors по-прежнему raise EPkcs11.
Исправления
mormot.lib.pkcs11
4788f9a7+7-5
lib: fixed TPkcs11.Verify
Влияние
Signatures неверной длины становятся обычным verification failure, а не HSM exception.
Публичный API
TPkcs11.Verifybehaviour-changed
Модули
31
Средний
OpenSSL validity сохраняет отрицательный start offset
X509.SetValidity больше не превращает отрицательный ValidDays в ноль: поддерживаемые X509_gmtime_adj принимают такой offset.
Исправления
mormot.lib.openssl11
bae3c61c+3-4
lib: adjust X509.SetValidity() to the current OpenSSL state
Влияние
OpenSSL certificates снова могут начинаться до текущего времени, сохраняя допуск clock skew.
Стоит взглянуть
Перепроверьте notBefore, если ValidDays отрицателен.
Публичный API
X509.SetValiditybehaviour-changed
Модули
32
Средний
REST cookie lookup повторяет замену slash на underscore
ClientGetSessionKey нормализует Model.Root через StringReplaceChars('/', '_') перед сравнением cookie, как TRestUriContext.SetOutCookie.
Исправления
mormot.rest.client
5f3c8069+3-2
rest: match the session cookie name as SetOutCookie() computes it
Влияние
HTTP auth работает для root вроде api/v1, где реальный cookie называется api_v1.
Рекомендуется обновиться
Перепроверьте HTTP auth, если Model.Root содержит slash.
Модули
33
Средний
REST HTTP clients применяют все три timeout
TRestHttpClientSocket вызывает fSocket.SetTimeouts с connect/send/receive сразу после создания THttpClientSocket.
Исправления
mormot.rest.http.client
9013722a+3-2
rest: fixed #624 in TRestHttpClientSocket
Влияние
Настроенные REST send/receive timeouts больше не заменяются connect timeout underlying socket.
Рекомендуется обновиться
Перепроверьте REST calls с разными connect/send/receive limits.
Модули
34
Средний
Windows certificate stores предоставляют CNG-backed identities
mormot.crypt.win добавляет TWinCertStoreLocations, ICryptCertCng, TCryptCertAlgoCng и TCryptCertCng для перечисления store, поиска сертификатов и подписи через CNG KSP.
Новые возможности
mormot.core.os.security+2
51d635d7+653-5
crypt: High-Level Windows CNG Certificate Store Integration
Влияние
Windows-backend может использовать system-store, smart-card и hardware-KSP identities без экспорта private key. Другие платформы не затронуты.
Стоит взглянуть
Рассмотрите TCryptCertAlgoCng.Cert, Find или FindOne там, где Windows services загружают экспортируемые PFX.
Публичный API
TCryptCertAlgoCngaddedICryptCertCngaddedTWinCertStoreLocationsadded
35
Средний
Загрузка временного PFX стала class factory CNG certificate
LoadPkcs12 перенесён из TCryptCertAlgoCng в class function TCryptCertCng.LoadPkcs12, принимает optional log class и создаёт identity без catalog owner.
Новые возможности
mormot.crypt.win
274091d4+81-76
crypt: proper TCryptCertCng.LoadPkcs12 factory
Влияние
PFX loading больше не требует catalog. Код, использовавший промежуточный algorithm method, должен вызвать class factory.
Стоит взглянуть
Для временных identities используйте TCryptCertCng.LoadPkcs12(Pfx, Password, LogClass).
Публичный API
TCryptCertCng.LoadPkcs12added
Модули
36
Средний
Открытие RSA-envelope может делегировать private operation
mormot.crypt.rsa добавляет TRsaPkcs1Decrypt и RsaOpen для проверки envelope, делегирования PKCS#1 v1.5 decrypt и AES; TRsa.Open переиспользует функцию.
Новые возможности
mormot.crypt.rsa+1
634a72ff+77-56
crypt: introducing RsaOpen() reusable wrapper
Влияние
CNG и PKCS#11 могут открывать формат TRsa.Seal без экспорта RSA key.
Стоит взглянуть
Используйте RsaOpen только с callback, выполняющим RSAES-PKCS1-v1_5 unpadding и возвращающим ephemeral key.
Публичный API
RsaOpenaddedTRsaPkcs1Decryptadded
37
Средний
CNG загружает временную identity из PKCS#12
Первый TCryptCertAlgoCng.LoadPkcs12 импортирует PFX с PKCS12_NO_PERSIST_KEY, находит доступный CNG key и создаёт cached/silent ICryptCertCng.
Новые возможности
mormot.crypt.win+1
7741fdc4+88-41
crypt: new TCryptCertAlgoCng.LoadPkcs12() method
Влияние
Windows может использовать PFX identity без сохранения private key. Поздний commit переносит финальную factory в TCryptCertCng.LoadPkcs12.
38
Средний
CNG private keys открывают RSA-сообщения framework
TCryptPrivateKeyCng.Open декодирует AES cipher, определяет RSA modulus и использует RsaOpen с TNCrypt.KeyDecryptPkcs1; key acquisition/logging общие с signing.
Новые возможности
mormot.crypt.win+1
12e8ca5a+84-25
crypt: implemented TCryptPrivateKeyCng.Open()
Влияние
ICryptCertCng.Open расшифровывает TRsa.Seal-compatible messages через неэкспортируемые store/hardware keys.
Стоит взглянуть
Проверьте Open со всеми AES cipher names и CNG providers приложения.
Публичный API
TCryptPrivateKeyCng.Openbehaviour-changed
39
Средний
HTTP sockets разделяют connect, send и receive timeouts
THttpClientSocket добавляет три timeout fields и public SetTimeouts. OpenBind временно применяет connect budget, затем устанавливает send/receive и восстанавливает high-level wait.
Новые возможности
mormot.net.client
157ccf6f+69-30
net: introduce 3 explicit timeouts for THttpClientSocket
Влияние
Backend может ограничить connect отдельно от write/read budgets. Старый constructor по-прежнему задаёт одно значение всем трём.
Стоит взглянуть
Задайте отдельные budgets при разной connect/response latency и проверьте proxy CONNECT/retries.
Публичный API
THttpClientSocket.SetTimeoutsadded
Модули
40
Средний
PKCS#11 private keys открывают RSA-envelope
TPkcs11.Decrypt оборачивает C_DecryptInit/C_Decrypt, а TCryptPrivateKeyPkcs11.Open использует CKM_RSA_PKCS и RsaOpen через private key token.
Новые возможности
mormot.crypt.pkcs11+1
64321f11+87-8
crypt: implement TCryptPrivateKeyPkcs11.Open() method
Влияние
RSA keys аппаратного token могут расшифровывать ICryptPrivateKey.Open без экспорта private material.
Стоит взглянуть
Убедитесь, что каждый token разрешает CKM_RSA_PKCS decryption для выбранного key.
Публичный API
TPkcs11.DecryptaddedTCryptPrivateKeyPkcs11.Openbehaviour-changed
41
Средний
Windows CNG расшифровывает один RSA PKCS#1 block
TNCrypt.KeyDecryptPkcs1 оборачивает NCryptDecrypt с PKCS#1 padding, optional silent mode, одной hardware operation, bounded output и cleanup при ошибке.
Новые возможности
mormot.lib.sspi
894714e2+50-3
lib: new TNCrypt.KeyDecryptPkcs1() wrapper method
Влияние
CNG-backed RSA keys, включая hardware KSP, получают primitive для envelope decryption без size query.
Публичный API
TNCrypt.KeyDecryptPkcs1added
Модули
42
Средний
Windows wrapper импортирует PFX и очищает пароль
mormot.lib.sspi добавляет WinCertStoreImportPfx: преобразует SpiUtf8 в UTF-16, вызывает PFXImportCertStore, сохраняет ошибки и очищает временный пароль.
Новые возможности
mormot.lib.sspi
33e5e920+46-3
lib: new WinCertStoreImportPfx() wrapper function
Влияние
Windows PFX consumers получают единый import path с error code и очисткой пароля. Прямой API остаётся доступен.
Публичный API
WinCertStoreImportPfxadded
Модули
43
Средний
PKCS#11 подписывает ES384, ES512 и ES256K в DER
SignDigest преобразует raw r||s через SetSignatureSecurityRaw для ES256/384/512/256K и заполняет PSS mechanism.
Новые возможности
mormot.crypt.pkcs11
9c9a402a+8-7
crypt: ES384 ES512 ES256K support for PKCS#11
Влияние
Tokens с большими EC или secp256k1 keys возвращают DER signature, ожидаемую ICryptPrivateKey.
Стоит взглянуть
Добавьте token-backed signature tests для каждого ES algorithm.
Модули
44
Средний
Второй проход OpenSSL ABI исправляет ширину control и mode
Windows compatibility types перенесены перед OpenSSL declarations, а session-cache, mode, extra-chain и callback wrappers последовательно используют clong; timeval также следует clong.
Компилятор и платформы
mormot.lib.openssl11
cdec1b9d+33-33
lib: another pass to fix clong OpenSSL usage
Влияние
OpenSSL control wrappers теперь соответствуют C ABI на Delphi/FPC; высокоуровневый TLS-код совместим.
Рекомендуется обновиться
Берите commit вместе с соседними исправлениями OpenSSL declarations.
Публичный API
SSL_CTX_set_modesignature-changedSSL_get_modesignature-changed
Модули
45
Средний
Коды OpenSSL error queue получили платформенный тип
TErrQueueCode — alias culong; ERR_get_error, ERR_error_string_n и OpenSSL_error используют его, EOpenSsl.LastError стал PtrInt.
Компилятор и платформы
mormot.lib.openssl11
6b5cbea6+33-26
lib: introducing TErrQueueCode specific type
Влияние
64-bit POSIX error-queue values больше не обрезаются до 32 bit; signatures низкоуровневых helpers изменены.
Стоит взглянуть
Пересоберите код, вызывающий OpenSSL_error или сохраняющий EOpenSsl.LastError в integer.
Публичный API
TErrQueueCodeaddedEOpenSsl.LastErrorsignature-changed
Модули
46
Средний
Оставшиеся OpenSSL unsigned-long declarations исправлены
mormot.lib.openssl11 исправляет ещё несколько culong signatures и отделяет SSL integer errors от TErrQueueCode, сохраняя cardinal для 32-bit flags.
Компилятор и платформы
mormot.lib.openssl11
48dd6495+11-11
lib: minor OpenSSL API fixes
Влияние
OpenSSL error reporting и option wrappers соответствуют реальным C domains на всех платформах.
Рекомендуется обновиться
Берите этот финальный declaration pass вместе с предыдущими OpenSSL ABI commits.
Модули
47
Средний
Создание CNG certificate уточняет ownership и store metadata
Создание TCryptCertCng переработано вокруг duplicated context, provider record и key options; GetSystemStore сообщает происхождение из system store.
Внутреннее устройство
mormot.crypt.win
6b71ac9f+49-41
crypt: refined TCryptCertCng
Влияние
Новые CNG identities имеют более ясные ownership и metadata; это уточнение API, появившегося в этом выпуске.
Модули
48
Средний
CNG различает store identities и временные PFX identities
TCryptCertCng разделяет инициализацию context и store metadata; GetSystemStore возвращает boolean плюс store/location outputs.
Внутреннее устройство
mormot.crypt.win
5c0c3dec+34-21
crypt: refined ICryptCertCng usage
Влияние
Вызывающий код надёжно отличает CNG certificate из Windows store от in-memory PFX.
Публичный API
ICryptCertCng.GetSystemStoresignature-changed
Модули
49
Низкий
Метаданные Windows certificate provider получили отдельный wrapper
mormot.lib.sspi добавляет TWinCertKeyProviderInfo и WinCertCtxtKeyProvider для CERT_KEY_PROV_INFO_PROP_ID; CNG использует узкий record вместо полного TWinCertInfo.
Новые возможности
mormot.lib.sspi+1
fe37aa9f+77-21
lib: new TWinCertKeyProviderInfo CNG API wrapper
Влияние
Windows-код получает более дешёвый provider query; TWinCertInfo остаётся доступен, изменений приложения не требуется.
Публичный API
TWinCertKeyProviderInfoaddedWinCertCtxtKeyProvideradded
50
Низкий
RSA envelope header получил единое определение
TRsaSealHeader и PRsaSealHeader перенесены в mormot.core.os.security, чтобы Pascal RSA и OpenSSL использовали один packed layout; callback RsaOpen стал const.
Внутреннее устройство
mormot.core.os.security+3
e0f6cbb5+21-36
core: moved TRsaSealHeader to mormot.core.os.security
Влияние
Envelope compatibility централизована без изменения wire format. Публичный header находится в mormot.core.os.security.
Публичный API
TRsaSealHeaderadded
51
Низкий
Опции получения CNG key заменили отдельные boolean
TWinCertCngKeyOption и TWinCertCngKeyOptions задают silent, сравнение ключа и cache; TWinCertCngKey.Init и TCryptCertCng используют set.
Внутреннее устройство
mormot.lib.sspi+1
08e67973+26-13
lib: introducing TWinCertCngKeyOptions
Влияние
Новый CNG-код явно комбинирует режимы получения ключа. API появился в этом же выпуске, существующих вызовов нет.
Публичный API
TWinCertCngKeyOptionsadded
52
Низкий
Socket retry timing выражен единым deadline
TrySockRecv вычисляет deadline/remaining, разделяет nrOk и RecvPending fast paths и держит AcceptEx context setup под lock; удалён redundant PKCS#11 initializer.
Внутреннее устройство
mormot.net.sock+2
19ddf82e+15-19
net: minor simplification/cleanup of #622 PR
Влияние
Предыдущие timeout/IOCP fixes сохраняют поведение с ясными invariants и atomic accept finalization.
53
Низкий
SChannel PFX loading использует безопасный Windows importer
TSChannelServerContext.LoadCertificate заменяет inline PFXImportCertStore на WinCertStoreImportPfx, очищает UTF-8 пароль и проверяет ошибку.
Внутреннее устройство
mormot.net.sock.windows+2
18dca4de+8-22
net: simplified TSChannelServerContext.LoadCertificate
Влияние
Публичное поведение загрузки SChannel certificate не меняется; очистка пароля и errors централизованы.
54
Низкий
Настройка Windows CryptoAPI AES provider упрощена
mormot.crypt.win упрощает проверку состояния PROV_RSA_AES и trailer XOR helper без изменения public AES classes.
Внутреннее устройство
mormot.crypt.win
7f601fcc+13-16
crypt: minor PROV_RSA_AES support refactoring on Windows
Влияние
Нет влияния на application code; доступны те же CryptoAPI AES modes и errors.
Модули
55
Низкий
SChannel Receive получил явный fatal default
TLS Channel Receive инициализирует result как nrFatalError и упрощает early exits, устраняя warning Delphi 7.
Внутреннее устройство
mormot.net.sock.windows
8df1fca0+6-10
net: refactored TLS Channel Receive() method
Влияние
Поведение на этих error paths остаётся fatal; Delphi 7 больше не предупреждает о неинициализированном result.
Модули
56
Низкий
Условия ZIP устраняют ложные подсказки FPC
mormot.core.zip переставляет условные объявления FPC-only символов, убирая ложные compiler hints без изменения логики.
Обслуживание
mormot.core.zip
507833b7+9-9
core: circumvent some weird FPC compiler hints
Влияние
Сборки FPC стали чище; поведение backend и public API не меняются.