1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "net/quic/crypto/chacha20_poly1305_decrypter.h"
9 #include "base/logging.h"
11 using base::StringPiece
;
17 const size_t kKeySize
= 32;
18 const size_t kNoncePrefixSize
= 0;
22 #if defined(USE_NSS_CERTS)
24 // System NSS doesn't support ChaCha20+Poly1305 yet.
26 ChaCha20Poly1305Decrypter::ChaCha20Poly1305Decrypter()
27 : AeadBaseDecrypter(CKM_INVALID_MECHANISM
, nullptr, kKeySize
,
28 kAuthTagSize
, kNoncePrefixSize
) {
32 ChaCha20Poly1305Decrypter::~ChaCha20Poly1305Decrypter() {}
35 bool ChaCha20Poly1305Decrypter::IsSupported() {
39 void ChaCha20Poly1305Decrypter::FillAeadParams(
41 const StringPiece
& associated_data
,
43 AeadParams
* aead_params
) const {
47 #else // defined(USE_NSS_CERTS)
49 ChaCha20Poly1305Decrypter::ChaCha20Poly1305Decrypter()
50 : AeadBaseDecrypter(CKM_NSS_CHACHA20_POLY1305
, PK11_Decrypt
, kKeySize
,
51 kAuthTagSize
, kNoncePrefixSize
) {
52 static_assert(kKeySize
<= kMaxKeySize
, "key size too big");
53 static_assert(kNoncePrefixSize
<= kMaxNoncePrefixSize
,
54 "nonce prefix size too big");
57 ChaCha20Poly1305Decrypter::~ChaCha20Poly1305Decrypter() {}
60 bool ChaCha20Poly1305Decrypter::IsSupported() {
64 void ChaCha20Poly1305Decrypter::FillAeadParams(
66 const StringPiece
& associated_data
,
68 AeadParams
* aead_params
) const {
69 aead_params
->len
= sizeof(aead_params
->data
.nss_aead_params
);
70 CK_NSS_AEAD_PARAMS
* nss_aead_params
= &aead_params
->data
.nss_aead_params
;
71 nss_aead_params
->pIv
=
72 reinterpret_cast<CK_BYTE
*>(const_cast<char*>(nonce
.data()));
73 nss_aead_params
->ulIvLen
= nonce
.size();
74 nss_aead_params
->pAAD
=
75 reinterpret_cast<CK_BYTE
*>(const_cast<char*>(associated_data
.data()));
76 nss_aead_params
->ulAADLen
= associated_data
.size();
77 nss_aead_params
->ulTagLen
= auth_tag_size
;
80 #endif // defined(USE_NSS_CERTS)