2016-02-24 16:53:11 +01:00
Jabit
2015-03-20 14:24:12 +01:00
=====
2016-02-24 16:53:11 +01:00
[![Maven Central ](https://maven-badges.herokuapp.com/maven-central/ch.dissem.jabit/jabit-core/badge.svg )](https://maven-badges.herokuapp.com/maven-central/ch.dissem.jabit/jabit-core)
[![Javadoc ](https://javadoc-emblem.rhcloud.com/doc/ch.dissem.jabit/jabit-core/badge.svg )](http://www.javadoc.io/doc/ch.dissem.jabit/jabit-core)
[![GitHub license ](https://img.shields.io/github/license/Dissem/Jabit.svg )](https://raw.githubusercontent.com/Dissem/Jabit/master/LICENSE)
[![Visit our IRC channel ](https://img.shields.io/badge/irc-%23jabit-blue.svg )](https://kiwiirc.com/client/irc.freenode.net/#jabit)
2015-03-20 14:24:12 +01:00
2015-07-03 14:47:25 +02:00
A Java implementation for the Bitmessage protocol. To build, use command `gradle build` or `./gradlew build` .
2015-03-31 21:06:42 +02:00
2016-02-24 16:53:11 +01:00
There are still some features missing, most notably acknowledgements. The API however should be stable, and it should work well enough for most use cases.
2015-05-26 17:23:45 +02:00
2016-02-06 17:27:12 +01:00
#### Master
[![Build Status ](https://travis-ci.org/Dissem/Jabit.svg?branch=master )](https://travis-ci.org/Dissem/Jabit) [![codecov.io ](https://codecov.io/github/Dissem/Jabit/coverage.svg?branch=master )](https://codecov.io/github/Dissem/Jabit?branch=master)
#### Develop
[![Build Status ](https://travis-ci.org/Dissem/Jabit.svg?branch=develop )](https://travis-ci.org/Dissem/Jabit?branch=develop) [![codecov.io ](https://codecov.io/github/Dissem/Jabit/coverage.svg?branch=develop )](https://codecov.io/github/Dissem/Jabit?branch=develop)
2015-03-31 21:06:42 +02:00
Security
--------
2015-06-18 22:17:38 +02:00
There are most probably some security issues, me programming this thing all by myself. Jabit doesn't do anything against timing attacks yet, for example. Please feel free to use the library, report bugs and maybe even help out. I hope the code is easy to understand and work with.
Project Status
--------------
2015-07-03 14:47:25 +02:00
2015-06-18 22:17:38 +02:00
Basically, everything needed for a working Bitmessage client is there:
* Creating new identities (private addresses)
* Adding contracts and subscriptions
* Receiving broadcasts
* Receiving messages
* Sending messages and broadcasts
* Managing outgoing and incoming connections
* Initialise and manage a registry of Bitmessage network nodes
* An easy to use API
* A command line demo application built using the API
2015-07-03 14:47:25 +02:00
Setup
-----
Add Jabit as Gradle dependency:
```Gradle
2016-01-24 09:38:12 +01:00
compile 'ch.dissem.jabit:jabit-core:1.0.0'
2015-07-03 14:47:25 +02:00
```
Unless you want to implement your own, also add the following:
```Gradle
2016-01-24 09:38:12 +01:00
compile 'ch.dissem.jabit:jabit-networking:1.0.0'
compile 'ch.dissem.jabit:jabit-repositories:1.0.0'
2016-01-29 11:06:39 +01:00
compile 'ch.dissem.jabit:jabit-cryptography-bouncy:1.0.0'
2015-07-03 14:47:25 +02:00
```
And if you want to import from or export to the Wallet Import Format (used by PyBitmessage) you might also want to add:
```Gradle
2016-01-24 09:38:12 +01:00
compile 'ch.dissem.jabit:jabit-wif:1.0.0'
2015-07-03 14:47:25 +02:00
```
2016-01-29 11:06:39 +01:00
For Android clients use `jabit-cryptography-spongy` instead of `jabit-cryptography-bouncy` .
2016-01-17 05:42:48 +01:00
2015-07-03 14:47:25 +02:00
Usage
-----
First, you'll need to create a `BitmessageContext` :
```Java
JdbcConfig jdbcConfig = new JdbcConfig();
BitmessageContext ctx = new BitmessageContext.Builder()
.addressRepo(new JdbcAddressRepository(jdbcConfig))
.inventory(new JdbcInventory(jdbcConfig))
.messageRepo(new JdbcMessageRepository(jdbcConfig))
.nodeRegistry(new MemoryNodeRegistry())
.networkHandler(new NetworkNode())
2016-01-10 13:38:32 +01:00
.cryptography(new BouncyCryptography())
2015-07-03 14:47:25 +02:00
.build();
```
This creates a simple context using a H2 database that will be created in the user's home directory. Next you'll need to
start the context and decide what happens if a message arrives:
```Java
ctx.startup(new BitmessageContext.Listener() {
@Override
public void receive(Plaintext plaintext) {
// TODO: Notify the user
}
});
```
Then you might want to create an identity
```Java
BitmessageAddress identity = ctx.createIdentity(false, Pubkey.Feature.DOES_ACK);
```
or add some contacts
```Java
BitmessageAddress contact = new BitmessageAddress("BM-2cTarrmjMdRicKZ4qQ8A13JhoR3Uq6Zh5j");
address.setAlias("Chris");
ctx.addContact(contact);
```
to which you can send some messages
```Java
ctx.send(identity, contact, "Test", "Hello Chris, this is a message.");
```