Passed
Pull Request — develop (#31)
by Pieter van der
06:38
created
library/tiqr/OATH/OCRAParser.php 2 patches
Indentation   +229 added lines, -229 removed lines patch added patch discarded remove patch
@@ -4,241 +4,241 @@
 block discarded – undo
4 4
 
5 5
 class OATH_OCRAParser {
6 6
 
7
-	private $key = NULL;
8
-
9
-	private $OCRASuite = NULL;
10
-
11
-	private $OCRAVersion = NULL;
12
-
13
-	private $CryptoFunctionType = NULL;
14
-	private $CryptoFunctionHash = NULL;
15
-	private $CryptoFunctionHashLength = NULL;
16
-	private $CryptoFunctionTruncation = NULL;
17
-
18
-	private $C = FALSE;
19
-	private $Q = FALSE;
20
-	private $QType = 'N';
21
-	private $QLength = 8;
22
-
23
-	private $P = FALSE;
24
-	private $PType = 'SHA1';
25
-	private $PLength = 20;
26
-
27
-	private $S = FALSE;
28
-	private $SLength = 64;
29
-
30
-	private $T = FALSE;
31
-	private $TLength = 60; // 1M
32
-	private $TPeriods = array('H' => 3600, 'M' => 60, 'S' => 1);
33
-
34
-	private $supportedHashFunctions = array('SHA1' => 20, 'SHA256' => 32, 'SHA512' => 64);
35
-
36
-
37
-	public function __construct($ocraSuite) {
38
-		$this->parseOCRASuite($ocraSuite);
39
-	}
40
-
41
-	/**
42
-	 * Inspired by https://github.com/bdauvergne/python-oath
43
-	 */
44
-	private function parseOCRASuite($ocraSuite) {
45
-		if (!is_string($ocraSuite)) {
46
-			throw new Exception('OCRASuite not in string format: ' . var_export($ocraSuite, TRUE));
47
-		}
48
-
49
-		$ocraSuite = strtoupper($ocraSuite);
50
-		$this->OCRASuite = $ocraSuite;
51
-
52
-		$s = explode(':', $ocraSuite);
53
-		if (count($s) != 3) {
54
-			throw new Exception('Invalid OCRASuite format: ' . var_export($ocraSuite, TRUE));
55
-		}
56
-
57
-		$algo = explode('-', $s[0]);
58
-		if (count($algo) != 2) {
59
-			throw new Exception('Invalid OCRA version: ' . var_export($s[0], TRUE));
60
-		}
61
-
62
-		if ($algo[0] !== 'OCRA') {
63
-			throw new Exception('Unsupported OCRA algorithm: ' . var_export($algo[0], TRUE));
64
-		}
65
-
66
-		if ($algo[1] !== '1') {
67
-			throw new Exception('Unsupported OCRA version: ' . var_export($algo[1], TRUE));
68
-		}
69
-		$this->OCRAVersion = $algo[1];
70
-
71
-		$cf = explode('-', $s[1]);
72
-		if (count($cf) != 3) {
73
-			throw new Exception('Invalid OCRA suite crypto function: ' . var_export($s[1], TRUE));
74
-		}
75
-
76
-		if ($cf[0] !== 'HOTP') {
77
-			throw new Exception('Unsupported OCRA suite crypto function: ' . var_export($cf[0], TRUE));
78
-		}
79
-		$this->CryptoFunctionType = $cf[0];
80
-
81
-		if (!array_key_exists($cf[1], $this->supportedHashFunctions)) {
82
-			throw new Exception('Unsupported hash function in OCRA suite crypto function: ' . var_export($cf[1], TRUE));
83
-		}
84
-		$this->CryptoFunctionHash = $cf[1];
85
-		$this->CryptoFunctionHashLength = $this->supportedHashFunctions[$cf[1]];
86
-
87
-		if (!preg_match('/^\d+$/', $cf[2]) || (($cf[2] < 4 || $cf[2] > 10) && $cf[2] != 0)) {
88
-			throw new Exception('Invalid OCRA suite crypto function truncation length: ' . var_export($cf[2], TRUE));
89
-		}
90
-		$this->CryptoFunctionTruncation = intval($cf[2]);
91
-
92
-		$di = explode('-', $s[2]);
93
-		if (count($cf) == 0) {
94
-			throw new Exception('Invalid OCRA suite data input: ' . var_export($s[2], TRUE));
95
-		}
96
-
97
-		$data_input = array();
98
-		foreach($di as $elem) {
99
-			$letter = $elem[0];
100
-			if (array_key_exists($letter, $data_input)) {
101
-				throw new Exception('Duplicate field in OCRA suite data input: ' . var_export($elem, TRUE));
102
-			}
103
-			$data_input[$letter] = 1;
104
-
105
-			if ($letter === 'C' && strlen($elem) == 1) {
106
-				$this->C = TRUE;
107
-			} elseif ($letter === 'Q') {
108
-				if (strlen($elem) == 1) {
109
-					$this->Q = TRUE;
110
-				} elseif (preg_match('/^Q([AHN])(\d+)$/', $elem, $match)) {
111
-					$q_len = intval($match[2]);
112
-					if ($q_len < 4 || $q_len > 64) {
113
-						throw new Exception('Invalid OCRA suite data input question length: ' . var_export($q_len, TRUE));
114
-					}
115
-					$this->Q = TRUE;
116
-					$this->QType = $match[1];
117
-					$this->QLength = $q_len;
118
-				} else {
119
-					throw new Exception('Invalid OCRA suite data input question: ' . var_export($elem, TRUE));
120
-				}
121
-			} elseif ($letter === 'P') {
122
-				if (strlen($elem) == 1) {
123
-					$this->P = TRUE;
124
-				} else {
125
-					$p_algo = substr($elem, 1);
126
-					if (!array_key_exists($p_algo, $this->supportedHashFunctions)) {
127
-						throw new Exception('Unsupported OCRA suite PIN hash function: ' . var_export($elem, TRUE));
128
-					}
129
-					$this->P = TRUE;
130
-					$this->PType = $p_algo;
131
-					$this->PLength = $this->supportedHashFunctions[$p_algo];
132
-				}
133
-			} elseif ($letter === 'S') {
134
-				if (strlen($elem) == 1) {
135
-					$this->S = TRUE;
136
-				} elseif (preg_match('/^S(\d+)$/', $elem, $match)) {
137
-					$s_len = intval($match[1]);
138
-					if ($s_len <= 0 || $s_len > 512) {
139
-						throw new Exception('Invalid OCRA suite data input session information length: ' . var_export($s_len, TRUE));
140
-					}
141
-
142
-					$this->S = TRUE;
143
-					$this->SLength = $s_len;
144
-				} else {
145
-					throw new Exception('Invalid OCRA suite data input session information length: ' . var_export($elem, TRUE));
146
-				}
147
-			} elseif ($letter === 'T') {
148
-				if (strlen($elem) == 1) {
149
-					$this->T = TRUE;
150
-				} elseif (preg_match('/^T(\d+[HMS])+$/', $elem)) {
151
-					preg_match_all('/(\d+)([HMS])/', $elem, $match);
152
-
153
-					if (count($match[1]) !== count(array_unique($match[2]))) {
154
-						throw new Exception('Duplicate definitions in OCRA suite data input timestamp: ' . var_export($elem, TRUE));
155
-					}
156
-
157
-					$length = 0;
158
-					for ($i = 0; $i < count($match[1]); $i++) {
159
-						$length += intval($match[1][$i]) * $this->TPeriods[$match[2][$i]];
160
-					}
161
-					if ($length <= 0) {
162
-						throw new Exception('Invalid OCRA suite data input timestamp: ' . var_export($elem, TRUE));
163
-					}
164
-
165
-					$this->T = TRUE;
166
-					$this->TLength = $length;
167
-				} else {
168
-					throw new Exception('Invalid OCRA suite data input timestamp: ' . var_export($elem, TRUE));
169
-				}
170
-			} else {
171
-				throw new Exception('Unsupported OCRA suite data input field: ' . var_export($elem, TRUE));
172
-			}
173
-		}
174
-
175
-		if (!$this->Q) {
176
-			throw new Exception('OCRA suite data input question not defined: ' . var_export($s[2], TRUE));
177
-		}
178
-	}
179
-
180
-	public function generateChallenge() {
181
-		$q_length = $this->QLength;
182
-		$q_type = $this->QType;
7
+    private $key = NULL;
8
+
9
+    private $OCRASuite = NULL;
10
+
11
+    private $OCRAVersion = NULL;
12
+
13
+    private $CryptoFunctionType = NULL;
14
+    private $CryptoFunctionHash = NULL;
15
+    private $CryptoFunctionHashLength = NULL;
16
+    private $CryptoFunctionTruncation = NULL;
17
+
18
+    private $C = FALSE;
19
+    private $Q = FALSE;
20
+    private $QType = 'N';
21
+    private $QLength = 8;
22
+
23
+    private $P = FALSE;
24
+    private $PType = 'SHA1';
25
+    private $PLength = 20;
26
+
27
+    private $S = FALSE;
28
+    private $SLength = 64;
29
+
30
+    private $T = FALSE;
31
+    private $TLength = 60; // 1M
32
+    private $TPeriods = array('H' => 3600, 'M' => 60, 'S' => 1);
33
+
34
+    private $supportedHashFunctions = array('SHA1' => 20, 'SHA256' => 32, 'SHA512' => 64);
35
+
36
+
37
+    public function __construct($ocraSuite) {
38
+        $this->parseOCRASuite($ocraSuite);
39
+    }
40
+
41
+    /**
42
+     * Inspired by https://github.com/bdauvergne/python-oath
43
+     */
44
+    private function parseOCRASuite($ocraSuite) {
45
+        if (!is_string($ocraSuite)) {
46
+            throw new Exception('OCRASuite not in string format: ' . var_export($ocraSuite, TRUE));
47
+        }
48
+
49
+        $ocraSuite = strtoupper($ocraSuite);
50
+        $this->OCRASuite = $ocraSuite;
51
+
52
+        $s = explode(':', $ocraSuite);
53
+        if (count($s) != 3) {
54
+            throw new Exception('Invalid OCRASuite format: ' . var_export($ocraSuite, TRUE));
55
+        }
56
+
57
+        $algo = explode('-', $s[0]);
58
+        if (count($algo) != 2) {
59
+            throw new Exception('Invalid OCRA version: ' . var_export($s[0], TRUE));
60
+        }
61
+
62
+        if ($algo[0] !== 'OCRA') {
63
+            throw new Exception('Unsupported OCRA algorithm: ' . var_export($algo[0], TRUE));
64
+        }
65
+
66
+        if ($algo[1] !== '1') {
67
+            throw new Exception('Unsupported OCRA version: ' . var_export($algo[1], TRUE));
68
+        }
69
+        $this->OCRAVersion = $algo[1];
70
+
71
+        $cf = explode('-', $s[1]);
72
+        if (count($cf) != 3) {
73
+            throw new Exception('Invalid OCRA suite crypto function: ' . var_export($s[1], TRUE));
74
+        }
75
+
76
+        if ($cf[0] !== 'HOTP') {
77
+            throw new Exception('Unsupported OCRA suite crypto function: ' . var_export($cf[0], TRUE));
78
+        }
79
+        $this->CryptoFunctionType = $cf[0];
80
+
81
+        if (!array_key_exists($cf[1], $this->supportedHashFunctions)) {
82
+            throw new Exception('Unsupported hash function in OCRA suite crypto function: ' . var_export($cf[1], TRUE));
83
+        }
84
+        $this->CryptoFunctionHash = $cf[1];
85
+        $this->CryptoFunctionHashLength = $this->supportedHashFunctions[$cf[1]];
86
+
87
+        if (!preg_match('/^\d+$/', $cf[2]) || (($cf[2] < 4 || $cf[2] > 10) && $cf[2] != 0)) {
88
+            throw new Exception('Invalid OCRA suite crypto function truncation length: ' . var_export($cf[2], TRUE));
89
+        }
90
+        $this->CryptoFunctionTruncation = intval($cf[2]);
91
+
92
+        $di = explode('-', $s[2]);
93
+        if (count($cf) == 0) {
94
+            throw new Exception('Invalid OCRA suite data input: ' . var_export($s[2], TRUE));
95
+        }
96
+
97
+        $data_input = array();
98
+        foreach($di as $elem) {
99
+            $letter = $elem[0];
100
+            if (array_key_exists($letter, $data_input)) {
101
+                throw new Exception('Duplicate field in OCRA suite data input: ' . var_export($elem, TRUE));
102
+            }
103
+            $data_input[$letter] = 1;
104
+
105
+            if ($letter === 'C' && strlen($elem) == 1) {
106
+                $this->C = TRUE;
107
+            } elseif ($letter === 'Q') {
108
+                if (strlen($elem) == 1) {
109
+                    $this->Q = TRUE;
110
+                } elseif (preg_match('/^Q([AHN])(\d+)$/', $elem, $match)) {
111
+                    $q_len = intval($match[2]);
112
+                    if ($q_len < 4 || $q_len > 64) {
113
+                        throw new Exception('Invalid OCRA suite data input question length: ' . var_export($q_len, TRUE));
114
+                    }
115
+                    $this->Q = TRUE;
116
+                    $this->QType = $match[1];
117
+                    $this->QLength = $q_len;
118
+                } else {
119
+                    throw new Exception('Invalid OCRA suite data input question: ' . var_export($elem, TRUE));
120
+                }
121
+            } elseif ($letter === 'P') {
122
+                if (strlen($elem) == 1) {
123
+                    $this->P = TRUE;
124
+                } else {
125
+                    $p_algo = substr($elem, 1);
126
+                    if (!array_key_exists($p_algo, $this->supportedHashFunctions)) {
127
+                        throw new Exception('Unsupported OCRA suite PIN hash function: ' . var_export($elem, TRUE));
128
+                    }
129
+                    $this->P = TRUE;
130
+                    $this->PType = $p_algo;
131
+                    $this->PLength = $this->supportedHashFunctions[$p_algo];
132
+                }
133
+            } elseif ($letter === 'S') {
134
+                if (strlen($elem) == 1) {
135
+                    $this->S = TRUE;
136
+                } elseif (preg_match('/^S(\d+)$/', $elem, $match)) {
137
+                    $s_len = intval($match[1]);
138
+                    if ($s_len <= 0 || $s_len > 512) {
139
+                        throw new Exception('Invalid OCRA suite data input session information length: ' . var_export($s_len, TRUE));
140
+                    }
141
+
142
+                    $this->S = TRUE;
143
+                    $this->SLength = $s_len;
144
+                } else {
145
+                    throw new Exception('Invalid OCRA suite data input session information length: ' . var_export($elem, TRUE));
146
+                }
147
+            } elseif ($letter === 'T') {
148
+                if (strlen($elem) == 1) {
149
+                    $this->T = TRUE;
150
+                } elseif (preg_match('/^T(\d+[HMS])+$/', $elem)) {
151
+                    preg_match_all('/(\d+)([HMS])/', $elem, $match);
152
+
153
+                    if (count($match[1]) !== count(array_unique($match[2]))) {
154
+                        throw new Exception('Duplicate definitions in OCRA suite data input timestamp: ' . var_export($elem, TRUE));
155
+                    }
156
+
157
+                    $length = 0;
158
+                    for ($i = 0; $i < count($match[1]); $i++) {
159
+                        $length += intval($match[1][$i]) * $this->TPeriods[$match[2][$i]];
160
+                    }
161
+                    if ($length <= 0) {
162
+                        throw new Exception('Invalid OCRA suite data input timestamp: ' . var_export($elem, TRUE));
163
+                    }
164
+
165
+                    $this->T = TRUE;
166
+                    $this->TLength = $length;
167
+                } else {
168
+                    throw new Exception('Invalid OCRA suite data input timestamp: ' . var_export($elem, TRUE));
169
+                }
170
+            } else {
171
+                throw new Exception('Unsupported OCRA suite data input field: ' . var_export($elem, TRUE));
172
+            }
173
+        }
174
+
175
+        if (!$this->Q) {
176
+            throw new Exception('OCRA suite data input question not defined: ' . var_export($s[2], TRUE));
177
+        }
178
+    }
179
+
180
+    public function generateChallenge() {
181
+        $q_length = $this->QLength;
182
+        $q_type = $this->QType;
183 183
 
184 184
         $bytes = Tiqr_Random::randomBytes($q_length);
185 185
 
186
-		switch($q_type) {
187
-			case 'A':
188
-				$challenge = base64_encode($bytes);
189
-				$tr = implode("", unpack('H*', $bytes));
190
-				$challenge = rtrim(strtr($challenge, '+/', $tr), '=');
191
-				break;
192
-			case 'H':
193
-				$challenge = implode("", unpack('H*', $bytes));
194
-				break;
195
-			case 'N':
196
-				$challenge = implode("", unpack('N*', $bytes));
197
-				break;
198
-			default:
199
-				throw new Exception('Unsupported OCRASuite challenge type: ' . var_export($q_type, TRUE));
200
-				break;
201
-		}
202
-
203
-		$challenge = substr($challenge, 0, $q_length);
204
-
205
-		return $challenge;
206
-	}
207
-
208
-
209
-	public function generateSessionInformation() {
210
-		if (!$this->S) {
211
-			throw new Exception('Session information not defined in OCRASuite: ' . var_export($this->OCRASuite, TRUE));
212
-		}
213
-
214
-		$s_length = $this->SLength;
186
+        switch($q_type) {
187
+            case 'A':
188
+                $challenge = base64_encode($bytes);
189
+                $tr = implode("", unpack('H*', $bytes));
190
+                $challenge = rtrim(strtr($challenge, '+/', $tr), '=');
191
+                break;
192
+            case 'H':
193
+                $challenge = implode("", unpack('H*', $bytes));
194
+                break;
195
+            case 'N':
196
+                $challenge = implode("", unpack('N*', $bytes));
197
+                break;
198
+            default:
199
+                throw new Exception('Unsupported OCRASuite challenge type: ' . var_export($q_type, TRUE));
200
+                break;
201
+        }
202
+
203
+        $challenge = substr($challenge, 0, $q_length);
204
+
205
+        return $challenge;
206
+    }
207
+
208
+
209
+    public function generateSessionInformation() {
210
+        if (!$this->S) {
211
+            throw new Exception('Session information not defined in OCRASuite: ' . var_export($this->OCRASuite, TRUE));
212
+        }
213
+
214
+        $s_length = $this->SLength;
215 215
         $bytes = Tiqr_Random::randomBytes($s_length);
216 216
 
217
-		// The OCRA spec doesn't specify that the session data should be hexadecimal.
218
-		// However the reference implementation in the RFC does treat it as hex.
219
-		$session = bin2hex($bytes);
217
+        // The OCRA spec doesn't specify that the session data should be hexadecimal.
218
+        // However the reference implementation in the RFC does treat it as hex.
219
+        $session = bin2hex($bytes);
220 220
 		
221
-		$session = substr($session, 0, $s_length);
221
+        $session = substr($session, 0, $s_length);
222 222
 		
223
-		return $session;
224
-	}
225
-
226
-
227
-	/**
228
-	 * Constant time string comparison, see http://codahale.com/a-lesson-in-timing-attacks/
229
-	 */
230
-	public static function constEqual($s1, $s2) {
231
-		if (strlen($s1) != strlen($s2)) {
232
-			return FALSE;
233
-		}
234
-
235
-		$result = TRUE;
236
-		$length = strlen($s1);
237
-		for ($i = 0; $i < $length; $i++) {
238
-			$result &= ($s1[$i] == $s2[$i]);
239
-		}
240
-
241
-		return (boolean)$result;
242
-	}
223
+        return $session;
224
+    }
225
+
226
+
227
+    /**
228
+     * Constant time string comparison, see http://codahale.com/a-lesson-in-timing-attacks/
229
+     */
230
+    public static function constEqual($s1, $s2) {
231
+        if (strlen($s1) != strlen($s2)) {
232
+            return FALSE;
233
+        }
234
+
235
+        $result = TRUE;
236
+        $length = strlen($s1);
237
+        for ($i = 0; $i < $length; $i++) {
238
+            $result &= ($s1[$i] == $s2[$i]);
239
+        }
240
+
241
+        return (boolean)$result;
242
+    }
243 243
 
244 244
 }
Please login to merge, or discard this patch.
Spacing   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3
-require_once ( __DIR__ . "/../Tiqr/Random.php");
3
+require_once (__DIR__."/../Tiqr/Random.php");
4 4
 
5 5
 class OATH_OCRAParser {
6 6
 
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
 	 */
44 44
 	private function parseOCRASuite($ocraSuite) {
45 45
 		if (!is_string($ocraSuite)) {
46
-			throw new Exception('OCRASuite not in string format: ' . var_export($ocraSuite, TRUE));
46
+			throw new Exception('OCRASuite not in string format: '.var_export($ocraSuite, TRUE));
47 47
 		}
48 48
 
49 49
 		$ocraSuite = strtoupper($ocraSuite);
@@ -51,54 +51,54 @@  discard block
 block discarded – undo
51 51
 
52 52
 		$s = explode(':', $ocraSuite);
53 53
 		if (count($s) != 3) {
54
-			throw new Exception('Invalid OCRASuite format: ' . var_export($ocraSuite, TRUE));
54
+			throw new Exception('Invalid OCRASuite format: '.var_export($ocraSuite, TRUE));
55 55
 		}
56 56
 
57 57
 		$algo = explode('-', $s[0]);
58 58
 		if (count($algo) != 2) {
59
-			throw new Exception('Invalid OCRA version: ' . var_export($s[0], TRUE));
59
+			throw new Exception('Invalid OCRA version: '.var_export($s[0], TRUE));
60 60
 		}
61 61
 
62 62
 		if ($algo[0] !== 'OCRA') {
63
-			throw new Exception('Unsupported OCRA algorithm: ' . var_export($algo[0], TRUE));
63
+			throw new Exception('Unsupported OCRA algorithm: '.var_export($algo[0], TRUE));
64 64
 		}
65 65
 
66 66
 		if ($algo[1] !== '1') {
67
-			throw new Exception('Unsupported OCRA version: ' . var_export($algo[1], TRUE));
67
+			throw new Exception('Unsupported OCRA version: '.var_export($algo[1], TRUE));
68 68
 		}
69 69
 		$this->OCRAVersion = $algo[1];
70 70
 
71 71
 		$cf = explode('-', $s[1]);
72 72
 		if (count($cf) != 3) {
73
-			throw new Exception('Invalid OCRA suite crypto function: ' . var_export($s[1], TRUE));
73
+			throw new Exception('Invalid OCRA suite crypto function: '.var_export($s[1], TRUE));
74 74
 		}
75 75
 
76 76
 		if ($cf[0] !== 'HOTP') {
77
-			throw new Exception('Unsupported OCRA suite crypto function: ' . var_export($cf[0], TRUE));
77
+			throw new Exception('Unsupported OCRA suite crypto function: '.var_export($cf[0], TRUE));
78 78
 		}
79 79
 		$this->CryptoFunctionType = $cf[0];
80 80
 
81 81
 		if (!array_key_exists($cf[1], $this->supportedHashFunctions)) {
82
-			throw new Exception('Unsupported hash function in OCRA suite crypto function: ' . var_export($cf[1], TRUE));
82
+			throw new Exception('Unsupported hash function in OCRA suite crypto function: '.var_export($cf[1], TRUE));
83 83
 		}
84 84
 		$this->CryptoFunctionHash = $cf[1];
85 85
 		$this->CryptoFunctionHashLength = $this->supportedHashFunctions[$cf[1]];
86 86
 
87 87
 		if (!preg_match('/^\d+$/', $cf[2]) || (($cf[2] < 4 || $cf[2] > 10) && $cf[2] != 0)) {
88
-			throw new Exception('Invalid OCRA suite crypto function truncation length: ' . var_export($cf[2], TRUE));
88
+			throw new Exception('Invalid OCRA suite crypto function truncation length: '.var_export($cf[2], TRUE));
89 89
 		}
90 90
 		$this->CryptoFunctionTruncation = intval($cf[2]);
91 91
 
92 92
 		$di = explode('-', $s[2]);
93 93
 		if (count($cf) == 0) {
94
-			throw new Exception('Invalid OCRA suite data input: ' . var_export($s[2], TRUE));
94
+			throw new Exception('Invalid OCRA suite data input: '.var_export($s[2], TRUE));
95 95
 		}
96 96
 
97 97
 		$data_input = array();
98
-		foreach($di as $elem) {
98
+		foreach ($di as $elem) {
99 99
 			$letter = $elem[0];
100 100
 			if (array_key_exists($letter, $data_input)) {
101
-				throw new Exception('Duplicate field in OCRA suite data input: ' . var_export($elem, TRUE));
101
+				throw new Exception('Duplicate field in OCRA suite data input: '.var_export($elem, TRUE));
102 102
 			}
103 103
 			$data_input[$letter] = 1;
104 104
 
@@ -110,13 +110,13 @@  discard block
 block discarded – undo
110 110
 				} elseif (preg_match('/^Q([AHN])(\d+)$/', $elem, $match)) {
111 111
 					$q_len = intval($match[2]);
112 112
 					if ($q_len < 4 || $q_len > 64) {
113
-						throw new Exception('Invalid OCRA suite data input question length: ' . var_export($q_len, TRUE));
113
+						throw new Exception('Invalid OCRA suite data input question length: '.var_export($q_len, TRUE));
114 114
 					}
115 115
 					$this->Q = TRUE;
116 116
 					$this->QType = $match[1];
117 117
 					$this->QLength = $q_len;
118 118
 				} else {
119
-					throw new Exception('Invalid OCRA suite data input question: ' . var_export($elem, TRUE));
119
+					throw new Exception('Invalid OCRA suite data input question: '.var_export($elem, TRUE));
120 120
 				}
121 121
 			} elseif ($letter === 'P') {
122 122
 				if (strlen($elem) == 1) {
@@ -124,7 +124,7 @@  discard block
 block discarded – undo
124 124
 				} else {
125 125
 					$p_algo = substr($elem, 1);
126 126
 					if (!array_key_exists($p_algo, $this->supportedHashFunctions)) {
127
-						throw new Exception('Unsupported OCRA suite PIN hash function: ' . var_export($elem, TRUE));
127
+						throw new Exception('Unsupported OCRA suite PIN hash function: '.var_export($elem, TRUE));
128 128
 					}
129 129
 					$this->P = TRUE;
130 130
 					$this->PType = $p_algo;
@@ -136,13 +136,13 @@  discard block
 block discarded – undo
136 136
 				} elseif (preg_match('/^S(\d+)$/', $elem, $match)) {
137 137
 					$s_len = intval($match[1]);
138 138
 					if ($s_len <= 0 || $s_len > 512) {
139
-						throw new Exception('Invalid OCRA suite data input session information length: ' . var_export($s_len, TRUE));
139
+						throw new Exception('Invalid OCRA suite data input session information length: '.var_export($s_len, TRUE));
140 140
 					}
141 141
 
142 142
 					$this->S = TRUE;
143 143
 					$this->SLength = $s_len;
144 144
 				} else {
145
-					throw new Exception('Invalid OCRA suite data input session information length: ' . var_export($elem, TRUE));
145
+					throw new Exception('Invalid OCRA suite data input session information length: '.var_export($elem, TRUE));
146 146
 				}
147 147
 			} elseif ($letter === 'T') {
148 148
 				if (strlen($elem) == 1) {
@@ -151,7 +151,7 @@  discard block
 block discarded – undo
151 151
 					preg_match_all('/(\d+)([HMS])/', $elem, $match);
152 152
 
153 153
 					if (count($match[1]) !== count(array_unique($match[2]))) {
154
-						throw new Exception('Duplicate definitions in OCRA suite data input timestamp: ' . var_export($elem, TRUE));
154
+						throw new Exception('Duplicate definitions in OCRA suite data input timestamp: '.var_export($elem, TRUE));
155 155
 					}
156 156
 
157 157
 					$length = 0;
@@ -159,21 +159,21 @@  discard block
 block discarded – undo
159 159
 						$length += intval($match[1][$i]) * $this->TPeriods[$match[2][$i]];
160 160
 					}
161 161
 					if ($length <= 0) {
162
-						throw new Exception('Invalid OCRA suite data input timestamp: ' . var_export($elem, TRUE));
162
+						throw new Exception('Invalid OCRA suite data input timestamp: '.var_export($elem, TRUE));
163 163
 					}
164 164
 
165 165
 					$this->T = TRUE;
166 166
 					$this->TLength = $length;
167 167
 				} else {
168
-					throw new Exception('Invalid OCRA suite data input timestamp: ' . var_export($elem, TRUE));
168
+					throw new Exception('Invalid OCRA suite data input timestamp: '.var_export($elem, TRUE));
169 169
 				}
170 170
 			} else {
171
-				throw new Exception('Unsupported OCRA suite data input field: ' . var_export($elem, TRUE));
171
+				throw new Exception('Unsupported OCRA suite data input field: '.var_export($elem, TRUE));
172 172
 			}
173 173
 		}
174 174
 
175 175
 		if (!$this->Q) {
176
-			throw new Exception('OCRA suite data input question not defined: ' . var_export($s[2], TRUE));
176
+			throw new Exception('OCRA suite data input question not defined: '.var_export($s[2], TRUE));
177 177
 		}
178 178
 	}
