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 5package cipher_test 6 7import ( 8 "crypto/aes" 9 "crypto/cipher" 10 "testing" 11) 12 13func benchmarkAESGCMSign(b *testing.B, buf []byte) { 14 b.SetBytes(int64(len(buf))) 15 16 var key [16]byte 17 var nonce [12]byte 18 aes, _ := aes.NewCipher(key[:]) 19 aesgcm, _ := cipher.NewGCM(aes) 20 var out []byte 21 22 b.ResetTimer() 23 for i := 0; i < b.N; i++ { 24 out = aesgcm.Seal(out[:0], nonce[:], nil, buf) 25 } 26} 27 28func benchmarkAESGCMSeal(b *testing.B, buf []byte) { 29 b.SetBytes(int64(len(buf))) 30 31 var key [16]byte 32 var nonce [12]byte 33 var ad [13]byte 34 aes, _ := aes.NewCipher(key[:]) 35 aesgcm, _ := cipher.NewGCM(aes) 36 var out []byte 37 38 b.ResetTimer() 39 for i := 0; i < b.N; i++ { 40 out = aesgcm.Seal(out[:0], nonce[:], buf, ad[:]) 41 } 42} 43 44func benchmarkAESGCMOpen(b *testing.B, buf []byte) { 45 b.SetBytes(int64(len(buf))) 46 47 var key [16]byte 48 var nonce [12]byte 49 var ad [13]byte 50 aes, _ := aes.NewCipher(key[:]) 51 aesgcm, _ := cipher.NewGCM(aes) 52 var out []byte 53 out = aesgcm.Seal(out[:0], nonce[:], buf, ad[:]) 54 55 b.ResetTimer() 56 for i := 0; i < b.N; i++ { 57 _, err := aesgcm.Open(buf[:0], nonce[:], out, ad[:]) 58 if err != nil { 59 b.Errorf("Open: %v", err) 60 } 61 } 62} 63 64func BenchmarkAESGCMSeal1K(b *testing.B) { 65 benchmarkAESGCMSeal(b, make([]byte, 1024)) 66} 67 68func BenchmarkAESGCMOpen1K(b *testing.B) { 69 benchmarkAESGCMOpen(b, make([]byte, 1024)) 70} 71 72func BenchmarkAESGCMSign8K(b *testing.B) { 73 benchmarkAESGCMSign(b, make([]byte, 8*1024)) 74} 75 76func BenchmarkAESGCMSeal8K(b *testing.B) { 77 benchmarkAESGCMSeal(b, make([]byte, 8*1024)) 78} 79 80func BenchmarkAESGCMOpen8K(b *testing.B) { 81 benchmarkAESGCMOpen(b, make([]byte, 8*1024)) 82} 83 84// If we test exactly 1K blocks, we would generate exact multiples of 85// the cipher's block size, and the cipher stream fragments would 86// always be wordsize aligned, whereas non-aligned is a more typical 87// use-case. 88const almost1K = 1024 - 5 89 90func BenchmarkAESCFBEncrypt1K(b *testing.B) { 91 buf := make([]byte, almost1K) 92 b.SetBytes(int64(len(buf))) 93 94 var key [16]byte 95 var iv [16]byte 96 aes, _ := aes.NewCipher(key[:]) 97 ctr := cipher.NewCFBEncrypter(aes, iv[:]) 98 99 b.ResetTimer() 100 for i := 0; i < b.N; i++ { 101 ctr.XORKeyStream(buf, buf) 102 } 103} 104 105func BenchmarkAESCFBDecrypt1K(b *testing.B) { 106 buf := make([]byte, almost1K) 107 b.SetBytes(int64(len(buf))) 108 109 var key [16]byte 110 var iv [16]byte 111 aes, _ := aes.NewCipher(key[:]) 112 ctr := cipher.NewCFBDecrypter(aes, iv[:]) 113 114 b.ResetTimer() 115 for i := 0; i < b.N; i++ { 116 ctr.XORKeyStream(buf, buf) 117 } 118} 119 120func BenchmarkAESOFB1K(b *testing.B) { 121 buf := make([]byte, almost1K) 122 b.SetBytes(int64(len(buf))) 123 124 var key [16]byte 125 var iv [16]byte 126 aes, _ := aes.NewCipher(key[:]) 127 ctr := cipher.NewOFB(aes, iv[:]) 128 129 b.ResetTimer() 130 for i := 0; i < b.N; i++ { 131 ctr.XORKeyStream(buf, buf) 132 } 133} 134 135func BenchmarkAESCTR1K(b *testing.B) { 136 buf := make([]byte, almost1K) 137 b.SetBytes(int64(len(buf))) 138 139 var key [16]byte 140 var iv [16]byte 141 aes, _ := aes.NewCipher(key[:]) 142 ctr := cipher.NewCTR(aes, iv[:]) 143 144 b.ResetTimer() 145 for i := 0; i < b.N; i++ { 146 ctr.XORKeyStream(buf, buf) 147 } 148} 149 150func BenchmarkAESCBCEncrypt1K(b *testing.B) { 151 buf := make([]byte, 1024) 152 b.SetBytes(int64(len(buf))) 153 154 var key [16]byte 155 var iv [16]byte 156 aes, _ := aes.NewCipher(key[:]) 157 cbc := cipher.NewCBCEncrypter(aes, iv[:]) 158 for i := 0; i < b.N; i++ { 159 cbc.CryptBlocks(buf, buf) 160 } 161} 162 163func BenchmarkAESCBCDecrypt1K(b *testing.B) { 164 buf := make([]byte, 1024) 165 b.SetBytes(int64(len(buf))) 166 167 var key [16]byte 168 var iv [16]byte 169 aes, _ := aes.NewCipher(key[:]) 170 cbc := cipher.NewCBCDecrypter(aes, iv[:]) 171 for i := 0; i < b.N; i++ { 172 cbc.CryptBlocks(buf, buf) 173 } 174} 175