org.whispersystems.util.Base64 Java Examples
The following examples show how to use
org.whispersystems.util.Base64.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: SignalServiceMessageSender.java From mollyim-android with GNU General Public License v3.0 | 6 votes |
private void sendMessage(VerifiedMessage message, Optional<UnidentifiedAccessPair> unidentifiedAccess) throws IOException, UntrustedIdentityException { byte[] nullMessageBody = DataMessage.newBuilder() .setBody(Base64.encodeBytes(Util.getRandomLengthBytes(140))) .build() .toByteArray(); NullMessage nullMessage = NullMessage.newBuilder() .setPadding(ByteString.copyFrom(nullMessageBody)) .build(); byte[] content = Content.newBuilder() .setNullMessage(nullMessage) .build() .toByteArray(); SendMessageResult result = sendMessage(message.getDestination(), getTargetUnidentifiedAccess(unidentifiedAccess), message.getTimestamp(), content, false); if (result.getSuccess().isNeedsSync()) { byte[] syncMessage = createMultiDeviceVerifiedContent(message, nullMessage.toByteArray()); sendMessage(localAddress, Optional.<UnidentifiedAccess>absent(), message.getTimestamp(), syncMessage, false); } }
Example #2
Source File: ResumableUploadSpec.java From mollyim-android with GNU General Public License v3.0 | 6 votes |
public static ResumableUploadSpec deserialize(String serializedSpec) throws ResumeLocationInvalidException { if (serializedSpec == null) return null; try { ResumableUploads.ResumableUpload resumableUpload = ResumableUploads.ResumableUpload.parseFrom(ByteString.copyFrom(Base64.decode(serializedSpec))); return new ResumableUploadSpec( resumableUpload.getSecretKey().toByteArray(), resumableUpload.getIv().toByteArray(), resumableUpload.getCdnKey(), resumableUpload.getCdnNumber(), resumableUpload.getLocation(), resumableUpload.getTimeout() ); } catch (IOException e) { throw new ResumeLocationInvalidException(); } }
Example #3
Source File: SignalServiceMessageSender.java From libsignal-service-java with GNU General Public License v3.0 | 6 votes |
private void sendMessage(VerifiedMessage message, Optional<UnidentifiedAccessPair> unidentifiedAccess) throws IOException, UntrustedIdentityException { byte[] nullMessageBody = DataMessage.newBuilder() .setBody(Base64.encodeBytes(Util.getRandomLengthBytes(140))) .build() .toByteArray(); NullMessage nullMessage = NullMessage.newBuilder() .setPadding(ByteString.copyFrom(nullMessageBody)) .build(); byte[] content = Content.newBuilder() .setNullMessage(nullMessage) .build() .toByteArray(); SendMessageResult result = sendMessage(message.getDestination(), getTargetUnidentifiedAccess(unidentifiedAccess), message.getTimestamp(), content, false); if (result.getSuccess().isNeedsSync()) { byte[] syncMessage = createMultiDeviceVerifiedContent(message, nullMessage.toByteArray()); sendMessage(localAddress, Optional.<UnidentifiedAccess>absent(), message.getTimestamp(), syncMessage, false); } }
Example #4
Source File: ServiceConfig.java From signal-cli with GNU General Public License v3.0 | 6 votes |
public static SignalServiceConfiguration createDefaultServiceConfiguration(String userAgent) { final Interceptor userAgentInterceptor = chain -> chain.proceed(chain.request().newBuilder() .header("User-Agent", userAgent) .build()); final List<Interceptor> interceptors = Collections.singletonList(userAgentInterceptor); final byte[] zkGroupServerPublicParams; try { zkGroupServerPublicParams = Base64.decode(zkGroupServerPublicParamsHex); } catch (IOException e) { throw new AssertionError(e); } return new SignalServiceConfiguration( new SignalServiceUrl[]{new SignalServiceUrl(URL, TRUST_STORE)}, makeSignalCdnUrlMapFor(new SignalCdnUrl[]{new SignalCdnUrl(CDN_URL, TRUST_STORE)}, new SignalCdnUrl[]{new SignalCdnUrl(CDN2_URL, TRUST_STORE)}), new SignalContactDiscoveryUrl[0], new SignalKeyBackupServiceUrl[]{new SignalKeyBackupServiceUrl(SIGNAL_KEY_BACKUP_URL, TRUST_STORE)}, new SignalStorageUrl[]{new SignalStorageUrl(STORAGE_URL, TRUST_STORE)}, interceptors, dns, zkGroupServerPublicParams ); }
Example #5
Source File: JsonSessionStore.java From signal-cli with GNU General Public License v3.0 | 6 votes |
@Override public void serialize(JsonSessionStore jsonSessionStore, JsonGenerator json, SerializerProvider serializerProvider) throws IOException { json.writeStartArray(); for (SessionInfo sessionInfo : jsonSessionStore.sessions) { json.writeStartObject(); if (sessionInfo.address.getNumber().isPresent()) { json.writeStringField("name", sessionInfo.address.getNumber().get()); } if (sessionInfo.address.getUuid().isPresent()) { json.writeStringField("uuid", sessionInfo.address.getUuid().get().toString()); } json.writeNumberField("deviceId", sessionInfo.deviceId); json.writeStringField("record", Base64.encodeBytes(sessionInfo.sessionRecord)); json.writeEndObject(); } json.writeEndArray(); }
Example #6
Source File: JsonIdentityKeyStore.java From signal-cli with GNU General Public License v3.0 | 6 votes |
@Override public void serialize(JsonIdentityKeyStore jsonIdentityKeyStore, JsonGenerator json, SerializerProvider serializerProvider) throws IOException { json.writeStartObject(); json.writeNumberField("registrationId", jsonIdentityKeyStore.getLocalRegistrationId()); json.writeStringField("identityKey", Base64.encodeBytes(jsonIdentityKeyStore.getIdentityKeyPair().serialize())); json.writeArrayFieldStart("trustedKeys"); for (Identity trustedKey : jsonIdentityKeyStore.identities) { json.writeStartObject(); if (trustedKey.getAddress().getNumber().isPresent()) { json.writeStringField("name", trustedKey.getAddress().getNumber().get()); } if (trustedKey.getAddress().getUuid().isPresent()) { json.writeStringField("uuid", trustedKey.getAddress().getUuid().get().toString()); } json.writeStringField("identityKey", Base64.encodeBytes(trustedKey.identityKey.serialize())); json.writeNumberField("trustLevel", trustedKey.trustLevel.ordinal()); json.writeNumberField("addedTimestamp", trustedKey.added.getTime()); json.writeEndObject(); } json.writeEndArray(); json.writeEndObject(); }
Example #7
Source File: JsonSignedPreKeyStore.java From signal-cli with GNU General Public License v3.0 | 6 votes |
@Override public JsonSignedPreKeyStore deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { JsonNode node = jsonParser.getCodec().readTree(jsonParser); Map<Integer, byte[]> preKeyMap = new HashMap<>(); if (node.isArray()) { for (JsonNode preKey : node) { Integer preKeyId = preKey.get("id").asInt(); try { preKeyMap.put(preKeyId, Base64.decode(preKey.get("record").asText())); } catch (IOException e) { System.out.println(String.format("Error while decoding prekey for: %s", preKeyId)); } } } JsonSignedPreKeyStore keyStore = new JsonSignedPreKeyStore(); keyStore.addSignedPreKeys(preKeyMap); return keyStore; }
Example #8
Source File: JsonPreKeyStore.java From signal-cli with GNU General Public License v3.0 | 6 votes |
@Override public JsonPreKeyStore deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { JsonNode node = jsonParser.getCodec().readTree(jsonParser); Map<Integer, byte[]> preKeyMap = new HashMap<>(); if (node.isArray()) { for (JsonNode preKey : node) { Integer preKeyId = preKey.get("id").asInt(); try { preKeyMap.put(preKeyId, Base64.decode(preKey.get("record").asText())); } catch (IOException e) { System.out.println(String.format("Error while decoding prekey for: %s", preKeyId)); } } } JsonPreKeyStore keyStore = new JsonPreKeyStore(); keyStore.addPreKeys(preKeyMap); return keyStore; }
Example #9
Source File: SignalServiceAccountManager.java From mollyim-android with GNU General Public License v3.0 | 5 votes |
public void setProfileName(ProfileKey key, String name) throws IOException { if (FeatureFlags.DISALLOW_OLD_PROFILE_SETTING) { throw new AssertionError(); } if (name == null) name = ""; String ciphertextName = Base64.encodeBytesWithoutPadding(new ProfileCipher(key).encryptName(name.getBytes(StandardCharsets.UTF_8), ProfileCipher.NAME_PADDED_LENGTH)); this.pushServiceSocket.setProfileName(ciphertextName); }
Example #10
Source File: SignalServiceAccountManager.java From mollyim-android with GNU General Public License v3.0 | 5 votes |
private String createDirectoryServerToken(String e164number, boolean urlSafe) { try { MessageDigest digest = MessageDigest.getInstance("SHA1"); byte[] token = Util.trim(digest.digest(e164number.getBytes()), 10); String encoded = Base64.encodeBytesWithoutPadding(token); if (urlSafe) return encoded.replace('+', '-').replace('/', '_'); else return encoded; } catch (NoSuchAlgorithmException e) { throw new AssertionError(e); } }
Example #11
Source File: SignalServiceEnvelope.java From mollyim-android with GNU General Public License v3.0 | 5 votes |
private SecretKeySpec getCipherKey(String signalingKey) throws IOException { byte[] signalingKeyBytes = Base64.decode(signalingKey); byte[] cipherKey = new byte[CIPHER_KEY_SIZE]; System.arraycopy(signalingKeyBytes, 0, cipherKey, 0, cipherKey.length); return new SecretKeySpec(cipherKey, "AES"); }
Example #12
Source File: SignalServiceEnvelope.java From mollyim-android with GNU General Public License v3.0 | 5 votes |
private SecretKeySpec getMacKey(String signalingKey) throws IOException { byte[] signalingKeyBytes = Base64.decode(signalingKey); byte[] macKey = new byte[MAC_KEY_SIZE]; System.arraycopy(signalingKeyBytes, CIPHER_KEY_SIZE, macKey, 0, macKey.length); return new SecretKeySpec(macKey, "HmacSHA256"); }
Example #13
Source File: SignalServiceMessagePipe.java From mollyim-android with GNU General Public License v3.0 | 5 votes |
public Future<SendMessageResponse> send(OutgoingPushMessageList list, Optional<UnidentifiedAccess> unidentifiedAccess) throws IOException { List<String> headers = new LinkedList<String>() {{ add("content-type:application/json"); }}; if (unidentifiedAccess.isPresent()) { headers.add("Unidentified-Access-Key:" + Base64.encodeBytes(unidentifiedAccess.get().getUnidentifiedAccessKey())); } WebSocketRequestMessage requestMessage = WebSocketRequestMessage.newBuilder() .setId(new SecureRandom().nextLong()) .setVerb("PUT") .setPath(String.format("/v1/messages/%s", list.getDestination())) .addAllHeaders(headers) .setBody(ByteString.copyFrom(JsonUtil.toJson(list).getBytes())) .build(); ListenableFuture<WebsocketResponse> response = websocket.sendRequest(requestMessage); return FutureTransformers.map(response, value -> { if (value.getStatus() < 200 || value.getStatus() >= 300) { throw new IOException("Non-successful response: " + value.getStatus()); } if (Util.isEmpty(value.getBody())) { return new SendMessageResponse(false); } else { return JsonUtil.fromJson(value.getBody(), SendMessageResponse.class); } }); }
Example #14
Source File: SigningCertificate.java From mollyim-android with GNU General Public License v3.0 | 5 votes |
public void verifySignature(String body, String encodedSignature) throws SignatureException { try { Signature signature = Signature.getInstance("SHA256withRSA"); signature.initVerify(path.getCertificates().get(0)); signature.update(body.getBytes()); if (!signature.verify(Base64.decode(encodedSignature.getBytes()))) { throw new SignatureException("Signature verification failed."); } } catch (NoSuchAlgorithmException | InvalidKeyException e) { throw new AssertionError(e); } }
Example #15
Source File: PushServiceSocket.java From mollyim-android with GNU General Public License v3.0 | 5 votes |
private String getAuthorizationHeader(CredentialsProvider credentialsProvider) { try { String identifier = credentialsProvider.getUuid() != null ? credentialsProvider.getUuid().toString() : credentialsProvider.getE164(); return "Basic " + Base64.encodeBytes((identifier + ":" + credentialsProvider.getPassword()).getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { throw new AssertionError(e); } }
Example #16
Source File: PreKeyEntity.java From mollyim-android with GNU General Public License v3.0 | 5 votes |
@Override public ECPublicKey deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { try { return Curve.decodePoint(Base64.decodeWithoutPadding(p.getValueAsString()), 0); } catch (InvalidKeyException e) { throw new IOException(e); } }
Example #17
Source File: ResumableUploadSpec.java From mollyim-android with GNU General Public License v3.0 | 5 votes |
public String serialize() { ResumableUploads.ResumableUpload.Builder builder = ResumableUploads.ResumableUpload.newBuilder() .setSecretKey(ByteString.copyFrom(getSecretKey())) .setIv(ByteString.copyFrom(getIV())) .setTimeout(getExpirationTimestamp()) .setCdnNumber(getCdnNumber()) .setCdnKey(getCdnKey()) .setLocation(getResumeLocation()) .setTimeout(getExpirationTimestamp()); return Base64.encodeBytes(builder.build().toByteArray()); }
Example #18
Source File: JsonUtil.java From mollyim-android with GNU General Public License v3.0 | 5 votes |
@Override public IdentityKey deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { try { return new IdentityKey(Base64.decodeWithoutPadding(p.getValueAsString()), 0); } catch (InvalidKeyException e) { throw new IOException(e); } }
Example #19
Source File: SigningCertificateTest.java From mollyim-android with GNU General Public License v3.0 | 5 votes |
public void testBadSignature() throws CertificateException, NoSuchAlgorithmException, IOException, KeyStoreException, CertPathValidatorException, SignatureException { String certificateChain = URLDecoder.decode("-----BEGIN%20CERTIFICATE-----%0AMIIEoTCCAwmgAwIBAgIJANEHdl0yo7CWMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV%0ABAYTAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExGjAYBgNV%0ABAoMEUludGVsIENvcnBvcmF0aW9uMTAwLgYDVQQDDCdJbnRlbCBTR1ggQXR0ZXN0%0AYXRpb24gUmVwb3J0IFNpZ25pbmcgQ0EwHhcNMTYxMTIyMDkzNjU4WhcNMjYxMTIw%0AMDkzNjU4WjB7MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFDASBgNVBAcMC1Nh%0AbnRhIENsYXJhMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjEtMCsGA1UEAwwk%0ASW50ZWwgU0dYIEF0dGVzdGF0aW9uIFJlcG9ydCBTaWduaW5nMIIBIjANBgkqhkiG%0A9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqXot4OZuphR8nudFrAFiaGxxkgma/Es/BA%2Bt%0AbeCTUR106AL1ENcWA4FX3K%2BE9BBL0/7X5rj5nIgX/R/1ubhkKWw9gfqPG3KeAtId%0Acv/uTO1yXv50vqaPvE1CRChvzdS/ZEBqQ5oVvLTPZ3VEicQjlytKgN9cLnxbwtuv%0ALUK7eyRPfJW/ksddOzP8VBBniolYnRCD2jrMRZ8nBM2ZWYwnXnwYeOAHV%2BW9tOhA%0AImwRwKF/95yAsVwd21ryHMJBcGH70qLagZ7Ttyt%2B%2BqO/6%2BKAXJuKwZqjRlEtSEz8%0AgZQeFfVYgcwSfo96oSMAzVr7V0L6HSDLRnpb6xxmbPdqNol4tQIDAQABo4GkMIGh%0AMB8GA1UdIwQYMBaAFHhDe3amfrzQr35CN%2Bs1fDuHAVE8MA4GA1UdDwEB/wQEAwIG%0AwDAMBgNVHRMBAf8EAjAAMGAGA1UdHwRZMFcwVaBToFGGT2h0dHA6Ly90cnVzdGVk%0Ac2VydmljZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML1NHWC9BdHRlc3RhdGlvblJl%0AcG9ydFNpZ25pbmdDQS5jcmwwDQYJKoZIhvcNAQELBQADggGBAGcIthtcK9IVRz4r%0ARq%2BZKE%2B7k50/OxUsmW8aavOzKb0iCx07YQ9rzi5nU73tME2yGRLzhSViFs/LpFa9%0AlpQL6JL1aQwmDR74TxYGBAIi5f4I5TJoCCEqRHz91kpG6Uvyn2tLmnIdJbPE4vYv%0AWLrtXXfFBSSPD4Afn7%2B3/XUggAlc7oCTizOfbbtOFlYA4g5KcYgS1J2ZAeMQqbUd%0AZseZCcaZZZn65tdqee8UXZlDvx0%2BNdO0LR%2B5pFy%2BjuM0wWbu59MvzcmTXbjsi7HY%0A6zd53Yq5K244fwFHRQ8eOB0IWB%2B4PfM7FeAApZvlfqlKOlLcZL2uyVmzRkyR5yW7%0A2uo9mehX44CiPJ2fse9Y6eQtcfEhMPkmHXI01sN%2BKwPbpA39%2BxOsStjhP9N1Y1a2%0AtQAVo%2ByVgLgV2Hws73Fc0o3wC78qPEA%2Bv2aRs/Be3ZFDgDyghc/1fgU%2B7C%2BP6kbq%0Ad4poyb6IW8KCJbxfMJvkordNOgOUUxndPHEi/tb/U7uLjLOgPA%3D%3D%0A-----END%20CERTIFICATE-----%0A-----BEGIN%20CERTIFICATE-----%0AMIIFSzCCA7OgAwIBAgIJANEHdl0yo7CUMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV%0ABAYTAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExGjAYBgNV%0ABAoMEUludGVsIENvcnBvcmF0aW9uMTAwLgYDVQQDDCdJbnRlbCBTR1ggQXR0ZXN0%0AYXRpb24gUmVwb3J0IFNpZ25pbmcgQ0EwIBcNMTYxMTE0MTUzNzMxWhgPMjA0OTEy%0AMzEyMzU5NTlaMH4xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwL%0AU2FudGEgQ2xhcmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMTAwLgYDVQQD%0ADCdJbnRlbCBTR1ggQXR0ZXN0YXRpb24gUmVwb3J0IFNpZ25pbmcgQ0EwggGiMA0G%0ACSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCfPGR%2BtXc8u1EtJzLA10Feu1Wg%2Bp7e%0ALmSRmeaCHbkQ1TF3Nwl3RmpqXkeGzNLd69QUnWovYyVSndEMyYc3sHecGgfinEeh%0ArgBJSEdsSJ9FpaFdesjsxqzGRa20PYdnnfWcCTvFoulpbFR4VBuXnnVLVzkUvlXT%0AL/TAnd8nIZk0zZkFJ7P5LtePvykkar7LcSQO85wtcQe0R1Raf/sQ6wYKaKmFgCGe%0ANpEJUmg4ktal4qgIAxk%2BQHUxQE42sxViN5mqglB0QJdUot/o9a/V/mMeH8KvOAiQ%0AbyinkNndn%2BBgk5sSV5DFgF0DffVqmVMblt5p3jPtImzBIH0QQrXJq39AT8cRwP5H%0AafuVeLHcDsRp6hol4P%2BZFIhu8mmbI1u0hH3W/0C2BuYXB5PC%2B5izFFh/nP0lc2Lf%0A6rELO9LZdnOhpL1ExFOq9H/B8tPQ84T3Sgb4nAifDabNt/zu6MmCGo5U8lwEFtGM%0ARoOaX4AS%2B909x00lYnmtwsDVWv9vBiJCXRsCAwEAAaOByTCBxjBgBgNVHR8EWTBX%0AMFWgU6BRhk9odHRwOi8vdHJ1c3RlZHNlcnZpY2VzLmludGVsLmNvbS9jb250ZW50%0AL0NSTC9TR1gvQXR0ZXN0YXRpb25SZXBvcnRTaWduaW5nQ0EuY3JsMB0GA1UdDgQW%0ABBR4Q3t2pn680K9%2BQjfrNXw7hwFRPDAfBgNVHSMEGDAWgBR4Q3t2pn680K9%2BQjfr%0ANXw7hwFRPDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADANBgkq%0AhkiG9w0BAQsFAAOCAYEAeF8tYMXICvQqeXYQITkV2oLJsp6J4JAqJabHWxYJHGir%0AIEqucRiJSSx%2BHjIJEUVaj8E0QjEud6Y5lNmXlcjqRXaCPOqK0eGRz6hi%2BripMtPZ%0AsFNaBwLQVV905SDjAzDzNIDnrcnXyB4gcDFCvwDFKKgLRjOB/WAqgscDUoGq5ZVi%0AzLUzTqiQPmULAQaB9c6Oti6snEFJiCQ67JLyW/E83/frzCmO5Ru6WjU4tmsmy8Ra%0AUd4APK0wZTGtfPXU7w%2BIBdG5Ez0kE1qzxGQaL4gINJ1zMyleDnbuS8UicjJijvqA%0A152Sq049ESDz%2B1rRGc2NVEqh1KaGXmtXvqxXcTB%2BLjy5Bw2ke0v8iGngFBPqCTVB%0A3op5KBG3RjbF6RRSzwzuWfL7QErNC8WEy5yDVARzTA5%2BxmBc388v9Dm21HGfcC8O%0ADD%2BgT9sSpssq0ascmvH49MOgjt1yoysLtdCtJW/9FZpoOypaHx0R%2BmJTLwPXVMrv%0ADaVzWh5aiEx%2BidkSGMnX%0A-----END%20CERTIFICATE-----%0A"); String signature = "Kn2Ya2T039qvEWIzIQeSksNyyCQIkcVjciClcp3a6C766dJANXxLLIn6CfyvUZddMtePrTOLpC2e5QTQxB4RwtWmFfr7nxRdFUtA3dH2DAQL5DqqlmPv46ZWSPfiiOXUsu8vNgX3Z4Znt4Q+dIPIquNPY8ZmiAcpKR7n2K3QtabgOnJ2EyngabY3LMQTtriXbZjpl53ynhVhV1rciMdvMaTz4DUYt7gKi+KeNd3CBFSev+eTgYPC3em96J/3bfVR+wC5m3JGbIBCrwAsbO05JkiNIMck3s+p4d/hwiABR75EplxaWmGgIm6VvUKtGhdJ/cNrmF0nxMX6Vi6N2WaLTA=="; String signatureBody = "{\"id\":\"287419896494669543891634765983074535548\",\"timestamp\":\"2019-03-11T20:01:21.658293\",\"version\":3,\"isvEnclaveQuoteStatus\":\"OK\",\"isvEnclaveQuoteBody\":\"AgAAADILAAAIAAcAAAAAAPiLWcRSSA3shraxepsGV9qF4zYUPJgE42ZZZXS2G9zaBQUCBP//AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAAAAAAAM1s/DQpN7I7G907v5chqlYVrJ/1CnXFUn1EHNMnaCbJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrzm117Qj8NlEllyDkV4Pae4UgsPjgVXtAA5UsG90gVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHgz6GaO6bkxfPLBYcR5rEf9Itrt81OEanXteSMcd/BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"}"; KeyStore keyStore = KeyStore.getInstance("JKS"); keyStore.load(getClass().getResourceAsStream("/ias.jks"), "whisper".toCharArray()); SigningCertificate certificate = new SigningCertificate(certificateChain, keyStore); byte[] decodedSignature = Base64.decode(signature); for (int i=0;i<signature.length();i++) { for (int j=0;i<8;i++) { byte[] malformedSignature = new byte[decodedSignature.length]; System.arraycopy(decodedSignature, 0, malformedSignature, 0, decodedSignature.length); malformedSignature[i] ^= (0x01 << j); try { certificate.verifySignature(signatureBody, Base64.encodeBytes(malformedSignature)); throw new AssertionError("Signature verification should fail!"); } catch (SignatureException e) { // good } } } }
Example #20
Source File: EncryptedPreferences.java From mollyim-android with GNU General Public License v3.0 | 5 votes |
static private byte[] decrypt(String key, String encryptedValue, MasterCipher masterCipher) { try { return masterCipher.decrypt(Base64.decode(encryptedValue), key.getBytes(UTF_8)); } catch (GeneralSecurityException | IOException e) { throw new SecurityException("Could not decrypt '" + key + "' value. " + e.getMessage(), e); } }
Example #21
Source File: AudioHash.java From mollyim-android with GNU General Public License v3.0 | 5 votes |
public static @Nullable AudioHash parseOrNull(@Nullable String hash) { if (hash == null) return null; try { return new AudioHash(hash, AudioWaveFormData.parseFrom(Base64.decode(hash))); } catch (IOException e) { return null; } }
Example #22
Source File: SignalServiceAccountManager.java From libsignal-service-java with GNU General Public License v3.0 | 5 votes |
public void setProfileName(byte[] key, String name) throws IOException { if (name == null) name = ""; String ciphertextName = Base64.encodeBytesWithoutPadding(new ProfileCipher(key).encryptName(name.getBytes("UTF-8"), ProfileCipher.NAME_PADDED_LENGTH)); this.pushServiceSocket.setProfileName(ciphertextName); }
Example #23
Source File: SignalServiceAccountManager.java From libsignal-service-java with GNU General Public License v3.0 | 5 votes |
private String createDirectoryServerToken(String e164number, boolean urlSafe) { try { MessageDigest digest = MessageDigest.getInstance("SHA1"); byte[] token = Util.trim(digest.digest(e164number.getBytes()), 10); String encoded = Base64.encodeBytesWithoutPadding(token); if (urlSafe) return encoded.replace('+', '-').replace('/', '_'); else return encoded; } catch (NoSuchAlgorithmException e) { throw new AssertionError(e); } }
Example #24
Source File: SignalServiceEnvelope.java From libsignal-service-java with GNU General Public License v3.0 | 5 votes |
private SecretKeySpec getCipherKey(String signalingKey) throws IOException { byte[] signalingKeyBytes = Base64.decode(signalingKey); byte[] cipherKey = new byte[CIPHER_KEY_SIZE]; System.arraycopy(signalingKeyBytes, 0, cipherKey, 0, cipherKey.length); return new SecretKeySpec(cipherKey, "AES"); }
Example #25
Source File: SignalServiceEnvelope.java From libsignal-service-java with GNU General Public License v3.0 | 5 votes |
private SecretKeySpec getMacKey(String signalingKey) throws IOException { byte[] signalingKeyBytes = Base64.decode(signalingKey); byte[] macKey = new byte[MAC_KEY_SIZE]; System.arraycopy(signalingKeyBytes, CIPHER_KEY_SIZE, macKey, 0, macKey.length); return new SecretKeySpec(macKey, "HmacSHA256"); }
Example #26
Source File: SignalServiceMessagePipe.java From libsignal-service-java with GNU General Public License v3.0 | 5 votes |
public SignalServiceProfile getProfile(SignalServiceAddress address, Optional<UnidentifiedAccess> unidentifiedAccess) throws IOException { try { List<String> headers = new LinkedList<>(); if (unidentifiedAccess.isPresent()) { headers.add("Unidentified-Access-Key:" + Base64.encodeBytes(unidentifiedAccess.get().getUnidentifiedAccessKey())); } WebSocketRequestMessage requestMessage = WebSocketRequestMessage.newBuilder() .setId(SecureRandom.getInstance("SHA1PRNG").nextLong()) .setVerb("GET") .setPath(String.format("/v1/profile/%s", address.getIdentifier())) .addAllHeaders(headers) .build(); Pair<Integer, String> response = websocket.sendRequest(requestMessage).get(10, TimeUnit.SECONDS); if (response.first() < 200 || response.first() >= 300) { throw new IOException("Non-successful response: " + response.first()); } return JsonUtil.fromJson(response.second(), SignalServiceProfile.class); } catch (NoSuchAlgorithmException nsae) { throw new AssertionError(nsae); } catch (InterruptedException | ExecutionException | TimeoutException e) { throw new IOException(e); } }
Example #27
Source File: SigningCertificate.java From libsignal-service-java with GNU General Public License v3.0 | 5 votes |
public void verifySignature(String body, String encodedSignature) throws SignatureException { try { Signature signature = Signature.getInstance("SHA256withRSA"); signature.initVerify(path.getCertificates().get(0)); signature.update(body.getBytes()); if (!signature.verify(Base64.decode(encodedSignature.getBytes()))) { throw new SignatureException("Signature verification failed."); } } catch (NoSuchAlgorithmException | InvalidKeyException e) { throw new AssertionError(e); } }
Example #28
Source File: PushServiceSocket.java From libsignal-service-java with GNU General Public License v3.0 | 5 votes |
private String getAuthorizationHeader(CredentialsProvider credentialsProvider) { try { String identifier = credentialsProvider.getUuid() != null ? credentialsProvider.getUuid().toString() : credentialsProvider.getE164(); return "Basic " + Base64.encodeBytes((identifier + ":" + credentialsProvider.getPassword()).getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { throw new AssertionError(e); } }
Example #29
Source File: PreKeyEntity.java From libsignal-service-java with GNU General Public License v3.0 | 5 votes |
@Override public ECPublicKey deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { try { return Curve.decodePoint(Base64.decodeWithoutPadding(p.getValueAsString()), 0); } catch (InvalidKeyException e) { throw new IOException(e); } }
Example #30
Source File: JsonUtil.java From libsignal-service-java with GNU General Public License v3.0 | 5 votes |
@Override public IdentityKey deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { try { return new IdentityKey(Base64.decodeWithoutPadding(p.getValueAsString()), 0); } catch (InvalidKeyException e) { throw new IOException(e); } }