@@ -170,8 +170,19 @@ private module CryptographyModel {
170170 .getMember ( algorithmName )
171171 }
172172
173+ /** Gets a reference to a `cryptography.hazmat.primitives.ciphers.modes` Class */
174+ API:: Node modeClassRef ( string modeName ) {
175+ result =
176+ API:: moduleImport ( "cryptography" )
177+ .getMember ( "hazmat" )
178+ .getMember ( "primitives" )
179+ .getMember ( "ciphers" )
180+ .getMember ( "modes" )
181+ .getMember ( modeName )
182+ }
183+
173184 /** Gets a reference to a Cipher instance using algorithm with `algorithmName`. */
174- API:: Node cipherInstance ( string algorithmName ) {
185+ API:: Node cipherInstance ( string algorithmName , string modeName ) {
175186 exists ( API:: CallNode call | result = call .getReturn ( ) |
176187 call =
177188 API:: moduleImport ( "cryptography" )
@@ -182,7 +193,12 @@ private module CryptographyModel {
182193 .getACall ( ) and
183194 algorithmClassRef ( algorithmName ) .getReturn ( ) .getAUse ( ) in [
184195 call .getArg ( 0 ) , call .getArgByName ( "algorithm" )
185- ]
196+ ] and
197+ exists ( DataFlow:: Node modeArg | modeArg in [ call .getArg ( 1 ) , call .getArgByName ( "mode" ) ] |
198+ modeArg = modeClassRef ( modeName ) .getReturn ( ) .getAUse ( )
199+ or
200+ modeArg .asExpr ( ) instanceof None and modeName = "<none>"
201+ )
186202 )
187203 }
188204
@@ -192,10 +208,11 @@ private module CryptographyModel {
192208 class CryptographyGenericCipherOperation extends Cryptography:: CryptographicOperation:: Range ,
193209 DataFlow:: MethodCallNode {
194210 string algorithmName ;
211+ string modeName ;
195212
196213 CryptographyGenericCipherOperation ( ) {
197214 this =
198- cipherInstance ( algorithmName )
215+ cipherInstance ( algorithmName , modeName )
199216 .getMember ( [ "decryptor" , "encryptor" ] )
200217 .getReturn ( )
201218 .getMember ( [ "update" , "update_into" ] )
@@ -207,6 +224,8 @@ private module CryptographyModel {
207224 }
208225
209226 override DataFlow:: Node getAnInput ( ) { result in [ this .getArg ( 0 ) , this .getArgByName ( "data" ) ] }
227+
228+ override Cryptography:: BlockMode getBlockMode ( ) { result = modeName }
210229 }
211230 }
212231
@@ -257,6 +276,8 @@ private module CryptographyModel {
257276 }
258277
259278 override DataFlow:: Node getAnInput ( ) { result in [ this .getArg ( 0 ) , this .getArgByName ( "data" ) ] }
279+
280+ override Cryptography:: BlockMode getBlockMode ( ) { none ( ) }
260281 }
261282 }
262283}
0 commit comments