11import powershell
22import semmle.code.powershell.dataflow.DataFlow
33import semmle.code.powershell.ApiGraphs
4-
54import CryptoArtifact
65
76class CryptoAlgorithmObjectCreation extends DataFlow:: ObjectCreationNode {
8- string objectName ;
9- CryptoAlgorithmObjectCreation ( ) {
10- objectName = this .getExprNode ( ) .getExpr ( ) .( CallExpr ) .getAnArgument ( ) .getValue ( ) .asString ( ) .toLowerCase ( )
11- }
12- string getObjectName ( ) {
13- result = objectName
14- }
7+ string objectName ;
8+
9+ CryptoAlgorithmObjectCreation ( ) {
10+ objectName =
11+ this .getExprNode ( ) .getExpr ( ) .( CallExpr ) .getAnArgument ( ) .getValue ( ) .asString ( ) .toLowerCase ( )
12+ }
13+
14+ string getObjectName ( ) { result = objectName }
1515}
1616
1717class CryptoAlgorithmCreateCall extends DataFlow:: CallNode {
18- string objectName ;
19- CryptoAlgorithmCreateCall ( ) {
20- this = API:: getTopLevelMember ( "system" ) .getMember ( "security" ) .getMember ( "cryptography" ) .getMember ( objectName ) .getMember ( "create" ) .asCall ( )
21- }
18+ string objectName ;
2219
23- string getObjectName ( ) {
24- result = objectName
20+ CryptoAlgorithmCreateCall ( ) {
21+ this =
22+ API:: getTopLevelMember ( "system" )
23+ .getMember ( "security" )
24+ .getMember ( "cryptography" )
25+ .getMember ( objectName )
26+ .getMember ( "create" )
27+ .asCall ( )
2528 }
29+
30+ string getObjectName ( ) { result = objectName }
2631}
2732
2833class CryptoAlgorithmCreateArgCall extends DataFlow:: CallNode {
29- string objectName ;
30- CryptoAlgorithmCreateArgCall ( ) {
34+ string objectName ;
35+
36+ CryptoAlgorithmCreateArgCall ( ) {
3137 (
32- this = API:: getTopLevelMember ( "system" ) .getMember ( "security" ) .getMember ( "cryptography" ) .getMember ( _) .getMember ( "create" ) .asCall ( ) or
33- this = API:: getTopLevelMember ( "system" ) .getMember ( "security" ) .getMember ( "cryptography" ) .getMember ( "create" ) .asCall ( )
34- ) and
35- objectName = this .getAnArgument ( ) .asExpr ( ) .getValue ( ) .asString ( ) .toLowerCase ( )
38+ this =
39+ API:: getTopLevelMember ( "system" )
40+ .getMember ( "security" )
41+ .getMember ( "cryptography" )
42+ .getMember ( _)
43+ .getMember ( "create" )
44+ .asCall ( ) or
45+ this =
46+ API:: getTopLevelMember ( "system" )
47+ .getMember ( "security" )
48+ .getMember ( "cryptography" )
49+ .getMember ( "create" )
50+ .asCall ( )
51+ ) and
52+ objectName = this .getAnArgument ( ) .asExpr ( ) .getValue ( ) .asString ( ) .toLowerCase ( )
3653 }
3754
38- string getObjectName ( ) {
39- result = objectName
40- }
55+ string getObjectName ( ) { result = objectName }
4156}
4257
43-
4458class CryptoAlgorithmCreateFromNameCall extends DataFlow:: CallNode {
45- string objectName ;
46- CryptoAlgorithmCreateFromNameCall ( ) {
47- this = API:: getTopLevelMember ( "system" ) .getMember ( "security" ) .getMember ( "cryptography" ) .getMember ( "cryptoconfig" ) .getMember ( "createfromname" ) .asCall ( ) and
48- objectName = this .getAnArgument ( ) .asExpr ( ) .getValue ( ) .asString ( ) .toLowerCase ( )
49- }
59+ string objectName ;
5060
51- string getObjectName ( ) {
52- result = objectName
61+ CryptoAlgorithmCreateFromNameCall ( ) {
62+ this =
63+ API:: getTopLevelMember ( "system" )
64+ .getMember ( "security" )
65+ .getMember ( "cryptography" )
66+ .getMember ( "cryptoconfig" )
67+ .getMember ( "createfromname" )
68+ .asCall ( ) and
69+ objectName = this .getAnArgument ( ) .asExpr ( ) .getValue ( ) .asString ( ) .toLowerCase ( )
5370 }
71+
72+ string getObjectName ( ) { result = objectName }
5473}
5574
5675class HashAlgorithmObjectCreation extends HashAlgorithm , CryptoAlgorithmObjectCreation {
57- string algName ;
58- HashAlgorithmObjectCreation ( ) {
76+ string algName ;
77+
78+ HashAlgorithmObjectCreation ( ) {
5979 (
60- this .getObjectName ( ) = "system.security.cryptography." + algName or
61- this .getObjectName ( ) = "system.security.cryptography." + algName + "cryptoserviceprovider"
62- )
63- and
64- isHashingAlgorithm ( algName )
80+ this .getObjectName ( ) = "system.security.cryptography." + algName or
81+ this .getObjectName ( ) = "system.security.cryptography." + algName + "cryptoserviceprovider"
82+ ) and
83+ isHashingAlgorithm ( algName )
6584 }
6685
67- override string getName ( ) {
68- result = algName
69- }
86+ override string getName ( ) { result = algName }
7087}
7188
7289class HashAlgorithmCreateCall extends HashAlgorithm , CryptoAlgorithmCreateCall {
73- string algName ;
74- HashAlgorithmCreateCall ( ) {
75- isHashingAlgorithm ( this .getObjectName ( ) ) and
76- (
77- this .getObjectName ( ) = algName or
78- this .getObjectName ( ) = "system.security.cryptography." + algName
79- )
80- }
81- override string getName ( ) {
82- result = algName
90+ string algName ;
91+
92+ HashAlgorithmCreateCall ( ) {
93+ isHashingAlgorithm ( this .getObjectName ( ) ) and
94+ (
95+ this .getObjectName ( ) = algName or
96+ this .getObjectName ( ) = "system.security.cryptography." + algName
97+ )
8398 }
99+
100+ override string getName ( ) { result = algName }
84101}
85102
86103class HashAlgorithmCreateFromNameCall extends HashAlgorithm , CryptoAlgorithmCreateFromNameCall {
87- string algName ;
88- HashAlgorithmCreateFromNameCall ( ) {
89- (
90- this .getObjectName ( ) = algName or
91- this .getObjectName ( ) = "system.security.cryptography." + algName
92- ) and
93- isHashingAlgorithm ( algName )
94- }
104+ string algName ;
95105
96- override string getName ( ) {
97- result = algName
106+ HashAlgorithmCreateFromNameCall ( ) {
107+ (
108+ this .getObjectName ( ) = algName or
109+ this .getObjectName ( ) = "system.security.cryptography." + algName
110+ ) and
111+ isHashingAlgorithm ( algName )
98112 }
113+
114+ override string getName ( ) { result = algName }
99115}
100116
101117class SymmetricAlgorithmObjectCreation extends SymmetricAlgorithm , CryptoAlgorithmObjectCreation {
102- string algName ;
103- SymmetricAlgorithmObjectCreation ( ) {
118+ string algName ;
119+
120+ SymmetricAlgorithmObjectCreation ( ) {
104121 (
105- this .getObjectName ( ) = "system.security.cryptography." + algName or
106- this .getObjectName ( ) = "system.security.cryptography." + algName + "cryptoserviceprovider" or
107- this .getObjectName ( ) = "system.security.cryptography.symmetricalgorithm." + algName
108- )
109- and
110- isSymmetricAlgorithm ( algName )
122+ this .getObjectName ( ) = "system.security.cryptography." + algName or
123+ this .getObjectName ( ) = "system.security.cryptography." + algName + "cryptoserviceprovider" or
124+ this .getObjectName ( ) = "system.security.cryptography.symmetricalgorithm." + algName
125+ ) and
126+ isSymmetricAlgorithm ( algName )
111127 }
112128
113- override string getName ( ) {
114- result = algName
115- }
129+ override string getName ( ) { result = algName }
116130}
117131
118132class SymmetricAlgorithmCreateCall extends SymmetricAlgorithm , CryptoAlgorithmCreateCall {
119- string algName ;
120- SymmetricAlgorithmCreateCall ( ) {
121- isSymmetricAlgorithm ( this .getObjectName ( ) ) and
122- (
123- this .getObjectName ( ) = algName or
124- this .getObjectName ( ) = "system.security.cryptography." + algName or
125- this .getObjectName ( ) = "system.security.cryptography.symmetricalgorithm." + algName
126- )
127- }
128- override string getName ( ) {
129- result = algName
133+ string algName ;
134+
135+ SymmetricAlgorithmCreateCall ( ) {
136+ isSymmetricAlgorithm ( this .getObjectName ( ) ) and
137+ (
138+ this .getObjectName ( ) = algName or
139+ this .getObjectName ( ) = "system.security.cryptography." + algName or
140+ this .getObjectName ( ) = "system.security.cryptography.symmetricalgorithm." + algName
141+ )
130142 }
143+
144+ override string getName ( ) { result = algName }
131145}
132146
133147class SymmetricAlgorithmCreateArgCall extends SymmetricAlgorithm , CryptoAlgorithmCreateArgCall {
134- string algName ;
135- SymmetricAlgorithmCreateArgCall ( ) {
136-
137- (
138- algName = this .getObjectName ( ) and
139- isSymmetricAlgorithm ( algName )
140- ) or
141- (
142- this .getObjectName ( ) = "system.security.cryptography." + algName and
143- isSymmetricAlgorithm ( algName )
144- )
145- }
146- override string getName ( ) {
147- result = algName
148+ string algName ;
149+
150+ SymmetricAlgorithmCreateArgCall ( ) {
151+ algName = this .getObjectName ( ) and
152+ isSymmetricAlgorithm ( algName )
153+ or
154+ this .getObjectName ( ) = "system.security.cryptography." + algName and
155+ isSymmetricAlgorithm ( algName )
148156 }
157+
158+ override string getName ( ) { result = algName }
149159}
150160
151- class SymmetricAlgorithmCreateFromNameCall extends SymmetricAlgorithm , CryptoAlgorithmCreateFromNameCall {
152- string algName ;
153- SymmetricAlgorithmCreateFromNameCall ( ) {
154- (
155- this .getObjectName ( ) = algName or
156- this .getObjectName ( ) = "system.security.cryptography." + algName or
157- this .getObjectName ( ) = "system.security.cryptography.symmetricalgorithm." + algName
158- ) and
159- isSymmetricAlgorithm ( algName )
160- }
161+ class SymmetricAlgorithmCreateFromNameCall extends SymmetricAlgorithm ,
162+ CryptoAlgorithmCreateFromNameCall
163+ {
164+ string algName ;
161165
162- override string getName ( ) {
163- result = algName
166+ SymmetricAlgorithmCreateFromNameCall ( ) {
167+ (
168+ this .getObjectName ( ) = algName or
169+ this .getObjectName ( ) = "system.security.cryptography." + algName or
170+ this .getObjectName ( ) = "system.security.cryptography.symmetricalgorithm." + algName
171+ ) and
172+ isSymmetricAlgorithm ( algName )
164173 }
174+
175+ override string getName ( ) { result = algName }
165176}
166177
167178class CipherBlockStringConstExpr extends BlockMode {
168- string modeName ;
179+ string modeName ;
180+
169181 CipherBlockStringConstExpr ( ) {
170- exists ( StringConstExpr s |
171- s = this .asExpr ( ) .getExpr ( ) and
172- modeName = s .getValueString ( ) .toLowerCase ( ) and
173- isCipherBlockModeAlgorithm ( modeName )
182+ exists ( StringConstExpr s |
183+ s = this .asExpr ( ) .getExpr ( ) and
184+ modeName = s .getValueString ( ) .toLowerCase ( ) and
185+ isCipherBlockModeAlgorithm ( modeName )
174186 )
175187 }
176- override string getName ( ) {
177- result = modeName
178- }
188+
189+ override string getName ( ) { result = modeName }
179190}
180191
181192class CipherBlockModeEnum extends BlockMode {
182- string modeName ;
193+ string modeName ;
194+
183195 CipherBlockModeEnum ( ) {
184- exists ( API:: Node node |
185- node =
196+ exists ( API:: Node node |
197+ node =
186198 API:: getTopLevelMember ( "system" )
187199 .getMember ( "security" )
188200 .getMember ( "cryptography" )
189201 .getMember ( "ciphermode" )
190202 .getMember ( modeName ) and
191- this = node .asSource ( ) and
192- isCipherBlockModeAlgorithm ( modeName )
203+ this = node .asSource ( ) and
204+ isCipherBlockModeAlgorithm ( modeName )
193205 )
194206 }
195- override string getName ( ) {
196- result = modeName
197- }
198- }
207+
208+ override string getName ( ) { result = modeName }
209+ }
0 commit comments