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

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 не заявляется.

Сборка2.4.17208 → 2.4.17268
Коммиты60
Строки+2851 -1493
Чтение8 мин

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.

Публичный API

  • TJsonWriter.AddEscapeBufferbehaviour-changed

Модули

Stefan Diestelmann · 18:17 UTC · открыть коммит на GitHub →

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-changed
  • TCryptCertAlgoPkcs11.Lockadded
  • TCryptCertAlgoPkcs11.UnLockadded

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

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.

Публичный API

  • TCryptCertAlgo.Newbehaviour-changed
  • TCryptCertAlgo.FromHandlebehaviour-changed

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

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.

Arnaud Bouchez · 16:05 UTC · PR #11 · открыть коммит на GitHub →

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.

Публичный API

  • TCryptCertAlgoPkcs11.Importbehaviour-changed

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

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.

Публичный API

  • Pkcs11SetPssParamsadded

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

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.

Публичный API

  • Pkcs11PublicKeyadded

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

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.

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

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.

Модули

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

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 при создании или логировании временного сертификата.

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

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.

Модули

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

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.

Публичный API

  • TCryptCertPkcs11.SetAsymAlgobehaviour-changed

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

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 на следующих запросах.

Публичный API

  • TRestClientAuthentication.ClientGetSessionKeybehaviour-changed

Модули

TobiasKnoke · 10:19 UTC · открыть коммит на GitHub →

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.

Публичный API

  • CAA_PSSadded

Arnaud Bouchez · 16:39 UTC · PR #11 · открыть коммит на GitHub →

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.

Публичный API

  • TCrtSocket.TrySockRecvbehaviour-changed

Модули

je · 10:50 UTC · открыть коммит на GitHub →

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.

Публичный API

  • TCryptCertAlgoPkcs11.Importbehaviour-changed

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

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 не меняются.

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

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.

Публичный API

  • TPkcs11.GetObjectbehaviour-changed

Модули

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

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 и зависшего клиента.

je · 10:50 UTC · открыть коммит на GitHub →

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 правильно классифицируются.

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

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, может понадобиться явное преобразование.

Публичный API

  • OpenSSL C API declarationssignature-changed

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

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.

Публичный API

  • SSL_CTX_set_optionssignature-changed
  • SSL_CTX_clear_optionssignature-changed

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

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 ожидает четыре.

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

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 не меняется.

Модули

Stefan Diestelmann · 10:27 UTC · открыть коммит на GitHub →

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-классы.

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

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

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

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.

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

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.

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

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.

Arnaud Bouchez · 16:27 UTC · PR #11 · открыть коммит на GitHub →

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

Модули

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

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

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

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.

Модули

Stefan Diestelmann · 10:23 UTC · открыть коммит на GitHub →

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.

Arnaud Bouchez · 19:10 UTC · PR #624 · открыть коммит на GitHub →

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

  • TCryptCertAlgoCngadded
  • ICryptCertCngadded
  • TWinCertStoreLocationsadded

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

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

Модули

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

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

  • RsaOpenadded
  • TRsaPkcs1Decryptadded

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

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.

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

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

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

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

Модули

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

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.Decryptadded
  • TCryptPrivateKeyPkcs11.Openbehaviour-changed

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

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

Модули

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

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

Модули

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

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.

Arnaud Bouchez · 15:18 UTC · PR #11 · открыть коммит на GitHub →

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-код совместим.

Публичный API

  • SSL_CTX_set_modesignature-changed
  • SSL_get_modesignature-changed

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

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

  • TErrQueueCodeadded
  • EOpenSsl.LastErrorsignature-changed

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

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 на всех платформах.

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

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, появившегося в этом выпуске.

Модули

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

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

Модули

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

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

  • TWinCertKeyProviderInfoadded
  • WinCertCtxtKeyProvideradded

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

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

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

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

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

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.

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

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 централизованы.

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

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.

Модули

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

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.

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

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 не меняются.

Модули

Arnaud Bouchez · 08:32 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