Skip to content

Commit 46b6ed7

Browse files
committed
对称加密重构完成
1 parent 59ab513 commit 46b6ed7

File tree

7 files changed

+107
-104
lines changed

7 files changed

+107
-104
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ fmt:
66
go fmt ./...
77

88
test:
9-
go test -cover -count=1 -test.cpu=1 ./...
9+
go test -v -cover ./...
1010

1111
bench:
1212
go test -v ./_examples/hash_test.go -bench=. -benchtime=1s

_examples/aes.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,27 @@ import (
1010

1111
"github.com/FishGoddess/cryptox/aes"
1212
"github.com/FishGoddess/cryptox/bytes/encoding"
13-
"github.com/FishGoddess/cryptox/bytes/padding"
1413
)
1514

1615
func main() {
1716
// As you know, key is necessary in aes.
1817
// However, not all modes need iv, such as ecb.
1918
key := []byte("12345678876543211234567887654321")
20-
iv := []byte("8765432112345678")
19+
nonce := []byte("123456abcdef")
2120

2221
msg := []byte("你好,世界")
2322
fmt.Printf("msg: %s\n", msg)
2423

25-
// Use ctr mode to encrypt data with no padding and encoding base64.
26-
encrypt, err := aes.EncryptCTR(msg, key, iv, padding.None, encoding.Base64)
24+
// Use gcm mode to encrypt data with no padding and encoding base64.
25+
encrypt, err := aes.EncryptGCM(msg, key, nonce, nil, encoding.Base64)
2726
if err != nil {
2827
panic(err)
2928
}
3029

3130
fmt.Printf("encrypt: %s\n", encrypt)
3231

3332
// Decrypt data in the same way.
34-
decrypt, err := aes.DecryptCTR(encrypt, key, iv, padding.None, encoding.Base64)
33+
decrypt, err := aes.DecryptGCM(encrypt, key, nonce, nil, encoding.Base64)
3534
if err != nil {
3635
panic(err)
3736
}

_examples/aes_test.go

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,14 @@ func BenchmarkAES_EncryptCTR(b *testing.B) {
8484
}
8585
}
8686

