Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(93)

Delta Between Two Patch Sets: src/pkg/crypto/blowfish/block.go

Issue 217116: code review 217116: Implementation of the symmetric block cipher Blowfish. (Closed)
Left Patch Set: code review 217116: Implementation of the symmetric block cipher Blowfish. Created 15 years ago
Right Patch Set: code review 217116: Implementation of the symmetric block cipher Blowfish. Created 15 years ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « src/pkg/crypto/blowfish/Makefile ('k') | src/pkg/crypto/blowfish/blowfish_test.go » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 // Copyright 2010 The Go Authors. All rights reserved. 1 // Copyright 2010 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style 2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file. 3 // license that can be found in the LICENSE file.
4 4
5 package blowfish 5 package blowfish
6 6
7 func expandKey(key []byte, c *Cipher) { 7 func expandKey(key []byte, c *Cipher) {
8 » copy(c.p[0:], p) 8 » copy(&c.p, &p)
9 » copy(c.s0[0:], s0) 9 » copy(&c.s0, &s0)
10 » copy(c.s1[0:], s1) 10 » copy(&c.s1, &s1)
11 » copy(c.s2[0:], s2) 11 » copy(&c.s2, &s2)
12 » copy(c.s3[0:], s3) 12 » copy(&c.s3, &s3)
13 13
14 j := 0 14 j := 0
15 for i := 0; i < 18; i++ { 15 for i := 0; i < 18; i++ {
16 var d uint32 16 var d uint32
17 for k := 0; k < 4; k++ { 17 for k := 0; k < 4; k++ {
18 d = d<<8 | uint32(key[j])&0x000000FF 18 d = d<<8 | uint32(key[j])&0x000000FF
19 j++ 19 j++
20 if j >= len(key) { 20 if j >= len(key) {
21 j = 0 21 j = 0
22 } 22 }
(...skipping 18 matching lines...) Expand all
41 for i := 0; i < 256; i += 2 { 41 for i := 0; i < 256; i += 2 {
42 l, r = encryptBlock(l, r, c) 42 l, r = encryptBlock(l, r, c)
43 c.s2[i], c.s2[i+1] = l, r 43 c.s2[i], c.s2[i+1] = l, r
44 } 44 }
45 for i := 0; i < 256; i += 2 { 45 for i := 0; i < 256; i += 2 {
46 l, r = encryptBlock(l, r, c) 46 l, r = encryptBlock(l, r, c)
47 c.s3[i], c.s3[i+1] = l, r 47 c.s3[i], c.s3[i+1] = l, r
48 } 48 }
49 } 49 }
50 50
51 //func _F(ctx *Cipher, x uint32) uint32 {
52 // d := uint(x & 0xFF)
53 // c := uint(x >> 8 & 0xFF)
54 // b := uint(x >> 16 & 0xFF)
55 // a := uint(x >> 24 & 0xFF)
56 // result := ctx.s0[a] + ctx.s1[b]
57 // result ^= ctx.s2[c]
58 // result += ctx.s3[d]
59 // return result
60 //}
61
62 func encryptBlock(l, r uint32, c *Cipher) (uint32, uint32) { 51 func encryptBlock(l, r uint32, c *Cipher) (uint32, uint32) {
63 xl, xr := l, r 52 xl, xr := l, r
64 // for i := 0; i < 16; i++ {
65 // xl ^= c.p[i]
66 // xr ^= _F(c, xl)
67 // xl, xr = xr, xl
68 // }
69 // xl ^= c.p[16]
70 // xr ^= c.p[17]
71 xl ^= c.p[0] 53 xl ^= c.p[0]
72 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[1] 54 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[1]
73 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[2] 55 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[2]
74 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[3] 56 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[3]
75 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[4] 57 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[4]
76 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[5] 58 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[5]
77 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[6] 59 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[6]
78 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[7] 60 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[7]
79 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[8] 61 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[8]
80 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[9] 62 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[9]
81 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[10] 63 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[10]
82 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[11] 64 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[11]
83 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[12] 65 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[12]
84 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[13] 66 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[13]
85 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[14] 67 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[14]
86 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[15] 68 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[15]
87 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[16] 69 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[16]
88 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[1]
89 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[2]
90 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[3]
91 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[4]
92 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[5]
93 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[6]
94 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[7]
95 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[8]
96 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[9]
97 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[10]
98 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[11]
99 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[12]
100 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[13]
101 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[14]
102 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[15]
103 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[16]
104 xr ^= c.p[17] 70 xr ^= c.p[17]
105 return xr, xl 71 return xr, xl
106 } 72 }
107 73
108 func decryptBlock(l, r uint32, c *Cipher) (uint32, uint32) { 74 func decryptBlock(l, r uint32, c *Cipher) (uint32, uint32) {
109 xl, xr := l, r 75 xl, xr := l, r
110 // for i := 17; i > 1; i-- {
111 // xl ^= c.p[i]
112 // xr ^= _F(c, xl)
113 // xl, xr = xr, xl
114 // }
115 // xl ^= c.p[1]
116 // xr ^= c.p[0]
117 xl ^= c.p[17] 76 xl ^= c.p[17]
118 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[16] 77 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[16]
119 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[15] 78 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[15]
120 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[14] 79 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[14]
121 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[13] 80 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[13]
122 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[12] 81 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[12]
123 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[11] 82 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[11]
124 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[10] 83 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[10]
125 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[9] 84 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[9]
126 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[8] 85 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[8]
127 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[7] 86 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[7]
128 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[6] 87 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[6]
129 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[5] 88 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[5]
130 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[4] 89 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[4]
131 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[3] 90 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[3]
132 » //» xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16&0xFF)]) ^ c.s2[byt e(xl>>8&0xFF)]) + c.s3[byte(xl&0xFF)] ^ c.p[2] 91 » xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[2]
133 » //» xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16&0xFF)]) ^ c.s2[byt e(xr>>8&0xFF)]) + c.s3[byte(xr&0xFF)] ^ c.p[1] 92 » xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[1]
134 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[16]
135 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[15]
136 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[14]
137 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[13]
138 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[12]
139 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[11]
140 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[10]
141 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[9]
142 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[8]
143 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[7]
144 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[6]
145 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[5]
146 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[4]
147 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[3]
148 » xr ^= ((c.s0[xl>>24] + c.s1[xl>>16&0xFF]) ^ c.s2[xl>>8&0xFF]) + c.s3[xl& 0xFF] ^ c.p[2]
149 » xl ^= ((c.s0[xr>>24] + c.s1[xr>>16&0xFF]) ^ c.s2[xr>>8&0xFF]) + c.s3[xr& 0xFF] ^ c.p[1]
150 xr ^= c.p[0] 93 xr ^= c.p[0]
151 return xr, xl 94 return xr, xl
152 } 95 }
153 96
154 func zero(x []uint32) { 97 func zero(x []uint32) {
155 for i := range x { 98 for i := range x {
156 x[i] = 0 99 x[i] = 0
157 } 100 }
158 } 101 }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b