Skip to content

Commit 7e8c83b

Browse files
committed
Refactor
1 parent bca51a9 commit 7e8c83b

2 files changed

Lines changed: 24 additions & 7 deletions

File tree

go/ql/lib/semmle/go/Concepts.qll

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -574,18 +574,19 @@ module Cryptography {
574574
* is one) have been initialized separately.
575575
*/
576576
abstract class EncryptionOperation extends CryptographicOperation::Range {
577-
DataFlow::Node encryptionFlowTarget;
578-
DataFlow::Node inputNode;
577+
abstract DataFlow::Node getEncryptionFlowTarget();
578+
579+
abstract DataFlow::Node getInputNode();
579580

580581
override DataFlow::Node getInitialization() {
581-
EncryptionFlow::flow(result, encryptionFlowTarget)
582+
EncryptionFlow::flow(result, this.getEncryptionFlowTarget())
582583
}
583584

584585
override EncryptionAlgorithm getAlgorithm() {
585586
result = this.getInitialization().(EncryptionAlgorithmInit).getAlgorithm()
586587
}
587588

588-
override DataFlow::Node getAnInput() { result = inputNode }
589+
override DataFlow::Node getAnInput() { result = this.getInputNode() }
589590

590591
override BlockMode getBlockMode() {
591592
result = this.getInitialization().(BlockModeInit).getMode()
@@ -601,8 +602,12 @@ module Cryptography {
601602
int inputArg;
602603

603604
EncryptionMethodCall() {
604-
encryptionFlowTarget = super.getReceiver() and
605-
inputNode = super.getArgument(inputArg)
605+
exists(super.getReceiver()) and
606+
exists(super.getArgument(inputArg))
606607
}
608+
609+
override DataFlow::Node getEncryptionFlowTarget() { result = super.getReceiver() }
610+
611+
override DataFlow::Node getInputNode() { result = super.getArgument(inputArg) }
607612
}
608613
}

go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,9 @@ private module Crypto {
381381
}
382382

383383
private class StreamReader extends EncryptionOperation {
384+
DataFlow::Node encryptionFlowTarget;
385+
DataFlow::Node inputNode;
386+
384387
StreamReader() {
385388
lookThroughPointerType(this.getType()).hasQualifiedName("crypto/cipher", "StreamReader") and
386389
exists(DataFlow::Write w, DataFlow::Node base, Field f |
@@ -394,6 +397,10 @@ private module Crypto {
394397
DataFlow::localFlow(base, this)
395398
)
396399
}
400+
401+
override DataFlow::Node getEncryptionFlowTarget() { result = encryptionFlowTarget }
402+
403+
override DataFlow::Node getInputNode() { result = inputNode }
397404
}
398405

399406
/**
@@ -402,9 +409,10 @@ private module Crypto {
402409
* so it only works within one function.
403410
*/
404411
private class StreamWriter extends EncryptionOperation {
412+
DataFlow::Node encryptionFlowTarget;
413+
405414
StreamWriter() {
406415
lookThroughPointerType(this.getType()).hasQualifiedName("crypto/cipher", "StreamWriter") and
407-
inputNode = this and
408416
exists(DataFlow::Write w, DataFlow::Node base, Field f |
409417
w.writesField(base, f, encryptionFlowTarget) and
410418
f.hasQualifiedName("crypto/cipher", "StreamWriter", "S")
@@ -413,6 +421,10 @@ private module Crypto {
413421
TaintTracking::localTaint(base, this.(DataFlow::PostUpdateNode).getPreUpdateNode())
414422
)
415423
}
424+
425+
override DataFlow::Node getEncryptionFlowTarget() { result = encryptionFlowTarget }
426+
427+
override DataFlow::Node getInputNode() { result = this }
416428
}
417429
}
418430
}

0 commit comments

Comments
 (0)