func addSignatureHeaderTo()

in Sources/XCRemoteCache/Network/Authentication/AWSV4Signature.swift [31:66]


    func addSignatureHeaderTo(request: inout URLRequest) {

        request.setValue(request.url?.host, forHTTPHeaderField: "host")
        request.setValue(StringToSign.ISO8601BasicFormatter.string(from: date), forHTTPHeaderField: "x-amz-date")
        request.setValue((request.httpBody ?? Data()).sha256(), forHTTPHeaderField: "x-amz-content-sha256")

        if let securityToken = securityToken {
            request.setValue(securityToken, forHTTPHeaderField: "x-amz-security-token")
        }

        let canonicalRequest = CanonicalRequest(request: request)
        let stringToSign = StringToSign(
            region: region,
            service: service,
            canonicalRequestHash: canonicalRequest.hash,
            date: date
        )
        let awsV4SigningKey = AWSV4SigningKey(
            secretAccessKey: secretKey,
            region: region,
            service: service,
            date: date
        )
        let signature = HMAC.calcHMAC(
            keyArray: awsV4SigningKey.value,
            value: stringToSign.value
        ).map { String(format: "%02hhx", $0) }.joined()

        let authValue =
            "AWS4-HMAC-SHA256 " +
                "Credential=\(accessKey)/\(stringToSign.credentialScope), " +
                "SignedHeaders=\(canonicalRequest.signedHeaders(headers: request.allHTTPHeaderFields)), " +
                "Signature=\(signature)"

        request.setValue(authValue, forHTTPHeaderField: "Authorization")
    }