Agir maintenantpeut affecter un système en productionLes 56 commits non-merge de 2.4.17209 à 2.4.17268 ont été examinés : 2 694 ajouts et 1 378 suppressions hors version bookkeeping. Quatre merges sont exclus. Aucun superseded_by ; l’ordre vient des follow-ups inspectés et ne crée pas de plage à éviter.
Windows CNG et PKCS#11 progressent tandis que des défauts JSON et socket sont corrigés
Cette édition largement consacrée à la cryptographie introduit un backend de certificats Windows CNG, complète le déchiffrement d’enveloppes RSA via CNG et PKCS#11 et répare une longue séquence d’import/signature PKCS#11. Elle corrige aussi une lecture JSON hors limites dans les logs, borne une boucle socket, fiabilise le cookie de session derrière proxy et sépare les timeouts HTTP de connexion, d’envoi et de réception.
En bref
- Visez la build 2.4.17268 au commit 80bc2689df777dadbe1f8af745096eeb13205ef7.
- Ajoutez mormot.crypt.win aux uses si le code référence TAesAbstractApi ou ses descendants CryptoAPI AES, déplacés depuis mormot.crypt.core.
- Windows reçoit TCryptCertAlgoCng, ICryptCertCng et TCryptCertCng.LoadPkcs12 pour les stores, cartes/KSP et identités PFX transitoires.
- PKCS#11 reçoit le déchiffrement RSA envelope et davantage de signatures, mais TPkcs11 n’est plus thread-safe ; protégez le catalogue avec TCryptCertAlgoPkcs11.Lock/UnLock.
- Mettez à niveau pour la lecture hors limites de TJsonWriter.AddEscapeBuffer, la boucle infinie de TCrtSocket.TrySockRecv, les GPF CNG/PKCS#11 et les corrections ABI OpenSSL.
- THttpClientSocket.SetTimeouts sépare les budgets connect, send et receive ; TRestHttpClientSocket applique les trois.
Conseil de mise à jour
Visez la build 2.4.17268. Mettez à niveau si la production logue du texte non fiable ou binaire, utilise des sockets blocking/TLS, IOCP Windows, l’auth REST derrière proxy, OpenSSL, Windows CNG ou PKCS#11. Ajoutez mormot.crypt.win aux uses concernés. Auditez le partage direct de TPkcs11 : il n’est plus verrouillé en interne, donc utilisez TCryptCertAlgoPkcs11.Lock/UnLock. Testez import de token, signatures PSS/ECC, shutdown pendant la découverte, RSA Open et les trois timeouts HTTP. Aucun superseded_by n’étaye une plage à éviter.
56 sur 56 entrées · 60 commits upstream
1
Critique
L’échappement JSON cesse de lire après le buffer fourni
TJsonWriter.AddEscapeBuffer corrige la comparaison MaxLen inversée : Len est tronqué s’il dépasse MaxLen au lieu d’être agrandi.
Sécurité
mormot.core.json
c955c837+2-2
core: TJsonWriter.AddEscapeBuffer() did read beyond the input buffer
Impact
Logger du UTF-8 invalide ou du binaire ne copie plus des octets heap étrangers et ne provoque plus d’AV sous le lock de log.
Mise à jour recommandée
Mettez à niveau immédiatement si des valeurs non fiables atteignent TSynLog.LogText ou AddEscapeBuffer ; testez TextTruncateAtLength.
API publique
TJsonWriter.AddEscapeBufferbehaviour-changed
Unités
2
Élevée
Le verrouillage PKCS#11 passe du moteur bas niveau au catalogue
TPkcs11 passe de TObjectOSLock à TSynPersistent et retire ses locks internes. TCryptCertAlgoPkcs11 gagne un TOSLock réentrant et les méthodes publiques Lock/UnLock.
Ruptures
mormot.crypt.pkcs11+1
fdbd6e9f+197-220
crypt: simplified PKCS#11 threading model
Impact
Les instances TPkcs11 directes ne sont plus thread-safe. Les appels concurrents qui dépendaient de Engine.Safe ou de la sérialisation implicite peuvent entrer en race.
Migration nécessaire
Recherchez les TPkcs11 partagés et Engine.Safe. Sérialisez via TCryptCertAlgoPkcs11.Lock/UnLock ou utilisez un moteur par thread.
API publique
TPkcs11behaviour-changedTCryptCertAlgoPkcs11.LockaddedTCryptCertAlgoPkcs11.UnLockadded
3
Élevée
Les factories non prises en charge renvoient nil sans le déréférencer
TCryptCertAlgo.New et FromHandle deviennent des defaults virtuels renvoyant nil ; Load, Generate, CreateSelfSignedCsr et GenerateFromCsr vérifient l’interface avant appel. CNG et PKCS#11 retirent leurs overrides redondants.
Correctifs
mormot.crypt.secure+2
11f136ba+31-61
crypt: fixed potential GPF in TCryptCertAlgo misuse
Impact
Les méthodes génériques sur les algorithmes de catalogue ne risquent plus un access violation. Les implémentations prises en charge restent inchangées.
Mise à jour recommandée
Mettez à niveau si le code appelle Load, Generate ou GenerateFromCsr via CNG ou PKCS#11.
API publique
TCryptCertAlgo.Newbehaviour-changedTCryptCertAlgo.FromHandlebehaviour-changed
4
Élevée
Le shutdown PKCS#11 attend la découverte en arrière-plan
TCryptCertAlgoPkcs11 conserve son TLoggedWorkThread, l’attend avant de libérer le moteur et place la notification de fin dans finally sous lock.
Correctifs
mormot.crypt.pkcs11
d74a0234+48-42
crypt: fixed PKCS#11 background loading
Impact
Détruire le catalogue pendant une initialisation lente ne laisse plus le loader accéder à de la mémoire libérée et provoquer un GPF.
Mise à jour recommandée
Stressez le shutdown pendant le chargement et l’énumération PKCS#11.
Unités
5
Élevée
L’import PKCS#11 renvoie le certificat stocké et annule les échecs
Import valide l’ID hexa, crée certificat et clé, recharge le certificat réel, l’ajoute au catalogue et détruit les objets partiels en ordre inverse si nécessaire.
Correctifs
mormot.crypt.pkcs11
f4ba19f2+55-29
crypt: fixed TCryptCertAlgoPkcs11.Import() method
Impact
Les imports réussis sont immédiatement utilisables et les échecs ne laissent plus d’objets orphelins.
Mise à jour recommandée
Retestez succès, ID invalide, échec de clé et rollback sur chaque HSM.
API publique
TCryptCertAlgoPkcs11.Importbehaviour-changed
Unités
6
Élevée
La signature RSA-PSS PKCS#11 fournit les paramètres requis
Pkcs11SetPssParams construit CK_RSA_PKCS_PSS_PARAMS avec hash, MGF1 et salt length ; SignDigest envoie le digest brut pour PSS au lieu d’un DigestInfo PKCS#1.
Correctifs
mormot.crypt.pkcs11+1
639e45ff+75-5
crypt: fixed PSS support in TCryptPrivateKeyPkcs11.SignDigest
Impact
Les tokens peuvent produire des signatures PS256/384/512 valides au lieu de rejeter ou mal encoder l’opération.
Mise à jour recommandée
Vérifiez les signatures PSS avec un vérificateur indépendant pour chaque token.
API publique
Pkcs11SetPssParamsadded
7
Élevée
Les clés publiques PKCS#11 sont reconstruites depuis leurs attributs
Pkcs11PublicKey essaie CKA_PUBLIC_KEY_INFO puis reconstruit RSA, EC et Ed25519 depuis leurs attributs. TCryptCertPkcs11.Create ne traite plus CKA_VALUE comme clé publique.
Correctifs
mormot.crypt.pkcs11
4be9e812+65-10
crypt: fixed TCryptCertPkcs11.Create() key import
Impact
Les identités sans CKO_CERTIFICATE ou CKA_VALUE lisible exposent la bonne clé publique au lieu d’un faux X.509 inutilisable.
Mise à jour recommandée
Testez la découverte des objets RSA, P-256/P-384/P-521 et Ed25519 sur chaque token.
API publique
Pkcs11PublicKeyadded
Unités
8
Élevée
Les clés privées Ed25519 PKCS#8 suivent l’imbrication RFC 8410
SeqToEccPrivKey parse Ed25519 PKCS#8 comme id-Ed25519 suivi d’un OCTET STRING externe contenant l’OCTET STRING RFC 8410 interne, tout en gardant RFC 5915 pour EC.
Correctifs
mormot.crypt.secure
80bc2689+34-36
crypt: fixed ckaEdDSA private key extraction
Impact
L’extraction Ed25519 renvoie les 32 octets réels au lieu d’échouer ou de lire une mauvaise forme ASN.1, permettant l’import PKCS#11 correct.
Mise à jour recommandée
Réimportez une clé Ed25519 PKCS#8 RFC 8410 et vérifiez une signature token.
Unités
9
Élevée
L’énumération PKCS#11 finalise toujours sa recherche
TPkcs11.GetObjects enveloppe FindObjects dans try/finally, appelle toujours C_FindObjectsFinal et vérifie son statut après nettoyage.
Correctifs
mormot.lib.pkcs11
4f5f3b32+35-29
lib: fixed TPkcs11.GetObjects error handling
Impact
Un échec d’énumération ne laisse plus une opération find active qui casse les appels suivants.
Mise à jour recommandée
Testez un échec de lecture d’attribut suivi d’une autre recherche dans la même session.
Unités
10
Élevée
Les certificats CNG transitoires ne déréférencent plus un owner absent
TCryptCertCng stocke un TSynLogClass explicite, accepte un owner nil pour les PFX et déduit l’origine store de l’owner sans le déréférencer.
Correctifs
mormot.crypt.win+1
3736871b+22-33
crypt: fixed GPF in TCryptCertCng
Impact
TCryptCertCng.LoadPkcs12 ne risque plus un GPF lors de la construction ou du log.
Mise à jour recommandée
Mettez à niveau avant de déployer la nouvelle factory PFX.
11
Élevée
PKCS#11 UnLoad finalise seulement les bibliothèques initialisées
TPkcs11.Load suit fInitialized après C_Initialize, nettoie chaque échec et UnLoad n’appelle C_Finalize qu’après une vraie initialisation.
Correctifs
mormot.lib.pkcs11
dfbd2889+28-20
lib: fixed TPkcs11.Load/UnLoad error handling
Impact
Un chargement échoué ne finalise plus une API non initialisée et ne fuit plus un handle partiel.
Mise à jour recommandée
Testez symboles manquants, échec C_Initialize, version Cryptoki non prise en charge et unload normal.
Unités
12
Élevée
PKCS#11 rejette les algorithmes incompatibles avec la vraie clé
SetAsymAlgo vérifie SubjectPublicKeyAlgorithm : RSA libre accepte RS/PSS, RSA-PSS reste PSS-only et ECC doit rester compatible avec sa courbe.
Correctifs
mormot.crypt.pkcs11
978ba78c+30-7
crypt: fixed TCryptCertPkcs11.SetAsymAlgo logic
Impact
Un changement d’algorithme ne peut plus autoriser un mécanisme invalide sur la seule base d’un mapping d’enum.
Mise à jour recommandée
Testez chaque transition SetAsymAlgo pour les clés RSA, RSA-PSS et EC.
API publique
TCryptCertPkcs11.SetAsymAlgobehaviour-changed
Unités
13
Élevée
L’authentification REST ignore les cookies du reverse proxy
TRestClientAuthentication.ClientGetSessionKey ne lit Set-Cookie que pour les schémas HTTP et recherche le cookie Model.Root au lieu de prendre le premier cookie proxy.
Correctifs
mormot.rest.client
477811c6+26-9
rest: only use the session cookie for HTTP-based authentication
Impact
L’auth signed-URI derrière Azure App Proxy ne prend plus un faux session ID conduisant aux 403 suivants.
Mise à jour recommandée
Retestez le login et la première requête signée derrière tout proxy injectant des cookies.
API publique
TRestClientAuthentication.ClientGetSessionKeybehaviour-changed
Unités
14
Élevée
La signature PKCS#11 envoie les données au size query et ferme toujours
TPkcs11.Sign passe Data/Len au premier C_Sign au lieu de nil/zero. SignDigest trace les exceptions et ferme le moteur dans finally ; CAA_PSS centralise la famille PSS.
Correctifs
mormot.crypt.pkcs11+3
b7c75631+17-12
crypt: fixed PKCS#11 signing
Impact
Les tokens exigeant les vraies données pour calculer la taille fonctionnent, et un échec ne laisse plus de session ouverte.
Mise à jour recommandée
Retestez signature et erreurs injectées en vérifiant la fermeture des sessions.
API publique
CAA_PSSadded
15
Élevée
Les retries de réception respectent le timeout configuré
TCrtSocket.TrySockRecv conserve nrRetry jusqu’à RecvPending/WaitFor, mesure le temps écoulé et ne passe que le TimeOut restant au lieu de boucler indéfiniment sur recv.
Correctifs
mormot.net.sock
bb4110fa+14-3
net: fixed TCrtSocket.TrySockRecv endless recv() retry on nrRetry - now honors TimeOut
Impact
Les lectures blocking ou TLS qui renvoient retry ne peuvent plus dépasser indéfiniment le timeout appelant.
Mise à jour recommandée
Testez les lectures idle, partielles et de renégociation TLS à la limite du timeout.
API publique
TCrtSocket.TrySockRecvbehaviour-changed
Unités
16
Élevée
L’import PKCS#11 utilise le PIN utilisateur normal
Import renomme SoPinCode en PinCode et ouvre une session read/write CKU_USER plutôt qu’une session Security Officer.
Correctifs
mormot.crypt.pkcs11
bb4dc3c1+9-8
fixed TCryptCertAlgoPkcs11.Import to use normal user PIN
Impact
Les HSM qui refusent la création sous le rôle SO peuvent importer avec les credentials utilisateur normaux.
Mise à jour recommandée
Passez le PIN utilisateur normal à Import et retestez les permissions ; n’utilisez pas le PIN SO.
API publique
TCryptCertAlgoPkcs11.Importbehaviour-changed
Unités
17
Élevée
GenerateFromCsr délègue au certificat créé au lieu de récursiver
TCryptCertAlgo.GenerateFromCsr appelle maintenant result.GenerateFromCsr sur l’instance New au lieu de rappeler récursivement la factory. Les commentaires précisent aussi les factories vides et CNG.
Correctifs
mormot.crypt.secure+2
1be7a731+8-7
crypt: several ICryptCert fixes and precisions
Impact
La génération certificat depuis CSR via la factory de base ne récursive plus indéfiniment. Les overrides valides gardent leur comportement.
Mise à jour recommandée
Mettez à niveau si un backend appelle TCryptCertAlgo.GenerateFromCsr via une factory concrète.
18
Élevée
PKCS#11 GetObject renvoie l’unique record correspondant
TPkcs11.GetObject finalise puis vide la sortie, exige exactement un résultat et assigne ce record à Info avant la valeur optionnelle.
Correctifs
mormot.lib.pkcs11
15a2bdfd+7-5
lib: fixed TPkcs11.GetObject wrapper
Impact
Les appels d’import et lookup reçoivent des métadonnées initialisées au lieu d’un succès avec Info vide ou ancien.
Mise à jour recommandée
Retestez l’import token et les appels directs TPkcs11.GetObject.
API publique
TPkcs11.GetObjectbehaviour-changed
Unités
19
Élevée
Les sockets IOCP AcceptEx héritent du listener avant shutdown
GetNextAccept applique SO_UPDATE_ACCEPT_CONTEXT avec le socket d’écoute avant de libérer l’état accept et logue un warning en cas d’échec.
Correctifs
mormot.net.sock.windows
0c84326d+11-0
net: set SO_UPDATE_ACCEPT_CONTEXT on IOCP AcceptEx sockets so that shutdown() sends a FIN
Impact
Les fermetures IOCP serveur peuvent envoyer FIN au lieu d’échouer avec WSAENOTCONN et laisser le client attendre.
Mise à jour recommandée
Retestez les fermetures serveur et la détection EOF client sous Windows IOCP.
Unités
20
Élevée
L’import certificat PKCS#11 utilise les bons flags et reconnaît P-521
AddSessionCertificate ne force plus posExtractable, fournit toujours CKA_SUBJECT et les valeurs requises. Pkcs11KeyAlgorithm reconnaît les coordonnées 528-bit de secp521r1.
Correctifs
mormot.crypt.pkcs11+1
7a3e2370+5-6
crypt: fixed CKO_CERTIFICATE import
Impact
Les tokens reçoivent un template CKO_CERTIFICATE valide et les clés P-521 sont correctement classées.
Mise à jour recommandée
Réimportez un certificat sur chaque HSM et ajoutez un test P-521 si pris en charge.
21
Élevée
Les C long OpenSSL utilisent des types Pascal adaptés à la plateforme
Des dizaines de déclarations et retours mormot.lib.openssl11 passent de integer/cardinal à clong ou PtrInt pour les C long, tailles, versions, modes et callbacks.
Compilateur & plateforme
mormot.lib.openssl11
c60c6b66+93-93
lib: fixed OpenSSL API clong usage
Impact
Les incompatibilités ABI POSIX 64-bit disparaissent. Les appelants bas niveau stockant les résultats en 32-bit peuvent nécessiter une conversion.
Mise à jour recommandée
Recompilez les consommateurs OpenSSL POSIX 64-bit et examinez les erreurs sur les types de retour modifiés.
API publique
OpenSSL C API declarationssignature-changed
Unités
22
Élevée
Les masques d’options OpenSSL utilisent les tailles 1.1 et 3.x
SSL_CTX_set_options/clear_options publient des masques QWord et appellent les signatures 32-bit OpenSSL 1.1 ou 64-bit OpenSSL 3 ; culong représente unsigned C long.
Compilateur & plateforme
mormot.lib.openssl11
bee62163+16-15
lib: fixed SSL_CTX_set_options/SSL_CTX_clear_options for OpenSSL
Impact
Les bits d’options OpenSSL 3 ne sont plus tronqués et OpenSSL 1.1 conserve son ABI.
Mise à jour recommandée
Retestez les options TLS sous OpenSSL 1.1 et 3.x.
API publique
SSL_CTX_set_optionssignature-changedSSL_CTX_clear_optionssignature-changed
Unités
23
Élevée
Le C long Windows reste 32-bit sous Win64
L’alias Windows clong passe de PtrInt à integer et timeval utilise clong, conformément à l’ABI LLP64 OpenSSL sous Win64.
Compilateur & plateforme
mormot.lib.openssl11
e7edab5c+6-6
lib: long is 32-bit on Windows even on Win64
Impact
Les appels OpenSSL Win64 n’échangent plus huit octets là où l’ABI C en attend quatre.
Mise à jour recommandée
Recompilez et retestez les chemins certificat et TLS OpenSSL Win64.
Unités
24
Élevée
Delphi Darwin ne lie plus un symbole C réservé à FPC
L’alias externe mach_absolute_time nommé GetTickCount64 n’est déclaré que sous FPC/Darwin ; Delphi ne l’utilise pas mais tentait de résoudre la bibliothèque c.
Compilateur & plateforme
mormot.core.base
96914740+2-0
core: fixed Delphi Darwin linking
Impact
Les liens Delphi iOS et Simulator ne tombent plus sur « ld: file not found: c ». FPC Darwin reste inchangé.
Mise à jour recommandée
Recompilez les cibles Delphi iOS device et simulator.
Unités
25
Moyenne
Les classes AES CryptoAPI passent dans une unit dédiée
TAesAbstractApi, TAesEcbApi, TAesCbcApi, TAesCfbApi et TAesOfbApi quittent mormot.crypt.core pour la nouvelle unit mormot.crypt.win, ajoutée au package Lazarus.
Ruptures
mormot.crypt.core+1
c2a321d8+315-238
crypt: new mormot.crypt.win.pas unit
Impact
Les projets qui nomment ces types sans importer mormot.crypt.win ne compilent plus ; le comportement AES ne change pas. La unit reste neutre hors Windows.
Migration nécessaire
Recherchez ces cinq classes TAes*Api et ajoutez mormot.crypt.win aux uses concernés.
API publique
mormot.crypt.winadded — La nouvelle unit contient les classes AES CryptoAPI publiques.
26
Moyenne
La recherche X.509 accepte les thumbprints lisibles
TX509.FingerPrintCompare devient insensible à la casse et InternalFind normalise les valeurs ccmSha1/ccmSha256 séparées par espaces ou deux-points.
Correctifs
mormot.crypt.x509+5
8f741a59+19-11
crypt: normalize X509 ccmSha1/ccmSha256 finding
Impact
Les recherches acceptent les formats de thumbprint courants au lieu de rater silencieusement le certificat.
API publique
TX509.FingerPrintComparebehaviour-changed
27
Moyenne
La normalisation des thumbprints couvre tous les backends certificat
TCryptCert.InternalFind, Compare et TX509.FingerPrintCompare utilisent HumanHexCompare pour SHA-1/SHA-256, centralisant séparateurs et casse.
Correctifs
mormot.crypt.secure+1
fd0b9854+7-14
crypt: global X.509 thumbprint normalization
Impact
La comparaison de digest formaté est cohérente pour X.509, CNG et PKCS#11.
28
Moyenne
Les clés privées PKCS#11 valident algorithme et digest avant usage
TCryptPrivateKeyPkcs11 initialise fKeyAlgo depuis X.509, rejette les algorithmes/digests incompatibles et déduit RSA du type de clé.
Correctifs
mormot.crypt.pkcs11+1
eb075586+14-6
crypt: some TCryptPrivateKeyPkcs11 fixes
Impact
Les combinaisons invalides échouent avant d’ouvrir une session ; les clés RSA-PSS restent utilisables pour Open si approprié.
29
Moyenne
Les attributs de clé PKCS#11 suivent chaque algorithme X.509
CryptCertToPkcs11PrivKeyAttributes affine la conversion des attributs RSA/ECC et des flags d’usage lors de l’import token.
Correctifs
mormot.crypt.pkcs11
b47c9353+9-6
crypt: fixed X.509 attributes to PKCS#11 conversion
Impact
Les clés importées portent des attributs cohérents avec l’algorithme, améliorant l’acceptation HSM et les recherches.
Mise à jour recommandée
Réimportez des identités RSA et EC de test et inspectez les attributs.
Unités
30
Moyenne
Une mauvaise longueur de signature PKCS#11 renvoie false
TPkcs11.Verify traite CKR_SIGNATURE_LEN_RANGE comme CKR_SIGNATURE_INVALID et renvoie false ; les autres erreurs restent fatales.
Correctifs
mormot.lib.pkcs11
4788f9a7+7-5
lib: fixed TPkcs11.Verify
Impact
Les signatures de mauvaise longueur deviennent un échec de vérification ordinaire, pas une exception HSM.
API publique
TPkcs11.Verifybehaviour-changed
Unités
31
Moyenne
La validité OpenSSL conserve les offsets de début négatifs
X509.SetValidity ne force plus ValidDays négatif à zéro car les versions prises en charge de X509_gmtime_adj acceptent ces offsets.
Correctifs
mormot.lib.openssl11
bae3c61c+3-4
lib: adjust X509.SetValidity() to the current OpenSSL state
Impact
Les certificats OpenSSL peuvent à nouveau commencer avant l’heure courante et préserver la tolérance de clock skew.
À regarder
Retestez notBefore si ValidDays est négatif.
API publique
X509.SetValiditybehaviour-changed
Unités
32
Moyenne
La recherche de cookie REST reproduit le remplacement slash/underscore
ClientGetSessionKey normalise Model.Root via StringReplaceChars('/', '_') avant de comparer le cookie, comme TRestUriContext.SetOutCookie.
Correctifs
mormot.rest.client
5f3c8069+3-2
rest: match the session cookie name as SetOutCookie() computes it
Impact
L’auth HTTP fonctionne pour les roots comme api/v1 dont le cookie réel est api_v1.
Mise à jour recommandée
Retestez l’auth HTTP si Model.Root contient un slash.
Unités
33
Moyenne
Les clients REST HTTP appliquent les trois timeouts
TRestHttpClientSocket appelle SetTimeouts avec connect/send/receive juste après la création de THttpClientSocket.
Correctifs
mormot.rest.http.client
9013722a+3-2
rest: fixed #624 in TRestHttpClientSocket
Impact
Les timeouts REST send/receive configurés ne sont plus réduits au timeout connect du socket.
Mise à jour recommandée
Retestez REST avec des limites connect, send et receive volontairement différentes.
Unités
34
Moyenne
Les stores Windows exposent les identités adossées à CNG
mormot.crypt.win ajoute TWinCertStoreLocations, ICryptCertCng, TCryptCertAlgoCng et TCryptCertCng pour énumérer les stores, rechercher les certificats et signer via les clés KSP CNG.
Nouveautés
mormot.core.os.security+2
51d635d7+653-5
crypt: High-Level Windows CNG Certificate Store Integration
Impact
Les backends Windows peuvent employer des identités de store, carte ou KSP sans exporter les clés privées. Les autres plateformes ne changent pas.
À regarder
Évaluez TCryptCertAlgoCng.Cert, Find ou FindOne là où les services Windows chargent des PFX exportables.
API publique
TCryptCertAlgoCngaddedICryptCertCngaddedTWinCertStoreLocationsadded
35
Moyenne
Le chargement PFX devient une factory de classe CNG
LoadPkcs12 passe de TCryptCertAlgoCng à la class function TCryptCertCng.LoadPkcs12, accepte un log optionnel et crée une identité sans catalogue.
Nouveautés
mormot.crypt.win
274091d4+81-76
crypt: proper TCryptCertCng.LoadPkcs12 factory
Impact
Le chargement PFX ne nécessite plus de catalogue. Les utilisateurs de la méthode intermédiaire doivent appeler la class factory.
À regarder
Utilisez TCryptCertCng.LoadPkcs12(Pfx, Password, LogClass).
API publique
TCryptCertCng.LoadPkcs12added
Unités
36
Moyenne
L’ouverture d’enveloppe RSA peut déléguer l’opération privée
mormot.crypt.rsa ajoute TRsaPkcs1Decrypt et RsaOpen pour valider l’enveloppe, déléguer le déchiffrement PKCS#1 v1.5 et effectuer AES ; TRsa.Open le réutilise.
Nouveautés
mormot.crypt.rsa+1
634a72ff+77-56
crypt: introducing RsaOpen() reusable wrapper
Impact
Les providers CNG et PKCS#11 peuvent ouvrir le format TRsa.Seal sans exporter la clé RSA.
À regarder
Utilisez RsaOpen avec un callback qui effectue l’unpadding RSAES-PKCS1-v1_5 et renvoie la clé éphémère.
API publique
RsaOpenaddedTRsaPkcs1Decryptadded
37
Moyenne
CNG peut charger une identité PKCS#12 transitoire
Un premier TCryptCertAlgoCng.LoadPkcs12 importe le PFX avec PKCS12_NO_PERSIST_KEY, trouve une clé CNG accessible et crée un ICryptCertCng en mode cached/silent.
Nouveautés
mormot.crypt.win+1
7741fdc4+88-41
crypt: new TCryptCertAlgoCng.LoadPkcs12() method
Impact
Windows peut utiliser une identité PFX sans persister sa clé. Un commit suivant déplace la factory finale vers TCryptCertCng.LoadPkcs12.
38
Moyenne
Les clés privées CNG ouvrent les messages RSA du framework
TCryptPrivateKeyCng.Open décode le cipher AES, calcule le modulus RSA et utilise RsaOpen avec TNCrypt.KeyDecryptPkcs1 ; acquisition et log sont partagés avec la signature.
Nouveautés
mormot.crypt.win+1
12e8ca5a+84-25
crypt: implemented TCryptPrivateKeyCng.Open()
Impact
ICryptCertCng.Open déchiffre les messages compatibles TRsa.Seal avec des clés de store ou hardware non exportables.
À regarder
Testez Open avec chaque cipher AES et provider CNG de l’application.
API publique
TCryptPrivateKeyCng.Openbehaviour-changed
39
Moyenne
Les sockets HTTP séparent les timeouts connect, send et receive
THttpClientSocket ajoute trois champs et SetTimeouts. OpenBind applique temporairement connect, puis installe send/receive et restaure le timeout haut niveau.
Nouveautés
mormot.net.client
157ccf6f+69-30
net: introduce 3 explicit timeouts for THttpClientSocket
Impact
Les backends peuvent limiter la connexion tout en donnant des budgets différents à l’écriture et la lecture. L’ancien constructeur initialise les trois pareillement.
À regarder
Définissez des budgets distincts si les latences diffèrent, puis testez proxy CONNECT et retries.
API publique
THttpClientSocket.SetTimeoutsadded
Unités
40
Moyenne
Les clés privées PKCS#11 ouvrent les enveloppes RSA
TPkcs11.Decrypt encapsule C_DecryptInit/C_Decrypt et TCryptPrivateKeyPkcs11.Open utilise CKM_RSA_PKCS avec RsaOpen via la clé privée du token.
Nouveautés
mormot.crypt.pkcs11+1
64321f11+87-8
crypt: implement TCryptPrivateKeyPkcs11.Open() method
Impact
Les clés RSA de token peuvent déchiffrer ICryptPrivateKey.Open sans exporter de secret.
À regarder
Vérifiez que chaque token autorise CKM_RSA_PKCS decryption pour la clé choisie.
API publique
TPkcs11.DecryptaddedTCryptPrivateKeyPkcs11.Openbehaviour-changed
41
Moyenne
Windows CNG déchiffre un bloc RSA PKCS#1
TNCrypt.KeyDecryptPkcs1 encapsule NCryptDecrypt avec padding PKCS#1, mode silent, une seule opération hardware, sortie bornée et nettoyage sur erreur.
Nouveautés
mormot.lib.sspi
894714e2+50-3
lib: new TNCrypt.KeyDecryptPkcs1() wrapper method
Impact
Les clés RSA CNG, y compris hardware KSP, obtiennent le primitive nécessaire au déchiffrement d’enveloppe sans requête de taille.
API publique
TNCrypt.KeyDecryptPkcs1added
Unités
42
Moyenne
Un wrapper Windows importe les PFX en effaçant les mots de passe
mormot.lib.sspi ajoute WinCertStoreImportPfx, convertit SpiUtf8 en UTF-16, appelle PFXImportCertStore, capture les erreurs et efface le buffer du mot de passe.
Nouveautés
mormot.lib.sspi
33e5e920+46-3
lib: new WinCertStoreImportPfx() wrapper function
Impact
Les consommateurs PFX Windows gagnent un chemin d’import avec code d’erreur et effacement explicite du mot de passe.
API publique
WinCertStoreImportPfxadded
Unités
43
Moyenne
PKCS#11 signe ES384, ES512 et ES256K au format DER
SignDigest convertit la sortie r||s via SetSignatureSecurityRaw pour ES256/384/512/256K et renseigne le mechanism PSS.
Nouveautés
mormot.crypt.pkcs11
9c9a402a+8-7
crypt: ES384 ES512 ES256K support for PKCS#11
Impact
Les tokens avec clés EC plus grandes ou secp256k1 renvoient le format DER attendu par ICryptPrivateKey.
À regarder
Ajoutez des tests de signature token pour chaque algorithme ES activé.
Unités
44
Moyenne
Un second passage OpenSSL corrige les tailles de control et mode
Les types Windows précèdent les déclarations OpenSSL, et les wrappers session-cache, mode, extra-chain et callback utilisent clong de façon cohérente ; timeval suit clong.
Compilateur & plateforme
mormot.lib.openssl11
cdec1b9d+33-33
lib: another pass to fix clong OpenSSL usage
Impact
Les wrappers OpenSSL correspondent désormais aux conventions C sur Delphi/FPC ; le code TLS haut niveau reste compatible.
Mise à jour recommandée
Prenez ce commit avec les autres corrections de déclarations OpenSSL.
API publique
SSL_CTX_set_modesignature-changedSSL_get_modesignature-changed
Unités
45
Moyenne
Les codes de la queue OpenSSL ont un type adapté à la plateforme
TErrQueueCode alias culong ; ERR_get_error, ERR_error_string_n et OpenSSL_error l’utilisent, et EOpenSsl.LastError devient PtrInt.
Compilateur & plateforme
mormot.lib.openssl11
6b5cbea6+33-26
lib: introducing TErrQueueCode specific type
Impact
Les valeurs de queue POSIX 64-bit ne sont plus tronquées. Les signatures des helpers bas niveau changent.
À regarder
Recompilez le code appelant OpenSSL_error ou stockant EOpenSsl.LastError dans integer.
API publique
TErrQueueCodeaddedEOpenSsl.LastErrorsignature-changed
Unités
46
Moyenne
Les derniers unsigned long OpenSSL sont corrigés
mormot.lib.openssl11 corrige d’autres signatures culong et sépare les erreurs SSL integer des TErrQueueCode, tout en gardant cardinal pour les flags 32-bit.
Compilateur & plateforme
mormot.lib.openssl11
48dd6495+11-11
lib: minor OpenSSL API fixes
Impact
Le reporting d’erreurs et les wrappers d’options s’alignent sur leurs domaines C réels.
Mise à jour recommandée
Prenez ce dernier passage avec les commits ABI OpenSSL précédents.
Unités
47
Moyenne
La construction CNG précise ownership et métadonnées de store
La construction TCryptCertCng est réorganisée autour des contexts dupliqués, provider records et options de clé ; GetSystemStore indique l’origine system store.
Sous le capot
mormot.crypt.win
6b71ac9f+49-41
crypt: refined TCryptCertCng
Impact
Les nouvelles identités CNG ont un ownership et des métadonnées plus clairs. Il s’agit d’un raffinement de la nouvelle API.
Unités
48
Moyenne
CNG distingue les identités de store des identités PFX transitoires
TCryptCertCng sépare l’initialisation du context des métadonnées de store et GetSystemStore renvoie un booléen avec store et location.
Sous le capot
mormot.crypt.win
5c0c3dec+34-21
crypt: refined ICryptCertCng usage
Impact
Les appelants distinguent clairement un certificat CNG persistant d’un PFX en mémoire.
API publique
ICryptCertCng.GetSystemStoresignature-changed
Unités
49
Faible
Les métadonnées du provider certificat Windows ont un wrapper dédié
mormot.lib.sspi ajoute TWinCertKeyProviderInfo et WinCertCtxtKeyProvider pour décoder CERT_KEY_PROV_INFO_PROP_ID ; CNG utilise ce record ciblé plutôt que TWinCertInfo complet.
Nouveautés
mormot.lib.sspi+1
fe37aa9f+77-21
lib: new TWinCertKeyProviderInfo CNG API wrapper
Impact
Les appelants Windows gagnent une requête provider plus ciblée ; TWinCertInfo reste disponible et aucun changement applicatif n’est requis.
API publique
TWinCertKeyProviderInfoaddedWinCertCtxtKeyProvideradded
50
Faible
L’en-tête d’enveloppe RSA a une définition partagée
TRsaSealHeader et PRsaSealHeader passent dans mormot.core.os.security afin que RSA Pascal et OpenSSL partagent le même layout packed ; le callback RsaOpen devient const.
Sous le capot
mormot.core.os.security+3
e0f6cbb5+21-36
core: moved TRsaSealHeader to mormot.core.os.security
Impact
La compatibilité d’enveloppe est centralisée sans changer le wire format. Le type public se trouve dans mormot.core.os.security.
API publique
TRsaSealHeaderadded
51
Faible
Les options d’acquisition CNG remplacent plusieurs booléens
TWinCertCngKeyOption et TWinCertCngKeyOptions représentent silent, comparaison et cache ; TWinCertCngKey.Init et TCryptCertCng utilisent cet ensemble.
Sous le capot
mormot.lib.sspi+1
08e67973+26-13
lib: introducing TWinCertCngKeyOptions
Impact
Le nouveau code CNG combine explicitement les comportements d’acquisition. L’API est nouvelle dans cette même édition.
API publique
TWinCertCngKeyOptionsadded
52
Faible
Le timing des retries socket utilise une seule échéance
TrySockRecv calcule une échéance et le temps restant, sépare nrOk et RecvPending et garde AcceptEx sous le lock ; un initializer PKCS#11 redondant disparaît.
Sous le capot
mormot.net.sock+2
19ddf82e+15-19
net: minor simplification/cleanup of #622 PR
Impact
Les correctifs timeout et IOCP gardent leur comportement avec des invariants plus clairs et une finalisation atomique.
53
Faible
Le chargement PFX SChannel réutilise l’importeur Windows sécurisé
TSChannelServerContext.LoadCertificate remplace son code PFXImportCertStore par WinCertStoreImportPfx, efface le mot de passe UTF-8 et vérifie l’erreur.
Sous le capot
mormot.net.sock.windows+2
18dca4de+8-22
net: simplified TSChannelServerContext.LoadCertificate
Impact
Le chargement de certificat serveur SChannel conserve son comportement avec une gestion centralisée du mot de passe et des erreurs.
54
Faible
L’initialisation du provider AES CryptoAPI est simplifiée
mormot.crypt.win simplifie le contrôle d’état PROV_RSA_AES et le helper XOR final sans changer les classes publiques.
Sous le capot
mormot.crypt.win
7f601fcc+13-16
crypt: minor PROV_RSA_AES support refactoring on Windows
Impact
Aucun impact applicatif ; les mêmes modes AES et erreurs restent exposés.
Unités
55
Faible
SChannel Receive a un défaut fatal explicite
TLS Channel Receive initialise result à nrFatalError et simplifie les sorties pour éviter un warning Delphi 7.
Sous le capot
mormot.net.sock.windows
8df1fca0+6-10
net: refactored TLS Channel Receive() method
Impact
Le comportement reste fatal sur ces chemins ; Delphi 7 ne signale plus un résultat non initialisé.
Unités
56
Faible
Les conditionnels ZIP évitent des hints FPC trompeurs
mormot.core.zip réorganise les déclarations conditionnelles FPC pour supprimer des hints incorrects sans changer la logique exécutée.
Entretien
mormot.core.zip
507833b7+9-9
core: circumvent some weird FPC compiler hints
Impact
Les builds FPC sont plus propres ; comportement et API restent inchangés.