Skip to content

Commit 8dddece

Browse files
trivikrsrchase
authored andcommitted
feat(signature-v4): update EventSigner signature API to sign (smithy-lang#1016)
1 parent bffb2e1 commit 8dddece

File tree

2 files changed

+33
-50
lines changed

2 files changed

+33
-50
lines changed

packages/signature-v4/src/SignatureV4.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ describe("SignatureV4", () => {
608608
});
609609
});
610610

611-
describe("#signEvent", () => {
611+
describe("#sign (event)", () => {
612612
//adopt to Ruby SDK: https://github.com/aws/aws-sdk-ruby/blob/3c47c05aa77bdbb7b803a3ff932b3a89c32276ac/gems/aws-sigv4/spec/signer_spec.rb#L274
613613
it("support event signing", async () => {
614614
const signer = new SignatureV4({
@@ -620,7 +620,7 @@ describe("SignatureV4", () => {
620620
},
621621
sha256: Sha256
622622
});
623-
const eventSignature = await signer.signEvent(
623+
const eventSignature = await signer.sign(
624624
{
625625
headers: Uint8Array.from([
626626
5,

packages/signature-v4/src/SignatureV4.ts

Lines changed: 31 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -189,59 +189,36 @@ export class SignatureV4
189189
return request;
190190
}
191191

192-
public sign(
192+
public async sign(
193193
stringToSign: string,
194194
options?: SigningArguments
195195
): Promise<string>;
196-
public sign(
196+
public async sign(
197+
event: FormattedEvent,
198+
options: EventSigningArguments
199+
): Promise<string>;
200+
public async sign(
197201
requestToSign: HttpRequest,
198202
options?: RequestSigningArguments
199203
): Promise<HttpRequest>;
200-
public async sign<T extends string | HttpRequest>(
201-
toSign: T,
202-
{
203-
signingDate = new Date(),
204-
...options
205-
}: RequestSigningArguments | SigningArguments = {}
206-
): Promise<T> {
207-
const [region, credentials] = await Promise.all([
208-
this.regionProvider(),
209-
this.credentialProvider()
210-
]);
211-
204+
public async sign(toSign: any, options: any): Promise<any> {
212205
if (typeof toSign === "string") {
213-
return this.signString(
214-
toSign,
215-
signingDate,
216-
region,
217-
credentials
218-
) as Promise<T>;
206+
return this.signString(toSign, options);
207+
} else if (toSign.headers && toSign.payload) {
208+
return this.signEvent(toSign, options);
219209
} else {
220-
const {
221-
unsignableHeaders,
222-
signableHeaders
223-
} = options as RequestSigningArguments;
224-
225-
return this.signRequest(
226-
toSign as HttpRequest,
227-
signingDate,
228-
region,
229-
credentials,
230-
unsignableHeaders,
231-
signableHeaders
232-
) as Promise<T>;
210+
return this.signRequest(toSign, options);
233211
}
234212
}
235213

236-
public async signEvent(
214+
private async signEvent(
237215
{ headers, payload }: FormattedEvent,
238-
options: EventSigningArguments
216+
{ signingDate = new Date(), priorSignature }: EventSigningArguments
239217
): Promise<string> {
240-
const [region, credentials] = await Promise.all([
218+
const [region] = await Promise.all([
241219
this.regionProvider(),
242220
this.credentialProvider()
243221
]);
244-
const { signingDate = new Date(), priorSignature } = options;
245222
const { shortDate, longDate } = formatDate(signingDate);
246223
const scope = createScope(shortDate, region, this.service);
247224
const hashedPayload = await getPayloadHash(
@@ -259,15 +236,17 @@ export class SignatureV4
259236
hashedHeaders,
260237
hashedPayload
261238
].join("\n");
262-
return this.signString(stringToSign, signingDate, region, credentials);
239+
return this.signString(stringToSign, { signingDate });
263240
}
264241

265242
private async signString(
266243
stringToSign: string,
267-
signingDate: DateInput,
268-
region: string,
269-
credentials: Credentials
244+
{ signingDate = new Date() }: SigningArguments = {}
270245
): Promise<string> {
246+
const [region, credentials] = await Promise.all([
247+
this.regionProvider(),
248+
this.credentialProvider()
249+
]);
271250
const { shortDate } = formatDate(signingDate);
272251

273252
const hash = new this.sha256(
@@ -278,14 +257,18 @@ export class SignatureV4
278257
}
279258

280259
private async signRequest(
281-
originalRequest: HttpRequest,
282-
signingDate: DateInput,
283-
region: string,
284-
credentials: Credentials,
285-
unsignableHeaders?: Set<string>,
286-
signableHeaders?: Set<string>
260+
requestToSign: HttpRequest,
261+
{
262+
signingDate = new Date(),
263+
signableHeaders,
264+
unsignableHeaders
265+
}: RequestSigningArguments = {}
287266
): Promise<HttpRequest> {
288-
const request = prepareRequest(originalRequest);
267+
const [region, credentials] = await Promise.all([
268+
this.regionProvider(),
269+
this.credentialProvider()
270+
]);
271+
const request = prepareRequest(requestToSign);
289272
const { longDate, shortDate } = formatDate(signingDate);
290273
const scope = createScope(shortDate, region, this.service);
291274

0 commit comments

Comments
 (0)