mORMot2 DailyLecture quotidienne des commits upstream

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.

Build2.4.17551 → 2.4.17586
Commits35
Lignes+1759 -469
Lecture6 min

35 sur 35 entrées · 35 commits upstream

# Entrée Catégorie Unités
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.

Arnaud Bouchez · 15:41 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 08:41 UTC · voir le commit sur GitHub →

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.

API publique

  • TBigInt.SaveFixedadded — Exporte un nombre exact d'octets big-endian avec zéros de tête.

Arnaud Bouchez · 20:01 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 14:17 UTC · voir le commit sur GitHub →

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é.

Arnaud Bouchez · 09:06 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 12:17 UTC · PR #652 · voir le commit sur GitHub →

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.

Arnaud Bouchez · 18:26 UTC · voir le commit sur GitHub →

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.

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.

Arnaud Bouchez · 12:00 UTC · PR #651 · voir le commit sur GitHub →

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.

Arnaud Bouchez · 12:17 UTC · PR #653 · voir le commit sur GitHub →

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.

Arnaud Bouchez · 12:51 UTC · PR #658 · voir le commit sur GitHub →

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.

Arnaud Bouchez · 12:56 UTC · PR #660 · voir le commit sur GitHub →

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.

Arnaud Bouchez · 12:45 UTC · PR #657 · voir le commit sur GitHub →

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.

Arnaud Bouchez · 13:18 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 12:59 UTC · PR #660 · voir le commit sur GitHub →

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.

Arnaud Bouchez · 14:05 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 12:29 UTC · PR #654 · voir le commit sur GitHub →

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.

Arnaud Bouchez · 12:25 UTC · PR #653 · voir le commit sur GitHub →

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.

Arnaud Bouchez · 12:53 UTC · PR #659 · voir le commit sur GitHub →

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.

Arnaud Bouchez · 12:33 UTC · PR #655 · voir le commit sur GitHub →

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.

Arnaud Bouchez · 16:54 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 15:50 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 17:13 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 08:09 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 15:19 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 17:04 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 17:39 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 07:03 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 18:02 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 17:51 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 17:03 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 07:05 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 17:42 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 07:04 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 15:19 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 17:14 UTC · voir le commit sur GitHub →

Activité upstream commits par jour · 60 derniers jours
Commits977
Jours actifs44/60
Plus chargé2026-09-30
Pic60
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