static void poly1305_update_padded_16(poly1305_state *poly1305, const uint8_t *data, size_t data_len) { static const uint8_t padding[16] = { 0 }; /* Padding is all zeros. */ CRYPTO_poly1305_update(poly1305, data, data_len); if (data_len % 16 != 0) { CRYPTO_poly1305_update(poly1305, padding, sizeof(padding) - (data_len % 16)); } }
static void poly1305_update_with_length(poly1305_state *poly1305, const uint8_t *data, size_t data_len) { size_t j = data_len; uint8_t length_bytes[8]; unsigned i; for (i = 0; i < sizeof(length_bytes); i++) { length_bytes[i] = j; j >>= 8; } CRYPTO_poly1305_update(poly1305, data, data_len); CRYPTO_poly1305_update(poly1305, length_bytes, sizeof(length_bytes)); }
static void poly1305_update_with_pad16(poly1305_state *poly1305, const unsigned char *data, size_t data_len) { static const unsigned char zero_pad16[16]; size_t pad_len; CRYPTO_poly1305_update(poly1305, data, data_len); /* pad16() is defined in RFC 7539 2.8.1. */ if ((pad_len = data_len % 16) == 0) return; CRYPTO_poly1305_update(poly1305, zero_pad16, 16 - pad_len); }
static void poly1305_update_length(poly1305_state *poly1305, size_t data_len) { uint8_t length_bytes[8]; for (unsigned i = 0; i < sizeof(length_bytes); i++) { length_bytes[i] = data_len; data_len >>= 8; } CRYPTO_poly1305_update(poly1305, length_bytes, sizeof(length_bytes)); }