87-
// go test -v -bench=^BenchmarkAESEncryptGCM$ -benchtime=1s aes_test.go
87+
// go test -v -bench=^BenchmarkAES_EncryptGCM$ -benchtime=1s aes_test.go
8888
func BenchmarkAES_EncryptGCM(b *testing.B) {
8989
b.ReportAllocs()
9090
b.ResetTimer()
9191

92+
add := []byte("8765432112345678")
9293
for i := 0; i < b.N; i++ {
93-
_, err := aes.EncryptGCM(aesBenchMsg, aesBenchKey, aesBenchNonce, nil, encoding.None)
94+
_, err := aes.EncryptGCM(aesBenchMsg, aesBenchKey, aesBenchNonce, add, encoding.None)
9495
if err != nil {
9596
b.Fatal(err)
9697
}
@@ -99,7 +100,7 @@ func BenchmarkAES_EncryptGCM(b *testing.B) {
99100

100101
// go test -v -bench=^BenchmarkAES_DecryptECB$ -benchtime=1s des_test.go
101102
func BenchmarkAES_DecryptECB(b *testing.B) {
102-
encrypted, err := aes.EncryptECB(aesBenchMsg, aesBenchKey, padding.PKCS7, encoding.None)
103+
encrypt, err := aes.EncryptECB(aesBenchMsg, aesBenchKey, padding.PKCS7, encoding.None)
103104
if err != nil {
104105
b.Fatal(err)
105106
}
@@ -108,7 +109,7 @@ func BenchmarkAES_DecryptECB(b *testing.B) {
108109
b.ResetTimer()
109110

110111
for i := 0; i < b.N; i++ {
111-
_, err := aes.DecryptECB(encrypted, aesBenchKey, padding.PKCS7, encoding.None)
112+
_, err := aes.DecryptECB(encrypt, aesBenchKey, padding.PKCS7, encoding.None)
112113
if err != nil {
113114
b.Fatal(err)
114115
}
@@ -117,7 +118,7 @@ func BenchmarkAES_DecryptECB(b *testing.B) {
117118

118119
// go test -v -bench=^BenchmarkAES_DecryptCBC$ -benchtime=1s des_test.go
119120
func BenchmarkAES_DecryptCBC(b *testing.B) {
120-
encrypted, err := aes.EncryptCBC(aesBenchMsg, aesBenchKey, aesBenchIV, padding.PKCS7, encoding.None)
121+
encrypt, err := aes.EncryptCBC(aesBenchMsg, aesBenchKey, aesBenchIV, padding.PKCS7, encoding.None)
121122
if err != nil {
122123
b.Fatal(err)
123124
}
@@ -126,7 +127,7 @@ func BenchmarkAES_DecryptCBC(b *testing.B) {
126127
b.ResetTimer()
127128

128129
for i := 0; i < b.N; i++ {
129-
_, err := aes.DecryptCBC(encrypted, aesBenchKey, aesBenchIV, padding.PKCS7, encoding.None)
130+
_, err := aes.DecryptCBC(encrypt, aesBenchKey, aesBenchIV, padding.PKCS7, encoding.None)
130131
if err != nil {
131132
b.Fatal(err)
132133
}
@@ -135,7 +136,7 @@ func BenchmarkAES_DecryptCBC(b *testing.B) {
135136

136137
// go test -v -bench=^BenchmarkAES_DecryptCFB$ -benchtime=1s des_test.go
137138
func BenchmarkAES_DecryptCFB(b *testing.B) {
138-
encrypted, err := aes.EncryptCFB(aesBenchMsg, aesBenchKey, aesBenchIV, padding.None, encoding.None)
139+
encrypt, err := aes.EncryptCFB(aesBenchMsg, aesBenchKey, aesBenchIV, padding.None, encoding.None)
139140
if err != nil {
140141
b.Fatal(err)
141142
}
@@ -144,7 +145,7 @@ func BenchmarkAES_DecryptCFB(b *testing.B) {
144145
b.ResetTimer()
145146

146147
for i := 0; i < b.N; i++ {
147-
_, err := aes.DecryptCFB(encrypted, aesBenchKey, aesBenchIV, padding.None, encoding.None)
148+
_, err := aes.DecryptCFB(encrypt, aesBenchKey, aesBenchIV, padding.None, encoding.None)
148149
if err != nil {
149150
b.Fatal(err)
150151
}
@@ -153,7 +154,7 @@ func BenchmarkAES_DecryptCFB(b *testing.B) {
153154

154155
// go test -v -bench=^BenchmarkAES_DecryptOFB$ -benchtime=1s des_test.go
155156
func BenchmarkAES_DecryptOFB(b *testing.B) {
156-
encrypted, err := aes.EncryptOFB(aesBenchMsg, aesBenchKey, aesBenchIV, padding.None, encoding.None)
157+
encrypt, err := aes.EncryptOFB(aesBenchMsg, aesBenchKey, aesBenchIV, padding.None, encoding.None)
157158
if err != nil {
158159
b.Fatal(err)
159160
}
@@ -162,7 +163,7 @@ func BenchmarkAES_DecryptOFB(b *testing.B) {
162163
b.ResetTimer()
163164

164165
for i := 0; i < b.N; i++ {
165-
_, err := aes.DecryptOFB(encrypted, aesBenchKey, aesBenchIV, padding.None, encoding.None)
166+
_, err := aes.DecryptOFB(encrypt, aesBenchKey, aesBenchIV, padding.None, encoding.None)
166167
if err != nil {
167168
b.Fatal(err)
168169
}
@@ -171,7 +172,7 @@ func BenchmarkAES_DecryptOFB(b *testing.B) {
171172

172173
// go test -v -bench=^BenchmarkAES_DecryptCTR$ -benchtime=1s des_test.go
173174
func BenchmarkAES_DecryptCTR(b *testing.B) {
174-
encrypted, err := aes.EncryptCTR(aesBenchMsg, aesBenchKey, aesBenchIV, padding.None, encoding.None)
175+
encrypt, err := aes.EncryptCTR(aesBenchMsg, aesBenchKey, aesBenchIV, padding.None, encoding.None)
175176
if err != nil {
176177
b.Fatal(err)
177178
}
@@ -180,16 +181,16 @@ func BenchmarkAES_DecryptCTR(b *testing.B) {
180181
b.ResetTimer()
181182

182183
for i := 0; i < b.N; i++ {
183-
_, err := aes.DecryptCTR(encrypted, aesBenchKey, aesBenchIV, padding.None, encoding.None)
184+
_, err := aes.DecryptCTR(encrypt, aesBenchKey, aesBenchIV, padding.None, encoding.None)
184185
if err != nil {
185186
b.Fatal(err)
186187
}
187188
}
188189
}
189190

190-
// go test -v -bench=^BenchmarkAESDecryptGCM$ -benchtime=1s aes_test.go
191+
// go test -v -bench=^BenchmarkAES_DecryptGCM$ -benchtime=1s aes_test.go
191192
func BenchmarkAES_DecryptGCM(b *testing.B) {
192-
encrypted, err := aes.EncryptGCM(aesBenchMsg, aesBenchKey, aesBenchNonce, nil, encoding.None)
193+
encrypt, err := aes.EncryptGCM(aesBenchMsg, aesBenchKey, aesBenchNonce, nil, encoding.None)
193194
if err != nil {
194195
b.Fatal(err)
195196
}
@@ -198,7 +199,7 @@ func BenchmarkAES_DecryptGCM(b *testing.B) {
198199
b.ResetTimer()
199200

200201
for i := 0; i < b.N; i++ {
201-
_, err := aes.DecryptGCM(encrypted, aesBenchKey, aesBenchNonce, nil, encoding.None)
202+
_, err := aes.DecryptGCM(encrypt, aesBenchKey, aesBenchNonce, nil, encoding.None)
202203
if err != nil {
203204
b.Fatal(err)
204205
}

_examples/des_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func BenchmarkDES_EncryptCTR(b *testing.B) {
8585

8686
// go test -v -bench=^BenchmarkDES_DecryptECB$ -benchtime=1s des_test.go
8787
func BenchmarkDES_DecryptECB(b *testing.B) {
88-
encrypted, err := des.EncryptECB(desBenchMsg, desBenchKey, padding.PKCS7, encoding.None)
88+
encrypt, err := des.EncryptECB(desBenchMsg, desBenchKey, padding.PKCS7, encoding.None)
8989
if err != nil {
9090
b.Fatal(err)
9191
}
@@ -94,7 +94,7 @@ func BenchmarkDES_DecryptECB(b *testing.B) {
9494
b.ResetTimer()
9595

9696
for i := 0; i < b.N; i++ {
97-
_, err := des.DecryptECB(encrypted, desBenchKey, padding.PKCS7, encoding.None)
97+
_, err := des.DecryptECB(encrypt, desBenchKey, padding.PKCS7, encoding.None)
9898
if err != nil {
9999
b.Fatal(err)
100100
}
@@ -103,7 +103,7 @@ func BenchmarkDES_DecryptECB(b *testing.B) {
103103

104104
// go test -v -bench=^BenchmarkDES_DecryptCBC$ -benchtime=1s des_test.go
105105
func BenchmarkDES_DecryptCBC(b *testing.B) {
106-
encrypted, err := des.EncryptCBC(desBenchMsg, desBenchKey, desBenchIV, padding.PKCS7, encoding.None)
106+
encrypt, err := des.EncryptCBC(desBenchMsg, desBenchKey, desBenchIV, padding.PKCS7, encoding.None)
107107
if err != nil {
108108
b.Fatal(err)
109109
}
@@ -112,7 +112,7 @@ func BenchmarkDES_DecryptCBC(b *testing.B) {
112112
b.ResetTimer()
113113

114114
for i := 0; i < b.N; i++ {
115-
_, err := des.DecryptCBC(encrypted, desBenchKey, desBenchIV, padding.PKCS7, encoding.None)
115+
_, err := des.DecryptCBC(encrypt, desBenchKey, desBenchIV, padding.PKCS7, encoding.None)
116116
if err != nil {
117117
b.Fatal(err)
118118
}
@@ -121,7 +121,7 @@ func BenchmarkDES_DecryptCBC(b *testing.B) {
121121

122122
// go test -v -bench=^BenchmarkDES_DecryptCFB$ -benchtime=1s des_test.go
123123
func BenchmarkDES_DecryptCFB(b *testing.B) {
124-
encrypted, err := des.EncryptCFB(desBenchMsg, desBenchKey, desBenchIV, padding.None, encoding.None)
124+
encrypt, err := des.EncryptCFB(desBenchMsg, desBenchKey, desBenchIV, padding.None, encoding.None)
125125
if err != nil {
126126
b.Fatal(err)
127127
}
@@ -130,7 +130,7 @@ func BenchmarkDES_DecryptCFB(b *testing.B) {
130130
b.ResetTimer()
131131

132132
for i := 0; i < b.N; i++ {
133-
_, err := des.DecryptCFB(encrypted, desBenchKey, desBenchIV, padding.None, encoding.None)
133+
_, err := des.DecryptCFB(encrypt, desBenchKey, desBenchIV, padding.None, encoding.None)
134134
if err != nil {
135135
b.Fatal(err)
136136
}
@@ -139,7 +139,7 @@ func BenchmarkDES_DecryptCFB(b *testing.B) {
139139

140140
// go test -v -bench=^BenchmarkDES_DecryptOFB$ -benchtime=1s des_test.go
141141
func BenchmarkDES_DecryptOFB(b *testing.B) {
142-
encrypted, err := des.EncryptOFB(desBenchMsg, desBenchKey, desBenchIV, padding.None, encoding.None)
142+
encrypt, err := des.EncryptOFB(desBenchMsg, desBenchKey, desBenchIV, padding.None, encoding.None)
143143
if err != nil {
144144
b.Fatal(err)
145145
}
@@ -148,7 +148,7 @@ func BenchmarkDES_DecryptOFB(b *testing.B) {
148148
b.ResetTimer()
149149

150150
for i := 0; i < b.N; i++ {
151-
_, err := des.DecryptOFB(encrypted, desBenchKey, desBenchIV, padding.None, encoding.None)
151+
_, err := des.DecryptOFB(encrypt, desBenchKey, desBenchIV, padding.None, encoding.None)
152152
if err != nil {
153153
b.Fatal(err)
154154
}
@@ -157,7 +157,7 @@ func BenchmarkDES_DecryptOFB(b *testing.B) {
157157

158158
// go test -v -bench=^BenchmarkDES_DecryptCTR$ -benchtime=1s des_test.go
159159
func BenchmarkDES_DecryptCTR(b *testing.B) {
160-
encrypted, err := des.EncryptCTR(desBenchMsg, desBenchKey, desBenchIV, padding.None, encoding.None)
160+
encrypt, err := des.EncryptCTR(desBenchMsg, desBenchKey, desBenchIV, padding.None, encoding.None)
161161
if err != nil {
162162
b.Fatal(err)
163163
}
@@ -166,7 +166,7 @@ func BenchmarkDES_DecryptCTR(b *testing.B) {
166166
b.ResetTimer()
167167

168168
for i := 0; i < b.N; i++ {
169-
_, err := des.DecryptCTR(encrypted, desBenchKey, desBenchIV, padding.None, encoding.None)
169+
_, err := des.DecryptCTR(encrypt, desBenchKey, desBenchIV, padding.None, encoding.None)
170170
if err != nil {
171171
b.Fatal(err)
172172
}

_examples/triple_des_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func BenchmarkDES_EncryptTripleCTR(b *testing.B) {
8585

8686
// go test -v -bench=^BenchmarkDES_DecryptTripleECB$ -benchtime=1s des_test.go
8787
func BenchmarkDES_DecryptTripleECB(b *testing.B) {
88-
encrypted, err := des.EncryptTripleECB(tripleDesBenchMsg, tripleDesBenchKey, padding.PKCS7, encoding.None)
88+
encrypt, err := des.EncryptTripleECB(tripleDesBenchMsg, tripleDesBenchKey, padding.PKCS7, encoding.None)
8989
if err != nil {
9090
b.Fatal(err)
9191
}
@@ -94,7 +94,7 @@ func BenchmarkDES_DecryptTripleECB(b *testing.B) {
9494
b.ResetTimer()
9595

9696
for i := 0; i < b.N; i++ {
97-
_, err := des.DecryptTripleECB(encrypted, tripleDesBenchKey, padding.PKCS7, encoding.None)
97+
_, err := des.DecryptTripleECB(encrypt, tripleDesBenchKey, padding.PKCS7, encoding.None)
9898
if err != nil {
9999
b.Fatal(err)
100100
}
@@ -103,7 +103,7 @@ func BenchmarkDES_DecryptTripleECB(b *testing.B) {
103103

104104
// go test -v -bench=^BenchmarkDES_DecryptTripleCBC$ -benchtime=1s des_test.go
105105
func BenchmarkDES_DecryptTripleCBC(b *testing.B) {
106-
encrypted, err := des.EncryptTripleCBC(tripleDesBenchMsg, tripleDesBenchKey, tripleDesBenchIV, padding.PKCS7, encoding.None)
106+
encrypt, err := des.EncryptTripleCBC(tripleDesBenchMsg, tripleDesBenchKey, tripleDesBenchIV, padding.PKCS7, encoding.None)
107107
if err != nil {
108108
b.Fatal(err)
109109
}
@@ -112,7 +112,7 @@ func BenchmarkDES_DecryptTripleCBC(b *testing.B) {
112112
b.ResetTimer()
113113

114114
for i := 0; i < b.N; i++ {
115-
_, err := des.DecryptTripleCBC(encrypted, tripleDesBenchKey, tripleDesBenchIV, padding.PKCS7, encoding.None)
115+
_, err := des.DecryptTripleCBC(encrypt, tripleDesBenchKey, tripleDesBenchIV, padding.PKCS7, encoding.None)
116116
if err != nil {
117117
b.Fatal(err)
118118
}
@@ -121,7 +121,7 @@ func BenchmarkDES_DecryptTripleCBC(b *testing.B) {
121121

122122
// go test -v -bench=^BenchmarkDES_DecryptTripleCFB$ -benchtime=1s des_test.go
123123
func BenchmarkDES_DecryptTripleCFB(b *testing.B) {
124-
encrypted, err := des.EncryptTripleCFB(tripleDesBenchMsg, tripleDesBenchKey, tripleDesBenchIV, padding.None, encoding.None)
124+
encrypt, err := des.EncryptTripleCFB(tripleDesBenchMsg, tripleDesBenchKey, tripleDesBenchIV, padding.None, encoding.None)
125125
if err != nil {
126126
b.Fatal(err)
127127
}
@@ -130,7 +130,7 @@ func BenchmarkDES_DecryptTripleCFB(b *testing.B) {
130130
b.ResetTimer()
131131

132132
for i := 0; i < b.N; i++ {
133-
_, err := des.DecryptTripleCFB(encrypted, tripleDesBenchKey, tripleDesBenchIV, padding.None, encoding.None)
133+
_, err := des.DecryptTripleCFB(encrypt, tripleDesBenchKey, tripleDesBenchIV, padding.None, encoding.None)
134134
if err != nil {
135135
b.Fatal(err)
136136
}
@@ -139,7 +139,7 @@ func BenchmarkDES_DecryptTripleCFB(b *testing.B) {
139139

140140
// go test -v -bench=^BenchmarkDES_DecryptTripleOFB$ -benchtime=1s des_test.go
141141
func BenchmarkDES_DecryptTripleOFB(b *testing.B) {
142-
encrypted, err := des.EncryptTripleOFB(tripleDesBenchMsg, tripleDesBenchKey, tripleDesBenchIV, padding.None, encoding.None)
142+
encrypt, err := des.EncryptTripleOFB(tripleDesBenchMsg, tripleDesBenchKey, tripleDesBenchIV, padding.None, encoding.None)
143143
if err != nil {
144144
b.Fatal(err)
145145
}
@@ -148,7 +148,7 @@ func BenchmarkDES_DecryptTripleOFB(b *testing.B) {
148148
b.ResetTimer()
149149

150150
for i := 0; i < b.N; i++ {
151-
_, err := des.DecryptTripleOFB(encrypted, tripleDesBenchKey, tripleDesBenchIV, padding.None, encoding.None)
151+
_, err := des.DecryptTripleOFB(encrypt, tripleDesBenchKey, tripleDesBenchIV, padding.None, encoding.None)
152152
if err != nil {
153153
b.Fatal(err)
154154
}
@@ -157,7 +157,7 @@ func BenchmarkDES_DecryptTripleOFB(b *testing.B) {
157157

158158
// go test -v -bench=^BenchmarkDES_DecryptTripleCTR$ -benchtime=1s des_test.go
159159
func BenchmarkDES_DecryptTripleCTR(b *testing.B) {
160-
encrypted, err := des.EncryptTripleCTR(tripleDesBenchMsg, tripleDesBenchKey, tripleDesBenchIV, padding.None, encoding.None)
160+
encrypt, err := des.EncryptTripleCTR(tripleDesBenchMsg, tripleDesBenchKey, tripleDesBenchIV, padding.None, encoding.None)
161161
if err != nil {
162162
b.Fatal(err)
163163
}
@@ -166,7 +166,7 @@ func BenchmarkDES_DecryptTripleCTR(b *testing.B) {
166166
b.ResetTimer()
167167

168168
for i := 0; i < b.N; i++ {
169-
_, err := des.DecryptTripleCTR(encrypted, tripleDesBenchKey, tripleDesBenchIV, padding.None, encoding.None)
169+
_, err := des.DecryptTripleCTR(encrypt, tripleDesBenchKey, tripleDesBenchIV, padding.None, encoding.None)
170170
if err != nil {
171171
b.Fatal(err)
172172
}

aes/aes.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,9 @@ func EncryptGCM(bs []byte, key []byte, nonce []byte, additional []byte, encoding
217217
return nil, err
218218
}
219219

220-
src := bytes.Clone(bs)
221-
dst := src[:0]
220+
src := bs
221+
dst := bytes.Clone(src)
222+
dst = dst[:0]
222223

223224
gcm, err := cipher.NewGCM(block)
224225
if err != nil {
@@ -242,7 +243,8 @@ func DecryptGCM(bs []byte, key []byte, nonce []byte, additional []byte, encoding
242243
return nil, err
243244
}
244245

245-
dst := src[:0]
246+
dst := bytes.Clone(src)
247+
dst = dst[:0]
246248

247249
gcm, err := cipher.NewGCM(block)
248250
if err != nil {

0 commit comments

Comments
 (0)