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;
24 // System NSS doesn't support ChaCha20+Poly1305 yet.
26 ChaCha20Poly1305Decrypter::ChaCha20Poly1305Decrypter()
27 : AeadBaseDecrypter(CKM_INVALID_MECHANISM
, NULL
, kKeySize
,
28 kAuthTagSize
, kNoncePrefixSize
) {
32 ChaCha20Poly1305Decrypter::~ChaCha20Poly1305Decrypter() {}
35 bool ChaCha20Poly1305Decrypter::IsSupported() {
39 void ChaCha20Poly1305Decrypter::FillAeadParams(StringPiece nonce
,
40 StringPiece associated_data
,
42 AeadParams
* aead_params
) const {
46 #else // defined(USE_NSS)
48 ChaCha20Poly1305Decrypter::ChaCha20Poly1305Decrypter()
49 : AeadBaseDecrypter(CKM_NSS_CHACHA20_POLY1305
, PK11_Decrypt
, kKeySize
,
50 kAuthTagSize
, kNoncePrefixSize
) {
51 COMPILE_ASSERT(kKeySize
<= kMaxKeySize
, key_size_too_big
);
52 COMPILE_ASSERT(kNoncePrefixSize
<= kMaxNoncePrefixSize
,
53 nonce_prefix_size_too_big
);
56 ChaCha20Poly1305Decrypter::~ChaCha20Poly1305Decrypter() {}
59 bool ChaCha20Poly1305Decrypter::IsSupported() {
63 void ChaCha20Poly1305Decrypter::FillAeadParams(StringPiece nonce
,
64 StringPiece associated_data
,
66 AeadParams
* aead_params
) const {
67 aead_params
->len
= sizeof(aead_params
->data
.nss_aead_params
);
68 CK_NSS_AEAD_PARAMS
* nss_aead_params
= &aead_params
->data
.nss_aead_params
;
69 nss_aead_params
->pIv
=
70 reinterpret_cast<CK_BYTE
*>(const_cast<char*>(nonce
.data()));
71 nss_aead_params
->ulIvLen
= nonce
.size();
72 nss_aead_params
->pAAD
=
73 reinterpret_cast<CK_BYTE
*>(const_cast<char*>(associated_data
.data()));
74 nss_aead_params
->ulAADLen
= associated_data
.size();
75 nss_aead_params
->ulTagLen
= auth_tag_size
;
78 #endif // defined(USE_NSS)