Skip to content

Java driver generates invalid signature #29

Description

@marcin-kamionowski

It looks that the problem is caused by double number:

import com.bigchaindb.builders.BigchainDbConfigBuilder;
import com.bigchaindb.builders.BigchainDbTransactionBuilder;
import com.bigchaindb.constants.Operations;
import com.bigchaindb.model.GenericCallback;
import com.bigchaindb.model.MetaData;
import com.bigchaindb.model.Transaction;
import net.i2p.crypto.eddsa.EdDSAPrivateKey;
import net.i2p.crypto.eddsa.EdDSAPublicKey;
import okhttp3.Response;

import java.io.IOException;
import java.security.KeyPair;
import java.util.HashMap;
import java.util.Map;

public class Main {

    public static void main(String[] args) throws Exception {
        BigchainDbConfigBuilder
            .baseUrl("https://test.bigchaindb.com/")
            .addToken("app_id", <id>)
            .addToken("app_key", <ey>).setup();

        net.i2p.crypto.eddsa.KeyPairGenerator edDsaKpg = new net.i2p.crypto.eddsa.KeyPairGenerator();
        KeyPair keyPair = edDsaKpg.generateKeyPair();

        Map<String, Object> assetData = new HashMap<String, Object>() {{
            put("key", 1197.5864929752704);
        }};

        MetaData metaData = new MetaData();
        metaData.setMetaData("notes", "The CREATE transaction for a device asset");

        Transaction createTransaction = BigchainDbTransactionBuilder
            .init()
            .addAssets(assetData, HashMap.class)
            .addMetaData(metaData)
            .operation(Operations.CREATE)
            .buildAndSign((EdDSAPublicKey) keyPair.getPublic(), (EdDSAPrivateKey) keyPair.getPrivate())
            .sendTransaction(new GenericCallback() {
                @Override
                public void pushedSuccessfully(Response response) {

                }

                @Override
                public void transactionMalformed(Response response) {
                    handleError(response);
                }

                @Override
                public void otherError(Response response) {
                    handleError(response);
                }

                private void handleError(Response response) {
                    try {
                        System.out.println(new String(response.body().bytes()));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            });
        System.out.println(createTransaction.getId());
    }
}

In output you should get message saying that signature is invalid
Tested with:

<dependency>
    <groupId>com.bigchaindb</groupId>
    <artifactId>bigchaindb-driver</artifactId>
    <version>1.1</version>
</dependency>

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions