You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
master
feature/update-crowdin-translations
feature/repo-deprecation
closed_groups
dev
fix/empty-conversations
fix/conversation-deletion-issues
fix/control-messages-deleted
release/1.20.2
release/1.20.1
release/1.20.0
feature/strings-fixes
fix/emoji-reactions
SES360-time-date-formats
fix/emoji-reactions-crash
feature/debug-menu
release/1.19.2
SES-2624-android-api-28-save-crash-workaround
feature/icons-fix
feature/update-username-config
fix/proper-message-request-icon
feature/test-tag-poc
fix/replace-mlkit-with-zxing
feature/avatar-file-access
fix/ip2Country-out-of-memory
fix/path-animation
fix/fixing-tests-pointing-to-deleted-files
feature/convo-capitalised
feature/resource-cleanup
feature/removed-unneeded-api-checks
fix/username-saved
feature/clean-ups
feature/service-clean-up
feature/adding-back-fullscreen-intent-permission
feature/snode-version
fix/webrtc_call_service_when
fix/video-call-rotation-and-avatars
feature/new-translate-url
feature/compose-cleanup
pr/1127
remove-config-cheks
pr/1451-ime-issues
pr/1451-ui-tweaks
pr/1451-theming
pr/1451-buttons
revert-1328-fix-unknown-push-json
1.18.2
1.16.9
1.16.8
v5.2.3
v5.2.2
v5.2.1
v5.2.0
v5.1.9
v5.1.8
v5.1.7
v5.0.10
v5.1.6
v5.1.5
v5.1.4
v5.1.3
v5.1.2
v5.0.9
v5.1.1
v5.1.0
v5.0.8
v5.0.7
v5.0.6
v5.0.5
v5.0.4
v5.0.3
v5.0.2
v5.0.1
v5.0.0
v4.79.3
v4.79.2
v4.79.1
v4.79.0
v4.78.5
v4.78.4
v4.78.3
v4.78.2
v4.78.1
v4.78.0
v4.77.3
v4.77.2
v4.77.1
v4.77.0
v4.76.3
v4.76.2
v4.76.1
v4.76.0
v4.75.8
v4.75.7
v4.75.6
v4.75.5
v4.75.4
v4.75.3
v4.75.2
v4.75.1
v4.75.0
v4.74.3
v4.74.2
v4.74.1
v4.74.0
v4.73.4
v4.73.3
v4.73.2
v4.73.1
v4.73.0
v4.72.6
v4.72.5
v4.72.4
v4.72.3
v4.72.2
v4.72.1
v4.72.0
v4.71.5
v4.71.4
v4.71.3
v4.71.2
v4.71.1
v4.71.0
v4.70.5
v4.70.4
v4.70.3
v4.70.2
v4.70.1
v4.70.0
v4.69.6
v4.69.5
v4.69.4
v4.69.3
v4.69.2
v4.69.1
v4.69.0
v4.68.8
v4.68.7
v4.68.6
v4.68.5
v4.68.4
v4.68.3
v4.68.2
v4.68.1
v4.68.0
v4.67.3
v4.67.2
v4.67.1
v4.67.0
v4.66.8
v4.66.7
v4.66.6
v4.66.5
v4.66.3
v4.66.2
v4.66.1
v4.66.0
v4.65.2
v4.65.1
v4.65.0
v4.64.7
v4.64.6
v4.64.5
v4.64.4
v4.64.3
v4.64.2
v4.64.1
v4.64.0
v4.63.3
v4.63.2
v4.63.1
v4.63.0
v4.62.4
v4.62.3
v4.62.2
v4.62.1
v4.62.0
v4.61.6
v4.61.5
v4.61.4
v4.61.3
v4.61.2
v4.61.1
v4.61.0
v4.60.9
v4.60.8
v4.60.7
v4.60.6
v4.60.5
v4.59.11
v4.60.4
v4.60.3
v4.60.2
v4.60.1
v4.60.0
v4.59.10
v4.59.9
v4.59.8
v4.59.7
v4.59.6
v4.59.5
v4.59.4
v4.59.3
v4.59.2
v4.59.1
v4.59.0
v4.58.5
v4.58.4
v4.58.3
v4.58.2
v4.58.1
v4.58.0
v4.57.2
v4.57.1
v4.57.0
v4.56.4
v4.56.3
v4.56.2
v4.56.1
v4.56.0
v4.55.8
v4.55.7
v4.55.6
v4.55.5
v4.55.4
v4.55.3
v4.55.2
v4.55.1
v4.55.0
v4.54.3
v4.54.2
v4.54.1
v4.54.0
v4.53.7
v4.53.6
v4.53.5
v4.53.4
v4.53.3
v4.53.2
v4.53.1
v4.53.0
v4.52.4
v4.52.3
v4.52.2
v4.52.1
v4.52.0
v4.51.6
v4.51.5
v4.51.4
v4.51.3
v4.51.2-corrected
v4.51.1
v4.51.2
v4.51.0
v4.50.6
v4.50.5
v4.50.4
v4.50.3
v4.50.1
v4.50.2
v.4.50.1
v4.50.0
v4.49.18
v4.49.17
v4.49.16
v4.49.15
v4.49.14
v4.49.13
v4.49.12
v4.49.11
v4.49.10
v4.49.9
v4.49.8
v4.49.7
v4.49.6
v4.49.5
v4.49.4
v4.49.3
v4.49.2
v4.49.1
v4.49.0
v4.48.17
v4.48.16
v4.48.15
v4.48.14
v4.48.13
v4.48.12
v4.48.11
v4.48.10
v4.48.9
v4.48.8
v4.48.7
v4.47.7
v4.48.6
v4.48.5
v4.48.4
v4.48.3
v4.48.2
v4.48.1
v4.48.0
v4.47.6
v4.47.5
v4.47.4
v4.47.3
v4.47.2
v4.47.1
v4.47.0
v4.46.2
v4.46.1
v4.46.0
v4.45.2
v4.45.1
v4.45.0
v4.44.7
v4.44.6
v4.44.5
v4.44.4
v4.44.3
v4.44.2
v4.44.1
v4.44.0
v4.43.8
v4.43.7
v4.43.6
v4.43.5
v4.43.4
v4.43.3
v4.43.2
v4.43.1
v4.43.0
v4.42.3
v4.42.2
v4.42.1
v4.42.0
v4.41.6
v4.41.5
v4.41.4
v4.41.3
v4.41.2
v4.41.1
v4.41.0
v4.40.4
v4.40.3
v4.40.2
v4.40.1
v4.40.0
v4.39.4
v4.39.3
v4.39.2
v4.39.1
v4.39.0
v4.38.3
v4.38.2
v4.38.1
v4.38.0
v4.37.2
v4.37.1
v4.37.0
v4.36.2
v4.36.1
v4.36.0
v4.35.3
v4.35.2
v4.35.1
v4.35.0
v4.34.8
v4.34.7
v4.34.6
v4.34.5
v4.34.4
v4.34.3
v4.34.2
v4.34.1
v4.34.0
v4.33.5
v4.33.4
v4.33.3
v4.33.2
v4.33.1
v4.33.0
v4.32.8
v4.32.7
v4.32.6
v4.32.5
v4.32.4
v4.32.3
v4.32.2
v4.32.1
v4.32.0
v4.31.8
v4.31.7
v4.31.6
v4.31.5
v4.31.4
v4.31.3
v4.31.2
v4.31.1
v4.30.8
v4.31.0
v4.30.7
v4.30.6
v4.30.5
v4.30.4
v4.30.3
v4.30.2
v4.30.1
v4.30.0
v4.29.7
v4.29.6
v4.29.5
v4.29.4
v4.29.3
v4.29.2
v4.29.1
v4.29.0
v4.28.1
v4.28.0
v4.27.3
v4.27.2
v4.27.1
v4.27.0
v4.26.2
v4.26.1
v4.26.0
v4.25.10
v4.25.9
v4.25.8
v4.25.7
v4.25.6
v4.25.5
v4.25.4
v4.25.3
v4.25.2
v4.25.1
v4.25.0
v4.24.8
v4.24.7
v4.24.6
v4.24.5
v4.24.4
v4.24.3
v4.24.2
v4.24.1
v4.24.0
v4.23.4
v4.23.3
v4.23.2
v4.23.1
v4.23.0
v4.22.4
v4.22.3
v4.22.2
v4.22.1
v4.22.0
v4.21.6
v4.21.5
v4.21.4
v4.21.3
v4.21.2
v4.21.1
v4.21.0
v4.20.9
v4.20.8
v4.20.7
v4.20.6
v4.20.5
v4.20.4
v4.20.3
v4.20.2
v4.19.3
v4.19.2
v4.19.1
v4.18.3
v4.18.2
v4.18.1
v4.18.0
v4.17.5
v4.17.4
v4.17.3
v4.17.2
v4.17.1
v4.17.0
v4.16.9
v4.16.7
v4.16.6
v4.16.4
v4.16.3
v4.15.5
v4.15.3
v4.15.2
v4.15.1
v4.15.0
v4.14.10
v4.14.9
v4.14.8
v4.14.7
v4.14.6
v4.14.5
v4.14.4
v4.13.3
v4.14.2
v4.14.1
v4.14.0
v4.13.7
v4.13.6
v4.13.5
v4.13.4
v4.13.2
v4.13.1
v4.13.0
v4.12.3
v4.12.1
v4.11.5
v4.12.0
v4.11.3
v4.11.2
v4.11.1
v4.10.12
v4.10.11
v4.10.10
v4.10.9
v4.10.8
v4.10.7
v4.10.6
v4.10.5
v4.10.2
v4.10.1
v4.9.9
v4.9.8
v4.9.6
v4.9.5
v4.9.4
v4.9.3
v4.9.2
v4.9.1
v4.9.0
v4.8.1
v4.8.0
v4.7.4
v4.7.3
v4.7.2
v4.7.1
v4.7.0
v4.6.0
v4.5.3
v4.5.2
v4.5.0
v4.4.0
v4.3.2
v4.3.1
v4.3.0
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.0
v4.0.1
v4.0.0
v3.31.4
v3.31.2
v3.31.1
v3.31.0
v3.30.4
v3.30.3
v3.30.2
v3.30.1
v3.30.0
v3.29.6
v3.29.5
v3.29.4
v3.29.2
v3.28.4
v3.28.3
v3.28.2
v3.28.1
v3.28.0
v3.27.1
v3.27.0
v3.26.2
v3.26.1
v3.26.0
v3.25.4
v3.25.3
v3.25.2
v3.25.1
v3.25.0
v3.24.1
v3.24.0
v3.23.0
v3.22.2
v3.22.1
v3.22.0
v3.21.3
v3.21.2
v3.21.1
v3.21.0
v3.20.4
v3.20.3
v3.20.2
v3.20.1
v3.19.0
v3.18.3
v3.18.2
v3.18.1
v3.18.0
v3.17.0
v3.16.1
v3.16.0
v3.15.2
v3.15.1
v3.15.0
v3.14.2
v3.14.1
v3.14.0
v3.13.1
v3.13.0
v3.12.0
v1.8.6
v3.11.1
v3.11.0
v1.8.4
v3.10.0
v3.9.1
v3.9.0
v3.8.0
v3.7.2
v3.7.1
v3.7.0
v3.6.1
v3.6.0
v3.5.2
v3.5.1
v3.5.0
v3.4.2
v3.4.0
v3.3.3
v3.3.2
v1.8.2
v3.3.1
v3.3.0
v3.1.1
v3.1.0
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v1.8.1
v2.28.1
v2.28.0
v2.27.2
v2.27.1
v1.8.0
v1.7.2
v2.27.0
v2.26.5
v2.26.3
v2.26.2
v2.26.0
v2.25.3
v2.25.1
v2.25.0
v2.24.1
v1.6.2
v2.24.0
v2.23.3
v2.23.2
v2.32.2
v2.23.1
v2.23.0
v2.22.2
v2.22.1
v2.22.0
v2.21.0
v1.6.1
v2.19.1
v2.19.0
v2.18.2
v2.18.1
v2.18.0
v2.17.0
v2.16.4
v2.16.3
v1.5.0
v2.16.2
v2.16.1
v2.16.0
v1.4.0
v2.14.5
v2.14.4
v2.14.3
v2.14.2
v2.14.1
v2.14.0
v2.13.0
v2.12.0
v1.3.0
v2.11.1
v2.11.0
v2.10.2
v1.2.5
v2.10.1
v2.10.0
v2.9.3
v2.9.2
v2.9.1
v.1.2.4
v2.8.0
v1.2.3
v2.7.0-B1
v2.6.4
v1.2.2
v2.6.3
v2.6.2
v2.6.0
v1.2.0
v1.1.0
v1.0.0
v2.5.3
v2.5.2
v2.5.1
v2.4.2
v2.4.1
v2.4.0
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.0
v2.1.10
v2.1.9
v2.1.8
v2.1.7
v2.1.6
v2.1.4
v2.1.2
v2.1.1
v2.1.0
v2.0.8
v2.0.7
v2.0.6
v2.0.5
2.0.4
v2.0.3
v2.0.2
v2.0
v2.0.1
v1.0.6
v1.0.5
v1.0.4
v1.0.3
v1.0.2
v1.0.1
v1.0
v0.9.9.9
v0.9.9.8
v0.9.9.7
v0.9.9.6
v0.9.9.5
v0.9.9.4
v0.9.9.3
v0.9.9.2
v0.9.9.1
v0.9.8
v0.9.7
v0.9.6
v0.9.5
v0.9.4
v0.9.3
v0.9.2
v0.9.1
v0.9
v0.8.6
v0.8.5
v0.8.4
v0.8.3
v0.8.2
v0.8.1
v0.8
v0.7.4
v0.7.3
v0.7.2
v0.7
v0.6.2
v0.6.1
v0.6
v1.19.1
v1.19.0
cg-c1
audit-2
audit
1.9.1
1.9.0
1.8.1
1.8.0
1.7.4
1.7.3
1.7.1
1.7.0
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.12
1.6.11
1.6.10
1.6.1
1.6.0
1.5.4
1.5.3
1.5.2-beta
1.5.2
1.5.1-beta
1.5.0-beta
1.5.0
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1-beta
1.4.1
1.4.0-beta
1.4.0
1.3.2
1.3.1
1.3.0-alpha.1
1.3.0
1.20.2
1.20.1
1.20.0
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0-alpha.2
1.2.0-alpha-1
1.2.0
1.19.2
1.18.6
1.18.5
1.18.4
1.18.3
1.18.1
1.17.6
1.17.5
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.7
1.16.5
1.16.4
1.16.3
1.16.1
1.16.0
1.15.4
1.15.3
1.15.2
1.15.1
1.14.1
1.14.0
1.13.7
1.13.6
1.13.5
1.13.4
1.13.1
1.13.0
1.12.5
1.12.4
1.12.3
1.12.2
1.12.15
1.12.1
1.12.0
1.11.9
1.11.8
1.11.7
1.11.6
1.11.5
1.11.4
1.11.3
1.11.20
1.11.2
1.11.19
1.11.17
1.11.16
1.11.15
1.11.14
1.11.13
1.11.12
1.11.11
1.11.10
1.11.1
1.11.0
1.10.9
1.10.8
1.10.7
1.10.6
1.10.5
1.10.4
1.10.3
1.10.2
1.10.13
1.10.12
1.10.11
1.10.10
1.10.1
1.10.0
1.1.0-alpha.3
1.1.0-alpha.2
1.1.0-alpha.1
1.1.0
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.11
1.0.10
1.0.1
1.0.0-alpha.5
1.0.0-alpha.4
1.0.0-alpha.3
1.0.0-alpha.2
1.0.0-alpha.1
1.0.0
${ noResults }
4.0 KiB
4.0 KiB
libtextsecure-java
A Java library for communicating via TextSecure.
Implementing the Axolotl interfaces
The axolotl encryption protocol is a stateful protocol, so libtextsecure users
need to implement the storage interface AxolotlStore
, which handles load/store
of your key and session information to durable media.
Creating keys
IdentityKeyPair identityKey = KeyHelper.generateIdentityKeyPair();
List<PreKeyRecord> oneTimePreKeys = KeyHelper.generatePreKeys(100);
PreKeyRecord lastResortKey = KeyHelper.generateLastResortKey();
SignedPreKeyRecord signedPreKeyRecord = KeyHelper.generateSignedPreKey(identityKey, signedPreKeyId);
The above are then stored locally so that they're available for load via the AxolotlStore
.
Registering
At install time, clients need to register with the TextSecure server.
private final String URL = "https://my.textsecure.server.com";
private final TrustStore TRUST_STORE = new MyTrustStoreImpl();
private final String USERNAME = "+14151231234";
private final String PASSWORD = generateRandomPassword();
TextSecureAccountManager accountManager = new TextSecureAccountManager(URL, TRUST_STORE,
USERNAME, PASSWORD);
accountManager.requestSmsVerificationCode();
accountManager.verifyAccount(receivedSmsVerificationCode, generateRandomSignalingKey(),
false, generateRandomInstallId());
accountManager.setGcmId(Optional.of(GoogleCloudMessaging.getInstance(this).register(REGISTRATION_ID)));
accountManager.setPreKeys(identityKey.getPublic(), lastResortKey, signedPreKey, oneTimePreKeys);
Sending text messages
TextSecureMessageSender messageSender = new TextSecureMessageSender(URL, TRUST_STORE, USERNAME, PASSWORD,
localRecipientId, new MyAxolotlStore(),
Optional.absent());
long recipientId = getRecipientIdFor("+14159998888");
TextSecureAddress destination = new TextSecureAddress(recipientId, "+14159998888", null);
TextSecureMessage message = new TextSecureMessage(System.currentTimeMillis(), "Hello, world!");
messageSender.sendMessage(destination, message);
Sending media messages
TextSecureMessageSender messageSender = new TextSecureMessageSender(URL, TRUST_STORE, USERNAME, PASSWORD,
localRecipientId, new MyAxolotlStore(),
Optional.absent());
long recipientId = getRecipientIdFor("+14159998888");
TextSecureAddress destination = new TextSecureAddress(recipientId, "+14159998888", null);
File myAttachment = new File("/path/to/my.attachment");
FileInputStream attachmentStream = new FileInputStream(myAttachment);
TextSecureAttachment attachment = new TextSecureAttachmentStream(attachmentStream, "image/png", myAttachment.size());
TextSecureMessage message = new TextSecureMessage(System.currentTimeMillis(), attachment, "Hello, world!");
messageSender.sendMessage(destination, message);
Receiving messages
TextSecureMessageReceiver messageReceiver = new TextSecureMessageReceiver(URL, TRUST_STORE, USERNAME, PASSWORD, mySignalingKey);
TextSecureMessagePipe messagePipe;
try {
messagePipe = messageReciever.createMessagePipe();
while (listeningForMessages) {
TextSecureEnvelope envelope = messagePipe.read(timeout, timeoutTimeUnit);
TextSecureCipher cipher = new TextSecureCipher(new MyAxolotlStore(),
getRecipientIdFor(envelope.getSource()),
envelope.getSourceDevice());
TextSecureMessage message = cipher.decrypt(envelope);
System.out.println("Received message: " + message.getBody().get());
}
} finally {
if (messagePipe != null)
messagePipe.close();
}