podman

Форк
0
47 строк · 1.1 Кб
1
// Copyright 2019 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
4

5
//go:build gc && !purego
6

7
package poly1305
8

9
//go:noescape
10
func update(state *macState, msg []byte)
11

12
// mac is a wrapper for macGeneric that redirects calls that would have gone to
13
// updateGeneric to update.
14
//
15
// Its Write and Sum methods are otherwise identical to the macGeneric ones, but
16
// using function pointers would carry a major performance cost.
17
type mac struct{ macGeneric }
18

19
func (h *mac) Write(p []byte) (int, error) {
20
	nn := len(p)
21
	if h.offset > 0 {
22
		n := copy(h.buffer[h.offset:], p)
23
		if h.offset+n < TagSize {
24
			h.offset += n
25
			return nn, nil
26
		}
27
		p = p[n:]
28
		h.offset = 0
29
		update(&h.macState, h.buffer[:])
30
	}
31
	if n := len(p) - (len(p) % TagSize); n > 0 {
32
		update(&h.macState, p[:n])
33
		p = p[n:]
34
	}
35
	if len(p) > 0 {
36
		h.offset += copy(h.buffer[h.offset:], p)
37
	}
38
	return nn, nil
39
}
40

41
func (h *mac) Sum(out *[16]byte) {
42
	state := h.macState
43
	if h.offset > 0 {
44
		update(&state, h.buffer[:h.offset])
45
	}
46
	finalize(out, &state.h, &state.s)
47
}
48

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.