179 179
 
@@ -183,7 +183,7 @@  discard block
 block discarded – undo
183 183
 
184 184
         $bytes = Tiqr_Random::randomBytes($q_length);
185 185
 
186
-		switch($q_type) {
186
+		switch ($q_type) {
187 187
 			case 'A':
188 188
 				$challenge = base64_encode($bytes);
189 189
 				$tr = implode("", unpack('H*', $bytes));
@@ -196,7 +196,7 @@  discard block
 block discarded – undo
196 196
 				$challenge = implode("", unpack('N*', $bytes));
197 197
 				break;
198 198
 			default:
199
-				throw new Exception('Unsupported OCRASuite challenge type: ' . var_export($q_type, TRUE));
199
+				throw new Exception('Unsupported OCRASuite challenge type: '.var_export($q_type, TRUE));
200 200
 				break;
201 201
 		}
202 202
 
@@ -208,7 +208,7 @@  discard block
 block discarded – undo
208 208
 
209 209
 	public function generateSessionInformation() {
210 210
 		if (!$this->S) {
211
-			throw new Exception('Session information not defined in OCRASuite: ' . var_export($this->OCRASuite, TRUE));
211
+			throw new Exception('Session information not defined in OCRASuite: '.var_export($this->OCRASuite, TRUE));
212 212
 		}
213 213
 
214 214
 		$s_length = $this->SLength;
@@ -238,7 +238,7 @@  discard block
 block discarded – undo
238 238
 			$result &= ($s1[$i] == $s2[$i]);
239 239
 		}
240 240
 
241
-		return (boolean)$result;
241
+		return (boolean) $result;
242 242
 	}
