use of tech.pegasys.web3signer.signing.SecpArtifactSignature in project web3signer by ConsenSys.
the class Eth1Runner method populateRouter.
@Override
protected Router populateRouter(final Context context) {
final RouterBuilder routerBuilder = context.getRouterBuilder();
final LogErrorHandler errorHandler = context.getErrorHandler();
final ArtifactSignerProvider signerProvider = context.getArtifactSignerProvider();
addPublicKeysListHandler(routerBuilder, signerProvider, ETH1_LIST.name(), context.getErrorHandler());
final SignerForIdentifier<SecpArtifactSignature> secpSigner = new SignerForIdentifier<>(signerProvider, this::formatSecpSignature, SECP256K1);
routerBuilder.operation(ETH1_SIGN.name()).handler(new BlockingHandlerDecorator(new Eth1SignForIdentifierHandler(secpSigner, new HttpApiMetrics(context.getMetricsSystem(), SECP256K1)), false)).failureHandler(errorHandler);
addReloadHandler(routerBuilder, signerProvider, RELOAD.name(), context.getErrorHandler());
return context.getRouterBuilder().createRouter();
}
use of tech.pegasys.web3signer.signing.SecpArtifactSignature in project web3signer by ConsenSys.
the class FcJsonRpc method filecoinWalletSign.
@JsonRpcMethod("Filecoin.WalletSign")
public FilecoinSignature filecoinWalletSign(@JsonRpcParam("identifier") final String filecoinAddress, @JsonRpcParam("data") final Bytes dataToSign, @JsonRpcOptional @JsonRpcParam("meta") final FilecoinMessageMsgMeta meta) {
LOG.debug("Received FC sign request id = {}; data = {}", filecoinAddress, dataToSign);
if (meta != null && meta.getExtra() != null) {
final Bytes cidBytes = fcCidEncoder.createCid(meta.getExtra());
checkArgument(dataToSign.equals(cidBytes), "Message invalid the data to sign doesn't match the CID of MsgMeta.extra");
}
final Optional<ArtifactSigner> signer = fcSigners.getSigner(filecoinAddress);
final ArtifactSignature signature;
if (signer.isPresent()) {
signature = signer.get().sign(dataToSign);
} else {
throw new FilecoinSignerNotFoundException();
}
try (final OperationTimer.TimingContext ignored = metrics.getSigningTimer().labels(signature.getType().name()).startTimer()) {
switch(signature.getType()) {
case SECP256K1:
metrics.incSecpSigningRequestCounter();
final SecpArtifactSignature secpSig = (SecpArtifactSignature) signature;
return new FilecoinSignature(SECP_VALUE, SecpArtifactSignature.toBytes(secpSig).toBase64String());
case BLS:
metrics.incBlsSigningRequestCounter();
final BlsArtifactSignature blsSig = (BlsArtifactSignature) signature;
return new FilecoinSignature(BLS_VALUE, blsSig.getSignatureData().toBytesCompressed().toBase64String());
default:
throw new IllegalArgumentException("Invalid Signature type created.");
}
}
}
use of tech.pegasys.web3signer.signing.SecpArtifactSignature in project web3signer by ConsenSys.
the class FilecoinVerifyTest method verifiesSecpSignatureWasSignedWithKey.
@Test
void verifiesSecpSignatureWasSignedWithKey() {
final Bytes message = Bytes.fromBase64String(DATA);
final SecpArtifactSignature artifactSignature = createSecpArtifactSignature(Bytes.fromBase64String(SECP_SIGNATURE));
final FilecoinAddress filecoinAddress = FilecoinAddress.fromString("t1656rklyebnscuzs5dee3zwh2xknlqsy7r2ypxei");
assertThat(FilecoinVerify.verify(filecoinAddress, message, artifactSignature)).isTrue();
}
use of tech.pegasys.web3signer.signing.SecpArtifactSignature in project web3signer by ConsenSys.
the class FilecoinVerifyTest method createSecpArtifactSignature.
private SecpArtifactSignature createSecpArtifactSignature(final Bytes signature) {
final Bytes r = signature.slice(0, 32);
final Bytes s = signature.slice(32, 32);
final Bytes v = signature.slice(64);
return new SecpArtifactSignature(new Signature(Numeric.toBigInt(v.toArrayUnsafe()), Numeric.toBigInt(r.toArrayUnsafe()), Numeric.toBigInt(s.toArrayUnsafe())));
}
Aggregations