Agir maintenantpeut affecter un système en production
RSA adopte les témoins FIPS tandis que des défauts AES-GCM et SQL sont corrigés
Cette édition est dominée par une vaste série RSA de conformité, de correction et de performances : l'encodage à largeur fixe et des contrôles PKCS#1/PSS renforcés précèdent l'emploi d'un DRBG NIST et la sélection FIPS 186-5 des témoins Miller-Rabin. Elle corrige aussi les blocs partiels AES-GCM, la propagation de retenue x86, la validation des clés ECC, l'attente des timers et plusieurs cas limites PostgreSQL/SQLite. Les utilisateurs de l'API publique TBigInt doivent adapter une signature IsPrime et peuvent utiliser plusieurs nouvelles méthodes.
En bref
- Adoptez le build 2.4.17586 pour bénéficier de toute la série de conformité et d'optimisation RSA.
- TBigInt.IsPrime accepte désormais TAesPrngAbstract au lieu de PLecuyer ; les appels directs doivent migrer.
- Les sorties RSA ont une largeur fixe et PKCS#1/PSS rejette les encodages non canoniques ou invalides.
- AES-GCM gère correctement les blocs AVX partiels ainsi que les états clonés ou réinitialisés.
- Les chaînes vides PostgreSQL, les lectures BOOLINT et la destruction des connexions thread-safe sont corrigées.
Conseil de mise à jour
Utilisez le build final 2.4.17586. Recompilez les appels directs à TBigInt.IsPrime avec un argument TAesPrngAbstract, puis retestez la génération RSA, les signatures/vérifications PKCS#1/PSS, le streaming AES-GCM avec des fragments non alignés, les paramètres PostgreSQL vides, BOOLINT, les échecs de backup SQLite et l'arrêt des timers. Comparez aussi les backends cryptographiques x86/x64 et AArch64 à des vecteurs connus.
35 sur 35 entrées · 35 commits upstream
1
Critique
L'assembleur x86 propage correctement les retenues entre blocs de grands entiers
Les boucles x86/x64 _xasmadd/_xasmsub préservent retenue ou emprunt avec BT avant ADC/SBB entre les blocs déroulés.
Correctifs
mormot.crypt.core.asmx64+1
8ea03422+10-10
crypt: fixed _xasmadd/sub x86/x64 asm carry propagation
Impact
Certains opérandes pouvaient produire des sommes ou différences erronées et corrompre des calculs RSA sur Intel.
Mise à jour recommandée
Mettez à niveau les builds Intel et relancez les vecteurs RSA avec de longues chaînes de retenue.
2
Élevée
Les tests de primalité RSA passent de L'Ecuyer à un DRBG NIST
TBigInt.IsPrime remplace son paramètre optionnel PLecuyer par TAesPrngAbstract. La génération interne utilise TAesPrng.Main pour les témoins Miller-Rabin.
Ruptures
mormot.crypt.rsa
9bce2b48+23-18
crypt: enhanced RSA compliance with NIST recommandations
Impact
Les appels directs transmettant un pointeur PLecuyer ne compilent plus ; les appels par défaut utilisent silencieusement le DRBG AES du framework.
Migration nécessaire
Recherchez les appels TBigInt.IsPrime avec un troisième argument et passez une instance TAesPrngAbstract.
API publique
TBigInt.IsPrimesignature-changed — Le troisième paramètre devient TAesPrngAbstract au lieu de PLecuyer.
Unités
3
Élevée
La sérialisation RSA et les contrôles de signature imposent des largeurs canoniques
TBigInt.SaveFixed ajoute les zéros de tête ; RSA rejette les valeurs supérieures ou égales au module et PKCS#1/PSS impose des encodages de largeur exacte et des contrôles renforcés.
Sécurité
mormot.crypt.rsa
b4a21003+99-33
crypt: ensure fixed-width RSA serialization
Impact
Les chiffrés et signatures RSA gardent la largeur du module ; les signatures invalides ou non canoniques auparavant tolérées sont rejetées.
Mise à jour recommandée
Retestez l'interopérabilité PKCS#1 v1.5/PSS avec une autre implémentation et vérifiez la largeur des signatures stockées.
API publique
TBigInt.SaveFixedadded — Exporte un nombre exact d'octets big-endian avec zéros de tête.
Unités
4
Élevée
AES-GCM valide l'ordre du streaming et conserve l'état en attente
TAesGcm utilise des longueurs PtrUInt, clone les blocs AVX en attente, refuse l'AAD après le texte, valide l'appel AAD haut niveau et corrige la destination du tag tunnel.
Sécurité
mormot.crypt.core+1
36e581ed+22-21
crypt: several fixes to TAesGcm
Impact
Les contextes AES-GCM streamés ou clonés authentifient les bons octets ; un ordre AAD invalide échoue désormais.
Mise à jour recommandée
Mettez à niveau les utilisateurs AES-GCM/tunnel et testez les clones, l'ordre AAD et les messages non alignés.
5
Élevée
Les témoins Miller-Rabin suivent désormais l'échantillonnage FIPS 186-5
TBigInt.FillMillerRabinWitness applique un rejet sur toute la largeur du candidat puis place les valeurs acceptées dans l'intervalle FIPS 186-5 B.3.1.
Sécurité
mormot.crypt.rsa
319cd63e+19-18
crypt: RSA Miller-Rabin witness selection as described in FIPS 186-5 B.3.1
Impact
Le test des nombres premiers RSA n'introduit plus de biais par un modulo tronqué ; la génération de clés Delphi/FPC reçoit le correctif final de conformité.
Mise à jour recommandée
Utilisez le build 2.4.17586 et relancez la génération RSA avec une vérification indépendante des nombres premiers.
Unités
6
Élevée
Les chargeurs ECC rejettent les clés invalides ou du mauvais type
PemDerRawToEcc valide les préfixes de clé publique compressée et DerParse refuse les INTEGER ASN.1 vides ou trop grands ; les tests empêchent l'échange public/privé.
Sécurité
mormot.crypt.ecc+1
e3133b00+19-8
crypt: fixed #652 ECC key parsing and validation
Impact
Un DER invalide ou une clé privée présentée comme publique ne passe plus le chargement.
Mise à jour recommandée
Mettez à niveau les utilisateurs ECC et ajoutez des tests négatifs pour DER tronqué, INTEGER trop grand et types inversés.
7
Élevée
Les tours de primalité RSA et les contrôles de padding PKCS sont corrigés
FipsMinIterations compare le nombre complet de bits, le décodage PKCS#1 accepte toute longueur de padding d'au moins huit octets et PSS exige la largeur exacte du module.
Sécurité
mormot.crypt.rsa
c21e6cfa+6-6
crypt: several RSA fixes
Impact
L'assurance de primalité et l'acceptation conforme du padding sont corrigées ; les longueurs PSS invalides sont rejetées.
Mise à jour recommandée
Mettez à niveau les utilisateurs RSA et relancez les tests de padding, signature et nombres premiers.
Unités
8
Élevée
Les variables d'environnement conservent les valeurs vides et restaurent l'absence
Le cache reçoit un drapeau d'initialisation ; SetSystemEnv écrit toujours et ResetSystemEnv restaure la valeur ou supprime un nom initialement absent sous Windows/POSIX.
Correctifs
mormot.core.os+3
4fc7e59a+90-43
core: fixed #651 environment variables functions
Impact
Une valeur vide n'est plus confondue avec un cache absent et les variables temporaires retrouvent correctement leur état initial inexistant.
Mise à jour recommandée
Retestez SetSystemEnv/ResetSystemEnv avec variables absentes, vides et non vides sous Windows et POSIX.
API publique
SetSystemEnvbehaviour-changed — Écrit toujours la valeur demandée, y compris une chaîne vide.ResetSystemEnvbehaviour-changed — Supprime les variables absentes lors du remplissage du cache.
9
Élevée
Le parsing des URI LDAP distingue les ports par défaut et personnalisés
Le parsing TLdapClient mappe l'absence de port sans schéma vers LDAP_PORT, conserve les ports explicites et active TLS pour LDAPS_PORT.
Correctifs
mormot.net.ldap
c46549d6+21-7
net: fixed #653 LDAP port parsing
Impact
Les endpoints LDAP n'héritent plus par erreur du port HTTP 80 et les ports personnalisés restent effectifs.
Mise à jour recommandée
Vérifiez les chaînes host-only, ldap://, ldaps:// et avec port explicite.
Unités
10
Élevée
Les paramètres PostgreSQL vides restent distincts de SQL NULL
TSqlDBPostgresStatement.BindParams fait pointer les chaînes vides non nulles vers NULCHAR au lieu d'envoyer nil à libpq.
Correctifs
mormot.db.sql.postgres
9a90c009+7-3
db: fixed #658 TSqlDBPostgresStatement.BindParams with '' value
Impact
Le binding de '' n'insère plus SQL NULL, évitant des changements silencieux dans PostgreSQL.
Mise à jour recommandée
Mettez à niveau les utilisateurs PostgreSQL et testez les insertions/mises à jour avec chaînes vides.
Unités
11
Élevée
L'arrêt des timers attend bien le nombre de secondes demandé
TSynBackgroundTimer.WaitUntilNotProcessing convertit son délai de secondes en millisecondes avant SleepHiRes.
Correctifs
mormot.core.threads
630707ac+3-3
core: fixed TSynBackgroundTimer.WaitUntilNotProcessing #660
Impact
L'attente n'est plus environ mille fois trop courte, ce qui réduit les races d'arrêt avec callbacks actifs.
Mise à jour recommandée
Mettez à niveau les services arrêtant des timers sous charge et vérifiez la latence d'arrêt.
Unités
12
Élevée
Les pools SQL thread-safe détruisent toutes les connexions allouées
TSqlDBConnectionPropertiesThreadSafe.Destroy parcourt les bornes réelles du tableau au lieu des minima/maxima configurés.
Correctifs
mormot.db.sql
db7c4721+3-3
db: fixed TSqlDBConnectionPropertiesThreadSafe.Destroy #657
Impact
La destruction du pool évite de fuir des connexions ou d'indexer hors du tableau après reconfiguration.
Mise à jour recommandée
Retestez la reconfiguration du pool et l'arrêt avec détection des fuites.
Unités
13
Élevée
Le reset AES-GCM efface la longueur de bloc partiel restante
TAesGcmEngine.Reset remet state.blen à zéro après une opération terminée par un bloc incomplet.
Correctifs
mormot.crypt.core
e8367af5+3-2
crypt: fixed TAesGcmEngine.Reset after non-complete blocks
Impact
La réutilisation d'un moteur AES-GCM ne transporte plus un offset obsolète vers le message suivant.
Mise à jour recommandée
Mettez à niveau les contextes AES-GCM réutilisés et testez des messages successifs non alignés.
Unités
14
Élevée
Les timers d'arrière-plan se marquent actifs avant de mettre à jour les compteurs
TSynBackgroundTimer.EverySecond définit fProcessing avant l'incrément et les callbacks, fermant la dernière race de WaitUntilNotProcessing.
Correctifs
mormot.core.threads
a0b02203+3-2
core: fix #660 part II
Impact
Le code d'arrêt n'échappe plus à la petite fenêtre précédant l'activation du drapeau de traitement.
Mise à jour recommandée
Retestez la destruction des timers au démarrage et pendant l'exécution des callbacks.
Unités
15
Élevée
AES-GCM AVX accepte les fragments partiels et tronqués
TAesGcmEngine conserve les blocs AAD/texte incomplets entre appels, poursuit correctement CTR et donne à AllowAvx la valeur par défaut true.
Nouveautés
mormot.crypt.core
2d95c74a+128-27
crypt: allow partial/truncated AES-GCM encryption
Impact
Les builds Delphi/FPC avec AVX peuvent streamer des tailles arbitraires ; omettre AllowAvx active désormais AVX.
À regarder
Testez des fragments d'un octet à plusieurs blocs et décidez si AllowAvx doit être explicitement false.
API publique
TAesGcmEngine.Initsignature-changed — AllowAvx possède désormais la valeur par défaut true.
Unités
16
Moyenne
Les arguments inconnus affichent le bon token de commande
TCommandLine.DetectUnknown signale l'entrée fNames analysée plutôt que d'indexer la liste brute avec un mauvais décalage.
Correctifs
mormot.core.os
938a6bb1+12-3
core: fixed #654 unexpected command line argument reporting
Impact
Le diagnostic nomme la véritable option inattendue après parsing ; l'acceptation des arguments ne change pas.
Unités
17
Moyenne
LDAP conserve le port explicite jusqu'à l'ouverture de la connexion
Les réglages TLdapClient conservent le port issu de l'URI lors de la création du socket au lieu de reprendre un port par défaut.
Correctifs
mormot.net.ldap
fa932d76+9-4
net: one leftover of #653
Impact
Les endpoints LDAP/LDAPS sur ports personnalisés rejoignent le service configuré plutôt que le port par défaut.
Mise à jour recommandée
Retestez les URI LDAP avec/sans schéma sur des ports autres que 389 et 636.
Unités
18
Moyenne
Les booléens entiers PostgreSQL renvoient un pour true
TSqlDBPostgresStatement.ColumnInt reconnaît BOOLOID et convertit la valeur 't' en 1, les autres en 0.
Correctifs
mormot.db.sql.postgres
c0bc6984+9-3
db: fixed #659 TSqlDBPostgresStatement.ColumnInt with BOOLINT value
Impact
Le code Delphi/FPC lisant les booléens PostgreSQL via ColumnInt reçoit désormais la valeur numérique attendue.
À regarder
Retestez les mappings BOOLINT et les requêtes projetant des expressions booléennes en entiers.
Unités
19
Moyenne
Le backup SQLite signale proprement l'échec d'ouverture de la destination
BackupBackground intercepte les exceptions de création du TSqlDatabase destination, libère l'état partiel et renvoie false.
Correctifs
mormot.db.raw.sqlite3
81dcd78a+7-3
db: fixed #655 backup destination creation failure
Impact
Une destination invalide ou non accessible ne remonte plus comme exception inattendue du constructeur.
À regarder
Testez les chemins invalides et permissions, puis gérez un résultat false.
Unités
20
Moyenne
AArch64 reçoit une arithmétique native des grands entiers pour RSA
Un nouvel assembleur AArch64 implémente addition, soustraction, multiplication et division, puis le dispatch TBigInt les active.
Performance
mormot.core.base+3
78fb3897+518-69
crypt: new aarch64 asm primitives for RSA computing
Impact
Les opérations RSA AArch64 Delphi/FPC utilisent une arithmétique native optimisée ; leur correction dépend des nouveaux chemins.
À regarder
Exécutez les vecteurs RSA et TBigInt sur chaque système AArch64 pris en charge.
21
Moyenne
La réduction de Barrett ne calcule que les limbs bas nécessaires
TBigInt.MultiplyLow est ajouté et TRsaContext.BarrettReduction l'utilise pour éviter les limbs hauts ensuite jetés.
Performance
mormot.crypt.rsa
c12db49f+182-6
crypt: optimized RSA barret reduction implementation
Impact
La réduction modulaire RSA alloue et multiplie moins de données, accélérant les signatures et opérations privées.
À regarder
Exécutez les tests d'aliasing TBigInt et les vecteurs RSA pour chaque taille de mot.
API publique
TBigInt.MultiplyLowadded — Multiplie seulement le nombre demandé de limbs bas et libère les opérandes comme Multiply.
Unités
22
Moyenne
La recherche de nombres premiers RSA saute les candidats avec des restes moins coûteux
TBigInt.FillPrime conserve les restes pour les petits nombres premiers lors de l'incrémentation et évite de refaire toutes les divisions.
Performance
mormot.crypt.rsa
2791c66f+127-15
crypt: huge performance boost of RSA generation
Impact
La génération RSA devient nettement plus rapide, surtout sur les cibles lentes, sans changer le format des clés.
À regarder
Mesurez les tailles de clés utilisées et validez les clés avec un outil indépendant.
Unités
23
Moyenne
La génération RSA calcule ses deux nombres premiers sur des cœurs distincts
TRsa.Generate lance les recherches de p et q dans deux tâches, coordonne leur fin et conserve les délais et nettoyages existants.
Performance
mormot.crypt.rsa
0f2aa131+103-27
crypt: compute p/q RSA primes in parallel in two CPU cores
Impact
La création de clés RSA peut utiliser deux cœurs et terminer plus vite ; les formats et appels restent inchangés.
À regarder
Mesurez la génération et vérifiez les limites de threads dans les services contraints.
Unités
24
Moyenne
La réduction RSA adopte un réciproque de Barrett pré-calculé
TRsaContext pré-calcule les constantes de Barrett et Reduce remplace les divisions répétées par multiplications et décalages.
Performance
mormot.crypt.rsa
bcdff3ac+68-7
crypt: use Barret Reduction for TRsaContext.Reduce()
Impact
La signature et la vérification RSA passent moins de temps en réduction modulaire ; valeurs et API ne changent pas.
À regarder
Comparez les vecteurs RSA avant/après sur les cibles 32 et 64 bits.
Unités
25
Moyenne
Les builds Delphi Intel réutilisent les chemins cryptographiques assembleur
mormot.defines rétablit ASMINTELARM64 pour les cibles Delphi x86/x64 afin de compiler les primitives optimisées.
Compilateur & plateforme
mormot.defines
b6fd1b2e+4-2
crypt: restore asm for Delphi Intel targets
Impact
Le code cryptographique Delphi Win32/Win64 retrouve les performances assembleur ; FPC et les autres architectures ne changent pas.
À regarder
Recompilez les cibles Delphi Intel et exécutez les vecteurs sur Win32 et Win64.
Unités
26
Faible
Les puissances modulaires RSA adoptent une fenêtre glissante
TRsaContext.ModPower introduit une fenêtre glissante de trois bits avec puissances impaires pré-calculées.
Performance
mormot.crypt.rsa
9b9e71e3+51-14
crypt: 3-bit sliding window for RSA ModPower
Impact
Les opérations RSA à exposant privé demandent moins de multiplications ; aucune migration n'est requise.
Unités
27
Faible
Un prétest en base deux élimine plus tôt les candidats RSA composés
TBigInt.IsPrime effectue un test fort avec le témoin 2 avant d'allouer et lancer les tours Miller-Rabin aléatoires.
Performance
mormot.crypt.rsa
5be3ad0c+46-18
crypt: faster TBigInt.IsPrime by using base-2 pretest
Impact
La génération RSA rejette plus vite de nombreux candidats composés, sans changement applicatif.
Unités
28
Faible
La réduction de Barrett évite du travail RSA redondant
TRsaContext réutilise les tailles de module pré-calculées et réduit les temporaires dans le chemin Barrett optimisé.
Performance
mormot.crypt.rsa
bc529ee6+36-17
crypt: optimized RSA Barret Reduction
Impact
La réduction modulaire RSA alloue et copie moins ; le code applicatif et les résultats ne changent pas.
Unités
29
Faible
Les grands entiers gagnent une implémentation dédiée du carré
TBigInt.Square calcule directement la diagonale et les produits croisés doublés au lieu d'appeler Multiply sur une copie.
Performance
mormot.crypt.rsa
7be82719+39-4
crypt: dedicated TBigInt.Square method
Impact
L'exponentiation RSA accélère le carré tout en conservant le contrat TBigInt.Square.
API publique
TBigInt.Squarebehaviour-changed — Utilise un algorithme de carré dédié au lieu de la multiplication générique.
Unités
30
Faible
La division Pascal des grands entiers par dix est optimisée
TBigInt.IntDivMod10 réécrit sa boucle Pascal de quotient/reste pour réduire les branches et indexations.
Performance
mormot.crypt.rsa
dec4ec58+25-17
crypt: optimized TBigInt.IntDivMod10 pascal code
Impact
Le formatage décimal accélère sur les backends sans assembleur ; les résultats ne changent pas.
Unités
31
Faible
L'exposant RSA courant bénéficie d'un chemin rapide dédié
TRsaContext détecte l'exposant 65537 et utilise une courte séquence fixe plutôt que la boucle générique.
Performance
mormot.crypt.rsa
4f07c5c3+16-12
crypt: optimize exponent common prime 65537
Impact
Les opérations RSA publiques avec l'exposant 65537 accélèrent sans changement d'API ni de résultat.
Unités
32
Faible
L'exposant 65537 se calcule avec seize carrés et une multiplication
TRsaContext.ModPower reconnaît 65537 et exécute sa chaîne binaire exacte sans allouer la table générique.
Performance
mormot.crypt.rsa
d283eeda+17-2
crypt: optimized RSA for exponent=65537
Impact
La vérification et le chiffrement RSA avec l'exposant standard accélèrent sans changement public.
Unités
33
Faible
Les puissances modulaires RSA utilisent une fenêtre glissante de quatre bits
TRsaContext.ModPower étend sa table de puissances impaires pré-calculées de trois à quatre bits et adapte la boucle.
Performance
mormot.crypt.rsa
e1d2b232+6-6
crypt: use 4-bit sliding window for TRsaContext.ModPower
Impact
Les opérations RSA à grand exposant privé utilisent moins de multiplications modulaires ; appels et résultats restent identiques.
Unités
34
Faible
Le cœur cryptographique est réorganisé sans changement de comportement
mormot.crypt.core déplace des helpers et simplifie des déclarations en conservant les mêmes chemins AES et hash.
Sous le capot
mormot.crypt.core
4d9c5730+19-22
crypt: minor refactoring with no functional change
Impact
Aucun impact sur le code Delphi/FPC, les API publiques ou les résultats cryptographiques attendus.
Unités
35
Faible
Le code de conversion décimale des grands entiers est nettoyé
TBigInt.IntDivMod10 regroupe ses variables et sa boucle sans modifier le résultat ni la signature publique.
Sous le capot
mormot.crypt.rsa
260dd9cb+9-14
crypt: minor TBigInt.IntDivMod10 refactoring/cleaning
Impact
Aucun impact applicatif Delphi/FPC ; il s'agit d'un nettoyage préparatoire interne.