mirror of
https://github.com/go-gitea/gitea.git
synced 2024-08-17 10:03:26 +02:00
* Add support for ssh commit signing * Split out ssh verification to separate file * Show ssh key fingerprint on commit page * Update sshsig lib * Make sure we verify against correct namespace * Add ssh public key verification via ssh signatures When adding a public ssh key also validate that this user actually owns the key by signing a token with the private key. * Remove some gpg references and make verify key optional * Fix spaces indentation * Update options/locale/locale_en-US.ini Co-authored-by: Gusted <williamzijl7@hotmail.com> * Update templates/user/settings/keys_ssh.tmpl Co-authored-by: Gusted <williamzijl7@hotmail.com> * Update options/locale/locale_en-US.ini Co-authored-by: Gusted <williamzijl7@hotmail.com> * Update options/locale/locale_en-US.ini Co-authored-by: Gusted <williamzijl7@hotmail.com> * Update models/ssh_key_commit_verification.go Co-authored-by: Gusted <williamzijl7@hotmail.com> * Reword ssh/gpg_key_success message * Change Badsignature to NoKeyFound * Add sign/verify tests * Fix upstream api changes to user_model User * Match exact on SSH signature * Fix code review remarks Co-authored-by: Gusted <williamzijl7@hotmail.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
77 lines
2.0 KiB
Go
Vendored
77 lines
2.0 KiB
Go
Vendored
// Copyright 2018 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
//go:build gc && !purego
|
|
// +build gc,!purego
|
|
|
|
package poly1305
|
|
|
|
import (
|
|
"golang.org/x/sys/cpu"
|
|
)
|
|
|
|
// updateVX is an assembly implementation of Poly1305 that uses vector
|
|
// instructions. It must only be called if the vector facility (vx) is
|
|
// available.
|
|
//go:noescape
|
|
func updateVX(state *macState, msg []byte)
|
|
|
|
// mac is a replacement for macGeneric that uses a larger buffer and redirects
|
|
// calls that would have gone to updateGeneric to updateVX if the vector
|
|
// facility is installed.
|
|
//
|
|
// A larger buffer is required for good performance because the vector
|
|
// implementation has a higher fixed cost per call than the generic
|
|
// implementation.
|
|
type mac struct {
|
|
macState
|
|
|
|
buffer [16 * TagSize]byte // size must be a multiple of block size (16)
|
|
offset int
|
|
}
|
|
|
|
func (h *mac) Write(p []byte) (int, error) {
|
|
nn := len(p)
|
|
if h.offset > 0 {
|
|
n := copy(h.buffer[h.offset:], p)
|
|
if h.offset+n < len(h.buffer) {
|
|
h.offset += n
|
|
return nn, nil
|
|
}
|
|
p = p[n:]
|
|
h.offset = 0
|
|
if cpu.S390X.HasVX {
|
|
updateVX(&h.macState, h.buffer[:])
|
|
} else {
|
|
updateGeneric(&h.macState, h.buffer[:])
|
|
}
|
|
}
|
|
|
|
tail := len(p) % len(h.buffer) // number of bytes to copy into buffer
|
|
body := len(p) - tail // number of bytes to process now
|
|
if body > 0 {
|
|
if cpu.S390X.HasVX {
|
|
updateVX(&h.macState, p[:body])
|
|
} else {
|
|
updateGeneric(&h.macState, p[:body])
|
|
}
|
|
}
|
|
h.offset = copy(h.buffer[:], p[body:]) // copy tail bytes - can be 0
|
|
return nn, nil
|
|
}
|
|
|
|
func (h *mac) Sum(out *[TagSize]byte) {
|
|
state := h.macState
|
|
remainder := h.buffer[:h.offset]
|
|
|
|
// Use the generic implementation if we have 2 or fewer blocks left
|
|
// to sum. The vector implementation has a higher startup time.
|
|
if cpu.S390X.HasVX && len(remainder) > 2*TagSize {
|
|
updateVX(&state, remainder)
|
|
} else if len(remainder) > 0 {
|
|
updateGeneric(&state, remainder)
|
|
}
|
|
finalize(out, &state.h, &state.s)
|
|
}
|