Skip to content

Commit 6d0024d

Browse files
committed
quantum-c#: refactoring
1 parent 2642e32 commit 6d0024d

4 files changed

Lines changed: 31 additions & 29 deletions

File tree

csharp/ql/lib/experimental/quantum/dotnet/AlgorithmInstances.qll

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,9 @@ private import OperationInstances
55
private import Cryptography
66
private import FlowAnalysis
77

8-
class NamedCurveAlgorithmInstance extends Crypto::EllipticCurveInstance instanceof SigningNamedCurvePropertyAccess
8+
class NamedCurveAlgorithmInstance extends Crypto::EllipticCurveInstance instanceof NamedCurvePropertyAccess
99
{
10-
ECDsaAlgorithmValueConsumer consumer;
11-
12-
NamedCurveAlgorithmInstance() {
13-
SigningNamedCurveToSignatureCreateFlow::flow(DataFlow::exprNode(this), consumer.getInputNode())
14-
}
15-
16-
ECDsaAlgorithmValueConsumer getConsumer() { result = consumer }
10+
NamedCurveAlgorithmInstance() { this instanceof NamedCurvePropertyAccess }
1711

1812
override string getRawEllipticCurveName() { result = super.getCurveName() }
1913

@@ -26,30 +20,40 @@ class NamedCurveAlgorithmInstance extends Crypto::EllipticCurveInstance instance
2620
}
2721
}
2822

29-
class EcdsaAlgorithmInstance extends Crypto::KeyOperationAlgorithmInstance instanceof ECDsaCreateCall
30-
{
31-
EcdsaAlgorithmInstance() {
32-
// SigningNamedCurveToSignatureCreateFlow::flow(DataFlow::exprNode(this), consumer.getInputNode())
33-
this instanceof ECDsaCreateCall
34-
}
35-
36-
ECDsaAlgorithmValueConsumer getConsumer() { result = super.getQualifier() }
37-
38-
override string getRawAlgorithmName() { result = "ECDsa" }
39-
23+
abstract class SigningAlgorithmInstance extends Crypto::KeyOperationAlgorithmInstance {
4024
override Crypto::ModeOfOperationAlgorithmInstance getModeOfOperationAlgorithm() { none() }
4125

42-
// TODO: PaddingAlgorithmInstance errors with "call to empty relation: class test for Model::CryptographyBase::PaddingAlgorithmInstance"
4326
override Crypto::PaddingAlgorithmInstance getPaddingAlgorithm() { none() }
27+
4428
override Crypto::ConsumerInputDataFlowNode getKeySizeConsumer() { none() }
4529

30+
4631
override int getKeySizeFixed() { none() }
32+
}
33+
34+
class EcdsaAlgorithmInstance extends SigningAlgorithmInstance instanceof SigningCreateCall {
35+
EcdsaAlgorithmInstance() { this instanceof ECDsaCreateCall }
36+
37+
EcdsaAlgorithmValueConsumer getConsumer() { result = super.getQualifier() }
38+
39+
override string getRawAlgorithmName() { result = "ECDsa" }
4740

4841
override Crypto::KeyOpAlg::Algorithm getAlgorithmType() {
4942
result = Crypto::KeyOpAlg::TSignature(Crypto::KeyOpAlg::ECDSA())
5043
}
5144
}
5245

46+
class RsaAlgorithmInstance extends SigningAlgorithmInstance {
47+
RsaAlgorithmInstance() { this = any(RSACreateCall c).getQualifier() }
48+
49+
override string getRawAlgorithmName() { result = "RSA" }
50+
51+
override Crypto::KeyOpAlg::Algorithm getAlgorithmType() {
52+
// TODO there is no RSA TSignature type, so we use OtherSignatureAlgorithmType
53+
result = Crypto::KeyOpAlg::TSignature(Crypto::KeyOpAlg::OtherSignatureAlgorithmType())
54+
}
55+
}
56+
5357
class HashAlgorithmNameInstance extends Crypto::HashAlgorithmInstance instanceof HashAlgorithmName {
5458
HashAlgorithmNameConsumer consumer;
5559

csharp/ql/lib/experimental/quantum/dotnet/AlgorithmValueConsumers.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ private import AlgorithmInstances
44
private import OperationInstances
55
private import Cryptography
66

7-
class ECDsaAlgorithmValueConsumer extends Crypto::AlgorithmValueConsumer {
7+
class EcdsaAlgorithmValueConsumer extends Crypto::AlgorithmValueConsumer {
88
ECDsaCreateCall call;
99

10-
ECDsaAlgorithmValueConsumer() { this = call.getAlgorithmArg() }
10+
EcdsaAlgorithmValueConsumer() { this = call.getAlgorithmArg() }
1111

1212
override Crypto::ConsumerInputDataFlowNode getInputNode() { result.asExpr() = this }
1313

1414
override Crypto::AlgorithmInstance getAKnownAlgorithmSource() {
15-
exists(NamedCurveAlgorithmInstance l | l.getConsumer() = this and result = l)
15+
exists(EcdsaAlgorithmInstance l | l.getConsumer() = this and result = l)
1616
}
1717
}
1818

csharp/ql/lib/experimental/quantum/dotnet/Cryptography.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ class HashAlgorithmCreateCall extends CryptographyCreateCall {
8585
HashAlgorithmCreateCall() { this.getQualifier().getType() instanceof HashAlgorithmType }
8686
}
8787

88-
class SigningNamedCurvePropertyAccess extends PropertyAccess {
88+
class NamedCurvePropertyAccess extends PropertyAccess {
8989
string curveName;
9090

91-
SigningNamedCurvePropertyAccess() {
91+
NamedCurvePropertyAccess() {
9292
super.getType().getName() = "ECCurve" and
9393
eccurveNameMapping(super.getProperty().toString().toUpperCase(), curveName)
9494
}

csharp/ql/lib/experimental/quantum/dotnet/FlowAnalysis.qll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ signature class UseCallSig instanceof QualifiableExpr {
1010
predicate isIntermediate();
1111
}
1212

13-
14-
1513
module CreationToUseFlow<CreationCallSig Creation, UseCallSig Use> {
1614
private module CreationToUseConfig implements DataFlow::ConfigSig {
1715
predicate isSource(DataFlow::Node source) {
@@ -68,10 +66,10 @@ module CreationToUseFlow<CreationCallSig Creation, UseCallSig Use> {
6866
* Flow from a known ECDsa property access to a `ECDsa.Create(sink)` call.
6967
*/
7068
module SigningNamedCurveToSignatureCreateFlowConfig implements DataFlow::ConfigSig {
71-
predicate isSource(DataFlow::Node src) { src.asExpr() instanceof SigningNamedCurvePropertyAccess }
69+
predicate isSource(DataFlow::Node src) { src.asExpr() instanceof NamedCurvePropertyAccess }
7270

7371
predicate isSink(DataFlow::Node sink) {
74-
exists(ECDsaAlgorithmValueConsumer consumer | sink = consumer.getInputNode())
72+
exists(EcdsaAlgorithmValueConsumer consumer | sink = consumer.getInputNode())
7573
}
7674
}
7775

0 commit comments

Comments
 (0)