Code Duplication    Length = 24-28 lines in 2 locations

includes/password/LayeredParameterizedPassword.php 2 locations

@@ 58-81 (lines=24) @@
55
56
	public function crypt( $password ) {
57
		$lastHash = $password;
58
		foreach ( $this->config['types'] as $i => $type ) {
59
			// Construct pseudo-hash based on params and arguments
60
			/** @var ParameterizedPassword $passObj */
61
			$passObj = $this->factory->newFromType( $type );
62
63
			$params = '';
64
			$args = '';
65
			if ( $this->params[$i] !== '' ) {
66
				$params = $this->params[$i] . $passObj->getDelimiter();
67
			}
68
			if ( isset( $this->args[$i] ) && $this->args[$i] !== '' ) {
69
				$args = $this->args[$i] . $passObj->getDelimiter();
70
			}
71
			$existingHash = ":$type:" . $params . $args . $this->hash;
72
73
			// Hash the last hash with the next type in the layer
74
			$passObj = $this->factory->newFromCiphertext( $existingHash );
75
			$passObj->crypt( $lastHash );
76
77
			// Move over the params and args
78
			$this->params[$i] = implode( $passObj->getDelimiter(), $passObj->params );
79
			$this->args[$i] = implode( $passObj->getDelimiter(), $passObj->args );
80
			$lastHash = $passObj->hash;
81
		}
82
83
		$this->hash = $lastHash;
84
	}
@@ 109-136 (lines=28) @@
106
		$lastHash = $passObj->hash;
107
108
		// Layer the remaining types
109
		foreach ( $this->config['types'] as $i => $type ) {
110
			if ( $i == 0 ) {
111
				continue;
112
			};
113
114
			// Construct pseudo-hash based on params and arguments
115
			/** @var ParameterizedPassword $passObj */
116
			$passObj = $this->factory->newFromType( $type );
117
118
			$params = '';
119
			$args = '';
120
			if ( $this->params[$i] !== '' ) {
121
				$params = $this->params[$i] . $passObj->getDelimiter();
122
			}
123
			if ( isset( $this->args[$i] ) && $this->args[$i] !== '' ) {
124
				$args = $this->args[$i] . $passObj->getDelimiter();
125
			}
126
			$existingHash = ":$type:" . $params . $args . $this->hash;
127
128
			// Hash the last hash with the next type in the layer
129
			$passObj = $this->factory->newFromCiphertext( $existingHash );
130
			$passObj->crypt( $lastHash );
131
132
			// Move over the params and args
133
			$this->params[$i] = implode( $passObj->getDelimiter(), $passObj->params );
134
			$this->args[$i] = implode( $passObj->getDelimiter(), $passObj->args );
135
			$lastHash = $passObj->hash;
136
		}
137
138
		$this->hash = $lastHash;
139
	}