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

Side by Side Diff: src/pkg/crypto/cipher/benchmark_test.go

Issue 24250044: crypto/cipher: speed up xor operations in CBC, OBF, CTR... (Closed)
Patch Set: diff -r c8d3de543c1b https://code.google.com/p/go Created 10 years, 3 months 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:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/pkg/crypto/cipher/cbc.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package cipher_test
6
7 import (
8 "crypto/aes"
9 "crypto/cipher"
10 "testing"
11 )
12
13 func BenchmarkAESGCMSeal1K(b *testing.B) {
14 buf := make([]byte, 1024)
15 b.SetBytes(int64(len(buf)))
16
17 var key [16]byte
18 var nonce [12]byte
19 aes, _ := aes.NewCipher(key[:])
20 aesgcm, _ := cipher.NewGCM(aes)
21 var out []byte
22
23 b.ResetTimer()
24 for i := 0; i < b.N; i++ {
25 out = aesgcm.Seal(out[:0], nonce[:], buf, nonce[:])
26 }
27 }
28
29 func BenchmarkAESGCMOpen1K(b *testing.B) {
30 buf := make([]byte, 1024)
31 b.SetBytes(int64(len(buf)))
32
33 var key [16]byte
34 var nonce [12]byte
35 aes, _ := aes.NewCipher(key[:])
36 aesgcm, _ := cipher.NewGCM(aes)
37 var out []byte
38 out = aesgcm.Seal(out[:0], nonce[:], buf, nonce[:])
39
40 b.ResetTimer()
41 for i := 0; i < b.N; i++ {
42 _, err := aesgcm.Open(buf[:0], nonce[:], out, nonce[:])
43 if err != nil {
44 b.Errorf("Open: %v", err)
45 }
46 }
47 }
48
49 // If we test exactly 1K blocks, we would generate exact multiples of
50 // the cipher's block size, and and the cipher stream fragments would
51 // always be wordsize aligned, whereas non-aligned is a more typical
52 // use-case.
53 const almost1K = 1024 - 5
54
55 func BenchmarkAESCFBEncrypt1K(b *testing.B) {
56 buf := make([]byte, almost1K)
57 b.SetBytes(int64(len(buf)))
58
59 var key [16]byte
60 var iv [16]byte
61 aes, _ := aes.NewCipher(key[:])
62 ctr := cipher.NewCFBEncrypter(aes, iv[:])
63
64 b.ResetTimer()
65 for i := 0; i < b.N; i++ {
66 ctr.XORKeyStream(buf, buf)
67 }
68 }
69
70 func BenchmarkAESCFBDecrypt1K(b *testing.B) {
71 buf := make([]byte, almost1K)
72 b.SetBytes(int64(len(buf)))
73
74 var key [16]byte
75 var iv [16]byte
76 aes, _ := aes.NewCipher(key[:])
77 ctr := cipher.NewCFBDecrypter(aes, iv[:])
78
79 b.ResetTimer()
80 for i := 0; i < b.N; i++ {
81 ctr.XORKeyStream(buf, buf)
82 }
83 }
84
85 func BenchmarkAESOFB1K(b *testing.B) {
86 buf := make([]byte, almost1K)
87 b.SetBytes(int64(len(buf)))
88
89 var key [16]byte
90 var iv [16]byte
91 aes, _ := aes.NewCipher(key[:])
92 ctr := cipher.NewOFB(aes, iv[:])
93
94 b.ResetTimer()
95 for i := 0; i < b.N; i++ {
96 ctr.XORKeyStream(buf, buf)
97 }
98 }
99
100 func BenchmarkAESCTR1K(b *testing.B) {
101 buf := make([]byte, almost1K)
102 b.SetBytes(int64(len(buf)))
103
104 var key [16]byte
105 var iv [16]byte
106 aes, _ := aes.NewCipher(key[:])
107 ctr := cipher.NewCTR(aes, iv[:])
108
109 b.ResetTimer()
110 for i := 0; i < b.N; i++ {
111 ctr.XORKeyStream(buf, buf)
112 }
113 }
114
115 func BenchmarkAESCBCEncrypt1K(b *testing.B) {
116 buf := make([]byte, 1024)
117 b.SetBytes(int64(len(buf)))
118
119 var key [16]byte
120 var iv [16]byte
121 aes, _ := aes.NewCipher(key[:])
122 cbc := cipher.NewCBCEncrypter(aes, iv[:])
123 for i := 0; i < b.N; i++ {
124 cbc.CryptBlocks(buf, buf)
125 }
126 }
127
128 func BenchmarkAESCBCDecrypt1K(b *testing.B) {
129 buf := make([]byte, 1024)
130 b.SetBytes(int64(len(buf)))
131
132 var key [16]byte
133 var iv [16]byte
134 aes, _ := aes.NewCipher(key[:])
135 cbc := cipher.NewCBCDecrypter(aes, iv[:])
136 for i := 0; i < b.N; i++ {
137 cbc.CryptBlocks(buf, buf)
138 }
139 }
OLDNEW
« no previous file with comments | « no previous file | src/pkg/crypto/cipher/cbc.go » ('j') | no next file with comments »

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