|
8 | 8 | "fmt"
|
9 | 9 | "io"
|
10 | 10 | "math"
|
11 |
| - "math/bits" |
12 | 11 |
|
13 | 12 | "nhooyr.io/websocket/internal/errd"
|
14 | 13 | )
|
@@ -172,125 +171,3 @@ func writeFrameHeader(h header, w *bufio.Writer, buf []byte) (err error) {
|
172 | 171 |
|
173 | 172 | return nil
|
174 | 173 | }
|
175 |
| - |
176 |
| -// mask applies the WebSocket masking algorithm to p |
177 |
| -// with the given key. |
178 |
| -// See https://tools.ietf.org/html/rfc6455#section-5.3 |
179 |
| -// |
180 |
| -// The returned value is the correctly rotated key to |
181 |
| -// to continue to mask/unmask the message. |
182 |
| -// |
183 |
| -// It is optimized for LittleEndian and expects the key |
184 |
| -// to be in little endian. |
185 |
| -// |
186 |
| -// See https://github.com/golang/go/issues/31586 |
187 |
| -func maskGo(key uint32, b []byte) uint32 { |
188 |
| - if len(b) >= 8 { |
189 |
| - key64 := uint64(key)<<32 | uint64(key) |
190 |
| - |
191 |
| - // At some point in the future we can clean these unrolled loops up. |
192 |
| - // See https://github.com/golang/go/issues/31586#issuecomment-487436401 |
193 |
| - |
194 |
| - // Then we xor until b is less than 128 bytes. |
195 |
| - for len(b) >= 128 { |
196 |
| - v := binary.LittleEndian.Uint64(b) |
197 |
| - binary.LittleEndian.PutUint64(b, v^key64) |
198 |
| - v = binary.LittleEndian.Uint64(b[8:16]) |
199 |
| - binary.LittleEndian.PutUint64(b[8:16], v^key64) |
200 |
| - v = binary.LittleEndian.Uint64(b[16:24]) |
201 |
| - binary.LittleEndian.PutUint64(b[16:24], v^key64) |
202 |
| - v = binary.LittleEndian.Uint64(b[24:32]) |
203 |
| - binary.LittleEndian.PutUint64(b[24:32], v^key64) |
204 |
| - v = binary.LittleEndian.Uint64(b[32:40]) |
205 |
| - binary.LittleEndian.PutUint64(b[32:40], v^key64) |
206 |
| - v = binary.LittleEndian.Uint64(b[40:48]) |
207 |
| - binary.LittleEndian.PutUint64(b[40:48], v^key64) |
208 |
| - v = binary.LittleEndian.Uint64(b[48:56]) |
209 |
| - binary.LittleEndian.PutUint64(b[48:56], v^key64) |
210 |
| - v = binary.LittleEndian.Uint64(b[56:64]) |
211 |
| - binary.LittleEndian.PutUint64(b[56:64], v^key64) |
212 |
| - v = binary.LittleEndian.Uint64(b[64:72]) |
213 |
| - binary.LittleEndian.PutUint64(b[64:72], v^key64) |
214 |
| - v = binary.LittleEndian.Uint64(b[72:80]) |
215 |
| - binary.LittleEndian.PutUint64(b[72:80], v^key64) |
216 |
| - v = binary.LittleEndian.Uint64(b[80:88]) |
217 |
| - binary.LittleEndian.PutUint64(b[80:88], v^key64) |
218 |
| - v = binary.LittleEndian.Uint64(b[88:96]) |
219 |
| - binary.LittleEndian.PutUint64(b[88:96], v^key64) |
220 |
| - v = binary.LittleEndian.Uint64(b[96:104]) |
221 |
| - binary.LittleEndian.PutUint64(b[96:104], v^key64) |
222 |
| - v = binary.LittleEndian.Uint64(b[104:112]) |
223 |
| - binary.LittleEndian.PutUint64(b[104:112], v^key64) |
224 |
| - v = binary.LittleEndian.Uint64(b[112:120]) |
225 |
| - binary.LittleEndian.PutUint64(b[112:120], v^key64) |
226 |
| - v = binary.LittleEndian.Uint64(b[120:128]) |
227 |
| - binary.LittleEndian.PutUint64(b[120:128], v^key64) |
228 |
| - b = b[128:] |
229 |
| - } |
230 |
| - |
231 |
| - // Then we xor until b is less than 64 bytes. |
232 |
| - for len(b) >= 64 { |
233 |
| - v := binary.LittleEndian.Uint64(b) |
234 |
| - binary.LittleEndian.PutUint64(b, v^key64) |
235 |
| - v = binary.LittleEndian.Uint64(b[8:16]) |
236 |
| - binary.LittleEndian.PutUint64(b[8:16], v^key64) |
237 |
| - v = binary.LittleEndian.Uint64(b[16:24]) |
238 |
| - binary.LittleEndian.PutUint64(b[16:24], v^key64) |
239 |
| - v = binary.LittleEndian.Uint64(b[24:32]) |
240 |
| - binary.LittleEndian.PutUint64(b[24:32], v^key64) |
241 |
| - v = binary.LittleEndian.Uint64(b[32:40]) |
242 |
| - binary.LittleEndian.PutUint64(b[32:40], v^key64) |
243 |
| - v = binary.LittleEndian.Uint64(b[40:48]) |
244 |
| - binary.LittleEndian.PutUint64(b[40:48], v^key64) |
245 |
| - v = binary.LittleEndian.Uint64(b[48:56]) |
246 |
| - binary.LittleEndian.PutUint64(b[48:56], v^key64) |
247 |
| - v = binary.LittleEndian.Uint64(b[56:64]) |
248 |
| - binary.LittleEndian.PutUint64(b[56:64], v^key64) |
249 |
| - b = b[64:] |
250 |
| - } |
251 |
| - |
252 |
| - // Then we xor until b is less than 32 bytes. |
253 |
| - for len(b) >= 32 { |
254 |
| - v := binary.LittleEndian.Uint64(b) |
255 |
| - binary.LittleEndian.PutUint64(b, v^key64) |
256 |
| - v = binary.LittleEndian.Uint64(b[8:16]) |
257 |
| - binary.LittleEndian.PutUint64(b[8:16], v^key64) |
258 |
| - v = binary.LittleEndian.Uint64(b[16:24]) |
259 |
| - binary.LittleEndian.PutUint64(b[16:24], v^key64) |
260 |
| - v = binary.LittleEndian.Uint64(b[24:32]) |
261 |
| - binary.LittleEndian.PutUint64(b[24:32], v^key64) |
262 |
| - b = b[32:] |
263 |
| - } |
264 |
| - |
265 |
| - // Then we xor until b is less than 16 bytes. |
266 |
| - for len(b) >= 16 { |
267 |
| - v := binary.LittleEndian.Uint64(b) |
268 |
| - binary.LittleEndian.PutUint64(b, v^key64) |
269 |
| - v = binary.LittleEndian.Uint64(b[8:16]) |
270 |
| - binary.LittleEndian.PutUint64(b[8:16], v^key64) |
271 |
| - b = b[16:] |
272 |
| - } |
273 |
| - |
274 |
| - // Then we xor until b is less than 8 bytes. |
275 |
| - for len(b) >= 8 { |
276 |
| - v := binary.LittleEndian.Uint64(b) |
277 |
| - binary.LittleEndian.PutUint64(b, v^key64) |
278 |
| - b = b[8:] |
279 |
| - } |
280 |
| - } |
281 |
| - |
282 |
| - // Then we xor until b is less than 4 bytes. |
283 |
| - for len(b) >= 4 { |
284 |
| - v := binary.LittleEndian.Uint32(b) |
285 |
| - binary.LittleEndian.PutUint32(b, v^key) |
286 |
| - b = b[4:] |
287 |
| - } |
288 |
| - |
289 |
| - // xor remaining bytes. |
290 |
| - for i := range b { |
291 |
| - b[i] ^= byte(key) |
292 |
| - key = bits.RotateLeft32(key, -8) |
293 |
| - } |
294 |
| - |
295 |
| - return key |
296 |
| -} |
0 commit comments