poly1305_generic.c (1bdd3e05a0a3b4a97ea88bc46fef8fb265c8b94c) | poly1305_generic.c (1c08a104360f3e18f4ee6346c21cc3923efb952e) |
---|---|
1/* 2 * Poly1305 authenticator algorithm, RFC7539 3 * 4 * Copyright (C) 2015 Martin Willi 5 * 6 * Based on public domain code by Andrew Moon and Daniel J. Bernstein. 7 * 8 * This program is free software; you can redistribute it and/or modify --- 17 unchanged lines hidden (view full) --- 26 poly1305_core_init(&dctx->h); 27 dctx->buflen = 0; 28 dctx->rset = 0; 29 dctx->sset = false; 30 31 return 0; 32} 33 | 1/* 2 * Poly1305 authenticator algorithm, RFC7539 3 * 4 * Copyright (C) 2015 Martin Willi 5 * 6 * Based on public domain code by Andrew Moon and Daniel J. Bernstein. 7 * 8 * This program is free software; you can redistribute it and/or modify --- 17 unchanged lines hidden (view full) --- 26 poly1305_core_init(&dctx->h); 27 dctx->buflen = 0; 28 dctx->rset = 0; 29 dctx->sset = false; 30 31 return 0; 32} 33 |
34static unsigned int crypto_poly1305_setdesckey(struct poly1305_desc_ctx *dctx, 35 const u8 *src, unsigned int srclen) 36{ 37 if (!dctx->sset) { 38 if (!dctx->rset && srclen >= POLY1305_BLOCK_SIZE) { 39 poly1305_core_setkey(&dctx->core_r, src); 40 src += POLY1305_BLOCK_SIZE; 41 srclen -= POLY1305_BLOCK_SIZE; 42 dctx->rset = 2; 43 } 44 if (srclen >= POLY1305_BLOCK_SIZE) { 45 dctx->s[0] = get_unaligned_le32(src + 0); 46 dctx->s[1] = get_unaligned_le32(src + 4); 47 dctx->s[2] = get_unaligned_le32(src + 8); 48 dctx->s[3] = get_unaligned_le32(src + 12); 49 src += POLY1305_BLOCK_SIZE; 50 srclen -= POLY1305_BLOCK_SIZE; 51 dctx->sset = true; 52 } 53 } 54 return srclen; 55} 56 |
|
34static void poly1305_blocks(struct poly1305_desc_ctx *dctx, const u8 *src, 35 unsigned int srclen) 36{ 37 unsigned int datalen; 38 39 if (unlikely(!dctx->sset)) { 40 datalen = crypto_poly1305_setdesckey(dctx, src, srclen); 41 src += srclen - datalen; 42 srclen = datalen; 43 } 44 | 57static void poly1305_blocks(struct poly1305_desc_ctx *dctx, const u8 *src, 58 unsigned int srclen) 59{ 60 unsigned int datalen; 61 62 if (unlikely(!dctx->sset)) { 63 datalen = crypto_poly1305_setdesckey(dctx, src, srclen); 64 src += srclen - datalen; 65 srclen = datalen; 66 } 67 |
45 poly1305_core_blocks(&dctx->h, dctx->r, src, | 68 poly1305_core_blocks(&dctx->h, &dctx->core_r, src, |
46 srclen / POLY1305_BLOCK_SIZE, 1); 47} 48 49static int crypto_poly1305_update(struct shash_desc *desc, 50 const u8 *src, unsigned int srclen) 51{ 52 struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc); 53 unsigned int bytes; --- 73 unchanged lines hidden --- | 69 srclen / POLY1305_BLOCK_SIZE, 1); 70} 71 72static int crypto_poly1305_update(struct shash_desc *desc, 73 const u8 *src, unsigned int srclen) 74{ 75 struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc); 76 unsigned int bytes; --- 73 unchanged lines hidden --- |