1 /*
2 * This file is part of the openHiTLS project.
3 *
4 * openHiTLS is licensed under the Mulan PSL v2.
5 * You can use this software according to the terms and conditions of the Mulan PSL v2.
6 * You may obtain a copy of Mulan PSL v2 at:
7 *
8 * http://license.coscl.org.cn/MulanPSL2
9 *
10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13 * See the Mulan PSL v2 for more details.
14 */
15
16 #include "hitls_build.h"
17 #ifdef HITLS_CRYPTO_CHACHA20
18
19 #include "crypt_utils.h"
20 #include "chacha20_local.h"
21
CHACHA20_Update(CRYPT_CHACHA20_Ctx * ctx,const uint8_t * in,uint8_t * out,uint32_t len)22 void CHACHA20_Update(CRYPT_CHACHA20_Ctx *ctx, const uint8_t *in,
23 uint8_t *out, uint32_t len)
24 {
25 const uint8_t *offIn = in;
26 uint8_t *offOut = out;
27 uint32_t tLen = len;
28 // one block is processed each time
29 while (tLen >= CHACHA20_STATEBYTES) {
30 CHACHA20_Block(ctx);
31 // Process 64 bits at a time
32 DATA64_XOR(ctx->last.u, offIn, offOut, CHACHA20_STATEBYTES);
33 offIn += CHACHA20_STATEBYTES;
34 offOut += CHACHA20_STATEBYTES;
35 tLen -= CHACHA20_STATEBYTES;
36 }
37 }
38 #endif // HITLS_CRYPTO_CHACHA20
39