Java Code Examples for org.whispersystems.util.Base64

The following examples show how to use org.whispersystems.util.Base64. These examples are extracted from open source projects. 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
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
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
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 Project: signal-cli   Source File: ServiceConfig.java    License: GNU General Public License v3.0 6 votes vote down vote up
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 Project: signal-cli   Source File: JsonSessionStore.java    License: GNU General Public License v3.0 6 votes vote down vote up
@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
@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
@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 Project: signal-cli   Source File: JsonPreKeyStore.java    License: GNU General Public License v3.0 6 votes vote down vote up
@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
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
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
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
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
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
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
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 Project: mollyim-android   Source File: PreKeyEntity.java    License: GNU General Public License v3.0 5 votes vote down vote up
@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
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 Project: mollyim-android   Source File: JsonUtil.java    License: GNU General Public License v3.0 5 votes vote down vote up
@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
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
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 Project: mollyim-android   Source File: AudioHash.java    License: GNU General Public License v3.0 5 votes vote down vote up
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
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
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
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
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
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
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
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
@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
@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);
  }
}