Skip to content

Commit

Permalink
Send Base64 encoded payload in the response
Browse files Browse the repository at this point in the history
  • Loading branch information
usmansaleem committed May 1, 2024
1 parent 17692cf commit 3c60ee6
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@

import java.nio.file.Path;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.restassured.http.ContentType;
import io.vertx.core.json.JsonObject;
import org.apache.tuweni.bytes.Bytes;
import org.apache.tuweni.bytes.Bytes32;
import org.junit.jupiter.api.BeforeEach;
Expand Down Expand Up @@ -85,25 +85,31 @@ void extensionSigningData(ContentType acceptMediaType) throws Exception {
final var response =
signer.signExtensionPayload(PUBLIC_KEY.toString(), payload, acceptMediaType);

final var hexEncodedSignature =
final var signatureResponse =
switch (acceptMediaType) {
case TEXT -> {
response.then().statusCode(200).contentType(TEXT);
yield response.body().print();
yield new ProofOfValidationResponse(
Bytes.wrap(payload.getBytes(UTF_8)).toBase64String(), response.body().print());
}
case JSON, ANY -> {
response.then().statusCode(200).contentType(JSON);
yield new JsonObject(response.body().print()).getString("signature");
yield JSON_MAPPER.readValue(response.asByteArray(), ProofOfValidationResponse.class);
}
default -> throw new IllegalStateException("Unexpected value: " + acceptMediaType);
};

// assert that the signature is valid
final var blsSignature =
BLSSignature.fromBytesCompressed(Bytes.fromHexString(hexEncodedSignature));
BLSSignature.fromBytesCompressed(Bytes.fromHexString(signatureResponse.signature));

final var isValidBLSSig =
BLS.verify(PUBLIC_KEY, Bytes.wrap(payload.getBytes(UTF_8)), blsSignature);
assertThat(isValidBLSSig).isTrue();

// assert that Base64 encoded payload is correct
assertThat(signatureResponse.payload)
.isEqualTo(Bytes.wrap(payload.getBytes(UTF_8)).toBase64String());
}

@Test
Expand Down Expand Up @@ -149,4 +155,8 @@ void extraJsonFieldsCausesBadRequestStatusCode() throws Exception {

signer.signExtensionPayload(PUBLIC_KEY.toString(), payload, JSON).then().statusCode(400);
}

record ProofOfValidationResponse(
@JsonProperty(value = "payload", required = true) String payload,
@JsonProperty(value = "signature", required = true) String signature) {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,17 +59,25 @@ public void handle(final RoutingContext routingContext) {
return;
}

final Bytes payload = Bytes.wrap(body.getBytes(UTF_8));
signerForIdentifier
.sign(identifier, Bytes.wrap(body.getBytes(UTF_8)))
.sign(identifier, payload)
.ifPresentOrElse(
blsSigHex -> respondWithSignature(routingContext, blsSigHex),
blsSigHex -> respondWithSignature(routingContext, payload, blsSigHex),
() -> routingContext.fail(NOT_FOUND));
}

private void respondWithSignature(final RoutingContext routingContext, final String blsSigHex) {
private void respondWithSignature(
final RoutingContext routingContext, final Bytes payload, final String blsSigHex) {
if (hasJsonCompatibleAcceptableContentType(routingContext.parsedHeaders().accept())) {
routingContext.response().putHeader("Content-Type", JSON_UTF_8);
routingContext.response().end(new JsonObject().put("signature", blsSigHex).encode());
routingContext
.response()
.end(
new JsonObject()
.put("payload", payload.toBase64String())
.put("signature", blsSigHex)
.encode());
} else {
routingContext.response().putHeader("Content-Type", TEXT_PLAIN_UTF_8);
routingContext.response().end(blsSigHex);
Expand Down

0 comments on commit 3c60ee6

Please sign in to comment.