Skip to content

Java driver generates invalid signature #29

Open
@marcin-kamionowski

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>

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions