Filippo Valsorda
|
e0829623af
|
chacha20: expose internal/chacha20 package
const KeySize = 32
const NonceSize = 12
func HChaCha20(key, nonce []byte) ([]byte, error)
type Cipher struct {}
func NewUnauthenticatedCipher(key, nonce []byte) (*Cipher, error)
func (s *Cipher) XORKeyStream(dst, src []byte)
Small performance hit in chacha20poly1305, probably due to the loss
of the Advance API, which we might consider adding later. No new
allocations, thanks to the mid-stack inliner.
name old time/op new time/op delta
Chacha20Poly1305/Open-64-8 1.60µs ± 0% 1.68µs ± 1% +4.94% (p=0.000 n=9+10)
Chacha20Poly1305/Seal-64-8 1.56µs ± 0% 1.64µs ± 1% +5.21% (p=0.000 n=8+10)
Chacha20Poly1305/Open-64-X-8 2.10µs ± 1% 2.22µs ± 1% +5.81% (p=0.000 n=10+10)
Chacha20Poly1305/Seal-64-X-8 2.07µs ± 1% 2.17µs ± 0% +4.88% (p=0.000 n=10+10)
Chacha20Poly1305/Open-1350-8 15.4µs ± 0% 15.7µs ± 1% +1.65% (p=0.000 n=10+10)
Chacha20Poly1305/Seal-1350-8 15.6µs ± 2% 15.9µs ± 1% +1.58% (p=0.028 n=10+9)
Chacha20Poly1305/Open-1350-X-8 16.0µs ± 1% 16.3µs ± 2% +2.00% (p=0.000 n=10+10)
Chacha20Poly1305/Seal-1350-X-8 15.9µs ± 0% 16.3µs ± 1% +1.91% (p=0.000 n=10+8)
Chacha20Poly1305/Open-8192-8 85.6µs ± 0% 86.6µs ± 1% +1.21% (p=0.000 n=10+10)
Chacha20Poly1305/Seal-8192-8 85.7µs ± 0% 86.3µs ± 0% +0.68% (p=0.001 n=9+9)
Chacha20Poly1305/Open-8192-X-8 86.4µs ± 1% 87.1µs ± 1% +0.76% (p=0.035 n=10+9)
Chacha20Poly1305/Seal-8192-X-8 86.0µs ± 0% 87.0µs ± 1% +1.14% (p=0.000 n=9+9)
Updates golang/go#24485
Change-Id: I2ec2ef487a03f013049915d9063751c75a78408b
Reviewed-on: https://go-review.googlesource.com/c/crypto/+/185980
Reviewed-by: Michael Munday <mike.munday@ibm.com>
|
2019-11-11 21:38:06 +00:00 |
|
Adam Langley
|
de07523181
|
chacha20poly1305: add some more XChaCha20-Poly1305 test vectors.
These vectors were generated with libsodium to ensure that Go is
compatible with that library:
#include <stdio.h>
#include <sodium.h>
#include <stdlib.h>
static void hexdump(const uint8_t *in, size_t in_len) {
printf("\t\t\"");
for (size_t i = 0; i < in_len; i++) {
printf("%02x", in[i]);
}
printf("\",\n");
}
int main() {
uint8_t nonce[24];
uint8_t key[32];
uint8_t m[64], c[64+16];
uint8_t ad[16];
for (size_t ad_len = 0; ad_len < sizeof(ad); ad_len += 4) {
for (size_t m_len = 0; m_len < sizeof(m); m_len += 5) {
randombytes(nonce, sizeof(nonce));
randombytes(key, sizeof(key));
randombytes(m, m_len);
randombytes(ad, ad_len);
unsigned long long c_len = sizeof(c);
if (crypto_aead_xchacha20poly1305_ietf_encrypt(c, &c_len, m, m_len, ad, ad_len, NULL, nonce, key)) {
abort();
}
printf("\t{\n");
hexdump(m, m_len);
hexdump(ad, ad_len);
hexdump(key, sizeof(key));
hexdump(nonce, sizeof(nonce));
hexdump(c, c_len);
printf("\t},\n");
}
}
return 0;
}
Change-Id: I4e9e4dc26e0e842c82319829599dbe48c331726f
Reviewed-on: https://go-review.googlesource.com/128615
Run-TryBot: Adam Langley <agl@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
|
2018-08-08 21:18:26 +00:00 |
|