@@ -37,7 +37,7 @@ class HashAlgorithmType extends CryptographyType {
3737// This class models Create calls for the ECDsa and RSA classes in .NET.
3838class CryptographyCreateCall extends MethodCall {
3939 CryptographyCreateCall ( ) {
40- this .getTarget ( ) .getName ( ) = "Create" and
40+ this .getTarget ( ) .hasName ( "Create" ) and
4141 this .getQualifier ( ) .getType ( ) instanceof CryptographyType
4242 }
4343
@@ -58,27 +58,35 @@ class CryptographyCreateCall extends MethodCall {
5858 }
5959}
6060
61- class ECDsaCreateCall extends CryptographyCreateCall {
62- ECDsaCreateCall ( ) { this .getQualifier ( ) .getType ( ) .hasName ( "ECDsa" ) }
61+ class EcdsaType extends CryptographyType {
62+ EcdsaType ( ) { this .hasName ( "ECDsa" ) }
63+ }
64+
65+ class RsaType extends CryptographyType {
66+ RsaType ( ) { this .hasName ( "RSA" ) }
67+ }
68+
69+ class EcdsaCreateCall extends CryptographyCreateCall {
70+ EcdsaCreateCall ( ) { this .getQualifier ( ) .getType ( ) .hasName ( "ECDsa" ) }
6371}
6472
6573// This class is used to model the `ECDsa.Create(ECParameters)` call
66- class ECDsaCreateCallWithParameters extends ECDsaCreateCall {
74+ class ECDsaCreateCallWithParameters extends EcdsaCreateCall {
6775 ECDsaCreateCallWithParameters ( ) { this .getArgument ( 0 ) .getType ( ) instanceof ECParameters }
6876}
6977
70- class ECDsaCreateCallWithECCurve extends ECDsaCreateCall {
78+ class ECDsaCreateCallWithECCurve extends EcdsaCreateCall {
7179 ECDsaCreateCallWithECCurve ( ) { this .getArgument ( 0 ) .getType ( ) instanceof ECCurve }
7280}
7381
74- class RSACreateCall extends CryptographyCreateCall {
75- RSACreateCall ( ) { this .getQualifier ( ) .getType ( ) .hasName ( "RSA" ) }
82+ class RsaCreateCall extends CryptographyCreateCall {
83+ RsaCreateCall ( ) { this .getQualifier ( ) .getType ( ) .hasName ( "RSA" ) }
7684}
7785
7886class SigningCreateCall extends CryptographyCreateCall {
7987 SigningCreateCall ( ) {
80- this instanceof ECDsaCreateCall or
81- this instanceof RSACreateCall
88+ this instanceof EcdsaCreateCall or
89+ this instanceof RsaCreateCall
8290 }
8391}
8492
@@ -95,10 +103,9 @@ class HashAlgorithmCreateCall extends Crypto::AlgorithmValueConsumer instanceof
95103 override Crypto:: ConsumerInputDataFlowNode getInputNode ( ) { none ( ) }
96104}
97105
98- class HashAlgorithmQualifier extends Crypto:: HashAlgorithmInstance instanceof Expr {
99- HashAlgorithmQualifier ( ) {
100- this = any ( HashAlgorithmCreateCall c ) .( CryptographyCreateCall ) .getQualifier ( )
101- }
106+ class HashAlgorithmQualifier extends Crypto:: AlgorithmValueConsumer , Crypto:: HashAlgorithmInstance instanceof Expr
107+ {
108+ HashAlgorithmQualifier ( ) { this = any ( HashUse c ) .getQualifier ( ) }
102109
103110 override Crypto:: THashType getHashFamily ( ) {
104111 result = getHashFamily ( this .getRawHashAlgorithmName ( ) )
@@ -109,6 +116,10 @@ class HashAlgorithmQualifier extends Crypto::HashAlgorithmInstance instanceof Ex
109116 override int getFixedDigestLength ( ) {
110117 hashAlgorithmToFamily ( this .getRawHashAlgorithmName ( ) , _, result )
111118 }
119+
120+ override Crypto:: AlgorithmInstance getAKnownAlgorithmSource ( ) { result = this }
121+
122+ override Crypto:: ConsumerInputDataFlowNode getInputNode ( ) { none ( ) }
112123}
113124
114125class NamedCurvePropertyAccess extends PropertyAccess {
@@ -264,6 +275,37 @@ class HashUse extends Crypto::AlgorithmValueConsumer instanceof MethodCall {
264275 override Crypto:: AlgorithmInstance getAKnownAlgorithmSource ( ) { result = super .getQualifier ( ) }
265276
266277 override Crypto:: ConsumerInputDataFlowNode getInputNode ( ) { none ( ) }
278+
279+ Expr getQualifier ( ) { result = super .getQualifier ( ) }
280+ }
281+
282+ abstract class SignerQualifier extends Crypto:: AlgorithmValueConsumer , SigningAlgorithmInstance instanceof Expr
283+ {
284+ SignerQualifier ( ) { this = any ( SignerUse s ) .getQualifier ( ) }
285+
286+ override Crypto:: AlgorithmInstance getAKnownAlgorithmSource ( ) { result = this }
287+
288+ override Crypto:: ConsumerInputDataFlowNode getInputNode ( ) { none ( ) }
289+ }
290+
291+ class EcdsaSignerQualifier extends SignerQualifier instanceof Expr {
292+ EcdsaSignerQualifier ( ) { super .getType ( ) instanceof EcdsaType }
293+
294+ override string getRawAlgorithmName ( ) { result = "ECDsa" }
295+
296+ override Crypto:: KeyOpAlg:: Algorithm getAlgorithmType ( ) {
297+ result = Crypto:: KeyOpAlg:: TSignature ( Crypto:: KeyOpAlg:: ECDSA ( ) )
298+ }
299+ }
300+
301+ class RsaSignerQualifier extends SignerQualifier instanceof Expr {
302+ RsaSignerQualifier ( ) { super .getType ( ) instanceof RsaType }
303+
304+ override string getRawAlgorithmName ( ) { result = "RSA" }
305+
306+ override Crypto:: KeyOpAlg:: Algorithm getAlgorithmType ( ) {
307+ result = Crypto:: KeyOpAlg:: TSignature ( Crypto:: KeyOpAlg:: OtherSignatureAlgorithmType ( ) )
308+ }
267309}
268310
269311class SignerUse extends MethodCall {
0 commit comments