@aws-sdk/signature-v4-crt 3.489.0 → 3.496.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,130 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CrtSignerV4 = void 0;
4
- const querystring_parser_1 = require("@smithy/querystring-parser");
5
- const signature_v4_1 = require("@smithy/signature-v4");
6
- const util_middleware_1 = require("@smithy/util-middleware");
7
- const aws_crt_1 = require("aws-crt");
8
- const constants_1 = require("./constants");
9
- const headerUtil_1 = require("./headerUtil");
10
- function sdkHttpRequest2crtHttpRequest(sdkRequest) {
11
- (0, headerUtil_1.deleteHeader)(constants_1.SHA256_HEADER, sdkRequest.headers);
12
- const headersArray = Object.entries(sdkRequest.headers);
13
- const crtHttpHeaders = new aws_crt_1.http.HttpHeaders(headersArray);
14
- const queryString = (0, signature_v4_1.getCanonicalQuery)(sdkRequest);
15
- return new aws_crt_1.http.HttpRequest(sdkRequest.method, sdkRequest.path + "?" + queryString, crtHttpHeaders);
16
- }
17
- class CrtSignerV4 {
18
- constructor({ credentials, region, service, sha256, applyChecksum = true, uriEscapePath = true, signingAlgorithm = aws_crt_1.auth.AwsSigningAlgorithm.SigV4, }) {
19
- this.service = service;
20
- this.sha256 = sha256;
21
- this.uriEscapePath = uriEscapePath;
22
- this.signingAlgorithm = signingAlgorithm;
23
- this.applyChecksum = applyChecksum;
24
- this.regionProvider = (0, util_middleware_1.normalizeProvider)(region);
25
- this.credentialProvider = (0, util_middleware_1.normalizeProvider)(credentials);
26
- aws_crt_1.io.enable_logging(aws_crt_1.io.LogLevel.ERROR);
27
- }
28
- async options2crtConfigure({ signingDate = new Date(), signableHeaders, unsignableHeaders, signingRegion, signingService, } = {}, viaHeader, payloadHash, expiresIn, _credentials) {
29
- const credentials = _credentials !== null && _credentials !== void 0 ? _credentials : (await this.credentialProvider());
30
- const region = signingRegion !== null && signingRegion !== void 0 ? signingRegion : (await this.regionProvider());
31
- const service = signingService !== null && signingService !== void 0 ? signingService : this.service;
32
- if ((signableHeaders === null || signableHeaders === void 0 ? void 0 : signableHeaders.has("x-amzn-trace-id")) || (signableHeaders === null || signableHeaders === void 0 ? void 0 : signableHeaders.has("user-agent"))) {
33
- throw new Error("internal check (x-amzn-trace-id, user-agent) is not supported to be included to sign with CRT.");
34
- }
35
- const headersUnsignable = getHeadersUnsignable(unsignableHeaders, signableHeaders);
36
- return {
37
- algorithm: this.signingAlgorithm,
38
- signature_type: viaHeader
39
- ? aws_crt_1.auth.AwsSignatureType.HttpRequestViaHeaders
40
- : aws_crt_1.auth.AwsSignatureType.HttpRequestViaQueryParams,
41
- provider: sdk2crtCredentialsProvider(credentials),
42
- region: region,
43
- service: service,
44
- date: new Date(signingDate),
45
- header_blacklist: headersUnsignable,
46
- use_double_uri_encode: this.uriEscapePath,
47
- signed_body_value: payloadHash,
48
- signed_body_header: this.applyChecksum && viaHeader
49
- ? aws_crt_1.auth.AwsSignedBodyHeaderType.XAmzContentSha256
50
- : aws_crt_1.auth.AwsSignedBodyHeaderType.None,
51
- expiration_in_seconds: expiresIn,
52
- };
53
- }
54
- async presign(originalRequest, options = {}) {
55
- if (options.expiresIn && options.expiresIn > constants_1.MAX_PRESIGNED_TTL) {
56
- return Promise.reject("Signature version 4 presigned URLs" + " must have an expiration date less than one week in" + " the future");
57
- }
58
- const request = (0, signature_v4_1.moveHeadersToQuery)((0, signature_v4_1.prepareRequest)(originalRequest));
59
- const crtSignedRequest = await this.signRequest(request, await this.options2crtConfigure(options, false, await (0, signature_v4_1.getPayloadHash)(originalRequest, this.sha256), options.expiresIn ? options.expiresIn : 3600));
60
- request.query = this.getQueryParam(crtSignedRequest.path);
61
- return request;
62
- }
63
- async sign(toSign, options) {
64
- const request = (0, signature_v4_1.prepareRequest)(toSign);
65
- const crtSignedRequest = await this.signRequest(request, await this.options2crtConfigure(options, true, await (0, signature_v4_1.getPayloadHash)(toSign, this.sha256)));
66
- request.headers = crtSignedRequest.headers._flatten().reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
67
- return request;
68
- }
69
- async signWithCredentials(toSign, credentials, options) {
70
- const request = (0, signature_v4_1.prepareRequest)(toSign);
71
- const crtSignedRequest = await this.signRequest(request, await this.options2crtConfigure(options, true, await (0, signature_v4_1.getPayloadHash)(toSign, this.sha256), undefined, credentials));
72
- request.headers = crtSignedRequest.headers._flatten().reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
73
- return request;
74
- }
75
- getQueryParam(crtPath) {
76
- const start = crtPath.search(/\?/);
77
- const startHash = crtPath.search(/\#/);
78
- const end = startHash == -1 ? undefined : startHash;
79
- const queryParam = {};
80
- if (start == -1) {
81
- return queryParam;
82
- }
83
- const queryString = crtPath.slice(start + 1, end);
84
- return (0, querystring_parser_1.parseQueryString)(queryString);
85
- }
86
- async signRequest(requestToSign, crtConfig) {
87
- const request = sdkHttpRequest2crtHttpRequest(requestToSign);
88
- try {
89
- return await aws_crt_1.auth.aws_sign_request(request, crtConfig);
90
- }
91
- catch (error) {
92
- throw new Error(error);
93
- }
94
- }
95
- async verifySigv4aSigning(request, signature, expectedCanonicalRequest, eccPubKeyX, eccPubKeyY, options = {}) {
96
- const sdkRequest = (0, signature_v4_1.prepareRequest)(request);
97
- const crtRequest = sdkHttpRequest2crtHttpRequest(sdkRequest);
98
- const payloadHash = await (0, signature_v4_1.getPayloadHash)(request, this.sha256);
99
- const crtConfig = await this.options2crtConfigure(options, true, payloadHash);
100
- return aws_crt_1.auth.aws_verify_sigv4a_signing(crtRequest, crtConfig, expectedCanonicalRequest, signature, eccPubKeyX, eccPubKeyY);
101
- }
102
- async verifySigv4aPreSigning(request, signature, expectedCanonicalRequest, eccPubKeyX, eccPubKeyY, options = {}) {
103
- if (typeof signature != "string") {
104
- return false;
105
- }
106
- const sdkRequest = (0, signature_v4_1.prepareRequest)(request);
107
- const crtRequest = sdkHttpRequest2crtHttpRequest(sdkRequest);
108
- const crtConfig = await this.options2crtConfigure(options, false, await (0, signature_v4_1.getPayloadHash)(request, this.sha256), options.expiresIn ? options.expiresIn : 3600);
109
- return aws_crt_1.auth.aws_verify_sigv4a_signing(crtRequest, crtConfig, expectedCanonicalRequest, signature, eccPubKeyX, eccPubKeyY);
110
- }
111
- }
112
- exports.CrtSignerV4 = CrtSignerV4;
113
- function sdk2crtCredentialsProvider(credentials) {
114
- return aws_crt_1.auth.AwsCredentialsProvider.newStatic(credentials.accessKeyId, credentials.secretAccessKey, credentials.sessionToken);
115
- }
116
- function getHeadersUnsignable(unsignableHeaders, signableHeaders) {
117
- if (!unsignableHeaders) {
118
- return [];
119
- }
120
- if (!signableHeaders) {
121
- return [...unsignableHeaders];
122
- }
123
- const result = new Set([...unsignableHeaders]);
124
- for (let it = signableHeaders.values(), val = null; (val = it.next().value);) {
125
- if (result.has(val)) {
126
- result.delete(val);
127
- }
128
- }
129
- return [...result];
130
- }
1
+ module.exports = require("./index.js");
@@ -1,46 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MAX_PRESIGNED_TTL = exports.KEY_TYPE_IDENTIFIER = exports.MAX_CACHE_SIZE = exports.UNSIGNED_PAYLOAD = exports.EVENT_ALGORITHM_IDENTIFIER = exports.ALGORITHM_IDENTIFIER_V4A = exports.ALGORITHM_IDENTIFIER = exports.UNSIGNABLE_PATTERNS = exports.SEC_HEADER_PATTERN = exports.PROXY_HEADER_PATTERN = exports.ALWAYS_UNSIGNABLE_HEADERS = exports.HOST_HEADER = exports.TOKEN_HEADER = exports.SHA256_HEADER = exports.SIGNATURE_HEADER = exports.GENERATED_HEADERS = exports.DATE_HEADER = exports.AMZ_DATE_HEADER = exports.AUTH_HEADER = exports.REGION_SET_PARAM = exports.TOKEN_QUERY_PARAM = exports.SIGNATURE_QUERY_PARAM = exports.EXPIRES_QUERY_PARAM = exports.SIGNED_HEADERS_QUERY_PARAM = exports.AMZ_DATE_QUERY_PARAM = exports.CREDENTIAL_QUERY_PARAM = exports.ALGORITHM_QUERY_PARAM = void 0;
4
- exports.ALGORITHM_QUERY_PARAM = "X-Amz-Algorithm";
5
- exports.CREDENTIAL_QUERY_PARAM = "X-Amz-Credential";
6
- exports.AMZ_DATE_QUERY_PARAM = "X-Amz-Date";
7
- exports.SIGNED_HEADERS_QUERY_PARAM = "X-Amz-SignedHeaders";
8
- exports.EXPIRES_QUERY_PARAM = "X-Amz-Expires";
9
- exports.SIGNATURE_QUERY_PARAM = "X-Amz-Signature";
10
- exports.TOKEN_QUERY_PARAM = "X-Amz-Security-Token";
11
- exports.REGION_SET_PARAM = "X-Amz-Region-Set";
12
- exports.AUTH_HEADER = "authorization";
13
- exports.AMZ_DATE_HEADER = exports.AMZ_DATE_QUERY_PARAM.toLowerCase();
14
- exports.DATE_HEADER = "date";
15
- exports.GENERATED_HEADERS = [exports.AUTH_HEADER, exports.AMZ_DATE_HEADER, exports.DATE_HEADER];
16
- exports.SIGNATURE_HEADER = exports.SIGNATURE_QUERY_PARAM.toLowerCase();
17
- exports.SHA256_HEADER = "x-amz-content-sha256";
18
- exports.TOKEN_HEADER = exports.TOKEN_QUERY_PARAM.toLowerCase();
19
- exports.HOST_HEADER = "host";
20
- exports.ALWAYS_UNSIGNABLE_HEADERS = {
21
- authorization: true,
22
- "cache-control": true,
23
- connection: true,
24
- expect: true,
25
- from: true,
26
- "keep-alive": true,
27
- "max-forwards": true,
28
- pragma: true,
29
- referer: true,
30
- te: true,
31
- trailer: true,
32
- "transfer-encoding": true,
33
- upgrade: true,
34
- "user-agent": true,
35
- "x-amzn-trace-id": true,
36
- };
37
- exports.PROXY_HEADER_PATTERN = /^proxy-/;
38
- exports.SEC_HEADER_PATTERN = /^sec-/;
39
- exports.UNSIGNABLE_PATTERNS = [/^proxy-/i, /^sec-/i];
40
- exports.ALGORITHM_IDENTIFIER = "AWS4-HMAC-SHA256";
41
- exports.ALGORITHM_IDENTIFIER_V4A = "AWS4-ECDSA-P256-SHA256";
42
- exports.EVENT_ALGORITHM_IDENTIFIER = "AWS4-HMAC-SHA256-PAYLOAD";
43
- exports.UNSIGNED_PAYLOAD = "UNSIGNED-PAYLOAD";
44
- exports.MAX_CACHE_SIZE = 50;
45
- exports.KEY_TYPE_IDENTIFIER = "aws4_request";
46
- exports.MAX_PRESIGNED_TTL = 60 * 60 * 24 * 7;
1
+ module.exports = require("./index.js");
@@ -1,32 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deleteHeader = exports.getHeaderValue = exports.hasHeader = void 0;
4
- function hasHeader(soughtHeader, headers) {
5
- soughtHeader = soughtHeader.toLowerCase();
6
- for (const headerName of Object.keys(headers)) {
7
- if (soughtHeader === headerName.toLowerCase()) {
8
- return true;
9
- }
10
- }
11
- return false;
12
- }
13
- exports.hasHeader = hasHeader;
14
- function getHeaderValue(soughtHeader, headers) {
15
- soughtHeader = soughtHeader.toLowerCase();
16
- for (const headerName of Object.keys(headers)) {
17
- if (soughtHeader === headerName.toLowerCase()) {
18
- return headers[headerName];
19
- }
20
- }
21
- return undefined;
22
- }
23
- exports.getHeaderValue = getHeaderValue;
24
- function deleteHeader(soughtHeader, headers) {
25
- soughtHeader = soughtHeader.toLowerCase();
26
- for (const headerName of Object.keys(headers)) {
27
- if (soughtHeader === headerName.toLowerCase()) {
28
- delete headers[headerName];
29
- }
30
- }
31
- }
32
- exports.deleteHeader = deleteHeader;
1
+ module.exports = require("./index.js");
package/dist-cjs/index.js CHANGED
@@ -1,9 +1,268 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const signature_v4_multi_region_1 = require("@aws-sdk/signature-v4-multi-region");
5
- const util_user_agent_node_1 = require("@aws-sdk/util-user-agent-node");
6
- const CrtSignerV4_1 = require("./CrtSignerV4");
7
- signature_v4_multi_region_1.signatureV4CrtContainer.CrtSignerV4 = CrtSignerV4_1.CrtSignerV4;
8
- util_user_agent_node_1.crtAvailability.isCrtAvailable = true;
9
- tslib_1.__exportStar(require("./CrtSignerV4"), exports);
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ CrtSignerV4: () => CrtSignerV4
24
+ });
25
+ module.exports = __toCommonJS(src_exports);
26
+ var import_signature_v4_multi_region = require("@aws-sdk/signature-v4-multi-region");
27
+ var import_util_user_agent_node = require("@aws-sdk/util-user-agent-node");
28
+
29
+ // src/CrtSignerV4.ts
30
+ var import_querystring_parser = require("@smithy/querystring-parser");
31
+ var import_signature_v4 = require("@smithy/signature-v4");
32
+ var import_util_middleware = require("@smithy/util-middleware");
33
+ var import_aws_crt = require("aws-crt");
34
+
35
+ // src/constants.ts
36
+ var AMZ_DATE_QUERY_PARAM = "X-Amz-Date";
37
+ var SIGNATURE_QUERY_PARAM = "X-Amz-Signature";
38
+ var TOKEN_QUERY_PARAM = "X-Amz-Security-Token";
39
+ var AMZ_DATE_HEADER = AMZ_DATE_QUERY_PARAM.toLowerCase();
40
+ var SIGNATURE_HEADER = SIGNATURE_QUERY_PARAM.toLowerCase();
41
+ var SHA256_HEADER = "x-amz-content-sha256";
42
+ var TOKEN_HEADER = TOKEN_QUERY_PARAM.toLowerCase();
43
+ var MAX_PRESIGNED_TTL = 60 * 60 * 24 * 7;
44
+
45
+ // src/headerUtil.ts
46
+ function deleteHeader(soughtHeader, headers) {
47
+ soughtHeader = soughtHeader.toLowerCase();
48
+ for (const headerName of Object.keys(headers)) {
49
+ if (soughtHeader === headerName.toLowerCase()) {
50
+ delete headers[headerName];
51
+ }
52
+ }
53
+ }
54
+ __name(deleteHeader, "deleteHeader");
55
+
56
+ // src/CrtSignerV4.ts
57
+ function sdkHttpRequest2crtHttpRequest(sdkRequest) {
58
+ deleteHeader(SHA256_HEADER, sdkRequest.headers);
59
+ const headersArray = Object.entries(sdkRequest.headers);
60
+ const crtHttpHeaders = new import_aws_crt.http.HttpHeaders(headersArray);
61
+ const queryString = (0, import_signature_v4.getCanonicalQuery)(sdkRequest);
62
+ return new import_aws_crt.http.HttpRequest(sdkRequest.method, sdkRequest.path + "?" + queryString, crtHttpHeaders);
63
+ }
64
+ __name(sdkHttpRequest2crtHttpRequest, "sdkHttpRequest2crtHttpRequest");
65
+ var _CrtSignerV4 = class _CrtSignerV4 {
66
+ constructor({
67
+ credentials,
68
+ region,
69
+ service,
70
+ sha256,
71
+ applyChecksum = true,
72
+ uriEscapePath = true,
73
+ signingAlgorithm = import_aws_crt.auth.AwsSigningAlgorithm.SigV4
74
+ }) {
75
+ this.service = service;
76
+ this.sha256 = sha256;
77
+ this.uriEscapePath = uriEscapePath;
78
+ this.signingAlgorithm = signingAlgorithm;
79
+ this.applyChecksum = applyChecksum;
80
+ this.regionProvider = (0, import_util_middleware.normalizeProvider)(region);
81
+ this.credentialProvider = (0, import_util_middleware.normalizeProvider)(credentials);
82
+ import_aws_crt.io.enable_logging(import_aws_crt.io.LogLevel.ERROR);
83
+ }
84
+ async options2crtConfigure({
85
+ signingDate = /* @__PURE__ */ new Date(),
86
+ signableHeaders,
87
+ unsignableHeaders,
88
+ signingRegion,
89
+ signingService
90
+ } = {}, viaHeader, payloadHash, expiresIn, _credentials) {
91
+ const credentials = _credentials ?? await this.credentialProvider();
92
+ const region = signingRegion ?? await this.regionProvider();
93
+ const service = signingService ?? this.service;
94
+ if ((signableHeaders == null ? void 0 : signableHeaders.has("x-amzn-trace-id")) || (signableHeaders == null ? void 0 : signableHeaders.has("user-agent"))) {
95
+ throw new Error("internal check (x-amzn-trace-id, user-agent) is not supported to be included to sign with CRT.");
96
+ }
97
+ const headersUnsignable = getHeadersUnsignable(unsignableHeaders, signableHeaders);
98
+ return {
99
+ algorithm: this.signingAlgorithm,
100
+ signature_type: viaHeader ? import_aws_crt.auth.AwsSignatureType.HttpRequestViaHeaders : import_aws_crt.auth.AwsSignatureType.HttpRequestViaQueryParams,
101
+ provider: sdk2crtCredentialsProvider(credentials),
102
+ region,
103
+ service,
104
+ date: new Date(signingDate),
105
+ header_blacklist: headersUnsignable,
106
+ use_double_uri_encode: this.uriEscapePath,
107
+ /* Always set the body value by the result from SDK */
108
+ signed_body_value: payloadHash,
109
+ signed_body_header: this.applyChecksum && viaHeader ? import_aws_crt.auth.AwsSignedBodyHeaderType.XAmzContentSha256 : import_aws_crt.auth.AwsSignedBodyHeaderType.None,
110
+ expiration_in_seconds: expiresIn
111
+ };
112
+ }
113
+ async presign(originalRequest, options = {}) {
114
+ if (options.expiresIn && options.expiresIn > MAX_PRESIGNED_TTL) {
115
+ return Promise.reject(
116
+ "Signature version 4 presigned URLs must have an expiration date less than one week in the future"
117
+ );
118
+ }
119
+ const request = (0, import_signature_v4.moveHeadersToQuery)((0, import_signature_v4.prepareRequest)(originalRequest));
120
+ const crtSignedRequest = await this.signRequest(
121
+ request,
122
+ await this.options2crtConfigure(
123
+ options,
124
+ false,
125
+ await (0, import_signature_v4.getPayloadHash)(originalRequest, this.sha256),
126
+ options.expiresIn ? options.expiresIn : 3600
127
+ )
128
+ );
129
+ request.query = this.getQueryParam(crtSignedRequest.path);
130
+ return request;
131
+ }
132
+ async sign(toSign, options) {
133
+ const request = (0, import_signature_v4.prepareRequest)(toSign);
134
+ const crtSignedRequest = await this.signRequest(
135
+ request,
136
+ await this.options2crtConfigure(options, true, await (0, import_signature_v4.getPayloadHash)(toSign, this.sha256))
137
+ );
138
+ request.headers = crtSignedRequest.headers._flatten().reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
139
+ return request;
140
+ }
141
+ /**
142
+ * Sign with alternate credentials to the ones provided in the constructor.
143
+ */
144
+ async signWithCredentials(toSign, credentials, options) {
145
+ const request = (0, import_signature_v4.prepareRequest)(toSign);
146
+ const crtSignedRequest = await this.signRequest(
147
+ request,
148
+ await this.options2crtConfigure(
149
+ options,
150
+ true,
151
+ await (0, import_signature_v4.getPayloadHash)(toSign, this.sha256),
152
+ void 0,
153
+ credentials
154
+ )
155
+ );
156
+ request.headers = crtSignedRequest.headers._flatten().reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
157
+ return request;
158
+ }
159
+ /* Get the query parameters from crtPath */
160
+ getQueryParam(crtPath) {
161
+ const start = crtPath.search(/\?/);
162
+ const startHash = crtPath.search(/\#/);
163
+ const end = startHash == -1 ? void 0 : startHash;
164
+ const queryParam = {};
165
+ if (start == -1) {
166
+ return queryParam;
167
+ }
168
+ const queryString = crtPath.slice(start + 1, end);
169
+ return (0, import_querystring_parser.parseQueryString)(queryString);
170
+ }
171
+ async signRequest(requestToSign, crtConfig) {
172
+ const request = sdkHttpRequest2crtHttpRequest(requestToSign);
173
+ try {
174
+ return await import_aws_crt.auth.aws_sign_request(request, crtConfig);
175
+ } catch (error) {
176
+ throw new Error(error);
177
+ }
178
+ }
179
+ /**
180
+ * Test-only API used for cross-library signing verification tests. Verify sign.
181
+ *
182
+ * Verifies:
183
+ * (1) The canonical request generated during sigv4a signing of the request matches what is passed in
184
+ * (2) The signature passed in is a valid ECDSA signature of the hashed string-to-sign derived from the
185
+ * canonical request
186
+ *
187
+ * @param request The original request used for signing
188
+ * @param signature the actual signature computed from a previous signing of the signable
189
+ * @param expectedCanonicalRequest expected result when building the canonical request
190
+ * @param eccPubKeyX the x coordinate of the public part of the ecc key to verify the signature
191
+ * @param eccPubKeyY the y coordinate of the public part of the ecc key to verify the signature
192
+ * @param options the RequestSigningArguments used for signing
193
+ *
194
+ * @return True, if the verification succeed. Otherwise, false.
195
+ */
196
+ async verifySigv4aSigning(request, signature, expectedCanonicalRequest, eccPubKeyX, eccPubKeyY, options = {}) {
197
+ const sdkRequest = (0, import_signature_v4.prepareRequest)(request);
198
+ const crtRequest = sdkHttpRequest2crtHttpRequest(sdkRequest);
199
+ const payloadHash = await (0, import_signature_v4.getPayloadHash)(request, this.sha256);
200
+ const crtConfig = await this.options2crtConfigure(options, true, payloadHash);
201
+ return import_aws_crt.auth.aws_verify_sigv4a_signing(
202
+ crtRequest,
203
+ crtConfig,
204
+ expectedCanonicalRequest,
205
+ signature,
206
+ eccPubKeyX,
207
+ eccPubKeyY
208
+ );
209
+ }
210
+ /* Verify presign */
211
+ async verifySigv4aPreSigning(request, signature, expectedCanonicalRequest, eccPubKeyX, eccPubKeyY, options = {}) {
212
+ if (typeof signature != "string") {
213
+ return false;
214
+ }
215
+ const sdkRequest = (0, import_signature_v4.prepareRequest)(request);
216
+ const crtRequest = sdkHttpRequest2crtHttpRequest(sdkRequest);
217
+ const crtConfig = await this.options2crtConfigure(
218
+ options,
219
+ false,
220
+ await (0, import_signature_v4.getPayloadHash)(request, this.sha256),
221
+ options.expiresIn ? options.expiresIn : 3600
222
+ );
223
+ return import_aws_crt.auth.aws_verify_sigv4a_signing(
224
+ crtRequest,
225
+ crtConfig,
226
+ expectedCanonicalRequest,
227
+ signature,
228
+ eccPubKeyX,
229
+ eccPubKeyY
230
+ );
231
+ }
232
+ };
233
+ __name(_CrtSignerV4, "CrtSignerV4");
234
+ var CrtSignerV4 = _CrtSignerV4;
235
+ function sdk2crtCredentialsProvider(credentials) {
236
+ return import_aws_crt.auth.AwsCredentialsProvider.newStatic(
237
+ credentials.accessKeyId,
238
+ credentials.secretAccessKey,
239
+ credentials.sessionToken
240
+ );
241
+ }
242
+ __name(sdk2crtCredentialsProvider, "sdk2crtCredentialsProvider");
243
+ function getHeadersUnsignable(unsignableHeaders, signableHeaders) {
244
+ if (!unsignableHeaders) {
245
+ return [];
246
+ }
247
+ if (!signableHeaders) {
248
+ return [...unsignableHeaders];
249
+ }
250
+ const result = /* @__PURE__ */ new Set([...unsignableHeaders]);
251
+ for (let it = signableHeaders.values(), val = null; val = it.next().value; ) {
252
+ if (result.has(val)) {
253
+ result.delete(val);
254
+ }
255
+ }
256
+ return [...result];
257
+ }
258
+ __name(getHeadersUnsignable, "getHeadersUnsignable");
259
+
260
+ // src/index.ts
261
+ import_signature_v4_multi_region.signatureV4CrtContainer.CrtSignerV4 = CrtSignerV4;
262
+ import_util_user_agent_node.crtAvailability.isCrtAvailable = true;
263
+ // Annotate the CommonJS export names for ESM import in node:
264
+
265
+ 0 && (module.exports = {
266
+ CrtSignerV4
267
+ });
268
+
@@ -1,386 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.requests = exports.signingDate = exports.credentials = exports.service = exports.region = void 0;
4
- exports.region = "us-east-1";
5
- exports.service = "service";
6
- exports.credentials = {
7
- accessKeyId: "AKIDEXAMPLE",
8
- secretAccessKey: "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY",
9
- };
10
- exports.signingDate = new Date("2015-08-30T12:36:00Z");
11
- exports.requests = [
12
- {
13
- name: "get-header-key-duplicate",
14
- request: {
15
- protocol: "https:",
16
- method: "GET",
17
- hostname: "example.amazonaws.com",
18
- query: {},
19
- headers: {
20
- host: "example.amazonaws.com",
21
- "my-header1": "value2,value2,value1",
22
- "x-amz-date": "20150830T123600Z",
23
- },
24
- path: "/",
25
- },
26
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=c9d5ea9f3f72853aea855b47ea873832890dbdd183b4468f858259531a5138ea",
27
- },
28
- {
29
- name: "get-header-value-multiline",
30
- request: {
31
- protocol: "https:",
32
- method: "GET",
33
- hostname: "example.amazonaws.com",
34
- query: {},
35
- headers: {
36
- host: "example.amazonaws.com",
37
- "my-header1": "value1,value2,value3",
38
- "x-amz-date": "20150830T123600Z",
39
- },
40
- path: "/",
41
- },
42
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=ba17b383a53190154eb5fa66a1b836cc297cc0a3d70a5d00705980573d8ff790",
43
- },
44
- {
45
- name: "get-header-value-order",
46
- request: {
47
- protocol: "https:",
48
- method: "GET",
49
- hostname: "example.amazonaws.com",
50
- query: {},
51
- headers: {
52
- host: "example.amazonaws.com",
53
- "my-header1": "value4,value1,value3,value2",
54
- "x-amz-date": "20150830T123600Z",
55
- },
56
- path: "/",
57
- },
58
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=08c7e5a9acfcfeb3ab6b2185e75ce8b1deb5e634ec47601a50643f830c755c01",
59
- },
60
- {
61
- name: "get-header-value-trim",
62
- request: {
63
- protocol: "https:",
64
- method: "GET",
65
- hostname: "example.amazonaws.com",
66
- query: {},
67
- headers: {
68
- host: "example.amazonaws.com",
69
- "my-header1": "value1",
70
- "my-header2": '"a b c"',
71
- "x-amz-date": "20150830T123600Z",
72
- },
73
- path: "/",
74
- },
75
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;my-header2;x-amz-date, Signature=acc3ed3afb60bb290fc8d2dd0098b9911fcaa05412b367055dee359757a9c736",
76
- },
77
- {
78
- name: "get-unreserved",
79
- request: {
80
- protocol: "https:",
81
- method: "GET",
82
- hostname: "example.amazonaws.com",
83
- query: {},
84
- headers: {
85
- host: "example.amazonaws.com",
86
- "x-amz-date": "20150830T123600Z",
87
- },
88
- path: "/-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
89
- },
90
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=07ef7494c76fa4850883e2b006601f940f8a34d404d0cfa977f52a65bbf5f24f",
91
- },
92
- {
93
- name: "get-utf8",
94
- request: {
95
- protocol: "https:",
96
- method: "GET",
97
- hostname: "example.amazonaws.com",
98
- query: {},
99
- headers: {
100
- host: "example.amazonaws.com",
101
- "x-amz-date": "20150830T123600Z",
102
- },
103
- path: "/ሴ",
104
- },
105
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=8318018e0b0f223aa2bbf98705b62bb787dc9c0e678f255a891fd03141be5d85",
106
- },
107
- {
108
- name: "get-vanilla",
109
- request: {
110
- protocol: "https:",
111
- method: "GET",
112
- hostname: "example.amazonaws.com",
113
- query: {},
114
- headers: {
115
- host: "example.amazonaws.com",
116
- "x-amz-date": "20150830T123600Z",
117
- },
118
- path: "/",
119
- },
120
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31",
121
- },
122
- {
123
- name: "get-vanilla-empty-query-key",
124
- request: {
125
- protocol: "https:",
126
- method: "GET",
127
- hostname: "example.amazonaws.com",
128
- query: {
129
- Param1: "value1",
130
- },
131
- headers: {
132
- host: "example.amazonaws.com",
133
- "x-amz-date": "20150830T123600Z",
134
- },
135
- path: "/",
136
- },
137
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=a67d582fa61cc504c4bae71f336f98b97f1ea3c7a6bfe1b6e45aec72011b9aeb",
138
- },
139
- {
140
- name: "get-vanilla-query",
141
- request: {
142
- protocol: "https:",
143
- method: "GET",
144
- hostname: "example.amazonaws.com",
145
- query: {},
146
- headers: {
147
- host: "example.amazonaws.com",
148
- "x-amz-date": "20150830T123600Z",
149
- },
150
- path: "/",
151
- },
152
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31",
153
- },
154
- {
155
- name: "get-vanilla-query-order-key-case",
156
- request: {
157
- protocol: "https:",
158
- method: "GET",
159
- hostname: "example.amazonaws.com",
160
- query: {
161
- Param2: "value2",
162
- Param1: "value1",
163
- },
164
- headers: {
165
- host: "example.amazonaws.com",
166
- "x-amz-date": "20150830T123600Z",
167
- },
168
- path: "/",
169
- },
170
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=b97d918cfa904a5beff61c982a1b6f458b799221646efd99d3219ec94cdf2500",
171
- },
172
- {
173
- name: "get-vanilla-query-unreserved",
174
- request: {
175
- protocol: "https:",
176
- method: "GET",
177
- hostname: "example.amazonaws.com",
178
- query: {
179
- "-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz": "-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
180
- },
181
- headers: {
182
- host: "example.amazonaws.com",
183
- "x-amz-date": "20150830T123600Z",
184
- },
185
- path: "/",
186
- },
187
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=9c3e54bfcdf0b19771a7f523ee5669cdf59bc7cc0884027167c21bb143a40197",
188
- },
189
- {
190
- name: "get-vanilla-utf8-query",
191
- request: {
192
- protocol: "https:",
193
- method: "GET",
194
- hostname: "example.amazonaws.com",
195
- query: {
196
- ሴ: "bar",
197
- },
198
- headers: {
199
- host: "example.amazonaws.com",
200
- "x-amz-date": "20150830T123600Z",
201
- },
202
- path: "/",
203
- },
204
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=2cdec8eed098649ff3a119c94853b13c643bcf08f8b0a1d91e12c9027818dd04",
205
- },
206
- {
207
- name: "post-header-key-case",
208
- request: {
209
- protocol: "https:",
210
- method: "POST",
211
- hostname: "example.amazonaws.com",
212
- query: {},
213
- headers: {
214
- host: "example.amazonaws.com",
215
- "x-amz-date": "20150830T123600Z",
216
- },
217
- path: "/",
218
- },
219
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5da7c1a2acd57cee7505fc6676e4e544621c30862966e37dddb68e92efbe5d6b",
220
- },
221
- {
222
- name: "post-header-key-sort",
223
- request: {
224
- protocol: "https:",
225
- method: "POST",
226
- hostname: "example.amazonaws.com",
227
- query: {},
228
- headers: {
229
- host: "example.amazonaws.com",
230
- "my-header1": "value1",
231
- "x-amz-date": "20150830T123600Z",
232
- },
233
- path: "/",
234
- },
235
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=c5410059b04c1ee005303aed430f6e6645f61f4dc9e1461ec8f8916fdf18852c",
236
- },
237
- {
238
- name: "post-header-value-case",
239
- request: {
240
- protocol: "https:",
241
- method: "POST",
242
- hostname: "example.amazonaws.com",
243
- query: {},
244
- headers: {
245
- host: "example.amazonaws.com",
246
- "my-header1": "VALUE1",
247
- "x-amz-date": "20150830T123600Z",
248
- },
249
- path: "/",
250
- },
251
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=cdbc9802e29d2942e5e10b5bccfdd67c5f22c7c4e8ae67b53629efa58b974b7d",
252
- },
253
- {
254
- name: "post-sts-header-after",
255
- request: {
256
- protocol: "https:",
257
- method: "POST",
258
- hostname: "example.amazonaws.com",
259
- query: {},
260
- headers: {
261
- host: "example.amazonaws.com",
262
- "x-amz-date": "20150830T123600Z",
263
- },
264
- path: "/",
265
- },
266
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5da7c1a2acd57cee7505fc6676e4e544621c30862966e37dddb68e92efbe5d6b",
267
- },
268
- {
269
- name: "post-vanilla",
270
- request: {
271
- protocol: "https:",
272
- method: "POST",
273
- hostname: "example.amazonaws.com",
274
- query: {},
275
- headers: {
276
- host: "example.amazonaws.com",
277
- "x-amz-date": "20150830T123600Z",
278
- },
279
- path: "/",
280
- },
281
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5da7c1a2acd57cee7505fc6676e4e544621c30862966e37dddb68e92efbe5d6b",
282
- },
283
- {
284
- name: "post-vanilla-empty-query-value",
285
- request: {
286
- protocol: "https:",
287
- method: "POST",
288
- hostname: "example.amazonaws.com",
289
- query: {
290
- Param1: "value1",
291
- },
292
- headers: {
293
- host: "example.amazonaws.com",
294
- "x-amz-date": "20150830T123600Z",
295
- },
296
- path: "/",
297
- },
298
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=28038455d6de14eafc1f9222cf5aa6f1a96197d7deb8263271d420d138af7f11",
299
- },
300
- {
301
- name: "post-vanilla-query",
302
- request: {
303
- protocol: "https:",
304
- method: "POST",
305
- hostname: "example.amazonaws.com",
306
- query: {
307
- Param1: "value1",
308
- },
309
- headers: {
310
- host: "example.amazonaws.com",
311
- "x-amz-date": "20150830T123600Z",
312
- },
313
- path: "/",
314
- },
315
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=28038455d6de14eafc1f9222cf5aa6f1a96197d7deb8263271d420d138af7f11",
316
- },
317
- {
318
- name: "post-vanilla-query-nonunreserved",
319
- request: {
320
- protocol: "https:",
321
- method: "POST",
322
- hostname: "example.amazonaws.com",
323
- query: {
324
- "@#$%^": "",
325
- "+": '/,?><`";:\\|][{}',
326
- },
327
- headers: {
328
- host: "example.amazonaws.com",
329
- "x-amz-date": "20150830T123600Z",
330
- },
331
- path: "/",
332
- },
333
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=66c82657c86e26fb25238d0e69f011edc4c6df5ae71119d7cb98ed9b87393c1e",
334
- },
335
- {
336
- name: "post-vanilla-query-space",
337
- request: {
338
- protocol: "https:",
339
- method: "POST",
340
- hostname: "example.amazonaws.com",
341
- query: {
342
- p: "",
343
- },
344
- headers: {
345
- host: "example.amazonaws.com",
346
- "x-amz-date": "20150830T123600Z",
347
- },
348
- path: "/",
349
- },
350
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=e71688addb58a26418614085fb730ba3faa623b461c17f48f2fbdb9361b94a9b",
351
- },
352
- {
353
- name: "post-x-www-form-urlencoded",
354
- request: {
355
- protocol: "https:",
356
- method: "POST",
357
- hostname: "example.amazonaws.com",
358
- query: {},
359
- headers: {
360
- "content-type": "application/x-www-form-urlencoded",
361
- host: "example.amazonaws.com",
362
- "x-amz-date": "20150830T123600Z",
363
- },
364
- body: "Param1=value1",
365
- path: "/",
366
- },
367
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=ff11897932ad3f4e8b18135d722051e5ac45fc38421b1da7b9d196a0fe09473a",
368
- },
369
- {
370
- name: "post-x-www-form-urlencoded-parameters",
371
- request: {
372
- protocol: "https:",
373
- method: "POST",
374
- hostname: "example.amazonaws.com",
375
- query: {},
376
- headers: {
377
- "content-type": "application/x-www-form-urlencoded; charset=utf8",
378
- host: "example.amazonaws.com",
379
- "x-amz-date": "20150830T123600Z",
380
- },
381
- body: "Param1=value1",
382
- path: "/",
383
- },
384
- authorization: "AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=1a72ec8f64bd914b0e42e42607c7fbce7fb2c7465f63e3092b3b0d39fa77a6fe",
385
- },
386
- ];
1
+ module.exports = require("./index.js");
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@aws-sdk/signature-v4-crt",
3
- "version": "3.489.0",
3
+ "version": "3.496.0",
4
4
  "description": "A revision of AWS Signature V4 request signer based on AWS Common Runtime https://github.com/awslabs/aws-crt-nodejs",
5
5
  "main": "./dist-cjs/index.js",
6
6
  "module": "./dist-es/index.js",
7
7
  "types": "./dist-types/index.d.ts",
8
8
  "scripts": {
9
9
  "build": "concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'",
10
- "build:cjs": "tsc -p tsconfig.cjs.json",
10
+ "build:cjs": "node ../../scripts/compilation/inline signature-v4-crt",
11
11
  "build:es": "tsc -p tsconfig.es.json",
12
12
  "build:include:deps": "lerna run --scope $npm_package_name --include-dependencies build",
13
13
  "build:types": "tsc -p tsconfig.types.json",
@@ -22,19 +22,19 @@
22
22
  },
23
23
  "license": "Apache-2.0",
24
24
  "dependencies": {
25
- "@aws-sdk/signature-v4-multi-region": "3.489.0",
26
- "@aws-sdk/types": "3.489.0",
27
- "@aws-sdk/util-user-agent-node": "3.489.0",
28
- "@smithy/querystring-parser": "^2.0.0",
29
- "@smithy/signature-v4": "^2.0.0",
30
- "@smithy/types": "^2.8.0",
31
- "@smithy/util-middleware": "^2.0.9",
25
+ "@aws-sdk/signature-v4-multi-region": "3.496.0",
26
+ "@aws-sdk/types": "3.496.0",
27
+ "@aws-sdk/util-user-agent-node": "3.496.0",
28
+ "@smithy/querystring-parser": "^2.1.1",
29
+ "@smithy/signature-v4": "^2.1.1",
30
+ "@smithy/types": "^2.9.1",
31
+ "@smithy/util-middleware": "^2.1.1",
32
32
  "aws-crt": "^1.18.3",
33
33
  "tslib": "^2.5.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@aws-crypto/sha256-js": "3.0.0",
37
- "@smithy/protocol-http": "^3.0.12",
37
+ "@smithy/protocol-http": "^3.1.1",
38
38
  "@tsconfig/recommended": "1.0.1",
39
39
  "concurrently": "7.0.0",
40
40
  "downlevel-dts": "0.10.1",