mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Add support for ssh commit signing (#17743)
* 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>
This commit is contained in:
		
							
								
								
									
										49
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										49
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -34,3 +34,52 @@ func ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) { | ||||
| 	ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0])) | ||||
| 	return &ucred, nil | ||||
| } | ||||
|  | ||||
| // PktInfo4 encodes Inet4Pktinfo into a socket control message of type IP_PKTINFO. | ||||
| func PktInfo4(info *Inet4Pktinfo) []byte { | ||||
| 	b := make([]byte, CmsgSpace(SizeofInet4Pktinfo)) | ||||
| 	h := (*Cmsghdr)(unsafe.Pointer(&b[0])) | ||||
| 	h.Level = SOL_IP | ||||
| 	h.Type = IP_PKTINFO | ||||
| 	h.SetLen(CmsgLen(SizeofInet4Pktinfo)) | ||||
| 	*(*Inet4Pktinfo)(h.data(0)) = *info | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| // PktInfo6 encodes Inet6Pktinfo into a socket control message of type IPV6_PKTINFO. | ||||
| func PktInfo6(info *Inet6Pktinfo) []byte { | ||||
| 	b := make([]byte, CmsgSpace(SizeofInet6Pktinfo)) | ||||
| 	h := (*Cmsghdr)(unsafe.Pointer(&b[0])) | ||||
| 	h.Level = SOL_IPV6 | ||||
| 	h.Type = IPV6_PKTINFO | ||||
| 	h.SetLen(CmsgLen(SizeofInet6Pktinfo)) | ||||
| 	*(*Inet6Pktinfo)(h.data(0)) = *info | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| // ParseOrigDstAddr decodes a socket control message containing the original | ||||
| // destination address. To receive such a message the IP_RECVORIGDSTADDR or | ||||
| // IPV6_RECVORIGDSTADDR option must be enabled on the socket. | ||||
| func ParseOrigDstAddr(m *SocketControlMessage) (Sockaddr, error) { | ||||
| 	switch { | ||||
| 	case m.Header.Level == SOL_IP && m.Header.Type == IP_ORIGDSTADDR: | ||||
| 		pp := (*RawSockaddrInet4)(unsafe.Pointer(&m.Data[0])) | ||||
| 		sa := new(SockaddrInet4) | ||||
| 		p := (*[2]byte)(unsafe.Pointer(&pp.Port)) | ||||
| 		sa.Port = int(p[0])<<8 + int(p[1]) | ||||
| 		sa.Addr = pp.Addr | ||||
| 		return sa, nil | ||||
|  | ||||
| 	case m.Header.Level == SOL_IPV6 && m.Header.Type == IPV6_ORIGDSTADDR: | ||||
| 		pp := (*RawSockaddrInet6)(unsafe.Pointer(&m.Data[0])) | ||||
| 		sa := new(SockaddrInet6) | ||||
| 		p := (*[2]byte)(unsafe.Pointer(&pp.Port)) | ||||
| 		sa.Port = int(p[0])<<8 + int(p[1]) | ||||
| 		sa.ZoneId = pp.Scope_id | ||||
| 		sa.Addr = pp.Addr | ||||
| 		return sa, nil | ||||
|  | ||||
| 	default: | ||||
| 		return nil, EINVAL | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user