1
2
3
4
5
6
7
8 package poly1305
9
10
11 func update(state *macState, msg []byte)
12
13
14
15
16
17
18 type mac struct{ macGeneric }
19
20 func (h *mac) Write(p []byte) (int, error) {
21 nn := len(p)
22 if h.offset > 0 {
23 n := copy(h.buffer[h.offset:], p)
24 if h.offset+n < TagSize {
25 h.offset += n
26 return nn, nil
27 }
28 p = p[n:]
29 h.offset = 0
30 update(&h.macState, h.buffer[:])
31 }
32 if n := len(p) - (len(p) % TagSize); n > 0 {
33 update(&h.macState, p[:n])
34 p = p[n:]
35 }
36 if len(p) > 0 {
37 h.offset += copy(h.buffer[h.offset:], p)
38 }
39 return nn, nil
40 }
41
42 func (h *mac) Sum(out *[16]byte) {
43 state := h.macState
44 if h.offset > 0 {
45 update(&state, h.buffer[:h.offset])
46 }
47 finalize(out, &state.h, &state.s)
48 }
49
View as plain text