@@ -562,34 +562,32 @@ module Cryptography {
562
562
563
563
/** Provides classes for modeling new key-pair generation APIs. */
564
564
module KeyGeneration {
565
- /** Gets a reference to an integer literal, as well as the origin of the integer literal. */
566
- private DataFlow:: Node keysizeTracker (
567
- DataFlow:: TypeTracker t , int keySize , DataFlow:: Node origin
568
- ) {
565
+ /** Gets a back-reference to the keysize argument `arg` that was used to generate a new key-pair. */
566
+ DataFlow:: LocalSourceNode keysizeBacktracker ( DataFlow:: TypeBackTracker t , DataFlow:: Node arg ) {
569
567
t .start ( ) and
570
- result . asExpr ( ) . ( IntegerLiteral ) . getValue ( ) = keySize and
571
- origin = result
568
+ arg = any ( KeyGeneration :: Range r ) . getKeySizeArg ( ) and
569
+ result = arg . getALocalSource ( )
572
570
or
573
571
// Due to bad performance when using normal setup with we have inlined that code and forced a join
574
- exists ( DataFlow:: TypeTracker t2 |
572
+ exists ( DataFlow:: TypeBackTracker t2 |
575
573
exists ( DataFlow:: StepSummary summary |
576
- keysizeTracker_first_join ( t2 , keySize , origin , result , summary ) and
577
- t = t2 .append ( summary )
574
+ keysizeBacktracker_first_join ( t2 , arg , result , summary ) and
575
+ t = t2 .prepend ( summary )
578
576
)
579
577
)
580
578
}
581
579
582
580
pragma [ nomagic]
583
- private predicate keysizeTracker_first_join (
584
- DataFlow:: TypeTracker t2 , int keySize , DataFlow:: Node origin , DataFlow:: Node res ,
581
+ private predicate keysizeBacktracker_first_join (
582
+ DataFlow:: TypeBackTracker t2 , DataFlow:: Node arg , DataFlow:: Node res ,
585
583
DataFlow:: StepSummary summary
586
584
) {
587
- DataFlow:: StepSummary:: step ( keysizeTracker ( t2 , keySize , origin ) , res , summary )
585
+ DataFlow:: StepSummary:: step ( res , keysizeBacktracker ( t2 , arg ) , summary )
588
586
}
589
587
590
- /** Gets a reference to an integer literal, as well as the origin of the integer literal . */
591
- private DataFlow:: Node keysizeTracker ( int keySize , DataFlow:: Node origin ) {
592
- result = keysizeTracker ( DataFlow:: TypeTracker :: end ( ) , keySize , origin )
588
+ /** Gets a back- reference to the keysize argument `arg` that was used to generate a new key-pair . */
589
+ DataFlow:: LocalSourceNode keysizeBacktracker ( DataFlow:: Node arg ) {
590
+ result = keysizeBacktracker ( DataFlow:: TypeBackTracker :: end ( ) , arg )
593
591
}
594
592
595
593
/**
@@ -610,7 +608,8 @@ module Cryptography {
610
608
* explains how we obtained this specific key size.
611
609
*/
612
610
int getKeySizeWithOrigin ( DataFlow:: Node origin ) {
613
- this .getKeySizeArg ( ) = keysizeTracker ( result , origin )
611
+ origin = keysizeBacktracker ( this .getKeySizeArg ( ) ) and
612
+ result = origin .asExpr ( ) .( IntegerLiteral ) .getValue ( )
614
613
}
615
614
616
615
/** Gets the minimum key size (in bits) for this algorithm to be considered secure. */
0 commit comments