forked from gitea/gitea
		
	Handle CORS requests (#6289)
This commit is contained in:
		
							parent
							
								
									6fb58a8cdc
								
							
						
					
					
						commit
						34d06f4c6b
					
				| @ -74,6 +74,23 @@ WORK_IN_PROGRESS_PREFIXES=WIP:,[WIP] | ||||
| ; List of reasons why a Pull Request or Issue can be locked | ||||
| LOCK_REASONS=Too heated,Off-topic,Resolved,Spam | ||||
| 
 | ||||
| [cors] | ||||
| ; More information about CORS can be found here: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#The_HTTP_response_headers | ||||
| ; enable cors headers (disabled by default) | ||||
| ENABLED=false | ||||
| ; scheme of allowed requests | ||||
| SCHEME=http | ||||
| ; list of requesting domains that are allowed | ||||
| ALLOW_DOMAIN=* | ||||
| ; allow subdomains of headers listed above to request | ||||
| ALLOW_SUBDOMAIN=false | ||||
| ; list of methods allowed to request | ||||
| METHODS=GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS | ||||
| ; max time to cache response | ||||
| MAX_AGE=10m | ||||
| ; allow request with credentials | ||||
| ALLOW_CREDENTIALS=false | ||||
| 
 | ||||
| [ui] | ||||
| ; Number of repositories that are displayed on one explore page | ||||
| EXPLORE_PAGING_NUM = 20 | ||||
|  | ||||
| @ -76,6 +76,16 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`. | ||||
| 
 | ||||
| - `LOCK_REASONS`: **Too heated,Off-topic,Resolved,Spam**: A list of reasons why a Pull Request or Issue can be locked | ||||
| 
 | ||||
| ## CORS (`cors`) | ||||
| 
 | ||||
| - `ENABLED`: **false**: enable cors headers (disabled by default) | ||||
| - `SCHEME`: **http**: scheme of allowed requests | ||||
| - `ALLOW_DOMAIN`: **\***: list of requesting domains that are allowed | ||||
| - `ALLOW_SUBDOMAIN`: **false**: allow subdomains of headers listed above to request | ||||
| - `METHODS`: **GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS**: list of methods allowed to request | ||||
| - `MAX_AGE`: **10m**: max time to cache response | ||||
| - `ALLOW_CREDENTIALS`: **false**: allow request with credentials | ||||
| 
 | ||||
| ## UI (`ui`) | ||||
| 
 | ||||
| - `EXPLORE_PAGING_NUM`: **20**: Number of repositories that are shown in one explore page. | ||||
|  | ||||
							
								
								
									
										13
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								go.mod
									
									
									
									
									
								
							| @ -7,7 +7,7 @@ require ( | ||||
| 	github.com/PuerkitoBio/goquery v0.0.0-20170324135448-ed7d758e9a34 | ||||
| 	github.com/RoaringBitmap/roaring v0.4.7 // indirect | ||||
| 	github.com/Unknwon/cae v0.0.0-20160715032808-c6aac99ea2ca | ||||
| 	github.com/Unknwon/com v0.0.0-20170819223952-7677a1d7c113 | ||||
| 	github.com/Unknwon/com v0.0.0-20190321035513-0fed4efef755 | ||||
| 	github.com/Unknwon/i18n v0.0.0-20171114194641-b64d33658966 | ||||
| 	github.com/Unknwon/paginater v0.0.0-20151104151617-7748a72e0141 | ||||
| 	github.com/andybalholm/cascadia v0.0.0-20161224141413-349dd0209470 // indirect | ||||
| @ -48,6 +48,7 @@ require ( | ||||
| 	github.com/go-macaron/binding v0.0.0-20160711225916-9440f336b443 | ||||
| 	github.com/go-macaron/cache v0.0.0-20151013081102-561735312776 | ||||
| 	github.com/go-macaron/captcha v0.0.0-20151123225153-8aa5919789ab | ||||
| 	github.com/go-macaron/cors v0.0.0-20190309005821-6fd6a9bfe14e9 | ||||
| 	github.com/go-macaron/csrf v0.0.0-20180426211211-503617c6b372 | ||||
| 	github.com/go-macaron/i18n v0.0.0-20160612092837-ef57533c3b0f | ||||
| 	github.com/go-macaron/inject v0.0.0-20160627170012-d8a0b8677191 | ||||
| @ -113,17 +114,17 @@ require ( | ||||
| 	github.com/willf/bitset v0.0.0-20180426185212-8ce1146b8621 // indirect | ||||
| 	github.com/yohcop/openid-go v0.0.0-20160914080427-2c050d2dae53 | ||||
| 	go.etcd.io/bbolt v1.3.2 // indirect | ||||
| 	golang.org/x/crypto v0.0.0-20180904163835-0709b304e793 | ||||
| 	golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480 | ||||
| 	golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519 | ||||
| 	golang.org/x/oauth2 v0.0.0-20181101160152-c453e0c75759 | ||||
| 	golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 | ||||
| 	golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e | ||||
| 	golang.org/x/text v0.3.0 | ||||
| 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect | ||||
| 	gopkg.in/asn1-ber.v1 v1.0.0-20150924051756-4e86f4367175 // indirect | ||||
| 	gopkg.in/bufio.v1 v1.0.0-20140618132640-567b2bfa514e // indirect | ||||
| 	gopkg.in/editorconfig/editorconfig-core-go.v1 v1.2.0 | ||||
| 	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df | ||||
| 	gopkg.in/ini.v1 v1.31.1 | ||||
| 	gopkg.in/ini.v1 v1.42.0 | ||||
| 	gopkg.in/ldap.v3 v3.0.2 | ||||
| 	gopkg.in/macaron.v1 v1.3.2 | ||||
| 	gopkg.in/redis.v2 v2.3.2 // indirect | ||||
| @ -135,6 +136,6 @@ require ( | ||||
| ) | ||||
| 
 | ||||
| replace ( | ||||
| 	github.com/denisenkom/go-mssqldb v0.0.0-20181014144952-4e0d7dc8888f => github.com/denisenkom/go-mssqldb v0.0.0-20161128230840-e32ca5036449 | ||||
| 	github.com/go-sql-driver/mysql v1.4.0 => github.com/go-sql-driver/mysql v0.0.0-20181218123637-c45f530f8e7f | ||||
| 	github.com/denisenkom/go-mssqldb => github.com/denisenkom/go-mssqldb v0.0.0-20161128230840-e32ca5036449 | ||||
| 	github.com/go-sql-driver/mysql => github.com/go-sql-driver/mysql v0.0.0-20181218123637-c45f530f8e7f | ||||
| ) | ||||
|  | ||||
							
								
								
									
										20
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								go.sum
									
									
									
									
									
								
							| @ -7,8 +7,8 @@ github.com/RoaringBitmap/roaring v0.4.7 h1:eGUudvFzvF7Kxh7JjYvXfI1f7l22/2duFby7r | ||||
| github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w= | ||||
| github.com/Unknwon/cae v0.0.0-20160715032808-c6aac99ea2ca h1:xU8R31tsvj6TesCBog973+UgI3TXjh/LqN5clki6hcc= | ||||
| github.com/Unknwon/cae v0.0.0-20160715032808-c6aac99ea2ca/go.mod h1:IRSre9/SEhVuy972TVuJLyaPTS73+8Owhe0Y0l9NXHc= | ||||
| github.com/Unknwon/com v0.0.0-20170819223952-7677a1d7c113 h1:YwXm6KwmrA5R5yJRhcnpqRUHmBXSKciHuWtK9zP5qKQ= | ||||
| github.com/Unknwon/com v0.0.0-20170819223952-7677a1d7c113/go.mod h1:KYCjqMOeHpNuTOiFQU6WEcTG7poCJrUs0YgyHNtn1no= | ||||
| github.com/Unknwon/com v0.0.0-20190321035513-0fed4efef755 h1:1B7wb36fHLSwZfHg6ngZhhtIEHQjiC5H4p7qQGBEffg= | ||||
| github.com/Unknwon/com v0.0.0-20190321035513-0fed4efef755/go.mod h1:voKvFVpXBJxdIPeqjoJuLK+UVcRlo/JLjeToGxPYu68= | ||||
| github.com/Unknwon/i18n v0.0.0-20171114194641-b64d33658966 h1:Mp8GNJ/tdTZIEdLdZfykEJaL3mTyEYrSzYNcdoQKpJk= | ||||
| github.com/Unknwon/i18n v0.0.0-20171114194641-b64d33658966/go.mod h1:SFtfq0zFPsENI7DpE87QM2hcYu5QQ0fRdCgP+P1Hrqo= | ||||
| github.com/Unknwon/paginater v0.0.0-20151104151617-7748a72e0141 h1:SSvHGK7iMpeypcHjI8UzNMz7zW/K8/dcgqk/82lCYP0= | ||||
| @ -105,6 +105,8 @@ github.com/go-macaron/cache v0.0.0-20151013081102-561735312776 h1:UYIHS1r0WotqB5 | ||||
| github.com/go-macaron/cache v0.0.0-20151013081102-561735312776/go.mod h1:hHAsZm/oBZVcY+S7qdQL6Vbg5VrXF6RuKGuqsszt3Ok= | ||||
| github.com/go-macaron/captcha v0.0.0-20151123225153-8aa5919789ab h1:4VFhsA3GE5Wwq1Ymr8KWCmrOWi1wRLEgdj48LPfQjxI= | ||||
| github.com/go-macaron/captcha v0.0.0-20151123225153-8aa5919789ab/go.mod h1:j9TJ+0nwUOWBvNnm0bheHIPFf3cC62EQo7n7O6PbjZA= | ||||
| github.com/go-macaron/cors v0.0.0-20190309005821-6fd6a9bfe14e9 h1:A0QGzY6UHHEil0I2e7C21JenNNG0mmrj5d9SFWTlgr8= | ||||
| github.com/go-macaron/cors v0.0.0-20190309005821-6fd6a9bfe14e9/go.mod h1:utmMRnVIrXPSfA9MFcpIYKEpKawjKxf62vv62k4707E= | ||||
| github.com/go-macaron/csrf v0.0.0-20180426211211-503617c6b372 h1:acrx8CnDmlKl+BPoOOLEK9Ko+SrWFB5pxRuGkKj4iqo= | ||||
| github.com/go-macaron/csrf v0.0.0-20180426211211-503617c6b372/go.mod h1:oZGMxI7MBnicI0jJqJvH4qQzyrWKhtiKxLSJKHC+ydc= | ||||
| github.com/go-macaron/i18n v0.0.0-20160612092837-ef57533c3b0f h1:wDKrZFc9pYJlqFOf7EzGbFMrSFFtyHt3plr2uTdo8Rg= | ||||
| @ -148,6 +150,8 @@ github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASu | ||||
| github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= | ||||
| github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= | ||||
| github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | ||||
| github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1ks85zJ1lfDGgIiMDuIptTOhJq+zKyg= | ||||
| github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | ||||
| github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= | ||||
| github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= | ||||
| github.com/gorilla/mux v1.6.2 h1:Pgr17XVTNXAk3q/r4CpKzC5xBM/qW1uVLV+IhRZpIIk= | ||||
| @ -178,6 +182,7 @@ github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U | ||||
| github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= | ||||
| github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= | ||||
| github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= | ||||
| github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= | ||||
| github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= | ||||
| github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= | ||||
| github.com/kballard/go-shellquote v0.0.0-20170619183022-cd60e84ee657 h1:vE7J1m7cCpiRVEIr1B5ccDxRpbPsWT5JU3if2Di5nE4= | ||||
| @ -281,6 +286,9 @@ github.com/siddontang/go-snappy v0.0.0-20140704025258-d8f7bb82a96d h1:qQWKKOvHN7 | ||||
| github.com/siddontang/go-snappy v0.0.0-20140704025258-d8f7bb82a96d/go.mod h1:vq0tzqLRu6TS7Id0wMo2N5QzJoKedVeovOpHjnykSzY= | ||||
| github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= | ||||
| github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= | ||||
| github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304 h1:Jpy1PXuP99tXNrhbq2BaPz9B+jNAvH1JPQQpG/9GCXY= | ||||
| github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= | ||||
| github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= | ||||
| github.com/smartystreets/goconvey v0.0.0-20190306220146-200a235640ff h1:86HlEv0yBCry9syNuylzqznKXDK11p6D0DT596yNMys= | ||||
| github.com/smartystreets/goconvey v0.0.0-20190306220146-200a235640ff/go.mod h1:KSQcGKpxUMHk3nbYzs/tIBAM2iDooCn0BmttHOJEbLs= | ||||
| github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= | ||||
| @ -316,6 +324,8 @@ go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= | ||||
| golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | ||||
| golang.org/x/crypto v0.0.0-20180904163835-0709b304e793 h1:u+LnwYTOOW7Ukr/fppxEb1Nwz0AtPflrblfvUudpo+I= | ||||
| golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | ||||
| golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480 h1:O5YqonU5IWby+w98jVUG9h7zlCWCcH4RHyPVReBmhzk= | ||||
| golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= | ||||
| golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| @ -332,6 +342,8 @@ golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5h | ||||
| golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8= | ||||
| golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e h1:nFYrTHrdrAOpShe27kaFHjsqYSEQ0KWqdWLu3xuZJts= | ||||
| golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= | ||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| @ -353,8 +365,8 @@ gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= | ||||
| gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= | ||||
| gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= | ||||
| gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= | ||||
| gopkg.in/ini.v1 v1.31.1 h1:8EY/6KDwKM9Qg4vu1+01ZpsxClC/XV71R+nZ/TL7D4M= | ||||
| gopkg.in/ini.v1 v1.31.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | ||||
| gopkg.in/ini.v1 v1.42.0 h1:7N3gPTt50s8GuLortA00n8AqRTk75qOP98+mTPpgzRk= | ||||
| gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | ||||
| gopkg.in/ldap.v3 v3.0.2 h1:R6RBtabK6e1GO0eQKtkyOFbAHO73QesLzI2w2DZ6b9w= | ||||
| gopkg.in/ldap.v3 v3.0.2/go.mod h1:oxD7NyBuxchC+SgJDE1Q5Od05eGt29SDQVBmV+HYbzw= | ||||
| gopkg.in/macaron.v1 v1.3.2 h1:AvWIaPmwBUA87/OWzePkoxeaw6YJWDfBt1pDFPBnLf8= | ||||
|  | ||||
							
								
								
									
										22
									
								
								integrations/cors_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								integrations/cors_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| // Copyright 2019 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package integrations | ||||
| 
 | ||||
| import ( | ||||
| 	"net/http" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
| 
 | ||||
| func TestCORSNotSet(t *testing.T) { | ||||
| 	prepareTestEnv(t) | ||||
| 	req := NewRequestf(t, "GET", "/api/v1/version") | ||||
| 	session := loginUser(t, "user2") | ||||
| 	resp := session.MakeRequest(t, req, http.StatusOK) | ||||
| 	assert.Equal(t, resp.Code, http.StatusOK) | ||||
| 	corsHeader := resp.Header().Get("Access-Control-Allow-Origin") | ||||
| 	assert.Equal(t, corsHeader, "", "Access-Control-Allow-Origin: generated header should match") // header not set | ||||
| } | ||||
							
								
								
									
										41
									
								
								modules/setting/cors.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								modules/setting/cors.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| // Copyright 2019 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package setting | ||||
| 
 | ||||
| import ( | ||||
| 	"time" | ||||
| 
 | ||||
| 	"code.gitea.io/gitea/modules/log" | ||||
| 
 | ||||
| 	"github.com/go-macaron/cors" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	// CORSConfig defines CORS settings | ||||
| 	CORSConfig cors.Options | ||||
| 	// EnableCORS defines whether CORS settings is enabled or not | ||||
| 	EnableCORS bool | ||||
| ) | ||||
| 
 | ||||
| func newCORSService() { | ||||
| 	sec := Cfg.Section("cors") | ||||
| 	// Check cors setting. | ||||
| 	EnableCORS = sec.Key("ENABLED").MustBool(false) | ||||
| 
 | ||||
| 	maxAge := sec.Key("MAX_AGE").MustDuration(10 * time.Minute) | ||||
| 
 | ||||
| 	CORSConfig = cors.Options{ | ||||
| 		Scheme:           sec.Key("SCHEME").String(), | ||||
| 		AllowDomain:      sec.Key("ALLOW_DOMAIN").String(), | ||||
| 		AllowSubdomain:   sec.Key("ALLOW_SUBDOMAIN").MustBool(), | ||||
| 		Methods:          sec.Key("METHODS").Strings(","), | ||||
| 		MaxAgeSeconds:    int(maxAge.Seconds()), | ||||
| 		AllowCredentials: sec.Key("ALLOW_CREDENTIALS").MustBool(), | ||||
| 	} | ||||
| 
 | ||||
| 	if EnableCORS { | ||||
| 		log.Info("CORS Service Enabled") | ||||
| 	} | ||||
| } | ||||
| @ -1006,6 +1006,7 @@ func NewServices() { | ||||
| 	NewLogServices(false) | ||||
| 	newCacheService() | ||||
| 	newSessionService() | ||||
| 	newCORSService() | ||||
| 	newMailService() | ||||
| 	newRegisterMailService() | ||||
| 	newNotifyMailService() | ||||
|  | ||||
| @ -74,7 +74,8 @@ import ( | ||||
| 	"code.gitea.io/gitea/routers/api/v1/user" | ||||
| 
 | ||||
| 	"github.com/go-macaron/binding" | ||||
| 	"gopkg.in/macaron.v1" | ||||
| 	"github.com/go-macaron/cors" | ||||
| 	macaron "gopkg.in/macaron.v1" | ||||
| ) | ||||
| 
 | ||||
| func sudo() macaron.Handler { | ||||
| @ -500,6 +501,12 @@ func RegisterRoutes(m *macaron.Macaron) { | ||||
| 		m.Get("/swagger", misc.Swagger) //Render V1 by default | ||||
| 	} | ||||
| 
 | ||||
| 	var handlers []macaron.Handler | ||||
| 	if setting.EnableCORS { | ||||
| 		handlers = append(handlers, cors.CORS(setting.CORSConfig)) | ||||
| 	} | ||||
| 	handlers = append(handlers, securityHeaders(), context.APIContexter(), sudo()) | ||||
| 
 | ||||
| 	m.Group("/v1", func() { | ||||
| 		// Miscellaneous | ||||
| 		if setting.API.EnableSwagger { | ||||
| @ -841,5 +848,15 @@ func RegisterRoutes(m *macaron.Macaron) { | ||||
| 		m.Group("/topics", func() { | ||||
| 			m.Get("/search", repo.TopicSearch) | ||||
| 		}) | ||||
| 	}, context.APIContexter(), sudo()) | ||||
| 	}, handlers...) | ||||
| } | ||||
| 
 | ||||
| func securityHeaders() macaron.Handler { | ||||
| 	return func(ctx *macaron.Context) { | ||||
| 		ctx.Resp.Before(func(w macaron.ResponseWriter) { | ||||
| 			// CORB: https://www.chromium.org/Home/chromium-security/corb-for-developers | ||||
| 			// http://stackoverflow.com/a/3146618/244009 | ||||
| 			w.Header().Set("x-content-type-options", "nosniff") | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|  | ||||
							
								
								
									
										53
									
								
								vendor/github.com/Unknwon/com/dir.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										53
									
								
								vendor/github.com/Unknwon/com/dir.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -32,7 +32,7 @@ func IsDir(dir string) bool { | ||||
| 	return f.IsDir() | ||||
| } | ||||
| 
 | ||||
| func statDir(dirPath, recPath string, includeDir, isDirOnly bool) ([]string, error) { | ||||
| func statDir(dirPath, recPath string, includeDir, isDirOnly, followSymlinks bool) ([]string, error) { | ||||
| 	dir, err := os.Open(dirPath) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| @ -56,13 +56,29 @@ func statDir(dirPath, recPath string, includeDir, isDirOnly bool) ([]string, err | ||||
| 			if includeDir { | ||||
| 				statList = append(statList, relPath+"/") | ||||
| 			} | ||||
| 			s, err := statDir(curPath, relPath, includeDir, isDirOnly) | ||||
| 			s, err := statDir(curPath, relPath, includeDir, isDirOnly, followSymlinks) | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
| 			} | ||||
| 			statList = append(statList, s...) | ||||
| 		} else if !isDirOnly { | ||||
| 			statList = append(statList, relPath) | ||||
| 		} else if followSymlinks && fi.Mode()&os.ModeSymlink != 0 { | ||||
| 			link, err := os.Readlink(curPath) | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
| 			} | ||||
| 
 | ||||
| 			if IsDir(link) { | ||||
| 				if includeDir { | ||||
| 					statList = append(statList, relPath+"/") | ||||
| 				} | ||||
| 				s, err := statDir(curPath, relPath, includeDir, isDirOnly, followSymlinks) | ||||
| 				if err != nil { | ||||
| 					return nil, err | ||||
| 				} | ||||
| 				statList = append(statList, s...) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return statList, nil | ||||
| @ -84,7 +100,26 @@ func StatDir(rootPath string, includeDir ...bool) ([]string, error) { | ||||
| 	if len(includeDir) >= 1 { | ||||
| 		isIncludeDir = includeDir[0] | ||||
| 	} | ||||
| 	return statDir(rootPath, "", isIncludeDir, false) | ||||
| 	return statDir(rootPath, "", isIncludeDir, false, false) | ||||
| } | ||||
| 
 | ||||
| // LstatDir gathers information of given directory by depth-first. | ||||
| // It returns slice of file list, follows symbolic links and includes subdirectories if enabled; | ||||
| // it returns error and nil slice when error occurs in underlying functions, | ||||
| // or given path is not a directory or does not exist. | ||||
| // | ||||
| // Slice does not include given path itself. | ||||
| // If subdirectories is enabled, they will have suffix '/'. | ||||
| func LstatDir(rootPath string, includeDir ...bool) ([]string, error) { | ||||
| 	if !IsDir(rootPath) { | ||||
| 		return nil, errors.New("not a directory or does not exist: " + rootPath) | ||||
| 	} | ||||
| 
 | ||||
| 	isIncludeDir := false | ||||
| 	if len(includeDir) >= 1 { | ||||
| 		isIncludeDir = includeDir[0] | ||||
| 	} | ||||
| 	return statDir(rootPath, "", isIncludeDir, false, true) | ||||
| } | ||||
| 
 | ||||
| // GetAllSubDirs returns all subdirectories of given root path. | ||||
| @ -93,7 +128,17 @@ func GetAllSubDirs(rootPath string) ([]string, error) { | ||||
| 	if !IsDir(rootPath) { | ||||
| 		return nil, errors.New("not a directory or does not exist: " + rootPath) | ||||
| 	} | ||||
| 	return statDir(rootPath, "", true, true) | ||||
| 	return statDir(rootPath, "", true, true, false) | ||||
| } | ||||
| 
 | ||||
| // LgetAllSubDirs returns all subdirectories of given root path, including | ||||
| // following symbolic links, if any. | ||||
| // Slice does not include given path itself. | ||||
| func LgetAllSubDirs(rootPath string) ([]string, error) { | ||||
| 	if !IsDir(rootPath) { | ||||
| 		return nil, errors.New("not a directory or does not exist: " + rootPath) | ||||
| 	} | ||||
| 	return statDir(rootPath, "", true, true, true) | ||||
| } | ||||
| 
 | ||||
| // GetFileListBySuffix returns an ordered list of file paths. | ||||
|  | ||||
							
								
								
									
										8
									
								
								vendor/github.com/Unknwon/com/go.mod
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/Unknwon/com/go.mod
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| module github.com/Unknwon/com | ||||
| 
 | ||||
| require ( | ||||
| 	github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e // indirect | ||||
| 	github.com/jtolds/gls v4.2.1+incompatible // indirect | ||||
| 	github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304 // indirect | ||||
| 	github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c | ||||
| ) | ||||
							
								
								
									
										8
									
								
								vendor/github.com/Unknwon/com/go.sum
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/Unknwon/com/go.sum
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1ks85zJ1lfDGgIiMDuIptTOhJq+zKyg= | ||||
| github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | ||||
| github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE= | ||||
| github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= | ||||
| github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304 h1:Jpy1PXuP99tXNrhbq2BaPz9B+jNAvH1JPQQpG/9GCXY= | ||||
| github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= | ||||
| github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c h1:Ho+uVpkel/udgjbwB5Lktg9BtvJSh2DT0Hi6LPSyI2w= | ||||
| github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= | ||||
							
								
								
									
										2
									
								
								vendor/github.com/Unknwon/com/html.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/Unknwon/com/html.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -36,7 +36,7 @@ func HtmlEncode(str string) string { | ||||
| 	return html.EscapeString(str) | ||||
| } | ||||
| 
 | ||||
| // decode string to html chars | ||||
| // HtmlDecode decodes string to html chars | ||||
| func HtmlDecode(str string) string { | ||||
| 	return html.UnescapeString(str) | ||||
| } | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/github.com/Unknwon/com/http.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/Unknwon/com/http.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -177,7 +177,7 @@ func FetchFiles(client *http.Client, files []RawFile, header http.Header) error | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // FetchFiles uses command `curl` to fetch files specified by the rawURL field in parallel. | ||||
| // FetchFilesCurl uses command `curl` to fetch files specified by the rawURL field in parallel. | ||||
| func FetchFilesCurl(files []RawFile, curlOptions ...string) error { | ||||
| 	ch := make(chan error, len(files)) | ||||
| 	for i := range files { | ||||
|  | ||||
							
								
								
									
										4
									
								
								vendor/github.com/Unknwon/com/math.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/Unknwon/com/math.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -14,12 +14,12 @@ | ||||
| 
 | ||||
| package com | ||||
| 
 | ||||
| // PowInt is int type of math.Pow function.  | ||||
| // PowInt is int type of math.Pow function. | ||||
| func PowInt(x int, y int) int { | ||||
| 	if y <= 0 { | ||||
| 		return 1 | ||||
| 	} else { | ||||
| 		if y % 2 == 0 { | ||||
| 		if y%2 == 0 { | ||||
| 			sqrt := PowInt(x, y/2) | ||||
| 			return sqrt * sqrt | ||||
| 		} else { | ||||
|  | ||||
							
								
								
									
										6
									
								
								vendor/github.com/Unknwon/com/regex.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/Unknwon/com/regex.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -37,19 +37,19 @@ func init() { | ||||
| 	regex_url = regexp.MustCompile(regex_url_pattern) | ||||
| } | ||||
| 
 | ||||
| // validate string is an email address, if not return false | ||||
| // IsEmail validates string is an email address, if not return false | ||||
| // basically validation can match 99% cases | ||||
| func IsEmail(email string) bool { | ||||
| 	return regex_email.MatchString(email) | ||||
| } | ||||
| 
 | ||||
| // validate string is an email address, if not return false | ||||
| // IsEmailRFC validates string is an email address, if not return false | ||||
| // this validation omits RFC 2822 | ||||
| func IsEmailRFC(email string) bool { | ||||
| 	return regex_strict_email.MatchString(email) | ||||
| } | ||||
| 
 | ||||
| // validate string is a url link, if not return false | ||||
| // IsUrl validates string is a url link, if not return false | ||||
| // simple validation can match 99% cases | ||||
| func IsUrl(url string) bool { | ||||
| 	return regex_url.MatchString(url) | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/github.com/Unknwon/com/slice.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/Unknwon/com/slice.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -44,7 +44,7 @@ func CompareSliceStr(s1, s2 []string) bool { | ||||
| 	return true | ||||
| } | ||||
| 
 | ||||
| // CompareSliceStr compares two 'string' type slices. | ||||
| // CompareSliceStrU compares two 'string' type slices. | ||||
| // It returns true if elements are the same, and ignores the order. | ||||
| func CompareSliceStrU(s1, s2 []string) bool { | ||||
| 	if len(s1) != len(s2) { | ||||
|  | ||||
							
								
								
									
										12
									
								
								vendor/github.com/go-macaron/cors/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								vendor/github.com/go-macaron/cors/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| # Binaries for programs and plugins | ||||
| *.exe | ||||
| *.exe~ | ||||
| *.dll | ||||
| *.so | ||||
| *.dylib | ||||
| 
 | ||||
| # Test binary, build with `go test -c` | ||||
| *.test | ||||
| 
 | ||||
| # Output of the go coverage tool, specifically when used with LiteIDE | ||||
| *.out | ||||
							
								
								
									
										201
									
								
								vendor/github.com/go-macaron/cors/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								vendor/github.com/go-macaron/cors/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,201 @@ | ||||
|                                  Apache License | ||||
|                            Version 2.0, January 2004 | ||||
|                         http://www.apache.org/licenses/ | ||||
| 
 | ||||
|    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||||
| 
 | ||||
|    1. Definitions. | ||||
| 
 | ||||
|       "License" shall mean the terms and conditions for use, reproduction, | ||||
|       and distribution as defined by Sections 1 through 9 of this document. | ||||
| 
 | ||||
|       "Licensor" shall mean the copyright owner or entity authorized by | ||||
|       the copyright owner that is granting the License. | ||||
| 
 | ||||
|       "Legal Entity" shall mean the union of the acting entity and all | ||||
|       other entities that control, are controlled by, or are under common | ||||
|       control with that entity. For the purposes of this definition, | ||||
|       "control" means (i) the power, direct or indirect, to cause the | ||||
|       direction or management of such entity, whether by contract or | ||||
|       otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||||
|       outstanding shares, or (iii) beneficial ownership of such entity. | ||||
| 
 | ||||
|       "You" (or "Your") shall mean an individual or Legal Entity | ||||
|       exercising permissions granted by this License. | ||||
| 
 | ||||
|       "Source" form shall mean the preferred form for making modifications, | ||||
|       including but not limited to software source code, documentation | ||||
|       source, and configuration files. | ||||
| 
 | ||||
|       "Object" form shall mean any form resulting from mechanical | ||||
|       transformation or translation of a Source form, including but | ||||
|       not limited to compiled object code, generated documentation, | ||||
|       and conversions to other media types. | ||||
| 
 | ||||
|       "Work" shall mean the work of authorship, whether in Source or | ||||
|       Object form, made available under the License, as indicated by a | ||||
|       copyright notice that is included in or attached to the work | ||||
|       (an example is provided in the Appendix below). | ||||
| 
 | ||||
|       "Derivative Works" shall mean any work, whether in Source or Object | ||||
|       form, that is based on (or derived from) the Work and for which the | ||||
|       editorial revisions, annotations, elaborations, or other modifications | ||||
|       represent, as a whole, an original work of authorship. For the purposes | ||||
|       of this License, Derivative Works shall not include works that remain | ||||
|       separable from, or merely link (or bind by name) to the interfaces of, | ||||
|       the Work and Derivative Works thereof. | ||||
| 
 | ||||
|       "Contribution" shall mean any work of authorship, including | ||||
|       the original version of the Work and any modifications or additions | ||||
|       to that Work or Derivative Works thereof, that is intentionally | ||||
|       submitted to Licensor for inclusion in the Work by the copyright owner | ||||
|       or by an individual or Legal Entity authorized to submit on behalf of | ||||
|       the copyright owner. For the purposes of this definition, "submitted" | ||||
|       means any form of electronic, verbal, or written communication sent | ||||
|       to the Licensor or its representatives, including but not limited to | ||||
|       communication on electronic mailing lists, source code control systems, | ||||
|       and issue tracking systems that are managed by, or on behalf of, the | ||||
|       Licensor for the purpose of discussing and improving the Work, but | ||||
|       excluding communication that is conspicuously marked or otherwise | ||||
|       designated in writing by the copyright owner as "Not a Contribution." | ||||
| 
 | ||||
|       "Contributor" shall mean Licensor and any individual or Legal Entity | ||||
|       on behalf of whom a Contribution has been received by Licensor and | ||||
|       subsequently incorporated within the Work. | ||||
| 
 | ||||
|    2. Grant of Copyright License. Subject to the terms and conditions of | ||||
|       this License, each Contributor hereby grants to You a perpetual, | ||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||
|       copyright license to reproduce, prepare Derivative Works of, | ||||
|       publicly display, publicly perform, sublicense, and distribute the | ||||
|       Work and such Derivative Works in Source or Object form. | ||||
| 
 | ||||
|    3. Grant of Patent License. Subject to the terms and conditions of | ||||
|       this License, each Contributor hereby grants to You a perpetual, | ||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||
|       (except as stated in this section) patent license to make, have made, | ||||
|       use, offer to sell, sell, import, and otherwise transfer the Work, | ||||
|       where such license applies only to those patent claims licensable | ||||
|       by such Contributor that are necessarily infringed by their | ||||
|       Contribution(s) alone or by combination of their Contribution(s) | ||||
|       with the Work to which such Contribution(s) was submitted. If You | ||||
|       institute patent litigation against any entity (including a | ||||
|       cross-claim or counterclaim in a lawsuit) alleging that the Work | ||||
|       or a Contribution incorporated within the Work constitutes direct | ||||
|       or contributory patent infringement, then any patent licenses | ||||
|       granted to You under this License for that Work shall terminate | ||||
|       as of the date such litigation is filed. | ||||
| 
 | ||||
|    4. Redistribution. You may reproduce and distribute copies of the | ||||
|       Work or Derivative Works thereof in any medium, with or without | ||||
|       modifications, and in Source or Object form, provided that You | ||||
|       meet the following conditions: | ||||
| 
 | ||||
|       (a) You must give any other recipients of the Work or | ||||
|           Derivative Works a copy of this License; and | ||||
| 
 | ||||
|       (b) You must cause any modified files to carry prominent notices | ||||
|           stating that You changed the files; and | ||||
| 
 | ||||
|       (c) You must retain, in the Source form of any Derivative Works | ||||
|           that You distribute, all copyright, patent, trademark, and | ||||
|           attribution notices from the Source form of the Work, | ||||
|           excluding those notices that do not pertain to any part of | ||||
|           the Derivative Works; and | ||||
| 
 | ||||
|       (d) If the Work includes a "NOTICE" text file as part of its | ||||
|           distribution, then any Derivative Works that You distribute must | ||||
|           include a readable copy of the attribution notices contained | ||||
|           within such NOTICE file, excluding those notices that do not | ||||
|           pertain to any part of the Derivative Works, in at least one | ||||
|           of the following places: within a NOTICE text file distributed | ||||
|           as part of the Derivative Works; within the Source form or | ||||
|           documentation, if provided along with the Derivative Works; or, | ||||
|           within a display generated by the Derivative Works, if and | ||||
|           wherever such third-party notices normally appear. The contents | ||||
|           of the NOTICE file are for informational purposes only and | ||||
|           do not modify the License. You may add Your own attribution | ||||
|           notices within Derivative Works that You distribute, alongside | ||||
|           or as an addendum to the NOTICE text from the Work, provided | ||||
|           that such additional attribution notices cannot be construed | ||||
|           as modifying the License. | ||||
| 
 | ||||
|       You may add Your own copyright statement to Your modifications and | ||||
|       may provide additional or different license terms and conditions | ||||
|       for use, reproduction, or distribution of Your modifications, or | ||||
|       for any such Derivative Works as a whole, provided Your use, | ||||
|       reproduction, and distribution of the Work otherwise complies with | ||||
|       the conditions stated in this License. | ||||
| 
 | ||||
|    5. Submission of Contributions. Unless You explicitly state otherwise, | ||||
|       any Contribution intentionally submitted for inclusion in the Work | ||||
|       by You to the Licensor shall be under the terms and conditions of | ||||
|       this License, without any additional terms or conditions. | ||||
|       Notwithstanding the above, nothing herein shall supersede or modify | ||||
|       the terms of any separate license agreement you may have executed | ||||
|       with Licensor regarding such Contributions. | ||||
| 
 | ||||
|    6. Trademarks. This License does not grant permission to use the trade | ||||
|       names, trademarks, service marks, or product names of the Licensor, | ||||
|       except as required for reasonable and customary use in describing the | ||||
|       origin of the Work and reproducing the content of the NOTICE file. | ||||
| 
 | ||||
|    7. Disclaimer of Warranty. Unless required by applicable law or | ||||
|       agreed to in writing, Licensor provides the Work (and each | ||||
|       Contributor provides its Contributions) on an "AS IS" BASIS, | ||||
|       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||||
|       implied, including, without limitation, any warranties or conditions | ||||
|       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||||
|       PARTICULAR PURPOSE. You are solely responsible for determining the | ||||
|       appropriateness of using or redistributing the Work and assume any | ||||
|       risks associated with Your exercise of permissions under this License. | ||||
| 
 | ||||
|    8. Limitation of Liability. In no event and under no legal theory, | ||||
|       whether in tort (including negligence), contract, or otherwise, | ||||
|       unless required by applicable law (such as deliberate and grossly | ||||
|       negligent acts) or agreed to in writing, shall any Contributor be | ||||
|       liable to You for damages, including any direct, indirect, special, | ||||
|       incidental, or consequential damages of any character arising as a | ||||
|       result of this License or out of the use or inability to use the | ||||
|       Work (including but not limited to damages for loss of goodwill, | ||||
|       work stoppage, computer failure or malfunction, or any and all | ||||
|       other commercial damages or losses), even if such Contributor | ||||
|       has been advised of the possibility of such damages. | ||||
| 
 | ||||
|    9. Accepting Warranty or Additional Liability. While redistributing | ||||
|       the Work or Derivative Works thereof, You may choose to offer, | ||||
|       and charge a fee for, acceptance of support, warranty, indemnity, | ||||
|       or other liability obligations and/or rights consistent with this | ||||
|       License. However, in accepting such obligations, You may act only | ||||
|       on Your own behalf and on Your sole responsibility, not on behalf | ||||
|       of any other Contributor, and only if You agree to indemnify, | ||||
|       defend, and hold each Contributor harmless for any liability | ||||
|       incurred by, or claims asserted against, such Contributor by reason | ||||
|       of your accepting any such warranty or additional liability. | ||||
| 
 | ||||
|    END OF TERMS AND CONDITIONS | ||||
| 
 | ||||
|    APPENDIX: How to apply the Apache License to your work. | ||||
| 
 | ||||
|       To apply the Apache License to your work, attach the following | ||||
|       boilerplate notice, with the fields enclosed by brackets "[]" | ||||
|       replaced with your own identifying information. (Don't include | ||||
|       the brackets!)  The text should be enclosed in the appropriate | ||||
|       comment syntax for the file format. We also recommend that a | ||||
|       file or class name and description of purpose be included on the | ||||
|       same "printed page" as the copyright notice for easier | ||||
|       identification within third-party archives. | ||||
| 
 | ||||
|    Copyright [yyyy] [name of copyright owner] | ||||
| 
 | ||||
|    Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|    you may not use this file except in compliance with the License. | ||||
|    You may obtain a copy of the License at | ||||
| 
 | ||||
|        http://www.apache.org/licenses/LICENSE-2.0 | ||||
| 
 | ||||
|    Unless required by applicable law or agreed to in writing, software | ||||
|    distributed under the License is distributed on an "AS IS" BASIS, | ||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|    See the License for the specific language governing permissions and | ||||
|    limitations under the License. | ||||
							
								
								
									
										2
									
								
								vendor/github.com/go-macaron/cors/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/go-macaron/cors/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| # cors | ||||
| Package cors is a middleware that handles CORS requests & headers for Macaron. | ||||
							
								
								
									
										139
									
								
								vendor/github.com/go-macaron/cors/cors.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								vendor/github.com/go-macaron/cors/cors.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,139 @@ | ||||
| package cors | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"log" | ||||
| 	"net/http" | ||||
| 	"net/url" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	macaron "gopkg.in/macaron.v1" | ||||
| ) | ||||
| 
 | ||||
| const _VERSION = "0.1.0" | ||||
| 
 | ||||
| func Version() string { | ||||
| 	return _VERSION | ||||
| } | ||||
| 
 | ||||
| // Options represents a struct for specifying configuration options for the CORS middleware. | ||||
| type Options struct { | ||||
| 	Section          string | ||||
| 	Scheme           string | ||||
| 	AllowDomain      string | ||||
| 	AllowSubdomain   bool | ||||
| 	Methods          []string | ||||
| 	MaxAgeSeconds    int | ||||
| 	AllowCredentials bool | ||||
| } | ||||
| 
 | ||||
| func prepareOptions(options []Options) Options { | ||||
| 	var opt Options | ||||
| 	if len(options) > 0 { | ||||
| 		opt = options[0] | ||||
| 	} | ||||
| 
 | ||||
| 	if len(opt.Section) == 0 { | ||||
| 		opt.Section = "cors" | ||||
| 	} | ||||
| 	sec := macaron.Config().Section(opt.Section) | ||||
| 
 | ||||
| 	if len(opt.Scheme) == 0 { | ||||
| 		opt.Scheme = sec.Key("SCHEME").MustString("http") | ||||
| 	} | ||||
| 	if len(opt.AllowDomain) == 0 { | ||||
| 		opt.AllowDomain = sec.Key("ALLOW_DOMAIN").MustString("*") | ||||
| 	} | ||||
| 	if !opt.AllowSubdomain { | ||||
| 		opt.AllowSubdomain = sec.Key("ALLOW_SUBDOMAIN").MustBool(false) | ||||
| 	} | ||||
| 	if len(opt.Methods) == 0 { | ||||
| 		opt.Methods = sec.Key("METHODS").Strings(",") | ||||
| 		if len(opt.Methods) == 0 { | ||||
| 			opt.Methods = []string{ | ||||
| 				http.MethodGet, | ||||
| 				http.MethodHead, | ||||
| 				http.MethodPost, | ||||
| 				http.MethodPut, | ||||
| 				http.MethodPatch, | ||||
| 				http.MethodDelete, | ||||
| 				http.MethodOptions, | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	if opt.MaxAgeSeconds <= 0 { | ||||
| 		// cache options response for 600 secs | ||||
| 		// ref: https://stackoverflow.com/questions/54300997/is-it-possible-to-cache-http-options-response?noredirect=1#comment95790277_54300997 | ||||
| 		// ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Max-Age | ||||
| 		opt.MaxAgeSeconds = sec.Key("MAX_AGE_SECONDS").MustInt(600) | ||||
| 	} | ||||
| 	if !opt.AllowCredentials { | ||||
| 		opt.AllowCredentials = sec.Key("ALLOW_CREDENTIALS").MustBool(true) | ||||
| 	} | ||||
| 
 | ||||
| 	return opt | ||||
| } | ||||
| 
 | ||||
| // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin | ||||
| // https://fetch.spec.whatwg.org/#cors-protocol-and-credentials | ||||
| // For requests without credentials, the server may specify "*" as a wildcard, thereby allowing any origin to access the resource. | ||||
| func CORS(options ...Options) macaron.Handler { | ||||
| 	opt := prepareOptions(options) | ||||
| 	return func(ctx *macaron.Context, log *log.Logger) { | ||||
| 		reqOptions := ctx.Req.Method == http.MethodOptions | ||||
| 
 | ||||
| 		headers := map[string]string{ | ||||
| 			"access-control-allow-methods": strings.Join(opt.Methods, ","), | ||||
| 			"access-control-allow-headers": ctx.Req.Header.Get("access-control-request-headers"), | ||||
| 			"access-control-max-age":       strconv.Itoa(opt.MaxAgeSeconds), | ||||
| 		} | ||||
| 		if opt.AllowDomain == "*" { | ||||
| 			headers["access-control-allow-origin"] = "*" | ||||
| 		} else if opt.AllowDomain != "" { | ||||
| 			origin := ctx.Req.Header.Get("Origin") | ||||
| 			if reqOptions && origin == "" { | ||||
| 				respErrorf(ctx, log, http.StatusBadRequest, "missing origin header in CORS request") | ||||
| 				return | ||||
| 			} | ||||
| 
 | ||||
| 			u, err := url.Parse(origin) | ||||
| 			if err != nil { | ||||
| 				respErrorf(ctx, log, http.StatusBadRequest, "Failed to parse CORS origin header. Reason: %v", err) | ||||
| 				return | ||||
| 			} | ||||
| 
 | ||||
| 			ok := u.Hostname() == opt.AllowDomain || | ||||
| 				(opt.AllowSubdomain && strings.HasSuffix(u.Hostname(), "."+opt.AllowDomain)) | ||||
| 			if ok { | ||||
| 				u.Scheme = opt.Scheme | ||||
| 				headers["access-control-allow-origin"] = u.String() | ||||
| 				headers["access-control-allow-credentials"] = strconv.FormatBool(opt.AllowCredentials) | ||||
| 				headers["vary"] = "Origin" | ||||
| 			} | ||||
| 			if reqOptions && !ok { | ||||
| 				respErrorf(ctx, log, http.StatusBadRequest, "CORS request from prohibited domain %v", origin) | ||||
| 				return | ||||
| 			} | ||||
| 		} | ||||
| 		ctx.Resp.Before(func(w macaron.ResponseWriter) { | ||||
| 			for k, v := range headers { | ||||
| 				w.Header().Set(k, v) | ||||
| 			} | ||||
| 		}) | ||||
| 		if reqOptions { | ||||
| 			ctx.Status(200) // return response | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func respErrorf(ctx *macaron.Context, log *log.Logger, statusCode int, format string, a ...interface{}) { | ||||
| 	msg := fmt.Sprintf(format, a...) | ||||
| 	log.Println(msg) | ||||
| 	ctx.WriteHeader(statusCode) | ||||
| 	_, err := ctx.Write([]byte(msg)) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
							
								
								
									
										11
									
								
								vendor/github.com/go-macaron/cors/go.mod
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/go-macaron/cors/go.mod
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| module github.com/go-macaron/cors | ||||
| 
 | ||||
| go 1.12 | ||||
| 
 | ||||
| require ( | ||||
| 	github.com/Unknwon/com v0.0.0-20190321035513-0fed4efef755 // indirect | ||||
| 	github.com/go-macaron/inject v0.0.0-20160627170012-d8a0b8677191 // indirect | ||||
| 	golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480 // indirect | ||||
| 	gopkg.in/ini.v1 v1.42.0 // indirect | ||||
| 	gopkg.in/macaron.v1 v1.3.2 | ||||
| ) | ||||
							
								
								
									
										19
									
								
								vendor/github.com/go-macaron/cors/go.sum
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/go-macaron/cors/go.sum
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| github.com/Unknwon/com v0.0.0-20190321035513-0fed4efef755 h1:1B7wb36fHLSwZfHg6ngZhhtIEHQjiC5H4p7qQGBEffg= | ||||
| github.com/Unknwon/com v0.0.0-20190321035513-0fed4efef755/go.mod h1:voKvFVpXBJxdIPeqjoJuLK+UVcRlo/JLjeToGxPYu68= | ||||
| github.com/go-macaron/inject v0.0.0-20160627170012-d8a0b8677191 h1:NjHlg70DuOkcAMqgt0+XA+NHwtu66MkTVVgR4fFWbcI= | ||||
| github.com/go-macaron/inject v0.0.0-20160627170012-d8a0b8677191/go.mod h1:VFI2o2q9kYsC4o7VP1HrEVosiZZTd+MVT3YZx4gqvJw= | ||||
| github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1ks85zJ1lfDGgIiMDuIptTOhJq+zKyg= | ||||
| github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | ||||
| github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE= | ||||
| github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= | ||||
| github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304 h1:Jpy1PXuP99tXNrhbq2BaPz9B+jNAvH1JPQQpG/9GCXY= | ||||
| github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= | ||||
| github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c h1:Ho+uVpkel/udgjbwB5Lktg9BtvJSh2DT0Hi6LPSyI2w= | ||||
| github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= | ||||
| golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480 h1:O5YqonU5IWby+w98jVUG9h7zlCWCcH4RHyPVReBmhzk= | ||||
| golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= | ||||
| golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| gopkg.in/ini.v1 v1.42.0 h1:7N3gPTt50s8GuLortA00n8AqRTk75qOP98+mTPpgzRk= | ||||
| gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | ||||
| gopkg.in/macaron.v1 v1.3.2 h1:AvWIaPmwBUA87/OWzePkoxeaw6YJWDfBt1pDFPBnLf8= | ||||
| gopkg.in/macaron.v1 v1.3.2/go.mod h1:PrsiawTWAGZs6wFbT5hlr7SQ2Ns9h7cUVtcUu4lQOVo= | ||||
							
								
								
									
										43
									
								
								vendor/golang.org/x/crypto/acme/acme.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										43
									
								
								vendor/golang.org/x/crypto/acme/acme.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -77,6 +77,10 @@ const ( | ||||
| type Client struct { | ||||
| 	// Key is the account key used to register with a CA and sign requests. | ||||
| 	// Key.Public() must return a *rsa.PublicKey or *ecdsa.PublicKey. | ||||
| 	// | ||||
| 	// The following algorithms are supported: | ||||
| 	// RS256, ES256, ES384 and ES512. | ||||
| 	// See RFC7518 for more details about the algorithms. | ||||
| 	Key crypto.Signer | ||||
| 
 | ||||
| 	// HTTPClient optionally specifies an HTTP client to use | ||||
| @ -124,11 +128,7 @@ func (c *Client) Discover(ctx context.Context) (Directory, error) { | ||||
| 		return *c.dir, nil | ||||
| 	} | ||||
| 
 | ||||
| 	dirURL := c.DirectoryURL | ||||
| 	if dirURL == "" { | ||||
| 		dirURL = LetsEncryptURL | ||||
| 	} | ||||
| 	res, err := c.get(ctx, dirURL, wantStatus(http.StatusOK)) | ||||
| 	res, err := c.get(ctx, c.directoryURL(), wantStatus(http.StatusOK)) | ||||
| 	if err != nil { | ||||
| 		return Directory{}, err | ||||
| 	} | ||||
| @ -161,6 +161,13 @@ func (c *Client) Discover(ctx context.Context) (Directory, error) { | ||||
| 	return *c.dir, nil | ||||
| } | ||||
| 
 | ||||
| func (c *Client) directoryURL() string { | ||||
| 	if c.DirectoryURL != "" { | ||||
| 		return c.DirectoryURL | ||||
| 	} | ||||
| 	return LetsEncryptURL | ||||
| } | ||||
| 
 | ||||
| // CreateCert requests a new certificate using the Certificate Signing Request csr encoded in DER format. | ||||
| // The exp argument indicates the desired certificate validity duration. CA may issue a certificate | ||||
| // with a different duration. | ||||
| @ -319,6 +326,20 @@ func (c *Client) UpdateReg(ctx context.Context, a *Account) (*Account, error) { | ||||
| // a valid authorization (Authorization.Status is StatusValid). If so, the caller | ||||
| // need not fulfill any challenge and can proceed to requesting a certificate. | ||||
| func (c *Client) Authorize(ctx context.Context, domain string) (*Authorization, error) { | ||||
| 	return c.authorize(ctx, "dns", domain) | ||||
| } | ||||
| 
 | ||||
| // AuthorizeIP is the same as Authorize but requests IP address authorization. | ||||
| // Clients which successfully obtain such authorization may request to issue | ||||
| // a certificate for IP addresses. | ||||
| // | ||||
| // See the ACME spec extension for more details about IP address identifiers: | ||||
| // https://tools.ietf.org/html/draft-ietf-acme-ip. | ||||
| func (c *Client) AuthorizeIP(ctx context.Context, ipaddr string) (*Authorization, error) { | ||||
| 	return c.authorize(ctx, "ip", ipaddr) | ||||
| } | ||||
| 
 | ||||
| func (c *Client) authorize(ctx context.Context, typ, val string) (*Authorization, error) { | ||||
| 	if _, err := c.Discover(ctx); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| @ -332,7 +353,7 @@ func (c *Client) Authorize(ctx context.Context, domain string) (*Authorization, | ||||
| 		Identifier authzID `json:"identifier"` | ||||
| 	}{ | ||||
| 		Resource:   "new-authz", | ||||
| 		Identifier: authzID{Type: "dns", Value: domain}, | ||||
| 		Identifier: authzID{Type: typ, Value: val}, | ||||
| 	} | ||||
| 	res, err := c.post(ctx, c.Key, c.dir.AuthzURL, req, wantStatus(http.StatusCreated)) | ||||
| 	if err != nil { | ||||
| @ -693,12 +714,18 @@ func (c *Client) doReg(ctx context.Context, url string, typ string, acct *Accoun | ||||
| } | ||||
| 
 | ||||
| // popNonce returns a nonce value previously stored with c.addNonce | ||||
| // or fetches a fresh one from the given URL. | ||||
| // or fetches a fresh one from a URL by issuing a HEAD request. | ||||
| // It first tries c.directoryURL() and then the provided url if the former fails. | ||||
| func (c *Client) popNonce(ctx context.Context, url string) (string, error) { | ||||
| 	c.noncesMu.Lock() | ||||
| 	defer c.noncesMu.Unlock() | ||||
| 	if len(c.nonces) == 0 { | ||||
| 		return c.fetchNonce(ctx, url) | ||||
| 		dirURL := c.directoryURL() | ||||
| 		v, err := c.fetchNonce(ctx, dirURL) | ||||
| 		if err != nil && url != dirURL { | ||||
| 			v, err = c.fetchNonce(ctx, url) | ||||
| 		} | ||||
| 		return v, err | ||||
| 	} | ||||
| 	var nonce string | ||||
| 	for nonce = range c.nonces { | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/acme/autocert/autocert.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/acme/autocert/autocert.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -69,7 +69,7 @@ func HostWhitelist(hosts ...string) HostPolicy { | ||||
| 	} | ||||
| 	return func(_ context.Context, host string) error { | ||||
| 		if !whitelist[host] { | ||||
| 			return errors.New("acme/autocert: host not configured") | ||||
| 			return fmt.Errorf("acme/autocert: host %q not configured in HostWhitelist", host) | ||||
| 		} | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
							
								
								
									
										29
									
								
								vendor/golang.org/x/crypto/acme/jws.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/crypto/acme/jws.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -25,7 +25,7 @@ func jwsEncodeJSON(claimset interface{}, key crypto.Signer, nonce string) ([]byt | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	alg, sha := jwsHasher(key) | ||||
| 	alg, sha := jwsHasher(key.Public()) | ||||
| 	if alg == "" || !sha.Available() { | ||||
| 		return nil, ErrUnsupportedKey | ||||
| 	} | ||||
| @ -97,13 +97,16 @@ func jwkEncode(pub crypto.PublicKey) (string, error) { | ||||
| } | ||||
| 
 | ||||
| // jwsSign signs the digest using the given key. | ||||
| // It returns ErrUnsupportedKey if the key type is unknown. | ||||
| // The hash is used only for RSA keys. | ||||
| // The hash is unused for ECDSA keys. | ||||
| // | ||||
| // Note: non-stdlib crypto.Signer implementations are expected to return | ||||
| // the signature in the format as specified in RFC7518. | ||||
| // See https://tools.ietf.org/html/rfc7518 for more details. | ||||
| func jwsSign(key crypto.Signer, hash crypto.Hash, digest []byte) ([]byte, error) { | ||||
| 	switch key := key.(type) { | ||||
| 	case *rsa.PrivateKey: | ||||
| 		return key.Sign(rand.Reader, digest, hash) | ||||
| 	case *ecdsa.PrivateKey: | ||||
| 	if key, ok := key.(*ecdsa.PrivateKey); ok { | ||||
| 		// The key.Sign method of ecdsa returns ASN1-encoded signature. | ||||
| 		// So, we use the package Sign function instead | ||||
| 		// to get R and S values directly and format the result accordingly. | ||||
| 		r, s, err := ecdsa.Sign(rand.Reader, key, digest) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| @ -118,18 +121,18 @@ func jwsSign(key crypto.Signer, hash crypto.Hash, digest []byte) ([]byte, error) | ||||
| 		copy(sig[size*2-len(sb):], sb) | ||||
| 		return sig, nil | ||||
| 	} | ||||
| 	return nil, ErrUnsupportedKey | ||||
| 	return key.Sign(rand.Reader, digest, hash) | ||||
| } | ||||
| 
 | ||||
| // jwsHasher indicates suitable JWS algorithm name and a hash function | ||||
| // to use for signing a digest with the provided key. | ||||
| // It returns ("", 0) if the key is not supported. | ||||
| func jwsHasher(key crypto.Signer) (string, crypto.Hash) { | ||||
| 	switch key := key.(type) { | ||||
| 	case *rsa.PrivateKey: | ||||
| func jwsHasher(pub crypto.PublicKey) (string, crypto.Hash) { | ||||
| 	switch pub := pub.(type) { | ||||
| 	case *rsa.PublicKey: | ||||
| 		return "RS256", crypto.SHA256 | ||||
| 	case *ecdsa.PrivateKey: | ||||
| 		switch key.Params().Name { | ||||
| 	case *ecdsa.PublicKey: | ||||
| 		switch pub.Params().Name { | ||||
| 		case "P-256": | ||||
| 			return "ES256", crypto.SHA256 | ||||
| 		case "P-384": | ||||
|  | ||||
							
								
								
									
										8
									
								
								vendor/golang.org/x/crypto/blowfish/cipher.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/golang.org/x/crypto/blowfish/cipher.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -3,6 +3,14 @@ | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| // Package blowfish implements Bruce Schneier's Blowfish encryption algorithm. | ||||
| // | ||||
| // Blowfish is a legacy cipher and its short block size makes it vulnerable to | ||||
| // birthday bound attacks (see https://sweet32.info). It should only be used | ||||
| // where compatibility with legacy systems, not security, is the goal. | ||||
| // | ||||
| // Deprecated: any new system should use AES (from crypto/aes, if necessary in | ||||
| // an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from | ||||
| // golang.org/x/crypto/chacha20poly1305). | ||||
| package blowfish // import "golang.org/x/crypto/blowfish" | ||||
| 
 | ||||
| // The code is a port of Bruce Schneier's C implementation. | ||||
|  | ||||
							
								
								
									
										11
									
								
								vendor/golang.org/x/crypto/cast5/cast5.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/golang.org/x/crypto/cast5/cast5.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2,8 +2,15 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| // Package cast5 implements CAST5, as defined in RFC 2144. CAST5 is a common | ||||
| // OpenPGP cipher. | ||||
| // Package cast5 implements CAST5, as defined in RFC 2144. | ||||
| // | ||||
| // CAST5 is a legacy cipher and its short block size makes it vulnerable to | ||||
| // birthday bound attacks (see https://sweet32.info). It should only be used | ||||
| // where compatibility with legacy systems, not security, is the goal. | ||||
| // | ||||
| // Deprecated: any new system should use AES (from crypto/aes, if necessary in | ||||
| // an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from | ||||
| // golang.org/x/crypto/chacha20poly1305). | ||||
| package cast5 // import "golang.org/x/crypto/cast5" | ||||
| 
 | ||||
| import "errors" | ||||
|  | ||||
							
								
								
									
										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 | ||||
|  | ||||
							
								
								
									
										90
									
								
								vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										90
									
								
								vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -121,18 +121,18 @@ TEXT ·ladderstep(SB),0,$296-8 | ||||
| 	ADDQ AX,R12 | ||||
| 	ADCQ DX,R13 | ||||
| 	MOVQ $REDMASK51,DX | ||||
| 	SHLQ $13,CX:SI | ||||
| 	SHLQ $13,SI,CX | ||||
| 	ANDQ DX,SI | ||||
| 	SHLQ $13,R9:R8 | ||||
| 	SHLQ $13,R8,R9 | ||||
| 	ANDQ DX,R8 | ||||
| 	ADDQ CX,R8 | ||||
| 	SHLQ $13,R11:R10 | ||||
| 	SHLQ $13,R10,R11 | ||||
| 	ANDQ DX,R10 | ||||
| 	ADDQ R9,R10 | ||||
| 	SHLQ $13,R13:R12 | ||||
| 	SHLQ $13,R12,R13 | ||||
| 	ANDQ DX,R12 | ||||
| 	ADDQ R11,R12 | ||||
| 	SHLQ $13,R15:R14 | ||||
| 	SHLQ $13,R14,R15 | ||||
| 	ANDQ DX,R14 | ||||
| 	ADDQ R13,R14 | ||||
| 	IMUL3Q $19,R15,CX | ||||
| @ -236,18 +236,18 @@ TEXT ·ladderstep(SB),0,$296-8 | ||||
| 	ADDQ AX,R12 | ||||
| 	ADCQ DX,R13 | ||||
| 	MOVQ $REDMASK51,DX | ||||
| 	SHLQ $13,CX:SI | ||||
| 	SHLQ $13,SI,CX | ||||
| 	ANDQ DX,SI | ||||
| 	SHLQ $13,R9:R8 | ||||
| 	SHLQ $13,R8,R9 | ||||
| 	ANDQ DX,R8 | ||||
| 	ADDQ CX,R8 | ||||
| 	SHLQ $13,R11:R10 | ||||
| 	SHLQ $13,R10,R11 | ||||
| 	ANDQ DX,R10 | ||||
| 	ADDQ R9,R10 | ||||
| 	SHLQ $13,R13:R12 | ||||
| 	SHLQ $13,R12,R13 | ||||
| 	ANDQ DX,R12 | ||||
| 	ADDQ R11,R12 | ||||
| 	SHLQ $13,R15:R14 | ||||
| 	SHLQ $13,R14,R15 | ||||
| 	ANDQ DX,R14 | ||||
| 	ADDQ R13,R14 | ||||
| 	IMUL3Q $19,R15,CX | ||||
| @ -441,18 +441,18 @@ TEXT ·ladderstep(SB),0,$296-8 | ||||
| 	ADDQ AX,R12 | ||||
| 	ADCQ DX,R13 | ||||
| 	MOVQ $REDMASK51,DX | ||||
| 	SHLQ $13,CX:SI | ||||
| 	SHLQ $13,SI,CX | ||||
| 	ANDQ DX,SI | ||||
| 	SHLQ $13,R9:R8 | ||||
| 	SHLQ $13,R8,R9 | ||||
| 	ANDQ DX,R8 | ||||
| 	ADDQ CX,R8 | ||||
| 	SHLQ $13,R11:R10 | ||||
| 	SHLQ $13,R10,R11 | ||||
| 	ANDQ DX,R10 | ||||
| 	ADDQ R9,R10 | ||||
| 	SHLQ $13,R13:R12 | ||||
| 	SHLQ $13,R12,R13 | ||||
| 	ANDQ DX,R12 | ||||
| 	ADDQ R11,R12 | ||||
| 	SHLQ $13,R15:R14 | ||||
| 	SHLQ $13,R14,R15 | ||||
| 	ANDQ DX,R14 | ||||
| 	ADDQ R13,R14 | ||||
| 	IMUL3Q $19,R15,CX | ||||
| @ -591,18 +591,18 @@ TEXT ·ladderstep(SB),0,$296-8 | ||||
| 	ADDQ AX,R12 | ||||
| 	ADCQ DX,R13 | ||||
| 	MOVQ $REDMASK51,DX | ||||
| 	SHLQ $13,CX:SI | ||||
| 	SHLQ $13,SI,CX | ||||
| 	ANDQ DX,SI | ||||
| 	SHLQ $13,R9:R8 | ||||
| 	SHLQ $13,R8,R9 | ||||
| 	ANDQ DX,R8 | ||||
| 	ADDQ CX,R8 | ||||
| 	SHLQ $13,R11:R10 | ||||
| 	SHLQ $13,R10,R11 | ||||
| 	ANDQ DX,R10 | ||||
| 	ADDQ R9,R10 | ||||
| 	SHLQ $13,R13:R12 | ||||
| 	SHLQ $13,R12,R13 | ||||
| 	ANDQ DX,R12 | ||||
| 	ADDQ R11,R12 | ||||
| 	SHLQ $13,R15:R14 | ||||
| 	SHLQ $13,R14,R15 | ||||
| 	ANDQ DX,R14 | ||||
| 	ADDQ R13,R14 | ||||
| 	IMUL3Q $19,R15,CX | ||||
| @ -731,18 +731,18 @@ TEXT ·ladderstep(SB),0,$296-8 | ||||
| 	ADDQ AX,R12 | ||||
| 	ADCQ DX,R13 | ||||
| 	MOVQ $REDMASK51,DX | ||||
| 	SHLQ $13,CX:SI | ||||
| 	SHLQ $13,SI,CX | ||||
| 	ANDQ DX,SI | ||||
| 	SHLQ $13,R9:R8 | ||||
| 	SHLQ $13,R8,R9 | ||||
| 	ANDQ DX,R8 | ||||
| 	ADDQ CX,R8 | ||||
| 	SHLQ $13,R11:R10 | ||||
| 	SHLQ $13,R10,R11 | ||||
| 	ANDQ DX,R10 | ||||
| 	ADDQ R9,R10 | ||||
| 	SHLQ $13,R13:R12 | ||||
| 	SHLQ $13,R12,R13 | ||||
| 	ANDQ DX,R12 | ||||
| 	ADDQ R11,R12 | ||||
| 	SHLQ $13,R15:R14 | ||||
| 	SHLQ $13,R14,R15 | ||||
| 	ANDQ DX,R14 | ||||
| 	ADDQ R13,R14 | ||||
| 	IMUL3Q $19,R15,CX | ||||
| @ -846,18 +846,18 @@ TEXT ·ladderstep(SB),0,$296-8 | ||||
| 	ADDQ AX,R12 | ||||
| 	ADCQ DX,R13 | ||||
| 	MOVQ $REDMASK51,DX | ||||
| 	SHLQ $13,CX:SI | ||||
| 	SHLQ $13,SI,CX | ||||
| 	ANDQ DX,SI | ||||
| 	SHLQ $13,R9:R8 | ||||
| 	SHLQ $13,R8,R9 | ||||
| 	ANDQ DX,R8 | ||||
| 	ADDQ CX,R8 | ||||
| 	SHLQ $13,R11:R10 | ||||
| 	SHLQ $13,R10,R11 | ||||
| 	ANDQ DX,R10 | ||||
| 	ADDQ R9,R10 | ||||
| 	SHLQ $13,R13:R12 | ||||
| 	SHLQ $13,R12,R13 | ||||
| 	ANDQ DX,R12 | ||||
| 	ADDQ R11,R12 | ||||
| 	SHLQ $13,R15:R14 | ||||
| 	SHLQ $13,R14,R15 | ||||
| 	ANDQ DX,R14 | ||||
| 	ADDQ R13,R14 | ||||
| 	IMUL3Q $19,R15,CX | ||||
| @ -996,18 +996,18 @@ TEXT ·ladderstep(SB),0,$296-8 | ||||
| 	ADDQ AX,R12 | ||||
| 	ADCQ DX,R13 | ||||
| 	MOVQ $REDMASK51,DX | ||||
| 	SHLQ $13,CX:SI | ||||
| 	SHLQ $13,SI,CX | ||||
| 	ANDQ DX,SI | ||||
| 	SHLQ $13,R9:R8 | ||||
| 	SHLQ $13,R8,R9 | ||||
| 	ANDQ DX,R8 | ||||
| 	ADDQ CX,R8 | ||||
| 	SHLQ $13,R11:R10 | ||||
| 	SHLQ $13,R10,R11 | ||||
| 	ANDQ DX,R10 | ||||
| 	ADDQ R9,R10 | ||||
| 	SHLQ $13,R13:R12 | ||||
| 	SHLQ $13,R12,R13 | ||||
| 	ANDQ DX,R12 | ||||
| 	ADDQ R11,R12 | ||||
| 	SHLQ $13,R15:R14 | ||||
| 	SHLQ $13,R14,R15 | ||||
| 	ANDQ DX,R14 | ||||
| 	ADDQ R13,R14 | ||||
| 	IMUL3Q $19,R15,CX | ||||
| @ -1146,18 +1146,18 @@ TEXT ·ladderstep(SB),0,$296-8 | ||||
| 	ADDQ AX,R12 | ||||
| 	ADCQ DX,R13 | ||||
| 	MOVQ $REDMASK51,DX | ||||
| 	SHLQ $13,CX:SI | ||||
| 	SHLQ $13,SI,CX | ||||
| 	ANDQ DX,SI | ||||
| 	SHLQ $13,R9:R8 | ||||
| 	SHLQ $13,R8,R9 | ||||
| 	ANDQ DX,R8 | ||||
| 	ADDQ CX,R8 | ||||
| 	SHLQ $13,R11:R10 | ||||
| 	SHLQ $13,R10,R11 | ||||
| 	ANDQ DX,R10 | ||||
| 	ADDQ R9,R10 | ||||
| 	SHLQ $13,R13:R12 | ||||
| 	SHLQ $13,R12,R13 | ||||
| 	ANDQ DX,R12 | ||||
| 	ADDQ R11,R12 | ||||
| 	SHLQ $13,R15:R14 | ||||
| 	SHLQ $13,R14,R15 | ||||
| 	ANDQ DX,R14 | ||||
| 	ADDQ R13,R14 | ||||
| 	IMUL3Q $19,R15,CX | ||||
| @ -1332,18 +1332,18 @@ TEXT ·ladderstep(SB),0,$296-8 | ||||
| 	ADDQ AX,R12 | ||||
| 	ADCQ DX,R13 | ||||
| 	MOVQ $REDMASK51,DX | ||||
| 	SHLQ $13,CX:SI | ||||
| 	SHLQ $13,SI,CX | ||||
| 	ANDQ DX,SI | ||||
| 	SHLQ $13,R9:R8 | ||||
| 	SHLQ $13,R8,R9 | ||||
| 	ANDQ DX,R8 | ||||
| 	ADDQ CX,R8 | ||||
| 	SHLQ $13,R11:R10 | ||||
| 	SHLQ $13,R10,R11 | ||||
| 	ANDQ DX,R10 | ||||
| 	ADDQ R9,R10 | ||||
| 	SHLQ $13,R13:R12 | ||||
| 	SHLQ $13,R12,R13 | ||||
| 	ANDQ DX,R12 | ||||
| 	ADDQ R11,R12 | ||||
| 	SHLQ $13,R15:R14 | ||||
| 	SHLQ $13,R14,R15 | ||||
| 	ANDQ DX,R14 | ||||
| 	ADDQ R13,R14 | ||||
| 	IMUL3Q $19,R15,CX | ||||
|  | ||||
							
								
								
									
										10
									
								
								vendor/golang.org/x/crypto/curve25519/mul_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/golang.org/x/crypto/curve25519/mul_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -124,18 +124,18 @@ TEXT ·mul(SB),0,$16-24 | ||||
| 	ADDQ AX,R14 | ||||
| 	ADCQ DX,R15 | ||||
| 	MOVQ $REDMASK51,SI | ||||
| 	SHLQ $13,R9:R8 | ||||
| 	SHLQ $13,R8,R9 | ||||
| 	ANDQ SI,R8 | ||||
| 	SHLQ $13,R11:R10 | ||||
| 	SHLQ $13,R10,R11 | ||||
| 	ANDQ SI,R10 | ||||
| 	ADDQ R9,R10 | ||||
| 	SHLQ $13,R13:R12 | ||||
| 	SHLQ $13,R12,R13 | ||||
| 	ANDQ SI,R12 | ||||
| 	ADDQ R11,R12 | ||||
| 	SHLQ $13,R15:R14 | ||||
| 	SHLQ $13,R14,R15 | ||||
| 	ANDQ SI,R14 | ||||
| 	ADDQ R13,R14 | ||||
| 	SHLQ $13,BP:BX | ||||
| 	SHLQ $13,BX,BP | ||||
| 	ANDQ SI,BX | ||||
| 	ADDQ R15,BX | ||||
| 	IMUL3Q $19,BP,DX | ||||
|  | ||||
							
								
								
									
										10
									
								
								vendor/golang.org/x/crypto/curve25519/square_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/golang.org/x/crypto/curve25519/square_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -87,18 +87,18 @@ TEXT ·square(SB),7,$0-16 | ||||
| 	ADDQ AX,R13 | ||||
| 	ADCQ DX,R14 | ||||
| 	MOVQ $REDMASK51,SI | ||||
| 	SHLQ $13,R8:CX | ||||
| 	SHLQ $13,CX,R8 | ||||
| 	ANDQ SI,CX | ||||
| 	SHLQ $13,R10:R9 | ||||
| 	SHLQ $13,R9,R10 | ||||
| 	ANDQ SI,R9 | ||||
| 	ADDQ R8,R9 | ||||
| 	SHLQ $13,R12:R11 | ||||
| 	SHLQ $13,R11,R12 | ||||
| 	ANDQ SI,R11 | ||||
| 	ADDQ R10,R11 | ||||
| 	SHLQ $13,R14:R13 | ||||
| 	SHLQ $13,R13,R14 | ||||
| 	ANDQ SI,R13 | ||||
| 	ADDQ R12,R13 | ||||
| 	SHLQ $13,BX:R15 | ||||
| 	SHLQ $13,R15,BX | ||||
| 	ANDQ SI,R15 | ||||
| 	ADDQ R14,R15 | ||||
| 	IMUL3Q $19,BX,DX | ||||
|  | ||||
							
								
								
									
										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 | ||||
|  | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/crypto/md4/md4.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/crypto/md4/md4.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -3,6 +3,10 @@ | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| // Package md4 implements the MD4 hash algorithm as defined in RFC 1320. | ||||
| // | ||||
| // Deprecated: MD4 is cryptographically broken and should should only be used | ||||
| // where compatibility with legacy systems, not security, is the goal. Instead, | ||||
| // use a secure hash like SHA-256 (from crypto/sha256). | ||||
| package md4 // import "golang.org/x/crypto/md4" | ||||
| 
 | ||||
| import ( | ||||
|  | ||||
							
								
								
									
										143
									
								
								vendor/golang.org/x/crypto/openpgp/keys.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										143
									
								
								vendor/golang.org/x/crypto/openpgp/keys.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -333,7 +333,6 @@ func ReadEntity(packets *packet.Reader) (*Entity, error) { | ||||
| 		return nil, errors.StructuralError("primary key cannot be used for signatures") | ||||
| 	} | ||||
| 
 | ||||
| 	var current *Identity | ||||
| 	var revocations []*packet.Signature | ||||
| EachPacket: | ||||
| 	for { | ||||
| @ -346,36 +345,8 @@ EachPacket: | ||||
| 
 | ||||
| 		switch pkt := p.(type) { | ||||
| 		case *packet.UserId: | ||||
| 			// Make a new Identity object, that we might wind up throwing away. | ||||
| 			// We'll only add it if we get a valid self-signature over this | ||||
| 			// userID. | ||||
| 			current = new(Identity) | ||||
| 			current.Name = pkt.Id | ||||
| 			current.UserId = pkt | ||||
| 
 | ||||
| 			for { | ||||
| 				p, err = packets.Next() | ||||
| 				if err == io.EOF { | ||||
| 					break EachPacket | ||||
| 				} else if err != nil { | ||||
| 					return nil, err | ||||
| 				} | ||||
| 
 | ||||
| 				sig, ok := p.(*packet.Signature) | ||||
| 				if !ok { | ||||
| 					packets.Unread(p) | ||||
| 					continue EachPacket | ||||
| 				} | ||||
| 
 | ||||
| 				if (sig.SigType == packet.SigTypePositiveCert || sig.SigType == packet.SigTypeGenericCert) && sig.IssuerKeyId != nil && *sig.IssuerKeyId == e.PrimaryKey.KeyId { | ||||
| 					if err = e.PrimaryKey.VerifyUserIdSignature(pkt.Id, e.PrimaryKey, sig); err != nil { | ||||
| 						return nil, errors.StructuralError("user ID self-signature invalid: " + err.Error()) | ||||
| 					} | ||||
| 					current.SelfSignature = sig | ||||
| 					e.Identities[pkt.Id] = current | ||||
| 				} else { | ||||
| 					current.Signatures = append(current.Signatures, sig) | ||||
| 				} | ||||
| 			if err := addUserID(e, packets, pkt); err != nil { | ||||
| 				return nil, err | ||||
| 			} | ||||
| 		case *packet.Signature: | ||||
| 			if pkt.SigType == packet.SigTypeKeyRevocation { | ||||
| @ -384,11 +355,9 @@ EachPacket: | ||||
| 				// TODO: RFC4880 5.2.1 permits signatures | ||||
| 				// directly on keys (eg. to bind additional | ||||
| 				// revocation keys). | ||||
| 			} else if current == nil { | ||||
| 				return nil, errors.StructuralError("signature packet found before user id packet") | ||||
| 			} else { | ||||
| 				current.Signatures = append(current.Signatures, pkt) | ||||
| 			} | ||||
| 			// Else, ignoring the signature as it does not follow anything | ||||
| 			// we would know to attach it to. | ||||
| 		case *packet.PrivateKey: | ||||
| 			if pkt.IsSubkey == false { | ||||
| 				packets.Unread(p) | ||||
| @ -429,33 +398,105 @@ EachPacket: | ||||
| 	return e, nil | ||||
| } | ||||
| 
 | ||||
| func addUserID(e *Entity, packets *packet.Reader, pkt *packet.UserId) error { | ||||
| 	// Make a new Identity object, that we might wind up throwing away. | ||||
| 	// We'll only add it if we get a valid self-signature over this | ||||
| 	// userID. | ||||
| 	identity := new(Identity) | ||||
| 	identity.Name = pkt.Id | ||||
| 	identity.UserId = pkt | ||||
| 
 | ||||
| 	for { | ||||
| 		p, err := packets.Next() | ||||
| 		if err == io.EOF { | ||||
| 			break | ||||
| 		} else if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 		sig, ok := p.(*packet.Signature) | ||||
| 		if !ok { | ||||
| 			packets.Unread(p) | ||||
| 			break | ||||
| 		} | ||||
| 
 | ||||
| 		if (sig.SigType == packet.SigTypePositiveCert || sig.SigType == packet.SigTypeGenericCert) && sig.IssuerKeyId != nil && *sig.IssuerKeyId == e.PrimaryKey.KeyId { | ||||
| 			if err = e.PrimaryKey.VerifyUserIdSignature(pkt.Id, e.PrimaryKey, sig); err != nil { | ||||
| 				return errors.StructuralError("user ID self-signature invalid: " + err.Error()) | ||||
| 			} | ||||
| 			identity.SelfSignature = sig | ||||
| 			e.Identities[pkt.Id] = identity | ||||
| 		} else { | ||||
| 			identity.Signatures = append(identity.Signatures, sig) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func addSubkey(e *Entity, packets *packet.Reader, pub *packet.PublicKey, priv *packet.PrivateKey) error { | ||||
| 	var subKey Subkey | ||||
| 	subKey.PublicKey = pub | ||||
| 	subKey.PrivateKey = priv | ||||
| 	p, err := packets.Next() | ||||
| 	if err == io.EOF { | ||||
| 		return io.ErrUnexpectedEOF | ||||
| 
 | ||||
| 	for { | ||||
| 		p, err := packets.Next() | ||||
| 		if err == io.EOF { | ||||
| 			break | ||||
| 		} else if err != nil { | ||||
| 			return errors.StructuralError("subkey signature invalid: " + err.Error()) | ||||
| 		} | ||||
| 
 | ||||
| 		sig, ok := p.(*packet.Signature) | ||||
| 		if !ok { | ||||
| 			packets.Unread(p) | ||||
| 			break | ||||
| 		} | ||||
| 
 | ||||
| 		if sig.SigType != packet.SigTypeSubkeyBinding && sig.SigType != packet.SigTypeSubkeyRevocation { | ||||
| 			return errors.StructuralError("subkey signature with wrong type") | ||||
| 		} | ||||
| 
 | ||||
| 		if err := e.PrimaryKey.VerifyKeySignature(subKey.PublicKey, sig); err != nil { | ||||
| 			return errors.StructuralError("subkey signature invalid: " + err.Error()) | ||||
| 		} | ||||
| 
 | ||||
| 		switch sig.SigType { | ||||
| 		case packet.SigTypeSubkeyRevocation: | ||||
| 			subKey.Sig = sig | ||||
| 		case packet.SigTypeSubkeyBinding: | ||||
| 
 | ||||
| 			if shouldReplaceSubkeySig(subKey.Sig, sig) { | ||||
| 				subKey.Sig = sig | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		return errors.StructuralError("subkey signature invalid: " + err.Error()) | ||||
| 	} | ||||
| 	var ok bool | ||||
| 	subKey.Sig, ok = p.(*packet.Signature) | ||||
| 	if !ok { | ||||
| 
 | ||||
| 	if subKey.Sig == nil { | ||||
| 		return errors.StructuralError("subkey packet not followed by signature") | ||||
| 	} | ||||
| 	if subKey.Sig.SigType != packet.SigTypeSubkeyBinding && subKey.Sig.SigType != packet.SigTypeSubkeyRevocation { | ||||
| 		return errors.StructuralError("subkey signature with wrong type") | ||||
| 	} | ||||
| 	err = e.PrimaryKey.VerifyKeySignature(subKey.PublicKey, subKey.Sig) | ||||
| 	if err != nil { | ||||
| 		return errors.StructuralError("subkey signature invalid: " + err.Error()) | ||||
| 	} | ||||
| 
 | ||||
| 	e.Subkeys = append(e.Subkeys, subKey) | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func shouldReplaceSubkeySig(existingSig, potentialNewSig *packet.Signature) bool { | ||||
| 	if potentialNewSig == nil { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	if existingSig == nil { | ||||
| 		return true | ||||
| 	} | ||||
| 
 | ||||
| 	if existingSig.SigType == packet.SigTypeSubkeyRevocation { | ||||
| 		return false // never override a revocation signature | ||||
| 	} | ||||
| 
 | ||||
| 	return potentialNewSig.CreationTime.After(existingSig.CreationTime) | ||||
| } | ||||
| 
 | ||||
| const defaultRSAKeyBits = 2048 | ||||
| 
 | ||||
| // NewEntity returns an Entity that contains a fresh RSA/RSA keypair with a | ||||
|  | ||||
							
								
								
									
										12
									
								
								vendor/golang.org/x/crypto/openpgp/packet/packet.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/golang.org/x/crypto/openpgp/packet/packet.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -404,14 +404,16 @@ const ( | ||||
| type PublicKeyAlgorithm uint8 | ||||
| 
 | ||||
| const ( | ||||
| 	PubKeyAlgoRSA            PublicKeyAlgorithm = 1 | ||||
| 	PubKeyAlgoRSAEncryptOnly PublicKeyAlgorithm = 2 | ||||
| 	PubKeyAlgoRSASignOnly    PublicKeyAlgorithm = 3 | ||||
| 	PubKeyAlgoElGamal        PublicKeyAlgorithm = 16 | ||||
| 	PubKeyAlgoDSA            PublicKeyAlgorithm = 17 | ||||
| 	PubKeyAlgoRSA     PublicKeyAlgorithm = 1 | ||||
| 	PubKeyAlgoElGamal PublicKeyAlgorithm = 16 | ||||
| 	PubKeyAlgoDSA     PublicKeyAlgorithm = 17 | ||||
| 	// RFC 6637, Section 5. | ||||
| 	PubKeyAlgoECDH  PublicKeyAlgorithm = 18 | ||||
| 	PubKeyAlgoECDSA PublicKeyAlgorithm = 19 | ||||
| 
 | ||||
| 	// Deprecated in RFC 4880, Section 13.5. Use key flags instead. | ||||
| 	PubKeyAlgoRSAEncryptOnly PublicKeyAlgorithm = 2 | ||||
| 	PubKeyAlgoRSASignOnly    PublicKeyAlgorithm = 3 | ||||
| ) | ||||
| 
 | ||||
| // CanEncrypt returns true if it's possible to encrypt a message to a public | ||||
|  | ||||
							
								
								
									
										9
									
								
								vendor/golang.org/x/crypto/openpgp/packet/private_key.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/golang.org/x/crypto/openpgp/packet/private_key.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -64,14 +64,19 @@ func NewECDSAPrivateKey(currentTime time.Time, priv *ecdsa.PrivateKey) *PrivateK | ||||
| 	return pk | ||||
| } | ||||
| 
 | ||||
| // NewSignerPrivateKey creates a sign-only PrivateKey from a crypto.Signer that | ||||
| // NewSignerPrivateKey creates a PrivateKey from a crypto.Signer that | ||||
| // implements RSA or ECDSA. | ||||
| func NewSignerPrivateKey(currentTime time.Time, signer crypto.Signer) *PrivateKey { | ||||
| 	pk := new(PrivateKey) | ||||
| 	// In general, the public Keys should be used as pointers. We still | ||||
| 	// type-switch on the values, for backwards-compatibility. | ||||
| 	switch pubkey := signer.Public().(type) { | ||||
| 	case *rsa.PublicKey: | ||||
| 		pk.PublicKey = *NewRSAPublicKey(currentTime, pubkey) | ||||
| 	case rsa.PublicKey: | ||||
| 		pk.PublicKey = *NewRSAPublicKey(currentTime, &pubkey) | ||||
| 		pk.PubKeyAlgo = PubKeyAlgoRSASignOnly | ||||
| 	case *ecdsa.PublicKey: | ||||
| 		pk.PublicKey = *NewECDSAPublicKey(currentTime, pubkey) | ||||
| 	case ecdsa.PublicKey: | ||||
| 		pk.PublicKey = *NewECDSAPublicKey(currentTime, &pubkey) | ||||
| 	default: | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/openpgp/packet/signature.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/openpgp/packet/signature.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -542,7 +542,7 @@ func (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err e | ||||
| 			r, s, err = ecdsa.Sign(config.Random(), pk, digest) | ||||
| 		} else { | ||||
| 			var b []byte | ||||
| 			b, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, nil) | ||||
| 			b, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, sig.Hash) | ||||
| 			if err == nil { | ||||
| 				r, s, err = unwrapECDSASig(b) | ||||
| 			} | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/openpgp/packet/userattribute.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/openpgp/packet/userattribute.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -80,7 +80,7 @@ func (uat *UserAttribute) Serialize(w io.Writer) (err error) { | ||||
| 
 | ||||
| // ImageData returns zero or more byte slices, each containing | ||||
| // JPEG File Interchange Format (JFIF), for each photo in the | ||||
| // the user attribute packet. | ||||
| // user attribute packet. | ||||
| func (uat *UserAttribute) ImageData() (imageData [][]byte) { | ||||
| 	for _, sp := range uat.Contents { | ||||
| 		if sp.SubType == UserAttrImageSubpacket && len(sp.Contents) > 16 { | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/openpgp/write.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/openpgp/write.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -271,6 +271,7 @@ func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHint | ||||
| 	// These are the possible hash functions that we'll use for the signature. | ||||
| 	candidateHashes := []uint8{ | ||||
| 		hashToHashId(crypto.SHA256), | ||||
| 		hashToHashId(crypto.SHA384), | ||||
| 		hashToHashId(crypto.SHA512), | ||||
| 		hashToHashId(crypto.SHA1), | ||||
| 		hashToHashId(crypto.RIPEMD160), | ||||
| @ -349,6 +350,7 @@ func Sign(output io.Writer, signed *Entity, hints *FileHints, config *packet.Con | ||||
| 	// These are the possible hash functions that we'll use for the signature. | ||||
| 	candidateHashes := []uint8{ | ||||
| 		hashToHashId(crypto.SHA256), | ||||
| 		hashToHashId(crypto.SHA384), | ||||
| 		hashToHashId(crypto.SHA512), | ||||
| 		hashToHashId(crypto.SHA1), | ||||
| 		hashToHashId(crypto.RIPEMD160), | ||||
|  | ||||
							
								
								
									
										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 | ||||
|  | ||||
							
								
								
									
										120
									
								
								vendor/golang.org/x/crypto/ssh/agent/client.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										120
									
								
								vendor/golang.org/x/crypto/ssh/agent/client.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -25,10 +25,22 @@ import ( | ||||
| 	"math/big" | ||||
| 	"sync" | ||||
| 
 | ||||
| 	"crypto" | ||||
| 	"golang.org/x/crypto/ed25519" | ||||
| 	"golang.org/x/crypto/ssh" | ||||
| ) | ||||
| 
 | ||||
| // SignatureFlags represent additional flags that can be passed to the signature | ||||
| // requests an defined in [PROTOCOL.agent] section 4.5.1. | ||||
| type SignatureFlags uint32 | ||||
| 
 | ||||
| // SignatureFlag values as defined in [PROTOCOL.agent] section 5.3. | ||||
| const ( | ||||
| 	SignatureFlagReserved SignatureFlags = 1 << iota | ||||
| 	SignatureFlagRsaSha256 | ||||
| 	SignatureFlagRsaSha512 | ||||
| ) | ||||
| 
 | ||||
| // Agent represents the capabilities of an ssh-agent. | ||||
| type Agent interface { | ||||
| 	// List returns the identities known to the agent. | ||||
| @ -57,6 +69,26 @@ type Agent interface { | ||||
| 	Signers() ([]ssh.Signer, error) | ||||
| } | ||||
| 
 | ||||
| type ExtendedAgent interface { | ||||
| 	Agent | ||||
| 
 | ||||
| 	// SignWithFlags signs like Sign, but allows for additional flags to be sent/received | ||||
| 	SignWithFlags(key ssh.PublicKey, data []byte, flags SignatureFlags) (*ssh.Signature, error) | ||||
| 
 | ||||
| 	// Extension processes a custom extension request. Standard-compliant agents are not | ||||
| 	// required to support any extensions, but this method allows agents to implement | ||||
| 	// vendor-specific methods or add experimental features. See [PROTOCOL.agent] section 4.7. | ||||
| 	// If agent extensions are unsupported entirely this method MUST return an | ||||
| 	// ErrExtensionUnsupported error. Similarly, if just the specific extensionType in | ||||
| 	// the request is unsupported by the agent then ErrExtensionUnsupported MUST be | ||||
| 	// returned. | ||||
| 	// | ||||
| 	// In the case of success, since [PROTOCOL.agent] section 4.7 specifies that the contents | ||||
| 	// of the response are unspecified (including the type of the message), the complete | ||||
| 	// response will be returned as a []byte slice, including the "type" byte of the message. | ||||
| 	Extension(extensionType string, contents []byte) ([]byte, error) | ||||
| } | ||||
| 
 | ||||
| // ConstraintExtension describes an optional constraint defined by users. | ||||
| type ConstraintExtension struct { | ||||
| 	// ExtensionName consist of a UTF-8 string suffixed by the | ||||
| @ -179,6 +211,23 @@ type constrainExtensionAgentMsg struct { | ||||
| 	Rest []byte `ssh:"rest"` | ||||
| } | ||||
| 
 | ||||
| // See [PROTOCOL.agent], section 4.7 | ||||
| const agentExtension = 27 | ||||
| const agentExtensionFailure = 28 | ||||
| 
 | ||||
| // ErrExtensionUnsupported indicates that an extension defined in | ||||
| // [PROTOCOL.agent] section 4.7 is unsupported by the agent. Specifically this | ||||
| // error indicates that the agent returned a standard SSH_AGENT_FAILURE message | ||||
| // as the result of a SSH_AGENTC_EXTENSION request. Note that the protocol | ||||
| // specification (and therefore this error) does not distinguish between a | ||||
| // specific extension being unsupported and extensions being unsupported entirely. | ||||
| var ErrExtensionUnsupported = errors.New("agent: extension unsupported") | ||||
| 
 | ||||
| type extensionAgentMsg struct { | ||||
| 	ExtensionType string `sshtype:"27"` | ||||
| 	Contents      []byte | ||||
| } | ||||
| 
 | ||||
| // Key represents a protocol 2 public key as defined in | ||||
| // [PROTOCOL.agent], section 2.5.2. | ||||
| type Key struct { | ||||
| @ -260,7 +309,7 @@ type client struct { | ||||
| 
 | ||||
| // NewClient returns an Agent that talks to an ssh-agent process over | ||||
| // the given connection. | ||||
| func NewClient(rw io.ReadWriter) Agent { | ||||
| func NewClient(rw io.ReadWriter) ExtendedAgent { | ||||
| 	return &client{conn: rw} | ||||
| } | ||||
| 
 | ||||
| @ -268,6 +317,21 @@ func NewClient(rw io.ReadWriter) Agent { | ||||
| // unmarshaled into reply and replyType is set to the first byte of | ||||
| // the reply, which contains the type of the message. | ||||
| func (c *client) call(req []byte) (reply interface{}, err error) { | ||||
| 	buf, err := c.callRaw(req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	reply, err = unmarshal(buf) | ||||
| 	if err != nil { | ||||
| 		return nil, clientErr(err) | ||||
| 	} | ||||
| 	return reply, nil | ||||
| } | ||||
| 
 | ||||
| // callRaw sends an RPC to the agent. On success, the raw | ||||
| // bytes of the response are returned; no unmarshalling is | ||||
| // performed on the response. | ||||
| func (c *client) callRaw(req []byte) (reply []byte, err error) { | ||||
| 	c.mu.Lock() | ||||
| 	defer c.mu.Unlock() | ||||
| 
 | ||||
| @ -284,18 +348,14 @@ func (c *client) call(req []byte) (reply interface{}, err error) { | ||||
| 	} | ||||
| 	respSize := binary.BigEndian.Uint32(respSizeBuf[:]) | ||||
| 	if respSize > maxAgentResponseBytes { | ||||
| 		return nil, clientErr(err) | ||||
| 		return nil, clientErr(errors.New("response too large")) | ||||
| 	} | ||||
| 
 | ||||
| 	buf := make([]byte, respSize) | ||||
| 	if _, err = io.ReadFull(c.conn, buf); err != nil { | ||||
| 		return nil, clientErr(err) | ||||
| 	} | ||||
| 	reply, err = unmarshal(buf) | ||||
| 	if err != nil { | ||||
| 		return nil, clientErr(err) | ||||
| 	} | ||||
| 	return reply, err | ||||
| 	return buf, nil | ||||
| } | ||||
| 
 | ||||
| func (c *client) simpleCall(req []byte) error { | ||||
| @ -369,9 +429,14 @@ func (c *client) List() ([]*Key, error) { | ||||
| // Sign has the agent sign the data using a protocol 2 key as defined | ||||
| // in [PROTOCOL.agent] section 2.6.2. | ||||
| func (c *client) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) { | ||||
| 	return c.SignWithFlags(key, data, 0) | ||||
| } | ||||
| 
 | ||||
| func (c *client) SignWithFlags(key ssh.PublicKey, data []byte, flags SignatureFlags) (*ssh.Signature, error) { | ||||
| 	req := ssh.Marshal(signRequestAgentMsg{ | ||||
| 		KeyBlob: key.Marshal(), | ||||
| 		Data:    data, | ||||
| 		Flags:   uint32(flags), | ||||
| 	}) | ||||
| 
 | ||||
| 	msg, err := c.call(req) | ||||
| @ -681,3 +746,44 @@ func (s *agentKeyringSigner) Sign(rand io.Reader, data []byte) (*ssh.Signature, | ||||
| 	// The agent has its own entropy source, so the rand argument is ignored. | ||||
| 	return s.agent.Sign(s.pub, data) | ||||
| } | ||||
| 
 | ||||
| func (s *agentKeyringSigner) SignWithOpts(rand io.Reader, data []byte, opts crypto.SignerOpts) (*ssh.Signature, error) { | ||||
| 	var flags SignatureFlags | ||||
| 	if opts != nil { | ||||
| 		switch opts.HashFunc() { | ||||
| 		case crypto.SHA256: | ||||
| 			flags = SignatureFlagRsaSha256 | ||||
| 		case crypto.SHA512: | ||||
| 			flags = SignatureFlagRsaSha512 | ||||
| 		} | ||||
| 	} | ||||
| 	return s.agent.SignWithFlags(s.pub, data, flags) | ||||
| } | ||||
| 
 | ||||
| // Calls an extension method. It is up to the agent implementation as to whether or not | ||||
| // any particular extension is supported and may always return an error. Because the | ||||
| // type of the response is up to the implementation, this returns the bytes of the | ||||
| // response and does not attempt any type of unmarshalling. | ||||
| func (c *client) Extension(extensionType string, contents []byte) ([]byte, error) { | ||||
| 	req := ssh.Marshal(extensionAgentMsg{ | ||||
| 		ExtensionType: extensionType, | ||||
| 		Contents:      contents, | ||||
| 	}) | ||||
| 	buf, err := c.callRaw(req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if len(buf) == 0 { | ||||
| 		return nil, errors.New("agent: failure; empty response") | ||||
| 	} | ||||
| 	// [PROTOCOL.agent] section 4.7 indicates that an SSH_AGENT_FAILURE message | ||||
| 	// represents an agent that does not support the extension | ||||
| 	if buf[0] == agentFailure { | ||||
| 		return nil, ErrExtensionUnsupported | ||||
| 	} | ||||
| 	if buf[0] == agentExtensionFailure { | ||||
| 		return nil, errors.New("agent: generic extension failure") | ||||
| 	} | ||||
| 
 | ||||
| 	return buf, nil | ||||
| } | ||||
|  | ||||
							
								
								
									
										28
									
								
								vendor/golang.org/x/crypto/ssh/agent/keyring.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								vendor/golang.org/x/crypto/ssh/agent/keyring.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -182,6 +182,10 @@ func (r *keyring) Add(key AddedKey) error { | ||||
| 
 | ||||
| // Sign returns a signature for the data. | ||||
| func (r *keyring) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) { | ||||
| 	return r.SignWithFlags(key, data, 0) | ||||
| } | ||||
| 
 | ||||
| func (r *keyring) SignWithFlags(key ssh.PublicKey, data []byte, flags SignatureFlags) (*ssh.Signature, error) { | ||||
| 	r.mu.Lock() | ||||
| 	defer r.mu.Unlock() | ||||
| 	if r.locked { | ||||
| @ -192,7 +196,24 @@ func (r *keyring) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) { | ||||
| 	wanted := key.Marshal() | ||||
| 	for _, k := range r.keys { | ||||
| 		if bytes.Equal(k.signer.PublicKey().Marshal(), wanted) { | ||||
| 			return k.signer.Sign(rand.Reader, data) | ||||
| 			if flags == 0 { | ||||
| 				return k.signer.Sign(rand.Reader, data) | ||||
| 			} else { | ||||
| 				if algorithmSigner, ok := k.signer.(ssh.AlgorithmSigner); !ok { | ||||
| 					return nil, fmt.Errorf("agent: signature does not support non-default signature algorithm: %T", k.signer) | ||||
| 				} else { | ||||
| 					var algorithm string | ||||
| 					switch flags { | ||||
| 					case SignatureFlagRsaSha256: | ||||
| 						algorithm = ssh.SigAlgoRSASHA2256 | ||||
| 					case SignatureFlagRsaSha512: | ||||
| 						algorithm = ssh.SigAlgoRSASHA2512 | ||||
| 					default: | ||||
| 						return nil, fmt.Errorf("agent: unsupported signature flags: %d", flags) | ||||
| 					} | ||||
| 					return algorithmSigner.SignWithAlgorithm(rand.Reader, data, algorithm) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return nil, errors.New("not found") | ||||
| @ -213,3 +234,8 @@ func (r *keyring) Signers() ([]ssh.Signer, error) { | ||||
| 	} | ||||
| 	return s, nil | ||||
| } | ||||
| 
 | ||||
| // The keyring does not support any extensions | ||||
| func (r *keyring) Extension(extensionType string, contents []byte) ([]byte, error) { | ||||
| 	return nil, ErrExtensionUnsupported | ||||
| } | ||||
|  | ||||
							
								
								
									
										49
									
								
								vendor/golang.org/x/crypto/ssh/agent/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										49
									
								
								vendor/golang.org/x/crypto/ssh/agent/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -128,7 +128,14 @@ func (s *server) processRequest(data []byte) (interface{}, error) { | ||||
| 			Blob:   req.KeyBlob, | ||||
| 		} | ||||
| 
 | ||||
| 		sig, err := s.agent.Sign(k, req.Data) //  TODO(hanwen): flags. | ||||
| 		var sig *ssh.Signature | ||||
| 		var err error | ||||
| 		if extendedAgent, ok := s.agent.(ExtendedAgent); ok { | ||||
| 			sig, err = extendedAgent.SignWithFlags(k, req.Data, SignatureFlags(req.Flags)) | ||||
| 		} else { | ||||
| 			sig, err = s.agent.Sign(k, req.Data) | ||||
| 		} | ||||
| 
 | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| @ -150,6 +157,43 @@ func (s *server) processRequest(data []byte) (interface{}, error) { | ||||
| 
 | ||||
| 	case agentAddIDConstrained, agentAddIdentity: | ||||
| 		return nil, s.insertIdentity(data) | ||||
| 
 | ||||
| 	case agentExtension: | ||||
| 		// Return a stub object where the whole contents of the response gets marshaled. | ||||
| 		var responseStub struct { | ||||
| 			Rest []byte `ssh:"rest"` | ||||
| 		} | ||||
| 
 | ||||
| 		if extendedAgent, ok := s.agent.(ExtendedAgent); !ok { | ||||
| 			// If this agent doesn't implement extensions, [PROTOCOL.agent] section 4.7 | ||||
| 			// requires that we return a standard SSH_AGENT_FAILURE message. | ||||
| 			responseStub.Rest = []byte{agentFailure} | ||||
| 		} else { | ||||
| 			var req extensionAgentMsg | ||||
| 			if err := ssh.Unmarshal(data, &req); err != nil { | ||||
| 				return nil, err | ||||
| 			} | ||||
| 			res, err := extendedAgent.Extension(req.ExtensionType, req.Contents) | ||||
| 			if err != nil { | ||||
| 				// If agent extensions are unsupported, return a standard SSH_AGENT_FAILURE | ||||
| 				// message as required by [PROTOCOL.agent] section 4.7. | ||||
| 				if err == ErrExtensionUnsupported { | ||||
| 					responseStub.Rest = []byte{agentFailure} | ||||
| 				} else { | ||||
| 					// As the result of any other error processing an extension request, | ||||
| 					// [PROTOCOL.agent] section 4.7 requires that we return a | ||||
| 					// SSH_AGENT_EXTENSION_FAILURE code. | ||||
| 					responseStub.Rest = []byte{agentExtensionFailure} | ||||
| 				} | ||||
| 			} else { | ||||
| 				if len(res) == 0 { | ||||
| 					return nil, nil | ||||
| 				} | ||||
| 				responseStub.Rest = res | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		return responseStub, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return nil, fmt.Errorf("unknown opcode %d", data[0]) | ||||
| @ -497,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) | ||||
|  | ||||
							
								
								
									
										16
									
								
								vendor/golang.org/x/crypto/ssh/certs.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								vendor/golang.org/x/crypto/ssh/certs.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -222,6 +222,11 @@ type openSSHCertSigner struct { | ||||
| 	signer Signer | ||||
| } | ||||
| 
 | ||||
| type algorithmOpenSSHCertSigner struct { | ||||
| 	*openSSHCertSigner | ||||
| 	algorithmSigner AlgorithmSigner | ||||
| } | ||||
| 
 | ||||
| // NewCertSigner returns a Signer that signs with the given Certificate, whose | ||||
| // private key is held by signer. It returns an error if the public key in cert | ||||
| // doesn't match the key used by signer. | ||||
| @ -230,7 +235,12 @@ func NewCertSigner(cert *Certificate, signer Signer) (Signer, error) { | ||||
| 		return nil, errors.New("ssh: signer and cert have different public key") | ||||
| 	} | ||||
| 
 | ||||
| 	return &openSSHCertSigner{cert, signer}, nil | ||||
| 	if algorithmSigner, ok := signer.(AlgorithmSigner); ok { | ||||
| 		return &algorithmOpenSSHCertSigner{ | ||||
| 			&openSSHCertSigner{cert, signer}, algorithmSigner}, nil | ||||
| 	} else { | ||||
| 		return &openSSHCertSigner{cert, signer}, nil | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (s *openSSHCertSigner) Sign(rand io.Reader, data []byte) (*Signature, error) { | ||||
| @ -241,6 +251,10 @@ func (s *openSSHCertSigner) PublicKey() PublicKey { | ||||
| 	return s.pub | ||||
| } | ||||
| 
 | ||||
| func (s *algorithmOpenSSHCertSigner) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) { | ||||
| 	return s.algorithmSigner.SignWithAlgorithm(rand, data, algorithm) | ||||
| } | ||||
| 
 | ||||
| const sourceAddressCriticalOption = "source-address" | ||||
| 
 | ||||
| // CertChecker does the work of verifying a certificate. Its methods | ||||
|  | ||||
							
								
								
									
										24
									
								
								vendor/golang.org/x/crypto/ssh/cipher.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								vendor/golang.org/x/crypto/ssh/cipher.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -149,8 +149,8 @@ type streamPacketCipher struct { | ||||
| 	macResult   []byte | ||||
| } | ||||
| 
 | ||||
| // readPacket reads and decrypt a single packet from the reader argument. | ||||
| func (s *streamPacketCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) { | ||||
| // readCipherPacket reads and decrypt a single packet from the reader argument. | ||||
| func (s *streamPacketCipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) { | ||||
| 	if _, err := io.ReadFull(r, s.prefix[:]); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| @ -221,8 +221,8 @@ func (s *streamPacketCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, err | ||||
| 	return s.packetData[:length-paddingLength-1], nil | ||||
| } | ||||
| 
 | ||||
| // writePacket encrypts and sends a packet of data to the writer argument | ||||
| func (s *streamPacketCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error { | ||||
| // writeCipherPacket encrypts and sends a packet of data to the writer argument | ||||
| func (s *streamPacketCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error { | ||||
| 	if len(packet) > maxPacket { | ||||
| 		return errors.New("ssh: packet too large") | ||||
| 	} | ||||
| @ -327,7 +327,7 @@ func newGCMCipher(key, iv, unusedMacKey []byte, unusedAlgs directionAlgorithms) | ||||
| 
 | ||||
| const gcmTagSize = 16 | ||||
| 
 | ||||
| func (c *gcmCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error { | ||||
| func (c *gcmCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error { | ||||
| 	// Pad out to multiple of 16 bytes. This is different from the | ||||
| 	// stream cipher because that encrypts the length too. | ||||
| 	padding := byte(packetSizeMultiple - (1+len(packet))%packetSizeMultiple) | ||||
| @ -370,7 +370,7 @@ func (c *gcmCipher) incIV() { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (c *gcmCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) { | ||||
| func (c *gcmCipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) { | ||||
| 	if _, err := io.ReadFull(r, c.prefix[:]); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| @ -486,8 +486,8 @@ type cbcError string | ||||
| 
 | ||||
| func (e cbcError) Error() string { return string(e) } | ||||
| 
 | ||||
| func (c *cbcCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) { | ||||
| 	p, err := c.readPacketLeaky(seqNum, r) | ||||
| func (c *cbcCipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) { | ||||
| 	p, err := c.readCipherPacketLeaky(seqNum, r) | ||||
| 	if err != nil { | ||||
| 		if _, ok := err.(cbcError); ok { | ||||
| 			// Verification error: read a fixed amount of | ||||
| @ -500,7 +500,7 @@ func (c *cbcCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) { | ||||
| 	return p, err | ||||
| } | ||||
| 
 | ||||
| func (c *cbcCipher) readPacketLeaky(seqNum uint32, r io.Reader) ([]byte, error) { | ||||
| func (c *cbcCipher) readCipherPacketLeaky(seqNum uint32, r io.Reader) ([]byte, error) { | ||||
| 	blockSize := c.decrypter.BlockSize() | ||||
| 
 | ||||
| 	// Read the header, which will include some of the subsequent data in the | ||||
| @ -576,7 +576,7 @@ func (c *cbcCipher) readPacketLeaky(seqNum uint32, r io.Reader) ([]byte, error) | ||||
| 	return c.packetData[prefixLen:paddingStart], nil | ||||
| } | ||||
| 
 | ||||
| func (c *cbcCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error { | ||||
| func (c *cbcCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error { | ||||
| 	effectiveBlockSize := maxUInt32(cbcMinPacketSizeMultiple, c.encrypter.BlockSize()) | ||||
| 
 | ||||
| 	// Length of encrypted portion of the packet (header, payload, padding). | ||||
| @ -665,7 +665,7 @@ func newChaCha20Cipher(key, unusedIV, unusedMACKey []byte, unusedAlgs directionA | ||||
| 	return c, nil | ||||
| } | ||||
| 
 | ||||
| func (c *chacha20Poly1305Cipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) { | ||||
| func (c *chacha20Poly1305Cipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) { | ||||
| 	nonce := [3]uint32{0, 0, bits.ReverseBytes32(seqNum)} | ||||
| 	s := chacha20.New(c.contentKey, nonce) | ||||
| 	var polyKey [32]byte | ||||
| @ -723,7 +723,7 @@ func (c *chacha20Poly1305Cipher) readPacket(seqNum uint32, r io.Reader) ([]byte, | ||||
| 	return plain, nil | ||||
| } | ||||
| 
 | ||||
| func (c *chacha20Poly1305Cipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, payload []byte) error { | ||||
| func (c *chacha20Poly1305Cipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, payload []byte) error { | ||||
| 	nonce := [3]uint32{0, 0, bits.ReverseBytes32(seqNum)} | ||||
| 	s := chacha20.New(c.contentKey, nonce) | ||||
| 	var polyKey [32]byte | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/ssh/client.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/ssh/client.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -185,7 +185,7 @@ func Dial(network, addr string, config *ClientConfig) (*Client, error) { | ||||
| // keys.  A HostKeyCallback must return nil if the host key is OK, or | ||||
| // an error to reject it. It receives the hostname as passed to Dial | ||||
| // or NewClientConn. The remote address is the RemoteAddr of the | ||||
| // net.Conn underlying the the SSH connection. | ||||
| // net.Conn underlying the SSH connection. | ||||
| type HostKeyCallback func(hostname string, remote net.Addr, key PublicKey) error | ||||
| 
 | ||||
| // BannerCallback is the function type used for treat the banner sent by | ||||
|  | ||||
							
								
								
									
										20
									
								
								vendor/golang.org/x/crypto/ssh/common.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								vendor/golang.org/x/crypto/ssh/common.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -109,6 +109,7 @@ func findCommon(what string, client []string, server []string) (common string, e | ||||
| 	return "", fmt.Errorf("ssh: no common algorithm for %s; client offered: %v, server offered: %v", what, client, server) | ||||
| } | ||||
| 
 | ||||
| // directionAlgorithms records algorithm choices in one direction (either read or write) | ||||
| type directionAlgorithms struct { | ||||
| 	Cipher      string | ||||
| 	MAC         string | ||||
| @ -137,7 +138,7 @@ type algorithms struct { | ||||
| 	r       directionAlgorithms | ||||
| } | ||||
| 
 | ||||
| func findAgreedAlgorithms(clientKexInit, serverKexInit *kexInitMsg) (algs *algorithms, err error) { | ||||
| func findAgreedAlgorithms(isClient bool, clientKexInit, serverKexInit *kexInitMsg) (algs *algorithms, err error) { | ||||
| 	result := &algorithms{} | ||||
| 
 | ||||
| 	result.kex, err = findCommon("key exchange", clientKexInit.KexAlgos, serverKexInit.KexAlgos) | ||||
| @ -150,32 +151,37 @@ func findAgreedAlgorithms(clientKexInit, serverKexInit *kexInitMsg) (algs *algor | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	result.w.Cipher, err = findCommon("client to server cipher", clientKexInit.CiphersClientServer, serverKexInit.CiphersClientServer) | ||||
| 	stoc, ctos := &result.w, &result.r | ||||
| 	if isClient { | ||||
| 		ctos, stoc = stoc, ctos | ||||
| 	} | ||||
| 
 | ||||
| 	ctos.Cipher, err = findCommon("client to server cipher", clientKexInit.CiphersClientServer, serverKexInit.CiphersClientServer) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	result.r.Cipher, err = findCommon("server to client cipher", clientKexInit.CiphersServerClient, serverKexInit.CiphersServerClient) | ||||
| 	stoc.Cipher, err = findCommon("server to client cipher", clientKexInit.CiphersServerClient, serverKexInit.CiphersServerClient) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	result.w.MAC, err = findCommon("client to server MAC", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer) | ||||
| 	ctos.MAC, err = findCommon("client to server MAC", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	result.r.MAC, err = findCommon("server to client MAC", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient) | ||||
| 	stoc.MAC, err = findCommon("server to client MAC", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	result.w.Compression, err = findCommon("client to server compression", clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer) | ||||
| 	ctos.Compression, err = findCommon("client to server compression", clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	result.r.Compression, err = findCommon("server to client compression", clientKexInit.CompressionServerClient, serverKexInit.CompressionServerClient) | ||||
| 	stoc.Compression, err = findCommon("server to client compression", clientKexInit.CompressionServerClient, serverKexInit.CompressionServerClient) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
							
								
								
									
										5
									
								
								vendor/golang.org/x/crypto/ssh/handshake.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/golang.org/x/crypto/ssh/handshake.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -543,7 +543,8 @@ func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error { | ||||
| 
 | ||||
| 	clientInit := otherInit | ||||
| 	serverInit := t.sentInitMsg | ||||
| 	if len(t.hostKeys) == 0 { | ||||
| 	isClient := len(t.hostKeys) == 0 | ||||
| 	if isClient { | ||||
| 		clientInit, serverInit = serverInit, clientInit | ||||
| 
 | ||||
| 		magics.clientKexInit = t.sentInitPacket | ||||
| @ -551,7 +552,7 @@ func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error { | ||||
| 	} | ||||
| 
 | ||||
| 	var err error | ||||
| 	t.algorithms, err = findAgreedAlgorithms(clientInit, serverInit) | ||||
| 	t.algorithms, err = findAgreedAlgorithms(isClient, clientInit, serverInit) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
							
								
								
									
										89
									
								
								vendor/golang.org/x/crypto/ssh/keys.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										89
									
								
								vendor/golang.org/x/crypto/ssh/keys.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -38,6 +38,16 @@ const ( | ||||
| 	KeyAlgoED25519  = "ssh-ed25519" | ||||
| ) | ||||
| 
 | ||||
| // These constants represent non-default signature algorithms that are supported | ||||
| // as algorithm parameters to AlgorithmSigner.SignWithAlgorithm methods. See | ||||
| // [PROTOCOL.agent] section 4.5.1 and | ||||
| // https://tools.ietf.org/html/draft-ietf-curdle-rsa-sha2-10 | ||||
| const ( | ||||
| 	SigAlgoRSA        = "ssh-rsa" | ||||
| 	SigAlgoRSASHA2256 = "rsa-sha2-256" | ||||
| 	SigAlgoRSASHA2512 = "rsa-sha2-512" | ||||
| ) | ||||
| 
 | ||||
| // parsePubKey parses a public key of the given algorithm. | ||||
| // Use ParsePublicKey for keys with prepended algorithm. | ||||
| func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err error) { | ||||
| @ -301,6 +311,19 @@ type Signer interface { | ||||
| 	Sign(rand io.Reader, data []byte) (*Signature, error) | ||||
| } | ||||
| 
 | ||||
| // A AlgorithmSigner is a Signer that also supports specifying a specific | ||||
| // algorithm to use for signing. | ||||
| type AlgorithmSigner interface { | ||||
| 	Signer | ||||
| 
 | ||||
| 	// SignWithAlgorithm is like Signer.Sign, but allows specification of a | ||||
| 	// non-default signing algorithm. See the SigAlgo* constants in this | ||||
| 	// package for signature algorithms supported by this package. Callers may | ||||
| 	// pass an empty string for the algorithm in which case the AlgorithmSigner | ||||
| 	// will use its default algorithm. | ||||
| 	SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) | ||||
| } | ||||
| 
 | ||||
| type rsaPublicKey rsa.PublicKey | ||||
| 
 | ||||
| func (r *rsaPublicKey) Type() string { | ||||
| @ -349,13 +372,21 @@ func (r *rsaPublicKey) Marshal() []byte { | ||||
| } | ||||
| 
 | ||||
| func (r *rsaPublicKey) Verify(data []byte, sig *Signature) error { | ||||
| 	if sig.Format != r.Type() { | ||||
| 	var hash crypto.Hash | ||||
| 	switch sig.Format { | ||||
| 	case SigAlgoRSA: | ||||
| 		hash = crypto.SHA1 | ||||
| 	case SigAlgoRSASHA2256: | ||||
| 		hash = crypto.SHA256 | ||||
| 	case SigAlgoRSASHA2512: | ||||
| 		hash = crypto.SHA512 | ||||
| 	default: | ||||
| 		return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, r.Type()) | ||||
| 	} | ||||
| 	h := crypto.SHA1.New() | ||||
| 	h := hash.New() | ||||
| 	h.Write(data) | ||||
| 	digest := h.Sum(nil) | ||||
| 	return rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), crypto.SHA1, digest, sig.Blob) | ||||
| 	return rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), hash, digest, sig.Blob) | ||||
| } | ||||
| 
 | ||||
| func (r *rsaPublicKey) CryptoPublicKey() crypto.PublicKey { | ||||
| @ -459,6 +490,14 @@ func (k *dsaPrivateKey) PublicKey() PublicKey { | ||||
| } | ||||
| 
 | ||||
| func (k *dsaPrivateKey) Sign(rand io.Reader, data []byte) (*Signature, error) { | ||||
| 	return k.SignWithAlgorithm(rand, data, "") | ||||
| } | ||||
| 
 | ||||
| func (k *dsaPrivateKey) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) { | ||||
| 	if algorithm != "" && algorithm != k.PublicKey().Type() { | ||||
| 		return nil, fmt.Errorf("ssh: unsupported signature algorithm %s", algorithm) | ||||
| 	} | ||||
| 
 | ||||
| 	h := crypto.SHA1.New() | ||||
| 	h.Write(data) | ||||
| 	digest := h.Sum(nil) | ||||
| @ -691,16 +730,42 @@ func (s *wrappedSigner) PublicKey() PublicKey { | ||||
| } | ||||
| 
 | ||||
| func (s *wrappedSigner) Sign(rand io.Reader, data []byte) (*Signature, error) { | ||||
| 	return s.SignWithAlgorithm(rand, data, "") | ||||
| } | ||||
| 
 | ||||
| func (s *wrappedSigner) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) { | ||||
| 	var hashFunc crypto.Hash | ||||
| 
 | ||||
| 	switch key := s.pubKey.(type) { | ||||
| 	case *rsaPublicKey, *dsaPublicKey: | ||||
| 		hashFunc = crypto.SHA1 | ||||
| 	case *ecdsaPublicKey: | ||||
| 		hashFunc = ecHash(key.Curve) | ||||
| 	case ed25519PublicKey: | ||||
| 	default: | ||||
| 		return nil, fmt.Errorf("ssh: unsupported key type %T", key) | ||||
| 	if _, ok := s.pubKey.(*rsaPublicKey); ok { | ||||
| 		// RSA keys support a few hash functions determined by the requested signature algorithm | ||||
| 		switch algorithm { | ||||
| 		case "", SigAlgoRSA: | ||||
| 			algorithm = SigAlgoRSA | ||||
| 			hashFunc = crypto.SHA1 | ||||
| 		case SigAlgoRSASHA2256: | ||||
| 			hashFunc = crypto.SHA256 | ||||
| 		case SigAlgoRSASHA2512: | ||||
| 			hashFunc = crypto.SHA512 | ||||
| 		default: | ||||
| 			return nil, fmt.Errorf("ssh: unsupported signature algorithm %s", algorithm) | ||||
| 		} | ||||
| 	} else { | ||||
| 		// The only supported algorithm for all other key types is the same as the type of the key | ||||
| 		if algorithm == "" { | ||||
| 			algorithm = s.pubKey.Type() | ||||
| 		} else if algorithm != s.pubKey.Type() { | ||||
| 			return nil, fmt.Errorf("ssh: unsupported signature algorithm %s", algorithm) | ||||
| 		} | ||||
| 
 | ||||
| 		switch key := s.pubKey.(type) { | ||||
| 		case *dsaPublicKey: | ||||
| 			hashFunc = crypto.SHA1 | ||||
| 		case *ecdsaPublicKey: | ||||
| 			hashFunc = ecHash(key.Curve) | ||||
| 		case ed25519PublicKey: | ||||
| 		default: | ||||
| 			return nil, fmt.Errorf("ssh: unsupported key type %T", key) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	var digest []byte | ||||
| @ -745,7 +810,7 @@ func (s *wrappedSigner) Sign(rand io.Reader, data []byte) (*Signature, error) { | ||||
| 	} | ||||
| 
 | ||||
| 	return &Signature{ | ||||
| 		Format: s.pubKey.Type(), | ||||
| 		Format: algorithm, | ||||
| 		Blob:   signature, | ||||
| 	}, nil | ||||
| } | ||||
|  | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -350,8 +350,8 @@ func (db *hostKeyDB) check(address string, remote net.Addr, remoteKey ssh.Public | ||||
| 	return db.checkAddr(hostToCheck, remoteKey) | ||||
| } | ||||
| 
 | ||||
| // checkAddrs checks if we can find the given public key for any of | ||||
| // the given addresses.  If we only find an entry for the IP address, | ||||
| // checkAddr checks if we can find the given public key for the | ||||
| // given address.  If we only find an entry for the IP address, | ||||
| // or only the hostname, then this still succeeds. | ||||
| func (db *hostKeyDB) checkAddr(a addr, remoteKey ssh.PublicKey) error { | ||||
| 	// TODO(hanwen): are these the right semantics? What if there | ||||
|  | ||||
							
								
								
									
										26
									
								
								vendor/golang.org/x/crypto/ssh/messages.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/golang.org/x/crypto/ssh/messages.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -764,3 +764,29 @@ func decode(packet []byte) (interface{}, error) { | ||||
| 	} | ||||
| 	return msg, nil | ||||
| } | ||||
| 
 | ||||
| var packetTypeNames = map[byte]string{ | ||||
| 	msgDisconnect:          "disconnectMsg", | ||||
| 	msgServiceRequest:      "serviceRequestMsg", | ||||
| 	msgServiceAccept:       "serviceAcceptMsg", | ||||
| 	msgKexInit:             "kexInitMsg", | ||||
| 	msgKexDHInit:           "kexDHInitMsg", | ||||
| 	msgKexDHReply:          "kexDHReplyMsg", | ||||
| 	msgUserAuthRequest:     "userAuthRequestMsg", | ||||
| 	msgUserAuthSuccess:     "userAuthSuccessMsg", | ||||
| 	msgUserAuthFailure:     "userAuthFailureMsg", | ||||
| 	msgUserAuthPubKeyOk:    "userAuthPubKeyOkMsg", | ||||
| 	msgGlobalRequest:       "globalRequestMsg", | ||||
| 	msgRequestSuccess:      "globalRequestSuccessMsg", | ||||
| 	msgRequestFailure:      "globalRequestFailureMsg", | ||||
| 	msgChannelOpen:         "channelOpenMsg", | ||||
| 	msgChannelData:         "channelDataMsg", | ||||
| 	msgChannelOpenConfirm:  "channelOpenConfirmMsg", | ||||
| 	msgChannelOpenFailure:  "channelOpenFailureMsg", | ||||
| 	msgChannelWindowAdjust: "windowAdjustMsg", | ||||
| 	msgChannelEOF:          "channelEOFMsg", | ||||
| 	msgChannelClose:        "channelCloseMsg", | ||||
| 	msgChannelRequest:      "channelRequestMsg", | ||||
| 	msgChannelSuccess:      "channelRequestSuccessMsg", | ||||
| 	msgChannelFailure:      "channelRequestFailureMsg", | ||||
| } | ||||
|  | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/crypto/ssh/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/crypto/ssh/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -404,7 +404,7 @@ userAuthLoop: | ||||
| 			perms, authErr = config.PasswordCallback(s, password) | ||||
| 		case "keyboard-interactive": | ||||
| 			if config.KeyboardInteractiveCallback == nil { | ||||
| 				authErr = errors.New("ssh: keyboard-interactive auth not configubred") | ||||
| 				authErr = errors.New("ssh: keyboard-interactive auth not configured") | ||||
| 				break | ||||
| 			} | ||||
| 
 | ||||
| @ -484,6 +484,7 @@ userAuthLoop: | ||||
| 				// sig.Format.  This is usually the same, but | ||||
| 				// for certs, the names differ. | ||||
| 				if !isAcceptableAlgo(sig.Format) { | ||||
| 					authErr = fmt.Errorf("ssh: algorithm %q not accepted", sig.Format) | ||||
| 					break | ||||
| 				} | ||||
| 				signedData := buildDataSignedForAuth(sessionID, userAuthReq, algoBytes, pubKeyData) | ||||
|  | ||||
							
								
								
									
										12
									
								
								vendor/golang.org/x/crypto/ssh/transport.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/golang.org/x/crypto/ssh/transport.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -53,14 +53,14 @@ type transport struct { | ||||
| // packetCipher represents a combination of SSH encryption/MAC | ||||
| // protocol.  A single instance should be used for one direction only. | ||||
| type packetCipher interface { | ||||
| 	// writePacket encrypts the packet and writes it to w. The | ||||
| 	// writeCipherPacket encrypts the packet and writes it to w. The | ||||
| 	// contents of the packet are generally scrambled. | ||||
| 	writePacket(seqnum uint32, w io.Writer, rand io.Reader, packet []byte) error | ||||
| 	writeCipherPacket(seqnum uint32, w io.Writer, rand io.Reader, packet []byte) error | ||||
| 
 | ||||
| 	// readPacket reads and decrypts a packet of data. The | ||||
| 	// readCipherPacket reads and decrypts a packet of data. The | ||||
| 	// returned packet may be overwritten by future calls of | ||||
| 	// readPacket. | ||||
| 	readPacket(seqnum uint32, r io.Reader) ([]byte, error) | ||||
| 	readCipherPacket(seqnum uint32, r io.Reader) ([]byte, error) | ||||
| } | ||||
| 
 | ||||
| // connectionState represents one side (read or write) of the | ||||
| @ -127,7 +127,7 @@ func (t *transport) readPacket() (p []byte, err error) { | ||||
| } | ||||
| 
 | ||||
| func (s *connectionState) readPacket(r *bufio.Reader) ([]byte, error) { | ||||
| 	packet, err := s.packetCipher.readPacket(s.seqNum, r) | ||||
| 	packet, err := s.packetCipher.readCipherPacket(s.seqNum, r) | ||||
| 	s.seqNum++ | ||||
| 	if err == nil && len(packet) == 0 { | ||||
| 		err = errors.New("ssh: zero length packet") | ||||
| @ -175,7 +175,7 @@ func (t *transport) writePacket(packet []byte) error { | ||||
| func (s *connectionState) writePacket(w *bufio.Writer, rand io.Reader, packet []byte) error { | ||||
| 	changeKeys := len(packet) > 0 && packet[0] == msgNewKeys | ||||
| 
 | ||||
| 	err := s.packetCipher.writePacket(s.seqNum, w, rand, packet) | ||||
| 	err := s.packetCipher.writeCipherPacket(s.seqNum, w, rand, packet) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/sys/cpu/byteorder.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/sys/cpu/byteorder.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| // Copyright 2019 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. | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/binary" | ||||
| 	"runtime" | ||||
| ) | ||||
| 
 | ||||
| // hostByteOrder returns binary.LittleEndian on little-endian machines and | ||||
| // binary.BigEndian on big-endian machines. | ||||
| func hostByteOrder() binary.ByteOrder { | ||||
| 	switch runtime.GOARCH { | ||||
| 	case "386", "amd64", "amd64p32", | ||||
| 		"arm", "arm64", | ||||
| 		"mipsle", "mips64le", "mips64p32le", | ||||
| 		"ppc64le", | ||||
| 		"riscv", "riscv64": | ||||
| 		return binary.LittleEndian | ||||
| 	case "armbe", "arm64be", | ||||
| 		"mips", "mips64", "mips64p32", | ||||
| 		"ppc", "ppc64", | ||||
| 		"s390", "s390x", | ||||
| 		"sparc", "sparc64": | ||||
| 		return binary.BigEndian | ||||
| 	} | ||||
| 	panic("unknown architecture") | ||||
| } | ||||
							
								
								
									
										126
									
								
								vendor/golang.org/x/sys/cpu/cpu.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								vendor/golang.org/x/sys/cpu/cpu.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,126 @@ | ||||
| // 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. | ||||
| 
 | ||||
| // Package cpu implements processor feature detection for | ||||
| // various CPU architectures. | ||||
| package cpu | ||||
| 
 | ||||
| // Initialized reports whether the CPU features were initialized. | ||||
| // | ||||
| // For some GOOS/GOARCH combinations initialization of the CPU features depends | ||||
| // on reading an operating specific file, e.g. /proc/self/auxv on linux/arm | ||||
| // Initialized will report false if reading the file fails. | ||||
| var Initialized bool | ||||
| 
 | ||||
| // CacheLinePad is used to pad structs to avoid false sharing. | ||||
| type CacheLinePad struct{ _ [cacheLineSize]byte } | ||||
| 
 | ||||
| // X86 contains the supported CPU features of the | ||||
| // current X86/AMD64 platform. If the current platform | ||||
| // is not X86/AMD64 then all feature flags are false. | ||||
| // | ||||
| // X86 is padded to avoid false sharing. Further the HasAVX | ||||
| // and HasAVX2 are only set if the OS supports XMM and YMM | ||||
| // registers in addition to the CPUID feature bit being set. | ||||
| var X86 struct { | ||||
| 	_            CacheLinePad | ||||
| 	HasAES       bool // AES hardware implementation (AES NI) | ||||
| 	HasADX       bool // Multi-precision add-carry instruction extensions | ||||
| 	HasAVX       bool // Advanced vector extension | ||||
| 	HasAVX2      bool // Advanced vector extension 2 | ||||
| 	HasBMI1      bool // Bit manipulation instruction set 1 | ||||
| 	HasBMI2      bool // Bit manipulation instruction set 2 | ||||
| 	HasERMS      bool // Enhanced REP for MOVSB and STOSB | ||||
| 	HasFMA       bool // Fused-multiply-add instructions | ||||
| 	HasOSXSAVE   bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers. | ||||
| 	HasPCLMULQDQ bool // PCLMULQDQ instruction - most often used for AES-GCM | ||||
| 	HasPOPCNT    bool // Hamming weight instruction POPCNT. | ||||
| 	HasRDRAND    bool // RDRAND instruction (on-chip random number generator) | ||||
| 	HasRDSEED    bool // RDSEED instruction (on-chip random number generator) | ||||
| 	HasSSE2      bool // Streaming SIMD extension 2 (always available on amd64) | ||||
| 	HasSSE3      bool // Streaming SIMD extension 3 | ||||
| 	HasSSSE3     bool // Supplemental streaming SIMD extension 3 | ||||
| 	HasSSE41     bool // Streaming SIMD extension 4 and 4.1 | ||||
| 	HasSSE42     bool // Streaming SIMD extension 4 and 4.2 | ||||
| 	_            CacheLinePad | ||||
| } | ||||
| 
 | ||||
| // ARM64 contains the supported CPU features of the | ||||
| // current ARMv8(aarch64) platform. If the current platform | ||||
| // is not arm64 then all feature flags are false. | ||||
| var ARM64 struct { | ||||
| 	_           CacheLinePad | ||||
| 	HasFP       bool // Floating-point instruction set (always available) | ||||
| 	HasASIMD    bool // Advanced SIMD (always available) | ||||
| 	HasEVTSTRM  bool // Event stream support | ||||
| 	HasAES      bool // AES hardware implementation | ||||
| 	HasPMULL    bool // Polynomial multiplication instruction set | ||||
| 	HasSHA1     bool // SHA1 hardware implementation | ||||
| 	HasSHA2     bool // SHA2 hardware implementation | ||||
| 	HasCRC32    bool // CRC32 hardware implementation | ||||
| 	HasATOMICS  bool // Atomic memory operation instruction set | ||||
| 	HasFPHP     bool // Half precision floating-point instruction set | ||||
| 	HasASIMDHP  bool // Advanced SIMD half precision instruction set | ||||
| 	HasCPUID    bool // CPUID identification scheme registers | ||||
| 	HasASIMDRDM bool // Rounding double multiply add/subtract instruction set | ||||
| 	HasJSCVT    bool // Javascript conversion from floating-point to integer | ||||
| 	HasFCMA     bool // Floating-point multiplication and addition of complex numbers | ||||
| 	HasLRCPC    bool // Release Consistent processor consistent support | ||||
| 	HasDCPOP    bool // Persistent memory support | ||||
| 	HasSHA3     bool // SHA3 hardware implementation | ||||
| 	HasSM3      bool // SM3 hardware implementation | ||||
| 	HasSM4      bool // SM4 hardware implementation | ||||
| 	HasASIMDDP  bool // Advanced SIMD double precision instruction set | ||||
| 	HasSHA512   bool // SHA512 hardware implementation | ||||
| 	HasSVE      bool // Scalable Vector Extensions | ||||
| 	HasASIMDFHM bool // Advanced SIMD multiplication FP16 to FP32 | ||||
| 	_           CacheLinePad | ||||
| } | ||||
| 
 | ||||
| // PPC64 contains the supported CPU features of the current ppc64/ppc64le platforms. | ||||
| // If the current platform is not ppc64/ppc64le then all feature flags are false. | ||||
| // | ||||
| // For ppc64/ppc64le, it is safe to check only for ISA level starting on ISA v3.00, | ||||
| // since there are no optional categories. There are some exceptions that also | ||||
| // require kernel support to work (DARN, SCV), so there are feature bits for | ||||
| // those as well. The minimum processor requirement is POWER8 (ISA 2.07). | ||||
| // The struct is padded to avoid false sharing. | ||||
| var PPC64 struct { | ||||
| 	_        CacheLinePad | ||||
| 	HasDARN  bool // Hardware random number generator (requires kernel enablement) | ||||
| 	HasSCV   bool // Syscall vectored (requires kernel enablement) | ||||
| 	IsPOWER8 bool // ISA v2.07 (POWER8) | ||||
| 	IsPOWER9 bool // ISA v3.00 (POWER9) | ||||
| 	_        CacheLinePad | ||||
| } | ||||
| 
 | ||||
| // S390X contains the supported CPU features of the current IBM Z | ||||
| // (s390x) platform. If the current platform is not IBM Z then all | ||||
| // feature flags are false. | ||||
| // | ||||
| // S390X is padded to avoid false sharing. Further HasVX is only set | ||||
| // if the OS supports vector registers in addition to the STFLE | ||||
| // feature bit being set. | ||||
| var S390X struct { | ||||
| 	_         CacheLinePad | ||||
| 	HasZARCH  bool // z/Architecture mode is active [mandatory] | ||||
| 	HasSTFLE  bool // store facility list extended | ||||
| 	HasLDISP  bool // long (20-bit) displacements | ||||
| 	HasEIMM   bool // 32-bit immediates | ||||
| 	HasDFP    bool // decimal floating point | ||||
| 	HasETF3EH bool // ETF-3 enhanced | ||||
| 	HasMSA    bool // message security assist (CPACF) | ||||
| 	HasAES    bool // KM-AES{128,192,256} functions | ||||
| 	HasAESCBC bool // KMC-AES{128,192,256} functions | ||||
| 	HasAESCTR bool // KMCTR-AES{128,192,256} functions | ||||
| 	HasAESGCM bool // KMA-GCM-AES{128,192,256} functions | ||||
| 	HasGHASH  bool // KIMD-GHASH function | ||||
| 	HasSHA1   bool // K{I,L}MD-SHA-1 functions | ||||
| 	HasSHA256 bool // K{I,L}MD-SHA-256 functions | ||||
| 	HasSHA512 bool // K{I,L}MD-SHA-512 functions | ||||
| 	HasSHA3   bool // K{I,L}MD-SHA3-{224,256,384,512} and K{I,L}MD-SHAKE-{128,256} functions | ||||
| 	HasVX     bool // vector facility | ||||
| 	HasVXE    bool // vector-enhancements facility 1 | ||||
| 	_         CacheLinePad | ||||
| } | ||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/sys/cpu/cpu_aix_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/sys/cpu/cpu_aix_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| // Copyright 2019 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 aix,ppc64 | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| import "golang.org/x/sys/unix" | ||||
| 
 | ||||
| const cacheLineSize = 128 | ||||
| 
 | ||||
| const ( | ||||
| 	// getsystemcfg constants | ||||
| 	_SC_IMPL     = 2 | ||||
| 	_IMPL_POWER8 = 0x10000 | ||||
| 	_IMPL_POWER9 = 0x20000 | ||||
| ) | ||||
| 
 | ||||
| func init() { | ||||
| 	impl := unix.Getsystemcfg(_SC_IMPL) | ||||
| 	if impl&_IMPL_POWER8 != 0 { | ||||
| 		PPC64.IsPOWER8 = true | ||||
| 	} | ||||
| 	if impl&_IMPL_POWER9 != 0 { | ||||
| 		PPC64.IsPOWER9 = true | ||||
| 	} | ||||
| 
 | ||||
| 	Initialized = true | ||||
| } | ||||
							
								
								
									
										9
									
								
								vendor/golang.org/x/sys/cpu/cpu_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/golang.org/x/sys/cpu/cpu_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| // 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. | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 32 | ||||
| 
 | ||||
| func doinit() {} | ||||
							
								
								
									
										21
									
								
								vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| // Copyright 2019 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 !gccgo | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| // haveAsmFunctions reports whether the other functions in this file can | ||||
| // be safely called. | ||||
| func haveAsmFunctions() bool { return true } | ||||
| 
 | ||||
| // The following feature detection functions are defined in cpu_s390x.s. | ||||
| // They are likely to be expensive to call so the results should be cached. | ||||
| func stfle() facilityList | ||||
| func kmQuery() queryResult | ||||
| func kmcQuery() queryResult | ||||
| func kmctrQuery() queryResult | ||||
| func kmaQuery() queryResult | ||||
| func kimdQuery() queryResult | ||||
| func klmdQuery() queryResult | ||||
							
								
								
									
										16
									
								
								vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| // 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 386 amd64 amd64p32 | ||||
| // +build !gccgo | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| // cpuid is implemented in cpu_x86.s for gc compiler | ||||
| // and in cpu_gccgo.c for gccgo. | ||||
| func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) | ||||
| 
 | ||||
| // xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler | ||||
| // and in cpu_gccgo.c for gccgo. | ||||
| func xgetbv() (eax, edx uint32) | ||||
							
								
								
									
										43
									
								
								vendor/golang.org/x/sys/cpu/cpu_gccgo.c
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								vendor/golang.org/x/sys/cpu/cpu_gccgo.c
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | ||||
| // 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 386 amd64 amd64p32
 | ||||
| // +build gccgo
 | ||||
| 
 | ||||
| #include <cpuid.h> | ||||
| #include <stdint.h> | ||||
| 
 | ||||
| // Need to wrap __get_cpuid_count because it's declared as static.
 | ||||
| int | ||||
| gccgoGetCpuidCount(uint32_t leaf, uint32_t subleaf, | ||||
|                    uint32_t *eax, uint32_t *ebx, | ||||
|                    uint32_t *ecx, uint32_t *edx) | ||||
| { | ||||
| 	return __get_cpuid_count(leaf, subleaf, eax, ebx, ecx, edx); | ||||
| } | ||||
| 
 | ||||
| // xgetbv reads the contents of an XCR (Extended Control Register)
 | ||||
| // specified in the ECX register into registers EDX:EAX.
 | ||||
| // Currently, the only supported value for XCR is 0.
 | ||||
| //
 | ||||
| // TODO: Replace with a better alternative:
 | ||||
| //
 | ||||
| //     #include <xsaveintrin.h>
 | ||||
| //
 | ||||
| //     #pragma GCC target("xsave")
 | ||||
| //
 | ||||
| //     void gccgoXgetbv(uint32_t *eax, uint32_t *edx) {
 | ||||
| //       unsigned long long x = _xgetbv(0);
 | ||||
| //       *eax = x & 0xffffffff;
 | ||||
| //       *edx = (x >> 32) & 0xffffffff;
 | ||||
| //     }
 | ||||
| //
 | ||||
| // Note that _xgetbv is defined starting with GCC 8.
 | ||||
| void | ||||
| gccgoXgetbv(uint32_t *eax, uint32_t *edx) | ||||
| { | ||||
| 	__asm("  xorl %%ecx, %%ecx\n" | ||||
| 	      "  xgetbv" | ||||
| 	    : "=a"(*eax), "=d"(*edx)); | ||||
| } | ||||
							
								
								
									
										26
									
								
								vendor/golang.org/x/sys/cpu/cpu_gccgo.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								vendor/golang.org/x/sys/cpu/cpu_gccgo.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| // 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 386 amd64 amd64p32 | ||||
| // +build gccgo | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| //extern gccgoGetCpuidCount | ||||
| func gccgoGetCpuidCount(eaxArg, ecxArg uint32, eax, ebx, ecx, edx *uint32) | ||||
| 
 | ||||
| func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) { | ||||
| 	var a, b, c, d uint32 | ||||
| 	gccgoGetCpuidCount(eaxArg, ecxArg, &a, &b, &c, &d) | ||||
| 	return a, b, c, d | ||||
| } | ||||
| 
 | ||||
| //extern gccgoXgetbv | ||||
| func gccgoXgetbv(eax, edx *uint32) | ||||
| 
 | ||||
| func xgetbv() (eax, edx uint32) { | ||||
| 	var a, d uint32 | ||||
| 	gccgoXgetbv(&a, &d) | ||||
| 	return a, d | ||||
| } | ||||
							
								
								
									
										22
									
								
								vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| // Copyright 2019 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 gccgo | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| // haveAsmFunctions reports whether the other functions in this file can | ||||
| // be safely called. | ||||
| func haveAsmFunctions() bool { return false } | ||||
| 
 | ||||
| // TODO(mundaym): the following feature detection functions are currently | ||||
| // stubs. See https://golang.org/cl/162887 for how to fix this. | ||||
| // They are likely to be expensive to call so the results should be cached. | ||||
| func stfle() facilityList     { panic("not implemented for gccgo") } | ||||
| func kmQuery() queryResult    { panic("not implemented for gccgo") } | ||||
| func kmcQuery() queryResult   { panic("not implemented for gccgo") } | ||||
| func kmctrQuery() queryResult { panic("not implemented for gccgo") } | ||||
| func kmaQuery() queryResult   { panic("not implemented for gccgo") } | ||||
| func kimdQuery() queryResult  { panic("not implemented for gccgo") } | ||||
| func klmdQuery() queryResult  { panic("not implemented for gccgo") } | ||||
							
								
								
									
										59
									
								
								vendor/golang.org/x/sys/cpu/cpu_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								vendor/golang.org/x/sys/cpu/cpu_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | ||||
| // 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,!amd64p32,!386 | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| import ( | ||||
| 	"io/ioutil" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	_AT_HWCAP  = 16 | ||||
| 	_AT_HWCAP2 = 26 | ||||
| 
 | ||||
| 	procAuxv = "/proc/self/auxv" | ||||
| 
 | ||||
| 	uintSize = int(32 << (^uint(0) >> 63)) | ||||
| ) | ||||
| 
 | ||||
| // For those platforms don't have a 'cpuid' equivalent we use HWCAP/HWCAP2 | ||||
| // These are initialized in cpu_$GOARCH.go | ||||
| // and should not be changed after they are initialized. | ||||
| var hwCap uint | ||||
| var hwCap2 uint | ||||
| 
 | ||||
| func init() { | ||||
| 	buf, err := ioutil.ReadFile(procAuxv) | ||||
| 	if err != nil { | ||||
| 		// e.g. on android /proc/self/auxv is not accessible, so silently | ||||
| 		// ignore the error and leave Initialized = false | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	bo := hostByteOrder() | ||||
| 	for len(buf) >= 2*(uintSize/8) { | ||||
| 		var tag, val uint | ||||
| 		switch uintSize { | ||||
| 		case 32: | ||||
| 			tag = uint(bo.Uint32(buf[0:])) | ||||
| 			val = uint(bo.Uint32(buf[4:])) | ||||
| 			buf = buf[8:] | ||||
| 		case 64: | ||||
| 			tag = uint(bo.Uint64(buf[0:])) | ||||
| 			val = uint(bo.Uint64(buf[8:])) | ||||
| 			buf = buf[16:] | ||||
| 		} | ||||
| 		switch tag { | ||||
| 		case _AT_HWCAP: | ||||
| 			hwCap = val | ||||
| 		case _AT_HWCAP2: | ||||
| 			hwCap2 = val | ||||
| 		} | ||||
| 	} | ||||
| 	doinit() | ||||
| 
 | ||||
| 	Initialized = true | ||||
| } | ||||
							
								
								
									
										67
									
								
								vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,67 @@ | ||||
| // 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. | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 64 | ||||
| 
 | ||||
| // HWCAP/HWCAP2 bits. These are exposed by Linux. | ||||
| const ( | ||||
| 	hwcap_FP       = 1 << 0 | ||||
| 	hwcap_ASIMD    = 1 << 1 | ||||
| 	hwcap_EVTSTRM  = 1 << 2 | ||||
| 	hwcap_AES      = 1 << 3 | ||||
| 	hwcap_PMULL    = 1 << 4 | ||||
| 	hwcap_SHA1     = 1 << 5 | ||||
| 	hwcap_SHA2     = 1 << 6 | ||||
| 	hwcap_CRC32    = 1 << 7 | ||||
| 	hwcap_ATOMICS  = 1 << 8 | ||||
| 	hwcap_FPHP     = 1 << 9 | ||||
| 	hwcap_ASIMDHP  = 1 << 10 | ||||
| 	hwcap_CPUID    = 1 << 11 | ||||
| 	hwcap_ASIMDRDM = 1 << 12 | ||||
| 	hwcap_JSCVT    = 1 << 13 | ||||
| 	hwcap_FCMA     = 1 << 14 | ||||
| 	hwcap_LRCPC    = 1 << 15 | ||||
| 	hwcap_DCPOP    = 1 << 16 | ||||
| 	hwcap_SHA3     = 1 << 17 | ||||
| 	hwcap_SM3      = 1 << 18 | ||||
| 	hwcap_SM4      = 1 << 19 | ||||
| 	hwcap_ASIMDDP  = 1 << 20 | ||||
| 	hwcap_SHA512   = 1 << 21 | ||||
| 	hwcap_SVE      = 1 << 22 | ||||
| 	hwcap_ASIMDFHM = 1 << 23 | ||||
| ) | ||||
| 
 | ||||
| func doinit() { | ||||
| 	// HWCAP feature bits | ||||
| 	ARM64.HasFP = isSet(hwCap, hwcap_FP) | ||||
| 	ARM64.HasASIMD = isSet(hwCap, hwcap_ASIMD) | ||||
| 	ARM64.HasEVTSTRM = isSet(hwCap, hwcap_EVTSTRM) | ||||
| 	ARM64.HasAES = isSet(hwCap, hwcap_AES) | ||||
| 	ARM64.HasPMULL = isSet(hwCap, hwcap_PMULL) | ||||
| 	ARM64.HasSHA1 = isSet(hwCap, hwcap_SHA1) | ||||
| 	ARM64.HasSHA2 = isSet(hwCap, hwcap_SHA2) | ||||
| 	ARM64.HasCRC32 = isSet(hwCap, hwcap_CRC32) | ||||
| 	ARM64.HasATOMICS = isSet(hwCap, hwcap_ATOMICS) | ||||
| 	ARM64.HasFPHP = isSet(hwCap, hwcap_FPHP) | ||||
| 	ARM64.HasASIMDHP = isSet(hwCap, hwcap_ASIMDHP) | ||||
| 	ARM64.HasCPUID = isSet(hwCap, hwcap_CPUID) | ||||
| 	ARM64.HasASIMDRDM = isSet(hwCap, hwcap_ASIMDRDM) | ||||
| 	ARM64.HasJSCVT = isSet(hwCap, hwcap_JSCVT) | ||||
| 	ARM64.HasFCMA = isSet(hwCap, hwcap_FCMA) | ||||
| 	ARM64.HasLRCPC = isSet(hwCap, hwcap_LRCPC) | ||||
| 	ARM64.HasDCPOP = isSet(hwCap, hwcap_DCPOP) | ||||
| 	ARM64.HasSHA3 = isSet(hwCap, hwcap_SHA3) | ||||
| 	ARM64.HasSM3 = isSet(hwCap, hwcap_SM3) | ||||
| 	ARM64.HasSM4 = isSet(hwCap, hwcap_SM4) | ||||
| 	ARM64.HasASIMDDP = isSet(hwCap, hwcap_ASIMDDP) | ||||
| 	ARM64.HasSHA512 = isSet(hwCap, hwcap_SHA512) | ||||
| 	ARM64.HasSVE = isSet(hwCap, hwcap_SVE) | ||||
| 	ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM) | ||||
| } | ||||
| 
 | ||||
| func isSet(hwc uint, value uint) bool { | ||||
| 	return hwc&value != 0 | ||||
| } | ||||
							
								
								
									
										33
									
								
								vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| // 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 linux | ||||
| // +build ppc64 ppc64le | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 128 | ||||
| 
 | ||||
| // HWCAP/HWCAP2 bits. These are exposed by the kernel. | ||||
| const ( | ||||
| 	// ISA Level | ||||
| 	_PPC_FEATURE2_ARCH_2_07 = 0x80000000 | ||||
| 	_PPC_FEATURE2_ARCH_3_00 = 0x00800000 | ||||
| 
 | ||||
| 	// CPU features | ||||
| 	_PPC_FEATURE2_DARN = 0x00200000 | ||||
| 	_PPC_FEATURE2_SCV  = 0x00100000 | ||||
| ) | ||||
| 
 | ||||
| func doinit() { | ||||
| 	// HWCAP2 feature bits | ||||
| 	PPC64.IsPOWER8 = isSet(hwCap2, _PPC_FEATURE2_ARCH_2_07) | ||||
| 	PPC64.IsPOWER9 = isSet(hwCap2, _PPC_FEATURE2_ARCH_3_00) | ||||
| 	PPC64.HasDARN = isSet(hwCap2, _PPC_FEATURE2_DARN) | ||||
| 	PPC64.HasSCV = isSet(hwCap2, _PPC_FEATURE2_SCV) | ||||
| } | ||||
| 
 | ||||
| func isSet(hwc uint, value uint) bool { | ||||
| 	return hwc&value != 0 | ||||
| } | ||||
							
								
								
									
										161
									
								
								vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,161 @@ | ||||
| // Copyright 2019 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. | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 256 | ||||
| 
 | ||||
| const ( | ||||
| 	// bit mask values from /usr/include/bits/hwcap.h | ||||
| 	hwcap_ZARCH  = 2 | ||||
| 	hwcap_STFLE  = 4 | ||||
| 	hwcap_MSA    = 8 | ||||
| 	hwcap_LDISP  = 16 | ||||
| 	hwcap_EIMM   = 32 | ||||
| 	hwcap_DFP    = 64 | ||||
| 	hwcap_ETF3EH = 256 | ||||
| 	hwcap_VX     = 2048 | ||||
| 	hwcap_VXE    = 8192 | ||||
| ) | ||||
| 
 | ||||
| // bitIsSet reports whether the bit at index is set. The bit index | ||||
| // is in big endian order, so bit index 0 is the leftmost bit. | ||||
| func bitIsSet(bits []uint64, index uint) bool { | ||||
| 	return bits[index/64]&((1<<63)>>(index%64)) != 0 | ||||
| } | ||||
| 
 | ||||
| // function is the code for the named cryptographic function. | ||||
| type function uint8 | ||||
| 
 | ||||
| const ( | ||||
| 	// KM{,A,C,CTR} function codes | ||||
| 	aes128 function = 18 // AES-128 | ||||
| 	aes192 function = 19 // AES-192 | ||||
| 	aes256 function = 20 // AES-256 | ||||
| 
 | ||||
| 	// K{I,L}MD function codes | ||||
| 	sha1     function = 1  // SHA-1 | ||||
| 	sha256   function = 2  // SHA-256 | ||||
| 	sha512   function = 3  // SHA-512 | ||||
| 	sha3_224 function = 32 // SHA3-224 | ||||
| 	sha3_256 function = 33 // SHA3-256 | ||||
| 	sha3_384 function = 34 // SHA3-384 | ||||
| 	sha3_512 function = 35 // SHA3-512 | ||||
| 	shake128 function = 36 // SHAKE-128 | ||||
| 	shake256 function = 37 // SHAKE-256 | ||||
| 
 | ||||
| 	// KLMD function codes | ||||
| 	ghash function = 65 // GHASH | ||||
| ) | ||||
| 
 | ||||
| // queryResult contains the result of a Query function | ||||
| // call. Bits are numbered in big endian order so the | ||||
| // leftmost bit (the MSB) is at index 0. | ||||
| type queryResult struct { | ||||
| 	bits [2]uint64 | ||||
| } | ||||
| 
 | ||||
| // Has reports whether the given functions are present. | ||||
| func (q *queryResult) Has(fns ...function) bool { | ||||
| 	if len(fns) == 0 { | ||||
| 		panic("no function codes provided") | ||||
| 	} | ||||
| 	for _, f := range fns { | ||||
| 		if !bitIsSet(q.bits[:], uint(f)) { | ||||
| 			return false | ||||
| 		} | ||||
| 	} | ||||
| 	return true | ||||
| } | ||||
| 
 | ||||
| // facility is a bit index for the named facility. | ||||
| type facility uint8 | ||||
| 
 | ||||
| const ( | ||||
| 	// cryptography facilities | ||||
| 	msa4 facility = 77  // message-security-assist extension 4 | ||||
| 	msa8 facility = 146 // message-security-assist extension 8 | ||||
| ) | ||||
| 
 | ||||
| // facilityList contains the result of an STFLE call. | ||||
| // Bits are numbered in big endian order so the | ||||
| // leftmost bit (the MSB) is at index 0. | ||||
| type facilityList struct { | ||||
| 	bits [4]uint64 | ||||
| } | ||||
| 
 | ||||
| // Has reports whether the given facilities are present. | ||||
| func (s *facilityList) Has(fs ...facility) bool { | ||||
| 	if len(fs) == 0 { | ||||
| 		panic("no facility bits provided") | ||||
| 	} | ||||
| 	for _, f := range fs { | ||||
| 		if !bitIsSet(s.bits[:], uint(f)) { | ||||
| 			return false | ||||
| 		} | ||||
| 	} | ||||
| 	return true | ||||
| } | ||||
| 
 | ||||
| func doinit() { | ||||
| 	// test HWCAP bit vector | ||||
| 	has := func(featureMask uint) bool { | ||||
| 		return hwCap&featureMask == featureMask | ||||
| 	} | ||||
| 
 | ||||
| 	// mandatory | ||||
| 	S390X.HasZARCH = has(hwcap_ZARCH) | ||||
| 
 | ||||
| 	// optional | ||||
| 	S390X.HasSTFLE = has(hwcap_STFLE) | ||||
| 	S390X.HasLDISP = has(hwcap_LDISP) | ||||
| 	S390X.HasEIMM = has(hwcap_EIMM) | ||||
| 	S390X.HasETF3EH = has(hwcap_ETF3EH) | ||||
| 	S390X.HasDFP = has(hwcap_DFP) | ||||
| 	S390X.HasMSA = has(hwcap_MSA) | ||||
| 	S390X.HasVX = has(hwcap_VX) | ||||
| 	if S390X.HasVX { | ||||
| 		S390X.HasVXE = has(hwcap_VXE) | ||||
| 	} | ||||
| 
 | ||||
| 	// We need implementations of stfle, km and so on | ||||
| 	// to detect cryptographic features. | ||||
| 	if !haveAsmFunctions() { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	// optional cryptographic functions | ||||
| 	if S390X.HasMSA { | ||||
| 		aes := []function{aes128, aes192, aes256} | ||||
| 
 | ||||
| 		// cipher message | ||||
| 		km, kmc := kmQuery(), kmcQuery() | ||||
| 		S390X.HasAES = km.Has(aes...) | ||||
| 		S390X.HasAESCBC = kmc.Has(aes...) | ||||
| 		if S390X.HasSTFLE { | ||||
| 			facilities := stfle() | ||||
| 			if facilities.Has(msa4) { | ||||
| 				kmctr := kmctrQuery() | ||||
| 				S390X.HasAESCTR = kmctr.Has(aes...) | ||||
| 			} | ||||
| 			if facilities.Has(msa8) { | ||||
| 				kma := kmaQuery() | ||||
| 				S390X.HasAESGCM = kma.Has(aes...) | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// compute message digest | ||||
| 		kimd := kimdQuery() // intermediate (no padding) | ||||
| 		klmd := klmdQuery() // last (padding) | ||||
| 		S390X.HasSHA1 = kimd.Has(sha1) && klmd.Has(sha1) | ||||
| 		S390X.HasSHA256 = kimd.Has(sha256) && klmd.Has(sha256) | ||||
| 		S390X.HasSHA512 = kimd.Has(sha512) && klmd.Has(sha512) | ||||
| 		S390X.HasGHASH = kimd.Has(ghash) // KLMD-GHASH does not exist | ||||
| 		sha3 := []function{ | ||||
| 			sha3_224, sha3_256, sha3_384, sha3_512, | ||||
| 			shake128, shake256, | ||||
| 		} | ||||
| 		S390X.HasSHA3 = kimd.Has(sha3...) && klmd.Has(sha3...) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										11
									
								
								vendor/golang.org/x/sys/cpu/cpu_mips64x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								vendor/golang.org/x/sys/cpu/cpu_mips64x.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 mips64 mips64le | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 32 | ||||
| 
 | ||||
| func doinit() {} | ||||
							
								
								
									
										11
									
								
								vendor/golang.org/x/sys/cpu/cpu_mipsx.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								vendor/golang.org/x/sys/cpu/cpu_mipsx.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 mips mipsle | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 32 | ||||
| 
 | ||||
| func doinit() {} | ||||
							
								
								
									
										11
									
								
								vendor/golang.org/x/sys/cpu/cpu_other_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								vendor/golang.org/x/sys/cpu/cpu_other_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| // Copyright 2019 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 !linux,arm64 | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 64 | ||||
| 
 | ||||
| func doinit() {} | ||||
							
								
								
									
										57
									
								
								vendor/golang.org/x/sys/cpu/cpu_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								vendor/golang.org/x/sys/cpu/cpu_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | ||||
| // Copyright 2019 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 !gccgo | ||||
| 
 | ||||
| #include "textflag.h" | ||||
| 
 | ||||
| // func stfle() facilityList | ||||
| TEXT ·stfle(SB), NOSPLIT|NOFRAME, $0-32 | ||||
| 	MOVD $ret+0(FP), R1 | ||||
| 	MOVD $3, R0          // last doubleword index to store | ||||
| 	XC   $32, (R1), (R1) // clear 4 doublewords (32 bytes) | ||||
| 	WORD $0xb2b01000     // store facility list extended (STFLE) | ||||
| 	RET | ||||
| 
 | ||||
| // func kmQuery() queryResult | ||||
| TEXT ·kmQuery(SB), NOSPLIT|NOFRAME, $0-16 | ||||
| 	MOVD $0, R0         // set function code to 0 (KM-Query) | ||||
| 	MOVD $ret+0(FP), R1 // address of 16-byte return value | ||||
| 	WORD $0xB92E0024    // cipher message (KM) | ||||
| 	RET | ||||
| 
 | ||||
| // func kmcQuery() queryResult | ||||
| TEXT ·kmcQuery(SB), NOSPLIT|NOFRAME, $0-16 | ||||
| 	MOVD $0, R0         // set function code to 0 (KMC-Query) | ||||
| 	MOVD $ret+0(FP), R1 // address of 16-byte return value | ||||
| 	WORD $0xB92F0024    // cipher message with chaining (KMC) | ||||
| 	RET | ||||
| 
 | ||||
| // func kmctrQuery() queryResult | ||||
| TEXT ·kmctrQuery(SB), NOSPLIT|NOFRAME, $0-16 | ||||
| 	MOVD $0, R0         // set function code to 0 (KMCTR-Query) | ||||
| 	MOVD $ret+0(FP), R1 // address of 16-byte return value | ||||
| 	WORD $0xB92D4024    // cipher message with counter (KMCTR) | ||||
| 	RET | ||||
| 
 | ||||
| // func kmaQuery() queryResult | ||||
| TEXT ·kmaQuery(SB), NOSPLIT|NOFRAME, $0-16 | ||||
| 	MOVD $0, R0         // set function code to 0 (KMA-Query) | ||||
| 	MOVD $ret+0(FP), R1 // address of 16-byte return value | ||||
| 	WORD $0xb9296024    // cipher message with authentication (KMA) | ||||
| 	RET | ||||
| 
 | ||||
| // func kimdQuery() queryResult | ||||
| TEXT ·kimdQuery(SB), NOSPLIT|NOFRAME, $0-16 | ||||
| 	MOVD $0, R0         // set function code to 0 (KIMD-Query) | ||||
| 	MOVD $ret+0(FP), R1 // address of 16-byte return value | ||||
| 	WORD $0xB93E0024    // compute intermediate message digest (KIMD) | ||||
| 	RET | ||||
| 
 | ||||
| // func klmdQuery() queryResult | ||||
| TEXT ·klmdQuery(SB), NOSPLIT|NOFRAME, $0-16 | ||||
| 	MOVD $0, R0         // set function code to 0 (KLMD-Query) | ||||
| 	MOVD $ret+0(FP), R1 // address of 16-byte return value | ||||
| 	WORD $0xB93F0024    // compute last message digest (KLMD) | ||||
| 	RET | ||||
							
								
								
									
										15
									
								
								vendor/golang.org/x/sys/cpu/cpu_wasm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								vendor/golang.org/x/sys/cpu/cpu_wasm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| // Copyright 2019 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 wasm | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| // We're compiling the cpu package for an unknown (software-abstracted) CPU. | ||||
| // Make CacheLinePad an empty struct and hope that the usual struct alignment | ||||
| // rules are good enough. | ||||
| 
 | ||||
| const cacheLineSize = 0 | ||||
| 
 | ||||
| func doinit() {} | ||||
							
								
								
									
										59
									
								
								vendor/golang.org/x/sys/cpu/cpu_x86.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								vendor/golang.org/x/sys/cpu/cpu_x86.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | ||||
| // 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 386 amd64 amd64p32 | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 64 | ||||
| 
 | ||||
| func init() { | ||||
| 	Initialized = true | ||||
| 
 | ||||
| 	maxID, _, _, _ := cpuid(0, 0) | ||||
| 
 | ||||
| 	if maxID < 1 { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	_, _, ecx1, edx1 := cpuid(1, 0) | ||||
| 	X86.HasSSE2 = isSet(26, edx1) | ||||
| 
 | ||||
| 	X86.HasSSE3 = isSet(0, ecx1) | ||||
| 	X86.HasPCLMULQDQ = isSet(1, ecx1) | ||||
| 	X86.HasSSSE3 = isSet(9, ecx1) | ||||
| 	X86.HasFMA = isSet(12, ecx1) | ||||
| 	X86.HasSSE41 = isSet(19, ecx1) | ||||
| 	X86.HasSSE42 = isSet(20, ecx1) | ||||
| 	X86.HasPOPCNT = isSet(23, ecx1) | ||||
| 	X86.HasAES = isSet(25, ecx1) | ||||
| 	X86.HasOSXSAVE = isSet(27, ecx1) | ||||
| 	X86.HasRDRAND = isSet(30, ecx1) | ||||
| 
 | ||||
| 	osSupportsAVX := false | ||||
| 	// For XGETBV, OSXSAVE bit is required and sufficient. | ||||
| 	if X86.HasOSXSAVE { | ||||
| 		eax, _ := xgetbv() | ||||
| 		// Check if XMM and YMM registers have OS support. | ||||
| 		osSupportsAVX = isSet(1, eax) && isSet(2, eax) | ||||
| 	} | ||||
| 
 | ||||
| 	X86.HasAVX = isSet(28, ecx1) && osSupportsAVX | ||||
| 
 | ||||
| 	if maxID < 7 { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	_, ebx7, _, _ := cpuid(7, 0) | ||||
| 	X86.HasBMI1 = isSet(3, ebx7) | ||||
| 	X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX | ||||
| 	X86.HasBMI2 = isSet(8, ebx7) | ||||
| 	X86.HasERMS = isSet(9, ebx7) | ||||
| 	X86.HasRDSEED = isSet(18, ebx7) | ||||
| 	X86.HasADX = isSet(19, ebx7) | ||||
| } | ||||
| 
 | ||||
| func isSet(bitpos uint, value uint32) bool { | ||||
| 	return value&(1<<bitpos) != 0 | ||||
| } | ||||
							
								
								
									
										27
									
								
								vendor/golang.org/x/sys/cpu/cpu_x86.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vendor/golang.org/x/sys/cpu/cpu_x86.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| // 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 386 amd64 amd64p32 | ||||
| // +build !gccgo | ||||
| 
 | ||||
| #include "textflag.h" | ||||
| 
 | ||||
| // func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) | ||||
| TEXT ·cpuid(SB), NOSPLIT, $0-24 | ||||
| 	MOVL eaxArg+0(FP), AX | ||||
| 	MOVL ecxArg+4(FP), CX | ||||
| 	CPUID | ||||
| 	MOVL AX, eax+8(FP) | ||||
| 	MOVL BX, ebx+12(FP) | ||||
| 	MOVL CX, ecx+16(FP) | ||||
| 	MOVL DX, edx+20(FP) | ||||
| 	RET | ||||
| 
 | ||||
| // func xgetbv() (eax, edx uint32) | ||||
| TEXT ·xgetbv(SB),NOSPLIT,$0-8 | ||||
| 	MOVL $0, CX | ||||
| 	XGETBV | ||||
| 	MOVL AX, eax+0(FP) | ||||
| 	MOVL DX, edx+4(FP) | ||||
| 	RET | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/mkall.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/mkall.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -207,8 +207,6 @@ esac | ||||
| 	esac | ||||
| 	if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi | ||||
| 	if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi | ||||
| 	if [ -n "$mktypes" ]; then | ||||
| 		echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; | ||||
| 	if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi | ||||
| 	if [ -n "$mkasm" ]; then echo "$mkasm $GOARCH"; fi | ||||
| 	fi | ||||
| ) | $run | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/sys/unix/mkerrors.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/sys/unix/mkerrors.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -192,6 +192,7 @@ struct ltchars { | ||||
| #include <linux/if_packet.h> | ||||
| #include <linux/if_addr.h> | ||||
| #include <linux/falloc.h> | ||||
| #include <linux/fanotify.h> | ||||
| #include <linux/filter.h> | ||||
| #include <linux/fs.h> | ||||
| #include <linux/kexec.h> | ||||
| @ -501,6 +502,7 @@ ccflags="$@" | ||||
| 		$2 !~ "WMESGLEN" && | ||||
| 		$2 ~ /^W[A-Z0-9]+$/ || | ||||
| 		$2 ~/^PPPIOC/ || | ||||
| 		$2 ~ /^FAN_|FANOTIFY_/ || | ||||
| 		$2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} | ||||
| 		$2 ~ /^__WCOREFLAG$/ {next} | ||||
| 		$2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} | ||||
|  | ||||
							
								
								
									
										7
									
								
								vendor/golang.org/x/sys/unix/mksyscall.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/golang.org/x/sys/unix/mksyscall.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -153,6 +153,11 @@ func main() { | ||||
| 			} | ||||
| 			funct, inps, outps, sysname := f[2], f[3], f[4], f[5] | ||||
| 
 | ||||
| 			// ClockGettime doesn't have a syscall number on Darwin, only generate libc wrappers. | ||||
| 			if goos == "darwin" && !libc && funct == "ClockGettime" { | ||||
| 				continue | ||||
| 			} | ||||
| 
 | ||||
| 			// Split argument lists on comma. | ||||
| 			in := parseParamList(inps) | ||||
| 			out := parseParamList(outps) | ||||
| @ -228,7 +233,7 @@ func main() { | ||||
| 					} else { | ||||
| 						args = append(args, fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					} | ||||
| 				} else if p.Type == "int64" && endianness != "" { | ||||
| 				} else if (p.Type == "int64" || p.Type == "uint64") && endianness != "" { | ||||
| 					if len(args)%2 == 1 && *arm { | ||||
| 						// arm abi specifies 64-bit argument uses | ||||
| 						// (even, odd) pair | ||||
|  | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -25,8 +25,8 @@ func cmsgAlignOf(salen int) int { | ||||
| 		if SizeofPtr == 8 { | ||||
| 			salign = 4 | ||||
| 		} | ||||
| 	case "openbsd": | ||||
| 		// OpenBSD armv7 requires 64-bit alignment. | ||||
| 	case "netbsd", "openbsd": | ||||
| 		// NetBSD and OpenBSD armv7 require 64-bit alignment. | ||||
| 		if runtime.GOARCH == "arm" { | ||||
| 			salign = 8 | ||||
| 		} | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/sys/unix/syscall_aix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/sys/unix/syscall_aix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -545,3 +545,5 @@ func Poll(fds []PollFd, timeout int) (n int, err error) { | ||||
| //sys	gettimeofday(tv *Timeval, tzp *Timezone) (err error) | ||||
| //sysnb	Time(t *Time_t) (tt Time_t, err error) | ||||
| //sys	Utime(path string, buf *Utimbuf) (err error) | ||||
| 
 | ||||
| //sys	Getsystemcfg(label int) (n uint64) | ||||
|  | ||||
							
								
								
									
										17
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -144,6 +144,23 @@ func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) ( | ||||
| 
 | ||||
| //sys getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) | ||||
| 
 | ||||
| func SysctlClockinfo(name string) (*Clockinfo, error) { | ||||
| 	mib, err := sysctlmib(name) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	n := uintptr(SizeofClockinfo) | ||||
| 	var ci Clockinfo | ||||
| 	if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if n != SizeofClockinfo { | ||||
| 		return nil, EIO | ||||
| 	} | ||||
| 	return &ci, nil | ||||
| } | ||||
| 
 | ||||
| //sysnb pipe() (r int, w int, err error) | ||||
| 
 | ||||
| func Pipe(p []int) (err error) { | ||||
|  | ||||
							
								
								
									
										40
									
								
								vendor/golang.org/x/sys/unix/syscall_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								vendor/golang.org/x/sys/unix/syscall_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -39,6 +39,20 @@ func Creat(path string, mode uint32) (fd int, err error) { | ||||
| 	return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode) | ||||
| } | ||||
| 
 | ||||
| //sys	FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) | ||||
| //sys	fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) | ||||
| 
 | ||||
| func FanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname string) (err error) { | ||||
| 	if pathname == "" { | ||||
| 		return fanotifyMark(fd, flags, mask, dirFd, nil) | ||||
| 	} | ||||
| 	p, err := BytePtrFromString(pathname) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return fanotifyMark(fd, flags, mask, dirFd, p) | ||||
| } | ||||
| 
 | ||||
| //sys	fchmodat(dirfd int, path string, mode uint32) (err error) | ||||
| 
 | ||||
| func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { | ||||
| @ -990,10 +1004,28 @@ func GetsockoptString(fd, level, opt int) (string, error) { | ||||
| 	return string(buf[:vallen-1]), nil | ||||
| } | ||||
| 
 | ||||
| func GetsockoptTpacketStats(fd, level, opt int) (*TpacketStats, error) { | ||||
| 	var value TpacketStats | ||||
| 	vallen := _Socklen(SizeofTpacketStats) | ||||
| 	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) | ||||
| 	return &value, err | ||||
| } | ||||
| 
 | ||||
| func GetsockoptTpacketStatsV3(fd, level, opt int) (*TpacketStatsV3, error) { | ||||
| 	var value TpacketStatsV3 | ||||
| 	vallen := _Socklen(SizeofTpacketStatsV3) | ||||
| 	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) | ||||
| 	return &value, err | ||||
| } | ||||
| 
 | ||||
| func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { | ||||
| 	return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) | ||||
| } | ||||
| 
 | ||||
| func SetsockoptPacketMreq(fd, level, opt int, mreq *PacketMreq) error { | ||||
| 	return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) | ||||
| } | ||||
| 
 | ||||
| // SetsockoptSockFprog attaches a classic BPF or an extended BPF program to a | ||||
| // socket to filter incoming packets.  See 'man 7 socket' for usage information. | ||||
| func SetsockoptSockFprog(fd, level, opt int, fprog *SockFprog) error { | ||||
| @ -1008,6 +1040,14 @@ func SetsockoptCanRawFilter(fd, level, opt int, filter []CanFilter) error { | ||||
| 	return setsockopt(fd, level, opt, p, uintptr(len(filter)*SizeofCanFilter)) | ||||
| } | ||||
| 
 | ||||
| func SetsockoptTpacketReq(fd, level, opt int, tp *TpacketReq) error { | ||||
| 	return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp)) | ||||
| } | ||||
| 
 | ||||
| func SetsockoptTpacketReq3(fd, level, opt int, tp *TpacketReq3) error { | ||||
| 	return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp)) | ||||
| } | ||||
| 
 | ||||
| // Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html) | ||||
| 
 | ||||
| // KeyctlInt calls keyctl commands in which each argument is an int. | ||||
|  | ||||
							
								
								
									
										6
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -19,12 +19,18 @@ func setTimeval(sec, usec int64) Timeval { | ||||
| 	return Timeval{Sec: int32(sec), Usec: int32(usec)} | ||||
| } | ||||
| 
 | ||||
| //sysnb	pipe(p *[2]_C_int) (err error) | ||||
| 
 | ||||
| func Pipe(p []int) (err error) { | ||||
| 	if len(p) != 2 { | ||||
| 		return EINVAL | ||||
| 	} | ||||
| 	var pp [2]_C_int | ||||
| 	// Try pipe2 first for Android O, then try pipe for kernel 2.6.23. | ||||
| 	err = pipe2(&pp, 0) | ||||
| 	if err == ENOSYS { | ||||
| 		err = pipe(&pp) | ||||
| 	} | ||||
| 	p[0] = int(pp[0]) | ||||
| 	p[1] = int(pp[1]) | ||||
| 	return | ||||
|  | ||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -208,3 +208,16 @@ func Poll(fds []PollFd, timeout int) (n int, err error) { | ||||
| 	} | ||||
| 	return ppoll(&fds[0], len(fds), ts, nil) | ||||
| } | ||||
| 
 | ||||
| //sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) | ||||
| 
 | ||||
| func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { | ||||
| 	cmdlineLen := len(cmdline) | ||||
| 	if cmdlineLen > 0 { | ||||
| 		// Account for the additional NULL byte added by | ||||
| 		// BytePtrFromString in kexecFileLoad. The kexec_file_load | ||||
| 		// syscall expects a NULL-terminated string. | ||||
| 		cmdlineLen++ | ||||
| 	} | ||||
| 	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) | ||||
| } | ||||
|  | ||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -211,3 +211,16 @@ func Poll(fds []PollFd, timeout int) (n int, err error) { | ||||
| func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { | ||||
| 	return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0) | ||||
| } | ||||
| 
 | ||||
| //sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) | ||||
| 
 | ||||
| func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { | ||||
| 	cmdlineLen := len(cmdline) | ||||
| 	if cmdlineLen > 0 { | ||||
| 		// Account for the additional NULL byte added by | ||||
| 		// BytePtrFromString in kexecFileLoad. The kexec_file_load | ||||
| 		// syscall expects a NULL-terminated string. | ||||
| 		cmdlineLen++ | ||||
| 	} | ||||
| 	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) | ||||
| } | ||||
|  | ||||
							
								
								
									
										17
									
								
								vendor/golang.org/x/sys/unix/syscall_openbsd.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								vendor/golang.org/x/sys/unix/syscall_openbsd.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -43,6 +43,23 @@ func nametomib(name string) (mib []_C_int, err error) { | ||||
| 	return nil, EINVAL | ||||
| } | ||||
| 
 | ||||
| func SysctlClockinfo(name string) (*Clockinfo, error) { | ||||
| 	mib, err := sysctlmib(name) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	n := uintptr(SizeofClockinfo) | ||||
| 	var ci Clockinfo | ||||
| 	if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if n != SizeofClockinfo { | ||||
| 		return nil, EIO | ||||
| 	} | ||||
| 	return &ci, nil | ||||
| } | ||||
| 
 | ||||
| func SysctlUvmexp(name string) (*Uvmexp, error) { | ||||
| 	mib, err := sysctlmib(name) | ||||
| 	if err != nil { | ||||
|  | ||||
							
								
								
									
										48
									
								
								vendor/golang.org/x/sys/unix/syscall_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										48
									
								
								vendor/golang.org/x/sys/unix/syscall_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -28,6 +28,11 @@ var ( | ||||
| 	errENOENT error = syscall.ENOENT | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	signalNameMapOnce sync.Once | ||||
| 	signalNameMap     map[string]syscall.Signal | ||||
| ) | ||||
| 
 | ||||
| // errnoErr returns common boxed Errno values, to prevent | ||||
| // allocations at runtime. | ||||
| func errnoErr(e syscall.Errno) error { | ||||
| @ -66,6 +71,19 @@ func SignalName(s syscall.Signal) string { | ||||
| 	return "" | ||||
| } | ||||
| 
 | ||||
| // SignalNum returns the syscall.Signal for signal named s, | ||||
| // or 0 if a signal with such name is not found. | ||||
| // The signal name should start with "SIG". | ||||
| func SignalNum(s string) syscall.Signal { | ||||
| 	signalNameMapOnce.Do(func() { | ||||
| 		signalNameMap = make(map[string]syscall.Signal) | ||||
| 		for _, signal := range signalList { | ||||
| 			signalNameMap[signal.name] = signal.num | ||||
| 		} | ||||
| 	}) | ||||
| 	return signalNameMap[s] | ||||
| } | ||||
| 
 | ||||
| // clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte. | ||||
| func clen(n []byte) int { | ||||
| 	i := bytes.IndexByte(n, 0) | ||||
| @ -276,6 +294,13 @@ func GetsockoptTimeval(fd, level, opt int) (*Timeval, error) { | ||||
| 	return &tv, err | ||||
| } | ||||
| 
 | ||||
| func GetsockoptUint64(fd, level, opt int) (value uint64, err error) { | ||||
| 	var n uint64 | ||||
| 	vallen := _Socklen(8) | ||||
| 	err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) | ||||
| 	return n, err | ||||
| } | ||||
| 
 | ||||
| func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { | ||||
| 	var rsa RawSockaddrAny | ||||
| 	var len _Socklen = SizeofSockaddrAny | ||||
| @ -333,6 +358,10 @@ func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) { | ||||
| 	return setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv)) | ||||
| } | ||||
| 
 | ||||
| func SetsockoptUint64(fd, level, opt int, value uint64) (err error) { | ||||
| 	return setsockopt(fd, level, opt, unsafe.Pointer(&value), 8) | ||||
| } | ||||
| 
 | ||||
| func Socket(domain, typ, proto int) (fd int, err error) { | ||||
| 	if domain == AF_INET6 && SocketDisableIPv6 { | ||||
| 		return -1, EAFNOSUPPORT | ||||
| @ -377,3 +406,22 @@ func SetNonblock(fd int, nonblocking bool) (err error) { | ||||
| func Exec(argv0 string, argv []string, envv []string) error { | ||||
| 	return syscall.Exec(argv0, argv, envv) | ||||
| } | ||||
| 
 | ||||
| // Lutimes sets the access and modification times tv on path. If path refers to | ||||
| // a symlink, it is not dereferenced and the timestamps are set on the symlink. | ||||
| // If tv is nil, the access and modification times are set to the current time. | ||||
| // Otherwise tv must contain exactly 2 elements, with access time as the first | ||||
| // element and modification time as the second element. | ||||
| func Lutimes(path string, tv []Timeval) error { | ||||
| 	if tv == nil { | ||||
| 		return UtimesNanoAt(AT_FDCWD, path, nil, AT_SYMLINK_NOFOLLOW) | ||||
| 	} | ||||
| 	if len(tv) != 2 { | ||||
| 		return EINVAL | ||||
| 	} | ||||
| 	ts := []Timespec{ | ||||
| 		NsecToTimespec(TimevalToNsec(tv[0])), | ||||
| 		NsecToTimespec(TimevalToNsec(tv[1])), | ||||
| 	} | ||||
| 	return UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW) | ||||
| } | ||||
|  | ||||
							
								
								
									
										6
									
								
								vendor/golang.org/x/sys/unix/types_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/golang.org/x/sys/unix/types_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -275,3 +275,9 @@ const ( | ||||
| // uname | ||||
| 
 | ||||
| type Utsname C.struct_utsname | ||||
| 
 | ||||
| // Clockinfo | ||||
| 
 | ||||
| const SizeofClockinfo = C.sizeof_struct_clockinfo | ||||
| 
 | ||||
| type Clockinfo C.struct_clockinfo | ||||
|  | ||||
							
								
								
									
										6
									
								
								vendor/golang.org/x/sys/unix/types_openbsd.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/golang.org/x/sys/unix/types_openbsd.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -274,3 +274,9 @@ type Utsname C.struct_utsname | ||||
| const SizeofUvmexp = C.sizeof_struct_uvmexp | ||||
| 
 | ||||
| type Uvmexp C.struct_uvmexp | ||||
| 
 | ||||
| // Clockinfo | ||||
| 
 | ||||
| const SizeofClockinfo = C.sizeof_struct_clockinfo | ||||
| 
 | ||||
| type Clockinfo C.struct_clockinfo | ||||
|  | ||||
							
								
								
									
										57
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										57
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -174,6 +174,7 @@ const ( | ||||
| 	B9600                                = 0xd | ||||
| 	BALLOON_KVM_MAGIC                    = 0x13661366 | ||||
| 	BDEVFS_MAGIC                         = 0x62646576 | ||||
| 	BINDERFS_SUPER_MAGIC                 = 0x6c6f6f70 | ||||
| 	BINFMTFS_MAGIC                       = 0x42494e4d | ||||
| 	BLKBSZGET                            = 0x80041270 | ||||
| 	BLKBSZSET                            = 0x40041271 | ||||
| @ -486,6 +487,50 @@ const ( | ||||
| 	FALLOC_FL_PUNCH_HOLE                 = 0x2 | ||||
| 	FALLOC_FL_UNSHARE_RANGE              = 0x40 | ||||
| 	FALLOC_FL_ZERO_RANGE                 = 0x10 | ||||
| 	FANOTIFY_METADATA_VERSION            = 0x3 | ||||
| 	FAN_ACCESS                           = 0x1 | ||||
| 	FAN_ACCESS_PERM                      = 0x20000 | ||||
| 	FAN_ALLOW                            = 0x1 | ||||
| 	FAN_ALL_CLASS_BITS                   = 0xc | ||||
| 	FAN_ALL_EVENTS                       = 0x3b | ||||
| 	FAN_ALL_INIT_FLAGS                   = 0x3f | ||||
| 	FAN_ALL_MARK_FLAGS                   = 0xff | ||||
| 	FAN_ALL_OUTGOING_EVENTS              = 0x3403b | ||||
| 	FAN_ALL_PERM_EVENTS                  = 0x30000 | ||||
| 	FAN_AUDIT                            = 0x10 | ||||
| 	FAN_CLASS_CONTENT                    = 0x4 | ||||
| 	FAN_CLASS_NOTIF                      = 0x0 | ||||
| 	FAN_CLASS_PRE_CONTENT                = 0x8 | ||||
| 	FAN_CLOEXEC                          = 0x1 | ||||
| 	FAN_CLOSE                            = 0x18 | ||||
| 	FAN_CLOSE_NOWRITE                    = 0x10 | ||||
| 	FAN_CLOSE_WRITE                      = 0x8 | ||||
| 	FAN_DENY                             = 0x2 | ||||
| 	FAN_ENABLE_AUDIT                     = 0x40 | ||||
| 	FAN_EVENT_METADATA_LEN               = 0x18 | ||||
| 	FAN_EVENT_ON_CHILD                   = 0x8000000 | ||||
| 	FAN_MARK_ADD                         = 0x1 | ||||
| 	FAN_MARK_DONT_FOLLOW                 = 0x4 | ||||
| 	FAN_MARK_FILESYSTEM                  = 0x100 | ||||
| 	FAN_MARK_FLUSH                       = 0x80 | ||||
| 	FAN_MARK_IGNORED_MASK                = 0x20 | ||||
| 	FAN_MARK_IGNORED_SURV_MODIFY         = 0x40 | ||||
| 	FAN_MARK_INODE                       = 0x0 | ||||
| 	FAN_MARK_MOUNT                       = 0x10 | ||||
| 	FAN_MARK_ONLYDIR                     = 0x8 | ||||
| 	FAN_MARK_REMOVE                      = 0x2 | ||||
| 	FAN_MODIFY                           = 0x2 | ||||
| 	FAN_NOFD                             = -0x1 | ||||
| 	FAN_NONBLOCK                         = 0x2 | ||||
| 	FAN_ONDIR                            = 0x40000000 | ||||
| 	FAN_OPEN                             = 0x20 | ||||
| 	FAN_OPEN_EXEC                        = 0x1000 | ||||
| 	FAN_OPEN_EXEC_PERM                   = 0x40000 | ||||
| 	FAN_OPEN_PERM                        = 0x10000 | ||||
| 	FAN_Q_OVERFLOW                       = 0x4000 | ||||
| 	FAN_REPORT_TID                       = 0x100 | ||||
| 	FAN_UNLIMITED_MARKS                  = 0x20 | ||||
| 	FAN_UNLIMITED_QUEUE                  = 0x10 | ||||
| 	FD_CLOEXEC                           = 0x1 | ||||
| 	FD_SETSIZE                           = 0x400 | ||||
| 	FF0                                  = 0x0 | ||||
| @ -493,6 +538,7 @@ const ( | ||||
| 	FFDLY                                = 0x8000 | ||||
| 	FLUSHO                               = 0x1000 | ||||
| 	FP_XSTATE_MAGIC2                     = 0x46505845 | ||||
| 	FS_ENCRYPTION_MODE_ADIANTUM          = 0x9 | ||||
| 	FS_ENCRYPTION_MODE_AES_128_CBC       = 0x5 | ||||
| 	FS_ENCRYPTION_MODE_AES_128_CTS       = 0x6 | ||||
| 	FS_ENCRYPTION_MODE_AES_256_CBC       = 0x3 | ||||
| @ -514,7 +560,7 @@ const ( | ||||
| 	FS_POLICY_FLAGS_PAD_4                = 0x0 | ||||
| 	FS_POLICY_FLAGS_PAD_8                = 0x1 | ||||
| 	FS_POLICY_FLAGS_PAD_MASK             = 0x3 | ||||
| 	FS_POLICY_FLAGS_VALID                = 0x3 | ||||
| 	FS_POLICY_FLAGS_VALID                = 0x7 | ||||
| 	FUTEXFS_SUPER_MAGIC                  = 0xbad1dea | ||||
| 	F_ADD_SEALS                          = 0x409 | ||||
| 	F_DUPFD                              = 0x0 | ||||
| @ -1134,7 +1180,7 @@ const ( | ||||
| 	NETLINK_UNUSED                       = 0x1 | ||||
| 	NETLINK_USERSOCK                     = 0x2 | ||||
| 	NETLINK_XFRM                         = 0x6 | ||||
| 	NETNSA_MAX                           = 0x3 | ||||
| 	NETNSA_MAX                           = 0x5 | ||||
| 	NETNSA_NSID_NOT_ASSIGNED             = -0x1 | ||||
| 	NFNETLINK_V0                         = 0x0 | ||||
| 	NFNLGRP_ACCT_QUOTA                   = 0x8 | ||||
| @ -1398,6 +1444,12 @@ const ( | ||||
| 	PR_MCE_KILL_SET                      = 0x1 | ||||
| 	PR_MPX_DISABLE_MANAGEMENT            = 0x2c | ||||
| 	PR_MPX_ENABLE_MANAGEMENT             = 0x2b | ||||
| 	PR_PAC_APDAKEY                       = 0x4 | ||||
| 	PR_PAC_APDBKEY                       = 0x8 | ||||
| 	PR_PAC_APGAKEY                       = 0x10 | ||||
| 	PR_PAC_APIAKEY                       = 0x1 | ||||
| 	PR_PAC_APIBKEY                       = 0x2 | ||||
| 	PR_PAC_RESET_KEYS                    = 0x36 | ||||
| 	PR_SET_CHILD_SUBREAPER               = 0x24 | ||||
| 	PR_SET_DUMPABLE                      = 0x4 | ||||
| 	PR_SET_ENDIAN                        = 0x14 | ||||
| @ -2232,6 +2284,7 @@ const ( | ||||
| 	TUNGETVNETBE                         = 0x800454df | ||||
| 	TUNGETVNETHDRSZ                      = 0x800454d7 | ||||
| 	TUNGETVNETLE                         = 0x800454dd | ||||
| 	TUNSETCARRIER                        = 0x400454e2 | ||||
| 	TUNSETDEBUG                          = 0x400454c9 | ||||
| 	TUNSETFILTEREBPF                     = 0x800454e1 | ||||
| 	TUNSETGROUP                          = 0x400454ce | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tamal Saha
						Tamal Saha