mirror of
https://github.com/rclone/rclone
synced 2025-01-14 18:27:30 +01:00
Add missing vendor files
This commit is contained in:
parent
23b8f008e0
commit
5f320cc540
82
vendor/github.com/aws/aws-sdk-go/private/signer/v4/header_rules.go
generated
vendored
Normal file
82
vendor/github.com/aws/aws-sdk-go/private/signer/v4/header_rules.go
generated
vendored
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
package v4
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// validator houses a set of rule needed for validation of a
|
||||||
|
// string value
|
||||||
|
type rules []rule
|
||||||
|
|
||||||
|
// rule interface allows for more flexible rules and just simply
|
||||||
|
// checks whether or not a value adheres to that rule
|
||||||
|
type rule interface {
|
||||||
|
IsValid(value string) bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsValid will iterate through all rules and see if any rules
|
||||||
|
// apply to the value and supports nested rules
|
||||||
|
func (r rules) IsValid(value string) bool {
|
||||||
|
for _, rule := range r {
|
||||||
|
if rule.IsValid(value) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// mapRule generic rule for maps
|
||||||
|
type mapRule map[string]struct{}
|
||||||
|
|
||||||
|
// IsValid for the map rule satisfies whether it exists in the map
|
||||||
|
func (m mapRule) IsValid(value string) bool {
|
||||||
|
_, ok := m[value]
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// whitelist is a generic rule for whitelisting
|
||||||
|
type whitelist struct {
|
||||||
|
rule
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsValid for whitelist checks if the value is within the whitelist
|
||||||
|
func (w whitelist) IsValid(value string) bool {
|
||||||
|
return w.rule.IsValid(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// blacklist is a generic rule for blacklisting
|
||||||
|
type blacklist struct {
|
||||||
|
rule
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsValid for whitelist checks if the value is within the whitelist
|
||||||
|
func (b blacklist) IsValid(value string) bool {
|
||||||
|
return !b.rule.IsValid(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
type patterns []string
|
||||||
|
|
||||||
|
// IsValid for patterns checks each pattern and returns if a match has
|
||||||
|
// been found
|
||||||
|
func (p patterns) IsValid(value string) bool {
|
||||||
|
for _, pattern := range p {
|
||||||
|
if strings.HasPrefix(http.CanonicalHeaderKey(value), pattern) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// inclusiveRules rules allow for rules to depend on one another
|
||||||
|
type inclusiveRules []rule
|
||||||
|
|
||||||
|
// IsValid will return true if all rules are true
|
||||||
|
func (r inclusiveRules) IsValid(value string) bool {
|
||||||
|
for _, rule := range r {
|
||||||
|
if !rule.IsValid(value) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
438
vendor/github.com/aws/aws-sdk-go/private/signer/v4/v4.go
generated
vendored
Normal file
438
vendor/github.com/aws/aws-sdk-go/private/signer/v4/v4.go
generated
vendored
Normal file
@ -0,0 +1,438 @@
|
|||||||
|
// Package v4 implements signing for AWS V4 signer
|
||||||
|
package v4
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/hmac"
|
||||||
|
"crypto/sha256"
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"sort"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol/rest"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
authHeaderPrefix = "AWS4-HMAC-SHA256"
|
||||||
|
timeFormat = "20060102T150405Z"
|
||||||
|
shortTimeFormat = "20060102"
|
||||||
|
)
|
||||||
|
|
||||||
|
var ignoredHeaders = rules{
|
||||||
|
blacklist{
|
||||||
|
mapRule{
|
||||||
|
"Content-Length": struct{}{},
|
||||||
|
"User-Agent": struct{}{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// requiredSignedHeaders is a whitelist for build canonical headers.
|
||||||
|
var requiredSignedHeaders = rules{
|
||||||
|
whitelist{
|
||||||
|
mapRule{
|
||||||
|
"Cache-Control": struct{}{},
|
||||||
|
"Content-Disposition": struct{}{},
|
||||||
|
"Content-Encoding": struct{}{},
|
||||||
|
"Content-Language": struct{}{},
|
||||||
|
"Content-Md5": struct{}{},
|
||||||
|
"Content-Type": struct{}{},
|
||||||
|
"Expires": struct{}{},
|
||||||
|
"If-Match": struct{}{},
|
||||||
|
"If-Modified-Since": struct{}{},
|
||||||
|
"If-None-Match": struct{}{},
|
||||||
|
"If-Unmodified-Since": struct{}{},
|
||||||
|
"Range": struct{}{},
|
||||||
|
"X-Amz-Acl": struct{}{},
|
||||||
|
"X-Amz-Copy-Source": struct{}{},
|
||||||
|
"X-Amz-Copy-Source-If-Match": struct{}{},
|
||||||
|
"X-Amz-Copy-Source-If-Modified-Since": struct{}{},
|
||||||
|
"X-Amz-Copy-Source-If-None-Match": struct{}{},
|
||||||
|
"X-Amz-Copy-Source-If-Unmodified-Since": struct{}{},
|
||||||
|
"X-Amz-Copy-Source-Range": struct{}{},
|
||||||
|
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Algorithm": struct{}{},
|
||||||
|
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key": struct{}{},
|
||||||
|
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key-Md5": struct{}{},
|
||||||
|
"X-Amz-Grant-Full-control": struct{}{},
|
||||||
|
"X-Amz-Grant-Read": struct{}{},
|
||||||
|
"X-Amz-Grant-Read-Acp": struct{}{},
|
||||||
|
"X-Amz-Grant-Write": struct{}{},
|
||||||
|
"X-Amz-Grant-Write-Acp": struct{}{},
|
||||||
|
"X-Amz-Metadata-Directive": struct{}{},
|
||||||
|
"X-Amz-Mfa": struct{}{},
|
||||||
|
"X-Amz-Request-Payer": struct{}{},
|
||||||
|
"X-Amz-Server-Side-Encryption": struct{}{},
|
||||||
|
"X-Amz-Server-Side-Encryption-Aws-Kms-Key-Id": struct{}{},
|
||||||
|
"X-Amz-Server-Side-Encryption-Customer-Algorithm": struct{}{},
|
||||||
|
"X-Amz-Server-Side-Encryption-Customer-Key": struct{}{},
|
||||||
|
"X-Amz-Server-Side-Encryption-Customer-Key-Md5": struct{}{},
|
||||||
|
"X-Amz-Storage-Class": struct{}{},
|
||||||
|
"X-Amz-Website-Redirect-Location": struct{}{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
patterns{"X-Amz-Meta-"},
|
||||||
|
}
|
||||||
|
|
||||||
|
// allowedHoisting is a whitelist for build query headers. The boolean value
|
||||||
|
// represents whether or not it is a pattern.
|
||||||
|
var allowedQueryHoisting = inclusiveRules{
|
||||||
|
blacklist{requiredSignedHeaders},
|
||||||
|
patterns{"X-Amz-"},
|
||||||
|
}
|
||||||
|
|
||||||
|
type signer struct {
|
||||||
|
Request *http.Request
|
||||||
|
Time time.Time
|
||||||
|
ExpireTime time.Duration
|
||||||
|
ServiceName string
|
||||||
|
Region string
|
||||||
|
CredValues credentials.Value
|
||||||
|
Credentials *credentials.Credentials
|
||||||
|
Query url.Values
|
||||||
|
Body io.ReadSeeker
|
||||||
|
Debug aws.LogLevelType
|
||||||
|
Logger aws.Logger
|
||||||
|
|
||||||
|
isPresign bool
|
||||||
|
formattedTime string
|
||||||
|
formattedShortTime string
|
||||||
|
|
||||||
|
signedHeaders string
|
||||||
|
canonicalHeaders string
|
||||||
|
canonicalString string
|
||||||
|
credentialString string
|
||||||
|
stringToSign string
|
||||||
|
signature string
|
||||||
|
authorization string
|
||||||
|
notHoist bool
|
||||||
|
signedHeaderVals http.Header
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sign requests with signature version 4.
|
||||||
|
//
|
||||||
|
// Will sign the requests with the service config's Credentials object
|
||||||
|
// Signing is skipped if the credentials is the credentials.AnonymousCredentials
|
||||||
|
// object.
|
||||||
|
func Sign(req *request.Request) {
|
||||||
|
// If the request does not need to be signed ignore the signing of the
|
||||||
|
// request if the AnonymousCredentials object is used.
|
||||||
|
if req.Config.Credentials == credentials.AnonymousCredentials {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
region := req.ClientInfo.SigningRegion
|
||||||
|
if region == "" {
|
||||||
|
region = aws.StringValue(req.Config.Region)
|
||||||
|
}
|
||||||
|
|
||||||
|
name := req.ClientInfo.SigningName
|
||||||
|
if name == "" {
|
||||||
|
name = req.ClientInfo.ServiceName
|
||||||
|
}
|
||||||
|
|
||||||
|
s := signer{
|
||||||
|
Request: req.HTTPRequest,
|
||||||
|
Time: req.Time,
|
||||||
|
ExpireTime: req.ExpireTime,
|
||||||
|
Query: req.HTTPRequest.URL.Query(),
|
||||||
|
Body: req.Body,
|
||||||
|
ServiceName: name,
|
||||||
|
Region: region,
|
||||||
|
Credentials: req.Config.Credentials,
|
||||||
|
Debug: req.Config.LogLevel.Value(),
|
||||||
|
Logger: req.Config.Logger,
|
||||||
|
notHoist: req.NotHoist,
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Error = s.sign()
|
||||||
|
req.SignedHeaderVals = s.signedHeaderVals
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v4 *signer) sign() error {
|
||||||
|
if v4.ExpireTime != 0 {
|
||||||
|
v4.isPresign = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if v4.isRequestSigned() {
|
||||||
|
if !v4.Credentials.IsExpired() {
|
||||||
|
// If the request is already signed, and the credentials have not
|
||||||
|
// expired yet ignore the signing request.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// The credentials have expired for this request. The current signing
|
||||||
|
// is invalid, and needs to be request because the request will fail.
|
||||||
|
if v4.isPresign {
|
||||||
|
v4.removePresign()
|
||||||
|
// Update the request's query string to ensure the values stays in
|
||||||
|
// sync in the case retrieving the new credentials fails.
|
||||||
|
v4.Request.URL.RawQuery = v4.Query.Encode()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
v4.CredValues, err = v4.Credentials.Get()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if v4.isPresign {
|
||||||
|
v4.Query.Set("X-Amz-Algorithm", authHeaderPrefix)
|
||||||
|
if v4.CredValues.SessionToken != "" {
|
||||||
|
v4.Query.Set("X-Amz-Security-Token", v4.CredValues.SessionToken)
|
||||||
|
} else {
|
||||||
|
v4.Query.Del("X-Amz-Security-Token")
|
||||||
|
}
|
||||||
|
} else if v4.CredValues.SessionToken != "" {
|
||||||
|
v4.Request.Header.Set("X-Amz-Security-Token", v4.CredValues.SessionToken)
|
||||||
|
}
|
||||||
|
|
||||||
|
v4.build()
|
||||||
|
|
||||||
|
if v4.Debug.Matches(aws.LogDebugWithSigning) {
|
||||||
|
v4.logSigningInfo()
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
const logSignInfoMsg = `DEBUG: Request Signiture:
|
||||||
|
---[ CANONICAL STRING ]-----------------------------
|
||||||
|
%s
|
||||||
|
---[ STRING TO SIGN ]--------------------------------
|
||||||
|
%s%s
|
||||||
|
-----------------------------------------------------`
|
||||||
|
const logSignedURLMsg = `
|
||||||
|
---[ SIGNED URL ]------------------------------------
|
||||||
|
%s`
|
||||||
|
|
||||||
|
func (v4 *signer) logSigningInfo() {
|
||||||
|
signedURLMsg := ""
|
||||||
|
if v4.isPresign {
|
||||||
|
signedURLMsg = fmt.Sprintf(logSignedURLMsg, v4.Request.URL.String())
|
||||||
|
}
|
||||||
|
msg := fmt.Sprintf(logSignInfoMsg, v4.canonicalString, v4.stringToSign, signedURLMsg)
|
||||||
|
v4.Logger.Log(msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v4 *signer) build() {
|
||||||
|
|
||||||
|
v4.buildTime() // no depends
|
||||||
|
v4.buildCredentialString() // no depends
|
||||||
|
|
||||||
|
unsignedHeaders := v4.Request.Header
|
||||||
|
if v4.isPresign {
|
||||||
|
if !v4.notHoist {
|
||||||
|
urlValues := url.Values{}
|
||||||
|
urlValues, unsignedHeaders = buildQuery(allowedQueryHoisting, unsignedHeaders) // no depends
|
||||||
|
for k := range urlValues {
|
||||||
|
v4.Query[k] = urlValues[k]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
v4.buildCanonicalHeaders(ignoredHeaders, unsignedHeaders)
|
||||||
|
v4.buildCanonicalString() // depends on canon headers / signed headers
|
||||||
|
v4.buildStringToSign() // depends on canon string
|
||||||
|
v4.buildSignature() // depends on string to sign
|
||||||
|
|
||||||
|
if v4.isPresign {
|
||||||
|
v4.Request.URL.RawQuery += "&X-Amz-Signature=" + v4.signature
|
||||||
|
} else {
|
||||||
|
parts := []string{
|
||||||
|
authHeaderPrefix + " Credential=" + v4.CredValues.AccessKeyID + "/" + v4.credentialString,
|
||||||
|
"SignedHeaders=" + v4.signedHeaders,
|
||||||
|
"Signature=" + v4.signature,
|
||||||
|
}
|
||||||
|
v4.Request.Header.Set("Authorization", strings.Join(parts, ", "))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v4 *signer) buildTime() {
|
||||||
|
v4.formattedTime = v4.Time.UTC().Format(timeFormat)
|
||||||
|
v4.formattedShortTime = v4.Time.UTC().Format(shortTimeFormat)
|
||||||
|
|
||||||
|
if v4.isPresign {
|
||||||
|
duration := int64(v4.ExpireTime / time.Second)
|
||||||
|
v4.Query.Set("X-Amz-Date", v4.formattedTime)
|
||||||
|
v4.Query.Set("X-Amz-Expires", strconv.FormatInt(duration, 10))
|
||||||
|
} else {
|
||||||
|
v4.Request.Header.Set("X-Amz-Date", v4.formattedTime)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v4 *signer) buildCredentialString() {
|
||||||
|
v4.credentialString = strings.Join([]string{
|
||||||
|
v4.formattedShortTime,
|
||||||
|
v4.Region,
|
||||||
|
v4.ServiceName,
|
||||||
|
"aws4_request",
|
||||||
|
}, "/")
|
||||||
|
|
||||||
|
if v4.isPresign {
|
||||||
|
v4.Query.Set("X-Amz-Credential", v4.CredValues.AccessKeyID+"/"+v4.credentialString)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildQuery(r rule, header http.Header) (url.Values, http.Header) {
|
||||||
|
query := url.Values{}
|
||||||
|
unsignedHeaders := http.Header{}
|
||||||
|
for k, h := range header {
|
||||||
|
if r.IsValid(k) {
|
||||||
|
query[k] = h
|
||||||
|
} else {
|
||||||
|
unsignedHeaders[k] = h
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, unsignedHeaders
|
||||||
|
}
|
||||||
|
func (v4 *signer) buildCanonicalHeaders(r rule, header http.Header) {
|
||||||
|
var headers []string
|
||||||
|
headers = append(headers, "host")
|
||||||
|
for k, v := range header {
|
||||||
|
canonicalKey := http.CanonicalHeaderKey(k)
|
||||||
|
if !r.IsValid(canonicalKey) {
|
||||||
|
continue // ignored header
|
||||||
|
}
|
||||||
|
|
||||||
|
lowerCaseKey := strings.ToLower(k)
|
||||||
|
headers = append(headers, lowerCaseKey)
|
||||||
|
|
||||||
|
if v4.signedHeaderVals == nil {
|
||||||
|
v4.signedHeaderVals = make(http.Header)
|
||||||
|
}
|
||||||
|
v4.signedHeaderVals[lowerCaseKey] = v
|
||||||
|
}
|
||||||
|
sort.Strings(headers)
|
||||||
|
|
||||||
|
v4.signedHeaders = strings.Join(headers, ";")
|
||||||
|
|
||||||
|
if v4.isPresign {
|
||||||
|
v4.Query.Set("X-Amz-SignedHeaders", v4.signedHeaders)
|
||||||
|
}
|
||||||
|
|
||||||
|
headerValues := make([]string, len(headers))
|
||||||
|
for i, k := range headers {
|
||||||
|
if k == "host" {
|
||||||
|
headerValues[i] = "host:" + v4.Request.URL.Host
|
||||||
|
} else {
|
||||||
|
headerValues[i] = k + ":" +
|
||||||
|
strings.Join(v4.Request.Header[http.CanonicalHeaderKey(k)], ",")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
v4.canonicalHeaders = strings.Join(headerValues, "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v4 *signer) buildCanonicalString() {
|
||||||
|
v4.Request.URL.RawQuery = strings.Replace(v4.Query.Encode(), "+", "%20", -1)
|
||||||
|
uri := v4.Request.URL.Opaque
|
||||||
|
if uri != "" {
|
||||||
|
uri = "/" + strings.Join(strings.Split(uri, "/")[3:], "/")
|
||||||
|
} else {
|
||||||
|
uri = v4.Request.URL.Path
|
||||||
|
}
|
||||||
|
if uri == "" {
|
||||||
|
uri = "/"
|
||||||
|
}
|
||||||
|
|
||||||
|
if v4.ServiceName != "s3" {
|
||||||
|
uri = rest.EscapePath(uri, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
v4.canonicalString = strings.Join([]string{
|
||||||
|
v4.Request.Method,
|
||||||
|
uri,
|
||||||
|
v4.Request.URL.RawQuery,
|
||||||
|
v4.canonicalHeaders + "\n",
|
||||||
|
v4.signedHeaders,
|
||||||
|
v4.bodyDigest(),
|
||||||
|
}, "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v4 *signer) buildStringToSign() {
|
||||||
|
v4.stringToSign = strings.Join([]string{
|
||||||
|
authHeaderPrefix,
|
||||||
|
v4.formattedTime,
|
||||||
|
v4.credentialString,
|
||||||
|
hex.EncodeToString(makeSha256([]byte(v4.canonicalString))),
|
||||||
|
}, "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v4 *signer) buildSignature() {
|
||||||
|
secret := v4.CredValues.SecretAccessKey
|
||||||
|
date := makeHmac([]byte("AWS4"+secret), []byte(v4.formattedShortTime))
|
||||||
|
region := makeHmac(date, []byte(v4.Region))
|
||||||
|
service := makeHmac(region, []byte(v4.ServiceName))
|
||||||
|
credentials := makeHmac(service, []byte("aws4_request"))
|
||||||
|
signature := makeHmac(credentials, []byte(v4.stringToSign))
|
||||||
|
v4.signature = hex.EncodeToString(signature)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v4 *signer) bodyDigest() string {
|
||||||
|
hash := v4.Request.Header.Get("X-Amz-Content-Sha256")
|
||||||
|
if hash == "" {
|
||||||
|
if v4.isPresign && v4.ServiceName == "s3" {
|
||||||
|
hash = "UNSIGNED-PAYLOAD"
|
||||||
|
} else if v4.Body == nil {
|
||||||
|
hash = hex.EncodeToString(makeSha256([]byte{}))
|
||||||
|
} else {
|
||||||
|
hash = hex.EncodeToString(makeSha256Reader(v4.Body))
|
||||||
|
}
|
||||||
|
v4.Request.Header.Add("X-Amz-Content-Sha256", hash)
|
||||||
|
}
|
||||||
|
return hash
|
||||||
|
}
|
||||||
|
|
||||||
|
// isRequestSigned returns if the request is currently signed or presigned
|
||||||
|
func (v4 *signer) isRequestSigned() bool {
|
||||||
|
if v4.isPresign && v4.Query.Get("X-Amz-Signature") != "" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if v4.Request.Header.Get("Authorization") != "" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// unsign removes signing flags for both signed and presigned requests.
|
||||||
|
func (v4 *signer) removePresign() {
|
||||||
|
v4.Query.Del("X-Amz-Algorithm")
|
||||||
|
v4.Query.Del("X-Amz-Signature")
|
||||||
|
v4.Query.Del("X-Amz-Security-Token")
|
||||||
|
v4.Query.Del("X-Amz-Date")
|
||||||
|
v4.Query.Del("X-Amz-Expires")
|
||||||
|
v4.Query.Del("X-Amz-Credential")
|
||||||
|
v4.Query.Del("X-Amz-SignedHeaders")
|
||||||
|
}
|
||||||
|
|
||||||
|
func makeHmac(key []byte, data []byte) []byte {
|
||||||
|
hash := hmac.New(sha256.New, key)
|
||||||
|
hash.Write(data)
|
||||||
|
return hash.Sum(nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func makeSha256(data []byte) []byte {
|
||||||
|
hash := sha256.New()
|
||||||
|
hash.Write(data)
|
||||||
|
return hash.Sum(nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func makeSha256Reader(reader io.ReadSeeker) []byte {
|
||||||
|
hash := sha256.New()
|
||||||
|
start, _ := reader.Seek(0, 1)
|
||||||
|
defer reader.Seek(start, 0)
|
||||||
|
|
||||||
|
io.Copy(hash, reader)
|
||||||
|
return hash.Sum(nil)
|
||||||
|
}
|
45
vendor/golang.org/x/crypto/poly1305/const_amd64.s
generated
vendored
Normal file
45
vendor/golang.org/x/crypto/poly1305/const_amd64.s
generated
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// Copyright 2012 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.
|
||||||
|
|
||||||
|
// This code was translated into a form compatible with 6a from the public
|
||||||
|
// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
|
||||||
|
|
||||||
|
// +build amd64,!gccgo,!appengine
|
||||||
|
|
||||||
|
DATA ·SCALE(SB)/8, $0x37F4000000000000
|
||||||
|
GLOBL ·SCALE(SB), 8, $8
|
||||||
|
DATA ·TWO32(SB)/8, $0x41F0000000000000
|
||||||
|
GLOBL ·TWO32(SB), 8, $8
|
||||||
|
DATA ·TWO64(SB)/8, $0x43F0000000000000
|
||||||
|
GLOBL ·TWO64(SB), 8, $8
|
||||||
|
DATA ·TWO96(SB)/8, $0x45F0000000000000
|
||||||
|
GLOBL ·TWO96(SB), 8, $8
|
||||||
|
DATA ·ALPHA32(SB)/8, $0x45E8000000000000
|
||||||
|
GLOBL ·ALPHA32(SB), 8, $8
|
||||||
|
DATA ·ALPHA64(SB)/8, $0x47E8000000000000
|
||||||
|
GLOBL ·ALPHA64(SB), 8, $8
|
||||||
|
DATA ·ALPHA96(SB)/8, $0x49E8000000000000
|
||||||
|
GLOBL ·ALPHA96(SB), 8, $8
|
||||||
|
DATA ·ALPHA130(SB)/8, $0x4C08000000000000
|
||||||
|
GLOBL ·ALPHA130(SB), 8, $8
|
||||||
|
DATA ·DOFFSET0(SB)/8, $0x4330000000000000
|
||||||
|
GLOBL ·DOFFSET0(SB), 8, $8
|
||||||
|
DATA ·DOFFSET1(SB)/8, $0x4530000000000000
|
||||||
|
GLOBL ·DOFFSET1(SB), 8, $8
|
||||||
|
DATA ·DOFFSET2(SB)/8, $0x4730000000000000
|
||||||
|
GLOBL ·DOFFSET2(SB), 8, $8
|
||||||
|
DATA ·DOFFSET3(SB)/8, $0x4930000000000000
|
||||||
|
GLOBL ·DOFFSET3(SB), 8, $8
|
||||||
|
DATA ·DOFFSET3MINUSTWO128(SB)/8, $0x492FFFFE00000000
|
||||||
|
GLOBL ·DOFFSET3MINUSTWO128(SB), 8, $8
|
||||||
|
DATA ·HOFFSET0(SB)/8, $0x43300001FFFFFFFB
|
||||||
|
GLOBL ·HOFFSET0(SB), 8, $8
|
||||||
|
DATA ·HOFFSET1(SB)/8, $0x45300001FFFFFFFE
|
||||||
|
GLOBL ·HOFFSET1(SB), 8, $8
|
||||||
|
DATA ·HOFFSET2(SB)/8, $0x47300001FFFFFFFE
|
||||||
|
GLOBL ·HOFFSET2(SB), 8, $8
|
||||||
|
DATA ·HOFFSET3(SB)/8, $0x49300003FFFFFFFE
|
||||||
|
GLOBL ·HOFFSET3(SB), 8, $8
|
||||||
|
DATA ·ROUNDING(SB)/2, $0x137f
|
||||||
|
GLOBL ·ROUNDING(SB), 8, $2
|
497
vendor/golang.org/x/crypto/poly1305/poly1305_amd64.s
generated
vendored
Normal file
497
vendor/golang.org/x/crypto/poly1305/poly1305_amd64.s
generated
vendored
Normal file
@ -0,0 +1,497 @@
|
|||||||
|
// Copyright 2012 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.
|
||||||
|
|
||||||
|
// This code was translated into a form compatible with 6a from the public
|
||||||
|
// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
|
||||||
|
|
||||||
|
// +build amd64,!gccgo,!appengine
|
||||||
|
|
||||||
|
// func poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]key)
|
||||||
|
TEXT ·poly1305(SB),0,$224-32
|
||||||
|
MOVQ out+0(FP),DI
|
||||||
|
MOVQ m+8(FP),SI
|
||||||
|
MOVQ mlen+16(FP),DX
|
||||||
|
MOVQ key+24(FP),CX
|
||||||
|
|
||||||
|
MOVQ SP,R11
|
||||||
|
MOVQ $31,R9
|
||||||
|
NOTQ R9
|
||||||
|
ANDQ R9,SP
|
||||||
|
ADDQ $32,SP
|
||||||
|
|
||||||
|
MOVQ R11,32(SP)
|
||||||
|
MOVQ R12,40(SP)
|
||||||
|
MOVQ R13,48(SP)
|
||||||
|
MOVQ R14,56(SP)
|
||||||
|
MOVQ R15,64(SP)
|
||||||
|
MOVQ BX,72(SP)
|
||||||
|
MOVQ BP,80(SP)
|
||||||
|
FLDCW ·ROUNDING(SB)
|
||||||
|
MOVL 0(CX),R8
|
||||||
|
MOVL 4(CX),R9
|
||||||
|
MOVL 8(CX),AX
|
||||||
|
MOVL 12(CX),R10
|
||||||
|
MOVQ DI,88(SP)
|
||||||
|
MOVQ CX,96(SP)
|
||||||
|
MOVL $0X43300000,108(SP)
|
||||||
|
MOVL $0X45300000,116(SP)
|
||||||
|
MOVL $0X47300000,124(SP)
|
||||||
|
MOVL $0X49300000,132(SP)
|
||||||
|
ANDL $0X0FFFFFFF,R8
|
||||||
|
ANDL $0X0FFFFFFC,R9
|
||||||
|
ANDL $0X0FFFFFFC,AX
|
||||||
|
ANDL $0X0FFFFFFC,R10
|
||||||
|
MOVL R8,104(SP)
|
||||||
|
MOVL R9,112(SP)
|
||||||
|
MOVL AX,120(SP)
|
||||||
|
MOVL R10,128(SP)
|
||||||
|
FMOVD 104(SP), F0
|
||||||
|
FSUBD ·DOFFSET0(SB), F0
|
||||||
|
FMOVD 112(SP), F0
|
||||||
|
FSUBD ·DOFFSET1(SB), F0
|
||||||
|
FMOVD 120(SP), F0
|
||||||
|
FSUBD ·DOFFSET2(SB), F0
|
||||||
|
FMOVD 128(SP), F0
|
||||||
|
FSUBD ·DOFFSET3(SB), F0
|
||||||
|
FXCHD F0, F3
|
||||||
|
FMOVDP F0, 136(SP)
|
||||||
|
FXCHD F0, F1
|
||||||
|
FMOVD F0, 144(SP)
|
||||||
|
FMULD ·SCALE(SB), F0
|
||||||
|
FMOVDP F0, 152(SP)
|
||||||
|
FMOVD F0, 160(SP)
|
||||||
|
FMULD ·SCALE(SB), F0
|
||||||
|
FMOVDP F0, 168(SP)
|
||||||
|
FMOVD F0, 176(SP)
|
||||||
|
FMULD ·SCALE(SB), F0
|
||||||
|
FMOVDP F0, 184(SP)
|
||||||
|
FLDZ
|
||||||
|
FLDZ
|
||||||
|
FLDZ
|
||||||
|
FLDZ
|
||||||
|
CMPQ DX,$16
|
||||||
|
JB ADDATMOST15BYTES
|
||||||
|
INITIALATLEAST16BYTES:
|
||||||
|
MOVL 12(SI),DI
|
||||||
|
MOVL 8(SI),CX
|
||||||
|
MOVL 4(SI),R8
|
||||||
|
MOVL 0(SI),R9
|
||||||
|
MOVL DI,128(SP)
|
||||||
|
MOVL CX,120(SP)
|
||||||
|
MOVL R8,112(SP)
|
||||||
|
MOVL R9,104(SP)
|
||||||
|
ADDQ $16,SI
|
||||||
|
SUBQ $16,DX
|
||||||
|
FXCHD F0, F3
|
||||||
|
FADDD 128(SP), F0
|
||||||
|
FSUBD ·DOFFSET3MINUSTWO128(SB), F0
|
||||||
|
FXCHD F0, F1
|
||||||
|
FADDD 112(SP), F0
|
||||||
|
FSUBD ·DOFFSET1(SB), F0
|
||||||
|
FXCHD F0, F2
|
||||||
|
FADDD 120(SP), F0
|
||||||
|
FSUBD ·DOFFSET2(SB), F0
|
||||||
|
FXCHD F0, F3
|
||||||
|
FADDD 104(SP), F0
|
||||||
|
FSUBD ·DOFFSET0(SB), F0
|
||||||
|
CMPQ DX,$16
|
||||||
|
JB MULTIPLYADDATMOST15BYTES
|
||||||
|
MULTIPLYADDATLEAST16BYTES:
|
||||||
|
MOVL 12(SI),DI
|
||||||
|
MOVL 8(SI),CX
|
||||||
|
MOVL 4(SI),R8
|
||||||
|
MOVL 0(SI),R9
|
||||||
|
MOVL DI,128(SP)
|
||||||
|
MOVL CX,120(SP)
|
||||||
|
MOVL R8,112(SP)
|
||||||
|
MOVL R9,104(SP)
|
||||||
|
ADDQ $16,SI
|
||||||
|
SUBQ $16,DX
|
||||||
|
FMOVD ·ALPHA130(SB), F0
|
||||||
|
FADDD F2,F0
|
||||||
|
FSUBD ·ALPHA130(SB), F0
|
||||||
|
FSUBD F0,F2
|
||||||
|
FMULD ·SCALE(SB), F0
|
||||||
|
FMOVD ·ALPHA32(SB), F0
|
||||||
|
FADDD F2,F0
|
||||||
|
FSUBD ·ALPHA32(SB), F0
|
||||||
|
FSUBD F0,F2
|
||||||
|
FXCHD F0, F2
|
||||||
|
FADDDP F0,F1
|
||||||
|
FMOVD ·ALPHA64(SB), F0
|
||||||
|
FADDD F4,F0
|
||||||
|
FSUBD ·ALPHA64(SB), F0
|
||||||
|
FSUBD F0,F4
|
||||||
|
FMOVD ·ALPHA96(SB), F0
|
||||||
|
FADDD F6,F0
|
||||||
|
FSUBD ·ALPHA96(SB), F0
|
||||||
|
FSUBD F0,F6
|
||||||
|
FXCHD F0, F6
|
||||||
|
FADDDP F0,F1
|
||||||
|
FXCHD F0, F3
|
||||||
|
FADDDP F0,F5
|
||||||
|
FXCHD F0, F3
|
||||||
|
FADDDP F0,F1
|
||||||
|
FMOVD 176(SP), F0
|
||||||
|
FMULD F3,F0
|
||||||
|
FMOVD 160(SP), F0
|
||||||
|
FMULD F4,F0
|
||||||
|
FMOVD 144(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FMOVD 136(SP), F0
|
||||||
|
FMULDP F0,F6
|
||||||
|
FMOVD 160(SP), F0
|
||||||
|
FMULD F4,F0
|
||||||
|
FADDDP F0,F3
|
||||||
|
FMOVD 144(SP), F0
|
||||||
|
FMULD F4,F0
|
||||||
|
FADDDP F0,F2
|
||||||
|
FMOVD 136(SP), F0
|
||||||
|
FMULD F4,F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
FMOVD 184(SP), F0
|
||||||
|
FMULDP F0,F4
|
||||||
|
FXCHD F0, F3
|
||||||
|
FADDDP F0,F5
|
||||||
|
FMOVD 144(SP), F0
|
||||||
|
FMULD F4,F0
|
||||||
|
FADDDP F0,F2
|
||||||
|
FMOVD 136(SP), F0
|
||||||
|
FMULD F4,F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
FMOVD 184(SP), F0
|
||||||
|
FMULD F4,F0
|
||||||
|
FADDDP F0,F3
|
||||||
|
FMOVD 168(SP), F0
|
||||||
|
FMULDP F0,F4
|
||||||
|
FXCHD F0, F3
|
||||||
|
FADDDP F0,F4
|
||||||
|
FMOVD 136(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
FXCHD F0, F3
|
||||||
|
FMOVD 184(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F3
|
||||||
|
FXCHD F0, F1
|
||||||
|
FMOVD 168(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
FMOVD 152(SP), F0
|
||||||
|
FMULDP F0,F5
|
||||||
|
FXCHD F0, F4
|
||||||
|
FADDDP F0,F1
|
||||||
|
CMPQ DX,$16
|
||||||
|
FXCHD F0, F2
|
||||||
|
FMOVD 128(SP), F0
|
||||||
|
FSUBD ·DOFFSET3MINUSTWO128(SB), F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
FXCHD F0, F1
|
||||||
|
FMOVD 120(SP), F0
|
||||||
|
FSUBD ·DOFFSET2(SB), F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
FXCHD F0, F3
|
||||||
|
FMOVD 112(SP), F0
|
||||||
|
FSUBD ·DOFFSET1(SB), F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
FXCHD F0, F2
|
||||||
|
FMOVD 104(SP), F0
|
||||||
|
FSUBD ·DOFFSET0(SB), F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
JAE MULTIPLYADDATLEAST16BYTES
|
||||||
|
MULTIPLYADDATMOST15BYTES:
|
||||||
|
FMOVD ·ALPHA130(SB), F0
|
||||||
|
FADDD F2,F0
|
||||||
|
FSUBD ·ALPHA130(SB), F0
|
||||||
|
FSUBD F0,F2
|
||||||
|
FMULD ·SCALE(SB), F0
|
||||||
|
FMOVD ·ALPHA32(SB), F0
|
||||||
|
FADDD F2,F0
|
||||||
|
FSUBD ·ALPHA32(SB), F0
|
||||||
|
FSUBD F0,F2
|
||||||
|
FMOVD ·ALPHA64(SB), F0
|
||||||
|
FADDD F5,F0
|
||||||
|
FSUBD ·ALPHA64(SB), F0
|
||||||
|
FSUBD F0,F5
|
||||||
|
FMOVD ·ALPHA96(SB), F0
|
||||||
|
FADDD F7,F0
|
||||||
|
FSUBD ·ALPHA96(SB), F0
|
||||||
|
FSUBD F0,F7
|
||||||
|
FXCHD F0, F7
|
||||||
|
FADDDP F0,F1
|
||||||
|
FXCHD F0, F5
|
||||||
|
FADDDP F0,F1
|
||||||
|
FXCHD F0, F3
|
||||||
|
FADDDP F0,F5
|
||||||
|
FADDDP F0,F1
|
||||||
|
FMOVD 176(SP), F0
|
||||||
|
FMULD F1,F0
|
||||||
|
FMOVD 160(SP), F0
|
||||||
|
FMULD F2,F0
|
||||||
|
FMOVD 144(SP), F0
|
||||||
|
FMULD F3,F0
|
||||||
|
FMOVD 136(SP), F0
|
||||||
|
FMULDP F0,F4
|
||||||
|
FMOVD 160(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F3
|
||||||
|
FMOVD 144(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F2
|
||||||
|
FMOVD 136(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
FMOVD 184(SP), F0
|
||||||
|
FMULDP F0,F5
|
||||||
|
FXCHD F0, F4
|
||||||
|
FADDDP F0,F3
|
||||||
|
FMOVD 144(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F2
|
||||||
|
FMOVD 136(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
FMOVD 184(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F4
|
||||||
|
FMOVD 168(SP), F0
|
||||||
|
FMULDP F0,F5
|
||||||
|
FXCHD F0, F4
|
||||||
|
FADDDP F0,F2
|
||||||
|
FMOVD 136(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
FMOVD 184(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F4
|
||||||
|
FMOVD 168(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F3
|
||||||
|
FMOVD 152(SP), F0
|
||||||
|
FMULDP F0,F5
|
||||||
|
FXCHD F0, F4
|
||||||
|
FADDDP F0,F1
|
||||||
|
ADDATMOST15BYTES:
|
||||||
|
CMPQ DX,$0
|
||||||
|
JE NOMOREBYTES
|
||||||
|
MOVL $0,0(SP)
|
||||||
|
MOVL $0, 4 (SP)
|
||||||
|
MOVL $0, 8 (SP)
|
||||||
|
MOVL $0, 12 (SP)
|
||||||
|
LEAQ 0(SP),DI
|
||||||
|
MOVQ DX,CX
|
||||||
|
REP; MOVSB
|
||||||
|
MOVB $1,0(DI)
|
||||||
|
MOVL 12 (SP),DI
|
||||||
|
MOVL 8 (SP),SI
|
||||||
|
MOVL 4 (SP),DX
|
||||||
|
MOVL 0(SP),CX
|
||||||
|
MOVL DI,128(SP)
|
||||||
|
MOVL SI,120(SP)
|
||||||
|
MOVL DX,112(SP)
|
||||||
|
MOVL CX,104(SP)
|
||||||
|
FXCHD F0, F3
|
||||||
|
FADDD 128(SP), F0
|
||||||
|
FSUBD ·DOFFSET3(SB), F0
|
||||||
|
FXCHD F0, F2
|
||||||
|
FADDD 120(SP), F0
|
||||||
|
FSUBD ·DOFFSET2(SB), F0
|
||||||
|
FXCHD F0, F1
|
||||||
|
FADDD 112(SP), F0
|
||||||
|
FSUBD ·DOFFSET1(SB), F0
|
||||||
|
FXCHD F0, F3
|
||||||
|
FADDD 104(SP), F0
|
||||||
|
FSUBD ·DOFFSET0(SB), F0
|
||||||
|
FMOVD ·ALPHA130(SB), F0
|
||||||
|
FADDD F3,F0
|
||||||
|
FSUBD ·ALPHA130(SB), F0
|
||||||
|
FSUBD F0,F3
|
||||||
|
FMULD ·SCALE(SB), F0
|
||||||
|
FMOVD ·ALPHA32(SB), F0
|
||||||
|
FADDD F2,F0
|
||||||
|
FSUBD ·ALPHA32(SB), F0
|
||||||
|
FSUBD F0,F2
|
||||||
|
FMOVD ·ALPHA64(SB), F0
|
||||||
|
FADDD F6,F0
|
||||||
|
FSUBD ·ALPHA64(SB), F0
|
||||||
|
FSUBD F0,F6
|
||||||
|
FMOVD ·ALPHA96(SB), F0
|
||||||
|
FADDD F5,F0
|
||||||
|
FSUBD ·ALPHA96(SB), F0
|
||||||
|
FSUBD F0,F5
|
||||||
|
FXCHD F0, F4
|
||||||
|
FADDDP F0,F3
|
||||||
|
FXCHD F0, F6
|
||||||
|
FADDDP F0,F1
|
||||||
|
FXCHD F0, F3
|
||||||
|
FADDDP F0,F5
|
||||||
|
FXCHD F0, F3
|
||||||
|
FADDDP F0,F1
|
||||||
|
FMOVD 176(SP), F0
|
||||||
|
FMULD F3,F0
|
||||||
|
FMOVD 160(SP), F0
|
||||||
|
FMULD F4,F0
|
||||||
|
FMOVD 144(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FMOVD 136(SP), F0
|
||||||
|
FMULDP F0,F6
|
||||||
|
FMOVD 160(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F3
|
||||||
|
FMOVD 144(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F2
|
||||||
|
FMOVD 136(SP), F0
|
||||||
|
FMULD F5,F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
FMOVD 184(SP), F0
|
||||||
|
FMULDP F0,F5
|
||||||
|
FXCHD F0, F4
|
||||||
|
FADDDP F0,F5
|
||||||
|
FMOVD 144(SP), F0
|
||||||
|
FMULD F6,F0
|
||||||
|
FADDDP F0,F2
|
||||||
|
FMOVD 136(SP), F0
|
||||||
|
FMULD F6,F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
FMOVD 184(SP), F0
|
||||||
|
FMULD F6,F0
|
||||||
|
FADDDP F0,F4
|
||||||
|
FMOVD 168(SP), F0
|
||||||
|
FMULDP F0,F6
|
||||||
|
FXCHD F0, F5
|
||||||
|
FADDDP F0,F4
|
||||||
|
FMOVD 136(SP), F0
|
||||||
|
FMULD F2,F0
|
||||||
|
FADDDP F0,F1
|
||||||
|
FMOVD 184(SP), F0
|
||||||
|
FMULD F2,F0
|
||||||
|
FADDDP F0,F5
|
||||||
|
FMOVD 168(SP), F0
|
||||||
|
FMULD F2,F0
|
||||||
|
FADDDP F0,F3
|
||||||
|
FMOVD 152(SP), F0
|
||||||
|
FMULDP F0,F2
|
||||||
|
FXCHD F0, F1
|
||||||
|
FADDDP F0,F3
|
||||||
|
FXCHD F0, F3
|
||||||
|
FXCHD F0, F2
|
||||||
|
NOMOREBYTES:
|
||||||
|
MOVL $0,R10
|
||||||
|
FMOVD ·ALPHA130(SB), F0
|
||||||
|
FADDD F4,F0
|
||||||
|
FSUBD ·ALPHA130(SB), F0
|
||||||
|
FSUBD F0,F4
|
||||||
|
FMULD ·SCALE(SB), F0
|
||||||
|
FMOVD ·ALPHA32(SB), F0
|
||||||
|
FADDD F2,F0
|
||||||
|
FSUBD ·ALPHA32(SB), F0
|
||||||
|
FSUBD F0,F2
|
||||||
|
FMOVD ·ALPHA64(SB), F0
|
||||||
|
FADDD F4,F0
|
||||||
|
FSUBD ·ALPHA64(SB), F0
|
||||||
|
FSUBD F0,F4
|
||||||
|
FMOVD ·ALPHA96(SB), F0
|
||||||
|
FADDD F6,F0
|
||||||
|
FSUBD ·ALPHA96(SB), F0
|
||||||
|
FXCHD F0, F6
|
||||||
|
FSUBD F6,F0
|
||||||
|
FXCHD F0, F4
|
||||||
|
FADDDP F0,F3
|
||||||
|
FXCHD F0, F4
|
||||||
|
FADDDP F0,F1
|
||||||
|
FXCHD F0, F2
|
||||||
|
FADDDP F0,F3
|
||||||
|
FXCHD F0, F4
|
||||||
|
FADDDP F0,F3
|
||||||
|
FXCHD F0, F3
|
||||||
|
FADDD ·HOFFSET0(SB), F0
|
||||||
|
FXCHD F0, F3
|
||||||
|
FADDD ·HOFFSET1(SB), F0
|
||||||
|
FXCHD F0, F1
|
||||||
|
FADDD ·HOFFSET2(SB), F0
|
||||||
|
FXCHD F0, F2
|
||||||
|
FADDD ·HOFFSET3(SB), F0
|
||||||
|
FXCHD F0, F3
|
||||||
|
FMOVDP F0, 104(SP)
|
||||||
|
FMOVDP F0, 112(SP)
|
||||||
|
FMOVDP F0, 120(SP)
|
||||||
|
FMOVDP F0, 128(SP)
|
||||||
|
MOVL 108(SP),DI
|
||||||
|
ANDL $63,DI
|
||||||
|
MOVL 116(SP),SI
|
||||||
|
ANDL $63,SI
|
||||||
|
MOVL 124(SP),DX
|
||||||
|
ANDL $63,DX
|
||||||
|
MOVL 132(SP),CX
|
||||||
|
ANDL $63,CX
|
||||||
|
MOVL 112(SP),R8
|
||||||
|
ADDL DI,R8
|
||||||
|
MOVQ R8,112(SP)
|
||||||
|
MOVL 120(SP),DI
|
||||||
|
ADCL SI,DI
|
||||||
|
MOVQ DI,120(SP)
|
||||||
|
MOVL 128(SP),DI
|
||||||
|
ADCL DX,DI
|
||||||
|
MOVQ DI,128(SP)
|
||||||
|
MOVL R10,DI
|
||||||
|
ADCL CX,DI
|
||||||
|
MOVQ DI,136(SP)
|
||||||
|
MOVQ $5,DI
|
||||||
|
MOVL 104(SP),SI
|
||||||
|
ADDL SI,DI
|
||||||
|
MOVQ DI,104(SP)
|
||||||
|
MOVL R10,DI
|
||||||
|
MOVQ 112(SP),DX
|
||||||
|
ADCL DX,DI
|
||||||
|
MOVQ DI,112(SP)
|
||||||
|
MOVL R10,DI
|
||||||
|
MOVQ 120(SP),CX
|
||||||
|
ADCL CX,DI
|
||||||
|
MOVQ DI,120(SP)
|
||||||
|
MOVL R10,DI
|
||||||
|
MOVQ 128(SP),R8
|
||||||
|
ADCL R8,DI
|
||||||
|
MOVQ DI,128(SP)
|
||||||
|
MOVQ $0XFFFFFFFC,DI
|
||||||
|
MOVQ 136(SP),R9
|
||||||
|
ADCL R9,DI
|
||||||
|
SARL $16,DI
|
||||||
|
MOVQ DI,R9
|
||||||
|
XORL $0XFFFFFFFF,R9
|
||||||
|
ANDQ DI,SI
|
||||||
|
MOVQ 104(SP),AX
|
||||||
|
ANDQ R9,AX
|
||||||
|
ORQ AX,SI
|
||||||
|
ANDQ DI,DX
|
||||||
|
MOVQ 112(SP),AX
|
||||||
|
ANDQ R9,AX
|
||||||
|
ORQ AX,DX
|
||||||
|
ANDQ DI,CX
|
||||||
|
MOVQ 120(SP),AX
|
||||||
|
ANDQ R9,AX
|
||||||
|
ORQ AX,CX
|
||||||
|
ANDQ DI,R8
|
||||||
|
MOVQ 128(SP),DI
|
||||||
|
ANDQ R9,DI
|
||||||
|
ORQ DI,R8
|
||||||
|
MOVQ 88(SP),DI
|
||||||
|
MOVQ 96(SP),R9
|
||||||
|
ADDL 16(R9),SI
|
||||||
|
ADCL 20(R9),DX
|
||||||
|
ADCL 24(R9),CX
|
||||||
|
ADCL 28(R9),R8
|
||||||
|
MOVL SI,0(DI)
|
||||||
|
MOVL DX,4(DI)
|
||||||
|
MOVL CX,8(DI)
|
||||||
|
MOVL R8,12(DI)
|
||||||
|
MOVQ 32(SP),R11
|
||||||
|
MOVQ 40(SP),R12
|
||||||
|
MOVQ 48(SP),R13
|
||||||
|
MOVQ 56(SP),R14
|
||||||
|
MOVQ 64(SP),R15
|
||||||
|
MOVQ 72(SP),BX
|
||||||
|
MOVQ 80(SP),BP
|
||||||
|
MOVQ R11,SP
|
||||||
|
RET
|
379
vendor/golang.org/x/crypto/poly1305/poly1305_arm.s
generated
vendored
Normal file
379
vendor/golang.org/x/crypto/poly1305/poly1305_arm.s
generated
vendored
Normal file
@ -0,0 +1,379 @@
|
|||||||
|
// Copyright 2015 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.
|
||||||
|
|
||||||
|
// This code was translated into a form compatible with 5a from the public
|
||||||
|
// domain source by Andrew Moon: github.com/floodyberry/poly1305-opt/blob/master/app/extensions/poly1305.
|
||||||
|
|
||||||
|
// +build arm,!gccgo,!appengine
|
||||||
|
|
||||||
|
DATA poly1305_init_constants_armv6<>+0x00(SB)/4, $0x3ffffff
|
||||||
|
DATA poly1305_init_constants_armv6<>+0x04(SB)/4, $0x3ffff03
|
||||||
|
DATA poly1305_init_constants_armv6<>+0x08(SB)/4, $0x3ffc0ff
|
||||||
|
DATA poly1305_init_constants_armv6<>+0x0c(SB)/4, $0x3f03fff
|
||||||
|
DATA poly1305_init_constants_armv6<>+0x10(SB)/4, $0x00fffff
|
||||||
|
GLOBL poly1305_init_constants_armv6<>(SB), 8, $20
|
||||||
|
|
||||||
|
// Warning: the linker may use R11 to synthesize certain instructions. Please
|
||||||
|
// take care and verify that no synthetic instructions use it.
|
||||||
|
|
||||||
|
TEXT poly1305_init_ext_armv6<>(SB),4,$-4
|
||||||
|
MOVM.DB.W [R4-R11], (R13)
|
||||||
|
MOVM.IA.W (R1), [R2-R5]
|
||||||
|
MOVW $poly1305_init_constants_armv6<>(SB), R7
|
||||||
|
MOVW R2, R8
|
||||||
|
MOVW R2>>26, R9
|
||||||
|
MOVW R3>>20, g
|
||||||
|
MOVW R4>>14, R11
|
||||||
|
MOVW R5>>8, R12
|
||||||
|
ORR R3<<6, R9, R9
|
||||||
|
ORR R4<<12, g, g
|
||||||
|
ORR R5<<18, R11, R11
|
||||||
|
MOVM.IA (R7), [R2-R6]
|
||||||
|
AND R8, R2, R2
|
||||||
|
AND R9, R3, R3
|
||||||
|
AND g, R4, R4
|
||||||
|
AND R11, R5, R5
|
||||||
|
AND R12, R6, R6
|
||||||
|
MOVM.IA.W [R2-R6], (R0)
|
||||||
|
EOR R2, R2, R2
|
||||||
|
EOR R3, R3, R3
|
||||||
|
EOR R4, R4, R4
|
||||||
|
EOR R5, R5, R5
|
||||||
|
EOR R6, R6, R6
|
||||||
|
MOVM.IA.W [R2-R6], (R0)
|
||||||
|
MOVM.IA.W (R1), [R2-R5]
|
||||||
|
MOVM.IA [R2-R6], (R0)
|
||||||
|
MOVM.IA.W (R13), [R4-R11]
|
||||||
|
RET
|
||||||
|
|
||||||
|
#define MOVW_UNALIGNED(Rsrc, Rdst, Rtmp, offset) \
|
||||||
|
MOVBU (offset+0)(Rsrc), Rtmp; \
|
||||||
|
MOVBU Rtmp, (offset+0)(Rdst); \
|
||||||
|
MOVBU (offset+1)(Rsrc), Rtmp; \
|
||||||
|
MOVBU Rtmp, (offset+1)(Rdst); \
|
||||||
|
MOVBU (offset+2)(Rsrc), Rtmp; \
|
||||||
|
MOVBU Rtmp, (offset+2)(Rdst); \
|
||||||
|
MOVBU (offset+3)(Rsrc), Rtmp; \
|
||||||
|
MOVBU Rtmp, (offset+3)(Rdst)
|
||||||
|
|
||||||
|
TEXT poly1305_blocks_armv6<>(SB),4,$-4
|
||||||
|
MOVM.DB.W [R4, R5, R6, R7, R8, R9, g, R11, R14], (R13)
|
||||||
|
SUB $128, R13
|
||||||
|
MOVW R0, 36(R13)
|
||||||
|
MOVW R1, 40(R13)
|
||||||
|
MOVW R2, 44(R13)
|
||||||
|
MOVW R1, R14
|
||||||
|
MOVW R2, R12
|
||||||
|
MOVW 56(R0), R8
|
||||||
|
WORD $0xe1180008 // TST R8, R8 not working see issue 5921
|
||||||
|
EOR R6, R6, R6
|
||||||
|
MOVW.EQ $(1<<24), R6
|
||||||
|
MOVW R6, 32(R13)
|
||||||
|
ADD $64, R13, g
|
||||||
|
MOVM.IA (R0), [R0-R9]
|
||||||
|
MOVM.IA [R0-R4], (g)
|
||||||
|
CMP $16, R12
|
||||||
|
BLO poly1305_blocks_armv6_done
|
||||||
|
poly1305_blocks_armv6_mainloop:
|
||||||
|
WORD $0xe31e0003 // TST R14, #3 not working see issue 5921
|
||||||
|
BEQ poly1305_blocks_armv6_mainloop_aligned
|
||||||
|
ADD $48, R13, g
|
||||||
|
MOVW_UNALIGNED(R14, g, R0, 0)
|
||||||
|
MOVW_UNALIGNED(R14, g, R0, 4)
|
||||||
|
MOVW_UNALIGNED(R14, g, R0, 8)
|
||||||
|
MOVW_UNALIGNED(R14, g, R0, 12)
|
||||||
|
MOVM.IA (g), [R0-R3]
|
||||||
|
ADD $16, R14
|
||||||
|
B poly1305_blocks_armv6_mainloop_loaded
|
||||||
|
poly1305_blocks_armv6_mainloop_aligned:
|
||||||
|
MOVM.IA.W (R14), [R0-R3]
|
||||||
|
poly1305_blocks_armv6_mainloop_loaded:
|
||||||
|
MOVW R0>>26, g
|
||||||
|
MOVW R1>>20, R11
|
||||||
|
MOVW R2>>14, R12
|
||||||
|
MOVW R14, 40(R13)
|
||||||
|
MOVW R3>>8, R4
|
||||||
|
ORR R1<<6, g, g
|
||||||
|
ORR R2<<12, R11, R11
|
||||||
|
ORR R3<<18, R12, R12
|
||||||
|
BIC $0xfc000000, R0, R0
|
||||||
|
BIC $0xfc000000, g, g
|
||||||
|
MOVW 32(R13), R3
|
||||||
|
BIC $0xfc000000, R11, R11
|
||||||
|
BIC $0xfc000000, R12, R12
|
||||||
|
ADD R0, R5, R5
|
||||||
|
ADD g, R6, R6
|
||||||
|
ORR R3, R4, R4
|
||||||
|
ADD R11, R7, R7
|
||||||
|
ADD $64, R13, R14
|
||||||
|
ADD R12, R8, R8
|
||||||
|
ADD R4, R9, R9
|
||||||
|
MOVM.IA (R14), [R0-R4]
|
||||||
|
MULLU R4, R5, (R11, g)
|
||||||
|
MULLU R3, R5, (R14, R12)
|
||||||
|
MULALU R3, R6, (R11, g)
|
||||||
|
MULALU R2, R6, (R14, R12)
|
||||||
|
MULALU R2, R7, (R11, g)
|
||||||
|
MULALU R1, R7, (R14, R12)
|
||||||
|
ADD R4<<2, R4, R4
|
||||||
|
ADD R3<<2, R3, R3
|
||||||
|
MULALU R1, R8, (R11, g)
|
||||||
|
MULALU R0, R8, (R14, R12)
|
||||||
|
MULALU R0, R9, (R11, g)
|
||||||
|
MULALU R4, R9, (R14, R12)
|
||||||
|
MOVW g, 24(R13)
|
||||||
|
MOVW R11, 28(R13)
|
||||||
|
MOVW R12, 16(R13)
|
||||||
|
MOVW R14, 20(R13)
|
||||||
|
MULLU R2, R5, (R11, g)
|
||||||
|
MULLU R1, R5, (R14, R12)
|
||||||
|
MULALU R1, R6, (R11, g)
|
||||||
|
MULALU R0, R6, (R14, R12)
|
||||||
|
MULALU R0, R7, (R11, g)
|
||||||
|
MULALU R4, R7, (R14, R12)
|
||||||
|
ADD R2<<2, R2, R2
|
||||||
|
ADD R1<<2, R1, R1
|
||||||
|
MULALU R4, R8, (R11, g)
|
||||||
|
MULALU R3, R8, (R14, R12)
|
||||||
|
MULALU R3, R9, (R11, g)
|
||||||
|
MULALU R2, R9, (R14, R12)
|
||||||
|
MOVW g, 8(R13)
|
||||||
|
MOVW R11, 12(R13)
|
||||||
|
MOVW R12, 0(R13)
|
||||||
|
MOVW R14, w+4(SP)
|
||||||
|
MULLU R0, R5, (R11, g)
|
||||||
|
MULALU R4, R6, (R11, g)
|
||||||
|
MULALU R3, R7, (R11, g)
|
||||||
|
MULALU R2, R8, (R11, g)
|
||||||
|
MULALU R1, R9, (R11, g)
|
||||||
|
MOVM.IA (R13), [R0-R7]
|
||||||
|
MOVW g>>26, R12
|
||||||
|
MOVW R4>>26, R14
|
||||||
|
ORR R11<<6, R12, R12
|
||||||
|
ORR R5<<6, R14, R14
|
||||||
|
BIC $0xfc000000, g, g
|
||||||
|
BIC $0xfc000000, R4, R4
|
||||||
|
ADD.S R12, R0, R0
|
||||||
|
ADC $0, R1, R1
|
||||||
|
ADD.S R14, R6, R6
|
||||||
|
ADC $0, R7, R7
|
||||||
|
MOVW R0>>26, R12
|
||||||
|
MOVW R6>>26, R14
|
||||||
|
ORR R1<<6, R12, R12
|
||||||
|
ORR R7<<6, R14, R14
|
||||||
|
BIC $0xfc000000, R0, R0
|
||||||
|
BIC $0xfc000000, R6, R6
|
||||||
|
ADD R14<<2, R14, R14
|
||||||
|
ADD.S R12, R2, R2
|
||||||
|
ADC $0, R3, R3
|
||||||
|
ADD R14, g, g
|
||||||
|
MOVW R2>>26, R12
|
||||||
|
MOVW g>>26, R14
|
||||||
|
ORR R3<<6, R12, R12
|
||||||
|
BIC $0xfc000000, g, R5
|
||||||
|
BIC $0xfc000000, R2, R7
|
||||||
|
ADD R12, R4, R4
|
||||||
|
ADD R14, R0, R0
|
||||||
|
MOVW R4>>26, R12
|
||||||
|
BIC $0xfc000000, R4, R8
|
||||||
|
ADD R12, R6, R9
|
||||||
|
MOVW w+44(SP), R12
|
||||||
|
MOVW w+40(SP), R14
|
||||||
|
MOVW R0, R6
|
||||||
|
CMP $32, R12
|
||||||
|
SUB $16, R12, R12
|
||||||
|
MOVW R12, 44(R13)
|
||||||
|
BHS poly1305_blocks_armv6_mainloop
|
||||||
|
poly1305_blocks_armv6_done:
|
||||||
|
MOVW 36(R13), R12
|
||||||
|
MOVW R5, 20(R12)
|
||||||
|
MOVW R6, 24(R12)
|
||||||
|
MOVW R7, 28(R12)
|
||||||
|
MOVW R8, 32(R12)
|
||||||
|
MOVW R9, 36(R12)
|
||||||
|
ADD $128, R13, R13
|
||||||
|
MOVM.IA.W (R13), [R4, R5, R6, R7, R8, R9, g, R11, R14]
|
||||||
|
RET
|
||||||
|
|
||||||
|
#define MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp) \
|
||||||
|
MOVBU.P 1(Rsrc), Rtmp; \
|
||||||
|
MOVBU.P Rtmp, 1(Rdst); \
|
||||||
|
MOVBU.P 1(Rsrc), Rtmp; \
|
||||||
|
MOVBU.P Rtmp, 1(Rdst)
|
||||||
|
|
||||||
|
#define MOVWP_UNALIGNED(Rsrc, Rdst, Rtmp) \
|
||||||
|
MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp); \
|
||||||
|
MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp)
|
||||||
|
|
||||||
|
TEXT poly1305_finish_ext_armv6<>(SB),4,$-4
|
||||||
|
MOVM.DB.W [R4, R5, R6, R7, R8, R9, g, R11, R14], (R13)
|
||||||
|
SUB $16, R13, R13
|
||||||
|
MOVW R0, R5
|
||||||
|
MOVW R1, R6
|
||||||
|
MOVW R2, R7
|
||||||
|
MOVW R3, R8
|
||||||
|
AND.S R2, R2, R2
|
||||||
|
BEQ poly1305_finish_ext_armv6_noremaining
|
||||||
|
EOR R0, R0
|
||||||
|
MOVW R13, R9
|
||||||
|
MOVW R0, 0(R13)
|
||||||
|
MOVW R0, 4(R13)
|
||||||
|
MOVW R0, 8(R13)
|
||||||
|
MOVW R0, 12(R13)
|
||||||
|
WORD $0xe3110003 // TST R1, #3 not working see issue 5921
|
||||||
|
BEQ poly1305_finish_ext_armv6_aligned
|
||||||
|
WORD $0xe3120008 // TST R2, #8 not working see issue 5921
|
||||||
|
BEQ poly1305_finish_ext_armv6_skip8
|
||||||
|
MOVWP_UNALIGNED(R1, R9, g)
|
||||||
|
MOVWP_UNALIGNED(R1, R9, g)
|
||||||
|
poly1305_finish_ext_armv6_skip8:
|
||||||
|
WORD $0xe3120004 // TST $4, R2 not working see issue 5921
|
||||||
|
BEQ poly1305_finish_ext_armv6_skip4
|
||||||
|
MOVWP_UNALIGNED(R1, R9, g)
|
||||||
|
poly1305_finish_ext_armv6_skip4:
|
||||||
|
WORD $0xe3120002 // TST $2, R2 not working see issue 5921
|
||||||
|
BEQ poly1305_finish_ext_armv6_skip2
|
||||||
|
MOVHUP_UNALIGNED(R1, R9, g)
|
||||||
|
B poly1305_finish_ext_armv6_skip2
|
||||||
|
poly1305_finish_ext_armv6_aligned:
|
||||||
|
WORD $0xe3120008 // TST R2, #8 not working see issue 5921
|
||||||
|
BEQ poly1305_finish_ext_armv6_skip8_aligned
|
||||||
|
MOVM.IA.W (R1), [g-R11]
|
||||||
|
MOVM.IA.W [g-R11], (R9)
|
||||||
|
poly1305_finish_ext_armv6_skip8_aligned:
|
||||||
|
WORD $0xe3120004 // TST $4, R2 not working see issue 5921
|
||||||
|
BEQ poly1305_finish_ext_armv6_skip4_aligned
|
||||||
|
MOVW.P 4(R1), g
|
||||||
|
MOVW.P g, 4(R9)
|
||||||
|
poly1305_finish_ext_armv6_skip4_aligned:
|
||||||
|
WORD $0xe3120002 // TST $2, R2 not working see issue 5921
|
||||||
|
BEQ poly1305_finish_ext_armv6_skip2
|
||||||
|
MOVHU.P 2(R1), g
|
||||||
|
MOVH.P g, 2(R9)
|
||||||
|
poly1305_finish_ext_armv6_skip2:
|
||||||
|
WORD $0xe3120001 // TST $1, R2 not working see issue 5921
|
||||||
|
BEQ poly1305_finish_ext_armv6_skip1
|
||||||
|
MOVBU.P 1(R1), g
|
||||||
|
MOVBU.P g, 1(R9)
|
||||||
|
poly1305_finish_ext_armv6_skip1:
|
||||||
|
MOVW $1, R11
|
||||||
|
MOVBU R11, 0(R9)
|
||||||
|
MOVW R11, 56(R5)
|
||||||
|
MOVW R5, R0
|
||||||
|
MOVW R13, R1
|
||||||
|
MOVW $16, R2
|
||||||
|
BL poly1305_blocks_armv6<>(SB)
|
||||||
|
poly1305_finish_ext_armv6_noremaining:
|
||||||
|
MOVW 20(R5), R0
|
||||||
|
MOVW 24(R5), R1
|
||||||
|
MOVW 28(R5), R2
|
||||||
|
MOVW 32(R5), R3
|
||||||
|
MOVW 36(R5), R4
|
||||||
|
MOVW R4>>26, R12
|
||||||
|
BIC $0xfc000000, R4, R4
|
||||||
|
ADD R12<<2, R12, R12
|
||||||
|
ADD R12, R0, R0
|
||||||
|
MOVW R0>>26, R12
|
||||||
|
BIC $0xfc000000, R0, R0
|
||||||
|
ADD R12, R1, R1
|
||||||
|
MOVW R1>>26, R12
|
||||||
|
BIC $0xfc000000, R1, R1
|
||||||
|
ADD R12, R2, R2
|
||||||
|
MOVW R2>>26, R12
|
||||||
|
BIC $0xfc000000, R2, R2
|
||||||
|
ADD R12, R3, R3
|
||||||
|
MOVW R3>>26, R12
|
||||||
|
BIC $0xfc000000, R3, R3
|
||||||
|
ADD R12, R4, R4
|
||||||
|
ADD $5, R0, R6
|
||||||
|
MOVW R6>>26, R12
|
||||||
|
BIC $0xfc000000, R6, R6
|
||||||
|
ADD R12, R1, R7
|
||||||
|
MOVW R7>>26, R12
|
||||||
|
BIC $0xfc000000, R7, R7
|
||||||
|
ADD R12, R2, g
|
||||||
|
MOVW g>>26, R12
|
||||||
|
BIC $0xfc000000, g, g
|
||||||
|
ADD R12, R3, R11
|
||||||
|
MOVW $-(1<<26), R12
|
||||||
|
ADD R11>>26, R12, R12
|
||||||
|
BIC $0xfc000000, R11, R11
|
||||||
|
ADD R12, R4, R14
|
||||||
|
MOVW R14>>31, R12
|
||||||
|
SUB $1, R12
|
||||||
|
AND R12, R6, R6
|
||||||
|
AND R12, R7, R7
|
||||||
|
AND R12, g, g
|
||||||
|
AND R12, R11, R11
|
||||||
|
AND R12, R14, R14
|
||||||
|
MVN R12, R12
|
||||||
|
AND R12, R0, R0
|
||||||
|
AND R12, R1, R1
|
||||||
|
AND R12, R2, R2
|
||||||
|
AND R12, R3, R3
|
||||||
|
AND R12, R4, R4
|
||||||
|
ORR R6, R0, R0
|
||||||
|
ORR R7, R1, R1
|
||||||
|
ORR g, R2, R2
|
||||||
|
ORR R11, R3, R3
|
||||||
|
ORR R14, R4, R4
|
||||||
|
ORR R1<<26, R0, R0
|
||||||
|
MOVW R1>>6, R1
|
||||||
|
ORR R2<<20, R1, R1
|
||||||
|
MOVW R2>>12, R2
|
||||||
|
ORR R3<<14, R2, R2
|
||||||
|
MOVW R3>>18, R3
|
||||||
|
ORR R4<<8, R3, R3
|
||||||
|
MOVW 40(R5), R6
|
||||||
|
MOVW 44(R5), R7
|
||||||
|
MOVW 48(R5), g
|
||||||
|
MOVW 52(R5), R11
|
||||||
|
ADD.S R6, R0, R0
|
||||||
|
ADC.S R7, R1, R1
|
||||||
|
ADC.S g, R2, R2
|
||||||
|
ADC.S R11, R3, R3
|
||||||
|
MOVM.IA [R0-R3], (R8)
|
||||||
|
MOVW R5, R12
|
||||||
|
EOR R0, R0, R0
|
||||||
|
EOR R1, R1, R1
|
||||||
|
EOR R2, R2, R2
|
||||||
|
EOR R3, R3, R3
|
||||||
|
EOR R4, R4, R4
|
||||||
|
EOR R5, R5, R5
|
||||||
|
EOR R6, R6, R6
|
||||||
|
EOR R7, R7, R7
|
||||||
|
MOVM.IA.W [R0-R7], (R12)
|
||||||
|
MOVM.IA [R0-R7], (R12)
|
||||||
|
ADD $16, R13, R13
|
||||||
|
MOVM.IA.W (R13), [R4, R5, R6, R7, R8, R9, g, R11, R14]
|
||||||
|
RET
|
||||||
|
|
||||||
|
// func poly1305_auth_armv6(out *[16]byte, m *byte, mlen uint32, key *[32]key)
|
||||||
|
TEXT ·poly1305_auth_armv6(SB),0,$280-16
|
||||||
|
MOVW out+0(FP), R4
|
||||||
|
MOVW m+4(FP), R5
|
||||||
|
MOVW mlen+8(FP), R6
|
||||||
|
MOVW key+12(FP), R7
|
||||||
|
|
||||||
|
MOVW R13, R8
|
||||||
|
BIC $63, R13
|
||||||
|
SUB $64, R13, R13
|
||||||
|
MOVW R13, R0
|
||||||
|
MOVW R7, R1
|
||||||
|
BL poly1305_init_ext_armv6<>(SB)
|
||||||
|
BIC.S $15, R6, R2
|
||||||
|
BEQ poly1305_auth_armv6_noblocks
|
||||||
|
MOVW R13, R0
|
||||||
|
MOVW R5, R1
|
||||||
|
ADD R2, R5, R5
|
||||||
|
SUB R2, R6, R6
|
||||||
|
BL poly1305_blocks_armv6<>(SB)
|
||||||
|
poly1305_auth_armv6_noblocks:
|
||||||
|
MOVW R13, R0
|
||||||
|
MOVW R5, R1
|
||||||
|
MOVW R6, R2
|
||||||
|
MOVW R4, R3
|
||||||
|
BL poly1305_finish_ext_armv6<>(SB)
|
||||||
|
MOVW R8, R13
|
||||||
|
RET
|
19
vendor/golang.org/x/net/context/ctxhttp/cancelreq.go
generated
vendored
Normal file
19
vendor/golang.org/x/net/context/ctxhttp/cancelreq.go
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Copyright 2015 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.5
|
||||||
|
|
||||||
|
package ctxhttp
|
||||||
|
|
||||||
|
import "net/http"
|
||||||
|
|
||||||
|
func canceler(client *http.Client, req *http.Request) func() {
|
||||||
|
// TODO(djd): Respect any existing value of req.Cancel.
|
||||||
|
ch := make(chan struct{})
|
||||||
|
req.Cancel = ch
|
||||||
|
|
||||||
|
return func() {
|
||||||
|
close(ch)
|
||||||
|
}
|
||||||
|
}
|
23
vendor/golang.org/x/net/context/ctxhttp/cancelreq_go14.go
generated
vendored
Normal file
23
vendor/golang.org/x/net/context/ctxhttp/cancelreq_go14.go
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// Copyright 2015 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.5
|
||||||
|
|
||||||
|
package ctxhttp
|
||||||
|
|
||||||
|
import "net/http"
|
||||||
|
|
||||||
|
type requestCanceler interface {
|
||||||
|
CancelRequest(*http.Request)
|
||||||
|
}
|
||||||
|
|
||||||
|
func canceler(client *http.Client, req *http.Request) func() {
|
||||||
|
rc, ok := client.Transport.(requestCanceler)
|
||||||
|
if !ok {
|
||||||
|
return func() {}
|
||||||
|
}
|
||||||
|
return func() {
|
||||||
|
rc.CancelRequest(req)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user