for (BitmessageAddress address : addressRepository.getIdentities()) { streams.add(address.getStream()); for (BitmessageAddress address : addressRepository.getSubscriptions()) { streams.add(address.getStream()); proofOfWorkRepository, proofOfWorkService, proofOfWorkEngine, customCommandHandler, builder.labeler, networkListener); for (BitmessageAddress identity : addressRepository.getIdentities()) { streams.add(identity.getStream());
public WifImporter importAll() { for (BitmessageAddress identity : identities) { ctx.addresses().save(identity); } return this; }
protected void safeSenderIfNecessary(Plaintext message) { if (message.getId() == null) { BitmessageAddress savedAddress = ctx.getAddressRepository().getAddress(message.getFrom().getAddress()); if (savedAddress == null) { ctx.getAddressRepository().save(message.getFrom()); } else if (savedAddress.getPubkey() == null && message.getFrom().getPubkey() != null) { savedAddress.setPubkey(message.getFrom().getPubkey()); ctx.getAddressRepository().save(savedAddress); } } }
if (pubkey instanceof V4Pubkey) { V4Pubkey v4Pubkey = (V4Pubkey) pubkey; address = ctx.getAddressRepo().findContact(v4Pubkey.getTag()); if (address != null) { v4Pubkey.decrypt(address.getPublicDecryptionKey()); address = ctx.getAddressRepo().findContact(pubkey.getRipe()); ctx.getAddressRepo().save(address); List<Plaintext> messages = ctx.getMessageRepository().findMessages(Plaintext.Status.PUBKEY_REQUESTED, address); LOG.debug("Sending " + messages.size() + " messages for contact " + address);
public WifExporter addAll() { for (BitmessageAddress identity : ctx.addresses().getIdentities()) { addIdentity(identity); } return this; }
protected void receive(ObjectMessage object, GetPubkey getPubkey) { BitmessageAddress identity = ctx.getAddressRepo().findIdentity(getPubkey.getRipeTag()); if (identity != null && identity.getPrivateKey() != null) { LOG.debug("Got pubkey request for identity " + identity); ctx.sendPubkey(identity, object.getStream()); } }
protected void receive(ObjectMessage object, Broadcast broadcast) throws IOException { byte[] tag = broadcast instanceof V5Broadcast ? ((V5Broadcast) broadcast).getTag() : null; for (BitmessageAddress subscription : ctx.getAddressRepository().getSubscriptions(broadcast.getVersion())) { if (tag != null && !Arrays.equals(tag, subscription.getTag())) { continue; } try { broadcast.decrypt(subscription.getPublicDecryptionKey()); if (!object.isSignatureValid(broadcast.getPlaintext().getFrom().getPubkey())) { LOG.warn("Broadcast with IV " + object.getInventoryVector() + " was successfully decrypted, but signature check failed. Ignoring."); } else { receive(object.getInventoryVector(), broadcast.getPlaintext()); } } catch (DecryptionFailedException ignore) { } } }
protected void receive(ObjectMessage object, Pubkey pubkey) throws IOException { BitmessageAddress address; try { if (pubkey instanceof V4Pubkey) { V4Pubkey v4Pubkey = (V4Pubkey) pubkey; address = ctx.getAddressRepository().findContact(v4Pubkey.getTag()); if (address != null) { v4Pubkey.decrypt(address.getPublicDecryptionKey()); } } else { address = ctx.getAddressRepository().findContact(pubkey.getRipe()); } if (address != null) { updatePubkey(address, pubkey); } } catch (DecryptionFailedException ignore) { } }
builder.id(id); builder.IV(new InventoryVector(iv)); builder.from(ctx.getAddressRepository().getAddress(rs.getString("sender"))); builder.to(ctx.getAddressRepository().getAddress(rs.getString("recipient"))); builder.ackData(rs.getBytes("ack_data")); builder.sent(rs.getLong("sent"));
/** * Be aware that if the pubkey already exists in the inventory, the metods will not request it and the callback * for freshly received pubkeys will not be called. Instead the pubkey is added to the contact and stored on DB. */ public void requestPubkey(final BitmessageAddress contact) { BitmessageAddress stored = addressRepository.getAddress(contact.getAddress()); tryToFindMatchingPubkey(contact); if (contact.getPubkey() != null) { if (stored != null) { stored.setPubkey(contact.getPubkey()); addressRepository.save(stored); } else { addressRepository.save(contact); } return; } if (stored == null) { addressRepository.save(contact); } long expires = UnixTime.now(TTL.getpubkey()); LOG.info("Expires at " + expires); final ObjectMessage request = new ObjectMessage.Builder() .stream(contact.getStream()) .expiresTime(expires) .payload(new GetPubkey(contact)) .build(); proofOfWorkService.doProofOfWork(request); }
protected void receive(ObjectMessage object, Msg msg) throws IOException { for (BitmessageAddress identity : ctx.getAddressRepository().getIdentities()) { try { msg.decrypt(identity.getPrivateKey().getPrivateEncryptionKey()); Plaintext plaintext = msg.getPlaintext(); plaintext.setTo(identity); if (!object.isSignatureValid(plaintext.getFrom().getPubkey())) { LOG.warn("Msg with IV " + object.getInventoryVector() + " was successfully decrypted, but signature check failed. Ignoring."); } else { receive(object.getInventoryVector(), plaintext); } break; } catch (DecryptionFailedException ignore) { } } }
protected void receive(ObjectMessage object, GetPubkey getPubkey) { BitmessageAddress identity = ctx.getAddressRepository().findIdentity(getPubkey.getRipeTag()); if (identity != null && identity.getPrivateKey() != null && !identity.isChan()) { LOG.info("Got pubkey request for identity " + identity); // FIXME: only send pubkey if it wasn't sent in the last 28 days ctx.sendPubkey(identity, object.getStream()); } }
protected void receive(ObjectMessage object, Broadcast broadcast) throws IOException { byte[] tag = broadcast instanceof V5Broadcast ? ((V5Broadcast) broadcast).getTag() : null; for (BitmessageAddress subscription : ctx.getAddressRepo().getSubscriptions(broadcast.getVersion())) { if (tag != null && !Arrays.equals(tag, subscription.getTag())) { continue; } try { broadcast.decrypt(subscription.getPublicDecryptionKey()); if (!object.isSignatureValid(broadcast.getPlaintext().getFrom().getPubkey())) { LOG.warn("Broadcast with IV " + object.getInventoryVector() + " was successfully decrypted, but signature check failed. Ignoring."); } else { broadcast.getPlaintext().setStatus(RECEIVED); broadcast.getPlaintext().addLabels(ctx.getMessageRepository().getLabels(Label.Type.INBOX, Label.Type.BROADCAST, Label.Type.UNREAD)); broadcast.getPlaintext().setInventoryVector(object.getInventoryVector()); ctx.getMessageRepository().save(broadcast.getPlaintext()); listener.receive(broadcast.getPlaintext()); } } catch (DecryptionFailedException ignore) { } } } }
public WifImporter importAll(Collection<BitmessageAddress> identities) { for (BitmessageAddress identity : identities) { ctx.addresses().save(identity); } return this; }
private void tryToFindMatchingPubkey(BitmessageAddress address) { BitmessageAddress stored = addressRepository.getAddress(address.getAddress()); if (stored != null) { address.setAlias(stored.getAlias()); if (object.isSignatureValid(v4Pubkey)) { address.setPubkey(v4Pubkey); addressRepository.save(address); break; } else { if (Arrays.equals(pubkey.getRipe(), address.getRipe())) { address.setPubkey(pubkey); addressRepository.save(address); break;
protected void receive(ObjectMessage object, Msg msg) throws IOException { for (BitmessageAddress identity : ctx.getAddressRepo().getIdentities()) { try { msg.decrypt(identity.getPrivateKey().getPrivateEncryptionKey()); msg.getPlaintext().setTo(identity); if (!object.isSignatureValid(msg.getPlaintext().getFrom().getPubkey())) { LOG.warn("Msg with IV " + object.getInventoryVector() + " was successfully decrypted, but signature check failed. Ignoring."); } else { msg.getPlaintext().setStatus(RECEIVED); msg.getPlaintext().addLabels(ctx.getMessageRepository().getLabels(Label.Type.INBOX, Label.Type.UNREAD)); msg.getPlaintext().setInventoryVector(object.getInventoryVector()); ctx.getMessageRepository().save(msg.getPlaintext()); listener.receive(msg.getPlaintext()); } break; } catch (DecryptionFailedException ignore) { } } }
public WifImporter importIdentity(BitmessageAddress identity) { ctx.addresses().save(identity); return this; } }
public BitmessageAddress createChan(String passphrase) { // FIXME: hardcoded stream number BitmessageAddress chan = BitmessageAddress.chan(1, passphrase); ctx.getAddressRepository().save(chan); return chan; }
public List<BitmessageAddress> createDeterministicAddresses( String passphrase, int numberOfAddresses, long version, long stream, boolean shorter) { List<BitmessageAddress> result = BitmessageAddress.deterministic( passphrase, numberOfAddresses, version, stream, shorter); for (int i = 0; i < result.size(); i++) { BitmessageAddress address = result.get(i); address.setAlias("deterministic (" + (i + 1) + ")"); ctx.getAddressRepository().save(address); } return result; }
public void addSubscribtion(BitmessageAddress address) { address.setSubscribed(true); ctx.getAddressRepository().save(address); tryToFindBroadcastsForAddress(address); }