mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-10-31 08:03:43 +08:00 
			
		
		
		
	vendor: update buildkit to f238f1e
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
		
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/curve25519/curve25519.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/curve25519/curve25519.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -86,7 +86,7 @@ func feFromBytes(dst *fieldElement, src *[32]byte) { | ||||
| 	h6 := load3(src[20:]) << 7 | ||||
| 	h7 := load3(src[23:]) << 5 | ||||
| 	h8 := load3(src[26:]) << 4 | ||||
| 	h9 := load3(src[29:]) << 2 | ||||
| 	h9 := (load3(src[29:]) & 0x7fffff) << 2 | ||||
|  | ||||
| 	var carry [10]int64 | ||||
| 	carry[9] = (h9 + 1<<24) >> 25 | ||||
|   | ||||
							
								
								
									
										308
									
								
								vendor/golang.org/x/crypto/internal/chacha20/asm_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										308
									
								
								vendor/golang.org/x/crypto/internal/chacha20/asm_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,308 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build go1.11 | ||||
| // +build !gccgo,!appengine | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| #define NUM_ROUNDS 10 | ||||
|  | ||||
| // func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32) | ||||
| TEXT ·xorKeyStreamVX(SB), NOSPLIT, $0 | ||||
| 	MOVD	dst+0(FP), R1 | ||||
| 	MOVD	src+24(FP), R2 | ||||
| 	MOVD	src_len+32(FP), R3 | ||||
| 	MOVD	key+48(FP), R4 | ||||
| 	MOVD	nonce+56(FP), R6 | ||||
| 	MOVD	counter+64(FP), R7 | ||||
|  | ||||
| 	MOVD	$·constants(SB), R10 | ||||
| 	MOVD	$·incRotMatrix(SB), R11 | ||||
|  | ||||
| 	MOVW	(R7), R20 | ||||
|  | ||||
| 	AND	$~255, R3, R13 | ||||
| 	ADD	R2, R13, R12 // R12 for block end | ||||
| 	AND	$255, R3, R13 | ||||
| loop: | ||||
| 	MOVD	$NUM_ROUNDS, R21 | ||||
| 	VLD1	(R11), [V30.S4, V31.S4] | ||||
|  | ||||
| 	// load contants | ||||
| 	// VLD4R (R10), [V0.S4, V1.S4, V2.S4, V3.S4] | ||||
| 	WORD	$0x4D60E940 | ||||
|  | ||||
| 	// load keys | ||||
| 	// VLD4R 16(R4), [V4.S4, V5.S4, V6.S4, V7.S4] | ||||
| 	WORD	$0x4DFFE884 | ||||
| 	// VLD4R 16(R4), [V8.S4, V9.S4, V10.S4, V11.S4] | ||||
| 	WORD	$0x4DFFE888 | ||||
| 	SUB	$32, R4 | ||||
|  | ||||
| 	// load counter + nonce | ||||
| 	// VLD1R (R7), [V12.S4] | ||||
| 	WORD	$0x4D40C8EC | ||||
|  | ||||
| 	// VLD3R (R6), [V13.S4, V14.S4, V15.S4] | ||||
| 	WORD	$0x4D40E8CD | ||||
|  | ||||
| 	// update counter | ||||
| 	VADD	V30.S4, V12.S4, V12.S4 | ||||
|  | ||||
| chacha: | ||||
| 	// V0..V3 += V4..V7 | ||||
| 	// V12..V15 <<<= ((V12..V15 XOR V0..V3), 16) | ||||
| 	VADD	V0.S4, V4.S4, V0.S4 | ||||
| 	VADD	V1.S4, V5.S4, V1.S4 | ||||
| 	VADD	V2.S4, V6.S4, V2.S4 | ||||
| 	VADD	V3.S4, V7.S4, V3.S4 | ||||
| 	VEOR	V12.B16, V0.B16, V12.B16 | ||||
| 	VEOR	V13.B16, V1.B16, V13.B16 | ||||
| 	VEOR	V14.B16, V2.B16, V14.B16 | ||||
| 	VEOR	V15.B16, V3.B16, V15.B16 | ||||
| 	VREV32	V12.H8, V12.H8 | ||||
| 	VREV32	V13.H8, V13.H8 | ||||
| 	VREV32	V14.H8, V14.H8 | ||||
| 	VREV32	V15.H8, V15.H8 | ||||
| 	// V8..V11 += V12..V15 | ||||
| 	// V4..V7 <<<= ((V4..V7 XOR V8..V11), 12) | ||||
| 	VADD	V8.S4, V12.S4, V8.S4 | ||||
| 	VADD	V9.S4, V13.S4, V9.S4 | ||||
| 	VADD	V10.S4, V14.S4, V10.S4 | ||||
| 	VADD	V11.S4, V15.S4, V11.S4 | ||||
| 	VEOR	V8.B16, V4.B16, V16.B16 | ||||
| 	VEOR	V9.B16, V5.B16, V17.B16 | ||||
| 	VEOR	V10.B16, V6.B16, V18.B16 | ||||
| 	VEOR	V11.B16, V7.B16, V19.B16 | ||||
| 	VSHL	$12, V16.S4, V4.S4 | ||||
| 	VSHL	$12, V17.S4, V5.S4 | ||||
| 	VSHL	$12, V18.S4, V6.S4 | ||||
| 	VSHL	$12, V19.S4, V7.S4 | ||||
| 	VSRI	$20, V16.S4, V4.S4 | ||||
| 	VSRI	$20, V17.S4, V5.S4 | ||||
| 	VSRI	$20, V18.S4, V6.S4 | ||||
| 	VSRI	$20, V19.S4, V7.S4 | ||||
|  | ||||
| 	// V0..V3 += V4..V7 | ||||
| 	// V12..V15 <<<= ((V12..V15 XOR V0..V3), 8) | ||||
| 	VADD	V0.S4, V4.S4, V0.S4 | ||||
| 	VADD	V1.S4, V5.S4, V1.S4 | ||||
| 	VADD	V2.S4, V6.S4, V2.S4 | ||||
| 	VADD	V3.S4, V7.S4, V3.S4 | ||||
| 	VEOR	V12.B16, V0.B16, V12.B16 | ||||
| 	VEOR	V13.B16, V1.B16, V13.B16 | ||||
| 	VEOR	V14.B16, V2.B16, V14.B16 | ||||
| 	VEOR	V15.B16, V3.B16, V15.B16 | ||||
| 	VTBL	V31.B16, [V12.B16], V12.B16 | ||||
| 	VTBL	V31.B16, [V13.B16], V13.B16 | ||||
| 	VTBL	V31.B16, [V14.B16], V14.B16 | ||||
| 	VTBL	V31.B16, [V15.B16], V15.B16 | ||||
|  | ||||
| 	// V8..V11 += V12..V15 | ||||
| 	// V4..V7 <<<= ((V4..V7 XOR V8..V11), 7) | ||||
| 	VADD	V12.S4, V8.S4, V8.S4 | ||||
| 	VADD	V13.S4, V9.S4, V9.S4 | ||||
| 	VADD	V14.S4, V10.S4, V10.S4 | ||||
| 	VADD	V15.S4, V11.S4, V11.S4 | ||||
| 	VEOR	V8.B16, V4.B16, V16.B16 | ||||
| 	VEOR	V9.B16, V5.B16, V17.B16 | ||||
| 	VEOR	V10.B16, V6.B16, V18.B16 | ||||
| 	VEOR	V11.B16, V7.B16, V19.B16 | ||||
| 	VSHL	$7, V16.S4, V4.S4 | ||||
| 	VSHL	$7, V17.S4, V5.S4 | ||||
| 	VSHL	$7, V18.S4, V6.S4 | ||||
| 	VSHL	$7, V19.S4, V7.S4 | ||||
| 	VSRI	$25, V16.S4, V4.S4 | ||||
| 	VSRI	$25, V17.S4, V5.S4 | ||||
| 	VSRI	$25, V18.S4, V6.S4 | ||||
| 	VSRI	$25, V19.S4, V7.S4 | ||||
|  | ||||
| 	// V0..V3 += V5..V7, V4 | ||||
| 	// V15,V12-V14 <<<= ((V15,V12-V14 XOR V0..V3), 16) | ||||
| 	VADD	V0.S4, V5.S4, V0.S4 | ||||
| 	VADD	V1.S4, V6.S4, V1.S4 | ||||
| 	VADD	V2.S4, V7.S4, V2.S4 | ||||
| 	VADD	V3.S4, V4.S4, V3.S4 | ||||
| 	VEOR	V15.B16, V0.B16, V15.B16 | ||||
| 	VEOR	V12.B16, V1.B16, V12.B16 | ||||
| 	VEOR	V13.B16, V2.B16, V13.B16 | ||||
| 	VEOR	V14.B16, V3.B16, V14.B16 | ||||
| 	VREV32	V12.H8, V12.H8 | ||||
| 	VREV32	V13.H8, V13.H8 | ||||
| 	VREV32	V14.H8, V14.H8 | ||||
| 	VREV32	V15.H8, V15.H8 | ||||
|  | ||||
| 	// V10 += V15; V5 <<<= ((V10 XOR V5), 12) | ||||
| 	// ... | ||||
| 	VADD	V15.S4, V10.S4, V10.S4 | ||||
| 	VADD	V12.S4, V11.S4, V11.S4 | ||||
| 	VADD	V13.S4, V8.S4, V8.S4 | ||||
| 	VADD	V14.S4, V9.S4, V9.S4 | ||||
| 	VEOR	V10.B16, V5.B16, V16.B16 | ||||
| 	VEOR	V11.B16, V6.B16, V17.B16 | ||||
| 	VEOR	V8.B16, V7.B16, V18.B16 | ||||
| 	VEOR	V9.B16, V4.B16, V19.B16 | ||||
| 	VSHL	$12, V16.S4, V5.S4 | ||||
| 	VSHL	$12, V17.S4, V6.S4 | ||||
| 	VSHL	$12, V18.S4, V7.S4 | ||||
| 	VSHL	$12, V19.S4, V4.S4 | ||||
| 	VSRI	$20, V16.S4, V5.S4 | ||||
| 	VSRI	$20, V17.S4, V6.S4 | ||||
| 	VSRI	$20, V18.S4, V7.S4 | ||||
| 	VSRI	$20, V19.S4, V4.S4 | ||||
|  | ||||
| 	// V0 += V5; V15 <<<= ((V0 XOR V15), 8) | ||||
| 	// ... | ||||
| 	VADD	V5.S4, V0.S4, V0.S4 | ||||
| 	VADD	V6.S4, V1.S4, V1.S4 | ||||
| 	VADD	V7.S4, V2.S4, V2.S4 | ||||
| 	VADD	V4.S4, V3.S4, V3.S4 | ||||
| 	VEOR	V0.B16, V15.B16, V15.B16 | ||||
| 	VEOR	V1.B16, V12.B16, V12.B16 | ||||
| 	VEOR	V2.B16, V13.B16, V13.B16 | ||||
| 	VEOR	V3.B16, V14.B16, V14.B16 | ||||
| 	VTBL	V31.B16, [V12.B16], V12.B16 | ||||
| 	VTBL	V31.B16, [V13.B16], V13.B16 | ||||
| 	VTBL	V31.B16, [V14.B16], V14.B16 | ||||
| 	VTBL	V31.B16, [V15.B16], V15.B16 | ||||
|  | ||||
| 	// V10 += V15; V5 <<<= ((V10 XOR V5), 7) | ||||
| 	// ... | ||||
| 	VADD	V15.S4, V10.S4, V10.S4 | ||||
| 	VADD	V12.S4, V11.S4, V11.S4 | ||||
| 	VADD	V13.S4, V8.S4, V8.S4 | ||||
| 	VADD	V14.S4, V9.S4, V9.S4 | ||||
| 	VEOR	V10.B16, V5.B16, V16.B16 | ||||
| 	VEOR	V11.B16, V6.B16, V17.B16 | ||||
| 	VEOR	V8.B16, V7.B16, V18.B16 | ||||
| 	VEOR	V9.B16, V4.B16, V19.B16 | ||||
| 	VSHL	$7, V16.S4, V5.S4 | ||||
| 	VSHL	$7, V17.S4, V6.S4 | ||||
| 	VSHL	$7, V18.S4, V7.S4 | ||||
| 	VSHL	$7, V19.S4, V4.S4 | ||||
| 	VSRI	$25, V16.S4, V5.S4 | ||||
| 	VSRI	$25, V17.S4, V6.S4 | ||||
| 	VSRI	$25, V18.S4, V7.S4 | ||||
| 	VSRI	$25, V19.S4, V4.S4 | ||||
|  | ||||
| 	SUB	$1, R21 | ||||
| 	CBNZ	R21, chacha | ||||
|  | ||||
| 	// VLD4R (R10), [V16.S4, V17.S4, V18.S4, V19.S4] | ||||
| 	WORD	$0x4D60E950 | ||||
|  | ||||
| 	// VLD4R 16(R4), [V20.S4, V21.S4, V22.S4, V23.S4] | ||||
| 	WORD	$0x4DFFE894 | ||||
| 	VADD	V30.S4, V12.S4, V12.S4 | ||||
| 	VADD	V16.S4, V0.S4, V0.S4 | ||||
| 	VADD	V17.S4, V1.S4, V1.S4 | ||||
| 	VADD	V18.S4, V2.S4, V2.S4 | ||||
| 	VADD	V19.S4, V3.S4, V3.S4 | ||||
| 	// VLD4R 16(R4), [V24.S4, V25.S4, V26.S4, V27.S4] | ||||
| 	WORD	$0x4DFFE898 | ||||
| 	// restore R4 | ||||
| 	SUB	$32, R4 | ||||
|  | ||||
| 	// load counter + nonce | ||||
| 	// VLD1R (R7), [V28.S4] | ||||
| 	WORD	$0x4D40C8FC | ||||
| 	// VLD3R (R6), [V29.S4, V30.S4, V31.S4] | ||||
| 	WORD	$0x4D40E8DD | ||||
|  | ||||
| 	VADD	V20.S4, V4.S4, V4.S4 | ||||
| 	VADD	V21.S4, V5.S4, V5.S4 | ||||
| 	VADD	V22.S4, V6.S4, V6.S4 | ||||
| 	VADD	V23.S4, V7.S4, V7.S4 | ||||
| 	VADD	V24.S4, V8.S4, V8.S4 | ||||
| 	VADD	V25.S4, V9.S4, V9.S4 | ||||
| 	VADD	V26.S4, V10.S4, V10.S4 | ||||
| 	VADD	V27.S4, V11.S4, V11.S4 | ||||
| 	VADD	V28.S4, V12.S4, V12.S4 | ||||
| 	VADD	V29.S4, V13.S4, V13.S4 | ||||
| 	VADD	V30.S4, V14.S4, V14.S4 | ||||
| 	VADD	V31.S4, V15.S4, V15.S4 | ||||
|  | ||||
| 	VZIP1	V1.S4, V0.S4, V16.S4 | ||||
| 	VZIP2	V1.S4, V0.S4, V17.S4 | ||||
| 	VZIP1	V3.S4, V2.S4, V18.S4 | ||||
| 	VZIP2	V3.S4, V2.S4, V19.S4 | ||||
| 	VZIP1	V5.S4, V4.S4, V20.S4 | ||||
| 	VZIP2	V5.S4, V4.S4, V21.S4 | ||||
| 	VZIP1	V7.S4, V6.S4, V22.S4 | ||||
| 	VZIP2	V7.S4, V6.S4, V23.S4 | ||||
| 	VZIP1	V9.S4, V8.S4, V24.S4 | ||||
| 	VZIP2	V9.S4, V8.S4, V25.S4 | ||||
| 	VZIP1	V11.S4, V10.S4, V26.S4 | ||||
| 	VZIP2	V11.S4, V10.S4, V27.S4 | ||||
| 	VZIP1	V13.S4, V12.S4, V28.S4 | ||||
| 	VZIP2	V13.S4, V12.S4, V29.S4 | ||||
| 	VZIP1	V15.S4, V14.S4, V30.S4 | ||||
| 	VZIP2	V15.S4, V14.S4, V31.S4 | ||||
| 	VZIP1	V18.D2, V16.D2, V0.D2 | ||||
| 	VZIP2	V18.D2, V16.D2, V4.D2 | ||||
| 	VZIP1	V19.D2, V17.D2, V8.D2 | ||||
| 	VZIP2	V19.D2, V17.D2, V12.D2 | ||||
| 	VLD1.P	64(R2), [V16.B16, V17.B16, V18.B16, V19.B16] | ||||
|  | ||||
| 	VZIP1	V22.D2, V20.D2, V1.D2 | ||||
| 	VZIP2	V22.D2, V20.D2, V5.D2 | ||||
| 	VZIP1	V23.D2, V21.D2, V9.D2 | ||||
| 	VZIP2	V23.D2, V21.D2, V13.D2 | ||||
| 	VLD1.P	64(R2), [V20.B16, V21.B16, V22.B16, V23.B16] | ||||
| 	VZIP1	V26.D2, V24.D2, V2.D2 | ||||
| 	VZIP2	V26.D2, V24.D2, V6.D2 | ||||
| 	VZIP1	V27.D2, V25.D2, V10.D2 | ||||
| 	VZIP2	V27.D2, V25.D2, V14.D2 | ||||
| 	VLD1.P	64(R2), [V24.B16, V25.B16, V26.B16, V27.B16] | ||||
| 	VZIP1	V30.D2, V28.D2, V3.D2 | ||||
| 	VZIP2	V30.D2, V28.D2, V7.D2 | ||||
| 	VZIP1	V31.D2, V29.D2, V11.D2 | ||||
| 	VZIP2	V31.D2, V29.D2, V15.D2 | ||||
| 	VLD1.P	64(R2), [V28.B16, V29.B16, V30.B16, V31.B16] | ||||
| 	VEOR	V0.B16, V16.B16, V16.B16 | ||||
| 	VEOR	V1.B16, V17.B16, V17.B16 | ||||
| 	VEOR	V2.B16, V18.B16, V18.B16 | ||||
| 	VEOR	V3.B16, V19.B16, V19.B16 | ||||
| 	VST1.P	[V16.B16, V17.B16, V18.B16, V19.B16], 64(R1) | ||||
| 	VEOR	V4.B16, V20.B16, V20.B16 | ||||
| 	VEOR	V5.B16, V21.B16, V21.B16 | ||||
| 	VEOR	V6.B16, V22.B16, V22.B16 | ||||
| 	VEOR	V7.B16, V23.B16, V23.B16 | ||||
| 	VST1.P	[V20.B16, V21.B16, V22.B16, V23.B16], 64(R1) | ||||
| 	VEOR	V8.B16, V24.B16, V24.B16 | ||||
| 	VEOR	V9.B16, V25.B16, V25.B16 | ||||
| 	VEOR	V10.B16, V26.B16, V26.B16 | ||||
| 	VEOR	V11.B16, V27.B16, V27.B16 | ||||
| 	VST1.P	[V24.B16, V25.B16, V26.B16, V27.B16], 64(R1) | ||||
| 	VEOR	V12.B16, V28.B16, V28.B16 | ||||
| 	VEOR	V13.B16, V29.B16, V29.B16 | ||||
| 	VEOR	V14.B16, V30.B16, V30.B16 | ||||
| 	VEOR	V15.B16, V31.B16, V31.B16 | ||||
| 	VST1.P	[V28.B16, V29.B16, V30.B16, V31.B16], 64(R1) | ||||
|  | ||||
| 	ADD	$4, R20 | ||||
| 	MOVW	R20, (R7) // update counter | ||||
|  | ||||
| 	CMP	R2, R12 | ||||
| 	BGT	loop | ||||
|  | ||||
| 	RET | ||||
|  | ||||
|  | ||||
| DATA	·constants+0x00(SB)/4, $0x61707865 | ||||
| DATA	·constants+0x04(SB)/4, $0x3320646e | ||||
| DATA	·constants+0x08(SB)/4, $0x79622d32 | ||||
| DATA	·constants+0x0c(SB)/4, $0x6b206574 | ||||
| GLOBL	·constants(SB), NOPTR|RODATA, $32 | ||||
|  | ||||
| DATA	·incRotMatrix+0x00(SB)/4, $0x00000000 | ||||
| DATA	·incRotMatrix+0x04(SB)/4, $0x00000001 | ||||
| DATA	·incRotMatrix+0x08(SB)/4, $0x00000002 | ||||
| DATA	·incRotMatrix+0x0c(SB)/4, $0x00000003 | ||||
| DATA	·incRotMatrix+0x10(SB)/4, $0x02010003 | ||||
| DATA	·incRotMatrix+0x14(SB)/4, $0x06050407 | ||||
| DATA	·incRotMatrix+0x18(SB)/4, $0x0A09080B | ||||
| DATA	·incRotMatrix+0x1c(SB)/4, $0x0E0D0C0F | ||||
| GLOBL	·incRotMatrix(SB), NOPTR|RODATA, $32 | ||||
							
								
								
									
										31
									
								
								vendor/golang.org/x/crypto/internal/chacha20/chacha_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								vendor/golang.org/x/crypto/internal/chacha20/chacha_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build go1.11 | ||||
| // +build !gccgo | ||||
|  | ||||
| package chacha20 | ||||
|  | ||||
| const ( | ||||
| 	haveAsm = true | ||||
| 	bufSize = 256 | ||||
| ) | ||||
|  | ||||
| //go:noescape | ||||
| func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32) | ||||
|  | ||||
| func (c *Cipher) xorKeyStreamAsm(dst, src []byte) { | ||||
|  | ||||
| 	if len(src) >= bufSize { | ||||
| 		xorKeyStreamVX(dst, src, &c.key, &c.nonce, &c.counter) | ||||
| 	} | ||||
|  | ||||
| 	if len(src)%bufSize != 0 { | ||||
| 		i := len(src) - len(src)%bufSize | ||||
| 		c.buf = [bufSize]byte{} | ||||
| 		copy(c.buf[:], src[i:]) | ||||
| 		xorKeyStreamVX(c.buf[:], c.buf[:], &c.key, &c.nonce, &c.counter) | ||||
| 		c.len = bufSize - copy(dst[i:], c.buf[:len(src)%bufSize]) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/internal/chacha20/chacha_noasm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/internal/chacha20/chacha_noasm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -2,7 +2,7 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // +build !s390x gccgo appengine | ||||
| // +build !arm64,!s390x arm64,!go1.11 gccgo appengine | ||||
|  | ||||
| package chacha20 | ||||
|  | ||||
|   | ||||
							
								
								
									
										11
									
								
								vendor/golang.org/x/crypto/internal/chacha20/chacha_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/golang.org/x/crypto/internal/chacha20/chacha_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -6,15 +6,14 @@ | ||||
|  | ||||
| package chacha20 | ||||
|  | ||||
| var haveAsm = hasVectorFacility() | ||||
| import ( | ||||
| 	"golang.org/x/sys/cpu" | ||||
| ) | ||||
|  | ||||
| var haveAsm = cpu.S390X.HasVX | ||||
|  | ||||
| const bufSize = 256 | ||||
|  | ||||
| // hasVectorFacility reports whether the machine supports the vector | ||||
| // facility (vx). | ||||
| // Implementation in asm_s390x.s. | ||||
| func hasVectorFacility() bool | ||||
|  | ||||
| // xorKeyStreamVX is an assembly implementation of XORKeyStream. It must only | ||||
| // be called when the vector facility is available. | ||||
| // Implementation in asm_s390x.s. | ||||
|   | ||||
							
								
								
									
										23
									
								
								vendor/golang.org/x/crypto/internal/chacha20/chacha_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								vendor/golang.org/x/crypto/internal/chacha20/chacha_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -258,26 +258,3 @@ tail: | ||||
| 	MOVD R8, R3 | ||||
| 	MOVD $0, R4 | ||||
| 	JMP  continue | ||||
|  | ||||
| // func hasVectorFacility() bool | ||||
| TEXT ·hasVectorFacility(SB), NOSPLIT, $24-1 | ||||
| 	MOVD  $x-24(SP), R1 | ||||
| 	XC    $24, 0(R1), 0(R1) // clear the storage | ||||
| 	MOVD  $2, R0            // R0 is the number of double words stored -1 | ||||
| 	WORD  $0xB2B01000       // STFLE 0(R1) | ||||
| 	XOR   R0, R0            // reset the value of R0 | ||||
| 	MOVBZ z-8(SP), R1 | ||||
| 	AND   $0x40, R1 | ||||
| 	BEQ   novector | ||||
|  | ||||
| vectorinstalled: | ||||
| 	// check if the vector instruction has been enabled | ||||
| 	VLEIB  $0, $0xF, V16 | ||||
| 	VLGVB  $0, V16, R1 | ||||
| 	CMPBNE R1, $0xF, novector | ||||
| 	MOVB   $1, ret+0(FP)      // have vx | ||||
| 	RET | ||||
|  | ||||
| novector: | ||||
| 	MOVB $0, ret+0(FP) // no vx | ||||
| 	RET | ||||
|   | ||||
							
								
								
									
										11
									
								
								vendor/golang.org/x/crypto/poly1305/mac_noasm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								vendor/golang.org/x/crypto/poly1305/mac_noasm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !amd64 gccgo appengine | ||||
|  | ||||
| package poly1305 | ||||
|  | ||||
| type mac struct{ macGeneric } | ||||
|  | ||||
| func newMAC(key *[32]byte) mac { return mac{newMACGeneric(key)} } | ||||
							
								
								
									
										80
									
								
								vendor/golang.org/x/crypto/poly1305/poly1305.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										80
									
								
								vendor/golang.org/x/crypto/poly1305/poly1305.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -2,21 +2,19 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| /* | ||||
| Package poly1305 implements Poly1305 one-time message authentication code as | ||||
| specified in https://cr.yp.to/mac/poly1305-20050329.pdf. | ||||
|  | ||||
| Poly1305 is a fast, one-time authentication function. It is infeasible for an | ||||
| attacker to generate an authenticator for a message without the key. However, a | ||||
| key must only be used for a single message. Authenticating two different | ||||
| messages with the same key allows an attacker to forge authenticators for other | ||||
| messages with the same key. | ||||
|  | ||||
| Poly1305 was originally coupled with AES in order to make Poly1305-AES. AES was | ||||
| used with a fixed key in order to generate one-time keys from an nonce. | ||||
| However, in this package AES isn't used and the one-time key is specified | ||||
| directly. | ||||
| */ | ||||
| // Package poly1305 implements Poly1305 one-time message authentication code as | ||||
| // specified in https://cr.yp.to/mac/poly1305-20050329.pdf. | ||||
| // | ||||
| // Poly1305 is a fast, one-time authentication function. It is infeasible for an | ||||
| // attacker to generate an authenticator for a message without the key. However, a | ||||
| // key must only be used for a single message. Authenticating two different | ||||
| // messages with the same key allows an attacker to forge authenticators for other | ||||
| // messages with the same key. | ||||
| // | ||||
| // Poly1305 was originally coupled with AES in order to make Poly1305-AES. AES was | ||||
| // used with a fixed key in order to generate one-time keys from an nonce. | ||||
| // However, in this package AES isn't used and the one-time key is specified | ||||
| // directly. | ||||
| package poly1305 // import "golang.org/x/crypto/poly1305" | ||||
|  | ||||
| import "crypto/subtle" | ||||
| @@ -31,3 +29,55 @@ func Verify(mac *[16]byte, m []byte, key *[32]byte) bool { | ||||
| 	Sum(&tmp, m, key) | ||||
| 	return subtle.ConstantTimeCompare(tmp[:], mac[:]) == 1 | ||||
| } | ||||
|  | ||||
| // New returns a new MAC computing an authentication | ||||
| // tag of all data written to it with the given key. | ||||
| // This allows writing the message progressively instead | ||||
| // of passing it as a single slice. Common users should use | ||||
| // the Sum function instead. | ||||
| // | ||||
| // The key must be unique for each message, as authenticating | ||||
| // two different messages with the same key allows an attacker | ||||
| // to forge messages at will. | ||||
| func New(key *[32]byte) *MAC { | ||||
| 	return &MAC{ | ||||
| 		mac:       newMAC(key), | ||||
| 		finalized: false, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // MAC is an io.Writer computing an authentication tag | ||||
| // of the data written to it. | ||||
| // | ||||
| // MAC cannot be used like common hash.Hash implementations, | ||||
| // because using a poly1305 key twice breaks its security. | ||||
| // Therefore writing data to a running MAC after calling | ||||
| // Sum causes it to panic. | ||||
| type MAC struct { | ||||
| 	mac // platform-dependent implementation | ||||
|  | ||||
| 	finalized bool | ||||
| } | ||||
|  | ||||
| // Size returns the number of bytes Sum will return. | ||||
| func (h *MAC) Size() int { return TagSize } | ||||
|  | ||||
| // Write adds more data to the running message authentication code. | ||||
| // It never returns an error. | ||||
| // | ||||
| // It must not be called after the first call of Sum. | ||||
| func (h *MAC) Write(p []byte) (n int, err error) { | ||||
| 	if h.finalized { | ||||
| 		panic("poly1305: write to MAC after Sum") | ||||
| 	} | ||||
| 	return h.mac.Write(p) | ||||
| } | ||||
|  | ||||
| // Sum computes the authenticator of all data written to the | ||||
| // message authentication code. | ||||
| func (h *MAC) Sum(b []byte) []byte { | ||||
| 	var mac [TagSize]byte | ||||
| 	h.mac.Sum(&mac) | ||||
| 	h.finalized = true | ||||
| 	return append(b, mac[:]...) | ||||
| } | ||||
|   | ||||
							
								
								
									
										60
									
								
								vendor/golang.org/x/crypto/poly1305/sum_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										60
									
								
								vendor/golang.org/x/crypto/poly1305/sum_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -6,17 +6,63 @@ | ||||
|  | ||||
| package poly1305 | ||||
|  | ||||
| // This function is implemented in sum_amd64.s | ||||
| //go:noescape | ||||
| func poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]byte) | ||||
| func initialize(state *[7]uint64, key *[32]byte) | ||||
|  | ||||
| //go:noescape | ||||
| func update(state *[7]uint64, msg []byte) | ||||
|  | ||||
| //go:noescape | ||||
| func finalize(tag *[TagSize]byte, state *[7]uint64) | ||||
|  | ||||
| // Sum generates an authenticator for m using a one-time key and puts the | ||||
| // 16-byte result into out. Authenticating two different messages with the same | ||||
| // key allows an attacker to forge messages at will. | ||||
| func Sum(out *[16]byte, m []byte, key *[32]byte) { | ||||
| 	var mPtr *byte | ||||
| 	if len(m) > 0 { | ||||
| 		mPtr = &m[0] | ||||
| 	} | ||||
| 	poly1305(out, mPtr, uint64(len(m)), key) | ||||
| 	h := newMAC(key) | ||||
| 	h.Write(m) | ||||
| 	h.Sum(out) | ||||
| } | ||||
|  | ||||
| func newMAC(key *[32]byte) (h mac) { | ||||
| 	initialize(&h.state, key) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| type mac struct { | ||||
| 	state [7]uint64 // := uint64{ h0, h1, h2, r0, r1, pad0, pad1 } | ||||
|  | ||||
| 	buffer [TagSize]byte | ||||
| 	offset int | ||||
| } | ||||
|  | ||||
| func (h *mac) Write(p []byte) (n int, err error) { | ||||
| 	n = len(p) | ||||
| 	if h.offset > 0 { | ||||
| 		remaining := TagSize - h.offset | ||||
| 		if n < remaining { | ||||
| 			h.offset += copy(h.buffer[h.offset:], p) | ||||
| 			return n, nil | ||||
| 		} | ||||
| 		copy(h.buffer[h.offset:], p[:remaining]) | ||||
| 		p = p[remaining:] | ||||
| 		h.offset = 0 | ||||
| 		update(&h.state, h.buffer[:]) | ||||
| 	} | ||||
| 	if nn := len(p) - (len(p) % TagSize); nn > 0 { | ||||
| 		update(&h.state, p[:nn]) | ||||
| 		p = p[nn:] | ||||
| 	} | ||||
| 	if len(p) > 0 { | ||||
| 		h.offset += copy(h.buffer[h.offset:], p) | ||||
| 	} | ||||
| 	return n, nil | ||||
| } | ||||
|  | ||||
| func (h *mac) Sum(out *[16]byte) { | ||||
| 	state := h.state | ||||
| 	if h.offset > 0 { | ||||
| 		update(&state, h.buffer[:h.offset]) | ||||
| 	} | ||||
| 	finalize(out, &state) | ||||
| } | ||||
|   | ||||
							
								
								
									
										61
									
								
								vendor/golang.org/x/crypto/poly1305/sum_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										61
									
								
								vendor/golang.org/x/crypto/poly1305/sum_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -58,20 +58,17 @@ DATA ·poly1305Mask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF | ||||
| DATA ·poly1305Mask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC | ||||
| GLOBL ·poly1305Mask<>(SB), RODATA, $16 | ||||
|  | ||||
| // func poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]key) | ||||
| TEXT ·poly1305(SB), $0-32 | ||||
| 	MOVQ out+0(FP), DI | ||||
| 	MOVQ m+8(FP), SI | ||||
| 	MOVQ mlen+16(FP), R15 | ||||
| 	MOVQ key+24(FP), AX | ||||
| // func update(state *[7]uint64, msg []byte) | ||||
| TEXT ·update(SB), $0-32 | ||||
| 	MOVQ state+0(FP), DI | ||||
| 	MOVQ msg_base+8(FP), SI | ||||
| 	MOVQ msg_len+16(FP), R15 | ||||
|  | ||||
| 	MOVQ 0(AX), R11 | ||||
| 	MOVQ 8(AX), R12 | ||||
| 	ANDQ ·poly1305Mask<>(SB), R11   // r0 | ||||
| 	ANDQ ·poly1305Mask<>+8(SB), R12 // r1 | ||||
| 	XORQ R8, R8                    // h0 | ||||
| 	XORQ R9, R9                    // h1 | ||||
| 	XORQ R10, R10                  // h2 | ||||
| 	MOVQ 0(DI), R8   // h0 | ||||
| 	MOVQ 8(DI), R9   // h1 | ||||
| 	MOVQ 16(DI), R10 // h2 | ||||
| 	MOVQ 24(DI), R11 // r0 | ||||
| 	MOVQ 32(DI), R12 // r1 | ||||
|  | ||||
| 	CMPQ R15, $16 | ||||
| 	JB   bytes_between_0_and_15 | ||||
| @@ -109,16 +106,42 @@ flush_buffer: | ||||
| 	JMP  multiply | ||||
|  | ||||
| done: | ||||
| 	MOVQ    R8, AX | ||||
| 	MOVQ    R9, BX | ||||
| 	MOVQ R8, 0(DI) | ||||
| 	MOVQ R9, 8(DI) | ||||
| 	MOVQ R10, 16(DI) | ||||
| 	RET | ||||
|  | ||||
| // func initialize(state *[7]uint64, key *[32]byte) | ||||
| TEXT ·initialize(SB), $0-16 | ||||
| 	MOVQ state+0(FP), DI | ||||
| 	MOVQ key+8(FP), SI | ||||
|  | ||||
| 	// state[0...7] is initialized with zero | ||||
| 	MOVOU 0(SI), X0 | ||||
| 	MOVOU 16(SI), X1 | ||||
| 	MOVOU ·poly1305Mask<>(SB), X2 | ||||
| 	PAND  X2, X0 | ||||
| 	MOVOU X0, 24(DI) | ||||
| 	MOVOU X1, 40(DI) | ||||
| 	RET | ||||
|  | ||||
| // func finalize(tag *[TagSize]byte, state *[7]uint64) | ||||
| TEXT ·finalize(SB), $0-16 | ||||
| 	MOVQ tag+0(FP), DI | ||||
| 	MOVQ state+8(FP), SI | ||||
|  | ||||
| 	MOVQ    0(SI), AX | ||||
| 	MOVQ    8(SI), BX | ||||
| 	MOVQ    16(SI), CX | ||||
| 	MOVQ    AX, R8 | ||||
| 	MOVQ    BX, R9 | ||||
| 	SUBQ    $0xFFFFFFFFFFFFFFFB, AX | ||||
| 	SBBQ    $0xFFFFFFFFFFFFFFFF, BX | ||||
| 	SBBQ    $3, R10 | ||||
| 	SBBQ    $3, CX | ||||
| 	CMOVQCS R8, AX | ||||
| 	CMOVQCS R9, BX | ||||
| 	MOVQ    key+24(FP), R8 | ||||
| 	ADDQ    16(R8), AX | ||||
| 	ADCQ    24(R8), BX | ||||
| 	ADDQ    40(SI), AX | ||||
| 	ADCQ    48(SI), BX | ||||
|  | ||||
| 	MOVQ AX, 0(DI) | ||||
| 	MOVQ BX, 8(DI) | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| // Copyright 2012 The Go Authors. All rights reserved. | ||||
| // 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. | ||||
| 
 | ||||
| @@ -6,21 +6,79 @@ package poly1305 | ||||
| 
 | ||||
| import "encoding/binary" | ||||
| 
 | ||||
| const ( | ||||
| 	msgBlock   = uint32(1 << 24) | ||||
| 	finalBlock = uint32(0) | ||||
| ) | ||||
| 
 | ||||
| // sumGeneric generates an authenticator for msg using a one-time key and | ||||
| // puts the 16-byte result into out. This is the generic implementation of | ||||
| // Sum and should be called if no assembly implementation is available. | ||||
| func sumGeneric(out *[TagSize]byte, msg []byte, key *[32]byte) { | ||||
| 	var ( | ||||
| 		h0, h1, h2, h3, h4 uint32 // the hash accumulators | ||||
| 		r0, r1, r2, r3, r4 uint64 // the r part of the key | ||||
| 	) | ||||
| 	h := newMACGeneric(key) | ||||
| 	h.Write(msg) | ||||
| 	h.Sum(out) | ||||
| } | ||||
| 
 | ||||
| 	r0 = uint64(binary.LittleEndian.Uint32(key[0:]) & 0x3ffffff) | ||||
| 	r1 = uint64((binary.LittleEndian.Uint32(key[3:]) >> 2) & 0x3ffff03) | ||||
| 	r2 = uint64((binary.LittleEndian.Uint32(key[6:]) >> 4) & 0x3ffc0ff) | ||||
| 	r3 = uint64((binary.LittleEndian.Uint32(key[9:]) >> 6) & 0x3f03fff) | ||||
| 	r4 = uint64((binary.LittleEndian.Uint32(key[12:]) >> 8) & 0x00fffff) | ||||
| func newMACGeneric(key *[32]byte) (h macGeneric) { | ||||
| 	h.r[0] = binary.LittleEndian.Uint32(key[0:]) & 0x3ffffff | ||||
| 	h.r[1] = (binary.LittleEndian.Uint32(key[3:]) >> 2) & 0x3ffff03 | ||||
| 	h.r[2] = (binary.LittleEndian.Uint32(key[6:]) >> 4) & 0x3ffc0ff | ||||
| 	h.r[3] = (binary.LittleEndian.Uint32(key[9:]) >> 6) & 0x3f03fff | ||||
| 	h.r[4] = (binary.LittleEndian.Uint32(key[12:]) >> 8) & 0x00fffff | ||||
| 
 | ||||
| 	h.s[0] = binary.LittleEndian.Uint32(key[16:]) | ||||
| 	h.s[1] = binary.LittleEndian.Uint32(key[20:]) | ||||
| 	h.s[2] = binary.LittleEndian.Uint32(key[24:]) | ||||
| 	h.s[3] = binary.LittleEndian.Uint32(key[28:]) | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| type macGeneric struct { | ||||
| 	h, r [5]uint32 | ||||
| 	s    [4]uint32 | ||||
| 
 | ||||
| 	buffer [TagSize]byte | ||||
| 	offset int | ||||
| } | ||||
| 
 | ||||
| func (h *macGeneric) Write(p []byte) (n int, err error) { | ||||
| 	n = len(p) | ||||
| 	if h.offset > 0 { | ||||
| 		remaining := TagSize - h.offset | ||||
| 		if n < remaining { | ||||
| 			h.offset += copy(h.buffer[h.offset:], p) | ||||
| 			return n, nil | ||||
| 		} | ||||
| 		copy(h.buffer[h.offset:], p[:remaining]) | ||||
| 		p = p[remaining:] | ||||
| 		h.offset = 0 | ||||
| 		updateGeneric(h.buffer[:], msgBlock, &(h.h), &(h.r)) | ||||
| 	} | ||||
| 	if nn := len(p) - (len(p) % TagSize); nn > 0 { | ||||
| 		updateGeneric(p, msgBlock, &(h.h), &(h.r)) | ||||
| 		p = p[nn:] | ||||
| 	} | ||||
| 	if len(p) > 0 { | ||||
| 		h.offset += copy(h.buffer[h.offset:], p) | ||||
| 	} | ||||
| 	return n, nil | ||||
| } | ||||
| 
 | ||||
| func (h *macGeneric) Sum(out *[16]byte) { | ||||
| 	H, R := h.h, h.r | ||||
| 	if h.offset > 0 { | ||||
| 		var buffer [TagSize]byte | ||||
| 		copy(buffer[:], h.buffer[:h.offset]) | ||||
| 		buffer[h.offset] = 1 // invariant: h.offset < TagSize | ||||
| 		updateGeneric(buffer[:], finalBlock, &H, &R) | ||||
| 	} | ||||
| 	finalizeGeneric(out, &H, &(h.s)) | ||||
| } | ||||
| 
 | ||||
| func updateGeneric(msg []byte, flag uint32, h, r *[5]uint32) { | ||||
| 	h0, h1, h2, h3, h4 := h[0], h[1], h[2], h[3], h[4] | ||||
| 	r0, r1, r2, r3, r4 := uint64(r[0]), uint64(r[1]), uint64(r[2]), uint64(r[3]), uint64(r[4]) | ||||
| 	R1, R2, R3, R4 := r1*5, r2*5, r3*5, r4*5 | ||||
| 
 | ||||
| 	for len(msg) >= TagSize { | ||||
| @@ -29,7 +87,7 @@ func sumGeneric(out *[TagSize]byte, msg []byte, key *[32]byte) { | ||||
| 		h1 += (binary.LittleEndian.Uint32(msg[3:]) >> 2) & 0x3ffffff | ||||
| 		h2 += (binary.LittleEndian.Uint32(msg[6:]) >> 4) & 0x3ffffff | ||||
| 		h3 += (binary.LittleEndian.Uint32(msg[9:]) >> 6) & 0x3ffffff | ||||
| 		h4 += (binary.LittleEndian.Uint32(msg[12:]) >> 8) | (1 << 24) | ||||
| 		h4 += (binary.LittleEndian.Uint32(msg[12:]) >> 8) | flag | ||||
| 
 | ||||
| 		// h *= r | ||||
| 		d0 := (uint64(h0) * r0) + (uint64(h1) * R4) + (uint64(h2) * R3) + (uint64(h3) * R2) + (uint64(h4) * R1) | ||||
| @@ -52,36 +110,11 @@ func sumGeneric(out *[TagSize]byte, msg []byte, key *[32]byte) { | ||||
| 		msg = msg[TagSize:] | ||||
| 	} | ||||
| 
 | ||||
| 	if len(msg) > 0 { | ||||
| 		var block [TagSize]byte | ||||
| 		off := copy(block[:], msg) | ||||
| 		block[off] = 0x01 | ||||
| 	h[0], h[1], h[2], h[3], h[4] = h0, h1, h2, h3, h4 | ||||
| } | ||||
| 
 | ||||
| 		// h += msg | ||||
| 		h0 += binary.LittleEndian.Uint32(block[0:]) & 0x3ffffff | ||||
| 		h1 += (binary.LittleEndian.Uint32(block[3:]) >> 2) & 0x3ffffff | ||||
| 		h2 += (binary.LittleEndian.Uint32(block[6:]) >> 4) & 0x3ffffff | ||||
| 		h3 += (binary.LittleEndian.Uint32(block[9:]) >> 6) & 0x3ffffff | ||||
| 		h4 += (binary.LittleEndian.Uint32(block[12:]) >> 8) | ||||
| 
 | ||||
| 		// h *= r | ||||
| 		d0 := (uint64(h0) * r0) + (uint64(h1) * R4) + (uint64(h2) * R3) + (uint64(h3) * R2) + (uint64(h4) * R1) | ||||
| 		d1 := (d0 >> 26) + (uint64(h0) * r1) + (uint64(h1) * r0) + (uint64(h2) * R4) + (uint64(h3) * R3) + (uint64(h4) * R2) | ||||
| 		d2 := (d1 >> 26) + (uint64(h0) * r2) + (uint64(h1) * r1) + (uint64(h2) * r0) + (uint64(h3) * R4) + (uint64(h4) * R3) | ||||
| 		d3 := (d2 >> 26) + (uint64(h0) * r3) + (uint64(h1) * r2) + (uint64(h2) * r1) + (uint64(h3) * r0) + (uint64(h4) * R4) | ||||
| 		d4 := (d3 >> 26) + (uint64(h0) * r4) + (uint64(h1) * r3) + (uint64(h2) * r2) + (uint64(h3) * r1) + (uint64(h4) * r0) | ||||
| 
 | ||||
| 		// h %= p | ||||
| 		h0 = uint32(d0) & 0x3ffffff | ||||
| 		h1 = uint32(d1) & 0x3ffffff | ||||
| 		h2 = uint32(d2) & 0x3ffffff | ||||
| 		h3 = uint32(d3) & 0x3ffffff | ||||
| 		h4 = uint32(d4) & 0x3ffffff | ||||
| 
 | ||||
| 		h0 += uint32(d4>>26) * 5 | ||||
| 		h1 += h0 >> 26 | ||||
| 		h0 = h0 & 0x3ffffff | ||||
| 	} | ||||
| func finalizeGeneric(out *[TagSize]byte, h *[5]uint32, s *[4]uint32) { | ||||
| 	h0, h1, h2, h3, h4 := h[0], h[1], h[2], h[3], h[4] | ||||
| 
 | ||||
| 	// h %= p reduction | ||||
| 	h2 += h1 >> 26 | ||||
| @@ -123,13 +156,13 @@ func sumGeneric(out *[TagSize]byte, msg []byte, key *[32]byte) { | ||||
| 
 | ||||
| 	// s: the s part of the key | ||||
| 	// tag = (h + s) % (2^128) | ||||
| 	t := uint64(h0) + uint64(binary.LittleEndian.Uint32(key[16:])) | ||||
| 	t := uint64(h0) + uint64(s[0]) | ||||
| 	h0 = uint32(t) | ||||
| 	t = uint64(h1) + uint64(binary.LittleEndian.Uint32(key[20:])) + (t >> 32) | ||||
| 	t = uint64(h1) + uint64(s[1]) + (t >> 32) | ||||
| 	h1 = uint32(t) | ||||
| 	t = uint64(h2) + uint64(binary.LittleEndian.Uint32(key[24:])) + (t >> 32) | ||||
| 	t = uint64(h2) + uint64(s[2]) + (t >> 32) | ||||
| 	h2 = uint32(t) | ||||
| 	t = uint64(h3) + uint64(binary.LittleEndian.Uint32(key[28:])) + (t >> 32) | ||||
| 	t = uint64(h3) + uint64(s[3]) + (t >> 32) | ||||
| 	h3 = uint32(t) | ||||
| 
 | ||||
| 	binary.LittleEndian.PutUint32(out[0:], h0) | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/crypto/poly1305/sum_noasm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/crypto/poly1305/sum_noasm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -10,5 +10,7 @@ package poly1305 | ||||
| // 16-byte result into out. Authenticating two different messages with the same | ||||
| // key allows an attacker to forge messages at will. | ||||
| func Sum(out *[TagSize]byte, msg []byte, key *[32]byte) { | ||||
| 	sumGeneric(out, msg, key) | ||||
| 	h := newMAC(key) | ||||
| 	h.Write(msg) | ||||
| 	h.Sum(out) | ||||
| } | ||||
|   | ||||
							
								
								
									
										17
									
								
								vendor/golang.org/x/crypto/poly1305/sum_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								vendor/golang.org/x/crypto/poly1305/sum_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -6,16 +6,9 @@ | ||||
|  | ||||
| package poly1305 | ||||
|  | ||||
| // hasVectorFacility reports whether the machine supports | ||||
| // the vector facility (vx). | ||||
| func hasVectorFacility() bool | ||||
|  | ||||
| // hasVMSLFacility reports whether the machine supports | ||||
| // Vector Multiply Sum Logical (VMSL). | ||||
| func hasVMSLFacility() bool | ||||
|  | ||||
| var hasVX = hasVectorFacility() | ||||
| var hasVMSL = hasVMSLFacility() | ||||
| import ( | ||||
| 	"golang.org/x/sys/cpu" | ||||
| ) | ||||
|  | ||||
| // poly1305vx is an assembly implementation of Poly1305 that uses vector | ||||
| // instructions. It must only be called if the vector facility (vx) is | ||||
| @@ -33,12 +26,12 @@ func poly1305vmsl(out *[16]byte, m *byte, mlen uint64, key *[32]byte) | ||||
| // 16-byte result into out. Authenticating two different messages with the same | ||||
| // key allows an attacker to forge messages at will. | ||||
| func Sum(out *[16]byte, m []byte, key *[32]byte) { | ||||
| 	if hasVX { | ||||
| 	if cpu.S390X.HasVX { | ||||
| 		var mPtr *byte | ||||
| 		if len(m) > 0 { | ||||
| 			mPtr = &m[0] | ||||
| 		} | ||||
| 		if hasVMSL && len(m) > 256 { | ||||
| 		if cpu.S390X.HasVXE && len(m) > 256 { | ||||
| 			poly1305vmsl(out, mPtr, uint64(len(m)), key) | ||||
| 		} else { | ||||
| 			poly1305vx(out, mPtr, uint64(len(m)), key) | ||||
|   | ||||
							
								
								
									
										22
									
								
								vendor/golang.org/x/crypto/poly1305/sum_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/golang.org/x/crypto/poly1305/sum_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -376,25 +376,3 @@ b1: | ||||
|  | ||||
| 	MOVD $0, R3 | ||||
| 	BR   multiply | ||||
|  | ||||
| TEXT ·hasVectorFacility(SB), NOSPLIT, $24-1 | ||||
| 	MOVD  $x-24(SP), R1 | ||||
| 	XC    $24, 0(R1), 0(R1) // clear the storage | ||||
| 	MOVD  $2, R0            // R0 is the number of double words stored -1 | ||||
| 	WORD  $0xB2B01000       // STFLE 0(R1) | ||||
| 	XOR   R0, R0            // reset the value of R0 | ||||
| 	MOVBZ z-8(SP), R1 | ||||
| 	AND   $0x40, R1 | ||||
| 	BEQ   novector | ||||
|  | ||||
| vectorinstalled: | ||||
| 	// check if the vector instruction has been enabled | ||||
| 	VLEIB  $0, $0xF, V16 | ||||
| 	VLGVB  $0, V16, R1 | ||||
| 	CMPBNE R1, $0xF, novector | ||||
| 	MOVB   $1, ret+0(FP)      // have vx | ||||
| 	RET | ||||
|  | ||||
| novector: | ||||
| 	MOVB $0, ret+0(FP) // no vx | ||||
| 	RET | ||||
|   | ||||
							
								
								
									
										22
									
								
								vendor/golang.org/x/crypto/poly1305/sum_vmsl_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/golang.org/x/crypto/poly1305/sum_vmsl_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -907,25 +907,3 @@ square: | ||||
| 	MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9) | ||||
| 	REDUCE2(H0_0, H1_0, H2_0, M0, M1, M2, M3, M4, T_9, T_10, H0_1, M5) | ||||
| 	BR next | ||||
|  | ||||
| TEXT ·hasVMSLFacility(SB), NOSPLIT, $24-1 | ||||
| 	MOVD  $x-24(SP), R1 | ||||
| 	XC    $24, 0(R1), 0(R1) // clear the storage | ||||
| 	MOVD  $2, R0            // R0 is the number of double words stored -1 | ||||
| 	WORD  $0xB2B01000       // STFLE 0(R1) | ||||
| 	XOR   R0, R0            // reset the value of R0 | ||||
| 	MOVBZ z-8(SP), R1 | ||||
| 	AND   $0x01, R1 | ||||
| 	BEQ   novmsl | ||||
|  | ||||
| vectorinstalled: | ||||
| 	// check if the vector instruction has been enabled | ||||
| 	VLEIB  $0, $0xF, V16 | ||||
| 	VLGVB  $0, V16, R1 | ||||
| 	CMPBNE R1, $0xF, novmsl | ||||
| 	MOVB   $1, ret+0(FP)    // have vx | ||||
| 	RET | ||||
|  | ||||
| novmsl: | ||||
| 	MOVB $0, ret+0(FP) // no vx | ||||
| 	RET | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/crypto/ssh/agent/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/crypto/ssh/agent/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -541,6 +541,9 @@ func ServeAgent(agent Agent, c io.ReadWriter) error { | ||||
| 			return err | ||||
| 		} | ||||
| 		l := binary.BigEndian.Uint32(length[:]) | ||||
| 		if l == 0 { | ||||
| 			return fmt.Errorf("agent: request size is 0") | ||||
| 		} | ||||
| 		if l > maxAgentResponseBytes { | ||||
| 			// We also cap requests. | ||||
| 			return fmt.Errorf("agent: request too large: %d", l) | ||||
|   | ||||
							
								
								
									
										6
									
								
								vendor/golang.org/x/crypto/ssh/terminal/util_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/golang.org/x/crypto/ssh/terminal/util_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -64,13 +64,15 @@ func Restore(fd int, state *State) error { | ||||
| 	return windows.SetConsoleMode(windows.Handle(fd), state.mode) | ||||
| } | ||||
|  | ||||
| // GetSize returns the dimensions of the given terminal. | ||||
| // GetSize returns the visible dimensions of the given terminal. | ||||
| // | ||||
| // These dimensions don't include any scrollback buffer height. | ||||
| func GetSize(fd int) (width, height int, err error) { | ||||
| 	var info windows.ConsoleScreenBufferInfo | ||||
| 	if err := windows.GetConsoleScreenBufferInfo(windows.Handle(fd), &info); err != nil { | ||||
| 		return 0, 0, err | ||||
| 	} | ||||
| 	return int(info.Size.X), int(info.Size.Y), nil | ||||
| 	return int(info.Window.Right - info.Window.Left + 1), int(info.Window.Bottom - info.Window.Top + 1), nil | ||||
| } | ||||
|  | ||||
| // ReadPassword reads a line of input from a terminal without local echo.  This | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Tonis Tiigi
					Tonis Tiigi