243 243
 
244 244
 }
Please login to merge, or discard this patch.
library/tiqr/Tiqr/Random.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -39,7 +39,7 @@
 block discarded – undo
39 39
     public static function randomBytes($length)
40 40
     {
41 41
         // Get $length cryptographically secure pseudo-random bytes
42
-        $rnd=\random_bytes($length);
42
+        $rnd = \random_bytes($length);
43 43
 
44 44
         if (strlen($rnd) !== $length) {
45 45
             throw new Exception("random_bytes did not return the requested number of bytes");
Please login to merge, or discard this patch.
library/tiqr/Tiqr/StateStorage/Pdo.php 1 patch
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -72,9 +72,9 @@  discard block
 block discarded – undo
72 72
      * (non-PHPdoc)
73 73
      * @see library/tiqr/Tiqr/StateStorage/Tiqr_StateStorage_Abstract::setValue()
74 74
      */
75
-    public function setValue($key, $value, $expire=0)
75
+    public function setValue($key, $value, $expire = 0)
76 76
     {
77
-        if (((float) rand() /(float) getrandmax()) < $this->cleanupProbability) {
77
+        if (((float) rand() / (float) getrandmax()) < $this->cleanupProbability) {
78 78
             $this->cleanExpired();
79 79
         }
80 80
         if ($this->keyExists($key)) {
@@ -84,9 +84,9 @@  discard block
 block discarded – undo
84 84
         }
85 85
         // $expire == 0 means never expire
86 86
         if ($expire != 0) {
87
-            $expire+=time();    // Store unix timestamp after which the expires
87
+            $expire += time(); // Store unix timestamp after which the expires
88 88
         }
89
-        $sth->execute(array(serialize($value),$expire,$key));
89
+        $sth->execute(array(serialize($value), $expire, $key));
90 90
     }
91 91
         
92 92
     /**
@@ -110,7 +110,7 @@  discard block
 block discarded – undo
110 110
             if (false === $sth) {
111 111
                 return NULL;
112 112
             }
113
-            if (false === $sth->execute(array($key, time())) ) {
113
+            if (false === $sth->execute(array($key, time()))) {
114 114
                 return NULL;
115 115
             }
116 116
             $result = $sth->fetchColumn();
Please login to merge, or discard this patch.
library/tiqr/Tiqr/StateStorage.php 1 patch
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
      *                       options per type.
44 44
      * @throws Exception If an unknown type is requested.
45 45
      */
46
-    public static function getStorage($type="file", $options=array())
46
+    public static function getStorage($type = "file", $options = array())
47 47
     {
48 48
         switch ($type) {
49 49
             case "file":
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
                     }
70 70
                 }
71 71
 
72
-                $pdoInstance = new PDO($options['dsn'],$options['username'],$options['password']);
72
+                $pdoInstance = new PDO($options['dsn'], $options['username'], $options['password']);
73 73
                 // Set a hard-coded default for the probability the expired state is removed
74 74
                 // 0.1 translates to a 10% chance the garbage collection is executed
75 75
                 $cleanupProbability = 0.1;
@@ -84,9 +84,9 @@  discard block
 block discarded – undo
84 84
                 if (!isset($type)) {
85 85
                     throw new Exception('Class name not set');
86 86
                 } elseif (!class_exists($type)) {
87
-                    throw new Exception('Class not found: ' . var_export($type, TRUE));
87
+                    throw new Exception('Class not found: '.var_export($type, TRUE));
88 88
                 } elseif (!is_subclass_of($type, 'Tiqr_StateStorage_Abstract')) {
89
-                    throw new Exception('Class ' . $type . ' not subclass of Tiqr_StateStorage_Abstract');
89
+                    throw new Exception('Class '.$type.' not subclass of Tiqr_StateStorage_Abstract');
90 90
                 }
91 91
                 $instance = new $type($options);
92 92
         }
Please login to merge, or discard this patch.